From eb7539b6897e1a0b1199ebf79fe1804539d8c013 Mon Sep 17 00:00:00 2001
From: Mona Muzaffar <mona.muzaffar@gmx.de>
Date: Sat, 3 Jun 2017 18:13:57 +0200
Subject: [PATCH] [!!!][FEATURE] Main install tool refactoring

The patch applies a major refactoring of the "tool" part of the
install tool. As the most visible change, the install tool
application is now split from the "install" backend module menu
entry into four different entries - "Maintenance", "Settings",
"Upgrade" and "Environment". This is in-line with the strategy outline at
https://decisions.typo3.org/t/typo3-system-management-the-big-picture

The patch can be seen as the main separation and split patch to
introduce the integration of the install tool application
into the overall backend look and feel.

On the visible side, single install tool actions that were
spread over the old menu entries like "all configuration" and
friends are now given single "cards" within one of the four
main module entries. The "standalone" version of the install
tool is now similar to the backend view - just without all the
other module menu entries.

Aside from this major visible change, the patch comes with
a main refactoring of the underlying PHP code and click behavior:

* All "action" buttons that initiate something are now ajax based.
  Codewise, this is the major part.
* No main controller loads ext_tables / ext_localconf anymore.
* Main "Install.js" is now mostly a dispatcher to load specific
  requireJs components determined by given clicked main module.
* Major refactorinng of JavaScript output and click-flow.
* Introduce various new "services". Ajax actions always return
  objects and arrays, but no HTML. This is a major step towards
  proper cli and psr-7 integration.

Even with the install tool paradigm "never cache anything", the
application feels very snappy due to slim main controllers
and straight single Ajax action triggers.

Some parts of the internal PHP API of the install tool have been
changed. While the install tool is "internal" anyway, this patch
has been marked as [!!!] to hint extension developers in the
unlikely case it breaks some low level extension.

The state of this major change is not "perfect": There are
various details to improve. However, this patch has more than
9k lines, all major parts work fine and the huge file juggling
prevents other patches from being integrated. Glitches and
further improvements can be done with small patches afterwards.

Resolves: #76084
Releases: master
Change-Id: I2cc93f35c0760fce33c2136d41159c802932dfc4
Reviewed-on: https://review.typo3.org/53109
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Mona Muzaffar <mona.muzaffar@gmx.de>
Tested-by: Mona Muzaffar <mona.muzaffar@gmx.de>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
Reviewed-by: Marco Christian Krenn <krenn@webconsulting.at>
Tested-by: Marco Christian Krenn <krenn@webconsulting.at>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Philipp Hamid <ph@supertrumpf.at>
Tested-by: Philipp Hamid <ph@supertrumpf.at>
---
 .../Public/Sass/component/_callout.scss       |   15 +-
 Build/Resources/Public/Sass/install.scss      |   20 +-
 .../Resources/Public/Sass/libs/_gridder.scss  |  119 ++
 Build/package-lock.json                       |   50 +-
 .../Http/BackendModuleRequestHandler.php      |    9 +-
 .../backend/Resources/Public/Css/backend.css  |    2 +-
 .../Configuration/DefaultConfiguration.php    |    3 +
 ...e-81863-MarkWizardsAsDoneInInstallTool.rst |   20 -
 ...nstallToolModulesIntoBackendModuleMenu.rst |   17 +
 .../Backend/Install/InstallModuleCest.php     |   13 +-
 .../Classes/Configuration/FeatureManager.php  |   16 +-
 .../Controller/Action/AbstractAction.php      |   26 -
 .../Action/Ajax/AbstractAjaxAction.php        |   33 +-
 .../Action/Ajax/ChangeInstallToolPassword.php |   65 +
 .../Controller/Action/Ajax/ClearAllCache.php  |   47 +-
 .../Controller/Action/Ajax/ClearCache.php     |   41 -
 .../Controller/Action/Ajax/ClearTable.php     |   53 +
 .../Action/Ajax/ClearTypo3tempFiles.php       |   59 +
 ...tCoreUpdate.php => CoreUpdateAbstract.php} |   33 +-
 .../Action/Ajax/CoreUpdateActivate.php        |   11 +-
 .../Ajax/CoreUpdateCheckPreConditions.php     |   11 +-
 .../Action/Ajax/CoreUpdateDownload.php        |   11 +-
 .../Ajax/CoreUpdateIsUpdateAvailable.php      |   16 +-
 .../Controller/Action/Ajax/CoreUpdateMove.php |   11 +-
 .../Action/Ajax/CoreUpdateUnpack.php          |    9 +-
 .../Ajax/CoreUpdateUpdateVersionMatrix.php    |   11 +-
 .../Action/Ajax/CoreUpdateVerifyChecksum.php  |   13 +-
 .../Controller/Action/Ajax/CreateAdmin.php    |   90 +
 .../Action/Ajax/DatabaseAnalyzerAnalyze.php   |  189 ++
 .../Action/Ajax/DatabaseAnalyzerExecute.php   |   69 +
 .../Controller/Action/Ajax/DumpAutoload.php   |   47 +-
 ...atus.php => EnvironmentCheckGetStatus.php} |   21 +-
 .../Ajax/ExtensionCompatibilityTester.php     |   21 +-
 .../Action/Ajax/ExtensionScannerFiles.php     |   27 +-
 ...ensionScannerMarkFullyScannedRestFiles.php |   28 +-
 .../Action/Ajax/ExtensionScannerScanFile.php  |   27 +-
 .../Controller/Action/Ajax/FilterManager.php  |   45 -
 .../Controller/Action/Ajax/FolderStatus.php   |   51 -
 .../Action/Ajax/FolderStructureFix.php        |   43 +
 .../Action/Ajax/FolderStructureGetStatus.php  |   57 +
 .../Action/Ajax/ImageProcessing.php           |  724 +++++++
 .../Action/Ajax/LocalConfigurationWrite.php   |   55 +
 .../Controller/Action/Ajax/MailTest.php       |  106 +
 .../Controller/Action/Ajax/PresetActivate.php |   60 +
 .../Action/Ajax/ResetBackendUserUc.php        |   28 +-
 .../Action/Ajax/TcaExtTablesCheck.php         |   39 +-
 .../Action/Ajax/TcaMigrationsCheck.php        |   32 +-
 .../Action/Ajax/UninstallExtension.php        |   17 +-
 ...noredItems.php => UpgradeDocsMarkRead.php} |   11 +-
 ...redItems.php => UpgradeDocsUnmarkRead.php} |   11 +-
 .../UpgradeWizardsBlockingDatabaseAdds.php    |   51 +
 ...gradeWizardsBlockingDatabaseCharsetFix.php |   47 +
 ...radeWizardsBlockingDatabaseCharsetTest.php |   42 +
 .../UpgradeWizardsBlockingDatabaseExecute.php |   51 +
 .../Ajax/UpgradeWizardsDoneUpgrades.php       |   54 +
 .../Action/Ajax/UpgradeWizardsExecute.php     |   46 +
 .../Action/Ajax/UpgradeWizardsInput.php       |   48 +
 .../Action/Ajax/UpgradeWizardsList.php        |   46 +
 .../Action/Ajax/UpgradeWizardsMarkUndone.php  |   58 +
 .../Ajax/UpgradeWizardsSilentUpgrades.php     |   53 +
 .../Action/Tool/AllConfiguration.php          |  200 --
 .../Controller/Action/Tool/CleanUp.php        |  293 ---
 .../Controller/Action/Tool/Configuration.php  |   93 -
 .../Controller/Action/Tool/Environment.php    |  141 ++
 .../Action/Tool/ExtensionScanner.php          |   47 -
 .../Action/Tool/FolderStructure.php           |   69 -
 .../Action/Tool/ImportantActions.php          |  365 ----
 .../Controller/Action/Tool/LoadExtensions.php |   38 -
 .../Controller/Action/Tool/Maintenance.php    |   49 +
 .../Controller/Action/Tool/Settings.php       |   65 +
 .../Action/Tool/SystemEnvironment.php         |   49 -
 .../Controller/Action/Tool/TestSetup.php      |  710 -------
 .../Tool/{UpgradeAnalysis.php => Upgrade.php} |   78 +-
 .../Controller/Action/Tool/UpgradeWizard.php  |  442 -----
 .../Classes/Controller/AjaxController.php     |   59 +-
 .../Controller/BackendModuleController.php    |   36 +-
 .../Classes/Controller/ToolController.php     |   19 +-
 .../Classes/Service/ClearTableService.php     |  114 ++
 .../LocalConfigurationValueService.php        |  179 ++
 .../Service/SqlExpectedSchemaService.php      |  112 --
 .../Classes/Service/Typo3tempFileService.php  |  100 +
 .../Classes/Service/UpgradeWizardsService.php |  380 ++++
 .../install/Classes/Status/AbstractStatus.php |   80 +-
 .../install/Classes/Status/AlertStatus.php    |    1 +
 .../install/Classes/Status/ErrorStatus.php    |    1 +
 .../install/Classes/Status/Exception.php      |    1 +
 .../install/Classes/Status/InfoStatus.php     |    1 +
 .../install/Classes/Status/LoadingStatus.php  |    1 +
 .../install/Classes/Status/NoticeStatus.php   |    1 +
 .../install/Classes/Status/OkStatus.php       |    1 +
 .../Classes/Status/StatusInterface.php        |   20 +-
 .../install/Classes/Status/StatusUtility.php  |   10 +-
 .../install/Classes/Status/WarningStatus.php  |    1 +
 .../Updates/AbstractDatabaseSchemaUpdate.php  |  142 --
 .../Classes/Updates/AbstractUpdate.php        |   49 +-
 .../Classes/Updates/DatabaseCharsetUpdate.php |  126 --
 .../Updates/FinalDatabaseSchemaUpdate.php     |  186 --
 .../Updates/InitialDatabaseSchemaUpdate.php   |  224 ---
 .../sysext/install/Classes/View/JsonView.php  |   94 +-
 .../ViewHelpers/File/ExistsViewHelper.php     |   67 -
 .../File/RelativePathViewHelper.php           |   58 -
 .../Format/ImageMagickCommandsViewHelper.php  |   69 -
 .../Language/ModuleInstallEnvironment.xlf     |   17 +
 .../Language/ModuleInstallMaintenance.xlf     |   17 +
 .../Language/ModuleInstallSettings.xlf        |   17 +
 .../Private/Language/ModuleInstallUpgrade.xlf |   17 +
 .../Private/Layouts/ToolAuthenticated.html    |  106 +-
 .../Partials/Action/Common/Headers.html       |    6 +-
 .../Private/Partials/Action/Common/Left.html  |   25 -
 .../Action/Common/MarkExtensionAsDone.html    |    2 -
 .../Partials/Action/Common/MenuLink.html      |    6 -
 .../Action/Common/MenuModuleLink.html         |   14 +
 .../Partials/Action/Common/ModuleMenu.html    |   61 +
 .../Partials/Action/Common/Topbar.html        |   30 +
 .../Action/Tool/CleanUp/ClearTables.html      |   37 -
 .../Action/Tool/CleanUp/ProcessedFiles.html   |   17 -
 .../Tool/CleanUp/ResetBackendUserUc.html      |   19 -
 .../Action/Tool/CleanUp/Typo3TempFiles.html   |  100 -
 .../Tool/Environment/EnvironmentCheck.html    |   17 +
 .../Tool/Environment/FolderStructure.html     |   28 +
 .../Tool/Environment/ImageProcessing.html     |  346 ++++
 .../Action/Tool/Environment/MailTest.html     |   42 +
 .../Action/Tool/Environment/PhpInfo.html      |    3 +
 .../SystemInformation.html                    |   24 +-
 .../Tool/ImportantActions/ClearAllCache.html  |   30 -
 .../ImportantActions/CoreUpdateButton.html    |   44 -
 .../ImportantActions/CreateAdministrator.html |   45 -
 .../DatabaseAnalyzerButton.html               |   12 -
 .../DatabaseAnalyzerData.html                 |   87 -
 .../DatabaseAnalyzerSuggestion.html           |   36 -
 .../Tool/ImportantActions/DumpAutoload.html   |   11 -
 .../ExtensionCompatibilityTester.html         |   14 -
 .../NewInstallToolPassword.html               |   29 -
 .../ImportantActions/TcaExtTablesCheck.html   |   10 -
 .../ImportantActions/TcaMigrationsCheck.html  |   10 -
 .../Tool/Maintenance/ClearAllCache.html       |   26 +
 .../Action/Tool/Maintenance/ClearTables.html  |   33 +
 .../Tool/Maintenance/ClearTypo3tempFiles.html |   33 +
 .../Action/Tool/Maintenance/CreateAdmin.html  |   55 +
 .../Tool/Maintenance/DatabaseAnalyzer.html    |   57 +
 .../Action/Tool/Maintenance/DumpAutoload.html |   10 +
 .../LastError.html                            |    0
 .../Tool/Maintenance/ResetBackendUserUc.html  |   15 +
 .../Settings/ChangeInstallToolPassword.html   |   40 +
 .../Tool/Settings/LocalConfiguration.html     |   34 +
 .../LocalConfiguration}/SubSection.html       |   73 +-
 .../Action/Tool/Settings/Presets.html         |   37 +
 .../Presets}/Context.html                     |    2 +-
 .../Presets}/Context/Custom.html              |    4 +-
 .../Presets}/Context/Debug.html               |    2 +-
 .../Presets}/Context/Live.html                |    2 +-
 .../Presets}/ExtbaseObjectCache.html          |    2 +-
 .../Presets}/ExtbaseObjectCache/Apc.html      |    2 +-
 .../Presets}/ExtbaseObjectCache/Apcu.html     |    2 +-
 .../Presets}/ExtbaseObjectCache/Database.html |    2 +-
 .../Presets}/Image.html                       |    2 +-
 .../Presets}/Image/Custom.html                |    4 +-
 .../Presets}/Image/GraphicsMagick.html        |    2 +-
 .../Presets}/Image/ImageMagick6.html          |    2 +-
 .../Presets}/Mail.html                        |    2 +-
 .../Presets}/Mail/Custom.html                 |    4 +-
 .../Presets}/Mail/Sendmail.html               |    2 +-
 .../Presets}/Mail/Smtp.html                   |    2 +-
 .../Tool/TestSetup/AboutImageHandling.html    |   51 -
 .../Tool/TestSetup/CombiningImages.html       |   22 -
 .../TestSetup/ConvertImageFormatsToJpg.html   |   37 -
 .../Tool/TestSetup/CurrentConfiguration.html  |   79 -
 .../Tool/TestSetup/DisplayTwinImage.html      |   67 -
 .../Partials/Action/Tool/TestSetup/Gdlib.html |   19 -
 .../Partials/Action/Tool/TestSetup/Mail.html  |   33 -
 .../Action/Tool/TestSetup/ScalingImages.html  |   21 -
 .../Action/Tool/TestSetup/TrueTypeFont.html   |    9 -
 .../Tool/TestSetup/VerifyTestResults.html     |   18 -
 .../Action/Tool/TestSetup/WriteGifAndPng.html |   23 -
 .../Upgrade/CheckForBrokenExtensions.html     |   16 +
 .../Action/Tool/Upgrade/CoreUpdate.html       |   62 +
 .../Action/Tool/Upgrade/ExtensionScanner.html |   99 +
 .../Tool/Upgrade/TcaExtTablesCheck.html       |    7 +
 .../Tool/Upgrade/TcaMigrationsCheck.html      |   11 +
 .../Action/Tool/Upgrade/UpgradeDocs.html      |  106 +
 .../Tool/Upgrade/UpgradeDocs/PanelItem.html   |   30 +
 .../Action/Tool/Upgrade/UpgradeWizards.html   |  116 ++
 .../UpgradeAnalysis/ListDocumentation.html    |   74 -
 .../Tool/UpgradeAnalysis/PanelItem.html       |   32 -
 .../Tool/UpgradeWizard/GetUserInput.html      |   21 -
 .../Tool/UpgradeWizard/ListUpdates.html       |   98 -
 .../Tool/UpgradeWizard/PerformUpdate.html     |   40 -
 .../Templates/Action/Ajax/FilterManager.html  |   22 -
 .../Action/Ajax/RemoveIgnoredItems.html       |    1 -
 .../Private/Templates/Action/Tool/About.html  |  187 --
 .../Action/Tool/AllConfiguration.html         |   76 -
 .../Templates/Action/Tool/CleanUp.html        |   73 -
 .../Templates/Action/Tool/Configuration.html  |   45 -
 .../Templates/Action/Tool/Environment.html    |   81 +
 .../Action/Tool/ExtensionScanner.html         |  105 -
 .../Action/Tool/FolderStructure.html          |   41 -
 .../Action/Tool/ImportantActions.html         |   52 -
 .../Templates/Action/Tool/LoadExtensions.html |   29 -
 .../Templates/Action/Tool/Maintenance.html    |   88 +
 .../Templates/Action/Tool/Settings.html       |   63 +
 .../Action/Tool/SystemEnvironment.html        |   25 -
 .../Templates/Action/Tool/TestSetup.html      |  117 --
 .../Templates/Action/Tool/Upgrade.html        |   88 +
 .../Action/Tool/UpgradeAnalysis.html          |   34 -
 .../Templates/Action/Tool/UpgradeWizard.html  |   24 -
 .../install/Resources/Public/Css/install.css  |    2 +-
 .../Icons/module-install-environment.svg      |    1 +
 .../Icons/module-install-maintenance.svg      |    1 +
 .../Public/Icons/module-install-settings.svg  |    1 +
 .../Public/Icons/module-install-upgrade.svg   |    1 +
 .../Resources/Public/Icons/module-install.svg |    1 -
 .../Resources/Public/JavaScript/Install.js    | 1726 +----------------
 .../Public/JavaScript/Modules/Cache.js        |   61 +
 .../Public/JavaScript/Modules/CardLayout.js   |   94 +
 .../Modules/ChangeInstallToolPassword.js      |   67 +
 .../Modules/CheckForBrokenExtensions.js       |  219 +++
 .../Public/JavaScript/Modules/ClearTable.js   |   69 +
 .../JavaScript/Modules/ClearTypo3tempFiles.js |   68 +
 .../Public/JavaScript/Modules/CoreUpdate.js   |  258 +++
 .../Public/JavaScript/Modules/CreateAdmin.js  |   69 +
 .../JavaScript/Modules/DatabaseAnalyzer.js    |  162 ++
 .../Public/JavaScript/Modules/DumpAutoload.js |   61 +
 .../JavaScript/Modules/EnvironmentCheck.js    |   91 +
 .../JavaScript/Modules/ExtensionScanner.js    |  305 +++
 .../Public/JavaScript/Modules/FlashMessage.js |   49 +
 .../JavaScript/Modules/FolderStructure.js     |  141 ++
 .../JavaScript/Modules/ImageProcessing.js     |  112 ++
 .../Public/JavaScript/Modules/InfoBox.js      |   49 +
 .../JavaScript/Modules/LocalConfiguration.js  |  174 ++
 .../Public/JavaScript/Modules/MailTest.js     |   73 +
 .../Public/JavaScript/Modules/ModuleMenu.js   |  305 +++
 .../Public/JavaScript/Modules/Presets.js      |   79 +
 .../Public/JavaScript/Modules/ProgressBar.js  |   48 +
 .../JavaScript/Modules/ResetBackendUserUc.js  |   62 +
 .../Public/JavaScript/Modules/Severity.js     |   55 +
 .../JavaScript/Modules/TcaExtTablesCheck.js   |   77 +
 .../JavaScript/Modules/TcaMigrationsCheck.js  |   77 +
 .../Public/JavaScript/Modules/UpgradeDocs.js  |  201 ++
 .../JavaScript/Modules/UpgradeWizards.js      |  498 +++++
 .../Public/JavaScript/RequireJSConfig.js      |   20 +
 .../Ajax/ExtensionCompatibilityTesterTest.php |   32 +-
 .../Unit/FolderStructure/LinkNodeTest.php     |    1 +
 .../Unit/Service/ClearTableServiceTest.php}   |   19 +-
 .../Unit/Service/CoreUpdateServiceTest.php    |    6 +-
 .../Unit/Service/CoreVersionServiceTest.php   |    3 +-
 .../SilentConfigurationUpgradeServiceTest.php |    3 +-
 .../Unit/Service/Typo3tempFileServiceTest.php |   46 +
 .../Tests/Unit/Status/AbstractStatusTest.php  |   50 +
 .../Tests/Unit/Status/StatusUtilityTest.php   |   53 +-
 .../install/Tests/Unit/View/JsonViewTest.php  |   40 +-
 typo3/sysext/install/composer.json            |    3 +-
 typo3/sysext/install/ext_localconf.php        |   16 +
 typo3/sysext/install/ext_tables.php           |   69 +-
 253 files changed, 9397 insertions(+), 7992 deletions(-)
 create mode 100644 Build/Resources/Public/Sass/libs/_gridder.scss
 delete mode 100644 typo3/sysext/core/Documentation/Changelog/master/Feature-81863-MarkWizardsAsDoneInInstallTool.rst
 create mode 100644 typo3/sysext/core/Documentation/Changelog/master/Important-76084-MoveInstallToolModulesIntoBackendModuleMenu.rst
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/ChangeInstallToolPassword.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/ClearCache.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/ClearTable.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/ClearTypo3tempFiles.php
 rename typo3/sysext/install/Classes/Controller/Action/Ajax/{AbstractCoreUpdate.php => CoreUpdateAbstract.php} (75%)
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/CreateAdmin.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/DatabaseAnalyzerAnalyze.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/DatabaseAnalyzerExecute.php
 rename typo3/sysext/install/Classes/Controller/Action/Ajax/{EnvironmentStatus.php => EnvironmentCheckGetStatus.php} (66%)
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/FilterManager.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStatus.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStructureFix.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStructureGetStatus.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/ImageProcessing.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/LocalConfigurationWrite.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/MailTest.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/PresetActivate.php
 rename typo3/sysext/install/Classes/Controller/Action/Ajax/{SaveIgnoredItems.php => UpgradeDocsMarkRead.php} (85%)
 rename typo3/sysext/install/Classes/Controller/Action/Ajax/{RemoveIgnoredItems.php => UpgradeDocsUnmarkRead.php} (85%)
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseAdds.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseCharsetFix.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseCharsetTest.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseExecute.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsDoneUpgrades.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsExecute.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsInput.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsList.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsMarkUndone.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsSilentUpgrades.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/AllConfiguration.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/CleanUp.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/Configuration.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/Environment.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/ExtensionScanner.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/FolderStructure.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/ImportantActions.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/LoadExtensions.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/Maintenance.php
 create mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/Settings.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/SystemEnvironment.php
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/TestSetup.php
 rename typo3/sysext/install/Classes/Controller/Action/Tool/{UpgradeAnalysis.php => Upgrade.php} (53%)
 delete mode 100644 typo3/sysext/install/Classes/Controller/Action/Tool/UpgradeWizard.php
 create mode 100644 typo3/sysext/install/Classes/Service/ClearTableService.php
 create mode 100644 typo3/sysext/install/Classes/Service/LocalConfigurationValueService.php
 delete mode 100644 typo3/sysext/install/Classes/Service/SqlExpectedSchemaService.php
 create mode 100644 typo3/sysext/install/Classes/Service/Typo3tempFileService.php
 create mode 100644 typo3/sysext/install/Classes/Service/UpgradeWizardsService.php
 delete mode 100644 typo3/sysext/install/Classes/Updates/AbstractDatabaseSchemaUpdate.php
 delete mode 100644 typo3/sysext/install/Classes/Updates/DatabaseCharsetUpdate.php
 delete mode 100644 typo3/sysext/install/Classes/Updates/FinalDatabaseSchemaUpdate.php
 delete mode 100644 typo3/sysext/install/Classes/Updates/InitialDatabaseSchemaUpdate.php
 delete mode 100644 typo3/sysext/install/Classes/ViewHelpers/File/ExistsViewHelper.php
 delete mode 100644 typo3/sysext/install/Classes/ViewHelpers/File/RelativePathViewHelper.php
 delete mode 100644 typo3/sysext/install/Classes/ViewHelpers/Format/ImageMagickCommandsViewHelper.php
 create mode 100644 typo3/sysext/install/Resources/Private/Language/ModuleInstallEnvironment.xlf
 create mode 100644 typo3/sysext/install/Resources/Private/Language/ModuleInstallMaintenance.xlf
 create mode 100644 typo3/sysext/install/Resources/Private/Language/ModuleInstallSettings.xlf
 create mode 100644 typo3/sysext/install/Resources/Private/Language/ModuleInstallUpgrade.xlf
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/Left.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/MarkExtensionAsDone.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/MenuLink.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/MenuModuleLink.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/ModuleMenu.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Common/Topbar.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ClearTables.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ProcessedFiles.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ResetBackendUserUc.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/Typo3TempFiles.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/EnvironmentCheck.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/FolderStructure.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/ImageProcessing.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/MailTest.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/PhpInfo.html
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{ImportantActions => Environment}/SystemInformation.html (70%)
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ClearAllCache.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CoreUpdateButton.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CreateAdministrator.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerButton.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerData.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DumpAutoload.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ExtensionCompatibilityTester.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/NewInstallToolPassword.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/TcaExtTablesCheck.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/TcaMigrationsCheck.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearAllCache.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearTables.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearTypo3tempFiles.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/CreateAdmin.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/DatabaseAnalyzer.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/DumpAutoload.html
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{ImportantActions => Maintenance}/LastError.html (100%)
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ResetBackendUserUc.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/ChangeInstallToolPassword.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/LocalConfiguration.html
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{AllConfiguration => Settings/LocalConfiguration}/SubSection.html (55%)
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets.html
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Context.html (91%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Context/Custom.html (90%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Context/Debug.html (90%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Context/Live.html (90%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/ExtbaseObjectCache.html (90%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/ExtbaseObjectCache/Apc.html (94%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/ExtbaseObjectCache/Apcu.html (94%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/ExtbaseObjectCache/Database.html (91%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Image.html (94%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Image/Custom.html (90%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Image/GraphicsMagick.html (94%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Image/ImageMagick6.html (94%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Mail.html (90%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Mail/Custom.html (89%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Mail/Sendmail.html (93%)
 rename typo3/sysext/install/Resources/Private/Partials/Action/Tool/{Configuration => Settings/Presets}/Mail/Smtp.html (93%)
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/AboutImageHandling.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CombiningImages.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ConvertImageFormatsToJpg.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CurrentConfiguration.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/DisplayTwinImage.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Gdlib.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Mail.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ScalingImages.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/TrueTypeFont.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/VerifyTestResults.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/WriteGifAndPng.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/CheckForBrokenExtensions.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/CoreUpdate.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/ExtensionScanner.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/TcaExtTablesCheck.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/TcaMigrationsCheck.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeDocs.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeDocs/PanelItem.html
 create mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeWizards.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeAnalysis/ListDocumentation.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeAnalysis/PanelItem.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/GetUserInput.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/ListUpdates.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/PerformUpdate.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Ajax/FilterManager.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Ajax/RemoveIgnoredItems.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/About.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/AllConfiguration.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/CleanUp.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/Configuration.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/Environment.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/ExtensionScanner.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/FolderStructure.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/ImportantActions.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/LoadExtensions.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/Maintenance.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/Settings.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/SystemEnvironment.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/TestSetup.html
 create mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/Upgrade.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpgradeAnalysis.html
 delete mode 100644 typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpgradeWizard.html
 create mode 100644 typo3/sysext/install/Resources/Public/Icons/module-install-environment.svg
 create mode 100644 typo3/sysext/install/Resources/Public/Icons/module-install-maintenance.svg
 create mode 100644 typo3/sysext/install/Resources/Public/Icons/module-install-settings.svg
 create mode 100644 typo3/sysext/install/Resources/Public/Icons/module-install-upgrade.svg
 delete mode 100644 typo3/sysext/install/Resources/Public/Icons/module-install.svg
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/Cache.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/CardLayout.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/ChangeInstallToolPassword.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/CheckForBrokenExtensions.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/ClearTable.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/ClearTypo3tempFiles.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/CoreUpdate.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/CreateAdmin.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/DatabaseAnalyzer.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/DumpAutoload.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/EnvironmentCheck.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/ExtensionScanner.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/FlashMessage.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/FolderStructure.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/ImageProcessing.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/InfoBox.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/LocalConfiguration.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/MailTest.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/ModuleMenu.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/Presets.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/ProgressBar.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/ResetBackendUserUc.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/Severity.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/TcaExtTablesCheck.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/TcaMigrationsCheck.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/UpgradeDocs.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/Modules/UpgradeWizards.js
 create mode 100644 typo3/sysext/install/Resources/Public/JavaScript/RequireJSConfig.js
 rename typo3/sysext/install/{Classes/Controller/Action/Tool/About.php => Tests/Unit/Service/ClearTableServiceTest.php} (50%)
 create mode 100644 typo3/sysext/install/Tests/Unit/Service/Typo3tempFileServiceTest.php
 create mode 100644 typo3/sysext/install/Tests/Unit/Status/AbstractStatusTest.php

diff --git a/Build/Resources/Public/Sass/component/_callout.scss b/Build/Resources/Public/Sass/component/_callout.scss
index 938d407ff64f..46ac258e9f65 100644
--- a/Build/Resources/Public/Sass/component/_callout.scss
+++ b/Build/Resources/Public/Sass/component/_callout.scss
@@ -109,7 +109,20 @@ $callout-notice-border: $state-notice-border;
 }
 
 //
-// Variants
+// Size Variants
+//
+.callout-sm {
+    margin: 10px 0;
+    padding: $callout-padding/2;
+
+    .callout-title {
+        font-size: 1em;
+        margin: 0;
+    }
+}
+
+//
+// Color Variants
 //
 @mixin callout-variant($background, $border, $text-color, $icon-color) {
     background-color: $background;
diff --git a/Build/Resources/Public/Sass/install.scss b/Build/Resources/Public/Sass/install.scss
index 83b015b9967e..dc99de20a465 100644
--- a/Build/Resources/Public/Sass/install.scss
+++ b/Build/Resources/Public/Sass/install.scss
@@ -3,11 +3,11 @@
 // =========
 // Contains all needed styles for the TYPO3 Intall Tool.
 //
-
 //
 // Load global Variables
 //
 @import "variables/main";
+
 $grid-float-breakpoint: $screen-md-min;
 
 //
@@ -19,6 +19,18 @@ $grid-float-breakpoint: $screen-md-min;
 // Include chosen CSS file
 //
 @import "libs/chosen";
+@import "libs/gridder";
+@import "component/card";
+
+//
+// Include elements
+//
+
+@import "typo3/element_docheader";
+
+body.backend .module {
+    background: $gray-lighter;
+}
 
 .content-area {
     padding-bottom: 35px;
@@ -298,15 +310,15 @@ a[data-toggle="collapse"] {
     text-decoration: none;
 }
 
-.panel-group-rst,
-.panel-group-flat {
+.panel-group-flat,
+.panel-group-rst {
     .panel-body {
         padding-right: 0;
     }
 }
 
-.panel-rst,
 .panel-flat,
+.panel-rst,
 .panel-version {
     border: 0;
     border-left: 2px solid $gray-light;
diff --git a/Build/Resources/Public/Sass/libs/_gridder.scss b/Build/Resources/Public/Sass/libs/_gridder.scss
new file mode 100644
index 000000000000..530dc761420e
--- /dev/null
+++ b/Build/Resources/Public/Sass/libs/_gridder.scss
@@ -0,0 +1,119 @@
+//
+// Gridder
+// ====
+// Gridder for typo3
+//
+//
+// Variables
+//
+$gridder-spacing: 15px;
+$gridder-padding: 10px;
+$gridder-show-bg: white;
+$gridder-base-color: #000;
+$gridder-border-color: lighten($gridder-base-color, 80);
+$gridder-border-hover-color: lighten($gridder-base-color, 70);
+$gridder-shadow-color: transparentize($gridder-base-color, 0.8);
+$gridder-shadow-hover-color: transparentize($gridder-base-color, 0.7);
+$gridder-badge-size: 20px;
+
+@mixin rowMachine($numPerRow, $margin) {
+    width: (100% / $numPerRow);
+}
+
+// VITAL CSS
+.gridder {
+    margin: $gridder-spacing;
+    margin-left: -$gridder-spacing;
+    margin-right: -$gridder-spacing;
+    padding: 0;
+    list-style-type: none;
+    font-size: 0;
+}
+
+.gridder-list,
+.gridder-show {
+    font-size: $font-size-base;
+}
+
+.gridder-list {
+    display: inline-block;
+    vertical-align: top;
+    padding-left: $gridder-spacing;
+    padding-right: $gridder-spacing;
+    position: relative;
+
+    &.selectedItem:after {
+        position: absolute;
+        border: $gridder-spacing solid transparent;
+        border-bottom-color: $gridder-show-bg;
+        border-top: 0;
+        bottom: 0;
+        left: 50%;
+        margin-left: -$gridder-spacing/2;
+        content: '';
+    }
+
+    .gridder-item {
+        background-color: white;
+        box-shadow: 0 2px 0 $gridder-shadow-color;
+        border: 1px solid $gridder-border-color;
+        margin-bottom: $gridder-spacing*2;
+        padding: $gridder-padding;
+        min-height: 200px;
+        transition: all 0.2s ease-in-out;
+        transition-property: box-shadow, border, transform;
+        cursor: pointer;
+        position: relative;
+
+        &:focus,
+        &:hover {
+            text-decoration: none;
+            border: 1px solid $gridder-border-hover-color;
+            transform: translate(0, -1px);
+            box-shadow: 0 3px 0 $gridder-shadow-hover-color;
+        }
+
+        .label {
+            padding: 3px 6px;
+            font-size: 12px;
+            vertical-align: top;
+            border-radius: 10px;
+            min-width: 28px;
+            display: inline-block;
+        }
+    }
+}
+
+.gridder-show {
+    background-color: $gridder-show-bg;
+    display: block;
+    float: left;
+    width: 100%;
+    position: relative;
+    margin-bottom: $gridder-spacing;
+
+    .gridder-padding {
+        padding: $gridder-spacing*2;
+    }
+
+    .gridder-title {
+        border-bottom: 1px solid $gridder-border-color;
+        margin-bottom: $gridder-spacing;
+    }
+}
+
+.gridder-content {
+    display: none;
+}
+
+.gridder-list {
+    @include rowMachine(1, $gridder-spacing);
+
+    @media (min-width: $screen-sm-min) {
+        @include rowMachine(2, $gridder-spacing);
+    }
+
+    @media (min-width: $screen-md-min) {
+        @include rowMachine(4, $gridder-spacing);
+    }
+}
diff --git a/Build/package-lock.json b/Build/package-lock.json
index b14b75767f3b..a5a027ee0fb1 100644
--- a/Build/package-lock.json
+++ b/Build/package-lock.json
@@ -76,6 +76,16 @@
       "integrity": "sha1-YeH7qUYi+/pc/TbWO7bUKd9+tsY=",
       "dev": true
     },
+    "JSONStream": {
+      "version": "0.8.4",
+      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
+      "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
+      "dev": true,
+      "requires": {
+        "jsonparse": "0.0.5",
+        "through": "2.3.8"
+      }
+    },
     "abbrev": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
@@ -3352,16 +3362,6 @@
       "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
       "dev": true
     },
-    "JSONStream": {
-      "version": "0.8.4",
-      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
-      "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
-      "dev": true,
-      "requires": {
-        "jsonparse": "0.0.5",
-        "through": "2.3.8"
-      }
-    },
     "jsprim": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
@@ -4363,12 +4363,6 @@
                 }
               }
             },
-            "string_decoder": {
-              "version": "0.10.31",
-              "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-              "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
-              "dev": true
-            },
             "string-width": {
               "version": "1.0.2",
               "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
@@ -4380,6 +4374,12 @@
                 "strip-ansi": "3.0.1"
               }
             },
+            "string_decoder": {
+              "version": "0.10.31",
+              "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+              "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+              "dev": true
+            },
             "stringstream": {
               "version": "0.0.5",
               "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
@@ -7214,15 +7214,6 @@
         "through": "2.3.8"
       }
     },
-    "string_decoder": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
-      "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "5.1.1"
-      }
-    },
     "string-width": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
@@ -7234,6 +7225,15 @@
         "strip-ansi": "3.0.1"
       }
     },
+    "string_decoder": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
+      "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.1.1"
+      }
+    },
     "stringstream": {
       "version": "0.0.5",
       "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
diff --git a/typo3/sysext/backend/Classes/Http/BackendModuleRequestHandler.php b/typo3/sysext/backend/Classes/Http/BackendModuleRequestHandler.php
index 43a733d3c17f..64c6df3ade56 100644
--- a/typo3/sysext/backend/Classes/Http/BackendModuleRequestHandler.php
+++ b/typo3/sysext/backend/Classes/Http/BackendModuleRequestHandler.php
@@ -141,7 +141,6 @@ class BackendModuleRequestHandler implements RequestHandlerInterface
     {
         $moduleConfiguration = $this->getModuleConfiguration($moduleName);
 
-        /** @var Response $response */
         $response = GeneralUtility::makeInstance(Response::class);
 
         // Check permissions and exit if the user has no permission for entry
@@ -165,6 +164,14 @@ class BackendModuleRequestHandler implements RequestHandlerInterface
         if (isset($moduleConfiguration['routeTarget'])) {
             $dispatcher = GeneralUtility::makeInstance(Dispatcher::class);
             $this->request = $this->request->withAttribute('target', $moduleConfiguration['routeTarget']);
+            // @internal routeParameters are a helper construct for the install tool only.
+            // @todo: remove this, after sub-actions in install tool can be addressed directly
+            if (!empty($moduleConfiguration['routeParameters'])) {
+                $this->request = $this->request->withQueryParams(array_merge_recursive(
+                    $this->request->getQueryParams(),
+                    $moduleConfiguration['routeParameters']
+                ));
+            }
             $response = $dispatcher->dispatch($this->request, $response);
         } else {
             // extbase module
diff --git a/typo3/sysext/backend/Resources/Public/Css/backend.css b/typo3/sysext/backend/Resources/Public/Css/backend.css
index f62b50786780..34ea56d4bb83 100644
--- a/typo3/sysext/backend/Resources/Public/Css/backend.css
+++ b/typo3/sysext/backend/Resources/Public/Css/backend.css
@@ -10,4 +10,4 @@
  * 
  * The TYPO3 project - inspiring people to share!
  */
-@charset "UTF-8";.minicolors-panel,.minicolors-picker,hr{box-sizing:content-box}.fa-ul>li,sub,sup{position:relative}.fa-fw,.fa-li{text-align:center}.cropper-container,html{-webkit-tap-highlight-color:transparent}.card,.img-thumbnail{-webkit-transition:all .2s ease-in-out}.img-responsive,.img-thumbnail,.table,label{max-width:100%}.btn,.modulemenu .modulemenu-group-header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.t3-grid-table,.table-fixed{table-layout:fixed}#nprogress,.cropper .cropper-crop-box:after,.form-control-feedback,a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}.fa,.fa-stack{display:inline-block}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.open>.btn-danger.dropdown-toggle,.open>.btn-default.dropdown-toggle,.open>.btn-info.dropdown-toggle,.open>.btn-success.dropdown-toggle,.open>.btn-warning.dropdown-toggle{background-image:none}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{margin-top:18px;margin-bottom:18px}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}td,th{padding:0}@font-face{font-family:FontAwesome;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?v=4.7.0);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff2?v=4.7.0) format("woff2"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff?v=4.7.0) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.ttf?v=4.7.0) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.fa-stack,.radio-inline,img{vertical-align:middle}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.svg#Share-BoldRegular) format("svg");font-weight:700;font-style:normal}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.svg#Share-ItalicRegular) format("svg");font-weight:400;font-style:italic}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.svg#Share-Regular) format("svg");font-weight:400;font-style:normal}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.svg#Share-BoldItalicRegular) format("svg");font-weight:700;font-style:italic}*,:after,:before{box-sizing:border-box}html{font-size:10px}body{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;line-height:1.5;color:#000;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{background-color:transparent;color:#212424;text-decoration:none}a:focus,a:hover{color:#000;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}figure{margin:0}.img-responsive{display:block;height:auto}.img-rounded{border-radius:2px}.img-thumbnail{padding:4px;line-height:1.5;background-color:#fff;border:1px solid #ddd;border-radius:2px;transition:all .2s ease-in-out;display:inline-block;height:auto}.img-circle{border-radius:50%}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after,.bootstrap-datetimepicker-widget .btn[data-action=clear]::after,.bootstrap-datetimepicker-widget .btn[data-action=today]::after,.bootstrap-datetimepicker-widget .picker-switch::after,.bootstrap-datetimepicker-widget table th.next::after,.bootstrap-datetimepicker-widget table th.prev::after,.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#737373}.h1,.h2,.h3,h1,h2,h3{margin-top:18px;margin-bottom:9px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:9px;margin-bottom:9px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:27px}.h2,h2{font-size:19px}.h3,h3{font-size:17px}.h4,h4{font-size:15px}.h5,h5{font-size:12px}.h6,h6{font-size:11px}p{margin:0 0 9px}.lead{margin-bottom:18px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}@media (min-width:768px){.lead{font-size:18px}}.small,small{font-size:91%}.mark,mark{background-color:#fbefdd;padding:.2em}.list-inline,.list-unstyled,.modulemenu .modulemenu-group-container{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#737373}.text-primary{color:#0078e6}a.text-primary:focus,a.text-primary:hover{color:#005db3}.text-success{color:#79a548}a.text-success:focus,a.text-success:hover{color:#5f8139}.text-info{color:#6daae0}a.text-info:focus,a.text-info:hover{color:#4392d7}.text-warning{color:#e8a33d}a.text-warning:focus,a.text-warning:hover{color:#d88b1a}.text-danger{color:#c83c3c}a.text-danger:focus,a.text-danger:hover{color:#a32e2e}.bg-primary{color:#fff;background-color:#0078e6}a.bg-primary:focus,a.bg-primary:hover{background-color:#005db3}.bg-success{background-color:#d1e2bd}a.bg-success:focus,a.bg-success:hover{background-color:#b8d39a}.bg-info{background-color:#ebf3fb}a.bg-info:focus,a.bg-info:hover{background-color:#c1dbf2}.bg-warning{background-color:#fbefdd}a.bg-warning:focus,a.bg-warning:hover{background-color:#f6d9af}.bg-danger{background-color:#efc7c7}a.bg-danger:focus,a.bg-danger:hover{background-color:#e49f9f}.page-header{padding-bottom:8px;margin:36px 0 18px;border-bottom:1px solid #f5f5f5}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}ol,ul{margin-bottom:9px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-bottom:18px}dd,dt{line-height:1.5}dd{margin-left:0}.dl-horizontal dd:after,.form-irre-header-body dl dd:after{content:"";display:table;clear:both}@media (min-width:768px){.dl-horizontal dt,.form-irre-header-body dl dt{float:left;width:70px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd,.form-irre-header-body dl dd{margin-left:90px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #d7d7d7}.initialism{font-size:90%}blockquote{padding:9px 18px;margin:0 0 18px;font-size:15px;border-left:5px solid #f5f5f5}.container,.container-fluid{margin-right:auto;margin-left:auto}.table,address{margin-bottom:18px}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.5;color:#d7d7d7}legend,pre{color:#5a5a5a}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #f5f5f5;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%;border-radius:2px}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{font-style:normal;line-height:1.5}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4}kbd{color:#fff;background-color:#333;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{display:block;padding:8.5px;font-size:11px;line-height:1.5;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:2px}.container-fluid:after,.container:after,.row:after{display:table;content:"";clear:both}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{max-height:340px;overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-1{width:8.33333333%}.col-xs-2{width:16.66666667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333%}.col-xs-5{width:41.66666667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333333%}.col-xs-8{width:66.66666667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333%}.col-xs-11{width:91.66666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333333%}.col-xs-push-2{left:16.66666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333333%}.col-xs-push-5{left:41.66666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333333%}.col-xs-push-8{left:66.66666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333333%}.col-xs-push-11{left:91.66666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-12{margin-left:100%}}table{border-collapse:collapse;border-spacing:0;background-color:#fafafa}.btn-group-justified,.input-group,.t3-grid-table{border-collapse:separate}caption{padding-top:6px;padding-bottom:6px;color:#737373}.table{width:100%}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:6px;line-height:1.5;border-top:1px solid #ccc}.table>thead>tr>th{border-bottom:2px solid #ccc}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ccc}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:6px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ccc}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f7f7f7}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#ededed}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.dropdown-menu{float:left}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e1e0e0}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#d1e2bd}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#c4dbab}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#ebf3fb}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#d6e7f6}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fbefdd}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#f8e4c6}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#efc7c7}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#eab3b3}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:13.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ccc}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.carousel-inner,.collapsing,.dropdown-menu .divider,.embed-responsive,.modal,.modal-open,.nav .nav-divider,.progress,html{overflow:hidden}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{display:block;width:100%;margin-bottom:18px;font-size:18px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:12px;line-height:1.5;color:#333;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:32px;padding:6px;background-color:#fefefe;border:1px solid #bbb;border-radius:2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#aaa;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(170,170,170,.6)}.form-control::-moz-placeholder{color:#d7d7d7;opacity:1}.form-control:-ms-input-placeholder{color:#d7d7d7}.form-control::-webkit-input-placeholder{color:#d7d7d7}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#79a548}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#f5f5f5;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:32px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:26px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:41.2px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:18px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:30px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:26px;padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:26px;line-height:26px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:26px;padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.form-group-sm select.form-control{height:26px;line-height:26px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:26px;min-height:29px;padding:5px 4px;font-size:11px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:41.2px;padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:41.2px;line-height:41.2px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:41.2px;padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.form-group-lg select.form-control{height:41.2px;line-height:41.2px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:41.2px;min-height:33px;padding:13px 12px;font-size:15px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:32px;height:32px;line-height:32px;text-align:center}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:41.2px;height:41.2px;line-height:41.2px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:26px;height:26px;line-height:26px}.has-success .form-control{border-color:#79a548;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#5f8139;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #abcb88}.has-success .input-group-addon{color:#79a548;border-color:#79a548;background-color:#d1e2bd}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#e8a33d}.has-warning .form-control{border-color:#e8a33d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#d88b1a;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f3ce98}.has-warning .input-group-addon{color:#e8a33d;border-color:#e8a33d;background-color:#fbefdd}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#c83c3c}.has-error .form-control{border-color:#c83c3c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#a32e2e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #de8c8c}.has-error .input-group-addon{color:#c83c3c;border-color:#c83c3c;background-color:#efc7c7}.has-feedback label~.form-control-feedback{top:23px}.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=incrementHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=incrementMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=decrementHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=decrementMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=showHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=showMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=togglePeriod]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=clear]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=today]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.picker-switch::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=incrementHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=incrementMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=decrementHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=decrementMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=showHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=showMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=togglePeriod]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=clear]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=today]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.picker-switch::after~.form-control-feedback,.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#404040}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:25px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after{content:"";display:table;clear:both}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:13px;font-size:15px}.form-horizontal .form-group-sm .control-label{padding-top:5px;font-size:11px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px;font-size:12px;line-height:1.5;border-radius:2px;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}.btn-default{color:#333;background-color:#eee;border-color:#bbb}.btn-default.focus,.btn-default:focus{color:#333;background-color:#d5d4d4;border-color:#7b7b7b}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{color:#333;background-color:#d5d4d4;border-color:#9c9c9c}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#333;background-color:#c3c3c3;border-color:#7b7b7b}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#eee;border-color:#bbb}.btn-default .badge{color:#eee;background-color:#333}.btn-primary{color:#fff;background-color:#0078e6;border-color:#006bcd}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#005db3;border-color:#00284d}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#005db3;border-color:#004b8f}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#004b8f;border-color:#00284d}.btn-primary.active,.btn-primary:active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#0078e6;border-color:#006bcd}.btn-primary .badge{color:#0078e6;background-color:#fff}.btn-success{color:#fff;background-color:#79a548;border-color:#6c9340}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#5f8139;border-color:#2b3a1a}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#5f8139;border-color:#4d692e}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#4d692e;border-color:#2b3a1a}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#79a548;border-color:#6c9340}.btn-success .badge{color:#79a548;background-color:#fff}.btn-info{color:#fff;background-color:#6daae0;border-color:#589edc}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#4392d7;border-color:#205e94}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#4392d7;border-color:#2b80cb}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#2b80cb;border-color:#205e94}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#6daae0;border-color:#589edc}.btn-info .badge{color:#6daae0;background-color:#fff}.btn-warning{color:#fff;background-color:#e8a33d;border-color:#e59826}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#d88b1a;border-color:#7d510f}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#d88b1a;border-color:#b87716}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#b87716;border-color:#7d510f}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#e8a33d;border-color:#e59826}.btn-warning .badge{color:#e8a33d;background-color:#fff}.btn-danger{color:#fff;background-color:#c83c3c;border-color:#b73434}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#a32e2e;border-color:#531818}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#a32e2e;border-color:#872626}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#872626;border-color:#531818}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c83c3c;border-color:#b73434}.btn-danger .badge{color:#c83c3c;background-color:#fff}.btn-link{color:#212424;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#000;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#d7d7d7;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.btn-group-sm>.btn,.btn-sm{padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.btn-group-xs>.btn,.btn-xs{padding:2px 4px;font-size:11px;line-height:1.5;border-radius:2px}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-block{display:block}.btn-block+.btn-block{margin-top:5px}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;list-style:none;font-size:12px;text-align:left;background-color:#292929;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.5;white-space:nowrap}.dropdown-menu .divider{height:1px;margin:8px 0;background-color:#424242}.dropdown-menu>li>a{clear:both;font-weight:400;color:#fff}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#fff;background-color:#424242}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#424242}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#d7d7d7}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:11px;color:#d7d7d7}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after{content:"";display:table;clear:both}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after{content:"";display:table;clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:2px 2px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 2px 2px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group,.input-group-btn,.input-group-btn>.btn{position:relative}.input-group{display:table}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px;font-size:12px;font-weight:400;line-height:1;color:#333;text-align:center;background-color:#f5f5f5;border:1px solid #bbb;border-radius:2px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:4px;font-size:11px;border-radius:2px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:12px;font-size:15px;border-radius:2px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after{content:"";display:table;clear:both}.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:6px 12px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#f5f5f5}.nav>li.disabled>a{color:#d7d7d7}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#5a5a5a;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#f5f5f5;border-color:#212424}.nav .nav-divider{height:1px;margin:8px 0;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ccc}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{line-height:1.5;border:1px solid transparent;border-radius:2px 2px 0 0}.nav-tabs>li>a:hover{border-color:#d7d7d7 #d7d7d7 #ccc}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#000;cursor:default}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li,.nav-tabs.nav-justified>li{float:none}.nav-pills>li>a{border-radius:2px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#0078e6}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.btn .badge,.btn .label{top:-1px;position:relative}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:2px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ccc}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ccc;border-radius:2px 2px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#ccc}}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.pagination{display:inline-block;padding-left:0;margin:18px 0;border-radius:2px}.label,.pagination>li{display:inline}.alert,.thumbnail{margin-bottom:18px}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px;line-height:1.5;text-decoration:none;color:#212424;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span,.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span,.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span,.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#000;background-color:#f5f5f5;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#0078e6;border-color:#0078e6;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#d7d7d7;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:12px;font-size:15px;line-height:1.3333333}.pagination-sm>li>a,.pagination-sm>li>span{padding:4px;font-size:11px;line-height:1.5}.badge,.label{color:#fff;line-height:1;white-space:nowrap;font-weight:700}.label{padding:.2em .6em .3em;font-size:75%;text-align:center;vertical-align:baseline;border-radius:.25em}.badge,.progress-bar{font-size:11px;text-align:center}.label:empty{display:none}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default,.label-excludeFromUpdates,.label-obsolete,.label-test{background-color:#d7d7d7}.label-default[href]:focus,.label-default[href]:hover,[href].label-excludeFromUpdates:focus,[href].label-excludeFromUpdates:hover,[href].label-obsolete:focus,[href].label-obsolete:hover,[href].label-test:focus,[href].label-test:hover{background-color:#bebdbd}.label-primary{background-color:#0078e6}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#005db3}.label-stable,.label-success{background-color:#79a548}.label-success[href]:focus,.label-success[href]:hover,[href].label-stable:focus,[href].label-stable:hover{background-color:#5f8139}.label-experimental,.label-info{background-color:#6daae0}.label-info[href]:focus,.label-info[href]:hover,[href].label-experimental:focus,[href].label-experimental:hover{background-color:#4392d7}.label-beta,.label-warning{background-color:#e8a33d}.label-warning[href]:focus,.label-warning[href]:hover,[href].label-beta:focus,[href].label-beta:hover{background-color:#d88b1a}.label-alpha,.label-danger,.label-deprecated{background-color:#c83c3c}.label-danger[href]:focus,.label-danger[href]:hover,[href].label-alpha:focus,[href].label-alpha:hover,[href].label-deprecated:focus,[href].label-deprecated:hover{background-color:#a32e2e}.badge{display:inline-block;min-width:10px;padding:3px 7px;vertical-align:middle;background-color:#737373;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#212424;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.thumbnail{padding:4px;line-height:1.5;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.alert,.progress{border-radius:2px}.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#000}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#212424}.alert-danger,.alert-info,.alert-success,.alert-warning{border-color:transparent}.alert-danger hr,.alert-info hr,.alert-success hr,.alert-warning hr{border-top-color:transparent}.alert{padding:11px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:31px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{background-color:#79a548;color:#fff}.alert-success .alert-link{color:#e6e5e5}.alert-info{background-color:#6daae0;color:#fff}.alert-info .alert-link{color:#e6e5e5}.alert-warning{background-color:#e8a33d;color:#fff}.alert-warning .alert-link{color:#e6e5e5}.alert-danger{background-color:#c83c3c;color:#fff}.alert-danger .alert-link{color:#e6e5e5}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:18px;margin-bottom:18px;background-color:#dedede;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;line-height:18px;color:#fff;background-color:#0078e6;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#79a548}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#6daae0}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#e8a33d}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#c83c3c}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media-heading,.media:first-child,.panel-title{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#f5f5f5;color:#d7d7d7;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#d7d7d7}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#0078e6;border-color:#0078e6}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#b3dbff}.list-group-item-success{color:#79a548;background-color:#d1e2bd}a.list-group-item-success,button.list-group-item-success{color:#79a548}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#79a548;background-color:#c4dbab}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#79a548;border-color:#79a548}.list-group-item-info{color:#6daae0;background-color:#ebf3fb}a.list-group-item-info,button.list-group-item-info{color:#6daae0}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#6daae0;background-color:#d6e7f6}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#6daae0;border-color:#6daae0}.list-group-item-warning{color:#e8a33d;background-color:#fbefdd}a.list-group-item-warning,button.list-group-item-warning{color:#e8a33d}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#e8a33d;background-color:#f8e4c6}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#e8a33d;border-color:#e8a33d}.list-group-item-danger{color:#c83c3c;background-color:#efc7c7}a.list-group-item-danger,button.list-group-item-danger{color:#c83c3c}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#c83c3c;background-color:#eab3b3}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#c83c3c;border-color:#c83c3c}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:18px;background-color:#fff;border:1px solid transparent;border-radius:2px}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-body:after{content:"";display:table;clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:1px;border-top-left-radius:1px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:1px;border-bottom-right-radius:1px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:1px;border-top-left-radius:1px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:1px;border-top-left-radius:1px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:1px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:1px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ccc}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:18px}.panel-group .panel{margin-bottom:0;border-radius:2px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ccc}.panel-default>.panel-heading{color:#5a5a5a;background-color:#ddd;border-color:#ccc}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ccc}.panel-default>.panel-heading .badge{color:#ddd;background-color:#5a5a5a}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ccc}.panel-primary{border-color:#0078e6}.panel-primary>.panel-heading{color:#fff;background-color:#0078e6;border-color:#0078e6}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#0078e6}.panel-primary>.panel-heading .badge{color:#0078e6;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#0078e6}.panel-success{border-color:#79a548}.panel-success>.panel-heading{color:#79a548;background-color:#d1e2bd;border-color:#79a548}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#79a548}.panel-success>.panel-heading .badge{color:#d1e2bd;background-color:#79a548}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#79a548}.panel-info{border-color:#6daae0}.panel-info>.panel-heading{color:#6daae0;background-color:#ebf3fb;border-color:#6daae0}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#6daae0}.panel-info>.panel-heading .badge{color:#ebf3fb;background-color:#6daae0}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#6daae0}.panel-warning{border-color:#e8a33d}.panel-warning>.panel-heading{color:#e8a33d;background-color:#fbefdd;border-color:#e8a33d}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#e8a33d}.panel-warning>.panel-heading .badge{color:#fbefdd;background-color:#e8a33d}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#e8a33d}.panel-danger{border-color:#c83c3c}.panel-danger>.panel-heading{color:#c83c3c;background-color:#efc7c7;border-color:#c83c3c}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#c83c3c}.panel-danger>.panel-heading .badge{color:#efc7c7;background-color:#c83c3c}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#c83c3c}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#fafafa;border:1px solid #ccc;border-radius:2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well-lg,.well-sm{border-radius:2px}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px}.well-sm{padding:9px}.close{float:right;font-size:18px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{font-family:Verdana,Arial,Helvetica,sans-serif;letter-spacing:normal;line-break:auto;line-height:1.5;text-shadow:none;text-transform:none;white-space:normal;word-spacing:normal;word-wrap:normal;font-weight:400;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal{display:none;position:fixed;z-index:5000;-webkit-overflow-scrolling:touch;outline:0}.modal-footer:after,.modal-header:after{display:table;clear:both;content:""}.modal-content,.modal-dialog{position:relative}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-content{background-color:#fff;border-radius:2px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.5}.modal-body{position:relative;padding:15px}.modal-footer{text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;font-style:normal;text-align:left;text-align:start;word-break:normal;font-size:12px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:2px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover>.arrow,.popover>.arrow:after,.tooltip-arrow{position:absolute;width:0;height:0;border-style:solid}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;background-color:#f7f7f7;border-radius:1px 1px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{display:block;border-color:transparent}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:" ";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.tooltip{position:absolute;z-index:1070;display:block;font-style:normal;text-align:left;text-align:start;word-break:normal;font-size:11px;opacity:0;filter:alpha(opacity=0)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.diff-item-result,.table-fixed{word-break:break-all;word-wrap:break-word}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.tooltip.top{margin-top:-3px;padding:3px 0}.tooltip.right{margin-left:3px;padding:0 3px}.tooltip.bottom{margin-top:3px;padding:3px 0}.tooltip.left{margin-left:-3px;padding:0 3px}.tooltip-inner{max-width:200px;color:#fff;text-align:center;background-color:#333;border-radius:2px}.carousel-control,.text-hide{background-color:transparent}.tooltip-arrow{border-color:transparent}.carousel,.carousel-inner{position:relative}.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{border-width:3px 3px 0;border-top-color:#333;bottom:0}.tooltip.top .tooltip-arrow{left:50%;margin-left:-3px}.tooltip.top-left .tooltip-arrow{right:3px;margin-bottom:-3px}.tooltip.top-right .tooltip-arrow{left:3px;margin-bottom:-3px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-3px;border-width:3px 3px 3px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-3px;border-width:3px 0 3px 3px;border-left-color:#333}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 3px 3px;border-bottom-color:#333;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-3px}.tooltip.bottom-left .tooltip-arrow{right:3px;margin-top:-3px}.tooltip.bottom-right .tooltip-arrow{left:3px;margin-top:-3px}.carousel-inner{width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}body,html{height:100%}body{overflow:auto}.scaffold{background-color:#f5f5f5;color:#333;position:relative;padding-top:45px;height:100vh}.scaffold-topbar{background-color:#151515;color:#f5f5f5;height:45px;position:fixed;top:0;right:0;left:0}.scaffold-modulemenu,.scaffold-toolbar{background-color:#292929;z-index:1000;position:fixed;top:45px;left:0;bottom:0}.scaffold-modulemenu{color:#f5f5f5;width:40px;max-width:100%;overflow:hidden}.scaffold-modulemenu a{color:rgba(245,245,245,.7)}.scaffold-modulemenu .active>a,.scaffold-modulemenu a:hover{color:#f5f5f5}.scaffold-toolbar{overflow:auto;color:#f5f5f5;right:0;display:none}.scaffold-toolbar .dropdown-menu a,.scaffold-toolbar a{color:rgba(245,245,245,.7)}.scaffold-toolbar .active>a,.scaffold-toolbar .dropdown-menu a:focus,.scaffold-toolbar .dropdown-menu a:hover,.scaffold-toolbar a:focus,.scaffold-toolbar a:hover{color:#f5f5f5}@media (min-width:992px){.scaffold-toolbar{overflow:visible;background-color:transparent;height:45px;top:0;left:auto;bottom:auto;display:block}}.scaffold-content{position:fixed!important;top:45px;left:0;right:0;bottom:0}@media (max-width:991px){.scaffold-search-expanded .scaffold-toolbar,.scaffold-toolbar-expanded .scaffold-toolbar{display:block}.scaffold-content{left:0!important}}.scaffold-content-module-iframe,.scaffold-content-navigation-iframe{display:block;border:none;height:100%;width:100%}.scaffold-content-navigation{display:none;position:absolute!important;left:0;top:0;bottom:0;width:300px}.scaffold-content-navigation-component{position:absolute;top:0;bottom:0;left:0;right:0}.scaffold-content-navigation-component #typo3-pagetree-treeContainer>div>.x-panel-body{overflow:auto}.scaffold-content-module{position:absolute!important;top:0;left:0;bottom:0;right:0}@media (max-width:767px){.scaffold-content-module{width:100%}}.scaffold-content-overlay{display:none;position:absolute;z-index:1040;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.65)}.scaffold-modulemenu-expanded .scaffold-content-overlay{display:block}@media (min-width:992px){.scaffold-modulemenu-expanded .scaffold-content-overlay{display:none}.scaffold{padding-left:40px}}.scaffold .scaffold-modulemenu{width:40px}@media (max-width:991px){.scaffold .scaffold-modulemenu{display:none}.scaffold-modulemenu-expanded .scaffold-modulemenu{display:block}}.scaffold-modulemenu-expanded{display:block;padding-left:230px}.scaffold-modulemenu-expanded .scaffold-modulemenu{width:230px}.scaffold-modulemenu-expanded .scaffold-content{-webkit-transform:translate(230px,0);transform:translate(230px,0)}.scaffold-content-navigation-expanded .scaffold-content-navigation{display:block}.scaffold-content-navigation-expanded .scaffold-content-module{left:300px}@media (min-width:992px){.scaffold .scaffold-content{left:40px}.scaffold-modulemenu-expanded .scaffold-content{left:230px;-webkit-transform:none;transform:none}}.topbar{background-color:inherit;position:relative;height:45px}.topbar a{color:inherit;text-decoration:none}.topbar-button{position:absolute;top:0;display:inline-block;border:0;background-color:#151515;height:45px;width:40px}.topbar-button:focus,.topbar-button:hover{background-color:#1d1d1d}.scaffold-content-navigation-expanded .topbar-button-navigationcomponent,.scaffold-modulemenu-expanded .topbar-button.topbar-button-modulemenu,.scaffold-search-expanded .topbar-button-search,.scaffold-toolbar-expanded .topbar-button-toolbar{background-color:#292929}.topbar-button[disabled],.topbar-button[disabled]:focus,.topbar-button[disabled]:hover{background-color:#292929;cursor:not-allowed;opacity:.5}.topbar-button.topbar-button-modulemenu{left:0}.topbar-button.topbar-button-navigationcomponent{left:40px}.topbar-button.topbar-button-toolbar{right:40px}.topbar-button.topbar-button-search{right:0}@media (max-width:991px){.scaffold-search-expanded .toolbar-item,.scaffold-toolbar-expanded .toolbar-item-search{display:none}.scaffold-search-expanded .toolbar-item-search{display:block;width:100%}.topbar-header{padding-right:80px!important}}.topbar-button-search,.topbar-button-toolbar{display:block}@media (min-width:992px){.topbar-button.topbar-button-modulemenu{background-color:#292929}.topbar-button-search,.topbar-button-toolbar{display:none}}.topbar-header{padding-left:80px}.topbar-header-site{overflow:hidden;position:relative;max-width:100%;height:45px;line-height:45px;padding-left:1em;padding-right:1em;white-space:nowrap}.topbar-header-site:after,.topbar-header-site:before{display:block;content:'';position:absolute;top:0;bottom:0;width:1em}.topbar-header-site:before{right:0;background:#151515}.topbar-header-site:after{right:1em;background:-webkit-linear-gradient(left,rgba(21,21,21,0) 0,#151515 100%);background:linear-gradient(to right,rgba(21,21,21,0) 0,#151515 100%)}.typo3-in-workspace .topbar-header-site{background-color:#6d860d}.typo3-in-workspace .topbar-header-site:before{background:#6d860d}.typo3-in-workspace .topbar-header-site:after{background:-webkit-linear-gradient(left,rgba(109,134,13,0) 0,#6d860d 100%);background:linear-gradient(to right,rgba(109,134,13,0) 0,#6d860d 100%)}.topbar-header-site-logo{height:45px;display:none;padding-right:.5em}@media (min-width:320px){.topbar-header-site-logo{display:inline-block}}.topbar-header-site-title{line-height:1.2em;display:inline-block;vertical-align:middle}.topbar-header-site-name{display:block}.toolbar-list:after,.toolbar:after{display:table;content:'';clear:both}.topbar-header-site-version{opacity:.5}.toolbar{padding:8px}.toolbar-list{list-style:none;padding:0;margin:0}@media (min-width:992px){.toolbar{padding:0;background-color:#151515}.toolbar-list li:last-child{width:300px}}.toolbar-item{padding:4px;position:relative;display:block;float:left;width:100%}@media (min-width:600px){.toolbar-item{width:50%}}@media (min-width:750px){.toolbar-item{width:33.33%}}@media (min-width:992px){.toolbar-item{padding:0;width:auto;margin-left:1px}}.toolbar-item .dropdown-menu{width:350px}.toolbar-item .dropdown-menu .text-muted{color:#8c8c8c}.toolbar-item .dropdown-menu a:focus .text-muted,.toolbar-item .dropdown-menu a:hover .text-muted{color:#a6a6a6}@media (max-width:991px){.toolbar-item .dropdown-menu{overflow:auto;padding:15px;position:fixed;max-height:90%;max-width:90%;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.toolbar-item .dropdown-backdrop{background:rgba(0,0,0,.65)}}.toolbar-item-avatar{width:28px;margin-right:2px;display:inline-block}.toolbar-item-avatar .avatar{position:absolute;top:50%;left:10px;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.toolbar-item-avatar .avatar,.toolbar-item-avatar .avatar-image{height:28px;width:28px}.toolbar-item-badge{position:absolute;bottom:4px;right:4px;padding:3px 4px;border-radius:0;font-size:10px;font-weight:400;min-width:16px}.toolbar-item-link{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid rgba(0,0,0,.5);position:relative;display:block;text-decoration:none;padding:9px 10px;height:45px;line-height:27px}.toolbar-item-link:focus,.toolbar-item-link:hover{text-decoration:none}.open .toolbar-item-link{background-color:#292929}.toolbar-item-search form{padding:0;margin:0}.toolbar-item-search .toolbar-item-link{padding:0;margin:0;height:0}.toolbar-item-search .form-group{margin:0}.toolbar-item-search .close{color:#fff;text-shadow:none;opacity:1}@media (max-width:991px){.toolbar-item-search .dropdown-menu{top:114px;left:14px;right:14px;width:auto;max-width:none;max-height:none;-webkit-transform:none;transform:none;bottom:14px}}@media (min-width:992px){.toolbar-item-link{border:none}.toolbar-item-title{display:none}.toolbar-item-search .dropdown-menu{left:auto;right:0}}.toolbar-item-search .autocomplete-suggestions{position:static!important}.toolbar-item-search .autocomplete-suggestion{border:none}.toolbar-item-search.open .toolbar-item-search-form{position:relative;z-index:991}.toolbar-item-search-field{color:inherit;background-color:#2f2f2f;margin:0;border-radius:0;border:1px solid rgba(0,0,0,.5);height:45px;box-shadow:none}@media (min-width:992px){.toolbar-item-search-field{border:none}}.toolbar-item-search-field:hover{background-color:#333}.toolbar-item-search-field:focus{box-shadow:none;background-color:#555}.module-wrapper{position:relative}.module-wrapper iframe{border:none}.modulemenu .modulemenu-group-container{clear:both}.modulemenu .modulemenu-group{position:relative;padding:5px 0;border-bottom:1px solid rgba(0,0,0,.2)}.modulemenu .modulemenu-group-header,.modulemenu .modulemenu-item-link{position:relative;display:block;cursor:pointer;padding:2px 4px;text-decoration:none}.modulemenu .modulemenu-group-header{user-select:none;text-transform:uppercase}.cropper-container,.modal .close{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.modulemenu .modulemenu-item-link:focus,.modulemenu .modulemenu-item-link:hover{outline:0;background-color:rgba(0,0,0,.1)}.modulemenu .modulemenu-item.active .modulemenu-item-link{background-color:rgba(0,0,0,.15)}.modulemenu .modulemenu-icon{float:left;margin-right:4px}.modulemenu .modulemenu-icon .fa{font-size:.5em}.modulemenu .modulemenu-group-title,.modulemenu .modulemenu-item-title{white-space:nowrap;text-overflow:ellipsis;padding-top:7px;padding-left:4px;display:none;overflow:hidden}.modulemenu .modulemenu-group-title{padding-right:20px}.modulemenu .modulemenu-group-title .caret{-webkit-transform:rotate(90deg);transform:rotate(90deg);position:absolute;top:17px;right:18px}.modulemenu .expanded .modulemenu-group-title .caret{-webkit-transform:rotate(0);transform:rotate(0)}.scaffold-modulemenu-expanded .modulemenu-group-title,.scaffold-modulemenu-expanded .modulemenu-item-title{display:block}.autocomplete{position:relative}.autocomplete-results{z-index:1000;position:absolute;margin:5px 0;top:100%;left:0;border:1px solid #ddd;border-radius:2px;background-color:#fff;overflow:hidden;box-shadow:0 1px 0 0 rgba(0,0,0,.25)}.avatar,.dropdown-list>li{position:relative}.autocomplete-suggestion{border-top:1px solid #ddd}.autocomplete-suggestion:first-child{border-top:none}.autocomplete-suggestion-link{padding:5px 13px 5px 28px;display:block;text-decoration:none}.autocomplete-selected .autocomplete-suggestion-link,.autocomplete-suggestion-link:hover{background-color:#fafafa;text-decoration:none}.autocomplete-info{padding:5px 15px}.dropdown-menu{line-height:1.45em;border:0;margin:0;border-radius:0;color:#fff}.dropdown-menu a{color:inherit;display:block}.dropdown-menu a:focus,.dropdown-menu a:hover{color:inherit;text-decoration:none}.dropdown-menu hr{border-top:1px solid rgba(0,0,0,.35);margin:1.25em -15px}.dropdown-menu>:last-child{margin-bottom:0}.dropdown-menu .form-group{margin-bottom:.75em}.dropdown-menu .form-control{border-color:#aaa;color:inherit;border-radius:0;background-color:#333}.dropdown-menu .form-control:focus{box-shadow:none;border-color:#bbb}.dropdown-menu .btn{border:none;border-radius:0;padding:6px 10px}.dropdown-headline{font-size:1.15em;margin-top:0;margin-bottom:.5em}.dropdown-text a{display:inline-block}div.dropdown-menu{padding:1.5em}.dropdown-list{padding-left:0;list-style:none}.dropdown-list>li+li{margin-top:.5em}.dropdown-list-link{display:block;text-decoration:none}.dropdown-list-link:focus,.dropdown-list-link:hover{text-decoration:none}.dropdown-table{display:table;width:100%}.dropdown-table-row{display:table-row}.dropdown-table-column{display:table-cell;padding-top:.25em;padding-bottom:.25em;vertical-align:middle}.dropdown-table-column-top{vertical-align:top}.avatar,.callout .media-body{vertical-align:middle}.dropdown-table-icon{width:16px;padding-right:.5em}.avatar,.avatar-image{height:32px;width:32px}.dropdown-table-title{white-space:nowrap;padding-right:1.5em}.dropdown-table-title-ellipsis{max-width:230px;overflow:hidden;display:block;white-space:nowrap;text-overflow:ellipsis}.dropdown-table-actions{white-space:nowrap;text-align:right}.dropdown-table-actions-btn{text-align:center;display:inline-block!important;margin-top:-4px;margin-bottom:-4px;padding:4px;vertical-align:middle}.dropdown-table-actions-btn-close:hover,.dropdown-table-actions-btn-edit:hover{background-color:#333}.dropdown-table-actions-btn-delete:hover{background-color:#c83c3c}.avatar{display:inline-block}.avatar-image{display:block;overflow:hidden;border-radius:50%}.avatar-image:after{display:block;content:'';position:absolute;top:0;left:0;height:100%;width:100%;border-radius:50%;border:1px solid rgba(255,255,255,.1)}.avatar-image>img{display:block;width:100%!important;height:auto!important}.avatar-icon{position:absolute;bottom:0;right:0;height:16px;width:16px}.callout{background-color:#f0f0f0;border-left:3px solid #ccc;margin:20px 0;padding:20px;color:#333}.callout .media{margin:0}.callout .media .fa-stack{color:#fff}.callout .media .fa-stack>.fa:first-child{color:#ccc}.callout-icon{margin-top:-2px}.callout-title{font-size:1.3em;margin:0 0 .5em}.callout-danger .media,.callout-info .media,.callout-notice .media,.callout-success .media,.callout-warning .media{margin:0}.callout-body>:last-child{margin-bottom:0}.callout-success{background-color:#d1e2bd;border-color:#79a548;color:#333}.callout-success .media .fa-stack{color:#fff}.callout-success .media .fa-stack>.fa:first-child{color:#79a548}.callout-info{background-color:#ebf3fb;border-color:#6daae0;color:#333}.callout-info .media .fa-stack{color:#fff}.callout-info .media .fa-stack>.fa:first-child{color:#6daae0}.callout-warning{background-color:#fbefdd;border-color:#e8a33d;color:#333}.callout-warning .media .fa-stack{color:#fff}.callout-warning .media .fa-stack>.fa:first-child{color:#e8a33d}.callout-danger{background-color:#efc7c7;border-color:#c83c3c;color:#333}.callout-danger .media .fa-stack{color:#fff}.callout-danger .media .fa-stack>.fa:first-child{color:#c83c3c}.callout-notice{background-color:#f9f9f9;border-color:#a0a0a0;color:#333}.callout-notice .media .fa-stack{color:#fff}.callout-notice .media .fa-stack>.fa:first-child{color:#a0a0a0}.icon{position:relative;display:inline-block;overflow:hidden;white-space:nowrap;vertical-align:-22%}.icon-markup,.icon-overlay{position:absolute;text-align:center;bottom:0;right:0}.icon img,.icon svg{display:block;height:100%;width:100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.icon *{display:block;line-height:inherit}.icon-markup{display:block;top:0;left:0}.icon-overlay{height:68.75%;width:68.75%}.module-docheader,.module-loading-indicator.nprogress-custom-parent{position:fixed;top:0}.icon-color{fill:currentColor}.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)}}.icon-state-disabled .icon-markup{opacity:.5}.icon-size-small{height:16px;width:16px;line-height:16px}.icon-size-small .icon-unify{line-height:16px;font-size:14px}.icon-size-small .icon-overlay .icon-unify{line-height:10px;font-size:9px}.icon-size-default{height:32px;width:32px;line-height:32px}.icon-size-default .icon-unify{line-height:32px;font-size:28px}.icon-size-default .icon-overlay .icon-unify{line-height:20px;font-size:18px}.icon-size-large{height:48px;width:48px;line-height:48px}.icon-size-large .icon-unify{line-height:48px;font-size:42px}.icon-size-large .icon-overlay .icon-unify{line-height:30px;font-size:26px}.icon-actions-edit-copy-release,.icon-actions-edit-cut-release,.icon-status-dialog-error,.icon-status-status-current,.icon-status-status-permission-denied{color:#c83c3c}.icon-status-status-sorting-light-asc,.icon-status-status-sorting-light-desc{color:#fff}.icon-status-status-sorting-asc,.icon-status-status-sorting-desc{color:#737373}.icon-status-dialog-information{color:#6daae0}.icon-status-dialog-ok,.icon-status-status-permission-granted{color:#79a548}.icon-status-dialog-notification{color:#333}.icon-status-dialog-warning{color:#e8a33d}.diff{background-color:#fff;border:1px solid #ccc;display:table}.diff-item{display:table-row}.diff-item+.diff-item{border-top:1px solid #ccc}.diff-item-result,.diff-item-title{padding:10px;display:table-cell}.diff-item-title{background-color:#fafafa;padding-right:10px;font-style:italic;white-space:nowrap}.diff-item-result{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;width:100%;white-space:pre}.diff-item-result del{color:#c80c05;background-color:#fff6f6;text-decoration:none}.diff-item-result ins{color:#44a512;background-color:#ebfce3;text-decoration:none}.diff-item-result.diff-item-result-inline{white-space:normal}.module{min-height:100%;width:100%;background-color:#fff;color:inherit}.module-dark{background-color:#333;color:#ccc}.module-loading-indicator{min-height:5px;width:100%;z-index:999999}.module-docheader{width:100%;left:0;min-height:65px;z-index:300;background-color:#eee;border-bottom:1px solid #c3c3c3;padding:0 24px;-webkit-transition:margin-top .3s ease-in-out;transition:margin-top .3s ease-in-out}.module-docheader .module-docheader-bar{min-height:26px;margin:4px 0;line-height:26px}.module-docheader .module-docheader-bar.row{margin-left:-15px;margin-right:-15px}.module-docheader .module-docheader-bar label{margin-top:0;margin-bottom:0}.module-docheader .module-docheader-bar .form-inline .form-group{display:table}.module-docheader .module-docheader-bar .form-inline .form-group label{display:table-cell;font-size:11px;font-weight:400;line-height:16px;padding:4px;border-radius:2px 0 0 2px;border:1px solid #bbb;border-right:0;background-color:rgba(0,0,0,.05)}.module-docheader .module-docheader-bar .form-inline .form-group label+select{display:table-cell;border-top-left-radius:0;border-bottom-left-radius:0}.module-docheader .module-docheader-bar .form-group{vertical-align:top;margin:0;display:inline-block}.module-docheader .module-docheader-bar .form-group .form-control{vertical-align:top}.module-docheader .module-docheader-bar .form-inline-spaced{margin:0}.module-docheader .module-docheader-bar .panel{margin:0 -24px;border-left:none;border-right:none;border-bottom:none;border-radius:0;background-color:#fafafa;box-shadow:none}.module-docheader .module-docheader-bar .panel .panel-body{padding:8px 24px}@media (max-width:768px){.module-docheader .module-docheader-bar .text-right{text-align:left}}.bootstrap-datetimepicker-widget .picker-switch,.modal-content .loadmessage,.typo3-module-viewpage .module-body{text-align:center}.module-docheader .module-docheader-bar-search{margin-bottom:0}.module-docheader .module-docheader-bar-column-left{float:left}.module-docheader .module-docheader-bar-column-right{float:right}.module-docheader-bar-navigation .module-docheader-bar-column-left{white-space:nowrap}@media (max-width:768px){.module-docheader-bar-navigation .module-docheader-bar-column-left{white-space:normal}}.module-docheader-bar-navigation .form-group select{width:100%}.module-body{padding:24px}.module-body>.callout:first-child{margin-top:0}.module-body>.container{padding-left:0;padding-right:0}.module-body .container-small{max-width:768px;margin:0 auto}.module-docheader+.module-body{padding-top:89px}.panel{display:block}.panel:focus,.panel:hover{text-decoration:none}.panel-heading a,.panel-heading a:active,.panel-heading a:focus,.panel-heading a:hover{text-decoration:none;color:inherit}.element-browser-title a,.panel-body-highlightlinks>p>a{text-decoration:underline}.panel-heading-left{float:left}.panel-heading-right{float:right}.panel-title{font-size:12px}.panel-title-icon,.panel-title-name{display:inline-block;vertical-align:middle}.panel-body>:first-child{margin-top:0}.panel-body>:last-child{margin-bottom:0}.panel-table td:first-child,.panel-table th:first-child{padding-left:15px}.panel-table td:last-child,.panel-table th:last-child{padding-right:15px}.panel-progress{background-color:#eee;height:3px;position:relative;width:100%}.panel-progress .panel-progress-bar{display:block;height:100%;background-color:#444}.panel-active{border-color:#444}.panel-active>.panel-heading{color:#fff;background-color:#666;border-color:#444}.panel-active>.panel-heading+.panel-collapse>.panel-body{border-top-color:#444}.panel-active>.panel-heading .badge{color:#666;background-color:#fff}.panel-active>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#444}#typo3-debug-console .topbar:after,.clearfix:after,.distribution-detail:after,.distribution-holder:after,.dropdown-list>li:after,.module-docheader .module-docheader-bar:after,.module-docheader:after,.modulemenu .modulemenu-group-header:after,.modulemenu .modulemenu-item-link:after,.pagination-block:after,.panel-heading:after,.t3-page-ce .t3-page-ce-header:after,.typo3-login-copyright-link:after{content:"";display:table;clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;border:0}.dropzone-close,.dropzone-hint-icon{text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.c-na,.t3-flex-section-header-preview,.typo3-dblist-sysnotes .panel-sysnote .panel-body h4 span,.x-tree-node-readableRootline,em,pre.ts-hl .ts-comment{font-style:italic}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.minicolors{position:relative}.userTS .minicolors{position:absolute}.userTS .minicolors-panel{margin-top:31px}.userTS .minicolors-swatch{z-index:100000}.minicolors-sprite{background-image:url(../../../../../../typo3/sysext/core/Resources/Public/Images/colorpicker/jquery.minicolors.png)}.minicolors-swatch{position:absolute;vertical-align:middle;background-position:-80px 0;cursor:text;padding:0;margin:0;display:inline-block;top:50%;left:6px;z-index:2;-webkit-transform:translate(0,-50%);transform:translate(0,-50%);width:20px;height:20px;border-radius:1px}.minicolors-swatch-color{position:absolute;top:0;left:0;right:0;bottom:0;border-radius:inherit}.minicolors-input{float:none;padding-left:32px}.minicolors-panel{margin-top:1px;overflow:hidden;border-radius:2px;position:absolute;width:173px;height:152px;background:#fff;border:1px solid #bbb;box-shadow:0 0 20px rgba(0,0,0,.2);z-index:99999;display:none}.minicolors-panel.minicolors-with-swatches{height:182px}.minicolors-panel.minicolors-visible{display:block}.minicolors-position-top .minicolors-panel{top:-154px}.minicolors-position-right .minicolors-panel{right:0}.minicolors-position-bottom .minicolors-panel{top:auto}.minicolors-position-left .minicolors-panel{left:0}.minicolors-with-opacity .minicolors-panel{width:194px}.minicolors .minicolors-grid{position:absolute;top:1px;left:1px;width:150px;height:150px;background-position:-120px 0;cursor:crosshair}.minicolors .minicolors-grid-inner{position:absolute;top:0;left:0;width:150px;height:150px}.minicolors-slider-saturation .minicolors-grid{background-position:-420px 0}.minicolors-slider-saturation .minicolors-grid-inner{background-position:-270px 0;background-image:inherit}.minicolors-slider-brightness .minicolors-grid{background-position:-570px 0}.minicolors-slider-brightness .minicolors-grid-inner{background-color:#000}.minicolors-slider-wheel .minicolors-grid{background-position:-720px 0}.minicolors-opacity-slider,.minicolors-slider{position:absolute;top:1px;left:152px;width:20px;height:150px;background-color:#fff;background-position:0 0;cursor:row-resize}.minicolors-slider-saturation .minicolors-slider{background-position:-60px 0}.minicolors-slider-brightness .minicolors-slider,.minicolors-slider-wheel .minicolors-slider{background-position:-20px 0}.minicolors-opacity-slider{left:173px;background-position:-40px 0;display:none}.minicolors-with-opacity .minicolors-opacity-slider{display:block}.element-browser,.modal-dialog{display:-webkit-box;display:-webkit-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal}.minicolors-grid .minicolors-picker{position:absolute;top:70px;left:70px;width:12px;height:12px;border:1px solid #000;border-radius:10px;margin-top:-6px;margin-left:-6px;background:0 0}.minicolors-grid .minicolors-picker>div{position:absolute;top:0;left:0;width:8px;height:8px;border-radius:8px;border:2px solid #fff;box-sizing:content-box}.minicolors-picker{position:absolute;top:0;left:0;width:18px;height:2px;background:#fff;border:1px solid #000;margin-top:-2px}.minicolors-swatches,.minicolors-swatches li{margin:0;padding:0;list-style:none;overflow:hidden;position:absolute;top:157px;left:5px}.minicolors-swatches .minicolors-swatch{position:relative;float:left;cursor:pointer;margin:0 4px 0 0;top:0;left:0;width:20px;height:20px}.element-browser-attributes>.form-horizontal:last-child .form-group,.element-browser-body>:last-child{margin-bottom:0}.minicolors-with-opacity .minicolors-swatches .minicolors-swatch{margin-right:7px}.minicolors-swatch.selected{border-color:#000}.svg-tree-wrapper{overflow-y:scroll}.svg-tree-wrapper path.link{fill:none;shape-rendering:crispEdges;stroke:#ddd;stroke-width:1}.svg-tree-wrapper .node .chevron,.svg-tree-wrapper .node .tree-check,.svg-tree-wrapper .node text{cursor:pointer}.element-browser{display:flex;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;flex-direction:column;width:100%}@media (min-width:600px){.element-browser{height:100vh}.element-browser-main{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex:1 auto;flex:1 auto}}.element-browser h3{font-size:1.2em}.element-browser-body{overflow:auto;height:100%;padding:15px}.element-browser-body>:first-child{margin-top:0}.element-browser-title{padding:15px;color:#fff;background-color:#292929}.element-browser-title a{color:inherit}.element-browser-tabs .nav-tabs{padding:15px 15px 0}.element-browser-attributes{padding:15px;background-color:#fafafa;border-bottom:1px solid #ddd}.element-browser-main-sidebar,.element-browser-main-sidebar .list-tree li:last-child:before,.element-browser-main-sidebar .list-tree-control>.fa:before{background-color:#f2f2f2}@media (min-width:600px){.element-browser-main-sidebar{-webkit-flex-shrink:0;flex-shrink:0;width:260px;border-right:1px solid #ddd}.element-browser-main-content{overflow:auto;-webkit-box-flex:1;-webkit-flex:1 auto;flex:1 auto}}@media (min-width:720px){.element-browser-main-sidebar{width:280px}}@media (min-width:840px){.element-browser-main-sidebar{width:300px}}@media (min-width:960px){.element-browser-main-sidebar{width:320px}}.modal .close{color:inherit;padding:0;margin:0;text-shadow:rgba(0,0,0,.5) 0 0 3px;opacity:.5;user-select:none}.modal .close:active,.modal .close:hover{box-shadow:none;outline:0;background:0 0;opacity:1}.modal-dialog{display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-webkit-align-items:stretch;align-items:stretch;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;margin:0 auto!important;height:100vh;width:100vw}.modal-content{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;margin:0 auto;max-height:calc(100vh - 40px);max-width:calc(100vw - 40px);-webkit-transition:margin-top .1s ease-in;transition:margin-top .1s ease-in;border:none}.modal-body{-webkit-box-flex:1;-webkit-flex:1 1 auto;flex:1 1 auto;overflow-y:auto}.modal-footer,.modal-header{padding:10px 15px}.modal-footer .btn{margin-right:0;padding-left:1em;padding-right:1em}.modal-footer .btn .icon{margin-left:-2px;margin-right:4px}.modal-footer .btn span{vertical-align:middle}.modal-content .loadmessage{color:#1e1e1e}.modal-image-manipulation .modal-body{padding:0;display:-webkit-box;display:-webkit-flex;display:flex}.modal-image-manipulation .modal-panel-main{overflow:visible;background-image:url(../Images/cropper-background.png);display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;padding:20px;width:100%}.modal-image-manipulation .modal-panel-main img{max-width:100%}.cropper-container img,.cropper-hide{min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important}.modal-image-manipulation .modal-panel-sidebar{padding:15px;-webkit-flex-shrink:0;flex-shrink:0;border-left:1px solid rgba(0,0,0,.25);position:relative;overflow:auto;-webkit-overflow-scrolling:touch;width:200px}@media (min-width:768px){.modal-image-manipulation .modal-panel-sidebar{width:250px}}@media (min-width:992px){.modal-image-manipulation .modal-panel-sidebar{width:300px}}.modal-type-iframe,.modal-type-iframe .modal-body{padding:0}.modal-iframe{display:block;border:0;height:100%;width:100%;position:absolute;top:0;left:0}.modal-size-small .modal-content{width:440px}.modal-size-default .modal-content{width:600px}.modal-size-large .modal-content{width:1000px;height:800px}.modal-size-full .modal-content{width:1800px;height:1200px}.modal-severity-notice .modal-header{background-color:#eee;color:#333;border-bottom-color:#bbb}.modal-severity-info .modal-header{background-color:#6daae0;color:#fff;border-bottom-color:#589edc}.modal-severity-success .modal-header{background-color:#79a548;color:#fff;border-bottom-color:#6c9340}.modal-severity-warning .modal-header{background-color:#e8a33d;color:#fff;border-bottom-color:#e59826}.modal-severity-danger .modal-header{background-color:#c83c3c;color:#fff;border-bottom-color:#b73434}.modal-style-dark{color:#fff}.modal-style-dark .modal-header{color:#fff;background-color:#484848;border-bottom-color:#000}.modal-style-dark .modal-content{overflow:hidden;background-color:#292929}.modal-style-dark .modal-body,.modal-style-dark .modal-footer{background-color:#292929;color:#fff}.modal-style-dark .modal-footer{border-top:1px solid #000}.card{display:-webkit-box;display:-webkit-flex;display:flex;padding:15px;box-shadow:0 2px 0 rgba(0,0,0,.2);border:1px solid #ccc;margin-bottom:20px;transition:all .2s ease-in-out;-webkit-transition-property:box-shadow,border,-webkit-transform;transition-property:box-shadow,border,-webkit-transform;transition-property:box-shadow,border,transform;transition-property:box-shadow,border,transform,-webkit-transform}.card-container,.viewpage-topbar{display:-webkit-box;display:-webkit-flex}.card:hover{text-decoration:none;border:1px solid #b3b2b2;-webkit-transform:translate(0,-1px);transform:translate(0,-1px);box-shadow:0 3px 0 rgba(0,0,0,.3)}.card-container{display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:10px -10px}.card-container .card{margin-left:10px;margin-right:10px}.card-size-large,.card-size-medium,.card-size-small{width:calc(100% - 20px)}@media (min-width:768px){.card-size-small{width:calc(50% - 20px)}}@media (min-width:992px){.card-size-small{width:calc(25% - 20px)}}@media (min-width:768px){.card-size-medium{width:calc(50% - 20px)}.card-size-large{width:calc(100% - 20px)}}.typo3-module-viewpage{background-color:#494949}.typo3-module-viewpage .module{background-color:transparent}.typo3-module-viewpage .ui-resizable-w{left:-5px;height:100%;width:5px}.typo3-module-viewpage .ui-resizable-s{bottom:-5px;height:5px}.typo3-module-viewpage .ui-resizable-e{right:-5px;height:100%;width:5px}.typo3-module-viewpage .ui-resizable-se,.typo3-module-viewpage .ui-resizable-sw{height:5px;width:5px;background-image:none;bottom:-5px}.typo3-module-viewpage .ui-resizable-sw{left:-5px}.typo3-module-viewpage .ui-resizable-se{right:-5px}.viewpage-item{position:relative;display:inline-block;background-color:#292929;box-shadow:0 2px 0 rgba(0,0,0,.2);color:#fafafa}.viewpage-item a{color:#fafafa}.viewpage-item iframe{display:block}.viewpage-topbar{height:40px;-webkit-flex-shrink:0;flex-shrink:0;padding:.75em 1em;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.viewpage-topbar-orientation a{opacity:.5;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.viewpage-topbar-orientation a:hover{opacity:1}.viewpage-topbar-preset button{background-color:transparent;border:none;padding-left:20px;padding-right:20px}.viewpage-topbar-preset button span{vertical-align:middle}.viewpage-topbar-size input{background-color:transparent;padding-left:0;padding-right:0;border:0;border-bottom:1px solid rgba(0,120,230,.5);-webkit-transition:all .5s ease-in-out;transition:all .5s ease-in-out}.viewpage-topbar-size input:focus,.viewpage-topbar-size input:hover{outline:0;border-bottom-color:#0078e6}.viewpage-resizeable{background-color:#fafafa}.viewpage-preset-item{display:-webkit-box;display:-webkit-flex;display:flex}.viewpage-preset-item-icon{padding-right:.5em}.viewpage-preset-item-label{-webkit-box-flex:1;-webkit-flex:1 1 auto;flex:1 1 auto}.viewpage-preset-item-size{padding-left:1em;opacity:.5}.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #292929;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #292929;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #292929;border-top-color:rgba(0,0,0,.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #292929;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled,.bootstrap-datetimepicker-widget .modulemenu .modulemenu-group-container,.modulemenu .bootstrap-datetimepicker-widget .modulemenu-group-container{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:12px;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after{content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after{content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after{content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after{content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after{content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after{content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after{content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action=clear]::after{content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action=today]::after{content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch::after{content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:0}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:0 0;color:#737373;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#434242}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#8c8c8c}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#434242;cursor:pointer}.bootstrap-datetimepicker-widget table td.new,.bootstrap-datetimepicker-widget table td.old{color:#8c8c8c}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#0078e6;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#0078e6;color:#fff;text-shadow:none}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:0 0;color:#737373;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:0}.bootstrap-datetimepicker-widget table td span:hover{background:#434242}.bootstrap-datetimepicker-widget table td span.active{background-color:#0078e6;color:#fff;text-shadow:none}.bootstrap-datetimepicker-widget table td span.old{color:#8c8c8c}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:0 0;color:#737373;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.input-group.date .input-group-addon{cursor:pointer}.cropper-container{position:relative;overflow:hidden;user-select:none;-webkit-touch-callout:none}.cropper-container img{display:block;image-orientation:0deg!important;width:100%;height:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal{position:absolute;top:0;right:0;bottom:0;left:0}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;width:100%;height:100%;overflow:hidden;outline:#69f solid 1px;outline-color:rgba(102,153,255,.75)}.cropper-dashed{position:absolute;display:block;border:0 dashed #fff;opacity:.5}.cropper-dashed.dashed-h{top:33.33333333%;left:0;width:100%;height:33.33333333%;border-top-width:1px;border-bottom-width:1px}.cropper-dashed.dashed-v{top:0;left:33.33333333%;width:33.33333333%;height:100%;border-right-width:1px;border-left-width:1px}.cropper-face,.cropper-line,.cropper-point{position:absolute;display:block;width:100%;height:100%;opacity:.1}.cropper-face{top:0;left:0;cursor:move;background-color:#fff}.cropper-line,.cropper-point{background-color:#69f}.cropper-line.line-e{top:0;right:-3px;width:5px;cursor:e-resize}.cropper-line.line-n{top:-3px;left:0;height:5px;cursor:n-resize}.cropper-line.line-w{top:0;left:-3px;width:5px;cursor:w-resize}.cropper-line.line-s{bottom:-3px;left:0;height:5px;cursor:s-resize}.cropper-point{width:5px;height:5px;opacity:.75}.cropper-point.point-e{top:50%;right:-3px;margin-top:-3px;cursor:e-resize}.cropper-point.point-n{top:-3px;left:50%;margin-left:-3px;cursor:n-resize}.cropper-point.point-w{top:50%;left:-3px;margin-top:-3px;cursor:w-resize}.cropper-point.point-s{bottom:-3px;left:50%;margin-left:-3px;cursor:s-resize}.cropper-point.point-ne{top:-3px;right:-3px;cursor:ne-resize}.cropper-point.point-nw{top:-3px;left:-3px;cursor:nw-resize}.cropper-point.point-sw{bottom:-3px;left:-3px;cursor:sw-resize}.cropper-point.point-se{right:-3px;bottom:-3px;width:20px;height:20px;cursor:se-resize;opacity:1}.cropper-point.point-se:before{position:absolute;right:-50%;bottom:-50%;display:block;width:200%;height:200%;content:" ";background-color:#69f;opacity:0}@media (min-width:768px){.cropper-point.point-se{width:15px;height:15px}.dl-horizontal dt,.form-irre-header-body dl dt{text-align:left}}@media (min-width:992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width:1200px){.cropper-point.point-se{width:5px;height:5px;opacity:.75}}.cropper-bg{background-image:url(../img/bg.png)}.cropper-invisible{opacity:0}.cropper-hide{position:fixed;top:0;left:0;z-index:-1;width:auto!important;height:auto!important;opacity:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}#nprogress .bar{background:#ff8700;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #ff8700,0 0 5px #ff8700;opacity:1;-webkit-transform:rotate(3deg) translate(0,-4px);transform:rotate(3deg) translate(0,-4px)}.t3-help-inline,.typo3-csh-inline{box-shadow:0 1px 3px rgba(0,0,0,.3);line-height:16px}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#ff8700;border-left-color:#ff8700;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.t3-help-link span.t3-help-inline{display:none}.t3-help-link:hover span.t3-help-inline{display:block}@media print{div#typo3-docbody{overflow:visible}}.t3-page-ce .t3-page-ce-footer,.text-monospace{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.text-normal{font-weight:400}.text-pre-wrap{white-space:pre-wrap}.lead{font-size:1.25em}@media (min-width:768px){.dl-horizontal-wide dt{width:115px}.dl-horizontal-wide dd{margin-left:135px}.table .col-word-break{word-wrap:break-word;word-break:break-all}}.t3-page-ce,.table-fit,.x-viewport,.x-viewport body,[id=typo3-debug-console] .messages,[id=typo3-docbody],[id=typo3-module-menu] .x-panel-body,[id=typo3-navigationContainer] .x-panel-body,[id=typo3-pagetree-filteringTree] .x-panel-body,[id=typo3-pagetree-tree] .x-panel-body,[id=typo3-side-menu],iframe{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.collapse-horizontal{height:auto;width:0;vertical-align:middle;overflow:hidden}.collapse-horizontal.in{display:inline-block;width:auto}.collapse-horizontal.collapsing{display:inline-block;width:0;-webkit-transition-property:width,visibility;transition-property:width,visibility}.cropper .cropper-line{background-color:transparent}.cropper .cropper-dashed{border:1px dashed #ff8700}.cropper .cropper-point{background-color:#ff8700}.cropper .cropper-point.point-nw{left:0;top:0}.cropper .cropper-point.point-w{left:0}.cropper .cropper-point.point-sw{left:0;bottom:0}.cropper .cropper-point.point-ne{right:0;top:0}.cropper .cropper-point.point-e{right:0}.cropper .cropper-point.point-se{right:0;bottom:0}.cropper .cropper-point.point-se:before{background-color:#fff}.cropper .cropper-point.point-n{top:0}.cropper .cropper-point.point-s{bottom:0}.cropper .cropper-view-box{outline:#ff8700 dashed 1px}.cropper .cropper-bg{background-image:url(../Images/cropper-background.png)}.cropper .cropper-image-container{height:100%!important;width:100%!important;max-width:1000px!important}.cropper .ratio-buttons{margin-bottom:10px}.cropper .ratio-buttons .btn.btn-default{margin-bottom:5px}.cropper .ratio-buttons .btn:not(.active) .fa{display:none}.cropper .panel-group{position:relative;margin:-15px}.cropper .panel-group [aria-expanded=true]{border-left:2px solid #ff8700;position:relative}.cropper .panel-group [aria-expanded=true][data-toggle=collapse]{background-color:#333}.cropper .panel-group [aria-expanded=false]{border-left:2px solid #444;position:relative}.cropper .panel-group label,.cropper .panel-group table{color:#fff}.cropper .panel-collapse.collapse{background-color:#2c2c2c!important;border-left:2px solid #ff8700}.cropper .panel-heading{padding:0}.cropper .panel-heading .panel-title>[data-crop-variant]{display:-webkit-box;display:-webkit-flex;display:flex;padding:10px 15px;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.cropper .panel-heading .panel-title>a{text-decoration:none!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:13px}.alert a,div.typo3-view-help a{text-decoration:underline}.cropper .panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#333}.cropper .panel,.cropper .panel-default .panel-heading,.cropper .panel-group{background:#222;border:none;color:#fff}.cropper .btn-secondary,.cropper .open .dropdown-toggle.btn-secondary{color:#fff;background-color:#777;border-color:#555}.cropper .btn-secondary.active,.cropper .btn-secondary:active,.cropper .btn-secondary:focus,.cropper .btn-secondary:hover,.cropper .open .active.dropdown-toggle.btn-secondary,.cropper .open .dropdown-toggle.btn-secondary:active,.cropper .open .dropdown-toggle.btn-secondary:focus,.cropper .open .dropdown-toggle.btn-secondary:hover{color:#fff;background-color:#888;border-color:#444}.cropper .cropper-container.cropper-bg{overflow:visible}.cropper .cropper-crop-box{overflow:hidden}.cropper .cropper-crop-box:after{background-color:#ff8700;content:"Cropped area";position:absolute;left:0;top:0;font-size:10px;color:#000;height:16px;width:100%;max-width:80px;text-overflow:ellipsis;white-space:nowrap;padding:0 4px;overflow:hidden}.cropper .cropper-line.line-w{left:0}.cropper .cropper-line.line-e{right:0}.cropper .cropper-line.line-n{top:0}.cropper .cropper-line.line-s{bottom:0}.cropper .ui-resizable-handle.ui-resizable-e,.cropper .ui-resizable-handle.ui-resizable-n,.cropper .ui-resizable-handle.ui-resizable-s,.cropper .ui-resizable-handle.ui-resizable-w{border-color:transparent;-webkit-transform:none;transform:none}.cropper .ui-resizable-handle.ui-resizable-e,.cropper .ui-resizable-handle.ui-resizable-w{width:6px}.cropper .ui-resizable-handle.ui-resizable-n,.cropper .ui-resizable-handle.ui-resizable-s{height:6px}.cropper .ui-resizable-handle.ui-resizable-e{right:0}.cropper .ui-resizable-handle.ui-resizable-w{left:0}.cropper .ui-resizable-handle.ui-resizable-n{top:0}.cropper .ui-resizable-handle.ui-resizable-s{bottom:0}.cropper .ui-resizable-handle.ui-resizable-ne,.cropper .ui-resizable-handle.ui-resizable-nw,.cropper .ui-resizable-handle.ui-resizable-se,.cropper .ui-resizable-handle.ui-resizable-sw{-webkit-transform:none;transform:none;background-color:#ccc;height:6px;width:6px}.cropper .ui-resizable-handle.ui-resizable-nw{top:0;left:0}.cropper .ui-resizable-handle.ui-resizable-ne{top:0;right:0}.cropper .ui-resizable-handle.ui-resizable-se{bottom:0;right:0}.cropper .ui-resizable-handle.ui-resizable-sw{bottom:0;left:0}.cropper .cropper-focus-area{cursor:move;height:200px;width:200px;background-color:rgba(215,187,0,.5);position:absolute;z-index:999999;opacity:1;overflow:hidden;-webkit-transition:background-color .3s;transition:background-color .3s}.cropper .cropper-cover-area:after,.cropper .cropper-focus-area:after{position:absolute;font-size:10px;height:16px;width:100%;white-space:nowrap;top:0;color:#000;overflow:hidden;left:0;pointer-events:none;text-overflow:ellipsis}.cropper .cropper-focus-area.has-nodrop,.cropper .cropper-focus-area.has-nodrop:hover{background-color:rgba(211,35,46,.6)!important;-webkit-transition:background-color .3s;transition:background-color .3s}.cropper .cropper-focus-area:focus,.cropper .cropper-focus-area:hover{background-color:rgba(215,187,0,.7)}.cropper .cropper-focus-area:after{background-color:rgba(255,255,255,.95);content:"Focus";max-width:44px;padding:0 4px 0 8px}.cropper .cropper-cover-area{background:url(../Images/cropper-background-cover-area.svg);pointer-events:none;cursor:not-allowed;position:absolute;opacity:1;z-index:99999}.cropper .cropper-cover-area:after{background-color:rgba(255,255,255,.95);content:"Cover area";max-width:80px;padding:0 4px}a.t3-help-link,a.typo3-csh-link{white-space:normal}.cropper .cropper-preview-thumbnail{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;max-width:100px;max-height:100px;overflow:hidden}.cropper .cropper-preview-thumbnail:after{background-color:rgba(0,0,0,.5);content:" ";top:0;left:0;bottom:0;right:0;position:absolute;z-index:9}a.t3-help-link .t3-help-inline.show-right,a.typo3-csh-link .typo3-csh-inline.show-right{right:10px}.cropper .cropper-preview-thumbnail.wide{width:100px;height:auto}.cropper .cropper-preview-thumbnail.tall{width:auto;height:80px}.cropper .cropper-preview-thumbnail-image{left:0;top:0}.cropper .wide .cropper-preview-thumbnail-image{width:100%;height:auto}.cropper .tall .cropper-preview-thumbnail-image{width:auto;height:100%}.cropper .cropper-preview-thumbnail-crop-area{border:1px solid #ff8700;position:absolute;z-index:10;overflow:hidden}.cropper .cropper-preview-thumbnail-focus-area{background-color:rgba(215,187,0,.7);position:absolute;z-index:11}:root .cropper-preview-thumbnail-crop-image{image-orientation:0deg;display:block;height:100%;width:100%;min-width:0;max-width:none;min-height:0;max-height:none}.cropper-preview-container{overflow:hidden;position:relative}.cropper-preview-container img{display:block;position:absolute;width:100%;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important}.typo3-csh-inline{padding:4px}table.typo3-csh-inline{margin:5px 4px 20px 0}table.typo3-csh-inline a.typo3-csh-link{float:none;margin-right:0;height:16px}a.typo3-csh-link .typo3-csh-inline{display:none;position:absolute;width:200px;z-index:100}a.typo3-csh-link:hover .typo3-csh-inline,table.typo3-csh-inline a.typo3-csh-link{display:block}table.typo3-csh-inline tr td h4{margin-top:0;margin-bottom:0}a.typo3-csh-link span.typo3-csh-inline span.paragraph,table.typo3-csh-inline span.paragraph{display:block;padding:3px}img.typo3-csh-icon{vertical-align:middle;cursor:help}div.typo3-view-help{margin:0;width:100%}div.typo3-view-help h1{background:0 0;margin-bottom:0;padding:10px;color:#000;text-align:left}div.typo3-view-help h2{margin-top:0;padding:4px 2px 4px 10px}div.typo3-view-help h3{padding:5px 10px}div.typo3-view-help h4{padding:2px 10px}div.typo3-view-help p{margin:4px 4px 12px 10px}div.typo3-view-help p.c-nav a{background-color:transparent}div.typo3-view-help div.c-toc{padding-left:6px}div.typo3-view-help div.c-toc p{margin:0}div.typo3-view-help .introduction,div.typo3-view-help .manual-title{padding:0 12px 6px}div.typo3-view-help img.c-inlineimg{margin-left:10px}div.typo3-view-help p div.c-toc{background:0 0;border:none}a.typo3-csh-link .typo3-csh-inline,table.t3-help-inline,table.typo3-csh-inline{background-color:#ffffc7;border:1px solid #ccc}.t3-help-inline{padding:4px}table.t3-help-inline{margin:3px 4px 20px 0}table.t3-help-inline a.t3-help-link{float:none;margin-right:0;height:16px;display:block}table.t3-help-inline tr td h4{margin-top:0;margin-bottom:0}a.t3-help-link .t3-help-inline{display:none;position:absolute;width:200px;z-index:100;background:#ffffc7;color:#000;font-weight:400}a.t3-help-link:hover .t3-help-inline{display:block}a.t3-help-link span.t3-help-inline span.paragraph,table.t3-help-inline span.paragraph{display:block;padding:3px}img.t3-help-icon{vertical-align:middle}div.t3-view-help{margin:0;width:100%}div.t3-view-help h1{margin-bottom:0;padding:10px}div.t3-view-help h2{margin-top:0;padding:4px 2px 4px 10px}div.t3-view-help h3{padding:5px 10px}div.t3-view-help h4{padding:2px 10px}div.t3-view-help p{margin:4px 4px 12px 10px}div.t3-view-help .c-toc{padding-left:6px}div.t3-view-help .c-toc p{margin:0}div.t3-view-help .introduction,div.t3-view-help .manual-title{padding:0 12px 6px}div.t3-view-help img.c-inlineimg{margin-left:10px}.x-tip.typo3-csh-tooltip .x-tip-cl,.x-tip.typo3-csh-tooltip .x-tip-tl{padding-left:8px}.x-tip.typo3-csh-tooltip .x-tip-cr,.x-tip.typo3-csh-tooltip .x-tip-tr{padding-right:8px}a.typo3-csh-link .typo3-csh-inline{color:#000;font-weight:400}p.t3-help-short.tipIsLinked{cursor:pointer}.t3-help-teaser,.t3-help-teaser label,.t3-help-teaser-icon,img.t3-help-icon{cursor:help}div#contentMenu0{position:absolute;z-index:300}div#contentMenu1{position:absolute;z-index:310}.context-menu .list-group{margin-bottom:0;background-color:#fff;min-width:150px}.context-menu .list-group-item{cursor:pointer;padding:5px;border-bottom-color:transparent;border-top-color:transparent}.context-menu .list-group-item:first-child{border-top-color:#d7d7d7}.context-menu .list-group-item:last-child{border-bottom-color:#d7d7d7}.context-menu .list-group-item-divider{display:block;padding:0 0 1px;margin:0 0 1px;width:100%;border-bottom-color:#d7d7d7}.context-menu .list-group-item-icon{width:1.28571429em;text-align:center}#typo3-docheader{background:#eee}#typo3-docheader img,#typo3-docheader input{cursor:pointer}#typo3-docheader .t3-icon{margin-bottom:3px}#typo3-docheader .left{float:left}#typo3-docheader .left .t3-icon{margin-right:6px}#typo3-docheader .right{float:right}#typo3-docheader .right .t3-icon{margin-left:6px}#typo3-docheader .buttongroup{float:left;margin-right:6px}#typo3-docheader .buttongroup .c-inputButton{color:inherit;padding:0}#typo3-docheader .buttongroup input.c-inputButton{text-indent:-1000px}#typo3-docheader select{margin-right:12px}#typo3-docheader a{color:#2d2d2d}#typo3-docheader a:hover{color:#000}#typo3-docheader a.active{color:#c3c3c3}#typo3-docheader a.active span{cursor:default}#typo3-docheader .typo3-docheader-buttons,#typo3-docheader .typo3-docheader-functions{color:#2d2d2d;overflow:hidden;padding:0 24px}#typo3-docheader .typo3-docheader-functions{height:27px;line-height:27px}#typo3-docheader .typo3-docheader-functions select{color:#2d2d2d}#typo3-docheader .typo3-docheader-buttons{height:22px;padding-top:3px;padding-bottom:3px;border-bottom:1px solid #c3c3c3}.alert-notice{background-color:#333;border-color:transparent;color:#fff}.alert-notice hr{border-top-color:transparent}.alert-notice .alert-link{color:#e6e5e5}.alert{box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);border:0}.alert a{color:inherit}.alert .media{margin:0}.alert .media .fa-stack>.fa:first-child{opacity:.2}.alert .media-body{vertical-align:middle}.alert-title{font-size:1.12em;font-weight:700;margin:0 0 .25em}.alert-body,.alert-message{margin:0;font-size:.9em}.alert-body>:last-child,.alert-message>:last-child{margin-bottom:0}.alert-body>ul,.alert-message>ul{padding-left:1.5em}.alert-dismissible .close{opacity:.5;padding:1px;top:-3px;right:-22px;color:inherit}.alert-dismissible .close:hover{opacity:1;color:inherit}#alert-container{width:400px;position:absolute;right:5px;top:46px;z-index:10000}#alert-container .alert{box-shadow:inset 0 0 0 1px rgba(0,0,0,.1),0 2px 0 0 rgba(0,0,0,.15);position:relative;margin:5px auto}#alert-container .alert.fade.in{opacity:.95}#typo3-pagetree-topPanelItems{background-color:#eee}#typo3-pagetree,#typo3-pagetree .x-panel-body,#typo3-pagetree .x-panel-bwrap{height:100%}#typo3-pagetree ul{padding-left:0;list-style:none}#typo3-pagetree .x-toolbar{padding:0;border:none}#typo3-pagetree ul.x-tree-root-ct{padding-top:24px;margin-bottom:50px}#typo3-pagetree .x-panel-body{background:0 0}#typo3-pagetree .x-tree-node .x-tree-node-el{line-height:18px;height:20px;margin-right:3px;border-top:1px solid transparent;border-bottom:1px solid transparent;border-left:1px solid transparent}#typo3-pagetree .x-tree-node .x-tree-node-over,#typo3-pagetree .x-tree-node .x-tree-selected{border-bottom:1px solid #d7d7d7;border-top:1px solid #d7d7d7;border-right:1px solid #d7d7d7}#typo3-pagetree .x-tree-node .x-tree-node-over{background-color:#f2f2f2;border-top-right-radius:3px;border-bottom-right-radius:3px}#typo3-pagetree .x-tree-node .x-tree-selected{background-color:#fff}#typo3-pagetree .x-tree-node .x-tree-selected.x-tree-node-over{background-image:none;border-radius:0}#typo3-pagetree .x-tree-node-readableRootline{padding:10px 0 3px 10px}#typo3-pagetree .x-unselectable,#typo3-pagetree .x-unselectable *{cursor:pointer}#typo3-pagetree .ver-element,#typo3-pagetree .ver-page,#typo3-pagetree .ver-versions{background-color:#f7c898}#typo3-pagetree .x-tree-node-over.ver-element,#typo3-pagetree .x-tree-node-over.ver-page,#typo3-pagetree .x-tree-node-over.ver-versions,#typo3-pagetree .x-tree-selected.ver-element,#typo3-pagetree .x-tree-selected.ver-page,#typo3-pagetree .x-tree-selected.ver-versions{background-color:#fee4c9}#typo3-pagetree .typo3-pagetree-filteringTree-highlight{background-color:#f48e0c;color:#fff;padding:0}.x-tree-lines .typo3-pagetree-node-notExpandable .x-tree-ec-icon{visibility:hidden}.x-tree-lines .typo3-pagetree-node-notExpandable ul .x-tree-ec-icon{visibility:visible}.x-dd-drag-ghost a .typo3-pagetree-status,.x-tree-node a .typo3-pagetree-status{padding:0;margin:0 3px 0 0}.typo3-pagetree-tree-copy{color:#666;margin-top:5px}.x-dd-drag-ghost-pagetree-text{display:inline-block;vertical-align:middle}.x-dd-drag-ghost,.x-dd-drag-ghost-pagetree{padding-bottom:5px}.x-dd-drop-icon{padding-top:6px}.x-dd-drag-ghost-pagetree span{margin:3px 3px 0}.x-dd-drag-ghost{background-color:inherit;border:none;box-shadow:0 1px 3px rgba(0,0,0,.3)}.x-dd-drag-ghost span{margin:0 1px 0 3px}.x-dd-drop-nodrop{background-color:#f6d3cf;border:1px solid #d66c68}.typo3-pagetree-deletionDropZone-proxyOver,.x-tree-drop-ok-above,.x-tree-drop-ok-append,.x-tree-drop-ok-below,.x-tree-drop-ok-between{background-color:#dce8f4;border:1px solid #9eb2c5}.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-place-denied.png)}.x-tree-drop-ok-append.typo3-pagetree-copy .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-new-inside.png)}.x-tree-drop-ok-below.typo3-pagetree-copy .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-copy-below.png)}.x-tree-drop-ok-above.typo3-pagetree-copy .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-copy-above.png)}.x-tree-drop-ok-between.typo3-pagetree-copy .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-new-between.png)}.x-tree-drop-ok-append .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-move-into.png)}.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-move-between.png)}.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-move-below.png)}.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-move-above.png)}#typo3-pagetree .x-tree-node .x-tree-drag-insert-below,.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a,.x-tree-node div.x-tree-drag-insert-below{border-bottom:1px solid #9eb2c5}#typo3-pagetree .x-tree-node .x-tree-drag-insert-above,.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a,.x-tree-node .x-tree-drag-insert-above{border-top:1px solid #9eb2c5}.x-tree-node .x-tree-drag-append{background:#d7e4f1}.x-tree-node .x-tree-drag-append a span{background-color:inherit;border:none}.typo3-pagetree-toppanel{padding:0 10px;border-bottom:1px solid #c3c3c3}.typo3-pagetree-toppanel .btn{line-height:16px}.typo3-pagetree-toppanel .x-toolbar{padding:0;border:0!important}.typo3-pagetree-toppanel .x-toolbar-left-row .btn{margin-right:4px}.typo3-pagetree-toppanel .x-toolbar-right-row .btn{margin-left:4px}.typo3-pagetree-toppanel .x-panel-body,.typo3-pagetree-toppanel .x-panel-tbar{margin:4px 0;min-height:26px;height:auto!important}.typo3-pagetree-toppanel .x-panel-bwrap{height:auto!important;overflow:visible}.typo3-pagetree-toppanel .x-btn button{padding:0;font-size:inherit}.typo3-pagetree-toppanel-filter{width:100%!important;height:26px!important;padding-right:25px;padding-left:8px;box-sizing:inherit}.slider-handle,.table *{box-sizing:border-box}.typo3-pagetree-toppanel-filter-clear{position:absolute;right:5px;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.typo3-pagetree-toppanel-item .x-form-field-wrap{width:100%!important}.typo3-pagetree-toppanel-item .x-panel-body{margin:0}.typo3-pagetree-toppanel-drag-node{cursor:move;padding:5px;border:none;background:0 0;font-size:11px;line-height:16px}#typo3-pagetree-deletionDropZone{color:#fff;background-color:#585858;box-shadow:inset 0 2px 5px #414141}#typo3-pagetree-deletionDropZone p{padding:5px}#typo3-pagetree-deletionDropZone #typo3-pagetree-deletionDropZone-text{cursor:default;font-size:.9em;padding:0 0 0 5px;display:inline}.typo3-pagetree-deletionDropZone-restore{background-color:#d5d5d5;background-repeat:repeat-x;background-image:-webkit-linear-gradient(top,#f6f6f6 10%,#d5d5d5 90%);background-image:linear-gradient(to bottom,#f6f6f6 10%,#d5d5d5 90%);border:1px solid #7c7c7c;border-radius:1px;color:#434343;cursor:pointer;display:inline-block;padding:0 6px;margin-left:24px}.typo3-pagetree-deletionDropZone-restore:hover{background-color:#c8c8c8;background-image:-webkit-linear-gradient(top,#f6f6f6 10%,#c8c8c8 90%);background-image:linear-gradient(to bottom,#f6f6f6 10%,#c8c8c8 90%);background-position:bottom;background-repeat:repeat-x;border:1px solid #737f91;color:#1e1e1e}.typo3-pagetree-deletionDropZone-restoreText{display:inline-block;padding:4px 4px 4px 18px}#typo3-pagetree .typo3-pagetree-deletionDropZone-activateProxyOver{background-color:#644d2d}[id=typo3-pagetree-indicatorBar] .alert{margin:10px 10px 0}.x-shadow{z-index:40!important}[id=typo3-pagetree-indicatorBar-temporaryMountPoint] .media-right{position:absolute;right:16px;-webkit-transform:translateY(-100%);transform:translateY(-100%);background-color:#6daae0}.slider{display:inline-block;position:relative}.slider .hide,.slider input{display:none}.slider .tooltip.top{margin-top:-36px}.slider .tooltip-inner{white-space:nowrap}.form-wizards-items>.slider.slider-horizontal{margin-left:8px;margin-right:8px}.slider-track{position:absolute;cursor:pointer;background-color:#ddd;border-radius:2px;box-shadow:inset 0 0 2px rgba(0,0,0,.25)}.slider-track-high,.slider-track-low{position:absolute;background:0 0;box-sizing:border-box;border-radius:2px}.slider-handle{position:absolute;background-color:#eee;border:1px solid #959595;border-radius:2px;box-shadow:0 1px 0 rgba(0,0,0,.15)}.slider-handle:active,.slider-handle:focus,.slider-handle:hover{background-color:#d5d4d4;border-color:#767676}.slider-handle:after,.slider-handle:before{content:"";display:block;position:absolute;background-color:#333}.slider-horizontal .slider-tick[style="left: 0%;"],.slider-horizontal .slider-tick[style="left: 100%;"],.slider-vertical .slider-tick[style="top: 0%;"],.slider-vertical .slider-tick[style="top: 100%;"]{display:none}.slider-selection{position:absolute;background-color:#999;border-radius:2px;box-shadow:inset 0 0 2px rgba(0,0,0,.25)}.slider-tick{position:absolute;background-color:#c4c3c3}.slider-tick.in-selection{background-color:#807f7f}.slider-horizontal{width:210px;height:32px}.slider-horizontal .slider-selection,.slider-horizontal .slider-track-high,.slider-horizontal .slider-track-low{height:100%;top:0;bottom:0}.slider-horizontal .slider-track{top:50%;left:0;margin-top:-8px;height:16px;width:100%}.slider-horizontal .slider-tick{height:16px;width:1px}.slider-horizontal .slider-handle{top:50%;height:20px;width:16px;margin-top:-10px;margin-left:-8px}.slider-horizontal .slider-handle:after,.slider-horizontal .slider-handle:before{height:50%;width:2px;top:25%}.slider-horizontal .slider-handle:before{left:4px}.slider-horizontal .slider-handle:after{right:4px}.slider-vertical{width:32px;height:210px}.slider-vertical .slider-selection,.slider-vertical .slider-track-high,.slider-vertical .slider-track-low{width:100%;left:0;right:0}.slider-vertical .slider-selection{bottom:0}.slider-vertical .slider-track{top:0;left:50%;margin-left:-8px;height:100%;width:16px}.slider-vertical .slider-tick{height:1px;width:16px}.slider-vertical .slider-handle{left:50%;height:16px;width:20px;margin-top:-8px;margin-left:-10px}.slider-vertical .slider-handle:after,.slider-vertical .slider-handle:before{height:2px;width:50%;left:25%}.slider-vertical .slider-handle:before{top:4px}.slider-vertical .slider-handle:after{bottom:4px}.slider-vertical .slider-selection{left:0;right:0}.slider-disabled .slider-handle{background-color:#c83c3c;border:1px solid #7b2323}.slider-disabled .slider-handle:active,.slider-disabled .slider-handle:focus,.slider-disabled .slider-handle:hover{background-color:#a32e2e;border-color:#4c1515}.slider-disabled .slider-handle:after,.slider-disabled .slider-handle:before{background-color:#fff}.slider-disabled .slider-track{cursor:not-allowed}.panel-heading[data-toggle=formengine-flex],.panel-heading[data-toggle=formengine-inline],.taskGroup{cursor:pointer}span.checkbox-spinner{position:absolute;margin-left:-20px;margin-top:4px}.nav-tabs{border-radius:2px 2px 0 0;background-color:#ededed}.nav-tabs>li+li{margin-left:2px}.nav-tabs>li>a{margin-right:0;-webkit-transition:all .25s ease-in-out;transition:all .25s ease-in-out}.nav-tabs>li>a:focus,.nav-tabs>li>a:hover{border-color:#d7d7d7 #d7d7d7 #ccc;background:#e1e0e0}.nav-tabs>li[class*=has-]>a:before{font-family:FontAwesome;margin-right:2px;margin-top:-2px;vertical-align:middle;font-size:10px;text-align:center;background-color:rgba(255,255,255,.25);border-radius:50%;width:15px;height:15px;display:inline-block;-webkit-transition:all .25s ease-in-out;transition:all .25s ease-in-out}.nav-tabs>li.has-validation-error>a{background-color:#c83c3c;border-color:#a32e2e;color:#fff}.nav-tabs>li.has-validation-error>a:focus,.nav-tabs>li.has-validation-error>a:hover{color:#fff;background-color:#ce5050;border-color:#b73434}.nav-tabs>li.has-validation-error>a:before{content:""}.nav-tabs>li.has-validation-error.active>a{color:inherit;background-color:#fafafa}.nav-tabs>li.has-validation-error.active>a:before{background-color:#c83c3c;color:#fff}.nav-tabs>li.active>a,.nav-tabs>li.active>a:active,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{border:1px solid #ccc;border-bottom-color:#fafafa;background-color:#fafafa}.tab-content>.tab-pane{display:block;height:0;width:0;overflow:hidden}.tab-content>.tab-pane.active{height:auto;width:auto;overflow:visible}.t3-overview-list dt{padding:0 0 2px 20px}.t3-overview-list dt img{vertical-align:middle;margin-right:5px}.t3-overview-list dd{margin:2px 0 15px 20px;padding-left:22px}table{background:0 0;font-size:inherit;line-height:inherit}.table{background-color:#fafafa;border:1px solid #ccc}.table .table{margin:0}.table .table+.table{margin-top:6px}.table .col-icon .t3-icon,.table .pagination{margin:0}.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>th{white-space:nowrap;vertical-align:middle}.table>tbody>tr>td,.table>tfoot>tr>td,.table>thead>tr>td{vertical-align:middle}.table>thead>tr{background-color:#ededed}.table>thead>tr th.col-checkbox+th.col-title label{margin-bottom:0}.table>thead>tr td,.table>thead>tr th{border-bottom:1px solid #ccc}.table>thead>tr td i,.table>thead>tr th i{font-weight:400}.table .btn-group>.btn,.table .btn-group>.btn-group{float:none}.table .btn-default{color:#333;background-color:#dedede;border-color:#c4c4c4}.table .btn-default.focus,.table .btn-default:focus{color:#333;background-color:#c4c4c4;border-color:#858585}.open>.table .btn-default.dropdown-toggle,.table .btn-default.active,.table .btn-default:active,.table .btn-default:hover{color:#333;background-color:#c4c4c4;border-color:#a6a6a6}.open>.table .btn-default.dropdown-toggle.focus,.open>.table .btn-default.dropdown-toggle:focus,.open>.table .btn-default.dropdown-toggle:hover,.table .btn-default.active.focus,.table .btn-default.active:focus,.table .btn-default.active:hover,.table .btn-default:active.focus,.table .btn-default:active:focus,.table .btn-default:active:hover{color:#333;background-color:#b3b3b3;border-color:#858585}.open>.table .btn-default.dropdown-toggle,.table .btn-default.active,.table .btn-default:active{background-image:none}.table .btn-default.disabled.focus,.table .btn-default.disabled:focus,.table .btn-default.disabled:hover,.table .btn-default[disabled].focus,.table .btn-default[disabled]:focus,.table .btn-default[disabled]:hover,fieldset[disabled] .table .btn-default.focus,fieldset[disabled] .table .btn-default:focus,fieldset[disabled] .table .btn-default:hover{background-color:#dedede;border-color:#c4c4c4}.table .btn-default .badge{color:#dedede;background-color:#333}.table .col-icon{text-align:center}.table .col-checkbox,.table .col-icon{padding-right:0}.table .col-title{width:99%}.table-basic,.table-fit{width:100%}.table .col-clipboard,.table .col-control,.table .col-nowrap{white-space:nowrap!important}.table .col-clipboard,.table .col-control{text-align:right}.table .col-control{padding:4px 6px}.table .col-border-left{border-left:1px solid #ccc}.table .col-min{min-width:150px}.table .col-responsive{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table-white{background-color:#fff}.table-transparent{background-color:transparent}.table-center td,.table-center th{text-align:center}.table-basic td,.table-basic th{vertical-align:middle}.table-vertical-top>tbody>tr>td,.table-vertical-top>tbody>tr>th,.table-vertical-top>tfoot>tr>td,.table-vertical-top>tfoot>tr>th,.table-vertical-top>thead>tr>td,.table-vertical-top>thead>tr>th{vertical-align:top}.table-vertical-bottom>tbody>tr>td,.table-vertical-bottom>tbody>tr>th,.table-vertical-bottom>tfoot>tr>td,.table-vertical-bottom>tfoot>tr>th,.table-vertical-bottom>thead>tr>td,.table-vertical-bottom>thead>tr>th{vertical-align:bottom}.table-no-borders{border:none}.table-no-borders>tbody>tr>td,.table-no-borders>tbody>tr>th,.table-no-borders>tfoot>tr>td,.table-no-borders>tfoot>tr>th,.table-no-borders>thead>tr>td,.table-no-borders>thead>tr>th{border:none;padding:2px}.table-fit{margin-bottom:1.5em;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-fit-block,.table-fit-block>.table,.table-fit-inline-block>.table{width:auto}.table-fit>.dataTables_wrapper>.table,.table-fit>.table{margin-top:0;margin-bottom:0;border:0}.table-fit>.dataTables_wrapper>.table colgroup:first-child+tbody tr:first-child td,.table-fit>.dataTables_wrapper>.table colgroup:first-child+tbody tr:first-child th,.table-fit>.dataTables_wrapper>.table tbody:first-child tr:first-child td,.table-fit>.dataTables_wrapper>.table tbody:first-child tr:first-child th,.table-fit>.table colgroup:first-child+tbody tr:first-child td,.table-fit>.table colgroup:first-child+tbody tr:first-child th,.table-fit>.table tbody:first-child tr:first-child td,.table-fit>.table tbody:first-child tr:first-child th{border-top:0}.table-fit>.dataTables_wrapper>.table tr>td,.table-fit>.dataTables_wrapper>.table tr>th,.table-fit>.table tr>td,.table-fit>.table tr>th{white-space:nowrap}@media (min-width:768px){.table-fit>.dataTables_wrapper>.table tr>td.col-word-break,.table-fit>.dataTables_wrapper>.table tr>th.col-word-break,.table-fit>.table tr>td.col-word-break,.table-fit>.table tr>th.col-word-break{white-space:normal}}.table-fit>.dataTables_wrapper>.table tr>td:first-child,.table-fit>.dataTables_wrapper>.table tr>th:first-child,.table-fit>.table tr>td:first-child,.table-fit>.table tr>th:first-child{border-left:0}.table-fit>.dataTables_wrapper>.table tr>td:last-child,.table-fit>.dataTables_wrapper>.table tr>th:last-child,.table-fit>.table tr>td:last-child,.table-fit>.table tr>th:last-child{border-right:0}.table-fit>.dataTables_wrapper>.table tr:last-child td,.table-fit>.dataTables_wrapper>.table tr:last-child th,.table-fit>.table tr:last-child td,.table-fit>.table tr:last-child th{border-bottom:0}.table-fit-wrap>.table tr>td,.table-fit-wrap>.table tr>th{white-space:normal}#dragIcon,.form-irre-header-cell,.list-tree-group,.nowrap,.t3-flex-section-header-preview,.treeline-icon,.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr td.c-labelCell{white-space:nowrap}.table-fit-inline-block{max-width:100%;width:auto;display:inline-block;margin:0}.table-fit-block{max-width:100%;display:block;margin:0}.table-spacer-wrap{margin-top:10px;margin-bottom:10px}.taskGroup--close .icon-actions-view-list-collapse{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.taskGroup--close td{padding:0!important;border:0!important}.taskGroup--close .t-span{height:0;overflow:hidden;padding:0;line-height:0;display:block}.tooltip-inner{padding:5px 10px}.panel{box-shadow:0 2px 0 rgba(0,0,0,.1)}.panel.ui-sortable-helper{border-style:dashed}.panel .panel-heading{font-weight:700}.panel-carousel{padding:15px}.panel-heading{position:relative}.panel-condensed .panel-heading{padding:5px}.panel-heading-collapse-indicator{position:absolute;left:2px;margin-top:-2px;top:50%}.panel-collapsed .panel-heading .caret{-webkit-transition:all .25s ease-in-out;transition:all .25s ease-in-out;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.panel-collapsed .panel-collapse{display:none;visibility:hidden}.panel-collapse>.alert,.panel>.alert{border:none;border-top:1px solid #ccc;margin:0;padding:9px 12px}.panel-collapse>.form-section,.panel-collapse>.tab-content>.form-section,.panel-collapse>.tab-content>.tab-pane>.form-section,.panel>.form-section,.panel>.tab-content>.form-section,.panel>.tab-content>.tab-pane>.form-section{border-left:0;border-right:0;border-bottom:0}.panel-collapse>.nav-tabs,.panel>.nav-tabs{border-top:1px solid #ccc;padding-top:8px}.panel-collapse>.nav-tabs>li,.panel>.nav-tabs>li{margin-left:-1px}.panel-collapse>.table,.panel-collapse>.table-fit,.panel>.table,.panel>.table-fit{border:0;margin:0}.recordlist .table-fit{margin-bottom:0}.panel-hover .panel-default:hover>.panel-heading{background-color:#e5e5e5}.panel-space{margin:3em 0}.panel-tab{border-radius:0;border:1px solid #ccc;background-color:#fafafa}.popover-content .list-group .list-group-item:last-child,.popover-title{border-bottom:0}.panel-tab+.form-section,.panel-tab+.panel-tab{margin-top:-19px}.tab-pane>.panel-tab:first-child{border-top:none}.panel-lg .panel-body{padding:35px}.panel-lg .panel-footer,.panel-lg .panel-heading{padding:18px 35px}.panel-lg .panel-carousel{padding:35px}.popover{padding:0}.popover-title{font-size:15px;padding:12px 14px}.popover-content p{margin:0}.popover-content .list-group{margin:-9px -14px}.popover-content .list-group .list-group-item{border-radius:0;border-left:0;border-right:0}.popover .close{margin-right:10px;margin-top:10px}.popover.bottom .arrow:after{border-bottom-color:#f7f7f7}.popover.no-title .arrow:after{border-bottom-color:#fff}.typo3-TCEforms{width:100%}.t3-form-field-container{display:block}.typo3-TCEforms .typo3-csh-link{margin-left:5px}.t3-flex-section,.t3-form-field-container-flexsections,.t3-form-flex{margin:5px 0;clear:both}.t3-form-field-container-inline-placeHolder .t3-form-field-header-inline>span{display:none}.sortableHandle{cursor:move}.t3-form-field-header-flexsection{width:100%;height:16px}.t3-form-field-add-flexsection{border-top:1px solid #cdcdcd;padding:10px 5px 5px 0}.c-inputButton,.c-inputButton:hover,.typo3-TCEforms table#typo3-altdoc-header input:hover,table#typo3-altdoc-header input{border:0;background:0 0}.t3-flex-section-content,.t3-form-field-record-flexsection{background:#eee;padding:5px 0}.t3-flex-section-content>div,.t3-form-field-record-flexsection>div{margin:0 10px}.t3-flex-section-header-preview{width:100px;display:inline-block;padding-left:10px;overflow:hidden;text-overflow:ellipsis}img.t3-tceforms-sysfile-imagepreview{float:left;margin-right:10px;margin-bottom:10px}* html div#typo3-docbody .typo3-TCEforms{margin-top:20px}.typo3-TCEforms img[src*="clear.gif"]{z-index:0}.t3-tceforms-input-wrapper-datetime .t3-icon-edit-pick-date{top:-4px}.typo3-TCEforms span.typo3-TCEforms-newToken{color:#900;font-weight:700}.typo3-TCEforms span.typo3-TCEforms-helpText{background:0 0;color:#fff}table.typo3-TCEforms-select-checkbox{background-color:#fff;border:1px solid #aaa}.t3-form-original-language,.t3-form-original-language-diff{border:1px solid silver;font-size:.9em;margin-top:4px}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr.c-header td{background-color:#fff;font-weight:700}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr:nth-child(2n){background-color:#f7f7f7}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr.c-selectedItem{background-color:#d8ecd0}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr.c-invalidItem{color:#ddd}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr:hover{background-color:#dedede}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr.c-selectedItem:hover{background-color:#abd99a}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr.c-invalidItem:hover{background-color:transparent}.form-field-inputlink-explanation{background:#eee}.t3-form-original-language{background-color:#dadada;padding:2px}.t3-form-original-language-diffheader{background-color:#c83c3c;font-weight:700;padding:2px}.t3-form-original-language-diffheader[href]:focus,.t3-form-original-language-diffheader[href]:hover{background-color:#a32e2e}.t3-form-original-language-diffcontent{padding:2px}.t3-form-original-language .icon{margin-right:5px}.typo3-TCEforms .typo3-TCEforms-checkboxArray td{padding-right:5px}div.typo3-TCEforms-suggest-choises a{cursor:pointer}div.t3-form-field-container:first-child .t3-form-field-label-flex{border-top:0}.t3-form-field-container-inline-hidden,.t3-form-field-container-inline-placeHolder{opacity:.3}.t3-form-field-header-inline table{vertical-align:top}.t3-tceforms-fieldReadOnly span.t3-icon{position:absolute;right:3px;top:4px}.t3-tceforms-widget-null-wrapper+.t3-form-field-item{display:inline-block}.t3-form-field-disable{display:none}.formengine-field-item.disabled{position:relative}.formengine-field-item.disabled .t3-form-field-disable{z-index:100;background:#fafafa;display:block;position:absolute;width:100%;height:100%;opacity:.5;filter:alpha(opacity=50)}.t3-form-field-eval-null-checkbox{z-index:150}.t3-form-palette-field-label{text-indent:2px}.t3-form-field-item .x-tree input.x-tree-node-cb{height:auto;margin:0 0 0 1px;vertical-align:middle}.t3-form-field-label.t3-form-field-state-changed{color:#004fb0}.icon-list{background:#fff;margin-top:9px;border:1px solid #ccc}.icon-list .row{margin:0}.icon-list .item{float:left;padding:6px;max-width:128px}.icon-list .item img{max-width:128px;max-height:128px}.list-tree,.list-tree ul{margin-left:8px;padding:0;list-style:none;position:relative}.list-tree ul:before,.list-tree:before{content:"";display:block;width:0;position:absolute;top:0;bottom:11px;left:0;margin-bottom:-2px;border-left:1px dotted #666}.list-tree li{margin:0;padding-left:16px;line-height:21px;position:relative}.list-tree li .icon,.treeline-icon{margin-right:2px}.list-tree li.active>.list-tree-group:before,.list-tree li:before{position:absolute;display:block;content:''}.list-tree li.active>.list-tree-group:before{right:-6px;left:-6px;top:-1px;bottom:-1px;border:1px solid rgba(0,0,0,.25);background-color:rgba(255,255,255,.75);border-radius:2px}.list-tree li:before{width:9px;height:0;border-top:1px dotted #666;margin-top:-2px;top:12px;left:2px}.list-tree li:last-child:before{background:#fff;height:auto;left:0;width:11px;bottom:0}.list-tree-control,.list-tree-show{position:relative;width:20px;text-align:center}.list-tree-group{position:relative;display:block}.list-tree-group>span{position:relative}.list-tree-value{font-weight:700}.list-tree-icon{top:-2px}.list-tree-show{display:inline-block;margin-left:-2px}.list-tree-control{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:block;float:left;margin-top:1px;margin-left:-26px;line-height:20px;height:20px}.list-tree-control:before{content:'';position:absolute;top:50%;left:50%;margin-top:-6px;margin-left:-6px;width:12px;height:12px}.list-tree-control:active,.list-tree-control:focus,.list-tree-control:hover{outline:0;text-decoration:none}.list-tree-control>.fa{display:inline-block;text-align:center;cursor:pointer}.list-tree-control>.fa:before{width:12px;height:12px;background-color:#fff;display:block}.list-tree-root:before,.list-tree-root>li:before{display:none}.list-tree-control.list-tree-control-open>.fa:before{content:"\f0d7"}.list-tree-control.list-tree-control-closed>.fa:before{content:"\f0da"}.list-tree-root{margin-left:0}.list-tree-root>li{padding-left:20px}.list-tree-root>li.list-tree-path,.list-tree-root>li>.list-tree-group>.list-tree-control{margin-left:-20px}.list-tree-root>li>.list-tree-group>.list-tree-control:before{background-color:transparent}.list-tree-root-clean>li{padding-left:0}[id=imp-exp-mod] .list-tree li:last-child:before,[id=imp-exp-mod] .list-tree-control>.fa:before{background-color:#f1f1f1}[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .list-tree li:last-child:before,[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .list-tree-control>.fa:before{background-color:#f5f5f5}[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .module-body{padding-left:10px;padding-right:10px}[id=ext-lowlevel-Modules-Configuration-index-php] .active>.list-tree-group{display:inline-block;color:#c83c3c}.treeline-icon{position:relative;display:inline-block;margin-top:-6px;margin-bottom:-6px;padding:0;height:31px;width:16px;overflow:hidden;vertical-align:top}.treeline-icon:after,.treeline-icon:before{position:absolute;content:'';left:50%}.treeline-icon:before{top:0;height:100%;width:2px;margin-left:-1px;border-left:1px dotted #666}.treeline-icon:after{border-top:1px dotted #666;height:2px;width:100%;top:50%;margin-top:-1px}.treeline-icon-jointop:before{top:50%}.treeline-icon-joinbottom:before{top:-50%}.treeline-icon-blank,.treeline-icon-clear:after,.treeline-icon-clear:before,.treeline-icon-line:after{display:none}#typo3-pagetree #typo3-docheader div.buttonsright{margin-right:3px}body#typo3-alt-db-navframe-php div.c-notice{border:1px solid #000;margin-top:5px;margin-bottom:10px;padding:5px;width:95%}body#typo3-pagetree{margin:0;padding:0}#typo3-pagetree #typo3-inner-docbody{padding:10px 0}span.dragIcon{display:inline-block;height:16px}#dragIcon{position:absolute;visibility:hidden;z-index:20;filter:alpha(opacity=50);opacity:.5}#typo3-pagetree-deletionDropZone .x-panel-body{background-position:right;background-repeat:repeat-y}[id=ext-backend-Modules-FileSystemNavigationFrame-index-php],[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .module-body,[id=typo3-pagetree-treeContainer]{background-color:#f5f5f5;height:100%}[id=typo3-pagetree-tree]{height:100%}[id=typo3-pagetree-tree] .x-panel-body{height:100%!important}[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .module-docheader{padding-left:10px;padding-right:10px}.x-layout-split{width:1px;background-color:#c3c3c3}[id=InfoModuleController] a.btn-default{margin-right:5px}[id=InfoModuleController] a.t3js-contextmenutrigger{margin-right:4px}.ui-block{text-align:center;padding-top:200px;position:absolute;z-index:3000;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.3)}.pagination .t3-icon{margin:0}.pagination .paginator-input{display:inline-block;width:auto;margin:-6px 0}.label-block,.pagination-block{display:block}.fieldSelectBox .table-scrollable{overflow:auto;max-height:210px}.fieldSelectBox table .col-title{padding:0 6px}.fieldSelectBox table .label-block{line-height:32px;height:32px}.label-block,.label-inline{margin:0;font-weight:400}.label-space-left{margin-left:1em}.label-space-right{margin-right:1em}.badge-info{background-color:#6daae0}.badge-info[href]:focus,.badge-info[href]:hover{background-color:#4392d7}.badge-success{background-color:#79a548}.badge-success[href]:focus,.badge-success[href]:hover{background-color:#5f8139}.badge-warning{background-color:#e8a33d}.badge-warning[href]:focus,.badge-warning[href]:hover{background-color:#d88b1a}.badge-danger{background-color:#c83c3c}.badge-danger[href]:focus,.badge-danger[href]:hover{background-color:#a32e2e}.btn-group-sm>.btn,.btn-sm{height:26px}.btn-group{font-size:0}.btn-group .collapse+.btn.collapsed:last-child{border-radius:2px}.btn-group .btn-default.disabled{color:#999}.dropzone,.dropzone-close{cursor:pointer;color:#333}.btn-checkbox input[type=checkbox],.btn-checkbox input[type=radio],.btn-radio input[type=checkbox],.btn-radio input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-checkbox .fa:before,.btn-radio .fa:before{content:"\f096"}.btn-checkbox input[type=checkbox]:checked+.fa:before,.btn-checkbox input[type=radio]:checked+.fa:before,.btn-radio input[type=checkbox]:checked+.fa:before,.btn-radio input[type=radio]:checked+.fa:before{content:"\f00c"}.dropzone{position:relative;margin:15px 0;padding:1.25em 46px 1.25em 1.25em;border:1px dashed #ccc;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.dropzone:hover{border-color:#999}.dropzone-mask{position:absolute;left:0;right:0;bottom:0;top:0}.dropzone-close{position:absolute;top:5px;right:5px;height:26px;width:26px;font-family:FontAwesome;font-size:14px;line-height:26px;text-align:center;-webkit-transform:translate(0,0);transform:translate(0,0);overflow:hidden;background-color:#eaeaea}.dropzone-close:hover{color:#fff;background-color:#c83c3c}.dropzone-close:before{content:"\f00d"}.dropzone-hint{display:table}.dropzone-hint-body,.dropzone-hint-media{display:table-cell;vertical-align:middle}.dropzone-hint-body :first-child{margin-top:0}.dropzone-hint-body :last-child{margin-bottom:0}.dropzone-hint-media{padding-right:1em}.dropzone-hint-icon{height:40px;width:40px;text-align:center;line-height:40px;font-size:16px;background-color:#eee;border-radius:50%;font-family:FontAwesome;-webkit-transform:translate(0,0);transform:translate(0,0)}.dropzone-hint-icon:before{content:"\f093"}.dropzone-hint-title{font-size:12px;font-weight:700;margin-bottom:.25em}.drop-status-ok .dropzone-hint-icon{color:#fff;background:#79a548}.drop-in-progress .dropzone-hint-icon:before{content:"\f063"}.upload-queue{margin:15px 0}.upload-queue-progress{position:relative;padding:5px;color:#fff;background-color:#999;border:1px solid rgba(0,0,0,.15);text-align:right}.upload-queue-progress-bar{position:absolute;z-index:1;top:0;left:0;bottom:0;background-color:#79a548}.upload-queue-progress-message,.upload-queue-progress-percentage{display:inline;position:relative;z-index:2}.t3-icon,.t3-icon .c-inputButton{display:inline-block;height:16px;width:16px}.upload-file-picker{position:fixed;bottom:0;right:0;height:1px;width:1px;visibility:hidden}.uploading .upload-queue-progress-bar{background-color:#6daae0}.error .upload-queue-progress-bar{background-color:#c83c3c}.t3-icon{position:relative;vertical-align:middle;background-image:url(../../../../backend/Resources/Public/Icons/icon_fatalerror.gif);background-repeat:no-repeat;margin-right:2px;text-align:center}.t3-icon.fa{background:0 0;font-size:14px}.btn-login.active,.btn-login:active,.open>.btn-login.dropdown-toggle,.t3-icon-empty{background-image:none}.t3-icon-overlay{display:block;position:absolute;left:0;top:0;width:16px;height:16px;text-decoration:none;padding:0}.typo3-login{background-color:#eee;background-repeat:no-repeat;background-size:cover;background-position:center center;display:table;position:absolute;top:0;left:0;padding:10px;width:100%;min-height:100%;height:100%}.typo3-login-container{display:table-cell;vertical-align:middle}.typo3-login-wrap{max-width:360px;margin:0 auto}.typo3-login-links{padding-top:inherit;margin-top:20px;margin-bottom:20px}.typo3-login-links .disabled{cursor:not-allowed!important;text-decoration:none!important;color:#737373!important}.typo3-login-links .disabled span{cursor:inherit}.t3-btn,a span{cursor:pointer}.typo3-login-logo{margin-bottom:30px}.typo3-login-logo>img{display:block;max-width:100%;height:auto;margin:0 auto}.typo3-login-news-heading{font-size:14px;line-height:1.3em;margin-top:0}.panel-login{border-color:#d5d4d4;border-radius:5px}.panel-login .panel-heading{border-top-right-radius:4px;border-top-left-radius:4px}.panel-login .panel-body{border-bottom:3px solid #f80}.panel-login .panel-footer{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-login,.input-login{padding:12px;font-size:12px;border-radius:2px}.panel-login a{font-weight:700}@media (max-width:767px){.panel-login{margin-bottom:0}}.input-login{height:41.2px;line-height:1.3333333;border-color:#ccc}select.input-login{height:41.2px;line-height:41.2px}select[multiple].input-login,textarea.input-login{height:auto}.input-login:focus{box-shadow:none}.btn-login{color:#fff;background-color:#f80;border-color:rgba(0,0,0,.1);line-height:1.3em}.btn-login.active,.btn-login.focus,.btn-login:active,.btn-login:focus,.btn-login:hover,.open>.btn-login.dropdown-toggle{color:#fff;background-color:#cc6d00;border-color:rgba(0,0,0,.1)}.btn-login.active.focus,.btn-login.active:focus,.btn-login.active:hover,.btn-login:active.focus,.btn-login:active:focus,.btn-login:active:hover,.open>.btn-login.dropdown-toggle.focus,.open>.btn-login.dropdown-toggle:focus,.open>.btn-login.dropdown-toggle:hover{color:#fff;background-color:#a85a00;border-color:rgba(0,0,0,.1)}.btn-login.disabled.focus,.btn-login.disabled:focus,.btn-login.disabled:hover,.btn-login[disabled].focus,.btn-login[disabled]:focus,.btn-login[disabled]:hover,fieldset[disabled] .btn-login.focus,fieldset[disabled] .btn-login:focus,fieldset[disabled] .btn-login:hover{background-color:#f80;border-color:rgba(0,0,0,.1)}.btn-login .badge{color:#f80;background-color:#fff}.btn-login:active,.btn-login:active:focus,.btn-login:active:hover,.btn-login:focus,.btn-login:hover,.btn-login:visited{background-color:#f80}.btn-login:active:focus,.btn-login:focus{outline:0}.btn-login:hover{box-shadow:inset 0 0 100px rgba(0,0,0,.125)}.btn-login:active:focus,.btn-login:active:hover{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-login:focus{box-shadow:none}.typo3-login-carousel-control{top:50%;margin-top:-30px;height:60px;line-height:60px;width:10px;background-color:#fff;text-align:center;position:absolute;opacity:.25;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.typo3-login-carousel-control:hover{opacity:1}.typo3-login-carousel-control.left{left:-10px;border:1px solid #d5d4d4;border-right:0;border-radius:2px 0 0 2px}.typo3-login-carousel-control.right{right:-10px;border:1px solid #d5d4d4;border-left:0;border-radius:0 2px 2px 0}@media (min-width:768px){.typo3-login-carousel-control{width:20px}.typo3-login-carousel-control.left{left:-20px}.typo3-login-carousel-control.right{right:-20px}}.typo3-login-copyright-link>img{float:right;margin-top:-4px}.typo3-login-copyright-text{margin-top:18px;color:#444}.typo3-login-copyright-text .fa{font-size:13px}.typo3-login-copyright-text>:first-child{margin-top:0}.typo3-login-copyright-text>:last-child{margin-bottom:0}div.typo3-noDoc{margin-left:10px;margin-top:5px;width:740px}div.typo3-noDoc h2{width:740px}div.typo3-fullDoc{height:100%;width:100%}div#typo3-docbody{position:absolute;top:49px;bottom:0;overflow:auto;width:100%;z-index:2}[id=typo3-inner-docbody]{padding:24px;margin-top:0;-webkit-transition:border .2s ease;transition:border .2s ease}body#typo3-show-item-php{padding:12px 24px}h1{font-family:Share,Verdana,Arial,Helvetica,sans-serif;font-variant:normal;font-weight:400;margin-top:0;margin-bottom:22px}.t3-overview-list dt,a.typo3-goBack,div.warningbox{font-weight:700}h2,h3{margin:24px 0 12px}blockquote,ol,ul{margin-bottom:9px}ol,ul{padding-left:3em}pre{margin:0}div.hr,hr{background:0 0;border:none;height:1px}.divider{padding-bottom:12px}li.divider{padding:0}video{background-color:#000}img.absmiddle{vertical-align:middle}.smallCheckboxes{height:12px;margin:0;width:12px}.alignToInputText,.alignToInputText:hover{margin-top:5px;margin-right:2px;vertical-align:top}tr:hover .t3-page-ce a,tr:hover .x-tree a{text-decoration:none}a.t3-link,table.warningbox td a{text-decoration:underline}.typo3-app-icon{position:relative;display:inline-block;padding:0;height:32px;width:32px;overflow:hidden;border-radius:2px;background-color:#484848;vertical-align:middle;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.typo3-app-icon>span{display:table;height:100%;width:100%}.typo3-app-icon>span>span{display:table-cell;text-align:center;vertical-align:middle}.typo3-app-icon img{max-height:32px;max-width:32px;margin:0 auto}.typo3-app-icon .fa{font-size:21px;vertical-align:middle}.typo3-app-icon:after{position:absolute;content:'';display:block;top:0;left:0;right:0;bottom:0;border:1px solid rgba(255,255,255,.1);border-radius:2px}.section{margin-bottom:15px}.diff-r{color:red}div.diff-r{background-color:red;color:#000}.diff-g{color:green}div.diff-g{background-color:green;color:#000}div.warningbox,table.warningbox{border:2px solid #000;background-color:#ff0}div.diff-g,div.diff-r{padding:3px}.c-na{color:#666}.not-found a{color:#ccc}.has-change .checkbox,.has-change .checkbox-inline,.has-change .control-label,.has-change .form-control-feedback,.has-change .help-block,.has-change .radio,.has-change .radio-inline,.has-change.checkbox label,.has-change.checkbox-inline label,.has-change.radio label,.has-change.radio-inline label{color:#6daae0}table.warningbox{margin:20px 0}table.warningbox td{padding:20px;font-weight:700}div.warningbox{margin:10px 0;padding:10px}span.warningboxheader{margin-left:5px}.media-gallery__list .media-gallery__item{display:inline-block;float:none;margin-bottom:15px;margin-right:-4px;vertical-align:top}.grideditor td,.input-group-icon,a.typo3-goBack img,span.typo3-moduleHeader img{vertical-align:middle}.media-gallery__list .media-gallery__item .media-object{max-height:158px;overflow:hidden}.media-gallery__list .media-gallery__item img.thumbnail{height:auto;margin-bottom:0;max-height:150px;max-width:100%}.grideditor div#editor,.grideditor td.editor_cell{height:100%}.media-gallery__list .media-gallery__item span.thumbnail{display:inline-block;margin-bottom:0}.grideditor table.editor{border:0;border-left:1px #d7d7d7 solid;border-top:1px #d7d7d7 solid}.grideditor table.editor td{vertical-align:middle;border:0;border-bottom:1px #d7d7d7 solid;border-right:1px #d7d7d7 solid;text-align:center;background-color:#fff;min-height:100px}.grideditor div.cell_container{width:80px;height:80px;position:relative;left:50%;margin-top:30px;margin-left:-30px;opacity:.3}.grideditor div.cell_container:hover{opacity:.5}.grideditor .grideditor-preview{margin-top:5px}.grideditor .link{display:block;position:absolute;width:20px;height:40px;overflow:hidden;opacity:.5}.form-control-holder,.form-group .t3js-formengine-field-item{position:relative}.grideditor .link:hover{text-decoration:none;opacity:1}.grideditor .link_expand_down,.grideditor .link_shrink_up{width:40px;height:20px}.grideditor .link_expand_right{left:52px;top:0}.grideditor .link_expand_right:before{font-family:FontAwesome;content:"";font-size:42px;line-height:42px}.grideditor .link_shrink_left{left:-8px;top:0}.grideditor .link_shrink_left:before{font-family:FontAwesome;content:"";font-size:42px;line-height:42px}.grideditor .link_expand_down{left:12px;top:40px}.grideditor .link_expand_down:before{font-family:FontAwesome;content:"";font-size:42px;line-height:19px}.grideditor .link_shrink_up{left:12px;top:-20px}.grideditor .link_shrink_up:before{font-family:FontAwesome;content:"";font-size:42px;line-height:20px}.grideditor .link_editor{width:40px;height:40px;left:12px;top:0}.grideditor .link_editor:before{font-family:FontAwesome;content:"";font-size:42px;line-height:42px}::-ms-clear{display:none}#typo3-docbody form{margin-bottom:1.25em}a.typo3-goBack img{margin-right:5px}span.typo3-moduleHeader img{margin-right:4px}.has-change .form-control{border-color:#6daae0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-change .form-control:focus{border-color:#4392d7;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c1dbf2}.has-change .input-group-addon{color:#6daae0;border-color:#6daae0;background-color:#ebf3fb}.has-change .thumbnail-status{border:1px solid #6daae0}.input-group-icon{width:32px}.input-group-icon img{width:100%;max-height:18px}.input-group-addon{min-width:2.5em}label .icon img{pointer-events:none}.form-control{min-width:120px}.form-control-adapt{width:auto;max-width:100%}.form-control-wrap{margin:9px 0}.row>.form-group>.form-control-wrap{margin-bottom:0}.form-group .t3js-formengine-field-item>.t3js-charcounter{left:0;position:absolute;top:100%}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{color:#737373}.form-control-icon{position:absolute;top:50%;left:15px;-webkit-transform:translate(0,-50%);transform:translate(0,-50%);z-index:1}.form-control-icon+.form-control,.form-control-icon+.form-control-clearable .form-control{padding-left:3.25em}.form-group.has-error label:before{font-family:FontAwesome;font-size:12px;text-align:center;content:"";color:#c83c3c;display:inline-block}.form-group.has-error .btn-toolbar label:before,.form-group.has-error .input-group-btn label:before{font-family:inherit;font-size:inherit;margin-right:inherit;text-align:inherit;content:'';display:block}.form-group.has-error .btn-toolbar label:before{color:inherit}.form-group.has-error .input-group-btn label{border-color:#c83c3c}.form-group.has-error .input-group-btn label .t3-icon{color:#c83c3c}.form-group.has-error .input-group-btn label:before{color:inherit}select.form-control[multiple],select.form-control[size]{min-height:156px;width:100%!important}select.form-control[size="1"]{height:32px;min-height:0}select.form-control:not([size]),select.form-control[size="1"]{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:not([size])::-ms-expand,select.form-control[size="1"]::-ms-expand{display:none}select.form-control:not([size]):not(.form-select-no-siblings),select.form-control[size="1"]:not(.form-select-no-siblings){background-image:url(../../../../../../typo3/sysext/core/Resources/Public/Icons/T3Icons/actions/actions-view-list-expand.svg);background-position:right 4px center;background-repeat:no-repeat;background-size:16px 16px;padding-right:24px}.form-group-sm select.form-control:not([size]),.form-group-sm select.form-control[size="1"],.input-group-sm>.input-group-btn>select.form-control.btn:not([size]),.input-group-sm>.input-group-btn>select.form-control[size="1"].btn,.input-group-sm>select.form-control:not([size]),.input-group-sm>select.form-control[size="1"],select.form-control:not([size]).input-sm,select.form-control[size="1"].input-sm{line-height:16px}select.form-control>optgroup{margin-top:9px}select.form-control>optgroup:first-child{margin-top:0}select.form-control option{padding-top:2px;padding-bottom:2px}select.icon-select option{padding-left:22px}.form-control-clearable{position:relative}.form-control-clearable .form-control{padding-right:2.3em}.form-control-clearable .close{position:absolute;height:16px;z-index:3;top:50%;right:.5em;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.form-control-clearable .close .icon{vertical-align:0}.input-group .form-control-clearable{display:table-cell}.input-group .form-control-clearable .form-control{display:block}.form-notice-capslock{position:absolute;right:6px;top:50%;margin-top:-10px;height:20px;width:20px;padding:3px;z-index:10;background-color:#fff}.form-notice-capslock>img{display:block;opacity:.5}.form-inline-spaced{margin:0 -.5em 18px}.form-inline-spaced .form-group{margin:.5em .5em 0}.form-inline-spaced .form-group label{margin-right:.5em}.form-group-dashed+.form-group-dashed{padding-top:15px;border-top:1px dashed #ccc}.form-section{border:1px solid #ccc;background-color:#fafafa;padding:15px 12px 3px}.form-section+.form-section{margin-top:-1px}.tab-pane>.form-section:first-child{border-top:none}.form-section-headline{margin-top:0;margin-bottom:10px}.form-wizards-wrap{display:table;width:100%}.form-wizards-wrap>.form-wizards-element{display:table-cell;width:100%}.form-wizards-wrap>.form-wizards-items-top{display:table-row}.form-wizards-wrap>.form-wizards-items-aside{display:table-cell;vertical-align:top;padding-left:5px;white-space:nowrap}.form-wizards-wrap>.form-wizards-items-bottom{display:table-row}.form-wizards-wrap>.form-wizards-items-bottom:first-child{margin-top:4px}.form-irre-header{display:table;margin:-5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-irre-header-cell{display:table-cell;vertical-align:middle;padding:5px}.form-irre-header-body{width:100%;font-weight:400;white-space:normal}.form-irre-header-body dl{margin-bottom:0}.checkbox-column,.form-multigroup-wrap .form-multigroup-item-wizard,.radio-column{margin-bottom:5px}.form-irre-header-icon{padding-right:0}.form-irre-header-control{cursor:auto}.form-irre-header-control .btn-group>.btn{float:none}.form-multigroup-wrap{width:100%;display:table}.form-multigroup-wrap .form-multigroup-item{display:table-cell;width:50%;vertical-align:top}.form-multigroup-wrap .form-multigroup-item+.form-multigroup-item{padding-left:5px}.form-multigroup-wrap .form-multigroup-item-wizard+select.form-control[multiple],.form-multigroup-wrap .form-multigroup-item-wizard+select.form-control[size]{min-height:125px}.form-multigroup-wrap .form-wizards-wrap{width:100%}.checkbox-row,.radio-row{margin-top:10px;margin-bottom:5px}.checkbox-column>.checkbox,.checkbox-column>.radio,.radio-column>.checkbox,.radio-column>.radio{margin:0}.checkbox-inline.checkbox,.checkbox-inline.radio,.radio-inline.checkbox,.radio-inline.radio{display:block;margin-left:0;margin-right:10px;margin-bottom:10px;padding:0}@media (max-width:767px){.checkbox-inline.checkbox+.checkbox,.checkbox-inline.checkbox+.radio,.checkbox-inline.radio+.checkbox,.checkbox-inline.radio+.radio,.radio-inline.checkbox+.checkbox,.radio-inline.checkbox+.radio,.radio-inline.radio+.checkbox,.radio-inline.radio+.radio{margin-top:-5px}}@media (min-width:768px){.checkbox-inline.checkbox,.checkbox-inline.radio,.radio-inline.checkbox,.radio-inline.radio{display:inline-block;margin-top:10px}.checkbox-inline.checkbox label,.checkbox-inline.radio label,.radio-inline.checkbox label,.radio-inline.radio label{white-space:nowrap}}textarea.formengine-textarea{resize:none}.media-new-content-element-wizard .media-left input{margin-left:2px}.query-builder .form-inline>.form-control-clearable{display:inline}.query-builder .form-group-with-button-addon .input-group{margin-bottom:10px}.query-builder .form-group-with-button-addon .input-group .input-group-addon{padding:0 0 0 1px}.query-builder .form-group-with-button-addon .input-group .input-group-addon .btn-default{border:0}.query-builder .from-control-operator{width:70px;min-width:70px}.t3-grid-table,.t3-page-columns{min-width:100%}.query-builder .action-button-group{margin:10px 0}.query-builder .row-group{margin:10px 0;padding:10px;border-color:#999;box-shadow:0 2px 5px 0 #999}.query-builder .indent{padding-left:20px}.tx_recycler_recycler tr.collapse{display:none}.tx_recycler_recycler tr.collapse.in{display:table-row}.tx_scheduler_mod1 .table td{vertical-align:top}.tx_scheduler_mod1 .table span.name{display:block}.tx_scheduler_mod1 .table span.description{font-style:italic;white-space:normal;color:#737373}.tstemplate-constanteditor .input-group.userTS .input-group-addon.colorbox{display:inline-block;height:100%;position:absolute}.t3-grid-table{border-spacing:10px 0}.t3-grid-container{margin:0 -10px 18px}.t3-grid-cell{background-color:#fafafa;border-bottom:1px solid #cdcdcd}.t3-grid-cell-restricted{background-color:#efc7c7}.t3-grid-cell-unassigned{background:url(../../../../backend/Resources/Public/Images/Backgrounds/layout-not-assigned.png)}.t3-page-column{min-width:150px;max-width:300px}.t3-page-column>h2{margin-top:0}.t3-page-column-header-icons{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in;opacity:.3;position:absolute;right:10px;bottom:5px}.t3-page-column-header{padding:20px 10px 5px;position:relative;background:#fff;border-bottom:1px solid #cdcdcd;color:#999;text-align:left}[data-colpos=unused] .t3-page-column-header{color:#e8a33d;padding-top:60px}.t3-page-column-header a{position:relative}.t3-page-column-header:hover .t3-page-column-header-icons{opacity:1}.t3-page-columns-mode img.c-divider{margin:10px 0 5px}.t3-page-ce,.t3-page-lang-copyce{margin:10px}.t3-page-ce-wrapper{min-height:2em}.t3-page-ce{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.t3-page-ce.active-drag{z-index:4500}.t3-page-ce *{border-spacing:0}.t3-page-ce>.t3-page-ce{margin-left:0;margin-right:0}.t3-page-ce .t3-page-ce-body-inner{padding:10px;word-wrap:break-word}.t3-page-ce .t3-page-ce-body-inner img{max-width:100%;height:auto}.t3-page-ce .t3-page-ce-header{-webkit-transition:background .15s ease-in;transition:background .15s ease-in;padding:5px;border:1px solid #ccc;border-bottom:0;border-radius:2px 2px 0 0;background:#eaeaea}.t3-page-ce .t3-page-ce-header-icons-left{float:left}.t3-page-ce .t3-page-ce-header-icons-left>a{display:inline-block;padding:4px}.t3-page-ce .t3-page-ce-header-icons-right{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in;opacity:.3;float:right}.t3-page-ce .t3-page-ce-body{margin-bottom:10px;border:1px solid #ccc;border-top:0;border-radius:0 0 2px 2px;background-color:#fff}.t3-page-ce .t3-page-ce-footer{font-size:11px;padding:5px 10px;background:#fafafa}.t3-page-ce:hover .t3-page-ce-header{background:#d0d0d0}.t3-page-ce:hover .t3-page-ce-body,.t3-page-ce:hover .t3-page-ce-header{border-color:#aaa}.t3-page-ce:hover .t3-page-ce-body{box-shadow:0 1px 0 rgba(0,0,0,.15)}.t3-page-ce:hover .t3-page-ce-header-icons-right{opacity:1}.t3-page-ce-danger:hover .t3-page-ce-header{background-color:#a32e2e;border-color:#a32e2e}.t3-page-ce-danger:hover .t3-page-ce-body{border-color:#a32e2e}.t3-page-ce-danger .t3-page-ce-header{background-color:#c83c3c;border-color:#c83c3c}.t3-page-ce-danger .t3-page-ce-header:hover{background-color:#a32e2e;border-color:#a32e2e}.t3-page-ce-danger .t3-page-ce-body{border-color:#c83c3c}.t3-page-ce-warning:hover .t3-page-ce-header{background-color:#d88b1a;border-color:#d88b1a}.t3-page-ce-warning:hover .t3-page-ce-body{border-color:#d88b1a}.t3-page-ce-warning .t3-page-ce-header{background-color:#e8a33d;border-color:#e8a33d}.t3-page-ce-warning .t3-page-ce-header:hover{background-color:#d88b1a;border-color:#d88b1a}.t3-page-ce-warning .t3-page-ce-body{border-color:#e8a33d}.t3-page-ce-hidden{opacity:.4;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.t3-page-ce-hidden:hover{opacity:1}.t3-page-ce-dropzone-available.active{border:1px dashed #e8a33d;border-radius:2px;background-color:#fbefdd;height:27px}.t3-page-ce-dropzone-available.active.t3-page-ce-dropzone-possible{border:1px dashed #79a548;border-radius:2px;background-color:#d1e2bd;margin:-38px 0 -37px;padding:50px 10px;z-index:500;position:relative;opacity:.65}.t3-page-ce-dragitem.dragitem-shadow{opacity:.65;box-shadow:0 1px 24px rgba(0,0,0,.5)}.t3-page-ce.ui-draggable-handle{height:auto!important}.t3-page-ce-dragitem .t3-page-ce-header-draggable:hover{cursor:move}.t3-is-dragged .t3-page-ce-body{max-height:225px;overflow:hidden}.t3-page-ce-dropzone-available.active,.t3-page-ce-dropzone-possible{max-height:225px}#workspace-panel tr.collapsing{-webkit-transition:none;transition:none}#workspace-panel tr.collapse{display:none}#workspace-panel tr.collapse.in{display:table-row}span.item-state-modified{color:#f78f25}span.item-state-moved{color:#457fb8}span.item-state-new{color:#3c9934}span.item-state-hidden{color:#abaaaa}span.item-state-deleted{color:#000;text-decoration:line-through}.legend{margin:5px;height:18px;color:#888}.legend dd,.legend dt{display:inline;overflow:hidden}.legend dd span{display:inline-block;padding:4px}#typo3-debug-console{background-color:#f5f5f5;width:100%;position:absolute;bottom:0;z-index:1000;border:1px solid #b1b1b1}#typo3-debug-console .topbar{background-color:#d7d7d7;padding:6px;border-bottom:1px solid #b1b1b1}#typo3-debug-console .topbar .badge{margin-left:6px}#typo3-debug-console .messages{padding:6px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;height:250px;overflow:auto}#typo3-debug-console .messages .table{width:auto}#typo3-debug-console .messages p{margin:0}#typo3-debug-console .messages p strong{padding-right:4px}.typo3-dblist-sysnotes{margin-top:15px}.typo3-dblist-sysnotes .panel-sysnote{border:0}.typo3-dblist-sysnotes .panel-sysnote .panel-heading{padding:5px}.typo3-dblist-sysnotes .panel-sysnote .panel-heading .typeicon{padding:4px 4px 12px}.typo3-dblist-sysnotes .panel-sysnote .panel-heading .typeicon .icon{margin-top:5px}.typo3-dblist-sysnotes .panel-sysnote .panel-body h4{margin-top:0}.typo3-dblist-sysnotes .panel-sysnote-category-1{background-color:#ebf3fb;color:#333}.typo3-dblist-sysnotes .panel-sysnote-category-2{background-color:#fbefdd;color:#333}.typo3-dblist-sysnotes .panel-sysnote-category-3{background-color:#f9f9f9;color:#333}.typo3-dblist-sysnotes .panel-sysnote-category-4{background-color:#d1e2bd;color:#333}.typo3-extensionmanager-headerRowLeft{float:left}.typo3-extensionmanager-headerRowRight{float:right}.ui-toolbar{margin-bottom:5px}.ui-toolbar .dataTables_filter{float:left}.dataTables_info{display:none}.dataTables_paginate{float:left;margin:10px 0 0}.uploadForm{background-color:#ededed;border-top:1px solid #cdcdcd;border-bottom:1px solid #cdcdcd;padding:12px;margin-bottom:24px}.uploadForm form .control-group{clear:both;margin-bottom:5px}.uploadForm form label{float:left;height:20px;padding:4px 0;line-height:20px;width:90px}.uploadForm form .control{min-height:20px;padding:4px 0;margin-left:110px}.distribution{border:1px solid #cfcfcf;background-color:#f5f5f5;margin-bottom:20px;margin-left:20px;width:300px;float:left}.distribution:hover{background-color:#ededed}.distribution:hover .distribution-hover{top:0;opacity:1}.distribution:hover .distribution-more{text-decoration:underline}.distribution .typo3-dependency-version{position:absolute;right:0}.distribution-holder{margin-top:1em;bottom:0;margin-left:-20px}.distribution-image{position:relative;width:300px;height:225px;overflow:hidden}.distribution-image img{display:block;height:100%;width:100%}.distribution-hover{background-color:#f5f5f5;position:absolute;top:100%;left:0;width:300px;height:225px;overflow:hidden;opacity:0;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.distribution-hover-inner{padding:15px}.distribution-meta{border-top:1px solid #dcdbdb;padding:15px}.distribution-meta .distribution-title{margin:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:14px}.distribution-meta .distribution-install{margin-top:.5em}.distribution-detail{min-width:750px}.distribution-detail-previewpane{float:left;margin-right:30px}.distribution-detail-preview{display:block;border:1px solid #cfcfcf}.distribution-detail-body{overflow:hidden;zoom:1}.distribution-detail-header{margin-bottom:2.5em}.distribution-detail-header h1{margin-bottom:.5em}.distribution-detail-header p{padding:0;max-width:500px;margin-bottom:1.25em}.distribution-detail-summary{margin-top:2.5em;margin-bottom:2.5em}.distribution-installed hr{margin:2.5em 0;border:0;border-top:1px solid #cfcfcf}.ui-widget-header{background:0 0;border:none;font-weight:400}.dataTables_info{font-size:10px;color:#444;float:left}.paging_two_button .ui-button{float:left;cursor:pointer}.paging_full_numbers{float:right}.paging_full_numbers .ui-button{padding:2px 6px;margin:0;cursor:pointer;color:#333!important}.dataTables_paginate{width:auto}.dataTables_paginate .ui-button{margin-right:-.1em!important}.typo3-extension-list .ext-icon{max-height:16px;max-width:16px}.typo3-extension-list tr.installed td{background-color:#c8ffaa}.typo3-extension-list tr.available td{background-color:#e1e1aa}.typo3-extension-list .inactive{color:#aaa}.typo3-extension-list .insecure{color:#ff2262}.typo3-extension-list .insecure a{color:inherit}.typo3-extension-list .outdated{color:#0c08ff}.typo3-extension-list .outdated a{color:inherit}.typo3-extension-list .author{display:none}#extensionUploadForm div.control-group:last-child{margin-bottom:0}.headerTooltip{box-shadow:2px 2px 11px #666;display:none;width:150px;background-color:#ffa;border:1px solid #cc9;padding:3px;font-size:13px;z-index:1000}#terTableWrapper{position:relative;margin-top:1em}#terTableWrapper .splash-receivedata{display:none;position:absolute;top:50px;left:50%;margin:0 0 0 -150px}#typo3-docbody form.download,div.typo3-module-lang table.t3-datatable div.progress{margin-bottom:0}#terTableWrapper .splash-receivedata a{display:inline-block;width:200px;vertical-align:top;padding:3px 20px}#terTableWrapper .splash-receivedata.is-shown{display:block}#terTableWrapper .spinner{display:inline-block}#terTableWrapper .ui-icon{width:16px;height:16px}.time-since-last-update{font-weight:700;padding-right:.4em;cursor:help}.is-loading{opacity:0}.is-hidden{display:none}.typo3-extensionmanager-headerRowLeft,.versions-all{display:inline-block}.versions-all{width:20px;text-indent:-200px;overflow:hidden}.currentVersionInfo{padding:0 0 20px}.currentVersionInfo td{padding:4px 0}.currentVersionInfo th{font-weight:400;color:#8c8c8c;padding:4px 20px 4px 0}span.ter-ext-state{padding:0 0 0 5px;font-weight:700;text-transform:capitalize}.typo3-extensionmanager-headerRowLeft .typo3-extensionmanager-searchTerFieldWrapper{display:inline-block;position:relative}.typo3-extensionmanager-headerRowLeft .typo3-extensionmanager-searchTerFieldWrapper input{height:15px}.typo3-extensionmanager-headerRowLeft .typo3-extensionmanager-searchTerFieldWrapper .t3-icon-input-clear{position:absolute;right:3px;top:4px}div.typo3-module-lang table.t3-datatable{width:100%!important}div.typo3-module-lang table.t3-datatable th.sorting,div.typo3-module-lang table.t3-datatable th.sorting_asc,div.typo3-module-lang table.t3-datatable th.sorting_desc{cursor:pointer}div.typo3-module-lang table.t3-datatable tr>.extensionName{padding-left:0!important}div.typo3-module-lang table.t3-datatable tr>.dt-center{text-align:center}div.typo3-module-lang table.t3-datatable tr.disabled{color:#aaa}div.typo3-module-lang table.t3-datatable tr div.progressBar,div.typo3-module-lang table.t3-datatable tr.disabled a.deactivateLanguageLink,div.typo3-module-lang table.t3-datatable tr.disabled a.removeLanguageLink,div.typo3-module-lang table.t3-datatable tr.disabled a.updateLanguageLink,div.typo3-module-lang table.t3-datatable tr.disabled a.updateTranslationLink,div.typo3-module-lang table.t3-datatable tr.enabled a.activateLanguageLink{display:none}div.typo3-module-lang table.t3-datatable tr div.progressBar .progress{position:relative}div.typo3-module-lang table.t3-datatable tr div.progressBar .progress .progress-text{position:absolute;color:#fff;text-align:center;width:100%;text-shadow:0 0 6px #000}div.typo3-module-lang table.t3-datatable tr.complete div.progressBar,div.typo3-module-lang table.t3-datatable tr.processing div.progressBar{display:inline;cursor:default}div.typo3-module-lang table.t3-datatable td span.complete,div.typo3-module-lang table.t3-datatable td span.loading,div.typo3-module-lang table.t3-datatable td.complete a.removeLanguageLink,div.typo3-module-lang table.t3-datatable td.complete a.updateLanguageLink,div.typo3-module-lang table.t3-datatable td.complete a.updateTranslationLink,div.typo3-module-lang table.t3-datatable td.processing a.removeLanguageLink,div.typo3-module-lang table.t3-datatable td.processing a.updateLanguageLink,div.typo3-module-lang table.t3-datatable td.processing a.updateTranslationLink,div.typo3-module-lang table.t3-datatable tr.complete a.removeLanguageLink,div.typo3-module-lang table.t3-datatable tr.complete a.updateLanguageLink,div.typo3-module-lang table.t3-datatable tr.complete a.updateTranslationLink,div.typo3-module-lang table.t3-datatable tr.processing a.removeLanguageLink,div.typo3-module-lang table.t3-datatable tr.processing a.updateLanguageLink,div.typo3-module-lang table.t3-datatable tr.processing a.updateTranslationLink{display:none}div.typo3-module-lang table.t3-datatable td.actions span{cursor:pointer}div.typo3-module-lang table.t3-datatable td.processing span.loading{display:inline;cursor:default}div.typo3-module-lang table.t3-datatable td.processing span.loading .t3-icon{cursor:default;width:14px;height:14px;margin:0}div.typo3-module-lang table.t3-datatable td.complete span.complete{display:inline}div.typo3-module-lang div.menuItems.processing span.updateItem{display:none}div.typo3-module-lang div.menuItems.processing span.cancelItem,div.typo3-module-lang div.menuItems.processing span.loadingItem{display:inline}div.typo3-module-lang div.menuItems span.cancelItem,div.typo3-module-lang div.menuItems span.loadingItem{display:none}div.typo3-module-lang div.menuItems span.cancelItem .t3-icon,div.typo3-module-lang div.menuItems span.loadingItem .t3-icon{height:14px;width:14px}div.typo3-module-lang div.menuItems span.cancelItem,div.typo3-module-lang div.menuItems span.updateItem{cursor:pointer}div.typo3-module-lang .div.dataTables_filter input{margin-left:3px}div.typo3-module-lang div.progress-bar{background-color:#222}.beuser-legend{margin-bottom:18px}.beuser-legend .pull-left{margin-right:.5em}.beuser-legend td{overflow:hidden}.beuser-legend .t3-icon{margin-right:0}.beuser-legend .number{border:1px solid #000;border-radius:2px;width:16px;height:16px;display:inline-block;text-align:center;margin-right:5px;margin-left:10px;line-height:14px;font-weight:700}.beuser-legend .edge span{width:1px;height:10px;background:#000;display:block;margin-top:8px;margin-left:6px}.beuser-legend .edge span span{width:10px;height:1px;margin-left:1px}.beuser-legend .hr span{width:20px;height:1px;background:#000;display:block;margin-top:-1px;margin-left:-4px}.beuser-legend .vr span{width:1px;height:20px;background:#000;margin-top:-2px;margin-left:6px;display:block}.col-icon img{max-width:28px;max-height:28px}.tx_cshmanual .t3-copyright-notice{font-size:11px;color:#1e1e1e;border-top:1px solid #d7d7d7;padding-top:24px}.tx_cshmanual .t3-copyright-notice>:last-child{margin-bottom:0}.localization-wizard .option,[data-slide=localize-summary] .input-group{margin-bottom:4px}[data-slide=localize-summary] .input-group .form-control{height:auto;font-weight:400}.workspace-info{padding:7px}.workspace-overview td{vertical-align:top}img.c-inputButton,input.c-inputButton{margin-right:2px;vertical-align:middle}table.typo3-dblist tr td.col-icon{vertical-align:middle;width:20px}table.typo3-dblist tr td.col-icon a img.collapseIcon{margin:1px 0 0 2px}table.typo3-dblist tr td.col-title{overflow:hidden;vertical-align:middle;width:350px}table.typo3-dblist tr td.col-title.localization{padding-left:18px}table.typo3-dblist tr td.col-control{width:250px}table.typo3-dblist tr td.col-control-space{width:4px}table.typo3-dblist tr td.col-clipboard{width:74px}table.typo3-dblist-overview{margin-top:10px;margin-left:1px;width:410px}table.typo3-dblist-overview td.c-tableDescription{padding-left:10px}table.typo3-dblist-overview td.c-tableDescription img{margin-right:10px}div#typo3-newRecordLink,div.typo3-localizationLink,div.typo3-newRecordLink,div.typo3-synchronizationLink{display:inline}div#typo3-newRecordLink img,div.typo3-localizationLink img,div.typo3-newRecordLink img,div.typo3-synchronizationLink img{margin-right:5px;vertical-align:middle}input.smallCheckboxes{height:12px;margin:0;padding:0;vertical-align:middle;width:12px}div.typo3-listOptions{margin:0 0 24px}.t3-list-table-header-icon-down{display:inline-block;height:6px;padding:5px 4px;width:9px}.t3-list-table-header-icon-right{display:inline-block;height:8px;padding:4px 5px;width:7px}.db_list-searchbox-toolbar .form-inline{margin-top:-.5em;margin-bottom:0}.typo3-docheader-buttons+.db_list-searchbox-toolbar{box-shadow:0 3px 0 rgba(0,0,0,.15);position:absolute;z-index:999;width:100%}.typo3-docheader-buttons+.db_list-searchbox-toolbar .panel{border-radius:0;border:0;margin:0}.typo3-docheader-buttons+.db_list-searchbox-toolbar .panel-default{background-color:#eee}pre.ts-hl{font-family:"Lucida Console","Lucida Sans Typewriter","Bitsream Vera Sans Mono",monospace}pre.ts-hl .ts-operator{color:#000;font-weight:700}pre.ts-hl .ts-value{color:#c00}pre.ts-hl .ts-objstr{color:#00c}pre.ts-hl .ts-value_copy{color:#060}pre.ts-hl .ts-default,pre.ts-hl .ts-ignored,pre.ts-hl .ts-value_unset{background-color:#6c6}pre.ts-hl .ts-comment{color:#666}pre.ts-hl .ts-condition{background-color:maroon;color:#fff;font-weight:700}pre.ts-hl .ts-error{background-color:#ff0;border:1px dashed red;font-weight:700;color:#000}pre.ts-hl .ts-linenum{background-color:#eee;color:#212424}#typo3-pagetree .workspace-info{background-color:#ffec97;font-weight:700}
\ No newline at end of file
+@charset "UTF-8";.minicolors-panel,.minicolors-picker,hr{box-sizing:content-box}.fa-ul>li,sub,sup{position:relative}.fa-fw,.fa-li{text-align:center}.cropper-container,html{-webkit-tap-highlight-color:transparent}.card,.img-thumbnail{-webkit-transition:all .2s ease-in-out}.img-responsive,.img-thumbnail,.table,label{max-width:100%}.btn,.modulemenu .modulemenu-group-header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.t3-grid-table,.table-fixed{table-layout:fixed}#nprogress,.cropper .cropper-crop-box:after,.form-control-feedback,a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}.fa,.fa-stack{display:inline-block}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.open>.btn-danger.dropdown-toggle,.open>.btn-default.dropdown-toggle,.open>.btn-info.dropdown-toggle,.open>.btn-success.dropdown-toggle,.open>.btn-warning.dropdown-toggle{background-image:none}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{margin-top:18px;margin-bottom:18px}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}td,th{padding:0}@font-face{font-family:FontAwesome;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?v=4.7.0);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff2?v=4.7.0) format("woff2"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff?v=4.7.0) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.ttf?v=4.7.0) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.fa-stack,.radio-inline,img{vertical-align:middle}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.svg#Share-BoldRegular) format("svg");font-weight:700;font-style:normal}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.svg#Share-ItalicRegular) format("svg");font-weight:400;font-style:italic}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.svg#Share-Regular) format("svg");font-weight:400;font-style:normal}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.svg#Share-BoldItalicRegular) format("svg");font-weight:700;font-style:italic}*,:after,:before{box-sizing:border-box}html{font-size:10px}body{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;line-height:1.5;color:#000;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{background-color:transparent;color:#212424;text-decoration:none}a:focus,a:hover{color:#000;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}figure{margin:0}.img-responsive{display:block;height:auto}.img-rounded{border-radius:2px}.img-thumbnail{padding:4px;line-height:1.5;background-color:#fff;border:1px solid #ddd;border-radius:2px;transition:all .2s ease-in-out;display:inline-block;height:auto}.img-circle{border-radius:50%}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after,.bootstrap-datetimepicker-widget .btn[data-action=clear]::after,.bootstrap-datetimepicker-widget .btn[data-action=today]::after,.bootstrap-datetimepicker-widget .picker-switch::after,.bootstrap-datetimepicker-widget table th.next::after,.bootstrap-datetimepicker-widget table th.prev::after,.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#737373}.h1,.h2,.h3,h1,h2,h3{margin-top:18px;margin-bottom:9px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:9px;margin-bottom:9px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:27px}.h2,h2{font-size:19px}.h3,h3{font-size:17px}.h4,h4{font-size:15px}.h5,h5{font-size:12px}.h6,h6{font-size:11px}p{margin:0 0 9px}.lead{margin-bottom:18px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}@media (min-width:768px){.lead{font-size:18px}}.small,small{font-size:91%}.mark,mark{background-color:#fbefdd;padding:.2em}.list-inline,.list-unstyled,.modulemenu .modulemenu-group-container{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#737373}.text-primary{color:#0078e6}a.text-primary:focus,a.text-primary:hover{color:#005db3}.text-success{color:#79a548}a.text-success:focus,a.text-success:hover{color:#5f8139}.text-info{color:#6daae0}a.text-info:focus,a.text-info:hover{color:#4392d7}.text-warning{color:#e8a33d}a.text-warning:focus,a.text-warning:hover{color:#d88b1a}.text-danger{color:#c83c3c}a.text-danger:focus,a.text-danger:hover{color:#a32e2e}.bg-primary{color:#fff;background-color:#0078e6}a.bg-primary:focus,a.bg-primary:hover{background-color:#005db3}.bg-success{background-color:#d1e2bd}a.bg-success:focus,a.bg-success:hover{background-color:#b8d39a}.bg-info{background-color:#ebf3fb}a.bg-info:focus,a.bg-info:hover{background-color:#c1dbf2}.bg-warning{background-color:#fbefdd}a.bg-warning:focus,a.bg-warning:hover{background-color:#f6d9af}.bg-danger{background-color:#efc7c7}a.bg-danger:focus,a.bg-danger:hover{background-color:#e49f9f}.page-header{padding-bottom:8px;margin:36px 0 18px;border-bottom:1px solid #f5f5f5}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}ol,ul{margin-bottom:9px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-bottom:18px}dd,dt{line-height:1.5}dd{margin-left:0}.dl-horizontal dd:after,.form-irre-header-body dl dd:after{content:"";display:table;clear:both}@media (min-width:768px){.dl-horizontal dt,.form-irre-header-body dl dt{float:left;width:70px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd,.form-irre-header-body dl dd{margin-left:90px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #d7d7d7}.initialism{font-size:90%}blockquote{padding:9px 18px;margin:0 0 18px;font-size:15px;border-left:5px solid #f5f5f5}.container,.container-fluid{margin-right:auto;margin-left:auto}.table,address{margin-bottom:18px}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.5;color:#d7d7d7}legend,pre{color:#5a5a5a}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #f5f5f5;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%;border-radius:2px}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{font-style:normal;line-height:1.5}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4}kbd{color:#fff;background-color:#333;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{display:block;padding:8.5px;font-size:11px;line-height:1.5;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:2px}.container-fluid:after,.container:after,.row:after{display:table;content:"";clear:both}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{max-height:340px;overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-1{width:8.33333333%}.col-xs-2{width:16.66666667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333%}.col-xs-5{width:41.66666667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333333%}.col-xs-8{width:66.66666667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333%}.col-xs-11{width:91.66666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333333%}.col-xs-push-2{left:16.66666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333333%}.col-xs-push-5{left:41.66666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333333%}.col-xs-push-8{left:66.66666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333333%}.col-xs-push-11{left:91.66666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-12{margin-left:100%}}table{border-collapse:collapse;border-spacing:0;background-color:#fafafa}.btn-group-justified,.input-group,.t3-grid-table{border-collapse:separate}caption{padding-top:6px;padding-bottom:6px;color:#737373}.table{width:100%}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:6px;line-height:1.5;border-top:1px solid #ccc}.table>thead>tr>th{border-bottom:2px solid #ccc}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ccc}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:6px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ccc}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f7f7f7}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#ededed}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.dropdown-menu{float:left}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e1e0e0}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#d1e2bd}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#c4dbab}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#ebf3fb}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#d6e7f6}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fbefdd}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#f8e4c6}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#efc7c7}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#eab3b3}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:13.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ccc}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.carousel-inner,.collapsing,.dropdown-menu .divider,.embed-responsive,.modal,.modal-open,.nav .nav-divider,.progress,html{overflow:hidden}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{display:block;width:100%;margin-bottom:18px;font-size:18px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:12px;line-height:1.5;color:#333;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:32px;padding:6px;background-color:#fefefe;border:1px solid #bbb;border-radius:2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#aaa;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(170,170,170,.6)}.form-control::-moz-placeholder{color:#d7d7d7;opacity:1}.form-control:-ms-input-placeholder{color:#d7d7d7}.form-control::-webkit-input-placeholder{color:#d7d7d7}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#79a548}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#f5f5f5;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:32px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:26px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:41.2px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:18px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:30px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:26px;padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:26px;line-height:26px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:26px;padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.form-group-sm select.form-control{height:26px;line-height:26px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:26px;min-height:29px;padding:5px 4px;font-size:11px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:41.2px;padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:41.2px;line-height:41.2px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:41.2px;padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.form-group-lg select.form-control{height:41.2px;line-height:41.2px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:41.2px;min-height:33px;padding:13px 12px;font-size:15px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:32px;height:32px;line-height:32px;text-align:center}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:41.2px;height:41.2px;line-height:41.2px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:26px;height:26px;line-height:26px}.has-success .form-control{border-color:#79a548;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#5f8139;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #abcb88}.has-success .input-group-addon{color:#79a548;border-color:#79a548;background-color:#d1e2bd}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#e8a33d}.has-warning .form-control{border-color:#e8a33d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#d88b1a;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f3ce98}.has-warning .input-group-addon{color:#e8a33d;border-color:#e8a33d;background-color:#fbefdd}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#c83c3c}.has-error .form-control{border-color:#c83c3c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#a32e2e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #de8c8c}.has-error .input-group-addon{color:#c83c3c;border-color:#c83c3c;background-color:#efc7c7}.has-feedback label~.form-control-feedback{top:23px}.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=incrementHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=incrementMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=decrementHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=decrementMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=showHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=showMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=togglePeriod]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=clear]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=today]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.picker-switch::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=incrementHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=incrementMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=decrementHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=decrementMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=showHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=showMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=togglePeriod]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=clear]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=today]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.picker-switch::after~.form-control-feedback,.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#404040}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:25px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after{content:"";display:table;clear:both}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:13px;font-size:15px}.form-horizontal .form-group-sm .control-label{padding-top:5px;font-size:11px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px;font-size:12px;line-height:1.5;border-radius:2px;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}.btn-default{color:#333;background-color:#eee;border-color:#bbb}.btn-default.focus,.btn-default:focus{color:#333;background-color:#d5d4d4;border-color:#7b7b7b}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{color:#333;background-color:#d5d4d4;border-color:#9c9c9c}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#333;background-color:#c3c3c3;border-color:#7b7b7b}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#eee;border-color:#bbb}.btn-default .badge{color:#eee;background-color:#333}.btn-primary{color:#fff;background-color:#0078e6;border-color:#006bcd}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#005db3;border-color:#00284d}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#005db3;border-color:#004b8f}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#004b8f;border-color:#00284d}.btn-primary.active,.btn-primary:active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#0078e6;border-color:#006bcd}.btn-primary .badge{color:#0078e6;background-color:#fff}.btn-success{color:#fff;background-color:#79a548;border-color:#6c9340}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#5f8139;border-color:#2b3a1a}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#5f8139;border-color:#4d692e}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#4d692e;border-color:#2b3a1a}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#79a548;border-color:#6c9340}.btn-success .badge{color:#79a548;background-color:#fff}.btn-info{color:#fff;background-color:#6daae0;border-color:#589edc}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#4392d7;border-color:#205e94}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#4392d7;border-color:#2b80cb}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#2b80cb;border-color:#205e94}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#6daae0;border-color:#589edc}.btn-info .badge{color:#6daae0;background-color:#fff}.btn-warning{color:#fff;background-color:#e8a33d;border-color:#e59826}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#d88b1a;border-color:#7d510f}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#d88b1a;border-color:#b87716}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#b87716;border-color:#7d510f}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#e8a33d;border-color:#e59826}.btn-warning .badge{color:#e8a33d;background-color:#fff}.btn-danger{color:#fff;background-color:#c83c3c;border-color:#b73434}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#a32e2e;border-color:#531818}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#a32e2e;border-color:#872626}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#872626;border-color:#531818}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c83c3c;border-color:#b73434}.btn-danger .badge{color:#c83c3c;background-color:#fff}.btn-link{color:#212424;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#000;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#d7d7d7;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.btn-group-sm>.btn,.btn-sm{padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.btn-group-xs>.btn,.btn-xs{padding:2px 4px;font-size:11px;line-height:1.5;border-radius:2px}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-block{display:block}.btn-block+.btn-block{margin-top:5px}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;list-style:none;font-size:12px;text-align:left;background-color:#292929;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.5;white-space:nowrap}.dropdown-menu .divider{height:1px;margin:8px 0;background-color:#424242}.dropdown-menu>li>a{clear:both;font-weight:400;color:#fff}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#fff;background-color:#424242}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#424242}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#d7d7d7}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:11px;color:#d7d7d7}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after{content:"";display:table;clear:both}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after{content:"";display:table;clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:2px 2px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 2px 2px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group,.input-group-btn,.input-group-btn>.btn{position:relative}.input-group{display:table}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px;font-size:12px;font-weight:400;line-height:1;color:#333;text-align:center;background-color:#f5f5f5;border:1px solid #bbb;border-radius:2px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:4px;font-size:11px;border-radius:2px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:12px;font-size:15px;border-radius:2px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after{content:"";display:table;clear:both}.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:6px 12px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#f5f5f5}.nav>li.disabled>a{color:#d7d7d7}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#5a5a5a;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#f5f5f5;border-color:#212424}.nav .nav-divider{height:1px;margin:8px 0;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ccc}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{line-height:1.5;border:1px solid transparent;border-radius:2px 2px 0 0}.nav-tabs>li>a:hover{border-color:#d7d7d7 #d7d7d7 #ccc}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#000;cursor:default}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li,.nav-tabs.nav-justified>li{float:none}.nav-pills>li>a{border-radius:2px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#0078e6}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.btn .badge,.btn .label{top:-1px;position:relative}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:2px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ccc}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ccc;border-radius:2px 2px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#ccc}}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.pagination{display:inline-block;padding-left:0;margin:18px 0;border-radius:2px}.label,.pagination>li{display:inline}.alert,.thumbnail{margin-bottom:18px}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px;line-height:1.5;text-decoration:none;color:#212424;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span,.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span,.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span,.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#000;background-color:#f5f5f5;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#0078e6;border-color:#0078e6;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#d7d7d7;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:12px;font-size:15px;line-height:1.3333333}.pagination-sm>li>a,.pagination-sm>li>span{padding:4px;font-size:11px;line-height:1.5}.badge,.label{color:#fff;line-height:1;white-space:nowrap;font-weight:700}.label{padding:.2em .6em .3em;font-size:75%;text-align:center;vertical-align:baseline;border-radius:.25em}.badge,.progress-bar{font-size:11px;text-align:center}.label:empty{display:none}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default,.label-excludeFromUpdates,.label-obsolete,.label-test{background-color:#d7d7d7}.label-default[href]:focus,.label-default[href]:hover,[href].label-excludeFromUpdates:focus,[href].label-excludeFromUpdates:hover,[href].label-obsolete:focus,[href].label-obsolete:hover,[href].label-test:focus,[href].label-test:hover{background-color:#bebdbd}.label-primary{background-color:#0078e6}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#005db3}.label-stable,.label-success{background-color:#79a548}.label-success[href]:focus,.label-success[href]:hover,[href].label-stable:focus,[href].label-stable:hover{background-color:#5f8139}.label-experimental,.label-info{background-color:#6daae0}.label-info[href]:focus,.label-info[href]:hover,[href].label-experimental:focus,[href].label-experimental:hover{background-color:#4392d7}.label-beta,.label-warning{background-color:#e8a33d}.label-warning[href]:focus,.label-warning[href]:hover,[href].label-beta:focus,[href].label-beta:hover{background-color:#d88b1a}.label-alpha,.label-danger,.label-deprecated{background-color:#c83c3c}.label-danger[href]:focus,.label-danger[href]:hover,[href].label-alpha:focus,[href].label-alpha:hover,[href].label-deprecated:focus,[href].label-deprecated:hover{background-color:#a32e2e}.badge{display:inline-block;min-width:10px;padding:3px 7px;vertical-align:middle;background-color:#737373;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#212424;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.thumbnail{padding:4px;line-height:1.5;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.alert,.progress{border-radius:2px}.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#000}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#212424}.alert-danger,.alert-info,.alert-success,.alert-warning{border-color:transparent}.alert-danger hr,.alert-info hr,.alert-success hr,.alert-warning hr{border-top-color:transparent}.alert{padding:11px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:31px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{background-color:#79a548;color:#fff}.alert-success .alert-link{color:#e6e5e5}.alert-info{background-color:#6daae0;color:#fff}.alert-info .alert-link{color:#e6e5e5}.alert-warning{background-color:#e8a33d;color:#fff}.alert-warning .alert-link{color:#e6e5e5}.alert-danger{background-color:#c83c3c;color:#fff}.alert-danger .alert-link{color:#e6e5e5}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:18px;margin-bottom:18px;background-color:#dedede;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;line-height:18px;color:#fff;background-color:#0078e6;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#79a548}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#6daae0}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#e8a33d}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#c83c3c}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media-heading,.media:first-child,.panel-title{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#f5f5f5;color:#d7d7d7;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#d7d7d7}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#0078e6;border-color:#0078e6}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#b3dbff}.list-group-item-success{color:#79a548;background-color:#d1e2bd}a.list-group-item-success,button.list-group-item-success{color:#79a548}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#79a548;background-color:#c4dbab}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#79a548;border-color:#79a548}.list-group-item-info{color:#6daae0;background-color:#ebf3fb}a.list-group-item-info,button.list-group-item-info{color:#6daae0}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#6daae0;background-color:#d6e7f6}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#6daae0;border-color:#6daae0}.list-group-item-warning{color:#e8a33d;background-color:#fbefdd}a.list-group-item-warning,button.list-group-item-warning{color:#e8a33d}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#e8a33d;background-color:#f8e4c6}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#e8a33d;border-color:#e8a33d}.list-group-item-danger{color:#c83c3c;background-color:#efc7c7}a.list-group-item-danger,button.list-group-item-danger{color:#c83c3c}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#c83c3c;background-color:#eab3b3}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#c83c3c;border-color:#c83c3c}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:18px;background-color:#fff;border:1px solid transparent;border-radius:2px}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-body:after{content:"";display:table;clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:1px;border-top-left-radius:1px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:1px;border-bottom-right-radius:1px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:1px;border-top-left-radius:1px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:1px;border-top-left-radius:1px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:1px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:1px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ccc}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:18px}.panel-group .panel{margin-bottom:0;border-radius:2px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ccc}.panel-default>.panel-heading{color:#5a5a5a;background-color:#ddd;border-color:#ccc}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ccc}.panel-default>.panel-heading .badge{color:#ddd;background-color:#5a5a5a}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ccc}.panel-primary{border-color:#0078e6}.panel-primary>.panel-heading{color:#fff;background-color:#0078e6;border-color:#0078e6}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#0078e6}.panel-primary>.panel-heading .badge{color:#0078e6;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#0078e6}.panel-success{border-color:#79a548}.panel-success>.panel-heading{color:#79a548;background-color:#d1e2bd;border-color:#79a548}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#79a548}.panel-success>.panel-heading .badge{color:#d1e2bd;background-color:#79a548}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#79a548}.panel-info{border-color:#6daae0}.panel-info>.panel-heading{color:#6daae0;background-color:#ebf3fb;border-color:#6daae0}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#6daae0}.panel-info>.panel-heading .badge{color:#ebf3fb;background-color:#6daae0}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#6daae0}.panel-warning{border-color:#e8a33d}.panel-warning>.panel-heading{color:#e8a33d;background-color:#fbefdd;border-color:#e8a33d}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#e8a33d}.panel-warning>.panel-heading .badge{color:#fbefdd;background-color:#e8a33d}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#e8a33d}.panel-danger{border-color:#c83c3c}.panel-danger>.panel-heading{color:#c83c3c;background-color:#efc7c7;border-color:#c83c3c}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#c83c3c}.panel-danger>.panel-heading .badge{color:#efc7c7;background-color:#c83c3c}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#c83c3c}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#fafafa;border:1px solid #ccc;border-radius:2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well-lg,.well-sm{border-radius:2px}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px}.well-sm{padding:9px}.close{float:right;font-size:18px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{font-family:Verdana,Arial,Helvetica,sans-serif;letter-spacing:normal;line-break:auto;line-height:1.5;text-shadow:none;text-transform:none;white-space:normal;word-spacing:normal;word-wrap:normal;font-weight:400;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal{display:none;position:fixed;z-index:5000;-webkit-overflow-scrolling:touch;outline:0}.modal-footer:after,.modal-header:after{display:table;clear:both;content:""}.modal-content,.modal-dialog{position:relative}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-content{background-color:#fff;border-radius:2px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.5}.modal-body{position:relative;padding:15px}.modal-footer{text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;font-style:normal;text-align:left;text-align:start;word-break:normal;font-size:12px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:2px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover>.arrow,.popover>.arrow:after,.tooltip-arrow{position:absolute;width:0;height:0;border-style:solid}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;background-color:#f7f7f7;border-radius:1px 1px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{display:block;border-color:transparent}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:" ";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.tooltip{position:absolute;z-index:1070;display:block;font-style:normal;text-align:left;text-align:start;word-break:normal;font-size:11px;opacity:0;filter:alpha(opacity=0)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.diff-item-result,.table-fixed{word-break:break-all;word-wrap:break-word}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.tooltip.top{margin-top:-3px;padding:3px 0}.tooltip.right{margin-left:3px;padding:0 3px}.tooltip.bottom{margin-top:3px;padding:3px 0}.tooltip.left{margin-left:-3px;padding:0 3px}.tooltip-inner{max-width:200px;color:#fff;text-align:center;background-color:#333;border-radius:2px}.carousel-control,.text-hide{background-color:transparent}.tooltip-arrow{border-color:transparent}.carousel,.carousel-inner{position:relative}.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{border-width:3px 3px 0;border-top-color:#333;bottom:0}.tooltip.top .tooltip-arrow{left:50%;margin-left:-3px}.tooltip.top-left .tooltip-arrow{right:3px;margin-bottom:-3px}.tooltip.top-right .tooltip-arrow{left:3px;margin-bottom:-3px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-3px;border-width:3px 3px 3px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-3px;border-width:3px 0 3px 3px;border-left-color:#333}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 3px 3px;border-bottom-color:#333;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-3px}.tooltip.bottom-left .tooltip-arrow{right:3px;margin-top:-3px}.tooltip.bottom-right .tooltip-arrow{left:3px;margin-top:-3px}.carousel-inner{width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}body,html{height:100%}body{overflow:auto}.scaffold{background-color:#f5f5f5;color:#333;position:relative;padding-top:45px;height:100vh}.scaffold-topbar{background-color:#151515;color:#f5f5f5;height:45px;position:fixed;top:0;right:0;left:0}.scaffold-modulemenu,.scaffold-toolbar{background-color:#292929;z-index:1000;position:fixed;top:45px;left:0;bottom:0}.scaffold-modulemenu{color:#f5f5f5;width:40px;max-width:100%;overflow:hidden}.scaffold-modulemenu a{color:rgba(245,245,245,.7)}.scaffold-modulemenu .active>a,.scaffold-modulemenu a:hover{color:#f5f5f5}.scaffold-toolbar{overflow:auto;color:#f5f5f5;right:0;display:none}.scaffold-toolbar .dropdown-menu a,.scaffold-toolbar a{color:rgba(245,245,245,.7)}.scaffold-toolbar .active>a,.scaffold-toolbar .dropdown-menu a:focus,.scaffold-toolbar .dropdown-menu a:hover,.scaffold-toolbar a:focus,.scaffold-toolbar a:hover{color:#f5f5f5}@media (min-width:992px){.scaffold-toolbar{overflow:visible;background-color:transparent;height:45px;top:0;left:auto;bottom:auto;display:block}}.scaffold-content{position:fixed!important;top:45px;left:0;right:0;bottom:0}@media (max-width:991px){.scaffold-search-expanded .scaffold-toolbar,.scaffold-toolbar-expanded .scaffold-toolbar{display:block}.scaffold-content{left:0!important}}.scaffold-content-module-iframe,.scaffold-content-navigation-iframe{display:block;border:none;height:100%;width:100%}.scaffold-content-navigation{display:none;position:absolute!important;left:0;top:0;bottom:0;width:300px}.scaffold-content-navigation-component{position:absolute;top:0;bottom:0;left:0;right:0}.scaffold-content-navigation-component #typo3-pagetree-treeContainer>div>.x-panel-body{overflow:auto}.scaffold-content-module{position:absolute!important;top:0;left:0;bottom:0;right:0}@media (max-width:767px){.scaffold-content-module{width:100%}}.scaffold-content-overlay{display:none;position:absolute;z-index:1040;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.65)}.scaffold-modulemenu-expanded .scaffold-content-overlay{display:block}@media (min-width:992px){.scaffold-modulemenu-expanded .scaffold-content-overlay{display:none}.scaffold{padding-left:40px}}.scaffold .scaffold-modulemenu{width:40px}@media (max-width:991px){.scaffold .scaffold-modulemenu{display:none}.scaffold-modulemenu-expanded .scaffold-modulemenu{display:block}}.scaffold-modulemenu-expanded{display:block;padding-left:230px}.scaffold-modulemenu-expanded .scaffold-modulemenu{width:230px}.scaffold-modulemenu-expanded .scaffold-content{-webkit-transform:translate(230px,0);transform:translate(230px,0)}.scaffold-content-navigation-expanded .scaffold-content-navigation{display:block}.scaffold-content-navigation-expanded .scaffold-content-module{left:300px}@media (min-width:992px){.scaffold .scaffold-content{left:40px}.scaffold-modulemenu-expanded .scaffold-content{left:230px;-webkit-transform:none;transform:none}}.topbar{background-color:inherit;position:relative;height:45px}.topbar a{color:inherit;text-decoration:none}.topbar-button{position:absolute;top:0;display:inline-block;border:0;background-color:#151515;height:45px;width:40px}.topbar-button:focus,.topbar-button:hover{background-color:#1d1d1d}.scaffold-content-navigation-expanded .topbar-button-navigationcomponent,.scaffold-modulemenu-expanded .topbar-button.topbar-button-modulemenu,.scaffold-search-expanded .topbar-button-search,.scaffold-toolbar-expanded .topbar-button-toolbar{background-color:#292929}.topbar-button[disabled],.topbar-button[disabled]:focus,.topbar-button[disabled]:hover{background-color:#292929;cursor:not-allowed;opacity:.5}.topbar-button.topbar-button-modulemenu{left:0}.topbar-button.topbar-button-navigationcomponent{left:40px}.topbar-button.topbar-button-toolbar{right:40px}.topbar-button.topbar-button-search{right:0}@media (max-width:991px){.scaffold-search-expanded .toolbar-item,.scaffold-toolbar-expanded .toolbar-item-search{display:none}.scaffold-search-expanded .toolbar-item-search{display:block;width:100%}.topbar-header{padding-right:80px!important}}.topbar-button-search,.topbar-button-toolbar{display:block}@media (min-width:992px){.topbar-button.topbar-button-modulemenu{background-color:#292929}.topbar-button-search,.topbar-button-toolbar{display:none}}.topbar-header{padding-left:80px}.topbar-header-site{overflow:hidden;position:relative;max-width:100%;height:45px;line-height:45px;padding-left:1em;padding-right:1em;white-space:nowrap}.topbar-header-site:after,.topbar-header-site:before{display:block;content:'';position:absolute;top:0;bottom:0;width:1em}.topbar-header-site:before{right:0;background:#151515}.topbar-header-site:after{right:1em;background:-webkit-linear-gradient(left,rgba(21,21,21,0) 0,#151515 100%);background:linear-gradient(to right,rgba(21,21,21,0) 0,#151515 100%)}.typo3-in-workspace .topbar-header-site{background-color:#6d860d}.typo3-in-workspace .topbar-header-site:before{background:#6d860d}.typo3-in-workspace .topbar-header-site:after{background:-webkit-linear-gradient(left,rgba(109,134,13,0) 0,#6d860d 100%);background:linear-gradient(to right,rgba(109,134,13,0) 0,#6d860d 100%)}.topbar-header-site-logo{height:45px;display:none;padding-right:.5em}@media (min-width:320px){.topbar-header-site-logo{display:inline-block}}.topbar-header-site-title{line-height:1.2em;display:inline-block;vertical-align:middle}.topbar-header-site-name{display:block}.toolbar-list:after,.toolbar:after{display:table;content:'';clear:both}.topbar-header-site-version{opacity:.5}.toolbar{padding:8px}.toolbar-list{list-style:none;padding:0;margin:0}@media (min-width:992px){.toolbar{padding:0;background-color:#151515}.toolbar-list li:last-child{width:300px}}.toolbar-item{padding:4px;position:relative;display:block;float:left;width:100%}@media (min-width:600px){.toolbar-item{width:50%}}@media (min-width:750px){.toolbar-item{width:33.33%}}@media (min-width:992px){.toolbar-item{padding:0;width:auto;margin-left:1px}}.toolbar-item .dropdown-menu{width:350px}.toolbar-item .dropdown-menu .text-muted{color:#8c8c8c}.toolbar-item .dropdown-menu a:focus .text-muted,.toolbar-item .dropdown-menu a:hover .text-muted{color:#a6a6a6}@media (max-width:991px){.toolbar-item .dropdown-menu{overflow:auto;padding:15px;position:fixed;max-height:90%;max-width:90%;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.toolbar-item .dropdown-backdrop{background:rgba(0,0,0,.65)}}.toolbar-item-avatar{width:28px;margin-right:2px;display:inline-block}.toolbar-item-avatar .avatar{position:absolute;top:50%;left:10px;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.toolbar-item-avatar .avatar,.toolbar-item-avatar .avatar-image{height:28px;width:28px}.toolbar-item-badge{position:absolute;bottom:4px;right:4px;padding:3px 4px;border-radius:0;font-size:10px;font-weight:400;min-width:16px}.toolbar-item-link{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid rgba(0,0,0,.5);position:relative;display:block;text-decoration:none;padding:9px 10px;height:45px;line-height:27px}.toolbar-item-link:focus,.toolbar-item-link:hover{text-decoration:none}.open .toolbar-item-link{background-color:#292929}.toolbar-item-search form{padding:0;margin:0}.toolbar-item-search .toolbar-item-link{padding:0;margin:0;height:0}.toolbar-item-search .form-group{margin:0}.toolbar-item-search .close{color:#fff;text-shadow:none;opacity:1}@media (max-width:991px){.toolbar-item-search .dropdown-menu{top:114px;left:14px;right:14px;width:auto;max-width:none;max-height:none;-webkit-transform:none;transform:none;bottom:14px}}@media (min-width:992px){.toolbar-item-link{border:none}.toolbar-item-title{display:none}.toolbar-item-search .dropdown-menu{left:auto;right:0}}.toolbar-item-search .autocomplete-suggestions{position:static!important}.toolbar-item-search .autocomplete-suggestion{border:none}.toolbar-item-search.open .toolbar-item-search-form{position:relative;z-index:991}.toolbar-item-search-field{color:inherit;background-color:#2f2f2f;margin:0;border-radius:0;border:1px solid rgba(0,0,0,.5);height:45px;box-shadow:none}@media (min-width:992px){.toolbar-item-search-field{border:none}}.toolbar-item-search-field:hover{background-color:#333}.toolbar-item-search-field:focus{box-shadow:none;background-color:#555}.module-wrapper{position:relative}.module-wrapper iframe{border:none}.modulemenu .modulemenu-group-container{clear:both}.modulemenu .modulemenu-group{position:relative;padding:5px 0;border-bottom:1px solid rgba(0,0,0,.2)}.modulemenu .modulemenu-group-header,.modulemenu .modulemenu-item-link{position:relative;display:block;cursor:pointer;padding:2px 4px;text-decoration:none}.modulemenu .modulemenu-group-header{user-select:none;text-transform:uppercase}.cropper-container,.modal .close{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.modulemenu .modulemenu-item-link:focus,.modulemenu .modulemenu-item-link:hover{outline:0;background-color:rgba(0,0,0,.1)}.modulemenu .modulemenu-item.active .modulemenu-item-link{background-color:rgba(0,0,0,.15)}.modulemenu .modulemenu-icon{float:left;margin-right:4px}.modulemenu .modulemenu-icon .fa{font-size:.5em}.modulemenu .modulemenu-group-title,.modulemenu .modulemenu-item-title{white-space:nowrap;text-overflow:ellipsis;padding-top:7px;padding-left:4px;display:none;overflow:hidden}.modulemenu .modulemenu-group-title{padding-right:20px}.modulemenu .modulemenu-group-title .caret{-webkit-transform:rotate(90deg);transform:rotate(90deg);position:absolute;top:17px;right:18px}.modulemenu .expanded .modulemenu-group-title .caret{-webkit-transform:rotate(0);transform:rotate(0)}.scaffold-modulemenu-expanded .modulemenu-group-title,.scaffold-modulemenu-expanded .modulemenu-item-title{display:block}.autocomplete{position:relative}.autocomplete-results{z-index:1000;position:absolute;margin:5px 0;top:100%;left:0;border:1px solid #ddd;border-radius:2px;background-color:#fff;overflow:hidden;box-shadow:0 1px 0 0 rgba(0,0,0,.25)}.avatar,.dropdown-list>li{position:relative}.autocomplete-suggestion{border-top:1px solid #ddd}.autocomplete-suggestion:first-child{border-top:none}.autocomplete-suggestion-link{padding:5px 13px 5px 28px;display:block;text-decoration:none}.autocomplete-selected .autocomplete-suggestion-link,.autocomplete-suggestion-link:hover{background-color:#fafafa;text-decoration:none}.autocomplete-info{padding:5px 15px}.dropdown-menu{line-height:1.45em;border:0;margin:0;border-radius:0;color:#fff}.dropdown-menu a{color:inherit;display:block}.dropdown-menu a:focus,.dropdown-menu a:hover{color:inherit;text-decoration:none}.dropdown-menu hr{border-top:1px solid rgba(0,0,0,.35);margin:1.25em -15px}.dropdown-menu>:last-child{margin-bottom:0}.dropdown-menu .form-group{margin-bottom:.75em}.dropdown-menu .form-control{border-color:#aaa;color:inherit;border-radius:0;background-color:#333}.dropdown-menu .form-control:focus{box-shadow:none;border-color:#bbb}.dropdown-menu .btn{border:none;border-radius:0;padding:6px 10px}.dropdown-headline{font-size:1.15em;margin-top:0;margin-bottom:.5em}.dropdown-text a{display:inline-block}div.dropdown-menu{padding:1.5em}.dropdown-list{padding-left:0;list-style:none}.dropdown-list>li+li{margin-top:.5em}.dropdown-list-link{display:block;text-decoration:none}.dropdown-list-link:focus,.dropdown-list-link:hover{text-decoration:none}.dropdown-table{display:table;width:100%}.dropdown-table-row{display:table-row}.dropdown-table-column{display:table-cell;padding-top:.25em;padding-bottom:.25em;vertical-align:middle}.dropdown-table-column-top{vertical-align:top}.avatar,.callout .media-body{vertical-align:middle}.dropdown-table-icon{width:16px;padding-right:.5em}.avatar,.avatar-image{height:32px;width:32px}.dropdown-table-title{white-space:nowrap;padding-right:1.5em}.dropdown-table-title-ellipsis{max-width:230px;overflow:hidden;display:block;white-space:nowrap;text-overflow:ellipsis}.dropdown-table-actions{white-space:nowrap;text-align:right}.dropdown-table-actions-btn{text-align:center;display:inline-block!important;margin-top:-4px;margin-bottom:-4px;padding:4px;vertical-align:middle}.dropdown-table-actions-btn-close:hover,.dropdown-table-actions-btn-edit:hover{background-color:#333}.dropdown-table-actions-btn-delete:hover{background-color:#c83c3c}.avatar{display:inline-block}.avatar-image{display:block;overflow:hidden;border-radius:50%}.avatar-image:after{display:block;content:'';position:absolute;top:0;left:0;height:100%;width:100%;border-radius:50%;border:1px solid rgba(255,255,255,.1)}.avatar-image>img{display:block;width:100%!important;height:auto!important}.avatar-icon{position:absolute;bottom:0;right:0;height:16px;width:16px}.callout{background-color:#f0f0f0;border-left:3px solid #ccc;margin:20px 0;padding:20px;color:#333}.callout .media{margin:0}.callout .media .fa-stack{color:#fff}.callout .media .fa-stack>.fa:first-child{color:#ccc}.callout-icon{margin-top:-2px}.callout-title{font-size:1.3em;margin:0 0 .5em}.callout-body>:last-child{margin-bottom:0}.callout-sm{margin:10px 0;padding:10px}.callout-danger .media,.callout-info .media,.callout-notice .media,.callout-success .media,.callout-warning .media{margin:0}.callout-sm .callout-title{font-size:1em;margin:0}.callout-success{background-color:#d1e2bd;border-color:#79a548;color:#333}.callout-success .media .fa-stack{color:#fff}.callout-success .media .fa-stack>.fa:first-child{color:#79a548}.callout-info{background-color:#ebf3fb;border-color:#6daae0;color:#333}.callout-info .media .fa-stack{color:#fff}.callout-info .media .fa-stack>.fa:first-child{color:#6daae0}.callout-warning{background-color:#fbefdd;border-color:#e8a33d;color:#333}.callout-warning .media .fa-stack{color:#fff}.callout-warning .media .fa-stack>.fa:first-child{color:#e8a33d}.callout-danger{background-color:#efc7c7;border-color:#c83c3c;color:#333}.callout-danger .media .fa-stack{color:#fff}.callout-danger .media .fa-stack>.fa:first-child{color:#c83c3c}.callout-notice{background-color:#f9f9f9;border-color:#a0a0a0;color:#333}.callout-notice .media .fa-stack{color:#fff}.callout-notice .media .fa-stack>.fa:first-child{color:#a0a0a0}.icon{position:relative;display:inline-block;overflow:hidden;white-space:nowrap;vertical-align:-22%}.icon-markup,.icon-overlay{position:absolute;text-align:center;bottom:0;right:0}.icon img,.icon svg{display:block;height:100%;width:100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.icon *{display:block;line-height:inherit}.icon-markup{display:block;top:0;left:0}.icon-overlay{height:68.75%;width:68.75%}.module-docheader,.module-loading-indicator.nprogress-custom-parent{position:fixed;top:0}.icon-color{fill:currentColor}.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)}}.icon-state-disabled .icon-markup{opacity:.5}.icon-size-small{height:16px;width:16px;line-height:16px}.icon-size-small .icon-unify{line-height:16px;font-size:14px}.icon-size-small .icon-overlay .icon-unify{line-height:10px;font-size:9px}.icon-size-default{height:32px;width:32px;line-height:32px}.icon-size-default .icon-unify{line-height:32px;font-size:28px}.icon-size-default .icon-overlay .icon-unify{line-height:20px;font-size:18px}.icon-size-large{height:48px;width:48px;line-height:48px}.icon-size-large .icon-unify{line-height:48px;font-size:42px}.icon-size-large .icon-overlay .icon-unify{line-height:30px;font-size:26px}.icon-actions-edit-copy-release,.icon-actions-edit-cut-release,.icon-status-dialog-error,.icon-status-status-current,.icon-status-status-permission-denied{color:#c83c3c}.icon-status-status-sorting-light-asc,.icon-status-status-sorting-light-desc{color:#fff}.icon-status-status-sorting-asc,.icon-status-status-sorting-desc{color:#737373}.icon-status-dialog-information{color:#6daae0}.icon-status-dialog-ok,.icon-status-status-permission-granted{color:#79a548}.icon-status-dialog-notification{color:#333}.icon-status-dialog-warning{color:#e8a33d}.diff{background-color:#fff;border:1px solid #ccc;display:table}.diff-item{display:table-row}.diff-item+.diff-item{border-top:1px solid #ccc}.diff-item-result,.diff-item-title{padding:10px;display:table-cell}.diff-item-title{background-color:#fafafa;padding-right:10px;font-style:italic;white-space:nowrap}.diff-item-result{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;width:100%;white-space:pre}.diff-item-result del{color:#c80c05;background-color:#fff6f6;text-decoration:none}.diff-item-result ins{color:#44a512;background-color:#ebfce3;text-decoration:none}.diff-item-result.diff-item-result-inline{white-space:normal}.module{min-height:100%;width:100%;background-color:#fff;color:inherit}.module-dark{background-color:#333;color:#ccc}.module-loading-indicator{min-height:5px;width:100%;z-index:999999}.module-docheader{width:100%;left:0;min-height:65px;z-index:300;background-color:#eee;border-bottom:1px solid #c3c3c3;padding:0 24px;-webkit-transition:margin-top .3s ease-in-out;transition:margin-top .3s ease-in-out}.module-docheader .module-docheader-bar{min-height:26px;margin:4px 0;line-height:26px}.module-docheader .module-docheader-bar.row{margin-left:-15px;margin-right:-15px}.module-docheader .module-docheader-bar label{margin-top:0;margin-bottom:0}.module-docheader .module-docheader-bar .form-inline .form-group{display:table}.module-docheader .module-docheader-bar .form-inline .form-group label{display:table-cell;font-size:11px;font-weight:400;line-height:16px;padding:4px;border-radius:2px 0 0 2px;border:1px solid #bbb;border-right:0;background-color:rgba(0,0,0,.05)}.module-docheader .module-docheader-bar .form-inline .form-group label+select{display:table-cell;border-top-left-radius:0;border-bottom-left-radius:0}.module-docheader .module-docheader-bar .form-group{vertical-align:top;margin:0;display:inline-block}.module-docheader .module-docheader-bar .form-group .form-control{vertical-align:top}.module-docheader .module-docheader-bar .form-inline-spaced{margin:0}.module-docheader .module-docheader-bar .panel{margin:0 -24px;border-left:none;border-right:none;border-bottom:none;border-radius:0;background-color:#fafafa;box-shadow:none}.module-docheader .module-docheader-bar .panel .panel-body{padding:8px 24px}@media (max-width:768px){.module-docheader .module-docheader-bar .text-right{text-align:left}}.bootstrap-datetimepicker-widget .picker-switch,.modal-content .loadmessage,.typo3-module-viewpage .module-body{text-align:center}.module-docheader .module-docheader-bar-search{margin-bottom:0}.module-docheader .module-docheader-bar-column-left{float:left}.module-docheader .module-docheader-bar-column-right{float:right}.module-docheader-bar-navigation .module-docheader-bar-column-left{white-space:nowrap}@media (max-width:768px){.module-docheader-bar-navigation .module-docheader-bar-column-left{white-space:normal}}.module-docheader-bar-navigation .form-group select{width:100%}.module-body{padding:24px}.module-body>.callout:first-child{margin-top:0}.module-body>.container{padding-left:0;padding-right:0}.module-body .container-small{max-width:768px;margin:0 auto}.module-docheader+.module-body{padding-top:89px}.panel{display:block}.panel:focus,.panel:hover{text-decoration:none}.panel-heading a,.panel-heading a:active,.panel-heading a:focus,.panel-heading a:hover{text-decoration:none;color:inherit}.element-browser-title a,.panel-body-highlightlinks>p>a{text-decoration:underline}.panel-heading-left{float:left}.panel-heading-right{float:right}.panel-title{font-size:12px}.panel-title-icon,.panel-title-name{display:inline-block;vertical-align:middle}.panel-body>:first-child{margin-top:0}.panel-body>:last-child{margin-bottom:0}.panel-table td:first-child,.panel-table th:first-child{padding-left:15px}.panel-table td:last-child,.panel-table th:last-child{padding-right:15px}.panel-progress{background-color:#eee;height:3px;position:relative;width:100%}.panel-progress .panel-progress-bar{display:block;height:100%;background-color:#444}.panel-active{border-color:#444}.panel-active>.panel-heading{color:#fff;background-color:#666;border-color:#444}.panel-active>.panel-heading+.panel-collapse>.panel-body{border-top-color:#444}.panel-active>.panel-heading .badge{color:#666;background-color:#fff}.panel-active>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#444}#typo3-debug-console .topbar:after,.clearfix:after,.distribution-detail:after,.distribution-holder:after,.dropdown-list>li:after,.module-docheader .module-docheader-bar:after,.module-docheader:after,.modulemenu .modulemenu-group-header:after,.modulemenu .modulemenu-item-link:after,.pagination-block:after,.panel-heading:after,.t3-page-ce .t3-page-ce-header:after,.typo3-login-copyright-link:after{content:"";display:table;clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;border:0}.dropzone-close,.dropzone-hint-icon{text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.c-na,.t3-flex-section-header-preview,.typo3-dblist-sysnotes .panel-sysnote .panel-body h4 span,.x-tree-node-readableRootline,em,pre.ts-hl .ts-comment{font-style:italic}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.minicolors{position:relative}.userTS .minicolors{position:absolute}.userTS .minicolors-panel{margin-top:31px}.userTS .minicolors-swatch{z-index:100000}.minicolors-sprite{background-image:url(../../../../../../typo3/sysext/core/Resources/Public/Images/colorpicker/jquery.minicolors.png)}.minicolors-swatch{position:absolute;vertical-align:middle;background-position:-80px 0;cursor:text;padding:0;margin:0;display:inline-block;top:50%;left:6px;z-index:2;-webkit-transform:translate(0,-50%);transform:translate(0,-50%);width:20px;height:20px;border-radius:1px}.minicolors-swatch-color{position:absolute;top:0;left:0;right:0;bottom:0;border-radius:inherit}.minicolors-input{float:none;padding-left:32px}.minicolors-panel{margin-top:1px;overflow:hidden;border-radius:2px;position:absolute;width:173px;height:152px;background:#fff;border:1px solid #bbb;box-shadow:0 0 20px rgba(0,0,0,.2);z-index:99999;display:none}.minicolors-panel.minicolors-with-swatches{height:182px}.minicolors-panel.minicolors-visible{display:block}.minicolors-position-top .minicolors-panel{top:-154px}.minicolors-position-right .minicolors-panel{right:0}.minicolors-position-bottom .minicolors-panel{top:auto}.minicolors-position-left .minicolors-panel{left:0}.minicolors-with-opacity .minicolors-panel{width:194px}.minicolors .minicolors-grid{position:absolute;top:1px;left:1px;width:150px;height:150px;background-position:-120px 0;cursor:crosshair}.minicolors .minicolors-grid-inner{position:absolute;top:0;left:0;width:150px;height:150px}.minicolors-slider-saturation .minicolors-grid{background-position:-420px 0}.minicolors-slider-saturation .minicolors-grid-inner{background-position:-270px 0;background-image:inherit}.minicolors-slider-brightness .minicolors-grid{background-position:-570px 0}.minicolors-slider-brightness .minicolors-grid-inner{background-color:#000}.minicolors-slider-wheel .minicolors-grid{background-position:-720px 0}.minicolors-opacity-slider,.minicolors-slider{position:absolute;top:1px;left:152px;width:20px;height:150px;background-color:#fff;background-position:0 0;cursor:row-resize}.minicolors-slider-saturation .minicolors-slider{background-position:-60px 0}.minicolors-slider-brightness .minicolors-slider,.minicolors-slider-wheel .minicolors-slider{background-position:-20px 0}.minicolors-opacity-slider{left:173px;background-position:-40px 0;display:none}.minicolors-with-opacity .minicolors-opacity-slider{display:block}.element-browser,.modal-dialog{display:-webkit-box;display:-webkit-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal}.minicolors-grid .minicolors-picker{position:absolute;top:70px;left:70px;width:12px;height:12px;border:1px solid #000;border-radius:10px;margin-top:-6px;margin-left:-6px;background:0 0}.minicolors-grid .minicolors-picker>div{position:absolute;top:0;left:0;width:8px;height:8px;border-radius:8px;border:2px solid #fff;box-sizing:content-box}.minicolors-picker{position:absolute;top:0;left:0;width:18px;height:2px;background:#fff;border:1px solid #000;margin-top:-2px}.minicolors-swatches,.minicolors-swatches li{margin:0;padding:0;list-style:none;overflow:hidden;position:absolute;top:157px;left:5px}.minicolors-swatches .minicolors-swatch{position:relative;float:left;cursor:pointer;margin:0 4px 0 0;top:0;left:0;width:20px;height:20px}.element-browser-attributes>.form-horizontal:last-child .form-group,.element-browser-body>:last-child{margin-bottom:0}.minicolors-with-opacity .minicolors-swatches .minicolors-swatch{margin-right:7px}.minicolors-swatch.selected{border-color:#000}.svg-tree-wrapper{overflow-y:scroll}.svg-tree-wrapper path.link{fill:none;shape-rendering:crispEdges;stroke:#ddd;stroke-width:1}.svg-tree-wrapper .node .chevron,.svg-tree-wrapper .node .tree-check,.svg-tree-wrapper .node text{cursor:pointer}.element-browser{display:flex;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;flex-direction:column;width:100%}@media (min-width:600px){.element-browser{height:100vh}.element-browser-main{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex:1 auto;flex:1 auto}}.element-browser h3{font-size:1.2em}.element-browser-body{overflow:auto;height:100%;padding:15px}.element-browser-body>:first-child{margin-top:0}.element-browser-title{padding:15px;color:#fff;background-color:#292929}.element-browser-title a{color:inherit}.element-browser-tabs .nav-tabs{padding:15px 15px 0}.element-browser-attributes{padding:15px;background-color:#fafafa;border-bottom:1px solid #ddd}.element-browser-main-sidebar,.element-browser-main-sidebar .list-tree li:last-child:before,.element-browser-main-sidebar .list-tree-control>.fa:before{background-color:#f2f2f2}@media (min-width:600px){.element-browser-main-sidebar{-webkit-flex-shrink:0;flex-shrink:0;width:260px;border-right:1px solid #ddd}.element-browser-main-content{overflow:auto;-webkit-box-flex:1;-webkit-flex:1 auto;flex:1 auto}}@media (min-width:720px){.element-browser-main-sidebar{width:280px}}@media (min-width:840px){.element-browser-main-sidebar{width:300px}}@media (min-width:960px){.element-browser-main-sidebar{width:320px}}.modal .close{color:inherit;padding:0;margin:0;text-shadow:rgba(0,0,0,.5) 0 0 3px;opacity:.5;user-select:none}.modal .close:active,.modal .close:hover{box-shadow:none;outline:0;background:0 0;opacity:1}.modal-dialog{display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-webkit-align-items:stretch;align-items:stretch;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;margin:0 auto!important;height:100vh;width:100vw}.modal-content{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;margin:0 auto;max-height:calc(100vh - 40px);max-width:calc(100vw - 40px);-webkit-transition:margin-top .1s ease-in;transition:margin-top .1s ease-in;border:none}.modal-body{-webkit-box-flex:1;-webkit-flex:1 1 auto;flex:1 1 auto;overflow-y:auto}.modal-footer,.modal-header{padding:10px 15px}.modal-footer .btn{margin-right:0;padding-left:1em;padding-right:1em}.modal-footer .btn .icon{margin-left:-2px;margin-right:4px}.modal-footer .btn span{vertical-align:middle}.modal-content .loadmessage{color:#1e1e1e}.modal-image-manipulation .modal-body{padding:0;display:-webkit-box;display:-webkit-flex;display:flex}.modal-image-manipulation .modal-panel-main{overflow:visible;background-image:url(../Images/cropper-background.png);display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;padding:20px;width:100%}.modal-image-manipulation .modal-panel-main img{max-width:100%}.cropper-container img,.cropper-hide{min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important}.modal-image-manipulation .modal-panel-sidebar{padding:15px;-webkit-flex-shrink:0;flex-shrink:0;border-left:1px solid rgba(0,0,0,.25);position:relative;overflow:auto;-webkit-overflow-scrolling:touch;width:200px}@media (min-width:768px){.modal-image-manipulation .modal-panel-sidebar{width:250px}}@media (min-width:992px){.modal-image-manipulation .modal-panel-sidebar{width:300px}}.modal-type-iframe,.modal-type-iframe .modal-body{padding:0}.modal-iframe{display:block;border:0;height:100%;width:100%;position:absolute;top:0;left:0}.modal-size-small .modal-content{width:440px}.modal-size-default .modal-content{width:600px}.modal-size-large .modal-content{width:1000px;height:800px}.modal-size-full .modal-content{width:1800px;height:1200px}.modal-severity-notice .modal-header{background-color:#eee;color:#333;border-bottom-color:#bbb}.modal-severity-info .modal-header{background-color:#6daae0;color:#fff;border-bottom-color:#589edc}.modal-severity-success .modal-header{background-color:#79a548;color:#fff;border-bottom-color:#6c9340}.modal-severity-warning .modal-header{background-color:#e8a33d;color:#fff;border-bottom-color:#e59826}.modal-severity-danger .modal-header{background-color:#c83c3c;color:#fff;border-bottom-color:#b73434}.modal-style-dark{color:#fff}.modal-style-dark .modal-header{color:#fff;background-color:#484848;border-bottom-color:#000}.modal-style-dark .modal-content{overflow:hidden;background-color:#292929}.modal-style-dark .modal-body,.modal-style-dark .modal-footer{background-color:#292929;color:#fff}.modal-style-dark .modal-footer{border-top:1px solid #000}.card{display:-webkit-box;display:-webkit-flex;display:flex;padding:15px;box-shadow:0 2px 0 rgba(0,0,0,.2);border:1px solid #ccc;margin-bottom:20px;transition:all .2s ease-in-out;-webkit-transition-property:box-shadow,border,-webkit-transform;transition-property:box-shadow,border,-webkit-transform;transition-property:box-shadow,border,transform;transition-property:box-shadow,border,transform,-webkit-transform}.card-container,.viewpage-topbar{display:-webkit-box;display:-webkit-flex}.card:hover{text-decoration:none;border:1px solid #b3b2b2;-webkit-transform:translate(0,-1px);transform:translate(0,-1px);box-shadow:0 3px 0 rgba(0,0,0,.3)}.card-container{display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:10px -10px}.card-container .card{margin-left:10px;margin-right:10px}.card-size-large,.card-size-medium,.card-size-small{width:calc(100% - 20px)}@media (min-width:768px){.card-size-small{width:calc(50% - 20px)}}@media (min-width:992px){.card-size-small{width:calc(25% - 20px)}}@media (min-width:768px){.card-size-medium{width:calc(50% - 20px)}.card-size-large{width:calc(100% - 20px)}}.typo3-module-viewpage{background-color:#494949}.typo3-module-viewpage .module{background-color:transparent}.typo3-module-viewpage .ui-resizable-w{left:-5px;height:100%;width:5px}.typo3-module-viewpage .ui-resizable-s{bottom:-5px;height:5px}.typo3-module-viewpage .ui-resizable-e{right:-5px;height:100%;width:5px}.typo3-module-viewpage .ui-resizable-se,.typo3-module-viewpage .ui-resizable-sw{height:5px;width:5px;background-image:none;bottom:-5px}.typo3-module-viewpage .ui-resizable-sw{left:-5px}.typo3-module-viewpage .ui-resizable-se{right:-5px}.viewpage-item{position:relative;display:inline-block;background-color:#292929;box-shadow:0 2px 0 rgba(0,0,0,.2);color:#fafafa}.viewpage-item a{color:#fafafa}.viewpage-item iframe{display:block}.viewpage-topbar{height:40px;-webkit-flex-shrink:0;flex-shrink:0;padding:.75em 1em;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.viewpage-topbar-orientation a{opacity:.5;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.viewpage-topbar-orientation a:hover{opacity:1}.viewpage-topbar-preset button{background-color:transparent;border:none;padding-left:20px;padding-right:20px}.viewpage-topbar-preset button span{vertical-align:middle}.viewpage-topbar-size input{background-color:transparent;padding-left:0;padding-right:0;border:0;border-bottom:1px solid rgba(0,120,230,.5);-webkit-transition:all .5s ease-in-out;transition:all .5s ease-in-out}.viewpage-topbar-size input:focus,.viewpage-topbar-size input:hover{outline:0;border-bottom-color:#0078e6}.viewpage-resizeable{background-color:#fafafa}.viewpage-preset-item{display:-webkit-box;display:-webkit-flex;display:flex}.viewpage-preset-item-icon{padding-right:.5em}.viewpage-preset-item-label{-webkit-box-flex:1;-webkit-flex:1 1 auto;flex:1 1 auto}.viewpage-preset-item-size{padding-left:1em;opacity:.5}.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #292929;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #292929;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #292929;border-top-color:rgba(0,0,0,.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #292929;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled,.bootstrap-datetimepicker-widget .modulemenu .modulemenu-group-container,.modulemenu .bootstrap-datetimepicker-widget .modulemenu-group-container{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:12px;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after{content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after{content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after{content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after{content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after{content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after{content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after{content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action=clear]::after{content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action=today]::after{content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch::after{content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:0}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:0 0;color:#737373;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#434242}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#8c8c8c}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#434242;cursor:pointer}.bootstrap-datetimepicker-widget table td.new,.bootstrap-datetimepicker-widget table td.old{color:#8c8c8c}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#0078e6;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#0078e6;color:#fff;text-shadow:none}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:0 0;color:#737373;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:0}.bootstrap-datetimepicker-widget table td span:hover{background:#434242}.bootstrap-datetimepicker-widget table td span.active{background-color:#0078e6;color:#fff;text-shadow:none}.bootstrap-datetimepicker-widget table td span.old{color:#8c8c8c}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:0 0;color:#737373;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.input-group.date .input-group-addon{cursor:pointer}.cropper-container{position:relative;overflow:hidden;user-select:none;-webkit-touch-callout:none}.cropper-container img{display:block;image-orientation:0deg!important;width:100%;height:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal{position:absolute;top:0;right:0;bottom:0;left:0}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;width:100%;height:100%;overflow:hidden;outline:#69f solid 1px;outline-color:rgba(102,153,255,.75)}.cropper-dashed{position:absolute;display:block;border:0 dashed #fff;opacity:.5}.cropper-dashed.dashed-h{top:33.33333333%;left:0;width:100%;height:33.33333333%;border-top-width:1px;border-bottom-width:1px}.cropper-dashed.dashed-v{top:0;left:33.33333333%;width:33.33333333%;height:100%;border-right-width:1px;border-left-width:1px}.cropper-face,.cropper-line,.cropper-point{position:absolute;display:block;width:100%;height:100%;opacity:.1}.cropper-face{top:0;left:0;cursor:move;background-color:#fff}.cropper-line,.cropper-point{background-color:#69f}.cropper-line.line-e{top:0;right:-3px;width:5px;cursor:e-resize}.cropper-line.line-n{top:-3px;left:0;height:5px;cursor:n-resize}.cropper-line.line-w{top:0;left:-3px;width:5px;cursor:w-resize}.cropper-line.line-s{bottom:-3px;left:0;height:5px;cursor:s-resize}.cropper-point{width:5px;height:5px;opacity:.75}.cropper-point.point-e{top:50%;right:-3px;margin-top:-3px;cursor:e-resize}.cropper-point.point-n{top:-3px;left:50%;margin-left:-3px;cursor:n-resize}.cropper-point.point-w{top:50%;left:-3px;margin-top:-3px;cursor:w-resize}.cropper-point.point-s{bottom:-3px;left:50%;margin-left:-3px;cursor:s-resize}.cropper-point.point-ne{top:-3px;right:-3px;cursor:ne-resize}.cropper-point.point-nw{top:-3px;left:-3px;cursor:nw-resize}.cropper-point.point-sw{bottom:-3px;left:-3px;cursor:sw-resize}.cropper-point.point-se{right:-3px;bottom:-3px;width:20px;height:20px;cursor:se-resize;opacity:1}.cropper-point.point-se:before{position:absolute;right:-50%;bottom:-50%;display:block;width:200%;height:200%;content:" ";background-color:#69f;opacity:0}@media (min-width:768px){.cropper-point.point-se{width:15px;height:15px}.dl-horizontal dt,.form-irre-header-body dl dt{text-align:left}}@media (min-width:992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width:1200px){.cropper-point.point-se{width:5px;height:5px;opacity:.75}}.cropper-bg{background-image:url(../img/bg.png)}.cropper-invisible{opacity:0}.cropper-hide{position:fixed;top:0;left:0;z-index:-1;width:auto!important;height:auto!important;opacity:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}#nprogress .bar{background:#ff8700;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #ff8700,0 0 5px #ff8700;opacity:1;-webkit-transform:rotate(3deg) translate(0,-4px);transform:rotate(3deg) translate(0,-4px)}.t3-help-inline,.typo3-csh-inline{box-shadow:0 1px 3px rgba(0,0,0,.3);line-height:16px}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#ff8700;border-left-color:#ff8700;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.t3-help-link span.t3-help-inline{display:none}.t3-help-link:hover span.t3-help-inline{display:block}@media print{div#typo3-docbody{overflow:visible}}.t3-page-ce .t3-page-ce-footer,.text-monospace{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.text-normal{font-weight:400}.text-pre-wrap{white-space:pre-wrap}.lead{font-size:1.25em}@media (min-width:768px){.dl-horizontal-wide dt{width:115px}.dl-horizontal-wide dd{margin-left:135px}.table .col-word-break{word-wrap:break-word;word-break:break-all}}.t3-page-ce,.table-fit,.x-viewport,.x-viewport body,[id=typo3-debug-console] .messages,[id=typo3-docbody],[id=typo3-module-menu] .x-panel-body,[id=typo3-navigationContainer] .x-panel-body,[id=typo3-pagetree-filteringTree] .x-panel-body,[id=typo3-pagetree-tree] .x-panel-body,[id=typo3-side-menu],iframe{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.collapse-horizontal{height:auto;width:0;vertical-align:middle;overflow:hidden}.collapse-horizontal.in{display:inline-block;width:auto}.collapse-horizontal.collapsing{display:inline-block;width:0;-webkit-transition-property:width,visibility;transition-property:width,visibility}.cropper .cropper-line{background-color:transparent}.cropper .cropper-dashed{border:1px dashed #ff8700}.cropper .cropper-point{background-color:#ff8700}.cropper .cropper-point.point-nw{left:0;top:0}.cropper .cropper-point.point-w{left:0}.cropper .cropper-point.point-sw{left:0;bottom:0}.cropper .cropper-point.point-ne{right:0;top:0}.cropper .cropper-point.point-e{right:0}.cropper .cropper-point.point-se{right:0;bottom:0}.cropper .cropper-point.point-se:before{background-color:#fff}.cropper .cropper-point.point-n{top:0}.cropper .cropper-point.point-s{bottom:0}.cropper .cropper-view-box{outline:#ff8700 dashed 1px}.cropper .cropper-bg{background-image:url(../Images/cropper-background.png)}.cropper .cropper-image-container{height:100%!important;width:100%!important;max-width:1000px!important}.cropper .ratio-buttons{margin-bottom:10px}.cropper .ratio-buttons .btn.btn-default{margin-bottom:5px}.cropper .ratio-buttons .btn:not(.active) .fa{display:none}.cropper .panel-group{position:relative;margin:-15px}.cropper .panel-group [aria-expanded=true]{border-left:2px solid #ff8700;position:relative}.cropper .panel-group [aria-expanded=true][data-toggle=collapse]{background-color:#333}.cropper .panel-group [aria-expanded=false]{border-left:2px solid #444;position:relative}.cropper .panel-group label,.cropper .panel-group table{color:#fff}.cropper .panel-collapse.collapse{background-color:#2c2c2c!important;border-left:2px solid #ff8700}.cropper .panel-heading{padding:0}.cropper .panel-heading .panel-title>[data-crop-variant]{display:-webkit-box;display:-webkit-flex;display:flex;padding:10px 15px;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.cropper .panel-heading .panel-title>a{text-decoration:none!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:13px}.alert a,div.typo3-view-help a{text-decoration:underline}.cropper .panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#333}.cropper .panel,.cropper .panel-default .panel-heading,.cropper .panel-group{background:#222;border:none;color:#fff}.cropper .btn-secondary,.cropper .open .dropdown-toggle.btn-secondary{color:#fff;background-color:#777;border-color:#555}.cropper .btn-secondary.active,.cropper .btn-secondary:active,.cropper .btn-secondary:focus,.cropper .btn-secondary:hover,.cropper .open .active.dropdown-toggle.btn-secondary,.cropper .open .dropdown-toggle.btn-secondary:active,.cropper .open .dropdown-toggle.btn-secondary:focus,.cropper .open .dropdown-toggle.btn-secondary:hover{color:#fff;background-color:#888;border-color:#444}.cropper .cropper-container.cropper-bg{overflow:visible}.cropper .cropper-crop-box{overflow:hidden}.cropper .cropper-crop-box:after{background-color:#ff8700;content:"Cropped area";position:absolute;left:0;top:0;font-size:10px;color:#000;height:16px;width:100%;max-width:80px;text-overflow:ellipsis;white-space:nowrap;padding:0 4px;overflow:hidden}.cropper .cropper-line.line-w{left:0}.cropper .cropper-line.line-e{right:0}.cropper .cropper-line.line-n{top:0}.cropper .cropper-line.line-s{bottom:0}.cropper .ui-resizable-handle.ui-resizable-e,.cropper .ui-resizable-handle.ui-resizable-n,.cropper .ui-resizable-handle.ui-resizable-s,.cropper .ui-resizable-handle.ui-resizable-w{border-color:transparent;-webkit-transform:none;transform:none}.cropper .ui-resizable-handle.ui-resizable-e,.cropper .ui-resizable-handle.ui-resizable-w{width:6px}.cropper .ui-resizable-handle.ui-resizable-n,.cropper .ui-resizable-handle.ui-resizable-s{height:6px}.cropper .ui-resizable-handle.ui-resizable-e{right:0}.cropper .ui-resizable-handle.ui-resizable-w{left:0}.cropper .ui-resizable-handle.ui-resizable-n{top:0}.cropper .ui-resizable-handle.ui-resizable-s{bottom:0}.cropper .ui-resizable-handle.ui-resizable-ne,.cropper .ui-resizable-handle.ui-resizable-nw,.cropper .ui-resizable-handle.ui-resizable-se,.cropper .ui-resizable-handle.ui-resizable-sw{-webkit-transform:none;transform:none;background-color:#ccc;height:6px;width:6px}.cropper .ui-resizable-handle.ui-resizable-nw{top:0;left:0}.cropper .ui-resizable-handle.ui-resizable-ne{top:0;right:0}.cropper .ui-resizable-handle.ui-resizable-se{bottom:0;right:0}.cropper .ui-resizable-handle.ui-resizable-sw{bottom:0;left:0}.cropper .cropper-focus-area{cursor:move;height:200px;width:200px;background-color:rgba(215,187,0,.5);position:absolute;z-index:999999;opacity:1;overflow:hidden;-webkit-transition:background-color .3s;transition:background-color .3s}.cropper .cropper-cover-area:after,.cropper .cropper-focus-area:after{position:absolute;font-size:10px;height:16px;width:100%;white-space:nowrap;top:0;color:#000;overflow:hidden;left:0;pointer-events:none;text-overflow:ellipsis}.cropper .cropper-focus-area.has-nodrop,.cropper .cropper-focus-area.has-nodrop:hover{background-color:rgba(211,35,46,.6)!important;-webkit-transition:background-color .3s;transition:background-color .3s}.cropper .cropper-focus-area:focus,.cropper .cropper-focus-area:hover{background-color:rgba(215,187,0,.7)}.cropper .cropper-focus-area:after{background-color:rgba(255,255,255,.95);content:"Focus";max-width:44px;padding:0 4px 0 8px}.cropper .cropper-cover-area{background:url(../Images/cropper-background-cover-area.svg);pointer-events:none;cursor:not-allowed;position:absolute;opacity:1;z-index:99999}.cropper .cropper-cover-area:after{background-color:rgba(255,255,255,.95);content:"Cover area";max-width:80px;padding:0 4px}a.t3-help-link,a.typo3-csh-link{white-space:normal}.cropper .cropper-preview-thumbnail{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;max-width:100px;max-height:100px;overflow:hidden}.cropper .cropper-preview-thumbnail:after{background-color:rgba(0,0,0,.5);content:" ";top:0;left:0;bottom:0;right:0;position:absolute;z-index:9}a.t3-help-link .t3-help-inline.show-right,a.typo3-csh-link .typo3-csh-inline.show-right{right:10px}.cropper .cropper-preview-thumbnail.wide{width:100px;height:auto}.cropper .cropper-preview-thumbnail.tall{width:auto;height:80px}.cropper .cropper-preview-thumbnail-image{left:0;top:0}.cropper .wide .cropper-preview-thumbnail-image{width:100%;height:auto}.cropper .tall .cropper-preview-thumbnail-image{width:auto;height:100%}.cropper .cropper-preview-thumbnail-crop-area{border:1px solid #ff8700;position:absolute;z-index:10;overflow:hidden}.cropper .cropper-preview-thumbnail-focus-area{background-color:rgba(215,187,0,.7);position:absolute;z-index:11}:root .cropper-preview-thumbnail-crop-image{image-orientation:0deg;display:block;height:100%;width:100%;min-width:0;max-width:none;min-height:0;max-height:none}.cropper-preview-container{overflow:hidden;position:relative}.cropper-preview-container img{display:block;position:absolute;width:100%;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important}.typo3-csh-inline{padding:4px}table.typo3-csh-inline{margin:5px 4px 20px 0}table.typo3-csh-inline a.typo3-csh-link{float:none;margin-right:0;height:16px}a.typo3-csh-link .typo3-csh-inline{display:none;position:absolute;width:200px;z-index:100}a.typo3-csh-link:hover .typo3-csh-inline,table.typo3-csh-inline a.typo3-csh-link{display:block}table.typo3-csh-inline tr td h4{margin-top:0;margin-bottom:0}a.typo3-csh-link span.typo3-csh-inline span.paragraph,table.typo3-csh-inline span.paragraph{display:block;padding:3px}img.typo3-csh-icon{vertical-align:middle;cursor:help}div.typo3-view-help{margin:0;width:100%}div.typo3-view-help h1{background:0 0;margin-bottom:0;padding:10px;color:#000;text-align:left}div.typo3-view-help h2{margin-top:0;padding:4px 2px 4px 10px}div.typo3-view-help h3{padding:5px 10px}div.typo3-view-help h4{padding:2px 10px}div.typo3-view-help p{margin:4px 4px 12px 10px}div.typo3-view-help p.c-nav a{background-color:transparent}div.typo3-view-help div.c-toc{padding-left:6px}div.typo3-view-help div.c-toc p{margin:0}div.typo3-view-help .introduction,div.typo3-view-help .manual-title{padding:0 12px 6px}div.typo3-view-help img.c-inlineimg{margin-left:10px}div.typo3-view-help p div.c-toc{background:0 0;border:none}a.typo3-csh-link .typo3-csh-inline,table.t3-help-inline,table.typo3-csh-inline{background-color:#ffffc7;border:1px solid #ccc}.t3-help-inline{padding:4px}table.t3-help-inline{margin:3px 4px 20px 0}table.t3-help-inline a.t3-help-link{float:none;margin-right:0;height:16px;display:block}table.t3-help-inline tr td h4{margin-top:0;margin-bottom:0}a.t3-help-link .t3-help-inline{display:none;position:absolute;width:200px;z-index:100;background:#ffffc7;color:#000;font-weight:400}a.t3-help-link:hover .t3-help-inline{display:block}a.t3-help-link span.t3-help-inline span.paragraph,table.t3-help-inline span.paragraph{display:block;padding:3px}img.t3-help-icon{vertical-align:middle}div.t3-view-help{margin:0;width:100%}div.t3-view-help h1{margin-bottom:0;padding:10px}div.t3-view-help h2{margin-top:0;padding:4px 2px 4px 10px}div.t3-view-help h3{padding:5px 10px}div.t3-view-help h4{padding:2px 10px}div.t3-view-help p{margin:4px 4px 12px 10px}div.t3-view-help .c-toc{padding-left:6px}div.t3-view-help .c-toc p{margin:0}div.t3-view-help .introduction,div.t3-view-help .manual-title{padding:0 12px 6px}div.t3-view-help img.c-inlineimg{margin-left:10px}.x-tip.typo3-csh-tooltip .x-tip-cl,.x-tip.typo3-csh-tooltip .x-tip-tl{padding-left:8px}.x-tip.typo3-csh-tooltip .x-tip-cr,.x-tip.typo3-csh-tooltip .x-tip-tr{padding-right:8px}a.typo3-csh-link .typo3-csh-inline{color:#000;font-weight:400}p.t3-help-short.tipIsLinked{cursor:pointer}.t3-help-teaser,.t3-help-teaser label,.t3-help-teaser-icon,img.t3-help-icon{cursor:help}div#contentMenu0{position:absolute;z-index:300}div#contentMenu1{position:absolute;z-index:310}.context-menu .list-group{margin-bottom:0;background-color:#fff;min-width:150px}.context-menu .list-group-item{cursor:pointer;padding:5px;border-bottom-color:transparent;border-top-color:transparent}.context-menu .list-group-item:first-child{border-top-color:#d7d7d7}.context-menu .list-group-item:last-child{border-bottom-color:#d7d7d7}.context-menu .list-group-item-divider{display:block;padding:0 0 1px;margin:0 0 1px;width:100%;border-bottom-color:#d7d7d7}.context-menu .list-group-item-icon{width:1.28571429em;text-align:center}#typo3-docheader{background:#eee}#typo3-docheader img,#typo3-docheader input{cursor:pointer}#typo3-docheader .t3-icon{margin-bottom:3px}#typo3-docheader .left{float:left}#typo3-docheader .left .t3-icon{margin-right:6px}#typo3-docheader .right{float:right}#typo3-docheader .right .t3-icon{margin-left:6px}#typo3-docheader .buttongroup{float:left;margin-right:6px}#typo3-docheader .buttongroup .c-inputButton{color:inherit;padding:0}#typo3-docheader .buttongroup input.c-inputButton{text-indent:-1000px}#typo3-docheader select{margin-right:12px}#typo3-docheader a{color:#2d2d2d}#typo3-docheader a:hover{color:#000}#typo3-docheader a.active{color:#c3c3c3}#typo3-docheader a.active span{cursor:default}#typo3-docheader .typo3-docheader-buttons,#typo3-docheader .typo3-docheader-functions{color:#2d2d2d;overflow:hidden;padding:0 24px}#typo3-docheader .typo3-docheader-functions{height:27px;line-height:27px}#typo3-docheader .typo3-docheader-functions select{color:#2d2d2d}#typo3-docheader .typo3-docheader-buttons{height:22px;padding-top:3px;padding-bottom:3px;border-bottom:1px solid #c3c3c3}.alert-notice{background-color:#333;border-color:transparent;color:#fff}.alert-notice hr{border-top-color:transparent}.alert-notice .alert-link{color:#e6e5e5}.alert{box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);border:0}.alert a{color:inherit}.alert .media{margin:0}.alert .media .fa-stack>.fa:first-child{opacity:.2}.alert .media-body{vertical-align:middle}.alert-title{font-size:1.12em;font-weight:700;margin:0 0 .25em}.alert-body,.alert-message{margin:0;font-size:.9em}.alert-body>:last-child,.alert-message>:last-child{margin-bottom:0}.alert-body>ul,.alert-message>ul{padding-left:1.5em}.alert-dismissible .close{opacity:.5;padding:1px;top:-3px;right:-22px;color:inherit}.alert-dismissible .close:hover{opacity:1;color:inherit}#alert-container{width:400px;position:absolute;right:5px;top:46px;z-index:10000}#alert-container .alert{box-shadow:inset 0 0 0 1px rgba(0,0,0,.1),0 2px 0 0 rgba(0,0,0,.15);position:relative;margin:5px auto}#alert-container .alert.fade.in{opacity:.95}#typo3-pagetree-topPanelItems{background-color:#eee}#typo3-pagetree,#typo3-pagetree .x-panel-body,#typo3-pagetree .x-panel-bwrap{height:100%}#typo3-pagetree ul{padding-left:0;list-style:none}#typo3-pagetree .x-toolbar{padding:0;border:none}#typo3-pagetree ul.x-tree-root-ct{padding-top:24px;margin-bottom:50px}#typo3-pagetree .x-panel-body{background:0 0}#typo3-pagetree .x-tree-node .x-tree-node-el{line-height:18px;height:20px;margin-right:3px;border-top:1px solid transparent;border-bottom:1px solid transparent;border-left:1px solid transparent}#typo3-pagetree .x-tree-node .x-tree-node-over,#typo3-pagetree .x-tree-node .x-tree-selected{border-bottom:1px solid #d7d7d7;border-top:1px solid #d7d7d7;border-right:1px solid #d7d7d7}#typo3-pagetree .x-tree-node .x-tree-node-over{background-color:#f2f2f2;border-top-right-radius:3px;border-bottom-right-radius:3px}#typo3-pagetree .x-tree-node .x-tree-selected{background-color:#fff}#typo3-pagetree .x-tree-node .x-tree-selected.x-tree-node-over{background-image:none;border-radius:0}#typo3-pagetree .x-tree-node-readableRootline{padding:10px 0 3px 10px}#typo3-pagetree .x-unselectable,#typo3-pagetree .x-unselectable *{cursor:pointer}#typo3-pagetree .ver-element,#typo3-pagetree .ver-page,#typo3-pagetree .ver-versions{background-color:#f7c898}#typo3-pagetree .x-tree-node-over.ver-element,#typo3-pagetree .x-tree-node-over.ver-page,#typo3-pagetree .x-tree-node-over.ver-versions,#typo3-pagetree .x-tree-selected.ver-element,#typo3-pagetree .x-tree-selected.ver-page,#typo3-pagetree .x-tree-selected.ver-versions{background-color:#fee4c9}#typo3-pagetree .typo3-pagetree-filteringTree-highlight{background-color:#f48e0c;color:#fff;padding:0}.x-tree-lines .typo3-pagetree-node-notExpandable .x-tree-ec-icon{visibility:hidden}.x-tree-lines .typo3-pagetree-node-notExpandable ul .x-tree-ec-icon{visibility:visible}.x-dd-drag-ghost a .typo3-pagetree-status,.x-tree-node a .typo3-pagetree-status{padding:0;margin:0 3px 0 0}.typo3-pagetree-tree-copy{color:#666;margin-top:5px}.x-dd-drag-ghost-pagetree-text{display:inline-block;vertical-align:middle}.x-dd-drag-ghost,.x-dd-drag-ghost-pagetree{padding-bottom:5px}.x-dd-drop-icon{padding-top:6px}.x-dd-drag-ghost-pagetree span{margin:3px 3px 0}.x-dd-drag-ghost{background-color:inherit;border:none;box-shadow:0 1px 3px rgba(0,0,0,.3)}.x-dd-drag-ghost span{margin:0 1px 0 3px}.x-dd-drop-nodrop{background-color:#f6d3cf;border:1px solid #d66c68}.typo3-pagetree-deletionDropZone-proxyOver,.x-tree-drop-ok-above,.x-tree-drop-ok-append,.x-tree-drop-ok-below,.x-tree-drop-ok-between{background-color:#dce8f4;border:1px solid #9eb2c5}.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-place-denied.png)}.x-tree-drop-ok-append.typo3-pagetree-copy .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-new-inside.png)}.x-tree-drop-ok-below.typo3-pagetree-copy .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-copy-below.png)}.x-tree-drop-ok-above.typo3-pagetree-copy .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-copy-above.png)}.x-tree-drop-ok-between.typo3-pagetree-copy .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-new-between.png)}.x-tree-drop-ok-append .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-move-into.png)}.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-move-between.png)}.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-move-below.png)}.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url(../../../../backend/Resources/Public/Images/pagetree-drag-move-above.png)}#typo3-pagetree .x-tree-node .x-tree-drag-insert-below,.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a,.x-tree-node div.x-tree-drag-insert-below{border-bottom:1px solid #9eb2c5}#typo3-pagetree .x-tree-node .x-tree-drag-insert-above,.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a,.x-tree-node .x-tree-drag-insert-above{border-top:1px solid #9eb2c5}.x-tree-node .x-tree-drag-append{background:#d7e4f1}.x-tree-node .x-tree-drag-append a span{background-color:inherit;border:none}.typo3-pagetree-toppanel{padding:0 10px;border-bottom:1px solid #c3c3c3}.typo3-pagetree-toppanel .btn{line-height:16px}.typo3-pagetree-toppanel .x-toolbar{padding:0;border:0!important}.typo3-pagetree-toppanel .x-toolbar-left-row .btn{margin-right:4px}.typo3-pagetree-toppanel .x-toolbar-right-row .btn{margin-left:4px}.typo3-pagetree-toppanel .x-panel-body,.typo3-pagetree-toppanel .x-panel-tbar{margin:4px 0;min-height:26px;height:auto!important}.typo3-pagetree-toppanel .x-panel-bwrap{height:auto!important;overflow:visible}.typo3-pagetree-toppanel .x-btn button{padding:0;font-size:inherit}.typo3-pagetree-toppanel-filter{width:100%!important;height:26px!important;padding-right:25px;padding-left:8px;box-sizing:inherit}.slider-handle,.table *{box-sizing:border-box}.typo3-pagetree-toppanel-filter-clear{position:absolute;right:5px;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.typo3-pagetree-toppanel-item .x-form-field-wrap{width:100%!important}.typo3-pagetree-toppanel-item .x-panel-body{margin:0}.typo3-pagetree-toppanel-drag-node{cursor:move;padding:5px;border:none;background:0 0;font-size:11px;line-height:16px}#typo3-pagetree-deletionDropZone{color:#fff;background-color:#585858;box-shadow:inset 0 2px 5px #414141}#typo3-pagetree-deletionDropZone p{padding:5px}#typo3-pagetree-deletionDropZone #typo3-pagetree-deletionDropZone-text{cursor:default;font-size:.9em;padding:0 0 0 5px;display:inline}.typo3-pagetree-deletionDropZone-restore{background-color:#d5d5d5;background-repeat:repeat-x;background-image:-webkit-linear-gradient(top,#f6f6f6 10%,#d5d5d5 90%);background-image:linear-gradient(to bottom,#f6f6f6 10%,#d5d5d5 90%);border:1px solid #7c7c7c;border-radius:1px;color:#434343;cursor:pointer;display:inline-block;padding:0 6px;margin-left:24px}.typo3-pagetree-deletionDropZone-restore:hover{background-color:#c8c8c8;background-image:-webkit-linear-gradient(top,#f6f6f6 10%,#c8c8c8 90%);background-image:linear-gradient(to bottom,#f6f6f6 10%,#c8c8c8 90%);background-position:bottom;background-repeat:repeat-x;border:1px solid #737f91;color:#1e1e1e}.typo3-pagetree-deletionDropZone-restoreText{display:inline-block;padding:4px 4px 4px 18px}#typo3-pagetree .typo3-pagetree-deletionDropZone-activateProxyOver{background-color:#644d2d}[id=typo3-pagetree-indicatorBar] .alert{margin:10px 10px 0}.x-shadow{z-index:40!important}[id=typo3-pagetree-indicatorBar-temporaryMountPoint] .media-right{position:absolute;right:16px;-webkit-transform:translateY(-100%);transform:translateY(-100%);background-color:#6daae0}.slider{display:inline-block;position:relative}.slider .hide,.slider input{display:none}.slider .tooltip.top{margin-top:-36px}.slider .tooltip-inner{white-space:nowrap}.form-wizards-items>.slider.slider-horizontal{margin-left:8px;margin-right:8px}.slider-track{position:absolute;cursor:pointer;background-color:#ddd;border-radius:2px;box-shadow:inset 0 0 2px rgba(0,0,0,.25)}.slider-track-high,.slider-track-low{position:absolute;background:0 0;box-sizing:border-box;border-radius:2px}.slider-handle{position:absolute;background-color:#eee;border:1px solid #959595;border-radius:2px;box-shadow:0 1px 0 rgba(0,0,0,.15)}.slider-handle:active,.slider-handle:focus,.slider-handle:hover{background-color:#d5d4d4;border-color:#767676}.slider-handle:after,.slider-handle:before{content:"";display:block;position:absolute;background-color:#333}.slider-horizontal .slider-tick[style="left: 0%;"],.slider-horizontal .slider-tick[style="left: 100%;"],.slider-vertical .slider-tick[style="top: 0%;"],.slider-vertical .slider-tick[style="top: 100%;"]{display:none}.slider-selection{position:absolute;background-color:#999;border-radius:2px;box-shadow:inset 0 0 2px rgba(0,0,0,.25)}.slider-tick{position:absolute;background-color:#c4c3c3}.slider-tick.in-selection{background-color:#807f7f}.slider-horizontal{width:210px;height:32px}.slider-horizontal .slider-selection,.slider-horizontal .slider-track-high,.slider-horizontal .slider-track-low{height:100%;top:0;bottom:0}.slider-horizontal .slider-track{top:50%;left:0;margin-top:-8px;height:16px;width:100%}.slider-horizontal .slider-tick{height:16px;width:1px}.slider-horizontal .slider-handle{top:50%;height:20px;width:16px;margin-top:-10px;margin-left:-8px}.slider-horizontal .slider-handle:after,.slider-horizontal .slider-handle:before{height:50%;width:2px;top:25%}.slider-horizontal .slider-handle:before{left:4px}.slider-horizontal .slider-handle:after{right:4px}.slider-vertical{width:32px;height:210px}.slider-vertical .slider-selection,.slider-vertical .slider-track-high,.slider-vertical .slider-track-low{width:100%;left:0;right:0}.slider-vertical .slider-selection{bottom:0}.slider-vertical .slider-track{top:0;left:50%;margin-left:-8px;height:100%;width:16px}.slider-vertical .slider-tick{height:1px;width:16px}.slider-vertical .slider-handle{left:50%;height:16px;width:20px;margin-top:-8px;margin-left:-10px}.slider-vertical .slider-handle:after,.slider-vertical .slider-handle:before{height:2px;width:50%;left:25%}.slider-vertical .slider-handle:before{top:4px}.slider-vertical .slider-handle:after{bottom:4px}.slider-vertical .slider-selection{left:0;right:0}.slider-disabled .slider-handle{background-color:#c83c3c;border:1px solid #7b2323}.slider-disabled .slider-handle:active,.slider-disabled .slider-handle:focus,.slider-disabled .slider-handle:hover{background-color:#a32e2e;border-color:#4c1515}.slider-disabled .slider-handle:after,.slider-disabled .slider-handle:before{background-color:#fff}.slider-disabled .slider-track{cursor:not-allowed}.panel-heading[data-toggle=formengine-flex],.panel-heading[data-toggle=formengine-inline],.taskGroup{cursor:pointer}span.checkbox-spinner{position:absolute;margin-left:-20px;margin-top:4px}.nav-tabs{border-radius:2px 2px 0 0;background-color:#ededed}.nav-tabs>li+li{margin-left:2px}.nav-tabs>li>a{margin-right:0;-webkit-transition:all .25s ease-in-out;transition:all .25s ease-in-out}.nav-tabs>li>a:focus,.nav-tabs>li>a:hover{border-color:#d7d7d7 #d7d7d7 #ccc;background:#e1e0e0}.nav-tabs>li[class*=has-]>a:before{font-family:FontAwesome;margin-right:2px;margin-top:-2px;vertical-align:middle;font-size:10px;text-align:center;background-color:rgba(255,255,255,.25);border-radius:50%;width:15px;height:15px;display:inline-block;-webkit-transition:all .25s ease-in-out;transition:all .25s ease-in-out}.nav-tabs>li.has-validation-error>a{background-color:#c83c3c;border-color:#a32e2e;color:#fff}.nav-tabs>li.has-validation-error>a:focus,.nav-tabs>li.has-validation-error>a:hover{color:#fff;background-color:#ce5050;border-color:#b73434}.nav-tabs>li.has-validation-error>a:before{content:""}.nav-tabs>li.has-validation-error.active>a{color:inherit;background-color:#fafafa}.nav-tabs>li.has-validation-error.active>a:before{background-color:#c83c3c;color:#fff}.nav-tabs>li.active>a,.nav-tabs>li.active>a:active,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{border:1px solid #ccc;border-bottom-color:#fafafa;background-color:#fafafa}.tab-content>.tab-pane{display:block;height:0;width:0;overflow:hidden}.tab-content>.tab-pane.active{height:auto;width:auto;overflow:visible}.t3-overview-list dt{padding:0 0 2px 20px}.t3-overview-list dt img{vertical-align:middle;margin-right:5px}.t3-overview-list dd{margin:2px 0 15px 20px;padding-left:22px}table{background:0 0;font-size:inherit;line-height:inherit}.table{background-color:#fafafa;border:1px solid #ccc}.table .table{margin:0}.table .table+.table{margin-top:6px}.table .col-icon .t3-icon,.table .pagination{margin:0}.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>th{white-space:nowrap;vertical-align:middle}.table>tbody>tr>td,.table>tfoot>tr>td,.table>thead>tr>td{vertical-align:middle}.table>thead>tr{background-color:#ededed}.table>thead>tr th.col-checkbox+th.col-title label{margin-bottom:0}.table>thead>tr td,.table>thead>tr th{border-bottom:1px solid #ccc}.table>thead>tr td i,.table>thead>tr th i{font-weight:400}.table .btn-group>.btn,.table .btn-group>.btn-group{float:none}.table .btn-default{color:#333;background-color:#dedede;border-color:#c4c4c4}.table .btn-default.focus,.table .btn-default:focus{color:#333;background-color:#c4c4c4;border-color:#858585}.open>.table .btn-default.dropdown-toggle,.table .btn-default.active,.table .btn-default:active,.table .btn-default:hover{color:#333;background-color:#c4c4c4;border-color:#a6a6a6}.open>.table .btn-default.dropdown-toggle.focus,.open>.table .btn-default.dropdown-toggle:focus,.open>.table .btn-default.dropdown-toggle:hover,.table .btn-default.active.focus,.table .btn-default.active:focus,.table .btn-default.active:hover,.table .btn-default:active.focus,.table .btn-default:active:focus,.table .btn-default:active:hover{color:#333;background-color:#b3b3b3;border-color:#858585}.open>.table .btn-default.dropdown-toggle,.table .btn-default.active,.table .btn-default:active{background-image:none}.table .btn-default.disabled.focus,.table .btn-default.disabled:focus,.table .btn-default.disabled:hover,.table .btn-default[disabled].focus,.table .btn-default[disabled]:focus,.table .btn-default[disabled]:hover,fieldset[disabled] .table .btn-default.focus,fieldset[disabled] .table .btn-default:focus,fieldset[disabled] .table .btn-default:hover{background-color:#dedede;border-color:#c4c4c4}.table .btn-default .badge{color:#dedede;background-color:#333}.table .col-icon{text-align:center}.table .col-checkbox,.table .col-icon{padding-right:0}.table .col-title{width:99%}.table-basic,.table-fit{width:100%}.table .col-clipboard,.table .col-control,.table .col-nowrap{white-space:nowrap!important}.table .col-clipboard,.table .col-control{text-align:right}.table .col-control{padding:4px 6px}.table .col-border-left{border-left:1px solid #ccc}.table .col-min{min-width:150px}.table .col-responsive{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table-white{background-color:#fff}.table-transparent{background-color:transparent}.table-center td,.table-center th{text-align:center}.table-basic td,.table-basic th{vertical-align:middle}.table-vertical-top>tbody>tr>td,.table-vertical-top>tbody>tr>th,.table-vertical-top>tfoot>tr>td,.table-vertical-top>tfoot>tr>th,.table-vertical-top>thead>tr>td,.table-vertical-top>thead>tr>th{vertical-align:top}.table-vertical-bottom>tbody>tr>td,.table-vertical-bottom>tbody>tr>th,.table-vertical-bottom>tfoot>tr>td,.table-vertical-bottom>tfoot>tr>th,.table-vertical-bottom>thead>tr>td,.table-vertical-bottom>thead>tr>th{vertical-align:bottom}.table-no-borders{border:none}.table-no-borders>tbody>tr>td,.table-no-borders>tbody>tr>th,.table-no-borders>tfoot>tr>td,.table-no-borders>tfoot>tr>th,.table-no-borders>thead>tr>td,.table-no-borders>thead>tr>th{border:none;padding:2px}.table-fit{margin-bottom:1.5em;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-fit-block,.table-fit-block>.table,.table-fit-inline-block>.table{width:auto}.table-fit>.dataTables_wrapper>.table,.table-fit>.table{margin-top:0;margin-bottom:0;border:0}.table-fit>.dataTables_wrapper>.table colgroup:first-child+tbody tr:first-child td,.table-fit>.dataTables_wrapper>.table colgroup:first-child+tbody tr:first-child th,.table-fit>.dataTables_wrapper>.table tbody:first-child tr:first-child td,.table-fit>.dataTables_wrapper>.table tbody:first-child tr:first-child th,.table-fit>.table colgroup:first-child+tbody tr:first-child td,.table-fit>.table colgroup:first-child+tbody tr:first-child th,.table-fit>.table tbody:first-child tr:first-child td,.table-fit>.table tbody:first-child tr:first-child th{border-top:0}.table-fit>.dataTables_wrapper>.table tr>td,.table-fit>.dataTables_wrapper>.table tr>th,.table-fit>.table tr>td,.table-fit>.table tr>th{white-space:nowrap}@media (min-width:768px){.table-fit>.dataTables_wrapper>.table tr>td.col-word-break,.table-fit>.dataTables_wrapper>.table tr>th.col-word-break,.table-fit>.table tr>td.col-word-break,.table-fit>.table tr>th.col-word-break{white-space:normal}}.table-fit>.dataTables_wrapper>.table tr>td:first-child,.table-fit>.dataTables_wrapper>.table tr>th:first-child,.table-fit>.table tr>td:first-child,.table-fit>.table tr>th:first-child{border-left:0}.table-fit>.dataTables_wrapper>.table tr>td:last-child,.table-fit>.dataTables_wrapper>.table tr>th:last-child,.table-fit>.table tr>td:last-child,.table-fit>.table tr>th:last-child{border-right:0}.table-fit>.dataTables_wrapper>.table tr:last-child td,.table-fit>.dataTables_wrapper>.table tr:last-child th,.table-fit>.table tr:last-child td,.table-fit>.table tr:last-child th{border-bottom:0}.table-fit-wrap>.table tr>td,.table-fit-wrap>.table tr>th{white-space:normal}#dragIcon,.form-irre-header-cell,.list-tree-group,.nowrap,.t3-flex-section-header-preview,.treeline-icon,.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr td.c-labelCell{white-space:nowrap}.table-fit-inline-block{max-width:100%;width:auto;display:inline-block;margin:0}.table-fit-block{max-width:100%;display:block;margin:0}.table-spacer-wrap{margin-top:10px;margin-bottom:10px}.taskGroup--close .icon-actions-view-list-collapse{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.taskGroup--close td{padding:0!important;border:0!important}.taskGroup--close .t-span{height:0;overflow:hidden;padding:0;line-height:0;display:block}.tooltip-inner{padding:5px 10px}.panel{box-shadow:0 2px 0 rgba(0,0,0,.1)}.panel.ui-sortable-helper{border-style:dashed}.panel .panel-heading{font-weight:700}.panel-carousel{padding:15px}.panel-heading{position:relative}.panel-condensed .panel-heading{padding:5px}.panel-heading-collapse-indicator{position:absolute;left:2px;margin-top:-2px;top:50%}.panel-collapsed .panel-heading .caret{-webkit-transition:all .25s ease-in-out;transition:all .25s ease-in-out;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.panel-collapsed .panel-collapse{display:none;visibility:hidden}.panel-collapse>.alert,.panel>.alert{border:none;border-top:1px solid #ccc;margin:0;padding:9px 12px}.panel-collapse>.form-section,.panel-collapse>.tab-content>.form-section,.panel-collapse>.tab-content>.tab-pane>.form-section,.panel>.form-section,.panel>.tab-content>.form-section,.panel>.tab-content>.tab-pane>.form-section{border-left:0;border-right:0;border-bottom:0}.panel-collapse>.nav-tabs,.panel>.nav-tabs{border-top:1px solid #ccc;padding-top:8px}.panel-collapse>.nav-tabs>li,.panel>.nav-tabs>li{margin-left:-1px}.panel-collapse>.table,.panel-collapse>.table-fit,.panel>.table,.panel>.table-fit{border:0;margin:0}.recordlist .table-fit{margin-bottom:0}.panel-hover .panel-default:hover>.panel-heading{background-color:#e5e5e5}.panel-space{margin:3em 0}.panel-tab{border-radius:0;border:1px solid #ccc;background-color:#fafafa}.popover-content .list-group .list-group-item:last-child,.popover-title{border-bottom:0}.panel-tab+.form-section,.panel-tab+.panel-tab{margin-top:-19px}.tab-pane>.panel-tab:first-child{border-top:none}.panel-lg .panel-body{padding:35px}.panel-lg .panel-footer,.panel-lg .panel-heading{padding:18px 35px}.panel-lg .panel-carousel{padding:35px}.popover{padding:0}.popover-title{font-size:15px;padding:12px 14px}.popover-content p{margin:0}.popover-content .list-group{margin:-9px -14px}.popover-content .list-group .list-group-item{border-radius:0;border-left:0;border-right:0}.popover .close{margin-right:10px;margin-top:10px}.popover.bottom .arrow:after{border-bottom-color:#f7f7f7}.popover.no-title .arrow:after{border-bottom-color:#fff}.typo3-TCEforms{width:100%}.t3-form-field-container{display:block}.typo3-TCEforms .typo3-csh-link{margin-left:5px}.t3-flex-section,.t3-form-field-container-flexsections,.t3-form-flex{margin:5px 0;clear:both}.t3-form-field-container-inline-placeHolder .t3-form-field-header-inline>span{display:none}.sortableHandle{cursor:move}.t3-form-field-header-flexsection{width:100%;height:16px}.t3-form-field-add-flexsection{border-top:1px solid #cdcdcd;padding:10px 5px 5px 0}.c-inputButton,.c-inputButton:hover,.typo3-TCEforms table#typo3-altdoc-header input:hover,table#typo3-altdoc-header input{border:0;background:0 0}.t3-flex-section-content,.t3-form-field-record-flexsection{background:#eee;padding:5px 0}.t3-flex-section-content>div,.t3-form-field-record-flexsection>div{margin:0 10px}.t3-flex-section-header-preview{width:100px;display:inline-block;padding-left:10px;overflow:hidden;text-overflow:ellipsis}img.t3-tceforms-sysfile-imagepreview{float:left;margin-right:10px;margin-bottom:10px}* html div#typo3-docbody .typo3-TCEforms{margin-top:20px}.typo3-TCEforms img[src*="clear.gif"]{z-index:0}.t3-tceforms-input-wrapper-datetime .t3-icon-edit-pick-date{top:-4px}.typo3-TCEforms span.typo3-TCEforms-newToken{color:#900;font-weight:700}.typo3-TCEforms span.typo3-TCEforms-helpText{background:0 0;color:#fff}table.typo3-TCEforms-select-checkbox{background-color:#fff;border:1px solid #aaa}.t3-form-original-language,.t3-form-original-language-diff{border:1px solid silver;font-size:.9em;margin-top:4px}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr.c-header td{background-color:#fff;font-weight:700}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr:nth-child(2n){background-color:#f7f7f7}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr.c-selectedItem{background-color:#d8ecd0}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr.c-invalidItem{color:#ddd}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr:hover{background-color:#dedede}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr.c-selectedItem:hover{background-color:#abd99a}.typo3-TCEforms table.typo3-TCEforms-select-checkbox tr.c-invalidItem:hover{background-color:transparent}.form-field-inputlink-explanation{background:#eee}.t3-form-original-language{background-color:#dadada;padding:2px}.t3-form-original-language-diffheader{background-color:#c83c3c;font-weight:700;padding:2px}.t3-form-original-language-diffheader[href]:focus,.t3-form-original-language-diffheader[href]:hover{background-color:#a32e2e}.t3-form-original-language-diffcontent{padding:2px}.t3-form-original-language .icon{margin-right:5px}.typo3-TCEforms .typo3-TCEforms-checkboxArray td{padding-right:5px}div.typo3-TCEforms-suggest-choises a{cursor:pointer}div.t3-form-field-container:first-child .t3-form-field-label-flex{border-top:0}.t3-form-field-container-inline-hidden,.t3-form-field-container-inline-placeHolder{opacity:.3}.t3-form-field-header-inline table{vertical-align:top}.t3-tceforms-fieldReadOnly span.t3-icon{position:absolute;right:3px;top:4px}.t3-tceforms-widget-null-wrapper+.t3-form-field-item{display:inline-block}.t3-form-field-disable{display:none}.formengine-field-item.disabled{position:relative}.formengine-field-item.disabled .t3-form-field-disable{z-index:100;background:#fafafa;display:block;position:absolute;width:100%;height:100%;opacity:.5;filter:alpha(opacity=50)}.t3-form-field-eval-null-checkbox{z-index:150}.t3-form-palette-field-label{text-indent:2px}.t3-form-field-item .x-tree input.x-tree-node-cb{height:auto;margin:0 0 0 1px;vertical-align:middle}.t3-form-field-label.t3-form-field-state-changed{color:#004fb0}.icon-list{background:#fff;margin-top:9px;border:1px solid #ccc}.icon-list .row{margin:0}.icon-list .item{float:left;padding:6px;max-width:128px}.icon-list .item img{max-width:128px;max-height:128px}.list-tree,.list-tree ul{margin-left:8px;padding:0;list-style:none;position:relative}.list-tree ul:before,.list-tree:before{content:"";display:block;width:0;position:absolute;top:0;bottom:11px;left:0;margin-bottom:-2px;border-left:1px dotted #666}.list-tree li{margin:0;padding-left:16px;line-height:21px;position:relative}.list-tree li .icon,.treeline-icon{margin-right:2px}.list-tree li.active>.list-tree-group:before,.list-tree li:before{position:absolute;display:block;content:''}.list-tree li.active>.list-tree-group:before{right:-6px;left:-6px;top:-1px;bottom:-1px;border:1px solid rgba(0,0,0,.25);background-color:rgba(255,255,255,.75);border-radius:2px}.list-tree li:before{width:9px;height:0;border-top:1px dotted #666;margin-top:-2px;top:12px;left:2px}.list-tree li:last-child:before{background:#fff;height:auto;left:0;width:11px;bottom:0}.list-tree-control,.list-tree-show{position:relative;width:20px;text-align:center}.list-tree-group{position:relative;display:block}.list-tree-group>span{position:relative}.list-tree-value{font-weight:700}.list-tree-icon{top:-2px}.list-tree-show{display:inline-block;margin-left:-2px}.list-tree-control{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:block;float:left;margin-top:1px;margin-left:-26px;line-height:20px;height:20px}.list-tree-control:before{content:'';position:absolute;top:50%;left:50%;margin-top:-6px;margin-left:-6px;width:12px;height:12px}.list-tree-control:active,.list-tree-control:focus,.list-tree-control:hover{outline:0;text-decoration:none}.list-tree-control>.fa{display:inline-block;text-align:center;cursor:pointer}.list-tree-control>.fa:before{width:12px;height:12px;background-color:#fff;display:block}.list-tree-root:before,.list-tree-root>li:before{display:none}.list-tree-control.list-tree-control-open>.fa:before{content:"\f0d7"}.list-tree-control.list-tree-control-closed>.fa:before{content:"\f0da"}.list-tree-root{margin-left:0}.list-tree-root>li{padding-left:20px}.list-tree-root>li.list-tree-path,.list-tree-root>li>.list-tree-group>.list-tree-control{margin-left:-20px}.list-tree-root>li>.list-tree-group>.list-tree-control:before{background-color:transparent}.list-tree-root-clean>li{padding-left:0}[id=imp-exp-mod] .list-tree li:last-child:before,[id=imp-exp-mod] .list-tree-control>.fa:before{background-color:#f1f1f1}[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .list-tree li:last-child:before,[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .list-tree-control>.fa:before{background-color:#f5f5f5}[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .module-body{padding-left:10px;padding-right:10px}[id=ext-lowlevel-Modules-Configuration-index-php] .active>.list-tree-group{display:inline-block;color:#c83c3c}.treeline-icon{position:relative;display:inline-block;margin-top:-6px;margin-bottom:-6px;padding:0;height:31px;width:16px;overflow:hidden;vertical-align:top}.treeline-icon:after,.treeline-icon:before{position:absolute;content:'';left:50%}.treeline-icon:before{top:0;height:100%;width:2px;margin-left:-1px;border-left:1px dotted #666}.treeline-icon:after{border-top:1px dotted #666;height:2px;width:100%;top:50%;margin-top:-1px}.treeline-icon-jointop:before{top:50%}.treeline-icon-joinbottom:before{top:-50%}.treeline-icon-blank,.treeline-icon-clear:after,.treeline-icon-clear:before,.treeline-icon-line:after{display:none}#typo3-pagetree #typo3-docheader div.buttonsright{margin-right:3px}body#typo3-alt-db-navframe-php div.c-notice{border:1px solid #000;margin-top:5px;margin-bottom:10px;padding:5px;width:95%}body#typo3-pagetree{margin:0;padding:0}#typo3-pagetree #typo3-inner-docbody{padding:10px 0}span.dragIcon{display:inline-block;height:16px}#dragIcon{position:absolute;visibility:hidden;z-index:20;filter:alpha(opacity=50);opacity:.5}#typo3-pagetree-deletionDropZone .x-panel-body{background-position:right;background-repeat:repeat-y}[id=ext-backend-Modules-FileSystemNavigationFrame-index-php],[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .module-body,[id=typo3-pagetree-treeContainer]{background-color:#f5f5f5;height:100%}[id=typo3-pagetree-tree]{height:100%}[id=typo3-pagetree-tree] .x-panel-body{height:100%!important}[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .module-docheader{padding-left:10px;padding-right:10px}.x-layout-split{width:1px;background-color:#c3c3c3}[id=InfoModuleController] a.btn-default{margin-right:5px}[id=InfoModuleController] a.t3js-contextmenutrigger{margin-right:4px}.ui-block{text-align:center;padding-top:200px;position:absolute;z-index:3000;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.3)}.pagination .t3-icon{margin:0}.pagination .paginator-input{display:inline-block;width:auto;margin:-6px 0}.label-block,.pagination-block{display:block}.fieldSelectBox .table-scrollable{overflow:auto;max-height:210px}.fieldSelectBox table .col-title{padding:0 6px}.fieldSelectBox table .label-block{line-height:32px;height:32px}.label-block,.label-inline{margin:0;font-weight:400}.label-space-left{margin-left:1em}.label-space-right{margin-right:1em}.badge-info{background-color:#6daae0}.badge-info[href]:focus,.badge-info[href]:hover{background-color:#4392d7}.badge-success{background-color:#79a548}.badge-success[href]:focus,.badge-success[href]:hover{background-color:#5f8139}.badge-warning{background-color:#e8a33d}.badge-warning[href]:focus,.badge-warning[href]:hover{background-color:#d88b1a}.badge-danger{background-color:#c83c3c}.badge-danger[href]:focus,.badge-danger[href]:hover{background-color:#a32e2e}.btn-group-sm>.btn,.btn-sm{height:26px}.btn-group{font-size:0}.btn-group .collapse+.btn.collapsed:last-child{border-radius:2px}.btn-group .btn-default.disabled{color:#999}.dropzone,.dropzone-close{cursor:pointer;color:#333}.btn-checkbox input[type=checkbox],.btn-checkbox input[type=radio],.btn-radio input[type=checkbox],.btn-radio input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-checkbox .fa:before,.btn-radio .fa:before{content:"\f096"}.btn-checkbox input[type=checkbox]:checked+.fa:before,.btn-checkbox input[type=radio]:checked+.fa:before,.btn-radio input[type=checkbox]:checked+.fa:before,.btn-radio input[type=radio]:checked+.fa:before{content:"\f00c"}.dropzone{position:relative;margin:15px 0;padding:1.25em 46px 1.25em 1.25em;border:1px dashed #ccc;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.dropzone:hover{border-color:#999}.dropzone-mask{position:absolute;left:0;right:0;bottom:0;top:0}.dropzone-close{position:absolute;top:5px;right:5px;height:26px;width:26px;font-family:FontAwesome;font-size:14px;line-height:26px;text-align:center;-webkit-transform:translate(0,0);transform:translate(0,0);overflow:hidden;background-color:#eaeaea}.dropzone-close:hover{color:#fff;background-color:#c83c3c}.dropzone-close:before{content:"\f00d"}.dropzone-hint{display:table}.dropzone-hint-body,.dropzone-hint-media{display:table-cell;vertical-align:middle}.dropzone-hint-body :first-child{margin-top:0}.dropzone-hint-body :last-child{margin-bottom:0}.dropzone-hint-media{padding-right:1em}.dropzone-hint-icon{height:40px;width:40px;text-align:center;line-height:40px;font-size:16px;background-color:#eee;border-radius:50%;font-family:FontAwesome;-webkit-transform:translate(0,0);transform:translate(0,0)}.dropzone-hint-icon:before{content:"\f093"}.dropzone-hint-title{font-size:12px;font-weight:700;margin-bottom:.25em}.drop-status-ok .dropzone-hint-icon{color:#fff;background:#79a548}.drop-in-progress .dropzone-hint-icon:before{content:"\f063"}.upload-queue{margin:15px 0}.upload-queue-progress{position:relative;padding:5px;color:#fff;background-color:#999;border:1px solid rgba(0,0,0,.15);text-align:right}.upload-queue-progress-bar{position:absolute;z-index:1;top:0;left:0;bottom:0;background-color:#79a548}.upload-queue-progress-message,.upload-queue-progress-percentage{display:inline;position:relative;z-index:2}.t3-icon,.t3-icon .c-inputButton{display:inline-block;height:16px;width:16px}.upload-file-picker{position:fixed;bottom:0;right:0;height:1px;width:1px;visibility:hidden}.uploading .upload-queue-progress-bar{background-color:#6daae0}.error .upload-queue-progress-bar{background-color:#c83c3c}.t3-icon{position:relative;vertical-align:middle;background-image:url(../../../../backend/Resources/Public/Icons/icon_fatalerror.gif);background-repeat:no-repeat;margin-right:2px;text-align:center}.t3-icon.fa{background:0 0;font-size:14px}.btn-login.active,.btn-login:active,.open>.btn-login.dropdown-toggle,.t3-icon-empty{background-image:none}.t3-icon-overlay{display:block;position:absolute;left:0;top:0;width:16px;height:16px;text-decoration:none;padding:0}.typo3-login{background-color:#eee;background-repeat:no-repeat;background-size:cover;background-position:center center;display:table;position:absolute;top:0;left:0;padding:10px;width:100%;min-height:100%;height:100%}.typo3-login-container{display:table-cell;vertical-align:middle}.typo3-login-wrap{max-width:360px;margin:0 auto}.typo3-login-links{padding-top:inherit;margin-top:20px;margin-bottom:20px}.typo3-login-links .disabled{cursor:not-allowed!important;text-decoration:none!important;color:#737373!important}.typo3-login-links .disabled span{cursor:inherit}.t3-btn,a span{cursor:pointer}.typo3-login-logo{margin-bottom:30px}.typo3-login-logo>img{display:block;max-width:100%;height:auto;margin:0 auto}.typo3-login-news-heading{font-size:14px;line-height:1.3em;margin-top:0}.panel-login{border-color:#d5d4d4;border-radius:5px}.panel-login .panel-heading{border-top-right-radius:4px;border-top-left-radius:4px}.panel-login .panel-body{border-bottom:3px solid #f80}.panel-login .panel-footer{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-login,.input-login{padding:12px;font-size:12px;border-radius:2px}.panel-login a{font-weight:700}@media (max-width:767px){.panel-login{margin-bottom:0}}.input-login{height:41.2px;line-height:1.3333333;border-color:#ccc}select.input-login{height:41.2px;line-height:41.2px}select[multiple].input-login,textarea.input-login{height:auto}.input-login:focus{box-shadow:none}.btn-login{color:#fff;background-color:#f80;border-color:rgba(0,0,0,.1);line-height:1.3em}.btn-login.active,.btn-login.focus,.btn-login:active,.btn-login:focus,.btn-login:hover,.open>.btn-login.dropdown-toggle{color:#fff;background-color:#cc6d00;border-color:rgba(0,0,0,.1)}.btn-login.active.focus,.btn-login.active:focus,.btn-login.active:hover,.btn-login:active.focus,.btn-login:active:focus,.btn-login:active:hover,.open>.btn-login.dropdown-toggle.focus,.open>.btn-login.dropdown-toggle:focus,.open>.btn-login.dropdown-toggle:hover{color:#fff;background-color:#a85a00;border-color:rgba(0,0,0,.1)}.btn-login.disabled.focus,.btn-login.disabled:focus,.btn-login.disabled:hover,.btn-login[disabled].focus,.btn-login[disabled]:focus,.btn-login[disabled]:hover,fieldset[disabled] .btn-login.focus,fieldset[disabled] .btn-login:focus,fieldset[disabled] .btn-login:hover{background-color:#f80;border-color:rgba(0,0,0,.1)}.btn-login .badge{color:#f80;background-color:#fff}.btn-login:active,.btn-login:active:focus,.btn-login:active:hover,.btn-login:focus,.btn-login:hover,.btn-login:visited{background-color:#f80}.btn-login:active:focus,.btn-login:focus{outline:0}.btn-login:hover{box-shadow:inset 0 0 100px rgba(0,0,0,.125)}.btn-login:active:focus,.btn-login:active:hover{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-login:focus{box-shadow:none}.typo3-login-carousel-control{top:50%;margin-top:-30px;height:60px;line-height:60px;width:10px;background-color:#fff;text-align:center;position:absolute;opacity:.25;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.typo3-login-carousel-control:hover{opacity:1}.typo3-login-carousel-control.left{left:-10px;border:1px solid #d5d4d4;border-right:0;border-radius:2px 0 0 2px}.typo3-login-carousel-control.right{right:-10px;border:1px solid #d5d4d4;border-left:0;border-radius:0 2px 2px 0}@media (min-width:768px){.typo3-login-carousel-control{width:20px}.typo3-login-carousel-control.left{left:-20px}.typo3-login-carousel-control.right{right:-20px}}.typo3-login-copyright-link>img{float:right;margin-top:-4px}.typo3-login-copyright-text{margin-top:18px;color:#444}.typo3-login-copyright-text .fa{font-size:13px}.typo3-login-copyright-text>:first-child{margin-top:0}.typo3-login-copyright-text>:last-child{margin-bottom:0}div.typo3-noDoc{margin-left:10px;margin-top:5px;width:740px}div.typo3-noDoc h2{width:740px}div.typo3-fullDoc{height:100%;width:100%}div#typo3-docbody{position:absolute;top:49px;bottom:0;overflow:auto;width:100%;z-index:2}[id=typo3-inner-docbody]{padding:24px;margin-top:0;-webkit-transition:border .2s ease;transition:border .2s ease}body#typo3-show-item-php{padding:12px 24px}h1{font-family:Share,Verdana,Arial,Helvetica,sans-serif;font-variant:normal;font-weight:400;margin-top:0;margin-bottom:22px}.t3-overview-list dt,a.typo3-goBack,div.warningbox{font-weight:700}h2,h3{margin:24px 0 12px}blockquote,ol,ul{margin-bottom:9px}ol,ul{padding-left:3em}pre{margin:0}div.hr,hr{background:0 0;border:none;height:1px}.divider{padding-bottom:12px}li.divider{padding:0}video{background-color:#000}img.absmiddle{vertical-align:middle}.smallCheckboxes{height:12px;margin:0;width:12px}.alignToInputText,.alignToInputText:hover{margin-top:5px;margin-right:2px;vertical-align:top}tr:hover .t3-page-ce a,tr:hover .x-tree a{text-decoration:none}a.t3-link,table.warningbox td a{text-decoration:underline}.typo3-app-icon{position:relative;display:inline-block;padding:0;height:32px;width:32px;overflow:hidden;border-radius:2px;background-color:#484848;vertical-align:middle;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.typo3-app-icon>span{display:table;height:100%;width:100%}.typo3-app-icon>span>span{display:table-cell;text-align:center;vertical-align:middle}.typo3-app-icon img{max-height:32px;max-width:32px;margin:0 auto}.typo3-app-icon .fa{font-size:21px;vertical-align:middle}.typo3-app-icon:after{position:absolute;content:'';display:block;top:0;left:0;right:0;bottom:0;border:1px solid rgba(255,255,255,.1);border-radius:2px}.section{margin-bottom:15px}.diff-r{color:red}div.diff-r{background-color:red;color:#000}.diff-g{color:green}div.diff-g{background-color:green;color:#000}div.warningbox,table.warningbox{border:2px solid #000;background-color:#ff0}div.diff-g,div.diff-r{padding:3px}.c-na{color:#666}.not-found a{color:#ccc}.has-change .checkbox,.has-change .checkbox-inline,.has-change .control-label,.has-change .form-control-feedback,.has-change .help-block,.has-change .radio,.has-change .radio-inline,.has-change.checkbox label,.has-change.checkbox-inline label,.has-change.radio label,.has-change.radio-inline label{color:#6daae0}table.warningbox{margin:20px 0}table.warningbox td{padding:20px;font-weight:700}div.warningbox{margin:10px 0;padding:10px}span.warningboxheader{margin-left:5px}.media-gallery__list .media-gallery__item{display:inline-block;float:none;margin-bottom:15px;margin-right:-4px;vertical-align:top}.grideditor td,.input-group-icon,a.typo3-goBack img,span.typo3-moduleHeader img{vertical-align:middle}.media-gallery__list .media-gallery__item .media-object{max-height:158px;overflow:hidden}.media-gallery__list .media-gallery__item img.thumbnail{height:auto;margin-bottom:0;max-height:150px;max-width:100%}.grideditor div#editor,.grideditor td.editor_cell{height:100%}.media-gallery__list .media-gallery__item span.thumbnail{display:inline-block;margin-bottom:0}.grideditor table.editor{border:0;border-left:1px #d7d7d7 solid;border-top:1px #d7d7d7 solid}.grideditor table.editor td{vertical-align:middle;border:0;border-bottom:1px #d7d7d7 solid;border-right:1px #d7d7d7 solid;text-align:center;background-color:#fff;min-height:100px}.grideditor div.cell_container{width:80px;height:80px;position:relative;left:50%;margin-top:30px;margin-left:-30px;opacity:.3}.grideditor div.cell_container:hover{opacity:.5}.grideditor .grideditor-preview{margin-top:5px}.grideditor .link{display:block;position:absolute;width:20px;height:40px;overflow:hidden;opacity:.5}.form-control-holder,.form-group .t3js-formengine-field-item{position:relative}.grideditor .link:hover{text-decoration:none;opacity:1}.grideditor .link_expand_down,.grideditor .link_shrink_up{width:40px;height:20px}.grideditor .link_expand_right{left:52px;top:0}.grideditor .link_expand_right:before{font-family:FontAwesome;content:"";font-size:42px;line-height:42px}.grideditor .link_shrink_left{left:-8px;top:0}.grideditor .link_shrink_left:before{font-family:FontAwesome;content:"";font-size:42px;line-height:42px}.grideditor .link_expand_down{left:12px;top:40px}.grideditor .link_expand_down:before{font-family:FontAwesome;content:"";font-size:42px;line-height:19px}.grideditor .link_shrink_up{left:12px;top:-20px}.grideditor .link_shrink_up:before{font-family:FontAwesome;content:"";font-size:42px;line-height:20px}.grideditor .link_editor{width:40px;height:40px;left:12px;top:0}.grideditor .link_editor:before{font-family:FontAwesome;content:"";font-size:42px;line-height:42px}::-ms-clear{display:none}#typo3-docbody form{margin-bottom:1.25em}a.typo3-goBack img{margin-right:5px}span.typo3-moduleHeader img{margin-right:4px}.has-change .form-control{border-color:#6daae0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-change .form-control:focus{border-color:#4392d7;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c1dbf2}.has-change .input-group-addon{color:#6daae0;border-color:#6daae0;background-color:#ebf3fb}.has-change .thumbnail-status{border:1px solid #6daae0}.input-group-icon{width:32px}.input-group-icon img{width:100%;max-height:18px}.input-group-addon{min-width:2.5em}label .icon img{pointer-events:none}.form-control{min-width:120px}.form-control-adapt{width:auto;max-width:100%}.form-control-wrap{margin:9px 0}.row>.form-group>.form-control-wrap{margin-bottom:0}.form-group .t3js-formengine-field-item>.t3js-charcounter{left:0;position:absolute;top:100%}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{color:#737373}.form-control-icon{position:absolute;top:50%;left:15px;-webkit-transform:translate(0,-50%);transform:translate(0,-50%);z-index:1}.form-control-icon+.form-control,.form-control-icon+.form-control-clearable .form-control{padding-left:3.25em}.form-group.has-error label:before{font-family:FontAwesome;font-size:12px;text-align:center;content:"";color:#c83c3c;display:inline-block}.form-group.has-error .btn-toolbar label:before,.form-group.has-error .input-group-btn label:before{font-family:inherit;font-size:inherit;margin-right:inherit;text-align:inherit;content:'';display:block}.form-group.has-error .btn-toolbar label:before{color:inherit}.form-group.has-error .input-group-btn label{border-color:#c83c3c}.form-group.has-error .input-group-btn label .t3-icon{color:#c83c3c}.form-group.has-error .input-group-btn label:before{color:inherit}select.form-control[multiple],select.form-control[size]{min-height:156px;width:100%!important}select.form-control[size="1"]{height:32px;min-height:0}select.form-control:not([size]),select.form-control[size="1"]{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:not([size])::-ms-expand,select.form-control[size="1"]::-ms-expand{display:none}select.form-control:not([size]):not(.form-select-no-siblings),select.form-control[size="1"]:not(.form-select-no-siblings){background-image:url(../../../../../../typo3/sysext/core/Resources/Public/Icons/T3Icons/actions/actions-view-list-expand.svg);background-position:right 4px center;background-repeat:no-repeat;background-size:16px 16px;padding-right:24px}.form-group-sm select.form-control:not([size]),.form-group-sm select.form-control[size="1"],.input-group-sm>.input-group-btn>select.form-control.btn:not([size]),.input-group-sm>.input-group-btn>select.form-control[size="1"].btn,.input-group-sm>select.form-control:not([size]),.input-group-sm>select.form-control[size="1"],select.form-control:not([size]).input-sm,select.form-control[size="1"].input-sm{line-height:16px}select.form-control>optgroup{margin-top:9px}select.form-control>optgroup:first-child{margin-top:0}select.form-control option{padding-top:2px;padding-bottom:2px}select.icon-select option{padding-left:22px}.form-control-clearable{position:relative}.form-control-clearable .form-control{padding-right:2.3em}.form-control-clearable .close{position:absolute;height:16px;z-index:3;top:50%;right:.5em;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.form-control-clearable .close .icon{vertical-align:0}.input-group .form-control-clearable{display:table-cell}.input-group .form-control-clearable .form-control{display:block}.form-notice-capslock{position:absolute;right:6px;top:50%;margin-top:-10px;height:20px;width:20px;padding:3px;z-index:10;background-color:#fff}.form-notice-capslock>img{display:block;opacity:.5}.form-inline-spaced{margin:0 -.5em 18px}.form-inline-spaced .form-group{margin:.5em .5em 0}.form-inline-spaced .form-group label{margin-right:.5em}.form-group-dashed+.form-group-dashed{padding-top:15px;border-top:1px dashed #ccc}.form-section{border:1px solid #ccc;background-color:#fafafa;padding:15px 12px 3px}.form-section+.form-section{margin-top:-1px}.tab-pane>.form-section:first-child{border-top:none}.form-section-headline{margin-top:0;margin-bottom:10px}.form-wizards-wrap{display:table;width:100%}.form-wizards-wrap>.form-wizards-element{display:table-cell;width:100%}.form-wizards-wrap>.form-wizards-items-top{display:table-row}.form-wizards-wrap>.form-wizards-items-aside{display:table-cell;vertical-align:top;padding-left:5px;white-space:nowrap}.form-wizards-wrap>.form-wizards-items-bottom{display:table-row}.form-wizards-wrap>.form-wizards-items-bottom:first-child{margin-top:4px}.form-irre-header{display:table;margin:-5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-irre-header-cell{display:table-cell;vertical-align:middle;padding:5px}.form-irre-header-body{width:100%;font-weight:400;white-space:normal}.form-irre-header-body dl{margin-bottom:0}.checkbox-column,.form-multigroup-wrap .form-multigroup-item-wizard,.radio-column{margin-bottom:5px}.form-irre-header-icon{padding-right:0}.form-irre-header-control{cursor:auto}.form-irre-header-control .btn-group>.btn{float:none}.form-multigroup-wrap{width:100%;display:table}.form-multigroup-wrap .form-multigroup-item{display:table-cell;width:50%;vertical-align:top}.form-multigroup-wrap .form-multigroup-item+.form-multigroup-item{padding-left:5px}.form-multigroup-wrap .form-multigroup-item-wizard+select.form-control[multiple],.form-multigroup-wrap .form-multigroup-item-wizard+select.form-control[size]{min-height:125px}.form-multigroup-wrap .form-wizards-wrap{width:100%}.checkbox-row,.radio-row{margin-top:10px;margin-bottom:5px}.checkbox-column>.checkbox,.checkbox-column>.radio,.radio-column>.checkbox,.radio-column>.radio{margin:0}.checkbox-inline.checkbox,.checkbox-inline.radio,.radio-inline.checkbox,.radio-inline.radio{display:block;margin-left:0;margin-right:10px;margin-bottom:10px;padding:0}@media (max-width:767px){.checkbox-inline.checkbox+.checkbox,.checkbox-inline.checkbox+.radio,.checkbox-inline.radio+.checkbox,.checkbox-inline.radio+.radio,.radio-inline.checkbox+.checkbox,.radio-inline.checkbox+.radio,.radio-inline.radio+.checkbox,.radio-inline.radio+.radio{margin-top:-5px}}@media (min-width:768px){.checkbox-inline.checkbox,.checkbox-inline.radio,.radio-inline.checkbox,.radio-inline.radio{display:inline-block;margin-top:10px}.checkbox-inline.checkbox label,.checkbox-inline.radio label,.radio-inline.checkbox label,.radio-inline.radio label{white-space:nowrap}}textarea.formengine-textarea{resize:none}.media-new-content-element-wizard .media-left input{margin-left:2px}.query-builder .form-inline>.form-control-clearable{display:inline}.query-builder .form-group-with-button-addon .input-group{margin-bottom:10px}.query-builder .form-group-with-button-addon .input-group .input-group-addon{padding:0 0 0 1px}.query-builder .form-group-with-button-addon .input-group .input-group-addon .btn-default{border:0}.query-builder .from-control-operator{width:70px;min-width:70px}.t3-grid-table,.t3-page-columns{min-width:100%}.query-builder .action-button-group{margin:10px 0}.query-builder .row-group{margin:10px 0;padding:10px;border-color:#999;box-shadow:0 2px 5px 0 #999}.query-builder .indent{padding-left:20px}.tx_recycler_recycler tr.collapse{display:none}.tx_recycler_recycler tr.collapse.in{display:table-row}.tx_scheduler_mod1 .table td{vertical-align:top}.tx_scheduler_mod1 .table span.name{display:block}.tx_scheduler_mod1 .table span.description{font-style:italic;white-space:normal;color:#737373}.tstemplate-constanteditor .input-group.userTS .input-group-addon.colorbox{display:inline-block;height:100%;position:absolute}.t3-grid-table{border-spacing:10px 0}.t3-grid-container{margin:0 -10px 18px}.t3-grid-cell{background-color:#fafafa;border-bottom:1px solid #cdcdcd}.t3-grid-cell-restricted{background-color:#efc7c7}.t3-grid-cell-unassigned{background:url(../../../../backend/Resources/Public/Images/Backgrounds/layout-not-assigned.png)}.t3-page-column{min-width:150px;max-width:300px}.t3-page-column>h2{margin-top:0}.t3-page-column-header-icons{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in;opacity:.3;position:absolute;right:10px;bottom:5px}.t3-page-column-header{padding:20px 10px 5px;position:relative;background:#fff;border-bottom:1px solid #cdcdcd;color:#999;text-align:left}[data-colpos=unused] .t3-page-column-header{color:#e8a33d;padding-top:60px}.t3-page-column-header a{position:relative}.t3-page-column-header:hover .t3-page-column-header-icons{opacity:1}.t3-page-columns-mode img.c-divider{margin:10px 0 5px}.t3-page-ce,.t3-page-lang-copyce{margin:10px}.t3-page-ce-wrapper{min-height:2em}.t3-page-ce{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.t3-page-ce.active-drag{z-index:4500}.t3-page-ce *{border-spacing:0}.t3-page-ce>.t3-page-ce{margin-left:0;margin-right:0}.t3-page-ce .t3-page-ce-body-inner{padding:10px;word-wrap:break-word}.t3-page-ce .t3-page-ce-body-inner img{max-width:100%;height:auto}.t3-page-ce .t3-page-ce-header{-webkit-transition:background .15s ease-in;transition:background .15s ease-in;padding:5px;border:1px solid #ccc;border-bottom:0;border-radius:2px 2px 0 0;background:#eaeaea}.t3-page-ce .t3-page-ce-header-icons-left{float:left}.t3-page-ce .t3-page-ce-header-icons-left>a{display:inline-block;padding:4px}.t3-page-ce .t3-page-ce-header-icons-right{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in;opacity:.3;float:right}.t3-page-ce .t3-page-ce-body{margin-bottom:10px;border:1px solid #ccc;border-top:0;border-radius:0 0 2px 2px;background-color:#fff}.t3-page-ce .t3-page-ce-footer{font-size:11px;padding:5px 10px;background:#fafafa}.t3-page-ce:hover .t3-page-ce-header{background:#d0d0d0}.t3-page-ce:hover .t3-page-ce-body,.t3-page-ce:hover .t3-page-ce-header{border-color:#aaa}.t3-page-ce:hover .t3-page-ce-body{box-shadow:0 1px 0 rgba(0,0,0,.15)}.t3-page-ce:hover .t3-page-ce-header-icons-right{opacity:1}.t3-page-ce-danger:hover .t3-page-ce-header{background-color:#a32e2e;border-color:#a32e2e}.t3-page-ce-danger:hover .t3-page-ce-body{border-color:#a32e2e}.t3-page-ce-danger .t3-page-ce-header{background-color:#c83c3c;border-color:#c83c3c}.t3-page-ce-danger .t3-page-ce-header:hover{background-color:#a32e2e;border-color:#a32e2e}.t3-page-ce-danger .t3-page-ce-body{border-color:#c83c3c}.t3-page-ce-warning:hover .t3-page-ce-header{background-color:#d88b1a;border-color:#d88b1a}.t3-page-ce-warning:hover .t3-page-ce-body{border-color:#d88b1a}.t3-page-ce-warning .t3-page-ce-header{background-color:#e8a33d;border-color:#e8a33d}.t3-page-ce-warning .t3-page-ce-header:hover{background-color:#d88b1a;border-color:#d88b1a}.t3-page-ce-warning .t3-page-ce-body{border-color:#e8a33d}.t3-page-ce-hidden{opacity:.4;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.t3-page-ce-hidden:hover{opacity:1}.t3-page-ce-dropzone-available.active{border:1px dashed #e8a33d;border-radius:2px;background-color:#fbefdd;height:27px}.t3-page-ce-dropzone-available.active.t3-page-ce-dropzone-possible{border:1px dashed #79a548;border-radius:2px;background-color:#d1e2bd;margin:-38px 0 -37px;padding:50px 10px;z-index:500;position:relative;opacity:.65}.t3-page-ce-dragitem.dragitem-shadow{opacity:.65;box-shadow:0 1px 24px rgba(0,0,0,.5)}.t3-page-ce.ui-draggable-handle{height:auto!important}.t3-page-ce-dragitem .t3-page-ce-header-draggable:hover{cursor:move}.t3-is-dragged .t3-page-ce-body{max-height:225px;overflow:hidden}.t3-page-ce-dropzone-available.active,.t3-page-ce-dropzone-possible{max-height:225px}#workspace-panel tr.collapsing{-webkit-transition:none;transition:none}#workspace-panel tr.collapse{display:none}#workspace-panel tr.collapse.in{display:table-row}span.item-state-modified{color:#f78f25}span.item-state-moved{color:#457fb8}span.item-state-new{color:#3c9934}span.item-state-hidden{color:#abaaaa}span.item-state-deleted{color:#000;text-decoration:line-through}.legend{margin:5px;height:18px;color:#888}.legend dd,.legend dt{display:inline;overflow:hidden}.legend dd span{display:inline-block;padding:4px}#typo3-debug-console{background-color:#f5f5f5;width:100%;position:absolute;bottom:0;z-index:1000;border:1px solid #b1b1b1}#typo3-debug-console .topbar{background-color:#d7d7d7;padding:6px;border-bottom:1px solid #b1b1b1}#typo3-debug-console .topbar .badge{margin-left:6px}#typo3-debug-console .messages{padding:6px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;height:250px;overflow:auto}#typo3-debug-console .messages .table{width:auto}#typo3-debug-console .messages p{margin:0}#typo3-debug-console .messages p strong{padding-right:4px}.typo3-dblist-sysnotes{margin-top:15px}.typo3-dblist-sysnotes .panel-sysnote{border:0}.typo3-dblist-sysnotes .panel-sysnote .panel-heading{padding:5px}.typo3-dblist-sysnotes .panel-sysnote .panel-heading .typeicon{padding:4px 4px 12px}.typo3-dblist-sysnotes .panel-sysnote .panel-heading .typeicon .icon{margin-top:5px}.typo3-dblist-sysnotes .panel-sysnote .panel-body h4{margin-top:0}.typo3-dblist-sysnotes .panel-sysnote-category-1{background-color:#ebf3fb;color:#333}.typo3-dblist-sysnotes .panel-sysnote-category-2{background-color:#fbefdd;color:#333}.typo3-dblist-sysnotes .panel-sysnote-category-3{background-color:#f9f9f9;color:#333}.typo3-dblist-sysnotes .panel-sysnote-category-4{background-color:#d1e2bd;color:#333}.typo3-extensionmanager-headerRowLeft{float:left}.typo3-extensionmanager-headerRowRight{float:right}.ui-toolbar{margin-bottom:5px}.ui-toolbar .dataTables_filter{float:left}.dataTables_info{display:none}.dataTables_paginate{float:left;margin:10px 0 0}.uploadForm{background-color:#ededed;border-top:1px solid #cdcdcd;border-bottom:1px solid #cdcdcd;padding:12px;margin-bottom:24px}.uploadForm form .control-group{clear:both;margin-bottom:5px}.uploadForm form label{float:left;height:20px;padding:4px 0;line-height:20px;width:90px}.uploadForm form .control{min-height:20px;padding:4px 0;margin-left:110px}.distribution{border:1px solid #cfcfcf;background-color:#f5f5f5;margin-bottom:20px;margin-left:20px;width:300px;float:left}.distribution:hover{background-color:#ededed}.distribution:hover .distribution-hover{top:0;opacity:1}.distribution:hover .distribution-more{text-decoration:underline}.distribution .typo3-dependency-version{position:absolute;right:0}.distribution-holder{margin-top:1em;bottom:0;margin-left:-20px}.distribution-image{position:relative;width:300px;height:225px;overflow:hidden}.distribution-image img{display:block;height:100%;width:100%}.distribution-hover{background-color:#f5f5f5;position:absolute;top:100%;left:0;width:300px;height:225px;overflow:hidden;opacity:0;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.distribution-hover-inner{padding:15px}.distribution-meta{border-top:1px solid #dcdbdb;padding:15px}.distribution-meta .distribution-title{margin:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:14px}.distribution-meta .distribution-install{margin-top:.5em}.distribution-detail{min-width:750px}.distribution-detail-previewpane{float:left;margin-right:30px}.distribution-detail-preview{display:block;border:1px solid #cfcfcf}.distribution-detail-body{overflow:hidden;zoom:1}.distribution-detail-header{margin-bottom:2.5em}.distribution-detail-header h1{margin-bottom:.5em}.distribution-detail-header p{padding:0;max-width:500px;margin-bottom:1.25em}.distribution-detail-summary{margin-top:2.5em;margin-bottom:2.5em}.distribution-installed hr{margin:2.5em 0;border:0;border-top:1px solid #cfcfcf}.ui-widget-header{background:0 0;border:none;font-weight:400}.dataTables_info{font-size:10px;color:#444;float:left}.paging_two_button .ui-button{float:left;cursor:pointer}.paging_full_numbers{float:right}.paging_full_numbers .ui-button{padding:2px 6px;margin:0;cursor:pointer;color:#333!important}.dataTables_paginate{width:auto}.dataTables_paginate .ui-button{margin-right:-.1em!important}.typo3-extension-list .ext-icon{max-height:16px;max-width:16px}.typo3-extension-list tr.installed td{background-color:#c8ffaa}.typo3-extension-list tr.available td{background-color:#e1e1aa}.typo3-extension-list .inactive{color:#aaa}.typo3-extension-list .insecure{color:#ff2262}.typo3-extension-list .insecure a{color:inherit}.typo3-extension-list .outdated{color:#0c08ff}.typo3-extension-list .outdated a{color:inherit}.typo3-extension-list .author{display:none}#extensionUploadForm div.control-group:last-child{margin-bottom:0}.headerTooltip{box-shadow:2px 2px 11px #666;display:none;width:150px;background-color:#ffa;border:1px solid #cc9;padding:3px;font-size:13px;z-index:1000}#terTableWrapper{position:relative;margin-top:1em}#terTableWrapper .splash-receivedata{display:none;position:absolute;top:50px;left:50%;margin:0 0 0 -150px}#typo3-docbody form.download,div.typo3-module-lang table.t3-datatable div.progress{margin-bottom:0}#terTableWrapper .splash-receivedata a{display:inline-block;width:200px;vertical-align:top;padding:3px 20px}#terTableWrapper .splash-receivedata.is-shown{display:block}#terTableWrapper .spinner{display:inline-block}#terTableWrapper .ui-icon{width:16px;height:16px}.time-since-last-update{font-weight:700;padding-right:.4em;cursor:help}.is-loading{opacity:0}.is-hidden{display:none}.typo3-extensionmanager-headerRowLeft,.versions-all{display:inline-block}.versions-all{width:20px;text-indent:-200px;overflow:hidden}.currentVersionInfo{padding:0 0 20px}.currentVersionInfo td{padding:4px 0}.currentVersionInfo th{font-weight:400;color:#8c8c8c;padding:4px 20px 4px 0}span.ter-ext-state{padding:0 0 0 5px;font-weight:700;text-transform:capitalize}.typo3-extensionmanager-headerRowLeft .typo3-extensionmanager-searchTerFieldWrapper{display:inline-block;position:relative}.typo3-extensionmanager-headerRowLeft .typo3-extensionmanager-searchTerFieldWrapper input{height:15px}.typo3-extensionmanager-headerRowLeft .typo3-extensionmanager-searchTerFieldWrapper .t3-icon-input-clear{position:absolute;right:3px;top:4px}div.typo3-module-lang table.t3-datatable{width:100%!important}div.typo3-module-lang table.t3-datatable th.sorting,div.typo3-module-lang table.t3-datatable th.sorting_asc,div.typo3-module-lang table.t3-datatable th.sorting_desc{cursor:pointer}div.typo3-module-lang table.t3-datatable tr>.extensionName{padding-left:0!important}div.typo3-module-lang table.t3-datatable tr>.dt-center{text-align:center}div.typo3-module-lang table.t3-datatable tr.disabled{color:#aaa}div.typo3-module-lang table.t3-datatable tr div.progressBar,div.typo3-module-lang table.t3-datatable tr.disabled a.deactivateLanguageLink,div.typo3-module-lang table.t3-datatable tr.disabled a.removeLanguageLink,div.typo3-module-lang table.t3-datatable tr.disabled a.updateLanguageLink,div.typo3-module-lang table.t3-datatable tr.disabled a.updateTranslationLink,div.typo3-module-lang table.t3-datatable tr.enabled a.activateLanguageLink{display:none}div.typo3-module-lang table.t3-datatable tr div.progressBar .progress{position:relative}div.typo3-module-lang table.t3-datatable tr div.progressBar .progress .progress-text{position:absolute;color:#fff;text-align:center;width:100%;text-shadow:0 0 6px #000}div.typo3-module-lang table.t3-datatable tr.complete div.progressBar,div.typo3-module-lang table.t3-datatable tr.processing div.progressBar{display:inline;cursor:default}div.typo3-module-lang table.t3-datatable td span.complete,div.typo3-module-lang table.t3-datatable td span.loading,div.typo3-module-lang table.t3-datatable td.complete a.removeLanguageLink,div.typo3-module-lang table.t3-datatable td.complete a.updateLanguageLink,div.typo3-module-lang table.t3-datatable td.complete a.updateTranslationLink,div.typo3-module-lang table.t3-datatable td.processing a.removeLanguageLink,div.typo3-module-lang table.t3-datatable td.processing a.updateLanguageLink,div.typo3-module-lang table.t3-datatable td.processing a.updateTranslationLink,div.typo3-module-lang table.t3-datatable tr.complete a.removeLanguageLink,div.typo3-module-lang table.t3-datatable tr.complete a.updateLanguageLink,div.typo3-module-lang table.t3-datatable tr.complete a.updateTranslationLink,div.typo3-module-lang table.t3-datatable tr.processing a.removeLanguageLink,div.typo3-module-lang table.t3-datatable tr.processing a.updateLanguageLink,div.typo3-module-lang table.t3-datatable tr.processing a.updateTranslationLink{display:none}div.typo3-module-lang table.t3-datatable td.actions span{cursor:pointer}div.typo3-module-lang table.t3-datatable td.processing span.loading{display:inline;cursor:default}div.typo3-module-lang table.t3-datatable td.processing span.loading .t3-icon{cursor:default;width:14px;height:14px;margin:0}div.typo3-module-lang table.t3-datatable td.complete span.complete{display:inline}div.typo3-module-lang div.menuItems.processing span.updateItem{display:none}div.typo3-module-lang div.menuItems.processing span.cancelItem,div.typo3-module-lang div.menuItems.processing span.loadingItem{display:inline}div.typo3-module-lang div.menuItems span.cancelItem,div.typo3-module-lang div.menuItems span.loadingItem{display:none}div.typo3-module-lang div.menuItems span.cancelItem .t3-icon,div.typo3-module-lang div.menuItems span.loadingItem .t3-icon{height:14px;width:14px}div.typo3-module-lang div.menuItems span.cancelItem,div.typo3-module-lang div.menuItems span.updateItem{cursor:pointer}div.typo3-module-lang .div.dataTables_filter input{margin-left:3px}div.typo3-module-lang div.progress-bar{background-color:#222}.beuser-legend{margin-bottom:18px}.beuser-legend .pull-left{margin-right:.5em}.beuser-legend td{overflow:hidden}.beuser-legend .t3-icon{margin-right:0}.beuser-legend .number{border:1px solid #000;border-radius:2px;width:16px;height:16px;display:inline-block;text-align:center;margin-right:5px;margin-left:10px;line-height:14px;font-weight:700}.beuser-legend .edge span{width:1px;height:10px;background:#000;display:block;margin-top:8px;margin-left:6px}.beuser-legend .edge span span{width:10px;height:1px;margin-left:1px}.beuser-legend .hr span{width:20px;height:1px;background:#000;display:block;margin-top:-1px;margin-left:-4px}.beuser-legend .vr span{width:1px;height:20px;background:#000;margin-top:-2px;margin-left:6px;display:block}.col-icon img{max-width:28px;max-height:28px}.tx_cshmanual .t3-copyright-notice{font-size:11px;color:#1e1e1e;border-top:1px solid #d7d7d7;padding-top:24px}.tx_cshmanual .t3-copyright-notice>:last-child{margin-bottom:0}.localization-wizard .option,[data-slide=localize-summary] .input-group{margin-bottom:4px}[data-slide=localize-summary] .input-group .form-control{height:auto;font-weight:400}.workspace-info{padding:7px}.workspace-overview td{vertical-align:top}img.c-inputButton,input.c-inputButton{margin-right:2px;vertical-align:middle}table.typo3-dblist tr td.col-icon{vertical-align:middle;width:20px}table.typo3-dblist tr td.col-icon a img.collapseIcon{margin:1px 0 0 2px}table.typo3-dblist tr td.col-title{overflow:hidden;vertical-align:middle;width:350px}table.typo3-dblist tr td.col-title.localization{padding-left:18px}table.typo3-dblist tr td.col-control{width:250px}table.typo3-dblist tr td.col-control-space{width:4px}table.typo3-dblist tr td.col-clipboard{width:74px}table.typo3-dblist-overview{margin-top:10px;margin-left:1px;width:410px}table.typo3-dblist-overview td.c-tableDescription{padding-left:10px}table.typo3-dblist-overview td.c-tableDescription img{margin-right:10px}div#typo3-newRecordLink,div.typo3-localizationLink,div.typo3-newRecordLink,div.typo3-synchronizationLink{display:inline}div#typo3-newRecordLink img,div.typo3-localizationLink img,div.typo3-newRecordLink img,div.typo3-synchronizationLink img{margin-right:5px;vertical-align:middle}input.smallCheckboxes{height:12px;margin:0;padding:0;vertical-align:middle;width:12px}div.typo3-listOptions{margin:0 0 24px}.t3-list-table-header-icon-down{display:inline-block;height:6px;padding:5px 4px;width:9px}.t3-list-table-header-icon-right{display:inline-block;height:8px;padding:4px 5px;width:7px}.db_list-searchbox-toolbar .form-inline{margin-top:-.5em;margin-bottom:0}.typo3-docheader-buttons+.db_list-searchbox-toolbar{box-shadow:0 3px 0 rgba(0,0,0,.15);position:absolute;z-index:999;width:100%}.typo3-docheader-buttons+.db_list-searchbox-toolbar .panel{border-radius:0;border:0;margin:0}.typo3-docheader-buttons+.db_list-searchbox-toolbar .panel-default{background-color:#eee}pre.ts-hl{font-family:"Lucida Console","Lucida Sans Typewriter","Bitsream Vera Sans Mono",monospace}pre.ts-hl .ts-operator{color:#000;font-weight:700}pre.ts-hl .ts-value{color:#c00}pre.ts-hl .ts-objstr{color:#00c}pre.ts-hl .ts-value_copy{color:#060}pre.ts-hl .ts-default,pre.ts-hl .ts-ignored,pre.ts-hl .ts-value_unset{background-color:#6c6}pre.ts-hl .ts-comment{color:#666}pre.ts-hl .ts-condition{background-color:maroon;color:#fff;font-weight:700}pre.ts-hl .ts-error{background-color:#ff0;border:1px dashed red;font-weight:700;color:#000}pre.ts-hl .ts-linenum{background-color:#eee;color:#212424}#typo3-pagetree .workspace-info{background-color:#ffec97;font-weight:700}
\ No newline at end of file
diff --git a/typo3/sysext/core/Configuration/DefaultConfiguration.php b/typo3/sysext/core/Configuration/DefaultConfiguration.php
index 0cb7020a8db9..c801de682e7c 100644
--- a/typo3/sysext/core/Configuration/DefaultConfiguration.php
+++ b/typo3/sysext/core/Configuration/DefaultConfiguration.php
@@ -1123,6 +1123,9 @@ return [
                 'url' => \TYPO3\CMS\Core\Database\SoftReferenceIndex::class,
             ],
         ],
+        'ext/install' => [
+            'update' => [],
+        ],
     ],
     'SVCONF' => []
 ];
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-81863-MarkWizardsAsDoneInInstallTool.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-81863-MarkWizardsAsDoneInInstallTool.rst
deleted file mode 100644
index 6f8e89765ff0..000000000000
--- a/typo3/sysext/core/Documentation/Changelog/master/Feature-81863-MarkWizardsAsDoneInInstallTool.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-.. include:: ../../Includes.txt
-
-======================================================
-Feature: #81863 - Mark wizards as done in Install Tool
-======================================================
-
-See :issue:`81863`
-
-Description
-===========
-
-It is now possible to mark an upgrade wizard as "done" in the Install Tool to prevent showing it up as an available wizard.
-
-
-Impact
-======
-
-A new button "Mark as done" has been added. After clicking the button, the selected upgrade wizard gets marked as "done" and will show up in the "Wizards marked as done" section.
-
-.. index:: Backend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Important-76084-MoveInstallToolModulesIntoBackendModuleMenu.rst b/typo3/sysext/core/Documentation/Changelog/master/Important-76084-MoveInstallToolModulesIntoBackendModuleMenu.rst
new file mode 100644
index 000000000000..48d54a5b1b77
--- /dev/null
+++ b/typo3/sysext/core/Documentation/Changelog/master/Important-76084-MoveInstallToolModulesIntoBackendModuleMenu.rst
@@ -0,0 +1,17 @@
+.. include:: ../../Includes.txt
+
+======================================================================
+Important: #76084 - Move install tool modules into backend module menu
+======================================================================
+
+See :issue:`76084`
+
+Description
+===========
+
+To get more space in backend context and make the modules more understandable,
+the install tool modules have been rearranged and split into four different
+main modules.
+The new modules are called: Maintenance, Settings, Upgrade and Environment.
+
+.. index:: Backend
\ No newline at end of file
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/Install/InstallModuleCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/Install/InstallModuleCest.php
index f100b9b2fa07..b6fbff433cac 100644
--- a/typo3/sysext/core/Tests/Acceptance/Backend/Install/InstallModuleCest.php
+++ b/typo3/sysext/core/Tests/Acceptance/Backend/Install/InstallModuleCest.php
@@ -39,8 +39,8 @@ class InstallModuleCest
         $I->waitForText('Web Content Management System');
         $I->switchToIFrame();
 
-        $I->see('Install');
-        $I->click('Install');
+        $I->see('Maintenance');
+        $I->click('Maintenance');
 
         // switch to content iframe
         $I->switchToIFrame('list_frame');
@@ -103,12 +103,9 @@ class InstallModuleCest
             $I->fillField('#t3-install-form-password', $this->password);
             $I->click('//button[@type="submit"]');
             $I->waitForElement('//body[@class="backend"]');
-            $I->see('Important actions');
-            $I->waitForElement('.t3js-list-group-wrapper');
-            $I->see('Logout from Install Tool');
-            // can't click the link text
-            $I->seeElement('//*[@id="menuWrapper"]/div/div/a');
-            $I->click('//*[@id="menuWrapper"]/div/div/a[text()="Logout from Install Tool"]');
+            $I->see('Lock Install Tool');
+
+            $I->click('Lock Install Tool');
             $I->see('The Install Tool is locked');
         }
     }
diff --git a/typo3/sysext/install/Classes/Configuration/FeatureManager.php b/typo3/sysext/install/Classes/Configuration/FeatureManager.php
index 7d7bbc264fb8..7698305953a4 100644
--- a/typo3/sysext/install/Classes/Configuration/FeatureManager.php
+++ b/typo3/sysext/install/Classes/Configuration/FeatureManager.php
@@ -15,6 +15,10 @@ namespace TYPO3\CMS\Install\Configuration;
  */
 
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Configuration\Context\ContextFeature;
+use TYPO3\CMS\Install\Configuration\ExtbaseObjectCache\ExtbaseObjectCacheFeature;
+use TYPO3\CMS\Install\Configuration\Image\ImageFeature;
+use TYPO3\CMS\Install\Configuration\Mail\MailFeature;
 
 /**
  * Instantiate and configure all known features and presets
@@ -25,20 +29,20 @@ class FeatureManager
      * @var array List of feature class names
      */
     protected $featureRegistry = [
-        \TYPO3\CMS\Install\Configuration\Context\ContextFeature::class,
-        \TYPO3\CMS\Install\Configuration\Image\ImageFeature::class,
-        \TYPO3\CMS\Install\Configuration\ExtbaseObjectCache\ExtbaseObjectCacheFeature::class,
-        \TYPO3\CMS\Install\Configuration\Mail\MailFeature::class,
+        ContextFeature::class,
+        ImageFeature::class,
+        ExtbaseObjectCacheFeature::class,
+        MailFeature::class,
     ];
 
     /**
      * Get initialized list of features with possible presets
      *
      * @param array $postValues List of $POST values
-     * @return array<FeatureInterface>
+     * @return FeatureInterface[]
      * @throws Exception
      */
-    public function getInitializedFeatures(array $postValues)
+    public function getInitializedFeatures(array $postValues = [])
     {
         $features = [];
         foreach ($this->featureRegistry as $featureClass) {
diff --git a/typo3/sysext/install/Classes/Controller/Action/AbstractAction.php b/typo3/sysext/install/Classes/Controller/Action/AbstractAction.php
index a8397cf2c806..dc15e9463da3 100644
--- a/typo3/sysext/install/Classes/Controller/Action/AbstractAction.php
+++ b/typo3/sysext/install/Classes/Controller/Action/AbstractAction.php
@@ -210,30 +210,4 @@ abstract class AbstractAction implements ActionInterface
         $saltFactory = \TYPO3\CMS\Saltedpasswords\Salt\SaltFactory::getSaltingInstance(null, 'BE');
         return $saltFactory->getHashedPassword($password);
     }
-
-    /**
-     * Prepare status messages used in extension compatibility view template
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface[]
-     */
-    protected function getExtensionCompatibilityTesterMessages()
-    {
-        $extensionCompatibilityTesterMessages = [];
-
-        /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-        $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\LoadingStatus::class);
-        $message->setTitle('Loading...');
-        $extensionCompatibilityTesterMessages[] = $message;
-
-        $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-        $message->setTitle('Incompatible extension found!');
-        $message->setMessage('Something went wrong and no protocol was written.');
-        $extensionCompatibilityTesterMessages[] = $message;
-
-        $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
-        $message->setTitle('All local extensions can be loaded!');
-        $extensionCompatibilityTesterMessages[] = $message;
-
-        return $extensionCompatibilityTesterMessages;
-    }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/AbstractAjaxAction.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/AbstractAjaxAction.php
index 5ba574c2f789..4e55f369ad97 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/AbstractAjaxAction.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/AbstractAjaxAction.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -14,17 +15,43 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Controller\Action\AbstractAction;
+use TYPO3\CMS\Install\View\JsonView;
+
 /**
  * General purpose AJAX controller action helper methods and bootstrap
  */
-abstract class AbstractAjaxAction extends \TYPO3\CMS\Install\Controller\Action\AbstractAction
+abstract class AbstractAjaxAction extends AbstractAction
 {
     /**
-     * Handles the action
+     * @var JsonView
+     */
+    protected $view;
+
+    /**
+     * @param JsonView $view
+     */
+    public function __construct(JsonView $view = null)
+    {
+        $this->view = $view ?: GeneralUtility::makeInstance(JsonView::class);
+    }
+
+    /**
+     * AbstractAjaxAction still overwrites $this->view with StandaloneView, which is
+     * shut off here.
+     */
+    protected function initializeHandle()
+    {
+        // Deliberately empty
+    }
+
+    /**
+     * Handles the action.
      *
      * @return string Rendered content
      */
-    public function handle()
+    public function handle(): string
     {
         $this->initializeHandle();
         return json_encode($this->executeAction());
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/ChangeInstallToolPassword.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/ChangeInstallToolPassword.php
new file mode 100644
index 000000000000..df47cb6d6af2
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/ChangeInstallToolPassword.php
@@ -0,0 +1,65 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Configuration\ConfigurationManager;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Status\ErrorStatus;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Change install tool password
+ */
+class ChangeInstallToolPassword extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $password = $this->postValues['password'];
+        $passwordCheck = $this->postValues['passwordCheck'];
+        $messages = [];
+        if ($password !== $passwordCheck) {
+            $message = new ErrorStatus();
+            $message->setTitle('Install tool password not changed');
+            $message->setMessage('Given passwords do not match.');
+            $messages[] = $message;
+        } elseif (strlen($password) < 8) {
+            $message = new ErrorStatus();
+            $message->setTitle('Install tool password not changed');
+            $message->setMessage('Given password must be at least eight characters long.');
+            $messages[] = $message;
+        } else {
+            $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
+            $configurationManager->setLocalConfigurationValueByPath(
+                'BE/installToolPassword',
+                $this->getHashedPassword($password)
+            );
+            $message = new OkStatus();
+            $message->setTitle('Install tool password changed');
+            $messages[] = $message;
+        }
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearAllCache.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearAllCache.php
index edaeedc400ea..39cfdb1ce3ae 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearAllCache.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearAllCache.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -16,46 +17,23 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 use TYPO3\CMS\Core\Service\OpcodeCacheService;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Install\View\JsonView;
+use TYPO3\CMS\Install\Service\ClearCacheService;
+use TYPO3\CMS\Install\Status\OkStatus;
+use TYPO3\CMS\Install\Status\StatusInterface;
 
 /**
  * Clear Cache
  *
  * This is an ajax wrapper for clearing all cache.
- *
- * @see \TYPO3\CMS\Install\Service\ClearCacheService
  */
 class ClearAllCache extends AbstractAjaxAction
 {
-
-    /**
-     * @var \TYPO3\CMS\Install\View\JsonView
-     */
-    protected $view;
-
-    /**
-     * @param JsonView $view
-     */
-    public function __construct(JsonView $view = null)
-    {
-        $this->view = $view ?: GeneralUtility::makeInstance(JsonView::class);
-    }
-
-    /**
-     * Initialize the handle action, sets up fluid stuff and assigns default variables.
-     * @ToDo Refactor View Initialization for all Ajax Controllers
-     */
-    protected function initializeHandle()
-    {
-        // empty on purpose because AbstractAjaxAction still overwrites $this->view with StandaloneView
-    }
-
     /**
      * Executes the action
      *
      * @return array Rendered content
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         $statusMessages[] = $this->clearAllCache();
         $statusMessages[] = $this->clearOpcodeCache();
@@ -70,14 +48,13 @@ class ClearAllCache extends AbstractAjaxAction
     /**
      * Clear all caches
      *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
+     * @return StatusInterface
      */
-    protected function clearAllCache()
+    protected function clearAllCache(): StatusInterface
     {
-        /** @var \TYPO3\CMS\Install\Service\ClearCacheService $clearCacheService */
-        $clearCacheService = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Service\ClearCacheService::class);
+        $clearCacheService = GeneralUtility::makeInstance(ClearCacheService::class);
         $clearCacheService->clearAll();
-        $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
+        $message = new OkStatus();
         $message->setTitle('Successfully cleared all caches');
         return $message;
     }
@@ -85,12 +62,12 @@ class ClearAllCache extends AbstractAjaxAction
     /**
      * Clear PHP opcode cache
      *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
+     * @return StatusInterface
      */
-    protected function clearOpcodeCache()
+    protected function clearOpcodeCache(): StatusInterface
     {
         GeneralUtility::makeInstance(OpcodeCacheService::class)->clearAllActive();
-        $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
+        $message = new OkStatus();
         $message->setTitle('Successfully cleared all available opcode caches');
         return $message;
     }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearCache.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearCache.php
deleted file mode 100644
index 30b754833172..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearCache.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Ajax;
-
-/*
- * 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\Utility\GeneralUtility;
-
-/**
- * Clear Cache
- *
- * This is an ajax wrapper for clearing the cache. Used for example
- * after uninstalling an extension via ajax.
- *
- * @see \TYPO3\CMS\Install\Service\ClearCacheService
- */
-class ClearCache extends AbstractAjaxAction
-{
-    /**
-     * Executes the action
-     *
-     * @return string Rendered content
-     */
-    protected function executeAction()
-    {
-        /** @var \TYPO3\CMS\Install\Service\ClearCacheService $clearCacheService */
-        $clearCacheService = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Service\ClearCacheService::class);
-        $clearCacheService->clearAll();
-        return 'OK';
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearTable.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearTable.php
new file mode 100644
index 000000000000..f459823513ed
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearTable.php
@@ -0,0 +1,53 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\ClearTableService;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Truncate a given table via ClearTableService
+ */
+class ClearTable extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     * @throws \RuntimeException
+     */
+    protected function executeAction(): array
+    {
+        if (empty($this->postValues['table'])) {
+            throw new \RuntimeException(
+                'No table name given',
+                1501944076
+            );
+        }
+
+        (new ClearTableService())->clearSelectedTable($this->postValues['table']);
+        $message = new OkStatus();
+        $message->setTitle('Cleared table');
+        $messages[] = $message;
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearTypo3tempFiles.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearTypo3tempFiles.php
new file mode 100644
index 000000000000..b20028f821c4
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/ClearTypo3tempFiles.php
@@ -0,0 +1,59 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\Typo3tempFileService;
+use TYPO3\CMS\Install\Status\ErrorStatus;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Clear Processed Files
+ *
+ * This is an ajax wrapper for clearing processed files.
+ */
+class ClearTypo3tempFiles extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $typo3tempFileService = new Typo3tempFileService();
+        if ($this->postValues['folder'] === '_processed_') {
+            $failedDeletions = $typo3tempFileService->clearProcessedFiles();
+            if ($failedDeletions) {
+                $message = new ErrorStatus();
+                $message->setTitle('Failed to delete ' . $failedDeletions . ' processed files. See TYPO3 log (by default typo3temp/var/logs/typo3_*.log)');
+            } else {
+                $message = new OkStatus();
+                $message->setTitle('Cleared processed files');
+            }
+        } else {
+            $typo3tempFileService->clearAssetsFolder($this->postValues['folder']);
+            $message = new OkStatus();
+            $message->setTitle('Cleared files in "' . $this->postValues['folder'] . '" folder');
+        }
+        $statusMessages[] = $message;
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $statusMessages,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/AbstractCoreUpdate.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateAbstract.php
similarity index 75%
rename from typo3/sysext/install/Classes/Controller/Action/Ajax/AbstractCoreUpdate.php
rename to typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateAbstract.php
index 8bd0069c11b5..6a195adcee06 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/AbstractCoreUpdate.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateAbstract.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -15,6 +16,7 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
  */
 
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Controller\Exception;
 use TYPO3\CMS\Install\Service\CoreUpdateService;
 use TYPO3\CMS\Install\Service\CoreVersionService;
 use TYPO3\CMS\Install\Status\StatusUtility;
@@ -24,33 +26,28 @@ use TYPO3\CMS\Install\View\JsonView;
  * Abstract core update class contains general core update
  * related methods
  */
-abstract class AbstractCoreUpdate extends AbstractAjaxAction
+abstract class CoreUpdateAbstract extends AbstractAjaxAction
 {
     /**
-     * @var \TYPO3\CMS\Install\View\JsonView
-     */
-    protected $view;
-
-    /**
-     * @var \TYPO3\CMS\Install\Service\CoreUpdateService
+     * @var CoreUpdateService
      */
     protected $coreUpdateService;
 
     /**
-     * @var \TYPO3\CMS\Install\Status\StatusUtility
+     * @var StatusUtility
      */
     protected $statusUtility;
 
     /**
-     * @var \TYPO3\CMS\Install\Service\CoreVersionService
+     * @var CoreVersionService
      */
     protected $coreVersionService;
 
     /**
      * @param JsonView $view
      * @param CoreUpdateService $coreUpdateService
-     * @param \TYPO3\CMS\Install\Status\StatusUtility $statusUtility
-     * @param \TYPO3\CMS\Install\Service\CoreVersionService $coreVersionService
+     * @param StatusUtility $statusUtility
+     * @param CoreVersionService $coreVersionService
      */
     public function __construct(
         JsonView $view = null,
@@ -58,7 +55,7 @@ abstract class AbstractCoreUpdate extends AbstractAjaxAction
         StatusUtility $statusUtility = null,
         CoreVersionService $coreVersionService = null)
     {
-        $this->view = $view ?: GeneralUtility::makeInstance(JsonView::class);
+        parent::__construct($view);
         $this->coreUpdateService = $coreUpdateService ?: GeneralUtility::makeInstance(CoreUpdateService::class);
         $this->statusUtility = $statusUtility ?: GeneralUtility::makeInstance(StatusUtility::class);
         $this->coreVersionService = $coreVersionService ?: GeneralUtility::makeInstance(CoreVersionService::class);
@@ -67,12 +64,12 @@ abstract class AbstractCoreUpdate extends AbstractAjaxAction
     /**
      * Initialize the handle action, sets up fluid stuff and assigns default variables.
      *
-     * @throws \TYPO3\CMS\Install\Controller\Exception
+     * @throws Exception
      */
     protected function initializeHandle()
     {
         if (!$this->coreUpdateService->isCoreUpdateEnabled()) {
-            throw new \TYPO3\CMS\Install\Controller\Exception(
+            throw new Exception(
                 'Core Update disabled in this environment',
                 1381609294
             );
@@ -84,14 +81,14 @@ abstract class AbstractCoreUpdate extends AbstractAjaxAction
      * Find out which version upgrade should be handled. This may
      * be different depending on whether development or regular release.
      *
-     * @throws \TYPO3\CMS\Install\Controller\Exception
+     * @throws Exception
      * @return string Version to handle, eg. 6.2.2
      */
-    protected function getVersionToHandle()
+    protected function getVersionToHandle(): string
     {
-        $getVars = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET('install');
+        $getVars = GeneralUtility::_GET('install');
         if (!isset($getVars['type'])) {
-            throw new \TYPO3\CMS\Install\Controller\Exception(
+            throw new Exception(
                 'Type must be set to either "regular" or "development"',
                 1380975303
             );
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateActivate.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateActivate.php
index 450d610346f5..76e5eb8e023b 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateActivate.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateActivate.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -17,19 +18,19 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 /**
  * Activate a downloaded core
  */
-class CoreUpdateActivate extends AbstractCoreUpdate
+class CoreUpdateActivate extends CoreUpdateAbstract
 {
     /**
      * Executes the action
      *
      * @return array Rendered content
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         $this->view->assignMultiple([
-                'success' => $this->coreUpdateService->activateVersion($this->getVersionToHandle()),
-                'status' => $this->coreUpdateService->getMessages(),
-            ]);
+            'success' => $this->coreUpdateService->activateVersion($this->getVersionToHandle()),
+            'status' => $this->coreUpdateService->getMessages(),
+        ]);
         return $this->view->render();
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateCheckPreConditions.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateCheckPreConditions.php
index 03606f7b9871..7cedc7b6d1ff 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateCheckPreConditions.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateCheckPreConditions.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -17,19 +18,19 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 /**
  * Activate a downloaded core
  */
-class CoreUpdateCheckPreConditions extends AbstractCoreUpdate
+class CoreUpdateCheckPreConditions extends CoreUpdateAbstract
 {
     /**
      * Executes the action
      *
      * @return array Rendered content
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         $this->view->assignMultiple([
-                'success' => $this->coreUpdateService->checkPreConditions($this->getVersionToHandle()),
-                'status' => $this->coreUpdateService->getMessages(),
-            ]);
+            'success' => $this->coreUpdateService->checkPreConditions($this->getVersionToHandle()),
+            'status' => $this->coreUpdateService->getMessages(),
+        ]);
         return $this->view->render();
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateDownload.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateDownload.php
index e1aa2bf16bb5..bf356d703fa8 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateDownload.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateDownload.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -17,19 +18,19 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 /**
  * Download latest core version
  */
-class CoreUpdateDownload extends AbstractCoreUpdate
+class CoreUpdateDownload extends CoreUpdateAbstract
 {
     /**
      * Executes the action
      *
      * @return array Rendered content
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         $this->view->assignMultiple([
-                'success' => $this->coreUpdateService->downloadVersion($this->getVersionToHandle()),
-                'status' => $this->coreUpdateService->getMessages(),
-            ]);
+            'success' => $this->coreUpdateService->downloadVersion($this->getVersionToHandle()),
+            'status' => $this->coreUpdateService->getMessages(),
+        ]);
         return $this->view->render();
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateIsUpdateAvailable.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateIsUpdateAvailable.php
index 7b3a5d748943..63c10b9831a8 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateIsUpdateAvailable.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateIsUpdateAvailable.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -15,18 +16,19 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
  */
 
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Status\StatusInterface;
 
 /**
  * Check if a younger version is available
  */
-class CoreUpdateIsUpdateAvailable extends AbstractCoreUpdate
+class CoreUpdateIsUpdateAvailable extends CoreUpdateAbstract
 {
     /**
      * Executes the action
      *
      * @return array Rendered content
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         $status = [];
         if ($this->coreVersionService->isInstalledVersionAReleasedVersion()) {
@@ -59,7 +61,6 @@ class CoreUpdateIsUpdateAvailable extends AbstractCoreUpdate
         if (isset($action)) {
             $this->view->assign('action', $action);
         }
-
         return $this->view->render();
     }
 
@@ -67,15 +68,14 @@ class CoreUpdateIsUpdateAvailable extends AbstractCoreUpdate
      * @param string $severity
      * @param string $title
      * @param string $message
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
+     * @return StatusInterface
      */
-    protected function getMessage($severity, $title, $message = '')
+    protected function getMessage($severity, $title, $message = ''): StatusInterface
     {
-        /** @var $statusMessage \TYPO3\CMS\Install\Status\StatusInterface */
+        /** @var $statusMessage StatusInterface */
         $statusMessage = GeneralUtility::makeInstance('TYPO3\\CMS\\Install\\Status\\' . ucfirst($severity) . 'Status');
         $statusMessage->setTitle($title);
         $statusMessage->setMessage($message);
-
         return $statusMessage;
     }
 
@@ -84,7 +84,7 @@ class CoreUpdateIsUpdateAvailable extends AbstractCoreUpdate
      * @param string $action
      * @return array
      */
-    protected function getAction($title, $action)
+    protected function getAction($title, $action): array
     {
         return [
             'title' => $title,
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateMove.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateMove.php
index 5c193e13b2a3..8657ab623864 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateMove.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateMove.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -17,19 +18,19 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 /**
  * Move a downloaded core
  */
-class CoreUpdateMove extends AbstractCoreUpdate
+class CoreUpdateMove extends CoreUpdateAbstract
 {
     /**
      * Executes the action
      *
      * @return array Rendered content
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         $this->view->assignMultiple([
-                'success' => $this->coreUpdateService->moveVersion($this->getVersionToHandle()),
-                'status' => $this->coreUpdateService->getMessages(),
-            ]);
+            'success' => $this->coreUpdateService->moveVersion($this->getVersionToHandle()),
+            'status' => $this->coreUpdateService->getMessages(),
+        ]);
         return $this->view->render();
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateUnpack.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateUnpack.php
index 837660cbb4f1..b1855a565997 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateUnpack.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateUnpack.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -17,7 +18,7 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 /**
  * Unpack a downloaded core
  */
-class CoreUpdateUnpack extends AbstractCoreUpdate
+class CoreUpdateUnpack extends CoreUpdateAbstract
 {
     /**
      * Executes the action
@@ -27,9 +28,9 @@ class CoreUpdateUnpack extends AbstractCoreUpdate
     protected function executeAction()
     {
         $this->view->assignMultiple([
-                'success' => $this->coreUpdateService->unpackVersion($this->getVersionToHandle()),
-                'status' => $this->coreUpdateService->getMessages(),
-            ]);
+            'success' => $this->coreUpdateService->unpackVersion($this->getVersionToHandle()),
+            'status' => $this->coreUpdateService->getMessages(),
+        ]);
         return $this->view->render();
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateUpdateVersionMatrix.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateUpdateVersionMatrix.php
index bf7301ba74f4..3e95fedb8ab2 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateUpdateVersionMatrix.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateUpdateVersionMatrix.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -17,19 +18,19 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 /**
  * Update version matrix from get.typo3.org
  */
-class CoreUpdateUpdateVersionMatrix extends AbstractCoreUpdate
+class CoreUpdateUpdateVersionMatrix extends CoreUpdateAbstract
 {
     /**
      * Executes the action
      *
      * @return array Rendered content
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         $this->view->assignMultiple([
-                'success' => $this->coreUpdateService->updateVersionMatrix(),
-                'status' => $this->coreUpdateService->getMessages(),
-            ]);
+            'success' => $this->coreUpdateService->updateVersionMatrix(),
+            'status' => $this->coreUpdateService->getMessages(),
+        ]);
         return $this->view->render();
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateVerifyChecksum.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateVerifyChecksum.php
index d659af00f72f..10e68b4a5c26 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateVerifyChecksum.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/CoreUpdateVerifyChecksum.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -17,7 +18,7 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 /**
  * Verify checksum of a downloaded core
  */
-class CoreUpdateVerifyChecksum extends AbstractCoreUpdate
+class CoreUpdateVerifyChecksum extends CoreUpdateAbstract
 {
     /**
      * Executes the action
@@ -26,12 +27,10 @@ class CoreUpdateVerifyChecksum extends AbstractCoreUpdate
      */
     protected function executeAction()
     {
-        $this->view->assignMultiple(
-            [
-                'success' => $this->coreUpdateService->verifyFileChecksum($this->getVersionToHandle()),
-                'status' => $this->coreUpdateService->getMessages(),
-            ]
-        );
+        $this->view->assignMultiple([
+            'success' => $this->coreUpdateService->verifyFileChecksum($this->getVersionToHandle()),
+            'status' => $this->coreUpdateService->getMessages(),
+        ]);
         return $this->view->render();
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/CreateAdmin.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/CreateAdmin.php
new file mode 100644
index 000000000000..01fb35efbccd
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/CreateAdmin.php
@@ -0,0 +1,90 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Database\ConnectionPool;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Status\ErrorStatus;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Create an administrator from given username and password
+ */
+class CreateAdmin extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     * @throws \RuntimeException
+     */
+    protected function executeAction(): array
+    {
+        $username = preg_replace('/\\s/i', '', $this->postValues['userName']);
+        $password = $this->postValues['userPassword'];
+        $passwordCheck = $this->postValues['userPasswordCheck'];
+        $messages = [];
+        if (strlen($username) < 1) {
+            $message = new ErrorStatus();
+            $message->setTitle('Administrator user not created');
+            $message->setMessage('No valid username given.');
+            $messages[] = $message;
+        } elseif ($password !== $passwordCheck) {
+            $message = new ErrorStatus();
+            $message->setTitle('Administrator user not created');
+            $message->setMessage('Passwords do not match.');
+            $messages[] = $message;
+        } elseif (strlen($password) < 8) {
+            $message = new ErrorStatus();
+            $message->setTitle('Administrator user not created');
+            $message->setMessage('Password must be at least eight characters long.');
+            $messages[] = $message;
+        } else {
+            $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
+            $userExists = $connectionPool->getConnectionForTable('be_users')
+                ->count(
+                    'uid',
+                    'be_users',
+                    ['username' => $username]
+                );
+            if ($userExists) {
+                $message = new ErrorStatus();
+                $message->setTitle('Administrator user not created');
+                $message->setMessage('A user with username "' . $username . '" exists already.');
+                $messages[] = $message;
+            } else {
+                $hashedPassword = $this->getHashedPassword($password);
+                $adminUserFields = [
+                    'username' => $username,
+                    'password' => $hashedPassword,
+                    'admin' => 1,
+                    'tstamp' => $GLOBALS['EXEC_TIME'],
+                    'crdate' => $GLOBALS['EXEC_TIME']
+                ];
+                $connectionPool->getConnectionForTable('be_users')->insert('be_users', $adminUserFields);
+                $message = new OkStatus();
+                $message->setTitle('Administrator created with username "' . $username . '".');
+                $messages[] = $message;
+            }
+        }
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/DatabaseAnalyzerAnalyze.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/DatabaseAnalyzerAnalyze.php
new file mode 100644
index 000000000000..fedc12a65c9d
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/DatabaseAnalyzerAnalyze.php
@@ -0,0 +1,189 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Database\Schema\Exception\StatementException;
+use TYPO3\CMS\Core\Database\Schema\SchemaMigrator;
+use TYPO3\CMS\Core\Database\Schema\SqlReader;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Status\ErrorStatus;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Execute database analyzer "analyze" / "show" status action
+ */
+class DatabaseAnalyzerAnalyze extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $this->loadExtLocalconfDatabaseAndExtTables();
+
+        $suggestions = [];
+        try {
+            $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
+            $sqlStatements = $sqlReader->getCreateTableStatementArray($sqlReader->getTablesDefinitionString());
+            $schemaMigrationService = GeneralUtility::makeInstance(SchemaMigrator::class);
+            $addCreateChange = $schemaMigrationService->getUpdateSuggestions($sqlStatements);
+
+            // Aggregate the per-connection statements into one flat array
+            $addCreateChange = array_merge_recursive(...array_values($addCreateChange));
+            if (!empty($addCreateChange['create_table'])) {
+                $suggestion = [
+                    'key' => 'addTable',
+                    'label' => 'Add tables',
+                    'enabled' => true,
+                    'children' => [],
+                ];
+                foreach ($addCreateChange['create_table'] as $hash => $statement) {
+                    $suggestion['children'][] = [
+                        'hash' => $hash,
+                        'statement' => $statement,
+                    ];
+                }
+                $suggestions[] = $suggestion;
+            }
+            if (!empty($addCreateChange['add'])) {
+                $suggestion = [
+                    'key' => 'addField',
+                    'label' => 'Add fields to tables',
+                    'enabled' => true,
+                    'children' => [],
+                ];
+                foreach ($addCreateChange['add'] as $hash => $statement) {
+                    $suggestion['children'][] = [
+                        'hash' => $hash,
+                        'statement' => $statement,
+                    ];
+                }
+                $suggestions[] = $suggestion;
+            }
+            if (!empty($addCreateChange['change'])) {
+                $suggestion = [
+                    'key' => 'change',
+                    'label' => 'Change fields',
+                    'enabled' => false,
+                    'children' => [],
+                ];
+                foreach ($addCreateChange['change'] as $hash => $statement) {
+                    $child = [
+                        'hash' => $hash,
+                        'statement' => $statement,
+                    ];
+                    if (isset($addCreateChange['change_currentValue'][$hash])) {
+                        $child['current'] = $addCreateChange['change_currentValue'][$hash];
+                    }
+                    $suggestion['children'][] = $child;
+                }
+                $suggestions[] = $suggestion;
+            }
+
+            // Difference from current to expected
+            $dropRename = $schemaMigrationService->getUpdateSuggestions($sqlStatements, true);
+
+            // Aggregate the per-connection statements into one flat array
+            $dropRename = array_merge_recursive(...array_values($dropRename));
+            if (!empty($dropRename['change_table'])) {
+                $suggestion = [
+                    'key' => 'renameTableToUnused',
+                    'label' => 'Remove tables (rename with prefix)',
+                    'enabled' => false,
+                    'children' => [],
+                ];
+                foreach ($dropRename['change_table'] as $hash => $statement) {
+                    $child = [
+                        'hash' => $hash,
+                        'statement' => $statement,
+                    ];
+                    if (!empty($dropRename['tables_count'][$hash])) {
+                        $child['rowCount'] = $dropRename['tables_count'][$hash];
+                    }
+                    $suggestion['children'][] = $child;
+                }
+                $suggestions[] = $suggestion;
+            }
+            if (!empty($dropRename['change'])) {
+                $suggestion = [
+                    'key' => 'renameTableFieldToUnused',
+                    'label' => 'Remove unused fields (rename with prefix)',
+                    'enabled' => false,
+                    'children' => [],
+                ];
+                foreach ($dropRename['change'] as $hash => $statement) {
+                    $suggestion['children'][] = [
+                        'hash' => $hash,
+                        'statement' => $statement,
+                    ];
+                }
+                $suggestions[] = $suggestion;
+            }
+            if (!empty($dropRename['drop'])) {
+                $suggestion = [
+                    'key' => 'deleteField',
+                    'label' => 'Drop fields (really!)',
+                    'enabled' => false,
+                    'children' => [],
+                ];
+                foreach ($dropRename['drop'] as $hash => $statement) {
+                    $suggestion['children'][] = [
+                        'hash' => $hash,
+                        'statement' => $statement,
+                    ];
+                }
+                $suggestions[] = $suggestion;
+            }
+            if (!empty($dropRename['drop_table'])) {
+                $suggestion = [
+                    'key' => 'deleteTable',
+                    'label' => 'Drop tables (really!)',
+                    'enabled' => false,
+                    'children' => [],
+                ];
+                foreach ($dropRename['drop_table'] as $hash => $statement) {
+                    $child = [
+                        'hash' => $hash,
+                        'statement' => $statement,
+                    ];
+                    if (!empty($dropRename['tables_count'][$hash])) {
+                        $child['rowCount'] = $dropRename['tables_count'][$hash];
+                    }
+                    $suggestion['children'][] = $child;
+                }
+                $suggestions[] = $suggestion;
+            }
+
+            $message = new OkStatus();
+            $message->setTitle('Analyzed current database');
+            $messages[] = $message;
+        } catch (StatementException $e) {
+            $message = new ErrorStatus();
+            $message->setTitle('Database analysis failed');
+            $message->setMessage($e->getMessage());
+            $messages[] = $message;
+        }
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+            'suggestions' => $suggestions,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/DatabaseAnalyzerExecute.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/DatabaseAnalyzerExecute.php
new file mode 100644
index 000000000000..aa4f5f6c7c6c
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/DatabaseAnalyzerExecute.php
@@ -0,0 +1,69 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Database\Schema\SchemaMigrator;
+use TYPO3\CMS\Core\Database\Schema\SqlReader;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Status\ErrorStatus;
+use TYPO3\CMS\Install\Status\OkStatus;
+use TYPO3\CMS\Install\Status\WarningStatus;
+
+/**
+ * Execute database analyzer "execute" action to apply
+ * a set of DB changes.
+ */
+class DatabaseAnalyzerExecute extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $this->loadExtLocalconfDatabaseAndExtTables();
+
+        $messages = [];
+        if (empty($this->postValues['hashes'])) {
+            $message = new WarningStatus();
+            $message->setTitle('No database changes selected');
+            $messages[] = $message;
+        } else {
+            $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
+            $sqlStatements = $sqlReader->getCreateTableStatementArray($sqlReader->getTablesDefinitionString());
+            $schemaMigrationService = GeneralUtility::makeInstance(SchemaMigrator::class);
+            $statementHashesToPerform = array_flip($this->postValues['hashes']);
+            $results = $schemaMigrationService->migrate($sqlStatements, $statementHashesToPerform);
+            // Create error flash messages if any
+            foreach ($results as $errorMessage) {
+                $message = new ErrorStatus();
+                $message->setTitle('Database update failed');
+                $message->setMessage('Error: ' . $errorMessage);
+                $messages[] = $message;
+            }
+            $message = new OkStatus();
+            $message->setTitle('Executed database updates');
+            $messages[] = $message;
+        }
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/DumpAutoload.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/DumpAutoload.php
index e43ee7d7595a..66a910f8e7ce 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/DumpAutoload.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/DumpAutoload.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -16,10 +17,9 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 use TYPO3\CMS\Core\Core\Bootstrap;
 use TYPO3\CMS\Core\Core\ClassLoadingInformation;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Install\Status\NoticeStatus;
 use TYPO3\CMS\Install\Status\OkStatus;
-use TYPO3\CMS\Install\View\JsonView;
+use TYPO3\CMS\Install\Status\StatusInterface;
 
 /**
  * Ajax wrapper for dumping autoload.
@@ -27,47 +27,36 @@ use TYPO3\CMS\Install\View\JsonView;
 class DumpAutoload extends AbstractAjaxAction
 {
     /**
-     * @var \TYPO3\CMS\Install\View\JsonView
-     */
-    protected $view;
-
-    /**
-     * @param JsonView $view
+     * Executes the action
+     *
+     * @return array Rendered content
      */
-    public function __construct(JsonView $view = null)
+    protected function executeAction(): array
     {
-        $this->view = $view ?: GeneralUtility::makeInstance(JsonView::class);
-    }
+        $statusMessages[] = $this->dumpAutoload();
 
-    /**
-     * Initialize the handle action, sets up fluid stuff and assigns default variables.
-     * @ToDo Refactor View Initialization for all Ajax Controllers
-     */
-    protected function initializeHandle()
-    {
-        // empty on purpose because AbstractAjaxAction still overwrites $this->view with StandaloneView
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $statusMessages,
+        ]);
+        return $this->view->render();
     }
 
     /**
-     * Executes the action
+     * Dumps Extension Autoload Information
      *
-     * @return array Rendered content
+     * @return StatusInterface
      */
-    protected function executeAction()
+    protected function dumpAutoload(): StatusInterface
     {
         if (Bootstrap::usesComposerClassLoading()) {
-            $message = GeneralUtility::makeInstance(NoticeStatus::class);
+            $message = new NoticeStatus();
             $message->setTitle('Skipped generating additional class loading information in composer mode.');
         } else {
             ClassLoadingInformation::dumpClassLoadingInformation();
-            $message = GeneralUtility::makeInstance(OkStatus::class);
+            $message = new OkStatus();
             $message->setTitle('Successfully dumped class loading information for extensions.');
         }
-
-        $this->view->assignMultiple([
-            'success' => true,
-            'status' => [ $message ],
-        ]);
-        return $this->view->render();
+        return $message;
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/EnvironmentStatus.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/EnvironmentCheckGetStatus.php
similarity index 66%
rename from typo3/sysext/install/Classes/Controller/Action/Ajax/EnvironmentStatus.php
rename to typo3/sysext/install/Classes/Controller/Action/Ajax/EnvironmentCheckGetStatus.php
index cac98efbe9f8..3c0f7b9d66a8 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/EnvironmentStatus.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/EnvironmentCheckGetStatus.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -21,27 +22,27 @@ use TYPO3\CMS\Install\SystemEnvironment\DatabaseCheck;
 use TYPO3\CMS\Install\SystemEnvironment\SetupCheck;
 
 /**
- * Environment status check for errors
+ * Get environment status
  */
-class EnvironmentStatus extends AbstractAjaxAction
+class EnvironmentCheckGetStatus extends AbstractAjaxAction
 {
     /**
-     * Get environment status errors
+     * Executes the action
      *
-     * @return string
+     * @return array Rendered content
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
-        // Count of failed checks to be displayed in the left navigation menu
         $statusObjects = array_merge(
             GeneralUtility::makeInstance(Check::class)->getStatus(),
             GeneralUtility::makeInstance(SetupCheck::class)->getStatus(),
             GeneralUtility::makeInstance(DatabaseCheck::class)->getStatus()
         );
-        /** @var \TYPO3\CMS\Install\Status\StatusUtility $statusUtility */
-        $statusUtility = GeneralUtility::makeInstance(StatusUtility::class);
-        $errors = $statusUtility->filterBySeverity($statusObjects, 'error');
 
-        return count($errors);
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => (new StatusUtility())->sortBySeverity($statusObjects),
+        ]);
+        return $this->view->render();
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionCompatibilityTester.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionCompatibilityTester.php
index 8bb9f0e510d6..81f6da8a2df6 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionCompatibilityTester.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionCompatibilityTester.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -16,6 +17,7 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\View\JsonView;
 
 /**
  * Load Extensions
@@ -51,9 +53,12 @@ class ExtensionCompatibilityTester extends AbstractAjaxAction
     /**
      * Construct this class
      * set default protocol file location
+     *
+     * @param JsonView $view
      */
-    public function __construct()
+    public function __construct(JsonView $view = null)
     {
+        parent::__construct($view);
         $this->protocolFile = PATH_site . 'typo3temp/assets/ExtensionCompatibilityTester.txt';
         $this->errorProtocolFile = PATH_site . 'typo3temp/assets/ExtensionCompatibilityTesterErrors.json';
     }
@@ -63,9 +68,9 @@ class ExtensionCompatibilityTester extends AbstractAjaxAction
      * setting up the checks (deleting protocol), and returning
      * OK if process run through without errors
      *
-     * @return string "OK" if process ran through without errors
+     * @return array
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         register_shutdown_function([$this, 'logError']);
         $getVars = GeneralUtility::_GET('install');
@@ -73,7 +78,7 @@ class ExtensionCompatibilityTester extends AbstractAjaxAction
             $this->deleteProtocolFile();
         }
         $this->tryToLoadExtLocalconfAndExtTablesOfExtensions($this->getExtensionsToLoad());
-        return 'OK';
+        return ['success' => true];
     }
 
     /**
@@ -96,7 +101,7 @@ class ExtensionCompatibilityTester extends AbstractAjaxAction
      *
      * @return array
      */
-    protected function getExtensionsToLoad()
+    protected function getExtensionsToLoad(): array
     {
         $extensionsToLoad = [];
         $extensionsToExclude = $this->getExtensionsToExclude();
@@ -115,7 +120,7 @@ class ExtensionCompatibilityTester extends AbstractAjaxAction
      *
      * @return array
      */
-    protected function getExtensionsToExclude()
+    protected function getExtensionsToExclude(): array
     {
         if (is_file($this->protocolFile)) {
             $exclude = (string)file_get_contents($this->protocolFile);
@@ -152,7 +157,7 @@ class ExtensionCompatibilityTester extends AbstractAjaxAction
      * the original bootstrap method.
      *
      * @param string $extensionKey
-     * @param \ArrayAccess $extension
+     * @param array $extension
      */
     protected function loadExtTablesForExtension($extensionKey, array $extension)
     {
@@ -177,7 +182,7 @@ class ExtensionCompatibilityTester extends AbstractAjaxAction
      * the original bootstrap method.
      *
      * @param string $extensionKey
-     * @param \ArrayAccess $extension
+     * @param array $extension
      */
     protected function loadExtLocalconfForExtension($extensionKey, array $extension)
     {
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerFiles.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerFiles.php
index 1a573be33c68..f6c532134771 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerFiles.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerFiles.php
@@ -18,42 +18,19 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 use Symfony\Component\Finder\Finder;
 use Symfony\Component\Finder\SplFileInfo;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Install\View\JsonView;
 
 /**
  * Return a list of files of an extension
  */
 class ExtensionScannerFiles extends AbstractAjaxAction
 {
-    /**
-     * @var JsonView
-     */
-    protected $view;
-
-    /**
-     * @param JsonView $view
-     */
-    public function __construct(JsonView $view = null)
-    {
-        $this->view = $view ?: GeneralUtility::makeInstance(JsonView::class);
-    }
-
-    /**
-     * Initialize the handle action, sets up fluid stuff and assigns default variables.
-     * @ToDo Refactor View Initialization for all Ajax Controllers
-     */
-    protected function initializeHandle()
-    {
-        // empty on purpose because AbstractAjaxAction still overwrites $this->view with StandaloneView
-    }
-
     /**
      * Get list of files of an extension for extension scanner
      *
-     * @return string
+     * @return array
      * @throws \RuntimeException
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         // Get and validate path
         $extension = $this->postValues['extension'];
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerMarkFullyScannedRestFiles.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerMarkFullyScannedRestFiles.php
index d198e02ace9e..6d86966188a5 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerMarkFullyScannedRestFiles.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerMarkFullyScannedRestFiles.php
@@ -19,9 +19,7 @@ use Symfony\Component\Finder\Finder;
 use Symfony\Component\Finder\SplFileInfo;
 use TYPO3\CMS\Core\Registry;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Install\UpgradeAnalysis\DocumentationFile;
-use TYPO3\CMS\Install\View\JsonView;
 
 /**
  * Ajax controller, part of "extension scanner". Called at the end of "scan all"
@@ -31,34 +29,12 @@ use TYPO3\CMS\Install\View\JsonView;
  */
 class ExtensionScannerMarkFullyScannedRestFiles extends AbstractAjaxAction
 {
-    /**
-     * @var JsonView
-     */
-    protected $view;
-
-    /**
-     * @param JsonView $view
-     */
-    public function __construct(JsonView $view = null)
-    {
-        $this->view = $view ?: GeneralUtility::makeInstance(JsonView::class);
-    }
-
-    /**
-     * Initialize the handle action, sets up fluid stuff and assigns default variables.
-     * @ToDo Refactor View Initialization for all Ajax Controllers
-     */
-    protected function initializeHandle()
-    {
-        // empty on purpose because AbstractAjaxAction still overwrites $this->view with StandaloneView
-    }
-
     /**
      * Get list of files of an extension for extension scanner
      *
-     * @return string
+     * @return array
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         $foundRestFileHashes = (array)$this->postValues['hashes'];
 
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerScanFile.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerScanFile.php
index 45b4bfaba552..afb22fa05a39 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerScanFile.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/ExtensionScannerScanFile.php
@@ -39,18 +39,12 @@ use TYPO3\CMS\Install\ExtensionScanner\Php\Matcher\PropertyProtectedMatcher;
 use TYPO3\CMS\Install\ExtensionScanner\Php\Matcher\PropertyPublicMatcher;
 use TYPO3\CMS\Install\ExtensionScanner\Php\MatcherFactory;
 use TYPO3\CMS\Install\UpgradeAnalysis\DocumentationFile;
-use TYPO3\CMS\Install\View\JsonView;
 
 /**
  * Scan a single extension file for breaking / deprecated core code usages
  */
 class ExtensionScannerScanFile extends AbstractAjaxAction
 {
-    /**
-     * @var JsonView
-     */
-    protected $view;
-
     /**
      * @var array Node visitors that implement CodeScannerInterface
      */
@@ -109,30 +103,13 @@ class ExtensionScannerScanFile extends AbstractAjaxAction
         ],
     ];
 
-    /**
-     * @param JsonView $view
-     */
-    public function __construct(JsonView $view = null)
-    {
-        $this->view = $view ?: GeneralUtility::makeInstance(JsonView::class);
-    }
-
-    /**
-     * Initialize the handle action, sets up fluid stuff and assigns default variables.
-     * @ToDo Refactor View Initialization for all Ajax Controllers
-     */
-    protected function initializeHandle()
-    {
-        // empty on purpose because AbstractAjaxAction still overwrites $this->view with StandaloneView
-    }
-
     /**
      * Find code violations in a single file
      *
-     * @return string
+     * @return array
      * @throws \RuntimeException
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         // Get and validate path and file
         $extension = $this->postValues['extension'];
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/FilterManager.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/FilterManager.php
deleted file mode 100644
index 2ad92ba73d94..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/FilterManager.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-declare(strict_types=1);
-namespace TYPO3\CMS\Install\Controller\Action\Ajax;
-
-/*
- * 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\Registry;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Install\UpgradeAnalysis\DocumentationFile;
-
-/**
-  * Reveal documentation files hidden from views
-  */
-class FilterManager extends AbstractAjaxAction
-{
-
-    /**
-     * Executes the action
-     *
-     * @return string Rendered content
-     */
-    protected function executeAction(): string
-    {
-        $registry = new Registry();
-        $ignoredFiles = $registry->get('upgradeAnalysisIgnoreFilter', 'ignoredDocumentationFiles', []);
-        $documentationFileService = GeneralUtility::makeInstance(DocumentationFile::class);
-        $files = [];
-        foreach ($ignoredFiles as $filePath) {
-            $file = current($documentationFileService->getListEntry($filePath));
-            $files[$file['headline']] = $file['filepath'];
-        }
-        $this->view->assign('files', $files);
-        return $this->view->render();
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStatus.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStatus.php
deleted file mode 100644
index 0ffb062fd000..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStatus.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Ajax;
-
-/*
- * 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\Utility\GeneralUtility;
-
-/**
- * Folder status check for errors
- */
-class FolderStatus extends AbstractAjaxAction
-{
-    /**
-     * Get folder status errors
-     *
-     * @return string
-     */
-    protected function executeAction()
-    {
-        // Count of folder structure errors are displayed in left navigation menu
-        /** @var $folderStructureFacade \TYPO3\CMS\Install\FolderStructure\StructureFacade */
-        $folderStructureFacade = GeneralUtility::makeInstance(\TYPO3\CMS\Install\FolderStructure\DefaultFactory::class)->getStructure();
-        $folderStatus = $folderStructureFacade->getStatus();
-
-        /** @var $permissionCheck \TYPO3\CMS\Install\FolderStructure\DefaultPermissionsCheck */
-        $permissionCheck = GeneralUtility::makeInstance(\TYPO3\CMS\Install\FolderStructure\DefaultPermissionsCheck::class);
-        $folderStatus[] = $permissionCheck->getMaskStatus('fileCreateMask');
-        $folderStatus[] = $permissionCheck->getMaskStatus('folderCreateMask');
-
-        /** @var \TYPO3\CMS\Install\Status\StatusUtility $statusUtility */
-        $statusUtility = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\StatusUtility::class);
-
-        $folderStructureErrors = array_merge(
-            $statusUtility->filterBySeverity($folderStatus, 'error'),
-            $statusUtility->filterBySeverity($folderStatus, 'warning')
-        );
-
-        return count($folderStructureErrors);
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStructureFix.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStructureFix.php
new file mode 100644
index 000000000000..0523e2bf4eba
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStructureFix.php
@@ -0,0 +1,43 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Utility\GeneralUtility;
+use TYPO3\CMS\Install\FolderStructure\DefaultFactory;
+
+/**
+ * Try to fix folder structure errors
+ */
+class FolderStructureFix extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $folderStructureFactory = GeneralUtility::makeInstance(DefaultFactory::class);
+        $structureFacade = $folderStructureFactory->getStructure();
+        $fixedStatusObjects = $structureFacade->fix();
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'fixedStatus' => $fixedStatusObjects,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStructureGetStatus.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStructureGetStatus.php
new file mode 100644
index 000000000000..139d40dc72eb
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/FolderStructureGetStatus.php
@@ -0,0 +1,57 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Utility\GeneralUtility;
+use TYPO3\CMS\Install\FolderStructure\DefaultFactory;
+use TYPO3\CMS\Install\Status\StatusUtility;
+
+/**
+ * Get folder structure status
+ */
+class FolderStructureGetStatus extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $folderStructureFactory = GeneralUtility::makeInstance(DefaultFactory::class);
+        $structureFacade = $folderStructureFactory->getStructure();
+
+        $statusObjects = $structureFacade->getStatus();
+        $statusUtility = GeneralUtility::makeInstance(StatusUtility::class);
+
+        $errorStatus = array_merge(
+            $statusUtility->filterBySeverity($statusObjects, 'error'),
+            $statusUtility->filterBySeverity($statusObjects, 'warning')
+        );
+        $okStatus = array_merge(
+            $statusUtility->filterBySeverity($statusObjects, 'notice'),
+            $statusUtility->filterBySeverity($statusObjects, 'information'),
+            $statusUtility->filterBySeverity($statusObjects, 'ok')
+        );
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'errorStatus' => $errorStatus,
+            'okStatus' => $okStatus,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/ImageProcessing.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/ImageProcessing.php
new file mode 100644
index 000000000000..de65f81a3bda
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/ImageProcessing.php
@@ -0,0 +1,724 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Imaging\GraphicalFunctions;
+use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Core\Utility\StringUtility;
+use TYPO3\CMS\Install\Status\ErrorStatus;
+use TYPO3\CMS\Install\Status\InfoStatus;
+use TYPO3\CMS\Install\Status\StatusInterface;
+use TYPO3\CMS\Install\Status\WarningStatus;
+
+/**
+ * Execute an image test.
+ */
+class ImageProcessing extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $testType = $this->postValues['testType'];
+        $testMethod = $testType . 'Test';
+        if (!method_exists($this, $testType . 'Test')) {
+            throw new \RuntimeException(
+                'Test method ' . $testMethod . ' does not exist',
+                1502977949
+            );
+        }
+        $result = $this->$testMethod();
+        if (!empty($result['referenceFile'])) {
+            $fileExt = end(explode('.', $result['referenceFile']));
+            $result['referenceFile'] = 'data:image/' . $fileExt . ';base64,' . base64_encode(file_get_contents($result['referenceFile']));
+        }
+        if (!empty($result['outputFile'])) {
+            $fileExt = end(explode('.', $result['outputFile']));
+            $result['outputFile'] = 'data:image/' . $fileExt . ';base64,' . base64_encode(file_get_contents($result['outputFile']));
+        }
+        $result['success'] = true;
+        foreach ($result as $variable => $value) {
+            $this->view->assign($variable, $value);
+        }
+        return $this->view->render();
+    }
+
+    /**
+     * Create true type font test image
+     *
+     * @return array
+     */
+    protected function trueTypeTest(): array
+    {
+        $image = @imagecreate(200, 50);
+        imagecolorallocate($image, 255, 255, 55);
+        $textColor = imagecolorallocate($image, 233, 14, 91);
+        @imagettftext(
+            $image,
+            20 / 96.0 * 72, // As in  compensateFontSizeiBasedOnFreetypeDpi
+            0,
+            10,
+            20,
+            $textColor,
+            ExtensionManagementUtility::extPath('install') . 'Resources/Private/Font/vera.ttf',
+            'Testing true type'
+        );
+        $outputFile = PATH_site . 'typo3temp/assets/images/installTool-' . StringUtility::getUniqueId('createTrueTypeFontTestImage') . '.gif';
+        imagegif($image, $outputFile);
+        return [
+            'fileExists' => file_exists($outputFile),
+            'outputFile' => $outputFile,
+            'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Font.gif',
+        ];
+    }
+
+    /**
+     * Convert to jpg from jpg
+     *
+     * @return array
+     */
+    protected function readJpgTest(): array
+    {
+        return $this->convertImageFormatsToJpg('jpg');
+    }
+
+    /**
+     * Convert to jpg from gif
+     *
+     * @return array
+     */
+    protected function readGifTest(): array
+    {
+        return $this->convertImageFormatsToJpg('gif');
+    }
+
+    /**
+     * Convert to jpg from png
+     *
+     * @return array
+     */
+    protected function readPngTest(): array
+    {
+        return $this->convertImageFormatsToJpg('png');
+    }
+
+    /**
+     * Convert to jpg from tif
+     *
+     * @return array
+     */
+    protected function readTifTest(): array
+    {
+        return $this->convertImageFormatsToJpg('tif');
+    }
+
+    /**
+     * Convert to jpg from pdf
+     *
+     * @return array
+     */
+    protected function readPdfTest(): array
+    {
+        return $this->convertImageFormatsToJpg('pdf');
+    }
+
+    /**
+     * Convert to jpg from ai
+     *
+     * @return array
+     */
+    protected function readAiTest(): array
+    {
+        return $this->convertImageFormatsToJpg('ai');
+    }
+
+    /**
+     * Convert to jpg from given input format
+     *
+     * @param string $inputFormat
+     * @return array
+     */
+    protected function convertImageFormatsToJpg(string $inputFormat): array
+    {
+        if (!$this->isImageMagickEnabledAndConfigured()) {
+            return [
+                'status' => [ $this->imageMagickDisabledMessage() ],
+            ];
+        }
+        if (!GeneralUtility::inList($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'], $inputFormat)) {
+            $message = new WarningStatus();
+            $message->setTitle('Skipped test');
+            $message->setMessage('Handling format ' . $inputFormat . ' must be enabled in TYPO3_CONF_VARS[\'GFX\'][\'imagefile_ext\']');
+            return [
+                'status' => [ $message ]
+            ];
+        }
+        $imageBasePath = ExtensionManagementUtility::extPath('install') . 'Resources/Public/Images/';
+        $imageProcessor = $this->initializeImageProcessor();
+        $inputFile = $imageBasePath . 'TestInput/Test.' . $inputFormat;
+        $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('read') . '-' . $inputFormat;
+        $imResult = $imageProcessor->imageMagickConvert($inputFile, 'jpg', '300', '', '', '', [], true);
+        $result = [];
+        if ($imResult !== null) {
+            $result = [
+                'fileExists' => file_exists($imResult[3]),
+                'outputFile' => $imResult[3],
+                'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Read-' . $inputFormat . '.jpg',
+                'command' => $imageProcessor->IM_commands,
+            ];
+        } else {
+            $result['status'] = [ $this->imageGenerationFailedMessage() ];
+        }
+        return $result;
+    }
+
+    /**
+     * Writing gif test
+     *
+     * @return array
+     */
+    protected function writeGifTest(): array
+    {
+        if (!$this->isImageMagickEnabledAndConfigured()) {
+            return [
+                'status' => [ $this->imageMagickDisabledMessage() ],
+            ];
+        }
+        $imageBasePath = ExtensionManagementUtility::extPath('install') . 'Resources/Public/Images/';
+        $inputFile = $imageBasePath . 'TestInput/Test.gif';
+        $imageProcessor = $this->initializeImageProcessor();
+        $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('write-gif');
+        $imResult = $imageProcessor->imageMagickConvert($inputFile, 'gif', '300', '', '', '', [], true);
+        $messages = [];
+        if ($imResult !== null && is_file($imResult[3])) {
+            if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gif_compress']) {
+                clearstatcache();
+                $previousSize = GeneralUtility::formatSize(filesize($imResult[3]));
+                $methodUsed = GraphicalFunctions::gifCompress($imResult[3], '');
+                clearstatcache();
+                $compressedSize = GeneralUtility::formatSize(filesize($imResult[3]));
+                $message = new InfoStatus();
+                $message->setTitle('Compressed gif');
+                $message->setMessage(
+                    'Method used by compress: ' . $methodUsed . LF
+                    . ' Previous filesize: ' . $previousSize . '. Current filesize:' . $compressedSize
+                );
+                $messages[] = $message;
+            } else {
+                $message = new InfoStatus();
+                $message->setTitle('Gif compression not enabled by [GFX][gif_compress]');
+                $messages[] = $message;
+            }
+            $result = [
+                'status' => $message,
+                'fileExists' => true,
+                'outputFile' => $imResult[3],
+                'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Write-gif.gif',
+                'command' => $imageProcessor->IM_commands,
+            ];
+        } else {
+            $result = [
+                'status' => [ $this->imageGenerationFailedMessage() ],
+            ];
+        }
+        return $result;
+    }
+
+    /**
+     * Writing png test
+     *
+     * @return array
+     */
+    protected function writePngTest(): array
+    {
+        if (!$this->isImageMagickEnabledAndConfigured()) {
+            return [
+                'status' => [ $this->imageMagickDisabledMessage() ],
+            ];
+        }
+        $imageBasePath = ExtensionManagementUtility::extPath('install') . 'Resources/Public/Images/';
+        $inputFile = $imageBasePath . 'TestInput/Test.png';
+        $imageProcessor = $this->initializeImageProcessor();
+        $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('write-png');
+        $imResult = $imageProcessor->imageMagickConvert($inputFile, 'png', '300', '', '', '', [], true);
+        if ($imResult !== null && is_file($imResult[3])) {
+            $result = [
+                'fileExists' => true,
+                'outputFile' => $imResult[3],
+                'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Write-png.png',
+                'command' => $imageProcessor->IM_commands,
+            ];
+        } else {
+            $result = [
+                'status' => [ $this->imageGenerationFailedMessage() ],
+            ];
+        }
+        return $result;
+    }
+
+    /**
+     * Scaling transparent files - gif to gif
+     *
+     * @return array
+     */
+    protected function gifToGifTest(): array
+    {
+        if (!$this->isImageMagickEnabledAndConfigured()) {
+            return [
+                'status' => [ $this->imageMagickDisabledMessage() ],
+            ];
+        }
+        $imageBasePath = ExtensionManagementUtility::extPath('install') . 'Resources/Public/Images/';
+        $imageProcessor = $this->initializeImageProcessor();
+        $inputFile = $imageBasePath . 'TestInput/Transparent.gif';
+        $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('scale-gif');
+        $imResult = $imageProcessor->imageMagickConvert($inputFile, 'gif', '300', '', '', '', [], true);
+        if ($imResult !== null && file_exists($imResult[3])) {
+            $result = [
+                'fileExists' => true,
+                'outputFile' => $imResult[3],
+                'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Scale-gif.gif',
+                'command' => $imageProcessor->IM_commands,
+            ];
+        } else {
+            $result = [
+                'status' => [ $this->imageGenerationFailedMessage() ],
+            ];
+        }
+        return $result;
+    }
+
+    /**
+     * Scaling transparent files - png to png
+     *
+     * @return array
+     */
+    protected function pngToPngTest(): array
+    {
+        if (!$this->isImageMagickEnabledAndConfigured()) {
+            return [
+                'status' => [ $this->imageMagickDisabledMessage() ],
+            ];
+        }
+        $imageBasePath = ExtensionManagementUtility::extPath('install') . 'Resources/Public/Images/';
+        $imageProcessor = $this->initializeImageProcessor();
+        $inputFile = $imageBasePath . 'TestInput/Transparent.png';
+        $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('scale-png');
+        $imResult = $imageProcessor->imageMagickConvert($inputFile, 'png', '300', '', '', '', [], true);
+        if ($imResult !== null && file_exists($imResult[3])) {
+            $result = [
+                'fileExists' => true,
+                'outputFile' => $imResult[3],
+                'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Scale-png.png',
+                'command' => $imageProcessor->IM_commands,
+            ];
+        } else {
+            $result = [
+                'status' => [ $this->imageGenerationFailedMessage() ],
+            ];
+        }
+        return $result;
+    }
+
+    /**
+     * Scaling transparent files - gif to jpg
+     *
+     * @return array
+     */
+    protected function gifToJpgTest(): array
+    {
+        if (!$this->isImageMagickEnabledAndConfigured()) {
+            return [
+                'status' => [ $this->imageMagickDisabledMessage() ],
+            ];
+        }
+        $imageBasePath = ExtensionManagementUtility::extPath('install') . 'Resources/Public/Images/';
+        $imageProcessor = $this->initializeImageProcessor();
+        $inputFile = $imageBasePath . 'TestInput/Transparent.gif';
+        $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('scale-jpg');
+        $imResult = $imageProcessor->imageMagickConvert($inputFile, 'jpg', '300', '', '-opaque white -background white -flatten', '', [], true);
+        if ($imResult !== null && file_exists($imResult[3])) {
+            $result = [
+                'fileExists' => true,
+                'outputFile' => $imResult[3],
+                'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Scale-jpg.jpg',
+                'command' => $imageProcessor->IM_commands,
+            ];
+        } else {
+            $result = [
+                'status' => [ $this->imageGenerationFailedMessage() ],
+            ];
+        }
+        return $result;
+    }
+
+    /**
+     * Combine images with gif mask
+     *
+     * @return array
+     */
+    protected function combineGifMaskTest(): array
+    {
+        if (!$this->isImageMagickEnabledAndConfigured()) {
+            return [
+                'status' => [ $this->imageMagickDisabledMessage() ],
+            ];
+        }
+        $imageBasePath = ExtensionManagementUtility::extPath('install') . 'Resources/Public/Images/';
+        $imageProcessor = $this->initializeImageProcessor();
+        $inputFile = $imageBasePath . 'TestInput/BackgroundOrange.gif';
+        $overlayFile = $imageBasePath . 'TestInput/Test.jpg';
+        $maskFile = $imageBasePath . 'TestInput/MaskBlackWhite.gif';
+        $resultFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix
+            . StringUtility::getUniqueId($imageProcessor->alternativeOutputKey . 'combine1') . '.jpg';
+        $imageProcessor->combineExec($inputFile, $overlayFile, $maskFile, $resultFile);
+        $imResult = $imageProcessor->getImageDimensions($resultFile);
+        if ($imResult) {
+            $result = [
+                'fileExists' => true,
+                'outputFile' => $imResult[3],
+                'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Combine-1.jpg',
+                'command' => $imageProcessor->IM_commands,
+            ];
+        } else {
+            $result = [
+                'status' => [ $this->imageGenerationFailedMessage() ],
+            ];
+        }
+        return $result;
+    }
+
+    /**
+     * Combine images with jpg mask
+     *
+     * @return array
+     */
+    protected function combineJpgMaskTest(): array
+    {
+        if (!$this->isImageMagickEnabledAndConfigured()) {
+            return [
+                'status' => [ $this->imageMagickDisabledMessage() ],
+            ];
+        }
+        $imageBasePath = ExtensionManagementUtility::extPath('install') . 'Resources/Public/Images/';
+        $imageProcessor = $this->initializeImageProcessor();
+        $inputFile = $imageBasePath . 'TestInput/BackgroundCombine.jpg';
+        $overlayFile = $imageBasePath . 'TestInput/Test.jpg';
+        $maskFile = $imageBasePath . 'TestInput/MaskCombine.jpg';
+        $resultFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix
+            . StringUtility::getUniqueId($imageProcessor->alternativeOutputKey . 'combine2') . '.jpg';
+        $imageProcessor->combineExec($inputFile, $overlayFile, $maskFile, $resultFile);
+        $imResult = $imageProcessor->getImageDimensions($resultFile);
+        if ($imResult) {
+            $result = [
+                'fileExists' => true,
+                'outputFile' => $imResult[3],
+                'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Combine-2.jpg',
+                'command' => $imageProcessor->IM_commands,
+            ];
+        } else {
+            $result = [
+                'status' => [ $this->imageGenerationFailedMessage() ],
+            ];
+        }
+        return $result;
+    }
+
+    /**
+     * GD with simple box
+     *
+     * @return array
+     */
+    protected function gdlibSimpleTest(): array
+    {
+        $imageProcessor = $this->initializeImageProcessor();
+        $gifOrPng = $imageProcessor->gifExtension;
+        $image = imagecreatetruecolor(300, 225);
+        $backgroundColor = imagecolorallocate($image, 0, 0, 0);
+        imagefilledrectangle($image, 0, 0, 300, 225, $backgroundColor);
+        $workArea = [0, 0, 300, 225];
+        $conf = [
+            'dimensions' => '10,50,280,50',
+            'color' => 'olive',
+        ];
+        $imageProcessor->makeBox($image, $conf, $workArea);
+        $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('gdSimple') . '.' . $gifOrPng;
+        $imageProcessor->ImageWrite($image, $outputFile);
+        $imResult = $imageProcessor->getImageDimensions($outputFile);
+        $result = [
+            'fileExists' => true,
+            'outputFile' => $imResult[3],
+            'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-simple.' . $gifOrPng,
+            'command' => $imageProcessor->IM_commands,
+        ];
+        return $result;
+    }
+
+    /**
+     * GD from image with box
+     *
+     * @return array
+     */
+    protected function gdlibFromFileTest(): array
+    {
+        $imageProcessor = $this->initializeImageProcessor();
+        $gifOrPng = $imageProcessor->gifExtension;
+        $imageBasePath = ExtensionManagementUtility::extPath('install') . 'Resources/Public/Images/';
+        $inputFile = $imageBasePath . 'TestInput/Test.' . $gifOrPng;
+        $image = $imageProcessor->imageCreateFromFile($inputFile);
+        $workArea = [0, 0, 400, 300];
+        $conf = [
+            'dimensions' => '10,50,380,50',
+            'color' => 'olive',
+        ];
+        $imageProcessor->makeBox($image, $conf, $workArea);
+        $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('gdBox') . '.' . $gifOrPng;
+        $imageProcessor->ImageWrite($image, $outputFile);
+        $imResult = $imageProcessor->getImageDimensions($outputFile);
+        $result = [
+            'fileExists' => true,
+            'outputFile' => $imResult[3],
+            'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-box.' . $gifOrPng,
+            'command' => $imageProcessor->IM_commands,
+        ];
+        return $result;
+    }
+
+    /**
+     * GD with text
+     *
+     * @return array
+     */
+    protected function gdlibRenderTextTest(): array
+    {
+        $imageProcessor = $this->initializeImageProcessor();
+        $gifOrPng = $imageProcessor->gifExtension;
+        $image = imagecreatetruecolor(300, 225);
+        $backgroundColor = imagecolorallocate($image, 128, 128, 150);
+        imagefilledrectangle($image, 0, 0, 300, 225, $backgroundColor);
+        $workArea = [0, 0, 300, 225];
+        $conf = [
+            'iterations' => 1,
+            'angle' => 0,
+            'antiAlias' => 1,
+            'text' => 'HELLO WORLD',
+            'fontColor' => '#003366',
+            'fontSize' => 30,
+            'fontFile' => ExtensionManagementUtility::extPath('install') . 'Resources/Private/Font/vera.ttf',
+            'offset' => '30,80',
+        ];
+        $conf['BBOX'] = $imageProcessor->calcBBox($conf);
+        $imageProcessor->makeText($image, $conf, $workArea);
+        $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('gdText') . '.' . $gifOrPng;
+        $imageProcessor->ImageWrite($image, $outputFile);
+        $imResult = $imageProcessor->getImageDimensions($outputFile);
+        $result = [
+            'fileExists' => true,
+            'outputFile' => $imResult[3],
+            'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-text.' . $gifOrPng,
+            'command' => $imageProcessor->IM_commands,
+        ];
+        return $result;
+    }
+
+    /**
+     * GD with text, niceText
+     *
+     * @return array
+     */
+    protected function gdlibNiceTextTest(): array
+    {
+        if (!$this->isImageMagickEnabledAndConfigured()) {
+            return [
+                'status' => [ $this->imageMagickDisabledMessage() ],
+            ];
+        }
+        $imageProcessor = $this->initializeImageProcessor();
+        $gifOrPng = $imageProcessor->gifExtension;
+        $image = imagecreatetruecolor(300, 225);
+        $backgroundColor = imagecolorallocate($image, 128, 128, 150);
+        imagefilledrectangle($image, 0, 0, 300, 225, $backgroundColor);
+        $workArea = [0, 0, 300, 225];
+        $conf = [
+            'iterations' => 1,
+            'angle' => 0,
+            'antiAlias' => 1,
+            'text' => 'HELLO WORLD',
+            'fontColor' => '#003366',
+            'fontSize' => 30,
+            'fontFile' => ExtensionManagementUtility::extPath('install') . 'Resources/Private/Font/vera.ttf',
+            'offset' => '30,80',
+        ];
+        $conf['BBOX'] = $imageProcessor->calcBBox($conf);
+        $imageProcessor->makeText($image, $conf, $workArea);
+        $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('gdText') . '.' . $gifOrPng;
+        $imageProcessor->ImageWrite($image, $outputFile);
+        $conf['offset'] = '30,120';
+        $conf['niceText'] = 1;
+        $imageProcessor->makeText($image, $conf, $workArea);
+        $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('gdNiceText') . '.' . $gifOrPng;
+        $imageProcessor->ImageWrite($image, $outputFile);
+        $imResult = $imageProcessor->getImageDimensions($outputFile);
+        $result = [
+            'fileExists' => true,
+            'outputFile' => $imResult[3],
+            'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-niceText.' . $gifOrPng,
+            'command' => $imageProcessor->IM_commands,
+        ];
+        return $result;
+    }
+
+    /**
+     * GD with text, niceText, shadow
+     *
+     * @return array
+     */
+    protected function gdlibNiceTextShadowTest(): array
+    {
+        if (!$this->isImageMagickEnabledAndConfigured()) {
+            return [
+                'status' => [ $this->imageMagickDisabledMessage() ],
+            ];
+        }
+        $imageProcessor = $this->initializeImageProcessor();
+        $gifOrPng = $imageProcessor->gifExtension;
+        $image = imagecreatetruecolor(300, 225);
+        $backgroundColor = imagecolorallocate($image, 128, 128, 150);
+        imagefilledrectangle($image, 0, 0, 300, 225, $backgroundColor);
+        $workArea = [0, 0, 300, 225];
+        $conf = [
+            'iterations' => 1,
+            'angle' => 0,
+            'antiAlias' => 1,
+            'text' => 'HELLO WORLD',
+            'fontColor' => '#003366',
+            'fontSize' => 30,
+            'fontFile' => ExtensionManagementUtility::extPath('install') . 'Resources/Private/Font/vera.ttf',
+            'offset' => '30,80',
+        ];
+        $conf['BBOX'] = $imageProcessor->calcBBox($conf);
+        $imageProcessor->makeText($image, $conf, $workArea);
+        $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('gdText') . '.' . $gifOrPng;
+        $imageProcessor->ImageWrite($image, $outputFile);
+        $conf['offset'] = '30,120';
+        $conf['niceText'] = 1;
+        $imageProcessor->makeText($image, $conf, $workArea);
+        $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('gdNiceText') . '.' . $gifOrPng;
+        $imageProcessor->ImageWrite($image, $outputFile);
+        $conf['offset'] = '30,160';
+        $conf['niceText'] = 1;
+        $conf['shadow.'] = [
+            'offset' => '2,2',
+            'blur' => $imageProcessor->NO_IM_EFFECTS ? '90' : '20',
+            'opacity' => '50',
+            'color' => 'black'
+        ];
+        // Warning: Re-uses $image from above!
+        $imageProcessor->makeShadow($image, $conf['shadow.'], $workArea, $conf);
+        $imageProcessor->makeText($image, $conf, $workArea);
+        $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('GDwithText-niceText-shadow') . '.' . $gifOrPng;
+        $imageProcessor->ImageWrite($image, $outputFile);
+        $imResult = $imageProcessor->getImageDimensions($outputFile);
+        $result = [
+            'fileExists' => true,
+            'outputFile' => $imResult[3],
+            'referenceFile' => PATH_site . 'typo3/sysext/install/Resources/Public/Images/TestReference/Gdlib-shadow.' . $gifOrPng,
+            'command' => $imageProcessor->IM_commands,
+        ];
+        return $result;
+    }
+
+    /**
+     * Initialize image processor
+     *
+     * @return GraphicalFunctions Initialized image processor
+     */
+    protected function initializeImageProcessor(): GraphicalFunctions
+    {
+        $imageProcessor = GeneralUtility::makeInstance(GraphicalFunctions::class);
+        $imageProcessor->init();
+        $imageProcessor->absPrefix = PATH_site;
+        $imageProcessor->dontCheckForExistingTempFile = 1;
+        $imageProcessor->filenamePrefix = 'installTool-';
+        $imageProcessor->dontCompress = 1;
+        $imageProcessor->alternativeOutputKey = 'typo3InstallTest';
+        $imageProcessor->noFramePrepended = $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_allowFrameSelection'];
+        return $imageProcessor;
+    }
+
+    /**
+     * Create a 'image generation failed' message
+     *
+     * @return StatusInterface
+     */
+    protected function imageGenerationFailedMessage(): StatusInterface
+    {
+        /** @var StatusInterface $message */
+        $message = GeneralUtility::makeInstance(ErrorStatus::class);
+        $message->setTitle('Image generation failed');
+        $message->setMessage(
+            'ImageMagick / GraphicsMagick handling is enabled, but the execute'
+            . ' command returned an error. Please check your settings, especially'
+            . ' [\'GFX\'][\'processor_path\'] and [\'GFX\'][\'processor_path_lzw\'] and ensure Ghostscript is installed on your server.'
+        );
+        return $message;
+    }
+
+    /**
+     * Find out if ImageMagick or GraphicsMagick is enabled and set up
+     *
+     * @return bool TRUE if enabled and path is set
+     */
+    protected function isImageMagickEnabledAndConfigured(): bool
+    {
+        $enabled = $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_enabled'];
+        $path = $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_path'];
+        return $enabled && $path;
+    }
+
+    /**
+     * Create a 'imageMagick disabled' message
+     *
+     * @return StatusInterface
+     */
+    protected function imageMagickDisabledMessage(): StatusInterface
+    {
+        $message = new ErrorStatus();
+        $message->setTitle('Tests not executed');
+        $message->setMessage('ImageMagick / GraphicsMagick handling is disabled or not configured correctly.');
+        return $message;
+    }
+
+    /**
+     * Return the temp image dir.
+     * If not exist it will be created
+     *
+     * @param GraphicalFunctions $imageProcessor
+     * @return string
+     */
+    protected function getImagesPath(GraphicalFunctions $imageProcessor): string
+    {
+        $imagePath = $imageProcessor->absPrefix . 'typo3temp/assets/images/';
+        if (!is_dir($imagePath)) {
+            GeneralUtility::mkdir_deep($imagePath);
+        }
+        return $imagePath;
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/LocalConfigurationWrite.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/LocalConfigurationWrite.php
new file mode 100644
index 000000000000..952f80247ec4
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/LocalConfigurationWrite.php
@@ -0,0 +1,55 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\LocalConfigurationValueService;
+use TYPO3\CMS\Install\Status\WarningStatus;
+
+/**
+ * Write values to LocalConfiguration
+ */
+class LocalConfigurationWrite extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        if (!is_array($this->postValues['configurationValues']) || empty($this->postValues['configurationValues'])) {
+            throw new \RuntimeException(
+                'Expected value array not found',
+                1502282283
+            );
+        }
+
+        $localConfigurationValueService = new LocalConfigurationValueService();
+        $messages = $localConfigurationValueService->updateLocalConfigurationValues($this->postValues['configurationValues']);
+
+        if (empty($messages)) {
+            $message = new WarningStatus();
+            $message->setTitle('No values changed');
+            $messages[] = $message;
+        }
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/MailTest.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/MailTest.php
new file mode 100644
index 000000000000..3a4a43c4f078
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/MailTest.php
@@ -0,0 +1,106 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Mail\MailMessage;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Status\ErrorStatus;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Send a test mail
+ */
+class MailTest extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $messages = [];
+        $recipient = $this->postValues['email'];
+        if (empty($recipient) || !GeneralUtility::validEmail($recipient)) {
+            $message = new ErrorStatus();
+            $message->setTitle('Mail not sent');
+            $message->setMessage('Given address is not a valid email address.');
+            $messages[] = $message;
+        } else {
+            $mailMessage = GeneralUtility::makeInstance(MailMessage::class);
+            $mailMessage
+                ->addTo($recipient)
+                ->addFrom($this->getSenderEmailAddress(), $this->getSenderEmailName())
+                ->setSubject($this->getEmailSubject())
+                ->setBody('<html><body>html test content</body></html>', 'text/html')
+                ->addPart('TEST CONTENT')
+                ->send();
+            $message = new OkStatus();
+            $message->setTitle('Test mail sent');
+            $message->setMessage('Recipient: ' . $recipient);
+            $messages[] = $message;
+        }
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+        return $this->view->render();
+    }
+
+    /**
+     * Get sender address from configuration
+     * ['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress']
+     * If this setting is empty fall back to 'no-reply@example.com'
+     *
+     * @return string Returns an email address
+     */
+    protected function getSenderEmailAddress(): string
+    {
+        return !empty($GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress'])
+            ? $GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress']
+            : 'no-reply@example.com';
+    }
+
+    /**
+     * Gets sender name from configuration
+     * ['TYPO3_CONF_VARS']['MAIL']['defaultMailFromName']
+     * If this setting is empty, it falls back to a default string.
+     *
+     * @return string
+     */
+    protected function getSenderEmailName(): string
+    {
+        return !empty($GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromName'])
+            ? $GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromName']
+            : 'TYPO3 CMS install tool';
+    }
+
+    /**
+     * Gets email subject from configuration
+     * ['TYPO3_CONF_VARS']['SYS']['sitename']
+     * If this setting is empty, it falls back to a default string.
+     *
+     * @return string
+     */
+    protected function getEmailSubject(): string
+    {
+        $name = !empty($GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'])
+            ? ' from site "' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . '"'
+            : '';
+        return 'Test TYPO3 CMS mail delivery' . $name;
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/PresetActivate.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/PresetActivate.php
new file mode 100644
index 000000000000..590af01ab8ad
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/PresetActivate.php
@@ -0,0 +1,60 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Configuration\ConfigurationManager;
+use TYPO3\CMS\Install\Configuration\FeatureManager;
+use TYPO3\CMS\Install\Status\InfoStatus;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Activate a LocalConfiguration preset
+ */
+class PresetActivate extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $messages = [];
+        $configurationManager = new ConfigurationManager();
+        $featureManager = new FeatureManager();
+        $configurationValues = $featureManager->getConfigurationForSelectedFeaturePresets($this->postValues['values']);
+        if (!empty($configurationValues)) {
+            $configurationManager->setLocalConfigurationValuesByPathValuePairs($configurationValues);
+            $message = new OkStatus();
+            $message->setTitle('Configuration written');
+            $messageBody = [];
+            foreach ($configurationValues as $configurationKey => $configurationValue) {
+                $messageBody[] = '\'' . $configurationKey . '\' => \'' . $configurationValue . '\'';
+            }
+            $message->setMessage(implode('<br>', $messageBody));
+        } else {
+            $message = new InfoStatus();
+            $message->setTitle('No configuration change selected');
+        }
+        $messages[] = $message;
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/ResetBackendUserUc.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/ResetBackendUserUc.php
index 186389264b77..1077977edf24 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/ResetBackendUserUc.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/ResetBackendUserUc.php
@@ -1,6 +1,5 @@
 <?php
 declare(strict_types=1);
-
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -20,34 +19,12 @@ use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Install\Status\OkStatus;
 use TYPO3\CMS\Install\Status\StatusInterface;
-use TYPO3\CMS\Install\View\JsonView;
 
 /**
- * ResetBackendUserUc
- *
- * This is an ajax wrapper for Reset backend user preferences
+ * Ajax wrapper to reset backend user preferences
  */
 class ResetBackendUserUc extends AbstractAjaxAction
 {
-
-    /**
-     * @param JsonView $view
-     * @throws \InvalidArgumentException
-     */
-    public function __construct(JsonView $view = null)
-    {
-        $this->view = $view ?: GeneralUtility::makeInstance(JsonView::class);
-    }
-
-    /**
-     * Initialize the handle action, sets up fluid stuff and assigns default variables.
-     * @ToDo Refactor View Initialization for all Ajax Controllers
-     */
-    protected function initializeHandle()
-    {
-        // empty on purpose because AbstractAjaxAction still overwrites $this->view with StandaloneView
-    }
-
     /**
      * Executes the action
      *
@@ -78,8 +55,7 @@ class ResetBackendUserUc extends AbstractAjaxAction
             ->update('be_users')
             ->set('uc', '')
             ->execute();
-        /** @var OkStatus $message */
-        $message = GeneralUtility::makeInstance(OkStatus::class);
+        $message = new OkStatus();
         $message->setTitle('Reset all backend users preferences');
         return $message;
     }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/TcaExtTablesCheck.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/TcaExtTablesCheck.php
index 2bb5595128f5..bca3f4d1a4c7 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/TcaExtTablesCheck.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/TcaExtTablesCheck.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -17,8 +18,6 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Install\Service\LoadTcaService;
 use TYPO3\CMS\Install\Status\NoticeStatus;
-use TYPO3\CMS\Install\Status\StatusInterface;
-use TYPO3\CMS\Install\View\JsonView;
 
 /**
  * Check ext_tables.php files of loaded extensions for TCA changes.
@@ -31,42 +30,18 @@ use TYPO3\CMS\Install\View\JsonView;
  */
 class TcaExtTablesCheck extends AbstractAjaxAction
 {
-
-    /**
-     * @var \TYPO3\CMS\Install\View\JsonView
-     */
-    protected $view;
-
-    /**
-     * @param JsonView $view
-     */
-    public function __construct(JsonView $view = null)
-    {
-        $this->view = $view ?: GeneralUtility::makeInstance(JsonView::class);
-    }
-
-    /**
-     * Initialize the handle action, sets up fluid stuff and assigns default variables.
-     * @ToDo Refactor View Initialization for all Ajax Controllers
-     */
-    protected function initializeHandle()
-    {
-        // empty on purpose because AbstractAjaxAction still overwrites $this->view with StandaloneView
-    }
-
     /**
      * Fetches all installed extensions that still mess with the TCA in a way they shouldn't
      *
      * @return array status list of extensions that still mess with the TCA
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         $statusMessages = [];
         $tcaMessages = $this->checkTcaChangesInExtTables();
 
         foreach ($tcaMessages as $tcaMessage) {
-            /** @var $message StatusInterface */
-            $message = GeneralUtility::makeInstance(NoticeStatus::class);
+            $message = new NoticeStatus();
             $message->setTitle($tcaMessage);
             $statusMessages[] = $message;
         }
@@ -83,12 +58,12 @@ class TcaExtTablesCheck extends AbstractAjaxAction
      *
      * @return array list of extensions that still mess with the tca
      */
-    protected function checkTcaChangesInExtTables()
+    protected function checkTcaChangesInExtTables(): array
     {
         $loadTcaService = GeneralUtility::makeInstance(LoadTcaService::class);
         $loadTcaService->loadExtensionTablesWithoutMigration();
         $baseTca = $GLOBALS['TCA'];
-        $messages = [];
+        $extensions = [];
         foreach ($GLOBALS['TYPO3_LOADED_EXT'] as $extensionKey => $extensionInformation) {
             if ((is_array($extensionInformation) || $extensionInformation instanceof \ArrayAccess)
                 && $extensionInformation['ext_tables.php']
@@ -96,11 +71,11 @@ class TcaExtTablesCheck extends AbstractAjaxAction
                 $loadTcaService->loadSingleExtTablesFile($extensionKey);
                 $newTca = $GLOBALS['TCA'];
                 if ($newTca !== $baseTca) {
-                    $messages[] = $extensionKey;
+                    $extensions[] = $extensionKey;
                 }
                 $baseTca = $newTca;
             }
         }
-        return $messages;
+        return $extensions;
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/TcaMigrationsCheck.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/TcaMigrationsCheck.php
index 8e65459e281d..fc83b5c132de 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/TcaMigrationsCheck.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/TcaMigrationsCheck.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -18,49 +19,24 @@ use TYPO3\CMS\Core\Migrations\TcaMigration;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Install\Service\LoadTcaService;
 use TYPO3\CMS\Install\Status\NoticeStatus;
-use TYPO3\CMS\Install\Status\StatusInterface;
-use TYPO3\CMS\Install\View\JsonView;
 
 /**
  * Checks whether the current TCA needs migrations and displays applied migrations.
  */
 class TcaMigrationsCheck extends AbstractAjaxAction
 {
-    /**
-     * @var \TYPO3\CMS\Install\View\JsonView
-     */
-    protected $view;
-
-    /**
-     * @param JsonView $view
-     */
-    public function __construct(JsonView $view = null)
-    {
-        $this->view = $view ?: GeneralUtility::makeInstance(JsonView::class);
-    }
-
-    /**
-     * Initialize the handle action, sets up fluid stuff and assigns default variables.
-     * @ToDo Refactor View Initialization for all Ajax Controllers
-     */
-    protected function initializeHandle()
-    {
-        // empty on purpose because AbstractAjaxAction still overwrites $this->view with StandaloneView
-    }
-
     /**
      * Load all TCA Migrations and return if there are any todos
      *
      * @return array TCA status messages
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         $statusMessages = [];
         $tcaMessages = $this->checkTcaMigrations();
 
         foreach ($tcaMessages as $tcaMessage) {
-            /** @var $message StatusInterface */
-            $message = GeneralUtility::makeInstance(NoticeStatus::class);
+            $message = new NoticeStatus();
             $message->setMessage($tcaMessage);
             $statusMessages[] = $message;
         }
@@ -77,7 +53,7 @@ class TcaMigrationsCheck extends AbstractAjaxAction
      *
      * @return array The TCA migration messages
      */
-    protected function checkTcaMigrations()
+    protected function checkTcaMigrations(): array
     {
         GeneralUtility::makeInstance(LoadTcaService::class)->loadExtensionTablesWithoutMigration();
         $tcaMigration = GeneralUtility::makeInstance(TcaMigration::class);
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/UninstallExtension.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UninstallExtension.php
index 214c5c4bf04c..c30c2d8456f6 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/UninstallExtension.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UninstallExtension.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -16,6 +17,7 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Status\ErrorStatus;
 
 /**
  * Uninstall Extensions
@@ -33,9 +35,9 @@ class UninstallExtension extends AbstractAjaxAction
      * Uninstall one or multiple extensions
      * Extension keys are read from get vars, more than one extension has to be comma separated
      *
-     * @return string "OK" on success, the error message otherwise
+     * @return array
      */
-    protected function executeAction()
+    protected function executeAction(): array
     {
         $getVars = GeneralUtility::_GET('install');
         if (isset($getVars['uninstallExtension']) && isset($getVars['uninstallExtension']['extensions'])) {
@@ -45,11 +47,18 @@ class UninstallExtension extends AbstractAjaxAction
                     try {
                         ExtensionManagementUtility::unloadExtension($extension);
                     } catch (\Exception $e) {
-                        return $e->getMessage();
+                        $message = new ErrorStatus();
+                        $message->setMessage($e->getMessage());
+                        return [
+                            'success' => true,
+                            'status' => [ $message ],
+                        ];
                     }
                 }
             }
         }
-        return 'OK';
+        return [
+            'success' => true,
+        ];
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/SaveIgnoredItems.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeDocsMarkRead.php
similarity index 85%
rename from typo3/sysext/install/Classes/Controller/Action/Ajax/SaveIgnoredItems.php
rename to typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeDocsMarkRead.php
index ca050d239081..8d142bcacf96 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/SaveIgnoredItems.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeDocsMarkRead.php
@@ -1,6 +1,5 @@
 <?php
 declare(strict_types=1);
-
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -15,26 +14,28 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
  *
  * The TYPO3 project - inspiring people to share!
  */
+
 use TYPO3\CMS\Core\Registry;
 
 /**
  * Save ignored documentation file items and hide them from display
  */
-class SaveIgnoredItems extends AbstractAjaxAction
+class UpgradeDocsMarkRead extends AbstractAjaxAction
 {
-
     /**
      * Executes the action
      *
      * @return string content
      * @throws \InvalidArgumentException
      */
-    protected function executeAction(): string
+    protected function executeAction(): array
     {
         $registry = new Registry();
         $filePath = $this->postValues['ignoreFile'];
         $fileHash = md5_file($filePath);
         $registry->set('upgradeAnalysisIgnoredFiles', $fileHash, $filePath);
-        return json_encode('');
+        return [
+            'success' => true,
+        ];
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/RemoveIgnoredItems.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeDocsUnmarkRead.php
similarity index 85%
rename from typo3/sysext/install/Classes/Controller/Action/Ajax/RemoveIgnoredItems.php
rename to typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeDocsUnmarkRead.php
index 972e68b8400f..f1cc0e421fbc 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Ajax/RemoveIgnoredItems.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeDocsUnmarkRead.php
@@ -1,6 +1,5 @@
 <?php
 declare(strict_types=1);
-
 namespace TYPO3\CMS\Install\Controller\Action\Ajax;
 
 /*
@@ -15,26 +14,28 @@ namespace TYPO3\CMS\Install\Controller\Action\Ajax;
  *
  * The TYPO3 project - inspiring people to share!
  */
+
 use TYPO3\CMS\Core\Registry;
 
 /**
  * Remove ignored items from registry and therefor bring them back
  */
-class RemoveIgnoredItems extends AbstractAjaxAction
+class UpgradeDocsUnmarkRead extends AbstractAjaxAction
 {
-
     /**
      * Executes the action
      *
      * @return string Rendered content
      * @throws \InvalidArgumentException
      */
-    protected function executeAction(): string
+    protected function executeAction(): array
     {
         $registry = new Registry();
         $filePath = $this->postValues['ignoreFile'];
         $fileHash = md5_file($filePath);
         $registry->remove('upgradeAnalysisIgnoredFiles', $fileHash);
-        return json_encode('');
+        return [
+            'success' => true,
+        ];
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseAdds.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseAdds.php
new file mode 100644
index 000000000000..2e139844a309
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseAdds.php
@@ -0,0 +1,51 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\UpgradeWizardsService;
+
+/**
+ * "Blocking" upgrade to add missing fields + tables to DB.
+ * This one must be green before others can be executed
+ */
+class UpgradeWizardsBlockingDatabaseAdds extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        // ext_localconf, db and ext_tables must be loaded for the updates :(
+        $this->loadExtLocalconfDatabaseAndExtTables();
+
+        $upgradeWizardsService = new UpgradeWizardsService();
+        $adds = $upgradeWizardsService->getBlockingDatabaseAdds();
+
+        $needsUpdate = false;
+        if (!empty($adds)) {
+            $needsUpdate = true;
+        }
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'needsUpdate' => $needsUpdate,
+            'adds' => $adds,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseCharsetFix.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseCharsetFix.php
new file mode 100644
index 000000000000..6d1f18ba64c3
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseCharsetFix.php
@@ -0,0 +1,47 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\UpgradeWizardsService;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Set default connection MySQL database charset to utf8.
+ */
+class UpgradeWizardsBlockingDatabaseCharsetFix extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $upgradeWizardsService = new UpgradeWizardsService();
+        $upgradeWizardsService->setDatabaseCharsetUtf8();
+
+        $messages = [];
+        $message = new OkStatus();
+        $message->setTitle('Default connection database has been set to utf8');
+        $messages[] = $message;
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseCharsetTest.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseCharsetTest.php
new file mode 100644
index 000000000000..6efc31e7d23a
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseCharsetTest.php
@@ -0,0 +1,42 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\UpgradeWizardsService;
+
+/**
+ * "Blocking" upgrade to add missing fields + tables to DB.
+ * This one must be green before others can be executed
+ */
+class UpgradeWizardsBlockingDatabaseCharsetTest extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $upgradeWizardsService = new UpgradeWizardsService();
+        $result = $upgradeWizardsService->isDatabaseCharsetUtf8();
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'needsUpdate' => $result,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseExecute.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseExecute.php
new file mode 100644
index 000000000000..3fba43e2e35e
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsBlockingDatabaseExecute.php
@@ -0,0 +1,51 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\UpgradeWizardsService;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Execute "Add required db tables and fields" blocking upgrade wizard
+ * to add them
+ */
+class UpgradeWizardsBlockingDatabaseExecute extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        // ext_localconf, db and ext_tables must be loaded for the updates :(
+        $this->loadExtLocalconfDatabaseAndExtTables();
+
+        $upgradeWizardsService = new UpgradeWizardsService();
+        $upgradeWizardsService->addMissingTablesAndFields();
+
+        $messages = [];
+        $message = new OkStatus();
+        $message->setTitle('Added missing database fields and tables');
+        $messages[] = $message;
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsDoneUpgrades.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsDoneUpgrades.php
new file mode 100644
index 000000000000..50ff5b8ecbcc
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsDoneUpgrades.php
@@ -0,0 +1,54 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\UpgradeWizardsService;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Get a list of wizards and row updaters marked as "done" in registry
+ */
+class UpgradeWizardsDoneUpgrades extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $this->loadExtLocalconfDatabaseAndExtTables();
+
+        $upgradeWizardsService = new UpgradeWizardsService();
+        $wizardsDone = $upgradeWizardsService->listOfWizardsDoneInRegistry();
+        $rowUpdatersDone = $upgradeWizardsService->listOfRowUpdatersDoneInRegistry();
+
+        $messages = [];
+        if (empty($wizardsDone) && empty($rowUpdatersDone)) {
+            $message = new OkStatus();
+            $message->setTitle('No wizards are marked as done');
+            $messages[] = $message;
+        }
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+            'wizardsDone' => $wizardsDone,
+            'rowUpdatersDone' => $rowUpdatersDone,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsExecute.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsExecute.php
new file mode 100644
index 000000000000..2cd0c0c38355
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsExecute.php
@@ -0,0 +1,46 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\UpgradeWizardsService;
+
+/**
+ * Execute a specific upgrade wizard
+ */
+class UpgradeWizardsExecute extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        // ext_localconf, db and ext_tables must be loaded for the updates :(
+        $this->loadExtLocalconfDatabaseAndExtTables();
+
+        $upgradeWizardsService = new UpgradeWizardsService();
+
+        $identifier = $this->postValues['identifier'];
+        $messages = $upgradeWizardsService->executeWizard($identifier);
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsInput.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsInput.php
new file mode 100644
index 000000000000..3057049979e1
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsInput.php
@@ -0,0 +1,48 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\UpgradeWizardsService;
+
+/**
+ * Get user input of a specific upgrade wizard
+ */
+class UpgradeWizardsInput extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        // ext_localconf, db and ext_tables must be loaded for the updates :(
+        $this->loadExtLocalconfDatabaseAndExtTables();
+
+        $upgradeWizardsService = new UpgradeWizardsService();
+
+        $identifier = $this->postValues['identifier'];
+        $result = $upgradeWizardsService->getWizardUserInput($identifier);
+
+        $messages = [];
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+            'userInput' => $result,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsList.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsList.php
new file mode 100644
index 000000000000..16d678d05899
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsList.php
@@ -0,0 +1,46 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\UpgradeWizardsService;
+
+/**
+ * List available wizards to execute
+ */
+class UpgradeWizardsList extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        // ext_localconf, db and ext_tables must be loaded for the updates :(
+        $this->loadExtLocalconfDatabaseAndExtTables();
+
+        $upgradeWizardsService = new UpgradeWizardsService();
+        $wizards = $upgradeWizardsService->getUpgradeWizardsList();
+
+        $messages = [];
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+            'wizards' => $wizards,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsMarkUndone.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsMarkUndone.php
new file mode 100644
index 000000000000..455fb9dd47ee
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsMarkUndone.php
@@ -0,0 +1,58 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\UpgradeWizardsService;
+use TYPO3\CMS\Install\Status\ErrorStatus;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Mark a wizard as undone in registry. Can be either a
+ * casual wizard, or a "row updater" wizard.
+ */
+class UpgradeWizardsMarkUndone extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        $this->loadExtLocalconfDatabaseAndExtTables();
+
+        $wizardToBeMarkedAsUndoneIdentifier = $this->postValues['identifier'];
+        $upgradeWizardsService = new UpgradeWizardsService();
+        $result = $upgradeWizardsService->markWizardUndoneInRegistry($wizardToBeMarkedAsUndoneIdentifier);
+
+        $messages = [];
+        if ($result) {
+            $message = new OkStatus();
+            $message->setTitle('Wizard has been marked undone');
+            $messages[] = $message;
+        } else {
+            $message = new ErrorStatus();
+            $message->setTitle('Wizard has not been marked undone');
+            $messages[] = $message;
+        }
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsSilentUpgrades.php b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsSilentUpgrades.php
new file mode 100644
index 000000000000..cc77d562dab1
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Ajax/UpgradeWizardsSilentUpgrades.php
@@ -0,0 +1,53 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Ajax;
+
+/*
+ * 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\Install\Service\UpgradeWizardsService;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Perform "silent" wizard upgrades on first opening of the card
+ */
+class UpgradeWizardsSilentUpgrades extends AbstractAjaxAction
+{
+    /**
+     * Executes the action
+     *
+     * @return array Rendered content
+     */
+    protected function executeAction(): array
+    {
+        // ext_localconf, db and ext_tables must be loaded for the updates :(
+        $this->loadExtLocalconfDatabaseAndExtTables();
+
+        // Perform silent cache framework table upgrade
+        $upgradeWizardsService = new UpgradeWizardsService();
+        $statements = $upgradeWizardsService->silentCacheFrameworkTableSchemaMigration();
+
+        $messages = [];
+        if (!empty($statements)) {
+            $message = new OkStatus();
+            $message->setTitle('Created some database cache tables.');
+            $messages[] = $message;
+        }
+
+        $this->view->assignMultiple([
+            'success' => true,
+            'status' => $messages,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/AllConfiguration.php b/typo3/sysext/install/Classes/Controller/Action/Tool/AllConfiguration.php
deleted file mode 100644
index bd2c53743ec7..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/AllConfiguration.php
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Tool;
-
-/*
- * 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\Utility\GeneralUtility;
-use TYPO3\CMS\Install\Controller\Action;
-
-/**
- * Show system environment check results
- */
-class AllConfiguration extends Action\AbstractAction
-{
-    /**
-     * Error handlers are a bit mask in PHP. This register hints the View to
-     * add a fluid view helper resolving the bit mask to its representation
-     * as constants again for the specified items in ['SYS'].
-     *
-     * @var array
-     */
-    protected $phpErrorCodesSettings = [
-        'errorHandlerErrors',
-        'exceptionalErrors',
-        'syslogErrorReporting',
-        'belogErrorReporting',
-    ];
-
-    /**
-     * Executes the tool
-     *
-     * @return string Rendered content
-     */
-    protected function executeAction()
-    {
-        if (isset($this->postValues['set']['write'])) {
-            $this->view->assign('configurationValuesSaved', true);
-            $this->view->assign('savedConfigurationValueMessages', $this->updateLocalConfigurationValues());
-        } else {
-            $this->view->assign('sectionNames', $this->getSpeakingSectionNames());
-            $this->view->assign('data', $this->setUpConfigurationData());
-        }
-
-        return $this->view->render();
-    }
-
-    /**
-     * Returns an array of available sections and their description
-     *
-     * @return string[]
-     */
-    protected function getSpeakingSectionNames()
-    {
-        return [
-            'BE' => 'Backend',
-            'DB' => 'Database',
-            'EXT' => 'Extension Installation',
-            'FE' => 'Frontend',
-            'GFX' => 'Image Processing',
-            'HTTP' => 'Connection',
-            'MAIL' => 'Mail',
-            'SYS' => 'System'
-        ];
-    }
-
-    /**
-     * Set up configuration data
-     *
-     * @return array Configuration data
-     */
-    protected function setUpConfigurationData()
-    {
-        $data = [];
-        $typo3ConfVars = array_keys($GLOBALS['TYPO3_CONF_VARS']);
-        sort($typo3ConfVars);
-        $commentArray = $this->getDefaultConfigArrayComments();
-        foreach ($typo3ConfVars as $sectionName) {
-            $data[$sectionName] = [];
-
-            foreach ($GLOBALS['TYPO3_CONF_VARS'][$sectionName] as $key => $value) {
-                $description = trim($commentArray[$sectionName][$key]);
-                $isTextarea = (bool)preg_match('/^(<.*?>)?string \\(textarea\\)/i', $description);
-                $doNotRender = (bool)preg_match('/^(<.*?>)?string \\(exclude\\)/i', $description);
-
-                if (!is_array($value) && !$doNotRender && (!preg_match('/[' . LF . CR . ']/', $value) || $isTextarea)) {
-                    $itemData = [];
-                    $itemData['key'] = $key;
-                    $itemData['description'] = $description;
-                    if ($isTextarea) {
-                        $itemData['type'] = 'textarea';
-                        $itemData['value'] = str_replace(['\' . LF . \'', '\' . LF . \''], [LF, LF], $value);
-                    } elseif (preg_match('/^(<.*?>)?boolean/i', $description)) {
-                        $itemData['type'] = 'checkbox';
-                        $itemData['value'] = $value ? '1' : '0';
-                        $itemData['checked'] = (bool)$value;
-                    } elseif (preg_match('/^(<.*?>)?integer/i', $description)) {
-                        $itemData['type'] = 'number';
-                        $itemData['value'] = (int)$value;
-                    } else {
-                        $itemData['type'] = 'input';
-                        $itemData['value'] = $value;
-                    }
-
-                    // Check if the setting is a PHP error code, will trigger a view helper in fluid
-                    if ($sectionName === 'SYS' && in_array($key, $this->phpErrorCodesSettings)) {
-                        $itemData['phpErrorCode'] = true;
-                    }
-
-                    $data[$sectionName][] = $itemData;
-                }
-            }
-        }
-        return $data;
-    }
-
-    /**
-     * Store changed values in LocalConfiguration
-     *
-     * @return string Status messages of changed values
-     */
-    protected function updateLocalConfigurationValues()
-    {
-        $statusObjects = [];
-        if (isset($this->postValues['values']) && is_array($this->postValues['values'])) {
-            $configurationPathValuePairs = [];
-            $commentArray = $this->getDefaultConfigArrayComments();
-            $formValues = $this->postValues['values'];
-            foreach ($formValues as $section => $valueArray) {
-                if (is_array($GLOBALS['TYPO3_CONF_VARS'][$section])) {
-                    foreach ($valueArray as $valueKey => $value) {
-                        if (isset($GLOBALS['TYPO3_CONF_VARS'][$section][$valueKey])) {
-                            $oldValue = $GLOBALS['TYPO3_CONF_VARS'][$section][$valueKey];
-                            $description = trim($commentArray[$section][$valueKey]);
-
-                            if (preg_match('/^string \\(textarea\\)/i', $description)) {
-                                // Force Unix linebreaks in textareas
-                                $value = str_replace(CR, '', $value);
-                                // Preserve linebreaks
-                                $value = str_replace(LF, '\' . LF . \'', $value);
-                            }
-
-                            if (preg_match('/^(<.*?>)?boolean/i', $description)) {
-                                // When submitting settings in the Install Tool, values that default to "FALSE" or "TRUE"
-                                // in EXT:core/Configuration/DefaultConfiguration.php will be sent as "0" resp. "1".
-                                $value = $value === '1';
-                                $valueHasChanged = (bool)$oldValue !== $value;
-                            } elseif (preg_match('/^(<.*?>)?integer/i', $description)) {
-                                // Cast integer values to integers (but only for values that can not contain a string as well)
-                                $value = (int)$value;
-                                $valueHasChanged = (int)$oldValue !== $value;
-                            } else {
-                                $valueHasChanged = (string)$oldValue !== (string)$value;
-                            }
-
-                            // Save if value changed
-                            if ($valueHasChanged) {
-                                $configurationPathValuePairs[$section . '/' . $valueKey] = $value;
-                                /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-                                $status = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
-                                $status->setTitle('$GLOBALS[\'TYPO3_CONF_VARS\'][\'' . $section . '\'][\'' . $valueKey . '\']');
-                                if (is_bool($value)) {
-                                    $status->setMessage('New value = ' . ($value ? 'true' : 'false'));
-                                } else {
-                                    $status->setMessage('New value = ' . $value);
-                                }
-                                $statusObjects[] = $status;
-                            }
-                        }
-                    }
-                }
-            }
-            if (!empty($statusObjects)) {
-                /** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
-                $configurationManager = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Configuration\ConfigurationManager::class);
-                $configurationManager->setLocalConfigurationValuesByPathValuePairs($configurationPathValuePairs);
-            }
-        }
-        return $statusObjects;
-    }
-
-    /**
-     * @return array
-     */
-    protected function getDefaultConfigArrayComments() : array
-    {
-        /** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Configuration\ConfigurationManager::class);
-        return require $configurationManager->getDefaultConfigurationDescriptionFileLocation();
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/CleanUp.php b/typo3/sysext/install/Classes/Controller/Action/Tool/CleanUp.php
deleted file mode 100644
index 1779b665fa43..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/CleanUp.php
+++ /dev/null
@@ -1,293 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Tool;
-
-/*
- * 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\Database\ConnectionPool;
-use TYPO3\CMS\Core\Resource\ProcessedFileRepository;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\MathUtility;
-use TYPO3\CMS\Install\Controller\Action;
-use TYPO3\CMS\Install\Status\ErrorStatus;
-use TYPO3\CMS\Install\Status\InfoStatus;
-use TYPO3\CMS\Install\Status\OkStatus;
-
-/**
- * Clean up page
- */
-class CleanUp extends Action\AbstractAction
-{
-    /**
-     * Status messages of submitted actions
-     *
-     * @var array
-     */
-    protected $actionMessages = [];
-
-    /**
-     * Executes the tool
-     *
-     * @return string Rendered content
-     */
-    protected function executeAction()
-    {
-        if (isset($this->postValues['set']['clearTables'])) {
-            $this->actionMessages[] = $this->clearSelectedTables();
-            $this->view->assign('postAction', 'clearTables');
-        }
-        if (isset($this->postValues['set']['clearProcessedFiles'])) {
-            $this->actionMessages[] = $this->clearProcessedFiles();
-            $this->view->assign('postAction', 'clearProcessedFiles');
-        }
-        if (isset($this->postValues['set']['deleteTypo3TempFiles'])) {
-            $this->view->assign('postAction', 'deleteTypo3TempFiles');
-        }
-
-        $this->view->assign('cleanableTables', $this->getCleanableTableList());
-
-        $typo3TempData = $this->getTypo3TempStatistics();
-        $this->view->assign('typo3TempData', $typo3TempData);
-
-        $this->view->assign('actionMessages', $this->actionMessages);
-        return $this->view->render();
-    }
-
-    /**
-     * Get list of existing tables that could be truncated.
-     *
-     * @return array List of cleanable tables with name, description and number of rows
-     */
-    protected function getCleanableTableList()
-    {
-        $tableCandidates = [
-            [
-                'name' => 'be_sessions',
-                'description' => 'Backend user sessions'
-            ],
-            [
-                'name' => 'cache_md5params',
-                'description' => 'Frontend redirects',
-            ],
-            [
-                'name' => 'fe_sessions',
-                'description' => 'Frontend user sessions',
-            ],
-            [
-                'name' => 'sys_history',
-                'description' => 'Tracking of database record changes through TYPO3 backend forms',
-            ],
-            [
-                'name' => 'sys_lockedrecords',
-                'description' => 'Record locking of backend user editing',
-            ],
-            [
-                'name' => 'sys_log',
-                'description' => 'General log table',
-            ],
-            [
-                'name' => 'sys_preview',
-                'description' => 'Workspace preview links',
-            ],
-            [
-                'name' => 'tx_extensionmanager_domain_model_extension',
-                'description' => 'List of TER extensions',
-            ],
-            [
-                'name' => 'tx_rsaauth_keys',
-                'description' => 'Login process key storage'
-            ],
-        ];
-
-        $tables = [];
-        foreach ($tableCandidates as $candidate) {
-            $connection = GeneralUtility::makeInstance(ConnectionPool::class)
-               ->getConnectionForTable($candidate['name']);
-            if ($connection->getSchemaManager()->tablesExist([$candidate['name']])) {
-                $candidate['rows'] = $connection->count(
-                    '*',
-                    $candidate['name'],
-                    []
-                );
-                $tables[] = $candidate;
-            }
-        }
-        return $tables;
-    }
-
-    /**
-     * Truncate selected tables
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function clearSelectedTables()
-    {
-        $clearedTables = [];
-        if (isset($this->postValues['values']) && is_array($this->postValues['values'])) {
-            foreach ($this->postValues['values'] as $tableName => $selected) {
-                if ($selected == 1) {
-                    GeneralUtility::makeInstance(ConnectionPool::class)
-                        ->getConnectionForTable($tableName)
-                        ->truncate($tableName);
-                    $clearedTables[] = $tableName;
-                }
-            }
-        }
-        if (!empty($clearedTables)) {
-            /** @var OkStatus $message */
-            $message = GeneralUtility::makeInstance(OkStatus::class);
-            $message->setTitle('Cleared tables');
-            $message->setMessage('List of cleared tables: ' . implode(', ', $clearedTables));
-        } else {
-            /** @var InfoStatus $message */
-            $message = GeneralUtility::makeInstance(InfoStatus::class);
-            $message->setTitle('No tables selected to clear');
-        }
-        return $message;
-    }
-
-    /**
-     * Data for the typo3temp/ deletion view
-     *
-     * @return array Data array
-     */
-    protected function getTypo3TempStatistics()
-    {
-        $data = [];
-        $pathTypo3Temp = PATH_site . 'typo3temp/';
-        $postValues = $this->postValues['values'];
-
-        $condition = '0';
-        if (isset($postValues['condition'])) {
-            $condition = $postValues['condition'];
-        }
-        $numberOfFilesToDelete = 0;
-        if (isset($postValues['numberOfFiles'])) {
-            $numberOfFilesToDelete = $postValues['numberOfFiles'];
-        }
-        $subDirectory = '';
-        if (isset($postValues['subDirectory'])) {
-            $subDirectory = $postValues['subDirectory'];
-        }
-
-        // Run through files
-        $fileCounter = 0;
-        $deleteCounter = 0;
-        $criteriaMatch = 0;
-        $timeMap = ['day' => 1, 'week' => 7, 'month' => 30];
-        $directory = @dir($pathTypo3Temp . $subDirectory);
-        if (is_object($directory)) {
-            while ($entry = $directory->read()) {
-                $absoluteFile = $pathTypo3Temp . $subDirectory . '/' . $entry;
-                if (@is_file($absoluteFile)) {
-                    $ok = false;
-                    $fileCounter++;
-                    if ($condition) {
-                        if (MathUtility::canBeInterpretedAsInteger($condition)) {
-                            if (filesize($absoluteFile) > $condition * 1024) {
-                                $ok = true;
-                            }
-                        } else {
-                            if (fileatime($absoluteFile) < $GLOBALS['EXEC_TIME'] - (int)$timeMap[$condition] * 60 * 60 * 24) {
-                                $ok = true;
-                            }
-                        }
-                    } else {
-                        $ok = true;
-                    }
-                    if ($ok) {
-                        $hashPart = substr(basename($absoluteFile), -14, 10);
-                        // This is a kind of check that the file being deleted has a 10 char hash in it
-                        if (
-                            !preg_match('/[^a-f0-9]/', $hashPart)
-                            || substr($absoluteFile, -6) === '.cache'
-                            || substr($absoluteFile, -4) === '.tbl'
-                            || substr($absoluteFile, -4) === '.css'
-                            || substr($absoluteFile, -3) === '.js'
-                            || substr($absoluteFile, -5) === '.gzip'
-                            || substr(basename($absoluteFile), 0, 8) === 'installTool'
-                        ) {
-                            if ($numberOfFilesToDelete && $deleteCounter < $numberOfFilesToDelete) {
-                                $deleteCounter++;
-                                unlink($absoluteFile);
-                            } else {
-                                $criteriaMatch++;
-                            }
-                        }
-                    }
-                }
-            }
-            $directory->close();
-        }
-        $data['numberOfFilesMatchingCriteria'] = $criteriaMatch;
-        $data['numberOfDeletedFiles'] = $deleteCounter;
-
-        if ($deleteCounter > 0) {
-            $message = GeneralUtility::makeInstance(OkStatus::class);
-            $message->setTitle('Deleted ' . $deleteCounter . ' files from typo3temp/' . $subDirectory . '/');
-            $this->actionMessages[] = $message;
-        }
-
-        $data['selectedCondition'] = $condition;
-        $data['numberOfFiles'] = $numberOfFilesToDelete;
-        $data['selectedSubDirectory'] = $subDirectory;
-
-        // Set up sub directory data
-        $data['subDirectories'] = [
-            '' => [
-                'name' => '',
-                'filesNumber' => count(GeneralUtility::getFilesInDir($pathTypo3Temp)),
-            ],
-        ];
-        $directories = dir($pathTypo3Temp);
-        if (is_object($directories)) {
-            while ($entry = $directories->read()) {
-                if (is_dir($pathTypo3Temp . $entry) && $entry !== '..' && $entry !== '.') {
-                    $data['subDirectories'][$entry]['name'] = $entry;
-                    $data['subDirectories'][$entry]['filesNumber'] = count(GeneralUtility::getFilesInDir($pathTypo3Temp . $entry));
-                    $data['subDirectories'][$entry]['selected'] = false;
-                    if ($entry === $data['selectedSubDirectory']) {
-                        $data['subDirectories'][$entry]['selected'] = true;
-                    }
-                }
-            }
-        }
-        $data['numberOfFilesInSelectedDirectory'] = $data['subDirectories'][$data['selectedSubDirectory']]['filesNumber'];
-
-        return $data;
-    }
-
-    /**
-     * Clear processed files
-     *
-     * The sys_file_processedfile table is truncated and the physical files of local storages are deleted.
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function clearProcessedFiles()
-    {
-        $repository = GeneralUtility::makeInstance(ProcessedFileRepository::class);
-        $failedDeletions = $repository->removeAll();
-        if ($failedDeletions) {
-            /** @var ErrorStatus $message */
-            $message = GeneralUtility::makeInstance(ErrorStatus::class);
-            $message->setTitle('Failed to delete ' . $failedDeletions . ' processed files. See TYPO3 log (by default typo3temp/var/logs/typo3_*.log)');
-        } else {
-            /** @var OkStatus $message */
-            $message = GeneralUtility::makeInstance(OkStatus::class);
-            $message->setTitle('Cleared processed files');
-        }
-
-        return $message;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/Configuration.php b/typo3/sysext/install/Classes/Controller/Action/Tool/Configuration.php
deleted file mode 100644
index e832cd3c42a0..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/Configuration.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Tool;
-
-/*
- * 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\Configuration\ConfigurationManager;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Install\Configuration\FeatureManager;
-use TYPO3\CMS\Install\Controller\Action;
-
-/**
- * Show configuration features and handle presets
- */
-class Configuration extends Action\AbstractAction
-{
-    /**
-     * @var \TYPO3\CMS\Install\Configuration\FeatureManager
-     */
-    protected $featureManager;
-
-    /**
-     * @var \TYPO3\CMS\Core\Configuration\ConfigurationManager
-     */
-    protected $configurationManager;
-
-    /**
-     * @param FeatureManager $featureManager
-     * @param ConfigurationManager $configurationManager
-     */
-    public function __construct(FeatureManager $featureManager = null, ConfigurationManager $configurationManager = null)
-    {
-        $this->featureManager = $featureManager ?: GeneralUtility::makeInstance(FeatureManager::class);
-        $this->configurationManager = $configurationManager ?: GeneralUtility::makeInstance(ConfigurationManager::class);
-    }
-
-    /**
-     * Executes the tool
-     *
-     * @return string Rendered content
-     */
-    protected function executeAction()
-    {
-        $actionMessages = [];
-        if (isset($this->postValues['set']['activate'])) {
-            $actionMessages[] = $this->activate();
-            $this->activate();
-        }
-        $this->view->assign('actionMessages', $actionMessages);
-
-        $postValues = is_array($this->postValues['values']) ? $this->postValues['values'] : [];
-        $this->view->assign('features', $this->featureManager->getInitializedFeatures($postValues));
-
-        return $this->view->render();
-    }
-
-    /**
-     * Configure selected feature presets to be active
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function activate()
-    {
-        $configurationValues = $this->featureManager->getConfigurationForSelectedFeaturePresets($this->postValues['values']);
-
-        if (!empty($configurationValues)) {
-            $this->configurationManager->setLocalConfigurationValuesByPathValuePairs($configurationValues);
-            /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
-            $message->setTitle('Configuration written');
-            $messageBody = [];
-            foreach ($configurationValues as $configurationKey => $configurationValue) {
-                $messageBody[] = '\'' . $configurationKey . '\' => \'' . $configurationValue . '\'';
-            }
-            $message->setMessage(implode(LF, $messageBody));
-        } else {
-            /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\InfoStatus::class);
-            $message->setTitle('No configuration change selected');
-        }
-        return $message;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/Environment.php b/typo3/sysext/install/Classes/Controller/Action/Tool/Environment.php
new file mode 100644
index 000000000000..285701694df5
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/Environment.php
@@ -0,0 +1,141 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Tool;
+
+/*
+ * 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\Database\ConnectionPool;
+use TYPO3\CMS\Core\FormProtection\FormProtectionFactory;
+use TYPO3\CMS\Core\FormProtection\InstallToolFormProtection;
+use TYPO3\CMS\Core\Utility\CommandUtility;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Controller\Action;
+use TYPO3\CMS\Install\FolderStructure\DefaultPermissionsCheck;
+
+/**
+ * "Environment" main controller
+ */
+class Environment extends Action\AbstractAction
+{
+    /**
+     * Executes the tool
+     *
+     * @return string Rendered content
+     */
+    protected function executeAction(): string
+    {
+        $formProtection = FormProtectionFactory::get(InstallToolFormProtection::class);
+        $permissionCheck = GeneralUtility::makeInstance(DefaultPermissionsCheck::class);
+        $this->view->assignMultiple([
+            'folderStructureFilePermissionStatus' => $permissionCheck->getMaskStatus('fileCreateMask'),
+            'folderStructureDirectoryPermissionStatus' => $permissionCheck->getMaskStatus('folderCreateMask'),
+
+            'imageProcessingConfiguration' => $this->getImageConfiguration(),
+            'imageProcessingToken' => $formProtection->generateToken('installTool', 'imageProcessing'),
+
+            'mailTestToken' => $formProtection->generateToken('installTool', 'mailTest'),
+            'mailTestSenderAddress' => $this->getSenderEmailAddress(),
+
+            'systemInformationCgiDetected', GeneralUtility::isRunningOnCgiServerApi(),
+            'systemInformationDatabaseConnections' => $this->getDatabaseConnectionInformation(),
+            'systemInformationOperatingSystem' => TYPO3_OS === 'WIN' ? 'Windows' : 'Unix',
+        ]);
+        return $this->view->render();
+    }
+
+    /**
+     * Gather image configuration overview
+     *
+     * @return array Result array
+     */
+    protected function getImageConfiguration(): array
+    {
+        return [
+            'processor' => $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor'] === 'GraphicsMagick' ? 'GraphicsMagick' : 'ImageMagick',
+            'processorEnabled' => $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_enabled'],
+            'processorPath' => $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_path'],
+            'processorVersion' => $this->determineImageMagickVersion(),
+            'processorEffects' => $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_effects'],
+            'gdlibEnabled' => $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib'],
+            'gdlibPng' => $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png'],
+            'fileFormats' => $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'],
+        ];
+    }
+
+    /**
+     * Determine ImageMagick / GraphicsMagick version
+     *
+     * @return string Version
+     */
+    protected function determineImageMagickVersion(): string
+    {
+        $command = CommandUtility::imageMagickCommand('identify', '-version');
+        CommandUtility::exec($command, $result);
+        $string = $result[0];
+        list(, $version) = explode('Magick', $string);
+        list($version) = explode(' ', trim($version));
+        return trim($version);
+    }
+
+    /**
+     * Get sender address from configuration
+     * ['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress']
+     * If this setting is empty fall back to 'no-reply@example.com'
+     *
+     * @return string Returns an email address
+     */
+    protected function getSenderEmailAddress(): string
+    {
+        return !empty($GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress'])
+            ? $GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress']
+            : 'no-reply@example.com';
+    }
+
+    /**
+     * Get details about all configured database connections
+     *
+     * @return array
+     */
+    protected function getDatabaseConnectionInformation(): array
+    {
+        $connectionInfos = [];
+        $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
+        foreach ($connectionPool->getConnectionNames() as $connectionName) {
+            $connection = $connectionPool->getConnectionByName($connectionName);
+            $connectionParameters = $connection->getParams();
+            $connectionInfo = [
+                'connectionName' => $connectionName,
+                'version' => $connection->getServerVersion(),
+                'databaseName' => $connection->getDatabase(),
+                'username' => $connection->getUsername(),
+                'host' => $connection->getHost(),
+                'port' => $connection->getPort(),
+                'socket' => $connectionParameters['unix_socket'] ?? '',
+                'numberOfTables' => count($connection->getSchemaManager()->listTableNames()),
+                'numberOfMappedTables' => 0,
+            ];
+            if (isset($GLOBALS['TYPO3_CONF_VARS']['DB']['TableMapping'])
+                && is_array($GLOBALS['TYPO3_CONF_VARS']['DB']['TableMapping'])
+            ) {
+                // Count number of array keys having $connectionName as value
+                $connectionInfo['numberOfMappedTables'] = count(array_intersect(
+                    $GLOBALS['TYPO3_CONF_VARS']['DB']['TableMapping'],
+                    [$connectionName]
+                ));
+            }
+            $connectionInfos[] = $connectionInfo;
+        }
+        return $connectionInfos;
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/ExtensionScanner.php b/typo3/sysext/install/Classes/Controller/Action/Tool/ExtensionScanner.php
deleted file mode 100644
index 8de4269ef21d..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/ExtensionScanner.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Tool;
-
-/*
- * 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 Symfony\Component\Finder\Finder;
-use TYPO3\CMS\Core\FormProtection\FormProtectionFactory;
-use TYPO3\CMS\Core\FormProtection\InstallToolFormProtection;
-use TYPO3\CMS\Install\Controller\Action\AbstractAction;
-
-/**
- * Run code analysis based on changelog documentation
- */
-class ExtensionScanner extends AbstractAction
-{
-
-    /**
-     * Executes the action upon click in the Install Tool Menu
-     *
-     * @return string Rendered content
-     * @throws \InvalidArgumentException
-     */
-    protected function executeAction()
-    {
-        $finder = new Finder();
-        $extensionsInTypo3conf = $finder->directories()->in(PATH_site . 'typo3conf/ext')->depth('== 0')->sortByName();
-        $this->view->assign('extensionsInTypo3conf', $extensionsInTypo3conf);
-
-        $formProtection = FormProtectionFactory::get(InstallToolFormProtection::class);
-        $this->view->assign('extensionScannerFilesToken', $formProtection->generateToken('installTool', 'extensionScannerFiles'));
-        $this->view->assign('extensionScannerScanFileToken', $formProtection->generateToken('installTool', 'extensionScannerScanFile'));
-        $this->view->assign('extensionScannerMarkFullyScannedRestFilesToken', $formProtection->generateToken('installTool', 'extensionScannerMarkFullyScannedRestFiles'));
-
-        return $this->view->render();
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/FolderStructure.php b/typo3/sysext/install/Classes/Controller/Action/Tool/FolderStructure.php
deleted file mode 100644
index d1af25d81f1d..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/FolderStructure.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Tool;
-
-/*
- * 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\Utility\GeneralUtility;
-use TYPO3\CMS\Install\Controller\Action;
-
-/**
- * Handle folder structure
- */
-class FolderStructure extends Action\AbstractAction
-{
-    /**
-     * Executes the tool
-     *
-     * @return string Rendered content
-     */
-    protected function executeAction()
-    {
-        /** @var $folderStructureFactory \TYPO3\CMS\Install\FolderStructure\DefaultFactory */
-        $folderStructureFactory = GeneralUtility::makeInstance(\TYPO3\CMS\Install\FolderStructure\DefaultFactory::class);
-        $structureFacade = $folderStructureFactory->getStructure();
-
-        $fixedStatusObjects = [];
-        if (isset($this->postValues['set']['fix'])) {
-            $fixedStatusObjects = $structureFacade->fix();
-        }
-
-        $statusObjects = $structureFacade->getStatus();
-        /** @var $statusUtility \TYPO3\CMS\Install\Status\StatusUtility */
-        $statusUtility = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\StatusUtility::class);
-
-        $errorStatus = array_merge(
-            $statusUtility->filterBySeverity($statusObjects, 'error'),
-            $statusUtility->filterBySeverity($statusObjects, 'warning')
-        );
-        $okStatus = array_merge(
-            $statusUtility->filterBySeverity($statusObjects, 'notice'),
-            $statusUtility->filterBySeverity($statusObjects, 'information'),
-            $statusUtility->filterBySeverity($statusObjects, 'ok')
-        );
-
-        /** @var \TYPO3\CMS\Install\FolderStructure\DefaultPermissionsCheck $permissionCheck */
-        $permissionCheck = GeneralUtility::makeInstance(\TYPO3\CMS\Install\FolderStructure\DefaultPermissionsCheck::class);
-        $filePermissionStatus = $permissionCheck->getMaskStatus('fileCreateMask');
-        $directoryPermissionStatus = $permissionCheck->getMaskStatus('folderCreateMask');
-
-        $this->view
-            ->assign('filePermissionStatus', $filePermissionStatus)
-            ->assign('directoryPermissionStatus', $directoryPermissionStatus)
-            ->assign('fixedStatus', $fixedStatusObjects)
-            ->assign('errorStatus', $errorStatus)
-            ->assign('okStatus', $okStatus);
-
-        return $this->view->render();
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/ImportantActions.php b/typo3/sysext/install/Classes/Controller/Action/Tool/ImportantActions.php
deleted file mode 100644
index 8f5c49d21a24..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/ImportantActions.php
+++ /dev/null
@@ -1,365 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Tool;
-
-/*
- * 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\Core\Bootstrap;
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Database\Schema\SchemaMigrator;
-use TYPO3\CMS\Core\Database\Schema\SqlReader;
-use TYPO3\CMS\Core\Service\OpcodeCacheService;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Install\Controller\Action;
-
-/**
- * Handle important actions
- */
-class ImportantActions extends Action\AbstractAction
-{
-    /**
-     * Executes the tool
-     *
-     * @return string Rendered content
-     */
-    protected function executeAction()
-    {
-        $actionMessages = [];
-        if (isset($this->postValues['set']['changeInstallToolPassword'])) {
-            $actionMessages[] = $this->changeInstallToolPassword();
-        }
-        if (isset($this->postValues['set']['createAdministrator'])) {
-            $actionMessages[] = $this->createAdministrator();
-        }
-
-        // Database analyzer handling
-        if (isset($this->postValues['set']['databaseAnalyzerExecute'])
-            || isset($this->postValues['set']['databaseAnalyzerAnalyze'])
-        ) {
-            $this->loadExtLocalconfDatabaseAndExtTables();
-        }
-        if (isset($this->postValues['set']['databaseAnalyzerExecute'])) {
-            $actionMessages = array_merge($actionMessages, $this->databaseAnalyzerExecute());
-        }
-        if (isset($this->postValues['set']['databaseAnalyzerAnalyze'])) {
-            try {
-                $actionMessages[] = $this->databaseAnalyzerAnalyze();
-            } catch (\TYPO3\CMS\Core\Database\Schema\Exception\StatementException $e) {
-                $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-                $message->setTitle('Database analysis failed');
-                $message->setMessage($e->getMessage());
-                $actionMessages[] = $message;
-            }
-        }
-
-        $this->view->assign('actionMessages', $actionMessages);
-
-        $operatingSystem = TYPO3_OS === 'WIN' ? 'Windows' : 'Unix';
-
-        $opcodeCacheService = GeneralUtility::makeInstance(OpcodeCacheService::class);
-
-        /** @var \TYPO3\CMS\Install\Service\CoreUpdateService $coreUpdateService */
-        $coreUpdateService = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Service\CoreUpdateService::class);
-        /** @var  $coreVersionService \TYPO3\CMS\Install\Service\CoreVersionService */
-        $coreVersionService = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Service\CoreVersionService::class);
-        $this->view
-            ->assign('enableCoreUpdate', $coreUpdateService->isCoreUpdateEnabled())
-            ->assign('composerMode', Bootstrap::usesComposerClassLoading())
-            ->assign('isInstalledVersionAReleasedVersion', $coreVersionService->isInstalledVersionAReleasedVersion())
-            ->assign('isSymLinkedCore', is_link(PATH_site . 'typo3_src'))
-            ->assign('operatingSystem', $operatingSystem)
-            ->assign('cgiDetected', GeneralUtility::isRunningOnCgiServerApi())
-            ->assign('extensionCompatibilityTesterProtocolFile', GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . 'typo3temp/assets/ExtensionCompatibilityTester.txt')
-            ->assign('extensionCompatibilityTesterErrorProtocolFile', GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . 'typo3temp/assets/ExtensionCompatibilityTesterErrors.json')
-            ->assign('extensionCompatibilityTesterMessages', $this->getExtensionCompatibilityTesterMessages())
-            ->assign('listOfOpcodeCaches', $opcodeCacheService->getAllActive());
-
-        $connectionInfos = [];
-        $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
-        foreach ($connectionPool->getConnectionNames() as $connectionName) {
-            $connection = $connectionPool->getConnectionByName($connectionName);
-            $connectionParameters = $connection->getParams();
-            $connectionInfo = [
-                'connectionName' => $connectionName,
-                'version' => $connection->getServerVersion(),
-                'databaseName' => $connection->getDatabase(),
-                'username' => $connection->getUsername(),
-                'host' => $connection->getHost(),
-                'port' => $connection->getPort(),
-                'socket' => $connectionParameters['unix_socket'] ?? '',
-                'numberOfTables' => count($connection->getSchemaManager()->listTableNames()),
-                'numberOfMappedTables' => 0,
-            ];
-            if (isset($GLOBALS['TYPO3_CONF_VARS']['DB']['TableMapping'])
-                && is_array($GLOBALS['TYPO3_CONF_VARS']['DB']['TableMapping'])
-            ) {
-                // Count number of array keys having $connectionName as value
-                $connectionInfo['numberOfMappedTables'] = count(array_intersect(
-                    $GLOBALS['TYPO3_CONF_VARS']['DB']['TableMapping'],
-                    [$connectionName]
-                ));
-            }
-            $connectionInfos[] = $connectionInfo;
-        }
-
-        $this->view->assign('connections', $connectionInfos);
-
-        return $this->view->render();
-    }
-
-    /**
-     * Set new password if requested
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function changeInstallToolPassword()
-    {
-        $values = $this->postValues['values'];
-        if ($values['newInstallToolPassword'] !== $values['newInstallToolPasswordCheck']) {
-            /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-            $message->setTitle('Install tool password not changed');
-            $message->setMessage('Given passwords do not match.');
-        } elseif (strlen($values['newInstallToolPassword']) < 8) {
-            /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-            $message->setTitle('Install tool password not changed');
-            $message->setMessage('Given password must be at least eight characters long.');
-        } else {
-            /** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
-            $configurationManager = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Configuration\ConfigurationManager::class);
-            $configurationManager->setLocalConfigurationValueByPath(
-                'BE/installToolPassword',
-                $this->getHashedPassword($values['newInstallToolPassword'])
-            );
-            /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
-            $message->setTitle('Install tool password changed');
-        }
-        return $message;
-    }
-
-    /**
-     * Create administrator user
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function createAdministrator()
-    {
-        $values = $this->postValues['values'];
-        $username = preg_replace('/\\s/i', '', $values['newUserUsername']);
-        $password = $values['newUserPassword'];
-        $passwordCheck = $values['newUserPasswordCheck'];
-
-        if (strlen($username) < 1) {
-            /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-            $message->setTitle('Administrator user not created');
-            $message->setMessage('No valid username given.');
-        } elseif ($password !== $passwordCheck) {
-            /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-            $message->setTitle('Administrator user not created');
-            $message->setMessage('Passwords do not match.');
-        } elseif (strlen($password) < 8) {
-            /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-            $message->setTitle('Administrator user not created');
-            $message->setMessage('Password must be at least eight characters long.');
-        } else {
-            $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
-            $userExists = $connectionPool->getConnectionForTable('be_users')
-                ->count(
-                    'uid',
-                    'be_users',
-                    ['username' => $username]
-                );
-
-            if ($userExists) {
-                /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-                $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-                $message->setTitle('Administrator user not created');
-                $message->setMessage('A user with username "' . $username . '" exists already.');
-            } else {
-                $hashedPassword = $this->getHashedPassword($password);
-                $adminUserFields = [
-                    'username' => $username,
-                    'password' => $hashedPassword,
-                    'admin' => 1,
-                    'tstamp' => $GLOBALS['EXEC_TIME'],
-                    'crdate' => $GLOBALS['EXEC_TIME']
-                ];
-                $connectionPool->getConnectionForTable('be_users')
-                    ->insert('be_users', $adminUserFields);
-                /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-                $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
-                $message->setTitle('Administrator created with username "' . $username . '".');
-            }
-        }
-
-        return $message;
-    }
-
-    /**
-     * Execute database migration
-     *
-     * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
-     */
-    protected function databaseAnalyzerExecute()
-    {
-        $messages = [];
-
-        // Early return in case no update was selected
-        if (empty($this->postValues['values'])) {
-            /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\WarningStatus::class);
-            $message->setTitle('No database changes selected');
-            $messages[] = $message;
-            return $messages;
-        }
-
-        $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
-        $sqlStatements = $sqlReader->getCreateTableStatementArray($sqlReader->getTablesDefinitionString());
-        $schemaMigrationService = GeneralUtility::makeInstance(SchemaMigrator::class);
-
-        $statementHashesToPerform = $this->postValues['values'];
-
-        $results = $schemaMigrationService->migrate($sqlStatements, $statementHashesToPerform);
-
-        // Create error flash messages if any
-        foreach ($results as $errorMessage) {
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-            $message->setTitle('Database update failed');
-            $message->setMessage('Error: ' . $errorMessage);
-            $messages[] = $message;
-        }
-
-        $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
-        $message->setTitle('Executed database updates');
-        $messages[] = $message;
-
-        return $messages;
-    }
-
-    /**
-     * "Compare" action of analyzer
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     * @throws \Doctrine\DBAL\DBALException
-     * @throws \Doctrine\DBAL\Schema\SchemaException
-     * @throws \InvalidArgumentException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\StatementException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\UnexpectedSignalReturnValueTypeException
-     * @throws \RuntimeException
-     */
-    protected function databaseAnalyzerAnalyze()
-    {
-        $databaseAnalyzerSuggestion = [];
-
-        $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
-        $sqlStatements = $sqlReader->getCreateTableStatementArray($sqlReader->getTablesDefinitionString());
-        $schemaMigrationService = GeneralUtility::makeInstance(SchemaMigrator::class);
-
-        $addCreateChange = $schemaMigrationService->getUpdateSuggestions($sqlStatements);
-        // Aggregate the per-connection statements into one flat array
-        $addCreateChange = array_merge_recursive(...array_values($addCreateChange));
-
-        if (!empty($addCreateChange['create_table'])) {
-            $databaseAnalyzerSuggestion['addTable'] = [];
-            foreach ($addCreateChange['create_table'] as $hash => $statement) {
-                $databaseAnalyzerSuggestion['addTable'][$hash] = [
-                    'hash' => $hash,
-                    'statement' => $statement,
-                ];
-            }
-        }
-        if (!empty($addCreateChange['add'])) {
-            $databaseAnalyzerSuggestion['addField'] = [];
-            foreach ($addCreateChange['add'] as $hash => $statement) {
-                $databaseAnalyzerSuggestion['addField'][$hash] = [
-                    'hash' => $hash,
-                    'statement' => $statement,
-                ];
-            }
-        }
-        if (!empty($addCreateChange['change'])) {
-            $databaseAnalyzerSuggestion['change'] = [];
-            foreach ($addCreateChange['change'] as $hash => $statement) {
-                $databaseAnalyzerSuggestion['change'][$hash] = [
-                    'hash' => $hash,
-                    'statement' => $statement,
-                ];
-                if (isset($addCreateChange['change_currentValue'][$hash])) {
-                    $databaseAnalyzerSuggestion['change'][$hash]['current'] = $addCreateChange['change_currentValue'][$hash];
-                }
-            }
-        }
-
-        // Difference from current to expected
-        $dropRename = $schemaMigrationService->getUpdateSuggestions($sqlStatements, true);
-        // Aggregate the per-connection statements into one flat array
-        $dropRename = array_merge_recursive(...array_values($dropRename));
-        if (!empty($dropRename['change_table'])) {
-            $databaseAnalyzerSuggestion['renameTableToUnused'] = [];
-            foreach ($dropRename['change_table'] as $hash => $statement) {
-                $databaseAnalyzerSuggestion['renameTableToUnused'][$hash] = [
-                    'hash' => $hash,
-                    'statement' => $statement,
-                ];
-                if (!empty($dropRename['tables_count'][$hash])) {
-                    $databaseAnalyzerSuggestion['renameTableToUnused'][$hash]['count'] = $dropRename['tables_count'][$hash];
-                }
-            }
-        }
-        if (!empty($dropRename['change'])) {
-            $databaseAnalyzerSuggestion['renameTableFieldToUnused'] = [];
-            foreach ($dropRename['change'] as $hash => $statement) {
-                $databaseAnalyzerSuggestion['renameTableFieldToUnused'][$hash] = [
-                    'hash' => $hash,
-                    'statement' => $statement,
-                ];
-            }
-        }
-        if (!empty($dropRename['drop'])) {
-            $databaseAnalyzerSuggestion['deleteField'] = [];
-            foreach ($dropRename['drop'] as $hash => $statement) {
-                $databaseAnalyzerSuggestion['deleteField'][$hash] = [
-                    'hash' => $hash,
-                    'statement' => $statement,
-                ];
-            }
-        }
-        if (!empty($dropRename['drop_table'])) {
-            $databaseAnalyzerSuggestion['deleteTable'] = [];
-            foreach ($dropRename['drop_table'] as $hash => $statement) {
-                $databaseAnalyzerSuggestion['deleteTable'][$hash] = [
-                    'hash' => $hash,
-                    'statement' => $statement,
-                ];
-                if (!empty($dropRename['tables_count'][$hash])) {
-                    $databaseAnalyzerSuggestion['deleteTable'][$hash]['count'] = $dropRename['tables_count'][$hash];
-                }
-            }
-        }
-
-        $this->view->assign('databaseAnalyzerSuggestion', $databaseAnalyzerSuggestion);
-
-        /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-        $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
-        $message->setTitle('Analyzed current database');
-
-        return $message;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/LoadExtensions.php b/typo3/sysext/install/Classes/Controller/Action/Tool/LoadExtensions.php
deleted file mode 100644
index 31345d1c4ddd..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/LoadExtensions.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Tool;
-
-/*
- * 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\Install\Controller\Action;
-
-/**
- * Welcome page
- */
-class LoadExtensions extends Action\AbstractAction
-{
-    /**
-     * Executes the tool
-     *
-     * @return string Rendered content
-     */
-    protected function executeAction()
-    {
-        $extensionCompatibilityTesterFile = \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . 'typo3temp/assets/ExtensionCompatibilityTester.txt';
-        $this->view
-            ->assign('extensionCompatibilityTesterProtocolFile', $extensionCompatibilityTesterFile)
-            ->assign('extensionCompatibilityTesterMessages', $this->getExtensionCompatibilityTesterMessages());
-
-        return $this->view->render();
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/Maintenance.php b/typo3/sysext/install/Classes/Controller/Action/Tool/Maintenance.php
new file mode 100644
index 000000000000..19767e387f2b
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/Maintenance.php
@@ -0,0 +1,49 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Tool;
+
+/*
+ * 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\FormProtection\FormProtectionFactory;
+use TYPO3\CMS\Core\FormProtection\InstallToolFormProtection;
+use TYPO3\CMS\Core\Service\OpcodeCacheService;
+use TYPO3\CMS\Install\Controller\Action\AbstractAction;
+use TYPO3\CMS\Install\Service\ClearTableService;
+use TYPO3\CMS\Install\Service\Typo3tempFileService;
+
+/**
+ * Handle important actions
+ */
+class Maintenance extends AbstractAction
+{
+    /**
+     * "Maintenance" main page
+     *
+     * @return string Rendered content
+     */
+    protected function executeAction(): string
+    {
+        $formProtection = FormProtectionFactory::get(InstallToolFormProtection::class);
+        $this->view->assignMultiple([
+            'clearAllCacheOpcodeCaches' => (new OpcodeCacheService())->getAllActive(),
+            'clearTableStats' => (new ClearTableService())->getTableStatistics(),
+            'clearTableToken' => $formProtection->generateToken('installTool', 'clearTable'),
+            'clearTypo3tempFilesStats' => (new Typo3tempFileService())->getDirectoryStatistics(),
+            'clearTypo3tempFilesToken' => $formProtection->generateToken('installTool', 'clearTypo3tempFiles'),
+            'createAdminToken' => $formProtection->generateToken('installTool', 'createAdmin'),
+            'databaseAnalyzerExecuteToken' => $formProtection->generateToken('installTool', 'databaseAnalyzerExecute'),
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/Settings.php b/typo3/sysext/install/Classes/Controller/Action/Tool/Settings.php
new file mode 100644
index 000000000000..117adc9b29be
--- /dev/null
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/Settings.php
@@ -0,0 +1,65 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Controller\Action\Tool;
+
+/*
+ * 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\FormProtection\FormProtectionFactory;
+use TYPO3\CMS\Core\FormProtection\InstallToolFormProtection;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Configuration\FeatureManager;
+use TYPO3\CMS\Install\Controller\Action;
+use TYPO3\CMS\Install\Service\LocalConfigurationValueService;
+
+/**
+ * About page
+ */
+class Settings extends Action\AbstractAction
+{
+    /**
+     * @var FeatureManager
+     */
+    protected $featureManager;
+
+    /**
+     * @param FeatureManager $featureManager
+     */
+    public function __construct(FeatureManager $featureManager = null)
+    {
+        $this->featureManager = $featureManager ?: GeneralUtility::makeInstance(FeatureManager::class);
+    }
+
+    /**
+     * Executes the tool
+     *
+     * @return string Rendered content
+     */
+    protected function executeAction(): string
+    {
+        $presetFeatures = $this->featureManager->getInitializedFeatures();
+        $localConfigurationValueService = new LocalConfigurationValueService();
+        $formProtection = FormProtectionFactory::get(InstallToolFormProtection::class);
+        $this->view->assignMultiple([
+            'changeInstallToolPasswordToken' => $formProtection->generateToken('installTool', 'changeInstallToolPassword'),
+
+            'localConfigurationWriteToken' => $formProtection->generateToken('installTool', 'localConfigurationWrite'),
+            'localConfigurationSectionNames' => $localConfigurationValueService->getSpeakingSectionNames(),
+            'localConfigurationData' => $localConfigurationValueService->getCurrentConfigurationData(),
+
+            'presetActivateToken' => $formProtection->generateToken('installTool', 'presetActivate'),
+            'presetFeatures' => $presetFeatures,
+        ]);
+        return $this->view->render();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/SystemEnvironment.php b/typo3/sysext/install/Classes/Controller/Action/Tool/SystemEnvironment.php
deleted file mode 100644
index 8d55ac3d0f53..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/SystemEnvironment.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Tool;
-
-/*
- * 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\Utility\GeneralUtility;
-use TYPO3\CMS\Install\Controller\Action;
-use TYPO3\CMS\Install\Status\StatusUtility;
-use TYPO3\CMS\Install\SystemEnvironment\Check;
-use TYPO3\CMS\Install\SystemEnvironment\DatabaseCheck;
-use TYPO3\CMS\Install\SystemEnvironment\SetupCheck;
-
-/**
- * Show system environment check results
- */
-class SystemEnvironment extends Action\AbstractAction
-{
-    /**
-     * Executes the tool
-     *
-     * @return string Rendered content
-     */
-    protected function executeAction()
-    {
-        $statusObjects = array_merge(
-            GeneralUtility::makeInstance(Check::class)->getStatus(),
-            GeneralUtility::makeInstance(SetupCheck::class)->getStatus(),
-            GeneralUtility::makeInstance(DatabaseCheck::class)->getStatus()
-        );
-
-        /** @var $statusUtility StatusUtility */
-        $statusUtility = GeneralUtility::makeInstance(StatusUtility::class);
-        $sortedStatusObjects = $statusUtility->sortBySeverity($statusObjects);
-        $this->view->assign('statusObjectsBySeverity', $sortedStatusObjects);
-
-        return $this->view->render();
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/TestSetup.php b/typo3/sysext/install/Classes/Controller/Action/Tool/TestSetup.php
deleted file mode 100644
index 29ab8c660197..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/TestSetup.php
+++ /dev/null
@@ -1,710 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Tool;
-
-/*
- * 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\Imaging\GraphicalFunctions;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\StringUtility;
-use TYPO3\CMS\Install\Controller\Action;
-
-/**
- * Test various system setup settings
- */
-class TestSetup extends Action\AbstractAction
-{
-    /**
-     * @var string Absolute path to image folder
-     */
-    protected $imageBasePath = '';
-
-    /**
-     * Executes the tool
-     *
-     * @return string Rendered content
-     */
-    protected function executeAction()
-    {
-        $this->imageBasePath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Resources/Public/Images/';
-
-        $actionMessages = [];
-        if (isset($this->postValues['set']['testMail'])) {
-            $actionMessages[] = $this->sendTestMail();
-            $this->view->assign('postAction', 'testMail');
-        }
-
-        if (isset($this->postValues['set']['testTrueTypeFont'])) {
-            $this->view->assign('trueTypeFontTested', true);
-            $actionMessages[] = $this->createTrueTypeFontTestImage();
-        }
-
-        if (isset($this->postValues['set']['testConvertImageFormatsToJpg'])) {
-            $this->view->assign('convertImageFormatsToJpgTested', true);
-            if ($this->isImageMagickEnabledAndConfigured()) {
-                $actionMessages[] = $this->convertImageFormatsToJpg();
-            } else {
-                $actionMessages[] = $this->imageMagickDisabledMessage();
-            }
-        }
-
-        if (isset($this->postValues['set']['testWriteGifAndPng'])) {
-            $this->view->assign('writeGifAndPngTested', true);
-            if ($this->isImageMagickEnabledAndConfigured()) {
-                $actionMessages[] = $this->writeGifAndPng();
-            } else {
-                $actionMessages[] = $this->imageMagickDisabledMessage();
-            }
-        }
-
-        if (isset($this->postValues['set']['testScalingImages'])) {
-            $this->view->assign('scalingImagesTested', true);
-            if ($this->isImageMagickEnabledAndConfigured()) {
-                $actionMessages[] = $this->scaleImages();
-            } else {
-                $actionMessages[] = $this->imageMagickDisabledMessage();
-            }
-        }
-
-        if (isset($this->postValues['set']['testCombiningImages'])) {
-            $this->view->assign('combiningImagesTested', true);
-            if ($this->isImageMagickEnabledAndConfigured()) {
-                $actionMessages[] = $this->combineImages();
-            } else {
-                $actionMessages[] = $this->imageMagickDisabledMessage();
-            }
-        }
-
-        if (isset($this->postValues['set']['testGdlib'])) {
-            $this->view->assign('gdlibTested', true);
-            $actionMessages[] = $this->gdlib();
-        }
-
-        $this->view->assign('actionMessages', $actionMessages);
-        $this->view->assign('senderEmailAddress', $this->getSenderEmailAddress());
-        $this->view->assign('imageConfiguration', $this->getImageConfiguration());
-
-        return $this->view->render();
-    }
-
-    /**
-     * Send a test mail to specified email address
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function sendTestMail()
-    {
-        if (
-            !isset($this->postValues['values']['testEmailRecipient'])
-            || !GeneralUtility::validEmail($this->postValues['values']['testEmailRecipient'])
-        ) {
-            /** @var $message \TYPO3\CMS\Install\Status\StatusInterface */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-            $message->setTitle('Mail not sent');
-            $message->setMessage('Given address is not a valid email address.');
-        } else {
-            $recipient = $this->postValues['values']['testEmailRecipient'];
-            /** @var $mailMessage \TYPO3\CMS\Core\Mail\MailMessage */
-            $mailMessage = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Mail\MailMessage::class);
-            $mailMessage
-                ->addTo($recipient)
-                ->addFrom($this->getSenderEmailAddress(), $this->getSenderEmailName())
-                ->setSubject($this->getEmailSubject())
-                ->setBody('<html><body>html test content</body></html>', 'text/html')
-                ->addPart('TEST CONTENT')
-                ->send();
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
-            $message->setTitle('Test mail sent');
-            $message->setMessage('Recipient: ' . $recipient);
-        }
-        return $message;
-    }
-
-    /**
-     * Get sender address from configuration
-     * ['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress']
-     * If this setting is empty fall back to 'no-reply@example.com'
-     *
-     * @return string Returns an email address
-     */
-    protected function getSenderEmailAddress()
-    {
-        return !empty($GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress'])
-            ? $GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress']
-            : 'no-reply@example.com';
-    }
-
-    /**
-     * Gets sender name from configuration
-     * ['TYPO3_CONF_VARS']['MAIL']['defaultMailFromName']
-     * If this setting is empty, it falls back to a default string.
-     *
-     * @return string
-     */
-    protected function getSenderEmailName()
-    {
-        return !empty($GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromName'])
-            ? $GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromName']
-            : 'TYPO3 CMS install tool';
-    }
-
-    /**
-     * Gets email subject from configuration
-     * ['TYPO3_CONF_VARS']['SYS']['sitename']
-     * If this setting is empty, it falls back to a default string.
-     *
-     * @return string
-     */
-    protected function getEmailSubject()
-    {
-        $name = !empty($GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'])
-            ? ' from site "' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] . '"'
-            : '';
-        return 'Test TYPO3 CMS mail delivery' . $name;
-    }
-
-    /**
-     * Create true type font test image
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function createTrueTypeFontTestImage()
-    {
-        $parseTimeStart = GeneralUtility::milliseconds();
-
-        $image = @imagecreate(200, 50);
-        imagecolorallocate($image, 255, 255, 55);
-        $textColor = imagecolorallocate($image, 233, 14, 91);
-        @imagettftext(
-            $image,
-            20 / 96.0 * 72, // As in  compensateFontSizeiBasedOnFreetypeDpi
-            0,
-            10,
-            20,
-            $textColor,
-            \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Resources/Private/Font/vera.ttf',
-            'Testing true type'
-        );
-        $outputFile = PATH_site . 'typo3temp/assets/images/installTool-' . StringUtility::getUniqueId('createTrueTypeFontTestImage') . '.gif';
-        imagegif($image, $outputFile);
-
-        /** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
-        $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\InfoStatus::class);
-        $message->setTitle('True type font');
-        $message->setMessage(
-            'If the two images below do not look the same, please check your FreeType 2 module.'
-        );
-
-        $testResults = [];
-        $testResults['ttf'] = [];
-        $testResults['ttf']['message'] = $message;
-        $testResults['ttf']['title'] = '';
-        $testResults['ttf']['outputFile'] = $outputFile;
-        $testResults['ttf']['referenceFile'] = $this->imageBasePath . 'TestReference/Font.gif';
-
-        $this->view->assign('testResults', $testResults);
-        return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
-    }
-
-    /**
-     * Create jpg from various image formats using IM / GM
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function convertImageFormatsToJpg()
-    {
-        $imageProcessor = $this->initializeImageProcessor();
-        $parseTimeStart = GeneralUtility::milliseconds();
-
-        $inputFormatsToTest = ['jpg', 'gif', 'png', 'tif', 'pdf', 'ai'];
-
-        $testResults = [];
-        foreach ($inputFormatsToTest as $formatToTest) {
-            $result = [];
-            if (!GeneralUtility::inList($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'], $formatToTest)) {
-                /** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
-                $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\WarningStatus::class);
-                $message->setTitle('Skipped test');
-                $message->setMessage('Handling format ' . $formatToTest . ' must be enabled in TYPO3_CONF_VARS[\'GFX\'][\'imagefile_ext\']');
-                $result['error'] = $message;
-            } else {
-                $imageProcessor->IM_commands = [];
-                $inputFile = $this->imageBasePath . 'TestInput/Test.' . $formatToTest;
-                $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('read') . '-' . $formatToTest;
-                $imResult = $imageProcessor->imageMagickConvert($inputFile, 'jpg', '300', '', '', '', [], true);
-                $result['title'] = 'Read ' . $formatToTest;
-                if ($imResult !== null) {
-                    $result['outputFile'] = $imResult[3];
-                    $result['referenceFile'] = $this->imageBasePath . 'TestReference/Read-' . $formatToTest . '.jpg';
-                    $result['command'] = $imageProcessor->IM_commands;
-                } else {
-                    $result['error'] = $this->imageGenerationFailedMessage();
-                }
-            }
-            $testResults[] = $result;
-        }
-
-        $this->view->assign('testResults', $testResults);
-        return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
-    }
-
-    /**
-     * Write gif and png test
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function writeGifAndPng()
-    {
-        $imageProcessor = $this->initializeImageProcessor();
-        $parseTimeStart = GeneralUtility::milliseconds();
-
-        $testResults = [
-            'gif' => [],
-            'png' => [],
-        ];
-
-        // Gif
-        $inputFile = $this->imageBasePath . 'TestInput/Test.gif';
-        $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('write-gif');
-        $imResult = $imageProcessor->imageMagickConvert($inputFile, 'gif', '300', '', '', '', [], true);
-        if ($imResult !== null && is_file($imResult[3])) {
-            if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gif_compress']) {
-                clearstatcache();
-                $previousSize = GeneralUtility::formatSize(filesize($imResult[3]));
-                $methodUsed = GraphicalFunctions::gifCompress($imResult[3], '');
-                clearstatcache();
-                $compressedSize = GeneralUtility::formatSize(filesize($imResult[3]));
-                /** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
-                $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\InfoStatus::class);
-                $message->setTitle('Compressed gif');
-                $message->setMessage(
-                    'Method used by compress: ' . $methodUsed . LF
-                    . ' Previous filesize: ' . $previousSize . '. Current filesize:' . $compressedSize
-                );
-            } else {
-                /** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
-                $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\InfoStatus::class);
-                $message->setTitle('Gif compression not enabled by [GFX][gif_compress]');
-            }
-            $testResults['gif']['message'] = $message;
-            $testResults['gif']['title'] = 'Write gif';
-            $testResults['gif']['outputFile'] = $imResult[3];
-            $testResults['gif']['referenceFile'] = $this->imageBasePath . 'TestReference/Write-gif.gif';
-            $testResults['gif']['command'] = $imageProcessor->IM_commands;
-        } else {
-            $testResults['gif']['error'] = $this->imageGenerationFailedMessage();
-        }
-
-        // Png
-        $inputFile = $this->imageBasePath . 'TestInput/Test.png';
-        $imageProcessor->IM_commands = [];
-        $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('write-png');
-        $imResult = $imageProcessor->imageMagickConvert($inputFile, 'png', '300', '', '', '', [], true);
-        if ($imResult !== null) {
-            $testResults['png']['title'] = 'Write png';
-            $testResults['png']['outputFile'] = $imResult[3];
-            $testResults['png']['referenceFile'] = $this->imageBasePath . 'TestReference/Write-png.png';
-            $testResults['png']['command'] = $imageProcessor->IM_commands;
-        } else {
-            $testResults['png']['error'] = $this->imageGenerationFailedMessage();
-        }
-
-        $this->view->assign('testResults', $testResults);
-        return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
-    }
-
-    /**
-     * Write gif and png test
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function scaleImages()
-    {
-        $imageProcessor = $this->initializeImageProcessor();
-        $parseTimeStart = GeneralUtility::milliseconds();
-
-        $testResults = [
-            'gif-to-gif' => [],
-            'png-to-png' => [],
-            'gif-to-jpg' => [],
-        ];
-
-        $imageProcessor->IM_commands = [];
-        $inputFile = $this->imageBasePath . 'TestInput/Transparent.gif';
-        $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('scale-gif');
-        $imResult = $imageProcessor->imageMagickConvert($inputFile, 'gif', '300', '', '', '', [], true);
-        if ($imResult !== null) {
-            $testResults['gif-to-gif']['title'] = 'gif to gif';
-            $testResults['gif-to-gif']['outputFile'] = $imResult[3];
-            $testResults['gif-to-gif']['referenceFile'] = $this->imageBasePath . 'TestReference/Scale-gif.gif';
-            $testResults['gif-to-gif']['command'] = $imageProcessor->IM_commands;
-        } else {
-            $testResults['gif-to-gif']['error'] = $this->imageGenerationFailedMessage();
-        }
-
-        $imageProcessor->IM_commands = [];
-        $inputFile = $this->imageBasePath . 'TestInput/Transparent.png';
-        $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('scale-png');
-        $imResult = $imageProcessor->imageMagickConvert($inputFile, 'png', '300', '', '', '', [], true);
-        if ($imResult !== null) {
-            $testResults['png-to-png']['title'] = 'png to png';
-            $testResults['png-to-png']['outputFile'] = $imResult[3];
-            $testResults['png-to-png']['referenceFile'] = $this->imageBasePath . 'TestReference/Scale-png.png';
-            $testResults['png-to-png']['command'] = $imageProcessor->IM_commands;
-        } else {
-            $testResults['png-to-png']['error'] = $this->imageGenerationFailedMessage();
-        }
-
-        $imageProcessor->IM_commands = [];
-        $inputFile = $this->imageBasePath . 'TestInput/Transparent.gif';
-        $imageProcessor->imageMagickConvert_forceFileNameBody = StringUtility::getUniqueId('scale-jpg');
-        $imResult = $imageProcessor->imageMagickConvert($inputFile, 'jpg', '300', '', '-opaque white -background white -flatten', '', [], true);
-        if ($imResult !== null) {
-            $testResults['gif-to-jpg']['title'] = 'gif to jpg';
-            $testResults['gif-to-jpg']['outputFile'] = $imResult[3];
-            $testResults['gif-to-jpg']['referenceFile'] = $this->imageBasePath . 'TestReference/Scale-jpg.jpg';
-            $testResults['gif-to-jpg']['command'] = $imageProcessor->IM_commands;
-        } else {
-            $testResults['gif-to-jpg']['error'] = $this->imageGenerationFailedMessage();
-        }
-
-        $this->view->assign('testResults', $testResults);
-        return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
-    }
-
-    /**
-     * Combine multiple images into one test
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function combineImages()
-    {
-        $imageProcessor = $this->initializeImageProcessor();
-        $parseTimeStart = GeneralUtility::milliseconds();
-
-        $testResults = [
-            'combine1' => [],
-            'combine2' => [],
-        ];
-
-        $inputFile = $this->imageBasePath . 'TestInput/BackgroundOrange.gif';
-        $overlayFile = $this->imageBasePath . 'TestInput/Test.jpg';
-        $maskFile = $this->imageBasePath . 'TestInput/MaskBlackWhite.gif';
-        $resultFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix
-            . StringUtility::getUniqueId($imageProcessor->alternativeOutputKey . 'combine1') . '.jpg';
-        $imageProcessor->combineExec($inputFile, $overlayFile, $maskFile, $resultFile);
-        $result = $imageProcessor->getImageDimensions($resultFile);
-        if ($result) {
-            $testResults['combine1']['title'] = 'Combine using a GIF mask with only black and white';
-            $testResults['combine1']['outputFile'] = $result[3];
-            $testResults['combine1']['referenceFile'] = $this->imageBasePath . 'TestReference/Combine-1.jpg';
-            $testResults['combine1']['command'] = $imageProcessor->IM_commands;
-        } else {
-            $testResults['combine1']['error'] = $this->imageGenerationFailedMessage();
-        }
-
-        $imageProcessor->IM_commands = [];
-        $inputFile = $this->imageBasePath . 'TestInput/BackgroundCombine.jpg';
-        $overlayFile = $this->imageBasePath . 'TestInput/Test.jpg';
-        $maskFile = $this->imageBasePath . 'TestInput/MaskCombine.jpg';
-        $resultFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix
-            . StringUtility::getUniqueId($imageProcessor->alternativeOutputKey . 'combine2') . '.jpg';
-        $imageProcessor->combineExec($inputFile, $overlayFile, $maskFile, $resultFile);
-        $result = $imageProcessor->getImageDimensions($resultFile);
-        if ($result) {
-            $testResults['combine2']['title'] = 'Combine using a JPG mask with graylevels';
-            $testResults['combine2']['outputFile'] = $result[3];
-            $testResults['combine2']['referenceFile'] = $this->imageBasePath . 'TestReference/Combine-2.jpg';
-            $testResults['combine2']['command'] = $imageProcessor->IM_commands;
-        } else {
-            $testResults['combine2']['error'] = $this->imageGenerationFailedMessage();
-        }
-
-        $this->view->assign('testResults', $testResults);
-        return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
-    }
-
-    /**
-     * Test gdlib functions
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function gdlib()
-    {
-        $imageProcessor = $this->initializeImageProcessor();
-        $parseTimeStart = GeneralUtility::milliseconds();
-        $gifOrPng = $imageProcessor->gifExtension;
-        $testResults = [];
-
-        // GD with simple box
-        $imageProcessor->IM_commands = [];
-        $image = imagecreatetruecolor(300, 225);
-        $backgroundColor = imagecolorallocate($image, 0, 0, 0);
-        imagefilledrectangle($image, 0, 0, 300, 225, $backgroundColor);
-        $workArea = [0, 0, 300, 225];
-        $conf = [
-            'dimensions' => '10,50,280,50',
-            'color' => 'olive',
-        ];
-        $imageProcessor->makeBox($image, $conf, $workArea);
-        $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('gdSimple') . '.' . $gifOrPng;
-        $imageProcessor->ImageWrite($image, $outputFile);
-        $result = $imageProcessor->getImageDimensions($outputFile);
-        $testResults['simple'] = [];
-        $testResults['simple']['title'] = 'Create simple image';
-        $testResults['simple']['outputFile'] = $result[3];
-        $testResults['simple']['referenceFile'] = $this->imageBasePath . 'TestReference/Gdlib-simple.' . $gifOrPng;
-        $testResults['simple']['command'] = $imageProcessor->IM_commands;
-
-        // GD from image with box
-        $imageProcessor->IM_commands = [];
-        $inputFile = $this->imageBasePath . 'TestInput/Test.' . $gifOrPng;
-        $image = $imageProcessor->imageCreateFromFile($inputFile);
-
-        $workArea = [0, 0, 400, 300];
-        $conf = [
-            'dimensions' => '10,50,380,50',
-            'color' => 'olive',
-        ];
-        $imageProcessor->makeBox($image, $conf, $workArea);
-        $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('gdBox') . '.' . $gifOrPng;
-        $imageProcessor->ImageWrite($image, $outputFile);
-        $result = $imageProcessor->getImageDimensions($outputFile);
-        $testResults['box'] = [];
-        $testResults['box']['title'] = 'Create image from file';
-        $testResults['box']['outputFile'] = $result[3];
-        $testResults['box']['referenceFile'] = $this->imageBasePath . 'TestReference/Gdlib-box.' . $gifOrPng;
-        $testResults['box']['command'] = $imageProcessor->IM_commands;
-
-        // GD with text
-        $imageProcessor->IM_commands = [];
-        $image = imagecreatetruecolor(300, 225);
-        $backgroundColor = imagecolorallocate($image, 128, 128, 150);
-        imagefilledrectangle($image, 0, 0, 300, 225, $backgroundColor);
-        $workArea = [0, 0, 300, 225];
-        $conf = [
-            'iterations' => 1,
-            'angle' => 0,
-            'antiAlias' => 1,
-            'text' => 'HELLO WORLD',
-            'fontColor' => '#003366',
-            'fontSize' => 30,
-            'fontFile' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('install') . 'Resources/Private/Font/vera.ttf',
-            'offset' => '30,80',
-        ];
-        $conf['BBOX'] = $imageProcessor->calcBBox($conf);
-        $imageProcessor->makeText($image, $conf, $workArea);
-        $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('gdText') . '.' . $gifOrPng;
-        $imageProcessor->ImageWrite($image, $outputFile);
-        $result = $imageProcessor->getImageDimensions($outputFile);
-        $testResults['text'] = [];
-        $testResults['text']['title'] = 'Render text with TrueType font';
-        $testResults['text']['outputFile'] = $result[3];
-        $testResults['text']['referenceFile'] = $this->imageBasePath . 'TestReference/Gdlib-text.' . $gifOrPng;
-        $testResults['text']['command'] = $imageProcessor->IM_commands;
-
-        // GD with text, niceText
-        $testResults['niceText'] = [];
-        if ($this->isImageMagickEnabledAndConfigured()) {
-            // Warning: Re-uses $conf from above!
-            $conf['offset'] = '30,120';
-            $conf['niceText'] = 1;
-            $imageProcessor->makeText($image, $conf, $workArea);
-            $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('gdNiceText') . '.' . $gifOrPng;
-            $imageProcessor->ImageWrite($image, $outputFile);
-            $result = $imageProcessor->getImageDimensions($outputFile);
-            $testResults['niceText']['title'] = 'Render text with TrueType font using \'niceText\' option';
-            $testResults['niceText']['outputFile'] = $result[3];
-            $testResults['niceText']['referenceFile'] = $this->imageBasePath . 'TestReference/Gdlib-niceText.' . $gifOrPng;
-            $testResults['niceText']['command'] = $imageProcessor->IM_commands;
-            /** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\InfoStatus::class);
-            $message->setTitle('Note on \'niceText\'');
-            $message->setMessage(
-                '\'niceText\' is a concept that tries to improve the antialiasing of the rendered type by'
-                . ' actually rendering the textstring in double size on a black/white mask, downscaling the mask'
-                . ' and masking the text onto the image through this mask. This involves'
-                . ' ImageMagick \'combine\'/\'composite\' and \'convert\'.'
-            );
-            $testResults['niceText']['message'] = $message;
-        } else {
-            $result['niceText']['error'] = $this->imageGenerationFailedMessage();
-        }
-
-        // GD with text, niceText, shadow
-        $testResults['shadow'] = [];
-        if ($this->isImageMagickEnabledAndConfigured()) {
-            // Warning: Re-uses $conf from above!
-            $conf['offset'] = '30,160';
-            $conf['niceText'] = 1;
-            $conf['shadow.'] = [
-                'offset' => '2,2',
-                'blur' => $imageProcessor->NO_IM_EFFECTS ? '90' : '20',
-                'opacity' => '50',
-                'color' => 'black'
-            ];
-            // Warning: Re-uses $image from above!
-            $imageProcessor->makeShadow($image, $conf['shadow.'], $workArea, $conf);
-            $imageProcessor->makeText($image, $conf, $workArea);
-            $outputFile = $this->getImagesPath($imageProcessor) . $imageProcessor->filenamePrefix . StringUtility::getUniqueId('GDwithText-niceText-shadow') . '.' . $gifOrPng;
-            $imageProcessor->ImageWrite($image, $outputFile);
-            $result = $imageProcessor->getImageDimensions($outputFile);
-            $testResults['shadow']['title'] = 'Render \'niceText\' with a shadow under';
-            $testResults['shadow']['outputFile'] = $result[3];
-            $testResults['shadow']['referenceFile'] = $this->imageBasePath . 'TestReference/Gdlib-shadow.' . $gifOrPng;
-            $testResults['shadow']['command'] = $imageProcessor->IM_commands;
-            /** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
-            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\InfoStatus::class);
-            $message->setTitle('Note on \'shadow\'');
-            $message->setMessage(
-                'This test makes sense only if the above test had a correct output. But if so, you may not see'
-                . ' a soft dropshadow from the third text string as you should. In that case you are most likely'
-                . ' using ImageMagick 5 and should set the flag TYPO3_CONF_VARS[GFX][processor_effects].'
-            );
-            $testResults['shadow']['message'] = $message;
-        } else {
-            $result['shadow']['error'] = $this->imageGenerationFailedMessage();
-        }
-
-        $this->view->assign('testResults', $testResults);
-        return $this->imageTestDoneMessage(GeneralUtility::milliseconds() - $parseTimeStart);
-    }
-
-    /**
-     * Create a 'image test was done' message
-     *
-     * @param int $parseTime Parse time
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function imageTestDoneMessage($parseTime = 0)
-    {
-        /** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
-        $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
-        $message->setTitle('Executed image tests');
-        $message->setMessage('Parse time: ' . $parseTime . ' ms');
-        return $message;
-    }
-
-    /**
-     * Create a 'imageMagick disabled' message
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function imageMagickDisabledMessage()
-    {
-        /** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
-        $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-        $message->setTitle('Tests not executed');
-        $message->setMessage('ImageMagick / GraphicsMagick handling is disabled or not configured correctly.');
-        return $message;
-    }
-
-    /**
-     * Create a 'image generation failed' message
-     *
-     * @return \TYPO3\CMS\Install\Status\StatusInterface
-     */
-    protected function imageGenerationFailedMessage()
-    {
-        /** @var \TYPO3\CMS\Install\Status\StatusInterface $message */
-        $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\ErrorStatus::class);
-        $message->setTitle('Image generation failed');
-        $message->setMessage(
-            'ImageMagick / GraphicsMagick handling is enabled, but the execute'
-            . ' command returned an error. Please check your settings, especially'
-            . ' [\'GFX\'][\'processor_path\'] and [\'GFX\'][\'processor_path_lzw\'] and ensure Ghostscript is installed on your server.'
-        );
-        return $message;
-    }
-
-    /**
-     * Gather image configuration overview
-     *
-     * @return array Result array
-     */
-    protected function getImageConfiguration()
-    {
-        $result = [];
-        $result['processor'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor'] === 'GraphicsMagick' ? 'GraphicsMagick' : 'ImageMagick';
-        $result['processorEnabled'] =  $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_enabled'];
-        $result['processorPath'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_path'];
-        $result['processorVersion'] = $this->determineImageMagickVersion();
-        $result['processorEffects'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_effects'];
-        $result['gdlibEnabled'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib'];
-        $result['gdlibPng'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png'];
-        $result['fileFormats'] = $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'];
-        return $result;
-    }
-
-    /**
-     * Initialize image processor
-     *
-     * @return GraphicalFunctions Initialized image processor
-     */
-    protected function initializeImageProcessor()
-    {
-        /** @var GraphicalFunctions $imageProcessor */
-        $imageProcessor = GeneralUtility::makeInstance(GraphicalFunctions::class);
-        $imageProcessor->init();
-        $imageProcessor->absPrefix = PATH_site;
-        $imageProcessor->dontCheckForExistingTempFile = 1;
-        $imageProcessor->filenamePrefix = 'installTool-';
-        $imageProcessor->dontCompress = 1;
-        $imageProcessor->alternativeOutputKey = 'typo3InstallTest';
-        $imageProcessor->noFramePrepended = $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_allowFrameSelection'];
-        return $imageProcessor;
-    }
-
-    /**
-     * Find out if ImageMagick or GraphicsMagick is enabled and set up
-     *
-     * @return bool TRUE if enabled and path is set
-     */
-    protected function isImageMagickEnabledAndConfigured()
-    {
-        $enabled = $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_enabled'];
-        $path = $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_path'];
-        return $enabled && $path;
-    }
-
-    /**
-     * Determine ImageMagick / GraphicsMagick version
-     *
-     * @return string Version
-     */
-    protected function determineImageMagickVersion()
-    {
-        $command = \TYPO3\CMS\Core\Utility\CommandUtility::imageMagickCommand('identify', '-version');
-        \TYPO3\CMS\Core\Utility\CommandUtility::exec($command, $result);
-        $string = $result[0];
-        list(, $version) = explode('Magick', $string);
-        list($version) = explode(' ', trim($version));
-        return trim($version);
-    }
-
-    /**
-     * Return the temp image dir.
-     * If not exist it will be created
-     *
-     * @param GraphicalFunctions $imageProcessor
-     * @return string
-     */
-    protected function getImagesPath(GraphicalFunctions $imageProcessor)
-    {
-        $imagePath = $imageProcessor->absPrefix . 'typo3temp/assets/images/';
-        if (!is_dir($imagePath)) {
-            GeneralUtility::mkdir_deep($imagePath);
-        }
-        return $imagePath;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/UpgradeAnalysis.php b/typo3/sysext/install/Classes/Controller/Action/Tool/Upgrade.php
similarity index 53%
rename from typo3/sysext/install/Classes/Controller/Action/Tool/UpgradeAnalysis.php
rename to typo3/sysext/install/Classes/Controller/Action/Tool/Upgrade.php
index 3c43fbfc8ede..70a4c9433c8d 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/UpgradeAnalysis.php
+++ b/typo3/sysext/install/Classes/Controller/Action/Tool/Upgrade.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Controller\Action\Tool;
 
 /*
@@ -14,45 +15,73 @@ namespace TYPO3\CMS\Install\Controller\Action\Tool;
  * The TYPO3 project - inspiring people to share!
  */
 
+use Symfony\Component\Finder\Finder;
+use TYPO3\CMS\Core\Core\Bootstrap;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\FormProtection\FormProtectionFactory;
 use TYPO3\CMS\Core\FormProtection\InstallToolFormProtection;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Install\Controller\Action\AbstractAction;
+use TYPO3\CMS\Install\Service\CoreUpdateService;
+use TYPO3\CMS\Install\Service\CoreVersionService;
 use TYPO3\CMS\Install\UpgradeAnalysis\DocumentationFile;
 
 /**
- * Run code analysis based on changelog documentation
+ * Render "Upgrade" section main card content
  */
-class UpgradeAnalysis extends AbstractAction
+class Upgrade extends AbstractAction
 {
-
     /**
-     * Executes the action upon click in the Install Tool Menu
-     *
-     * All available documentation files are aggregated and
-     * passed to the frontend to be displayed as a list of entries.
-     *
-     * All following actions are handled via Ajax.
+     * Executes the tool
      *
      * @return string Rendered content
-     * @throws \InvalidArgumentException
      */
-    protected function executeAction()
+    protected function executeAction(): string
+    {
+        $extensionsInTypo3conf = (new Finder())->directories()->in(PATH_site . 'typo3conf/ext')->depth('== 0')->sortByName();
+        $coreUpdateService = GeneralUtility::makeInstance(CoreUpdateService::class);
+        $coreVersionService = GeneralUtility::makeInstance(CoreVersionService::class);
+        $formProtection = FormProtectionFactory::get(InstallToolFormProtection::class);
+        $documentationFiles = $this->getDocumentationFiles();
+        $this->view->assignMultiple([
+            'extensionCompatibilityTesterProtocolFile' => GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . 'typo3temp/assets/ExtensionCompatibilityTester.txt',
+            'extensionCompatibilityTesterErrorProtocolFile' => GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . 'typo3temp/assets/ExtensionCompatibilityTesterErrors.json',
+
+            'coreUpdateEnabled' => $coreUpdateService->isCoreUpdateEnabled(),
+            'coreUpdateComposerMode' => Bootstrap::usesComposerClassLoading(),
+            'coreUpdateIsReleasedVersion' => $coreVersionService->isInstalledVersionAReleasedVersion(),
+            'coreUpdateIsSymLinkedCore' => is_link(PATH_site . 'typo3_src'),
+
+            'extensionScannerExtensionList' => $extensionsInTypo3conf,
+            'extensionScannerFilesToken' => $formProtection->generateToken('installTool', 'extensionScannerFiles'),
+            'extensionScannerScanFileToken' => $formProtection->generateToken('installTool', 'extensionScannerScanFile'),
+            'extensionScannerMarkFullyScannedRestFilesToken' => $formProtection->generateToken('installTool', 'extensionScannerMarkFullyScannedRestFiles'),
+
+            'upgradeDocsMarkReadToken' => $formProtection->generateToken('installTool', 'upgradeDocsMarkRead'),
+            'upgradeDocsUnmarkReadToken' => $formProtection->generateToken('installTool', 'upgradeDocsUnmarkRead'),
+            'upgradeDocsFiles' => $documentationFiles['normalFiles'],
+            'upgradeDocsReadFiles' => $documentationFiles['readFiles'],
+            'upgradeDocsNotAffectedFiles' => $documentationFiles['notAffectedFiles'],
+
+            'upgradeWizardsMarkUndoneToken' => $formProtection->generateToken('installTool', 'upgradeWizardsMarkUndone'),
+            'upgradeWizardsInputToken' => $formProtection->generateToken('installTool', 'upgradeWizardsInput'),
+            'upgradeWizardsExecuteToken' => $formProtection->generateToken('installTool', 'upgradeWizardsExecute'),
+        ]);
+        return $this->view->render();
+    }
+
+    /**
+     * Get a list of '.rst' files and their details for "Upgrade documentation" view.
+     *
+     * @return array
+     */
+    protected function getDocumentationFiles(): array
     {
         $documentationFileService = new DocumentationFile();
         $documentationFiles = $documentationFileService->findDocumentationFiles(
             strtr(realpath(PATH_site . ExtensionManagementUtility::siteRelPath('core') . 'Documentation/Changelog'), '\\', '/')
         );
-
-        $formProtection = FormProtectionFactory::get(InstallToolFormProtection::class);
-        $saveIgnoredItemsToken = $formProtection->generateToken('installTool', 'saveIgnoredItems');
-        $removeIgnoredItemsToken = $formProtection->generateToken('installTool', 'removeIgnoredItems');
-        $this->view->assignMultiple([
-            'saveIgnoredItemsToken' => $saveIgnoredItemsToken,
-            'removeIgnoredItemsToken' => $removeIgnoredItemsToken,
-        ]);
         $documentationFiles = array_reverse($documentationFiles);
 
         $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_registry');
@@ -66,7 +95,6 @@ class UpgradeAnalysis extends AbstractAction
             )
             ->execute()
             ->fetchAll();
-
         $hashesMarkedAsRead = [];
         foreach ($filesMarkedAsRead as $file) {
             $hashesMarkedAsRead[] = $file['entry_key'];
@@ -82,7 +110,6 @@ class UpgradeAnalysis extends AbstractAction
             )
             ->execute()
             ->fetchAll();
-
         $hashesMarkedAsNotAffected = [];
         foreach ($fileMarkedAsNotAffected as $file) {
             $hashesMarkedAsNotAffected[] = $file['entry_key'];
@@ -110,9 +137,10 @@ class UpgradeAnalysis extends AbstractAction
             }
         }
 
-        $this->view->assign('files', $documentationFiles);
-        $this->view->assign('shownFiles', $readFiles);
-        $this->view->assign('notAffectedFiles', $notAffectedFiles);
-        return $this->view->render();
+        return [
+            'normalFiles' => $documentationFiles,
+            'readFiles' => $readFiles,
+            'notAffectedFiles' => $notAffectedFiles,
+        ];
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/UpgradeWizard.php b/typo3/sysext/install/Classes/Controller/Action/Tool/UpgradeWizard.php
deleted file mode 100644
index f617fef02004..000000000000
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/UpgradeWizard.php
+++ /dev/null
@@ -1,442 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Controller\Action\Tool;
-
-/*
- * 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\Cache\DatabaseSchemaService;
-use TYPO3\CMS\Core\Database\Schema\Exception\StatementException;
-use TYPO3\CMS\Core\Database\Schema\SchemaMigrator;
-use TYPO3\CMS\Core\Database\Schema\SqlReader;
-use TYPO3\CMS\Core\Registry;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\VersionNumberUtility;
-use TYPO3\CMS\Install\Controller\Action;
-use TYPO3\CMS\Install\Status\ErrorStatus;
-use TYPO3\CMS\Install\Status\NoticeStatus;
-use TYPO3\CMS\Install\Status\OkStatus;
-use TYPO3\CMS\Install\Status\StatusInterface;
-use TYPO3\CMS\Install\Status\WarningStatus;
-use TYPO3\CMS\Install\Updates\AbstractUpdate;
-use TYPO3\CMS\Install\Updates\RowUpdater\RowUpdaterInterface;
-
-/**
- * Handle update wizards
- */
-class UpgradeWizard extends Action\AbstractAction
-{
-    /**
-     * There are tables and fields missing in the database
-     *
-     * @var bool
-     */
-    protected $needsInitialUpdateDatabaseSchema = false;
-
-    /**
-     * Executes the tool
-     *
-     * @return string Rendered content
-     */
-    protected function executeAction()
-    {
-        // ext_localconf, db and ext_tables must be loaded for the updates
-        $this->loadExtLocalconfDatabaseAndExtTables();
-
-        if (empty($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'])) {
-            $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] = [];
-        }
-
-        $actionMessages = [];
-
-        try {
-            // To make sure DatabaseCharsetUpdate and initialUpdateDatabaseSchema are first wizards, they are added here instead of ext_localconf.php
-            $databaseCharsetUpdateObject = $this->getUpdateObjectInstance(\TYPO3\CMS\Install\Updates\DatabaseCharsetUpdate::class, 'databaseCharsetUpdate');
-            if ($databaseCharsetUpdateObject->shouldRenderWizard()) {
-                $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] = array_merge(
-                    ['databaseCharsetUpdate' => \TYPO3\CMS\Install\Updates\DatabaseCharsetUpdate::class],
-                    $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']
-                );
-            }
-            $initialUpdateDatabaseSchemaUpdateObject = $this->getUpdateObjectInstance(\TYPO3\CMS\Install\Updates\InitialDatabaseSchemaUpdate::class, 'initialUpdateDatabaseSchema');
-            if ($initialUpdateDatabaseSchemaUpdateObject->shouldRenderWizard()) {
-                $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] = array_merge(
-                    ['initialUpdateDatabaseSchema' => \TYPO3\CMS\Install\Updates\InitialDatabaseSchemaUpdate::class],
-                    $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']
-                );
-                $this->needsInitialUpdateDatabaseSchema = true;
-            }
-
-            // To make sure finalUpdateDatabaseSchema is last wizard, it is added here instead of ext_localconf.php
-            $finalUpdateDatabaseSchemaUpdateObject = $this->getUpdateObjectInstance(\TYPO3\CMS\Install\Updates\FinalDatabaseSchemaUpdate::class, 'finalUpdateDatabaseSchema');
-            if ($finalUpdateDatabaseSchemaUpdateObject->shouldRenderWizard()) {
-                $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['finalUpdateDatabaseSchema'] = \TYPO3\CMS\Install\Updates\FinalDatabaseSchemaUpdate::class;
-            }
-        } catch (StatementException $exception) {
-            /** @var $message StatusInterface */
-            $message = GeneralUtility::makeInstance(ErrorStatus::class);
-            $message->setTitle('SQL error');
-            $message->setMessage($exception->getMessage());
-            $actionMessages[] = $message;
-        }
-
-        // Perform silent cache framework table upgrade
-        $this->silentCacheFrameworkTableSchemaMigration();
-        if (isset($this->postValues['set']['markAsDone'])) {
-            $actionMessages[] = $this->markWizardAsDone();
-
-            $this->listUpdates();
-            $this->view->assign('updateAction', 'listUpdates');
-        } elseif (isset($this->postValues['set']['getUserInput'])) {
-            $actionMessages[] = $this->getUserInputForUpdate();
-            $this->view->assign('updateAction', 'getUserInput');
-        } elseif (isset($this->postValues['set']['performUpdate'])) {
-            $actionMessages[] = $this->performUpdate();
-            $this->view->assign('updateAction', 'performUpdate');
-        } elseif (isset($this->postValues['set']['recheckWizards'])) {
-            $actionMessages[] = $this->recheckWizardsAndRowUpdaters();
-            if (empty($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'])) {
-                /** @var $message StatusInterface */
-                $message = GeneralUtility::makeInstance(WarningStatus::class);
-                $message->setTitle('No update wizards registered');
-                $actionMessages[] = $message;
-            }
-            $this->listUpdates();
-            $this->view->assign('updateAction', 'listUpdates');
-        } else {
-            if (empty($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'])) {
-                /** @var $message StatusInterface */
-                $message = GeneralUtility::makeInstance(WarningStatus::class);
-                $message->setTitle('No update wizards registered');
-                $actionMessages[] = $message;
-            }
-            $this->listUpdates();
-            $this->view->assign('updateAction', 'listUpdates');
-        }
-
-        $this->view->assign('actionMessages', $actionMessages);
-
-        return $this->view->render();
-    }
-
-    /**
-     * List of available updates
-     */
-    protected function listUpdates()
-    {
-        $availableUpdates = [];
-        $markedWizardsDoneInRegistry = [];
-        $markedWizardsDoneByCallingShouldRenderWizard = [];
-        $registry = GeneralUtility::makeInstance(Registry::class);
-        foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] as $identifier => $className) {
-            $updateObject = $this->getUpdateObjectInstance($className, $identifier);
-            $markedDoneInRegistry = $registry->get('installUpdate', $className, false);
-            if ($markedDoneInRegistry) {
-                $markedWizardsDoneInRegistry[] = [
-                    'identifier' => $identifier,
-                    'title' => $updateObject->getTitle(),
-                ];
-            } else {
-                if ($updateObject->shouldRenderWizard()) {
-                    // $explanation is changed by reference in Update objects!
-                    $explanation = '';
-                    $updateObject->checkForUpdate($explanation);
-                    $availableUpdates[$identifier] = [
-                        'identifier' => $identifier,
-                        'title' => $updateObject->getTitle(),
-                        'explanation' => $explanation,
-                        'renderNext' => false,
-                    ];
-                    if ($identifier === 'initialUpdateDatabaseSchema') {
-                        $availableUpdates['initialUpdateDatabaseSchema']['renderNext'] = $this->needsInitialUpdateDatabaseSchema;
-                        // initialUpdateDatabaseSchema is always the first update
-                        // we stop immediately here as the remaining updates may
-                        // require the new fields to be present in order to avoid SQL errors
-                        break;
-                    } elseif ($identifier === 'finalUpdateDatabaseSchema') {
-                        // Okay to check here because finalUpdateDatabaseSchema is last element in array
-                        $availableUpdates['finalUpdateDatabaseSchema']['renderNext'] = count($availableUpdates) === 1;
-                    } elseif (!$this->needsInitialUpdateDatabaseSchema && $updateObject->shouldRenderNextButton()) {
-                        // There are Updates that only show text and don't want to be executed
-                        $availableUpdates[$identifier]['renderNext'] = true;
-                    }
-                } else {
-                    $markedWizardsDoneByCallingShouldRenderWizard[] = [
-                        'identifier' => $identifier,
-                        'title' => $updateObject->getTitle(),
-                    ];
-                }
-            }
-        }
-
-        // List of row updaters marked as done from "DatabaseRowsUpdateWizard"
-        $rowUpdatersDoneClassNames = GeneralUtility::makeInstance(Registry::class)->get('installUpdateRows', 'rowUpdatersDone', []);
-        $rowUpdatersDone = [];
-        foreach ($rowUpdatersDoneClassNames as $rowUpdaterClassName) {
-            // Silently skip non existing DatabaseRowsUpdateWizard's
-            if (!class_exists($rowUpdaterClassName)) {
-                continue;
-            }
-            /** @var RowUpdaterInterface $rowUpdater */
-            $rowUpdater = GeneralUtility::makeInstance($rowUpdaterClassName);
-            if (!$rowUpdater instanceof RowUpdaterInterface) {
-                throw new \RuntimeException(
-                    'Row updater must implement RowUpdaterInterface',
-                    1484152906
-                );
-            }
-            $rowUpdatersDone[] = [
-                'identifier' => $rowUpdaterClassName,
-                'title' => $rowUpdater->getTitle(),
-            ];
-        }
-
-        $wizardsTotal = (count($markedWizardsDoneInRegistry) + count($markedWizardsDoneByCallingShouldRenderWizard) + count($availableUpdates));
-        $percentageDone = floor(($wizardsTotal - count($availableUpdates)) * 100 / $wizardsTotal);
-
-        $this->view->assign('wizardsDone', $markedWizardsDoneInRegistry);
-        $this->view->assign('rowUpdatersDone', $rowUpdatersDone);
-        $this->view->assign('availableUpdates', $availableUpdates);
-        $this->view->assign('wizardsTotal', $wizardsTotal);
-        $this->view->assign('wizardsPercentageDone', $percentageDone);
-    }
-
-    /**
-     * Get user input of update wizard
-     *
-     * @return StatusInterface
-     */
-    protected function getUserInputForUpdate()
-    {
-        $wizardIdentifier = $this->postValues['values']['identifier'];
-
-        $className = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$wizardIdentifier];
-        $updateObject = $this->getUpdateObjectInstance($className, $wizardIdentifier);
-        $wizardHtml = '';
-        if (method_exists($updateObject, 'getUserInput')) {
-            $wizardHtml = $updateObject->getUserInput('install[values][' . $wizardIdentifier . ']');
-        }
-
-        $updateData = [
-            'identifier' => $wizardIdentifier,
-            'title' => $updateObject->getTitle(),
-            'wizardHtml' => $wizardHtml,
-        ];
-
-        $this->view->assign('updateData', $updateData);
-
-        /** @var $message StatusInterface */
-        $message = GeneralUtility::makeInstance(OkStatus::class);
-        $message->setTitle('Show wizard options');
-        return $message;
-    }
-
-    /**
-     * Marks a wizard as being "seen" so that it is not shown again.
-     *
-     * @return StatusInterface
-     * @throws \InvalidArgumentException
-     */
-    protected function markWizardAsDone()
-    {
-        $wizardIdentifier = $this->postValues['values']['identifier'];
-        $className = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$wizardIdentifier] ?? null;
-        if ($className === null) {
-            throw new \InvalidArgumentException('No class name found for upgrade wizard "' . $wizardIdentifier . '"', 1499980374);
-        }
-
-        GeneralUtility::makeInstance(Registry::class)->set('installUpdate', $className, '1');
-
-        $wizardTitle = GeneralUtility::makeInstance($className)->getTitle();
-        $message = GeneralUtility::makeInstance(OkStatus::class);
-        $message->setTitle('Successfully marked "' . $wizardTitle . '" as done');
-        return $message;
-    }
-
-    /**
-     * Rechecks the chosen wizards and row updaters to mark them as "was not executed" again.
-     *
-     * @return StatusInterface
-     */
-    protected function recheckWizardsAndRowUpdaters()
-    {
-        if (empty($this->postValues['values']['recheck']) && empty($this->postValues['values']['recheckRowUpdater'])) {
-            $message = GeneralUtility::makeInstance(NoticeStatus::class);
-            $message->setTitle('No wizards selected to recheck');
-            return $message;
-        }
-        $registry = GeneralUtility::makeInstance(Registry::class);
-        if (!empty($this->postValues['values']['recheck'])) {
-            foreach ($this->postValues['values']['recheck'] as $wizardIdentifier => $value) {
-                $className = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$wizardIdentifier];
-                $updateObject = $this->getUpdateObjectInstance($className, $wizardIdentifier);
-                $registry->set('installUpdate', get_class($updateObject), 0);
-            }
-        }
-        if (!empty($this->postValues['values']['recheckRowUpdater'])) {
-            $rowUpdatersToRecheck = $this->postValues['values']['recheckRowUpdater'];
-            $rowUpdatersMarkedAsDone = $registry->get('installUpdateRows', 'rowUpdatersDone', []);
-            foreach ($rowUpdatersToRecheck as $rowUpdaterToReCheckClassName => $value) {
-                foreach ($rowUpdatersMarkedAsDone as $rowUpdaterMarkedAsDonePosition => $rowUpdaterMarkedAsDone) {
-                    if ($rowUpdaterMarkedAsDone === $rowUpdaterToReCheckClassName) {
-                        unset($rowUpdatersMarkedAsDone[$rowUpdaterMarkedAsDonePosition]);
-                        break;
-                    }
-                }
-            }
-            $registry->set('installUpdateRows', 'rowUpdatersDone', $rowUpdatersMarkedAsDone);
-        }
-
-        $message = GeneralUtility::makeInstance(OkStatus::class);
-        $message->setTitle('Successfully rechecked');
-        return $message;
-    }
-
-    /**
-     * Perform update of a specific wizard
-     *
-     * @throws \TYPO3\CMS\Install\Exception
-     * @return StatusInterface
-     */
-    protected function performUpdate()
-    {
-        $wizardIdentifier = $this->postValues['values']['identifier'];
-        $className = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$wizardIdentifier];
-        $updateObject = $this->getUpdateObjectInstance($className, $wizardIdentifier);
-
-        $wizardData = [
-            'identifier' => $wizardIdentifier,
-            'title' => $updateObject->getTitle(),
-        ];
-
-        // $wizardInputErrorMessage is given as reference to wizard object!
-        $wizardInputErrorMessage = '';
-        if (method_exists($updateObject, 'checkUserInput') && !$updateObject->checkUserInput($wizardInputErrorMessage)) {
-            /** @var $message StatusInterface */
-            $message = GeneralUtility::makeInstance(ErrorStatus::class);
-            $message->setTitle('Input parameter broken');
-            $message->setMessage($wizardInputErrorMessage ?: 'Something went wrong!');
-            $wizardData['wizardInputBroken'] = true;
-        } else {
-            if (!method_exists($updateObject, 'performUpdate')) {
-                throw new \TYPO3\CMS\Install\Exception(
-                    'No performUpdate method in update wizard with identifier ' . $wizardIdentifier,
-                    1371035200
-                );
-            }
-
-            // Both variables are used by reference in performUpdate()
-            $customOutput = '';
-            $databaseQueries = [];
-            $performResult = $updateObject->performUpdate($databaseQueries, $customOutput);
-
-            if ($performResult) {
-                /** @var $message StatusInterface */
-                $message = GeneralUtility::makeInstance(OkStatus::class);
-                $message->setTitle('Update successful');
-            } else {
-                /** @var $message StatusInterface */
-                $message = GeneralUtility::makeInstance(ErrorStatus::class);
-                $message->setTitle('Update failed!');
-                if ($customOutput) {
-                    $message->setMessage($customOutput);
-                }
-            }
-
-            if ($this->postValues['values']['showDatabaseQueries'] == 1) {
-                $wizardData['queries'] = $databaseQueries;
-            }
-        }
-
-        $this->view->assign('wizardData', $wizardData);
-
-        // Next update wizard, if available
-        $nextUpdate = $this->getNextUpdateInstance($updateObject);
-        $nextUpdateIdentifier = '';
-        if ($nextUpdate) {
-            $nextUpdateIdentifier = $nextUpdate->getIdentifier();
-        }
-        $this->view->assign('nextUpdateIdentifier', $nextUpdateIdentifier);
-
-        return $message;
-    }
-
-    /**
-     * Creates instance of an Update object
-     *
-     * @param string $className The class name
-     * @param string $identifier The identifier of Update object - needed to fetch user input
-     * @return AbstractUpdate Newly instantiated Update object
-     */
-    protected function getUpdateObjectInstance($className, $identifier)
-    {
-        $userInput = $this->postValues['values'][$identifier];
-        $versionAsInt = VersionNumberUtility::convertVersionNumberToInteger(TYPO3_version);
-        return GeneralUtility::makeInstance($className, $identifier, $versionAsInt, $userInput, $this);
-    }
-
-    /**
-     * Returns the next Update object
-     * Used to show the link/button to the next Update
-     *
-     * @param AbstractUpdate $currentUpdate Current Update object
-     * @return AbstractUpdate|NULL
-     */
-    protected function getNextUpdateInstance(AbstractUpdate $currentUpdate)
-    {
-        $isPreviousRecord = true;
-        foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] as $identifier => $className) {
-            // Find the current update wizard, and then start validating the next ones
-            if ($currentUpdate->getIdentifier() === $identifier) {
-                $isPreviousRecord = false;
-                // For the updateDatabaseSchema-wizards verify they do not have to be executed again
-                if ($identifier !== 'initialUpdateDatabaseSchema' && $identifier !== 'finalUpdateDatabaseSchema') {
-                    continue;
-                }
-            }
-            if (!$isPreviousRecord) {
-                $nextUpdate = $this->getUpdateObjectInstance($className, $identifier);
-                if ($nextUpdate->shouldRenderWizard()) {
-                    return $nextUpdate;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Force creation / update of caching framework tables that are needed by some update wizards
-     *
-     * @TODO: See also the other remarks on this topic in the abstract class, this whole area needs improvements
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\UnexpectedSignalReturnValueTypeException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\StatementException
-     * @throws \RuntimeException
-     * @throws \Doctrine\DBAL\Schema\SchemaException
-     * @throws \InvalidArgumentException
-     * @throws \Doctrine\DBAL\DBALException
-     */
-    protected function silentCacheFrameworkTableSchemaMigration()
-    {
-        $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
-        $cachingFrameworkDatabaseSchemaService = GeneralUtility::makeInstance(DatabaseSchemaService::class);
-        $createTableStatements = $sqlReader->getStatementArray(
-            $cachingFrameworkDatabaseSchemaService->getCachingFrameworkRequiredDatabaseSchema()
-        );
-
-        if (!empty($createTableStatements)) {
-            $schemaMigrationService = GeneralUtility::makeInstance(SchemaMigrator::class);
-            $schemaMigrationService->install($createTableStatements);
-        }
-    }
-}
diff --git a/typo3/sysext/install/Classes/Controller/AjaxController.php b/typo3/sysext/install/Classes/Controller/AjaxController.php
index e83c08dadcfc..16f828eda5ad 100644
--- a/typo3/sysext/install/Classes/Controller/AjaxController.php
+++ b/typo3/sysext/install/Classes/Controller/AjaxController.php
@@ -30,30 +30,55 @@ class AjaxController extends AbstractController
      * @var array List of valid action names that need authentication
      */
     protected $authenticationActions = [
-        'extensionCompatibilityTester',
-        'uninstallExtension',
-        'clearCache',
+        'changeInstallToolPassword',
         'clearAllCache',
-        'dumpAutoload',
-        'resetBackendUserUc',
-        'coreUpdateUpdateVersionMatrix',
-        'coreUpdateIsUpdateAvailable',
+        'clearTable',
+        'clearTypo3tempFiles',
+
+        'coreUpdateActivate',
         'coreUpdateCheckPreConditions',
         'coreUpdateDownload',
-        'coreUpdateVerifyChecksum',
-        'coreUpdateUnpack',
+        'coreUpdateIsUpdateAvailable',
         'coreUpdateMove',
-        'coreUpdateActivate',
-        'folderStatus',
-        'environmentStatus',
-        'tcaExtTablesCheck',
-        'tcaMigrationsCheck',
-        'filterManager',
-        'saveIgnoredItems',
-        'removeIgnoredItems',
+        'coreUpdateUnpack',
+        'coreUpdateUpdateVersionMatrix',
+        'coreUpdateVerifyChecksum',
+
+        'createAdmin',
+        'databaseAnalyzerAnalyze',
+        'databaseAnalyzerExecute',
+        'dumpAutoload',
+        'environmentCheckGetStatus',
+        'extensionCompatibilityTester',
         'extensionScannerFiles',
         'extensionScannerScanFile',
         'extensionScannerMarkFullyScannedRestFiles',
+
+        'folderStructureGetStatus',
+        'folderStructureFix',
+        'imageProcessing',
+        'localConfigurationWrite',
+        'mailTest',
+        'presetActivate',
+        'resetBackendUserUc',
+        'tcaExtTablesCheck',
+        'tcaMigrationsCheck',
+
+        'uninstallExtension',
+
+        'upgradeDocsMarkRead',
+        'upgradeDocsUnmarkRead',
+
+        'upgradeWizardsBlockingDatabaseAdds',
+        'upgradeWizardsBlockingDatabaseExecute',
+        'upgradeWizardsBlockingDatabaseCharsetTest',
+        'upgradeWizardsBlockingDatabaseCharsetFix',
+        'upgradeWizardsDoneUpgrades',
+        'upgradeWizardsExecute',
+        'upgradeWizardsInput',
+        'upgradeWizardsList',
+        'upgradeWizardsMarkUndone',
+        'upgradeWizardsSilentUpgrades',
     ];
 
     /**
diff --git a/typo3/sysext/install/Classes/Controller/BackendModuleController.php b/typo3/sysext/install/Classes/Controller/BackendModuleController.php
index 45a48318dd3f..c5f0aba7be99 100644
--- a/typo3/sysext/install/Classes/Controller/BackendModuleController.php
+++ b/typo3/sysext/install/Classes/Controller/BackendModuleController.php
@@ -17,7 +17,6 @@ namespace TYPO3\CMS\Install\Controller;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ServerRequestInterface;
 use TYPO3\CMS\Backend\Template\ModuleTemplate;
-use TYPO3\CMS\Core\FormProtection\AbstractFormProtection;
 use TYPO3\CMS\Core\FormProtection\FormProtectionFactory;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Fluid\View\StandaloneView;
@@ -41,17 +40,27 @@ class BackendModuleController
      * @param ServerRequestInterface $request
      * @param ResponseInterface $response
      * @return ResponseInterface
+     * @throws \RuntimeException
      */
     public function index(ServerRequestInterface $request, ResponseInterface $response)
     {
-        /** @var EnableFileService $enableFileService */
         $enableFileService = GeneralUtility::makeInstance(EnableFileService::class);
-        /** @var AbstractFormProtection $formProtection */
+
         $formProtection = FormProtectionFactory::get();
 
+        $targetUrl = 'install.php?install[context]=backend';
+        if (!empty($request->getQueryParams()['install']['action'])) {
+            $subAction = !empty($request->getQueryParams()['install']['action'])
+                ? $request->getQueryParams()['install']['action']
+                : '';
+            $targetUrl .= '&install[controller]=tool&install[action]=' . $subAction;
+        }
+
         if ($enableFileService->checkInstallToolEnableFile()) {
             // Install tool is open and valid, redirect to it
-            $response = $response->withStatus(303)->withHeader('Location', 'install.php?install[context]=backend');
+            $response = $response
+                ->withStatus(303)
+                ->withHeader('Location', $targetUrl);
         } elseif ($request->getMethod() === 'POST' && $request->getParsedBody()['action'] === 'enableInstallTool') {
             // Request to open the install tool
             $installToolEnableToken = $request->getParsedBody()['installToolEnableToken'];
@@ -59,22 +68,29 @@ class BackendModuleController
                 throw new \RuntimeException('Given form token was not valid', 1369161225);
             }
             $enableFileService->createInstallToolEnableFile();
+
             // Install tool is open and valid, redirect to it
-            $response = $response->withStatus(303)->withHeader('Location', 'install.php?install[context]=backend');
+            $response = $response
+                ->withStatus(303)
+                ->withHeader('Location', $targetUrl);
         } else {
             // Show the "create enable install tool" button
-            /** @var StandaloneView $view */
+            $token = $formProtection->generateToken('installTool');
+
             $view = GeneralUtility::makeInstance(StandaloneView::class);
-            $view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName(
-                'EXT:install/Resources/Private/Templates/BackendModule/ShowEnableInstallToolButton.html')
+            $view->setTemplatePathAndFilename(
+                GeneralUtility::getFileAbsFileName(
+                    'EXT:install/Resources/Private/Templates/BackendModule/ShowEnableInstallToolButton.html'
+                )
             );
-            $token = $formProtection->generateToken('installTool');
             $view->assign('installToolEnableToken', $token);
-            /** @var ModuleTemplate $moduleTemplate */
+
             $moduleTemplate = GeneralUtility::makeInstance(ModuleTemplate::class);
             $moduleTemplate->setContent($view->render());
+
             $response->getBody()->write($moduleTemplate->renderContent());
         }
+
         return $response;
     }
 }
diff --git a/typo3/sysext/install/Classes/Controller/ToolController.php b/typo3/sysext/install/Classes/Controller/ToolController.php
index e5466f7214db..1fc97a592f1e 100644
--- a/typo3/sysext/install/Classes/Controller/ToolController.php
+++ b/typo3/sysext/install/Classes/Controller/ToolController.php
@@ -29,18 +29,10 @@ class ToolController extends AbstractController
      * @var array List of valid action names that need authentication
      */
     protected $authenticationActions = [
-        'importantActions',
-        'systemEnvironment',
-        'configuration',
-        'folderStructure',
-        'testSetup',
-        'upgradeWizard',
-        'upgradeAnalysis',
-        'extensionScanner',
-        'allConfiguration',
-        'cleanUp',
-        'loadExtensions',
-        'about',
+        'environment',
+        'maintenance',
+        'settings',
+        'upgrade',
     ];
 
     /**
@@ -118,6 +110,7 @@ class ToolController extends AbstractController
                     // Add error to display a message what triggered the check
                     $errorEncoded = json_encode($error);
                     $parameters[] = 'install[lastError]=' . rawurlencode($errorEncoded);
+
                     // We do not use GeneralUtility here to be sure that hash generation works even if that class might not exist any more.
                     $parameters[] = 'install[lastErrorHash]=' . hash_hmac('sha1', $errorEncoded, $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] . 'InstallToolError');
 
@@ -168,7 +161,7 @@ class ToolController extends AbstractController
     {
         $action = $this->getAction();
         if ($action === '') {
-            $action = 'importantActions';
+            $action = 'maintenance';
         }
         $this->validateAuthenticationAction($action);
         $actionClass = ucfirst($action);
diff --git a/typo3/sysext/install/Classes/Service/ClearTableService.php b/typo3/sysext/install/Classes/Service/ClearTableService.php
new file mode 100644
index 000000000000..6857efd12a31
--- /dev/null
+++ b/typo3/sysext/install/Classes/Service/ClearTableService.php
@@ -0,0 +1,114 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Service;
+
+/*
+ * 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\Database\ConnectionPool;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Service handling clearing and statistics of semi-persistent
+ * core tables.
+ */
+class ClearTableService
+{
+    /**
+     * @var array List of table and their description
+     */
+    protected $tableList = [
+        [
+            'name' => 'be_sessions',
+            'description' => 'Backend user sessions'
+        ],
+        [
+            'name' => 'cache_md5params',
+            'description' => 'Frontend redirects',
+        ],
+        [
+            'name' => 'fe_sessions',
+            'description' => 'Frontend user sessions',
+        ],
+        [
+            'name' => 'sys_history',
+            'description' => 'Tracking of database record changes through TYPO3 backend forms',
+        ],
+        [
+            'name' => 'sys_lockedrecords',
+            'description' => 'Record locking of backend user editing',
+        ],
+        [
+            'name' => 'sys_log',
+            'description' => 'General log table',
+        ],
+        [
+            'name' => 'sys_preview',
+            'description' => 'Workspace preview links',
+        ],
+        [
+            'name' => 'tx_extensionmanager_domain_model_extension',
+            'description' => 'List of TER extensions',
+        ],
+        [
+            'name' => 'tx_rsaauth_keys',
+            'description' => 'Login process key storage'
+        ],
+    ];
+
+    /**
+     * Get an array of all affected tables, a short description and their row counts
+     *
+     * @return array Details per table
+     */
+    public function getTableStatistics(): array
+    {
+        $tableStatistics = [];
+        foreach ($this->tableList as $table) {
+            $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($table['name']);
+            if ($connection->getSchemaManager()->tablesExist([$table['name']])) {
+                $table['rowCount'] = $connection->count(
+                    '*',
+                    $table['name'],
+                    []
+                );
+                $tableStatistics[] = $table;
+            }
+        }
+        return $tableStatistics;
+    }
+
+    /**
+     * Truncate a table from $this->tableList
+     *
+     * @param string $tableName
+     * @throws \RuntimeException
+     */
+    public function clearSelectedTable(string $tableName)
+    {
+        $tableFound = false;
+        foreach ($this->tableList as $table) {
+            if ($table['name'] === $tableName) {
+                $tableFound = true;
+                break;
+            }
+        }
+        if (!$tableFound) {
+            throw new \RuntimeException(
+                'Selected table ' . $tableName . ' can not be cleared',
+                1501942151
+            );
+        }
+        GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($tableName)->truncate($tableName);
+    }
+}
diff --git a/typo3/sysext/install/Classes/Service/LocalConfigurationValueService.php b/typo3/sysext/install/Classes/Service/LocalConfigurationValueService.php
new file mode 100644
index 000000000000..753607e92dd8
--- /dev/null
+++ b/typo3/sysext/install/Classes/Service/LocalConfigurationValueService.php
@@ -0,0 +1,179 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Service;
+
+/*
+ * 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\Configuration\ConfigurationManager;
+use TYPO3\CMS\Core\Utility\ArrayUtility;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Status\OkStatus;
+
+/**
+ * Service handling bulk read and write of LocalConfiguration values.
+ *
+ * Used by "Configure global settings" / "All configuration" view.
+ */
+class LocalConfigurationValueService
+{
+    /**
+     * Error handlers are a bit mask in PHP. This register hints the View to
+     * add a fluid view helper resolving the bit mask to its representation
+     * as constants again for the specified items in ['SYS'].
+     *
+     * @var array
+     */
+    protected $phpErrorCodesSettings = [
+        'errorHandlerErrors',
+        'exceptionalErrors',
+        'syslogErrorReporting',
+        'belogErrorReporting',
+    ];
+
+    /**
+     * Get up configuration data. Prepares main TYPO3_CONF_VARS
+     * array to be displayed and merges is with the description file
+     *
+     * @return array Configuration data
+     */
+    public function getCurrentConfigurationData(): array
+    {
+        $data = [];
+        $typo3ConfVars = array_keys($GLOBALS['TYPO3_CONF_VARS']);
+        sort($typo3ConfVars);
+        $commentArray = $this->getDefaultConfigArrayComments();
+        foreach ($typo3ConfVars as $sectionName) {
+            $data[$sectionName] = [];
+
+            foreach ($GLOBALS['TYPO3_CONF_VARS'][$sectionName] as $key => $value) {
+                $description = trim((string)$commentArray[$sectionName][$key]);
+                $isTextarea = (bool)preg_match('/^(<.*?>)?string \\(textarea\\)/i', $description);
+                $doNotRender = (bool)preg_match('/^(<.*?>)?string \\(exclude\\)/i', $description);
+
+                if (!is_array($value) && !$doNotRender && (!preg_match('/[' . LF . CR . ']/', (string)$value) || $isTextarea)) {
+                    $itemData = [];
+                    $itemData['key'] = $key;
+                    $itemData['description'] = $description;
+                    if ($isTextarea) {
+                        $itemData['type'] = 'textarea';
+                        $itemData['value'] = str_replace(['\' . LF . \'', '\' . LF . \''], [LF, LF], $value);
+                    } elseif (preg_match('/^(<.*?>)?boolean/i', $description)) {
+                        $itemData['type'] = 'checkbox';
+                        $itemData['value'] = $value ? '1' : '0';
+                        $itemData['checked'] = (bool)$value;
+                    } elseif (preg_match('/^(<.*?>)?integer/i', $description)) {
+                        $itemData['type'] = 'number';
+                        $itemData['value'] = (int)$value;
+                    } else {
+                        $itemData['type'] = 'input';
+                        $itemData['value'] = $value;
+                    }
+
+                    // Check if the setting is a PHP error code, will trigger a view helper in fluid
+                    if ($sectionName === 'SYS' && in_array($key, $this->phpErrorCodesSettings)) {
+                        $itemData['phpErrorCode'] = true;
+                    }
+
+                    $data[$sectionName][] = $itemData;
+                }
+            }
+        }
+        return $data;
+    }
+
+    /**
+     * Store changed values in LocalConfiguration
+     *
+     * @param array $valueList Nested array with key['key'] value
+     * @return array StatusInterface[]
+     */
+    public function updateLocalConfigurationValues(array $valueList): array
+    {
+        $statusObjects = [];
+        $configurationPathValuePairs = [];
+        $commentArray = $this->getDefaultConfigArrayComments();
+        $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
+        foreach ($valueList as $path => $value) {
+            $oldValue = $configurationManager->getConfigurationValueByPath($path);
+            $description = ArrayUtility::getValueByPath($commentArray, $path);
+
+            if (preg_match('/^string \\(textarea\\)/i', $description)) {
+                // Force Unix line breaks in text areas
+                $value = str_replace(CR, '', $value);
+                // Preserve line breaks
+                $value = str_replace(LF, '\' . LF . \'', $value);
+            }
+
+            if (preg_match('/^(<.*?>)?boolean/i', $description)) {
+                // When submitting settings in the Install Tool, values that default to "FALSE" or "TRUE"
+                // in EXT:core/Configuration/DefaultConfiguration.php will be sent as "0" resp. "1".
+                $value = $value === '1';
+                $valueHasChanged = (bool)$oldValue !== $value;
+            } elseif (preg_match('/^(<.*?>)?integer/i', $description)) {
+                // Cast integer values to integers (but only for values that can not contain a string as well)
+                $value = (int)$value;
+                $valueHasChanged = (int)$oldValue !== $value;
+            } else {
+                $valueHasChanged = (string)$oldValue !== (string)$value;
+            }
+
+            // Save if value changed
+            if ($valueHasChanged) {
+                $configurationPathValuePairs[$path] = $value;
+                $status = GeneralUtility::makeInstance(OkStatus::class);
+                $status->setTitle($path);
+                if (is_bool($value)) {
+                    $status->setMessage('New value = ' . ($value ? 'true' : 'false'));
+                } else {
+                    $status->setMessage('New value = ' . $value);
+                }
+                $statusObjects[] = $status;
+            }
+        }
+        if (!empty($statusObjects)) {
+            $configurationManager->setLocalConfigurationValuesByPathValuePairs($configurationPathValuePairs);
+        }
+        return $statusObjects;
+    }
+
+    /**
+     * Returns an array of available sections and their description
+     *
+     * @return string[]
+     */
+    public function getSpeakingSectionNames(): array
+    {
+        return [
+            'BE' => 'Backend',
+            'DB' => 'Database',
+            'EXT' => 'Extension Installation',
+            'FE' => 'Frontend',
+            'GFX' => 'Image Processing',
+            'HTTP' => 'Connection',
+            'MAIL' => 'Mail',
+            'SYS' => 'System'
+        ];
+    }
+
+    /**
+     * Read descriptions from description file
+     *
+     * @return array
+     */
+    protected function getDefaultConfigArrayComments(): array
+    {
+        $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
+        return require $configurationManager->getDefaultConfigurationDescriptionFileLocation();
+    }
+}
diff --git a/typo3/sysext/install/Classes/Service/SqlExpectedSchemaService.php b/typo3/sysext/install/Classes/Service/SqlExpectedSchemaService.php
deleted file mode 100644
index e0d0addb4da9..000000000000
--- a/typo3/sysext/install/Classes/Service/SqlExpectedSchemaService.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Service;
-
-/*
- * 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\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\SignalSlot\Dispatcher;
-
-/**
- * Expected schema service
- *
- * @internal use in install tool only!
- */
-class SqlExpectedSchemaService
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher
-     */
-    protected $signalSlotDispatcher;
-
-    /**
-     * @param Dispatcher $signalSlotDispatcher
-     */
-    public function __construct(Dispatcher $signalSlotDispatcher = null)
-    {
-        $this->signalSlotDispatcher = $signalSlotDispatcher ?: GeneralUtility::makeInstance(Dispatcher::class);
-    }
-
-    /**
-     * Get expected schema array
-     *
-     * @return array Expected schema
-     */
-    public function getExpectedDatabaseSchema()
-    {
-        /** @var \TYPO3\CMS\Install\Service\SqlSchemaMigrationService $schemaMigrationService */
-        $schemaMigrationService = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Service\SqlSchemaMigrationService::class);
-        // Raw concatenated ext_tables.sql and friends string
-        $expectedSchemaString = $this->getTablesDefinitionString();
-        // Remove comments
-        $cleanedExpectedSchemaString = implode(LF, $schemaMigrationService->getStatementArray($expectedSchemaString, true, '^CREATE TABLE '));
-        $expectedSchema = $schemaMigrationService->getFieldDefinitions_fileContent($cleanedExpectedSchemaString);
-
-        return $expectedSchema;
-    }
-
-    /**
-     * Cycle through all loaded extensions and get full table definitions as concatenated string
-     *
-     * @param bool $withStatic TRUE if sql from ext_tables_static+adt.sql should be loaded, too.
-     * @return string Concatenated SQL of loaded extensions ext_tables.sql
-     */
-    public function getTablesDefinitionString($withStatic = false)
-    {
-        $sqlString = [];
-
-        // Find all ext_tables.sql of loaded extensions
-        $loadedExtensionInformation = $GLOBALS['TYPO3_LOADED_EXT'];
-        foreach ($loadedExtensionInformation as $extensionConfiguration) {
-            if ((is_array($extensionConfiguration) || $extensionConfiguration instanceof \ArrayAccess) && $extensionConfiguration['ext_tables.sql']) {
-                $sqlString[] = file_get_contents($extensionConfiguration['ext_tables.sql']);
-            }
-            if ($withStatic
-                && (is_array($extensionConfiguration) || $extensionConfiguration instanceof \ArrayAccess)
-                && $extensionConfiguration['ext_tables_static+adt.sql']
-            ) {
-                $sqlString[] = file_get_contents($extensionConfiguration['ext_tables_static+adt.sql']);
-            }
-        }
-
-        $sqlString = $this->emitTablesDefinitionIsBeingBuiltSignal($sqlString);
-
-        return implode(LF . LF . LF . LF, $sqlString);
-    }
-
-    /**
-     * Emits a signal to manipulate the tables definitions
-     *
-     * @param array $sqlString
-     * @return mixed
-     */
-    protected function emitTablesDefinitionIsBeingBuiltSignal(array $sqlString)
-    {
-        $signalReturn = $this->signalSlotDispatcher->dispatch(__CLASS__, 'tablesDefinitionIsBeingBuilt', [$sqlString]);
-        // This is important to support old associated returns
-        $signalReturn = array_values($signalReturn);
-        $sqlString = $signalReturn[0];
-        if (!is_array($sqlString)) {
-            throw new Exception\UnexpectedSignalReturnValueTypeException(
-                sprintf(
-                    'The signal %s of class %s returned a value of type %s, but array was expected.',
-                    'tablesDefinitionIsBeingBuilt',
-                    __CLASS__,
-                    gettype($sqlString)
-                ),
-                1476109357
-            );
-        }
-        return $sqlString;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Service/Typo3tempFileService.php b/typo3/sysext/install/Classes/Service/Typo3tempFileService.php
new file mode 100644
index 000000000000..23e3838f0622
--- /dev/null
+++ b/typo3/sysext/install/Classes/Service/Typo3tempFileService.php
@@ -0,0 +1,100 @@
+<?php
+namespace TYPO3\CMS\Install\Service;
+
+/*
+ * 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 Symfony\Component\Finder\Finder;
+use Symfony\Component\Finder\SplFileInfo;
+use TYPO3\CMS\Core\Resource\ProcessedFileRepository;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Service class to manage typo3temp/assets folder cleanup
+ */
+class Typo3tempFileService
+{
+    /**
+     * Returns a list of directory names in typo3temp/assets and their number of files
+     *
+     * @return array
+     */
+    public function getDirectoryStatistics()
+    {
+        $basePath = PATH_site . 'typo3temp/assets';
+        if (!is_dir($basePath)) {
+            return [];
+        }
+
+        $dirFinder = new Finder();
+        $dirsInAssets = $dirFinder->directories()->in($basePath)->depth(0)->sortByName();
+        $stats = [];
+        foreach ($dirsInAssets as $dirInAssets) {
+            /** @var $dirInAssets SplFileInfo */
+            $fileFinder = new Finder();
+            $fileCount = $fileFinder->files()->in($dirInAssets->getPathname())->count();
+            $stats[] = [
+                'directory' => $dirInAssets->getFilename(),
+                'numberOfFiles' => $fileCount,
+            ];
+        }
+
+        return $stats;
+    }
+
+    /**
+     * Clear processed files
+     *
+     * The sys_file_processedfile table is truncated and the physical files of local storages are deleted.
+     *
+     * @return int 0 if all went well, if >0 this number of files couldn't be deleted
+     */
+    public function clearProcessedFiles()
+    {
+        $repository = GeneralUtility::makeInstance(ProcessedFileRepository::class);
+        return $repository->removeAll();
+    }
+
+    /**
+     * Clear files in a typo3temp/assets/ folder (not _processed_!)
+     *
+     * @param string $folderName
+     * @return bool TRUE if all went well
+     * @throws \RuntimeException If folder path is not valid
+     */
+    public function clearAssetsFolder(string $folderName)
+    {
+        $basePath = PATH_site . 'typo3temp/assets/' . $folderName;
+        if (empty($folderName) || !GeneralUtility::isAllowedAbsPath($basePath)) {
+            throw new \RuntimeException(
+                'Path to folder ' . $folderName . ' not allowed.',
+                1501781453
+            );
+        }
+        if (!is_dir($basePath)) {
+            throw new \RuntimeException(
+                'Folder path ' . $basePath . ' does not exist or is no directory.',
+                1501781454
+            );
+        }
+
+        $finder = new Finder();
+        $files = $finder->files()->in($basePath)->depth(0)->sortByName();
+        foreach ($files as $file) {
+            /** @var $file SplFileInfo */
+            $path = $file->getPathname();
+            @unlink($path);
+        }
+        return true;
+    }
+}
diff --git a/typo3/sysext/install/Classes/Service/UpgradeWizardsService.php b/typo3/sysext/install/Classes/Service/UpgradeWizardsService.php
new file mode 100644
index 000000000000..ac28e85cfb1f
--- /dev/null
+++ b/typo3/sysext/install/Classes/Service/UpgradeWizardsService.php
@@ -0,0 +1,380 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Service;
+
+/*
+ * 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 Doctrine\DBAL\Schema\Column;
+use Doctrine\DBAL\Schema\Table;
+use TYPO3\CMS\Core\Cache\DatabaseSchemaService;
+use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Core\Database\Schema\SchemaMigrator;
+use TYPO3\CMS\Core\Database\Schema\SqlReader;
+use TYPO3\CMS\Core\Registry;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Status\ErrorStatus;
+use TYPO3\CMS\Install\Status\OkStatus;
+use TYPO3\CMS\Install\Updates\AbstractUpdate;
+use TYPO3\CMS\Install\Updates\RowUpdater\RowUpdaterInterface;
+
+/**
+ * Service class helping managing upgrade wizards
+ */
+class UpgradeWizardsService
+{
+    /**
+     * Force creation / update of caching framework tables that are needed by some update wizards
+     *
+     * @return array List of executed statements
+     */
+    public function silentCacheFrameworkTableSchemaMigration(): array
+    {
+        $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
+        $cachingFrameworkDatabaseSchemaService = GeneralUtility::makeInstance(DatabaseSchemaService::class);
+        $createTableStatements = $sqlReader->getStatementArray(
+            $cachingFrameworkDatabaseSchemaService->getCachingFrameworkRequiredDatabaseSchema()
+        );
+        $statements = [];
+        if (!empty($createTableStatements)) {
+            $schemaMigrationService = GeneralUtility::makeInstance(SchemaMigrator::class);
+            $statements = $schemaMigrationService->install($createTableStatements);
+        }
+        return $statements;
+    }
+
+    /**
+     * @return array List of wizards marked as done in registry
+     */
+    public function listOfWizardsDoneInRegistry(): array
+    {
+        $wizardsDoneInRegistry = [];
+        $registry = GeneralUtility::makeInstance(Registry::class);
+        foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] as $identifier => $className) {
+            if ($registry->get('installUpdate', $className, false)) {
+                $wizardInstance = GeneralUtility::makeInstance($className);
+                $wizardsDoneInRegistry[] = [
+                    'class' => $className,
+                    'identifier' => $identifier,
+                    'title' => $wizardInstance->getTitle(),
+                ];
+            }
+        }
+        return $wizardsDoneInRegistry;
+    }
+
+    /**
+     * @return array List of row updaters marked as done in registry
+     * @throws \RuntimeException
+     */
+    public function listOfRowUpdatersDoneInRegistry(): array
+    {
+        $registry = GeneralUtility::makeInstance(Registry::class);
+        $rowUpdatersDoneClassNames = $registry->get('installUpdateRows', 'rowUpdatersDone', []);
+        $rowUpdatersDone = [];
+        foreach ($rowUpdatersDoneClassNames as $rowUpdaterClassName) {
+            // Silently skip non existing DatabaseRowsUpdateWizards
+            if (!class_exists($rowUpdaterClassName)) {
+                continue;
+            }
+            /** @var RowUpdaterInterface $rowUpdater */
+            $rowUpdater = GeneralUtility::makeInstance($rowUpdaterClassName);
+            if (!$rowUpdater instanceof RowUpdaterInterface) {
+                throw new \RuntimeException(
+                    'Row updater must implement RowUpdaterInterface',
+                    1484152906
+                );
+            }
+            $rowUpdatersDone[] = [
+                'class' => $rowUpdaterClassName,
+                'identifier' => $rowUpdaterClassName,
+                'title' => $rowUpdater->getTitle(),
+            ];
+        }
+        return $rowUpdatersDone;
+    }
+
+    /**
+     * Mark one wizard as undone. This can be a "casual" wizard
+     * or a single "row updater".
+     *
+     * @param string $identifier Wizard or RowUpdater identifier
+     * @return bool True if wizard has been marked as undone
+     */
+    public function markWizardUndoneInRegistry(string $identifier): bool
+    {
+        $registry = GeneralUtility::makeInstance(Registry::class);
+        $aWizardHasBeenMarkedUndone = false;
+        $wizardsDoneList = $this->listOfWizardsDoneInRegistry();
+        foreach ($wizardsDoneList as $wizard) {
+            if ($wizard['identifier'] === $identifier) {
+                $aWizardHasBeenMarkedUndone = true;
+                $registry->set('installUpdate', $wizard['class'], 0);
+            }
+        }
+        if (!$aWizardHasBeenMarkedUndone) {
+            $rowUpdatersDoneList = $this->listOfRowUpdatersDoneInRegistry();
+            $registryArray = $registry->get('installUpdateRows', 'rowUpdatersDone', []);
+            foreach ($rowUpdatersDoneList as $rowUpdater) {
+                if ($rowUpdater['identifier'] === $identifier) {
+                    $aWizardHasBeenMarkedUndone = true;
+                    foreach ($registryArray as $rowUpdaterMarkedAsDonePosition => $rowUpdaterMarkedAsDone) {
+                        if ($rowUpdaterMarkedAsDone === $rowUpdater['class']) {
+                            unset($registryArray[$rowUpdaterMarkedAsDonePosition]);
+                            break;
+                        }
+                    }
+                    $registry->set('installUpdateRows', 'rowUpdatersDone', $registryArray);
+                }
+            }
+        }
+        return $aWizardHasBeenMarkedUndone;
+    }
+
+    /**
+     * Get a list of tables, single columns and indexes to add.
+     *
+     * @return array Array with possible keys "tables", "columns", "indexes"
+     */
+    public function getBlockingDatabaseAdds(): array
+    {
+        $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
+        $databaseDefinitions = $sqlReader->getCreateTableStatementArray($sqlReader->getTablesDefinitionString());
+
+        $schemaMigrator = GeneralUtility::makeInstance(SchemaMigrator::class);
+        $databaseDifferences = $schemaMigrator->getSchemaDiffs($databaseDefinitions);
+
+        $adds = [];
+        foreach ($databaseDifferences as $schemaDiff) {
+            foreach ($schemaDiff->newTables as $newTable) {
+                /** @var Table $newTable*/
+                if (!is_array($adds['tables'])) {
+                    $adds['tables'] = [];
+                }
+                $adds['tables'][] = [
+                    'table' => $newTable->getName(),
+                ];
+            }
+            foreach ($schemaDiff->changedTables as $changedTable) {
+                foreach ($changedTable->addedColumns as $addedColumn) {
+                    /** @var Column $addedColumn */
+                    if (!is_array($adds['columns'])) {
+                        $adds['columns'] = [];
+                    }
+                    $adds['columns'][] = [
+                        'table' => $changedTable->name,
+                        'field' => $addedColumn->getName(),
+                    ];
+                }
+                foreach ($changedTable->addedIndexes as $addedIndex) {
+                    /** $var Index $addedIndex */
+                    if (!is_array($adds['indexes'])) {
+                        $adds['indexes'] = [];
+                    }
+                    $adds['indexes'][] = [
+                        'table' => $changedTable->name,
+                        'index' => $addedIndex->getName(),
+                    ];
+                }
+            }
+        }
+
+        return $adds;
+    }
+
+    /**
+     * Add missing tables, indexes and fields to DB.
+     */
+    public function addMissingTablesAndFields()
+    {
+        $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
+        $databaseDefinitions = $sqlReader->getCreateTableStatementArray($sqlReader->getTablesDefinitionString());
+        $schemaMigrator = GeneralUtility::makeInstance(SchemaMigrator::class);
+        $schemaMigrator->install($databaseDefinitions, true);
+    }
+
+    /**
+     * True if DB main charset on mysql is utf8
+     *
+     * @return bool True if charset is ok
+     */
+    public function isDatabaseCharsetUtf8(): bool
+    {
+        $connection = GeneralUtility::makeInstance(ConnectionPool::class)
+            ->getConnectionByName(ConnectionPool::DEFAULT_CONNECTION_NAME);
+        $isDefaultConnectionMysql = strpos($connection->getServerVersion(), 'MySQL') === 0;
+
+        if (!$isDefaultConnectionMysql) {
+            // Not tested on non mysql
+            $charsetOk = true;
+        } else {
+            $queryBuilder = $connection->createQueryBuilder();
+            $charset = (string)$queryBuilder->select('DEFAULT_CHARACTER_SET_NAME')
+                ->from('information_schema.SCHEMATA')
+                ->where(
+                    $queryBuilder->expr()->eq(
+                        'SCHEMA_NAME',
+                        $queryBuilder->createNamedParameter($connection->getDatabase(), \PDO::PARAM_STR)
+                    )
+                )
+                ->setMaxResults(1)
+                ->execute()
+                ->fetchColumn();
+            // check if database charset is utf-8, also allows utf8mb4
+            $charsetOk = strpos($charset, 'utf8') !== 0;
+        }
+        return $charsetOk;
+    }
+
+    /**
+     * Set default connection MySQL database charset to utf8.
+     * Should be called only *if* default database connection is actually MySQL
+     */
+    public function setDatabaseCharsetUtf8()
+    {
+        $connection = GeneralUtility::makeInstance(ConnectionPool::class)
+            ->getConnectionByName(ConnectionPool::DEFAULT_CONNECTION_NAME);
+        $sql = 'ALTER DATABASE ' . $connection->quoteIdentifier($connection->getDatabase()) . ' CHARACTER SET utf8';
+        $connection->exec($sql);
+    }
+
+    /**
+     * Get list of registered upgrade wizards.
+     *
+     * @return array List of upgrade wizards in correct order with detail information
+     */
+    public function getUpgradeWizardsList(): array
+    {
+        $wizards = [];
+        foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'] as $identifier => $class) {
+            /** @var AbstractUpdate $wizardInstance */
+            $wizardInstance = GeneralUtility::makeInstance($class);
+
+            // $explanation is changed by reference in Update objects!
+            $explanation = '';
+            $wizardInstance->checkForUpdate($explanation);
+
+            $wizards[] = [
+                'class' => $class,
+                'identifier' => $identifier,
+                'title' => $wizardInstance->getTitle(),
+                'shouldRenderWizard' => $wizardInstance->shouldRenderWizard(),
+                'markedDoneInRegistry' => GeneralUtility::makeInstance(Registry::class)->get('installUpdate', $class, false),
+                'explanation' => $explanation,
+            ];
+        }
+        return $wizards;
+    }
+
+    /**
+     * Execute the "get user input" step of a wizard
+     *
+     * @param string $identifier
+     * @return array
+     * @throws \RuntimeException
+     */
+    public function getWizardUserInput(string $identifier): array
+    {
+        // Validate identifier exists in upgrade wizard list
+        if (empty($identifier)
+            || !array_key_exists($identifier, $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'])
+        ) {
+            throw new \RuntimeException(
+                'No valid wizard identifier given',
+                1502721731
+            );
+        }
+        $class = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$identifier];
+        $updateObject = GeneralUtility::makeInstance($class);
+        $wizardHtml = '';
+        if (method_exists($updateObject, 'getUserInput')) {
+            $wizardHtml = $updateObject->getUserInput('install[values][' . $identifier . ']');
+        }
+
+        $result = [
+            'identifier' => $identifier,
+            'title' => $updateObject->getTitle(),
+            'wizardHtml' => $wizardHtml,
+        ];
+
+        return $result;
+    }
+
+    /**
+     * Execute a single update wizard
+     *
+     * @param string $identifier
+     * @param array $postValues
+     * @return array StatusInterface[]
+     * @throws \RuntimeException
+     */
+    public function executeWizard(string $identifier, array $postValues = []): array
+    {
+        if (empty($identifier)
+            || !array_key_exists($identifier, $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'])
+        ) {
+            throw new \RuntimeException(
+                'No valid wizard identifier given',
+                1502721732
+            );
+        }
+        $class = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][$identifier];
+        $updateObject = GeneralUtility::makeInstance($class);
+
+        $wizardData = [
+            'identifier' => $identifier,
+            'title' => $updateObject->getTitle(),
+        ];
+
+        $messages = [];
+        // $wizardInputErrorMessage is given as reference to wizard object!
+        $wizardInputErrorMessage = '';
+        if (method_exists($updateObject, 'checkUserInput') && !$updateObject->checkUserInput($wizardInputErrorMessage)) {
+            $message = new ErrorStatus();
+            $message->setTitle('Input parameter broken');
+            $message->setMessage($wizardInputErrorMessage ?: 'Something went wrong!');
+            $messages[] = $message;
+        } else {
+            if (!method_exists($updateObject, 'performUpdate')) {
+                throw new \RuntimeException(
+                    'No performUpdate method in update wizard with identifier ' . $identifier,
+                    1371035200
+                );
+            }
+
+            // Both variables are used by reference in performUpdate()
+            $customOutput = '';
+            $databaseQueries = [];
+            $performResult = $updateObject->performUpdate($databaseQueries, $customOutput);
+
+            if ($performResult) {
+                $message = new OkStatus();
+                $message->setTitle('Update successful');
+                $messages[] = $message;
+            } else {
+                $message = new ErrorStatus();
+                $message->setTitle('Update failed!');
+                if ($customOutput) {
+                    $message->setMessage($customOutput);
+                }
+                $messages[] = $message;
+            }
+
+            if ($postValues['values']['showDatabaseQueries'] == 1) {
+                $wizardData['queries'] = $databaseQueries;
+            }
+        }
+
+        return $messages;
+    }
+}
diff --git a/typo3/sysext/install/Classes/Status/AbstractStatus.php b/typo3/sysext/install/Classes/Status/AbstractStatus.php
index ed25ca8026a6..15586bec19c0 100644
--- a/typo3/sysext/install/Classes/Status/AbstractStatus.php
+++ b/typo3/sysext/install/Classes/Status/AbstractStatus.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Status;
 
 /*
@@ -24,6 +25,11 @@ abstract class AbstractStatus implements StatusInterface
      */
     protected $severity = '';
 
+    /**
+     * @var int Severity as number
+     */
+    protected $severityNumber = -2;
+
     /**
      * @var string Title
      */
@@ -34,18 +40,34 @@ abstract class AbstractStatus implements StatusInterface
      */
     protected $message = '';
 
+    /**
+     * Default constructor creates severity number from severity string
+     */
+    public function __construct()
+    {
+        $this->severityNumber = $this->getSeverityAsNumber($this->severity);
+    }
+
     /**
      * @return string The severity
      */
-    public function getSeverity()
+    public function getSeverity(): string
     {
         return $this->severity;
     }
 
+    /**
+     * @return int Severity as number
+     */
+    public function getSeverityNumber(): int
+    {
+        return $this->severityNumber;
+    }
+
     /**
      * @return string The title
      */
-    public function getTitle()
+    public function getTitle(): string
     {
         return $this->title;
     }
@@ -55,7 +77,7 @@ abstract class AbstractStatus implements StatusInterface
      *
      * @param string $title The title
      */
-    public function setTitle($title)
+    public function setTitle(string $title)
     {
         $this->title = $title;
     }
@@ -65,7 +87,7 @@ abstract class AbstractStatus implements StatusInterface
      *
      * @return string Status message
      */
-    public function getMessage()
+    public function getMessage(): string
     {
         return $this->message;
     }
@@ -75,8 +97,56 @@ abstract class AbstractStatus implements StatusInterface
      *
      * @param string $message Status message
      */
-    public function setMessage($message)
+    public function setMessage(string $message)
     {
         $this->message = $message;
     }
+
+    /**
+     * @return array Json representation of this status
+     */
+    public function jsonSerialize(): array
+    {
+        return [
+            'severity' => $this->getSeverityNumber(),
+            'title' => $this->getTitle(),
+            'status' => $this->getMessage()
+        ];
+    }
+
+    /**
+     * Return the corresponding integer value for given severity string
+     *
+     * @param string $severity
+     * @return int
+     */
+    protected function getSeverityAsNumber($severity): int
+    {
+        $number = -2;
+        switch (strtolower($severity)) {
+            case 'loading':
+                $number = -3;
+                break;
+            case 'notice':
+                $number = -2;
+                break;
+            case 'info':
+                $number = -1;
+                break;
+            case 'ok':
+            case 'success':
+                $number = 0;
+                break;
+            case 'warning':
+                $number = 1;
+                break;
+            case 'error':
+            case 'danger':
+            case 'alert':
+            case 'fatal':
+                $number = 2;
+                break;
+        }
+        return $number;
+    }
 }
diff --git a/typo3/sysext/install/Classes/Status/AlertStatus.php b/typo3/sysext/install/Classes/Status/AlertStatus.php
index 19056969f062..37817adc5d27 100644
--- a/typo3/sysext/install/Classes/Status/AlertStatus.php
+++ b/typo3/sysext/install/Classes/Status/AlertStatus.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Status;
 
 /*
diff --git a/typo3/sysext/install/Classes/Status/ErrorStatus.php b/typo3/sysext/install/Classes/Status/ErrorStatus.php
index 149c4bab99e5..3a7978ae3167 100644
--- a/typo3/sysext/install/Classes/Status/ErrorStatus.php
+++ b/typo3/sysext/install/Classes/Status/ErrorStatus.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Status;
 
 /*
diff --git a/typo3/sysext/install/Classes/Status/Exception.php b/typo3/sysext/install/Classes/Status/Exception.php
index f1a0004e4368..a5192047781c 100644
--- a/typo3/sysext/install/Classes/Status/Exception.php
+++ b/typo3/sysext/install/Classes/Status/Exception.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Status;
 
 /*
diff --git a/typo3/sysext/install/Classes/Status/InfoStatus.php b/typo3/sysext/install/Classes/Status/InfoStatus.php
index b39e325f32d9..e717136dc168 100644
--- a/typo3/sysext/install/Classes/Status/InfoStatus.php
+++ b/typo3/sysext/install/Classes/Status/InfoStatus.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Status;
 
 /*
diff --git a/typo3/sysext/install/Classes/Status/LoadingStatus.php b/typo3/sysext/install/Classes/Status/LoadingStatus.php
index 3f9b65ac2e93..86013af6396e 100644
--- a/typo3/sysext/install/Classes/Status/LoadingStatus.php
+++ b/typo3/sysext/install/Classes/Status/LoadingStatus.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Status;
 
 /*
diff --git a/typo3/sysext/install/Classes/Status/NoticeStatus.php b/typo3/sysext/install/Classes/Status/NoticeStatus.php
index 18dab5eb5e36..8f7a3d9c41bc 100644
--- a/typo3/sysext/install/Classes/Status/NoticeStatus.php
+++ b/typo3/sysext/install/Classes/Status/NoticeStatus.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Status;
 
 /*
diff --git a/typo3/sysext/install/Classes/Status/OkStatus.php b/typo3/sysext/install/Classes/Status/OkStatus.php
index 6159edfff41f..04db84ce6db4 100644
--- a/typo3/sysext/install/Classes/Status/OkStatus.php
+++ b/typo3/sysext/install/Classes/Status/OkStatus.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Status;
 
 /*
diff --git a/typo3/sysext/install/Classes/Status/StatusInterface.php b/typo3/sysext/install/Classes/Status/StatusInterface.php
index b5f6910c4498..9635a73f5738 100644
--- a/typo3/sysext/install/Classes/Status/StatusInterface.php
+++ b/typo3/sysext/install/Classes/Status/StatusInterface.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Status;
 
 /*
@@ -17,40 +18,47 @@ namespace TYPO3\CMS\Install\Status;
 /**
  * Status interface
  */
-interface StatusInterface
+interface StatusInterface extends \JsonSerializable
 {
     /**
      * Get severity
      *
      * @return string The severity
      */
-    public function getSeverity();
+    public function getSeverity(): string;
+
+    /**
+     * Get severity as integer
+     *
+     * @return int The severity as int
+     */
+    public function getSeverityNumber(): int;
 
     /**
      * Get title
      *
      * @return string The title
      */
-    public function getTitle();
+    public function getTitle(): string;
 
     /**
      * Set title
      *
      * @param string $title The title
      */
-    public function setTitle($title);
+    public function setTitle(string $title);
 
     /**
      * Get status message
      *
      * @return string Status message
      */
-    public function getMessage();
+    public function getMessage(): string;
 
     /**
      * Set status message
      *
      * @param string $message Status message
      */
-    public function setMessage($message);
+    public function setMessage(string $message);
 }
diff --git a/typo3/sysext/install/Classes/Status/StatusUtility.php b/typo3/sysext/install/Classes/Status/StatusUtility.php
index 0100876127f7..ffd2b08b97d3 100644
--- a/typo3/sysext/install/Classes/Status/StatusUtility.php
+++ b/typo3/sysext/install/Classes/Status/StatusUtility.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Status;
 
 /*
@@ -23,11 +24,11 @@ class StatusUtility
     /**
      * Order status objects by severity
      *
-     * @param array<\TYPO3\CMS\Install\Status\StatusInterface> $statusObjects Status objects in random order
+     * @param StatusInterface[] $statusObjects Status objects in random order
      * @return array With sub arrays by severity
      * @throws Exception
      */
-    public function sortBySeverity(array $statusObjects = [])
+    public function sortBySeverity(array $statusObjects = []): array
     {
         $orderedStatus = [
             'alert' => $this->filterBySeverity($statusObjects, 'alert'),
@@ -43,15 +44,14 @@ class StatusUtility
     /**
      * Filter a list of status objects by severity
      *
-     * @param array $statusObjects Given list of status objects
+     * @param StatusInterface[] $statusObjects Given list of status objects
      * @param string $severity Severity identifier
      * @throws Exception
      * @return array List of status objects with given severity
      */
-    public function filterBySeverity(array $statusObjects = [], $severity = 'ok')
+    public function filterBySeverity(array $statusObjects = [], $severity = 'ok'): array
     {
         $filteredObjects = [];
-        /** @var $status StatusInterface */
         foreach ($statusObjects as $status) {
             if (!$status instanceof StatusInterface) {
                 throw new Exception(
diff --git a/typo3/sysext/install/Classes/Status/WarningStatus.php b/typo3/sysext/install/Classes/Status/WarningStatus.php
index af582b741217..d2115e670ee8 100644
--- a/typo3/sysext/install/Classes/Status/WarningStatus.php
+++ b/typo3/sysext/install/Classes/Status/WarningStatus.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Status;
 
 /*
diff --git a/typo3/sysext/install/Classes/Updates/AbstractDatabaseSchemaUpdate.php b/typo3/sysext/install/Classes/Updates/AbstractDatabaseSchemaUpdate.php
deleted file mode 100644
index f71f0f40798a..000000000000
--- a/typo3/sysext/install/Classes/Updates/AbstractDatabaseSchemaUpdate.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * 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 Doctrine\DBAL\Schema\SchemaDiff;
-use TYPO3\CMS\Core\Database\Schema\SchemaMigrator;
-use TYPO3\CMS\Core\Database\Schema\SqlReader;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Contains the update class to create and alter tables, fields and keys to comply to the database schema
- */
-abstract class AbstractDatabaseSchemaUpdate extends AbstractUpdate
-{
-    /**
-     * @var \TYPO3\CMS\Core\Database\Schema\SchemaMigrator
-     */
-    protected $schemaMigrationService;
-
-    protected $listTemplate = '
-		<p>%1$s</p>
-		<fieldset>
-			<ol class="t3-install-form-label-after">%2$s</ol>
-		</fieldset>
-    ';
-
-    /**
-     * Template for list items consisting of table and field names
-     *
-     * @var string
-     */
-    protected $fieldListItem = '
-		<li class="labelAfter">
-			<label><strong>%1$s</strong>: %2$s</label>
-		</li>
-	';
-
-    /**
-     * Template for list items consisting of table names
-     *
-     * @var string
-     */
-    protected $tableListItem = '
-		<li class="labelAfter">
-			<label><strong>%1$s</strong></label>
-		</li>
-	';
-
-    /**
-     * Constructor function.
-     *
-     * @param \TYPO3\CMS\Core\Database\Schema\SchemaMigrator $schemaMigrationService
-     * @throws \InvalidArgumentException
-     */
-    public function __construct(SchemaMigrator $schemaMigrationService = null)
-    {
-        $this->schemaMigrationService = $schemaMigrationService ?: GeneralUtility::makeInstance(
-            SchemaMigrator::class
-        );
-    }
-
-    /**
-     * Compare current and expected database schemas and return the database differences
-     *
-     * @return SchemaDiff[] database differences as Doctrine SchemaDiff objects (per connection)
-     * @throws \Doctrine\DBAL\DBALException
-     * @throws \Doctrine\DBAL\Schema\SchemaException
-     * @throws \InvalidArgumentException
-     * @throws \RuntimeException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\UnexpectedSignalReturnValueTypeException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\StatementException
-     */
-    protected function getDatabaseDifferences(): array
-    {
-        $statements = $this->getDatabaseDefinition();
-
-        return $this->schemaMigrationService->getSchemaDiffs($statements);
-    }
-
-    /**
-     * Get list of CREATE TABLE statements from all ext_tables.sql files
-     *
-     * @return string[]
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\UnexpectedSignalReturnValueTypeException
-     * @throws \InvalidArgumentException
-     */
-    protected function getDatabaseDefinition(): array
-    {
-        $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
-
-        return $sqlReader->getCreateTableStatementArray($sqlReader->getTablesDefinitionString());
-    }
-
-    /**
-     * @param string $tableName
-     * @param string $fieldName
-     * @return string
-     */
-    protected function renderFieldListItem(string $tableName, string $fieldName): string
-    {
-        return sprintf($this->fieldListItem, $tableName, $fieldName);
-    }
-
-    /**
-     * @param string $tableName
-     * @return string
-     */
-    protected function renderTableListItem(string $tableName): string
-    {
-        return sprintf($this->tableListItem, $tableName);
-    }
-
-    /**
-     * @param string $label
-     * @param string $items
-     * @return string
-     */
-    protected function renderList(string $label, string $items): string
-    {
-        if (trim($items) === '') {
-            return '';
-        }
-
-        return sprintf($this->listTemplate, $label, $items);
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/AbstractUpdate.php b/typo3/sysext/install/Classes/Updates/AbstractUpdate.php
index dcc0b434c997..f926b5468a79 100644
--- a/typo3/sysext/install/Classes/Updates/AbstractUpdate.php
+++ b/typo3/sysext/install/Classes/Updates/AbstractUpdate.php
@@ -14,11 +14,9 @@ namespace TYPO3\CMS\Install\Updates;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\CMS\Core\Configuration\ConfigurationManager;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Registry;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Install\Controller\Action\Tool\UpgradeWizard;
 
 /**
  * Generic class that every update wizard class inherits from.
@@ -40,13 +38,6 @@ abstract class AbstractUpdate
      */
     protected $identifier;
 
-    /**
-     * Parent object
-     *
-     * @var UpgradeWizard
-     */
-    public $pObj;
-
     /**
      * User input, set from outside
      *
@@ -54,14 +45,6 @@ abstract class AbstractUpdate
      */
     public $userInput;
 
-    /**
-     * Current TYPO3 version number, set from outside
-     * Version number coming from \TYPO3\CMS\Core\Utility\VersionNumberUtility::convertVersionNumberToInteger()
-     *
-     * @var int
-     */
-    public $versionNumber;
-
     /**
      * Returns the title attribute
      *
@@ -122,29 +105,13 @@ abstract class AbstractUpdate
         return $showUpdate > 0 || $result == true;
     }
 
-    /**
-     * Simple wrapper function that helps to check whether (if)
-     * this feature is cool if you want to tell the user that the update wizard
-     * is working fine, just as output (useful for the character set / utf8 wizard)
-     *
-     * @return bool If the wizard should render the Next() button on the overview page
-     * @see checkForUpdate()
-     */
-    public function shouldRenderNextButton()
-    {
-        $showUpdate = 0;
-        $explanation = '';
-        $result = $this->checkForUpdate($explanation, $showUpdate);
-        return $showUpdate != 2 || $result;
-    }
-
     /**
      * Check if given table exists
      *
      * @param string $table
      * @return bool
      */
-    public function checkIfTableExists($table)
+    protected function checkIfTableExists($table)
     {
         $tableExists = GeneralUtility::makeInstance(ConnectionPool::class)
             ->getConnectionForTable($table)
@@ -208,18 +175,6 @@ abstract class AbstractUpdate
     protected function isWizardDone()
     {
         $wizardClassName = get_class($this);
-        $done = GeneralUtility::makeInstance(Registry::class)->get('installUpdate', $wizardClassName, false);
-
-        // Fall back in case the wizard for migration of "wizard done" flags to system registry was not run yet
-        if (!$done) {
-            try {
-                GeneralUtility::makeInstance(ConfigurationManager::class)
-                    ->getLocalConfigurationValueByPath('INSTALL/wizardDone/' . $wizardClassName);
-                $done = true;
-            } catch (\RuntimeException $e) {
-            }
-        }
-
-        return $done;
+        return GeneralUtility::makeInstance(Registry::class)->get('installUpdate', $wizardClassName, false);
     }
 }
diff --git a/typo3/sysext/install/Classes/Updates/DatabaseCharsetUpdate.php b/typo3/sysext/install/Classes/Updates/DatabaseCharsetUpdate.php
deleted file mode 100644
index 1d48a2f3d155..000000000000
--- a/typo3/sysext/install/Classes/Updates/DatabaseCharsetUpdate.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * 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 Doctrine\DBAL\DBALException;
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Move "wizard done" flags to system registry
- */
-class DatabaseCharsetUpdate extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Set default database charset to utf-8';
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     * @throws \InvalidArgumentException
-     * @throws \Doctrine\DBAL\DBALException
-     */
-    public function checkForUpdate(&$description)
-    {
-        if ($this->isWizardDone() || !$this->isDefaultConnectionMySQL()) {
-            return false;
-        }
-
-        $result = false;
-        $description = 'Sets the default database charset to utf-8 to'
-            . ' ensure new tables are created with correct charset.
-        WARNING: This will NOT convert any existing data.';
-
-        // check if database charset is utf-8, also allows utf8mb4
-        if (strpos($this->getDefaultDatabaseCharset(), 'utf8') !== 0) {
-            $result = true;
-        } else {
-            $this->markWizardAsDone();
-        }
-
-        return $result;
-    }
-
-    /**
-     * Performs the accordant updates.
-     *
-     * @param array &$dbQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool Whether everything went smoothly or not
-     * @throws \InvalidArgumentException
-     * @throws \Doctrine\DBAL\DBALException
-     */
-    public function performUpdate(array &$dbQueries, &$customMessage)
-    {
-        $connection = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getConnectionByName(ConnectionPool::DEFAULT_CONNECTION_NAME);
-        $sql = 'ALTER DATABASE ' . $connection->quoteIdentifier($connection->getDatabase()) . ' CHARACTER SET utf8';
-
-        try {
-            $connection->exec($sql);
-        } catch (DBALException $e) {
-            $customMessage = 'SQL-ERROR: ' . htmlspecialchars($e->getPrevious()->getMessage());
-            return false;
-        }
-        $dbQueries[] = $sql;
-        $this->markWizardAsDone();
-
-        return true;
-    }
-
-    /**
-     * Return TRUE if this TYPO3 instance runs on a MySQL compatible databasa instance
-     *
-     * @return bool
-     * @throws \InvalidArgumentException
-     * @throws \Doctrine\DBAL\DBALException
-     */
-    protected function isDefaultConnectionMySQL(): bool
-    {
-        $connection = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getConnectionByName(ConnectionPool::DEFAULT_CONNECTION_NAME);
-
-        return strpos($connection->getServerVersion(), 'MySQL') === 0;
-    }
-
-    /**
-     * Retrieves the default character set of the database.
-     *
-     * @return string
-     * @throws \InvalidArgumentException
-     * @throws \Doctrine\DBAL\DBALException
-     */
-    protected function getDefaultDatabaseCharset(): string
-    {
-        $connection = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getConnectionByName(ConnectionPool::DEFAULT_CONNECTION_NAME);
-        $queryBuilder = $connection->createQueryBuilder();
-        return (string)$queryBuilder->select('DEFAULT_CHARACTER_SET_NAME')
-            ->from('information_schema.SCHEMATA')
-            ->where(
-                $queryBuilder->expr()->eq(
-                    'SCHEMA_NAME',
-                    $queryBuilder->createNamedParameter($connection->getDatabase(), \PDO::PARAM_STR)
-                )
-            )
-            ->setMaxResults(1)
-            ->execute()
-            ->fetchColumn();
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/FinalDatabaseSchemaUpdate.php b/typo3/sysext/install/Classes/Updates/FinalDatabaseSchemaUpdate.php
deleted file mode 100644
index 3f2597aaf6ef..000000000000
--- a/typo3/sysext/install/Classes/Updates/FinalDatabaseSchemaUpdate.php
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * 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 Doctrine\DBAL\Schema\ColumnDiff;
-use Doctrine\DBAL\Schema\Index;
-use Doctrine\DBAL\Schema\SchemaDiff;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Install\Service\ContextService;
-
-/**
- * Contains the update class to create and alter tables, fields and keys to comply to the database schema
- */
-class FinalDatabaseSchemaUpdate extends AbstractDatabaseSchemaUpdate
-{
-    /**
-     * Constructor function.
-     */
-    public function __construct()
-    {
-        parent::__construct();
-        $this->title = 'Update database schema: Modify tables and fields';
-    }
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool TRUE if an update is needed, FALSE otherwise
-     * @throws \Doctrine\DBAL\DBALException
-     * @throws \Doctrine\DBAL\Schema\SchemaException
-     * @throws \InvalidArgumentException
-     * @throws \RuntimeException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\UnexpectedSignalReturnValueTypeException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\StatementException
-     */
-    public function checkForUpdate(&$description): bool
-    {
-        $contextService = GeneralUtility::makeInstance(ContextService::class);
-        $description = 'There are tables or fields in the database which need to be changed.<br /><br />' .
-        'This update wizard can be run only when there are no other update wizards left to make sure they have ' .
-        'all needed fields unchanged.<br /><br />If you want to apply changes selectively, ' .
-        '<a href="' . GeneralUtility::getIndpEnv('TYPO3_REQUEST_SCRIPT') . '?install[action]=importantActions&amp;install[context]=' .
-        $contextService->getContextString() .
-        '&amp;install[controller]=tool">go to Database Analyzer</a>.';
-
-        $databaseDifferences = $this->getDatabaseDifferences();
-        foreach ($databaseDifferences as $schemaDiff) {
-            // A change for a table is required
-            if (count($schemaDiff->changedTables) !== 0) {
-                foreach ($schemaDiff->changedTables as $changedTable) {
-                    if (!empty($changedTable->addedColumns) || !empty($changedTable->changedColumns)) {
-                        return true;
-                    }
-                }
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Second step: Show tables, fields and keys to create or update
-     *
-     * @param string $inputPrefix input prefix, all names of form fields are prefixed with this
-     * @return string HTML output
-     * @throws \Doctrine\DBAL\DBALException
-     * @throws \Doctrine\DBAL\Schema\SchemaException
-     * @throws \InvalidArgumentException
-     * @throws \RuntimeException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\UnexpectedSignalReturnValueTypeException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\StatementException
-     */
-    public function getUserInput($inputPrefix)
-    {
-        $result = '';
-        $changedFieldItems = '';
-        $changedIndexItems = '';
-
-        $databaseDifferences = $this->getDatabaseDifferences();
-        foreach ($databaseDifferences as $schemaDiff) {
-            $changedFieldItems .= $this->getChangedFieldInformation($schemaDiff);
-            $changedIndexItems .= $this->getChangedIndexInformation($schemaDiff);
-        }
-
-        $result .= $this->renderList('Change the following fields in tables:', $changedFieldItems);
-        $result .= $this->renderList('Change the following keys in tables:', $changedIndexItems);
-
-        return $result;
-    }
-
-    /**
-     * Performs the database update.
-     *
-     * @param array &$dbQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool TRUE on success, FALSE on error
-     */
-    public function performUpdate(array &$dbQueries, &$customMessage)
-    {
-        $statements = $this->getDatabaseDefinition();
-        $result = $this->schemaMigrationService->install($statements, false);
-
-        // Extract all statements stored in the keys, independent of error status
-        $dbQueries = array_merge($dbQueries, array_keys($result));
-
-        // Only keep error messages
-        $result = array_filter($result);
-
-        $customMessage = implode(
-            LF,
-            array_map(
-                function (string $message) {
-                    return 'SQL-ERROR: ' . htmlspecialchars($message);
-                },
-                $result
-            )
-        );
-
-        return count($result) === 0;
-    }
-
-    /**
-     * Return HTML list items for fields added to tables
-     *
-     * @param \Doctrine\DBAL\Schema\SchemaDiff $schemaDiff
-     * @return string
-     */
-    protected function getChangedFieldInformation(SchemaDiff $schemaDiff): string
-    {
-        $items = [];
-
-        foreach ($schemaDiff->changedTables as $changedTable) {
-            $columns = array_map(
-                function (ColumnDiff $columnDiff) use ($changedTable) {
-                    return $this->renderFieldListItem($changedTable->name, $columnDiff->column->getName());
-                },
-                $changedTable->changedColumns
-            );
-
-            $items[] = implode(LF, $columns);
-        }
-
-        return trim(implode(LF, $items));
-    }
-
-    /**
-     * Return HTML list items for changed indexes on tables
-     *
-     * @param \Doctrine\DBAL\Schema\SchemaDiff $schemaDiff
-     * @return string
-     */
-    protected function getChangedIndexInformation(SchemaDiff $schemaDiff): string
-    {
-        $items = [];
-
-        foreach ($schemaDiff->changedTables as $changedTable) {
-            $indexes = array_map(
-                function (Index $index) use ($changedTable) {
-                    return $this->renderFieldListItem($changedTable->name, $index->getName());
-                },
-                $changedTable->changedIndexes
-            );
-
-            $items[] = implode(LF, $indexes);
-        }
-
-        return trim(implode(LF, $items));
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/InitialDatabaseSchemaUpdate.php b/typo3/sysext/install/Classes/Updates/InitialDatabaseSchemaUpdate.php
deleted file mode 100644
index 2c6cd2c49857..000000000000
--- a/typo3/sysext/install/Classes/Updates/InitialDatabaseSchemaUpdate.php
+++ /dev/null
@@ -1,224 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * 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 Doctrine\DBAL\Schema\Column;
-use Doctrine\DBAL\Schema\Index;
-use Doctrine\DBAL\Schema\SchemaDiff;
-use Doctrine\DBAL\Schema\Table;
-
-/**
- * Contains the update class to create tables, fields and keys to comply to the database schema
- */
-class InitialDatabaseSchemaUpdate extends AbstractDatabaseSchemaUpdate
-{
-    /**
-     * Constructor function.
-     */
-    public function __construct()
-    {
-        parent::__construct();
-        $this->title = 'Update database schema: Create tables and fields';
-    }
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool TRUE if an update is needed, FALSE otherwise
-     * @throws \Doctrine\DBAL\DBALException
-     * @throws \Doctrine\DBAL\Schema\SchemaException
-     * @throws \InvalidArgumentException
-     * @throws \RuntimeException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\UnexpectedSignalReturnValueTypeException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\StatementException
-     */
-    public function checkForUpdate(&$description)
-    {
-        $description = 'There are tables or fields in the database which need to be created.<br /><br />' .
-        'You have to run this update wizard before you can run any other update wizard to make sure all ' .
-        'needed tables and fields are present.';
-
-        $databaseDifferences = $this->getDatabaseDifferences();
-        foreach ($databaseDifferences as $schemaDiff) {
-            // A new table is required, early return
-            if (!empty($schemaDiff->newTables)) {
-                return true;
-            }
-
-            // A new field or index is required
-            foreach ($schemaDiff->changedTables as $changedTable) {
-                if (!empty($changedTable->addedColumns)) {
-                    return true;
-                }
-
-                // Ignore new indexes that work on columns that need changes
-                foreach ($changedTable->addedIndexes as $indexName => $addedIndex) {
-                    // Strip MySQL prefix length information to get real column names
-                    $indexColumns = array_map(
-                        function ($columnName) {
-                            return preg_replace('/\(\d+\)$/', '', $columnName);
-                        },
-                        $addedIndex->getColumns()
-                    );
-                    $columnChanges = array_intersect($indexColumns, array_keys($changedTable->changedColumns));
-                    if (!empty($columnChanges)) {
-                        unset($changedTable->addedIndexes[$indexName]);
-                    }
-                }
-
-                if (!empty($changedTable->addedIndexes)) {
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Second step: Show tables, fields and keys to be created
-     *
-     * @param string $inputPrefix input prefix, all names of form fields are prefixed with this
-     * @return string HTML output
-     * @throws \Doctrine\DBAL\DBALException
-     * @throws \Doctrine\DBAL\Schema\SchemaException
-     * @throws \InvalidArgumentException
-     * @throws \RuntimeException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\UnexpectedSignalReturnValueTypeException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException
-     * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException
-     * @throws \TYPO3\CMS\Core\Database\Schema\Exception\StatementException
-     */
-    public function getUserInput($inputPrefix): string
-    {
-        $result = '';
-        $addedTables = '';
-        $addedFields = '';
-        $addedIndexes = '';
-
-        $databaseDifferences = $this->getDatabaseDifferences();
-        foreach ($databaseDifferences as $schemaDiff) {
-            $addedTables .= $this->getAddedTableInformation($schemaDiff);
-            $addedFields .= $this->getAddedFieldInformation($schemaDiff);
-            $addedIndexes .= $this->getAddedIndexInformation($schemaDiff);
-        }
-
-        $result .= $this->renderList('Add the following tables:', $addedTables);
-        $result .= $this->renderList('Add the following fields to tables:', $addedFields);
-        $result .= $this->renderList('Add the following keys to tables:', $addedIndexes);
-
-        return $result;
-    }
-
-    /**
-     * Performs the database update.
-     *
-     * @param array &$dbQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool TRUE on success, FALSE on error
-     */
-    public function performUpdate(array &$dbQueries, &$customMessage): bool
-    {
-        $statements = $this->getDatabaseDefinition();
-        $result = $this->schemaMigrationService->install($statements, true);
-
-        // Extract all statements stored in the keys, independent of error status
-        $dbQueries = array_merge($dbQueries, array_keys($result));
-
-        // Only keep error messages
-        $result = array_filter($result);
-
-        $customMessage = implode(
-            LF,
-            array_map(
-                function (string $message) {
-                    return 'SQL-ERROR: ' . htmlspecialchars($message);
-                },
-                $result
-            )
-        );
-
-        return empty($result);
-    }
-
-    /**
-     * Return HTML list items for added tables
-     *
-     * @param \Doctrine\DBAL\Schema\SchemaDiff $schemaDiff
-     * @return string
-     */
-    protected function getAddedTableInformation(SchemaDiff $schemaDiff): string
-    {
-        $items = array_map(
-            function (Table $table) {
-                return $this->renderTableListItem($table->getName());
-            },
-            $schemaDiff->newTables
-        );
-
-        return trim(implode(LF, $items));
-    }
-
-    /**
-     * Return HTML list items for fields added to tables
-     *
-     * @param \Doctrine\DBAL\Schema\SchemaDiff $schemaDiff
-     * @return string
-     */
-    protected function getAddedFieldInformation(SchemaDiff $schemaDiff): string
-    {
-        $items = [];
-
-        foreach ($schemaDiff->changedTables as $changedTable) {
-            $columns = array_map(
-                function (Column $column) use ($changedTable) {
-                    return $this->renderFieldListItem($changedTable->name, $column->getName());
-                },
-                $changedTable->addedColumns
-            );
-
-            $items[] = implode(LF, $columns);
-        }
-
-        return trim(implode(LF, $items));
-    }
-
-    /**
-     * Return HTML list items for indexes added to tables
-     *
-     * @param \Doctrine\DBAL\Schema\SchemaDiff $schemaDiff
-     * @return string
-     */
-    protected function getAddedIndexInformation(SchemaDiff $schemaDiff): string
-    {
-        $items = [];
-
-        foreach ($schemaDiff->changedTables as $changedTable) {
-            $indexes = array_map(
-                function (Index $index) use ($changedTable) {
-                    return $this->renderFieldListItem($changedTable->name, $index->getName());
-                },
-                $changedTable->addedIndexes
-            );
-
-            $items[] = implode(LF, $indexes);
-        }
-
-        return trim(implode(LF, $items));
-    }
-}
diff --git a/typo3/sysext/install/Classes/View/JsonView.php b/typo3/sysext/install/Classes/View/JsonView.php
index 8be2af179ef7..a21d40c2056a 100644
--- a/typo3/sysext/install/Classes/View/JsonView.php
+++ b/typo3/sysext/install/Classes/View/JsonView.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\View;
 
 /*
@@ -15,8 +16,6 @@ namespace TYPO3\CMS\Install\View;
  */
 
 use TYPO3\CMS\Extbase\Mvc\View\AbstractView;
-use TYPO3\CMS\Install\Status\Exception as StatusException;
-use TYPO3\CMS\Install\Status\StatusInterface;
 
 /**
  * Simple JsonView (currently returns an associative array)
@@ -24,96 +23,13 @@ use TYPO3\CMS\Install\Status\StatusInterface;
 class JsonView extends AbstractView
 {
     /**
-     * @return string
-     */
-    public function render()
-    {
-        $renderedData = $this->variables;
-        if (isset($renderedData['status']) && is_array($renderedData['status'])) {
-            try {
-                $renderedData['status'] = $this->transformStatusMessagesToArray($renderedData['status']);
-            } catch (StatusException $e) {
-                $renderedData['status'] = [[
-                    'severity' => 'error',
-                    'title' => htmlspecialchars($e->getMessage())
-                ]];
-            }
-        }
-
-        return $renderedData;
-    }
-
-    /**
-     * Transform an array of messages to an associative array.
-     *
-     * @param array<StatusInterface>
-     * @return array
-     * @throws StatusException
-     */
-    protected function transformStatusMessagesToArray(array $statusArray = [])
-    {
-        $result = [];
-        foreach ($statusArray as $status) {
-            if (!$status instanceof StatusInterface) {
-                throw new StatusException(
-                    'Object must implement StatusInterface',
-                    1381059600
-                );
-            }
-            $result[] = $this->transformStatusToArray($status);
-        }
-        return $result;
-    }
-
-    /**
-     * Creates an array from a status object.
-     * Used for example to transfer the message as json.
+     * Main render() method just returns all variables.
      *
-     * @param StatusInterface $status
+     * @todo: This should be done differently and will be refactored with psr-7 switch
      * @return array
      */
-    public function transformStatusToArray(StatusInterface $status)
-    {
-        $arrayStatus = [];
-        $arrayStatus['severity'] = $this->getSeverityAsNumber($status->getSeverity());
-        $arrayStatus['title'] = htmlspecialchars($status->getTitle());
-        $arrayStatus['message'] = htmlspecialchars($status->getMessage());
-        return $arrayStatus;
-    }
-
-    /**
-     * Return the corresponding integer value for given severity string
-     *
-     * @param string $severity
-     *
-     * @return int
-     */
-    protected function getSeverityAsNumber($severity)
+    public function render(): array
     {
-        $number = -2;
-        switch (strtolower($severity)) {
-            case 'loading':
-                $number = -3;
-                break;
-            case 'notice':
-                $number = -2;
-                break;
-            case 'info':
-                $number = -1;
-                break;
-            case 'ok':
-            case 'success':
-                $number = 0;
-                break;
-            case 'warning':
-                $number = 1;
-                break;
-            case 'error':
-            case 'danger':
-            case 'fatal':
-                $number = 2;
-                break;
-        }
-        return $number;
+        return $this->variables;
     }
 }
diff --git a/typo3/sysext/install/Classes/ViewHelpers/File/ExistsViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/File/ExistsViewHelper.php
deleted file mode 100644
index de46427cac65..000000000000
--- a/typo3/sysext/install/Classes/ViewHelpers/File/ExistsViewHelper.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\ViewHelpers\File;
-
-/*
- * 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\Fluid\Core\ViewHelper\AbstractViewHelper;
-use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
-use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
-
-/**
- * Simple view helper to check if given file is a regular file
- *
- * = Examples =
- *
- * <code title="Default">
- * <f:file.exists file="Absolute-path" />
- * </code>
- *
- * <output>
- * TRUE or FALSE
- * </output>
- *
- * @internal
- */
-class ExistsViewHelper extends AbstractViewHelper
-{
-    use CompileWithRenderStatic;
-
-    /**
-     */
-    public function initializeArguments()
-    {
-        parent::initializeArguments();
-        $this->registerArgument('file', 'string', 'Absolute path', true);
-    }
-
-    /**
-     * Check if given file is a regular file
-     *
-     * @param array $arguments
-     * @param \Closure $renderChildrenClosure
-     * @param RenderingContextInterface $renderingContext
-     *
-     * @return bool
-     */
-    public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
-    {
-        $file = $arguments['file'];
-
-        $result = false;
-        if (file_exists($file) && is_file($file)) {
-            $result = true;
-        }
-        return $result;
-    }
-}
diff --git a/typo3/sysext/install/Classes/ViewHelpers/File/RelativePathViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/File/RelativePathViewHelper.php
deleted file mode 100644
index 5554fa6407ab..000000000000
--- a/typo3/sysext/install/Classes/ViewHelpers/File/RelativePathViewHelper.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\ViewHelpers\File;
-
-/*
- * 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\Fluid\Core\ViewHelper\AbstractViewHelper;
-use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
-use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
-
-/**
- * Get file path relative to PATH_site from absolute path
- *
- * = Examples =
- *
- * <code title="Defaults">
- * <f:file.relativePath>/var/www/typo3/instance/typo3temp/foo.jpg</f:file.relativePath>
- * </code>
- * <output>
- * typo3temp/foo.jpg
- * </output>
- *
- * @internal
- */
-class RelativePathViewHelper extends AbstractViewHelper
-{
-    use CompileWithRenderStatic;
-
-    /**
-     * Output is escaped already. We must not escape children, to avoid double encoding.
-     *
-     * @var bool
-     */
-    protected $escapeChildren = false;
-
-    /**
-     * @param array $arguments
-     * @param \Closure $renderChildrenClosure
-     * @param RenderingContextInterface $renderingContext
-     *
-     * @return string
-     */
-    public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
-    {
-        $absolutePath = $renderChildrenClosure();
-        return \TYPO3\CMS\Core\Utility\PathUtility::stripPathSitePrefix($absolutePath);
-    }
-}
diff --git a/typo3/sysext/install/Classes/ViewHelpers/Format/ImageMagickCommandsViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/Format/ImageMagickCommandsViewHelper.php
deleted file mode 100644
index 66350510c6bc..000000000000
--- a/typo3/sysext/install/Classes/ViewHelpers/Format/ImageMagickCommandsViewHelper.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\ViewHelpers\Format;
-
-/*
- * 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\Fluid\Core\ViewHelper\AbstractViewHelper;
-use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
-use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
-
-/**
- * Display image magick commands
- *
- * @internal
- */
-class ImageMagickCommandsViewHelper extends AbstractViewHelper
-{
-    use CompileWithRenderStatic;
-
-    /**
-     * As this ViewHelper renders HTML, the output must not be escaped.
-     *
-     * @var bool
-     */
-    protected $escapeOutput = false;
-
-    /**
-     * Initialize arguments
-     */
-    public function initializeArguments()
-    {
-        parent::initializeArguments();
-        $this->registerArgument('commands', 'array', 'Given commands', false, []);
-    }
-
-    /**
-     * Display image magick commands
-     *
-     * @param array $arguments
-     * @param \Closure $renderChildrenClosure
-     * @param RenderingContextInterface $renderingContext
-     *
-     * @return string Formatted commands
-     */
-    public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
-    {
-        $commands = $arguments['commands'];
-
-        $result = [];
-        foreach ($commands as $commandGroup) {
-            $result[] = '<strong>Command:</strong>' . LF . htmlspecialchars($commandGroup[1]);
-            // If 3 elements: last one is result
-            if (count($commandGroup) === 3) {
-                $result[] = '<strong>Result:</strong>' . LF . htmlspecialchars($commandGroup[2]);
-            }
-        }
-        return '<pre><code class="language-bash">' . implode(LF, $result) . '</code></pre>';
-    }
-}
diff --git a/typo3/sysext/install/Resources/Private/Language/ModuleInstallEnvironment.xlf b/typo3/sysext/install/Resources/Private/Language/ModuleInstallEnvironment.xlf
new file mode 100644
index 000000000000..90ab0d2a4b96
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Language/ModuleInstallEnvironment.xlf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
+    <file t3:id="1499810435" source-language="en" datatype="plaintext" original="messages" date="2017-07-11T22:00:35Z" product-name="environment">
+        <header/>
+        <body>
+            <trans-unit id="mlang_labels_tablabel">
+                <source>Environment</source>
+            </trans-unit>
+            <trans-unit id="mlang_labels_tabdescr">
+                <source>Provides a simple link to the Install&#160;Tool. Notice the Install&#160;Tool (in typo3/install/) must be enabled.&lt;br /&gt;&lt;em&gt;Access for 'admin' users only!&lt;/em&gt;</source>
+            </trans-unit>
+            <trans-unit id="mlang_tabs_tab">
+                <source>Environment</source>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/typo3/sysext/install/Resources/Private/Language/ModuleInstallMaintenance.xlf b/typo3/sysext/install/Resources/Private/Language/ModuleInstallMaintenance.xlf
new file mode 100644
index 000000000000..5451b782a958
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Language/ModuleInstallMaintenance.xlf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
+    <file t3:id="1499810638" source-language="en" datatype="plaintext" original="messages" date="2017-07-11T22:03:58Z" product-name="maintenance">
+        <header/>
+        <body>
+            <trans-unit id="mlang_labels_tablabel">
+                <source>Maintenance</source>
+            </trans-unit>
+            <trans-unit id="mlang_labels_tabdescr">
+                <source>Provides a simple link to the Install&#160;Tool. Notice the Install&#160;Tool (in typo3/install/) must be enabled.&lt;br /&gt;&lt;em&gt;Access for 'admin' users only!&lt;/em&gt;</source>
+            </trans-unit>
+            <trans-unit id="mlang_tabs_tab">
+                <source>Maintenance</source>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/typo3/sysext/install/Resources/Private/Language/ModuleInstallSettings.xlf b/typo3/sysext/install/Resources/Private/Language/ModuleInstallSettings.xlf
new file mode 100644
index 000000000000..c54558a00c40
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Language/ModuleInstallSettings.xlf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
+    <file t3:id="1499810656" source-language="en" datatype="plaintext" original="messages" date="2017-07-11T22:04:16Z" product-name="settings">
+        <header/>
+        <body>
+            <trans-unit id="mlang_labels_tablabel">
+                <source>Settings</source>
+            </trans-unit>
+            <trans-unit id="mlang_labels_tabdescr">
+                <source>Provides a simple link to the Install&#160;Tool. Notice the Install&#160;Tool (in typo3/install/) must be enabled.&lt;br /&gt;&lt;em&gt;Access for 'admin' users only!&lt;/em&gt;</source>
+            </trans-unit>
+            <trans-unit id="mlang_tabs_tab">
+                <source>Settings</source>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/typo3/sysext/install/Resources/Private/Language/ModuleInstallUpgrade.xlf b/typo3/sysext/install/Resources/Private/Language/ModuleInstallUpgrade.xlf
new file mode 100644
index 000000000000..c8777a64dab6
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Language/ModuleInstallUpgrade.xlf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
+    <file t3:id="1499810671" source-language="en" datatype="plaintext" original="messages" date="2017-07-13T22:04:31Z" product-name="upgrade">
+        <header/>
+        <body>
+            <trans-unit id="mlang_labels_tablabel">
+                <source>Upgrade</source>
+            </trans-unit>
+            <trans-unit id="mlang_labels_tabdescr">
+                <source>Provides a simple link to the Install&#160;Tool. Notice the Install&#160;Tool (in typo3/install/) must be enabled.&lt;br /&gt;&lt;em&gt;Access for 'admin' users only!&lt;/em&gt;</source>
+            </trans-unit>
+            <trans-unit id="mlang_tabs_tab">
+                <source>Upgrade</source>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
diff --git a/typo3/sysext/install/Resources/Private/Layouts/ToolAuthenticated.html b/typo3/sysext/install/Resources/Private/Layouts/ToolAuthenticated.html
index 2cd25b3fc8a0..aceeb2e604d1 100644
--- a/typo3/sysext/install/Resources/Private/Layouts/ToolAuthenticated.html
+++ b/typo3/sysext/install/Resources/Private/Layouts/ToolAuthenticated.html
@@ -1,55 +1,71 @@
 <!DOCTYPE html>
 <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers">
-	<head>
-		<title>Install tool on site {siteName}</title>
-		<f:render partial="Action/Common/Headers" arguments="{_all}" />
-	</head>
-	<body class="{context}">
-	<div class="container">
-		<f:if condition="{contextService.backendContext}">
-			<f:then>
-				<div id="typo3-docheader">
-					<div class="typo3-docheader-functions"></div>
-					<div class="typo3-docheader-buttons"></div>
-				</div>
-			</f:then>
-			<f:else>
-				<div class="row">
-					<div class="col-sm-12">
-						<f:render partial="Action/Common/Head" arguments="{_all}" />
+<head>
+	<title>Install tool on site {siteName}</title>
+	<f:render partial="Action/Common/Headers" arguments="{_all}" />
+</head>
+<body class="{context}">
+<f:if condition="{contextService.backendContext}">
+	<f:then>
+		<div class="module" data-module-id="" data-module-name="">
+			<div class="module-docheader t3js-module-docheader" style="height: auto;">
+				<div class="module-docheader-bar module-docheader-bar-navigation t3js-module-docheader-bar t3js-module-docheader-bar-navigation row" style="height: auto;">
+					<div class="module-docheader-bar-column-left col-xs-12 col-sm-4 col-md-3">
+						<div class="form-inline row"></div>
+					</div>
+					<div class="module-docheader-bar-column-right col-xs-12 col-sm-8 col-md-9 text-right">
+						<div class="btn-toolbar" role="toolbar" aria-label="">
+							<div class="gridder-navigation btn-group pull-right">
+								<a href="#" class="gridder-nav-prev btn btn-default btn-sm">
+									<core:icon identifier="actions-move-left" alternativeMarkupIdentifier="inline" />
+								</a>
+								<a href="#" class="gridder-nav-next btn btn-default btn-sm">
+									<core:icon identifier="actions-move-right" alternativeMarkupIdentifier="inline" />
+								</a>
+								<a href="#" class="gridder-close btn btn-default btn-sm">
+									<core:icon identifier="actions-close" alternativeMarkupIdentifier="inline" />
+								</a>
+							</div>
+							<a href="{i:uri.action(action: 'logout')}" class="btn btn-default btn-sm pull-right">
+								<span class="t3js-icon icon icon-size-small icon-state-default icon-actions-logout" data-identifier="actions-logout">
+									<span class="icon-markup">
+										<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g class="icon-color"><path d="M9 10v4H2V2h7v4h1V1.5a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v13a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V10H9z"></path><path d="M10.983 5.041a.5.5 0 0 1 .812-.39l3.7 2.96a.5.5 0 0 1 0 .78l-3.7 2.96a.5.5 0 0 1-.812-.39V9H6V7h4.983V5.041z"></path></g></svg>
+									</span>
+								</span>
+								Lock Install Tool
+							</a>
+						</div>
+					</div>
+					<div class="module-docheader-bar module-docheader-bar-buttons t3js-module-docheader-bar t3js-module-docheader-bar-buttons" style="height: auto;">
+						<div class="module-docheader-bar-column-left">
+							<div class="btn-toolbar" role="toolbar" aria-label=""></div>
+						</div>
+						<div class="module-docheader-bar-column-right"></div>
 					</div>
-				</div>
-			</f:else>
-		</f:if>
-		<div class="row">
-			<div class="col-sm-12">
-				<div id="install-menu-button" class="hidden-md hidden-lg">
-					<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#mobileMenuWrapper">
-						<span class="sr-only">Toggle navigation</span>
-						<span class="icon-bar"></span>
-						<span class="icon-bar"></span>
-						<span class="icon-bar"></span>
-					</button>
 				</div>
 			</div>
-		</div>
-		<div class="row hidden-md hidden-lg">
-			<div class="col-sm-12">
-				<div id="mobileMenuWrapper" class="collapse">
-					<f:render partial="Action/Common/Left" arguments="{_all}" />
-				</div>
+			<div class="module-body t3js-module-body" style="padding-top: 89px;">
+				<f:render section="Content" />
 			</div>
 		</div>
-		<div class="row">
-			<div class="col-md-3 leftNavigation hidden-xs hidden-sm">
-				<div id="menuWrapper" data-spy="affix" data-offset-top="60" data-offset-bottom="190">
-					<f:render partial="Action/Common/Left" arguments="{_all}" />
-				</div>
+	</f:then>
+	<f:else>
+		<div class="scaffold t3js-scaffold scaffold-modulemenu-expanded">
+			<f:render partial="Action/Common/Topbar" arguments="{_all}" />
+			<div class="scaffold-modulemenu t3js-scaffold-modulemenu">
+				<f:render partial="Action/Common/ModuleMenu" arguments="{_all}" />
 			</div>
-			<div class="col-sm-12 col-md-9 content-area">
-				<f:render section="Content" />
+			<div class="scaffold-content t3js-scaffold-content" style="padding-top:25px; overflow: auto;">
+				<div class="container-fluid">
+					<div class="row">
+						<div class="col-sm-12 content-area">
+							<f:render section="Content" />
+						</div>
+					</div>
+				</div>
 			</div>
 		</div>
-	</div>
-	</body>
-</html>
+	</f:else>
+</f:if>
+</body>
+</html>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/Headers.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Headers.html
index dd79f8d9b1f1..27a339289286 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Common/Headers.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Headers.html
@@ -2,8 +2,6 @@
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <link rel="stylesheet" type="text/css" href="{f:uri.resource(path: 'Css/install.css')}?{time}" />
 <link rel="icon" type="image/vnd.microsoft.icon" href="{f:uri.resource(path: 'Icons/favicon.ico')}?{time}" />
-<script type="text/javascript" src="{f:uri.resource(extensionName: 'Core', path: 'JavaScript/Contrib/jquery/jquery-3.2.1.min.js')}?{time}"></script>
-<script type="text/javascript" src="{f:uri.resource(extensionName: 'Backend', path: 'JavaScript/jquery.clearable.js')}?{time}"></script>
-<script type="text/javascript" src="{f:uri.resource(path: 'JavaScript/bootstrap.min.js')}?{time}"></script>
-<script type="text/javascript" src="{f:uri.resource(path: 'JavaScript/chosen.jquery.min.js')}?{time}"></script>
+<script type="text/javascript" src="{f:uri.resource(path: 'JavaScript/RequireJSConfig.js')}?{time}"></script>
+<script type="text/javascript" src="{f:uri.resource(path: 'JavaScript/Contrib/require.js', extensionName: 'Core')}?{time}"></script>
 <script type="text/javascript" src="{f:uri.resource(path: 'JavaScript/Install.js')}?{time}"></script>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/Left.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Left.html
deleted file mode 100644
index 66c8a8100a11..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Common/Left.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<div class="t3js-list-group-wrapper" xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:i="http://typo3.org/ns/TYPO3/CMS/Install/ViewHelpers" >
-	<ul class="list-group">
-		<f:render partial="Action/Common/MenuLink" arguments="{action: action, context: context, action_name: 'importantActions', label: 'Important actions'}" />
-		<f:render partial="Action/Common/MenuLink" arguments="{action: action, context: context, action_name: 'configuration', label: 'Configuration Presets'}" />
-		<f:render partial="Action/Common/MenuLink" arguments="{action: action, context: context, action_name: 'allConfiguration', label: 'All configuration'}" />
-		<f:render partial="Action/Common/MenuLink" arguments="{action: action, context: context, action_name: 'upgradeWizard', label: 'Upgrade Wizard'}" />
-		<f:render partial="Action/Common/MenuLink" arguments="{action: action, context: context, action_name: 'upgradeAnalysis', label: 'Upgrade Analysis'}"/>
-		<f:render partial="Action/Common/MenuLink" arguments="{action: action, context: context, action_name: 'extensionScanner', label: 'Extension Scanner'}"/>
-		<f:render partial="Action/Common/MenuLink" arguments="{action: action, context: context, action_name: 'systemEnvironment', label: 'System environment'}" />
-		<f:render partial="Action/Common/MenuLink" arguments="{action: action, context: context, action_name: 'folderStructure', label: 'Folder structure'}" />
-		<f:render partial="Action/Common/MenuLink" arguments="{action: action, context: context, action_name: 'testSetup', label: 'Test setup'}" />
-		<f:render partial="Action/Common/MenuLink" arguments="{action: action, context: context, action_name: 'cleanUp', label: 'Clean up'}" />
-		<f:render partial="Action/Common/MenuLink" arguments="{action: action, context: context, action_name: 'about', label: 'About'}" />
-	</ul>
-
-	<div>
-		<a href="{i:uri.action(action: 'logout')}" class="btn btn-warning btn-block">Logout from Install Tool</a>
-		<f:if condition="{contextService.backendContext}">
-			<f:else>
-			<a href="{i:uri.action(action: 'backend')}" class="btn btn-default btn-block">Backend admin</a>
-			<a href="{i:uri.action(action: 'frontend')}" class="btn btn-default btn-block">Frontend website</a>
-			</f:else>
-		</f:if>
-	</div>
-</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/MarkExtensionAsDone.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/MarkExtensionAsDone.html
deleted file mode 100644
index bdb21a98d227..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Common/MarkExtensionAsDone.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<button class="btn btn-default" type="submit">{text}</button>
-<input type="hidden" name="install[set][{name}]" value="submit" />
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/MenuLink.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/MenuLink.html
deleted file mode 100644
index d927376a5149..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Common/MenuLink.html
+++ /dev/null
@@ -1,6 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-<li class="list-group-item{f:if(condition:'{action} == {action_name}', then:' active')}">
-  <a class="t3js-install-menu-{action_name}" href="{i:uri.action(action: action_name)}">
-    {label}
-  </a>
-</li>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/MenuModuleLink.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/MenuModuleLink.html
new file mode 100644
index 000000000000..1008c314c9d8
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/MenuModuleLink.html
@@ -0,0 +1,14 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<li class="modulemenu-item t3js-mainmodule {f:if(condition:'{action} == {action_name}', then:' active')}">
+    <a class="modulemenu-item-link" href="{i:uri.action(action: action_name)}">
+      <span class="modulemenu-icon modulemenu-item-icon">
+        <span class="t3js-icon icon icon-size-default icon-state-default icon-module-system_extinstall" data-identifier="module-system_extinstall">
+            <span class="icon-markup">
+                <img src="{f:uri.resource(path: 'Icons/module-install-{action_name}.svg')}" width="32" height="32">
+            </span>
+        </span>
+    </span>
+		<span class="modulemenu-item-title">{label}</span>
+	</a>
+</li>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/ModuleMenu.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/ModuleMenu.html
new file mode 100644
index 000000000000..0eb074f92d9a
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/ModuleMenu.html
@@ -0,0 +1,61 @@
+<div class="modulemenu t3js-modulemenu" xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers">
+	<ul class="nav nav-modules" data-role="modulemenu" id="menu">
+		<li class="modulemenu-group expanded" id="web" data-modulename="web" data-navigationcomponentid="" data-navigationframescript="" data-navigationframescriptparameters="">
+			<div class="modulemenu-group-header">
+				<span class="modulemenu-icon modulemenu-group-icon">
+					<span class="t3js-icon icon icon-size-default icon-state-default icon-module-tools" data-identifier="module-tools">
+						<span class="icon-markup">
+						<core:icon identifier="module-tools" size="small"/>
+						</span>
+					</span>
+				</span>
+				<span class="modulemenu-group-title">
+					Admin Tools <f:comment><span class="caret"></span></f:comment>
+				</span>
+			</div>
+			<ul class="modulemenu-group-container">
+				<f:render partial="Action/Common/MenuModuleLink" arguments="{action: action, context: context, action_name: 'maintenance', label: 'Maintenance'}" />
+				<f:render partial="Action/Common/MenuModuleLink" arguments="{action: action, context: context, action_name: 'settings', label: 'Settings'}" />
+				<f:render partial="Action/Common/MenuModuleLink" arguments="{action: action, context: context, action_name: 'upgrade', label: 'Upgrade'}" />
+				<f:render partial="Action/Common/MenuModuleLink" arguments="{action: action, context: context, action_name: 'environment', label: 'Environment'}" />
+
+				<f:comment>
+					<f:render partial="Action/Common/MenuModuleLink" arguments="{action: action, context: context, action_name: 'about', label: 'About'}" />
+				</f:comment>
+			</ul>
+		</li>
+		<f:if condition="{contextService.backendContext}">
+			<f:then></f:then>
+			<f:else>
+				<li class="modulemenu-group expanded" id="web" data-modulename="web" data-navigationcomponentid="" data-navigationframescript="" data-navigationframescriptparameters="">
+					<ul class="modulemenu-group-container">
+						<li class="modulemenu-item t3js-mainmodule ">
+							<a class="modulemenu-item-link" href="../../../index.php" class="btn btn-default btn-block">
+								<span class="modulemenu-icon modulemenu-item-icon">
+									<span class="t3js-icon icon icon-size-default icon-state-default icon-module-system_extinstall" data-identifier="module-system_extinstall">
+										<span class="icon-markup">
+											<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g class="icon-color"><path d="M9 10v4H2V2h7v4h1V1.5a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v13a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V10H9z"></path><path d="M10.983 5.041a.5.5 0 0 1 .812-.39l3.7 2.96a.5.5 0 0 1 0 .78l-3.7 2.96a.5.5 0 0 1-.812-.39V9H6V7h4.983V5.041z"></path></g></svg>
+										</span>
+									</span>
+								</span>
+								<span class="modulemenu-item-title">Backend admin</span>
+							</a>
+						</li>
+						<li class="modulemenu-item t3js-mainmodule ">
+							<a class="modulemenu-item-link" href="../../../../index.php" class="btn btn-default btn-block">
+								<span class="modulemenu-icon modulemenu-item-icon">
+									<span class="t3js-icon icon icon-size-default icon-state-default icon-module-system_extinstall" data-identifier="module-system_extinstall">
+										<span class="icon-markup">
+											<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g class="icon-color"><path d="M9 10v4H2V2h7v4h1V1.5a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v13a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V10H9z"></path><path d="M10.983 5.041a.5.5 0 0 1 .812-.39l3.7 2.96a.5.5 0 0 1 0 .78l-3.7 2.96a.5.5 0 0 1-.812-.39V9H6V7h4.983V5.041z"></path></g></svg>
+										</span>
+									</span>
+								</span>
+								<span class="modulemenu-item-title">Frontend website</span>
+							</a>
+						</li>
+					</ul>
+				</li>
+			</f:else>
+		</f:if>
+	</ul>
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Common/Topbar.html b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Topbar.html
new file mode 100644
index 000000000000..d1c61dd4628f
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Common/Topbar.html
@@ -0,0 +1,30 @@
+<div class="t3js-scaffold-header" xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:i="http://typo3.org/ns/TYPO3/CMS/Install/ViewHelpers">
+	<div class="scaffold-topbar t3js-scaffold-topbar">
+		<div class="topbar">
+			<div class="topbar-header t3js-topbar-header">
+				<button class="topbar-button topbar-button-modulemenu t3js-topbar-button-modulemenu" style="outline: none;">
+					<core:icon identifier="actions-move-move" alternativeMarkupIdentifier="inline" />
+				</button>
+				<div class="topbar-header-site" style="margin-left: 80px;">
+					<a href="./" target="_top" title="TYPO3.CMS - 8.7.0-dev">
+						<span class="topbar-header-site-logo">
+								<img src="/typo3/sysext/backend/Resources/Public/Images/typo3_logo_orange.svg" width="22" height="22" title="TYPO3 Content Management System" alt="">
+						</span>
+						<span class="topbar-header-site-title">
+								<span class="topbar-header-site-name">Admin tools on site: {siteName}</span>
+								<span class="topbar-header-site-version">TYPO3 CMS {typo3Version}</span>
+						</span>
+					</a>
+					<a href="{i:uri.action(action: 'logout')}" target="_top" class="btn btn-danger pull-right" style="margin-top: 7px; margin-right: 15px;">
+						<span class="t3js-icon icon icon-size-small icon-state-default icon-actions-logout" data-identifier="actions-logout">
+							<span class="icon-markup">
+								<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g class="icon-color"><path d="M9 10v4H2V2h7v4h1V1.5a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v13a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5V10H9z"></path><path d="M10.983 5.041a.5.5 0 0 1 .812-.39l3.7 2.96a.5.5 0 0 1 0 .78l-3.7 2.96a.5.5 0 0 1-.812-.39V9H6V7h4.983V5.041z"></path></g></svg>
+							</span>
+						</span>
+						Logout
+					</a>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ClearTables.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ClearTables.html
deleted file mode 100644
index 8016efcd0428..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ClearTables.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-<p>
-	Use with care! Clearing tables here can have a negative impact on your site functionality.
-	You could log out all users, delete all their basket data, and lose logging
-	information!
-</p>
-<p>
-	Some database tables in TYPO3 CMS hold semi-temporary data that is not deleted when
-	clicking "Clear all cache" in the backend. Those can be cleared here, effectively
-	removing <strong>all</strong> rows from it. This can be useful in rare cases.
-</p>
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<div class="form-group">
-		<f:for each="{cleanableTables}" as="cleanableTable">
-			<div class="checkbox">
-				<label>
-					<input
-						id="t3-install-database_clearcache-{cleanableTable.name}"
-						name="install[values][{cleanableTable.name}]"
-						value="1"
-						type="checkbox"
-					/>
-					<strong>{cleanableTable.name}</strong> Rows: {cleanableTable.rows}
-				</label>
-			</div>
-			<p>Description: {cleanableTable.description}</p>
-			<hr>
-		</f:for>
-	</div>
-
-	<f:render
-		partial="Action/Common/SubmitButton"
-		arguments="{name:'clearTables', text:'Clear selected tables'}"
-	/>
-</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ProcessedFiles.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ProcessedFiles.html
deleted file mode 100644
index 9929fad5ba2b..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ProcessedFiles.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-<p>
-	The File Abstraction Layer stores a database record for every file it needs to process. (e.g. image thumbnails)
-	In case you modified some graphics settings (All Configuration [GFX]) and you need all processed files to get
-	regenerated, you can use this tool to remove the existing ones. The new processed files are created once they are
-	needed.
-</p>
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-
-	<f:render
-		partial="Action/Common/SubmitButton"
-		arguments="{name:'clearProcessedFiles', text:'Clear processed files'}"
-	/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ResetBackendUserUc.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ResetBackendUserUc.html
deleted file mode 100644
index a86e25b6d55b..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/ResetBackendUserUc.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<p>
-	If you press this button all backend users from the tables be_users will
-	have their user preferences cleared (field 'uc' set to an empty string).
-</p>
-<p>
-	This may come in handy in rare cases where that configuration may be corrupt.
-	Clearing this will clear all user settings from the 'Setup' module.
-</p>
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<div class="t3js-resetBackendUserUc">
-		<f:render
-			partial="Action/Common/SubmitButton"
-			arguments="{name:'resetBackendUserUc', text:'Reset backend user preferences'}"
-		/>
-	</div>
-</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/Typo3TempFiles.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/Typo3TempFiles.html
deleted file mode 100644
index 4265f79fa7b8..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/CleanUp/Typo3TempFiles.html
+++ /dev/null
@@ -1,100 +0,0 @@
-
-<div class="alert alert-notice">
-	<h4>About</h4>
-	<p>
-		TYPO3 uses this directory for temporary files, mainly processed and cached images.
-		The filenames are cryptic. They are unique representations of the file properties
-		made by md5-hashing a serialized array with information.
-	</p>
-	<p>
-		This directory may contain many thousands of files and a lot of them may be of no use anymore.
-	</p>
-	<p>
-		With this action you can delete the files in this folder. Afterwards, you
-		should also clear the cache database tables.
-	</p>
-	<p>
-		This tool will delete files only if the last 10 characters before the file extension
-		('.' + 3 chars) are hexadecimal valid ciphers, which are lowercase a-f and 0-9.
-	</p>
-</div>
-
-<form method="post" class="form-horizontal">
-<div class="row">
-	<div class="col-sm-4"><strong class="pull-right">Number of temporary files</strong></div>
-	<div class="col-sm-8">{typo3TempData.numberOfFilesInSelectedDirectory}</div>
-</div>
-<div class="row">
-	<div class="col-sm-4"><strong class="pull-right">Number matching</strong></div>
-	<div class="col-sm-8">{typo3TempData.numberOfFilesMatchingCriteria}	</div>
-</div>
-<div class="row">
-	<div class="col-sm-4"><strong class="pull-right">Number deleted</strong></div>
-	<div class="col-sm-8">{typo3TempData.numberOfDeletedFiles}</div>
-</div>
-<br>
-<div class="row">
-	<div class="form-group">
-		<label for="t3-install-delete" class="col-sm-4 control-label">Delete files by condition</label>
-		<div class="col-sm-7">
-			<select
-					id="t3-install-delete"
-					name="install[values][condition]"
-					class="form-control"
-					>
-				<option value="0">All</option>
-				<option value="day" {f:if(condition:'{typo3TempData.selectedCondition} == \'day\'', then:'selected="selected"')}>Last access more than a day ago</option>
-				<option value="week" {f:if(condition:'{typo3TempData.selectedCondition} == \'week\'', then:'selected="selected"')}>Last access more than a week ago</option>
-				<option value="month" {f:if(condition:'{typo3TempData.selectedCondition} == \'month\'', then:'selected="selected"')}>Last access more than a month ago</option>
-				<option value="10" {f:if(condition:'{typo3TempData.selectedCondition} == \'10\'', then:'selected="selected"')}>File size greater than 10K</option>
-				<option value="50" {f:if(condition:'{typo3TempData.selectedCondition} == \'50\'', then:'selected="selected"')}>File size greater than 50K</option>
-				<option value="100" {f:if(condition:'{typo3TempData.selectedCondition} == \'100\'', then:'selected="selected"')}>File size greater than 100K</option>
-			</select>
-		</div>
-	</div>
-	<div class="form-group">
-		<label for="t3-install-action" class="col-sm-4 control-label">Number of files at a time</label>
-		<div class="col-sm-7">
-			<select
-					id="t3-install-action"
-					name="install[values][numberOfFiles]"
-					class="form-control"
-					>
-				<option value="0">Don't delete, just display statistics</option>
-				<option value="500" {f:if(condition:'{typo3TempData.numberOfFiles} == \'500\'', then:'selected="selected"')}>Delete 500</option>
-				<option value="1000" {f:if(condition:'{typo3TempData.numberOfFiles} == \'1000\'', then:'selected="selected"')}>Delete 1000</option>
-				<option value="5000" {f:if(condition:'{typo3TempData.numberOfFiles} == \'5000\'', then:'selected="selected"')}>Delete 5000</option>
-			</select>
-		</div>
-	</div>
-
-	<div class="form-group">
-		<label for="t3-install-subdirectory" class="col-sm-4 control-label">From sub-directory</label>
-		<div class="col-sm-7">
-			<select
-				id="t3-install-subdirectory"
-				name="install[values][subDirectory]"
-				class="form-control"
-				>
-			<f:for each="{typo3TempData.subDirectories}" as="subDirectory">
-				<option
-						value="{subDirectory.name}"
-						{f:if(condition:subDirectory.selected, then:'selected="selected"')}
-				>
-				<f:if condition="{subDirectory.name}">
-					{subDirectory.name}/ (Files: {subDirectory.filesNumber})
-				</f:if>
-				</option>
-			</f:for>
-			</select>
-		</div>
-	</div>
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<div class="col-sm-12">
-		<f:render
-			partial="Action/Common/SubmitButton"
-			arguments="{name:'deleteTypo3TempFiles', text:'Empty selected folders'}"
-		/>
-	</div>
-</div>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/EnvironmentCheck.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/EnvironmentCheck.html
new file mode 100644
index 000000000000..60717fcbc46b
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/EnvironmentCheck.html
@@ -0,0 +1,17 @@
+<p>
+A series of PHP settings and database checks.
+</p>
+<button
+	class="btn btn-default t3js-environmentCheck-execute"
+	type="button"
+>
+	Run tests again
+</button>
+<hr>
+
+<div class="t3js-environmentCheck-output"></div>
+<f:for each="{systemStatusBySeverity}" as="statusMessages">
+	<f:for each="{statusMessages}" as="statusMessage">
+		<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}"/>
+	</f:for>
+</f:for>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/FolderStructure.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/FolderStructure.html
new file mode 100644
index 000000000000..3de72e720687
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/FolderStructure.html
@@ -0,0 +1,28 @@
+<p>
+	Root Directory: <strong><i:constant name="PATH_site"/></strong>
+</p>
+
+<div class="t3js-folderStructure-output"></div>
+
+<div class="t3js-folderStructure-errors" style="display:none">
+	<hr/>
+	<h3>These files or folders have errors and may be fixed automatically:</h3>
+	<div class="t3js-folderStructure-errors-list"></div>
+	<button
+		class="btn btn-default t3js-folderStructure-errors-fix"
+		type="button"
+	>
+		Try to fix file and folder permissions
+	</button>
+</div>
+
+<hr/>
+<h3>Default File and Directory permissions</h3>
+<f:render partial="Action/Common/StatusMessage" arguments="{message: folderStructureFilePermissionStatus}"/>
+<f:render partial="Action/Common/StatusMessage" arguments="{message: folderStructureDirectoryPermissionStatus}"/>
+
+<div class="t3js-folderStructure-ok" style="display:none">
+	<hr/>
+	<h3>These structures don't need to be fixed:</h3>
+	<div class="t3js-folderStructure-ok-list"></div>
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/ImageProcessing.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/ImageProcessing.html
new file mode 100644
index 000000000000..67fff9d66cd3
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/ImageProcessing.html
@@ -0,0 +1,346 @@
+<p>
+	A set of various image manipulation testing main processing aspects.
+</p>
+
+<div style="display:none;">
+	<div id="t3js-imageProcessing-token">{imageProcessingToken}</div>
+
+	<div style="display:none">
+		<div class="t3js-imageProcessing-twinImage-template">
+			<div class="t3-install-displaytwinimageimages t3js-imageProcessing-images" style="display:none;">
+				<div class="row">
+					<div class="col-xs-12 col-md-6">
+						<h4>Reference</h4>
+						<div class="bg-transparent-emulation">
+							<img class="reference" />
+						</div>
+					</div>
+					<div class="col-xs-12 col-md-6">
+						<h4>Your system</h4>
+						<div class="bg-transparent-emulation">
+							<img class="result" />
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="t3-install-displaytwinimagetextarea t3js-imageProcessing-command" style="display:none;">
+				<pre><code class="language-bash t3js-imageProcessing-command-text"></code></pre>
+			</div>
+		</div>
+	</div>
+</div>
+
+<button
+	class="btn btn-default t3js-imageProcessing-execute"
+	type="button"
+>
+	Run image tests again
+</button>
+<hr>
+
+
+<h3>True type font tests</h3>
+<div class="t3js-message typo3-message alert alert-info" role="alert">
+	<h4>FreeType2 hint</h4>
+	<p class="messageTest">If the two images below do not look the same, please check your FreeType 2 module.</p>
+</div>
+<div class="t3js-imageProcessing-twinContainer" data-test="trueType"></div>
+<hr>
+
+<h3>Convert image formats to jpg</h3>
+<p>
+	This verifies that your ImageMagick installation is able to read the default
+	formats <code>jpg</code>, <code>gif</code>, <code>png</code>, <code>tif</code>, <code>pdf</code> and
+	<code>ai</code>.
+	The tool <code>identify</code> is used to read the pixeldimensions of non-web formats and 'convert' is used to
+	read the image and convert it to <code>jpg</code>.
+</p>
+<div class="t3js-message typo3-message alert alert-info" role="alert">
+	<h4>Dark images</h4>
+	<p class="messageText">
+		In case the images appear remarkably darker than the reference images,
+		try to set [TYPO3_CONF_VARS][GFX][colorspace] = sRGB.
+	</p>
+</div>
+<h4>Read jpg</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="readJpg"></div>
+<h4>Read gif</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="readGif"></div>
+<h4>Read png</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="readPng"></div>
+<h4>Read tif</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="readTif"></div>
+<h4>Read pdf</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="readPdf"></div>
+<h4>Read ai</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="readAi"></div>
+<hr>
+
+<h3>Writing gif and png</h3>
+<p>
+	This verifies that ImageMagick is able to write GIF and PNG files.
+	The GIF-file is attempted compressed with LZW by the
+	<code>\TYPO3\CMS\Core\Imaging\GraphicalFunctions::gifCompress()</code> function.
+</p>
+<h4>Write gif</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="writeGif"></div>
+<h4>Write png</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="writePng"></div>
+<hr>
+
+<h3>Scaling images</h3>
+<p>
+	This shows how ImageMagick reacts when scaling transparent GIF and PNG files.
+</p>
+<h4>gif to gif</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="gifToGif"></div>
+<h4>png to png</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="pngToPng"></div>
+<h4>gif to jpg</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="gifToJpg"></div>
+<hr>
+
+<h3>Combining images</h3>
+<p>
+	This verifies that the ImageMagick tools, <code>combine</code>, <code>composite</code>, are able to
+	combine two images through a grayscale mask.
+</p>
+<h4>Combine using a GIF mask with only black and white</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="combineGifMask"></div>
+<h4>Combine using a JPG mask with graylevels</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="combineJpgMask"></div>
+<hr>
+
+<h3>GDlib</h3>
+<p>
+	This verifies that the GDLib installation works properly.
+</p>
+<h4>Create simple image</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="gdlibSimple"></div>
+<h4>Create image from file</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="gdlibFromFile"></div>
+<h4>Render text with TrueType font</h4>
+<div class="t3js-imageProcessing-twinContainer" data-test="gdlibRenderText"></div>
+<h4>Render text with TrueType font using 'niceText' option</h4>
+<div class="t3js-message typo3-message alert alert-info" role="alert">
+	<h4>Note on 'niceText'</h4>
+	<p class="messageText">
+		'niceText' is a concept that tries to improve the antialiasing of the rendered type by actually
+		rendering the textstring in double size on a black/white mask, downscaling the mask and masking
+		the text onto the image through this mask. This involves ImageMagick 'combine'/'composite' and 'convert'.
+	</p>
+</div>
+<div class="t3js-imageProcessing-twinContainer" data-test="gdlibNiceText"></div>
+<h4>Render 'niceText' with a shadow under</h4>
+<div class="t3js-message typo3-message alert alert-info" role="alert">
+	<h4>Note on 'shadow'</h4>
+	<p class="messageText">
+		This test makes sense only if the above test had a correct output. But if so, you may not see
+		a soft dropshadow from the third text string as you should. In that case you are most likely using
+		ImageMagick 5 and should set the flag TYPO3_CONF_VARS[GFX][processor_effects].
+	</p>
+</div>
+<div class="t3js-imageProcessing-twinContainer" data-test="gdlibNiceTextShadow"></div>
+<hr>
+
+<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
+	<div class="panel panel-default">
+		<div class="panel-heading" role="tab" id="headingConfiguration">
+			<h4 class="panel-title">
+				<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseConfiguration" aria-expanded="true" aria-controls="collapseFive" class="collapsed">
+					<span class="caret"></span>
+					Current configuration
+				</a>
+			</h4>
+		</div>
+		<div id="collapseConfiguration" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingConfiguration">
+			<div class="panel-body">
+
+				<table class="table table-striped">
+					<tr>
+						<td>
+							{imageConfiguration.processor} enabled:
+						</td>
+						<td>
+							{f:if(condition:imageConfiguration.processorEnabled, then:'Yes', else:'No')}
+						</td>
+					</tr>
+					<tr>
+						<td>
+							ImageMagick or GraphicsMagick:
+						</td>
+						<td>
+							{imageConfiguration.processor}
+						</td>
+					</tr>
+					<tr>
+						<td>
+							{imageConfiguration.processor} path:
+						</td>
+						<td>
+							{imageConfiguration.processorPath}
+						</td>
+					</tr>
+					<tr>
+						<td>
+							{imageConfiguration.processor} version:
+						</td>
+						<td>
+							{imageConfiguration.processorVersion}
+						</td>
+					</tr>
+					<tr>
+						<td>
+							{imageConfiguration.processor} effects enabled:
+						</td>
+						<td>
+							{imageConfiguration.processorEffects} <span>(Blurring/Sharpening with {imageConfiguration.processor})</span>
+						</td>
+					</tr>
+					<tr>
+						<td>
+							GDLib enabled:
+						</td>
+						<td>
+							{f:if(condition:imageConfiguration.gdlibEnabled, then:'Yes', else:'No')}
+						</td>
+					</tr>
+					<tr>
+						<td>
+							GDLib using PNG:
+						</td>
+						<td>
+							{imageConfiguration.gdlibPng}
+						</td>
+					</tr>
+					<tr>
+						<td>
+							Freetype DPI:
+						</td>
+						<td>
+							{imageConfiguration.freeTypeDpi} <span>(Should be 96 for Freetype 2)</span>
+						</td>
+					</tr>
+					<tr>
+						<td>
+							File Formats:
+						</td>
+						<td>
+							{imageConfiguration.fileFormats}
+						</td>
+					</tr>
+				</table>
+			</div>
+		</div>
+	</div>
+
+	<div class="panel panel-default">
+		<div class="panel-heading" role="tab" id="headingVerify">
+			<h4 class="panel-title">
+				<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseVerify" aria-expanded="true" aria-controls="collapseFive" class="collapsed">
+					<span class="caret"></span>
+					Verify test results
+				</a>
+			</h4>
+		</div>
+		<div id="collapseVerify" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingVerify">
+			<div class="panel-body">
+				<h4>Verify test results</h4>
+				<p>
+					This page performs image processing and displays the result. It's a thorough check
+					that everything you've configured is working correctly.
+				</p>
+				<p>
+					It's quite simple to verify your installation; Just look down the page, the images
+					in pairs should look like each other. If some images are not alike, something is
+					wrong. You may also notice warnings and errors if this tool found signs of any problems.
+				</p>
+				<p>
+					The image to the left is the reference image (how it should be) and to the right
+					the image made by your server.
+				</p>
+			</div>
+		</div>
+	</div>
+
+	<div class="panel panel-default">
+		<div class="panel-heading" role="tab" id="headingAbout">
+			<h4 class="panel-title">
+				<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseAbout" aria-expanded="true" aria-controls="collapseFive" class="collapsed">
+					<span class="caret"></span>
+					About image handling
+				</a>
+			</h4>
+		</div>
+		<div id="collapseAbout" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingAbout">
+			<div class="panel-body">
+				<p>
+					TYPO3 is known for its ability to process images on the server.
+				</p>
+				<p>
+					In the backend interface (TBE) thumbnails are automatically generated
+					as well as icons, menu items and pane tabs (by GDLib).
+					In the frontend all kinds of graphical elements are processed. Typically images are
+					scaled down to fit the pages (by ImageMagick) and menu items, graphical headers and
+					such are generated automatically (by GDLib + ImageMagick). In addition TYPO3 is able
+					to handle many file formats (thanks to ImageMagick), for example TIF, BMP, PCX, TGA,
+					AI and PDF in addition to the standard web formats; JPG, GIF, PNG.
+				</p>
+				<p>
+					In order to do this, TYPO3 uses two sets of tools:
+				</p>
+				<strong>
+					ImageMagick / GraphicsMagick:
+				</strong>
+				<p>
+					For conversion of non-web formats to webformats, combining images with alpha-masks,
+					performing image-effects like blurring and sharpening.
+				</p>
+				<p>
+					ImageMagick is a collection of external programs on the server called by the exec()
+					function in PHP. TYPO3 uses three of these, namely 'convert' (converting fileformats,
+					scaling, effects), 'combine'/'composite' (combining images with masks) and 'identify'
+					(returns image information). GraphicsMagick is an alternative to ImageMagick and can
+					be enabled by setting [GFX][processor] to 'GraphicsMagick'. This is recommended and enabled
+					by default. Because ImageMagick and Graphicsmagick are external programs, a requirement
+					must be met: The programs must be installed on the server and working. ImageMagick is
+					available for both Windows and Unix. The current version is 6+. ImageMagick homepage is
+					at <a href="http://www.imagemagick.org/">http://www.imagemagick.org/</a>
+				</p>
+				<strong>
+					GDLib:
+				</strong>
+				<p>
+					For drawing boxes and rendering text on images with truetype fonts. Also used for
+					icons, menuitems and generally the TypoScript GIFBUILDER object is based on GDlib,
+					but extensively utilizing ImageMagick to process intermediate results.
+				</p>
+				<p>
+					GDLib is accessed through internal functions in PHP, you'll need a version of PHP
+					with GDLib compiled in. Also in order to use TrueType fonts with GDLib you'll
+					need FreeType compiled in as well.
+				</p>
+			</div>
+		</div>
+	</div>
+
+	<div class="panel panel-default">
+		<div class="panel-heading" role="tab" id="headingTestImages">
+			<h4 class="panel-title">
+				<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTestImages" aria-expanded="true" aria-controls="collapseFive" class="collapsed">
+					<span class="caret"></span>
+					About test images
+				</a>
+			</h4>
+		</div>
+		<div id="collapseTestImages" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTestImages">
+			<div class="panel-body">
+				<p>
+					Test-Image by Rotkaeppchen68 (in de.wikipedia) [<a href="http://www.gnu.org/copyleft/fdl.html">GFDL</a> or <a
+					href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA-3.0</a>], <a
+					href="https://commons.wikimedia.org/wiki/File%3AFuBK-Testbild.png">via Wikimedia Commons</a>
+				</p>
+			</div>
+		</div>
+	</div>
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/MailTest.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/MailTest.html
new file mode 100644
index 000000000000..b270ad39f936
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/MailTest.html
@@ -0,0 +1,42 @@
+<p>
+	Check the basic mail functionality by entering your email address here and clicking the button.
+	You should then receive a test email from "{senderEmailAddress}".
+</p>
+
+<p>
+	If no email is received, your setup might be broken. Check the following:
+</p>
+<ul>
+	<li>
+		If <code>$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport']</code> is set to mail or sendmail, TYPO3 tries to use
+		PHPs internal mail() function. There might be no such program installed.
+	</li>
+	<li>
+		If <code>$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport']</code> is set to smtp, check if the data given in
+		<code>$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_*']</code> is valid. Wrong data here results in faulty
+		requests to the mail server. You can find the resulting messages in the mail server log.
+	</li>
+</ul>
+
+<div style="display:none">
+	<div id="t3js-mailTest-token">{mailTestToken}</div>
+</div>
+
+<div class="t3js-mailTest-output"></div>
+
+<form>
+	<div class="form-group">
+		<label for="t3-install-checkmail">Email address:</label>
+		<input
+			id="t3-install-checkmail"
+			type="email"
+			class="t3-install-form-input-text form-control t3js-mailTest-email"
+		/>
+	</div>
+	<button
+		class="btn btn-default t3js-mailTest-send"
+		type="button"
+	>
+		Send test mail
+	</button>
+</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/PhpInfo.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/PhpInfo.html
new file mode 100644
index 000000000000..40081d35798d
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/PhpInfo.html
@@ -0,0 +1,3 @@
+<div class="table-responsive" id="phpinfo">
+    <i:phpInfo />
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/SystemInformation.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/SystemInformation.html
similarity index 70%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/SystemInformation.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/SystemInformation.html
index 1743821974f2..3c39187b49e8 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/SystemInformation.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Environment/SystemInformation.html
@@ -1,26 +1,26 @@
 {namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<h3>Main system information</h3>
 <table class="table table-striped table-bordered">
 	<tr>
 		<td>Operating system:</td>
-		<td><strong>{operatingSystem}</strong></td>
+		<td><strong>{systemInformationOperatingSystem}</strong></td>
 	</tr>
 	<tr>
 		<td>PHP version:</td>
-		<td><strong><i:constant name="PHP_VERSION" /></strong></td>
+		<td><strong>
+			<i:constant name="PHP_VERSION"/>
+		</strong></td>
 	</tr>
 	<tr>
 		<td>PHP CGI detected:</td>
-		<td><strong>{f:if(condition:cgiDetected, then:'Yes', else:'No')}</strong></td>
+		<td><strong>{f:if(condition:systemInformationCgiDetected, then:'Yes', else:'No')}</strong></td>
 	</tr>
-		<f:if condition="{connections -> f:count()} > 1">
-			<tr>
-				<td>Number of database connections:</td>
-				<td><strong>{connections -> f:count()}</strong></td>
-			</tr>
-		</f:if>
-	<f:for each="{connections}" as="connection">
+	<f:if condition="{systemInformationDatabaseConnections -> f:count()} > 1">
+		<tr>
+			<td>Number of database connections:</td>
+			<td><strong>{systemInformationDatabaseConnections -> f:count()}</strong></td>
+		</tr>
+	</f:if>
+	<f:for each="{systemInformationDatabaseConnections}" as="connection">
 		<tr>
 			<td>Database connection <strong>'{connection.connectionName}'</strong></td>
 			<td>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ClearAllCache.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ClearAllCache.html
deleted file mode 100644
index 5203ec130e5d..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ClearAllCache.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<h3>Clear all cache</h3>
-<p>
-	This clear all cache function works in a similar manner as the cache clearing in the backend, but takes a
-	more straightforward approach and the according backend hooks are not executed.
-</p>
-<p>
-	This method can throw a fatal error if a broken extension is loaded. If you get a white page
-	or a PHP error message, check your system with the broken extension test below.
-</p>
-<p>
-	This clears the complete opcode caches of the active opcode cache systems, if the system supports reset.
-</p>
-<p>Available PHP opcode cache systems</p>
-<ul>
-	<f:for each="{listOfOpcodeCaches}" as="opcodeCache" key="opcodeCacheName">
-		<li>{opcodeCacheName} ({opcodeCache.version}) -
-			<f:if condition="{opcodeCache.canReset}">
-				<f:then>reset is supported</f:then>
-				<f:else>reset is not supported</f:else>
-			</f:if>
-		</li>
-	</f:for>
-</ul>
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<div class="t3js-clearAllCache">
-		<f:render partial="Action/Common/SubmitButton" arguments="{name:'clearAllCache', text:'Clear all caches including PHP opcode cache'}"/>
-	</div>
-</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CoreUpdateButton.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CoreUpdateButton.html
deleted file mode 100644
index 2ba4e286b58e..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CoreUpdateButton.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<h3>Core update</h3>
-
-<p>
-	The install tool can automatically update the TYPO3 CMS core to its latest
-	minor release if certain criteria are met.
-</p>
-
-<div class="t3js-coreUpdate">
-	<f:if condition="!{composerMode} && {enableCoreUpdate} && {isInstalledVersionAReleasedVersion} && {isSymLinkedCore}">
-		<f:then>
-			<div id="buttonTemplate">
-				<fieldset class="t3-install-form-submit">
-					<button class="btn btn-default" type="submit" name="coreUpdateCheckForUpdate" data-action="checkForUpdate">
-							Check for core updates
-					</button>
-				</fieldset>
-			</div>
-		</f:then>
-		<f:else>
-			<div class="typo3-message alert alert-notice">
-				<div class="header-container">
-					<div class="message-header">
-						<strong>Disabled</strong>
-					</div>
-				</div>
-				<div class="message-body">
-					This feature is disabled in this installation.<br />
-					<f:if condition="{composerMode}">
-						Composer Mode is active. Please update using composer commands.
-					</f:if>
-					<f:if condition="!{enableCoreUpdate}">
-						The environment variable was set <code>TYPO3_DISABLE_CORE_UPDATER=1</code>.
-					</f:if>
-					<f:if condition="!{isInstalledVersionAReleasedVersion}">
-						This system isn't a released TYPO3 version.
-					</f:if>
-					<f:if condition="!{isSymLinkedCore}">
-						This action can only be used with a linked typo3_src.
-					</f:if>
-				</div>
-			</div>
-		</f:else>
-	</f:if>
-</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CreateAdministrator.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CreateAdministrator.html
deleted file mode 100644
index ac8a549cd708..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/CreateAdministrator.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<h3>Create backend administrator user</h3>
-<p>
-	You should use this function only if there are no admin users in the database, for instance if this is a blank database.
-	After you've created the user, log in and add the rest of the user information, like email and real name.
-</p>
-<form method="post" class="form-horizontal">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<div class="form-group">
-		<label for="t3-install-admin-username" class="col-sm-3 control-label">Username:</label>
-		<div class="col-sm-9">
-			<input
-					id="t3-install-admin-username"
-					class="t3-install-form-input-text form-control"
-					type="text"
-					name="install[values][newUserUsername]"
-					autocomplete="off"
-					/>
-		</div>
-	</div>
-	<div class="form-group">
-		<label for="t3-install-admin-password" class="col-sm-3 control-label">Password:</label>
-		<div class="col-sm-9">
-			<input
-					id="t3-install-admin-password"
-					class="t3-install-form-input-text t3-install-form-password-strength form-control"
-					type="password"
-					name="install[values][newUserPassword]"
-					autocomplete="off"
-					/>
-		</div>
-	</div>
-	<div class="form-group">
-		<label for="t3-install-admin-password-repeat" class="col-sm-3 control-label">Repeat password:</label>
-		<div class="col-sm-9">
-			<input
-					id="t3-install-admin-password-repeat"
-					class="t3-install-form-input-text form-control"
-					type="password"
-					name="install[values][newUserPasswordCheck]"
-					autocomplete="off"
-					/>
-		</div>
-	</div>
-	<f:render partial="Action/Common/SubmitButton" arguments="{name:'createAdministrator', text:'Create administrator user'}"/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerButton.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerButton.html
deleted file mode 100644
index e281ed2a88f4..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerButton.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<h3>Database analyzer</h3>
-
-<p>
-	The database analyzer compares the database table and field definitions of the
-	current database with the specifications from all loaded extensions' ext_tables.sql files.
-	Depending on the specification, the analyzer can update, delete, and change tables
-	and fields.
-</p>
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<f:render partial="Action/Common/SubmitButton" arguments="{name:'databaseAnalyzerAnalyze', text:'Compare current database with specification'}"/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerData.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerData.html
deleted file mode 100644
index 09fb493bde2f..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerData.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<h3>Database analyzer</h3>
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<input type="hidden" name="install[set][databaseAnalyzerAnalyze]" />
-
-	<f:if condition="{databaseAnalyzerSuggestion.addTable}">
-		<f:render
-			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
-			arguments="{
-				key: 'addTable',
-				label: 'Add tables',
-				data: '{databaseAnalyzerSuggestion.addTable}',
-				enabled: 1
-			}"
-		/>
-	</f:if>
-
-	<f:if condition="{databaseAnalyzerSuggestion.addField}">
-		<f:render
-			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
-			arguments="{
-				key: 'addField',
-				label: 'Add fields to tables',
-				data: '{databaseAnalyzerSuggestion.addField}',
-				enabled: 1
-			}"
-		/>
-	</f:if>
-
-	<f:if condition="{databaseAnalyzerSuggestion.change}">
-		<f:render
-			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
-			arguments="{
-				key: 'change',
-				label: 'Change fields',
-				data: '{databaseAnalyzerSuggestion.change}'
-			}"
-		/>
-	</f:if>
-
-	<f:if condition="{databaseAnalyzerSuggestion.renameTableToUnused}">
-		<f:render
-			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
-			arguments="{
-				key: 'renameTableToUnused',
-				label: 'Remove tables (rename with prefix)',
-				data: '{databaseAnalyzerSuggestion.renameTableToUnused}'
-			}"
-		/>
-	</f:if>
-
-	<f:if condition="{databaseAnalyzerSuggestion.renameTableFieldToUnused}">
-		<f:render
-			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
-			arguments="{
-				key: 'renameTableFieldToUnused',
-				label: 'Remove unused fields (rename with prefix)',
-				data: '{databaseAnalyzerSuggestion.renameTableFieldToUnused}'
-			}"
-		/>
-	</f:if>
-
-	<f:if condition="{databaseAnalyzerSuggestion.deleteField}">
-		<f:render
-			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
-			arguments="{
-				key: 'deleteField',
-				label: 'Drop fields (really!)',
-				data: '{databaseAnalyzerSuggestion.deleteField}'
-			}"
-		/>
-	</f:if>
-
-	<f:if condition="{databaseAnalyzerSuggestion.deleteTable}">
-		<f:render
-			partial="Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion"
-			arguments="{
-				key: 'deleteTable',
-				label: 'Drop tables (really!)',
-				data: '{databaseAnalyzerSuggestion.deleteTable}'
-			}"
-		/>
-	</f:if>
-
-	<f:render partial="Action/Common/SubmitButton" arguments="{name:'databaseAnalyzerExecute', text:'Execute'}"/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion.html
deleted file mode 100644
index 51cdb5eca220..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DatabaseAnalyzerSuggestion.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<fieldset>
-	<legend>{label}</legend>
-	<ol class="list-unstyled">
-		<li class="t3-install-form-label-after">
-			<input
-				type="checkbox"
-				class="checkall"
-				id="t3-install-{key}-checkbox"
-				{f:if(condition:'{enabled} == 1', then:' checked="checked"')}
-			/>
-			<label for="t3-install-{key}-checkbox">select/deselect all</label>
-		</li>
-		<f:for each="{data}" as="field">
-			<li class="t3-install-form-label-after">
-				<input
-					type="checkbox"
-					id="t3-install-db-{field.hash}"
-					name="install[values][{field.hash}]"
-					value="1"
-					{f:if(condition:'{enabled} == 1', then:' checked="checked"')}
-				/>
-				<label for="t3-install-db-{field.hash}">
-					{field.statement}
-					<f:if condition="{field.current}">
-						<br />
-						Current value: {field.current}
-					</f:if>
-					<f:if condition="{field.count}">
-						<br />
-						{field.count}
-					</f:if>
-				</label>
-			</li>
-		</f:for>
-	</ol>
-</fieldset>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DumpAutoload.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DumpAutoload.html
deleted file mode 100644
index c715afb4d3be..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DumpAutoload.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<h3>Dump Autoload Information</h3>
-<p>
-	This (re-)dumps autoload information for all active third party extensions.
-</p>
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<div class="t3js-dumpAutoload">
-		<f:render partial="Action/Common/SubmitButton" arguments="{name:'dumpAutoload', text:'Create autoload information for extensions'}"/>
-	</div>
-</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ExtensionCompatibilityTester.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ExtensionCompatibilityTester.html
deleted file mode 100644
index 7594cdc8c08c..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/ExtensionCompatibilityTester.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<h3>Check for broken extensions</h3>
-<p>
-	Checks whether the local extensions' ext_tables and ext_localconf files can be included without errors,
-	meaning they can be loaded without breaking the system.
-</p>
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<div class="t3js-checkExtensions" data-protocolurl="{extensionCompatibilityTesterProtocolFile}" data-errorprotocolurl="{extensionCompatibilityTesterErrorProtocolFile}">
-		<f:for each="{extensionCompatibilityTesterMessages}" as="statusMessage">
-			<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-		</f:for>
-		<f:render partial="Action/Common/SubmitButton" arguments="{name:'checkExtensions', text:'Check extensions'}"/>
-	</div>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/NewInstallToolPassword.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/NewInstallToolPassword.html
deleted file mode 100644
index 282e1f8fe007..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/NewInstallToolPassword.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<h3>Change install tool password</h3>
-<form method="post" class="form-horizontal">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<div class="form-group">
-		<label for="t3-install-password" class="col-sm-3 control-label">Enter new password:</label>
-		<div class="col-sm-9">
-			<input
-				id="t3-install-password"
-				class="t3-install-form-input-text t3-install-form-password-strength form-control"
-				type="password"
-				name="install[values][newInstallToolPassword]"
-				autocomplete="off"
-			/>
-		</div>
-	</div>
-	<div class="form-group">
-		<label for="t3-install-password-repeat" class="col-sm-3 control-label">Repeat password:</label>
-		<div class="col-sm-9">
-			<input
-					id="t3-install-password-repeat"
-					class="t3-install-form-input-text form-control"
-					type="password"
-					name="install[values][newInstallToolPasswordCheck]"
-					autocomplete="off"
-					/>
-		</div>
-	</div>
-	<f:render partial="Action/Common/SubmitButton" arguments="{name:'changeInstallToolPassword', text:'Set new password'}"/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/TcaExtTablesCheck.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/TcaExtTablesCheck.html
deleted file mode 100644
index bffbccd93444..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/TcaExtTablesCheck.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<h3>TCA in ext_tables.php check</h3>
-<p>
-	Check if an extension changes $GLOBALS['TCA'] in ext_tables.php.
-</p>
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<div class="t3js-tcaExtTablesCheck">
-		<f:render partial="Action/Common/SubmitButton" arguments="{name:'tceExtTablesCheck', text:'Check loaded extensions'}"/>
-	</div>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/TcaMigrationsCheck.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/TcaMigrationsCheck.html
deleted file mode 100644
index e3ecaac16a3a..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/TcaMigrationsCheck.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<h3>TCA Migrations</h3>
-<p>
-	Checks whether the current TCA needs migrations and displays applied migrations.
-</p>
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<div class="t3js-tcaMigrationsCheck">
-		<f:render partial="Action/Common/SubmitButton" arguments="{name:'tcaMigrationsCheck', text:'Check TCA Migrations'}"/>
-	</div>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearAllCache.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearAllCache.html
new file mode 100644
index 000000000000..cb6eabbf3aa0
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearAllCache.html
@@ -0,0 +1,26 @@
+<p>
+	Similar to the clear cache function found in TYPO3’s backend.
+	This utility directly clears all system caches including opcode cache.
+</p>
+<p>
+	A fatal error will be thrown if a broken extension is detected.
+	If this occurs, use the extension tester utility.
+</p>
+
+<ul>
+	<f:for each="{clearAllCacheOpcodeCaches}" as="opcodeCache" key="opcodeCacheName">
+		<li>{opcodeCacheName} ({opcodeCache.version}) -
+			<f:if condition="{opcodeCache.canReset}">
+				<f:then>reset is supported</f:then>
+				<f:else>reset is not supported</f:else>
+			</f:if>
+		</li>
+	</f:for>
+</ul>
+<div class="t3js-clearAllCache-output"></div>
+<button
+	class="btn btn-default t3js-clearAllCache-clear"
+	type="button"
+>
+	Clear all caches including PHP opcode cache
+</button>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearTables.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearTables.html
new file mode 100644
index 000000000000..6db6faf56a3e
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearTables.html
@@ -0,0 +1,33 @@
+<p>
+	Some database tables in TYPO3 CMS hold semi-temporary data that is not deleted when clicking "Clear All Cache" in
+	the backend.
+	Those can be cleared here,
+	effectively removing all rows from it. This can be useful in rare cases.
+</p>
+<p>
+	Use with care! Clearing tables here can have a negative impact on your site functionality.
+	You could log out all users, delete all their basket data, and lose logging information!
+</p>
+<hr>
+
+<div style="display:none;">
+	<div id="t3js-clearTable-token">{clearTableToken}</div>
+</div>
+
+<div class="form-group">
+	<f:for each="{clearTableStats}" as="clearTableStatistic" iteration="iterator">
+		<div class="t3js-clearTable-container t3js-clearTable-container-{clearTableStatistic.name}">
+			<p>{clearTableStatistic.description}</p>
+			<div class="t3js-clearTable-output"></div>
+			<button
+				class="btn btn-default t3js-clearTable-clear" data-table="{clearTableStatistic.name}"
+				type="button"
+			>
+				Delete {clearTableStatistic.rowCount} rows from "{clearTableStatistic.name}" table
+			</button>
+			<f:if condition="!{iterator.isLast}">
+				<hr>
+			</f:if>
+		</div>
+	</f:for>
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearTypo3tempFiles.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearTypo3tempFiles.html
new file mode 100644
index 000000000000..e1c0d18d3916
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ClearTypo3tempFiles.html
@@ -0,0 +1,33 @@
+	<h4>About</h4>
+	<p>
+		TYPO3 stores processed files and cached images in a dedicated directory.
+		This directory is likely to grow quickly.
+	</p>
+	<p>
+		With this action you can delete the files in this folder. Afterwards, you
+		should also clear the cache database tables.
+	</p>
+	<p>
+		The File Abstraction Layer additionally stores a database record for every file
+		it needs to process. (e.g. image thumbnails). In case you modified some graphics
+		settings (All Configuration [GFX]) and you need all processed files to get regenerated,
+		you can use this tool to remove the "_processed_" ones.
+	</p>
+
+
+<div id="t3js-clearTypo3temp-delete-token" style="display:none;">{clearTypo3tempFilesToken}</div>
+
+<f:for each="{clearTypo3tempFilesStats}" as="folderStats" iteration="iterator">
+	<div class="t3js-clearTypo3temp-container t3js-clearTypo3temp-container-{folderStats.directory}">
+		<div class="t3js-clearTypo3temp-output"></div>
+		<button
+			class="btn btn-default t3js-clearTypo3temp-delete" data-folder="{folderStats.directory}"
+			type="button"
+		>
+			Delete {folderStats.numberOfFiles} in typo3temp/assets/{folderStats.directory}
+		</button>
+		<f:if condition="!{iterator.isLast}">
+			<hr />
+		</f:if>
+	</div>
+</f:for>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/CreateAdmin.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/CreateAdmin.html
new file mode 100644
index 000000000000..0d385f5716c5
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/CreateAdmin.html
@@ -0,0 +1,55 @@
+<p>
+	You should use this function only if there are no admin users in the database, for instance if this is a blank database.
+	After you've created the user, log in and add the rest of the user information, like email and real name.
+</p>
+
+<div style="display:none;">
+	<div id="t3js-createAdmin-token">{createAdminToken}</div>
+</div>
+
+
+
+<div class="form-horizontal">
+	<div class="form-group">
+		<label for="t3-install-admin-username" class="col-sm-3 control-label">Username:</label>
+		<div class="col-sm-9">
+			<input
+				id="t3-install-admin-username"
+				class="t3-install-form-input-text t3js-createAdmin-user form-control"
+				type="text"
+				autocomplete="off"
+			/>
+		</div>
+	</div>
+	<div class="form-group">
+		<label for="t3-install-admin-password" class="col-sm-3 control-label">Password:</label>
+		<div class="col-sm-9">
+			<input
+				id="t3-install-admin-password"
+				class="t3-install-form-input-text t3-install-form-password-strength t3js-createAdmin-password form-control"
+				type="password"
+				autocomplete="off"
+			/>
+		</div>
+	</div>
+	<div class="form-group">
+		<label for="t3-install-admin-password-repeat" class="col-sm-3 control-label">Repeat password:</label>
+		<div class="col-sm-9">
+			<input
+				id="t3-install-admin-password-repeat"
+				class="t3-install-form-input-text t3js-createAdmin-password-check form-control"
+				type="password"
+				autocomplete="off"
+			/>
+		</div>
+	</div>
+</div>
+
+<div class="t3js-createAdmin-output"></div>
+
+<button
+	class="btn btn-default t3js-createAdmin-create"
+	type="button"
+>
+	Create administrator user
+</button>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/DatabaseAnalyzer.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/DatabaseAnalyzer.html
new file mode 100644
index 000000000000..afe987b4a4a4
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/DatabaseAnalyzer.html
@@ -0,0 +1,57 @@
+<p>
+    Compares the database table and field definitions of the current database with the specifications from all loaded extensions' ext_tables.sql files.
+    Depending on the specification, the analyzer can update, delete, and change tables and fields.
+</p>
+
+<div style="display:none;">
+    <div id="t3js-databaseAnalyzer-execute-token">{databaseAnalyzerExecuteToken}</div>
+    <div class="t3js-databaseAnalyzer-suggestion-block">
+        <fieldset>
+            <h4 class="t3js-databaseAnalyzer-suggestion-block-legend"></h4>
+            <ol class="list-unstyled">
+                <li class="t3-install-form-label-after">
+                    <input
+                        type="checkbox"
+                        class="t3js-databaseAnalyzer-suggestion-block-checkbox"
+                    />
+                    <label class="t3js-databaseAnalyzer-suggestion-block-label">select/deselect all</label>
+                </li>
+                <div class="t3js-databaseAnalyzer-suggestion-block-line"></div>
+            </ol>
+        </fieldset>
+    </div>
+    <div class="t3js-databaseAnalyzer-suggestion-line">
+        <li class="t3-install-form-label-after">
+            <input
+                type="checkbox"
+                class="t3js-databaseAnalyzer-suggestion-line-checkbox"
+                value="1"
+            />
+            <label class="t3js-databaseAnalyzer-suggestion-line-label">
+                <span class="t3js-databaseAnalyzer-suggestion-line-statement"></span>
+                <span class="t3js-databaseAnalyzer-suggestion-line-current" style="display:none;">
+                    <br/>
+                    Current value: <span class="t3js-databaseAnalyzer-suggestion-line-current-value"></span>
+                </span>
+                <span class="t3js-databaseAnalyzer-suggestion-line-count" style="display:none;">
+                    <br/>
+                    Rows in table: <span class="t3js-databaseAnalyzer-suggestion-line-count-value"></span>
+                </span>
+            </label>
+        </li>
+    </div>
+</div>
+<div class="t3js-databaseAnalyzer-output"></div>
+<button
+    class="btn btn-default t3js-databaseAnalyzer-analyze"
+    type="button"
+>
+    Run database compare again
+</button>
+<button
+    class="btn btn-default t3js-databaseAnalyzer-execute"
+    type="button"
+    style="display:none;"
+>
+    Apply selected changes
+</button>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/DumpAutoload.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/DumpAutoload.html
new file mode 100644
index 000000000000..af9e4f631f89
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/DumpAutoload.html
@@ -0,0 +1,10 @@
+<p>
+	This (re-)dumps autoload information for all active third party extensions.
+</p>
+<div class="t3js-dumpAutoload-output"></div>
+<button
+	class="btn btn-default t3js-dumpAutoload-dump"
+	type="button"
+>
+	Create autoload information for extensions
+</button>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/LastError.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/LastError.html
similarity index 100%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/LastError.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/LastError.html
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ResetBackendUserUc.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ResetBackendUserUc.html
new file mode 100644
index 000000000000..25a112a261cb
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Maintenance/ResetBackendUserUc.html
@@ -0,0 +1,15 @@
+<p>
+	Clears user preferences of all backend users from be_users table.
+	The field 'uc' will be set to an empty string.
+</p>
+<p>
+	This may come in handy in rare cases where that configuration may be corrupt.
+	Clearing this will clear all user settings from the 'Setup' module.
+</p>
+<div class="t3js-resetBackendUserUc-output"></div>
+<button
+	class="btn btn-default t3js-resetBackendUserUc-reset"
+	type="button"
+>
+	Reset backend user preferences
+</button>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/ChangeInstallToolPassword.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/ChangeInstallToolPassword.html
new file mode 100644
index 000000000000..21a779d0d3af
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/ChangeInstallToolPassword.html
@@ -0,0 +1,40 @@
+<p>
+	Allows you to set a new install tool password.
+	The hash of this password will be written into LocalConfiguration.php and overwrite the old password.
+</p>
+
+<div style="display:none;">
+	<div id="t3js-changeInstallToolPassword-token">{changeInstallToolPasswordToken}</div>
+</div>
+
+<div class="form-horizontal">
+	<div class="form-group">
+		<label for="t3-install-tool-password" class="col-sm-3 control-label">Enter new password:</label>
+		<div class="col-sm-9">
+			<input
+				id="t3-install-tool-password"
+				class="t3-install-form-input-text t3-install-form-password-strength t3js-changeInstallToolPassword-password form-control"
+				type="password"
+				autocomplete="off"
+			/>
+		</div>
+	</div>
+	<div class="form-group">
+		<label for="t3-install-tool-password-repeat" class="col-sm-3 control-label">Repeat password:</label>
+		<div class="col-sm-9">
+			<input
+				id="t3-install-tool-password-repeat"
+				class="t3-install-form-input-text t3js-changeInstallToolPassword-password-check form-control"
+				type="password"
+				autocomplete="off"
+			/>
+		</div>
+	</div>
+</div>
+<div class="t3js-changeInstallToolPassword-output"></div>
+<button
+	class="btn btn-default t3js-changeInstallToolPassword-change"
+	type="button"
+>
+	Set new password
+</button>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/LocalConfiguration.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/LocalConfiguration.html
new file mode 100644
index 000000000000..d276f65c162b
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/LocalConfiguration.html
@@ -0,0 +1,34 @@
+<p>
+	Changed values are written to LocalConfiguration.php. The optional file AdditionalConfiguration.php
+	is not controlled by the TYPO3 CMS core and may override single settings again. Administrators
+	must maintain AdditionalConfiguration.php on their own and should use it with care.
+</p>
+
+<div style="display:none;">
+	<div id="t3js-localConfiguration-write-token">{localConfigurationWriteToken}</div>
+</div>
+
+<div class="form-group">
+	<div class="input-group">
+		<span class="input-group-addon">Filter by:</span>
+		<input type="text" class="form-control t3js-localConfiguration-search" placeholder="search setting">
+	</div>
+</div>
+
+<div class="panel-group" role="tablist" aria-multiselectable="true">
+	<f:for each="{localConfigurationData}" as="sectionData" key="sectionName">
+		<f:if condition="{sectionData}">
+			<f:render partial="Action/Tool/Settings/LocalConfiguration/SubSection" arguments="{_all}"/>
+		</f:if>
+	</f:for>
+</div>
+
+<div id="fixed-footer-handler">
+	<div id="fixed-footer">
+		<div class="t3js-localConfiguration-output"></div>
+		<div class="footer-innerWrap">
+			<span class="btn btn-default t3js-localConfiguration-write">Write configuration</span>
+			<span class="btn btn-default t3js-localConfiguration-toggleAll">Toggle All</span>
+		</div>
+	</div>
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/AllConfiguration/SubSection.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/LocalConfiguration/SubSection.html
similarity index 55%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/AllConfiguration/SubSection.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/LocalConfiguration/SubSection.html
index 6b02cb7ea85e..605a5e82da80 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/AllConfiguration/SubSection.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/LocalConfiguration/SubSection.html
@@ -1,11 +1,14 @@
 {namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<div class="panel panel-default">
+<div class="panel panel-default panel-flat">
 	<div class="panel-heading" role="tab" id="heading{sectionName}">
 		<h3 class="panel-title">
-			<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse{sectionName}" aria-expanded="true" aria-controls="collapse{sectionName}" class="collapsed">
+			<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse{sectionName}"
+				aria-expanded="true" aria-controls="collapse{sectionName}" class="collapsed"
+			>
 				<span class="caret"></span>
-				<strong><i:object.arrayValueByKey array="{sectionNames}" key="{sectionName}" /></strong> [{sectionName}]
+				<strong>
+					<i:object.arrayValueByKey array="{localConfigurationSectionNames}" key="{sectionName}"/>
+				</strong> [{sectionName}]
 			</a>
 		</h3>
 	</div>
@@ -17,7 +20,11 @@
 					<strong>[{sectionName}][{item.key}] </strong>
 					<f:if condition="{item.type} == 'checkbox'">
 						<f:then>
-							= <f:if condition="{item.value}"><f:then>true</f:then><f:else>false</f:else></f:if>
+							=
+							<f:if condition="{item.value}">
+								<f:then>true</f:then>
+								<f:else>false</f:else>
+							</f:if>
 						</f:then>
 						<f:else>
 							<f:if condition="{item.value}">
@@ -28,32 +35,28 @@
 				</div>
 				<div class="item-body">
 					<f:if condition="{item.type} == 'checkbox'">
-							<div class="checkbox">
-								<label>
-									<input
-											type="hidden"
-											value="0"
-											name="install[values][{sectionName}][{item.key}]"
-									/>
-									<input
-											type="checkbox"
-											value="1"
-											name="install[values][{sectionName}][{item.key}]"
-											{f:if(condition: item.checked, then:'checked="checked"')}
-									/>
-									{item.description -> f:format.raw()}
-								</label>
-							</div>
-						</f:if>
+						<div class="checkbox">
+							<label>
+								<input
+									type="checkbox"
+									value="1"
+									class="t3js-localConfiguration-pathValue"
+									data-path="{sectionName}/{item.key}"
+									{f:if(condition: item.checked, then:'checked="checked"')}
+								/>
+								{item.description -> f:format.raw()}
+							</label>
+						</div>
+					</f:if>
 
 					<f:if condition="{item.type} == 'input'">
 						<div class="form-group">
-						<span class="help-block">{item.description -> f:format.raw()}</span>
+							<span class="help-block">{item.description -> f:format.raw()}</span>
 							<input
-									type="text"
-									value="{item.value}"
-									name="install[values][{sectionName}][{item.key}]"
-									class="t3-install-form-input-text form-control"
+								type="text"
+								value="{item.value}"
+								data-path="{sectionName}/{item.key}"
+								class="t3-install-form-input-text form-control t3js-localConfiguration-pathValue"
 							/>
 						</div>
 					</f:if>
@@ -64,8 +67,8 @@
 							<input
 								type="number"
 								value="{item.value}"
-								name="install[values][{sectionName}][{item.key}]"
-								class="t3-install-form-input-text form-control"
+								data-path="{sectionName}/{item.key}"
+								class="t3-install-form-input-text form-control t3js-localConfiguration-pathValue"
 							/>
 						</div>
 					</f:if>
@@ -74,10 +77,10 @@
 						<span class="help-block">{item.description -> f:format.raw()}</span>
 						<div class="form-group">
 							<textarea
-									rows="5"
-									cols="60"
-									name="install[values][{sectionName}][{item.key}]"
-									class="form-control"
+								rows="5"
+								cols="60"
+								data-path="{sectionName}/{item.key}"
+								class="form-control t3js-localConfiguration-pathValue"
 							>{item.value}</textarea>
 						</div>
 					</f:if>
@@ -85,7 +88,9 @@
 					<f:if condition="{item.phpErrorCode}">
 						<div class="fieldNote">
 							Current PHP error code <strong>{item.value}</strong> represents:<br/>
-							<code><i:format.phpErrorCode phpErrorCode="{item.value}" /></code>
+							<code>
+								<i:format.phpErrorCode phpErrorCode="{item.value}"/>
+							</code>
 						</div>
 					</f:if>
 				</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets.html
new file mode 100644
index 000000000000..47f5781fcda2
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets.html
@@ -0,0 +1,37 @@
+<p>
+	The configuration module suggests best matching configuration settings
+	based on your system setup.
+</p>
+<p>
+	Alternatively TYPO3 can be run in a specific <a
+	href="https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Bootstrapping/Index.html#bootstrapping-context"
+	target="_blank">application context</a>,
+	by setting an environment variable in the web server configuration.
+	The application context can then be accessed e.g. in the AdditionalConfiguration.php file or
+	TypoScript configuration to customize settings accordingly.
+</p>
+<p>
+	Changed values are written to LocalConfiguration.php. The optional file AdditionalConfiguration.php
+	is not controlled by the TYPO3 CMS core and may override single settings again. Administrators
+	must maintain AdditionalConfiguration.php on their own and should use it with care.
+</p>
+
+<div style="display:none;">
+	<div id="t3js-presets-activate-token">{presetActivateToken}</div>
+</div>
+
+<div class="form-horizontal">
+	<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
+		<f:for each="{presetFeatures}" as="feature">
+			<f:render partial="Action/Tool/Settings/Presets/{feature.name}" arguments="{_all}"/>
+		</f:for>
+	</div>
+</div>
+<div class="t3js-presets-output"></div>
+
+<button
+	class="btn btn-default t3js-presets-activate"
+	type="button"
+>
+	Activate
+</button>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context.html
similarity index 91%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context.html
index aa0d9a5455f5..0927df693f27 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context.html
@@ -18,7 +18,7 @@
 				As a third option it is possible to manually customize each setting for specific needs.
 			</p>
 			<f:for each="{feature.presetsOrderedByPriority}" as="preset">
-				<f:render partial="Action/Tool/Configuration/{feature.name}/{preset.name}" arguments="{_all}" />
+				<f:render partial="Action/Tool/Settings/Presets/{feature.name}/{preset.name}" arguments="{_all}" />
 			</f:for>
 		</div>
 	</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context/Custom.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context/Custom.html
similarity index 90%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context/Custom.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context/Custom.html
index 864d266063ff..479e63b7f5e8 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context/Custom.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context/Custom.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-context-custom"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
@@ -34,7 +34,7 @@
 						type="text"
 						name="install[values][{feature.name}][{preset.name}][{configurationKey}]"
 						value="{configurationValue}"
-						class="form-control t3js-custom-preset"
+						class="form-control t3js-custom-preset t3js-presets-formField"
 						data-radio="t3-install-tool-configuration-context-custom"
 					/>
 				</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context/Debug.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context/Debug.html
similarity index 90%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context/Debug.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context/Debug.html
index 596fb9eff0a7..8bd6053e76a5 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context/Debug.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context/Debug.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-context-debug"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context/Live.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context/Live.html
similarity index 90%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context/Live.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context/Live.html
index 53a0e046e9b5..34e6b4909d56 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Context/Live.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Context/Live.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-context-live"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache.html
similarity index 90%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache.html
index 23154c2b9754..65a0a136dc61 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache.html
@@ -20,7 +20,7 @@
 				combination with a APC cache backend.
 			</p>
 			<f:for each="{feature.presetsOrderedByPriority}" as="preset">
-				<f:render partial="Action/Tool/Configuration/{feature.name}/{preset.name}" arguments="{_all}" />
+				<f:render partial="Action/Tool/Settings/Presets/{feature.name}/{preset.name}" arguments="{_all}" />
 			</f:for>
 		</div>
 	</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache/Apc.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache/Apc.html
similarity index 94%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache/Apc.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache/Apc.html
index c2ce15692880..733435f69aa3 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache/Apc.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache/Apc.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-extbaseobjectcache-apc"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache/Apcu.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache/Apcu.html
similarity index 94%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache/Apcu.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache/Apcu.html
index c59e654a4a98..3aff2a4dcca1 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache/Apcu.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache/Apcu.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-extbaseobjectcache-apc"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache/Database.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache/Database.html
similarity index 91%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache/Database.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache/Database.html
index ed764522ee23..dc3b7a846f55 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/ExtbaseObjectCache/Database.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/ExtbaseObjectCache/Database.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-extbaseobjectcache-database"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image.html
similarity index 94%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image.html
index 8e40e0e5aa71..f2541179511a 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image.html
@@ -39,7 +39,7 @@
 			</div>
 
 			<f:for each="{feature.presetsOrderedByPriority}" as="preset">
-				<f:render partial="Action/Tool/Configuration/{feature.name}/{preset.name}" arguments="{_all}" />
+				<f:render partial="Action/Tool/Settings/Presets/{feature.name}/{preset.name}" arguments="{_all}" />
 			</f:for>
 		</div>
 	</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image/Custom.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image/Custom.html
similarity index 90%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image/Custom.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image/Custom.html
index 0568b0357055..0587d1c8b1d3 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image/Custom.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image/Custom.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-image-custom"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
@@ -34,7 +34,7 @@
 						type="text"
 						name="install[values][{feature.name}][{preset.name}][{configurationKey}]"
 						value="{configurationValue}"
-						class="form-control t3js-custom-preset"
+						class="form-control t3js-custom-preset t3js-presets-formField"
 						data-radio="t3-install-tool-configuration-image-custom"
 					/>
 				</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image/GraphicsMagick.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image/GraphicsMagick.html
similarity index 94%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image/GraphicsMagick.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image/GraphicsMagick.html
index 243f0e951905..4413cc274922 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image/GraphicsMagick.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image/GraphicsMagick.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-image-graphicsmagick"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image/ImageMagick6.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image/ImageMagick6.html
similarity index 94%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image/ImageMagick6.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image/ImageMagick6.html
index 5062e83439ca..8845a91e687a 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Image/ImageMagick6.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Image/ImageMagick6.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-image-imagemagick6"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail.html
similarity index 90%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail.html
index 3b5a3205f194..c4ada7d7cfc9 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail.html
@@ -20,7 +20,7 @@
 				and allows to set the correct value in TYPO3 settings.
 			</p>
 			<f:for each="{feature.presetsOrderedByPriority}" as="preset">
-				<f:render partial="Action/Tool/Configuration/{feature.name}/{preset.name}" arguments="{_all}" />
+				<f:render partial="Action/Tool/Settings/Presets/{feature.name}/{preset.name}" arguments="{_all}" />
 			</f:for>
 		</div>
 	</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail/Custom.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail/Custom.html
similarity index 89%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail/Custom.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail/Custom.html
index b01192983068..3e64fb34c379 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail/Custom.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail/Custom.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-mail-custom"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
@@ -31,7 +31,7 @@
 						type="text"
 						name="install[values][{feature.name}][{preset.name}][{configurationKey}]"
 						value="{configurationValue}"
-						class="form-control t3js-custom-preset"
+						class="form-control t3js-custom-preset t3js-presets-formField"
 						data-radio="t3-install-tool-configuration-mail-custom"
 						/>
 				</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail/Sendmail.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail/Sendmail.html
similarity index 93%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail/Sendmail.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail/Sendmail.html
index b33776c24078..0999f398a9f5 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail/Sendmail.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail/Sendmail.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-mail-sendmail"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail/Smtp.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail/Smtp.html
similarity index 93%
rename from typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail/Smtp.html
rename to typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail/Smtp.html
index 133bf161c5df..cfe63ba64400 100644
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Configuration/Mail/Smtp.html
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/Presets/Mail/Smtp.html
@@ -3,7 +3,7 @@
 		<div class="message-header">
 			<input
 				type="radio"
-				class="t3-install-tool-configuration-radio"
+				class="t3-install-tool-configuration-radio t3js-presets-formField"
 				id="t3-install-tool-configuration-mail-smtp"
 				name="install[values][{feature.name}][enable]"
 				value="{preset.name}"
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/AboutImageHandling.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/AboutImageHandling.html
deleted file mode 100644
index d896a2d74ca4..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/AboutImageHandling.html
+++ /dev/null
@@ -1,51 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<div class="alert alert-notice">
-	<h4>About image handling</h4>
-	<p>
-		TYPO3 is known for its ability to process images on the server.
-	</p>
-	<p>
-		In the backend interface (TBE) thumbnails are automatically generated
-		as well as icons, menu items and pane tabs (by GDLib).
-		In the frontend all kinds of graphical elements are processed. Typically images are
-		scaled down to fit the pages (by ImageMagick) and menu items, graphical headers and
-		such are generated automatically (by GDLib + ImageMagick). In addition TYPO3 is able
-		to handle many file formats (thanks to ImageMagick), for example TIF, BMP, PCX, TGA,
-		AI and PDF in addition to the standard web formats; JPG, GIF, PNG.
-	</p>
-	<p>
-		In order to do this, TYPO3 uses two sets of tools:
-	</p>
-	<strong>
-		ImageMagick / GraphicsMagick:
-	</strong>
-	<p>
-		For conversion of non-web formats to webformats, combining images with alpha-masks,
-		performing image-effects like blurring and sharpening.
-	</p>
-	<p>
-		ImageMagick is a collection of external programs on the server called by the exec()
-		function in PHP. TYPO3 uses three of these, namely 'convert' (converting fileformats,
-		scaling, effects), 'combine'/'composite' (combining images with masks) and 'identify'
-		(returns image information). GraphicsMagick is an alternative to ImageMagick and can
-		be enabled by setting [GFX][processor] to 'GraphicsMagick'. This is recommended and enabled
-		by default. Because ImageMagick and Graphicsmagick are external programs, a requirement
-		must be met: The programs must be installed on the server and working. ImageMagick is
-		available for both Windows and Unix. The current version is 6+. ImageMagick homepage is
-		at <a href="http://www.imagemagick.org/">http://www.imagemagick.org/</a>
-	</p>
-	<strong>
-		GDLib:
-	</strong>
-	<p>
-		For drawing boxes and rendering text on images with truetype fonts. Also used for
-		icons, menuitems and generally the TypoScript GIFBUILDER object is based on GDlib,
-		but extensively utilizing ImageMagick to process intermediate results.
-	</p>
-	<p>
-		GDLib is accessed through internal functions in PHP, you'll need a version of PHP
-		with GDLib compiled in. Also in order to use TrueType fonts with GDLib you'll
-		need FreeType compiled in as well.
-	</p>
-</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CombiningImages.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CombiningImages.html
deleted file mode 100644
index e7ebd0a9310a..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CombiningImages.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<h4>Combining images</h4>
-	<p>
-		This verifies that the ImageMagick tools, <code>combine</code>, <code>composite</code>, are able to
-		combine two images through a grayscale mask.
-	</p>
-	<f:if condition="{combiningImagesTested}">
-		<p>Test-Image by Rotkaeppchen68 (in de.wikipedia) [<a href="http://www.gnu.org/copyleft/fdl.html">GFDL</a> or <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA-3.0</a>], <a href="https://commons.wikimedia.org/wiki/File%3AFuBK-Testbild.png">via Wikimedia Commons</a></p>
-
-		<f:for each="{testResults}" as="test">
-			<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
-		</f:for>
-
-		<f:render partial="Action/Tool/TestSetup/AboutImageHandling" arguments="{_all}" />
-		<f:render partial="Action/Tool/TestSetup/VerifyTestResults" arguments="{_all}" />
-		<f:render partial="Action/Tool/TestSetup/CurrentConfiguration" arguments="{_all}" />
-	</f:if>
-	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testCombiningImages', text:'Test combining images'}"/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ConvertImageFormatsToJpg.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ConvertImageFormatsToJpg.html
deleted file mode 100644
index d3f7bff2f7ed..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ConvertImageFormatsToJpg.html
+++ /dev/null
@@ -1,37 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<h4>Convert image formats to jpg</h4>
-	<p>
-		This verifies that your ImageMagick installation is able to read the default
-		formats <code>jpg</code>, <code>gif</code>, <code>png</code>, <code>tif</code>, <code>pdf</code> and <code>ai</code>.
-		The tool <code>identify</code> is used to read the pixeldimensions of non-web formats and 'convert' is used to
-		read the image and convert it to <code>jpg</code>.
-	</p>
-	<f:if condition="{convertImageFormatsToJpgTested}">
-		<p>Test-Image by Rotkaeppchen68 (in de.wikipedia) [<a href="http://www.gnu.org/copyleft/fdl.html">GFDL</a> or <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA-3.0</a>], <a href="https://commons.wikimedia.org/wiki/File%3AFuBK-Testbild.png">via Wikimedia Commons</a></p>
-
-		<div class="typo3-message message-notice">
-			<div class="header-container">
-				<div class="message-header">
-					<strong>Dark images</strong>
-				</div>
-			</div>
-			<div class="message-body">
-				In case the images appear remarkably darker than the reference images,
-				try to set [TYPO3_CONF_VARS][GFX][colorspace] = sRGB.
-			</div>
-		</div>
-		<p></p>
-
-		<f:for each="{testResults}" as="test">
-			<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
-		</f:for>
-
-		<f:render partial="Action/Tool/TestSetup/AboutImageHandling" arguments="{_all}" />
-		<f:render partial="Action/Tool/TestSetup/VerifyTestResults" arguments="{_all}" />
-		<f:render partial="Action/Tool/TestSetup/CurrentConfiguration" arguments="{_all}" />
-	</f:if>
-	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testConvertImageFormatsToJpg', text:'Test image formats'}"/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CurrentConfiguration.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CurrentConfiguration.html
deleted file mode 100644
index 26f9c2c55202..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/CurrentConfiguration.html
+++ /dev/null
@@ -1,79 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<div class="alert alert-notice">
-	<h4>Current configuration</h4>
-	<table class="table table-striped">
-		<tr>
-			<td>
-				{imageConfiguration.processor} enabled:
-			</td>
-			<td>
-				{f:if(condition:imageConfiguration.processorEnabled, then:'Yes', else:'No')}
-			</td>
-		</tr>
-		<tr>
-			<td>
-				ImageMagick or GraphicsMagick:
-			</td>
-			<td>
-				{imageConfiguration.processor}
-			</td>
-		</tr>
-		<tr>
-			<td>
-				{imageConfiguration.processor} path:
-			</td>
-			<td>
-				{imageConfiguration.processorPath}
-			</td>
-		</tr>
-		<tr>
-			<td>
-				{imageConfiguration.processor} version:
-			</td>
-			<td>
-				{imageConfiguration.processorVersion}
-			</td>
-		</tr>
-		<tr>
-			<td>
-				{imageConfiguration.processor} effects enabled:
-			</td>
-			<td>
-				{imageConfiguration.processorEffects} <span>(Blurring/Sharpening with {imageConfiguration.processor})</span>
-			</td>
-		</tr>
-		<tr>
-			<td>
-				GDLib enabled:
-			</td>
-			<td>
-				{f:if(condition:imageConfiguration.gdlibEnabled, then:'Yes', else:'No')}
-			</td>
-		</tr>
-		<tr>
-			<td>
-				GDLib using PNG:
-			</td>
-			<td>
-				{imageConfiguration.gdlibPng}
-			</td>
-		</tr>
-		<tr>
-			<td>
-				Freetype DPI:
-			</td>
-			<td>
-				{imageConfiguration.freeTypeDpi} <span>(Should be 96 for Freetype 2)</span>
-			</td>
-		</tr>
-		<tr>
-			<td>
-				File Formats:
-			</td>
-			<td>
-				{imageConfiguration.fileFormats}
-			</td>
-		</tr>
-	</table>
-</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/DisplayTwinImage.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/DisplayTwinImage.html
deleted file mode 100644
index 3e6b758e260f..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/DisplayTwinImage.html
+++ /dev/null
@@ -1,67 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<h4>{test.title}</h4>
-
-<f:if condition="{test.message}">
-	<f:render partial="Action/Common/StatusMessage" arguments="{message: test.message}" />
-</f:if>
-
-<f:if condition="{test.error}">
-	<f:then>
-		<f:render partial="Action/Common/StatusMessage" arguments="{message: test.error}"/>
-	</f:then>
-	<f:else>
-		<div class="t3-install-displaytwinimageimages">
-			<div class="row">
-				<div class="col-xs-12 col-md-6">
-					<h4>Reference</h4>
-					<div class="bg-transparent-emulation">
-						<img src="../../../../{test.referenceFile -> i:file.relativePath()}?{time}" />
-					</div>
-				</div>
-				<div class="col-xs-12 col-md-6">
-					<h4>Your system</h4>
-					<f:if condition="{test.outputFile}">
-						<f:then>
-							<f:if condition="{i:file.exists(file:test.outputFile)}">
-								<f:then>
-									<div class="bg-transparent-emulation">
-										<img src="../../../../{test.outputFile -> i:file.relativePath()}?{time}" />
-									</div>
-								</f:then>
-								<f:else>
-									<div class="typo3-message message-error" >
-										<div class="header-container">
-											<div class="message-header"><strong>No image</strong></div>
-										</div>
-										<div class="message-body">
-											Your system generated no image, it was probably unable to write the file. Do you have a permission problem?
-										</div>
-									</div>
-								</f:else>
-							</f:if>
-						</f:then>
-						<f:else>
-							<div class="typo3-message message-error" >
-								<div class="header-container">
-									<div class="message-header"><strong>No image</strong></div>
-								</div>
-								<div class="message-body">
-									Your system generated no image at all. This is probably a misconfiguration.
-								</div>
-							</div>
-						</f:else>
-					</f:if>
-				</div>
-			</div>
-		</div>
-
-		<f:if condition="{test.command}">
-			<div class="t3-install-displaytwinimagetextarea">
-				{i:format.imageMagickCommands(commands:test.command) -> f:format.raw()}
-			</div>
-		</f:if>
-	</f:else>
-</f:if>
-
-<p></p>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Gdlib.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Gdlib.html
deleted file mode 100644
index 90e0a852b680..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Gdlib.html
+++ /dev/null
@@ -1,19 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<p>
-		This verifies that the GDLib installation works properly.
-	</p>
-	<f:if condition="{gdlibTested}">
-		<f:render partial="Action/Tool/TestSetup/AboutImageHandling" arguments="{_all}" />
-		<f:render partial="Action/Tool/TestSetup/VerifyTestResults" arguments="{_all}" />
-		<f:render partial="Action/Tool/TestSetup/CurrentConfiguration" arguments="{_all}" />
-		<p>Test-Image by Rotkaeppchen68 (in de.wikipedia) [<a href="http://www.gnu.org/copyleft/fdl.html">GFDL</a> or <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA-3.0</a>], <a href="https://commons.wikimedia.org/wiki/File%3AFuBK-Testbild.png">via Wikimedia Commons</a></p>
-
-		<f:for each="{testResults}" as="test">
-			<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
-		</f:for>
-	</f:if>
-	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testGdlib', text:'Test GDLib'}"/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Mail.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Mail.html
deleted file mode 100644
index 8189f39ed666..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/Mail.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<p>
-	You can check the basic mail functionality by entering your email address here and clicking the button.
-	You should then receive a test email from "{senderEmailAddress}".
-</p>
-
-<p>
-	If no email is received, your setup might be broken. Check the following:
-	<ul>
-		<li>
-			If <code>$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport']</code> is set to mail or sendmail, TYPO3 tries to use PHPs internal
-			mail() function. There might be no such program installed.
-		</li>
-		<li>
-			If <code>$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport']</code> is set to smtp, check if the data given in
-			<code>$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_*']</code> is valid. Wrong data here results in faulty requests to the
-			mail server. You can find the resulting messages in the mail server log.
-		</li>
-	</ul>
-</p>
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<div class="form-group">
-		<label for="t3-install-checkmail">Email address:</label>
-		<input
-			id="t3-install-checkmail"
-			type="email"
-			name="install[values][testEmailRecipient]"
-			class="t3-install-form-input-text form-control"
-		/>
-	</div>
-	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testMail', text:'Send test mail'}"/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ScalingImages.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ScalingImages.html
deleted file mode 100644
index e03a537249be..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/ScalingImages.html
+++ /dev/null
@@ -1,21 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<h4>Scaling images</h4>
-	<p>
-		This shows how ImageMagick reacts when scaling transparent GIF and PNG files.
-	</p>
-	<f:if condition="{scalingImagesTested}">
-		<p>Test-Image by Rotkaeppchen68 (in de.wikipedia) [<a href="http://www.gnu.org/copyleft/fdl.html">GFDL</a> or <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA-3.0</a>], <a href="https://commons.wikimedia.org/wiki/File%3AFuBK-Testbild.png">via Wikimedia Commons</a></p>
-
-		<f:for each="{testResults}" as="test">
-			<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
-		</f:for>
-
-		<f:render partial="Action/Tool/TestSetup/AboutImageHandling" arguments="{_all}" />
-		<f:render partial="Action/Tool/TestSetup/VerifyTestResults" arguments="{_all}" />
-		<f:render partial="Action/Tool/TestSetup/CurrentConfiguration" arguments="{_all}" />
-	</f:if>
-	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testScalingImages', text:'Test scaling images'}"/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/TrueTypeFont.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/TrueTypeFont.html
deleted file mode 100644
index 3afe919e7615..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/TrueTypeFont.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<f:if condition="{trueTypeFontTested}">
-		<f:for each="{testResults}" as="test">
-			<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
-		</f:for>
-	</f:if>
-	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testTrueTypeFont', text:'Test true type font'}"/>
-</form>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/VerifyTestResults.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/VerifyTestResults.html
deleted file mode 100644
index e70a08b9b644..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/VerifyTestResults.html
+++ /dev/null
@@ -1,18 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<div class="alert alert-notice">
-	<h4>Verify test results</h4>
-	<p>
-		This page performs image processing and displays the result. It's a thorough check
-		that everything you've configured is working correctly.
-	</p>
-	<p>
-		It's quite simple to verify your installation; Just look down the page, the images
-		in pairs should look like each other. If some images are not alike, something is
-		wrong. You may also notice warnings and errors if this tool found signs of any problems.
-	</p>
-	<p>
-		The image to the left is the reference image (how it should be) and to the right
-		the image made by your server.
-	</p>
-</div>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/WriteGifAndPng.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/WriteGifAndPng.html
deleted file mode 100644
index ff3325b60d12..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/TestSetup/WriteGifAndPng.html
+++ /dev/null
@@ -1,23 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<h4>Writing gif and png</h4>
-	<p>
-		This verifies that ImageMagick is able to write GIF and PNG files.
-		The GIF-file is attempted compressed with LZW by the
-		<code>\TYPO3\CMS\Core\Imaging\GraphicalFunctions::gifCompress()</code> function.
-	</p>
-	<f:if condition="{writeGifAndPngTested}">
-		<p>Test-Image by Rotkaeppchen68 (in de.wikipedia) [<a href="http://www.gnu.org/copyleft/fdl.html">GFDL</a> or <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA-3.0</a>], <a href="https://commons.wikimedia.org/wiki/File%3AFuBK-Testbild.png">via Wikimedia Commons</a></p>
-
-		<f:for each="{testResults}" as="test">
-			<f:render partial="Action/Tool/TestSetup/DisplayTwinImage" arguments="{_all}"/>
-		</f:for>
-
-		<f:render partial="Action/Tool/TestSetup/AboutImageHandling" arguments="{_all}" />
-		<f:render partial="Action/Tool/TestSetup/VerifyTestResults" arguments="{_all}" />
-		<f:render partial="Action/Tool/TestSetup/CurrentConfiguration" arguments="{_all}" />
-	</f:if>
-	<f:render partial="Action/Common/SubmitButton" arguments="{name:'testWriteGifAndPng', text:'Test image formats'}"/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/CheckForBrokenExtensions.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/CheckForBrokenExtensions.html
new file mode 100644
index 000000000000..ff910a633796
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/CheckForBrokenExtensions.html
@@ -0,0 +1,16 @@
+<p>
+	Checks whether the local extensions' ext_tables and ext_localconf files can be included without errors,
+	meaning they can be loaded without breaking the system.
+</p>
+
+<div
+	class="t3js-checkForBrokenExtensions-data"
+	data-protocolurl="{extensionCompatibilityTesterProtocolFile}"
+	data-errorprotocolurl="{extensionCompatibilityTesterErrorProtocolFile}"
+></div>
+<div class="t3js-checkForBrokenExtensions-output"></div>
+<div class="btn-group">
+	<button  class="btn btn-default t3js-checkForBrokenExtensions-check">
+		Check extensions
+	</button>
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/CoreUpdate.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/CoreUpdate.html
new file mode 100644
index 000000000000..54c306c72f58
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/CoreUpdate.html
@@ -0,0 +1,62 @@
+<p>
+	Automatically updates the TYPO3 CMS core to its latest minor release if these criterias are met:
+</p>
+<ul>
+	<li>
+		It only works under Unix and MacOS (needs symlink support).
+	</li>
+	<li>
+		typo3_src must be a symlink.
+	</li>
+	<li>
+		Symlink needs to be writable (and deletable) by the web
+		server user.
+	</li>
+	<li>
+		Document root needs to be writable.
+	</li>
+	<li>
+		One path above document root (../) needs to be writable (new directories need to be allowed to be created).
+	</li>
+	<li>
+		The tar command must be available for extracting the Source package.
+	</li>
+</ul>
+
+<div class="t3js-coreUpdate-output">
+	<f:if condition="!{coreUpdateComposerMode} && {coreUpdateEnabled} && {coreUpdateIsReleasedVersion} && {coreUpdateIsSymLinkedCore}">
+		<f:then>
+			<div class="t3js-coreUpdate-buttonTemplate">
+				<button class="btn btn-default t3js-coreUpdate-init" type="submit" name="coreUpdateCheckForUpdate"
+					data-action="checkForUpdate"
+				>
+					Check for core updates
+				</button>
+			</div>
+		</f:then>
+		<f:else>
+			<div class="typo3-message alert alert-notice">
+				<div class="header-container">
+					<div class="message-header">
+						<strong>Disabled</strong>
+					</div>
+				</div>
+				<div class="message-body">
+					This feature is disabled in this installation.<br/>
+					<f:if condition="{coreUpdateComposerMode}">
+						Composer Mode is active. Please update using composer commands.
+					</f:if>
+					<f:if condition="!{coreUpdateEnabled}">
+						The environment variable was set <code>TYPO3_DISABLE_CORE_UPDATER=1</code>.
+					</f:if>
+					<f:if condition="!{coreUpdateIsReleasedVersion}">
+						This system isn't a released TYPO3 version.
+					</f:if>
+					<f:if condition="!{coreUpdateIsSymLinkedCore}">
+						This action can only be used with a linked typo3_src.
+					</f:if>
+				</div>
+			</div>
+		</f:else>
+	</f:if>
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/ExtensionScanner.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/ExtensionScanner.html
new file mode 100644
index 000000000000..325df013ffb5
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/ExtensionScanner.html
@@ -0,0 +1,99 @@
+<p>
+	This module scans extensions for usage of deprecated and removed TYPO3 API calls.
+	The module can be a great help for extension developers and site maintainers when
+	upgrading to new core versions. However, the detection approach - based on static
+	code analysis - is limited by concept: false positives/negatives are impossible to avoid.
+	Further details can be found at
+	<a style="text-decoration: underline;" target="_blank" rel="noopener" href="https://docs.typo3.org/typo3cms/CoreApiReference/ExtensionScanner/Index.html">
+		the official docs.
+	</a>
+</p>
+
+<div style="display:none;">
+	<div id="t3js-extensionScanner-files-token">{extensionScannerFilesToken}</div>
+	<div id="t3js-extensionScanner-scan-file-token">{extensionScannerScanFileToken}</div>
+	<div id="t3js-extensionScanner-mark-fully-scanned-rest-files-token">{extensionScannerMarkFullyScannedRestFilesToken}</div>
+	<div id="t3js-extensionScanner-file-hit-template">
+		<div class="panel panel-flat t3js-extensionScanner-hit-panel risk-medium">
+			<div class="panel-heading">
+				<h3 class="panel-title">
+					<a href="#collapse" class="collapsed t3js-extensionScanner-hit-file-panel-head" data-toggle="collapse">
+						<span class="caret"></span>
+						<span class="pull-right badges"></span>
+						<span class="t3js-extensionScanner-hit-filename file">aFile</span>
+						<span class="t3js-extensionScanner-hit-message message">aMessage</span>
+					</a>
+				</h3>
+			</div>
+			<div id="collapse" class="panel-collapse collapse t3js-extensionScanner-hit-file-panel-body">
+				<div class="panel-body">
+					<pre><strong class="t3js-extensionScanner-hit-file-line"></strong><span class="t3js-extensionScanner-hit-file-lineContent"></span></pre>
+					<div class="panel-group-flat t3js-extensionScanner-hit-file-rest-container"></div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div id="t3js-extensionScanner-file-hit-rest-template">
+		<div class="panel panel-flat t3js-extensionScanner-hit-rest-panel risk-medium">
+			<div class="panel-heading">
+				<h3 class="panel-title">
+					<a href="#collapse-rest"
+						class="collapsed t3js-extensionScanner-hit-rest-panel-head"
+						data-toggle="collapse"
+					>
+						<span class="badge pull-right">aBadge</span>
+						<span class="caret"></span>
+						<strong class="t3js-extensionScanner-hit-rest-headline">restFileHeadline</strong>
+					</a>
+				</h3>
+			</div>
+			<div id="collapse-rest" class="panel-collapse collapse t3js-extensionScanner-hit-rest-panel-body">
+				<pre class="t3js-extensionScanner-hit-rest-body">restFileContent</pre>
+			</div>
+		</div>
+	</div>
+</div>
+
+<div class="progress t3js-extensionScanner-progress-all-extension">
+	<div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0;">
+		<span class="text-nowrap"></span>
+	</div>
+</div>
+
+<button class="btn btn-default t3js-extensionScanner-scan-all" type="submit">
+	Scan all
+</button>
+
+<h2>Extensions</h2>
+
+<div class="panel-group panel-group-flat panel-group-scanner-extensions">
+	<f:for each="{extensionScannerExtensionList}" as="extensionInTypo3conf" iteration="iterator">
+		<div
+			class="panel panel-flat t3js-extensionScanner-extension t3js-extensionScanner-extension-{extensionInTypo3conf.filename}"
+			data-extension="{extensionInTypo3conf.filename}">
+			<div class="panel-progress">
+				<div class="panel-progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0;"><span class="sr-only"></span></div>
+			</div>
+			<div class="panel-heading alert-notice">
+				<h2 class="panel-title">
+					<a href="#extension-{iterator.index}" class="collapsed" data-toggle="collapse">
+						<span class="caret"></span>
+						Extension: <strong>{extensionInTypo3conf.filename}</strong>
+						<span class="pull-right t3js-extensionScanner-number-of-files"></span>
+					</a>
+				</h2>
+			</div>
+			<div class="panel-collapse collapse" id="extension-{iterator.index}">
+				<div class="panel-body hide t3js-extensionScanner-extension-body"></div>
+				<div class="panel-footer">
+					<div>Effective lines of code: <span class="t3js-extensionScanner-extension-body-loc">0</span></div>
+					<div>Files ignored by scanner: <span class="t3js-extensionScanner-extension-body-ignored-files">0</span></div>
+					<div>Code lines ignored by scanner: <span class="t3js-extensionScanner-extension-body-ignored-lines">0</span></div>
+					<button class="btn btn-default t3js-extensionScanner-scan-single" data-extension="{extensionInTypo3conf.filename}" type="submit">
+						Scanning...
+					</button>
+				</div>
+			</div>
+		</div>
+	</f:for>
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/TcaExtTablesCheck.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/TcaExtTablesCheck.html
new file mode 100644
index 000000000000..4a82472e4f57
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/TcaExtTablesCheck.html
@@ -0,0 +1,7 @@
+<p>
+	Check if an extension still changes $GLOBALS['TCA'] in ext_tables.php.
+</p>
+<div class="t3js-tcaExtTablesCheck-output"></div>
+<button class="btn btn-default t3js-tcaExtTablesCheck-check" type="button">
+	Check loaded extensions
+</button>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/TcaMigrationsCheck.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/TcaMigrationsCheck.html
new file mode 100644
index 000000000000..1d56436cdeb6
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/TcaMigrationsCheck.html
@@ -0,0 +1,11 @@
+<p>
+	Checks whether the current TCA needs migrations and displays the new migration paths which need to be adjusted
+	manually.
+</p>
+<div class="t3js-tcaMigrationsCheck-output"></div>
+<button
+	class="btn btn-default t3js-tcaMigrationsCheck-check"
+	type="button"
+>
+	Check TCA Migrations
+</button>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeDocs.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeDocs.html
new file mode 100644
index 000000000000..3549d44b4986
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeDocs.html
@@ -0,0 +1,106 @@
+<div style="display:none">
+	<div id="t3js-upgradeDocs-markRead-token">{upgradeDocsMarkReadToken}</div>
+	<div id="t3js-upgradeDocs-unmarkRead-token">{upgradeDocsUnmarkReadToken}</div>
+</div>
+
+<div class="row">
+	<div class="col-md-12">
+		<div class="form-group">
+			<div class="input-group">
+				<span class="input-group-addon">Search:</span>
+				<input
+					type="text"
+					class="form-control t3js-upgradeDocs-fulltext-search"
+					placeholder="search setting"
+				>
+			</div>
+		</div>
+	</div>
+</div>
+<div class="row">
+	<div class="col-md-12">
+		<div class="form-group">
+			<div class="input-group">
+				<span class="input-group-addon">Filter by:</span>
+				<select
+					class="chosen-select t3js-upgradeDocs-chosen-select"
+					data-placeholder=""
+					style="width:100%;"
+					multiple
+					tabindex=""
+				>
+				</select>
+			</div>
+		</div>
+	</div>
+</div>
+
+<div class="panel-group panel-group-rst" role="tablist" aria-multiselectable="true">
+	<f:for each="{upgradeDocsFiles}" as="versionArray" key="version" iteration="iterator">
+		<f:if condition="{versionArray -> f:count()} > 0">
+			<div class="panel panel-default panel-version">
+				<div class="panel-heading" role="tab" id="heading-{iterator.index}">
+					<h2 class="panel-title">
+						<a href="#version-{iterator.index}"
+							class="collapsed" data-toggle="collapse"
+							aria-expanded="false"
+							aria-controls="#version-{iterator.index}"
+						>
+							<span class="caret"></span>
+							Version: <strong>{version}</strong>
+						</a>
+					</h2>
+				</div>
+				<div class="panel-collapse collapse"
+					id="version-{iterator.index}" role="tabpanel" data-group-version="{version}">
+					<div class="panel-body" role="tablist" aria-multiselectable="false">
+						<f:for each="{versionArray}" as="fileArray" key="issueNumber">
+							<f:render partial="Action/Tool/Upgrade/UpgradeDocs/PanelItem"
+								arguments="{issueNumber:issueNumber, fileArray:fileArray, version:version}"/>
+						</f:for>
+					</div>
+				</div>
+			</div>
+		</f:if>
+	</f:for>
+
+	<div class="panel panel-default panel-version">
+		<div class="panel-heading" role="tab" id="heading-read">
+			<h2 class="panel-title">
+				<a href="#collapseRead" class="collapsed" data-toggle="collapse" aria-expanded="false"
+					aria-controls="collapseRead">
+					<span class="caret"></span>
+					Files marked as read
+				</a>
+			</h2>
+		</div>
+		<div class="collapse" id="collapseRead" role="tabpanel">
+			<div class="panel-body panel-body-read" role="tablist" aria-multiselectable="false">
+				<f:for each="{upgradeDocsReadFiles}" as="fileArray" key="issueNumber">
+					<f:render partial="Action/Tool/Upgrade/UpgradeDocs/PanelItem"
+						arguments="{issueNumber:issueNumber, fileArray:fileArray, version:fileArray.section, read:'true'}"/>
+				</f:for>
+			</div>
+		</div>
+	</div>
+
+	<div class="panel panel-default panel-version">
+		<div class="panel-heading" role="tab" id="heading-not-affected">
+			<h2 class="panel-title">
+				<a href="#collapseNotAffected" class="collapsed" data-toggle="collapse">
+					<span class="caret"></span>
+					Files marked as not affected by extension scanner
+				</a>
+			</h2>
+		</div>
+		<div class="collapse" id="collapseNotAffected" role="tabpanel">
+			<div class="panel-body panel-body-not-affected" role="tablist" aria-multiselectable="false">
+				<f:for each="{upgradeDocsNotAffectedFiles}" as="fileArray" key="issueNumber">
+					<f:render partial="Action/Tool/Upgrade/UpgradeDocs/PanelItem"
+						arguments="{issueNumber:issueNumber, fileArray:fileArray, version:fileArray.section, read:'true'}"
+					/>
+				</f:for>
+			</div>
+		</div>
+	</div>
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeDocs/PanelItem.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeDocs/PanelItem.html
new file mode 100644
index 000000000000..9a78fe677939
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeDocs/PanelItem.html
@@ -0,0 +1,30 @@
+<div class="panel panel-rst panel-{fileArray.class} risk-medium upgrade_analysis_item_to_filter item"
+     data-item-tags="{fileArray.tagList}" data-item-version="{version}" id="heading{issueNumber}">
+    <div class="panel-heading" role="tab">
+        <h3 class="panel-title">
+            <f:if condition="{read}">
+                <f:then>
+                    <a class="link-action t3js-upgradeDocs-unmarkRead pull-right" data-filepath="{fileArray.filepath}"
+                       data-toggle="tooltip" data-placement="top" title="Mark as not read">
+                        <i class="fa fa-lg fa-ban"></i>
+                        <span class="sr-only">restore this document</span>
+                    </a>
+                </f:then>
+                <f:else>
+                    <a class="link-action t3js-upgradeDocs-markRead pull-right" data-filepath="{fileArray.filepath}"
+                       data-toggle="tooltip" data-placement="top" title="Mark as read">
+                        <i class="fa fa-lg fa-check"></i>
+                        <span class="sr-only">ignore this document</span>
+                    </a>
+                </f:else>
+            </f:if>
+            <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse{issueNumber}" aria-expanded="true" aria-controls="collapse{issueNumber}" class="collapsed">
+                <span class="caret"></span>
+                <strong>{fileArray.headline}</strong>
+            </a>
+        </h3>
+    </div>
+    <div id="collapse{issueNumber}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading{issueNumber}">
+        <pre><f:format.raw>{fileArray.parsedContent}</f:format.raw></pre>
+    </div>
+</div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeWizards.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeWizards.html
new file mode 100644
index 000000000000..d4def5b19190
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Upgrade/UpgradeWizards.html
@@ -0,0 +1,116 @@
+<p>
+	If you upgrade your TYPO3 installation from one major version to another (e.g. 6.2 to 7 LTS),
+	then the Upgrade Wizards guide you through the necessary steps to upgrade your database
+	records or explicitly install extensions that ship with the latest TYPO3 version.
+</p>
+
+<div style="display:none">
+	<div id="t3js-upgradeWizards-markUndone-token">{upgradeWizardsMarkUndoneToken}</div>
+	<div id="t3js-upgradeWizards-input-token">{upgradeWizardsInputToken}</div>
+	<div id="t3js-upgradeWizards-execute-token">{upgradeWizardsExecuteToken}</div>
+
+	<div class="t3js-upgradeWizards-blocking-charset-template">
+		<p>
+			The default database charset of the main MySQL database is not utf-8.
+			<br />
+			You have to run this update wizard before you can run any other update
+			wizard to make sure new tables and fields are created with the correct
+			charset.
+			<br />
+			WARNING: This will NOT convert any existing data.
+		</p>
+		<button class="btn btn-default t3js-upgradeWizards-blocking-charset-fix" type="button">
+			Set default charset to utf8
+		</button>
+	</div>
+
+	<div class="t3js-upgradeWizards-blocking-adds-template">
+		<p>
+			There are tables or fields in the database which need to be created.
+			<br />
+			You have to run this update wizard before you can run any other update
+			wizard to make sure all needed tables and fields are present.
+		</p>
+		<div>
+			<div class="t3js-upgradeWizards-blocking-adds-rows"></div>
+		</div>
+		<button class="btn btn-default t3js-upgradeWizards-blocking-adds-execute" type="button">
+			Create missing tables and fields
+		</button>
+	</div>
+
+	<div class="t3js-upgradeWizards-list-template">
+		<div class="progress">
+			<div class="progress-bar progress-bar-info progress-bar-striped" role="progressbar"
+				aria-valuenow="20" aria-valuemin="0" aria-valuemax="100"
+				style="width: {wizardsPercentageDone}%;">
+				<span>100%</span>
+			</div>
+		</div>
+		<div class="t3js-upgradeWizards-list-rows"></div>
+	</div>
+	<div class="t3js-upgradeWizards-list-row-template">
+		<h4 class="t3js-upgradeWizards-list-row-title"></h4>
+		<div class="t3js-upgradeWizards-list-row-explanation"></div>
+		<button class="btn btn-default t3js-upgradeWizards-list-row-execute" type="button">
+			Execute
+		</button>
+		<hr />
+	</div>
+
+	<div class="t3js-upgradeWizards-input">
+		<form>
+			<h4 class="t3js-upgradeWizards-input-title">{updateData.title}</h4>
+			<div class="t3js-upgradeWizards-input-html"></div>
+			<div class="form-group">
+				<div class="checkbox">
+					<label>
+						<input id="t3-install-showdatabasequeries" type="checkbox" name="install[values][showDatabaseQueries]" value="1" />
+						Show database queries performed
+					</label>
+				</div>
+			</div>
+			<button class="btn btn-default t3js-upgradeWizards-input-perform" type="button">
+				Perform updates!
+			</button>
+		</form>
+	</div>
+
+	<div class="t3js-upgradeWizards-done-body-template">
+		<table class="table table-striped">
+			<tbody class="t3js-upgradeWizards-done-rows"></tbody>
+		</table>
+	</div>
+	<div class="t3js-upgradeWizards-done-row-template">
+		<table>
+			<tr>
+				<td>
+					<button
+						type="button"
+						class="btn btn-default t3js-upgradeWizards-done-markUndone"
+					>
+						Mark undone
+					</button>
+				</td>
+				<td class="t3js-upgradeWizards-done-title">
+				</td>
+			</tr>
+		</table>
+	</div>
+</div>
+
+<hr>
+
+<h4>Available wizards</h4>
+<div class="t3js-upgradeWizards-wizards-output"></div>
+
+<hr>
+
+<h4>Wizards marked as done</h4>
+<p>
+	Some wizards fully automatically check whether they should be executed, while others just
+	set a flag in the system registry if they have been executed once. This "I have been executed"
+	flag can be reset by selecting specific wizards from the list below, so the according wizards
+	show up as possible upgrade wizards again.
+</p>
+<div class="t3js-upgradeWizards-done-output"></div>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeAnalysis/ListDocumentation.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeAnalysis/ListDocumentation.html
deleted file mode 100644
index 020ff52f9d6e..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeAnalysis/ListDocumentation.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<f:section name="Main">
-	<div class="panel-group panel-group-rst" role="tablist" aria-multiselectable="true">
-		<f:for each="{files}" as="versionArray" key="version" iteration="iterator">
-			<f:if condition="{versionArray -> f:count()} > 0">
-				<div class="panel panel-default panel-version">
-					<div class="panel-heading" role="tab" id="heading-{iterator.index}">
-						<h2 class="panel-title">
-							<a href="#version-{iterator.index}"
-								 class="{f:if(condition: '{iterator.isFirst}', then: '', else: 'collapsed')}" data-toggle="collapse"
-								 aria-expanded="{f:if(condition: '{iterator.isFirst}', then: 'true', else: 'false')}"
-								 aria-controls="#version-{iterator.index}">
-								<span class="caret"></span>
-								Version: <strong>{version}</strong>
-							</a>
-						</h2>
-					</div>
-					<div class="panel-collapse collapse {f:if(condition: '{iterator.isFirst}', then: 'in')}"
-							 id="version-{iterator.index}" role="tabpanel" data-group-version="{version}">
-						<div class="panel-body" role="tablist" aria-multiselectable="false">
-							<f:for each="{versionArray}" as="fileArray" key="issueNumber">
-
-								<f:render partial="Action/Tool/UpgradeAnalysis/PanelItem" section="Main"
-													arguments="{issueNumber:issueNumber, fileArray:fileArray, version:version}"/>
-
-							</f:for>
-						</div>
-					</div>
-				</div>
-			</f:if>
-		</f:for>
-
-		<div class="panel panel-default panel-version">
-			<div class="panel-heading" role="tab" id="heading-read">
-				<h2 class="panel-title">
-					<a href="#collapseRead" class="collapsed" data-toggle="collapse" aria-expanded="false"
-						 aria-controls="collapseRead">
-						<span class="caret"></span>
-						Files marked as read
-					</a>
-				</h2>
-			</div>
-			<div class="collapse" id="collapseRead" role="tabpanel">
-				<div class="panel-body panel-body-read" role="tablist" aria-multiselectable="false">
-					<f:for each="{shownFiles}" as="fileArray" key="issueNumber">
-						<f:render partial="Action/Tool/UpgradeAnalysis/PanelItem" section="Main"
-											arguments="{issueNumber:issueNumber, fileArray:fileArray, version:fileArray.section, read:'true'}"/>
-					</f:for>
-				</div>
-			</div>
-		</div>
-
-		<div class="panel panel-default panel-version">
-			<div class="panel-heading" role="tab" id="heading-not-affected">
-				<h2 class="panel-title">
-					<a href="#collapseNotAffected" class="collapsed" data-toggle="collapse">
-						<span class="caret"></span>
-						Files marked as not affected by extension scanner
-					</a>
-				</h2>
-			</div>
-			<div class="collapse" id="collapseNotAffected" role="tabpanel">
-				<div class="panel-body panel-body-not-affected" role="tablist" aria-multiselectable="false">
-					<f:for each="{notAffectedFiles}" as="fileArray" key="issueNumber">
-						<f:render
-							partial="Action/Tool/UpgradeAnalysis/PanelItem" section="Main"
-							arguments="{issueNumber:issueNumber, fileArray:fileArray, version:fileArray.section, read:'true'}"
-						/>
-					</f:for>
-				</div>
-			</div>
-		</div>
-	</div>
-
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeAnalysis/PanelItem.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeAnalysis/PanelItem.html
deleted file mode 100644
index 433db4350d40..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeAnalysis/PanelItem.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<f:section name="Main">
-    <div class="panel panel-rst panel-{fileArray.class} risk-medium upgrade_analysis_item_to_filter item"
-         data-item-tags="{fileArray.tagList}" data-item-version="{version}" id="heading{issueNumber}">
-        <div class="panel-heading" role="tab">
-            <h3 class="panel-title">
-                <f:if condition="{read}">
-                    <f:then>
-                        <a class="link-action t3js-upgradeanalysis-restore pull-right" data-filepath="{fileArray.filepath}"
-                           data-toggle="tooltip" data-placement="top" title="restore this document">
-                            <i class="fa fa-lg fa-ban"></i>
-                            <span class="sr-only">restore this document</span>
-                        </a>
-                    </f:then>
-                    <f:else>
-                        <a class="link-action t3js-upgradeanalysis-ignore pull-right" data-filepath="{fileArray.filepath}"
-                           data-toggle="tooltip" data-placement="top" title="ignore this document">
-                            <i class="fa fa-lg fa-check"></i>
-                            <span class="sr-only">ignore this document</span>
-                        </a>
-                    </f:else>
-                </f:if>
-                <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse{issueNumber}" aria-expanded="true" aria-controls="collapse{issueNumber}" class="collapsed">
-                    <span class="caret"></span>
-                    <strong>{fileArray.headline}</strong>
-                </a>
-            </h3>
-        </div>
-        <div id="collapse{issueNumber}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading{issueNumber}">
-            <pre><f:format.raw>{fileArray.parsedContent}</f:format.raw></pre>
-        </div>
-    </div>
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/GetUserInput.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/GetUserInput.html
deleted file mode 100644
index 7f0c76d18eef..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/GetUserInput.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<input type="hidden" name="install[values][identifier]" value="{updateData.identifier}"/>
-
-	<h4>{updateData.title}</h4>
-
-	<f:format.raw>{updateData.wizardHtml}</f:format.raw>
-	<div class="form-group">
-		<div class="checkbox">
-			<label>
-				<input id="t3-install-showdatabasequeries" type="checkbox" name="install[values][showDatabaseQueries]" value="1" />
-				Show database queries performed
-			</label>
-		</div>
-	</div>
-
-	<f:render
-		partial="Action/Common/SubmitButton"
-		arguments="{name:'performUpdate', text:'Perform updates!'}"
-	/>
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/ListUpdates.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/ListUpdates.html
deleted file mode 100644
index 6b620a84539b..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/ListUpdates.html
+++ /dev/null
@@ -1,98 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-<p>
-	If you upgrade your TYPO3 installation from one major version to another (e.g. 6.2 to 7 LTS),
-	then the Upgrade Wizards guide you through the necessary steps to upgrade your database
-	records or explicitly install extensions that ship with the latest TYPO3 version.
-</p>
-<hr />
-
-<h2>Wizards available</h2>
-<div class="progress">
-	<div class="progress-bar progress-bar-info progress-bar-striped" role="progressbar"
-		 aria-valuenow="{wizardsPercentageDone}" aria-valuemin="0" aria-valuemax="100"
-		 style="width: {wizardsPercentageDone}%;">
-		{wizardsPercentageDone}% Complete
-	</div>
-</div>
-<f:if condition="{availableUpdates}">
-	<f:then>
-		<f:for each="{availableUpdates}" as="availableUpdate">
-			<form method="post">
-				<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-				<input type="hidden" name="install[values][identifier]" value="{availableUpdate.identifier}"/>
-				<h4>{availableUpdate.title}</h4>
-				<f:format.raw>{availableUpdate.explanation}</f:format.raw>
-				<f:if condition="{availableUpdate.renderNext}">
-					<div>
-						<f:render
-							partial="Action/Common/SubmitButton"
-							arguments="{name:'getUserInput', text:'Execute', className: 'btn-primary'}"
-						/>
-						<f:render
-							partial="Action/Common/MarkExtensionAsDone"
-							arguments="{name:'markAsDone', text:'Mark as done'}"
-						/>
-					</div>
-				</f:if>
-				<hr />
-			</form>
-		</f:for>
-	</f:then>
-	<f:else>
-		<p>
-			<strong>No updates to perform!</strong>
-		</p>
-		<hr />
-	</f:else>
-</f:if>
-
-<f:if condition="{wizardsDone}">
-	<form method="post">
-		<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-		<h2>Wizards marked as done</h2>
-		<p>
-			Some wizards fully automatically check whether they should be executed, while others just set a flag in
-			the system registry if they have been executed once. This "I have been executed" flag can be reset by
-			selecting specific wizards from the list below, so the according wizards show up as possible upgrade
-			wizards again.
-		</p>
-		<table class="table table-striped">
-			<tbody>
-			<f:for each="{wizardsDone}" as="wizardDone">
-				<tr>
-					<td>
-						<input id="t3-recheck-{wizardDone.identifier}" type="checkbox" name="install[values][recheck][{wizardDone.identifier}]" value="1" />
-					</td>
-					<td>
-						{wizardDone.title}
-					</td>
-				</tr>
-			</f:for>
-			<f:for each="{rowUpdatersDone}" as="rowUpdaterDone">
-				<tr>
-					<td>
-						<input id="t3-recheck-{rowUpdaterDone.identifier}" type="checkbox" name="install[values][recheckRowUpdater][{rowUpdaterDone.identifier}]" value="1" />
-					</td>
-					<td>
-						Row updater: {rowUpdaterDone.title}
-					</td>
-				</tr>
-			</f:for>
-			</tbody>
-		</table>
-		<f:render
-			partial="Action/Common/SubmitButton"
-			arguments="{name:'recheckWizards', text:'Recheck chosen wizards'}"
-		/>
-	</form>
-</f:if>
-<hr />
-
-<h4>Hint</h4>
-<p>
-	When all updates are done you can check the database for tables and fields no longer required.
-	Perform the Database Analyzer steps until no more changes are required.
-</p>
-<a href="{i:uri.action(action: 'importantActions')}" class="btn btn-default">
-	Go to Database Analyzer
-</a>
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/PerformUpdate.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/PerformUpdate.html
deleted file mode 100644
index 7ad20fd6ff6c..000000000000
--- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/UpgradeWizard/PerformUpdate.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<p class="innerWidth">
-	<strong>{wizardData.title}</strong>
-</p>
-
-<f:if condition="{wizardData.wizardInputBroken}">
-	<f:then>
-		<a href="javascript:history.back()">
-			Go back to update configuration
-		</a>
-	</f:then>
-
-	<f:else>
-		<f:if condition="{wizardData.queries}">
-			<f:for each="{wizardData.queries}" as="query">
-				{query}
-				<br />
-			</f:for>
-		</f:if>
-	</f:else>
-</f:if>
-
-<form method="post">
-	<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-	<f:if condition="{nextUpdateIdentifier}">
-		<f:then>
-			<input type="hidden" name="install[values][identifier]" value="{nextUpdateIdentifier}"/>
-			<f:render
-				partial="Action/Common/SubmitButton"
-				arguments="{name:'getUserInput', text:'Go to the next upgrade wizard'}"
-			/>
-		</f:then>
-		<f:else>
-			<f:render
-				partial="Action/Common/SubmitButton"
-				arguments="{name:'backToWizard', text:'Go back to the upgrade wizard'}"
-			/>
-		</f:else>
-	</f:if>
-	<hr />
-</form>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Ajax/FilterManager.html b/typo3/sysext/install/Resources/Private/Templates/Action/Ajax/FilterManager.html
deleted file mode 100644
index e2a7bb5badbd..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Ajax/FilterManager.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div class="t3js-response">
-    <f:for each="{files}" as="filepath" key="headline">
-        <div class="panel-group" role="tablist" aria-multiselectable="false">
-
-            <div class="panel panel-default">
-                <div class="panel-heading" role="tab">
-                    <input type="checkbox" class="t3js-upgradeanalysis-restore pull-left" data-filepath="{filepath}"
-                           title="restore this document"/>
-                    <h3 class="panel-title">
-                            <strong>
-                                {headline}</strong>
-                    </h3>
-                </div>
-            </div>
-
-        </div>
-
-    </f:for>
-    <h2>Files Restored (will be in their original section upon next call of this page)</h2>
-    <div class="panel-group" id="upgrade_analysis_restored_files" role="tablist" aria-multiselectable="false">
-    </div>
-</div>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Ajax/RemoveIgnoredItems.html b/typo3/sysext/install/Resources/Private/Templates/Action/Ajax/RemoveIgnoredItems.html
deleted file mode 100644
index ecd7f73e1230..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Ajax/RemoveIgnoredItems.html
+++ /dev/null
@@ -1 +0,0 @@
-<f:render partial="Action/Tool/UpgradeAnalysis/PanelItem" section="Main" arguments="{issueNumber:issueNumber, fileArray:fileArray}" />
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/About.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/About.html
deleted file mode 100644
index fbedaaeefc95..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/About.html
+++ /dev/null
@@ -1,187 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<f:layout name="ToolAuthenticated" />
-
-<f:section name="Content">
-	<f:if condition="{contextService.standaloneContext}">
-		<f:then>
-			<h1>About</h1>
-		</f:then>
-		<f:else>
-			<h1>TYPO3 CMS {typo3Version} Install tool on site: {siteName}</h1>
-		</f:else>
-	</f:if>
-
-	<h3>How to configure TYPO3 CMS</h3>
-	<p>
-		Local configuration is done by overriding default values in the
-		file typo3conf/LocalConfiguration.php. The options that you
-		choose in the Install Tool will be saved in this file, such as database information
-		and values in the global array
-		TYPO3_CONF_VARS.
-		<br /><br />
-		If you wish to manually edit the file, the options in the TYPO3_CONF_VARS array
-		and how to use them for your own purposes are discussed in the base configuration file,
-		EXT:core/Configuration/DefaultConfiguration.php. This file sets up the default values,
-		then includes the LocalConfiguration.php file to override the default values.
-		<br />
-		See this page for more information about system requirements:
-		<a target="_blank" href="{i:constant(name:'TYPO3_URL_SYSTEMREQUIREMENTS')}"><i:constant name="TYPO3_URL_SYSTEMREQUIREMENTS" /></a>
-	</p>
-	<hr />
-
-
-	<h3>Using this script</h3>
-	<p>
-		These are the primary steps for you to take:
-	</p>
-
-	<hr />
-	<h4>1: Important actions</h4>
-	<p>
-		This step provides an overview of the main system information
-		(operating system, PHP information and database).
-		<br />
-		The following actions are available here:
-		<ul>
-			<li><strong>Database Analyzer</strong> - compares the database table and field definitions of the
-				current database with the specification from all loaded extensions' ext_tables.sql files.</li>
-			<li><strong>Clear all cache</strong> - works similar to the cache clearing in the backend, but
-				takes a more straightforward approach and the according backend hooks are not executed.</li>
-			<li><strong>Check for broken extensions</strong> - checks whether the local extensions' ext_tables
-				and ext_localconf files can be included without errors, meaning they can be loaded without
-				breaking the system.</li>
-			<li><strong>Core update</strong> - automatically update the TYPO3 CMS core to its latest bugfix
-				release if certain criteria are met. <strong>Note:</strong> This is not supported on Windows hosts.</li>
-			<li><strong>Change install tool password</strong></li>
-			<li><strong>Change site name</strong></li>
-			<li><strong>Change encryption key</strong></li>
-			<li><strong>Create backend administrator user</strong> - you should use this function only if there
-				are no admin users in the database, for instance if this is a blank database</li>
-		</ul>
-	</p>
-
-	<hr />
-	<h4>2: Configuration presets</h4>
-	<p>
-		The following configuration preset groups are available here:
-		<ul>
-			<li><strong>Character set conversion settings</strong> - charset conversion.</li>
-			<li><strong>Development / Production settings</strong> - context can be defined with the environment
-				variable "TYPO3_CONTEXT" which is usually set through your webserver configuration
-				(e.g. in htaccess).</li>
-			<li><strong>Image handling settings</strong> - this module detects the available image handling
-				tools and configures the system.</li>
-			<li><strong>Extbase object cache</strong> - choose between APC / Database cache backend</li>
-		</ul>
-	</p>
-
-	<hr />
-	<h4>3: All configuration</h4>
-	<p>
-		In this step you can change the configuration values of your TYPO3 CMS installation.
-	</p>
-
-	<hr />
-	<h4>4: Upgrade Wizard</h4>
-	<p>
-		If you upgrade your TYPO3 CMS installation from one version to another (e.g. 6.1 to 6.2),
-		then the Upgrade Wizards guide you through the necessary steps to upgrade your database records
-		or explicitly install extensions that ship with the latest TYPO3 CMS version.
-	</p>
-
-	<hr />
-	<h4>5: System environment</h4>
-	<p>
-		In this step your system environment is checked. If there are any settings that will prevent TYPO3 CMS from
-		running correctly, you'll get warnings and errors with a description of the problem.
-	</p>
-
-	<hr />
-	<h4>6: Folder structure</h4>
-	<p>
-		This step checks the folder structure of your TYPO3 CMS installation and fixes errors that you might have
-		with files or folders.
-	</p>
-
-	<hr />
-	<h4>7: Test setup</h4>
-	<p>
-		This gives you a set of tests for your TYPO3 CMS installation in order to test system settings:
-		<ul>
-			<li>Mail setup</li>
-			<li>True type font settings</li>
-			<li>Convert image formats to jpg</li>
-			<li>Writing gif and png</li>
-			<li>Scaling images</li>
-			<li>Combining images</li>
-			<li>GDlib</li>
-		</ul>
-	</p>
-
-	<hr />
-	<h4>8: Clean up</h4>
-	<p>
-		Here you can clean up temporary files in the typo3temp/ folder and the database tables used for
-		caching. Furthermore you can reset the preferences of all backend users.
-	</p>
-	<hr />
-
-
-	<h3>Header legend</h3>
-	<div class="alert alert-notice">
-		<h4 class="typo3-message message-notice">
-			Notice!
-		</h4>
-		<p class="messageText">
-			Indicates that something is important to be aware of.
-			<br />
-			This does <em>not</em> indicate an error.
-		</p>
-	</div>
-
-	<div class="alert alert-info">
-		<h4 class="typo3-message message-information">
-			Just information
-		</h4>
-		<p>
-			This is a simple message with some information about something.
-		</p>
-	</div>
-
-	<div class="alert alert-success">
-		<h4 class="typo3-message message-ok">
-		Check was successful
-	</h4>
-	<p class="messageText">
-		Indicates that something was checked and returned an expected result.
-	</p></div>
-
-	<div class="alert alert-warning"><h4 class="typo3-message message-warning">
-		Warning!
-	</h4>
-	<p class="messageText">
-		Indicates that something may very well cause trouble
-		and you should definitely look into it before proceeding.
-		<br />
-		This indicates a <em>potential</em> error.
-	</p></div>
-
-	<div class="alert alert-danger"><h4 class="typo3-message message-error">
-		Error!
-	</h4>
-	<p class="messageText">
-		Indicates that something is definitely wrong and that TYPO3 will most
-		likely not perform as expected if this problem is not solved.
-		<br />
-		This indicates an actual error.
-	</p></div>
-	<div class="row copyright">
-		<hr>
-		<div class="panel panel-default">
-			<div class="panel-body">
-				<f:render partial="Action/Common/Copyright" arguments="{_all}" />
-			</div>
-		</div>
-	</div>
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/AllConfiguration.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/AllConfiguration.html
deleted file mode 100644
index a42615d0f172..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/AllConfiguration.html
+++ /dev/null
@@ -1,76 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<f:layout name="ToolAuthenticated" />
-
-<f:section name="Content">
-
-	<f:if condition="{configurationValuesSaved}">
-		<f:then>
-			<h1>Saved configuration values</h1>
-
-			<f:if condition="{savedConfigurationValueMessages}">
-				<f:then>
-					<f:for each="{savedConfigurationValueMessages}" as="statusMessage">
-						<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-					</f:for>
-				</f:then>
-
-					<f:else>
-					<div class="typo3-message message-warning">
-						<div class="header-container">
-							<div class="message-header">
-								No values changed
-							</div>
-						</div>
-					</div>
-				</f:else>
-			</f:if>
-
-			<hr />
-
-			<form method="post">
-				<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-				<f:render partial="Action/Common/SubmitButton" arguments="{name:'continue', text:'Continue'}"/>
-			</form>
-		</f:then>
-
-		<f:else>
-			<div class="fixedHead">
-				<h1>Change configuration values</h1>
-
-				<p>
-					Changed values are written to <code>LocalConfiguration.php</code>. The optional file <code>AdditionalConfiguration.php</code>
-					is not controlled by the TYPO3 CMS core and may override single settings again. Administrators
-					must maintain <code>AdditionalConfiguration.php</code> on their own and should use it with care.
-				</p>
-				<div class="form-group">
-					<div class="input-group">
-						<span class="input-group-addon">Filter by:</span>
-						<input type="text" class="form-control" placeholder="search setting" id="configSearch">
-					</div>
-				</div>
-			</div>
-
-			<form method="post">
-				<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-				<div class="panel-group" id="allConfiguration" role="tablist" aria-multiselectable="true">
-				<f:for each="{data}" as="sectionData" key="sectionName">
-					<f:if condition="{sectionData}">
-						<f:render partial="Action/Tool/AllConfiguration/SubSection" arguments="{_all}" />
-					</f:if>
-				</f:for>
-				</div>
-
-				<div id="fixed-footer-handler">
-					<div id="fixed-footer">
-						<div class="footer-innerWrap">
-							<f:render partial="Action/Common/SubmitButton" arguments="{name:'write', text:'Write configuration', className:'btn-save'}"/>
-							<span class="btn btn-default t3js-all-configuration-toggle">Toggle All</span>
-						</div>
-					</div>
-				</div>
-			</form>
-		</f:else>
-	</f:if>
-
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/CleanUp.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/CleanUp.html
deleted file mode 100644
index 63f1aeac913e..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/CleanUp.html
+++ /dev/null
@@ -1,73 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<f:layout name="ToolAuthenticated" />
-
-<f:section name="Content">
-	<h1>Clean up your installation</h1>
-	<f:for each="{actionMessages}" as="statusMessage">
-		<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-	</f:for>
-
-	<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
-		<div class="panel panel-default">
-			<div class="panel-heading" role="tab" id="headingOne">
-				<h4 class="panel-title">
-					<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne" class="{f:if(condition:'{postAction} == \'deleteTypo3TempFiles\'', then:'expanded', else:'collapsed')}">
-						<span class="caret"></span>
-						Clean typo3temp/ folder
-					</a>
-				</h4>
-			</div>
-			<div id="collapseOne" class="panel-collapse collapse {f:if(condition:'{postAction} == \'deleteTypo3TempFiles\'', then:'in')}" role="tabpanel" aria-labelledby="headingOne">
-				<div class="panel-body">
-					<f:render partial="Action/Tool/CleanUp/Typo3TempFiles" arguments="{_all}" />
-				</div>
-			</div>
-		</div>
-		<div class="panel panel-default">
-			<div class="panel-heading" role="tab" id="headingTwo">
-				<h4 class="panel-title">
-					<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo" class="{f:if(condition:'{postAction} == \'clearProcessedFiles\'', then:'expanded', else:'collapsed')}">
-						<span class="caret"></span>
-						Clear processed files
-					</a>
-				</h4>
-			</div>
-			<div id="collapseTwo" class="panel-collapse collapse {f:if(condition:'{postAction} == \'clearProcessedFiles\'', then:'in')}"" role="tabpanel" aria-labelledby="headingTwo">
-				<div class="panel-body">
-					<f:render partial="Action/Tool/CleanUp/ProcessedFiles" arguments="{_all}" />
-				</div>
-			</div>
-		</div>
-		<div class="panel panel-default">
-			<div class="panel-heading" role="tab" id="headingThree">
-				<h4 class="panel-title">
-					<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree" class="{f:if(condition:'{postAction} == \'clearTables\'', then:'expanded', else:'collapsed')}">
-						<span class="caret"></span>
-						Clear tables
-					</a>
-				</h4>
-			</div>
-			<div id="collapseThree" class="panel-collapse collapse {f:if(condition:'{postAction} == \'clearTables\'', then:'in')}"" role="tabpanel" aria-labelledby="headingThree">
-				<div class="panel-body">
-					<f:render partial="Action/Tool/CleanUp/ClearTables" arguments="{_all}" />
-				</div>
-			</div>
-		</div>
-		<div class="panel panel-default">
-			<div class="panel-heading" role="tab" id="headingFour">
-				<h4 class="panel-title">
-					<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseFour" aria-expanded="false" aria-controls="collapseFour" class="{f:if(condition:'{postAction} == \'resetBackendUserUc\'', then:'expanded', else:'collapsed')}">
-						<span class="caret"></span>
-						Reset backend user preferences
-					</a>
-				</h4>
-			</div>
-			<div id="collapseFour" class="panel-collapse collapse {f:if(condition:'{postAction} == \'resetBackendUserUc\'', then:'in')}"" role="tabpanel" aria-labelledby="headingFour">
-				<div class="panel-body">
-					<f:render partial="Action/Tool/CleanUp/ResetBackendUserUc" arguments="{_all}" />
-				</div>
-			</div>
-		</div>
-	</div>
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Configuration.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Configuration.html
deleted file mode 100644
index 645bff3c8d98..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Configuration.html
+++ /dev/null
@@ -1,45 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<f:layout name="ToolAuthenticated" />
-
-<f:section name="Content">
-	<h1>Configuration presets</h1>
-
-	<f:for each="{actionMessages}" as="statusMessage">
-		<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-	</f:for>
-
-	<p>
-		The configuration module suggests best matching configuration settings
-		based on your system setup.
-	</p>
-	<p>
-		Alternatively TYPO3 can be run in a specific <a href="https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Bootstrapping/Index.html#bootstrapping-context" target="_blank">application context</a>,
-		by setting an environment variable in the web server configuration.
-		The application context can then be accessed e.g. in the AdditionalConfiguration.php file or
-		TypoScript configuration to customize settings accordingly.
-	</p>
-	<p>
-		Changed values are written to <code>LocalConfiguration.php</code>. The optional file <code>AdditionalConfiguration.php</code>
-		is not controlled by the TYPO3 CMS core and may override single settings again. Administrators
-		must maintain <code>AdditionalConfiguration.php</code> on their own and should use it with care.
-	</p>
-	<form method="post" class="form-horizontal">
-		<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-
-		<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
-			<f:for each="{features}" as="feature">
-				<f:render partial="Action/Tool/Configuration/{feature.name}" arguments="{_all}" />
-			</f:for>
-		</div>
-
-		<div id="fixed-footer-handler">
-			<div id="fixed-footer">
-				<div class="footer-innerWrap">
-					<f:render partial="Action/Common/SubmitButton" arguments="{name:'activate', text:'Activate', className:'btn-save'}"/>
-				</div>
-			</div>
-		</div>
-
-	</form>
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Environment.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Environment.html
new file mode 100644
index 000000000000..37264f08c853
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Environment.html
@@ -0,0 +1,81 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+	<div>
+		<h1>Environment</h1>
+	</div>
+
+	<f:alias map="{actions: {
+		0: {partial: 'Action/Tool/Environment/SystemInformation',
+			require: '',
+			baseClass: 't3js-system',
+			title: 'Main System Information',
+			category: 'environment',
+			description: 'Gives a short overview of your system environment.'
+		},
+		1: {partial: 'Action/Tool/Environment/EnvironmentCheck',
+			require: 'TYPO3/CMS/Install/EnvironmentCheck',
+			baseClass: 't3js-environmentCheck',
+			title: 'Environment check',
+			category: 'php environment',
+			description: 'Perform a huge number of environment checks.'
+		},
+		2: {partial: 'Action/Tool/Environment/FolderStructure',
+			require: 'TYPO3/CMS/Install/FolderStructure',
+			baseClass: 't3js-folderStructure',
+			title: 'Check Folder Structure',
+			category: 'document structure',
+			description: 'Analyzes your folder structure by checking the permissions and whether files or folders are missing.'
+		},
+		3: {partial: 'Action/Tool/Environment/PhpInfo',
+			require: '',
+			baseClass: 't3js-phpinfo',
+			title: 'PHP Info',
+			category: 'environment',
+			description: 'Outputs a large amount of information about the current state of PHP.'
+		},
+		4: {partial: 'Action/Tool/Environment/MailTest',
+			require: 'TYPO3/CMS/Install/MailTest',
+			baseClass: 't3js-mailTest',
+			title: 'Test Mail Setup',
+			category: 'environment',
+			description: 'Checks the basic mail functionality by sending a test email.'
+		},
+		5: {partial: 'Action/Tool/Environment/ImageProcessing',
+			require: 'TYPO3/CMS/Install/ImageProcessing',
+			baseClass: 't3js-imageProcessing',
+			title: 'Image Processing',
+			category: 'environment',
+			description: 'Creates test images and compare with a reference.'
+		}
+	}}">
+		<div class="gridder">
+			<f:for each="{actions}" as="card" iteration="iterator">
+				<div
+					class="gridder-list {card.baseClass}-open {f:if(condition: '{card.require}', then: 't3js-require')}"
+					{f:if(condition: '{card.require}', then: 'data-require="{card.require}"')}
+				>
+					<div class="gridder-item">
+						<h3>
+							{card.title} <span class="label label-warning {card.baseClass}-badge" style="display:none"></span>
+							<br>
+							<small class="text-muted">{card.category}</small>
+							<br>
+						</h3>
+						<p>{card.description}</p>
+					</div>
+				</div>
+				<div class="gridder-content {f:if(condition: '{card.baseClass}', then: '{card.baseClass}')}">
+					<div class="gridder-padding">
+						<div class="gridder-title clearfix">
+							<h3 class="pull-left">{card.title}</h3>
+						</div>
+						<f:render partial="{card.partial}" arguments="{_all}" />
+					</div>
+				</div>
+			</f:for>
+		</div>
+	</f:alias>
+</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/ExtensionScanner.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/ExtensionScanner.html
deleted file mode 100644
index 57ba10be106b..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/ExtensionScanner.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<f:layout name="ToolAuthenticated"/>
-
-<f:section name="Content">
-	<div style="display:none;">
-		<div id="t3js-extensionscanner-files-token">{extensionScannerFilesToken}</div>
-		<div id="t3js-extensionscanner-scan-file-token">{extensionScannerScanFileToken}</div>
-		<div id="t3js-extensionscanner-mark-fully-scanned-rest-files-token">{extensionScannerMarkFullyScannedRestFilesToken}</div>
-		<div id="t3js-extensionscanner-file-hit-template">
-			<div class="panel panel-flat t3js-extensionscanner-hit-panel risk-medium">
-				<div class="panel-heading">
-					<h3 class="panel-title">
-						<a href="#collapse" class="collapsed t3js-extensionscanner-hit-file-panel-head" data-toggle="collapse">
-							<span class="caret"></span>
-							<span class="pull-right badges"></span>
-							<span class="t3js-extensionscanner-hit-filename file">aFile</span>
-							<span class="t3js-extensionscanner-hit-message message">aMessage</span>
-						</a>
-					</h3>
-				</div>
-				<div id="collapse" class="panel-collapse collapse t3js-extensionscanner-hit-file-panel-body">
-					<div class="panel-body">
-						<pre><strong class="t3js-extensionscanner-hit-file-line"></strong><span class="t3js-extensionscanner-hit-file-lineContent"></span></pre>
-						<div class="panel-group-flat t3js-extensionscanner-hit-file-rest-container"></div>
-					</div>
-				</div>
-			</div>
-		</div>
-		<div id="t3js-extensionscanner-file-hit-rest-template">
-			<div class="panel panel-flat t3js-extensionscanner-hit-rest-panel risk-medium">
-				<div class="panel-heading">
-					<h3 class="panel-title">
-						<a href="#collapse-rest"
-							class="collapsed t3js-extensionscanner-hit-rest-panel-head"
-							 data-toggle="collapse"
-						>
-							<span class="badge pull-right">aBadge</span>
-							<span class="caret"></span>
-							<strong class="t3js-extensionscanner-hit-rest-headline">restFileHeadline</strong>
-						</a>
-					</h3>
-				</div>
-				<div id="collapse-rest" class="panel-collapse collapse t3js-extensionscanner-hit-rest-panel-body">
-					<pre class="t3js-extensionscanner-hit-rest-body">restFileContent</pre>
-				</div>
-			</div>
-		</div>
-	</div>
-
-	<h1>Extension scanner</h1>
-
-	<p>
-		This module scans extensions for usage of deprecated and removed TYPO3 API calls.
-		The module can be a great help for extension developers and site maintainers when
-		upgrading to new core versions. However, the detection approach - based on static
-		code analysis - is limited by concept: false positives/negatives are impossible to avoid.
-		Further details can be found at
-		<a style="text-decoration: underline;" target="_blank" rel="noopener" href="https://docs.typo3.org/typo3cms/CoreApiReference/ExtensionScanner/Index.html">
-			the official docs.
-		</a>
-	</p>
-
-	<div class="progress t3js-progress-all-extension">
-		<div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0;">
-			<span class="text-nowrap"></span>
-		</div>
-	</div>
-
-	<button class="btn btn-default t3js-extensionscanner-scan-all" type="submit">
-		Scan all
-	</button>
-
-	<h2>Extensions</h2>
-
-	<div class="panel-group panel-group-flat panel-group-scanner-extensions">
-		<f:for each="{extensionsInTypo3conf}" as="extensionInTypo3conf" iteration="iterator">
-			<div
-				class="panel panel-flat t3js-extensionscanner-extension t3js-extensionscanner-extension-{extensionInTypo3conf.filename}"
-				data-extension="{extensionInTypo3conf.filename}">
-				<div class="panel-progress">
-					<div class="panel-progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0;"><span class="sr-only"></span></div>
-				</div>
-				<div class="panel-heading alert-notice">
-					<h2 class="panel-title">
-						<a href="#extension-{iterator.index}" class="collapsed" data-toggle="collapse">
-							<span class="caret"></span>
-							Extension: <strong>{extensionInTypo3conf.filename}</strong>
-							<span class="pull-right t3js-extensionscanner-number-of-files"></span>
-						</a>
-					</h2>
-				</div>
-				<div class="panel-collapse collapse" id="extension-{iterator.index}">
-					<div class="panel-body hide t3js-extensionscanner-extension-body"></div>
-					<div class="panel-footer">
-						<div>Effective lines of code: <span class="t3js-extensionscanner-extension-body-loc">0</span></div>
-						<div>Files ignored by scanner: <span class="t3js-extensionscanner-extension-body-ignored-files">0</span></div>
-						<div>Code lines ignored by scanner: <span class="t3js-extensionscanner-extension-body-ignored-lines">0</span></div>
-						<button class="btn btn-default t3js-extensionscanner-scan-single" data-extension="{extensionInTypo3conf.filename}" type="submit">
-							Scanning...
-						</button>
-					</div>
-				</div>
-			</div>
-		</f:for>
-	</div>
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/FolderStructure.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/FolderStructure.html
deleted file mode 100644
index d971c67b3690..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/FolderStructure.html
+++ /dev/null
@@ -1,41 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<f:layout name="ToolAuthenticated" />
-
-<f:section name="Content">
-	<h1>Folder Structure</h1>
-	<p>Root Directory: <strong><i:constant name="PATH_site" /></strong></p>
-
-	<f:if condition="{fixedStatus}">
-		<hr />
-		<h3>Fix action results:</h3>
-		<f:for each="{fixedStatus}" as="statusMessage">
-			<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-		</f:for>
-	</f:if>
-
-	<f:if condition="{errorStatus}">
-		<hr />
-		<h3>These files or folders have errors and may be fixed automatically:</h3>
-		<f:for each="{errorStatus}" as="statusMessage">
-			<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-		</f:for>
-		<form method="post">
-			<f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
-			<f:render partial="Action/Common/SubmitButton" arguments="{name:'fix', text:'Try to fix file and folder permissions'}"/>
-		</form>
-	</f:if>
-
-	<hr />
-	<h3>Default File and Directory permissions</h3>
-	<f:render partial="Action/Common/StatusMessage" arguments="{message: filePermissionStatus}" />
-	<f:render partial="Action/Common/StatusMessage" arguments="{message: directoryPermissionStatus}" />
-
-	<f:if condition="{okStatus}">
-		<hr />
-		<h3>These structures don't need to be fixed:</h3>
-		<f:for each="{okStatus}" as="statusMessage">
-			<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-		</f:for>
-	</f:if>
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/ImportantActions.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/ImportantActions.html
deleted file mode 100644
index a97e8f9c1972..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/ImportantActions.html
+++ /dev/null
@@ -1,52 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<f:layout name="ToolAuthenticated" />
-
-<f:section name="Content">
-	<h1>Important actions</h1>
-
-	<f:for each="{actionMessages}" as="statusMessage">
-		<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-	</f:for>
-
-	<f:render partial="Action/Tool/ImportantActions/SystemInformation" arguments="{_all}" />
-	<hr />
-
-	<f:if condition="{databaseAnalyzerSuggestion}">
-		<f:then>
-			<f:render partial="Action/Tool/ImportantActions/DatabaseAnalyzerData" arguments="{_all}"/>
-		</f:then>
-		<f:else>
-			<f:render partial="Action/Tool/ImportantActions/DatabaseAnalyzerButton" arguments="{_all}"/>
-		</f:else>
-	</f:if>
-	<hr />
-
-	<f:render partial="Action/Tool/ImportantActions/ClearAllCache" arguments="{_all}"/>
-	<hr />
-
-	<f:if condition="{composerMode}">
-		<f:else>
-			<f:render partial="Action/Tool/ImportantActions/DumpAutoload" arguments="{_all}"/>
-			<hr />
-		</f:else>
-	</f:if>
-
-	<f:render partial="Action/Tool/ImportantActions/ExtensionCompatibilityTester" arguments="{_all}"/>
-	<hr />
-
-	<f:render partial="Action/Tool/ImportantActions/TcaMigrationsCheck" arguments="{_all}"/>
-	<hr />
-
-	<f:render partial="Action/Tool/ImportantActions/TcaExtTablesCheck" arguments="{_all}"/>
-	<hr />
-
-	<f:render partial="Action/Tool/ImportantActions/CoreUpdateButton" arguments="{_all}"/>
-	<hr />
-
-	<f:render partial="Action/Tool/ImportantActions/NewInstallToolPassword" arguments="{_all}"/>
-	<hr />
-
-	<f:render partial="Action/Tool/ImportantActions/CreateAdministrator" arguments="{_all}"/>
-
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/LoadExtensions.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/LoadExtensions.html
deleted file mode 100644
index 2aba342ce634..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/LoadExtensions.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<f:layout name="ToolAuthenticated" />
-
-<f:section name="Content">
-	<h1>Load extension configuration</h1>
-
-	<f:for each="{actionMessages}" as="statusMessage">
-		<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-	</f:for>
-
-	<p>
-		The system detected a fatal error during script execution and redirected to this module.
-		Your loaded extensions are now checked for possible problems. After incompatible extensions
-		are unloaded, you can restart the initial action to proceed your request.
-	</p>
-
-	<f:render partial="Action/Tool/ImportantActions/LastError" arguments="{lastError: lastError}"/>
-
-	<hr />
-	<f:render partial="Action/Tool/ImportantActions/ExtensionCompatibilityTester" arguments="{_all}"/>
-	<script type="text/javascript">
-		$(function() {
-			var $container = $('.t3js-checkExtensions');
-			$('button', $container).hide();
-			$('.t3js-message', $container).hide();
-			$('.alert-loading', $container).show();
-			TYPO3.Install.ExtensionChecker.checkExtensionsCompatibility(true);
-		});
-	</script>
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Maintenance.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Maintenance.html
new file mode 100644
index 000000000000..5d9cc8681688
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Maintenance.html
@@ -0,0 +1,88 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+	<div>
+		<h1>Maintenance</h1>
+	</div>
+
+	<f:alias map="{actions: {
+		0: {partial: 'Action/Tool/Maintenance/ClearAllCache',
+			require: 'TYPO3/CMS/Install/Cache',
+			baseClass: 't3js-clearAllCache',
+			title: 'Clear all cache',
+			category: 'Caching',
+			description: 'Clears all cache. Including Frontend, backend and language caches.'
+		},
+		1: {partial: 'Action/Tool/Maintenance/ClearTypo3tempFiles',
+			require: 'TYPO3/CMS/Install/ClearTypo3tempFiles',
+			baseClass: 't3js-clearTypo3temp',
+			title: 'Clean typo3temp/assets/',
+			category: 'Caching',
+			description: 'Clears temporary files in typo3temp/assets/ folder, including processed and cached images.'
+		},
+		2: {partial: 'Action/Tool/Maintenance/DumpAutoload',
+			require: 'TYPO3/CMS/Install/DumpAutoload',
+			baseClass: 't3js-dumpAutoload',
+			title: 'Dump Autoload Information',
+			category: 'Caching',
+			description: 'This (re-)dumps autoload information for all active third party extensions.'
+		},
+		3: {partial: 'Action/Tool/Maintenance/DatabaseAnalyzer',
+			require: 'TYPO3/CMS/Install/DatabaseAnalyzer',
+			baseClass: 't3js-databaseAnalyzer',
+			title: 'Database analyzer',
+			category: 'Database',
+			description: 'Verify and update database status.'
+		},
+		4: {partial: 'Action/Tool/Maintenance/ClearTables',
+			require: 'TYPO3/CMS/Install/ClearTable',
+			baseClass: 't3js-clearTable',
+			title: 'Clear Tables',
+			category: 'Database',
+			description: 'Clears semi-temporary data from database tables.'
+		},
+		5: {partial: 'Action/Tool/Maintenance/CreateAdmin',
+			require: 'TYPO3/CMS/Install/CreateAdmin',
+			baseClass: 't3js-createAdmin',
+			title: 'Create Admin',
+			category: 'Backend Users',
+			description: 'Creates a backend administrator user.'
+		},
+		6: {partial: 'Action/Tool/Maintenance/ResetBackendUserUc',
+			require: 'TYPO3/CMS/Install/ResetBackendUserUc',
+			baseClass: 't3js-resetBackendUserUc',
+			title: 'Reset User Preferences',
+			category: 'Backend Users',
+			description: 'Reset backend user preferences to defaults.'
+		}
+	}}">
+		<div class="gridder">
+			<f:for each="{actions}" as="card" iteration="iterator">
+				<div
+					class="gridder-list {card.baseClass}-open {f:if(condition: '{card.require}', then: 't3js-require')}"
+					{f:if(condition: '{card.require}', then: 'data-require="{card.require}"')}
+				>
+					<div class="gridder-item">
+						<h3>
+							{card.title} <span class="label label-warning {card.baseClass}-badge" style="display:none"></span>
+							<br>
+							<small class="text-muted">{card.category}</small>
+							<br>
+						</h3>
+						<p>{card.description}</p>
+					</div>
+				</div>
+				<div class="gridder-content {f:if(condition: '{card.baseClass}', then: '{card.baseClass}')}">
+					<div class="gridder-padding">
+						<div class="gridder-title clearfix">
+							<h3 class="pull-left">{card.title}</h3>
+						</div>
+						<f:render partial="{card.partial}" arguments="{_all}" />
+					</div>
+				</div>
+			</f:for>
+		</div>
+	</f:alias>
+</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Settings.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Settings.html
new file mode 100644
index 000000000000..55750a39e2fd
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Settings.html
@@ -0,0 +1,63 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+	<div>
+		<h1>Settings</h1>
+	</div>
+
+	<f:alias map="{actions: {
+		0: {partial: 'Action/Tool/Settings/ChangeInstallToolPassword',
+			require: 'TYPO3/CMS/Install/ChangeInstallToolPassword',
+			baseClass: 't3js-changeInstallToolPassword',
+			title: 'Change install tool password',
+			category: 'Access',
+			description: 'Set a new install tool password.'
+		},
+		1: {partial: 'Action/Tool/Settings/LocalConfiguration',
+			require: 'TYPO3/CMS/Install/LocalConfiguration',
+			baseClass: 't3js-localConfiguration',
+			title: 'Configure Global Settings',
+			category: 'LocalConfiguration',
+			description: 'Modify LocalConfiguration.php settings.'
+		},
+		2: {partial: 'Action/Tool/Settings/Presets',
+			require: 'TYPO3/CMS/Install/Presets',
+			baseClass: 't3js-presets',
+			title: 'Configure Presets',
+			category: 'LocalConfiguration',
+			description: 'Detect and select default LocalConfiguration.php settings.'
+		}
+	}}">
+		<div class="gridder">
+			<f:for each="{actions}" as="card" iteration="iterator">
+				<div
+					class="gridder-list {card.baseClass}-open {f:if(condition: '{card.require}', then: 't3js-require')}"
+					{f:if(condition: '{card.require}', then: 'data-require="{card.require}"')}
+				>
+					<div class="gridder-item">
+						<h3>
+							{card.title} <span class="label label-warning {card.baseClass}-badge" style="display:none"></span>
+							<br>
+							<small class="text-muted">{card.category}</small>
+							<br>
+						</h3>
+						<p>{card.description}</p>
+					</div>
+				</div>
+				<div class="gridder-content {f:if(condition: '{card.baseClass}', then: '{card.baseClass}')}">
+					<div class="gridder-padding">
+						<div class="gridder-title clearfix">
+							<h3 class="pull-left">{card.title}</h3>
+						</div>
+						<f:render partial="{card.partial}" arguments="{_all}" />
+					</div>
+				</div>
+			</f:for>
+		</div>
+	</f:alias>
+</f:section>
+
+
+
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/SystemEnvironment.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/SystemEnvironment.html
deleted file mode 100644
index 666f88e9e88a..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/SystemEnvironment.html
+++ /dev/null
@@ -1,25 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<f:layout name="ToolAuthenticated" />
-
-<f:section name="Content">
-	<h1>System environment check</h1>
-
-	<f:for each="{statusObjectsBySeverity}" as="statusMessages">
-		<f:for each="{statusMessages}" as="statusMessage">
-			<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-		</f:for>
-	</f:for>
-
-	<a class="btn btn-default collapsed" role="button" data-toggle="collapse" href="#phpinfo" aria-expanded="false">
-		<span class="caret"></span>
-		Show PHP Info
-	</a>
-	<div class="collapse" id="phpinfo">
-		<div class="panel panel-default">
-			<div class="panel-body">
-				<i:phpInfo />
-			</div>
-		</div>
-	</div>
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/TestSetup.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/TestSetup.html
deleted file mode 100644
index b30be40a7854..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/TestSetup.html
+++ /dev/null
@@ -1,117 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<f:layout name="ToolAuthenticated" />
-
-<f:section name="Content">
-	<h1>Test system settings</h1>
-	<f:for each="{actionMessages}" as="statusMessage">
-		<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-	</f:for>
-	<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
-		<div class="panel panel-default">
-			<div class="panel-heading" role="tab" id="headingOne">
-				<h4 class="panel-title">
-					<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne" class="{f:if(condition:'{postAction} == \'testMail\'', then:'expanded', else:'collapsed')}">
-						<span class="caret"></span>
-						Mail setup
-					</a>
-				</h4>
-			</div>
-			<div id="collapseOne" class="panel-collapse collapse {f:if(condition:'{postAction} == \'testMail\'', then:'in')}" role="tabpanel" aria-labelledby="headingOne">
-				<div class="panel-body">
-					<f:render partial="Action/Tool/TestSetup/Mail" arguments="{_all}" />
-				</div>
-			</div>
-		</div>
-		<div class="panel panel-default">
-			<div class="panel-heading" role="tab" id="headingTwo">
-				<h4 class="panel-title">
-					<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="true" aria-controls="collapseTwo" class="{f:if(condition:'{trueTypeFontTested}', then:'expanded', else:'collapsed')}">
-						<span class="caret"></span>
-						True type font settings
-					</a>
-				</h4>
-			</div>
-			<div id="collapseTwo" class="panel-collapse collapse {f:if(condition:'{trueTypeFontTested}', then:'in')}" role="tabpanel" aria-labelledby="headingTwo">
-				<div class="panel-body">
-					<f:render partial="Action/Tool/TestSetup/TrueTypeFont" arguments="{_all}" />
-				</div>
-			</div>
-		</div>
-		<div class="panel panel-default">
-			<div class="panel-heading" role="tab" id="headingThree">
-				<h4 class="panel-title">
-					<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree" aria-expanded="true" aria-controls="collapseThree" class="{f:if(condition:'{convertImageFormatsToJpgTested}', then:'expanded', else:'collapsed')}">
-						<span class="caret"></span>
-						Convert image formats to jpg
-					</a>
-				</h4>
-			</div>
-			<div id="collapseThree" class="panel-collapse collapse {f:if(condition:'{convertImageFormatsToJpgTested}', then:'in')}" role="tabpanel" aria-labelledby="headingThree">
-				<div class="panel-body">
-					<f:render partial="Action/Tool/TestSetup/ConvertImageFormatsToJpg" arguments="{_all}" />
-				</div>
-			</div>
-		</div>
-		<div class="panel panel-default">
-			<div class="panel-heading" role="tab" id="headingFour">
-				<h4 class="panel-title">
-					<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseFour" aria-expanded="true" aria-controls="collapseFour" class="{f:if(condition:'{writeGifAndPngTested}', then:'expanded', else:'collapsed')}">
-						<span class="caret"></span>
-						Writing gif and png
-					</a>
-				</h4>
-			</div>
-			<div id="collapseFour" class="panel-collapse collapse {f:if(condition:'{writeGifAndPngTested}', then:'in')}" role="tabpanel" aria-labelledby="headingFour">
-				<div class="panel-body">
-					<f:render partial="Action/Tool/TestSetup/WriteGifAndPng" arguments="{_all}" />
-				</div>
-			</div>
-		</div>
-		<div class="panel panel-default">
-			<div class="panel-heading" role="tab" id="headingFive">
-				<h4 class="panel-title">
-					<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseFive" aria-expanded="true" aria-controls="collapseFive" class="{f:if(condition:'{scalingImagesTested}', then:'expanded', else:'collapsed')}">
-						<span class="caret"></span>
-						Scaling images
-					</a>
-				</h4>
-			</div>
-			<div id="collapseFive" class="panel-collapse collapse {f:if(condition:'{scalingImagesTested}', then:'in')}" role="tabpanel" aria-labelledby="headingFive">
-				<div class="panel-body">
-					<f:render partial="Action/Tool/TestSetup/ScalingImages" arguments="{_all}" />
-				</div>
-			</div>
-		</div>
-		<div class="panel panel-default">
-			<div class="panel-heading" role="tab" id="headingSix">
-				<h4 class="panel-title">
-					<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseSix" aria-expanded="true" aria-controls="collapseSix" class="{f:if(condition:'{combiningImagesTested}', then:'expanded', else:'collapsed')}">
-						<span class="caret"></span>
-						Combining images
-					</a>
-				</h4>
-			</div>
-			<div id="collapseSix" class="panel-collapse collapse {f:if(condition:'{combiningImagesTested}', then:'in')}" role="tabpanel" aria-labelledby="headingSix">
-				<div class="panel-body">
-					<f:render partial="Action/Tool/TestSetup/CombiningImages" arguments="{_all}" />
-				</div>
-			</div>
-		</div>
-		<div class="panel panel-default">
-			<div class="panel-heading" role="tab" id="headingSeven">
-				<h4 class="panel-title">
-					<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseSeven" aria-expanded="true" aria-controls="collapseSeven" class="{f:if(condition:'{gdlibTested}', then:'expanded', else:'collapsed')}">
-						<span class="caret"></span>
-						GDlib
-					</a>
-				</h4>
-			</div>
-			<div id="collapseSeven" class="panel-collapse collapse {f:if(condition:'{gdlibTested}', then:'in')}" role="tabpanel" aria-labelledby="headingSeven">
-				<div class="panel-body">
-					<f:render partial="Action/Tool/TestSetup/Gdlib" arguments="{_all}" />
-				</div>
-			</div>
-		</div>
-	</div>
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Upgrade.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Upgrade.html
new file mode 100644
index 000000000000..4b4279c99d78
--- /dev/null
+++ b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/Upgrade.html
@@ -0,0 +1,88 @@
+{namespace i=TYPO3\CMS\Install\ViewHelpers}
+
+<f:layout name="ToolAuthenticated" />
+
+<f:section name="Content">
+	<div>
+		<h1>Upgrade</h1>
+	</div>
+
+	<f:alias map="{actions: {
+		0: {partial: 'Action/Tool/Upgrade/CoreUpdate',
+			require: 'TYPO3/CMS/Install/CoreUpdate',
+			baseClass: 't3js-coreUpdate',
+			title: 'Update Core',
+			category: 'upgrade',
+			description: 'One click core updater.'
+		},
+		1: {partial: 'Action/Tool/Upgrade/UpgradeWizards',
+			require: 'TYPO3/CMS/Install/UpgradeWizards',
+			baseClass: 't3js-upgradeWizards',
+			title: 'Upgrade Wizard',
+			category: 'upgrade',
+			description: 'Execute upgrade wizards after core upgrades.'
+		},
+		2: {partial: 'Action/Tool/Upgrade/UpgradeDocs',
+			require: 'TYPO3/CMS/Install/UpgradeDocs',
+			baseClass: 't3js-upgradeDocs',
+			title: 'Upgrade Documentation',
+			category: 'upgrade',
+			description: 'Show documentation files describing important changes.'
+		},
+		3: {partial: 'Action/Tool/Upgrade/TcaExtTablesCheck',
+			require: 'TYPO3/CMS/Install/TcaExtTablesCheck',
+			baseClass: 't3js-tcaExtTablesCheck',
+			title: 'Check TCA in ext_tables.php',
+			category: 'tca',
+			description: 'Test if extensions still change TCA in ext_tables.php files'
+		},
+		4: {partial: 'Action/Tool/Upgrade/CheckForBrokenExtensions',
+			require: 'TYPO3/CMS/Install/CheckForBrokenExtensions',
+			baseClass: 't3js-checkForBrokenExtensions',
+			title: 'Check for broken extensions',
+			category: 'extension',
+			description: 'Check if loaded extensions main files can be included without errors.'
+		},
+		5: {partial: 'Action/Tool/Upgrade/TcaMigrationsCheck',
+			require: 'TYPO3/CMS/Install/TcaMigrationsCheck',
+			baseClass: 't3js-tcaMigrationsCheck',
+			title: 'Check TCA migrations',
+			category: 'tca',
+			description: 'Check for needed TCA migrations.'
+		},
+		6: {partial: 'Action/Tool/Upgrade/ExtensionScanner',
+			require: 'TYPO3/CMS/Install/ExtensionScanner',
+			baseClass: 't3js-extensionScanner',
+			title: 'Extension scanner',
+			category: 'extension',
+			description: 'Scan extensions for usage of deprecated and breaking core API.'
+		}
+	}}">
+		<div class="gridder">
+			<f:for each="{actions}" as="card" iteration="iterator">
+				<div
+					class="gridder-list {card.baseClass}-open {f:if(condition: '{card.require}', then: 't3js-require')}"
+					{f:if(condition: '{card.require}', then: 'data-require="{card.require}"')}
+				>
+					<div class="gridder-item">
+						<h3>
+							{card.title} <span class="label label-warning {card.baseClass}-badge" style="display:none"></span>
+							<br>
+							<small class="text-muted">{card.category}</small>
+							<br>
+						</h3>
+						<p>{card.description}</p>
+					</div>
+				</div>
+				<div class="gridder-content {f:if(condition: '{card.baseClass}', then: '{card.baseClass}')}">
+					<div class="gridder-padding">
+						<div class="gridder-title clearfix">
+							<h3 class="pull-left">{card.title}</h3>
+						</div>
+						<f:render partial="{card.partial}" arguments="{_all}" />
+					</div>
+				</div>
+			</f:for>
+		</div>
+	</f:alias>
+</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpgradeAnalysis.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpgradeAnalysis.html
deleted file mode 100644
index d549fece6438..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpgradeAnalysis.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<f:layout name="ToolAuthenticated"/>
-
-<f:section name="Content">
-	<h1>Upgrade Analysis</h1>
-	<div class="row">
-		<div class="col-md-12">
-			<div class="form-group">
-				<div class="input-group">
-					<span class="input-group-addon">Search:</span>
-					<input type="text" class="form-control t3js-fulltext-search" placeholder="search setting">
-				</div>
-			</div>
-		</div>
-	</div>
-	<div class="row">
-		<div class="col-md-12">
-			<div class="form-group">
-				<div class="input-group">
-					<span class="input-group-addon">Filter by:</span>
-					<select class="chosen-select t3js-chosen-select" data-placeholder="" style="width:100%;" multiple tabindex="" id="tagsort_tags_container">
-
-					</select>
-				</div>
-			</div>
-		</div>
-	</div>
-
-	<div class="t3js-filterManager"></div>
-	<div id="upgradeAnalysis_output">
-		<f:render partial="Action/Tool/UpgradeAnalysis/ListDocumentation" section="Main" arguments="{_all}"/>
-	</div>
-	<span id="saveIgnoredItemsToken" style="display:none;">{saveIgnoredItemsToken}</span>
-	<span id="removeIgnoredItemsToken" style="display:none;">{removeIgnoredItemsToken}</span>
-</f:section>
diff --git a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpgradeWizard.html b/typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpgradeWizard.html
deleted file mode 100644
index 0c9f02e08d1c..000000000000
--- a/typo3/sysext/install/Resources/Private/Templates/Action/Tool/UpgradeWizard.html
+++ /dev/null
@@ -1,24 +0,0 @@
-{namespace i=TYPO3\CMS\Install\ViewHelpers}
-
-<f:layout name="ToolAuthenticated" />
-
-<f:section name="Content">
-	<h1>Upgrade Wizard</h1>
-
-	<f:for each="{actionMessages}" as="statusMessage">
-		<f:render partial="Action/Common/StatusMessage" arguments="{message: statusMessage}" />
-	</f:for>
-
-	<f:if condition="{updateAction} == 'listUpdates'">
-		<f:render partial="Action/Tool/UpgradeWizard/ListUpdates" arguments="{_all}" />
-	</f:if>
-
-	<f:if condition="{updateAction} == 'getUserInput'">
-		<f:render partial="Action/Tool/UpgradeWizard/GetUserInput" arguments="{_all}" />
-	</f:if>
-
-	<f:if condition="{updateAction} == 'performUpdate'">
-		<f:render partial="Action/Tool/UpgradeWizard/PerformUpdate" arguments="{_all}" />
-	</f:if>
-
-</f:section>
diff --git a/typo3/sysext/install/Resources/Public/Css/install.css b/typo3/sysext/install/Resources/Public/Css/install.css
index 3239831e0d10..78db97d03c01 100644
--- a/typo3/sysext/install/Resources/Public/Css/install.css
+++ b/typo3/sysext/install/Resources/Public/Css/install.css
@@ -10,4 +10,4 @@
  * 
  * The TYPO3 project - inspiring people to share!
  */
-@charset "UTF-8";hr,img{border:0}.fa-ul>li,sub,sup{position:relative}.fa-fw,.fa-li{text-align:center}.img-responsive,.img-thumbnail,.table,label{max-width:100%}.btn,.modulemenu .modulemenu-group-header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}.fa,.fa-stack{display:inline-block}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.open>.btn-danger.dropdown-toggle,.open>.btn-default.dropdown-toggle,.open>.btn-info.dropdown-toggle,.open>.btn-success.dropdown-toggle,.open>.btn-warning.dropdown-toggle{background-image:none}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}td,th{padding:0}@font-face{font-family:FontAwesome;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?v=4.7.0);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff2?v=4.7.0) format("woff2"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff?v=4.7.0) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.ttf?v=4.7.0) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-stack,img{vertical-align:middle}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.svg#Share-BoldRegular) format("svg");font-weight:700;font-style:normal}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.svg#Share-ItalicRegular) format("svg");font-weight:400;font-style:italic}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.svg#Share-Regular) format("svg");font-weight:400;font-style:normal}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.svg#Share-BoldItalicRegular) format("svg");font-weight:700;font-style:italic}*,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;line-height:1.5;color:#000;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{background-color:transparent;color:#212424;text-decoration:none}a:focus,a:hover{color:#000;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}figure{margin:0}.img-responsive{display:block;height:auto}.img-rounded{border-radius:2px}.img-thumbnail{padding:4px;line-height:1.5;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;height:auto}.img-circle{border-radius:50%}hr{margin-top:18px;margin-bottom:18px;border-top:1px solid #7a7a7a}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#737373}.h1,.h2,.h3,h1,h2,h3{margin-top:18px;margin-bottom:9px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:9px;margin-bottom:9px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:27px}.h2,h2{font-size:19px}.h3,h3{font-size:17px}.h4,h4{font-size:15px}.h5,h5{font-size:12px}.h6,h6{font-size:11px}p{margin:0 0 9px}.lead{margin-bottom:18px;font-size:13px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}@media (min-width:768px){.lead{font-size:18px}}.small,small{font-size:91%}.mark,mark{background-color:#fbefdd;padding:.2em}.list-inline,.list-unstyled,.modulemenu .modulemenu-group-container{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#737373}.text-primary{color:#0078e6}a.text-primary:focus,a.text-primary:hover{color:#005db3}.text-success{color:#79a548}a.text-success:focus,a.text-success:hover{color:#5f8139}.text-info{color:#6daae0}a.text-info:focus,a.text-info:hover{color:#4392d7}.text-warning{color:#e8a33d}a.text-warning:focus,a.text-warning:hover{color:#d88b1a}.text-danger{color:#c83c3c}a.text-danger:focus,a.text-danger:hover{color:#a32e2e}.bg-primary{color:#fff;background-color:#0078e6}a.bg-primary:focus,a.bg-primary:hover{background-color:#005db3}.bg-success{background-color:#d1e2bd}a.bg-success:focus,a.bg-success:hover{background-color:#b8d39a}.bg-info{background-color:#ebf3fb}a.bg-info:focus,a.bg-info:hover{background-color:#c1dbf2}.bg-warning{background-color:#fbefdd}a.bg-warning:focus,a.bg-warning:hover{background-color:#f6d9af}.bg-danger{background-color:#efc7c7}a.bg-danger:focus,a.bg-danger:hover{background-color:#e49f9f}.page-header{padding-bottom:8px;margin:36px 0 18px;border-bottom:1px solid #f5f5f5}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:18px}ol,ul{margin-bottom:9px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd,dt{line-height:1.5}dd{margin-left:0}.dl-horizontal dd:after{content:"";display:table;clear:both}@media (min-width:992px){.dl-horizontal dt{float:left;width:70px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:90px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #d7d7d7}.initialism{font-size:90%}blockquote{padding:9px 18px;margin:0 0 18px;font-size:15px;border-left:5px solid #f5f5f5}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.5;color:#d7d7d7}legend,pre{color:#5a5a5a}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #f5f5f5;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%;border-radius:2px}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{font-style:normal;line-height:1.5}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4}kbd{color:#fff;background-color:#333;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{display:block;padding:8.5px;margin:0 0 9px;font-size:11px;line-height:1.5;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:2px}.container-fluid:after,.container:after,.row:after{display:table;content:"";clear:both}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{max-height:340px;overflow-y:scroll}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-1{width:8.33333333%}.col-xs-2{width:16.66666667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333%}.col-xs-5{width:41.66666667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333333%}.col-xs-8{width:66.66666667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333%}.col-xs-11{width:91.66666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333333%}.col-xs-push-2{left:16.66666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333333%}.col-xs-push-5{left:41.66666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333333%}.col-xs-push-8{left:66.66666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333333%}.col-xs-push-11{left:91.66666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-12{margin-left:100%}}table{border-collapse:collapse;border-spacing:0;background-color:#fafafa}caption{padding-top:6px;padding-bottom:6px;color:#737373}.table{width:100%;margin-bottom:18px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:6px;line-height:1.5;vertical-align:top;border-top:1px solid #ccc}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ccc}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ccc}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:6px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ccc}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f7f7f7}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#ededed}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.dropdown-menu{float:left}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e1e0e0}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#d1e2bd}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#c4dbab}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#ebf3fb}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#d6e7f6}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fbefdd}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#f8e4c6}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#efc7c7}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#eab3b3}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:13.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ccc}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.carousel-inner,.collapsing,.dropdown-menu .divider,.embed-responsive,.modal,.modal-open,.nav .nav-divider,.progress,html{overflow:hidden}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{display:block;width:100%;margin-bottom:18px;font-size:18px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:12px;line-height:1.5;color:#333;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:32px;padding:6px;background-color:#fefefe;border:1px solid #bbb;border-radius:2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#aaa;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(170,170,170,.6)}.form-control::-moz-placeholder{color:#d7d7d7;opacity:1}.form-control:-ms-input-placeholder{color:#d7d7d7}.form-control::-webkit-input-placeholder{color:#d7d7d7}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#79a548}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#f5f5f5;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:32px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:26px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:41.2px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:18px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:30px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:26px;padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:26px;line-height:26px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:26px;padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.form-group-sm select.form-control{height:26px;line-height:26px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:26px;min-height:29px;padding:5px 4px;font-size:11px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:41.2px;padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:41.2px;line-height:41.2px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:41.2px;padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.form-group-lg select.form-control{height:41.2px;line-height:41.2px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:41.2px;min-height:33px;padding:13px 12px;font-size:15px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:32px;height:32px;line-height:32px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:41.2px;height:41.2px;line-height:41.2px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:26px;height:26px;line-height:26px}.has-success .form-control{border-color:#79a548;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#5f8139;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #abcb88}.has-success .input-group-addon{color:#79a548;border-color:#79a548;background-color:#d1e2bd}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#e8a33d}.has-warning .form-control{border-color:#e8a33d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#d88b1a;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f3ce98}.has-warning .input-group-addon{color:#e8a33d;border-color:#e8a33d;background-color:#fbefdd}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#c83c3c}.has-error .form-control{border-color:#c83c3c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#a32e2e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #de8c8c}.has-error .input-group-addon{color:#c83c3c;border-color:#c83c3c;background-color:#efc7c7}.has-feedback label~.form-control-feedback{top:23px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#404040}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:25px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after{content:"";display:table;clear:both}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:13px;font-size:15px}.form-horizontal .form-group-sm .control-label{padding-top:5px;font-size:11px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px;font-size:12px;line-height:1.5;border-radius:2px;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#eee;border-color:#bbb}.btn-default.focus,.btn-default:focus{color:#333;background-color:#d5d4d4;border-color:#7b7b7b}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{color:#333;background-color:#d5d4d4;border-color:#9c9c9c}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#333;background-color:#c3c3c3;border-color:#7b7b7b}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#eee;border-color:#bbb}.btn-default .badge{color:#eee;background-color:#333}.btn-primary{color:#fff;background-color:#0078e6;border-color:#006bcd}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#005db3;border-color:#00284d}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#005db3;border-color:#004b8f}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#004b8f;border-color:#00284d}.btn-primary.active,.btn-primary:active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#0078e6;border-color:#006bcd}.btn-primary .badge{color:#0078e6;background-color:#fff}.btn-success{color:#fff;background-color:#79a548;border-color:#6c9340}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#5f8139;border-color:#2b3a1a}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#5f8139;border-color:#4d692e}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#4d692e;border-color:#2b3a1a}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#79a548;border-color:#6c9340}.btn-success .badge{color:#79a548;background-color:#fff}.btn-info{color:#fff;background-color:#6daae0;border-color:#589edc}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#4392d7;border-color:#205e94}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#4392d7;border-color:#2b80cb}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#2b80cb;border-color:#205e94}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#6daae0;border-color:#589edc}.btn-info .badge{color:#6daae0;background-color:#fff}.btn-warning{color:#fff;background-color:#e8a33d;border-color:#e59826}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#d88b1a;border-color:#7d510f}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#d88b1a;border-color:#b87716}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#b87716;border-color:#7d510f}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#e8a33d;border-color:#e59826}.btn-warning .badge{color:#e8a33d;background-color:#fff}.btn-danger{color:#fff;background-color:#c83c3c;border-color:#b73434}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#a32e2e;border-color:#531818}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#a32e2e;border-color:#872626}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#872626;border-color:#531818}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c83c3c;border-color:#b73434}.btn-danger .badge{color:#c83c3c;background-color:#fff}.btn-link{color:#212424;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#000;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#d7d7d7;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.btn-group-sm>.btn,.btn-sm{padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.btn-group-xs>.btn,.btn-xs{padding:2px 4px;font-size:11px;line-height:1.5;border-radius:2px}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-block{display:block}.btn-block+.btn-block{margin-top:5px}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid\9}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;list-style:none;font-size:12px;text-align:left;background-color:#292929;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.5;white-space:nowrap}.dropdown-menu .divider{height:1px;margin:8px 0;background-color:#424242}.dropdown-menu>li>a{clear:both;font-weight:400;color:#fff}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#fff;background-color:#424242}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#424242}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#d7d7d7}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:11px;color:#d7d7d7}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:992px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after{content:"";display:table;clear:both}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after{content:"";display:table;clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:2px 2px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 2px 2px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group,.input-group-btn,.input-group-btn>.btn{position:relative}.input-group{display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px;font-size:12px;font-weight:400;line-height:1;color:#333;text-align:center;background-color:#f5f5f5;border:1px solid #bbb;border-radius:2px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:4px;font-size:11px;border-radius:2px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:12px;font-size:15px;border-radius:2px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after{content:"";display:table;clear:both}.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:6px 12px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#f5f5f5}.nav>li.disabled>a{color:#d7d7d7}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#5a5a5a;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#f5f5f5;border-color:#212424}.nav .nav-divider{height:1px;margin:8px 0;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ccc}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.5;border:1px solid transparent;border-radius:2px 2px 0 0}.nav-tabs>li>a:hover{border-color:#d7d7d7 #d7d7d7 #ccc}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#000;background-color:#ededed;border:1px solid #ccc;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li,.nav-tabs.nav-justified>li{float:none}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#0078e6}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.btn .badge,.btn .label{top:-1px;position:relative}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:2px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ccc}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ccc;border-radius:2px 2px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#ccc}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.pagination{display:inline-block;padding-left:0;margin:18px 0;border-radius:2px}.label,.pagination>li{display:inline}.alert,.thumbnail{margin-bottom:18px}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px;line-height:1.5;text-decoration:none;color:#212424;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span,.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span,.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span,.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#000;background-color:#f5f5f5;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#0078e6;border-color:#0078e6;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#d7d7d7;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:12px;font-size:15px;line-height:1.3333333}.pagination-sm>li>a,.pagination-sm>li>span{padding:4px;font-size:11px;line-height:1.5}.badge,.label{color:#fff;line-height:1;white-space:nowrap;font-weight:700}.label{padding:.2em .6em .3em;font-size:75%;text-align:center;vertical-align:baseline;border-radius:.25em}.badge,.progress-bar{font-size:11px;text-align:center}.label:empty{display:none}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#d7d7d7}.label-default[href]:focus,.label-default[href]:hover{background-color:#bebdbd}.label-primary{background-color:#0078e6}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#005db3}.label-success{background-color:#79a548}.label-success[href]:focus,.label-success[href]:hover{background-color:#5f8139}.label-info{background-color:#6daae0}.label-info[href]:focus,.label-info[href]:hover{background-color:#4392d7}.label-warning{background-color:#e8a33d}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#d88b1a}.label-danger{background-color:#c83c3c}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#a32e2e}.badge{display:inline-block;min-width:10px;padding:3px 7px;vertical-align:middle;background-color:#737373;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#212424;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.thumbnail{padding:4px;line-height:1.5;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#000}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#212424}.alert{padding:11px;border:1px solid transparent;border-radius:2px}.alert-danger,.alert-info,.alert-success,.alert-warning{border-color:transparent}.alert-danger hr,.alert-info hr,.alert-success hr,.alert-warning hr{border-top-color:transparent}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:31px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{background-color:#79a548;color:#fff}.alert-success .alert-link{color:#e6e5e5}.alert-info{background-color:#6daae0;color:#fff}.alert-info .alert-link{color:#e6e5e5}.alert-warning{background-color:#e8a33d;color:#fff}.alert-warning .alert-link{color:#e6e5e5}.alert-danger{background-color:#c83c3c;color:#fff}.alert-danger .alert-link{color:#e6e5e5}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:18px;margin-bottom:18px;background-color:#dedede;border-radius:2px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;line-height:18px;color:#fff;background-color:#0078e6;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#79a548}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#6daae0}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#e8a33d}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#c83c3c}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media-heading,.media:first-child,.panel-title{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#f5f5f5;color:#d7d7d7;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#d7d7d7}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#0078e6;border-color:#0078e6}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#b3dbff}.list-group-item-success{color:#79a548;background-color:#d1e2bd}a.list-group-item-success,button.list-group-item-success{color:#79a548}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#79a548;background-color:#c4dbab}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#79a548;border-color:#79a548}.list-group-item-info{color:#6daae0;background-color:#ebf3fb}a.list-group-item-info,button.list-group-item-info{color:#6daae0}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#6daae0;background-color:#d6e7f6}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#6daae0;border-color:#6daae0}.list-group-item-warning{color:#e8a33d;background-color:#fbefdd}a.list-group-item-warning,button.list-group-item-warning{color:#e8a33d}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#e8a33d;background-color:#f8e4c6}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#e8a33d;border-color:#e8a33d}.list-group-item-danger{color:#c83c3c;background-color:#efc7c7}a.list-group-item-danger,button.list-group-item-danger{color:#c83c3c}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#c83c3c;background-color:#eab3b3}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#c83c3c;border-color:#c83c3c}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:18px;background-color:#fff;border:1px solid transparent;border-radius:2px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-body:after{content:"";display:table;clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:1px;border-top-left-radius:1px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:1px;border-bottom-right-radius:1px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:1px;border-top-left-radius:1px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:1px;border-top-left-radius:1px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:1px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:1px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ccc}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:18px}.panel-group .panel{margin-bottom:0;border-radius:2px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ccc}.panel-default>.panel-heading{color:#5a5a5a;background-color:#ddd;border-color:#ccc}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ccc}.panel-default>.panel-heading .badge{color:#ddd;background-color:#5a5a5a}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ccc}.panel-primary{border-color:#0078e6}.panel-primary>.panel-heading{color:#fff;background-color:#0078e6;border-color:#0078e6}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#0078e6}.panel-primary>.panel-heading .badge{color:#0078e6;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#0078e6}.panel-success{border-color:#79a548}.panel-success>.panel-heading{color:#79a548;background-color:#d1e2bd;border-color:#79a548}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#79a548}.panel-success>.panel-heading .badge{color:#d1e2bd;background-color:#79a548}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#79a548}.panel-info{border-color:#6daae0}.panel-info>.panel-heading{color:#6daae0;background-color:#ebf3fb;border-color:#6daae0}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#6daae0}.panel-info>.panel-heading .badge{color:#ebf3fb;background-color:#6daae0}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#6daae0}.panel-warning{border-color:#e8a33d}.panel-warning>.panel-heading{color:#e8a33d;background-color:#fbefdd;border-color:#e8a33d}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#e8a33d}.panel-warning>.panel-heading .badge{color:#fbefdd;background-color:#e8a33d}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#e8a33d}.panel-danger{border-color:#c83c3c}.panel-danger>.panel-heading{color:#c83c3c;background-color:#efc7c7;border-color:#c83c3c}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#c83c3c}.panel-danger>.panel-heading .badge{color:#efc7c7;background-color:#c83c3c}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#c83c3c}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#fafafa;border:1px solid #ccc;border-radius:2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well-lg,.well-sm{border-radius:2px}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px}.well-sm{padding:9px}.close{float:right;font-size:18px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{font-family:Verdana,Arial,Helvetica,sans-serif;letter-spacing:normal;line-break:auto;line-height:1.5;text-shadow:none;text-transform:none;word-break:normal;word-spacing:normal;word-wrap:normal;font-weight:400;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal{display:none;position:fixed;z-index:5000;-webkit-overflow-scrolling:touch;outline:0}.modal-footer:after,.modal-header:after{display:table;clear:both;content:""}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:2px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.5}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-style:normal;text-align:left;text-align:start;white-space:normal;font-size:12px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:2px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:12px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:1px 1px 0 0}.popover>.arrow,.popover>.arrow:after,.tooltip-arrow{position:absolute;width:0;height:0;border-style:solid}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{display:block;border-color:transparent}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:" ";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.tooltip{position:absolute;z-index:1070;display:block;font-style:normal;text-align:left;text-align:start;white-space:normal;font-size:11px;opacity:0;filter:alpha(opacity=0)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.chosen-container-multi .chosen-choices li.search-choice span,.diff-item-result{word-wrap:break-word}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.tooltip.top{margin-top:-3px;padding:3px 0}.tooltip.right{margin-left:3px;padding:0 3px}.tooltip.bottom{margin-top:3px;padding:3px 0}.tooltip.left{margin-left:-3px;padding:0 3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#333;border-radius:2px}.tooltip-arrow{border-color:transparent}.carousel,.carousel-inner{position:relative}.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{border-width:3px 3px 0;border-top-color:#333;bottom:0}.tooltip.top .tooltip-arrow{left:50%;margin-left:-3px}.tooltip.top-left .tooltip-arrow{right:3px;margin-bottom:-3px}.tooltip.top-right .tooltip-arrow{left:3px;margin-bottom:-3px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-3px;border-width:3px 3px 3px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-3px;border-width:3px 0 3px 3px;border-left-color:#333}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 3px 3px;border-bottom-color:#333;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-3px}.tooltip.bottom-left .tooltip-arrow{right:3px;margin-top:-3px}.tooltip.bottom-right .tooltip-arrow{left:3px;margin-top:-3px}.carousel-inner{width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;background-color:transparent}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}body,html{height:100%}body{overflow:auto}.scaffold{background-color:#f5f5f5;color:#333;position:relative;padding-top:45px;height:100vh}.scaffold-topbar{background-color:#151515;color:#f5f5f5;height:45px;position:fixed;top:0;right:0;left:0}.scaffold-modulemenu,.scaffold-toolbar{background-color:#292929;z-index:1000;position:fixed;top:45px;left:0;bottom:0}.scaffold-modulemenu{color:#f5f5f5;width:40px;max-width:100%;overflow:hidden}.scaffold-modulemenu a{color:rgba(245,245,245,.7)}.scaffold-modulemenu .active>a,.scaffold-modulemenu a:hover{color:#f5f5f5}.scaffold-toolbar{overflow:auto;color:#f5f5f5;right:0;display:none}.scaffold-toolbar .dropdown-menu a,.scaffold-toolbar a{color:rgba(245,245,245,.7)}.scaffold-toolbar .active>a,.scaffold-toolbar .dropdown-menu a:focus,.scaffold-toolbar .dropdown-menu a:hover,.scaffold-toolbar a:focus,.scaffold-toolbar a:hover{color:#f5f5f5}@media (min-width:992px){.scaffold-toolbar{overflow:visible;background-color:transparent;height:45px;top:0;left:auto;bottom:auto;display:block}}.scaffold-content{position:fixed!important;top:45px;left:0;right:0;bottom:0}@media (max-width:991px){.scaffold-search-expanded .scaffold-toolbar,.scaffold-toolbar-expanded .scaffold-toolbar{display:block}.scaffold-content{left:0!important}}.scaffold-content-module-iframe,.scaffold-content-navigation-iframe{display:block;border:none;height:100%;width:100%}.scaffold-content-navigation{display:none;position:absolute!important;left:0;top:0;bottom:0;width:300px}.scaffold-content-navigation-component{position:absolute;top:0;bottom:0;left:0;right:0}.scaffold-content-navigation-component #typo3-pagetree-treeContainer>div>.x-panel-body{overflow:auto}.scaffold-content-module{position:absolute!important;top:0;left:0;bottom:0;right:0}@media (max-width:767px){.scaffold-content-module{width:100%}}.scaffold-content-overlay{display:none;position:absolute;z-index:1040;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.65)}.scaffold-modulemenu-expanded .scaffold-content-overlay{display:block}@media (min-width:992px){.scaffold-modulemenu-expanded .scaffold-content-overlay{display:none}.scaffold{padding-left:40px}}.scaffold .scaffold-modulemenu{width:40px}@media (max-width:991px){.scaffold .scaffold-modulemenu{display:none}.scaffold-modulemenu-expanded .scaffold-modulemenu{display:block}}.scaffold-modulemenu-expanded{display:block;padding-left:230px}.scaffold-modulemenu-expanded .scaffold-modulemenu{width:230px}.scaffold-modulemenu-expanded .scaffold-content{-webkit-transform:translate(230px,0);transform:translate(230px,0)}.scaffold-content-navigation-expanded .scaffold-content-navigation{display:block}.scaffold-content-navigation-expanded .scaffold-content-module{left:300px}@media (min-width:992px){.scaffold .scaffold-content{left:40px}.scaffold-modulemenu-expanded .scaffold-content{left:230px;-webkit-transform:none;transform:none}}.topbar{background-color:inherit;position:relative;height:45px}.topbar a{color:inherit;text-decoration:none}.topbar-button{position:absolute;top:0;display:inline-block;border:0;background-color:#151515;height:45px;width:40px}.topbar-button:focus,.topbar-button:hover{background-color:#1d1d1d}.scaffold-content-navigation-expanded .topbar-button-navigationcomponent,.scaffold-modulemenu-expanded .topbar-button.topbar-button-modulemenu,.scaffold-search-expanded .topbar-button-search,.scaffold-toolbar-expanded .topbar-button-toolbar{background-color:#292929}.topbar-button[disabled],.topbar-button[disabled]:focus,.topbar-button[disabled]:hover{background-color:#292929;cursor:not-allowed;opacity:.5}.topbar-button.topbar-button-modulemenu{left:0}.topbar-button.topbar-button-navigationcomponent{left:40px}.topbar-button.topbar-button-toolbar{right:40px}.topbar-button.topbar-button-search{right:0}@media (max-width:991px){.scaffold-search-expanded .toolbar-item,.scaffold-toolbar-expanded .toolbar-item-search{display:none}.scaffold-search-expanded .toolbar-item-search{display:block;width:100%}.topbar-header{padding-right:80px!important}}.topbar-button-search,.topbar-button-toolbar{display:block}@media (min-width:992px){.topbar-button.topbar-button-modulemenu{background-color:#292929}.topbar-button-search,.topbar-button-toolbar{display:none}}.topbar-header{padding-left:80px}.topbar-header-site{overflow:hidden;position:relative;max-width:100%;height:45px;line-height:45px;padding-left:1em;padding-right:1em;white-space:nowrap}.topbar-header-site:after,.topbar-header-site:before{display:block;content:'';position:absolute;top:0;bottom:0;width:1em}.topbar-header-site:before{right:0;background:#151515}.topbar-header-site:after{right:1em;background:-webkit-linear-gradient(left,rgba(21,21,21,0) 0,#151515 100%);background:linear-gradient(to right,rgba(21,21,21,0) 0,#151515 100%)}.typo3-in-workspace .topbar-header-site{background-color:#6d860d}.typo3-in-workspace .topbar-header-site:before{background:#6d860d}.typo3-in-workspace .topbar-header-site:after{background:-webkit-linear-gradient(left,rgba(109,134,13,0) 0,#6d860d 100%);background:linear-gradient(to right,rgba(109,134,13,0) 0,#6d860d 100%)}.topbar-header-site-logo{height:45px;display:none;padding-right:.5em}@media (min-width:320px){.topbar-header-site-logo{display:inline-block}}.topbar-header-site-title{line-height:1.2em;display:inline-block;vertical-align:middle}.topbar-header-site-name{display:block}.toolbar-list:after,.toolbar:after{display:table;content:'';clear:both}.topbar-header-site-version{opacity:.5}.toolbar{padding:8px}.toolbar-list{list-style:none;padding:0;margin:0}@media (min-width:992px){.toolbar{padding:0;background-color:#151515}.toolbar-list li:last-child{width:300px}}.toolbar-item{padding:4px;position:relative;display:block;float:left;width:100%}@media (min-width:600px){.toolbar-item{width:50%}}@media (min-width:750px){.toolbar-item{width:33.33%}}@media (min-width:992px){.toolbar-item{padding:0;width:auto;margin-left:1px}}.toolbar-item .dropdown-menu{width:350px}.toolbar-item .dropdown-menu .text-muted{color:#8c8c8c}.toolbar-item .dropdown-menu a:focus .text-muted,.toolbar-item .dropdown-menu a:hover .text-muted{color:#a6a6a6}@media (max-width:991px){.toolbar-item .dropdown-menu{overflow:auto;padding:15px;position:fixed;max-height:90%;max-width:90%;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.toolbar-item .dropdown-backdrop{background:rgba(0,0,0,.65)}}.toolbar-item-avatar{width:28px;margin-right:2px;display:inline-block}.toolbar-item-avatar .avatar{position:absolute;top:50%;left:10px;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.toolbar-item-avatar .avatar,.toolbar-item-avatar .avatar-image{height:28px;width:28px}.toolbar-item-badge{position:absolute;bottom:4px;right:4px;padding:3px 4px;border-radius:0;font-size:10px;font-weight:400;min-width:16px}.toolbar-item-link{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid rgba(0,0,0,.5);position:relative;display:block;text-decoration:none;padding:9px 10px;height:45px;line-height:27px}.toolbar-item-link:focus,.toolbar-item-link:hover{text-decoration:none}.open .toolbar-item-link{background-color:#292929}.toolbar-item-search form{padding:0;margin:0}.toolbar-item-search .toolbar-item-link{padding:0;margin:0;height:0}.toolbar-item-search .form-group{margin:0}.toolbar-item-search .close{color:#fff;text-shadow:none;opacity:1}@media (max-width:991px){.toolbar-item-search .dropdown-menu{top:114px;left:14px;right:14px;width:auto;max-width:none;max-height:none;-webkit-transform:none;transform:none;bottom:14px}}@media (min-width:992px){.toolbar-item-link{border:none}.toolbar-item-title{display:none}.toolbar-item-search .dropdown-menu{left:auto;right:0}}.toolbar-item-search .autocomplete-suggestions{position:static!important}.toolbar-item-search .autocomplete-suggestion{border:none}.toolbar-item-search.open .toolbar-item-search-form{position:relative;z-index:991}.toolbar-item-search-field{color:inherit;background-color:#2f2f2f;margin:0;border-radius:0;border:1px solid rgba(0,0,0,.5);height:45px;box-shadow:none}@media (min-width:992px){.toolbar-item-search-field{border:none}}.toolbar-item-search-field:hover{background-color:#333}.toolbar-item-search-field:focus{box-shadow:none;background-color:#555}.module-wrapper{position:relative}.module-wrapper iframe{border:none}.modulemenu .modulemenu-group-container{clear:both}.modulemenu .modulemenu-group{position:relative;padding:5px 0;border-bottom:1px solid rgba(0,0,0,.2)}.modulemenu .modulemenu-group-header,.modulemenu .modulemenu-item-link{position:relative;display:block;cursor:pointer;padding:2px 4px;text-decoration:none}.modulemenu .modulemenu-group-header{user-select:none;text-transform:uppercase}.modulemenu .modulemenu-item-link:focus,.modulemenu .modulemenu-item-link:hover{outline:0;background-color:rgba(0,0,0,.1)}.modulemenu .modulemenu-item.active .modulemenu-item-link{background-color:rgba(0,0,0,.15)}.modulemenu .modulemenu-icon{float:left;margin-right:4px}.modulemenu .modulemenu-icon .fa{font-size:.5em}.modulemenu .modulemenu-group-title,.modulemenu .modulemenu-item-title{white-space:nowrap;text-overflow:ellipsis;padding-top:7px;padding-left:4px;display:none;overflow:hidden}.modulemenu .modulemenu-group-title{padding-right:20px}.modulemenu .modulemenu-group-title .caret{-webkit-transform:rotate(90deg);transform:rotate(90deg);position:absolute;top:17px;right:18px}.modulemenu .expanded .modulemenu-group-title .caret{-webkit-transform:rotate(0);transform:rotate(0)}.scaffold-modulemenu-expanded .modulemenu-group-title,.scaffold-modulemenu-expanded .modulemenu-item-title{display:block}.autocomplete{position:relative}.autocomplete-results{z-index:1000;position:absolute;margin:5px 0;top:100%;left:0;border:1px solid #ddd;border-radius:2px;background-color:#fff;overflow:hidden;box-shadow:0 1px 0 0 rgba(0,0,0,.25)}.avatar,.dropdown-list>li{position:relative}.autocomplete-suggestion{border-top:1px solid #ddd}.autocomplete-suggestion:first-child{border-top:none}.autocomplete-suggestion-link{padding:5px 13px 5px 28px;display:block;text-decoration:none}.autocomplete-selected .autocomplete-suggestion-link,.autocomplete-suggestion-link:hover{background-color:#fafafa;text-decoration:none}.autocomplete-info{padding:5px 15px}.dropdown-menu{line-height:1.45em;border:0;margin:0;border-radius:0;color:#fff}.dropdown-menu a{color:inherit;display:block}.dropdown-menu a:focus,.dropdown-menu a:hover{color:inherit;text-decoration:none}.dropdown-menu hr{border-top:1px solid rgba(0,0,0,.35);margin:1.25em -15px}.dropdown-menu>:last-child{margin-bottom:0}.dropdown-menu .form-group{margin-bottom:.75em}.dropdown-menu .form-control{border-color:#aaa;color:inherit;border-radius:0;background-color:#333}.dropdown-menu .form-control:focus{box-shadow:none;border-color:#bbb}.dropdown-menu .btn{border:none;border-radius:0;padding:6px 10px}.dropdown-headline{font-size:1.15em;margin-top:0;margin-bottom:.5em}.dropdown-text a{display:inline-block}div.dropdown-menu{padding:1.5em}.dropdown-list{padding-left:0;list-style:none}.dropdown-list>li+li{margin-top:.5em}.dropdown-list-link{display:block;text-decoration:none}.dropdown-list-link:focus,.dropdown-list-link:hover{text-decoration:none}.dropdown-table{display:table;width:100%}.dropdown-table-row{display:table-row}.dropdown-table-column{display:table-cell;padding-top:.25em;padding-bottom:.25em;vertical-align:middle}.dropdown-table-column-top{vertical-align:top}.avatar,.callout .media-body{vertical-align:middle}.dropdown-table-icon{width:16px;padding-right:.5em}.avatar,.avatar-image{height:32px;width:32px}.dropdown-table-title{white-space:nowrap;padding-right:1.5em}.dropdown-table-title-ellipsis{max-width:230px;overflow:hidden;display:block;white-space:nowrap;text-overflow:ellipsis}.dropdown-table-actions{white-space:nowrap;text-align:right}.dropdown-table-actions-btn{text-align:center;display:inline-block!important;margin-top:-4px;margin-bottom:-4px;padding:4px;vertical-align:middle}.dropdown-table-actions-btn-close:hover,.dropdown-table-actions-btn-edit:hover{background-color:#333}.dropdown-table-actions-btn-delete:hover{background-color:#c83c3c}.avatar{display:inline-block}.avatar-image{display:block;overflow:hidden;border-radius:50%}.avatar-image:after{display:block;content:'';position:absolute;top:0;left:0;height:100%;width:100%;border-radius:50%;border:1px solid rgba(255,255,255,.1)}.avatar-image>img{display:block;width:100%!important;height:auto!important}.avatar-icon{position:absolute;bottom:0;right:0;height:16px;width:16px}.callout{background-color:#f0f0f0;border-left:3px solid #ccc;margin:20px 0;padding:20px;color:#333}.callout .media{margin:0}.callout .media .fa-stack{color:#fff}.callout .media .fa-stack>.fa:first-child{color:#ccc}.callout-icon{margin-top:-2px}.callout-title{font-size:1.3em;margin:0 0 .5em}.callout-danger .media,.callout-info .media,.callout-notice .media,.callout-success .media,.callout-warning .media{margin:0}.callout-body>:last-child{margin-bottom:0}.callout-success{background-color:#d1e2bd;border-color:#79a548;color:#333}.callout-success .media .fa-stack{color:#fff}.callout-success .media .fa-stack>.fa:first-child{color:#79a548}.callout-info{background-color:#ebf3fb;border-color:#6daae0;color:#333}.callout-info .media .fa-stack{color:#fff}.callout-info .media .fa-stack>.fa:first-child{color:#6daae0}.callout-warning{background-color:#fbefdd;border-color:#e8a33d;color:#333}.callout-warning .media .fa-stack{color:#fff}.callout-warning .media .fa-stack>.fa:first-child{color:#e8a33d}.callout-danger{background-color:#efc7c7;border-color:#c83c3c;color:#333}.callout-danger .media .fa-stack{color:#fff}.callout-danger .media .fa-stack>.fa:first-child{color:#c83c3c}.callout-notice{background-color:#f9f9f9;border-color:#a0a0a0;color:#333}.callout-notice .media .fa-stack{color:#fff}.callout-notice .media .fa-stack>.fa:first-child{color:#a0a0a0}.icon{position:relative;display:inline-block;overflow:hidden;white-space:nowrap;vertical-align:-22%}.icon-markup,.icon-overlay{position:absolute;right:0;text-align:center;bottom:0}.icon img,.icon svg{display:block;height:100%;width:100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.icon *{display:block;line-height:inherit}.icon-markup{display:block;top:0;left:0}.icon-overlay{height:68.75%;width:68.75%}.module-docheader,.module-loading-indicator.nprogress-custom-parent{position:fixed;top:0}.icon-color{fill:currentColor}.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)}}.icon-state-disabled .icon-markup{opacity:.5}.icon-size-small{height:16px;width:16px;line-height:16px}.icon-size-small .icon-unify{line-height:16px;font-size:14px}.icon-size-small .icon-overlay .icon-unify{line-height:10px;font-size:9px}.icon-size-default{height:32px;width:32px;line-height:32px}.icon-size-default .icon-unify{line-height:32px;font-size:28px}.icon-size-default .icon-overlay .icon-unify{line-height:20px;font-size:18px}.icon-size-large{height:48px;width:48px;line-height:48px}.icon-size-large .icon-unify{line-height:48px;font-size:42px}.icon-size-large .icon-overlay .icon-unify{line-height:30px;font-size:26px}.icon-actions-edit-copy-release,.icon-actions-edit-cut-release,.icon-status-dialog-error,.icon-status-status-current,.icon-status-status-permission-denied{color:#c83c3c}.icon-status-status-sorting-light-asc,.icon-status-status-sorting-light-desc{color:#fff}.icon-status-status-sorting-asc,.icon-status-status-sorting-desc{color:#737373}.icon-status-dialog-information{color:#6daae0}.icon-status-dialog-ok,.icon-status-status-permission-granted{color:#79a548}.icon-status-dialog-notification{color:#333}.icon-status-dialog-warning{color:#e8a33d}.diff{background-color:#fff;border:1px solid #ccc;display:table}.diff-item{display:table-row}.diff-item+.diff-item{border-top:1px solid #ccc}.diff-item-result,.diff-item-title{padding:10px;display:table-cell}.diff-item-title{background-color:#fafafa;padding-right:10px;font-style:italic;white-space:nowrap}.diff-item-result{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;width:100%;white-space:pre;word-break:break-all}.diff-item-result del{color:#c80c05;background-color:#fff6f6;text-decoration:none}.diff-item-result ins{color:#44a512;background-color:#ebfce3;text-decoration:none}.diff-item-result.diff-item-result-inline{white-space:normal}.module{min-height:100%;width:100%;background-color:#fff;color:inherit}.module-dark{background-color:#333;color:#ccc}.module-loading-indicator{min-height:5px;width:100%;z-index:999999}.module-docheader{width:100%;left:0;min-height:65px;z-index:300;background-color:#eee;border-bottom:1px solid #c3c3c3;padding:0 24px;-webkit-transition:margin-top .3s ease-in-out;transition:margin-top .3s ease-in-out}.module-docheader .module-docheader-bar{min-height:26px;margin:4px 0;line-height:26px}.module-docheader .module-docheader-bar.row{margin-left:-15px;margin-right:-15px}.module-docheader .module-docheader-bar label{margin-top:0;margin-bottom:0}.module-docheader .module-docheader-bar .form-inline .form-group{display:table}.module-docheader .module-docheader-bar .form-inline .form-group label{display:table-cell;font-size:11px;font-weight:400;line-height:16px;padding:4px;border-radius:2px 0 0 2px;border:1px solid #bbb;border-right:0;background-color:rgba(0,0,0,.05)}.module-docheader .module-docheader-bar .form-inline .form-group label+select{display:table-cell;border-top-left-radius:0;border-bottom-left-radius:0}.module-docheader .module-docheader-bar .form-group{vertical-align:top;margin:0;display:inline-block}.module-docheader .module-docheader-bar .form-group .form-control{vertical-align:top}.module-docheader .module-docheader-bar .form-inline-spaced{margin:0}.module-docheader .module-docheader-bar .panel{margin:0 -24px;border-left:none;border-right:none;border-bottom:none;border-radius:0;background-color:#fafafa;box-shadow:none}.module-docheader .module-docheader-bar .panel .panel-body{padding:8px 24px}.module-docheader .module-docheader-bar-search{margin-bottom:0}.module-docheader .module-docheader-bar-column-left{float:left}.module-docheader .module-docheader-bar-column-right{float:right}.module-docheader-bar-navigation .module-docheader-bar-column-left{white-space:nowrap}@media (max-width:768px){.module-docheader .module-docheader-bar .text-right{text-align:left}.module-docheader-bar-navigation .module-docheader-bar-column-left{white-space:normal}}.module-docheader-bar-navigation .form-group select{width:100%}.module-body{padding:24px}.module-body>.callout:first-child{margin-top:0}.module-body>.container{padding-left:0;padding-right:0}.module-body .container-small{max-width:768px;margin:0 auto}.module-docheader+.module-body{padding-top:89px}.panel{display:block}.panel:focus,.panel:hover{text-decoration:none}.panel-heading a,.panel-heading a:active,.panel-heading a:focus,.panel-heading a:hover{text-decoration:none;color:inherit}.panel-heading-left{float:left}.panel-heading-right{float:right}.panel-title{font-size:12px}.panel-title-icon,.panel-title-name{display:inline-block;vertical-align:middle}.panel-body>:first-child{margin-top:0}.panel-body>:last-child{margin-bottom:0}.panel-body-highlightlinks>p>a{text-decoration:underline}.panel-table td:first-child,.panel-table th:first-child{padding-left:15px}.panel-table td:last-child,.panel-table th:last-child{padding-right:15px}.panel-progress{background-color:#eee;height:3px;position:relative;width:100%}.panel-progress .panel-progress-bar{display:block;height:100%;background-color:#444}.panel-active{border-color:#444}.panel-active>.panel-heading{color:#fff;background-color:#666;border-color:#444}.panel-active>.panel-heading+.panel-collapse>.panel-body{border-top-color:#444}.panel-active>.panel-heading .badge{color:#666;background-color:#fff}.panel-active>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#444}.clearfix:after,.dropdown-list>li:after,.module-docheader .module-docheader-bar:after,.module-docheader:after,.modulemenu .modulemenu-group-header:after,.modulemenu .modulemenu-item-link:after,.panel-heading:after{content:"";display:table;clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chosen-container *{box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15);clip:rect(0,0,0,0)}.chosen-container.chosen-with-drop .chosen-drop{clip:auto}.chosen-container a{cursor:pointer}.chosen-container .chosen-single .group-name,.chosen-container .search-choice .group-name{margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400;color:#999}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:25px;border:1px solid #aaa;border-radius:2px;background-color:#fff;background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;font-size:1px}.chosen-container-single .chosen-single abbr:hover,.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;font-size:1em;font-family:sans-serif;line-height:normal}.chosen-container-single .chosen-drop{margin-top:-1px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;clip:rect(0,0,0,0)}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#e8a33d;color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto;border:1px solid #aaa;background-color:#fff;cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:0;height:25px;outline:0;border:0!important;background:0 0!important;box-shadow:none;color:#999;font-size:100%;font-family:sans-serif;line-height:normal;width:25px}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 5px 3px 0;padding:4px 20px 4px 5px;max-width:100%;background-color:#e8a33d;background-clip:padding-box;color:#fff;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:5px;display:block;width:12px;height:12px}.caret:after,.panel-heading{position:relative}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{text-decoration:none}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:after{content:"";font-family:FontAwesome;padding-left:2px;vertical-align:top;color:#fff}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:none;background:0 0}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close,.chosen-disabled .chosen-single{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.content-area>:last-child,.typo3-message>h4{margin-bottom:0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:none}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}.content-area{padding-bottom:35px}.content-area>h3{margin-top:0}.logo-pageheader img{padding-bottom:3px}img.logo{vertical-align:bottom}.typo3-message p{margin-top:9px}.t3-install-displaytwinimageimages{border:1px solid #ccc;padding:10px}.t3-install-displaytwinimagetextarea pre{border-top:0}.bg-transparent-emulation{padding:10px;text-align:center;background:url(../../../../../../typo3/sysext/install/Resources/Public/Images/bg_transparent_emulation.png)}.bg-transparent-emulation img{max-width:300px}.alert-notice{background-color:#eee;border-color:#bbb;color:#333}.alert-notice hr{border-top-color:#aeaeae}.alert-notice .alert-link{color:#1a1919}.nav-pills>li>a{border-radius:0}h1:first-child{margin-top:0}.typo3-docheader-buttons,.typo3-docheader-functions{min-height:20px}.item{margin:1em;border:1px solid #ddd}.item .item-heading{padding:1em;background-color:#ddd}.item .item-body{padding:1em}.list-group-item a{display:block}.list-group-item.active a{color:#fff}.caret{border:0;padding-left:10px}.caret:after{top:-8px;left:-10px;content:"";font-family:FontAwesome}.collapsed .caret:after{content:"";font-family:FontAwesome}.panel-heading .panel-checkbox{margin:0;position:absolute;left:1em;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.panel-heading .panel-checkbox+.panel-title{padding-left:18px}.panel-heading .message{display:block;padding-left:16px;margin-top:5px}a[data-toggle=collapse]{display:block;text-decoration:none}@media (min-width:992px){.affix-bottom{position:absolute}body.standalone .affix-top{position:relative}.affix,body.backend .affix-top{position:fixed;top:35px}body.backend .leftNavigation{min-height:425px}}hr{border-top-color:#ddd}.copyright .panel-default:last-child{margin-bottom:0}#fixed-footer-handler{height:32px}.fixed{position:fixed;bottom:0;background-color:grey}.fixed .footer-innerWrap{padding:1.5em}@media (max-width:991px){#menuWrapper{position:relative!important;margin-bottom:30px}}#mobileMenuWrapper{margin-bottom:10px}#install-menu-button{float:right;margin-bottom:20px}#install-menu-button .navbar-toggle{border:0;background:#fff}#install-menu-button .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px;background-color:#000}#install-menu-button .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.form-control-clearable{position:relative}.form-control-clearable .form-control{padding-right:2.3em}.form-control-clearable .close{position:absolute;height:16px;z-index:3;top:50%;right:.5em;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.form-control-clearable .close .icon{vertical-align:0}.input-group .form-control-clearable{display:table-cell}.input-group .form-control-clearable .form-control{display:block}.panel-group-flat .panel-body,.panel-group-rst .panel-body{padding-right:0}.panel-flat,.panel-rst,.panel-version{border:0;border-left:2px solid #d7d7d7;border-radius:0;margin:0}.panel-flat.panel-default .panel-heading,.panel-rst.panel-default .panel-heading,.panel-version.panel-default .panel-heading{background:#f5f5f5}.panel-flat.panel-breaking,.panel-flat.panel-danger,.panel-rst.panel-breaking,.panel-rst.panel-danger,.panel-version.panel-breaking,.panel-version.panel-danger{border-color:#c83c3c}.panel-flat.panel-breaking>.panel-heading,.panel-flat.panel-danger>.panel-heading,.panel-rst.panel-breaking>.panel-heading,.panel-rst.panel-danger>.panel-heading,.panel-version.panel-breaking>.panel-heading,.panel-version.panel-danger>.panel-heading{color:#fff;background-color:#c83c3c;border-color:#c83c3c}.panel-flat.panel-breaking>.panel-heading+.panel-collapse>.panel-body,.panel-flat.panel-danger>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-breaking>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-danger>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-breaking>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#c83c3c}.panel-flat.panel-breaking>.panel-heading .badge,.panel-flat.panel-danger>.panel-heading .badge,.panel-rst.panel-breaking>.panel-heading .badge,.panel-rst.panel-danger>.panel-heading .badge,.panel-version.panel-breaking>.panel-heading .badge,.panel-version.panel-danger>.panel-heading .badge{color:#c83c3c;background-color:#fff}.panel-flat.panel-breaking>.panel-footer+.panel-collapse>.panel-body,.panel-flat.panel-danger>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-breaking>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-danger>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-breaking>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#c83c3c}.panel-flat.panel-breaking.risk-high>.panel-heading,.panel-flat.panel-danger.risk-high>.panel-heading,.panel-rst.panel-breaking.risk-high>.panel-heading,.panel-rst.panel-danger.risk-high>.panel-heading,.panel-version.panel-breaking.risk-high>.panel-heading,.panel-version.panel-danger.risk-high>.panel-heading{background:#c83c3c;color:#f5f5f5}.panel-flat.panel-breaking.risk-medium>.panel-heading,.panel-flat.panel-danger.risk-medium>.panel-heading,.panel-rst.panel-breaking.risk-medium>.panel-heading,.panel-rst.panel-danger.risk-medium>.panel-heading,.panel-version.panel-breaking.risk-medium>.panel-heading,.panel-version.panel-danger.risk-medium>.panel-heading{background:#f5dbdb;color:#1e1e1e}.panel-flat.panel-breaking.risk-low>.panel-heading,.panel-flat.panel-danger.risk-low>.panel-heading,.panel-rst.panel-breaking.risk-low>.panel-heading,.panel-rst.panel-danger.risk-low>.panel-heading,.panel-version.panel-breaking.risk-low>.panel-heading,.panel-version.panel-danger.risk-low>.panel-heading{background:#fff;color:#1e1e1e}.panel-flat.panel-breaking .panel-progress .panel-progress-bar,.panel-flat.panel-danger .panel-progress .panel-progress-bar,.panel-rst.panel-breaking .panel-progress .panel-progress-bar,.panel-rst.panel-danger .panel-progress .panel-progress-bar,.panel-version.panel-breaking .panel-progress .panel-progress-bar,.panel-version.panel-danger .panel-progress .panel-progress-bar{background-color:#c83c3c}.panel-flat.panel-deprecation,.panel-flat.panel-warning,.panel-rst.panel-deprecation,.panel-rst.panel-warning,.panel-version.panel-deprecation,.panel-version.panel-warning{border-color:#e8a33d}.panel-flat.panel-deprecation>.panel-heading,.panel-flat.panel-warning>.panel-heading,.panel-rst.panel-deprecation>.panel-heading,.panel-rst.panel-warning>.panel-heading,.panel-version.panel-deprecation>.panel-heading,.panel-version.panel-warning>.panel-heading{color:#fff;background-color:#e8a33d;border-color:#e8a33d}.panel-flat.panel-deprecation>.panel-heading+.panel-collapse>.panel-body,.panel-flat.panel-warning>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-deprecation>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-warning>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-deprecation>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#e8a33d}.panel-flat.panel-deprecation>.panel-heading .badge,.panel-flat.panel-warning>.panel-heading .badge,.panel-rst.panel-deprecation>.panel-heading .badge,.panel-rst.panel-warning>.panel-heading .badge,.panel-version.panel-deprecation>.panel-heading .badge,.panel-version.panel-warning>.panel-heading .badge{color:#e8a33d;background-color:#fff}.panel-flat.panel-deprecation>.panel-footer+.panel-collapse>.panel-body,.panel-flat.panel-warning>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-deprecation>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-warning>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-deprecation>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#e8a33d}.panel-flat.panel-deprecation.risk-high>.panel-heading,.panel-flat.panel-warning.risk-high>.panel-heading,.panel-rst.panel-deprecation.risk-high>.panel-heading,.panel-rst.panel-warning.risk-high>.panel-heading,.panel-version.panel-deprecation.risk-high>.panel-heading,.panel-version.panel-warning.risk-high>.panel-heading{background:#e8a33d;color:#f5f5f5}.panel-flat.panel-deprecation.risk-medium>.panel-heading,.panel-flat.panel-warning.risk-medium>.panel-heading,.panel-rst.panel-deprecation.risk-medium>.panel-heading,.panel-rst.panel-warning.risk-medium>.panel-heading,.panel-version.panel-deprecation.risk-medium>.panel-heading,.panel-version.panel-warning.risk-medium>.panel-heading{background:#f8e4c6;color:#1e1e1e}.panel-flat.panel-deprecation.risk-low>.panel-heading,.panel-flat.panel-warning.risk-low>.panel-heading,.panel-rst.panel-deprecation.risk-low>.panel-heading,.panel-rst.panel-warning.risk-low>.panel-heading,.panel-version.panel-deprecation.risk-low>.panel-heading,.panel-version.panel-warning.risk-low>.panel-heading{background:#fff;color:#1e1e1e}.panel-flat.panel-deprecation .panel-progress .panel-progress-bar,.panel-flat.panel-warning .panel-progress .panel-progress-bar,.panel-rst.panel-deprecation .panel-progress .panel-progress-bar,.panel-rst.panel-warning .panel-progress .panel-progress-bar,.panel-version.panel-deprecation .panel-progress .panel-progress-bar,.panel-version.panel-warning .panel-progress .panel-progress-bar{background-color:#e8a33d}.panel-flat.panel-feature,.panel-flat.panel-success,.panel-rst.panel-feature,.panel-rst.panel-success,.panel-version.panel-feature,.panel-version.panel-success{border-color:#79a548}.panel-flat.panel-feature>.panel-heading,.panel-flat.panel-success>.panel-heading,.panel-rst.panel-feature>.panel-heading,.panel-rst.panel-success>.panel-heading,.panel-version.panel-feature>.panel-heading,.panel-version.panel-success>.panel-heading{color:#fff;background-color:#79a548;border-color:#79a548}.panel-flat.panel-feature>.panel-heading+.panel-collapse>.panel-body,.panel-flat.panel-success>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-feature>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-success>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-feature>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#79a548}.panel-flat.panel-feature>.panel-heading .badge,.panel-flat.panel-success>.panel-heading .badge,.panel-rst.panel-feature>.panel-heading .badge,.panel-rst.panel-success>.panel-heading .badge,.panel-version.panel-feature>.panel-heading .badge,.panel-version.panel-success>.panel-heading .badge{color:#79a548;background-color:#fff}.panel-flat.panel-feature>.panel-footer+.panel-collapse>.panel-body,.panel-flat.panel-success>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-feature>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-success>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-feature>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#79a548}.panel-flat.panel-feature.risk-high>.panel-heading,.panel-flat.panel-success.risk-high>.panel-heading,.panel-rst.panel-feature.risk-high>.panel-heading,.panel-rst.panel-success.risk-high>.panel-heading,.panel-version.panel-feature.risk-high>.panel-heading,.panel-version.panel-success.risk-high>.panel-heading{background:#79a548;color:#f5f5f5}.panel-flat.panel-feature.risk-medium>.panel-heading,.panel-flat.panel-success.risk-medium>.panel-heading,.panel-rst.panel-feature.risk-medium>.panel-heading,.panel-rst.panel-success.risk-medium>.panel-heading,.panel-version.panel-feature.risk-medium>.panel-heading,.panel-version.panel-success.risk-medium>.panel-heading{background:#ddeacf;color:#1e1e1e}.panel-flat.panel-feature.risk-low>.panel-heading,.panel-flat.panel-success.risk-low>.panel-heading,.panel-rst.panel-feature.risk-low>.panel-heading,.panel-rst.panel-success.risk-low>.panel-heading,.panel-version.panel-feature.risk-low>.panel-heading,.panel-version.panel-success.risk-low>.panel-heading{background:#fff;color:#1e1e1e}.panel-flat.panel-feature .panel-progress .panel-progress-bar,.panel-flat.panel-success .panel-progress .panel-progress-bar,.panel-rst.panel-feature .panel-progress .panel-progress-bar,.panel-rst.panel-success .panel-progress .panel-progress-bar,.panel-version.panel-feature .panel-progress .panel-progress-bar,.panel-version.panel-success .panel-progress .panel-progress-bar{background-color:#79a548}.panel-flat.panel-important,.panel-flat.panel-info,.panel-rst.panel-important,.panel-rst.panel-info,.panel-version.panel-important,.panel-version.panel-info{border-color:#6daae0}.panel-flat.panel-important>.panel-heading,.panel-flat.panel-info>.panel-heading,.panel-rst.panel-important>.panel-heading,.panel-rst.panel-info>.panel-heading,.panel-version.panel-important>.panel-heading,.panel-version.panel-info>.panel-heading{color:#fff;background-color:#6daae0;border-color:#6daae0}.panel-flat.panel-important>.panel-heading+.panel-collapse>.panel-body,.panel-flat.panel-info>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-important>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-info>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-important>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#6daae0}.panel-flat.panel-important>.panel-heading .badge,.panel-flat.panel-info>.panel-heading .badge,.panel-rst.panel-important>.panel-heading .badge,.panel-rst.panel-info>.panel-heading .badge,.panel-version.panel-important>.panel-heading .badge,.panel-version.panel-info>.panel-heading .badge{color:#6daae0;background-color:#fff}.panel-flat.panel-important>.panel-footer+.panel-collapse>.panel-body,.panel-flat.panel-info>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-important>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-info>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-important>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#6daae0}.panel-flat.panel-important.risk-high>.panel-heading,.panel-flat.panel-info.risk-high>.panel-heading,.panel-rst.panel-important.risk-high>.panel-heading,.panel-rst.panel-info.risk-high>.panel-heading,.panel-version.panel-important.risk-high>.panel-heading,.panel-version.panel-info.risk-high>.panel-heading{background:#6daae0;color:#f5f5f5}.panel-flat.panel-important.risk-medium>.panel-heading,.panel-flat.panel-info.risk-medium>.panel-heading,.panel-rst.panel-important.risk-medium>.panel-heading,.panel-rst.panel-info.risk-medium>.panel-heading,.panel-version.panel-important.risk-medium>.panel-heading,.panel-version.panel-info.risk-medium>.panel-heading{background:#ebf3fb;color:#1e1e1e}.panel-flat.panel-important.risk-low>.panel-heading,.panel-flat.panel-info.risk-low>.panel-heading,.panel-rst.panel-important.risk-low>.panel-heading,.panel-rst.panel-info.risk-low>.panel-heading,.panel-version.panel-important.risk-low>.panel-heading,.panel-version.panel-info.risk-low>.panel-heading{background:#fff;color:#1e1e1e}.panel-flat.panel-important .panel-progress .panel-progress-bar,.panel-flat.panel-info .panel-progress .panel-progress-bar,.panel-rst.panel-important .panel-progress .panel-progress-bar,.panel-rst.panel-info .panel-progress .panel-progress-bar,.panel-version.panel-important .panel-progress .panel-progress-bar,.panel-version.panel-info .panel-progress .panel-progress-bar{background-color:#6daae0}.panel-flat .panel-heading,.panel-rst .panel-heading,.panel-version .panel-heading{position:relative}.panel-flat .panel-heading a.link-action,.panel-rst .panel-heading a.link-action,.panel-version .panel-heading a.link-action{cursor:pointer}.panel-flat .panel-heading strong,.panel-rst .panel-heading strong,.panel-version .panel-heading strong{line-height:1.5em}.panel-flat pre,.panel-rst pre,.panel-version pre{margin:0;border-radius:0;border:0;border-top:1px solid #d7d7d7;white-space:pre-wrap;word-break:normal;word-wrap:normal}.upgrade_analysis_item_to_filter pre a{text-decoration:underline}#phpinfo table{width:100%;table-layout:fixed;word-wrap:break-word}
\ No newline at end of file
+@charset "UTF-8";hr,img{border:0}.fa-ul,.gridder{list-style-type:none}.fa-ul>li,sub,sup{position:relative}.fa-fw,.fa-li{text-align:center}.img-responsive,.img-thumbnail,.table,label{max-width:100%}.btn,.modulemenu .modulemenu-group-header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}.fa,.fa-stack{display:inline-block}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.open>.btn-danger.dropdown-toggle,.open>.btn-default.dropdown-toggle,.open>.btn-info.dropdown-toggle,.open>.btn-success.dropdown-toggle,.open>.btn-warning.dropdown-toggle{background-image:none}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}td,th{padding:0}@font-face{font-family:FontAwesome;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?v=4.7.0);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff2?v=4.7.0) format("woff2"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff?v=4.7.0) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.ttf?v=4.7.0) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-stack,img{vertical-align:middle}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em}.fa-ul{padding-left:0;margin-left:2.14285714em}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bold-webfont.svg#Share-BoldRegular) format("svg");font-weight:700;font-style:normal}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-italic-webfont.svg#Share-ItalicRegular) format("svg");font-weight:400;font-style:italic}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-regular-webfont.svg#Share-Regular) format("svg");font-weight:400;font-style:normal}@font-face{font-family:Share;src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.eot);src:url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.eot?#iefix) format("embedded-opentype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.woff) format("woff"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.ttf) format("truetype"),url(../../../../../../typo3/sysext/backend/Resources/Public/Fonts/Share/share-bolditalic-webfont.svg#Share-BoldItalicRegular) format("svg");font-weight:700;font-style:italic}*,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;line-height:1.5;color:#000;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{background-color:transparent;color:#212424;text-decoration:none}a:focus,a:hover{color:#000;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}figure{margin:0}.img-responsive{display:block;height:auto}.img-rounded{border-radius:2px}.img-thumbnail{padding:4px;line-height:1.5;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;height:auto}.img-circle{border-radius:50%}hr{margin-top:18px;margin-bottom:18px;border-top:1px solid #7a7a7a}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#737373}.h1,.h2,.h3,h1,h2,h3{margin-top:18px;margin-bottom:9px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:9px;margin-bottom:9px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:27px}.h2,h2{font-size:19px}.h3,h3{font-size:17px}.h4,h4{font-size:15px}.h5,h5{font-size:12px}.h6,h6{font-size:11px}p{margin:0 0 9px}.lead{margin-bottom:18px;font-size:13px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}@media (min-width:768px){.lead{font-size:18px}}.small,small{font-size:91%}.mark,mark{background-color:#fbefdd;padding:.2em}.list-inline,.list-unstyled,.modulemenu .modulemenu-group-container{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#737373}.text-primary{color:#0078e6}a.text-primary:focus,a.text-primary:hover{color:#005db3}.text-success{color:#79a548}a.text-success:focus,a.text-success:hover{color:#5f8139}.text-info{color:#6daae0}a.text-info:focus,a.text-info:hover{color:#4392d7}.text-warning{color:#e8a33d}a.text-warning:focus,a.text-warning:hover{color:#d88b1a}.text-danger{color:#c83c3c}a.text-danger:focus,a.text-danger:hover{color:#a32e2e}.bg-primary{color:#fff;background-color:#0078e6}a.bg-primary:focus,a.bg-primary:hover{background-color:#005db3}.bg-success{background-color:#d1e2bd}a.bg-success:focus,a.bg-success:hover{background-color:#b8d39a}.bg-info{background-color:#ebf3fb}a.bg-info:focus,a.bg-info:hover{background-color:#c1dbf2}.bg-warning{background-color:#fbefdd}a.bg-warning:focus,a.bg-warning:hover{background-color:#f6d9af}.bg-danger{background-color:#efc7c7}a.bg-danger:focus,a.bg-danger:hover{background-color:#e49f9f}.page-header{padding-bottom:8px;margin:36px 0 18px;border-bottom:1px solid #f5f5f5}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:18px}ol,ul{margin-bottom:9px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd,dt{line-height:1.5}dd{margin-left:0}.dl-horizontal dd:after{content:"";display:table;clear:both}@media (min-width:992px){.dl-horizontal dt{float:left;width:70px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:90px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #d7d7d7}.initialism{font-size:90%}blockquote{padding:9px 18px;margin:0 0 18px;font-size:15px;border-left:5px solid #f5f5f5}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.5;color:#d7d7d7}legend,pre{color:#5a5a5a}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #f5f5f5;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%;border-radius:2px}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{font-style:normal;line-height:1.5}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4}kbd{color:#fff;background-color:#333;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{display:block;padding:8.5px;margin:0 0 9px;font-size:11px;line-height:1.5;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:2px}.container-fluid:after,.container:after,.row:after{display:table;content:"";clear:both}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{max-height:340px;overflow-y:scroll}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-1{width:8.33333333%}.col-xs-2{width:16.66666667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333%}.col-xs-5{width:41.66666667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333333%}.col-xs-8{width:66.66666667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333%}.col-xs-11{width:91.66666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333333%}.col-xs-push-2{left:16.66666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333333%}.col-xs-push-5{left:41.66666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333333%}.col-xs-push-8{left:66.66666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333333%}.col-xs-push-11{left:91.66666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-12{margin-left:100%}}table{border-collapse:collapse;border-spacing:0;background-color:#fafafa}caption{padding-top:6px;padding-bottom:6px;color:#737373}.table{width:100%;margin-bottom:18px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:6px;line-height:1.5;vertical-align:top;border-top:1px solid #ccc}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ccc}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ccc}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:6px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ccc}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f7f7f7}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#ededed}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.dropdown-menu{float:left}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e1e0e0}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#d1e2bd}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#c4dbab}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#ebf3fb}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#d6e7f6}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fbefdd}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#f8e4c6}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#efc7c7}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#eab3b3}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:13.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ccc}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.carousel-inner,.collapsing,.dropdown-menu .divider,.embed-responsive,.modal,.modal-open,.nav .nav-divider,.progress,html{overflow:hidden}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{display:block;width:100%;margin-bottom:18px;font-size:18px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:12px;line-height:1.5;color:#333;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:32px;padding:6px;background-color:#fefefe;border:1px solid #bbb;border-radius:2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#aaa;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(170,170,170,.6)}.form-control::-moz-placeholder{color:#d7d7d7;opacity:1}.form-control:-ms-input-placeholder{color:#d7d7d7}.form-control::-webkit-input-placeholder{color:#d7d7d7}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#79a548}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#f5f5f5;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:32px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:26px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:41.2px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:18px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:30px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:26px;padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:26px;line-height:26px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:26px;padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.form-group-sm select.form-control{height:26px;line-height:26px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:26px;min-height:29px;padding:5px 4px;font-size:11px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:41.2px;padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:41.2px;line-height:41.2px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:41.2px;padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.form-group-lg select.form-control{height:41.2px;line-height:41.2px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:41.2px;min-height:33px;padding:13px 12px;font-size:15px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:32px;height:32px;line-height:32px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:41.2px;height:41.2px;line-height:41.2px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:26px;height:26px;line-height:26px}.has-success .form-control{border-color:#79a548;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#5f8139;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #abcb88}.has-success .input-group-addon{color:#79a548;border-color:#79a548;background-color:#d1e2bd}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#e8a33d}.has-warning .form-control{border-color:#e8a33d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#d88b1a;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f3ce98}.has-warning .input-group-addon{color:#e8a33d;border-color:#e8a33d;background-color:#fbefdd}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#c83c3c}.has-error .form-control{border-color:#c83c3c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#a32e2e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #de8c8c}.has-error .input-group-addon{color:#c83c3c;border-color:#c83c3c;background-color:#efc7c7}.has-feedback label~.form-control-feedback{top:23px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#404040}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:25px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after{content:"";display:table;clear:both}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:13px;font-size:15px}.form-horizontal .form-group-sm .control-label{padding-top:5px;font-size:11px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px;font-size:12px;line-height:1.5;border-radius:2px;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#eee;border-color:#bbb}.btn-default.focus,.btn-default:focus{color:#333;background-color:#d5d4d4;border-color:#7b7b7b}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{color:#333;background-color:#d5d4d4;border-color:#9c9c9c}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#333;background-color:#c3c3c3;border-color:#7b7b7b}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#eee;border-color:#bbb}.btn-default .badge{color:#eee;background-color:#333}.btn-primary{color:#fff;background-color:#0078e6;border-color:#006bcd}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#005db3;border-color:#00284d}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#005db3;border-color:#004b8f}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#004b8f;border-color:#00284d}.btn-primary.active,.btn-primary:active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#0078e6;border-color:#006bcd}.btn-primary .badge{color:#0078e6;background-color:#fff}.btn-success{color:#fff;background-color:#79a548;border-color:#6c9340}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#5f8139;border-color:#2b3a1a}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#5f8139;border-color:#4d692e}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#4d692e;border-color:#2b3a1a}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#79a548;border-color:#6c9340}.btn-success .badge{color:#79a548;background-color:#fff}.btn-info{color:#fff;background-color:#6daae0;border-color:#589edc}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#4392d7;border-color:#205e94}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#4392d7;border-color:#2b80cb}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#2b80cb;border-color:#205e94}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#6daae0;border-color:#589edc}.btn-info .badge{color:#6daae0;background-color:#fff}.btn-warning{color:#fff;background-color:#e8a33d;border-color:#e59826}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#d88b1a;border-color:#7d510f}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#d88b1a;border-color:#b87716}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#b87716;border-color:#7d510f}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#e8a33d;border-color:#e59826}.btn-warning .badge{color:#e8a33d;background-color:#fff}.btn-danger{color:#fff;background-color:#c83c3c;border-color:#b73434}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#a32e2e;border-color:#531818}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#a32e2e;border-color:#872626}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#872626;border-color:#531818}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c83c3c;border-color:#b73434}.btn-danger .badge{color:#c83c3c;background-color:#fff}.btn-link{color:#212424;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#000;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#d7d7d7;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:12px;font-size:15px;line-height:1.3333333;border-radius:2px}.btn-group-sm>.btn,.btn-sm{padding:4px;font-size:11px;line-height:1.5;border-radius:2px}.btn-group-xs>.btn,.btn-xs{padding:2px 4px;font-size:11px;line-height:1.5;border-radius:2px}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-block{display:block}.btn-block+.btn-block{margin-top:5px}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid\9}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;list-style:none;font-size:12px;text-align:left;background-color:#292929;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.5;white-space:nowrap}.dropdown-menu .divider{height:1px;margin:8px 0;background-color:#424242}.dropdown-menu>li>a{clear:both;font-weight:400;color:#fff}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#fff;background-color:#424242}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#424242}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#d7d7d7}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:11px;color:#d7d7d7}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:992px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after{content:"";display:table;clear:both}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after{content:"";display:table;clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:2px 2px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 2px 2px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group,.input-group-btn,.input-group-btn>.btn{position:relative}.input-group{display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px;font-size:12px;font-weight:400;line-height:1;color:#333;text-align:center;background-color:#f5f5f5;border:1px solid #bbb;border-radius:2px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:4px;font-size:11px;border-radius:2px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:12px;font-size:15px;border-radius:2px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after{content:"";display:table;clear:both}.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:6px 12px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#f5f5f5}.nav>li.disabled>a{color:#d7d7d7}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#5a5a5a;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#f5f5f5;border-color:#212424}.nav .nav-divider{height:1px;margin:8px 0;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ccc}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.5;border:1px solid transparent;border-radius:2px 2px 0 0}.nav-tabs>li>a:hover{border-color:#d7d7d7 #d7d7d7 #ccc}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#000;background-color:#ededed;border:1px solid #ccc;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li,.nav-tabs.nav-justified>li{float:none}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#0078e6}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.btn .badge,.btn .label{top:-1px;position:relative}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:2px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ccc}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ccc;border-radius:2px 2px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#ccc}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.pagination{display:inline-block;padding-left:0;margin:18px 0;border-radius:2px}.label,.pagination>li{display:inline}.alert,.thumbnail{margin-bottom:18px}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px;line-height:1.5;text-decoration:none;color:#212424;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span,.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span,.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span,.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#000;background-color:#f5f5f5;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#0078e6;border-color:#0078e6;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#d7d7d7;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:12px;font-size:15px;line-height:1.3333333}.pagination-sm>li>a,.pagination-sm>li>span{padding:4px;font-size:11px;line-height:1.5}.badge,.label{color:#fff;line-height:1;white-space:nowrap;font-weight:700}.label{padding:.2em .6em .3em;font-size:75%;text-align:center;vertical-align:baseline;border-radius:.25em}.badge,.progress-bar{font-size:11px;text-align:center}.label:empty{display:none}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#d7d7d7}.label-default[href]:focus,.label-default[href]:hover{background-color:#bebdbd}.label-primary{background-color:#0078e6}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#005db3}.label-success{background-color:#79a548}.label-success[href]:focus,.label-success[href]:hover{background-color:#5f8139}.label-info{background-color:#6daae0}.label-info[href]:focus,.label-info[href]:hover{background-color:#4392d7}.label-warning{background-color:#e8a33d}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#d88b1a}.label-danger{background-color:#c83c3c}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#a32e2e}.badge{display:inline-block;min-width:10px;padding:3px 7px;vertical-align:middle;background-color:#737373;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#212424;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.thumbnail{padding:4px;line-height:1.5;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#000}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#212424}.alert{padding:11px;border:1px solid transparent;border-radius:2px}.alert-danger,.alert-info,.alert-success,.alert-warning{border-color:transparent}.alert-danger hr,.alert-info hr,.alert-success hr,.alert-warning hr{border-top-color:transparent}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:31px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{background-color:#79a548;color:#fff}.alert-success .alert-link{color:#e6e5e5}.alert-info{background-color:#6daae0;color:#fff}.alert-info .alert-link{color:#e6e5e5}.alert-warning{background-color:#e8a33d;color:#fff}.alert-warning .alert-link{color:#e6e5e5}.alert-danger{background-color:#c83c3c;color:#fff}.alert-danger .alert-link{color:#e6e5e5}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:18px;margin-bottom:18px;background-color:#dedede;border-radius:2px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;line-height:18px;color:#fff;background-color:#0078e6;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#79a548}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#6daae0}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#e8a33d}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#c83c3c}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media-heading,.media:first-child,.panel-title{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#f5f5f5;color:#d7d7d7;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#d7d7d7}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#0078e6;border-color:#0078e6}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#b3dbff}.list-group-item-success{color:#79a548;background-color:#d1e2bd}a.list-group-item-success,button.list-group-item-success{color:#79a548}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#79a548;background-color:#c4dbab}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#79a548;border-color:#79a548}.list-group-item-info{color:#6daae0;background-color:#ebf3fb}a.list-group-item-info,button.list-group-item-info{color:#6daae0}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#6daae0;background-color:#d6e7f6}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#6daae0;border-color:#6daae0}.list-group-item-warning{color:#e8a33d;background-color:#fbefdd}a.list-group-item-warning,button.list-group-item-warning{color:#e8a33d}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#e8a33d;background-color:#f8e4c6}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#e8a33d;border-color:#e8a33d}.list-group-item-danger{color:#c83c3c;background-color:#efc7c7}a.list-group-item-danger,button.list-group-item-danger{color:#c83c3c}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#c83c3c;background-color:#eab3b3}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#c83c3c;border-color:#c83c3c}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:18px;background-color:#fff;border:1px solid transparent;border-radius:2px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-body:after{content:"";display:table;clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:1px;border-top-left-radius:1px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:1px;border-bottom-right-radius:1px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:1px;border-top-left-radius:1px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:1px;border-top-left-radius:1px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:1px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:1px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ccc}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:18px}.panel-group .panel{margin-bottom:0;border-radius:2px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ccc}.panel-default>.panel-heading{color:#5a5a5a;background-color:#ddd;border-color:#ccc}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ccc}.panel-default>.panel-heading .badge{color:#ddd;background-color:#5a5a5a}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ccc}.panel-primary{border-color:#0078e6}.panel-primary>.panel-heading{color:#fff;background-color:#0078e6;border-color:#0078e6}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#0078e6}.panel-primary>.panel-heading .badge{color:#0078e6;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#0078e6}.panel-success{border-color:#79a548}.panel-success>.panel-heading{color:#79a548;background-color:#d1e2bd;border-color:#79a548}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#79a548}.panel-success>.panel-heading .badge{color:#d1e2bd;background-color:#79a548}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#79a548}.panel-info{border-color:#6daae0}.panel-info>.panel-heading{color:#6daae0;background-color:#ebf3fb;border-color:#6daae0}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#6daae0}.panel-info>.panel-heading .badge{color:#ebf3fb;background-color:#6daae0}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#6daae0}.panel-warning{border-color:#e8a33d}.panel-warning>.panel-heading{color:#e8a33d;background-color:#fbefdd;border-color:#e8a33d}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#e8a33d}.panel-warning>.panel-heading .badge{color:#fbefdd;background-color:#e8a33d}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#e8a33d}.panel-danger{border-color:#c83c3c}.panel-danger>.panel-heading{color:#c83c3c;background-color:#efc7c7;border-color:#c83c3c}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#c83c3c}.panel-danger>.panel-heading .badge{color:#efc7c7;background-color:#c83c3c}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#c83c3c}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#fafafa;border:1px solid #ccc;border-radius:2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well-lg,.well-sm{border-radius:2px}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px}.well-sm{padding:9px}.close{float:right;font-size:18px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{font-family:Verdana,Arial,Helvetica,sans-serif;letter-spacing:normal;line-break:auto;line-height:1.5;text-shadow:none;text-transform:none;word-break:normal;word-spacing:normal;word-wrap:normal;font-weight:400;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal{display:none;position:fixed;z-index:5000;-webkit-overflow-scrolling:touch;outline:0}.modal-footer:after,.modal-header:after{display:table;clear:both;content:""}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:2px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.5}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-style:normal;text-align:left;text-align:start;white-space:normal;font-size:12px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:2px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:12px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:1px 1px 0 0}.popover>.arrow,.popover>.arrow:after,.tooltip-arrow{position:absolute;width:0;height:0;border-style:solid}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{display:block;border-color:transparent}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:" ";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.tooltip{position:absolute;z-index:1070;display:block;font-style:normal;text-align:left;text-align:start;white-space:normal;font-size:11px;opacity:0;filter:alpha(opacity=0)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.chosen-container-multi .chosen-choices li.search-choice span,.diff-item-result{word-wrap:break-word}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.tooltip.top{margin-top:-3px;padding:3px 0}.tooltip.right{margin-left:3px;padding:0 3px}.tooltip.bottom{margin-top:3px;padding:3px 0}.tooltip.left{margin-left:-3px;padding:0 3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#333;border-radius:2px}.tooltip-arrow{border-color:transparent}.carousel,.carousel-inner{position:relative}.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{border-width:3px 3px 0;border-top-color:#333;bottom:0}.tooltip.top .tooltip-arrow{left:50%;margin-left:-3px}.tooltip.top-left .tooltip-arrow{right:3px;margin-bottom:-3px}.tooltip.top-right .tooltip-arrow{left:3px;margin-bottom:-3px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-3px;border-width:3px 3px 3px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-3px;border-width:3px 0 3px 3px;border-left-color:#333}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 3px 3px;border-bottom-color:#333;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-3px}.tooltip.bottom-left .tooltip-arrow{right:3px;margin-top:-3px}.tooltip.bottom-right .tooltip-arrow{left:3px;margin-top:-3px}.carousel-inner{width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;background-color:transparent}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}body,html{height:100%}body{overflow:auto}.scaffold{background-color:#f5f5f5;color:#333;position:relative;padding-top:45px;height:100vh}.scaffold-topbar{background-color:#151515;color:#f5f5f5;height:45px;position:fixed;top:0;right:0;left:0}.scaffold-modulemenu,.scaffold-toolbar{background-color:#292929;z-index:1000;position:fixed;top:45px;left:0;bottom:0}.scaffold-modulemenu{color:#f5f5f5;width:40px;max-width:100%;overflow:hidden}.scaffold-modulemenu a{color:rgba(245,245,245,.7)}.scaffold-modulemenu .active>a,.scaffold-modulemenu a:hover{color:#f5f5f5}.scaffold-toolbar{overflow:auto;color:#f5f5f5;right:0;display:none}.scaffold-toolbar .dropdown-menu a,.scaffold-toolbar a{color:rgba(245,245,245,.7)}.scaffold-toolbar .active>a,.scaffold-toolbar .dropdown-menu a:focus,.scaffold-toolbar .dropdown-menu a:hover,.scaffold-toolbar a:focus,.scaffold-toolbar a:hover{color:#f5f5f5}@media (min-width:992px){.scaffold-toolbar{overflow:visible;background-color:transparent;height:45px;top:0;left:auto;bottom:auto;display:block}}.scaffold-content{position:fixed!important;top:45px;left:0;right:0;bottom:0}@media (max-width:991px){.scaffold-search-expanded .scaffold-toolbar,.scaffold-toolbar-expanded .scaffold-toolbar{display:block}.scaffold-content{left:0!important}}.scaffold-content-module-iframe,.scaffold-content-navigation-iframe{display:block;border:none;height:100%;width:100%}.scaffold-content-navigation{display:none;position:absolute!important;left:0;top:0;bottom:0;width:300px}.scaffold-content-navigation-component{position:absolute;top:0;bottom:0;left:0;right:0}.scaffold-content-navigation-component #typo3-pagetree-treeContainer>div>.x-panel-body{overflow:auto}.scaffold-content-module{position:absolute!important;top:0;left:0;bottom:0;right:0}@media (max-width:767px){.scaffold-content-module{width:100%}}.scaffold-content-overlay{display:none;position:absolute;z-index:1040;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.65)}.scaffold-modulemenu-expanded .scaffold-content-overlay{display:block}@media (min-width:992px){.scaffold-modulemenu-expanded .scaffold-content-overlay{display:none}.scaffold{padding-left:40px}}.scaffold .scaffold-modulemenu{width:40px}@media (max-width:991px){.scaffold .scaffold-modulemenu{display:none}.scaffold-modulemenu-expanded .scaffold-modulemenu{display:block}}.scaffold-modulemenu-expanded{display:block;padding-left:230px}.scaffold-modulemenu-expanded .scaffold-modulemenu{width:230px}.scaffold-modulemenu-expanded .scaffold-content{-webkit-transform:translate(230px,0);transform:translate(230px,0)}.scaffold-content-navigation-expanded .scaffold-content-navigation{display:block}.scaffold-content-navigation-expanded .scaffold-content-module{left:300px}@media (min-width:992px){.scaffold .scaffold-content{left:40px}.scaffold-modulemenu-expanded .scaffold-content{left:230px;-webkit-transform:none;transform:none}}.topbar{background-color:inherit;position:relative;height:45px}.topbar a{color:inherit;text-decoration:none}.topbar-button{position:absolute;top:0;display:inline-block;border:0;background-color:#151515;height:45px;width:40px}.topbar-button:focus,.topbar-button:hover{background-color:#1d1d1d}.scaffold-content-navigation-expanded .topbar-button-navigationcomponent,.scaffold-modulemenu-expanded .topbar-button.topbar-button-modulemenu,.scaffold-search-expanded .topbar-button-search,.scaffold-toolbar-expanded .topbar-button-toolbar{background-color:#292929}.topbar-button[disabled],.topbar-button[disabled]:focus,.topbar-button[disabled]:hover{background-color:#292929;cursor:not-allowed;opacity:.5}.topbar-button.topbar-button-modulemenu{left:0}.topbar-button.topbar-button-navigationcomponent{left:40px}.topbar-button.topbar-button-toolbar{right:40px}.topbar-button.topbar-button-search{right:0}@media (max-width:991px){.scaffold-search-expanded .toolbar-item,.scaffold-toolbar-expanded .toolbar-item-search{display:none}.scaffold-search-expanded .toolbar-item-search{display:block;width:100%}.topbar-header{padding-right:80px!important}}.topbar-button-search,.topbar-button-toolbar{display:block}@media (min-width:992px){.topbar-button.topbar-button-modulemenu{background-color:#292929}.topbar-button-search,.topbar-button-toolbar{display:none}}.topbar-header{padding-left:80px}.topbar-header-site{overflow:hidden;position:relative;max-width:100%;height:45px;line-height:45px;padding-left:1em;padding-right:1em;white-space:nowrap}.topbar-header-site:after,.topbar-header-site:before{display:block;content:'';position:absolute;top:0;bottom:0;width:1em}.topbar-header-site:before{right:0;background:#151515}.topbar-header-site:after{right:1em;background:-webkit-linear-gradient(left,rgba(21,21,21,0) 0,#151515 100%);background:linear-gradient(to right,rgba(21,21,21,0) 0,#151515 100%)}.typo3-in-workspace .topbar-header-site{background-color:#6d860d}.typo3-in-workspace .topbar-header-site:before{background:#6d860d}.typo3-in-workspace .topbar-header-site:after{background:-webkit-linear-gradient(left,rgba(109,134,13,0) 0,#6d860d 100%);background:linear-gradient(to right,rgba(109,134,13,0) 0,#6d860d 100%)}.topbar-header-site-logo{height:45px;display:none;padding-right:.5em}@media (min-width:320px){.topbar-header-site-logo{display:inline-block}}.topbar-header-site-title{line-height:1.2em;display:inline-block;vertical-align:middle}.topbar-header-site-name{display:block}.toolbar-list:after,.toolbar:after{display:table;content:'';clear:both}.topbar-header-site-version{opacity:.5}.toolbar{padding:8px}.toolbar-list{list-style:none;padding:0;margin:0}@media (min-width:992px){.toolbar{padding:0;background-color:#151515}.toolbar-list li:last-child{width:300px}}.toolbar-item{padding:4px;position:relative;display:block;float:left;width:100%}@media (min-width:600px){.toolbar-item{width:50%}}@media (min-width:750px){.toolbar-item{width:33.33%}}@media (min-width:992px){.toolbar-item{padding:0;width:auto;margin-left:1px}}.toolbar-item .dropdown-menu{width:350px}.toolbar-item .dropdown-menu .text-muted{color:#8c8c8c}.toolbar-item .dropdown-menu a:focus .text-muted,.toolbar-item .dropdown-menu a:hover .text-muted{color:#a6a6a6}@media (max-width:991px){.toolbar-item .dropdown-menu{overflow:auto;padding:15px;position:fixed;max-height:90%;max-width:90%;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.toolbar-item .dropdown-backdrop{background:rgba(0,0,0,.65)}}.toolbar-item-avatar{width:28px;margin-right:2px;display:inline-block}.toolbar-item-avatar .avatar{position:absolute;top:50%;left:10px;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.toolbar-item-avatar .avatar,.toolbar-item-avatar .avatar-image{height:28px;width:28px}.toolbar-item-badge{position:absolute;bottom:4px;right:4px;padding:3px 4px;border-radius:0;font-size:10px;font-weight:400;min-width:16px}.toolbar-item-link{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid rgba(0,0,0,.5);position:relative;display:block;text-decoration:none;padding:9px 10px;height:45px;line-height:27px}.toolbar-item-link:focus,.toolbar-item-link:hover{text-decoration:none}.open .toolbar-item-link{background-color:#292929}.toolbar-item-search form{padding:0;margin:0}.toolbar-item-search .toolbar-item-link{padding:0;margin:0;height:0}.toolbar-item-search .form-group{margin:0}.toolbar-item-search .close{color:#fff;text-shadow:none;opacity:1}@media (max-width:991px){.toolbar-item-search .dropdown-menu{top:114px;left:14px;right:14px;width:auto;max-width:none;max-height:none;-webkit-transform:none;transform:none;bottom:14px}}@media (min-width:992px){.toolbar-item-link{border:none}.toolbar-item-title{display:none}.toolbar-item-search .dropdown-menu{left:auto;right:0}}.toolbar-item-search .autocomplete-suggestions{position:static!important}.toolbar-item-search .autocomplete-suggestion{border:none}.toolbar-item-search.open .toolbar-item-search-form{position:relative;z-index:991}.toolbar-item-search-field{color:inherit;background-color:#2f2f2f;margin:0;border-radius:0;border:1px solid rgba(0,0,0,.5);height:45px;box-shadow:none}@media (min-width:992px){.toolbar-item-search-field{border:none}}.toolbar-item-search-field:hover{background-color:#333}.toolbar-item-search-field:focus{box-shadow:none;background-color:#555}.module-wrapper{position:relative}.module-wrapper iframe{border:none}.modulemenu .modulemenu-group-container{clear:both}.modulemenu .modulemenu-group{position:relative;padding:5px 0;border-bottom:1px solid rgba(0,0,0,.2)}.modulemenu .modulemenu-group-header,.modulemenu .modulemenu-item-link{position:relative;display:block;cursor:pointer;padding:2px 4px;text-decoration:none}.modulemenu .modulemenu-group-header{user-select:none;text-transform:uppercase}.modulemenu .modulemenu-item-link:focus,.modulemenu .modulemenu-item-link:hover{outline:0;background-color:rgba(0,0,0,.1)}.modulemenu .modulemenu-item.active .modulemenu-item-link{background-color:rgba(0,0,0,.15)}.modulemenu .modulemenu-icon{float:left;margin-right:4px}.modulemenu .modulemenu-icon .fa{font-size:.5em}.modulemenu .modulemenu-group-title,.modulemenu .modulemenu-item-title{white-space:nowrap;text-overflow:ellipsis;padding-top:7px;padding-left:4px;display:none;overflow:hidden}.modulemenu .modulemenu-group-title{padding-right:20px}.modulemenu .modulemenu-group-title .caret{-webkit-transform:rotate(90deg);transform:rotate(90deg);position:absolute;top:17px;right:18px}.modulemenu .expanded .modulemenu-group-title .caret{-webkit-transform:rotate(0);transform:rotate(0)}.scaffold-modulemenu-expanded .modulemenu-group-title,.scaffold-modulemenu-expanded .modulemenu-item-title{display:block}.autocomplete{position:relative}.autocomplete-results{z-index:1000;position:absolute;margin:5px 0;top:100%;left:0;border:1px solid #ddd;border-radius:2px;background-color:#fff;overflow:hidden;box-shadow:0 1px 0 0 rgba(0,0,0,.25)}.avatar,.dropdown-list>li{position:relative}.autocomplete-suggestion{border-top:1px solid #ddd}.autocomplete-suggestion:first-child{border-top:none}.autocomplete-suggestion-link{padding:5px 13px 5px 28px;display:block;text-decoration:none}.autocomplete-selected .autocomplete-suggestion-link,.autocomplete-suggestion-link:hover{background-color:#fafafa;text-decoration:none}.autocomplete-info{padding:5px 15px}.dropdown-menu{line-height:1.45em;border:0;margin:0;border-radius:0;color:#fff}.dropdown-menu a{color:inherit;display:block}.dropdown-menu a:focus,.dropdown-menu a:hover{color:inherit;text-decoration:none}.dropdown-menu hr{border-top:1px solid rgba(0,0,0,.35);margin:1.25em -15px}.dropdown-menu>:last-child{margin-bottom:0}.dropdown-menu .form-group{margin-bottom:.75em}.dropdown-menu .form-control{border-color:#aaa;color:inherit;border-radius:0;background-color:#333}.dropdown-menu .form-control:focus{box-shadow:none;border-color:#bbb}.dropdown-menu .btn{border:none;border-radius:0;padding:6px 10px}.dropdown-headline{font-size:1.15em;margin-top:0;margin-bottom:.5em}.dropdown-text a{display:inline-block}div.dropdown-menu{padding:1.5em}.dropdown-list{padding-left:0;list-style:none}.dropdown-list>li+li{margin-top:.5em}.dropdown-list-link{display:block;text-decoration:none}.dropdown-list-link:focus,.dropdown-list-link:hover{text-decoration:none}.dropdown-table{display:table;width:100%}.dropdown-table-row{display:table-row}.dropdown-table-column{display:table-cell;padding-top:.25em;padding-bottom:.25em;vertical-align:middle}.dropdown-table-column-top{vertical-align:top}.avatar,.callout .media-body{vertical-align:middle}.dropdown-table-icon{width:16px;padding-right:.5em}.avatar,.avatar-image{height:32px;width:32px}.dropdown-table-title{white-space:nowrap;padding-right:1.5em}.dropdown-table-title-ellipsis{max-width:230px;overflow:hidden;display:block;white-space:nowrap;text-overflow:ellipsis}.dropdown-table-actions{white-space:nowrap;text-align:right}.dropdown-table-actions-btn{text-align:center;display:inline-block!important;margin-top:-4px;margin-bottom:-4px;padding:4px;vertical-align:middle}.dropdown-table-actions-btn-close:hover,.dropdown-table-actions-btn-edit:hover{background-color:#333}.dropdown-table-actions-btn-delete:hover{background-color:#c83c3c}.avatar{display:inline-block}.avatar-image{display:block;overflow:hidden;border-radius:50%}.avatar-image:after{display:block;content:'';position:absolute;top:0;left:0;height:100%;width:100%;border-radius:50%;border:1px solid rgba(255,255,255,.1)}.avatar-image>img{display:block;width:100%!important;height:auto!important}.avatar-icon{position:absolute;bottom:0;right:0;height:16px;width:16px}.callout{background-color:#f0f0f0;border-left:3px solid #ccc;margin:20px 0;padding:20px;color:#333}.callout .media{margin:0}.callout .media .fa-stack{color:#fff}.callout .media .fa-stack>.fa:first-child{color:#ccc}.callout-icon{margin-top:-2px}.callout-title{font-size:1.3em;margin:0 0 .5em}.callout-body>:last-child{margin-bottom:0}.callout-sm{margin:10px 0;padding:10px}.callout-danger .media,.callout-info .media,.callout-notice .media,.callout-success .media,.callout-warning .media{margin:0}.callout-sm .callout-title{font-size:1em;margin:0}.callout-success{background-color:#d1e2bd;border-color:#79a548;color:#333}.callout-success .media .fa-stack{color:#fff}.callout-success .media .fa-stack>.fa:first-child{color:#79a548}.callout-info{background-color:#ebf3fb;border-color:#6daae0;color:#333}.callout-info .media .fa-stack{color:#fff}.callout-info .media .fa-stack>.fa:first-child{color:#6daae0}.callout-warning{background-color:#fbefdd;border-color:#e8a33d;color:#333}.callout-warning .media .fa-stack{color:#fff}.callout-warning .media .fa-stack>.fa:first-child{color:#e8a33d}.callout-danger{background-color:#efc7c7;border-color:#c83c3c;color:#333}.callout-danger .media .fa-stack{color:#fff}.callout-danger .media .fa-stack>.fa:first-child{color:#c83c3c}.callout-notice{background-color:#f9f9f9;border-color:#a0a0a0;color:#333}.callout-notice .media .fa-stack{color:#fff}.callout-notice .media .fa-stack>.fa:first-child{color:#a0a0a0}.icon{position:relative;display:inline-block;overflow:hidden;white-space:nowrap;vertical-align:-22%}.icon-markup,.icon-overlay{position:absolute;right:0;text-align:center;bottom:0}.icon img,.icon svg{display:block;height:100%;width:100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.icon *{display:block;line-height:inherit}.icon-markup{display:block;top:0;left:0}.icon-overlay{height:68.75%;width:68.75%}.module-docheader,.module-loading-indicator.nprogress-custom-parent{position:fixed;top:0}.icon-color{fill:currentColor}.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)}}.icon-state-disabled .icon-markup{opacity:.5}.icon-size-small{height:16px;width:16px;line-height:16px}.icon-size-small .icon-unify{line-height:16px;font-size:14px}.icon-size-small .icon-overlay .icon-unify{line-height:10px;font-size:9px}.icon-size-default{height:32px;width:32px;line-height:32px}.icon-size-default .icon-unify{line-height:32px;font-size:28px}.icon-size-default .icon-overlay .icon-unify{line-height:20px;font-size:18px}.icon-size-large{height:48px;width:48px;line-height:48px}.icon-size-large .icon-unify{line-height:48px;font-size:42px}.icon-size-large .icon-overlay .icon-unify{line-height:30px;font-size:26px}.icon-actions-edit-copy-release,.icon-actions-edit-cut-release,.icon-status-dialog-error,.icon-status-status-current,.icon-status-status-permission-denied{color:#c83c3c}.icon-status-status-sorting-light-asc,.icon-status-status-sorting-light-desc{color:#fff}.icon-status-status-sorting-asc,.icon-status-status-sorting-desc{color:#737373}.icon-status-dialog-information{color:#6daae0}.icon-status-dialog-ok,.icon-status-status-permission-granted{color:#79a548}.icon-status-dialog-notification{color:#333}.icon-status-dialog-warning{color:#e8a33d}.diff{background-color:#fff;border:1px solid #ccc;display:table}.diff-item{display:table-row}.diff-item+.diff-item{border-top:1px solid #ccc}.diff-item-result,.diff-item-title{padding:10px;display:table-cell}.diff-item-title{background-color:#fafafa;padding-right:10px;font-style:italic;white-space:nowrap}.diff-item-result{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;width:100%;white-space:pre;word-break:break-all}.diff-item-result del{color:#c80c05;background-color:#fff6f6;text-decoration:none}.diff-item-result ins{color:#44a512;background-color:#ebfce3;text-decoration:none}.diff-item-result.diff-item-result-inline{white-space:normal}.module{min-height:100%;width:100%;background-color:#fff;color:inherit}.module-dark{background-color:#333;color:#ccc}.module-loading-indicator{min-height:5px;width:100%;z-index:999999}.module-docheader{width:100%;left:0;min-height:65px;z-index:300;background-color:#eee;border-bottom:1px solid #c3c3c3;padding:0 24px;-webkit-transition:margin-top .3s ease-in-out;transition:margin-top .3s ease-in-out}.module-docheader .module-docheader-bar{min-height:26px;margin:4px 0;line-height:26px}.module-docheader .module-docheader-bar.row{margin-left:-15px;margin-right:-15px}.module-docheader .module-docheader-bar label{margin-top:0;margin-bottom:0}.module-docheader .module-docheader-bar .form-inline .form-group{display:table}.module-docheader .module-docheader-bar .form-inline .form-group label{display:table-cell;font-size:11px;font-weight:400;line-height:16px;padding:4px;border-radius:2px 0 0 2px;border:1px solid #bbb;border-right:0;background-color:rgba(0,0,0,.05)}.module-docheader .module-docheader-bar .form-inline .form-group label+select{display:table-cell;border-top-left-radius:0;border-bottom-left-radius:0}.module-docheader .module-docheader-bar .form-group{vertical-align:top;margin:0;display:inline-block}.module-docheader .module-docheader-bar .form-group .form-control{vertical-align:top}.module-docheader .module-docheader-bar .form-inline-spaced{margin:0}.module-docheader .module-docheader-bar .panel{margin:0 -24px;border-left:none;border-right:none;border-bottom:none;border-radius:0;background-color:#fafafa;box-shadow:none}.module-docheader .module-docheader-bar .panel .panel-body{padding:8px 24px}.module-docheader .module-docheader-bar-search{margin-bottom:0}.module-docheader .module-docheader-bar-column-left{float:left}.module-docheader .module-docheader-bar-column-right{float:right}.module-docheader-bar-navigation .module-docheader-bar-column-left{white-space:nowrap}@media (max-width:768px){.module-docheader .module-docheader-bar .text-right{text-align:left}.module-docheader-bar-navigation .module-docheader-bar-column-left{white-space:normal}}.module-docheader-bar-navigation .form-group select{width:100%}.module-body{padding:24px}.module-body>.callout:first-child{margin-top:0}.module-body>.container{padding-left:0;padding-right:0}.module-body .container-small{max-width:768px;margin:0 auto}.module-docheader+.module-body{padding-top:89px}.panel{display:block}.panel:focus,.panel:hover{text-decoration:none}.panel-heading a,.panel-heading a:active,.panel-heading a:focus,.panel-heading a:hover{text-decoration:none;color:inherit}.panel-heading-left{float:left}.panel-heading-right{float:right}.panel-title{font-size:12px}.panel-title-icon,.panel-title-name{display:inline-block;vertical-align:middle}.panel-body>:first-child{margin-top:0}.panel-body>:last-child{margin-bottom:0}.panel-body-highlightlinks>p>a{text-decoration:underline}.panel-table td:first-child,.panel-table th:first-child{padding-left:15px}.panel-table td:last-child,.panel-table th:last-child{padding-right:15px}.panel-progress{background-color:#eee;height:3px;position:relative;width:100%}.panel-progress .panel-progress-bar{display:block;height:100%;background-color:#444}.panel-active{border-color:#444}.panel-active>.panel-heading{color:#fff;background-color:#666;border-color:#444}.panel-active>.panel-heading+.panel-collapse>.panel-body{border-top-color:#444}.panel-active>.panel-heading .badge{color:#666;background-color:#fff}.panel-active>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#444}.clearfix:after,.dropdown-list>li:after,.module-docheader .module-docheader-bar:after,.module-docheader:after,.modulemenu .modulemenu-group-header:after,.modulemenu .modulemenu-item-link:after,.panel-heading:after{content:"";display:table;clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chosen-container *{box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15);clip:rect(0,0,0,0)}.chosen-container.chosen-with-drop .chosen-drop{clip:auto}.chosen-container a{cursor:pointer}.chosen-container .chosen-single .group-name,.chosen-container .search-choice .group-name{margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400;color:#999}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:25px;border:1px solid #aaa;border-radius:2px;background-color:#fff;background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;font-size:1px}.chosen-container-single .chosen-single abbr:hover,.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;font-size:1em;font-family:sans-serif;line-height:normal}.chosen-container-single .chosen-drop{margin-top:-1px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;clip:rect(0,0,0,0)}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#e8a33d;color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto;border:1px solid #aaa;background-color:#fff;cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:0;height:25px;outline:0;border:0!important;background:0 0!important;box-shadow:none;color:#999;font-size:100%;font-family:sans-serif;line-height:normal;width:25px}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 5px 3px 0;padding:4px 20px 4px 5px;max-width:100%;background-color:#e8a33d;background-clip:padding-box;color:#fff;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:5px;display:block;width:12px;height:12px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{text-decoration:none}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:after{content:"";font-family:FontAwesome;padding-left:2px;vertical-align:top;color:#fff}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:none;background:0 0}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close,.chosen-disabled .chosen-single{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:none}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}.gridder{margin:15px -15px;padding:0;font-size:0}.gridder-list,.gridder-show{font-size:12px}.gridder-list{display:inline-block;vertical-align:top;padding-left:15px;padding-right:15px;position:relative;width:100%}.gridder-list.selectedItem:after{position:absolute;border:15px solid transparent;border-bottom-color:#fff;border-top:0;bottom:0;left:50%;margin-left:-7.5px;content:''}.caret:after,.gridder-show,.panel-heading{position:relative}.gridder-list .gridder-item{background-color:#fff;box-shadow:0 2px 0 rgba(0,0,0,.2);border:1px solid #ccc;margin-bottom:30px;padding:10px;min-height:200px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-transition-property:box-shadow,border,-webkit-transform;transition-property:box-shadow,border,-webkit-transform;transition-property:box-shadow,border,transform;transition-property:box-shadow,border,transform,-webkit-transform;cursor:pointer;position:relative}.gridder-list .gridder-item:focus,.gridder-list .gridder-item:hover{text-decoration:none;border:1px solid #b3b2b2;-webkit-transform:translate(0,-1px);transform:translate(0,-1px);box-shadow:0 3px 0 rgba(0,0,0,.3)}.gridder-list .gridder-item .label{padding:3px 6px;font-size:12px;vertical-align:top;border-radius:10px;min-width:28px;display:inline-block}.gridder-show{background-color:#fff;display:block;float:left;width:100%;margin-bottom:15px}.gridder-show .gridder-padding{padding:30px}.gridder-show .gridder-title{border-bottom:1px solid #ccc;margin-bottom:15px}.gridder-content{display:none}@media (min-width:768px){.gridder-list{width:50%}}@media (min-width:992px){.gridder-list{width:25%}}.card{display:-webkit-box;display:-webkit-flex;display:flex;padding:15px;box-shadow:0 2px 0 rgba(0,0,0,.2);border:1px solid #ccc;margin-bottom:20px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-transition-property:box-shadow,border,-webkit-transform;transition-property:box-shadow,border,-webkit-transform;transition-property:box-shadow,border,transform;transition-property:box-shadow,border,transform,-webkit-transform}.card:hover{text-decoration:none;border:1px solid #b3b2b2;-webkit-transform:translate(0,-1px);transform:translate(0,-1px);box-shadow:0 3px 0 rgba(0,0,0,.3)}.card-container{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:10px -10px}.card-container .card{margin-left:10px;margin-right:10px}.card-size-large,.card-size-medium,.card-size-small{width:calc(100% - 20px)}@media (min-width:768px){.card-size-small{width:calc(50% - 20px)}}@media (min-width:992px){.card-size-small{width:calc(25% - 20px)}}@media (min-width:768px){.card-size-medium{width:calc(50% - 20px)}.card-size-large{width:calc(100% - 20px)}}#typo3-docheader{background:#eee}#typo3-docheader img,#typo3-docheader input{cursor:pointer}#typo3-docheader .t3-icon{margin-bottom:3px}.content-area>:last-child,.typo3-message>h4{margin-bottom:0}#typo3-docheader .left{float:left}#typo3-docheader .left .t3-icon{margin-right:6px}#typo3-docheader .right{float:right}#typo3-docheader .right .t3-icon{margin-left:6px}#typo3-docheader .buttongroup{float:left;margin-right:6px}#typo3-docheader .buttongroup .c-inputButton{color:inherit;padding:0}#typo3-docheader .buttongroup input.c-inputButton{text-indent:-1000px}#typo3-docheader select{margin-right:12px}#typo3-docheader a{color:#2d2d2d}#typo3-docheader a:hover{color:#000}#typo3-docheader a.active{color:#c3c3c3}#typo3-docheader a.active span{cursor:default}#typo3-docheader .typo3-docheader-buttons,#typo3-docheader .typo3-docheader-functions{color:#2d2d2d;overflow:hidden;padding:0 24px}#typo3-docheader .typo3-docheader-functions{height:27px;line-height:27px}#typo3-docheader .typo3-docheader-functions select{color:#2d2d2d}#typo3-docheader .typo3-docheader-buttons{height:22px;padding-top:3px;padding-bottom:3px;border-bottom:1px solid #c3c3c3}body.backend .module{background:#f5f5f5}.content-area{padding-bottom:35px}.content-area>h3{margin-top:0}.logo-pageheader img{padding-bottom:3px}img.logo{vertical-align:bottom}.typo3-message p{margin-top:9px}.t3-install-displaytwinimageimages{border:1px solid #ccc;padding:10px}.t3-install-displaytwinimagetextarea pre{border-top:0}.bg-transparent-emulation{padding:10px;text-align:center;background:url(../../../../../../typo3/sysext/install/Resources/Public/Images/bg_transparent_emulation.png)}.bg-transparent-emulation img{max-width:300px}.alert-notice{background-color:#eee;border-color:#bbb;color:#333}.alert-notice hr{border-top-color:#aeaeae}.alert-notice .alert-link{color:#1a1919}.nav-pills>li>a{border-radius:0}h1:first-child{margin-top:0}.typo3-docheader-buttons,.typo3-docheader-functions{min-height:20px}.item{margin:1em;border:1px solid #ddd}.item .item-heading{padding:1em;background-color:#ddd}.item .item-body{padding:1em}.list-group-item a{display:block}.list-group-item.active a{color:#fff}.caret{border:0;padding-left:10px}.caret:after{top:-8px;left:-10px;content:"";font-family:FontAwesome}.collapsed .caret:after{content:"";font-family:FontAwesome}.panel-heading .panel-checkbox{margin:0;position:absolute;left:1em;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.panel-heading .panel-checkbox+.panel-title{padding-left:18px}.panel-heading .message{display:block;padding-left:16px;margin-top:5px}a[data-toggle=collapse]{display:block;text-decoration:none}@media (min-width:992px){.affix-bottom{position:absolute}body.standalone .affix-top{position:relative}.affix,body.backend .affix-top{position:fixed;top:35px}body.backend .leftNavigation{min-height:425px}}hr{border-top-color:#ddd}.copyright .panel-default:last-child{margin-bottom:0}#fixed-footer-handler{height:32px}.fixed{position:fixed;bottom:0;background-color:grey}.fixed .footer-innerWrap{padding:1.5em}@media (max-width:991px){#menuWrapper{position:relative!important;margin-bottom:30px}}#mobileMenuWrapper{margin-bottom:10px}#install-menu-button{float:right;margin-bottom:20px}#install-menu-button .navbar-toggle{border:0;background:#fff}#install-menu-button .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px;background-color:#000}#install-menu-button .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.form-control-clearable{position:relative}.form-control-clearable .form-control{padding-right:2.3em}.form-control-clearable .close{position:absolute;height:16px;z-index:3;top:50%;right:.5em;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.form-control-clearable .close .icon{vertical-align:0}.input-group .form-control-clearable{display:table-cell}.input-group .form-control-clearable .form-control{display:block}.panel-group-flat .panel-body,.panel-group-rst .panel-body{padding-right:0}.panel-flat,.panel-rst,.panel-version{border:0;border-left:2px solid #d7d7d7;border-radius:0;margin:0}.panel-flat.panel-default .panel-heading,.panel-rst.panel-default .panel-heading,.panel-version.panel-default .panel-heading{background:#f5f5f5}.panel-flat.panel-breaking,.panel-flat.panel-danger,.panel-rst.panel-breaking,.panel-rst.panel-danger,.panel-version.panel-breaking,.panel-version.panel-danger{border-color:#c83c3c}.panel-flat.panel-breaking>.panel-heading,.panel-flat.panel-danger>.panel-heading,.panel-rst.panel-breaking>.panel-heading,.panel-rst.panel-danger>.panel-heading,.panel-version.panel-breaking>.panel-heading,.panel-version.panel-danger>.panel-heading{color:#fff;background-color:#c83c3c;border-color:#c83c3c}.panel-flat.panel-breaking>.panel-heading+.panel-collapse>.panel-body,.panel-flat.panel-danger>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-breaking>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-danger>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-breaking>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#c83c3c}.panel-flat.panel-breaking>.panel-heading .badge,.panel-flat.panel-danger>.panel-heading .badge,.panel-rst.panel-breaking>.panel-heading .badge,.panel-rst.panel-danger>.panel-heading .badge,.panel-version.panel-breaking>.panel-heading .badge,.panel-version.panel-danger>.panel-heading .badge{color:#c83c3c;background-color:#fff}.panel-flat.panel-breaking>.panel-footer+.panel-collapse>.panel-body,.panel-flat.panel-danger>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-breaking>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-danger>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-breaking>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#c83c3c}.panel-flat.panel-breaking.risk-high>.panel-heading,.panel-flat.panel-danger.risk-high>.panel-heading,.panel-rst.panel-breaking.risk-high>.panel-heading,.panel-rst.panel-danger.risk-high>.panel-heading,.panel-version.panel-breaking.risk-high>.panel-heading,.panel-version.panel-danger.risk-high>.panel-heading{background:#c83c3c;color:#f5f5f5}.panel-flat.panel-breaking.risk-medium>.panel-heading,.panel-flat.panel-danger.risk-medium>.panel-heading,.panel-rst.panel-breaking.risk-medium>.panel-heading,.panel-rst.panel-danger.risk-medium>.panel-heading,.panel-version.panel-breaking.risk-medium>.panel-heading,.panel-version.panel-danger.risk-medium>.panel-heading{background:#f5dbdb;color:#1e1e1e}.panel-flat.panel-breaking.risk-low>.panel-heading,.panel-flat.panel-danger.risk-low>.panel-heading,.panel-rst.panel-breaking.risk-low>.panel-heading,.panel-rst.panel-danger.risk-low>.panel-heading,.panel-version.panel-breaking.risk-low>.panel-heading,.panel-version.panel-danger.risk-low>.panel-heading{background:#fff;color:#1e1e1e}.panel-flat.panel-breaking .panel-progress .panel-progress-bar,.panel-flat.panel-danger .panel-progress .panel-progress-bar,.panel-rst.panel-breaking .panel-progress .panel-progress-bar,.panel-rst.panel-danger .panel-progress .panel-progress-bar,.panel-version.panel-breaking .panel-progress .panel-progress-bar,.panel-version.panel-danger .panel-progress .panel-progress-bar{background-color:#c83c3c}.panel-flat.panel-deprecation,.panel-flat.panel-warning,.panel-rst.panel-deprecation,.panel-rst.panel-warning,.panel-version.panel-deprecation,.panel-version.panel-warning{border-color:#e8a33d}.panel-flat.panel-deprecation>.panel-heading,.panel-flat.panel-warning>.panel-heading,.panel-rst.panel-deprecation>.panel-heading,.panel-rst.panel-warning>.panel-heading,.panel-version.panel-deprecation>.panel-heading,.panel-version.panel-warning>.panel-heading{color:#fff;background-color:#e8a33d;border-color:#e8a33d}.panel-flat.panel-deprecation>.panel-heading+.panel-collapse>.panel-body,.panel-flat.panel-warning>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-deprecation>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-warning>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-deprecation>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#e8a33d}.panel-flat.panel-deprecation>.panel-heading .badge,.panel-flat.panel-warning>.panel-heading .badge,.panel-rst.panel-deprecation>.panel-heading .badge,.panel-rst.panel-warning>.panel-heading .badge,.panel-version.panel-deprecation>.panel-heading .badge,.panel-version.panel-warning>.panel-heading .badge{color:#e8a33d;background-color:#fff}.panel-flat.panel-deprecation>.panel-footer+.panel-collapse>.panel-body,.panel-flat.panel-warning>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-deprecation>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-warning>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-deprecation>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#e8a33d}.panel-flat.panel-deprecation.risk-high>.panel-heading,.panel-flat.panel-warning.risk-high>.panel-heading,.panel-rst.panel-deprecation.risk-high>.panel-heading,.panel-rst.panel-warning.risk-high>.panel-heading,.panel-version.panel-deprecation.risk-high>.panel-heading,.panel-version.panel-warning.risk-high>.panel-heading{background:#e8a33d;color:#f5f5f5}.panel-flat.panel-deprecation.risk-medium>.panel-heading,.panel-flat.panel-warning.risk-medium>.panel-heading,.panel-rst.panel-deprecation.risk-medium>.panel-heading,.panel-rst.panel-warning.risk-medium>.panel-heading,.panel-version.panel-deprecation.risk-medium>.panel-heading,.panel-version.panel-warning.risk-medium>.panel-heading{background:#f8e4c6;color:#1e1e1e}.panel-flat.panel-deprecation.risk-low>.panel-heading,.panel-flat.panel-warning.risk-low>.panel-heading,.panel-rst.panel-deprecation.risk-low>.panel-heading,.panel-rst.panel-warning.risk-low>.panel-heading,.panel-version.panel-deprecation.risk-low>.panel-heading,.panel-version.panel-warning.risk-low>.panel-heading{background:#fff;color:#1e1e1e}.panel-flat.panel-deprecation .panel-progress .panel-progress-bar,.panel-flat.panel-warning .panel-progress .panel-progress-bar,.panel-rst.panel-deprecation .panel-progress .panel-progress-bar,.panel-rst.panel-warning .panel-progress .panel-progress-bar,.panel-version.panel-deprecation .panel-progress .panel-progress-bar,.panel-version.panel-warning .panel-progress .panel-progress-bar{background-color:#e8a33d}.panel-flat.panel-feature,.panel-flat.panel-success,.panel-rst.panel-feature,.panel-rst.panel-success,.panel-version.panel-feature,.panel-version.panel-success{border-color:#79a548}.panel-flat.panel-feature>.panel-heading,.panel-flat.panel-success>.panel-heading,.panel-rst.panel-feature>.panel-heading,.panel-rst.panel-success>.panel-heading,.panel-version.panel-feature>.panel-heading,.panel-version.panel-success>.panel-heading{color:#fff;background-color:#79a548;border-color:#79a548}.panel-flat.panel-feature>.panel-heading+.panel-collapse>.panel-body,.panel-flat.panel-success>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-feature>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-success>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-feature>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#79a548}.panel-flat.panel-feature>.panel-heading .badge,.panel-flat.panel-success>.panel-heading .badge,.panel-rst.panel-feature>.panel-heading .badge,.panel-rst.panel-success>.panel-heading .badge,.panel-version.panel-feature>.panel-heading .badge,.panel-version.panel-success>.panel-heading .badge{color:#79a548;background-color:#fff}.panel-flat.panel-feature>.panel-footer+.panel-collapse>.panel-body,.panel-flat.panel-success>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-feature>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-success>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-feature>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#79a548}.panel-flat.panel-feature.risk-high>.panel-heading,.panel-flat.panel-success.risk-high>.panel-heading,.panel-rst.panel-feature.risk-high>.panel-heading,.panel-rst.panel-success.risk-high>.panel-heading,.panel-version.panel-feature.risk-high>.panel-heading,.panel-version.panel-success.risk-high>.panel-heading{background:#79a548;color:#f5f5f5}.panel-flat.panel-feature.risk-medium>.panel-heading,.panel-flat.panel-success.risk-medium>.panel-heading,.panel-rst.panel-feature.risk-medium>.panel-heading,.panel-rst.panel-success.risk-medium>.panel-heading,.panel-version.panel-feature.risk-medium>.panel-heading,.panel-version.panel-success.risk-medium>.panel-heading{background:#ddeacf;color:#1e1e1e}.panel-flat.panel-feature.risk-low>.panel-heading,.panel-flat.panel-success.risk-low>.panel-heading,.panel-rst.panel-feature.risk-low>.panel-heading,.panel-rst.panel-success.risk-low>.panel-heading,.panel-version.panel-feature.risk-low>.panel-heading,.panel-version.panel-success.risk-low>.panel-heading{background:#fff;color:#1e1e1e}.panel-flat.panel-feature .panel-progress .panel-progress-bar,.panel-flat.panel-success .panel-progress .panel-progress-bar,.panel-rst.panel-feature .panel-progress .panel-progress-bar,.panel-rst.panel-success .panel-progress .panel-progress-bar,.panel-version.panel-feature .panel-progress .panel-progress-bar,.panel-version.panel-success .panel-progress .panel-progress-bar{background-color:#79a548}.panel-flat.panel-important,.panel-flat.panel-info,.panel-rst.panel-important,.panel-rst.panel-info,.panel-version.panel-important,.panel-version.panel-info{border-color:#6daae0}.panel-flat.panel-important>.panel-heading,.panel-flat.panel-info>.panel-heading,.panel-rst.panel-important>.panel-heading,.panel-rst.panel-info>.panel-heading,.panel-version.panel-important>.panel-heading,.panel-version.panel-info>.panel-heading{color:#fff;background-color:#6daae0;border-color:#6daae0}.panel-flat.panel-important>.panel-heading+.panel-collapse>.panel-body,.panel-flat.panel-info>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-important>.panel-heading+.panel-collapse>.panel-body,.panel-rst.panel-info>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-important>.panel-heading+.panel-collapse>.panel-body,.panel-version.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#6daae0}.panel-flat.panel-important>.panel-heading .badge,.panel-flat.panel-info>.panel-heading .badge,.panel-rst.panel-important>.panel-heading .badge,.panel-rst.panel-info>.panel-heading .badge,.panel-version.panel-important>.panel-heading .badge,.panel-version.panel-info>.panel-heading .badge{color:#6daae0;background-color:#fff}.panel-flat.panel-important>.panel-footer+.panel-collapse>.panel-body,.panel-flat.panel-info>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-important>.panel-footer+.panel-collapse>.panel-body,.panel-rst.panel-info>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-important>.panel-footer+.panel-collapse>.panel-body,.panel-version.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#6daae0}.panel-flat.panel-important.risk-high>.panel-heading,.panel-flat.panel-info.risk-high>.panel-heading,.panel-rst.panel-important.risk-high>.panel-heading,.panel-rst.panel-info.risk-high>.panel-heading,.panel-version.panel-important.risk-high>.panel-heading,.panel-version.panel-info.risk-high>.panel-heading{background:#6daae0;color:#f5f5f5}.panel-flat.panel-important.risk-medium>.panel-heading,.panel-flat.panel-info.risk-medium>.panel-heading,.panel-rst.panel-important.risk-medium>.panel-heading,.panel-rst.panel-info.risk-medium>.panel-heading,.panel-version.panel-important.risk-medium>.panel-heading,.panel-version.panel-info.risk-medium>.panel-heading{background:#ebf3fb;color:#1e1e1e}.panel-flat.panel-important.risk-low>.panel-heading,.panel-flat.panel-info.risk-low>.panel-heading,.panel-rst.panel-important.risk-low>.panel-heading,.panel-rst.panel-info.risk-low>.panel-heading,.panel-version.panel-important.risk-low>.panel-heading,.panel-version.panel-info.risk-low>.panel-heading{background:#fff;color:#1e1e1e}.panel-flat.panel-important .panel-progress .panel-progress-bar,.panel-flat.panel-info .panel-progress .panel-progress-bar,.panel-rst.panel-important .panel-progress .panel-progress-bar,.panel-rst.panel-info .panel-progress .panel-progress-bar,.panel-version.panel-important .panel-progress .panel-progress-bar,.panel-version.panel-info .panel-progress .panel-progress-bar{background-color:#6daae0}.panel-flat .panel-heading,.panel-rst .panel-heading,.panel-version .panel-heading{position:relative}.panel-flat .panel-heading a.link-action,.panel-rst .panel-heading a.link-action,.panel-version .panel-heading a.link-action{cursor:pointer}.panel-flat .panel-heading strong,.panel-rst .panel-heading strong,.panel-version .panel-heading strong{line-height:1.5em}.panel-flat pre,.panel-rst pre,.panel-version pre{margin:0;border-radius:0;border:0;border-top:1px solid #d7d7d7;white-space:pre-wrap;word-break:normal;word-wrap:normal}.upgrade_analysis_item_to_filter pre a{text-decoration:underline}#phpinfo table{width:100%;table-layout:fixed;word-wrap:break-word}
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Public/Icons/module-install-environment.svg b/typo3/sysext/install/Resources/Public/Icons/module-install-environment.svg
new file mode 100644
index 000000000000..c7e201507c7c
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/Icons/module-install-environment.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 595.28 594.708"><path fill="#428954" d="M.945.934H595.28v593.774H.945z"/><path fill="#FFF" d="M469.939 243.072H135.908v-71.578h334.031v71.578zm0 95.437H135.908v-71.578h334.031v71.578zm0 95.438H135.908v-71.578h334.031v71.578zM350.643 219.212v-23.859H159.768v23.859h190.875zm0 95.438v-23.859H159.768v23.859h190.875zm0 95.437v-23.859H159.768v23.859h190.875zm83.507-220.699c-9.879 0-17.895 8.015-17.895 17.895s8.016 17.895 17.895 17.895 17.895-8.015 17.895-17.895-8.016-17.895-17.895-17.895zm0 95.438c-9.879 0-17.895 8.015-17.895 17.895 0 9.879 8.016 17.895 17.895 17.895s17.895-8.016 17.895-17.895c0-9.88-8.016-17.895-17.895-17.895zm0 95.437c-9.879 0-17.895 8.016-17.895 17.895s8.016 17.895 17.895 17.895 17.895-8.016 17.895-17.895-8.016-17.895-17.895-17.895z"/></svg>
diff --git a/typo3/sysext/install/Resources/Public/Icons/module-install-maintenance.svg b/typo3/sysext/install/Resources/Public/Icons/module-install-maintenance.svg
new file mode 100644
index 000000000000..59cbf09f53d4
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/Icons/module-install-maintenance.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 595.28 594.708"><path fill="#D03F38" d="M.011 0h595.27v594.708H.011z"/><path fill="#FFF" d="M209.066 464.474c-4.294 4.294-10.455 6.907-16.802 6.907s-12.508-2.613-16.989-6.907l-19.79-20.163c-4.48-4.293-7.094-10.454-7.094-16.802s2.614-12.509 7.094-16.989l127.137-127.136c9.708 24.457 29.311 44.059 53.768 53.767L209.066 464.474zm-4.854-60.861c-6.534 0-11.948 5.414-11.948 11.948s5.414 11.948 11.948 11.948 11.948-5.414 11.948-11.948-5.414-11.948-11.948-11.948zm246.246-127.884c-11.762 33.231-43.687 56.194-78.971 56.194-46.112 0-83.638-37.525-83.638-83.638s37.525-83.638 83.638-83.638c13.629 0 31.364 4.107 42.752 11.762 1.867 1.307 2.987 2.987 2.987 5.227 0 2.054-1.307 4.107-2.987 5.228l-54.7 31.551v41.819l36.031 19.976c6.161-3.547 49.474-30.804 53.207-30.804 3.734 0 5.975 2.8 5.975 6.534 0 6.161-2.24 13.815-4.294 19.789z"/></svg>
diff --git a/typo3/sysext/install/Resources/Public/Icons/module-install-settings.svg b/typo3/sysext/install/Resources/Public/Icons/module-install-settings.svg
new file mode 100644
index 000000000000..89b884af3913
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/Icons/module-install-settings.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 595.28 594.708"><path fill="#1D588E" d="M0 0h595.279v594.708H0z"/><path fill="#FFF" d="M364.864 318.26c0 2.427-1.867 5.228-4.294 5.601l-28.939 4.481c-1.494 4.854-3.548 9.521-5.975 14.189 5.228 7.468 10.829 14.376 16.804 21.472.746 1.12 1.307 2.24 1.307 3.733 0 1.308-.374 2.614-1.307 3.548-3.734 5.041-24.646 27.819-30.061 27.819-1.493 0-2.801-.561-3.921-1.308l-21.471-16.803c-4.668 2.427-9.335 4.294-14.376 5.787-.934 9.522-1.867 19.791-4.294 28.939-.747 2.614-2.987 4.481-5.601 4.481h-34.728c-2.614 0-5.228-2.054-5.601-4.668l-4.294-28.565c-4.854-1.494-9.522-3.548-14.003-5.788l-22.031 16.616c-.934.934-2.427 1.308-3.734 1.308-1.494 0-2.8-.561-3.92-1.494-4.854-4.48-26.886-24.458-26.886-29.873 0-1.307.56-2.427 1.307-3.547 5.415-7.095 11.016-14.003 16.43-21.285-2.614-5.041-4.854-10.082-6.535-15.31l-28.379-4.48c-2.614-.374-4.481-2.801-4.481-5.415v-34.541c0-2.427 1.867-5.228 4.294-5.601l28.939-4.481c1.494-4.854 3.547-9.522 5.975-14.189-5.228-7.468-10.829-14.376-16.804-21.471-.747-1.12-1.307-2.427-1.307-3.734s.374-2.614 1.307-3.734c3.734-5.041 24.645-27.633 30.06-27.633 1.494 0 2.801.561 3.921 1.307l21.471 16.804c4.668-2.427 9.335-4.294 14.376-5.975.934-9.335 1.867-19.604 4.294-28.753.747-2.614 2.987-4.481 5.601-4.481h34.728c2.614 0 5.228 2.054 5.601 4.667l4.294 28.566c4.854 1.494 9.522 3.547 14.003 5.788l22.032-16.617c1.12-.934 2.427-1.307 3.733-1.307 1.494 0 2.801.561 3.921 1.494 4.854 4.481 26.886 24.646 26.886 29.873 0 1.307-.56 2.427-1.307 3.547-5.414 7.282-11.016 14.003-16.243 21.285 2.427 5.041 4.667 10.083 6.348 15.31l28.38 4.294c2.613.56 4.48 2.987 4.48 5.601v34.543zm-119.492-65.347c-26.326 0-47.797 21.471-47.797 47.797 0 26.325 21.471 47.797 47.797 47.797s47.797-21.472 47.797-47.797c0-26.326-21.471-47.797-47.797-47.797zm238.984-34.728c0 2.801-24.085 5.415-27.819 5.788-1.493 3.547-3.36 6.721-5.602 9.708 1.681 3.734 9.522 22.405 9.522 25.766 0 .56-.187.934-.747 1.307-2.24 1.307-22.218 13.256-23.151 13.256-2.427 0-16.43-18.67-18.297-21.471-1.867.187-3.734.374-5.602.374s-3.734-.187-5.602-.374c-1.867 2.801-15.87 21.471-18.297 21.471-.934 0-20.911-11.949-23.151-13.256-.561-.374-.747-.934-.747-1.307 0-3.174 7.842-22.031 9.522-25.766-2.241-2.987-4.108-6.161-5.602-9.708-3.734-.374-27.819-2.987-27.819-5.788v-26.139c0-2.801 24.085-5.415 27.819-5.788 1.493-3.361 3.36-6.721 5.602-9.708-1.681-3.734-9.522-22.592-9.522-25.766 0-.374.187-.934.747-1.307 2.24-1.12 22.218-13.069 23.151-13.069 2.427 0 16.43 18.484 18.298 21.284 1.866-.187 3.733-.373 5.601-.373s3.734.187 5.602.374c5.228-7.282 10.828-14.563 17.177-20.911l1.12-.374c.934 0 20.911 11.763 23.151 13.069.561.374.747.934.747 1.307 0 3.361-7.842 22.031-9.522 25.766 2.241 2.987 4.108 6.348 5.602 9.708 3.734.374 27.819 2.987 27.819 5.788v26.139zm0 191.188c0 2.801-24.085 5.415-27.819 5.788-1.493 3.548-3.36 6.722-5.602 9.709 1.681 3.733 9.522 22.404 9.522 25.766 0 .56-.187.933-.747 1.307-2.24 1.307-22.218 13.256-23.151 13.256-2.427 0-16.43-18.671-18.297-21.471-1.867.187-3.734.373-5.602.373s-3.734-.187-5.602-.373c-1.867 2.8-15.87 21.471-18.297 21.471-.934 0-20.911-11.949-23.151-13.256-.561-.374-.747-.934-.747-1.307 0-3.175 7.842-22.032 9.522-25.766-2.241-2.987-4.108-6.161-5.602-9.709-3.734-.373-27.819-2.987-27.819-5.788v-26.139c0-2.801 24.085-5.415 27.819-5.788 1.493-3.36 3.36-6.722 5.602-9.709-1.681-3.733-9.522-22.591-9.522-25.766 0-.373.187-.933.747-1.307 2.24-1.12 22.218-13.069 23.151-13.069 2.427 0 16.43 18.484 18.298 21.284 1.866-.187 3.733-.373 5.601-.373s3.734.187 5.602.373c5.228-7.281 10.828-14.562 17.177-20.911l1.12-.373c.934 0 20.911 11.763 23.151 13.069.561.374.747.934.747 1.307 0 3.361-7.842 22.032-9.522 25.766 2.241 2.987 4.108 6.349 5.602 9.709 3.734.373 27.819 2.987 27.819 5.788v26.139zm-71.695-228.156c-13.069 0-23.898 10.829-23.898 23.898 0 13.256 10.829 23.898 23.898 23.898 13.256 0 23.898-10.829 23.898-23.898s-10.829-23.898-23.898-23.898zm0 191.188c-13.069 0-23.898 10.829-23.898 23.898 0 13.256 10.829 23.898 23.898 23.898 13.256 0 23.898-10.829 23.898-23.898s-10.829-23.898-23.898-23.898z"/></svg>
diff --git a/typo3/sysext/install/Resources/Public/Icons/module-install-upgrade.svg b/typo3/sysext/install/Resources/Public/Icons/module-install-upgrade.svg
new file mode 100644
index 000000000000..9c6210a8ffe1
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/Icons/module-install-upgrade.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 595.28 594.708"><path fill="#6C9DCC" d="M.954.934H595.28v593.774H.954z"/><path fill="#FFF" d="M361.234 253.461h-35.789v161.051c0 3.355-2.61 5.965-5.965 5.965H188.253c-2.237 0-4.474-1.305-5.406-3.355-.932-2.236-.746-4.66.746-6.523l29.824-35.789c1.119-1.306 2.982-2.051 4.66-2.051h59.648V253.461h-35.789c-4.66 0-8.761-2.609-10.811-6.897-1.864-4.101-1.305-9.133 1.677-12.675l59.648-71.578c4.474-5.405 13.793-5.405 18.267 0l59.648 71.578c2.982 3.542 3.729 8.575 1.678 12.675-2.048 4.288-6.149 6.897-10.809 6.897z"/></svg>
diff --git a/typo3/sysext/install/Resources/Public/Icons/module-install.svg b/typo3/sysext/install/Resources/Public/Icons/module-install.svg
deleted file mode 100644
index 54ff4d4472e3..000000000000
--- a/typo3/sysext/install/Resources/Public/Icons/module-install.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path fill="#FF8700" d="M0 0h64v64H0z"/><path fill="#FFF" d="M49.535 29.295l-5.457-1.558a12.594 12.594 0 0 0-.517-1.27l2.751-4.953a.642.642 0 0 0-.108-.766l-2.952-2.952a.643.643 0 0 0-.766-.108l-4.953 2.751a12.69 12.69 0 0 0-1.27-.517l-1.558-5.457a.645.645 0 0 0-.62-.465h-4.171c-.288 0-.54.19-.617.465l-1.561 5.459c-.435.154-.859.319-1.27.517l-4.953-2.751a.64.64 0 0 0-.766.108l-2.949 2.949a.64.64 0 0 0-.108.766l2.751 4.953a12.69 12.69 0 0 0-.517 1.27l-5.459 1.558a.647.647 0 0 0-.465.621v4.173c0 .288.19.54.465.617l5.457 1.558c.154.435.319.859.517 1.27l-2.751 4.953a.642.642 0 0 0 .108.766l2.952 2.952a.643.643 0 0 0 .766.108l4.953-2.751c.411.198.836.363 1.27.517l1.558 5.457c.08.275.332.465.62.465h4.173c.288 0 .54-.19.617-.465l1.558-5.457c.435-.154.859-.319 1.27-.517l4.953 2.751a.642.642 0 0 0 .766-.108l2.952-2.952a.643.643 0 0 0 .108-.766l-2.751-4.953c.198-.411.363-.836.517-1.27l5.457-1.558a.645.645 0 0 0 .465-.62v-4.171a.645.645 0 0 0-.465-.619zM32 39.714c-4.261 0-7.714-3.453-7.714-7.714s3.453-7.714 7.714-7.714 7.714 3.453 7.714 7.714-3.453 7.714-7.714 7.714z"/><path fill="#FFF" d="M32 32h24v24H32z"/><path fill="#FF8700" d="M54 34v20H34V34h20m4-4H30v28h28V30z"/><path fill="#FF8700" d="M36 36h16v2H36zM36 40h16v12H36z"/><path fill="#FFF" d="M42.391 49.625a.574.574 0 0 0 .804-.002l5.636-5.636a.563.563 0 0 0-.003-.809l-.798-.798a.574.574 0 0 0-.802-.011l-4.04 4.04a.557.557 0 0 1-.794-.004l-1.618-1.618a.561.561 0 0 0-.805.007l-.798.798a.566.566 0 0 0-.006.807l3.224 3.226z"/></svg>
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Install.js b/typo3/sysext/install/Resources/Public/JavaScript/Install.js
index c4fb737a73de..224e6952db6f 100644
--- a/typo3/sysext/install/Resources/Public/JavaScript/Install.js
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Install.js
@@ -11,1372 +11,10 @@
  * The TYPO3 project - inspiring people to share!
  */
 
-/**
- * Various JavaScript functions for the Install Tool
- */
-
-/**
- * Handle core update
- */
-var TYPO3 = {};
-TYPO3.Install = {};
-
-TYPO3.Install.Severity = {
-	loading: -3,
-	notice: -2,
-	info: -1,
-	ok: 0,
-	warning: 1,
-	error: 2
-};
-
-TYPO3.Install.Severity.getCssClass = function (severity) {
-	var severityClass;
-	switch (severity) {
-		case TYPO3.Install.Severity.loading:
-			severityClass = 'notice alert-loading';
-			break;
-		case TYPO3.Install.Severity.notice:
-			severityClass = 'notice';
-			break;
-		case TYPO3.Install.Severity.ok:
-			severityClass = 'success';
-			break;
-		case TYPO3.Install.Severity.warning:
-			severityClass = 'warning';
-			break;
-		case TYPO3.Install.Severity.error:
-			severityClass = 'danger';
-			break;
-		case TYPO3.Install.Severity.info:
-		default:
-			severityClass = 'info';
-	}
-	return severityClass;
-};
-
-TYPO3.Install.FlashMessage = {
-	template: $('<div class="t3js-message typo3-message alert"><h4></h4><p class="messageText"></p></div>'),
-	render: function (severity, title, message) {
-		var flashMessage = this.template.clone();
-		flashMessage.addClass('alert-' + TYPO3.Install.Severity.getCssClass(severity));
-		if (title) {
-			flashMessage.find('h4').html(title);
-		}
-		if (message) {
-			flashMessage.find('.messageText').html(message);
-		} else {
-			flashMessage.find('.messageText').remove();
-		}
-		return flashMessage;
-	}
-};
-
-TYPO3.Install.DumpAutoload = {
-	/**
-	 * output DOM Container
-	 */
-	outputContainer: {},
-
-	/**
-	 * Clone of the DOM object that contains the submit button
-	 */
-	submitButton: {},
-
-	/**
-	 * Default output messages
-	 */
-	outputMessages: {
-		dumpAutoload: {
-			fatalTitle: 'Something went wrong',
-			fatalMessage: '',
-			loadingTitle: 'Loading...',
-			loadingMessage: ''
-		}
-	},
-
-	/**
-	 * Fetching the templates out of the DOM
-	 *
-	 * @param dumpAutoloadContainer DOM element id with all needed HTML in it
-	 * @return boolean DOM container could be found and initialization finished
-	 */
-	initialize: function(dumpAutoloadContainer) {
-		this.outputContainer[dumpAutoloadContainer] = $('.t3js-' + dumpAutoloadContainer);
-
-		if (this.outputContainer[dumpAutoloadContainer]) {
-			// submit button: save and delete
-			if(!this.submitButton[dumpAutoloadContainer]) {
-				var submitButton = this.outputContainer[dumpAutoloadContainer].find('button[type="submit"]');
-				this.submitButton[dumpAutoloadContainer] = submitButton.clone();
-			}
-
-			// clear all messages from the run before
-			this.outputContainer[dumpAutoloadContainer].find('.typo3-message:visible ').remove();
-
-			return true;
-		}
-		return false;
-	},
-
-	/**
-	 * Ajax call to dump Autoload Information
-	 * @param actionName
-	 */
-	dumpAutoload: function(actionName) {
-		var self = this;
-		var url = location.href + '&install[controller]=ajax&install[action]=' + actionName;
-		var isInitialized = self.initialize(actionName);
-		if (isInitialized) {
-			self.addMessage(
-				TYPO3.Install.Severity.loading,
-				self.outputMessages[actionName].loadingTitle,
-				self.outputMessages[actionName].loadingMessage,
-				actionName
-			);
-			$.ajax({
-				url: url,
-				cache: false,
-				success: function(data) {
-					if (data.success === true && Array.isArray(data.status)) {
-						if (data.status.length > 0) {
-							self.outputContainer[actionName].find('.alert-loading').hide();
-							data.status.forEach((function (element) {
-								//noinspection JSUnresolvedVariable
-								self.addMessage(
-									element.severity,
-									element.title,
-									element.message,
-									actionName
-								);
-							}));
-						} else {
-							self.outputContainer[actionName].find('.alert-loading').hide();
-							self.addMessage(
-								TYPO3.Install.Severity.ok,
-								self.outputMessages[actionName].successTitle,
-								self.outputMessages[actionName].successMessage,
-								actionName
-							);
-						}
-					} else if (data === 'unauthorized') {
-						location.reload();
-					}
-				},
-				error: function() {
-					self.outputContainer[actionName].find('.alert-loading').hide();
-					self.addMessage(
-						TYPO3.Install.Severity.error,
-						self.outputMessages[actionName].fatalTitle,
-						self.outputMessages[actionName].fatalMessage,
-						actionName
-					);
-				}
-			});
-		}
-	},
-
-	/**
-	 * Move the submit button to the end of the box
-	 *
-	 * @param dumpAutoloadContainer DOM container name
-	 */
-	moveSubmitButtonFurtherDown: function(dumpAutoloadContainer) {
-		// first remove the currently visible button
-		this.outputContainer[dumpAutoloadContainer].find('button[type="submit"]').remove();
-		// then append the cloned template to the end
-		this.outputContainer[dumpAutoloadContainer].append(this.submitButton[dumpAutoloadContainer]);
-	},
-
-	/**
-	 * Show a status message
-	 *
-	 * @param severity
-	 * @param title
-	 * @param message
-	 * @param dumpAutoloadContainer DOM container name
-	 */
-	addMessage: function(severity, title, message, dumpAutoloadContainer) {
-		var domMessage = TYPO3.Install.FlashMessage.render(severity, title, message);
-		this.outputContainer[dumpAutoloadContainer].append(domMessage);
-		this.moveSubmitButtonFurtherDown(dumpAutoloadContainer);
-	}
-};
-
-TYPO3.Install.Cache = {
-	/**
-	 * output DOM Container
-	 */
-	outputContainer: {},
-
-	/**
-	 * Clone of the DOM object that contains the submit button
-	 */
-	submitButton: {},
-
-	/**
-	 * Default output messages
-	 */
-	outputMessages: {
-		clearAllCache: {
-			fatalTitle: 'Something went wrong',
-			fatalMessage: '',
-			loadingTitle: 'Loading...',
-			loadingMessage: ''
-		}
-	},
-
-	/**
-	* Fetching the templates out of the DOM
-	*
-	* @param cacheCheckContainer DOM element id with all needed HTML in it
-	* @return boolean DOM container could be found and initialization finished
-	*/
-	initialize: function(cacheCheckContainer) {
-		this.outputContainer[cacheCheckContainer] = $('.t3js-' + cacheCheckContainer)
-
-		if (this.outputContainer[cacheCheckContainer]) {
-			// submit button: save and delete
-			if(!this.submitButton[cacheCheckContainer]) {
-				var submitButton = this.outputContainer[cacheCheckContainer].find('button[type="submit"]');
-				this.submitButton[cacheCheckContainer] = submitButton.clone();
-			}
-
-			// clear all messages from the run before
-			this.outputContainer[cacheCheckContainer].find('.typo3-message:visible ').remove();
-
-			return true;
-		}
-		return false;
-	},
-
-	/**
-	 * Ajax call to clear all caches.
-	 */
-	clearCache: function () {
-		$.ajax({
-			url: location.href + '&install[controller]=ajax&install[action]=clearCache',
-			cache: false
-		});
-	},
-	clearAllCache: function(actionName) {
-		var self = this;
-		var url = location.href + '&install[controller]=ajax&install[action]=' + actionName;
-		var isInitialized = self.initialize(actionName);
-		if (isInitialized) {
-			self.addMessage(
-				TYPO3.Install.Severity.loading,
-				self.outputMessages[actionName].loadingTitle,
-				self.outputMessages[actionName].loadingMessage,
-				actionName
-			);
-			$.ajax({
-				url: url,
-				cache: false,
-				success: function(data) {
-					if (data.success === true && Array.isArray(data.status)) {
-						if (data.status.length > 0) {
-							self.outputContainer[actionName].find('.alert-loading').hide();
-							data.status.forEach((function (element) {
-								//noinspection JSUnresolvedVariable
-								self.addMessage(
-									element.severity,
-									element.title,
-									element.message,
-									actionName
-								);
-							}));
-						} else {
-							self.outputContainer[actionName].find('.alert-loading').hide();
-							self.addMessage(
-								TYPO3.Install.Severity.ok,
-								self.outputMessages[actionName].successTitle,
-								self.outputMessages[actionName].successMessage,
-								actionName
-							);
-						}
-					} else if (data === 'unauthorized') {
-						location.reload();
-					}
-				}
-			});
-		}
-	},
-	/**
-	 * Move the submit button to the end of the box
-	 *
-	 * @param cacheCheckContainer DOM container name
-	 */
-	moveSubmitButtonFurtherDown: function(cacheCheckContainer) {
-		// first remove the currently visible button
-		this.outputContainer[cacheCheckContainer].find('button[type="submit"]').remove();
-		// then append the cloned template to the end
-		this.outputContainer[cacheCheckContainer].append(this.submitButton[cacheCheckContainer]);
-	},
-
-	/**
-	 * Show a status message
-	 *
-	 * @param severity
-	 * @param title
-	 * @param message
-	 * @param cacheCheckContainer DOM container name
-	 */
-	addMessage: function(severity, title, message, cacheCheckContainer) {
-		var domMessage = TYPO3.Install.FlashMessage.render(severity, title, message);
-		this.outputContainer[cacheCheckContainer].append(domMessage);
-		this.moveSubmitButtonFurtherDown(cacheCheckContainer);
-	}
-};
-
-TYPO3.Install.Scrolling = {
-	isScrolledIntoView: function (elem) {
-		var $window = $(window);
-		var docViewTop = $window.scrollTop();
-		var docViewBottom = docViewTop + $window.height();
-		var $elem = $(elem);
-		var elemTop = $elem.offset().top;
-		var elemBottom = elemTop + $elem.height();
-
-		return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
-	},
-	handleButtonScrolling: function () {
-		var $fixedFooterHandler = $('#fixed-footer-handler');
-		if ($fixedFooterHandler.length > 0) {
-			var $fixedFooter = $('#fixed-footer');
-			if (!this.isScrolledIntoView($fixedFooterHandler)) {
-				$fixedFooter.addClass('fixed');
-				$fixedFooter.width($('.content-area').width());
-			} else {
-				$fixedFooter.removeClass('fixed');
-			}
-		}
-	}
-};
-
-TYPO3.Install.ExtensionChecker = {
-	/**
-	 * Call checkExtensionsCompatibility recursively on error
-	 * so we can find all incompatible extensions
-	 */
-	handleCheckExtensionsError: function () {
-		this.checkExtensionsCompatibility(false);
-	},
-	/**
-	 * Send an ajax request to uninstall an extension (or multiple extensions)
-	 *
-	 * @param extension string of extension(s) - may be comma separated
-	 */
-	uninstallExtension: function (extension) {
-		var self = this;
-		var url = location.href + '&install[controller]=ajax&install[action]=uninstallExtension' +
-			'&install[uninstallExtension][extensions]=' + extension;
-		var $container = $('.t3js-checkExtensions');
-		$.ajax({
-			url: url,
-			cache: false,
-			success: function (data) {
-				if (data === 'OK') {
-					self.checkExtensionsCompatibility(true);
-				} else {
-					if (data === 'unauthorized') {
-						location.reload();
-					}
-					// workaround for xdebug returning 200 OK on fatal errors
-					if (data.substring(data.length - 2) === 'OK') {
-						self.checkExtensionsCompatibility(true);
-					} else {
-						$('.alert-loading', $container).hide();
-						var domMessage = TYPO3.Install.FlashMessage.render(
-							TYPO3.Install.Severity.error,
-							'Something went wrong. Check failed.',
-							'Message: ' + data
-						);
-						$container.append(domMessage);
-					}
-				}
-			},
-			error: function (data) {
-				self.handleCheckExtensionsError(data);
-			}
-		});
-	},
-	/**
-	 * Handles result of extension compatibility check.
-	 * Displays uninstall buttons for non-compatible extensions.
-	 */
-	handleCheckExtensionsSuccess: function () {
-		var self = this;
-		var $checkExtensions = $('.t3js-checkExtensions');
-
-		$.ajax({
-			url: $checkExtensions.data('protocolurl'),
-			cache: false,
-			success: function (data) {
-				if (data) {
-					$('.alert-danger .messageText', $checkExtensions).html(
-						'The following extensions are not compatible. Please uninstall them and try again. '
-					);
-					var extensions = data.split(',');
-					var unloadButtonWrapper = $('<fieldset class="t3-install-form-submit"></fieldset>');
-					for (var i = 0; i < extensions.length; i++) {
-						var extension = extensions[i];
-						var unloadButton = $('<button />', {
-							text: 'Uninstall ' + $.trim(extension),
-							'class': 't3-js-uninstallSingle',
-							'data-extension': $.trim(extension)
-						});
-						var fullButton = unloadButtonWrapper.append(unloadButton);
-						$('.alert-danger .messageText', $checkExtensions).append(fullButton);
-					}
-					if (extensions.length) {
-						$(document).on('click', 't3-js-uninstallSingle', function (e) {
-							self.uninstallExtension($(this).data('extension'));
-							e.preventDefault();
-							return false;
-						});
-					}
-					var unloadAllButton = $('<button />', {
-						text: 'Uninstall all incompatible extensions: ' + data,
-						click: function (e) {
-							$('.alert-loading', $checkExtensions).show();
-							self.uninstallExtension(data);
-							e.preventDefault();
-							return false;
-						}
-					});
-					unloadButtonWrapper.append('<hr />');
-					var fullUnloadAllButton = unloadButtonWrapper.append(unloadAllButton);
-					$('.alert-danger .messageText', $checkExtensions).append(fullUnloadAllButton);
-
-					$('.alert-loading', $checkExtensions).hide();
-					$('button', $checkExtensions).show();
-					$('.alert-danger', $checkExtensions).show();
-				} else {
-					$('.t3js-message', $checkExtensions).hide();
-					$('.alert-success', $checkExtensions).show();
-				}
-			},
-			error: function () {
-				$('.t3js-message', $checkExtensions).hide();
-				$('.alert-success', $checkExtensions).show();
-			}
-		});
-		$.getJSON(
-			$checkExtensions.data('errorprotocolurl'),
-			function (data) {
-				$.each(data, function (i, error) {
-					var messageToDisplay = error.message + ' in ' + error.file + ' on line ' + error.line;
-					var domMessage = TYPO3.Install.FlashMessage.render(TYPO3.Install.Severity.warning, error.type, messageToDisplay);
-					$checkExtensions.find('.t3js-message.alert-danger').before(domMessage);
-				});
-			}
-		);
-	},
-	/**
-	 * Checks extension compatibility by trying to load ext_tables and ext_localconf via ajax.
-	 *
-	 * @param force
-	 */
-	checkExtensionsCompatibility: function (force) {
-		var self = this;
-		var url = location.href + '&install[controller]=ajax&install[action]=extensionCompatibilityTester';
-		if (force) {
-			TYPO3.Install.Cache.clearCache();
-			url += '&install[extensionCompatibilityTester][forceCheck]=1';
-		} else {
-			url += '&install[extensionCompatibilityTester][forceCheck]=0';
-		}
-		$.ajax({
-			url: url,
-			cache: false,
-			success: function (data) {
-				if (data === 'OK') {
-					self.handleCheckExtensionsSuccess();
-				} else {
-					if (data === 'unauthorized') {
-						location.reload();
-					}
-					// workaround for xdebug returning 200 OK on fatal errors
-					if (data.substring(data.length - 2) === 'OK') {
-						self.handleCheckExtensionsSuccess();
-					} else {
-						self.handleCheckExtensionsError();
-					}
-				}
-			},
-			error: function () {
-				self.handleCheckExtensionsError();
-			}
-		});
-	}
-};
-
-TYPO3.Install.TcaIntegrityChecker = {
-
-	/**
-	 * Default output messages
-	 */
-	outputMessages: {
-		tcaMigrationsCheck: {
-			fatalTitle: 'Something went wrong',
-			fatalMessage: 'Use "Check for broken extensions!"',
-			loadingTitle: 'Loading...',
-			loadingMessage: '',
-			successTitle: 'No TCA migrations need to be applied',
-			successMessage: 'Your TCA looks good.',
-			warningTitle: 'TCA migrations need to be applied',
-			warningMessage: 'Check the following list and apply needed changes.'
-		},
-		tcaExtTablesCheck: {
-			fatalTitle: 'Something went wrong',
-			fatalMessage: 'Use "Check for broken extensions!"',
-			loadingTitle: 'Loading...',
-			loadingMessage: '',
-			successTitle: 'No TCA changes in ext_tables.php files. Good job!',
-			successMessage: '',
-			warningTitle: 'Extensions change TCA in ext_tables.php',
-			warningMessage: 'Check for ExtensionManagementUtility and $GLOBALS["TCA"].'
-		}
-	},
-
-	/**
-	 * output DOM Container
-	 */
-	outputContainer: {},
-
-	/**
-	 * Clone of the DOM object that contains the submit button
-	 */
-	submitButton: {},
-
-	/**
-	 * Fetching the templates out of the DOM
-	 *
-	 * @param tcaIntegrityCheckContainer DOM element id with all needed HTML in it
-	 * @return boolean DOM container could be found and initialization finished
-	 */
-	initialize: function (tcaIntegrityCheckContainer) {
-		var success = false;
-		this.outputContainer[tcaIntegrityCheckContainer] = $('.t3js-' + tcaIntegrityCheckContainer);
-
-		if (this.outputContainer[tcaIntegrityCheckContainer]) {
-			// submit button: save and delete
-			if (!this.submitButton[tcaIntegrityCheckContainer]) {
-				var submitButton = this.outputContainer[tcaIntegrityCheckContainer].find('button[type="submit"]');
-				this.submitButton[tcaIntegrityCheckContainer] = submitButton.clone();
-				// submitButton.remove();
-			}
-
-			// clear all messages from the run before
-			this.outputContainer[tcaIntegrityCheckContainer].find('.typo3-message:visible ').remove();
-
-			success = true;
-		}
-		return success;
-	},
-
-	checkTcaIntegrity: function (actionName) {
-		var self = this;
-		var url = location.href + '&install[controller]=ajax&install[action]=' + actionName;
-
-		var isInitialized = self.initialize(actionName);
-		if (isInitialized) {
-			self.addMessage(
-				TYPO3.Install.Severity.loading,
-				self.outputMessages[actionName].loadingTitle,
-				self.outputMessages[actionName].loadingMessage,
-				actionName
-			);
-
-			$.ajax({
-				url: url,
-				cache: false,
-				success: function (data) {
-
-					if (data.success === true && Array.isArray(data.status)) {
-						if (data.status.length > 0) {
-							self.outputContainer[actionName].find('.alert-loading').hide();
-							self.addMessage(
-								TYPO3.Install.Severity.warning,
-								self.outputMessages[actionName].warningTitle,
-								self.outputMessages[actionName].warningMessage,
-								actionName
-							);
-							data.status.forEach((function (element) {
-								//noinspection JSUnresolvedVariable
-								self.addMessage(
-									element.severity,
-									element.title,
-									element.message,
-									actionName
-								);
-							}));
-						} else {
-							// nothing to complain, everything fine
-							self.outputContainer[actionName].find('.alert-loading').hide();
-							self.addMessage(
-								TYPO3.Install.Severity.ok,
-								self.outputMessages[actionName].successTitle,
-								self.outputMessages[actionName].successMessage,
-								actionName
-							);
-						}
-					} else if (data === 'unauthorized') {
-						location.reload();
-					}
-				},
-				error: function () {
-					self.outputContainer[actionName].find('.alert-loading').hide();
-					self.addMessage(
-						TYPO3.Install.Severity.error,
-						self.outputMessages[actionName].fatalTitle,
-						self.outputMessages[actionName].fatalMessage,
-						actionName
-					);
-				}
-			});
-		}
-	},
-
-	/**
-	 * Move the submit button to the end of the box
-	 *
-	 * @param tcaIntegrityCheckContainer DOM container name
-	 */
-	moveSubmitButtonFurtherDown: function (tcaIntegrityCheckContainer) {
-		// first remove the currently visible button
-		this.outputContainer[tcaIntegrityCheckContainer].find('button[type="submit"]').remove();
-		// then append the cloned template to the end
-		this.outputContainer[tcaIntegrityCheckContainer].append(this.submitButton[tcaIntegrityCheckContainer]);
-	},
-
-	/**
-	 * Show a status message
-	 *
-	 * @param severity
-	 * @param title
-	 * @param message
-	 * @param tcaIntegrityCheckContainer DOM container name
-	 */
-	addMessage: function (severity, title, message, tcaIntegrityCheckContainer) {
-		var domMessage = TYPO3.Install.FlashMessage.render(severity, title, message);
-		this.outputContainer[tcaIntegrityCheckContainer].append(domMessage);
-		this.moveSubmitButtonFurtherDown(tcaIntegrityCheckContainer);
-	}
-
-};
-
-TYPO3.Install.Status = {
-	getFolderStatus: function () {
-		var url = location.href + '&install[controller]=ajax&install[action]=folderStatus';
-		$.ajax({
-			url: url,
-			cache: false,
-			success: function (data) {
-				if (data > 0) {
-					$('.t3js-install-menu-folderStructure').append('<span class="badge badge-danger">' + data + '</span>');
-				}
-			}
-		});
-	},
-	getEnvironmentStatus: function () {
-		var url = location.href + '&install[controller]=ajax&install[action]=environmentStatus';
-		$.ajax({
-			url: url,
-			cache: false,
-			success: function (data) {
-				if (data > 0) {
-					$('.t3js-install-menu-systemEnvironment').append('<span class="badge badge-danger">' + data + '</span>');
-				}
-			}
-		});
-	}
-};
-
-TYPO3.Install.coreUpdate = {
-	/**
-	 * The action queue defines what actions are called in which order
-	 */
-	actionQueue: {
-		coreUpdateUpdateVersionMatrix: {
-			loadingMessage: 'Fetching list of released versions from typo3.org',
-			finishMessage: 'Fetched list of released versions',
-			nextActionName: 'coreUpdateIsUpdateAvailable'
-		},
-		coreUpdateIsUpdateAvailable: {
-			loadingMessage: 'Checking for possible regular or security update',
-			finishMessage: undefined,
-			nextActionName: undefined
-		},
-		coreUpdateCheckPreConditions: {
-			loadingMessage: 'Checking if update is possible',
-			finishMessage: 'System can be updated',
-			nextActionName: 'coreUpdateDownload'
-		},
-		coreUpdateDownload: {
-			loadingMessage: 'Downloading new core',
-			finishMessage: undefined,
-			nextActionName: 'coreUpdateVerifyChecksum'
-		},
-		coreUpdateVerifyChecksum: {
-			loadingMessage: 'Verifying checksum of downloaded core',
-			finishMessage: undefined,
-			nextActionName: 'coreUpdateUnpack'
-		},
-		coreUpdateUnpack: {
-			loadingMessage: 'Unpacking core',
-			finishMessage: undefined,
-			nextActionName: 'coreUpdateMove'
-		},
-		coreUpdateMove: {
-			loadingMessage: 'Moving core',
-			finishMessage: undefined,
-			nextActionName: 'clearCache'
-		},
-		clearCache: {
-			loadingMessage: 'Clearing caches',
-			finishMessage: 'Caches cleared',
-			nextActionName: 'coreUpdateActivate'
-		},
-		coreUpdateActivate: {
-			loadingMessage: 'Activating core',
-			finishMessage: 'Core updated - please reload your browser',
-			nextActionName: undefined
-		}
-	},
-
-	/**
-	 * Clone of a DOM object acts as button template
-	 */
-	buttonTemplate: null,
-
-	/**
-	 * Fetching the templates out of the DOM
-	 */
-	initialize: function () {
-		var buttonTemplateSection = $('#buttonTemplate');
-		this.buttonTemplate = buttonTemplateSection.children().clone();
-	},
-
-	/**
-	 * Public method checkForUpdate
-	 */
-	checkForUpdate: function () {
-		this.callAction('coreUpdateUpdateVersionMatrix');
-	},
-
-	/**
-	 * Public method updateDevelopment
-	 */
-	updateDevelopment: function () {
-		this.update('development');
-	},
-
-	/**
-	 * Public method updateRegular
-	 */
-	updateRegular: function () {
-		this.update('regular');
-	},
-
-	/**
-	 * Execute core update.
-	 *
-	 * @param type Either 'development' or 'regular'
-	 */
-	update: function (type) {
-		if (type !== "development") {
-			type = 'regular';
-		}
-		this.callAction('coreUpdateCheckPreConditions', type);
-	},
-
-	/**
-	 * Generic method to call actions from the queue
-	 *
-	 * @param actionName Name of the action to be called
-	 * @param type Update type (optional)
-	 */
-	callAction: function (actionName, type) {
-		var self = this;
-		var data = {
-			install: {
-				controller: 'ajax',
-				action: actionName
-			}
-		};
-		if (type !== undefined) {
-			data.install["type"] = type;
-		}
-		this.addLoadingMessage(this.actionQueue[actionName].loadingMessage);
-		$.ajax({
-			url: location.href,
-			data: data,
-			cache: false,
-			success: function (result) {
-				var canContinue = self.handleResult(result, self.actionQueue[actionName].finishMessage);
-				if (canContinue === true && (self.actionQueue[actionName].nextActionName !== undefined)) {
-					self.callAction(self.actionQueue[actionName].nextActionName, type);
-				}
-			},
-			error: function (result) {
-				self.handleResult(result);
-			}
-		});
-	},
-
-	/**
-	 * Handle ajax result of core update step.
-	 *
-	 * @param data
-	 * @param successMessage Optional success message
-	 */
-	handleResult: function (data, successMessage) {
-		var canContinue = false;
-		this.removeLoadingMessage();
-		if (data.success === true) {
-			canContinue = true;
-			if (data.status && typeof(data.status) === 'object') {
-				this.showStatusMessages(data.status);
-			}
-			if (data.action && typeof(data.action) === 'object') {
-				this.showActionButton(data.action);
-			}
-			if (successMessage) {
-				this.addMessage(TYPO3.Install.Severity.ok, successMessage);
-			}
-		} else {
-			// Handle clearcache until it uses the new view object
-			if (data === "OK") {
-				canContinue = true;
-				if (successMessage) {
-					this.addMessage(TYPO3.Install.Severity.ok, successMessage);
-				}
-			} else {
-				canContinue = false;
-				if (data.status && typeof(data.status) === 'object') {
-					this.showStatusMessages(data.status);
-				} else {
-					this.addMessage(TYPO3.Install.Severity.error, 'General error');
-				}
-			}
-		}
-		return canContinue;
-	},
-
-	/**
-	 * Add a loading message with some text.
-	 *
-	 * @param messageTitle
-	 */
-	addLoadingMessage: function (messageTitle) {
-		var domMessage = TYPO3.Install.FlashMessage.render(TYPO3.Install.Severity.loading, messageTitle);
-		$('.t3js-coreUpdate').append(domMessage);
-	},
-
-	/**
-	 * Remove an enabled loading message
-	 */
-	removeLoadingMessage: function () {
-		$('.t3js-coreUpdate').find('.alert-loading').remove();
-	},
-
-	/**
-	 * Show a list of status messages
-	 *
-	 * @param messages
-	 */
-	showStatusMessages: function (messages) {
-		var self = this;
-		$.each(messages, function (index, element) {
-			var title = false;
-			var message = false;
-			var severity = element.severity;
-			if (element.title) {
-				title = element.title;
-			}
-			if (element.message) {
-				message = element.message;
-			}
-			self.addMessage(severity, title, message);
-		});
-	},
-
-	/**
-	 * Show an action button
-	 *
-	 * @param button
-	 */
-	showActionButton: function (button) {
-		var title = false;
-		var action = false;
-		if (button.title) {
-			title = button.title;
-		}
-		if (button.action) {
-			action = button.action;
-		}
-		var domButton = this.buttonTemplate;
-		if (action) {
-			domButton.find('button').data('action', action);
-		}
-		if (title) {
-			domButton.find('button').html(title);
-		}
-		$('.t3js-coreUpdate').append(domButton);
-	},
-
-	/**
-	 * Show a status message
-	 *
-	 * @param severity
-	 * @param title
-	 * @param message
-	 */
-	addMessage: function (severity, title, message) {
-		var domMessage = TYPO3.Install.FlashMessage.render(severity, title, message);
-		$('.t3js-coreUpdate').append(domMessage);
-	}
-};
-
-TYPO3.Install.ResetBackendUserUc = {
-	/**
-	 * output DOM Container
-	 */
-	outputContainer: {},
-
-	/**
-	 * Clone of the DOM object that contains the submit button
-	 */
-	submitButton: {},
-
-	/**
-	 * Default output messages
-	 */
-	outputMessages: {
-		resetBackendUserUc: {
-			fatalTitle: 'Something went wrong',
-			fatalMessage: '',
-			loadingTitle: 'Loading…',
-			loadingMessage: ''
-		}
-	},
-
-	/**
-	 * Fetching the templates out of the DOM
-	 *
-	 * @param resetBackendUserUcContainer DOM element id with all needed HTML in it
-	 * @return boolean DOM container could be found and initialization finished
-	 */
-	initialize: function (resetBackendUserUcContainer) {
-		var success = false;
-		this.outputContainer[resetBackendUserUcContainer] = $('.t3js-' + resetBackendUserUcContainer);
-
-		if (this.outputContainer[resetBackendUserUcContainer]) {
-			// submit button: save and delete
-			if (!this.submitButton[resetBackendUserUcContainer]) {
-				var submitButton = this.outputContainer[resetBackendUserUcContainer].find('button[type="submit"]');
-				this.submitButton[resetBackendUserUcContainer] = submitButton.clone();
-			}
-
-			// clear all messages from the run before
-			this.outputContainer[resetBackendUserUcContainer].find('.typo3-message:visible ').remove();
-
-			success = true;
-		}
-		return success;
-	},
-
-	resetBackendUserUc: function (actionName) {
-		var self = this;
-		var url = location.href + '&install[controller]=ajax&install[action]=' + actionName;
-		var isInitialized = self.initialize(actionName);
-		if (isInitialized) {
-			self.addMessage(
-				TYPO3.Install.Severity.loading,
-				self.outputMessages[actionName].loadingTitle,
-				self.outputMessages[actionName].loadingMessage,
-				actionName
-			);
-			$.ajax({
-				url: url,
-				cache: false,
-				success: function(data) {
-					if (data.success === true && Array.isArray(data.status)) {
-						if (data.status.length > 0) {
-							self.outputContainer[actionName].find('.alert-loading').hide();
-							data.status.forEach((function (element) {
-								//noinspection JSUnresolvedVariable
-								self.addMessage(
-									element.severity,
-									element.title,
-									element.message,
-									actionName
-								);
-							}));
-						} else {
-							self.outputContainer[actionName].find('.alert-loading').hide();
-							self.addMessage(
-								TYPO3.Install.Severity.ok,
-								self.outputMessages[actionName].successTitle,
-								self.outputMessages[actionName].successMessage,
-								actionName
-							);
-						}
-					} else if (data === 'unauthorized') {
-						location.reload();
-					}
-				},
-				error: function() {
-					self.outputContainer[actionName].find('.alert-loading').hide();
-					self.addMessage(
-						TYPO3.Install.Severity.error,
-						self.outputMessages[actionName].fatalTitle,
-						self.outputMessages[actionName].fatalMessage,
-						actionName
-					);
-				}
-			});
-		}
-	},
-
-	/**
-	 * Move the submit button to the end of the box
-	 *
-	 * @param resetBackendUserUcContainer DOM container name
-	 */
-	moveSubmitButtonFurtherDown: function (resetBackendUserUcContainer) {
-		// first remove the currently visible button
-		this.outputContainer[resetBackendUserUcContainer].find('button[type="submit"]').remove();
-		// then append the cloned template to the end
-		this.outputContainer[resetBackendUserUcContainer].append(this.submitButton[resetBackendUserUcContainer]);
-	},
-
-	/**
-	 * Show a status message
-	 *
-	 * @param severity
-	 * @param title
-	 * @param message
-	 * @param resetBackendUserUcContainer DOM container name
-	 */
-	addMessage: function (severity, title, message, resetBackendUserUcContainer) {
-		var domMessage = TYPO3.Install.FlashMessage.render(severity, title, message);
-		this.outputContainer[resetBackendUserUcContainer].append(domMessage);
-		this.moveSubmitButtonFurtherDown(resetBackendUserUcContainer);
-	}
-};
-
-TYPO3.Install.ExtensionScanner = {
-	listOfAffectedRestFileHashes: [],
-	selectorExtensionContainer: '.t3js-extensionscanner-extension',
-	selectorNumberOfFiles: '.t3js-extensionscanner-number-of-files',
-
-	/**
-	 *
-	 * @param {string} extension
-	 * @returns {string}
-	 */
-	getExtensionSelector: function(extension) {
-		return this.selectorExtensionContainer + '-' + extension;
-	},
-
-	/**
-	 *
-	 * @param {JQuery} $extensions
-	 */
-	scanAll: function($extensions) {
-		var self = this;
-		$(this.selectorExtensionContainer)
-			.removeClass('panel-danger panel-warning panel-success')
-			.find('.panel-progress-bar')
-			.css('width', 0)
-			.attr('aria-valuenow', 0)
-			.find('span')
-			.text('0%');
-		self.setProgressForAll();
-		$extensions.each(function () {
-			var extension = $(this).data('extension');
-			self.scanSingleExtension(extension);
-		});
-	},
-
-	/**
-	 *
-	 * @param {string} extension
-	 * @param {number} doneFiles
-	 * @param {number} numberOfFiles
-	 */
-	setStatusMessageForScan: function(extension, doneFiles, numberOfFiles) {
-		$(this.getExtensionSelector(extension))
-			.find(this.selectorNumberOfFiles)
-			.text('Checked ' + doneFiles + ' of ' + numberOfFiles + ' files');
-	},
-
-	/**
-	 *
-	 * @param {string} extension
-	 * @param {number} doneFiles
-	 * @param {number} numberOfFiles
-	 */
-	setProgressForScan: function(extension, doneFiles, numberOfFiles) {
-		var percent = (doneFiles / numberOfFiles) * 100;
-		$(this.getExtensionSelector(extension))
-			.find('.panel-progress-bar')
-			.css('width', percent + '%')
-			.attr('aria-valuenow', percent)
-			.find('span')
-			.text(percent + '%');
-	},
-
-	/**
-	 *
-	 */
-	setProgressForAll: function() {
-		var self = this;
-		var numberOfExtensions = $(this.selectorExtensionContainer).length;
-		var numberOfSuccess = $(this.selectorExtensionContainer + '.t3js-extensionscan-finished.panel-success').length;
-		var numberOfWarning = $(this.selectorExtensionContainer + '.t3js-extensionscan-finished.panel-warning').length;
-		var numberOfError = $(this.selectorExtensionContainer + '.t3js-extensionscan-finished.panel-danger').length;
-		var numberOfScannedExtensions = numberOfSuccess + numberOfWarning + numberOfError;
-		var percent = (numberOfScannedExtensions / numberOfExtensions) * 100;
-		var markFullyScannedFilesToken = $('#t3js-extensionscanner-mark-fully-scanned-rest-files-token').text();
-		var url = location.href + '&install[controller]=ajax';
-		$('.t3js-progress-all-extension .progress-bar')
-			.css('width', percent+'%')
-			.attr('aria-valuenow', percent)
-			.find('span')
-			.text(numberOfScannedExtensions + ' of ' + numberOfExtensions + ' scanned');
-		if (numberOfScannedExtensions === numberOfExtensions) {
-			top.TYPO3.Notification.success('Scan finished', 'All extensions has been scanned');
-			var postData = {
-				'install': {
-					'action': 'extensionScannerMarkFullyScannedRestFiles',
-					'token': markFullyScannedFilesToken,
-					'hashes': self.uniqueArray(TYPO3.Install.ExtensionScanner.listOfAffectedRestFileHashes)
-				}
-			};
-			$.ajax({
-				method: 'POST',
-				data: postData,
-				url: url,
-				cache: false,
-				success: function (data) {
-					if (data.success === true) {
-						top.TYPO3.Notification.success('Marked not affected files', 'Marked ' + data.markedAsNotAffected + ' ReST files as not affected.');
-					}
-				}
-			});
-		}
-	},
-
-	/**
-	 *
-	 * @param {Array} anArray
-	 * @returns {Array}
-	 */
-	uniqueArray: function(anArray) {
-		return anArray.filter(function(value, index, self) {
-			return self.indexOf(value) === index;
-		});
-	},
-
-	/**
-	 *
-	 * @param {string} extension
-	 */
-	scanSingleExtension: function(extension) {
-		var $extensionContainer = $(this.getExtensionSelector(extension));
-		var filesToken = $('#t3js-extensionscanner-files-token').text();
-		var hitTemplate = $('#t3js-extensionscanner-file-hit-template').html();
-		var restTemplate = $('#t3js-extensionscanner-file-hit-rest-template').html();
-		var scanFileToken = $('#t3js-extensionscanner-scan-file-token').text();
-		var hitFound = false;
-		var self = this;
-		var url = location.href + '&install[controller]=ajax';
-		var postData = {
-			'install': {
-				'action': 'extensionScannerFiles',
-				'token': filesToken,
-				'extension': extension
-			}
-		};
-		$extensionContainer.removeClass('panel-danger panel-warning panel-success t3js-extensionscan-finished');
-		$extensionContainer.data('hasRun', 'true');
-		$extensionContainer.find('.t3js-extensionscanner-scan-single').text('Scanning...').attr('disabled','disabled');
-		$extensionContainer.find('.t3js-extensionscanner-extension-body-loc').empty().text('0');
-		$extensionContainer.find('.t3js-extensionscanner-extension-body-ignored-files').empty().text('0');
-		$extensionContainer.find('.t3js-extensionscanner-extension-body-ignored-lines').empty().text('0');
-		this.setProgressForAll();
-		$.ajax({
-			method: 'POST',
-			data: postData,
-			url: url,
-			cache: false,
-			success: function(data) {
-				if (data.success === true && Array.isArray(data.files)) {
-					var numberOfFiles = data.files.length;
-					if (numberOfFiles > 0) {
-						self.setStatusMessageForScan(extension, 0, numberOfFiles);
-						$extensionContainer.find('.t3js-extensionscanner-extension-body').text('');
-						var doneFiles = 0;
-						data.files.forEach(function (file) {
-							var postData = {
-								'install': {
-									'action': 'extensionScannerScanFile',
-									'token': scanFileToken,
-									'extension': extension,
-									'file': file
-								}
-							};
-							$.ajax({
-								method: 'POST',
-								data: postData,
-								url: url,
-								cache: false,
-								success: function (fileData) {
-									doneFiles = doneFiles + 1;
-									self.setStatusMessageForScan(extension, doneFiles, numberOfFiles);
-									self.setProgressForScan(extension, doneFiles, numberOfFiles);
-									if (fileData.success && $.isArray(fileData.matches)) {
-										$(fileData.matches).each(function () {
-											hitFound = true;
-											var match = this;
-											var aMatch = $(hitTemplate).clone();
-											aMatch.find('.t3js-extensionscanner-hit-file-panel-head').attr('href', '#collapse' + match.uniqueId);
-											aMatch.find('.t3js-extensionscanner-hit-file-panel-body').attr('id', 'collapse' + match.uniqueId);
-											aMatch.find('.t3js-extensionscanner-hit-filename').html(file);
-											aMatch.find('.t3js-extensionscanner-hit-message').html(match.message);
-											if (match.indicator === 'strong') {
-												aMatch.find('.t3js-extensionscanner-hit-file-panel-head .badges')
-													.append('<span class="badge" title="Reliable match, false positive unlikely">strong</span>');
-											} else {
-												aMatch.find('.t3js-extensionscanner-hit-file-panel-head .badges')
-													.append('<span class="badge" title="Probable match, but can be a false positive">weak</span>');
-											}
-											if (match.silenced === true) {
-												aMatch.find('.t3js-extensionscanner-hit-file-panel-head .badges')
-													.append('<span class="badge" title="Match has been annotated by extension author as false positive match">silenced</span>');
-											}
-											aMatch.find('.t3js-extensionscanner-hit-file-lineContent').empty().text(match.lineContent);
-											aMatch.find('.t3js-extensionscanner-hit-file-line').empty().text(match.line + ': ');
-											if ($.isArray(match.restFiles)) {
-												$(match.restFiles).each(function () {
-													var restFile = this;
-													var aRest = $(restTemplate).clone();
-													aRest.find('.t3js-extensionscanner-hit-rest-panel-head').attr('href', '#collapse' + restFile.uniqueId);
-													aRest.find('.t3js-extensionscanner-hit-rest-panel-head .badge').empty().text(restFile.version);
-													aRest.find('.t3js-extensionscanner-hit-rest-panel-body').attr('id', 'collapse' + restFile.uniqueId);
-													aRest.find('.t3js-extensionscanner-hit-rest-headline').html(restFile.headline);
-													aRest.find('.t3js-extensionscanner-hit-rest-body').html(restFile.content);
-													aRest.addClass('panel-' + restFile.class);
-													aMatch.find('.t3js-extensionscanner-hit-file-rest-container').append(aRest);
-													TYPO3.Install.ExtensionScanner.listOfAffectedRestFileHashes.push(restFile.file_hash);
-												});
-											}
-											var panelClass =
-												aMatch.find('.panel-breaking', '.t3js-extensionscanner-hit-file-rest-container').length > 0
-													? 'panel-danger'
-													: 'panel-warning';
-											aMatch.addClass(panelClass);
-											$extensionContainer.find('.t3js-extensionscanner-extension-body').removeClass('hide').append(aMatch);
-											if (panelClass === 'panel-danger') {
-												$extensionContainer.removeClass('panel-warning').addClass(panelClass);
-											}
-											if (panelClass === 'panel-warning' && !$extensionContainer.hasClass('panel-danger')) {
-												$extensionContainer.addClass(panelClass);
-											}
-										});
-									}
-									if (fileData.success) {
-										var currentLinesOfCode = parseInt($extensionContainer.find('.t3js-extensionscanner-extension-body-loc').text());
-										$extensionContainer.find('.t3js-extensionscanner-extension-body-loc').empty().text(currentLinesOfCode + parseInt(fileData.effectiveCodeLines));
-										if (fileData.isFileIgnored) {
-											var currentIgnoredFiles = parseInt($extensionContainer.find('.t3js-extensionscanner-extension-body-ignored-files').text());
-											$extensionContainer.find('.t3js-extensionscanner-extension-body-ignored-files').empty().text(currentIgnoredFiles + 1);
-										}
-										var currentIgnoredLines = parseInt($extensionContainer.find('.t3js-extensionscanner-extension-body-ignored-lines').text());
-										$extensionContainer.find('.t3js-extensionscanner-extension-body-ignored-lines').empty().text(currentIgnoredLines + parseInt(fileData.ignoredLines));
-									}
-									if (doneFiles === numberOfFiles) {
-										if (!hitFound) {
-											$extensionContainer.addClass('panel-success');
-										}
-										$extensionContainer.addClass('t3js-extensionscan-finished');
-										self.setProgressForAll();
-										$extensionContainer.find('.t3js-extensionscanner-scan-single').text('Rescan').attr('disabled', null);
-									}
-								},
-								error: function(data) {
-									doneFiles = doneFiles + 1;
-									self.setStatusMessageForScan(extension, doneFiles, numberOfFiles);
-									self.setProgressForScan(extension, doneFiles, numberOfFiles);
-									self.setProgressForAll();
-									top.TYPO3.Notification.error('Oops, an error occurred', 'please look the console output for details');
-									console.error(data);
-								}
-							});
-						});
-					} else {
-						top.TYPO3.Notification.warning('No files found', 'the extension EXT:' + extension + ' contains no files we can scan');
-					}
-				}
-			},
-			error: function(data) {
-				top.TYPO3.Notification.error('Oops, an error occurred', 'please look the console output for details');
-				console.error(data);
-			}
-		});
-	}
-};
-
-$(function () {
-	// Used in database compare section to select/deselect checkboxes
-	$('.checkall').on('click', function () {
-		$(this).closest('fieldset').find(':checkbox').prop('checked', this.checked);
-	});
-
-	$('.item-description').find('a').on('click', function () {
-		var targetToggleGroupId = $(this.hash);
-		if (targetToggleGroupId) {
-			var $currentToggleGroup = $(this).closest('.toggleGroup');
-			var $targetToggleGroup = $(targetToggleGroupId).closest('.toggleGroup');
-			if ($targetToggleGroup !== $currentToggleGroup) {
-				$currentToggleGroup.removeClass('expanded');
-				$currentToggleGroup.find('.toggleData').hide();
-				$targetToggleGroup.addClass('expanded');
-				$targetToggleGroup.find('.toggleData').show();
-				TYPO3.Install.Scrolling.handleButtonScrolling();
-			}
-		}
-	});
-
-	$(document).on('click', '.t3js-all-configuration-toggle', function () {
-		var $panels = $('.panel-collapse', '#allConfiguration');
-		var action = ($panels.eq(0).hasClass('in')) ? 'hide' : 'show';
-		$panels.collapse(action);
-	});
-
-	var $configSearch = $('#configSearch');
-	if ($configSearch.length > 0) {
-		$(window).on('keydown', function (event) {
-			if (event.ctrlKey || event.metaKey) {
-				switch (String.fromCharCode(event.which).toLowerCase()) {
-					case 'f':
-						event.preventDefault();
-						$configSearch.focus();
-						break;
-				}
-			} else if (event.keyCode === 27) {
-				event.preventDefault();
-				$configSearch.val('').focus();
-			}
-		});
-	}
+require(['jquery', 'TYPO3/CMS/Install/CardLayout'], function($, CardLayout) {
 
 	// Simple password strength indicator
-	$('.t3-install-form-password-strength').on('keyup', function () {
+	$(document).on('keyup', '.t3-install-form-password-strength', function() {
 		var value = $(this).val();
 		var strongRegex = new RegExp('^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$', 'g');
 		var mediumRegex = new RegExp('^(?=.{8,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$', 'g');
@@ -1397,360 +35,24 @@ $(function () {
 
 	// Install step database settings
 	$('#t3js-connect-database-driver').on('change', function() {
-		var driverSelector = '#' + $(this).val();
+		var driver = $(this).val();
 		$('.t3-install-driver-data').hide();
 		$('.t3-install-driver-data input').attr('disabled', 'disabled');
-		$(driverSelector + ' input').attr('disabled', false);
-		$(driverSelector).show();
+		$('#' + driver + ' input').attr('disabled', false);
+		$('#' + driver).show();
 	}).trigger('change');
 
-	// Extension compatibility check
-	var $container = $('.t3js-checkExtensions');
-	$('.t3js-message', $container).hide();
-	$('button', $container).click(function (e) {
-		$('button', $container).hide();
-		$('.t3js-message', $container).hide();
-		$('.alert-loading', $container).show();
-		TYPO3.Install.ExtensionChecker.checkExtensionsCompatibility(true);
-		e.preventDefault();
-		return false;
-	});
-
-	// Handle core update
-	var $coreUpdateSection = $('.t3js-coreUpdate');
-	if ($coreUpdateSection) {
-		TYPO3.Install.coreUpdate.initialize();
-		$coreUpdateSection.on('click', 'button', (function (e) {
-			e.preventDefault();
-			var action = $(e.target).data('action');
-			TYPO3.Install.coreUpdate[action]();
-			$(e.target).closest('.t3-install-form-submit').remove();
-		}));
-	}
-
-	// Handle clearAllCache
-	var $clearAllCacheSection = $('.t3js-clearAllCache');
-	if ($clearAllCacheSection) {
-		$clearAllCacheSection.on('click', 'button', (function(e) {
-			TYPO3.Install.Cache.clearAllCache('clearAllCache');
-			e.preventDefault();
-			return false;
-		}));
-	}
-
-	// Handle dumpAutoload
-	var $clearAllCacheSection = $('.t3js-dumpAutoload');
-	if ($clearAllCacheSection) {
-		$clearAllCacheSection.on('click', 'button', (function(e) {
-			TYPO3.Install.DumpAutoload.dumpAutoload('dumpAutoload');
-			e.preventDefault();
-			return false;
-		}));
-	}
-
-	// Handle TCA ext_tables check
-	var $tcaExtTablesCheckSection = $('.t3js-tcaExtTablesCheck');
-	if ($tcaExtTablesCheckSection) {
-		$tcaExtTablesCheckSection.on('click', 'button', (function (e) {
-			TYPO3.Install.TcaIntegrityChecker.checkTcaIntegrity('tcaExtTablesCheck');
-			e.preventDefault();
-			return false;
-		}));
-	}
-
-	// Handle TCA Migrations check
-	var $tcaMigrationsCheckSection = $('.t3js-tcaMigrationsCheck');
-	if ($tcaMigrationsCheckSection) {
-		$tcaMigrationsCheckSection.on('click', 'button', (function (e) {
-			TYPO3.Install.TcaIntegrityChecker.checkTcaIntegrity('tcaMigrationsCheck');
-			e.preventDefault();
-			return false;
-		}));
-	}
-
-	// Handle Reset backend user preferences
-	var $resetBackendUserUcSection = $('.t3js-resetBackendUserUc');
-	if ($resetBackendUserUcSection) {
-		$resetBackendUserUcSection.on('click', 'button', (function(e) {
-			TYPO3.Install.ResetBackendUserUc.resetBackendUserUc('resetBackendUserUc');
-			e.preventDefault();
-			return false;
-		}));
-	}
-
-	// Extension scanner - single extension
-	$('.t3js-extensionscanner-scan-single').on('click', function (e) {
-		var extension = $(e.target).data('extension');
-		e.preventDefault();
-		TYPO3.Install.ExtensionScanner.scanSingleExtension(extension);
-		return false;
-	});
-	$('.t3js-extensionscanner-extension').on('show.bs.collapse', function(e) {
-		if ($(e.target).closest('.t3js-extensionscanner-extension').data('hasRun') !== 'true') {
-			$(this).find('.t3js-extensionscanner-scan-single').click();
-		}
-	});
-
-	// Extension scanner - all extensions
-	var $extensionScannerScanAll = $('.t3js-extensionscanner-scan-all');
-	if ($extensionScannerScanAll) {
-		$extensionScannerScanAll.on('click', '', (function (e) {
-			e.preventDefault();
-			var $extensions = $('.t3js-extensionscanner-extension');
-			TYPO3.Install.ExtensionScanner.scanAll($extensions);
-			return false;
-		}));
-	}
+	CardLayout.initialize();
 
-	var $installLeft = $('.t3js-list-group-wrapper');
-	if ($installLeft.length > 0) {
-		TYPO3.Install.Status.getFolderStatus();
-		TYPO3.Install.Status.getEnvironmentStatus();
-	}
-	// This makes jquerys "contains" work case-insensitive
-	jQuery.expr[':'].contains = jQuery.expr.createPseudo(function (arg) {
-		return function (elem) {
-			return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
-		};
-	});
-	$configSearch.keyup(function () {
-		var typedQuery = $(this).val();
-		$('div.item').each(function () {
-			var $item = $(this);
-			if ($(':contains(' + typedQuery + ')', $item).length > 0 || $('input[value*="' + typedQuery + '"]', $item).length > 0) {
-				$item.removeClass('hidden').addClass('searchhit');
-			} else {
-				$item.removeClass('searchhit').addClass('hidden');
+	// Each card head can have a t3js-require class and a data-require attribute
+	// with the name of a requireJS module. Those are loaded here and initialize()
+	// is executed if exists.
+	$('.t3js-require').each(function() {
+		var module = $(this).data('require');
+		require([module], function(aModule) {
+			if (typeof aModule.initialize !== 'undefined') {
+				aModule.initialize();
 			}
 		});
-		$('.searchhit').parent().collapse('show');
-	});
-	var $searchFields = $configSearch;
-	var searchResultShown = ('' !== $searchFields.first().val());
-
-	// make search field clearable
-	$searchFields.clearable({
-		onClear: function () {
-			if (searchResultShown) {
-				$(this).closest('form').submit();
-			}
-		}
-	});
-
-	// Define width of fixed menu
-	var $menuWrapper = $('#menuWrapper');
-	var $menuListGroup = $menuWrapper.children('.t3js-list-group-wrapper');
-	$menuWrapper.on('affixed.bs.affix', function () {
-		$menuListGroup.width($(this).parent().width());
-	});
-	$menuListGroup.width($menuWrapper.parent().width());
-	$(window).resize(function () {
-		$menuListGroup.width($('#menuWrapper').parent().width());
-	});
-	var $collapse = $('.collapse');
-	$collapse.on('shown.bs.collapse', function () {
-		TYPO3.Install.Scrolling.handleButtonScrolling();
 	});
-	$collapse.on('hidden.bs.collapse', function () {
-		TYPO3.Install.Scrolling.handleButtonScrolling();
-	});
-
-	// trigger 'handleButtonScrolling' on page scroll
-	// if the user scroll until page bottom, we need to remove 'position: fixed'
-	// so that the copyright info (footer) is not overlaid by the 'fixed button'
-	var scrollTimeout;
-	$(window).on('scroll', function () {
-		clearTimeout(scrollTimeout);
-		scrollTimeout = setTimeout(function () {
-			TYPO3.Install.Scrolling.handleButtonScrolling();
-		}, 50);
-	});
-
-	// automatically select the custom preset if a value in one of its input fields is changed
-	$('.t3js-custom-preset').on('input', function () {
-		$('#' + $(this).data('radio')).prop('checked', true);
-	});
-
-	TYPO3.Install.upgradeAnalysis.initialize();
-	TYPO3.Install.upgradeAnalysis.hideDoumentationFile();
-	TYPO3.Install.upgradeAnalysis.restoreDocumentationFile();
 });
-
-TYPO3.Install.upgradeAnalysis = {
-	chosenField: null,
-	fulltextSearchField: null,
-
-	provideTags: function () {
-
-		var tagString = '';
-		$('.upgrade_analysis_item_to_filter').each(function () {
-			tagString += $(this).data('item-tags') + ',';
-		});
-
-		var tagArray = TYPO3.Install.upgradeAnalysis.trimExplodeAndUnique(',', tagString);
-		$.each(tagArray, function (i, tag) {
-			$('#tagsort_tags_container').append('<option>' + tag + '</option>');
-		});
-		this.chosenField.trigger('chosen:updated');
-
-		var config = {
-			'.chosen-select': {},
-			'.chosen-select-deselect': {allow_single_deselect: true},
-			'.chosen-select-no-single': {disable_search_threshold: 10},
-			'.chosen-select-no-results': {no_results_text: 'Oops, nothing found!'},
-			'.chosen-select-width': {width: "100%"}
-		};
-		for (var selector in config) {
-			$(selector).chosen(config[selector]);
-		}
-		this.chosenField.on('change', function () {
-			TYPO3.Install.upgradeAnalysis.combinedFilterSearch();
-		});
-		this.fulltextSearchField.keyup(function () {
-			TYPO3.Install.upgradeAnalysis.combinedFilterSearch();
-		});
-	},
-
-	combinedFilterSearch: function () {
-		var $items = $('div.item');
-		if (this.chosenField.val().length < 1 && this.fulltextSearchField.val().length < 1) {
-			$('.panel-version:not(:first) > .panel-collapse').collapse('hide');
-			$items.removeClass('hidden searchhit filterhit');
-			return false;
-		}
-		$items.addClass('hidden').removeClass('searchhit filterhit');
-
-		// apply tags
-		if (this.chosenField.val().length > 0) {
-			$items
-				.addClass('hidden')
-				.removeClass('filterhit');
-			var orTags = [];
-			var andTags = [];
-			$.each(this.chosenField.val(), function (index, item) {
-				var tagFilter = '[data-item-tags*="' + item + '"]';
-				if (item.indexOf(':') > 0) {
-					orTags.push(tagFilter);
-				} else {
-					andTags.push(tagFilter);
-				}
-			});
-			var andString = andTags.join('');
-			var tags = [];
-			if (orTags.length) {
-				for (var i=0; i<orTags.length; i++) {
-					tags.push(andString + orTags[i]);
-				}
-			} else {
-				tags.push(andString);
-			}
-			var tagSelection = tags.join(',');
-			$(tagSelection)
-				.removeClass('hidden')
-				.addClass('searchhit filterhit');
-		} else {
-			$items
-				.addClass('filterhit')
-				.removeClass('hidden');
-		}
-		// apply fulltext search
-		var typedQuery = this.fulltextSearchField.val();
-		$('div.item.filterhit').each(function () {
-			var $item = $(this);
-			if ($(':contains(' + typedQuery + ')', $item).length > 0 || $('input[value*="' + typedQuery + '"]', $item).length > 0) {
-				$item.removeClass('hidden').addClass('searchhit');
-			} else {
-				$item.removeClass('searchhit').addClass('hidden');
-			}
-		});
-
-		$('.searchhit').closest('.panel-collapse').collapse('show');
-
-		//check for empty panels
-		$('.panel-version').each(function () {
-			if ($(this).find('.searchhit', '.filterhit').length < 1) {
-				$(this).find(' > .panel-collapse').collapse('hide');
-			}
-		});
-
-
-	},
-
-	initialize: function () {
-		$('[data-toggle="tooltip"]').tooltip();
-		this.chosenField = $('.t3js-chosen-select');
-		this.fulltextSearchField = $('.t3js-fulltext-search');
-		TYPO3.Install.upgradeAnalysis.provideTags();
-	},
-
-	hideDoumentationFile: function () {
-		$(document).on('click', '.t3js-upgradeanalysis-ignore', function () {
-			var $button = $(this);
-			var filepath = $button.data('filepath');
-			var token = $('#saveIgnoredItemsToken').html();
-			$button
-				.toggleClass('t3js-upgradeanalysis-restore t3js-upgradeanalysis-ignore')
-				.find('i')
-					.toggleClass('fa-check fa-ban');
-			$button
-				.closest('.panel')
-				.appendTo('.panel-body-read');
-			var postData = {
-				'install': {
-					'ignoreFile': filepath,
-					'token': token,
-					'action': 'saveIgnoredItems'
-				}
-			};
-			$.ajax({
-				method: 'POST',
-				data: postData,
-				url: location.href + '&install[controller]=ajax'
-			});
-
-			return false;
-		});
-	},
-
-	restoreDocumentationFile: function () {
-		$(document).on('click', '.t3js-upgradeanalysis-restore', function () {
-			var $button = $(this);
-			var filepath = $button.data('filepath');
-			var version = $button.closest('.panel').data('item-version');
-			var token = $('#removeIgnoredItemsToken').html();
-			$button
-				.toggleClass('t3js-upgradeanalysis-restore t3js-upgradeanalysis-ignore')
-				.find('i')
-					.toggleClass('fa-check fa-ban');
-			$button
-				.closest('.panel')
-				.appendTo('*[data-group-version="' + version + '"] .panel-body');
-			var postData = {
-				'install': {
-					'ignoreFile': filepath,
-					'token': token,
-					'action': 'removeIgnoredItems'
-				}
-			};
-			$.ajax({
-				method: 'POST',
-				data: postData,
-				url: location.href + '&install[controller]=ajax'
-			});
-		});
-	},
-
-	trimExplodeAndUnique: function (delimiter, string) {
-		var result = [];
-		var items = string.split(delimiter);
-		for (var i = 0; i < items.length; i++) {
-			var item = items[i].trim();
-			if (item.length > 0) {
-				if ($.inArray(item, result) === -1) {
-					result.push(item);
-				}
-			}
-		}
-		return result;
-	}
-};
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/Cache.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/Cache.js
new file mode 100644
index 000000000000..eb071d9a8d22
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/Cache.js
@@ -0,0 +1,61 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/Cache
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/ProgressBar', 'TYPO3/CMS/Install/InfoBox', 'TYPO3/CMS/Install/Severity'], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorClearTrigger: '.t3js-clearAllCache-clear',
+		selectorOutputContainer: '.t3js-clearAllCache-output',
+
+		initialize: function() {
+			var self = this;
+			$(document).on('click', this.selectorClearTrigger, function(e) {
+				e.preventDefault();
+				self.clear();
+			});
+		},
+
+		clear: function() {
+			var url = location.href + '&install[controller]=ajax&install[action]=clearAllCache';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, '', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					if (data.success === true && Array.isArray(data.status)) {
+						if (data.status.length > 0) {
+							$outputContainer.empty();
+							data.status.forEach((function (element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							}));
+						}
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/CardLayout.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/CardLayout.js
new file mode 100644
index 000000000000..f1e703e42411
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/CardLayout.js
@@ -0,0 +1,94 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/CardLayout
+ */
+define(['jquery', 'bootstrap'], function ($) {
+	'use strict';
+
+	return {
+		initialize: function() {
+			// Card expand / collapse handling
+			$(document).on('click', '.gridder-list', function(e) {
+				e.preventDefault();
+				var $element = $(this);
+				var $contentContainer = $element.next();
+				if (!$element.hasClass('selectedItem')) {
+					// Find possible current open one and close it
+					$('.gridder-list').removeClass('selectedItem');
+					$('.gridder-content.gridder-show').slideUp(function() {
+						$(this).removeClass('gridder-show');
+					});
+					// Open clicked one in parallel
+					$element.addClass('selectedItem');
+					$contentContainer.addClass('gridder-show').slideDown();
+				} else {
+					// Collapse this currently open grid
+					$contentContainer.slideUp(function() {
+						$contentContainer.removeClass('gridder-show');
+					});
+					$element.removeClass('selectedItem');
+				}
+			});
+
+			// Close current and open previous card
+			$(document).on('click', '.gridder-nav-prev', function() {
+				var $currentOpenContent = $('.gridder-content.gridder-show');
+				if ($currentOpenContent.length > 0) {
+					var $currentOpenCard = $currentOpenContent.prev();
+					var $previousCardContent = $currentOpenCard.prev();
+					var $previousCard = $previousCardContent.prev();
+					if ($previousCard.length > 0) {
+						$currentOpenCard.removeClass('selectedItem');
+						$currentOpenContent.slideUp(function() {
+							$(this).removeClass('gridder-show');
+						});
+						$previousCard.addClass('selectedItem');
+						$previousCardContent.addClass('gridder-show').slideDown();
+					}
+				}
+			});
+
+			// Close current and open next card
+			$(document).on('click', '.gridder-nav-next', function() {
+				var $currentOpenContent = $('.gridder-content.gridder-show');
+				if ($currentOpenContent.length > 0) {
+					var $currentOpenCard = $currentOpenContent.prev();
+					var $nextCard = $currentOpenContent.next();
+					var $nextCardContent = $nextCard.next();
+					if ($nextCardContent.length > 0) {
+						$currentOpenCard.removeClass('selectedItem');
+						$currentOpenContent.slideUp(function() {
+							$(this).removeClass('gridder-show');
+						});
+						$nextCard.addClass('selectedItem');
+						$nextCardContent.addClass('gridder-show').slideDown();
+					}
+				}
+			});
+
+			// Close current open card
+			$(document).on('click', '.gridder-close', function() {
+				var $currentOpenContent = $('.gridder-content.gridder-show');
+				if ($currentOpenContent.length > 0) {
+					var $currentOpenCard = $currentOpenContent.prev();
+					$currentOpenCard.removeClass('selectedItem');
+					$currentOpenContent.slideUp(function() {
+						$(this).removeClass('gridder-show');
+					});
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/ChangeInstallToolPassword.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ChangeInstallToolPassword.js
new file mode 100644
index 000000000000..0f518e0deaa6
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ChangeInstallToolPassword.js
@@ -0,0 +1,67 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/CreateAdmin
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/ProgressBar', 'TYPO3/CMS/Install/InfoBox', 'TYPO3/CMS/Install/Severity'], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorChangeToken: '#t3js-changeInstallToolPassword-token',
+		selectorChangeTrigger: '.t3js-changeInstallToolPassword-change',
+		selectorOutputContainer: '.t3js-changeInstallToolPassword-output',
+
+		initialize: function() {
+			var self = this;
+			$(document).on('click', this.selectorChangeTrigger, function(e) {
+				e.preventDefault();
+				self.change();
+			});
+		},
+
+		change: function() {
+			var url = location.href + '&install[controller]=ajax';
+			var postData = {
+				'install': {
+					'action': 'changeInstallToolPassword',
+					'token': $(this.selectorChangeToken).text(),
+					'password': $('.t3js-changeInstallToolPassword-password').val(),
+					'passwordCheck': $('.t3js-changeInstallToolPassword-password-check').val()
+				}
+			};
+			var $outputContainer = $(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function(data) {
+					$outputContainer.empty();
+					if (data.success === true && Array.isArray(data.status)) {
+						data.status.forEach(function(element) {
+							var message = InfoBox.render(element.severity, element.title, element.message);
+							$outputContainer.append(message);
+						});
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/CheckForBrokenExtensions.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/CheckForBrokenExtensions.js
new file mode 100644
index 000000000000..1f3427cd1de3
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/CheckForBrokenExtensions.js
@@ -0,0 +1,219 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/ExtensionChecker
+ */
+define([
+	'jquery',
+	'TYPO3/CMS/Install/FlashMessage',
+	'TYPO3/CMS/Install/ProgressBar',
+	'TYPO3/CMS/Install/InfoBox',
+	'TYPO3/CMS/Install/Severity',
+	'TYPO3/CMS/Install/Cache'
+], function($, FlashMessage, ProgressBar, InfoBox, Severity, Cache) {
+	'use strict';
+
+	return {
+		selectorMainContainer: '.gridder-show.t3js-checkForBrokenExtensions',
+		selectorCheckTrigger: '.t3js-checkForBrokenExtensions-check',
+		selectorUninstallTrigger: 't3js-checkForBrokenExtensions-uninstall',
+		selectorOutputContainer: '.t3js-checkForBrokenExtensions-output',
+		outputContainer: null,
+
+		initialize: function() {
+			this.outputContainer = $(this.selectorOutputContainer);
+
+			var self = this;
+			$(document).on('click', this.selectorCheckTrigger, function(e) {
+				e.preventDefault();
+				var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+				self.outputContainer.empty().append(message);
+				self.checkExtensionsCompatibility(true);
+			});
+
+			$(document).on('click', '.' + self.selectorUninstallTrigger, function(e) {
+				self.uninstallExtension($(this).data('extension'));
+				e.preventDefault();
+				return false;
+			});
+		},
+
+		/**
+		 * Call checkExtensionsCompatibility recursive on error
+		 * so we can find all incompatible extensions
+		 */
+		handleCheckExtensionsError: function() {
+			this.checkExtensionsCompatibility(false);
+		},
+
+		/**
+		 * Send an ajax request to uninstall an extension (or multiple extensions)
+		 *
+		 * @param extension string of extension(s) - may be comma separated
+		 */
+		uninstallExtension: function(extension) {
+			var self = this;
+			// @todo: Refactor to a POST request and adapt action
+			var url = location.href + '&install[controller]=ajax&install[action]=uninstallExtension' +
+				'&install[uninstallExtension][extensions]=' + extension;
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					if (data.success) {
+						self.checkExtensionsCompatibility(true);
+					} else {
+						if (data === 'unauthorized') {
+							location.reload();
+						}
+						// workaround for xdebug returning 200 OK on fatal errors
+						if (data.substring(data.length - 2) === 'OK') {
+							self.checkExtensionsCompatibility(true);
+						} else {
+							this.outputContainer.empty();
+							self.showMessage(
+								Severity.error,
+								'Something went wrong. Check failed.',
+								'Message: ' + data
+							);
+						}
+					}
+				},
+				error: function(data) {
+					self.handleCheckExtensionsError(data);
+				}
+			});
+		},
+
+		/**
+		 * Handles result of extension compatibility check.
+		 * Displays uninstall buttons for non-compatible extensions.
+		 */
+		handleCheckExtensionsSuccess: function() {
+			var self = this;
+			var $mainContainer = $(this.selectorMainContainer);
+			$.ajax({
+				url: $mainContainer.find('.t3js-checkForBrokenExtensions-data').data('protocolurl'),
+				cache: false,
+				success: function(data) {
+					if (data) {
+						self.outputContainer.empty();
+						self.showMessage(
+							Severity.error,
+							'Incompatible extension found',
+							'The following extensions are not compatible. Please uninstall them and try again. '
+						);
+						var extensions = data.split(',');
+						var $unloadButtonGroup = $('<div />', {
+							'class': 'btn-group'
+						});
+						for (var i = 0; i < extensions.length; i++) {
+							var extension = extensions[i];
+							var unloadButton = $('<button />', {
+								text: 'Uninstall ' + $.trim(extension),
+								'class': 'btn btn-default ' + self.selectorUninstallTrigger,
+								'data-extension': $.trim(extension)
+							});
+							$unloadButtonGroup.append(unloadButton);
+						}
+						var unloadAllButton = $('<button />', {
+							'class': 'btn btn-default',
+							text: 'Uninstall all incompatible extensions: ' + data,
+							click: function(e) {
+								e.preventDefault();
+								self.showMessage(Severity.info, 'Loading...', '');
+								self.uninstallExtension(data);
+								return false;
+							}
+						});
+						$unloadButtonGroup.append(unloadAllButton);
+						self.outputContainer.append($unloadButtonGroup);
+						self.outputContainer.append('<hr />');
+
+						$.getJSON(
+							$mainContainer.find('.t3js-checkForBrokenExtensions-data').data('errorprotocolurl'),
+							function(data) {
+								$.each(data, function(i, error) {
+									var messageToDisplay = error.message + ' in ' + error.file + ' on line ' + error.line;
+									self.showMessage(Severity.warning, error.type, messageToDisplay);
+								});
+							}
+						);
+					} else {
+						self.outputContainer.empty();
+						self.showMessage(Severity.ok, 'All local extensions can be loaded!', '');
+					}
+				},
+				error: function() {
+					self.outputContainer.empty();
+					self.showMessage(Severity.ok, 'All local extensions can be loaded!', '');
+				}
+			});
+		},
+
+		/**
+		 * Checks extension compatibility by trying to load ext_tables and ext_localconf via ajax.
+		 *
+		 * @param force
+		 */
+		checkExtensionsCompatibility: function(force) {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=extensionCompatibilityTester';
+			if (force) {
+				Cache.clear();
+				url += '&install[extensionCompatibilityTester][forceCheck]=1';
+			} else {
+				url += '&install[extensionCompatibilityTester][forceCheck]=0';
+			}
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					if (data.success) {
+						self.handleCheckExtensionsSuccess();
+					} else {
+						if (data === 'unauthorized') {
+							location.reload();
+						}
+						// workaround for xdebug returning 200 OK on fatal errors
+						if (data.substring(data.length - 2) === 'OK') {
+							self.handleCheckExtensionsSuccess();
+						} else {
+							self.handleCheckExtensionsError();
+						}
+					}
+				},
+				error: function() {
+					self.handleCheckExtensionsError();
+				}
+			});
+		},
+
+		/**
+		 * Show message
+		 *
+		 * @param {Number} severity
+		 * @param {String} title
+		 * @param {String} description
+		 */
+		showMessage: function(severity, title, description) {
+			var markup = InfoBox.render(
+				severity,
+				title,
+				description
+			);
+			this.outputContainer.append(markup);
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/ClearTable.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ClearTable.js
new file mode 100644
index 000000000000..eb99ecb8a437
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ClearTable.js
@@ -0,0 +1,69 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/ClearTable
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/ProgressBar', 'TYPO3/CMS/Install/InfoBox', 'TYPO3/CMS/Install/Severity'], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorClearToken: '#t3js-clearTable-token',
+		selectorClearTrigger: '.t3js-clearTable-clear',
+		selectorOutputContainer: '.t3js-clearTable-output',
+
+		initialize: function() {
+			var self = this;
+			$(document).on('click', this.selectorClearTrigger, function(e) {
+				var table = $(e.target).data('table');
+				e.preventDefault();
+				self.clear(table);
+			});
+		},
+
+		clear: function(table) {
+			var token = $(this.selectorClearToken).text();
+			var url = location.href + '&install[controller]=ajax';
+			var postData = {
+				'install': {
+					'action': 'clearTable',
+					'token': token,
+					'table': table
+				}
+			};
+			var $container = $('.t3js-clearTable-container-' + table);
+			var $outputContainer = $container.find(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function(data) {
+					$outputContainer.empty();
+					if (data.success === true && Array.isArray(data.status)) {
+						data.status.forEach(function(element) {
+							var message = InfoBox.render(element.severity, element.title, element.message);
+							$outputContainer.html(message);
+						});
+					}
+				},
+				error: function () {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/ClearTypo3tempFiles.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ClearTypo3tempFiles.js
new file mode 100644
index 000000000000..a6ee77878088
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ClearTypo3tempFiles.js
@@ -0,0 +1,68 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/ClearTypo3tempFiles
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/ProgressBar', 'TYPO3/CMS/Install/InfoBox', 'TYPO3/CMS/Install/Severity'], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorDeleteToken: '#t3js-clearTypo3temp-delete-token',
+		selectorDeleteTrigger: '.t3js-clearTypo3temp-delete',
+		selectorOutputContainer: '.t3js-clearTypo3temp-output',
+
+		initialize: function() {
+			var self = this;
+			$(document).on('click', this.selectorDeleteTrigger, function(e) {
+				var folder = $(e.target).data('folder');
+				e.preventDefault();
+				self.delete(folder);
+			});
+		},
+
+		delete: function(folder) {
+			var url = location.href + '&install[controller]=ajax';
+			var postData = {
+				'install': {
+					'action': 'clearTypo3tempFiles',
+					'token': $(this.selectorDeleteToken).text(),
+					'folder': folder
+				}
+			};
+			var $container = $('.t3js-clearTypo3temp-container-' + folder);
+			var message = ProgressBar.render(Severity.loading, '', '');
+			var $outputContainer = $container.find(this.selectorOutputContainer);
+			$outputContainer.empty().html(message);
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function (data) {
+					$outputContainer.empty();
+					if (data.success === true && Array.isArray(data.status)) {
+						data.status.forEach(function (element) {
+							var message = InfoBox.render(element.severity, element.title, element.message);
+							$outputContainer.html(message);
+						});
+					}
+				},
+				error: function () {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/CoreUpdate.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/CoreUpdate.js
new file mode 100644
index 000000000000..bb852b99e78b
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/CoreUpdate.js
@@ -0,0 +1,258 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/CoreUpdate
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/Severity'], function ($, FlashMessage, Severity) {
+	'use strict';
+
+	return {
+		/**
+		 * The action queue defines what actions are called in which order
+		 */
+		actionQueue: {
+			coreUpdateUpdateVersionMatrix: {
+				loadingMessage: 'Fetching list of released versions from typo3.org',
+				finishMessage: 'Fetched list of released versions',
+				nextActionName: 'coreUpdateIsUpdateAvailable'
+			},
+			coreUpdateIsUpdateAvailable: {
+				loadingMessage: 'Checking for possible regular or security update',
+				finishMessage: undefined,
+				nextActionName: undefined
+			},
+			coreUpdateCheckPreConditions: {
+				loadingMessage: 'Checking if update is possible',
+				finishMessage: 'System can be updated',
+				nextActionName: 'coreUpdateDownload'
+			},
+			coreUpdateDownload: {
+				loadingMessage: 'Downloading new core',
+				finishMessage: undefined,
+				nextActionName: 'coreUpdateVerifyChecksum'
+			},
+			coreUpdateVerifyChecksum: {
+				loadingMessage: 'Verifying checksum of downloaded core',
+				finishMessage: undefined,
+				nextActionName: 'coreUpdateUnpack'
+			},
+			coreUpdateUnpack: {
+				loadingMessage: 'Unpacking core',
+				finishMessage: undefined,
+				nextActionName: 'coreUpdateMove'
+			},
+			coreUpdateMove: {
+				loadingMessage: 'Moving core',
+				finishMessage: undefined,
+				nextActionName: 'clearAllCache'
+			},
+			clearAllCache: {
+				loadingMessage: 'Clearing caches',
+				finishMessage: 'Caches cleared',
+				nextActionName: 'coreUpdateActivate'
+			},
+			coreUpdateActivate: {
+				loadingMessage: 'Activating core',
+				finishMessage: 'Core updated - please reload your browser',
+				nextActionName: undefined
+			}
+		},
+
+		selectorOutput: '.t3js-coreUpdate-output',
+		selectorTemplate: '.t3js-coreUpdate-buttonTemplate',
+
+		/**
+		 * Clone of a DOM object acts as button template
+		 */
+		buttonTemplate: null,
+
+		/**
+		 * Fetching the templates out of the DOM
+		 */
+		initialize: function () {
+			var self = this;
+			var buttonTemplateSection = $(self.selectorTemplate);
+			this.buttonTemplate = buttonTemplateSection.children().clone();
+
+			$(document).on('click', '.t3js-coreUpdate-init', function (e) {
+				e.preventDefault();
+				var action = $(e.target).data('action');
+				$(document).find(self.selectorOutput).empty();
+				self[action]();
+			});
+		},
+
+		/**
+		 * Public method checkForUpdate
+		 */
+		checkForUpdate: function () {
+			this.callAction('coreUpdateUpdateVersionMatrix');
+		},
+
+		/**
+		 * Public method updateDevelopment
+		 */
+		updateDevelopment: function () {
+			this.update('development');
+		},
+
+		updateRegular: function () {
+			this.update('regular');
+		},
+
+		/**
+		 * Execute core update.
+		 *
+		 * @param type Either 'development' or 'regular'
+		 */
+		update: function (type) {
+			if (type !== "development") {
+				type = 'regular';
+			}
+			this.callAction('coreUpdateCheckPreConditions', type);
+		},
+
+		/**
+		 * Generic method to call actions from the queue
+		 *
+		 * @param actionName Name of the action to be called
+		 * @param type Update type (optional)
+		 */
+		callAction: function (actionName, type) {
+			var self = this;
+			var data = {
+				install: {
+					controller: 'ajax',
+					action: actionName
+				}
+			};
+			if (type !== undefined) {
+				data.install["type"] = type;
+			}
+			this.addLoadingMessage(this.actionQueue[actionName].loadingMessage);
+			$.ajax({
+				url: location.href,
+				data: data,
+				cache: false,
+				success: function (result) {
+					var canContinue = self.handleResult(result, self.actionQueue[actionName].finishMessage);
+					if (canContinue === true && (self.actionQueue[actionName].nextActionName !== undefined)) {
+						self.callAction(self.actionQueue[actionName].nextActionName, type);
+					}
+				},
+				error: function (result) {
+					self.handleResult(result);
+				}
+			});
+		},
+
+		/**
+		 * Handle ajax result of core update step.
+		 *
+		 * @param data
+		 * @param successMessage Optional success message
+		 */
+		handleResult: function (data, successMessage) {
+			var canContinue = false;
+			this.removeLoadingMessage();
+			if (data.success === true) {
+				canContinue = true;
+				if (data.status && typeof(data.status) === 'object') {
+					this.showStatusMessages(data.status);
+				}
+				if (data.action && typeof(data.action) === 'object') {
+					this.showActionButton(data.action);
+				}
+				if (successMessage) {
+					this.addMessage(Severity.ok, successMessage);
+				}
+			}
+			return canContinue;
+		},
+
+		/**
+		 * Add a loading message with some text.
+		 *
+		 * @param messageTitle
+		 */
+		addLoadingMessage: function (messageTitle) {
+			var domMessage = FlashMessage.render(Severity.loading, messageTitle);
+			$(this.selectorOutput).append(domMessage);
+		},
+
+		/**
+		 * Remove an enabled loading message
+		 */
+		removeLoadingMessage: function () {
+			$(this.selectorOutput).find('.alert-loading').remove();
+		},
+
+		/**
+		 * Show a list of status messages
+		 *
+		 * @param messages
+		 */
+		showStatusMessages: function (messages) {
+			var self = this;
+			$.each(messages, function (index, element) {
+				var title = false;
+				var message = false;
+				var severity = element.severity;
+				if (element.title) {
+					title = element.title;
+				}
+				if (element.message) {
+					message = element.message;
+				}
+				self.addMessage(severity, title, message);
+			});
+		},
+
+		/**
+		 * Show an action button
+		 *
+		 * @param button
+		 */
+		showActionButton: function (button) {
+			var title = false;
+			var action = false;
+			if (button.title) {
+				title = button.title;
+			}
+			if (button.action) {
+				action = button.action;
+			}
+			var domButton = this.buttonTemplate;
+			if (action) {
+				domButton.find('button').data('action', action);
+			}
+			if (title) {
+				domButton.find('button').html(title);
+			}
+			$(this.selectorOutput).append(domButton);
+		},
+
+		/**
+		 * Show a status message
+		 *
+		 * @param severity
+		 * @param title
+		 * @param message
+		 */
+		addMessage: function (severity, title, message) {
+			var domMessage = FlashMessage.render(severity, title, message);
+			$(this.selectorOutput).append(domMessage);
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/CreateAdmin.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/CreateAdmin.js
new file mode 100644
index 000000000000..849c49fbdfbe
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/CreateAdmin.js
@@ -0,0 +1,69 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/CreateAdmin
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/ProgressBar', 'TYPO3/CMS/Install/InfoBox', 'TYPO3/CMS/Install/Severity'], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorCreateToken: '#t3js-createAdmin-token',
+		selectorCreateTrigger: '.t3js-createAdmin-create',
+		selectorOutputContainer: '.t3js-createAdmin-output',
+
+		initialize: function() {
+			var self = this;
+			$(document).on('click', this.selectorCreateTrigger, function(e) {
+				e.preventDefault();
+				self.create();
+			});
+		},
+
+		create: function() {
+			var token = $(this.selectorCreateToken).text();
+			var url = location.href + '&install[controller]=ajax';
+			var postData = {
+				'install': {
+					'action': 'createAdmin',
+					'token': token,
+					'userName': $('.t3js-createAdmin-user').val(),
+					'userPassword': $('.t3js-createAdmin-password').val(),
+					'userPasswordCheck': $('.t3js-createAdmin-password-check').val()
+				}
+			};
+			var $outputContainer = $(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function(data) {
+					$outputContainer.empty();
+					if (data.success === true && Array.isArray(data.status)) {
+						data.status.forEach(function(element) {
+							var message = InfoBox.render(element.severity, element.title, element.message);
+							$outputContainer.html(message);
+						});
+					}
+				},
+				error: function () {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/DatabaseAnalyzer.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/DatabaseAnalyzer.js
new file mode 100644
index 000000000000..9600c60ec195
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/DatabaseAnalyzer.js
@@ -0,0 +1,162 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/DatabaseAnalyzer
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/ProgressBar', 'TYPO3/CMS/Install/InfoBox', 'TYPO3/CMS/Install/Severity'], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorGridderOpener: '.t3js-databaseAnalyzer-open',
+		selectorAnalyzeTrigger: '.t3js-databaseAnalyzer-analyze',
+		selectorExecuteTrigger: '.t3js-databaseAnalyzer-execute',
+		selectorOutputContainer: '.t3js-databaseAnalyzer-output',
+		selectorSuggestionBlock: '.t3js-databaseAnalyzer-suggestion-block',
+		selectorSuggestionLine: '.t3js-databaseAnalyzer-suggestion-line',
+
+		initialize: function() {
+			var self = this;
+
+			// Load main content on first open
+			$(document).on('click', this.selectorGridderOpener, function(event) {
+				var $element = $(event.target).closest(self.selectorGridderOpener);
+				if (!$element.data('databaseAnalyzerInitialized')) {
+					$element.data('databaseAnalyzerInitialized', true);
+					self.analyze();
+				}
+			});
+
+			// Select / deselect all checkboxes
+			$(document).on('click', '.t3js-databaseAnalyzer-suggestion-block-checkbox', function () {
+				$(this).closest('fieldset').find(':checkbox').prop('checked', this.checked);
+			});
+			$(document).on('click', this.selectorAnalyzeTrigger, function(e) {
+				e.preventDefault();
+				self.analyze();
+			});
+			$(document).on('click', this.selectorExecuteTrigger, function(e) {
+				e.preventDefault();
+				self.execute();
+			});
+		},
+
+		analyze: function() {
+			$(this.selectorOutputContainer).empty();
+			this.analyzeAjax();
+		},
+
+		analyzeAjax: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=databaseAnalyzerAnalyze';
+			var $outputContainer = $(this.selectorOutputContainer);
+			var blockTemplate = $(this.selectorSuggestionBlock).html();
+			var lineTemplate = $(this.selectorSuggestionLine).html();
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.append(message);
+			$(this.selectorExecuteTrigger).hide();
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function (data) {
+					if (data.success === true) {
+						if (Array.isArray(data.status)) {
+							data.status.forEach(function(element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.find('.alert-loading').remove();
+								$outputContainer.append(message);
+							});
+						}
+						if (Array.isArray(data.suggestions)) {
+							data.suggestions.forEach(function(element) {
+								var aBlock = $(blockTemplate).clone();
+								var key = element.key;
+								aBlock.find('.t3js-databaseAnalyzer-suggestion-block-legend').text(element.label);
+								aBlock.find('.t3js-databaseAnalyzer-suggestion-block-checkbox').attr('id', 't3-install-' + key + '-checkbox');
+								if (element.enabled) {
+									aBlock.find('.t3js-databaseAnalyzer-suggestion-block-checkbox').attr('checked', 'checked');
+								}
+								aBlock.find('.t3js-databaseAnalyzer-suggestion-block-label').attr('for', 't3-install-' + key + '-checkbox');
+								element.children.forEach(function(line) {
+									var aLine = $(lineTemplate).clone();
+									var hash = line.hash;
+									aLine.find('.t3js-databaseAnalyzer-suggestion-line-checkbox').attr('id', 't3-install-db-' + hash);
+									aLine.find('.t3js-databaseAnalyzer-suggestion-line-checkbox').data('hash', hash);
+									if (element.enabled) {
+										aLine.find('.t3js-databaseAnalyzer-suggestion-line-checkbox').attr('checked', 'checked');
+									}
+									aLine.find('.t3js-databaseAnalyzer-suggestion-line-label').attr('for', 't3-install-db-' + hash);
+									aLine.find('.t3js-databaseAnalyzer-suggestion-line-statement').html(line.statement);
+									if (line.current !== undefined) {
+										aLine.find('.t3js-databaseAnalyzer-suggestion-line-current-value').html(line.current);
+										aLine.find('.t3js-databaseAnalyzer-suggestion-line-current').show();
+									}
+									if (line.rowCount !== undefined) {
+										aLine.find('.t3js-databaseAnalyzer-suggestion-line-count-value').html(line.rowCount);
+										aLine.find('.t3js-databaseAnalyzer-suggestion-line-count').show();
+									}
+									aBlock.find('.t3js-databaseAnalyzer-suggestion-block-line').append(aLine);
+								});
+								$outputContainer.append(aBlock);
+							});
+							$(self.selectorExecuteTrigger).show();
+						}
+					}
+				},
+				error: function() {
+					var message = InfoBox.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		},
+
+		execute: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax';
+			var executeToken = $('#t3js-databaseAnalyzer-execute-token').text();
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			var $outputContainer = $('.t3js-databaseAnalyzer-output');
+			var selectedHashes = [];
+			$('.gridder-show .t3js-databaseAnalyzer-output .t3js-databaseAnalyzer-suggestion-block-line input:checked').each(function () {
+				selectedHashes.push($(this).data('hash'));
+			});
+			$outputContainer.empty().html(message);
+			var postData = {
+				'install': {
+					'action': 'databaseAnalyzerExecute',
+					'token': executeToken,
+					'hashes': selectedHashes
+				}
+			};
+			$outputContainer.empty().html(message);
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function(data) {
+					if (data.success === true) {
+						if (Array.isArray(data.status)) {
+							data.status.forEach(function(element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.find('.alert-loading').remove();
+								$outputContainer.append(message);
+							});
+						}
+					}
+					self.analyzeAjax();
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/DumpAutoload.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/DumpAutoload.js
new file mode 100644
index 000000000000..e219c30eb9e1
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/DumpAutoload.js
@@ -0,0 +1,61 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/DumpAutoload
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/ProgressBar', 'TYPO3/CMS/Install/InfoBox', 'TYPO3/CMS/Install/Severity'], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorDumpTrigger: '.t3js-dumpAutoload-dump',
+		selectorOutputContainer: '.t3js-dumpAutoload-output',
+
+		initialize: function() {
+			var self = this;
+			$(document).on('click', this.selectorDumpTrigger, function(e) {
+				e.preventDefault();
+				self.dump();
+			});
+		},
+
+		dump: function() {
+			var url = location.href + '&install[controller]=ajax&install[action]=dumpAutoload';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					if (data.success === true && Array.isArray(data.status)) {
+						if (data.status.length > 0) {
+							$outputContainer.empty();
+							data.status.forEach((function(element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							}));
+						}
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/EnvironmentCheck.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/EnvironmentCheck.js
new file mode 100644
index 000000000000..4f0a8aeb8324
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/EnvironmentCheck.js
@@ -0,0 +1,91 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/EnvironmentCheck
+ */
+define([
+    'jquery',
+    'TYPO3/CMS/Install/FlashMessage',
+    'TYPO3/CMS/Install/ProgressBar',
+    'TYPO3/CMS/Install/InfoBox',
+    'TYPO3/CMS/Install/Severity',
+    'bootstrap'
+], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+    'use strict';
+
+    return {
+        selectorGridderBadge: '.t3js-environmentCheck-badge',
+        selectorExecuteTrigger: '.t3js-environmentCheck-execute',
+        selectorOutputContainer: '.t3js-environmentCheck-output',
+
+        initialize: function() {
+            var self = this;
+
+            // Get status on initialize to have the badge and content ready
+            self.runTests();
+
+            $(document).on('click', this.selectorExecuteTrigger, function(e) {
+                e.preventDefault();
+                self.runTests();
+            });
+        },
+
+        runTests: function() {
+            var self = this;
+            var url = location.href + '&install[controller]=ajax&install[action]=environmentCheckGetStatus';
+            if (location.hash) {
+                url = url.replace(location.hash, "");
+            }
+            var $outputContainer = $(this.selectorOutputContainer);
+            var $errorBadge = $(this.selectorGridderBadge);
+            $errorBadge.text('').hide();
+            var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+            $outputContainer.empty().append(message);
+            $.ajax({
+                url: url,
+                cache: false,
+                success: function(data) {
+                    $outputContainer.empty();
+                    var warningCount = 0;
+                    var errorCount = 0;
+                    if (data.success === true && typeof(data.status) === 'object') {
+                        $.each(data.status, function(i, element) {
+                            if (Array.isArray(element) && element.length > 0) {
+                                element.forEach(function(aStatus) {
+                                    if (aStatus.severity === 1) {
+                                        warningCount += 1;
+                                    }
+                                    if (aStatus.severity === 2) {
+                                        errorCount += 1;
+                                    }
+                                    var message = InfoBox.render(aStatus.severity, aStatus.title, aStatus.message);
+                                    $outputContainer.append(message);
+                                });
+                            }
+                        });
+                        if (errorCount > 0) {
+                            $errorBadge.removeClass('label-warning').addClass('label-danger').text(errorCount).show();
+                        } else if (warningCount > 0) {
+                            $errorBadge.removeClass('label-error').addClass('label-warning').text(warningCount).show();
+                        }
+                    }
+                },
+                error: function() {
+                    var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+                    $outputContainer.empty().append(message);
+                }
+            });
+        }
+    };
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/ExtensionScanner.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ExtensionScanner.js
new file mode 100644
index 000000000000..4f6c59167ebd
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ExtensionScanner.js
@@ -0,0 +1,305 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/ExtensionScanner
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/Severity'], function($, FlashMessage, Severity) {
+	'use strict';
+
+	return {
+		listOfAffectedRestFileHashes: [],
+		selectorExtensionContainer: '.gridder-show .t3js-extensionScanner-extension',
+		selectorNumberOfFiles: '.gridder-show .t3js-extensionScanner-number-of-files',
+		selectorScanSingleTrigger: '.gridder-show .t3js-extensionScanner-scan-single',
+
+		initialize: function() {
+			var self = this;
+			$(document).on('click', this.selectorScanSingleTrigger,  function(e) {
+				// Scan a single extension
+				var extension = $(e.target).data('extension');
+				e.preventDefault();
+				self.scanSingleExtension(extension);
+				return false;
+			});
+			$(document).on('show.bs.collapse', this.selectorExtensionContainer, function(e) {
+				// Trigger extension scan on opening a extension collapsible
+				if ($(e.target).closest('').data('hasRun') !== 'true') {
+					$(this).find(self.selectorScanSingleTrigger).click();
+				}
+			});
+			$(document).on('click', '.t3js-extensionScanner-scan-all', function(e) {
+				// Scann all button
+				e.preventDefault();
+				var $extensions = $(self.selectorExtensionContainer);
+				self.scanAll($extensions);
+				return false;
+			});
+		},
+
+		/**
+		 * @param {string} extension
+		 * @returns {string}
+		 */
+		getExtensionSelector: function(extension) {
+			return this.selectorExtensionContainer + '-' + extension;
+		},
+
+		/**
+		 * @param {JQuery} $extensions
+		 */
+		scanAll: function($extensions) {
+			var self = this;
+			$(this.selectorExtensionContainer)
+				.removeClass('panel-danger panel-warning panel-success')
+				.find('.panel-progress-bar')
+				.css('width', 0)
+				.attr('aria-valuenow', 0)
+				.find('span')
+				.text('0%');
+			self.setProgressForAll();
+			$extensions.each(function() {
+				var extension = $(this).data('extension');
+				self.scanSingleExtension(extension);
+			});
+		},
+
+		/**
+		 * @param {string} extension
+		 * @param {number} doneFiles
+		 * @param {number} numberOfFiles
+		 */
+		setStatusMessageForScan: function(extension, doneFiles, numberOfFiles) {
+			$(this.getExtensionSelector(extension))
+				.find(this.selectorNumberOfFiles)
+				.text('Checked ' + doneFiles + ' of ' + numberOfFiles + ' files');
+		},
+
+		/**
+		 * @param {string} extension
+		 * @param {number} doneFiles
+		 * @param {number} numberOfFiles
+		 */
+		setProgressForScan: function(extension, doneFiles, numberOfFiles) {
+			var percent = (doneFiles / numberOfFiles) * 100;
+			$(this.getExtensionSelector(extension))
+				.find('.panel-progress-bar')
+				.css('width', percent + '%')
+				.attr('aria-valuenow', percent)
+				.find('span')
+				.text(percent + '%');
+		},
+
+		/**
+		 * Update main progress bar
+		 */
+		setProgressForAll: function() {
+			var self = this;
+			var numberOfExtensions = $(this.selectorExtensionContainer).length;
+			var numberOfSuccess = $(this.selectorExtensionContainer + '.t3js-extensionscan-finished.panel-success').length;
+			var numberOfWarning = $(this.selectorExtensionContainer + '.t3js-extensionscan-finished.panel-warning').length;
+			var numberOfError = $(this.selectorExtensionContainer + '.t3js-extensionscan-finished.panel-danger').length;
+			var numberOfScannedExtensions = numberOfSuccess + numberOfWarning + numberOfError;
+			var percent = (numberOfScannedExtensions / numberOfExtensions) * 100;
+			var markFullyScannedFilesToken = $('#t3js-extensionScanner-mark-fully-scanned-rest-files-token').text();
+			var url = location.href + '&install[controller]=ajax';
+			$('.t3js-extensionScanner-progress-all-extension .progress-bar')
+				.css('width', percent + '%')
+				.attr('aria-valuenow', percent)
+				.find('span')
+				.text(numberOfScannedExtensions + ' of ' + numberOfExtensions + ' scanned');
+			if (numberOfScannedExtensions === numberOfExtensions) {
+				top.TYPO3.Notification.success('Scan finished', 'All extensions has been scanned');
+				var postData = {
+					'install': {
+						'action': 'extensionScannerMarkFullyScannedRestFiles',
+						'token': markFullyScannedFilesToken,
+						'hashes': self.uniqueArray(this.listOfAffectedRestFileHashes)
+					}
+				};
+				$.ajax({
+					method: 'POST',
+					data: postData,
+					url: url,
+					cache: false,
+					success: function(data) {
+						if (data.success === true) {
+							top.TYPO3.Notification.success('Marked not affected files', 'Marked ' + data.markedAsNotAffected + ' ReST files as not affected.');
+						}
+					}
+				});
+			}
+		},
+
+		/**
+		 * Helper method removing duplicate entries from an array
+		 *
+		 * @param {Array} anArray
+		 * @returns {Array}
+		 */
+		uniqueArray: function(anArray) {
+			return anArray.filter(function(value, index, self) {
+				return self.indexOf(value) === index;
+			});
+		},
+
+		/**
+		 * Handle a single extension scan
+		 *
+		 * @param {string} extension
+		 */
+		scanSingleExtension: function(extension) {
+			var self = this;
+			var $extensionContainer = $(this.getExtensionSelector(extension));
+			var filesToken = $('#t3js-extensionScanner-files-token').text();
+			var hitTemplate = $('#t3js-extensionScanner-file-hit-template').html();
+			var restTemplate = $('#t3js-extensionScanner-file-hit-rest-template').html();
+			var scanFileToken = $('#t3js-extensionScanner-scan-file-token').text();
+			var hitFound = false;
+			var url = location.href + '&install[controller]=ajax';
+			var postData = {
+				'install': {
+					'action': 'extensionScannerFiles',
+					'token': filesToken,
+					'extension': extension
+				}
+			};
+			$extensionContainer.removeClass('panel-danger panel-warning panel-success t3js-extensionscan-finished');
+			$extensionContainer.data('hasRun', 'true');
+			$extensionContainer.find('.t3js-extensionScanner-scan-single').text('Scanning...').attr('disabled', 'disabled');
+			$extensionContainer.find('.t3js-extensionScanner-extension-body-loc').empty().text('0');
+			$extensionContainer.find('.t3js-extensionScanner-extension-body-ignored-files').empty().text('0');
+			$extensionContainer.find('.t3js-extensionScanner-extension-body-ignored-lines').empty().text('0');
+			this.setProgressForAll();
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function(data) {
+					if (data.success === true && Array.isArray(data.files)) {
+						var numberOfFiles = data.files.length;
+						if (numberOfFiles > 0) {
+							self.setStatusMessageForScan(extension, 0, numberOfFiles);
+							$extensionContainer.find('.t3js-extensionScanner-extension-body').text('');
+							var doneFiles = 0;
+							data.files.forEach(function(file) {
+								var postData = {
+									'install': {
+										'action': 'extensionScannerScanFile',
+										'token': scanFileToken,
+										'extension': extension,
+										'file': file
+									}
+								};
+								$.ajax({
+									method: 'POST',
+									data: postData,
+									url: url,
+									cache: false,
+									success: function(fileData) {
+										doneFiles = doneFiles + 1;
+										self.setStatusMessageForScan(extension, doneFiles, numberOfFiles);
+										self.setProgressForScan(extension, doneFiles, numberOfFiles);
+										if (fileData.success && $.isArray(fileData.matches)) {
+											$(fileData.matches).each(function() {
+												hitFound = true;
+												var match = this;
+												var aMatch = $(hitTemplate).clone();
+												aMatch.find('.t3js-extensionScanner-hit-file-panel-head').attr('href', '#collapse' + match.uniqueId);
+												aMatch.find('.t3js-extensionScanner-hit-file-panel-body').attr('id', 'collapse' + match.uniqueId);
+												aMatch.find('.t3js-extensionScanner-hit-filename').html(file);
+												aMatch.find('.t3js-extensionScanner-hit-message').html(match.message);
+												if (match.indicator === 'strong') {
+													aMatch.find('.t3js-extensionScanner-hit-file-panel-head .badges')
+														.append('<span class="badge" title="Reliable match, false positive unlikely">strong</span>');
+												} else {
+													aMatch.find('.t3js-extensionScanner-hit-file-panel-head .badges')
+														.append('<span class="badge" title="Probable match, but can be a false positive">weak</span>');
+												}
+												if (match.silenced === true) {
+													aMatch.find('.t3js-extensionScanner-hit-file-panel-head .badges')
+														.append('<span class="badge" title="Match has been annotated by extension author as false positive match">silenced</span>');
+												}
+												aMatch.find('.t3js-extensionScanner-hit-file-lineContent').empty().text(match.lineContent);
+												aMatch.find('.t3js-extensionScanner-hit-file-line').empty().text(match.line + ': ');
+												if ($.isArray(match.restFiles)) {
+													$(match.restFiles).each(function() {
+														var restFile = this;
+														var aRest = $(restTemplate).clone();
+														aRest.find('.t3js-extensionScanner-hit-rest-panel-head').attr('href', '#collapse' + restFile.uniqueId);
+														aRest.find('.t3js-extensionScanner-hit-rest-panel-head .badge').empty().text(restFile.version);
+														aRest.find('.t3js-extensionScanner-hit-rest-panel-body').attr('id', 'collapse' + restFile.uniqueId);
+														aRest.find('.t3js-extensionScanner-hit-rest-headline').html(restFile.headline);
+														aRest.find('.t3js-extensionScanner-hit-rest-body').html(restFile.content);
+														aRest.addClass('panel-' + restFile.class);
+														aMatch.find('.t3js-extensionScanner-hit-file-rest-container').append(aRest);
+														self.listOfAffectedRestFileHashes.push(restFile.file_hash);
+													});
+												}
+												var panelClass =
+													aMatch.find('.panel-breaking', '.t3js-extensionScanner-hit-file-rest-container').length > 0
+														? 'panel-danger'
+														: 'panel-warning';
+												aMatch.addClass(panelClass);
+												$extensionContainer.find('.t3js-extensionScanner-extension-body').removeClass('hide').append(aMatch);
+												if (panelClass === 'panel-danger') {
+													$extensionContainer.removeClass('panel-warning').addClass(panelClass);
+												}
+												if (panelClass === 'panel-warning' && !$extensionContainer.hasClass('panel-danger')) {
+													$extensionContainer.addClass(panelClass);
+												}
+											});
+										}
+										if (fileData.success) {
+											var currentLinesOfCode = parseInt($extensionContainer.find('.t3js-extensionScanner-extension-body-loc').text());
+											$extensionContainer.find('.t3js-extensionScanner-extension-body-loc').empty().text(currentLinesOfCode + parseInt(fileData.effectiveCodeLines));
+											if (fileData.isFileIgnored) {
+												var currentIgnoredFiles = parseInt($extensionContainer.find('.t3js-extensionScanner-extension-body-ignored-files').text());
+												$extensionContainer.find('.t3js-extensionScanner-extension-body-ignored-files').empty().text(currentIgnoredFiles + 1);
+											}
+											var currentIgnoredLines = parseInt($extensionContainer.find('.t3js-extensionScanner-extension-body-ignored-lines').text());
+											$extensionContainer.find('.t3js-extensionScanner-extension-body-ignored-lines').empty().text(currentIgnoredLines + parseInt(fileData.ignoredLines));
+										}
+										if (doneFiles === numberOfFiles) {
+											if (!hitFound) {
+												$extensionContainer.addClass('panel-success');
+											}
+											$extensionContainer.addClass('t3js-extensionscan-finished');
+											self.setProgressForAll();
+											$extensionContainer.find('.t3js-extensionScanner-scan-single').text('Rescan').attr('disabled', null);
+										}
+									},
+									error: function(data) {
+										doneFiles = doneFiles + 1;
+										self.setStatusMessageForScan(extension, doneFiles, numberOfFiles);
+										self.setProgressForScan(extension, doneFiles, numberOfFiles);
+										self.setProgressForAll();
+										top.TYPO3.Notification.error('Oops, an error occurred', 'please look the console output for details');
+										console.error(data);
+									}
+								});
+							});
+						} else {
+							top.TYPO3.Notification.warning('No files found', 'the extension EXT:' + extension + ' contains no files we can scan');
+						}
+					}
+				},
+				error: function(data) {
+					top.TYPO3.Notification.error('Oops, an error occurred', 'please look the console output for details');
+					console.error(data);
+				}
+			});
+		}
+	};
+});
\ No newline at end of file
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/FlashMessage.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/FlashMessage.js
new file mode 100644
index 000000000000..333ec335ce4a
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/FlashMessage.js
@@ -0,0 +1,49 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/FlashMessage
+ */
+define(['jquery', 'TYPO3/CMS/Install/Severity'], function ($, Severity) {
+	'use strict';
+
+	/**
+	 * @type {{template: (*)}}
+	 */
+	var FlashMessage = {
+		template: $('<div class="t3js-message typo3-message alert"><h4></h4><p class="messageText"></p></div>')
+	};
+
+	/**
+	 * render a FlashMessage
+	 * @param {Number} severity
+	 * @param {String} title
+	 * @param {String} message
+	 * @returns {jQuery}
+	 */
+	FlashMessage.render = function (severity, title, message) {
+		var flashMessage = this.template.clone();
+		flashMessage.addClass('alert-' + Severity.getCssClass(severity));
+		if (title) {
+			flashMessage.find('h4').html(title);
+		}
+		if (message) {
+			flashMessage.find('.messageText').html(message);
+		} else {
+			flashMessage.find('.messageText').remove();
+		}
+		return flashMessage;
+	};
+
+	return FlashMessage;
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/FolderStructure.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/FolderStructure.js
new file mode 100644
index 000000000000..771d7742a2d9
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/FolderStructure.js
@@ -0,0 +1,141 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/FolderStructure
+ */
+define(['jquery',
+	'TYPO3/CMS/Install/FlashMessage',
+	'TYPO3/CMS/Install/ProgressBar',
+	'TYPO3/CMS/Install/InfoBox',
+	'TYPO3/CMS/Install/Severity',
+	'bootstrap'
+], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorGridderBadge: '.t3js-folderStructure-badge',
+		selectorFixTrigger: '.t3js-folderStructure-errors-fix',
+		selectorOutputContainer: '.t3js-folderStructure-output',
+		selectorErrorContainer: '.t3js-folderStructure-errors',
+		selectorErrorList: '.t3js-folderStructure-errors-list',
+		selectorErrorFixTrigger: '.t3js-folderStructure-errors-fix',
+		selectorOkContainer: '.t3js-folderStructure-ok',
+		selectorOkList: '.t3js-folderStructure-ok-list',
+
+		initialize: function() {
+			var self = this;
+
+			// Get status on initialize to have the badge and content ready
+			self.getStatus();
+
+			$(document).on('click', this.selectorErrorFixTrigger, function(e) {
+				e.preventDefault();
+				self.fix();
+			});
+		},
+
+		getStatus: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=folderStructureGetStatus';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputContainer);
+			var $errorContainer = $(this.selectorErrorContainer);
+			var $errorBadge = $(this.selectorGridderBadge);
+			$errorBadge.text('').hide();
+			var $errorList = $(this.selectorErrorList);
+			var $okContainer = $(this.selectorOkContainer);
+			var $okList = $(this.selectorOkList);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.append(message);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					self.removeLoadingMessage($outputContainer);
+					if (data.success === true && Array.isArray(data.errorStatus)) {
+						var errorCount = 0;
+						if (data.errorStatus.length > 0) {
+							$errorContainer.show();
+							$errorList.empty();
+							data.errorStatus.forEach((function(element) {
+								errorCount += 1;
+								$errorBadge.text(errorCount).show();
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$errorList.append(message);
+							}));
+						} else {
+							$errorContainer.hide();
+						}
+					}
+					if (data.success === true && Array.isArray(data.okStatus)) {
+						if (data.okStatus.length > 0) {
+							$okContainer.show();
+							$okList.empty();
+							data.okStatus.forEach((function(element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$okList.append(message);
+							}));
+						} else {
+							$okList.hide();
+						}
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.append(message);
+				}
+			});
+		},
+
+		fix: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=folderStructureFix';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					self.removeLoadingMessage($outputContainer);
+					if (data.success === true && Array.isArray(data.fixedStatus)) {
+						if (data.fixedStatus.length > 0) {
+							data.fixedStatus.forEach(function(element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							});
+						} else {
+							var message = InfoBox.render(Severity.warning, 'Nothing fixed', '');
+							$outputContainer.append(message);
+						}
+						self.getStatus();
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		},
+
+		removeLoadingMessage: function($container) {
+			$container.find('.alert-loading').remove();
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/ImageProcessing.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ImageProcessing.js
new file mode 100644
index 000000000000..ce212324e18b
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ImageProcessing.js
@@ -0,0 +1,112 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/ImageProcessing
+ */
+define(['jquery',
+	'TYPO3/CMS/Install/FlashMessage',
+	'TYPO3/CMS/Install/ProgressBar',
+	'TYPO3/CMS/Install/InfoBox',
+	'TYPO3/CMS/Install/Severity',
+	'bootstrap'
+], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+    'use strict';
+
+    return {
+        selectorGridderOpener: '.t3js-imageProcessing-open',
+        selectorImageProcessingToken: '#t3js-imageProcessing-token',
+        selectorExecuteTrigger: '.t3js-imageProcessing-execute',
+        selectorTestContainer: '.t3js-imageProcessing-twinContainer',
+        selectorTwinImageTemplate: '.t3js-imageProcessing-twinImage-template',
+        selectorCommandContainer: '.t3js-imageProcessing-command',
+        selectorCommandText: '.t3js-imageProcessing-command-text',
+        selectorTwinImages: '.t3js-imageProcessing-images',
+
+        initialize: function() {
+            var self = this;
+
+            // Run tests on first open
+            $(document).on('click', this.selectorGridderOpener, function(event) {
+                var $element = $(event.target).closest(self.selectorGridderOpener);
+                if (!$element.data('isInitialized')) {
+                    $element.data('isInitialized', true);
+                    self.runTests();
+                }
+            });
+
+            $(document).on('click', this.selectorExecuteTrigger, function(e) {
+                e.preventDefault();
+                self.runTests();
+            });
+        },
+
+        runTests: function() {
+            var self = this;
+            var $twinImageTemplate = $(this.selectorTwinImageTemplate);
+            $(this.selectorTestContainer).each(function() {
+                var $container = $(this);
+                var testType = $container.data('test');
+                var message = InfoBox.render(Severity.loading, 'Loading...', '');
+                $container.empty().html(message);
+                var postData = {
+                    'install': {
+                        'action': 'imageProcessing',
+                        'token': $(self.selectorImageProcessingToken).text(),
+                        'testType': testType
+                    }
+                };
+                $.ajax({
+                    method: 'POST',
+                    data: postData,
+                    url: location.href + '&install[controller]=ajax',
+                    cache: false,
+                    success: function(data) {
+                        if (data.success === true) {
+                            $container.empty();
+                            if (Array.isArray(data.status)) {
+                                data.status.forEach(function(element) {
+                                    var message = InfoBox.render(element.severity, element.title, element.message);
+                                    $container.append(message);
+                                });
+                            }
+                            var $aTwin = $twinImageTemplate.clone();
+                            $aTwin.removeClass('t3js-imageProcessing-twinImage-template');
+                            if (data.fileExists === true) {
+                                $aTwin.find('img.reference').attr('src', data.referenceFile);
+                                $aTwin.find('img.result').attr('src', data.outputFile);
+                                $aTwin.find(self.selectorTwinImages).show();
+                            }
+                            if (Array.isArray(data.command) && data.command.length > 0) {
+                                $aTwin.find(self.selectorCommandContainer).show();
+                                var commandText = [];
+                                data.command.forEach(function(element) {
+                                    commandText.push('<strong>Command:</strong>\n' + element[1]);
+                                    if (element.length === 3) {
+                                        commandText.push('<strong>Result:</strong>\n' + element[2]);
+                                    }
+                                });
+                                $aTwin.find(self.selectorCommandText).html(commandText.join('\n'));
+                            }
+                            $container.append($aTwin);
+                        }
+                    },
+                    error: function() {
+                        var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+                        $container.empty().html(message);
+                    }
+                });
+            });
+        }
+    };
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/InfoBox.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/InfoBox.js
new file mode 100644
index 000000000000..30d4562e5fed
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/InfoBox.js
@@ -0,0 +1,49 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/InfoBox
+ */
+define(['jquery', 'TYPO3/CMS/Install/Severity'], function ($, Severity) {
+	'use strict';
+
+	/**
+	 * @type {{template: (*)}}
+	 */
+	var InfoBox = {
+		template: $('<div class="t3js-infobox callout callout-sm"><h4 class="callout-title"></h4><div class="callout-body"></div></div>')
+	};
+
+	/**
+	 * render a InfoBox
+	 * @param {Number} severity
+	 * @param {String} title
+	 * @param {String} message
+	 * @returns {jQuery}
+	 */
+	InfoBox.render = function (severity, title, message) {
+		var infoBox = this.template.clone();
+		infoBox.addClass('callout-' + Severity.getCssClass(severity));
+		if (title) {
+			infoBox.find('h4').html(title);
+		}
+		if (message) {
+			infoBox.find('.callout-body').html(message);
+		} else {
+			infoBox.find('.callout-body').remove();
+		}
+		return infoBox;
+	};
+
+	return InfoBox;
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/LocalConfiguration.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/LocalConfiguration.js
new file mode 100644
index 000000000000..8426368ac083
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/LocalConfiguration.js
@@ -0,0 +1,174 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/LocalConfiguration
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/ProgressBar', 'TYPO3/CMS/Install/InfoBox', 'TYPO3/CMS/Install/Severity', 'bootstrap'], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorToggleAllTrigger: '.gridder-show .t3js-localConfiguration-toggleAll',
+		selectorWriteTrigger: '.t3js-localConfiguration-write',
+		selectorSearchTrigger: '.t3js-localConfiguration-search',
+		selectorWriteToken: '#t3js-localConfiguration-write-token',
+		selectorOutputContainer: '.t3js-localConfiguration-output',
+
+		initialize: function() {
+			var self = this;
+
+			$(document).on('click', this.selectorWriteTrigger, function() {
+				self.write();
+			});
+
+			// Expand / collapse "Toggle all" button
+			$(document).on('click', this.selectorToggleAllTrigger, function() {
+				var $panels = $('.panel-collapse', '.gridder-show .t3js-localConfiguration');
+				var action = ($panels.eq(0).hasClass('in')) ? 'hide' : 'show';
+				$panels.collapse(action);
+			});
+
+			// Make jquerys "contains" work case-insensitive
+			jQuery.expr[':'].contains = jQuery.expr.createPseudo(function(arg) {
+				return function (elem) {
+					return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
+				};
+			});
+
+			// Focus search field on certain user interactions
+			$(document).on('keydown', function(e) {
+				var $searchInput = $(self.selectorSearchTrigger);
+				if (e.ctrlKey || e.metaKey) {
+					// Focus search field on ctrl-f
+					switch (String.fromCharCode(e.which).toLowerCase()) {
+						case 'f':
+							e.preventDefault();
+							$searchInput.focus();
+							break;
+					}
+				} else if (e.keyCode === 27) {
+					// Clear search on ESC key
+					e.preventDefault();
+					$searchInput.val('').focus();
+				}
+			});
+
+			// Perform expand collapse on search matches
+			$(document).on('keyup', this.selectorSearchTrigger, function() {
+				var typedQuery = $(this).val();
+				var $searchInput = $(self.selectorSearchTrigger);
+				$('div.item').each(function() {
+					var $item = $(this);
+					if ($(':contains(' + typedQuery + ')', $item).length > 0 || $('input[value*="' + typedQuery + '"]', $item).length > 0) {
+						$item.removeClass('hidden').addClass('searchhit');
+					} else {
+						$item.removeClass('searchhit').addClass('hidden');
+					}
+				});
+				$('.searchhit').parent().collapse('show');
+				self.handleButtonScrolling();
+				// Make search field clearable
+				require(['jquery.clearable'], function() {
+					var searchResultShown = ('' !== $searchInput.first().val());
+					$searchInput.clearable().focus();
+				});
+			});
+
+			// Trigger fixed button calculation on collapse / expand
+			$(document).on('shown.bs.collapse', '.gridder-show .collapse', function() {
+				self.handleButtonScrolling();
+			});
+			$(document).on('hidden.bs.collapse', '.gridder-show .collapse', function() {
+				self.handleButtonScrolling();
+			});
+		},
+
+		write: function() {
+			var url = location.href + '&install[controller]=ajax';
+			var configurationValues = {};
+			$('.gridder-show .t3js-localConfiguration-pathValue').each(function(i, element) {
+				var $element = $(element);
+				if ($element.attr('type') === 'checkbox') {
+					if (element.checked) {
+						configurationValues[$element.data('path')] = '1';
+					} else {
+						configurationValues[$element.data('path')] = '0';
+					}
+				} else {
+					configurationValues[$element.data('path')] = $element.val();
+				}
+			});
+			var postData = {
+				'install': {
+					'action': 'localConfigurationWrite',
+					'token': $(this.selectorWriteToken).text(),
+					'configurationValues': configurationValues
+				}
+			};
+			var $outputContainer = $(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function(data) {
+					$outputContainer.empty();
+					if (data.success === true && Array.isArray(data.status)) {
+						data.status.forEach(function(element) {
+							var message = InfoBox.render(element.severity, element.title, element.message);
+							$outputContainer.append(message);
+						});
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		},
+
+		/**
+		 * Fix or unfix the "Write configuration" / "Toggle all" buttons at browser window
+		 * bottom if a scrollbar is shown
+		 */
+		handleButtonScrolling: function() {
+			var $fixedFooterHandler = $('#fixed-footer-handler');
+			var $fixedFooter = $('#fixed-footer');
+			if (!this.isScrolledIntoView($fixedFooterHandler)) {
+				$fixedFooter.addClass('fixed');
+				$fixedFooter.width($('.t3js-localConfiguration .panel-group').width());
+			} else {
+				$fixedFooter.removeClass('fixed');
+			}
+		},
+
+		/**
+		 * Helper of handleButtonScrolling()
+		 * See if an element is within current viewport.
+		 *
+		 * @param element
+		 * @returns {boolean}
+		 */
+		isScrolledIntoView: function(element) {
+			var $window = $(window);
+			var docViewTop = $window.scrollTop();
+			var docViewBottom = docViewTop + $window.height();
+			var $elem = $(element);
+			var elemTop = $elem.offset().top;
+			var elemBottom = elemTop + $elem.height();
+			return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/MailTest.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/MailTest.js
new file mode 100644
index 000000000000..3dba7c912f99
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/MailTest.js
@@ -0,0 +1,73 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/CreateAdmin
+ */
+define(['jquery',
+	'TYPO3/CMS/Install/FlashMessage',
+	'TYPO3/CMS/Install/ProgressBar',
+	'TYPO3/CMS/Install/InfoBox',
+	'TYPO3/CMS/Install/Severity',
+	'bootstrap'
+], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorSendToken: '#t3js-mailTest-token',
+		selectorSendTrigger: '.t3js-mailTest-send',
+		selectorEmail: '.t3js-mailTest-email',
+		selectorOutputContainer: '.t3js-mailTest-output',
+
+		initialize: function() {
+			var self = this;
+			$(document).on('click', this.selectorSendTrigger, function(e) {
+				e.preventDefault();
+				self.send();
+			});
+		},
+
+		send: function() {
+			var url = location.href + '&install[controller]=ajax';
+			var postData = {
+				'install': {
+					'action': 'mailTest',
+					'token': $(this.selectorSendToken).text(),
+					'email': $('.t3js-mailTest-email').val()
+				}
+			};
+			var $outputContainer = $(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function(data) {
+					$outputContainer.empty();
+					if (data.success === true && Array.isArray(data.status)) {
+						data.status.forEach(function(element) {
+							var message = InfoBox.render(element.severity, element.title, element.message);
+							$outputContainer.html(message);
+						});
+					}
+				},
+				error: function () {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/ModuleMenu.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ModuleMenu.js
new file mode 100644
index 000000000000..859bdc2e90b0
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ModuleMenu.js
@@ -0,0 +1,305 @@
+/*
+ * 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!
+ */
+
+/**
+ * Class to render the module menu and handle the BE navigation
+ * Module: TYPO3/CMS/Install/ModuleMenu
+ */
+define(['jquery', 'TYPO3/CMS/Backend/Storage', 'TYPO3/CMS/Backend/Icons', 'TYPO3/CMS/Backend/Viewport'], function ($, Storage, Icons) {
+
+		if (typeof TYPO3.ModuleMenu !== 'undefined') {
+			return TYPO3.ModuleMenu.App;
+		}
+		TYPO3.ModuleMenu = {};
+		TYPO3.ModuleMenu.App = {
+			loadedModule: null,
+			loadedNavigationComponentId: '',
+			availableNavigationComponents: {},
+
+			initialize: function () {
+				var me = this;
+
+				// load the start module
+				if (top.startInModule && top.startInModule[0] && $('#' + top.startInModule[0]).length > 0) {
+					me.showModule(top.startInModule[0], top.startInModule[1]);
+				} else {
+					// fetch first module
+					if ($('.t3js-mainmodule:first').attr('id')) {
+						me.showModule($('.t3js-mainmodule:first').attr('id'));
+					}
+					// else case: the main module has no entries, this is probably a backend
+					// user with very little access rights, maybe only the logout button and
+					// a user settings module in topbar.
+				}
+
+				// check if module menu should be collapsed or not
+				var state = Storage.Persistent.get('BackendComponents.States.typo3-module-menu');
+				if (state && state.collapsed) {
+					TYPO3.ModuleMenu.App.toggleMenu(state.collapsed);
+				}
+
+				// check if there are collapsed items in the users' configuration
+				var collapsedMainMenuItems = me.getCollapsedMainMenuItems();
+				$.each(collapsedMainMenuItems, function (key, itm) {
+					if (itm !== true) {
+						return;
+					}
+					var $group = $('#' + key);
+					if ($group.length > 0) {
+						var $groupContainer = $group.find('.modulemenu-group-container');
+						$group.addClass('collapsed').removeClass('expanded');
+						TYPO3.Backend.NavigationContainer.cleanup();
+						$groupContainer.hide().promise().done(function () {
+							TYPO3.Backend.doLayout();
+						});
+					}
+				});
+				me.initializeEvents();
+			},
+
+			initializeEvents: function () {
+				var me = this;
+				$(document).on('click', '.modulemenu-group .modulemenu-group-header', function () {
+					var $group = $(this).parent('.modulemenu-group');
+					var $groupContainer = $group.find('.modulemenu-group-container');
+
+					TYPO3.Backend.NavigationContainer.cleanup();
+					if ($group.hasClass('expanded')) {
+						me.addCollapsedMainMenuItem($group.attr('id'));
+						$group.addClass('collapsed').removeClass('expanded');
+						$groupContainer.stop().slideUp().promise().done(function () {
+							TYPO3.Backend.doLayout();
+						});
+					} else {
+						me.removeCollapseMainMenuItem($group.attr('id'));
+						$group.addClass('expanded').removeClass('collapsed');
+						$groupContainer.stop().slideDown().promise().done(function () {
+							TYPO3.Backend.doLayout();
+						});
+					}
+
+				});
+				// register clicking on sub modules
+				$(document).on('click', '.modulemenu-item,.t3-menuitem-submodule', function (evt) {
+					evt.preventDefault();
+					me.showModule($(this).attr('id'));
+					TYPO3.Backend.doLayout();
+				});
+				$(document).on('click', '.t3js-topbar-button-modulemenu',
+					function (evt) {
+						evt.preventDefault();
+						TYPO3.ModuleMenu.App.toggleMenu();
+					}
+				);
+				$(document).on('click', '.t3js-scaffold-content-overlay',
+					function (evt) {
+						evt.preventDefault();
+						TYPO3.ModuleMenu.App.toggleMenu(true);
+					}
+				);
+				$(document).on('click', '.t3js-topbar-button-navigationcomponent',
+					function (evt) {
+						evt.preventDefault();
+						TYPO3.Backend.NavigationContainer.toggle();
+					}
+				);
+
+			},
+			/**
+			 * @param {bool} collapse
+			 */
+			toggleMenu: function (collapse) {
+				TYPO3.Backend.NavigationContainer.cleanup();
+
+				var $mainContainer = $('.t3js-scaffold');
+				var expandedClass = 'scaffold-modulemenu-expanded';
+
+				if (typeof collapse === 'undefined') {
+					collapse = $mainContainer.hasClass(expandedClass);
+				}
+				$mainContainer.toggleClass(expandedClass, !collapse);
+				if (!collapse) {
+					$('.scaffold')
+						.removeClass('scaffold-search-expanded')
+						.removeClass('scaffold-toolbar-expanded');
+				}
+
+				// Persist collapsed state in the UC of the current user
+				Storage.Persistent.set(
+					'BackendComponents.States.typo3-module-menu',
+					{
+						collapsed: collapse
+					}
+				);
+
+				TYPO3.Backend.doLayout();
+			},
+
+			/* fetch the data for a submodule */
+			getRecordFromName: function (name) {
+				var $subModuleElement = $('#' + name);
+				return {
+					name: name,
+					navigationComponentId: $subModuleElement.data('navigationcomponentid'),
+					navigationFrameScript: $subModuleElement.data('navigationframescript'),
+					navigationFrameScriptParam: $subModuleElement.data('navigationframescriptparameters'),
+					link: $subModuleElement.find('a').attr('href')
+				};
+			},
+
+			showModule: function (mod, params) {
+				params = params || '';
+				params = this.includeId(mod, params);
+				var record = this.getRecordFromName(mod);
+				this.loadModuleComponents(record, params);
+			},
+
+			loadModuleComponents: function (record, params) {
+				var mod = record.name;
+				if (record.navigationComponentId) {
+					this.loadNavigationComponent(record.navigationComponentId);
+				} else if (record.navigationFrameScript) {
+					TYPO3.Backend.NavigationContainer.show('typo3-navigationIframe');
+					this.openInNavFrame(record.navigationFrameScript, record.navigationFrameScriptParam);
+				} else {
+					TYPO3.Backend.NavigationContainer.hide();
+				}
+
+				this.highlightModuleMenuItem(mod);
+				this.loadedModule = mod;
+				this.openInContentFrame(record.link, params);
+
+				// compatibility
+				top.currentSubScript = record.link;
+				top.currentModuleLoaded = mod;
+
+				TYPO3.Backend.doLayout();
+			},
+
+			includeId: function (mod, params) {
+				if (typeof mod === 'undefined') {
+					return params;
+				}
+				//get id
+				var section = mod.split('_')[0];
+				if (top.fsMod.recentIds[section]) {
+					params = 'id=' + top.fsMod.recentIds[section] + '&' + params;
+				}
+
+				return params;
+			},
+
+			loadNavigationComponent: function (navigationComponentId) {
+				TYPO3.Backend.NavigationContainer.show(navigationComponentId);
+				if (navigationComponentId === this.loadedNavigationComponentId) {
+					return;
+				}
+				if (this.loadedNavigationComponentId !== '') {
+					Ext.getCmp(this.loadedNavigationComponentId).hide();
+				}
+				if ($('.t3js-scaffold-content-navigation [data-component="' + navigationComponentId + '"]').length < 1) {
+					$('.t3js-scaffold-content-navigation')
+						.append('<div class="scaffold-content-navigation-component" data-component="' + navigationComponentId + '" id="navigationComponent-' + navigationComponentId + '"></div>');
+				}
+				var component = Ext.getCmp(navigationComponentId);
+				if (typeof component === 'undefined') {
+					/** @todo fix hard coded pagetree **/
+					component = new TYPO3.Components.PageTree.App();
+					component.render('navigationComponent-' + navigationComponentId);
+				}
+				TYPO3.Backend.NavigationContainer.show(navigationComponentId);
+				this.loadedNavigationComponentId = navigationComponentId;
+			},
+
+			registerNavigationComponent: function (componentId, initCallback) {
+				this.availableNavigationComponents[componentId] = initCallback;
+			},
+
+			openInNavFrame: function (url, params) {
+				var navUrl = url + (params ? (url.indexOf('?') !== -1 ? '&' : '?') + params : '');
+				var currentUrl = TYPO3.Backend.NavigationContainer.getUrl();
+				if (currentUrl !== navUrl) {
+					TYPO3.Backend.NavigationContainer.refresh();
+				}
+				TYPO3.Backend.NavigationContainer.setUrl(url);
+			},
+
+			openInContentFrame: function (url, params) {
+				if (top.nextLoadModuleUrl) {
+					TYPO3.Backend.ContentContainer.setUrl(top.nextLoadModuleUrl);
+					top.nextLoadModuleUrl = '';
+				} else {
+					var urlToLoad = url + (params ? (url.indexOf('?') !== -1 ? '&' : '?') + params : '');
+					TYPO3.Backend.ContentContainer.setUrl(urlToLoad);
+				}
+			},
+
+			highlightModuleMenuItem: function (module, mainModule) {
+				$('.modulemenu-item.active').removeClass('active');
+				$('#' + module).addClass('active');
+			},
+
+			// refresh the HTML by fetching the menu again
+			refreshMenu: function () {
+				$.ajax(TYPO3.settings.ajaxUrls['modulemenu']).done(function (result) {
+					$('#menu').replaceWith(result.menu);
+					if (top.currentModuleLoaded) {
+						TYPO3.ModuleMenu.App.highlightModuleMenuItem(top.currentModuleLoaded);
+					}
+					TYPO3.Backend.doLayout();
+				});
+			},
+
+			reloadFrames: function () {
+				TYPO3.Backend.NavigationContainer.refresh();
+				TYPO3.Backend.ContentContainer.refresh();
+			},
+
+			/**
+			 * fetches all module menu elements in the local storage that should be collapsed
+			 * @returns {*}
+			 */
+			getCollapsedMainMenuItems: function () {
+				if (TYPO3.Storage.Persistent.isset('modulemenu')) {
+					return JSON.parse(TYPO3.Storage.Persistent.get('modulemenu'));
+				} else {
+					return {};
+				}
+			},
+
+			/**
+			 * adds a module menu item to the local storage
+			 * @param item
+			 */
+			addCollapsedMainMenuItem: function (item) {
+				var existingItems = this.getCollapsedMainMenuItems();
+				existingItems[item] = true;
+				TYPO3.Storage.Persistent.set('modulemenu', JSON.stringify(existingItems));
+			},
+
+			/**
+			 * removes a module menu item from the local storage
+			 * @param item
+			 */
+			removeCollapseMainMenuItem: function (item) {
+				var existingItems = this.getCollapsedMainMenuItems();
+				delete existingItems[item];
+				TYPO3.Storage.Persistent.set('modulemenu', JSON.stringify(existingItems));
+			}
+
+		};
+		// start the module menu app
+		TYPO3.ModuleMenu.App.initialize();
+		return TYPO3.ModuleMenu;
+	}
+);
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/Presets.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/Presets.js
new file mode 100644
index 000000000000..f1ec0a66a689
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/Presets.js
@@ -0,0 +1,79 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/Presets
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/ProgressBar', 'TYPO3/CMS/Install/InfoBox', 'TYPO3/CMS/Install/Severity'], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorActivateToken: '#t3js-presets-activate-token',
+		selectorActivateTrigger: '.t3js-presets-activate',
+		selectorOutputContainer: '.t3js-presets-output',
+
+		initialize: function() {
+			var self = this;
+
+			$(document).on('click', this.selectorActivateTrigger, function(e) {
+				e.preventDefault();
+				self.activate();
+			});
+
+			// Automatically select the custom preset if a value in one of its input fields is changed
+			$('.t3js-custom-preset').on('input', function() {
+				$('#' + $(this).data('radio')).prop('checked', true);
+			});
+		},
+
+		activate: function() {
+			var url = location.href + '&install[controller]=ajax';
+			var postData = {
+				'install[action]': 'presetActivate',
+				'install[token]': $(this.selectorActivateToken).text()
+			};
+			$('.gridder-show .t3js-presets-formField').each(function(i, element) {
+				var $element = $(element);
+				if ($element.attr('type') === 'radio') {
+					if (element.checked) {
+						postData[$element.attr('name')] = $element.val();
+					}
+				} else {
+					postData[$element.attr('name')] = $element.val();
+				}
+			});
+			var $outputContainer = $(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function(data) {
+					$outputContainer.empty();
+					if (data.success === true && Array.isArray(data.status)) {
+						data.status.forEach(function(element) {
+							var message = InfoBox.render(element.severity, element.title, element.status);
+							$outputContainer.append(message);
+						});
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/ProgressBar.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ProgressBar.js
new file mode 100644
index 000000000000..77425f3cdc62
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ProgressBar.js
@@ -0,0 +1,48 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/ProgressBar
+ */
+define(['jquery', 'TYPO3/CMS/Install/Severity'], function ($, Severity) {
+	'use strict';
+
+	/**
+	 * @type {{template: (*)}}
+	 */
+	var ProgressBar = {
+		template: $('<div class="progress"><div class="t3js-progressbar progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%"> <span class="sr-only"></span></div></div>')
+	};
+
+	/**
+	 * render a ProgressBar
+	 * @param {Number} severity
+	 * @param {String} title
+	 * @param {Number} progress
+	 * @returns {jQuery}
+	 */
+	ProgressBar.render = function (severity, title, progress) {
+		var progressBar = this.template.clone();
+		progressBar.addClass('progress-bar-' + Severity.getCssClass(severity));
+		if (progress) {
+			progressBar.css('width', progress + '%');
+			progressBar.attr('aria-valuenow',progresss);
+		}
+		if (title) {
+			progressBar.find('.sr-only').html(title);
+		}
+		return progressBar;
+	};
+
+	return ProgressBar;
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/ResetBackendUserUc.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ResetBackendUserUc.js
new file mode 100644
index 000000000000..34e423cebeed
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/ResetBackendUserUc.js
@@ -0,0 +1,62 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/DumpAutoload
+ */
+define(['jquery', 'TYPO3/CMS/Install/FlashMessage', 'TYPO3/CMS/Install/ProgressBar', 'TYPO3/CMS/Install/InfoBox', 'TYPO3/CMS/Install/Severity'], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorResetTrigger: '.t3js-resetBackendUserUc-reset',
+		selectorOutputContainer: '.t3js-resetBackendUserUc-output',
+
+		initialize: function() {
+			var self = this;
+			$(document).on('click', this.selectorResetTrigger, function(e) {
+				e.preventDefault();
+				self.reset();
+			});
+		},
+
+		reset: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=resetBackendUserUc';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function (data) {
+					if (data.success === true && Array.isArray(data.status)) {
+						if (data.status.length > 0) {
+							$outputContainer.empty();
+							data.status.forEach(function (element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							});
+						}
+					}
+				},
+				error: function () {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/Severity.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/Severity.js
new file mode 100644
index 000000000000..63d0faeca1b2
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/Severity.js
@@ -0,0 +1,55 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/Severity
+ */
+define([], function () {
+	'use strict';
+
+	var Severity = {
+		loading: -3,
+		notice: -2,
+		info: -1,
+		ok: 0,
+		warning: 1,
+		error: 2
+	};
+
+	Severity.getCssClass = function (severity) {
+		var severityClass;
+		switch (severity) {
+			case Severity.loading:
+				severityClass = 'notice alert-loading';
+				break;
+			case Severity.notice:
+				severityClass = 'notice';
+				break;
+			case Severity.ok:
+				severityClass = 'success';
+				break;
+			case Severity.warning:
+				severityClass = 'warning';
+				break;
+			case Severity.error:
+				severityClass = 'danger';
+				break;
+			case Severity.info:
+			default:
+				severityClass = 'info';
+		}
+		return severityClass;
+	};
+
+	return Severity;
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/TcaExtTablesCheck.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/TcaExtTablesCheck.js
new file mode 100644
index 000000000000..0f5bff16f1bb
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/TcaExtTablesCheck.js
@@ -0,0 +1,77 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/TcaExtTablesCheck
+ */
+define([
+	'jquery',
+	'TYPO3/CMS/Install/FlashMessage',
+	'TYPO3/CMS/Install/ProgressBar',
+	'TYPO3/CMS/Install/InfoBox',
+	'TYPO3/CMS/Install/Severity'
+], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorCheckTrigger: '.t3js-tcaExtTablesCheck-check',
+		selectorOutputContainer: '.t3js-tcaExtTablesCheck-output',
+
+		initialize: function() {
+			var self = this;
+			$(document).on('click', this.selectorCheckTrigger, function(e) {
+				e.preventDefault();
+				self.check();
+			});
+		},
+
+		check: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=tcaExtTablesCheck';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function (data) {
+					if (data.success === true && Array.isArray(data.status)) {
+						if (data.status.length > 0) {
+							var message = InfoBox.render(
+								Severity.warning,
+								'Extensions change TCA in ext_tables.php',
+								'Check for ExtensionManagementUtility and $GLOBALS["TCA"]'
+							);
+							$outputContainer.empty();
+							$outputContainer.append(message);
+							data.status.forEach(function (element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							});
+						} else {
+							var message = InfoBox.render(Severity.ok, 'No TCA changes in ext_tables.php files. Good job!', '');
+							$outputContainer.empty().html(message);
+						}
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', 'Use "Check for broken extensions"');
+					$outputContainer.empty().html(message);
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/TcaMigrationsCheck.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/TcaMigrationsCheck.js
new file mode 100644
index 000000000000..6e28941882cb
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/TcaMigrationsCheck.js
@@ -0,0 +1,77 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/TcaIntegrityChecker
+ */
+define([
+	'jquery',
+	'TYPO3/CMS/Install/FlashMessage',
+	'TYPO3/CMS/Install/ProgressBar',
+	'TYPO3/CMS/Install/InfoBox',
+	'TYPO3/CMS/Install/Severity'
+], function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorCheckTrigger: '.t3js-tcaMigrationsCheck-check',
+		selectorOutputContainer: '.t3js-tcaMigrationsCheck-output',
+
+		initialize: function() {
+			var self = this;
+			$(document).on('click', this.selectorCheckTrigger, function(e) {
+				e.preventDefault();
+				self.check();
+			});
+		},
+
+		check: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=tcaMigrationsCheck';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputContainer);
+			var message = ProgressBar.render(Severity.loading, 'Loading...', '');
+			$outputContainer.empty().html(message);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					if (data.success === true && Array.isArray(data.status)) {
+						if (data.status.length > 0) {
+							var message = InfoBox.render(
+								Severity.warning,
+								'TCA migrations need to be applied',
+								'Check the following list and apply needed changes.'
+							);
+							$outputContainer.empty();
+							$outputContainer.append(message);
+							data.status.forEach(function(element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							});
+						} else {
+							var message = InfoBox.render(Severity.ok, 'No TCA migrations need to be applied', 'Your TCA looks good.');
+							$outputContainer.empty().html(message);
+						}
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', 'Use "Check for broken extensions"');
+					$outputContainer.empty().html(message);
+				}
+			});
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/UpgradeDocs.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/UpgradeDocs.js
new file mode 100644
index 000000000000..d451a6ec4556
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/UpgradeDocs.js
@@ -0,0 +1,201 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/UpgradeDocs
+ */
+define(['jquery', 'bootstrap', 'chosen'], function ($) {
+	'use strict';
+
+	return {
+		selectorGridderOpener: '.t3js-upgradeDocs-open',
+		selectorMarkReadToken: '#t3js-upgradeDocs-markRead-token',
+		selectorUnmarkReadToken: '#t3js-upgradeDocs-unmarkRead-token',
+		selectorRestFileItem: '.upgrade_analysis_item_to_filter',
+		selectorFulltextSearch: '.gridder-show .t3js-upgradeDocs-fulltext-search',
+		selectorChosenField: '.gridder-show .t3js-upgradeDocs-chosen-select',
+
+		chosenField: null,
+		fulltextSearchField: null,
+
+		initialize: function() {
+			var self = this;
+
+			// Mark a file as read
+			$(document).on('click', '.t3js-upgradeDocs-markRead', function(event) {
+				self.markRead(event.target);
+			});
+			$(document).on('click', '.t3js-upgradeDocs-unmarkRead', function(event) {
+				self.unmarkRead(event.target);
+			});
+
+			// Make jquerys "contains" work case-insensitive
+			jQuery.expr[':'].contains = jQuery.expr.createPseudo(function(arg) {
+				return function (elem) {
+					return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
+				};
+			});
+
+			// Delayed initialize of some stuff on first open
+			$(document).on('click', this.selectorGridderOpener, function(event) {
+				$('[data-toggle="tooltip"]').tooltip({container: 'body'});
+				self.chosenField = $(self.selectorChosenField);
+				self.fulltextSearchField = $(self.selectorFulltextSearch);
+				self.initializeChosenSelector();
+				self.chosenField.on('change', function() {
+					self.combinedFilterSearch();
+				});
+				self.fulltextSearchField.on('keyup', function() {
+					self.combinedFilterSearch();
+				});
+			});
+		},
+
+		initializeChosenSelector: function() {
+			var self = this;
+			var tagString = '';
+			$(this.selectorRestFileItem).each(function() {
+				tagString += $(this).data('item-tags') + ',';
+			});
+			var tagArray = this.trimExplodeAndUnique(',', tagString);
+			$.each(tagArray, function(i, tag) {
+				self.chosenField.append('<option>' + tag + '</option>');
+			});
+			var config = {
+				'.chosen-select': {width: "100%", placeholder_text_multiple: "tags"},
+				'.chosen-select-deselect': {allow_single_deselect: true},
+				'.chosen-select-no-single': {disable_search_threshold: 10},
+				'.chosen-select-no-results': {no_results_text: 'Oops, nothing found!'},
+				'.chosen-select-width': {width: "100%"}
+			};
+			for (var selector in config) {
+				$(selector).chosen(config[selector]);
+			}
+			this.chosenField.trigger('chosen:updated');
+		},
+
+		combinedFilterSearch: function() {
+			var $items = $('div.item');
+			if (this.chosenField.val().length < 1 && this.fulltextSearchField.val().length < 1) {
+				$('.panel-version:not(:first) > .panel-collapse').collapse('hide');
+				$items.removeClass('hidden searchhit filterhit');
+				return false;
+			}
+			$items.addClass('hidden').removeClass('searchhit filterhit');
+
+			// apply tags
+			if (this.chosenField.val().length > 0) {
+				$items
+					.addClass('hidden')
+					.removeClass('filterhit');
+				var orTags = [];
+				var andTags = [];
+				$.each(this.chosenField.val(), function(index, item) {
+					var tagFilter = '[data-item-tags*="' + item + '"]';
+					if (item.indexOf(':') > 0) {
+						orTags.push(tagFilter);
+					} else {
+						andTags.push(tagFilter);
+					}
+				});
+				var andString = andTags.join('');
+				var tags = [];
+				if (orTags.length) {
+					for (var i = 0; i < orTags.length; i++) {
+						tags.push(andString + orTags[i]);
+					}
+				} else {
+					tags.push(andString);
+				}
+				var tagSelection = tags.join(',');
+				$(tagSelection)
+					.removeClass('hidden')
+					.addClass('searchhit filterhit');
+			} else {
+				$items
+					.addClass('filterhit')
+					.removeClass('hidden');
+			}
+			// apply fulltext search
+			var typedQuery = this.fulltextSearchField.val();
+			$('div.item.filterhit').each(function() {
+				var $item = $(this);
+				if ($(':contains(' + typedQuery + ')', $item).length > 0 || $('input[value*="' + typedQuery + '"]', $item).length > 0) {
+					$item.removeClass('hidden').addClass('searchhit');
+				} else {
+					$item.removeClass('searchhit').addClass('hidden');
+				}
+			});
+
+			$('.searchhit').closest('.panel-collapse').collapse('show');
+
+			//check for empty panels
+			$('.panel-version').each(function() {
+				if ($(this).find('.searchhit', '.filterhit').length < 1) {
+					$(this).find(' > .panel-collapse').collapse('hide');
+				}
+			});
+		},
+
+		markRead: function(element) {
+			var $button = $(element).closest('a');
+			$button.toggleClass('t3js-upgradeDocs-unmarkRead t3js-upgradeDocs-markRead');
+			$button.find('i').toggleClass('fa-check fa-ban');
+			$button.closest('.panel').appendTo('.panel-body-read');
+			$.ajax({
+				method: 'POST',
+				url: location.href + '&install[controller]=ajax',
+				data: {
+					'install': {
+						'ignoreFile': $button.data('filepath'),
+						'token': $(this.selectorMarkReadToken).text(),
+						'action': 'upgradeDocsMarkRead'
+					}
+				}
+			});
+		},
+
+		unmarkRead: function(element) {
+			var $button = $(element).closest('a');
+			var version = $button.closest('.panel').data('item-version');
+			$button.toggleClass('t3js-upgradeDocs-markRead t3js-upgradeDocs-unmarkRead');
+			$button.find('i').toggleClass('fa-check fa-ban');
+			$button.closest('.panel').appendTo('*[data-group-version="' + version + '"] .panel-body');
+			$.ajax({
+				method: 'POST',
+				url: location.href + '&install[controller]=ajax',
+				data: {
+					'install': {
+						'ignoreFile': $button.data('filepath'),
+						'token': $(this.selectorUnmarkReadToken).text(),
+						action: 'upgradeDocsUnmarkRead'
+					}
+				}
+			});
+		},
+
+		trimExplodeAndUnique: function(delimiter, string) {
+			var result = [];
+			var items = string.split(delimiter);
+			for (var i = 0; i < items.length; i++) {
+				var item = items[i].trim();
+				if (item.length > 0) {
+					if ($.inArray(item, result) === -1) {
+						result.push(item);
+					}
+				}
+			}
+			return result;
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/Modules/UpgradeWizards.js b/typo3/sysext/install/Resources/Public/JavaScript/Modules/UpgradeWizards.js
new file mode 100644
index 000000000000..dd7e19d96791
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/Modules/UpgradeWizards.js
@@ -0,0 +1,498 @@
+/*
+ * 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!
+ */
+
+/**
+ * Module: TYPO3/CMS/Install/UpgradeWizards
+ */
+define([
+	'jquery',
+	'TYPO3/CMS/Install/FlashMessage',
+	'TYPO3/CMS/Install/ProgressBar',
+	'TYPO3/CMS/Install/InfoBox',
+	'TYPO3/CMS/Install/Severity'
+],
+function($, FlashMessage, ProgressBar, InfoBox, Severity) {
+	'use strict';
+
+	return {
+		selectorGridderOpener: '.t3js-upgradeWizards-open',
+		selectorMarkUndoneToken: '#t3js-upgradeWizards-markUndone-token',
+		selectorOutputWizardsContainer: '.t3js-upgradeWizards-wizards-output',
+		selectorOutputDoneContainer: '.t3js-upgradeWizards-done-output',
+		selectorWizardsBlockingAddsTemplate: '.t3js-upgradeWizards-blocking-adds-template',
+		selectorWizardsBlockingAddsRows: '.t3js-upgradeWizards-blocking-adds-rows',
+		selectorWizardsBlockingAddsExecute: '.t3js-upgradeWizards-blocking-adds-execute',
+		selectorWizardsBlockingCharsetTemplate: '.t3js-upgradeWizards-blocking-charset-template',
+		selectorWizardsBlockingCharsetFix: '.t3js-upgradeWizards-blocking-charset-fix',
+		selectorWizardsDoneBodyTemplate: '.t3js-upgradeWizards-done-body-template',
+		selectorWizardsDoneRows: '.t3js-upgradeWizards-done-rows',
+		selectorWizardsDoneRowTemplate: '.t3js-upgradeWizards-done-row-template table',
+		selectorWizardsDoneRowMarkUndone: '.t3js-upgradeWizards-done-markUndone',
+		selectorWizardsDoneRowTitle: '.t3js-upgradeWizards-done-title',
+		selectorWizardsListTemplate: '.gridder-show .t3js-upgradeWizards-list-template',
+		selectorWizardsListRows: '.t3js-upgradeWizards-list-rows',
+		selectorWizardsListRowTemplate: '.gridder-show .t3js-upgradeWizards-list-row-template',
+		selectorWizardsListRowTitle: '.t3js-upgradeWizards-list-row-title',
+		selectorWizardsListRowExplanation: '.t3js-upgradeWizards-list-row-explanation',
+		selectorWizardsListRowExecute: '.t3js-upgradeWizards-list-row-execute',
+		selectorWizardsInputToken: '#t3js-upgradeWizards-input-token',
+		selectorWizardsInputTemplate: '.gridder-show .t3js-upgradeWizards-input',
+		selectorWizardsInputTitle: '.t3js-upgradeWizards-input-title',
+		selectorWizardsInputHtml: '.t3js-upgradeWizards-input-html',
+		selectorWizardsInputPerform: '.t3js-upgradeWizards-input-perform',
+		selectorWizardsExecuteToken: '#t3js-upgradeWizards-execute-token',
+
+		loadingMessage: ProgressBar.render(Severity.loading, 'Loading...', ''),
+
+		initialize: function() {
+			var self = this;
+
+			// Load main content on first open
+			$(document).on('click', this.selectorGridderOpener, function(event) {
+				var $element = $(event.target).closest(self.selectorGridderOpener);
+				if (!$element.data('upgradeWizardInitialized')) {
+					$element.data('upgradeWizardInitialized', true);
+					self.silentUpgrades();
+					self.doneUpgrades();
+				}
+			});
+
+			// Mark a done wizard undone
+			$(document).on('click', this.selectorWizardsDoneRowMarkUndone, function(event) {
+				var identifier = $(event.target).data('identifier');
+				self.markUndone(identifier);
+			});
+
+			// Execute "fix default mysql connection db charset" blocking wizard
+			$(document).on('click', this.selectorWizardsBlockingCharsetFix, function(event) {
+				self.blockingUpgradesDatabaseCharsetFix();
+			});
+
+			// Execute "add required fields + tables" blocking wizard
+			$(document).on('click', this.selectorWizardsBlockingAddsExecute, function(event) {
+				self.blockingUpgradesDatabaseAddsExecute();
+			});
+
+			// Get user input of a single upgrade wizard
+			$(document).on('click', this.selectorWizardsListRowExecute, function(event) {
+				var identifier = $(event.target).data('identifier');
+				self.wizardInput(identifier);
+			});
+
+			// Execute one upgrade wizard
+			$(document).on('click', this.selectorWizardsInputPerform, function(event) {
+				var identifier = $(event.target).data('identifier');
+				self.wizardExecute(identifier);
+			});
+		},
+
+		silentUpgrades: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=upgradeWizardsSilentUpgrades';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputWizardsContainer);
+			$outputContainer.empty().html(self.loadingMessage);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					$outputContainer.empty();
+					if (data.success === true && Array.isArray(data.status)) {
+						if (data.status.length > 0) {
+							data.status.forEach((function (element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							}));
+						}
+						self.blockingUpgradesDatabaseCharsetTest();
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		},
+
+		blockingUpgradesDatabaseCharsetTest: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=upgradeWizardsBlockingDatabaseCharsetTest';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputWizardsContainer);
+			var charsetTemplate = $(this.selectorWizardsBlockingCharsetTemplate).html();
+			$outputContainer.append().html(self.loadingMessage);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					self.removeLoadingMessage($outputContainer);
+					if (data.success === true) {
+						if (data.needsUpdate === true) {
+							$outputContainer.append($(charsetTemplate).clone());
+						} else {
+							self.blockingUpgradesDatabaseAdds();
+						}
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					self.removeLoadingMessage($outputContainer);
+					$outputContainer.append(message);
+				}
+			});
+		},
+
+		blockingUpgradesDatabaseCharsetFix: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=upgradeWizardsBlockingDatabaseCharsetFix';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputWizardsContainer);
+			$outputContainer.append().html(self.loadingMessage);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					self.removeLoadingMessage($outputContainer);
+					if (data.success === true) {
+						if (Array.isArray(data.status) && data.status.length > 0) {
+							data.status.forEach(function(element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							});
+						}
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					self.removeLoadingMessage($outputContainer);
+					$outputContainer.append(message);
+				}
+			});
+		},
+
+		blockingUpgradesDatabaseAdds: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=upgradeWizardsBlockingDatabaseAdds';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputWizardsContainer);
+			var breakingAddsTemplate = $(this.selectorWizardsBlockingAddsTemplate).html();
+			$outputContainer.append().html(self.loadingMessage);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					self.removeLoadingMessage($outputContainer);
+					if (data.success === true) {
+						if (data.needsUpdate === true) {
+							var adds = $(breakingAddsTemplate).clone();
+							if (typeof(data.adds.tables) === 'object') {
+								data.adds.tables.forEach(function(element) {
+									adds.find(self.selectorWizardsBlockingAddsRows).append('Table: ' + element.table + '<br>');
+								});
+							}
+							if (typeof(data.adds.columns) === 'object') {
+								data.adds.columns.forEach(function(element) {
+									adds.find(self.selectorWizardsBlockingAddsRows).append('Table: ' + element.table + ', Field: ' + element.field + '<br>');
+								});
+							}
+							if (typeof(data.adds.indexes) === 'object') {
+								data.adds.indexes.forEach(function(element) {
+									adds.find(self.selectorWizardsBlockingAddsRows).append('Table: ' + element.table + ', Index: ' + element.index + '<br>');
+								});
+							}
+							$outputContainer.append(adds);
+						} else {
+							self.wizardsList();
+						}
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					self.removeLoadingMessage($outputContainer);
+					$outputContainer.append(message);
+				}
+			});
+		},
+
+		blockingUpgradesDatabaseAddsExecute: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=upgradeWizardsBlockingDatabaseExecute';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputWizardsContainer);
+			$outputContainer.empty().html(self.loadingMessage);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					self.removeLoadingMessage($outputContainer);
+					if (data.success === true) {
+						if (Array.isArray(data.status) && data.status.length > 0) {
+							data.status.forEach(function(element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							});
+							self.wizardsList();
+						}
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					self.removeLoadingMessage($outputContainer);
+					$outputContainer.append(message);
+				}
+			});
+		},
+
+		wizardsList: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=upgradeWizardsList';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var listTemplate = $(this.selectorWizardsListTemplate);
+			var wizardTemplate = $(this.selectorWizardsListRowTemplate);
+			var $outputContainer = $(this.selectorOutputWizardsContainer);
+			$outputContainer.append(self.loadingMessage);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					self.removeLoadingMessage($outputContainer);
+					var list = $(listTemplate).clone();
+					list.removeClass('t3js-upgradeWizards-list-template');
+					if (data.success === true) {
+						var numberOfWizardsTodo = 0;
+						var numberOfWizards = 0;
+						if (Array.isArray(data.wizards) && data.wizards.length > 0) {
+							numberOfWizards = data.wizards.length;
+							data.wizards.forEach(function(element) {
+								if (element.shouldRenderWizard === true) {
+									var aRow = $(wizardTemplate).clone();
+									numberOfWizardsTodo = numberOfWizardsTodo +1;
+									aRow.removeClass('t3js-upgradeWizards-list-row-template');
+									aRow.find(self.selectorWizardsListRowTitle).empty().text(element.title);
+									aRow.find(self.selectorWizardsListRowExplanation).empty().html(element.explanation);
+									aRow.find(self.selectorWizardsListRowExecute).data('identifier', element.identifier);
+									list.find(self.selectorWizardsListRows).append(aRow);
+								}
+							});
+						}
+						var percent = 100;
+						if (numberOfWizardsTodo > 0) {
+							percent = ((numberOfWizards - numberOfWizardsTodo) / data.wizards.length) * 100;
+						}
+						list.find('.progress-bar')
+							.css('width', percent + '%')
+							.attr('aria-valuenow', percent)
+							.find('span')
+							.text(parseInt(percent) + '%');
+						$outputContainer.append(list);
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					self.removeLoadingMessage($outputContainer);
+					$outputContainer.append(message);
+				}
+			});
+		},
+
+		wizardInput: function(identifier) {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax';
+			var postData = {
+				'install': {
+					'action': 'upgradeWizardsInput',
+					'token': $(this.selectorWizardsInputToken).text(),
+					'identifier': identifier
+				}
+			};
+			var $outputContainer = $(this.selectorOutputWizardsContainer);
+			var inputTemplate = $(this.selectorWizardsInputTemplate);
+			$outputContainer.empty().html(this.loadingMessage);
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function(data) {
+					$outputContainer.empty();
+					var input = $(inputTemplate).clone();
+					input.removeClass('t3js-upgradeWizards-input');
+					if (data.success === true) {
+						if (Array.isArray(data.status)) {
+							data.status.forEach(function(element) {
+								var message = FlashMessage.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							});
+						}
+						if (data.userInput.wizardHtml.length > 0) {
+							input.find(self.selectorWizardsInputHtml).html(data.userInput.wizardHtml);
+						}
+						input.find(self.selectorWizardsInputTitle).text(data.userInput.title);
+						input.find(self.selectorWizardsInputPerform).data('identifier', data.userInput.identifier);
+					}
+					$outputContainer.append(input);
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		},
+
+		wizardExecute: function(identifier) {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax';
+			var postData = {
+				'install[action]': 'upgradeWizardsExecute',
+				'install[token]': $(this.selectorWizardsExecuteToken).text(),
+				'install[identifier]': identifier
+			};
+			$($('.gridder-show ' + this.selectorOutputWizardsContainer + ' form').serializeArray()).each(function() {
+				postData[this.name] = this.value;
+			});
+			var $outputContainer = $(this.selectorOutputWizardsContainer);
+			var $outputDoneContainer = $(this.selectorOutputDoneContainer);
+			$outputContainer.empty().html(this.loadingMessage);
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function(data) {
+					$outputContainer.empty();
+					if (data.success === true) {
+						if (Array.isArray(data.status)) {
+							data.status.forEach(function(element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							});
+						}
+						self.wizardsList();
+						$outputDoneContainer.empty();
+						self.doneUpgrades();
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		},
+
+		doneUpgrades: function() {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax&install[action]=upgradeWizardsDoneUpgrades';
+			if (location.hash) {
+				url = url.replace(location.hash, "");
+			}
+			var $outputContainer = $(this.selectorOutputDoneContainer);
+			var rowTemplate = $(this.selectorWizardsDoneRowTemplate).html();
+			var bodyTemplate = $(this.selectorWizardsDoneBodyTemplate).html();
+			$outputContainer.append(this.loadingMessage);
+			$.ajax({
+				url: url,
+				cache: false,
+				success: function(data) {
+					self.removeLoadingMessage($outputContainer);
+					if (data.success === true) {
+						if (Array.isArray(data.status) && data.status.length > 0) {
+							data.status.forEach(function(element) {
+								var message = InfoBox.render(element.severity, element.title, element.message);
+								$outputContainer.append(message);
+							});
+						}
+						var body = $(bodyTemplate).clone();
+						var hasBodyContent = false;
+						if (Array.isArray(data.wizardsDone) && data.wizardsDone.length > 0) {
+							data.wizardsDone.forEach(function(element) {
+								hasBodyContent = true;
+								var aRow = $(rowTemplate).clone();
+								aRow.find(self.selectorWizardsDoneRowMarkUndone).data('identifier', element.identifier);
+								aRow.find(self.selectorWizardsDoneRowTitle).html(element.title);
+								body.find(self.selectorWizardsDoneRows).append(aRow);
+							});
+						}
+						if (Array.isArray(data.rowUpdatersDone) && data.rowUpdatersDone.length > 0) {
+							data.rowUpdatersDone.forEach(function(element) {
+								hasBodyContent = true;
+								var aRow = $(rowTemplate).clone();
+								aRow.find(self.selectorWizardsDoneRowMarkUndone).data('identifier', element.identifier);
+								aRow.find(self.selectorWizardsDoneRowTitle).html(element.title);
+								body.find(self.selectorWizardsDoneRows).append(aRow);
+							});
+						}
+						if (hasBodyContent === true) {
+							$outputContainer.append(body);
+						}
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					self.removeLoadingMessage($outputContainer);
+					$outputContainer.append(message);
+				}
+			});
+		},
+
+		markUndone: function(identifier) {
+			var self = this;
+			var url = location.href + '&install[controller]=ajax';
+			var postData = {
+				'install': {
+					'action': 'upgradeWizardsMarkUndone',
+					'token': $(this.selectorMarkUndoneToken).text(),
+					'identifier': identifier
+				}
+			};
+			var $outputContainer = $(this.selectorOutputDoneContainer);
+			$outputContainer.empty().html(this.loadingMessage);
+			$.ajax({
+				method: 'POST',
+				data: postData,
+				url: url,
+				cache: false,
+				success: function(data) {
+					$outputContainer.empty();
+					if (data.success === true && Array.isArray(data.status)) {
+						data.status.forEach(function(element) {
+							var message = InfoBox.render(element.severity, element.title, element.message);
+							$outputContainer.append(message);
+							self.doneUpgrades();
+							self.blockingUpgradesDatabaseCharsetTest();
+						});
+					}
+				},
+				error: function() {
+					var message = FlashMessage.render(Severity.error, 'Something went wrong', '');
+					$outputContainer.empty().html(message);
+				}
+			});
+		},
+
+		removeLoadingMessage: function($container) {
+			$container.find('.alert-loading').remove();
+		}
+	};
+});
diff --git a/typo3/sysext/install/Resources/Public/JavaScript/RequireJSConfig.js b/typo3/sysext/install/Resources/Public/JavaScript/RequireJSConfig.js
new file mode 100644
index 000000000000..3935d2155ace
--- /dev/null
+++ b/typo3/sysext/install/Resources/Public/JavaScript/RequireJSConfig.js
@@ -0,0 +1,20 @@
+var require = {
+	baseUrl: '',
+	urlArgs: 'bust=' + (new Date()).getTime(),
+	paths: {
+		'TYPO3/CMS/Backend': 'sysext/backend/Resources/Public/JavaScript/',
+		'TYPO3/CMS/Install': 'sysext/install/Resources/Public/JavaScript/Modules/',
+		'jquery': 'sysext/core/Resources/Public/JavaScript/Contrib/jquery/jquery-3.2.1.min',
+		'jquery.clearable': 'sysext/backend/Resources/Public/JavaScript/jquery.clearable',
+		'bootstrap': 'sysext/install/Resources/Public/JavaScript/bootstrap.min',
+		'chosen': 'sysext/install/Resources/Public/JavaScript/chosen.jquery.min'
+	},
+	shim: {
+		jQuery: {
+			exports: '$'
+		},
+		'bootstrap': {
+			'deps': ['jquery']
+		}
+	}
+};
diff --git a/typo3/sysext/install/Tests/Unit/Controller/Action/Ajax/ExtensionCompatibilityTesterTest.php b/typo3/sysext/install/Tests/Unit/Controller/Action/Ajax/ExtensionCompatibilityTesterTest.php
index 347eead732ec..4202edd7ddc5 100644
--- a/typo3/sysext/install/Tests/Unit/Controller/Action/Ajax/ExtensionCompatibilityTesterTest.php
+++ b/typo3/sysext/install/Tests/Unit/Controller/Action/Ajax/ExtensionCompatibilityTesterTest.php
@@ -17,11 +17,13 @@ namespace TYPO3\CMS\Install\Tests\Unit\Controller\Action\Ajax;
 use TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtilityAccessibleProxy;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester;
+use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
 
 /**
  * Test case
  */
-class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
+class ExtensionCompatibilityTesterTest extends UnitTestCase
 {
     /**
      * @var \TYPO3\CMS\Core\Package\UnitTestPackageManager A backup of unit test package manager
@@ -57,7 +59,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
             'news' => '',
             'info' => ''
         ];
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['getExtensionsToExclude'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['getExtensionsToExclude'], []);
         $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToExclude')->will($this->returnValue(['info']));
         $result = $extensionCompatibilityTesterMock->_call('getExtensionsToLoad');
         $this->assertEquals(['news' => ''], $result);
@@ -68,10 +70,10 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
      */
     public function executeActionReturnsStringOkIfAllIsWell()
     {
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['getExtensionsToLoad', 'tryToLoadExtLocalconfAndExtTablesOfExtensions', 'deleteProtocolFile'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['getExtensionsToLoad', 'tryToLoadExtLocalconfAndExtTablesOfExtensions', 'deleteProtocolFile'], []);
         $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToLoad')->will($this->returnValue([]));
         $result = $extensionCompatibilityTesterMock->_call('executeAction');
-        $this->assertEquals('OK', $result);
+        $this->assertEquals(['success' => true], $result);
     }
 
     /**
@@ -79,7 +81,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
      */
     public function executeActionCallsGetExtensionsToLoad()
     {
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['getExtensionsToLoad', 'deleteProtocolFile', 'tryToLoadExtLocalconfAndExtTablesOfExtensions'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['getExtensionsToLoad', 'deleteProtocolFile', 'tryToLoadExtLocalconfAndExtTablesOfExtensions'], []);
         $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToLoad')->will($this->returnValue([]));
         $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToLoad');
         $extensionCompatibilityTesterMock->_call('executeAction');
@@ -90,7 +92,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
      */
     public function executeActionCallsLoadExtensions()
     {
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['tryToLoadExtLocalconfAndExtTablesOfExtensions', 'getExtensionsToLoad', 'deleteProtocolFile'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['tryToLoadExtLocalconfAndExtTablesOfExtensions', 'getExtensionsToLoad', 'deleteProtocolFile'], []);
         $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToLoad')->will($this->returnValue([]));
         $extensionCompatibilityTesterMock->expects($this->once())->method('tryToLoadExtLocalconfAndExtTablesOfExtensions');
         $extensionCompatibilityTesterMock->_call('executeAction');
@@ -101,7 +103,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
      */
     public function executeActionCallsDeleteProtocolFileIfForceCheckIsSet()
     {
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['tryToLoadExtLocalconfAndExtTablesOfExtensions', 'getExtensionsToLoad', 'deleteProtocolFile'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['tryToLoadExtLocalconfAndExtTablesOfExtensions', 'getExtensionsToLoad', 'deleteProtocolFile'], []);
         $extensionCompatibilityTesterMock->expects($this->once())->method('getExtensionsToLoad')->will($this->returnValue([]));
         $_GET['install']['extensionCompatibilityTester']['forceCheck'] = 1;
         $extensionCompatibilityTesterMock->expects($this->once())->method('deleteProtocolFile');
@@ -114,7 +116,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
      */
     public function deleteProtocolFileDeletesFile()
     {
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['dummy'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['dummy'], []);
         GeneralUtility::writeFile(PATH_site . 'typo3temp/assets/ExtensionCompatibilityTester.txt', 'foobar');
         $extensionCompatibilityTesterMock->_call('deleteProtocolFile');
         $this->assertFalse(file_exists(PATH_site . 'typo3temp/assets/ExtensionCompatibilityTester.txt'));
@@ -138,7 +140,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
                 'ext_tables.php' => PATH_typo3 . 'sysext/install/Tests/Unit/Controller/Action/Ajax/Fixtures/demo1/ext_tables.php'
             ]
         ];
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['loadExtLocalconfForExtension', 'writeCurrentExtensionToFile', 'loadExtTablesForExtension', 'removeCurrentExtensionFromFile'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['loadExtLocalconfForExtension', 'writeCurrentExtensionToFile', 'loadExtTablesForExtension', 'removeCurrentExtensionFromFile'], []);
         $extensionCompatibilityTesterMock->expects($this->atLeastOnce())->method('loadExtTablesForExtension');
         $extensionCompatibilityTesterMock->_call('tryToLoadExtLocalconfAndExtTablesOfExtensions', $extension);
     }
@@ -161,7 +163,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
                 'ext_localconf.php' => PATH_typo3 . 'sysext/install/Tests/Unit/Controller/Action/Ajax/Fixtures/demo1/ext_localconf.php'
             ]
         ];
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['loadExtLocalconfForExtension', 'writeCurrentExtensionToFile', 'loadExtTablesForExtension', 'removeCurrentExtensionFromFile'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['loadExtLocalconfForExtension', 'writeCurrentExtensionToFile', 'loadExtTablesForExtension', 'removeCurrentExtensionFromFile'], []);
         $extensionCompatibilityTesterMock->expects($this->atLeastOnce())->method('loadExtLocalconfForExtension');
         $extensionCompatibilityTesterMock->_call('tryToLoadExtLocalconfAndExtTablesOfExtensions', $extension);
     }
@@ -177,7 +179,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
                 'ext_localconf.php' => PATH_typo3 . 'sysext/install/Tests/Unit/Controller/Action/Ajax/Fixtures/demo1/ext_localconf.php'
             ]
         ];
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['dummy'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['dummy'], []);
         $extensionCompatibilityTesterMock->_call('loadExtLocalconfForExtension', 'demo1', $extension['demo1']);
         $this->assertArrayHasKey('demo1_executed', $GLOBALS);
         $this->assertEquals('foobaz', $GLOBALS['demo1_executed']);
@@ -202,7 +204,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
                 'ext_tables.php' => PATH_typo3 . 'sysext/install/Tests/Unit/Controller/Action/Ajax/Fixtures/demo1/ext_tables.php'
             ]
         ];
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['loadExtLocalconfForExtension', 'writeCurrentExtensionToFile', 'loadExtTablesForExtension', 'removeCurrentExtensionFromFile'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['loadExtLocalconfForExtension', 'writeCurrentExtensionToFile', 'loadExtTablesForExtension', 'removeCurrentExtensionFromFile'], []);
         $extensionCompatibilityTesterMock->expects($this->atLeastOnce())->method('writeCurrentExtensionToFile')->with('demo1');
         $extensionCompatibilityTesterMock->_call('tryToLoadExtLocalconfAndExtTablesOfExtensions', $extension);
     }
@@ -212,7 +214,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
      */
     public function writeCurrentExtensionToFileWritesExtensionKeyToFile()
     {
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['dummy'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['dummy'], []);
         $extensionCompatibilityTesterMock->_call('writeCurrentExtensionToFile', 'demo1');
         $fileContent = file_get_contents($extensionCompatibilityTesterMock->_get('protocolFile'));
         $this->assertEquals('demo1', $fileContent);
@@ -223,7 +225,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
      */
     public function getExtensionsToExcludeReturnsArray()
     {
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['dummy'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['dummy'], []);
         $returnValue = $extensionCompatibilityTesterMock->_call('getExtensionsToExclude');
         $this->assertInternalType('array', $returnValue);
     }
@@ -260,7 +262,7 @@ class ExtensionCompatibilityTesterTest extends \TYPO3\TestingFramework\Core\Unit
      */
     public function removeCurrentExtensionFromFileRemovesGivenExtension($extensionToRemove, $extensions, $expectedExtensions)
     {
-        $extensionCompatibilityTesterMock = $this->getAccessibleMock(\TYPO3\CMS\Install\Controller\Action\Ajax\ExtensionCompatibilityTester::class, ['dummy'], []);
+        $extensionCompatibilityTesterMock = $this->getAccessibleMock(ExtensionCompatibilityTester::class, ['dummy'], []);
         GeneralUtility::writeFile($extensionCompatibilityTesterMock->_get('protocolFile'), $extensions);
         $extensionCompatibilityTesterMock->_call('removeCurrentExtensionFromFile', $extensionToRemove);
 
diff --git a/typo3/sysext/install/Tests/Unit/FolderStructure/LinkNodeTest.php b/typo3/sysext/install/Tests/Unit/FolderStructure/LinkNodeTest.php
index 8950c0a6db88..6271b1090392 100644
--- a/typo3/sysext/install/Tests/Unit/FolderStructure/LinkNodeTest.php
+++ b/typo3/sysext/install/Tests/Unit/FolderStructure/LinkNodeTest.php
@@ -215,6 +215,7 @@ class LinkNodeTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
         $node->expects($this->any())->method('exists')->will($this->returnValue(true));
         $node->expects($this->once())->method('isLink')->will($this->returnValue(true));
         $node->expects($this->once())->method('isTargetCorrect')->will($this->returnValue(true));
+        $node->expects($this->once())->method('getRelativePathBelowSiteRoot')->will($this->returnValue(''));
         $statusArray = $node->getStatus();
         /** @var $status \TYPO3\CMS\Install\Status\StatusInterface */
         $status = $statusArray[0];
diff --git a/typo3/sysext/install/Classes/Controller/Action/Tool/About.php b/typo3/sysext/install/Tests/Unit/Service/ClearTableServiceTest.php
similarity index 50%
rename from typo3/sysext/install/Classes/Controller/Action/Tool/About.php
rename to typo3/sysext/install/Tests/Unit/Service/ClearTableServiceTest.php
index 49951efd0961..3cc6e328d590 100644
--- a/typo3/sysext/install/Classes/Controller/Action/Tool/About.php
+++ b/typo3/sysext/install/Tests/Unit/Service/ClearTableServiceTest.php
@@ -1,5 +1,5 @@
 <?php
-namespace TYPO3\CMS\Install\Controller\Action\Tool;
+namespace TYPO3\CMS\Install\Tests\Unit\Service;
 
 /*
  * This file is part of the TYPO3 CMS project.
@@ -14,20 +14,21 @@ namespace TYPO3\CMS\Install\Controller\Action\Tool;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\CMS\Install\Controller\Action;
+use TYPO3\CMS\Install\Service\ClearTableService;
+use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
 
 /**
- * About page
+ * Test case
  */
-class About extends Action\AbstractAction
+class ClearTableServiceTest extends UnitTestCase
 {
     /**
-     * Executes the tool
-     *
-     * @return string Rendered content
+     * @test
      */
-    protected function executeAction()
+    public function clearSelectedTableThrowsWithInvalidTableName()
     {
-        return $this->view->render();
+        $this->expectException(\RuntimeException::class);
+        $this->expectExceptionCode(1501942151);
+        (new ClearTableService())->clearSelectedTable('foo');
     }
 }
diff --git a/typo3/sysext/install/Tests/Unit/Service/CoreUpdateServiceTest.php b/typo3/sysext/install/Tests/Unit/Service/CoreUpdateServiceTest.php
index 69188430dca7..3daa0c7d984d 100644
--- a/typo3/sysext/install/Tests/Unit/Service/CoreUpdateServiceTest.php
+++ b/typo3/sysext/install/Tests/Unit/Service/CoreUpdateServiceTest.php
@@ -1,5 +1,5 @@
 <?php
-namespace TYPO3\CMS\Install\Service;
+namespace TYPO3\CMS\Install\Tests\Unit\Service;
 
 /*
  * This file is part of the TYPO3 CMS project.
@@ -14,10 +14,12 @@ namespace TYPO3\CMS\Install\Service;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
+
 /**
  * Test case
  */
-class CoreUpdateServiceTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
+class CoreUpdateServiceTest extends UnitTestCase
 {
     /**
      * @test
diff --git a/typo3/sysext/install/Tests/Unit/Service/CoreVersionServiceTest.php b/typo3/sysext/install/Tests/Unit/Service/CoreVersionServiceTest.php
index 9996e92b9494..e790f562089e 100644
--- a/typo3/sysext/install/Tests/Unit/Service/CoreVersionServiceTest.php
+++ b/typo3/sysext/install/Tests/Unit/Service/CoreVersionServiceTest.php
@@ -1,5 +1,5 @@
 <?php
-namespace TYPO3\CMS\Install\Service;
+namespace TYPO3\CMS\Install\Tests\Unit\Service;
 
 /*
  * This file is part of the TYPO3 CMS project.
@@ -15,6 +15,7 @@ namespace TYPO3\CMS\Install\Service;
  */
 
 use TYPO3\CMS\Core\Registry;
+use TYPO3\CMS\Install\Service\CoreVersionService;
 use TYPO3\CMS\Install\Service\Exception\CoreVersionServiceException;
 
 /**
diff --git a/typo3/sysext/install/Tests/Unit/Service/SilentConfigurationUpgradeServiceTest.php b/typo3/sysext/install/Tests/Unit/Service/SilentConfigurationUpgradeServiceTest.php
index 2ff9168802ba..19cfc2537895 100644
--- a/typo3/sysext/install/Tests/Unit/Service/SilentConfigurationUpgradeServiceTest.php
+++ b/typo3/sysext/install/Tests/Unit/Service/SilentConfigurationUpgradeServiceTest.php
@@ -1,5 +1,5 @@
 <?php
-namespace TYPO3\CMS\Install\Service;
+namespace TYPO3\CMS\Install\Tests\Unit\Service;
 
 /*
  * This file is part of the TYPO3 CMS project.
@@ -19,6 +19,7 @@ use TYPO3\CMS\Core\Package\PackageManager;
 use TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtilityAccessibleProxy;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Install\Controller\Exception\RedirectException;
+use TYPO3\CMS\Install\Service\SilentConfigurationUpgradeService;
 
 /**
  * Test case
diff --git a/typo3/sysext/install/Tests/Unit/Service/Typo3tempFileServiceTest.php b/typo3/sysext/install/Tests/Unit/Service/Typo3tempFileServiceTest.php
new file mode 100644
index 000000000000..4f14b75d0cc9
--- /dev/null
+++ b/typo3/sysext/install/Tests/Unit/Service/Typo3tempFileServiceTest.php
@@ -0,0 +1,46 @@
+<?php
+namespace TYPO3\CMS\Install\Tests\Unit\Service;
+
+/*
+ * 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\Install\Service\Typo3tempFileService;
+use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
+
+/**
+ * Test case
+ */
+class Typo3tempFileServiceTest extends UnitTestCase
+{
+    /**
+     * @test
+     */
+    public function clearAssetsFolderThrowsWithInvalidPath()
+    {
+        $this->expectException(\RuntimeException::class);
+        $this->expectExceptionCode(1501781453);
+        $subject = new Typo3tempFileService();
+        $subject->clearAssetsFolder('../foo');
+    }
+
+    /**
+     * @test
+     */
+    public function clearAssetsFolderThrowsWithNotExistingPath()
+    {
+        $this->expectException(\RuntimeException::class);
+        $this->expectExceptionCode(1501781454);
+        $subject = new Typo3tempFileService();
+        $subject->clearAssetsFolder('bar');
+    }
+}
diff --git a/typo3/sysext/install/Tests/Unit/Status/AbstractStatusTest.php b/typo3/sysext/install/Tests/Unit/Status/AbstractStatusTest.php
new file mode 100644
index 000000000000..41cca3951e1a
--- /dev/null
+++ b/typo3/sysext/install/Tests/Unit/Status/AbstractStatusTest.php
@@ -0,0 +1,50 @@
+<?php
+declare(strict_types=1);
+namespace TYPO3\CMS\Install\Tests\Unit\Status;
+
+/*
+ * 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\Install\Status\AlertStatus;
+use TYPO3\CMS\Install\Status\WarningStatus;
+use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
+
+/**
+ * Test case
+ */
+class AbstractStatusTest extends UnitTestCase
+{
+    /**
+     * @test
+     */
+    public function getSeverityNumberReturnNumberForAlertStatus()
+    {
+        $this->assertEquals(2, (new AlertStatus())->getSeverityNumber());
+    }
+
+    /**
+     * @test
+     */
+    public function jsonSerializeReturnsArrayForWarningStatus()
+    {
+        $status = new WarningStatus();
+        $status->setTitle('aTitle');
+        $status->setMessage('aMessage');
+        $expected = [
+            'severity' => 1,
+            'title' => 'aTitle',
+            'status' => 'aMessage',
+        ];
+        $this->assertEquals($expected, $status->jsonSerialize());
+    }
+}
diff --git a/typo3/sysext/install/Tests/Unit/Status/StatusUtilityTest.php b/typo3/sysext/install/Tests/Unit/Status/StatusUtilityTest.php
index 99561a9456c7..5a082412fcbf 100644
--- a/typo3/sysext/install/Tests/Unit/Status/StatusUtilityTest.php
+++ b/typo3/sysext/install/Tests/Unit/Status/StatusUtilityTest.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Tests\Unit\Status;
 
 /*
@@ -14,41 +15,37 @@ namespace TYPO3\CMS\Install\Tests\Unit\Status;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Install\Status\ErrorStatus;
 use TYPO3\CMS\Install\Status\Exception;
+use TYPO3\CMS\Install\Status\InfoStatus;
+use TYPO3\CMS\Install\Status\NoticeStatus;
+use TYPO3\CMS\Install\Status\OkStatus;
 use TYPO3\CMS\Install\Status\StatusUtility;
+use TYPO3\CMS\Install\Status\WarningStatus;
+use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
 
 /**
  * Test case
  */
-class StatusUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
+class StatusUtilityTest extends UnitTestCase
 {
     /**
      * @test
      */
     public function sortBySeveritySortsGivenStatusObjects()
     {
-        $errorMock = $this->getMockBuilder(\TYPO3\CMS\Install\Status\ErrorStatus::class)
-            ->setMethods(['dummy'])
-            ->getMock();
-        $warningMock = $this->getMockBuilder(\TYPO3\CMS\Install\Status\WarningStatus::class)
-            ->setMethods(['dummy'])
-            ->getMock();
-        $okMock = $this->getMockBuilder(\TYPO3\CMS\Install\Status\OkStatus::class)
-            ->setMethods(['dummy'])
-            ->getMock();
-        $infoMock = $this->getMockBuilder(\TYPO3\CMS\Install\Status\InfoStatus::class)
-            ->setMethods(['dummy'])
-            ->getMock();
-        $noticeMock = $this->getMockBuilder(\TYPO3\CMS\Install\Status\NoticeStatus::class)
-            ->setMethods(['dummy'])
-            ->getMock();
+        $errorStatus = new ErrorStatus();
+        $warningStatus = new WarningStatus();
+        $okStatus = new OkStatus();
+        $infoStatus = new InfoStatus();
+        $noticeStatus = new NoticeStatus();
         $statusUtility = new StatusUtility();
-        $return = $statusUtility->sortBySeverity([$noticeMock, $infoMock, $okMock, $warningMock, $errorMock]);
-        $this->assertSame([$errorMock], $return['error']);
-        $this->assertSame([$warningMock], $return['warning']);
-        $this->assertSame([$okMock], $return['ok']);
-        $this->assertSame([$infoMock], $return['information']);
-        $this->assertSame([$noticeMock], $return['notice']);
+        $return = $statusUtility->sortBySeverity([$noticeStatus, $infoStatus, $okStatus, $warningStatus, $errorStatus]);
+        $this->assertSame([$errorStatus], $return['error']);
+        $this->assertSame([$warningStatus], $return['warning']);
+        $this->assertSame([$okStatus], $return['ok']);
+        $this->assertSame([$infoStatus], $return['information']);
+        $this->assertSame([$noticeStatus], $return['notice']);
     }
 
     /**
@@ -67,14 +64,10 @@ class StatusUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
      */
     public function filterBySeverityReturnsSpecificSeverityOnly()
     {
-        $errorMock = $this->getMockBuilder(\TYPO3\CMS\Install\Status\ErrorStatus::class)
-            ->setMethods(['dummy'])
-            ->getMock();
-        $warningMock = $this->getMockBuilder(\TYPO3\CMS\Install\Status\WarningStatus::class)
-            ->setMethods(['dummy'])
-            ->getMock();
+        $errorStatus = new ErrorStatus();
+        $warningStatus = new WarningStatus();
         $statusUtility = new StatusUtility();
-        $return = $statusUtility->filterBySeverity([$errorMock, $warningMock], 'error');
-        $this->assertSame([$errorMock], $return);
+        $return = $statusUtility->filterBySeverity([$errorStatus, $warningStatus], 'error');
+        $this->assertSame([$errorStatus], $return);
     }
 }
diff --git a/typo3/sysext/install/Tests/Unit/View/JsonViewTest.php b/typo3/sysext/install/Tests/Unit/View/JsonViewTest.php
index 13b83ea4a662..dfe56683a356 100644
--- a/typo3/sysext/install/Tests/Unit/View/JsonViewTest.php
+++ b/typo3/sysext/install/Tests/Unit/View/JsonViewTest.php
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types=1);
 namespace TYPO3\CMS\Install\Tests\Unit\View;
 
 /*
@@ -14,46 +15,21 @@ namespace TYPO3\CMS\Install\Tests\Unit\View;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\CMS\Install\Status\Exception;
+use TYPO3\CMS\Install\View\JsonView;
+use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
 
 /**
  * Tests for the custom json view class
  */
-class JsonViewTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
+class JsonViewTest extends UnitTestCase
 {
     /**
      * @test
      */
-    public function transformStatusArrayToArrayReturnsArray()
+    public function renderReturnsAssignedVariablesAsArray()
     {
-        $jsonView = $this->getAccessibleMock(\TYPO3\CMS\Install\View\JsonView::class, ['dummy']);
-        $this->assertInternalType('array', $jsonView->_call('transformStatusMessagesToArray'));
-    }
-
-    /**
-     * @test
-     */
-    public function transformStatusArrayToArrayThrowsExceptionIfArrayContainsNotAMessageInterfaceMessage()
-    {
-        $this->expectException(Exception::class);
-        $this->expectExceptionCode(1381059600);
-        $jsonView = $this->getAccessibleMock(\TYPO3\CMS\Install\View\JsonView::class, ['dummy']);
-        $jsonView->_call('transformStatusMessagesToArray', ['foo']);
-    }
-
-    /**
-     * @test
-     */
-    public function transformStatusToArrayCreatesArrayFromStatusMessage()
-    {
-        $status = $this->createMock(\TYPO3\CMS\Install\Status\StatusInterface::class);
-        $status->expects($this->once())->method('getSeverity')->will($this->returnValue(-2));
-        $status->expects($this->once())->method('getTitle')->will($this->returnValue('aTitle'));
-        $status->expects($this->once())->method('getMessage')->will($this->returnValue('aMessage'));
-        $jsonView = $this->getAccessibleMock(\TYPO3\CMS\Install\View\JsonView::class, ['dummy']);
-        $return = $jsonView->_call('transformStatusToArray', $status);
-        $this->assertSame(-2, $return['severity']);
-        $this->assertSame('aTitle', $return['title']);
-        $this->assertSame('aMessage', $return['message']);
+        $jsonView = new JsonView();
+        $jsonView->assign('foo', 'bar');
+        $this->assertEquals(['foo' => 'bar'], $jsonView->render());
     }
 }
diff --git a/typo3/sysext/install/composer.json b/typo3/sysext/install/composer.json
index 6f7b9e38bb13..8f7e243ad4b0 100644
--- a/typo3/sysext/install/composer.json
+++ b/typo3/sysext/install/composer.json
@@ -14,7 +14,8 @@
 		"typo3/cms-core": ">=9.0.0 <=9.0.99",
 		"typo3/cms-extbase": ">=9.0.0 <=9.0.99",
 		"typo3/cms-fluid": ">=9.0.0 <=9.0.99",
-		"nikic/php-parser": "~3.0.6"
+		"nikic/php-parser": "~3.0.6",
+		"symfony/finder": "^2.7 || ^3.0"
 	},
 	"conflict": {
 		"typo3/cms": "*"
diff --git a/typo3/sysext/install/ext_localconf.php b/typo3/sysext/install/ext_localconf.php
index 4b259f706c60..018a5855bd2e 100644
--- a/typo3/sysext/install/ext_localconf.php
+++ b/typo3/sysext/install/ext_localconf.php
@@ -57,3 +57,19 @@ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['typo3DbLegac
     = \TYPO3\CMS\Install\Updates\Typo3DbExtractionUpdate::class;
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['funcExtension']
     = \TYPO3\CMS\Install\Updates\FuncExtractionUpdate::class;
+
+$iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
+$icons = [
+    'module-install-environment' => 'EXT:install/Resources/Public/Icons/module-install-environment.svg',
+    'module-install-maintenance' => 'EXT:install/Resources/Public/Icons/module-install-maintenance.svg',
+    'module-install-settings' => 'EXT:install/Resources/Public/Icons/module-install-settings.svg',
+    'module-install-upgrade' => 'EXT:install/Resources/Public/Icons/module-install-upgrade.svg',
+];
+
+foreach ($icons as $iconIdentifier => $source) {
+    $iconRegistry->registerIcon(
+        $iconIdentifier,
+        \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class,
+        ['source' => $source]
+    );
+}
diff --git a/typo3/sysext/install/ext_tables.php b/typo3/sysext/install/ext_tables.php
index 5fef66943327..74826beacf67 100644
--- a/typo3/sysext/install/ext_tables.php
+++ b/typo3/sysext/install/ext_tables.php
@@ -12,16 +12,75 @@ if (TYPO3_MODE === 'BE') {
     }
 
     \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModule(
-        'system',
-        'extinstall',
+        'tools',
+        'toolsmaintenance',
         '',
         '',
         [
             'routeTarget' => \TYPO3\CMS\Install\Controller\BackendModuleController::class . '::index',
+            'routeParameters' => [
+                'install' => [
+                    'action' => 'maintenance'
+                ]
+            ],
             'access' => 'admin',
-            'name' => 'system_extinstall',
-            'icon' => 'EXT:install/Resources/Public/Icons/module-install.svg',
-            'labels' => 'LLL:EXT:install/Resources/Private/Language/BackendModule.xlf'
+            'name' => 'tools_toolsmaintenance',
+            'iconIdentifier' => 'module-install-maintenance',
+            'labels' => 'LLL:EXT:install/Resources/Private/Language/ModuleInstallMaintenance.xlf'
+        ]
+    );
+    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModule(
+        'tools',
+        'toolssettings',
+        '',
+        '',
+        [
+            'routeTarget' => \TYPO3\CMS\Install\Controller\BackendModuleController::class . '::index',
+            'routeParameters' => [
+                'install' => [
+                    'action' => 'settings'
+                ]
+            ],
+            'access' => 'admin',
+            'name' => 'tools_toolssettings',
+            'iconIdentifier' => 'module-install-settings',
+            'labels' => 'LLL:EXT:install/Resources/Private/Language/ModuleInstallSettings.xlf'
+        ]
+    );
+    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModule(
+        'tools',
+        'toolsupgrade',
+        '',
+        '',
+        [
+            'routeTarget' => \TYPO3\CMS\Install\Controller\BackendModuleController::class . '::index',
+            'routeParameters' => [
+                'install' => [
+                    'action' => 'upgrade'
+                ]
+            ],
+            'access' => 'admin',
+            'name' => 'tools_toolsupgrade',
+            'iconIdentifier' => 'module-install-upgrade',
+            'labels' => 'LLL:EXT:install/Resources/Private/Language/ModuleInstallUpgrade.xlf'
+        ]
+    );
+    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModule(
+        'tools',
+        'toolsenvironment',
+        '',
+        '',
+        [
+            'routeTarget' => \TYPO3\CMS\Install\Controller\BackendModuleController::class . '::index',
+            'routeParameters' => [
+                'install' => [
+                    'action' => 'environment'
+                ]
+            ],
+            'access' => 'admin',
+            'name' => 'tools_toolsenvironment',
+            'iconIdentifier' => 'module-install-environment',
+            'labels' => 'LLL:EXT:install/Resources/Private/Language/ModuleInstallEnvironment.xlf'
         ]
     );
 }
-- 
GitLab