From 84bea9070fc9b15f0837ec951d3281652a4ea555 Mon Sep 17 00:00:00 2001 From: Helmut Hackbarth Date: Sat, 30 Mar 2024 10:18:40 +0100 Subject: [PATCH] New release v5.3.8 --- Classes/Command/CdnToLocal.php | 26 +- Classes/Command/CustomScss.php | 5 +- Classes/Components/Card.php | 3 +- Classes/Controller/AbstractController.php | 7 +- Classes/DataProcessing/BootstrapProcessor.php | 41 +- Classes/DataProcessing/ConfigProcessor.php | 9 +- Classes/DataProcessing/GalleryProcessor.php | 3 +- .../DataProcessing/LastModifiedProcessor.php | 13 +- Classes/Helper/ClassHelper.php | 656 +++++++++--------- Classes/Updates/BgOpacityUpgradeWizard.php | 4 +- Classes/UserFunction/TcaMatcher.php | 15 +- Classes/Wrapper/BackgroundWrapper.php | 286 ++++---- Classes/Wrapper/CardWrapper.php | 5 +- Classes/Wrapper/CarouselContainer.php | 3 +- Classes/Wrapper/CollapsibleAccordion.php | 1 - Classes/Wrapper/CollapsibleContainer.php | 3 +- Classes/Wrapper/SwiperContainer.php | 3 +- Configuration/RTE/Default.yaml | 143 ++-- Configuration/TSConfig/Content.tsconfig | 2 +- .../TypoScript/Lib/ContentElement.typoscript | 2 + .../TypoScript/Page/Template.typoscript | 1 + Configuration/TypoScript/constants.typoscript | 32 +- .../Partials/Content/Media/Type/Image.html | 2 +- Resources/Private/Partials/Content/Text.html | 6 +- .../Partials/Content/TextWithImage.html | 20 +- .../Page/Navbar/DarkModeToggler kopie.html | 59 ++ .../Partials/Page/Navbar/DarkModeToggler.html | 16 +- Resources/Private/Templates/Main.html | 19 +- Resources/Public/Backend/RTE/t3sbootstrap.css | 150 ++-- Resources/Public/Backend/t3sbootstrap.css | 412 ----------- Resources/Public/Styles/t3sbootstrap.css | 2 +- composer.json | 2 +- ext_conf_template.txt | 2 +- ext_emconf.php | 4 +- ext_localconf.php | 5 +- 35 files changed, 876 insertions(+), 1086 deletions(-) create mode 100644 Resources/Private/Partials/Page/Navbar/DarkModeToggler kopie.html delete mode 100644 Resources/Public/Backend/t3sbootstrap.css diff --git a/Classes/Command/CdnToLocal.php b/Classes/Command/CdnToLocal.php index d3378936..16992580 100644 --- a/Classes/Command/CdnToLocal.php +++ b/Classes/Command/CdnToLocal.php @@ -283,7 +283,7 @@ private function getGoogleFonts($googleFonts, $gooleFontsWeights, $baseDir): voi $googleFontsArr = explode(',', $googleFonts); foreach ($googleFontsArr as $font) { $fontFamily = trim($font); - $font = str_replace(' ', '-', trim($font)); + $font = str_replace(' ', '-', $fontFamily); foreach (explode(',', $gooleFontsWeights) as $style) { $style = trim($style); $zipFilename = strtolower($font).'?download=zip&subsets=latin&variants='.$style; @@ -310,13 +310,8 @@ private function getGoogleFonts($googleFonts, $gooleFontsWeights, $baseDir): voi font-style: normal; font-weight: ".$style."; font-display: swap; - src: url('".$basePath."Resources/Public/CSS/googlefonts/".$file.".eot'); - src: local(''), - url('googlefonts/".$file.".eot?#iefix') format('embedded-opentype'), - url('googlefonts/".$file.".woff2') format('woff2'), - url('googlefonts/".$file.".woff') format('woff'); - url('googlefonts/".$file.".ttf') format('truetype'), - url('googlefonts/".$file.".svg#".trim(str_replace(' ', '', $fontFamily))."') format('svg'); + src: url('googlefonts/".$file.".woff2') format('woff2'), + url('googlefonts/".$file.".ttf') format('truetype'); }".LF.LF; } } @@ -349,14 +344,12 @@ private function getGoogleFontsSitepackage($googleFonts, $gooleFontsWeights, $ba $fontArr[$fontFamily] = self::getGoogleFiles($zipContent, $baseDir); } } - if (is_array($fontArr)) { foreach ($fontArr as $fontFamily=>$googlePath) { $sliceArr[$fontFamily] = array_slice($googlePath, 0, 1); } $css = ''; $headerData = ''; - foreach ($sliceArr as $fontFamily=>$googlePath) { foreach (explode(',', $gooleFontsWeights) as $i=>$style) { $style = trim($style); @@ -368,13 +361,8 @@ private function getGoogleFontsSitepackage($googleFonts, $gooleFontsWeights, $ba font-style: normal; font-weight: ".$style."; font-display: swap; - src: url('".$googlefontsPath.$file.".eot'); - src: local(''), - url('".$googlefontsPath.$file.".eot?#iefix') format('embedded-opentype'), - url('".$googlefontsPath.$file.".woff2') format('woff2'), - url('".$googlefontsPath.$file.".woff') format('woff'); - url('".$googlefontsPath.$file.".ttf') format('truetype'), - url('".$googlefontsPath.$file.".svg#".trim(str_replace(' ', '', $fontFamily))."') format('svg'); + src: url('googlefonts/".$file.".woff2') format('woff2'), + url('googlefonts/".$file.".ttf') format('truetype'); }".LF.LF; } } @@ -395,7 +383,6 @@ private function getGoogleFiles($zipContent, $baseDir='/'): array if ($zipContent) { $localZipPath = $baseDir.'Resources/Public/CSS/googlefonts/'; $localZipFile = $localZipPath.'googlefont.zip'; - GeneralUtility::writeFile($localZipFile, $zipContent); $zip = new \ZipArchive(); if ($zip->open($localZipFile) === true) { @@ -409,9 +396,8 @@ private function getGoogleFiles($zipContent, $baseDir='/'): array } $googleFiles = scandir($localZipPath); $css = ''; - foreach ($googleFiles as $googleFile) { - if (str_ends_with($googleFile, 'woff')) { + if (str_ends_with($googleFile, 'ttf')) { $googleFileArr[] = $googleFile; } } diff --git a/Classes/Command/CustomScss.php b/Classes/Command/CustomScss.php index 553139ec..3232ecd1 100644 --- a/Classes/Command/CustomScss.php +++ b/Classes/Command/CustomScss.php @@ -10,6 +10,7 @@ use TYPO3\CMS\Core\Http\RequestFactory; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; use TYPO3\CMS\Extbase\Configuration\ConfigurationManager; use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; @@ -101,7 +102,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int ->from('pages') ->where( $queryBuilder->expr()->eq('sys_language_uid', 0), - $queryBuilder->expr()->eq('is_siteroot', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('is_siteroot', $queryBuilder->createNamedParameter(1, Connection::PARAM_INT)) ) ->executeQuery(); $siteroots = $result->fetchAllAssociative(); @@ -301,7 +302,7 @@ public function getBootstrapFilesNoZip($settings, $bootstrapVersion, $customPath # get the Boostrap SCSS-Files if ($bootstrapVersion > '5.1.3') { - $scssList = '_accordion.scss, _alert.scss, _badge.scss, _breadcrumb.scss, _button-group.scss, _buttons.scss, _card.scss, _carousel.scss, _close.scss, _containers.scss, _dropdown.scss, _forms.scss, _functions.scss, _grid.scss, _helpers.scss, _images.scss, _list-group.scss, _maps.scss, _mixins.scss, _modal.scss, _nav.scss, _navbar.scss, _offcanvas.scss, _pagination.scss, _placeholders.scss, _popover.scss, _progress.scss, _reboot.scss, _root.scss, _spinners.scss, _tables.scss, _toasts.scss, _tooltip.scss, _transitions.scss, _type.scss, _utilities.scss, _variables.scss, bootstrap-grid.scss, bootstrap-reboot.scss, bootstrap-utilities.scss, bootstrap.scss'; + $scssList = '_accordion.scss, _alert.scss, _badge.scss, _breadcrumb.scss, _button-group.scss, _buttons.scss, _card.scss, _carousel.scss, _close.scss, _containers.scss, _dropdown.scss, _forms.scss, _functions.scss, _grid.scss, _helpers.scss, _images.scss, _list-group.scss, _maps.scss, _mixins.scss, _modal.scss, _nav.scss, _navbar.scss, _offcanvas.scss, _pagination.scss, _placeholders.scss, _popover.scss, _progress.scss, _reboot.scss, _root.scss, _spinners.scss, _tables.scss, _toasts.scss, _tooltip.scss, _transitions.scss, _type.scss, _utilities.scss, _variables-dark.scss, _variables.scss, bootstrap-grid.scss, bootstrap-reboot.scss, bootstrap-utilities.scss, bootstrap.scss'; } else { $scssList = '_accordion.scss, _alert.scss, _badge.scss, _breadcrumb.scss, _button-group.scss, _buttons.scss, _card.scss, _carousel.scss, _close.scss, _containers.scss, _dropdown.scss, _forms.scss, _functions.scss, _grid.scss, _helpers.scss, _images.scss, _list-group.scss, _mixins.scss, _modal.scss, _nav.scss, _navbar.scss, _offcanvas.scss, _pagination.scss, _placeholders.scss, _popover.scss, _progress.scss, _reboot.scss, _root.scss, _spinners.scss, _tables.scss, _toasts.scss, _tooltip.scss, _transitions.scss, _type.scss, _utilities.scss, _variables.scss, bootstrap-grid.scss, bootstrap-reboot.scss, bootstrap-utilities.scss, bootstrap.scss'; } diff --git a/Classes/Components/Card.php b/Classes/Components/Card.php index b9eff47f..ed45d571 100644 --- a/Classes/Components/Card.php +++ b/Classes/Components/Card.php @@ -5,6 +5,7 @@ namespace T3SBS\T3sbootstrap\Components; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\SingletonInterface; use TYPO3\CMS\Core\Service\FlexFormService; @@ -138,7 +139,7 @@ public function getProcessedData(array $processedData, array $flexconf, array $p ->select('listitem') ->from('tx_t3sbootstrap_list_item_inline') ->where( - $queryBuilder->expr()->eq('parentid', $queryBuilder->createNamedParameter($processedData['data']['uid'], \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('parentid', $queryBuilder->createNamedParameter($processedData['data']['uid'], Connection::PARAM_INT)) ) ->executeQuery() ->fetchAllAssociative(); diff --git a/Classes/Controller/AbstractController.php b/Classes/Controller/AbstractController.php index a8b9e6b0..43e54c78 100644 --- a/Classes/Controller/AbstractController.php +++ b/Classes/Controller/AbstractController.php @@ -9,6 +9,7 @@ use T3SBS\T3sbootstrap\Domain\Model\Config; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; use TYPO3\CMS\Core\Site\Entity\SiteInterface; @@ -58,7 +59,7 @@ public function initializeAction(): void ->count('uid') ->from('sys_template') ->where( - $queryBuilder->expr()->eq('root', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('root', $queryBuilder->createNamedParameter(1, Connection::PARAM_INT)) ) ->executeQuery()->fetchOne(); } @@ -84,7 +85,7 @@ protected function getCustomScss(string $file): array ->from('pages') ->where( $queryBuilder->expr()->eq('sys_language_uid', 0), - $queryBuilder->expr()->eq('is_siteroot', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('is_siteroot', $queryBuilder->createNamedParameter(1, Connection::PARAM_INT)) ) ->executeQuery(); @@ -585,7 +586,7 @@ protected function getTreeList($id, $depth, $begin = 0, $permsClause = ''): stri $statement = $queryBuilder->select('uid') ->from('pages') ->where( - $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($id, \PDO::PARAM_INT)), + $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($id, Connection::PARAM_INT)), $queryBuilder->expr()->eq('sys_language_uid', 0), QueryHelper::stripLogicalOperatorPrefix($permsClause) ) diff --git a/Classes/DataProcessing/BootstrapProcessor.php b/Classes/DataProcessing/BootstrapProcessor.php index a5a76e06..0c9362c4 100644 --- a/Classes/DataProcessing/BootstrapProcessor.php +++ b/Classes/DataProcessing/BootstrapProcessor.php @@ -112,6 +112,28 @@ public function process(ContentObjectRenderer $cObj, array $contentObjectConfigu $sectionMenuClass = $contentObjectConfiguration['settings.']['sectionMenuClass']; } + if (!empty($contentObjectConfiguration['settings.']['shortcutsremove'])) { + $currentUid = (int) $GLOBALS['TSFE']->id; + $footerPid = !empty($processorConfiguration['footerPid']) ? (int) $processorConfiguration['footerPid'] : 0; + $removeArr = GeneralUtility::trimExplode(',', $contentObjectConfiguration['settings.']['shortcutsremove']); + if ($processedData['data']['pid'] !== $currentUid && $processedData['data']['pid'] !== $footerPid) { + // if contentByPid for collapsible_accordion or tabs_tab + foreach($removeArr as $remove) { + if (str_contains($processedData['data']['frame_class'], substr($remove,6))) { + $processedData['data']['frame_class'] = 'default'; + } + } + } + if ($cType == 'shortcut' && !empty($parentCType)) { + // remove a class or any string from shortcuts if in parent ce/wrapper + foreach($removeArr as $remove) { + if (str_contains($processedData['shortcuts'], $remove)) { + $processedData['shortcuts'] = self::removeChar($processedData['shortcuts'], $remove); + } + } + } + } + // class $classHelper = GeneralUtility::makeInstance(ClassHelper::class); $class = $classHelper->getDefaultClass($processedData['data'], $flexconf, $extConf['cTypeClass'], $sectionMenuClass); @@ -380,7 +402,7 @@ public function process(ContentObjectRenderer $cObj, array $contentObjectConfigu * @param array $animationSettingsArray * @return string */ - private function generateAnimationAttributeSettingsFromAnimationsArray(array $animationSettingsArray) + private function generateAnimationAttributeSettingsFromAnimationsArray(array $animationSettingsArray): string { $animationSettings = ''; @@ -397,4 +419,21 @@ private function generateAnimationAttributeSettingsFromAnimationsArray(array $an } return ' '.$animationSettings; } + + + /** + * @param string $s + * @param string $c + * @return string + */ + function removeChar(string $s, string $c): string + { + $s = str_replace($c, '', $s); + if (str_contains($s, $c)) { + self::removeChar($s, $c); + } + return $s; + } + + } diff --git a/Classes/DataProcessing/ConfigProcessor.php b/Classes/DataProcessing/ConfigProcessor.php index 4aa6a797..5e7c4ff9 100644 --- a/Classes/DataProcessing/ConfigProcessor.php +++ b/Classes/DataProcessing/ConfigProcessor.php @@ -9,6 +9,7 @@ use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; use TYPO3\CMS\Core\Domain\Repository\PageRepository; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction; use TYPO3\CMS\Core\Database\Query\QueryHelper; use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; @@ -627,7 +628,7 @@ public function process(ContentObjectRenderer $cObj, array $contentObjectConfigu ->count('uid') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('colPos', $queryBuilder->createNamedParameter(20, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('colPos', $queryBuilder->createNamedParameter(20, Connection::PARAM_INT)) ) ->executeQuery() ->fetchOne(); @@ -645,7 +646,7 @@ public function process(ContentObjectRenderer $cObj, array $contentObjectConfigu ->count('uid') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('colPos', $queryBuilder->createNamedParameter(21, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('colPos', $queryBuilder->createNamedParameter(21, Connection::PARAM_INT)) ) ->executeQuery() ->fetchOne(); @@ -688,7 +689,7 @@ protected function getNavigationColor(int $languageUid): string ) ) ->andWhere( - $queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($languageUid, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($languageUid, Connection::PARAM_INT)) ) ->executeQuery(); @@ -752,7 +753,7 @@ protected function getTreeList(int $id, int $depth, int $begin = 0, string $perm $statement = $queryBuilder->select('uid') ->from('pages') ->where( - $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($id, \PDO::PARAM_INT)), + $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($id, Connection::PARAM_INT)), $queryBuilder->expr()->eq('sys_language_uid', 0), QueryHelper::stripLogicalOperatorPrefix($permsClause) ) diff --git a/Classes/DataProcessing/GalleryProcessor.php b/Classes/DataProcessing/GalleryProcessor.php index 4bd1e2d6..de9eb9d5 100644 --- a/Classes/DataProcessing/GalleryProcessor.php +++ b/Classes/DataProcessing/GalleryProcessor.php @@ -11,6 +11,7 @@ use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface; use TYPO3\CMS\Frontend\ContentObject\Exception\ContentRenderingException; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Service\FlexFormService; use TYPO3\CMS\Core\Page\AssetCollector; use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; @@ -791,7 +792,7 @@ protected function countContentRecord($uid, $table='tt_content', $equal='uid'): ->count('uid') ->from($table) ->where( - $queryBuilder->expr()->eq($equal, $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq($equal, $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT)) ) ->executeQuery()->fetchOne(); diff --git a/Classes/DataProcessing/LastModifiedProcessor.php b/Classes/DataProcessing/LastModifiedProcessor.php index 4c9ede7d..db807db5 100644 --- a/Classes/DataProcessing/LastModifiedProcessor.php +++ b/Classes/DataProcessing/LastModifiedProcessor.php @@ -8,6 +8,7 @@ use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Context\Context; use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; @@ -74,8 +75,8 @@ protected function isMenuRecentlyUpdatedOnPage(): bool ->select('uid') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($sysLanguageUid, \PDO::PARAM_INT)), - $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter(self::getCurrentUid(), \PDO::PARAM_INT)), + $queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($sysLanguageUid, Connection::PARAM_INT)), + $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter(self::getCurrentUid(), Connection::PARAM_INT)), $queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter('menu_recently_updated')) ) ->executeQuery() @@ -101,8 +102,8 @@ protected function getRecentlyUpdated($setMaxResults): array ->from('tt_content') ->orderBy('tstamp', 'DESC') ->where( - $queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($sysLanguageUid, \PDO::PARAM_INT)), - $queryBuilder->expr()->neq('pid', $queryBuilder->createNamedParameter(self::getCurrentUid(), \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($sysLanguageUid, Connection::PARAM_INT)), + $queryBuilder->expr()->neq('pid', $queryBuilder->createNamedParameter(self::getCurrentUid(), Connection::PARAM_INT)) ) ->setMaxResults($setMaxResults) ->executeQuery() @@ -139,8 +140,8 @@ protected function getPageTitle($uid): string ->select('uid', 'title', 'nav_title') ->from('pages') ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)), - $queryBuilder->expr()->eq('doktype', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT)), + $queryBuilder->expr()->eq('doktype', $queryBuilder->createNamedParameter(1, Connection::PARAM_INT)) ) ->executeQuery() ->fetch(); diff --git a/Classes/Helper/ClassHelper.php b/Classes/Helper/ClassHelper.php index 23c3e091..5bbdb594 100644 --- a/Classes/Helper/ClassHelper.php +++ b/Classes/Helper/ClassHelper.php @@ -1,4 +1,5 @@ getPagesTSconfig(); - $layout = $data['layout']; - $layoutAddItems = ''; - $layoutClasses = ''; - $layoutAltLabels = ''; - - if (!empty($pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['addItems.'])) { - $layoutAddItems = $pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['addItems.']; - } - if (!empty($pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['classes.'])) { - $layoutClasses = $pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['classes.']; - } - if (!empty($pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['altLabels.'])) { - $layoutAltLabels = $pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['altLabels.']; - } - - if (isset($layoutAddItems) && isset($layoutAddItems) === $layout) { - $class .= ' layout-'.$layout; - } elseif (isset($layoutAltLabels) && !empty($layoutAltLabels[$layout])) { - if (isset($layoutClasses) && $layoutClasses[$layout]) { - $class .= ' '.strtolower($layoutClasses[$layout]); - } else { - $class .= ' layout-'.str_replace(' ', '-', strtolower($layoutAltLabels[$layout])); - } - } else { - $class .= ' layout-'.$layout; - } - } - // Frame class - if ($data['frame_class'] != 'default') { - $class .= ' frame-'.$data['frame_class']; - } - - // Align self - if (!empty($flexconf['responsiveVariations']) && !empty($flexconf['alignSelf'])) { - $class .= $flexconf['alignSelf'] ? ' align-self-'.$flexconf['responsiveVariations'].'-'.$flexconf['alignSelf'] : ''; - } else { - $class .= !empty($flexconf['alignSelf']) ? ' align-self-'.$flexconf['alignSelf'] : ''; - } - - //Flip Card - if ( $data['CType'] == 't3sbs_card' && !empty($flexconf['flipcard']) ) { - if ( $data['tx_t3sbootstrap_contextcolor'] ) { - $data['tx_t3sbootstrap_contextcolor'] = ''; - } - if ( $data['tx_t3sbootstrap_textcolor'] ) { - $data['tx_t3sbootstrap_textcolor'] = ''; - } - } - $class .= $data['tx_t3sbootstrap_textcolor'] ? ' text-'.$data['tx_t3sbootstrap_textcolor'] : ''; - $class .= $data['tx_t3sbootstrap_contextcolor'] ? ' bg-'.$data['tx_t3sbootstrap_contextcolor'] : ''; - - // Extra class - $class .= $data['tx_t3sbootstrap_extra_class'] ? ' '.$data['tx_t3sbootstrap_extra_class'] : ''; - // Border - if ( !empty($flexconf['border']) ) { - if ( $flexconf['border'] == 'border' ) { - $border = 'border'; - } else { - $border = 'border '.$flexconf['border']; - } - if ( !empty($flexconf['borderstyle']) ) { - $class .= ' '.$border.' border-'.$flexconf['borderstyle']; - } else { - $class .= ' '.$border; - } - $class .= !empty($flexconf['borderradius']) ? ' '.$flexconf['borderradius'] : ''; - } - - // Hiding / Display Elements - $class .= !empty($flexconf['hidden']) ? ' '.$flexconf['hidden'] : ''; - // Float - $class .= !empty($flexconf['float']) ? ' '.$flexconf['float'] : ''; - // if media - if ($data['assets'] || $data['image'] || $data['media']) { - $imageorient = $data['imageorient']; - if ( $imageorient == 10 || $imageorient == 17 || $imageorient == 18 ) { - $class .= ' clearfix'; - } - } - - if ($sectionMenuClass) { - $class .= ' section-index'; - } - - return ' '.trim($class); - } - - - /** - * Returns the CSS-class for tx_container - */ - public function getTxContainerClass(array $data, array $flexconf, bool $isVideo): string - { - $class = ''; - - /** - * Background Wrapper - */ - if ( $data['CType'] == 'background_wrapper' && $isVideo == FALSE ) { - $class .= !empty($flexconf['bgAttachmentFixed']) ? ' background-fixed' : ''; - if ((!$data['assets'] && !empty($flexconf['imageRaster'])) || (!empty($flexconf['origImage']) && !empty($flexconf['imageRaster']))) { - $class .= ' bg-raster'; - } - } - - /** - * Auto-layout row/column - */ - if ( $data['CType'] == 'autoLayout_row' ) { - if ( !empty($flexconf['horizontalGutters']) && $flexconf['horizontalGutters'] != 'gx-4') { - $class .= $flexconf['horizontalGutters'] ? ' '.$flexconf['horizontalGutters'] : ''; - } - if (!empty($flexconf['verticalGutters'])) { - if ($flexconf['verticalGutters'] == 'gy-0') $flexconf['verticalGutters'] = 0; - $class .= !empty($flexconf['verticalGutters']) ? ' '.$flexconf['verticalGutters'] : ''; - } - if (!empty($flexconf['responsiveVariations'])) { - $class .= !empty($flexconf['justify']) ? ' justify-content-'.$flexconf['responsiveVariations'].'-'.$flexconf['justify'] : ''; - $class .= !empty($flexconf['alignItem']) ? ' align-items-'.$flexconf['responsiveVariations'].'-'.$flexconf['alignItem'] : ''; - } else { - $class .= !empty($flexconf['alignItem']) ? ' align-items-'.$flexconf['alignItem'] : ''; - $class .= !empty($flexconf['justify']) ? ' justify-content-'.$flexconf['justify'] : ''; - } - } - - /** - * Container - */ - if ( $data['CType'] == 'container' ) { - if (!empty($flexconf['flexContainer'])) { - if (!empty($flexconf['responsiveVariations'])) { - $class .= !empty($flexconf['flexContainer']) ? ' d-'.$flexconf['responsiveVariations'].'-'.$flexconf['flexContainer'] : ''; - $class .= !empty($flexconf['direction']) ? ' flex-'.$flexconf['responsiveVariations'].'-'.$flexconf['direction'] : ''; - $class .= !empty($flexconf['justify']) ? ' justify-content-'.$flexconf['responsiveVariations'].'-'.$flexconf['justify'] : ''; - $class .= !empty($flexconf['alignItem']) ? ' align-items-'.$flexconf['responsiveVariations'].'-'.$flexconf['alignItem'] : ''; - $class .= !empty($flexconf['wrap']) ? ' flex-'.$flexconf['responsiveVariations'].'-'.$flexconf['wrap'] : ''; - $class .= !empty($flexconf['alignContent']) ? ' align-content-'.$flexconf['responsiveVariations'].'-'.$flexconf['alignContent'] : ''; - } else { - $class .= !empty($flexconf['flexContainer']) ? ' d-'.$flexconf['flexContainer'] : ''; - $class .= !empty($flexconf['direction']) ? ' flex-'.$flexconf['direction'] : ''; - $class .= !empty($flexconf['justify']) ? ' justify-content-'.$flexconf['justify'] : ''; - $class .= !empty($flexconf['alignItem']) ? ' align-items-'.$flexconf['alignItem'] : ''; - $class .= !empty($flexconf['wrap']) ? ' flex-'.$flexconf['wrap'] : ''; - $class .= !empty($flexconf['alignContent']) ? ' align-content-'.$flexconf['alignContent'] : ''; - } - } - } - - return trim($class); - } - - - /** - * Returns processedData header class - */ - public function getHeaderClass(array $data): array - { - $headerPosition = $data['header_position']; - if ( $headerPosition == 'left' ) $headerPosition = 'start'; - if ( $headerPosition == 'right' ) $headerPosition = 'end'; - $header['class'] = $headerPosition ? 'text-'.$headerPosition : ''; - $header['hClass'] = ''; - $header['hColorVar'] = ''; - $header['hLine'] = ''; - - if ( $data['tx_t3sbootstrap_header_class'] ) { - if (str_contains($data['tx_t3sbootstrap_header_class'], 'h-line-1')) { - $header['hLine'] = 'h-line-1'; - } - if (str_contains($data['tx_t3sbootstrap_header_class'], 'h-line-2')) { - $header['hLine'] = 'h-line-2'; - } - $textColors = explode(',','text-primary,text-secondary,text-danger,text-success,text-warning, + /** + * Returns the CSS-class for default elements + */ + public function getDefaultClass(array $data, array $flexconf, string $cTypeClass, string $sectionMenuClass): string + { + // class + if ($cTypeClass) { + $class = 'fsc-default ce-'. $data['CType']; + } else { + $class = ''; + } + // Spacing: padding + if ($data['tx_t3sbootstrap_padding_sides']) { + // on all 4 sides of the element + if ($data['tx_t3sbootstrap_padding_sides'] == 'blank') { + $class .= ' p-'.$data['tx_t3sbootstrap_padding_size']; + } else { + if ($data['tx_t3sbootstrap_padding_sides'] == 'l') { + $paddingSide = 's'; + } elseif ($data['tx_t3sbootstrap_padding_sides'] == 'r') { + $paddingSide = 'e'; + } else { + $paddingSide = $data['tx_t3sbootstrap_padding_sides']; + } + $class .= ' p'.$paddingSide.'-'.$data['tx_t3sbootstrap_padding_size']; + } + } + // Spacing: margin + if ($data['tx_t3sbootstrap_margin_sides']) { + // on all 4 sides of the element + if ($data['tx_t3sbootstrap_margin_sides'] == 'blank') { + $class .= ' m-'.$data['tx_t3sbootstrap_margin_size']; + } else { + if ($data['tx_t3sbootstrap_margin_sides'] == 'l') { + $marginSide = 's'; + } elseif ($data['tx_t3sbootstrap_margin_sides'] == 'r') { + $marginSide = 'e'; + } else { + $marginSide = $data['tx_t3sbootstrap_margin_sides']; + } + $class .= ' m'.$marginSide.'-'.$data['tx_t3sbootstrap_margin_size']; + } + } + + // Layout + if ($data['layout']) { + $pagesTSconfig = self::getFrontendController()->getPagesTSconfig(); + $layout = $data['layout']; + $layoutAddItems = ''; + $layoutClasses = ''; + $layoutAltLabels = ''; + + if (!empty($pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['addItems.'])) { + $layoutAddItems = $pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['addItems.']; + } + if (!empty($pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['classes.'])) { + $layoutClasses = $pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['classes.']; + } + if (!empty($pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['altLabels.'])) { + $layoutAltLabels = $pagesTSconfig['TCEFORM.']['tt_content.']['layout.']['altLabels.']; + } + + if (isset($layoutAddItems) && isset($layoutAddItems) === $layout) { + $class .= ' layout-'.$layout; + } elseif (isset($layoutAltLabels) && !empty($layoutAltLabels[$layout])) { + if (isset($layoutClasses) && $layoutClasses[$layout]) { + $class .= ' '.strtolower($layoutClasses[$layout]); + } else { + $class .= ' layout-'.str_replace(' ', '-', strtolower($layoutAltLabels[$layout])); + } + } else { + $class .= ' layout-'.$layout; + } + } + // Frame class + if ($data['frame_class'] != 'default') { + $class .= ' frame-'.$data['frame_class']; + } + + // Align self + if (!empty($flexconf['responsiveVariations']) && !empty($flexconf['alignSelf'])) { + $class .= $flexconf['alignSelf'] ? ' align-self-'.$flexconf['responsiveVariations'].'-'.$flexconf['alignSelf'] : ''; + } else { + $class .= !empty($flexconf['alignSelf']) ? ' align-self-'.$flexconf['alignSelf'] : ''; + } + + //Flip Card + if ($data['CType'] == 't3sbs_card' && !empty($flexconf['flipcard'])) { + if ($data['tx_t3sbootstrap_contextcolor']) { + $data['tx_t3sbootstrap_contextcolor'] = ''; + } + if ($data['tx_t3sbootstrap_textcolor']) { + $data['tx_t3sbootstrap_textcolor'] = ''; + } + } + $class .= $data['tx_t3sbootstrap_textcolor'] ? ' text-'.$data['tx_t3sbootstrap_textcolor'] : ''; + $class .= $data['tx_t3sbootstrap_contextcolor'] ? ' bg-'.$data['tx_t3sbootstrap_contextcolor'] : ''; + + // Extra class + $class .= $data['tx_t3sbootstrap_extra_class'] ? ' '.$data['tx_t3sbootstrap_extra_class'] : ''; + // Border + if (!empty($flexconf['border'])) { + if ($flexconf['border'] == 'border') { + $border = 'border'; + } else { + $border = 'border '.$flexconf['border']; + } + if (!empty($flexconf['borderstyle'])) { + $class .= ' '.$border.' border-'.$flexconf['borderstyle']; + } else { + $class .= ' '.$border; + } + $class .= !empty($flexconf['borderradius']) ? ' '.$flexconf['borderradius'] : ''; + } + + // Hiding / Display Elements + $class .= !empty($flexconf['hidden']) ? ' '.$flexconf['hidden'] : ''; + // Float + $class .= !empty($flexconf['float']) ? ' '.$flexconf['float'] : ''; + // if media + if ($data['assets'] || $data['image'] || $data['media']) { + $imageorient = $data['imageorient']; + if ($imageorient == 10 || $imageorient == 17 || $imageorient == 18) { + $class .= ' clearfix'; + } + } + + if ($sectionMenuClass) { + $class .= ' section-index'; + } + + return ' '.trim($class); + } + + + /** + * Returns the CSS-class for tx_container + */ + public function getTxContainerClass(array $data, array $flexconf, bool $isVideo): string + { + $class = ''; + + /** + * Background Wrapper + */ + if ($data['CType'] == 'background_wrapper' && $isVideo == false) { + $class .= !empty($flexconf['bgAttachmentFixed']) ? ' background-fixed' : ''; + if ((!$data['assets'] && !empty($flexconf['imageRaster'])) || (!empty($flexconf['origImage']) && !empty($flexconf['imageRaster']))) { + $class .= ' bg-raster'; + } + } + + /** + * Auto-layout row/column + */ + if ($data['CType'] == 'autoLayout_row') { + if (!empty($flexconf['horizontalGutters']) && $flexconf['horizontalGutters'] != 'gx-4') { + $class .= $flexconf['horizontalGutters'] ? ' '.$flexconf['horizontalGutters'] : ''; + } + if (!empty($flexconf['verticalGutters'])) { + if ($flexconf['verticalGutters'] == 'gy-0') { + $flexconf['verticalGutters'] = 0; + } + $class .= !empty($flexconf['verticalGutters']) ? ' '.$flexconf['verticalGutters'] : ''; + } + if (!empty($flexconf['responsiveVariations'])) { + $class .= !empty($flexconf['justify']) ? ' justify-content-'.$flexconf['responsiveVariations'].'-'.$flexconf['justify'] : ''; + $class .= !empty($flexconf['alignItem']) ? ' align-items-'.$flexconf['responsiveVariations'].'-'.$flexconf['alignItem'] : ''; + } else { + $class .= !empty($flexconf['alignItem']) ? ' align-items-'.$flexconf['alignItem'] : ''; + $class .= !empty($flexconf['justify']) ? ' justify-content-'.$flexconf['justify'] : ''; + } + } + + /** + * Container + */ + if ($data['CType'] == 'container') { + if (!empty($flexconf['flexContainer'])) { + if (!empty($flexconf['responsiveVariations'])) { + $class .= !empty($flexconf['flexContainer']) ? ' d-'.$flexconf['responsiveVariations'].'-'.$flexconf['flexContainer'] : ''; + $class .= !empty($flexconf['direction']) ? ' flex-'.$flexconf['responsiveVariations'].'-'.$flexconf['direction'] : ''; + $class .= !empty($flexconf['justify']) ? ' justify-content-'.$flexconf['responsiveVariations'].'-'.$flexconf['justify'] : ''; + $class .= !empty($flexconf['alignItem']) ? ' align-items-'.$flexconf['responsiveVariations'].'-'.$flexconf['alignItem'] : ''; + $class .= !empty($flexconf['wrap']) ? ' flex-'.$flexconf['responsiveVariations'].'-'.$flexconf['wrap'] : ''; + $class .= !empty($flexconf['alignContent']) ? ' align-content-'.$flexconf['responsiveVariations'].'-'.$flexconf['alignContent'] : ''; + } else { + $class .= !empty($flexconf['flexContainer']) ? ' d-'.$flexconf['flexContainer'] : ''; + $class .= !empty($flexconf['direction']) ? ' flex-'.$flexconf['direction'] : ''; + $class .= !empty($flexconf['justify']) ? ' justify-content-'.$flexconf['justify'] : ''; + $class .= !empty($flexconf['alignItem']) ? ' align-items-'.$flexconf['alignItem'] : ''; + $class .= !empty($flexconf['wrap']) ? ' flex-'.$flexconf['wrap'] : ''; + $class .= !empty($flexconf['alignContent']) ? ' align-content-'.$flexconf['alignContent'] : ''; + } + } + } + + return trim($class); + } + + + /** + * Returns processedData header class + */ + public function getHeaderClass(array $data): array + { + $headerPosition = $data['header_position']; + if ($headerPosition == 'left') { + $headerPosition = 'start'; + } + if ($headerPosition == 'right') { + $headerPosition = 'end'; + } + $header['class'] = $headerPosition ? 'text-'.$headerPosition : ''; + $header['hClass'] = 'mainheader'; + $header['hColorVar'] = ''; + $header['hLine'] = ''; + + if ($data['tx_t3sbootstrap_header_class']) { + if (str_contains($data['tx_t3sbootstrap_header_class'], 'h-line-1')) { + $header['hLine'] = 'h-line-1'; + } + if (str_contains($data['tx_t3sbootstrap_header_class'], 'h-line-2')) { + $header['hLine'] = 'h-line-2'; + } + $textColors = explode(',', 'text-primary,text-secondary,text-danger,text-success,text-warning, text-info,text-light,text-dark,text-body,text-muted,text-white'); - foreach ($textColors as $textColor) { - if (str_contains($data['tx_t3sbootstrap_header_class'], $textColor)) { - $header['hClass'] .= $textColor; - $header['hColorVar'] = 'var(--bs-'.substr($textColor, 5).')'; - break; - } - } - } - - $header['class'] .= $data['tx_t3sbootstrap_header_class'] ? ' '.$data['tx_t3sbootstrap_header_class'] : ''; - $header['hClass'] .= $data['tx_t3sbootstrap_header_display'] ? ' '.$data['tx_t3sbootstrap_header_display'] : ''; - - if ( $data['CType'] == 't3sbs_mediaobject' ) { - $header['hClass'] .= ' mt-0'; - } - - if ($data['header_link'] && !$data['tx_t3sbootstrap_header_celink']) { - $header['hLinkClass'] = trim($header['hClass']); - $header['hClass'] = ''; - } - - if ( $data['tx_t3sbootstrap_header_fontawesome'] ) { - $header['hFa'] = ' '; - } - - return $header; - } - - - /** - * Returns processedData if parent auto layout - */ - public function getAutoLayoutClass(array $flexconf): string - { - $class = ''; - - if ( !empty($flexconf['gridSystem']) ) { - switch ( $flexconf['gridSystem'] ) { - case 'equal': - $class .= ' col'; - break; - case 'column': - $class .= !empty($flexconf['xsColumns']) ? ' col-'.$flexconf['xsColumns'] : ''; - break; - case 'variable': - - if ( $flexconf['xsColumns'] == 'equal' - || $flexconf['smColumns'] == 'equal' - || $flexconf['mdColumns'] == 'equal' - || $flexconf['lgColumns'] == 'equal' - || $flexconf['xlColumns'] == 'equal' ) { - - $class .= !empty($flexconf['xsColumns']) ? ' col-xs' : ''; - $class .= !empty($flexconf['smColumns']) ? ' col-sm' : ''; - $class .= !empty($flexconf['mdColumns']) ? ' col-md' : ''; - $class .= !empty($flexconf['lgColumns']) ? ' col-lg' : ''; - $class .= !empty($flexconf['xlColumns']) ? ' col-xl': ''; - $class .= !empty($flexconf['xxlColumns']) ? ' col-xxl': ''; - - } else { - - $class .= !empty($flexconf['xsColumns']) ? ' col-'.$flexconf['xsColumns'] : ''; - $class .= !empty($flexconf['smColumns']) ? ' col-sm-'.$flexconf['smColumns'] : ''; - $class .= !empty($flexconf['mdColumns']) ? ' col-md-'.$flexconf['mdColumns'] : ''; - $class .= !empty($flexconf['lgColumns']) ? ' col-lg-'.$flexconf['lgColumns'] : ''; - $class .= !empty($flexconf['xlColumns']) ? ' col-xl-'.$flexconf['xlColumns'] : ''; - $class .= !empty($flexconf['xxlColumns']) ? ' col-xxl-'.$flexconf['xxlColumns'] : ''; - } - break; - } - } - - return $class; - - } - - /** - * Returns processedData if parent container - */ - public function getContainerClass(array $parentflexconf, array $flexconf): string - { - $class = ''; - - if ( !empty($parentflexconf['flexContainer']) && !empty($parentflexconf['responsiveVariations']) ) { - if (!empty($flexconf['responsiveVariations'])) { - $class .= !empty($flexconf['alignSelf']) ? ' align-self-'.$flexconf['responsiveVariations'].'-'.$flexconf['flexContainer'] : ''; - } else { - $class .= !empty($flexconf['alignSelf']) ? ' align-self-'.$flexconf['alignSelf'] : ''; - } - - $class .= !empty($flexconf['autoMargins']) ? ' '.$flexconf['autoMargins'].'-auto' : ''; - $class .= !empty($flexconf['order']) ? ' order-'.$flexconf['order'] : ''; - } - - return $class; - } - - - /** - * Returns the frontend controller - */ - protected function getFrontendController(): TypoScriptFrontendController - { - return $GLOBALS['TSFE']; - } - + foreach ($textColors as $textColor) { + if (str_contains($data['tx_t3sbootstrap_header_class'], $textColor)) { + $header['hClass'] .= ' '.$textColor; + $header['hColorVar'] = 'var(--bs-'.substr($textColor, 5).')'; + break; + } + } + } + + $header['class'] .= $data['tx_t3sbootstrap_header_class'] ? ' '.$data['tx_t3sbootstrap_header_class'] : ''; + $header['hClass'] .= $data['tx_t3sbootstrap_header_display'] ? ' '.$data['tx_t3sbootstrap_header_display'] : ''; + + if ($data['CType'] == 't3sbs_mediaobject') { + $header['hClass'] .= ' mt-0'; + } + + if ($data['header_link'] && !$data['tx_t3sbootstrap_header_celink']) { + $header['hLinkClass'] = trim($header['hClass']); + $header['hClass'] = ''; + } + + if ($data['tx_t3sbootstrap_header_fontawesome']) { + $header['hFa'] = ' '; + } + + return $header; + } + + + /** + * Returns processedData if parent auto layout + */ + public function getAutoLayoutClass(array $flexconf): string + { + $class = ''; + + if (!empty($flexconf['gridSystem'])) { + switch ($flexconf['gridSystem']) { + case 'equal': + $class .= ' col'; + break; + case 'column': + $class .= !empty($flexconf['xsColumns']) ? ' col-'.$flexconf['xsColumns'] : ''; + break; + case 'variable': + + if ($flexconf['xsColumns'] == 'equal' + || $flexconf['smColumns'] == 'equal' + || $flexconf['mdColumns'] == 'equal' + || $flexconf['lgColumns'] == 'equal' + || $flexconf['xlColumns'] == 'equal') { + $class .= !empty($flexconf['xsColumns']) ? ' col-xs' : ''; + $class .= !empty($flexconf['smColumns']) ? ' col-sm' : ''; + $class .= !empty($flexconf['mdColumns']) ? ' col-md' : ''; + $class .= !empty($flexconf['lgColumns']) ? ' col-lg' : ''; + $class .= !empty($flexconf['xlColumns']) ? ' col-xl' : ''; + $class .= !empty($flexconf['xxlColumns']) ? ' col-xxl' : ''; + } else { + $class .= !empty($flexconf['xsColumns']) ? ' col-'.$flexconf['xsColumns'] : ''; + $class .= !empty($flexconf['smColumns']) ? ' col-sm-'.$flexconf['smColumns'] : ''; + $class .= !empty($flexconf['mdColumns']) ? ' col-md-'.$flexconf['mdColumns'] : ''; + $class .= !empty($flexconf['lgColumns']) ? ' col-lg-'.$flexconf['lgColumns'] : ''; + $class .= !empty($flexconf['xlColumns']) ? ' col-xl-'.$flexconf['xlColumns'] : ''; + $class .= !empty($flexconf['xxlColumns']) ? ' col-xxl-'.$flexconf['xxlColumns'] : ''; + } + break; + } + } + + return $class; + } + + /** + * Returns processedData if parent container + */ + public function getContainerClass(array $parentflexconf, array $flexconf): string + { + $class = ''; + + if (!empty($parentflexconf['flexContainer']) && !empty($parentflexconf['responsiveVariations'])) { + if (!empty($flexconf['responsiveVariations'])) { + $class .= !empty($flexconf['alignSelf']) ? ' align-self-'.$flexconf['responsiveVariations'].'-'.$flexconf['flexContainer'] : ''; + } else { + $class .= !empty($flexconf['alignSelf']) ? ' align-self-'.$flexconf['alignSelf'] : ''; + } + + $class .= !empty($flexconf['autoMargins']) ? ' '.$flexconf['autoMargins'].'-auto' : ''; + $class .= !empty($flexconf['order']) ? ' order-'.$flexconf['order'] : ''; + } + + return $class; + } + + + /** + * Returns the frontend controller + */ + protected function getFrontendController(): TypoScriptFrontendController + { + return $GLOBALS['TSFE']; + } } diff --git a/Classes/Updates/BgOpacityUpgradeWizard.php b/Classes/Updates/BgOpacityUpgradeWizard.php index 94a4701c..ae6e65a2 100644 --- a/Classes/Updates/BgOpacityUpgradeWizard.php +++ b/Classes/Updates/BgOpacityUpgradeWizard.php @@ -7,6 +7,7 @@ use TYPO3\CMS\Install\Attribute\UpgradeWizard; use TYPO3\CMS\Install\Updates\UpgradeWizardInterface; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Install\Updates\DatabaseUpdatedPrerequisite; @@ -53,7 +54,7 @@ public function executeUpdate(): bool $queryBuilder ->update('tt_content') ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($recordId, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($recordId, Connection::PARAM_INT)) ) ->set('tx_t3sbootstrap_bgopacity', $erg) ->executeStatement(); @@ -95,7 +96,6 @@ public function getPrerequisites(): array return [ DatabaseUpdatedPrerequisite::class, ]; - } /** diff --git a/Classes/UserFunction/TcaMatcher.php b/Classes/UserFunction/TcaMatcher.php index 00ab4730..508f7e4f 100644 --- a/Classes/UserFunction/TcaMatcher.php +++ b/Classes/UserFunction/TcaMatcher.php @@ -6,6 +6,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Service\FlexFormService; use TYPO3\CMS\Core\Resource\FileRepository; use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; @@ -32,7 +33,7 @@ public function autoLayoutParent(array $arguments): bool ->select('*') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT)) ) ->executeQuery(); $parent_rec = $result->fetch(); @@ -58,7 +59,7 @@ public function buttonParent(array $arguments): bool ->select('*') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT)) ) ->executeQuery(); $parent_rec = $result->fetch(); @@ -97,7 +98,7 @@ public function cardWrapperParent(array $arguments): bool ->select('*') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT)) ) ->executeQuery(); $parent_rec = $result->fetch(); @@ -124,7 +125,7 @@ public function twoColumnsParent(array $arguments): bool ->select('*') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT)) ) ->executeQuery(); $parent_rec = $result->fetch(); @@ -228,7 +229,7 @@ public function flexContainerParent(array $arguments): bool ->select('*') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT)) ) ->executeQuery(); $parent_rec = $result->fetch(); @@ -260,7 +261,7 @@ public function isButton(array $arguments): bool ->select('tx_t3sbootstrap_flexform') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT)) ) ->executeQuery(); $parent_rec = $result->fetchAllAssociative(); @@ -450,7 +451,7 @@ public function toastContainerParent($arguments): bool ->select('*') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT)) ) ->executeQuery(); $parent_rec = $result->fetch(); diff --git a/Classes/Wrapper/BackgroundWrapper.php b/Classes/Wrapper/BackgroundWrapper.php index 5519debb..97e5d1b9 100644 --- a/Classes/Wrapper/BackgroundWrapper.php +++ b/Classes/Wrapper/BackgroundWrapper.php @@ -1,4 +1,5 @@ findByRelation('tt_content', 'assets', (int)$processedData['data']['uid']); + $file = !empty($files) && is_array($files) ? $files[0] : ''; + // media + if ($file) { + // VIDEO type + if ($file->getType() === 4) { + // youtube + if ($file->getMimeType() === 'video/youtube' || $file->getExtension() === 'youtube') { + $processedData['youtube'] = true; + $processedData['vimeo'] = false; + $processedData['isVideo'] = true; + $processedData['contentPosition'] = !empty($flexconf['contentPosition']) ? $flexconf['contentPosition'] : 'align-self-center'; + $processedData['ytVideo']['bgHeight'] = !empty($flexconf['bgHeight']) ? $flexconf['bgHeight'] : ''; + $processedData['ytVideo']['ytshift'] = !empty($flexconf['ytshift']) ? $flexconf['ytshift'] : ''; + $processedData['videoAutoPlay'] = $file->getProperties()['autoplay']; + $youTubeRenderer = GeneralUtility::makeInstance(YouTubeRenderer::class); + $processedData['videoId'] = $youTubeRenderer->render($file); + } else { + if ($file->getMimeType() === 'video/vimeo' || $file->getExtension() === 'vimeo') { + // vimeo video + $processedData['vimeo'] = true; + $processedData['youtube'] = false; + $processedData['isVideo'] = true; + $processedData['contentPosition'] = !empty($flexconf['contentPosition']) ? $flexconf['contentPosition'] : 'align-self-center'; + $processedData['ytVideo']['bgHeight'] = !empty($flexconf['bgHeight']) ? $flexconf['bgHeight'] : ''; + $processedData['ytVideo']['ytshift'] = !empty($flexconf['ytshift']) ? $flexconf['ytshift'] : ''; + $processedData['videoAutoPlay'] = $file->getProperties()['autoplay']; + $youTubeRenderer = GeneralUtility::makeInstance(YouTubeRenderer::class); + $processedData['videoId'] = $youTubeRenderer->render($file); + } else { + // local video + $processedData['file'] = $file; + // align content items + $processedData['alignItem'] = $flexconf['alignVideoItem'] != 'none' ? ' '.$flexconf['alignVideoItem'] : ''; + // video shift + $processedData['shift'] = $flexconf['shift']; + $processedData['horizontalShift'] = !empty($flexconf['horizontalShift']) ? $flexconf['horizontalShift'] : 0; + // overlay child + $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content'); + $overlayChild = $queryBuilder + ->count('uid') + ->from('tt_content') + ->where( + $queryBuilder->expr()->eq('sys_language_uid', $processedData['data']['sys_language_uid']), + $queryBuilder->expr()->eq('tx_container_parent', $queryBuilder->createNamedParameter($processedData['data']['uid'], Connection::PARAM_INT)) + ) + ->executeQuery() + ->fetchOne(); - /** - * Returns the $processedData - */ - public function getProcessedData(array $processedData, array $flexconf, string $bgMediaQueries='2560,1920,1200,992,768,576'): array - { - // autoheight - $processedData['enableAutoheight'] = !empty($flexconf['enableAutoheight']) ? TRUE : FALSE; - $processedData['addHeight'] = !empty($flexconf['addHeight']) ? (int)$flexconf['addHeight'] : 0; - $fileRepository = GeneralUtility::makeInstance(FileRepository::class); - $files = $fileRepository->findByRelation('tt_content', 'assets', (int)$processedData['data']['uid']); - $file = !empty($files) && is_array($files) ? $files[0] : ''; - // media - if ( $file ) { - // VIDEO type - if ( $file->getType() === 4 ) { - // youtube - if ( $file->getMimeType() === 'video/youtube' || $file->getExtension() === 'youtube' ) { - $processedData['youtube'] = TRUE; - $processedData['vimeo'] = FALSE; - $processedData['isVideo'] = TRUE; - $processedData['contentPosition'] = !empty($flexconf['contentPosition']) ? $flexconf['contentPosition'] : 'align-self-center'; - $processedData['ytVideo']['bgHeight'] = !empty($flexconf['bgHeight']) ? $flexconf['bgHeight'] : ''; - $processedData['ytVideo']['ytshift'] = !empty($flexconf['ytshift']) ? $flexconf['ytshift'] : ''; - $processedData['videoAutoPlay'] = $file->getProperties()['autoplay']; - $youTubeRenderer = GeneralUtility::makeInstance(YouTubeRenderer::class); - $processedData['videoId'] = $youTubeRenderer->render($file); - } else { - if ( $file->getMimeType() === 'video/vimeo' || $file->getExtension() === 'vimeo' ) { - // vimeo video - $processedData['vimeo'] = TRUE; - $processedData['youtube'] = FALSE; - $processedData['isVideo'] = TRUE; - $processedData['contentPosition'] = !empty($flexconf['contentPosition']) ? $flexconf['contentPosition'] : 'align-self-center'; - $processedData['ytVideo']['bgHeight'] = !empty($flexconf['bgHeight']) ? $flexconf['bgHeight'] : ''; - $processedData['ytVideo']['ytshift'] = !empty($flexconf['ytshift']) ? $flexconf['ytshift'] : ''; - $processedData['videoAutoPlay'] = $file->getProperties()['autoplay']; - $youTubeRenderer = GeneralUtility::makeInstance(YouTubeRenderer::class); - $processedData['videoId'] = $youTubeRenderer->render($file); - } else { - // local video - $processedData['file'] = $file; - // align content items - $processedData['alignItem'] = $flexconf['alignVideoItem'] != 'none' ? ' '.$flexconf['alignVideoItem'] :''; - // video shift - $processedData['shift'] = $flexconf['shift']; - $processedData['horizontalShift'] = !empty($flexconf['horizontalShift']) ? $flexconf['horizontalShift'] : 0; - // overlay child - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content'); - $overlayChild = $queryBuilder - ->count('uid') - ->from('tt_content') - ->where( - $queryBuilder->expr()->eq('sys_language_uid', $processedData['data']['sys_language_uid']), - $queryBuilder->expr()->eq('tx_container_parent', $queryBuilder->createNamedParameter($processedData['data']['uid'], \PDO::PARAM_INT)) - ) - ->executeQuery() - ->fetchOne(); - - $autoplay = $file->getProperties()['autoplay']; - $loop = $flexconf['loop']; - $mute = $autoplay ? true : $flexconf['mute']; - $processedData['localVideo']['inlineCSS'] = ''; - $mobileHeight = $flexconf['mobileHeight'] != 'none' ? (int) trim($flexconf['mobileHeight']) :''; - $mobileWidth = $flexconf['mobileWidth'] != 'none' ? (int) trim($flexconf['mobileWidth']) :''; - // max-width:575px - $processedData['localVideo']['inlineCSS'] = '@media (max-width:768px){#s-'.$processedData['data']['uid']. - ' figure.video{width:'.$mobileWidth.'%; max-height:'.$mobileHeight.'px; margin-left:'.$processedData['horizontalShift'].'%}}'; - $ratio = end(explode('/', $flexconf['aspectRatio'])).'x9'; - $ratioArr = explode('x', $ratio); - $x = $ratio; - $y = $ratioArr[1].' / '.$ratioArr[0].' * 100%'; - $processedData['ratioCalcCss'] = '.ratio-'.$x.'{--bs-aspect-ratio:calc('.$y.');}'; - $processedData['localVideo']['class'] = ' ratio ratio-'.$ratio; - $processedData['localVideo']['overlayChild'] = $overlayChild; - $processedData['localVideo']['autoplay'] = $autoplay; - $processedData['localVideo']['loop'] = $loop; - $processedData['localVideo']['mute'] = $mute; - $processedData['localVideo']['controls'] = $flexconf['localControls'] ?: 0; - } - } - - } elseif ( $file->getType() === 2 ) { - // IMAGE - // orig. image option in flexform - if (!empty($flexconf['origImage'])) { - $processedData['file'] = $file; - $processedData['ingWidth'] = $flexconf['width'] ? $flexconf['width'] : 1296; - } else { - $bgImage = GeneralUtility::makeInstance(BackgroundImageUtility::class) - ->getBgImage($processedData['data']['uid'], 'tt_content', FALSE, TRUE, $flexconf, FALSE, 0, $bgMediaQueries); - $processedData['bgImage'] = $bgImage; - if (!empty($flexconf['paddingTopBottom'])) { - $processedData['style'] .= ' padding: '.$flexconf['paddingTopBottom'].'rem 0;'; - } - } - // align content items - $processedData['alignItem'] = !empty($flexconf['alignItem']) ? ' '.$flexconf['alignItem'] :''; - - // image raster - $processedData['imageRaster'] = !empty($flexconf['imageRaster']) ? 'multiple-' : ''; - - // Text color - overlay ( - if ( $processedData['data']['tx_t3sbootstrap_textcolor'] ) { - $processedData['overlayClass'] = ' text-'.$processedData['data']['tx_t3sbootstrap_textcolor']; - } - - $styleHelper = GeneralUtility::makeInstance(StyleHelper::class); - $processedData['bgColorOverlay'] = $styleHelper->getBgColor($processedData['data'], FALSE); + $autoplay = $file->getProperties()['autoplay']; + $loop = $flexconf['loop']; + $mute = $autoplay ? true : $flexconf['mute']; + $processedData['localVideo']['inlineCSS'] = ''; + $mobileHeight = $flexconf['mobileHeight'] != 'none' ? (int) trim($flexconf['mobileHeight']) : ''; + $mobileWidth = $flexconf['mobileWidth'] != 'none' ? (int) trim($flexconf['mobileWidth']) : ''; + // max-width:575px + $processedData['localVideo']['inlineCSS'] = '@media (max-width:768px){#s-'.$processedData['data']['uid']. + ' figure.video{width:'.$mobileWidth.'%; max-height:'.$mobileHeight.'px; margin-left:'.$processedData['horizontalShift'].'%}}'; + $ratio = end(explode('/', $flexconf['aspectRatio'])).'x9'; + $ratioArr = explode('x', $ratio); + $x = $ratio; + $y = $ratioArr[1].' / '.$ratioArr[0].' * 100%'; + $processedData['ratioCalcCss'] = '.ratio-'.$x.'{--bs-aspect-ratio:calc('.$y.');}'; + $processedData['localVideo']['class'] = ' ratio ratio-'.$ratio; + $processedData['localVideo']['overlayChild'] = $overlayChild; + $processedData['localVideo']['autoplay'] = $autoplay; + $processedData['localVideo']['loop'] = $loop; + $processedData['localVideo']['mute'] = $mute; + $processedData['localVideo']['controls'] = $flexconf['localControls'] ?: 0; + } + } + } elseif ($file->getType() === 2) { + // IMAGE + // orig. image option in flexform + if (!empty($flexconf['origImage'])) { + $processedData['file'] = $file; + $processedData['ingWidth'] = $flexconf['width'] ? $flexconf['width'] : 1296; + } else { + $bgImage = GeneralUtility::makeInstance(BackgroundImageUtility::class) + ->getBgImage($processedData['data']['uid'], 'tt_content', false, true, $flexconf, false, 0, $bgMediaQueries); + $processedData['bgImage'] = $bgImage; + if (!empty($flexconf['paddingTopBottom'])) { + $processedData['style'] .= ' padding: '.$flexconf['paddingTopBottom'].'rem 0;'; + } + } + // align content items + $processedData['alignItem'] = !empty($flexconf['alignItem']) ? ' '.$flexconf['alignItem'] : ''; - $filter = !empty($flexconf['imgGrayscale']) ? ' grayscale('.$flexconf['imgGrayscale'].'%) ' : ''; - $filter .= !empty($flexconf['imgSepia']) ? ' sepia('.$flexconf['imgSepia'].'%) ' : ''; - $filter .= !empty($flexconf['imgOpacity']) && $flexconf['imgOpacity'] != 100 ? ' opacity('.$flexconf['imgOpacity'].'%) ' : ''; - if ($filter) - $processedData['style'] .= 'filter: '.trim($filter).';'; + // image raster + $processedData['imageRaster'] = !empty($flexconf['imageRaster']) ? 'multiple-' : ''; - } else { - // do nothing - audio file - } + // Text color - overlay ( + if ($processedData['data']['tx_t3sbootstrap_textcolor']) { + $processedData['overlayClass'] = ' text-'.$processedData['data']['tx_t3sbootstrap_textcolor']; + } - } else { - // NO file - background color only - // Padding Top & Bottom if no media - add to style - if (!empty($flexconf['noMediaPaddingTopBottom'])) { - $processedData['style'] .= ' padding: '.$flexconf['noMediaPaddingTopBottom'].'rem 0;'; - } - } + $styleHelper = GeneralUtility::makeInstance(StyleHelper::class); + $processedData['bgColorOverlay'] = $styleHelper->getBgColor($processedData['data'], false); - $vMute = !empty($flexconf['videoMute']) ? $flexconf['videoMute'] : 0; - $mute = !empty($processedData['videoAutoPlay']) ? 1 : $vMute; - if (!empty($flexconf['videoControls'])) { - $processedData['controlStyle'] = ''; - } elseif ( empty($processedData['videoAutoPlay']) ) { - $processedData['controlStyle'] = ''; - } else { - $processedData['controlStyle'] = ' pointer-events:none;'; - } - if ( !empty($processedData['videoId']) && $processedData['youtube'] ) { - $params = '?autoplay='.$processedData['videoAutoPlay'].'&loop='.$flexconf['videoLoop'].'&playlist='. - $processedData['videoId'].'&mute='.$mute.'&rel=0&showinfo=0&controls='.$flexconf['videoControls'].'&modestbranding='.$flexconf['videoControls']; - $processedData['youtubeParams'] = $params; - } - if ( !empty($processedData['videoId']) && $processedData['vimeo'] ) { - $background = !empty($processedData['videoAutoPlay']) ? '&background=1' : ''; - $processedData['vimeoParams'] = $background.'&autoplay='.$processedData['videoAutoPlay'].'&loop='.$flexconf['videoLoop'].'&mute='.$mute; - $processedData['startButton'] = $processedData['videoAutoPlay'] ? 0 : 1; - } + $filter = !empty($flexconf['imgGrayscale']) ? ' grayscale('.$flexconf['imgGrayscale'].'%) ' : ''; + $filter .= !empty($flexconf['imgSepia']) ? ' sepia('.$flexconf['imgSepia'].'%) ' : ''; + $filter .= !empty($flexconf['imgOpacity']) && $flexconf['imgOpacity'] != 100 ? ' opacity('.$flexconf['imgOpacity'].'%) ' : ''; + if ($filter) { + $processedData['style'] .= 'filter: '.trim($filter).';'; + } + } else { + // do nothing - audio file + } + } else { + // NO file - background color only + // Padding Top & Bottom if no media - add to style + if (!empty($flexconf['noMediaPaddingTopBottom'])) { + $processedData['style'] .= ' padding: '.$flexconf['noMediaPaddingTopBottom'].'rem 0;'; + } + } - return $processedData; - } + $vMute = !empty($flexconf['videoMute']) ? $flexconf['videoMute'] : 0; + $mute = !empty($processedData['videoAutoPlay']) ? 1 : $vMute; + if (!empty($flexconf['videoControls'])) { + $processedData['controlStyle'] = ''; + } elseif (empty($processedData['videoAutoPlay'])) { + $processedData['controlStyle'] = ''; + } else { + $processedData['controlStyle'] = ' pointer-events:none;'; + } + if (!empty($processedData['videoId']) && $processedData['youtube']) { + $params = '?autoplay='.$processedData['videoAutoPlay'].'&loop='.$flexconf['videoLoop'].'&playlist='. + $processedData['videoId'].'&mute='.$mute.'&rel=0&showinfo=0&controls='.$flexconf['videoControls'].'&modestbranding='.$flexconf['videoControls']; + $processedData['youtubeParams'] = $params; + } + if (!empty($processedData['videoId']) && $processedData['vimeo']) { + $background = !empty($processedData['videoAutoPlay']) ? '&background=1' : ''; + $processedData['vimeoParams'] = $background.'&autoplay='.$processedData['videoAutoPlay'].'&loop='.$flexconf['videoLoop'].'&mute='.$mute; + $processedData['startButton'] = $processedData['videoAutoPlay'] ? 0 : 1; + } + return $processedData; + } } diff --git a/Classes/Wrapper/CardWrapper.php b/Classes/Wrapper/CardWrapper.php index 880465c9..e00e7120 100644 --- a/Classes/Wrapper/CardWrapper.php +++ b/Classes/Wrapper/CardWrapper.php @@ -8,6 +8,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Service\FlexFormService; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\Query\Restriction\FrontendRestrictionContainer; use TYPO3\CMS\Core\Resource\FileRepository; @@ -33,8 +34,8 @@ public function getProcessedData(array $processedData, array $flexconf): array ->select('*') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('tx_container_parent', $queryBuilder->createNamedParameter($processedData['data']['uid'], \PDO::PARAM_INT)), - $queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($processedData['data']['sys_language_uid'], \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('tx_container_parent', $queryBuilder->createNamedParameter($processedData['data']['uid'], Connection::PARAM_INT)), + $queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($processedData['data']['sys_language_uid'], Connection::PARAM_INT)) ) ->orderBy('sorting') ->executeQuery() diff --git a/Classes/Wrapper/CarouselContainer.php b/Classes/Wrapper/CarouselContainer.php index e2612357..06f30999 100644 --- a/Classes/Wrapper/CarouselContainer.php +++ b/Classes/Wrapper/CarouselContainer.php @@ -8,6 +8,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Resource\FileRepository; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; /* * This file is part of the TYPO3 extension t3sbootstrap. @@ -36,7 +37,7 @@ public function getProcessedData(array $processedData, array $flexconf): array ->select('uid') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('tx_container_parent', $queryBuilder->createNamedParameter($processedData['data']['uid'], \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('tx_container_parent', $queryBuilder->createNamedParameter($processedData['data']['uid'], Connection::PARAM_INT)) ) ->executeQuery() ->fetchAllAssociative(); diff --git a/Classes/Wrapper/CollapsibleAccordion.php b/Classes/Wrapper/CollapsibleAccordion.php index c1f2b3b3..abe3ccba 100644 --- a/Classes/Wrapper/CollapsibleAccordion.php +++ b/Classes/Wrapper/CollapsibleAccordion.php @@ -35,7 +35,6 @@ public function getProcessedData(array $processedData, array $flexconf, array $p $processedData['buttonstyle'] = !empty($flexconf['style']) ? $flexconf['style'] : 'primary'; $processedData['collapsibleByPid'] = !empty($flexconf['collapsibleByPid']) ? $flexconf['collapsibleByPid'] : ''; $processedData['media'] = $file ? $file : ''; - $processedData['appearance'] = $parentflexconf['appearance']; return $processedData; diff --git a/Classes/Wrapper/CollapsibleContainer.php b/Classes/Wrapper/CollapsibleContainer.php index 27a65684..fb5134ea 100644 --- a/Classes/Wrapper/CollapsibleContainer.php +++ b/Classes/Wrapper/CollapsibleContainer.php @@ -8,6 +8,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Resource\FileRepository; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Service\FlexFormService; /* @@ -33,7 +34,7 @@ public function getProcessedData(array $processedData, array $flexconf): array ->select('tx_t3sbootstrap_flexform', 'tx_t3sbootstrap_header_fontawesome', 'tx_t3sbootstrap_header_class') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('tx_container_parent', $queryBuilder->createNamedParameter($processedData['data']['uid'], \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('tx_container_parent', $queryBuilder->createNamedParameter($processedData['data']['uid'], Connection::PARAM_INT)) ) ->executeQuery() ->fetchAllAssociative(); diff --git a/Classes/Wrapper/SwiperContainer.php b/Classes/Wrapper/SwiperContainer.php index 36599079..b808537a 100644 --- a/Classes/Wrapper/SwiperContainer.php +++ b/Classes/Wrapper/SwiperContainer.php @@ -8,6 +8,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Resource\FileRepository; use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Database\Connection; /* * This file is part of the TYPO3 extension t3sbootstrap. @@ -55,7 +56,7 @@ public function getProcessedData(array $processedData, array $flexconf): array ->select('uid') ->from('tt_content') ->where( - $queryBuilder->expr()->eq('tx_container_parent', $queryBuilder->createNamedParameter($processedData['data']['uid'], \PDO::PARAM_INT)) + $queryBuilder->expr()->eq('tx_container_parent', $queryBuilder->createNamedParameter($processedData['data']['uid'], Connection::PARAM_INT)) ) ->executeQuery() ->fetchAllAssociative(); diff --git a/Configuration/RTE/Default.yaml b/Configuration/RTE/Default.yaml index 9eedb9ca..272a8e23 100644 --- a/Configuration/RTE/Default.yaml +++ b/Configuration/RTE/Default.yaml @@ -4,13 +4,23 @@ imports: - { resource: 'EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml' } - { resource: 'EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml' } - # Add configuration for the editor # For complete documentation see https://ckeditor.com/docs/ckeditor5/latest/features/index.html editor: config: - + + importModules: + - { 'module': '@ckeditor/ckeditor5-font', 'exports': [ 'Font' ] } + - { 'module': '@ckeditor/ckeditor5-indent', 'exports': [ 'IndentBlock' ] } + - { 'module': '@ckeditor/ckeditor5-show-blocks', 'exports': ['ShowBlocks'] } + - { 'module': '@ckeditor/ckeditor5-word-count', 'exports': ['WordCount'] } + + extraPlugins: + - Font + - Indent + - IndentBlock + contentsCss: - 'EXT:t3sbootstrap/Resources/Public/Backend/RTE/t3sbootstrap.css' @@ -37,17 +47,50 @@ editor: - undo - redo - '|' + - showBlocks - horizontalLine - sourceEditing - '-' - style + - '|' - heading - '|' + - { label: 'Font', icon: false, items: [ 'fontFamily', 'fontSize', 'fontColor', 'fontBackgroundColor' ] } + - '|' - alignment - findAndReplace - - insertTable - specialCharacters - + - '|' + - outdent + - indent + + indentBlock: + classes: + - 'custom-block-indent-a' + - 'custom-block-indent-b' + - 'custom-block-indent-c' + + fontColor: + colors: + - { label: 'Primary', color: 'var(--bs-primary)' } + - { label: 'Secondary', color: 'var(--bs-secondary)' } + - { label: 'Success', color: 'var(--bs-success)' } + - { label: 'Danger', color: 'var(--bs-danger)' } + - { label: 'Warning', color: 'var(--bs-warning)' } + - { label: 'Info', color: 'var(--bs-info)' } + - { label: 'Light', color: 'var(--bs-light)' } + - { label: 'Dark', color: 'var(--bs-dark)' } + + fontBackgroundColor: + colors: + - { label: 'Primary', color: 'var(--bs-primary)' } + - { label: 'Secondary', color: 'var(--bs-secondary)' } + - { label: 'Success', color: 'var(--bs-success)' } + - { label: 'Danger', color: 'var(--bs-danger)' } + - { label: 'Warning', color: 'var(--bs-warning)' } + - { label: 'Info', color: 'var(--bs-info)' } + - { label: 'Light', color: 'var(--bs-light)' } + - { label: 'Dark', color: 'var(--bs-dark)' } heading: options: @@ -59,7 +102,6 @@ editor: - { model: 'heading6', view: 'h6', title: 'Heading 6' } - { model: 'formatted', view: 'pre', title: 'Pre-Formatted Text' } - style: definitions: # Blockstile @@ -75,24 +117,20 @@ editor: - { name: 'Uppercase', element: 'p', 'classes': ['text-uppercase'], isBlock: 'true' } - { name: 'Capitalize', element: 'p', 'classes': ['text-capitalize'], isBlock: 'true' } - - # Blockstile - Alert (div) - # - { name: 'Alert Primary', element: 'div', 'classes': ['alert', 'alert-primary'], isBlock: 'true' } - # - { name: 'Alert Secondary', element: 'div', classes': ['alert', 'alert-secondary'], isBlock: 'true' } - # - { name: 'Alert Success', element: 'div', 'classes': ['alert', 'alert-success'], isBlock: 'true' } - # - { name: 'Alert Danger', element: 'div', 'classes': ['alert', 'alert-danger'], isBlock: 'true' } - # - { name: 'Alert Warning', element: 'div', 'classes': ['alert', 'alert-warning'], isBlock: 'true' } - # - { name: 'Alert Info', element: 'div', 'classes': ['alert', 'alert-info'], isBlock: 'true' } - # - { name: 'Alert Light', element: 'div', 'classes': ['alert', 'alert-light'], isBlock: 'true' } - # - { name: 'Alert Dark', element: 'div', 'classes': ['alert', 'alert-dark'], isBlock: 'true' } + - { name: 'Alert Primary', element: 'p', 'classes': ['alert', 'alert-primary'], isBlock: 'true' } + - { name: 'Alert Secondary', element: 'p', classes': ['alert', 'alert-secondary'], isBlock: 'true' } + - { name: 'Alert Success', element: 'p', 'classes': ['alert', 'alert-success'], isBlock: 'true' } + - { name: 'Alert Danger', element: 'p', 'classes': ['alert', 'alert-danger'], isBlock: 'true' } + - { name: 'Alert Warning', element: 'p', 'classes': ['alert', 'alert-warning'], isBlock: 'true' } + - { name: 'Alert Info', element: 'p', 'classes': ['alert', 'alert-info'], isBlock: 'true' } + - { name: 'Alert Light', element: 'p', 'classes': ['alert', 'alert-light'], isBlock: 'true' } + - { name: 'Alert Dark', element: 'p', 'classes': ['alert', 'alert-dark'], isBlock: 'true' } # Textstile - { name: 'Mark', element: 'span', classes: ['mark'] } - - { name: 'Del', element: 'del', classes: ['del'] } - { name: 'Ins', element: 'ins', classes: ['ins'] } - { name: 'Code', element: 'code', classes: [''] } - - { name: 'Lead', element: 'span', classes: ['lead'] } - { name: 'Small', element: 'span', classes: ['small'] } - { name: 'Color primary', element: 'span', classes: ['text-primary'] } @@ -105,51 +143,50 @@ editor: - { name: 'Uppercase ', element: 'span', 'classes': ['text-uppercase'] } - { name: 'Capitalize ', element: 'span', 'classes': ['text-capitalize'] } - # Textstile - Buttons - - { name: 'Button Primary', element: 'a', 'classes': ['btn btn-primary'] } - - { name: 'Button Secondary', element: 'a', 'classes': ['btn btn-secondary'] } - - { name: 'Button Success', element: 'a', 'classes': ['btn btn-success'] } - - { name: 'Button Danger', element: 'a', 'classes': ['btn btn-danger'] } - - { name: 'Button Warning', element: 'a', 'classes': ['btn btn-warning'] } - - { name: 'Button Info', element: 'a', 'classes': ['btn btn-info'] } - - { name: 'Button Light', element: 'a', 'classes': ['btn btn-light'] } - - { name: 'Button Dark', element: 'a', 'classes': ['btn btn-dark'] } - + - { name: 'Button Primary', element: 'a', 'classes': ['btn btn-primary'] } + - { name: 'Button Secondary', element: 'a', 'classes': ['btn btn-secondary'] } + - { name: 'Button Success', element: 'a', 'classes': ['btn btn-success'] } + - { name: 'Button Danger', element: 'a', 'classes': ['btn btn-danger'] } + - { name: 'Button Warning', element: 'a', 'classes': ['btn btn-warning'] } + - { name: 'Button Info', element: 'a', 'classes': ['btn btn-info'] } + - { name: 'Button Light', element: 'a', 'classes': ['btn btn-light'] } + - { name: 'Button Dark', element: 'a', 'classes': ['btn btn-dark'] } # Textstile - Badges - - { name: 'Badge Primary', element: 'span', 'classes': ['badge', 'text-bg-primary'] } - - { name: 'Badge Secondary', element: 'span', 'classes': ['badge text-bg-secondary'] } - - { name: 'Badge Success', element: 'span', 'classes': ['badge text-bg-success'] } - - { name: 'Badge Danger', element: 'span', 'classes': ['badge text-bg-danger'] } - - { name: 'Badge Warning', element: 'span', 'classes': ['badge text-bg-warning'] } - - { name: 'Badge Info', element: 'span', 'classes': ['badge text-bg-info'] } - - { name: 'Badge Light', element: 'span', 'classes': ['badge text-bg-light'] } - - { name: 'Badge Dark', element: 'span', 'classes': ['badge text-bg-dark'] } - + - { name: 'Badge Primary', element: 'span', 'classes': ['badge', 'text-bg-primary'] } + - { name: 'Badge Secondary', element: 'span', 'classes': ['badge text-bg-secondary'] } + - { name: 'Badge Success', element: 'span', 'classes': ['badge text-bg-success'] } + - { name: 'Badge Danger', element: 'span', 'classes': ['badge text-bg-danger'] } + - { name: 'Badge Warning', element: 'span', 'classes': ['badge text-bg-warning'] } + - { name: 'Badge Info', element: 'span', 'classes': ['badge text-bg-info'] } + - { name: 'Badge Light', element: 'span', 'classes': ['badge text-bg-light'] } + - { name: 'Badge Dark', element: 'span', 'classes': ['badge text-bg-dark'] } + # Textstile - Pill badges - - { name: 'Pill Badge Primary', element: 'span', 'classes': ['badge rounded-pill text-bg-primary'] } - - { name: 'Pill Badge Secondary', element: 'span', 'classes': ['badge rounded-pill text-bg-secondary'] } - - { name: 'Pill Badge Success', element: 'span', 'classes': ['badge rounded-pill text-bg-success'] } - - { name: 'Pill Badge Danger', element: 'span', 'classes': ['badge rounded-pill text-bg-danger'] } - - { name: 'Pill Badge Warning', element: 'span', 'classes': ['badge rounded-pill text-bg-warning'] } - - { name: 'Pill Badge Info', element: 'span', 'classes': ['badge rounded-pill text-bg-info'] } - - { name: 'Pill Badge Light', element: 'span', 'classes': ['badge rounded-pill text-bg-light'] } + - { name: 'Pill Badge Primary', element: 'span', 'classes': ['badge rounded-pill text-bg-primary'] } + - { name: 'Pill Badge Secondary', element: 'span', 'classes': ['badge rounded-pill text-bg-secondary'] } + - { name: 'Pill Badge Success', element: 'span', 'classes': ['badge rounded-pill text-bg-success'] } + - { name: 'Pill Badge Danger', element: 'span', 'classes': ['badge rounded-pill text-bg-danger'] } + - { name: 'Pill Badge Warning', element: 'span', 'classes': ['badge rounded-pill text-bg-warning'] } + - { name: 'Pill Badge Info', element: 'span', 'classes': ['badge rounded-pill text-bg-info'] } + - { name: 'Pill Badge Light', element: 'span', 'classes': ['badge rounded-pill text-bg-light'] } - { name: 'Pill Badge Dark', element: 'span', 'classes': ['badge rounded-pill text-bg-dark'] } alignment: options: - - { name: 'left', className: 'text-left' } + - { name: 'left', className: 'text-start' } - { name: 'center', className: 'text-center' } - - { name: 'right', className: 'text-right' } + - { name: 'right', className: 'text-end' } - { name: 'justify', className: 'text-justify' } - table: - defaultHeadings: { rows: 1 } - contentToolbar: - - tableColumn - - tableRow - - mergeTableCells - - tableProperties - - tableCellProperties + htmlSupport: + allowEmpty: + - 'div' + + allow: + - name: 'div' + attributes: true + classes: true + styles: true diff --git a/Configuration/TSConfig/Content.tsconfig b/Configuration/TSConfig/Content.tsconfig index 01a656f8..68d0e1c9 100644 --- a/Configuration/TSConfig/Content.tsconfig +++ b/Configuration/TSConfig/Content.tsconfig @@ -48,7 +48,7 @@ TCEFORM.tt_content { } frame_class { types { - collapsible_accordion.disabled = 1 +# collapsible_accordion.disabled = 1 t3sbs_toast.disabled = 1 } } diff --git a/Configuration/TypoScript/Lib/ContentElement.typoscript b/Configuration/TypoScript/Lib/ContentElement.typoscript index 40afdd31..b9f1408f 100644 --- a/Configuration/TypoScript/Lib/ContentElement.typoscript +++ b/Configuration/TypoScript/Lib/ContentElement.typoscript @@ -94,6 +94,7 @@ lib.contentElement { t3sbconcatenate = {$bootstrap.extconf.t3sbconcatenate} sectionMenuClass = {$bootstrap.config.sectionMenuClass} sitepackage = {$bootstrap.extconf.sitepackage} + shortcutsremove = {$bootstrap.shortcutsremove} config { sectionmenuAnchorOffset = {$bootstrap.config.sectionmenuAnchorOffset} sectionmenuScrollspyRootMargin = {$bootstrap.config.sectionmenuScrollspyRootMargin} @@ -126,6 +127,7 @@ lib.contentElement { contentMarginTop = {$bootstrap.config.contentMarginTop} configuid = {$bootstrap.config.uid} disableAutoRow = {$bootstrap.image.disableAutoRow} + footerPid = {$bootstrap.config.footerPid} breakpoint { sm = {$bootstrap.navbar.breakpoint.sm} md = {$bootstrap.navbar.breakpoint.md} diff --git a/Configuration/TypoScript/Page/Template.typoscript b/Configuration/TypoScript/Page/Template.typoscript index feb1fd98..278ae140 100644 --- a/Configuration/TypoScript/Page/Template.typoscript +++ b/Configuration/TypoScript/Page/Template.typoscript @@ -36,6 +36,7 @@ page { fontawesome.fontawesomeCss = {$bootstrap.extconf.fontawesomeCss} fontawesome.faLinkIcons = {$bootstrap.config.faLinkIcons} + skiplinks = {$bootstrap.skiplinks} disableDefaultCss = {$bootstrap.config.disableDefaultCss} lazyLoad = {$bootstrap.extconf.lazyLoad} lazyLoadThreshold = {$bootstrap.image.lazyLoadThreshold} diff --git a/Configuration/TypoScript/constants.typoscript b/Configuration/TypoScript/constants.typoscript index 2b00f75e..c77bb3ae 100644 --- a/Configuration/TypoScript/constants.typoscript +++ b/Configuration/TypoScript/constants.typoscript @@ -15,7 +15,7 @@ plugin.tx_t3sbootstrap { } -bootstrap.cdn.bootstraplatest = 5.3.2 +bootstrap.cdn.bootstraplatest = 5.3.3 bootstrap.cdn.noZip = 0 bootstrap.cdn.fontawesome6latest = 6.5.1 @@ -52,7 +52,7 @@ bootstrap.cdn { # cat=bootstrap-cdn/a-google/10; type=small; label=Comma separated list with google fonts:integrate Google Fonts "GDPR"-compliant locally into your website (e.g.: Montserrat,Fira Sans) googlefonts = # cat=bootstrap-cdn/b-version/10; type=small; label=Bootstrap: - bootstrap = 5.3.2 + bootstrap = 5.3.3 # cat=bootstrap-cdn/b-version/11; type=small; label=Popper js: popperjs = 2.11.8 # cat=bootstrap-cdn/b-version/13; type=small; label=Masonry js: @@ -81,11 +81,11 @@ bootstrap.cdn { swiper = 11 # cat=bootstrap-cdn/c-integrity/10; type=small; label=Bootstrap CSS: - bootstrapCssIntegrity = sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN + bootstrapCssIntegrity = sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH # cat=bootstrap-cdn/c-integrity/11; type=small; label=Bootstrap JS: - bootstrapJsIntegrity = sha384-BBtl+eGJRgqQAUMxJ7pMwbEyER4l1g+O15P+16Ep7Q9Q+zqX6gSbd85u4mG4QzX+ + bootstrapJsIntegrity = sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy # cat=bootstrap-cdn/c-integrity/12; type=small; label=Bootstrap Bundle JS: - bootstrapBundleJsIntegrity = sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL + bootstrapBundleJsIntegrity = sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz # cat=bootstrap-cdn/c-integrity/13; type=small; label=Popper js: popperjsIntegrity = sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r # cat=bootstrap-cdn/c-integrity/14; type=small; label=Masonry js: @@ -300,6 +300,12 @@ bootstrap.navbar { floatDropdownIconRight = 0 } +# creating "Skip Links" to navigation, content or footer for barrier-free accessibility if activated (in Main.html) +bootstrap.skiplinks = 0 + +# remove any string (e.g. a class name) from shortcuts if in parent CE/wrapper +bootstrap.shortcutsremove = + # style one for the submenu (0 = default) bootstrap.submenu.styleOne = 0 @@ -327,14 +333,14 @@ styles.content.textmedia.borderWidth = styles.content.textmedia.borderPadding = # pages override - deprecated -pages.override { - # 1,2,3,4 or 6 (only) - smallColumns = - # sm,md,lg or xl (only) - breakpoint = - # boolean - dropdownRight = -} +#pages.override { +# # 1,2,3,4 or 6 (only) +# smallColumns = +# # sm,md,lg or xl (only) +# breakpoint = +# # boolean +# dropdownRight = +#} [loaded('felogin')] diff --git a/Resources/Private/Partials/Content/Media/Type/Image.html b/Resources/Private/Partials/Content/Media/Type/Image.html index 260d179d..7bc44cd3 100644 --- a/Resources/Private/Partials/Content/Media/Type/Image.html +++ b/Resources/Private/Partials/Content/Media/Type/Image.html @@ -55,7 +55,7 @@ Description -
+
{file.description -> f:format.raw()}
diff --git a/Resources/Private/Partials/Content/Text.html b/Resources/Private/Partials/Content/Text.html index 6e674b34..f62e812f 100644 --- a/Resources/Private/Partials/Content/Text.html +++ b/Resources/Private/Partials/Content/Text.html @@ -1,4 +1,6 @@ - {data.bodytext -> f:format.html()} - \ No newline at end of file +
+ {data.bodytext -> f:format.html()} +
+ diff --git a/Resources/Private/Partials/Content/TextWithImage.html b/Resources/Private/Partials/Content/TextWithImage.html index b6ba33ba..a9cd9012 100644 --- a/Resources/Private/Partials/Content/TextWithImage.html +++ b/Resources/Private/Partials/Content/TextWithImage.html @@ -11,7 +11,9 @@
- {data.bodytext -> f:format.html()} +
+ {data.bodytext -> f:format.html()} +
@@ -35,7 +37,9 @@
- {data.bodytext -> f:format.html()} +
+ {data.bodytext -> f:format.html()} +
@@ -58,7 +62,9 @@ - {data.bodytext -> f:format.html()} +
+ {data.bodytext -> f:format.html()} +
@@ -76,7 +82,9 @@
- {data.bodytext -> f:format.html()} +
+ {data.bodytext -> f:format.html()} +
@@ -86,7 +94,9 @@
- {data.bodytext -> f:format.html()} +
+ {data.bodytext -> f:format.html()} +
diff --git a/Resources/Private/Partials/Page/Navbar/DarkModeToggler kopie.html b/Resources/Private/Partials/Page/Navbar/DarkModeToggler kopie.html new file mode 100644 index 00000000..0222033b --- /dev/null +++ b/Resources/Private/Partials/Page/Navbar/DarkModeToggler kopie.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + +.dm-toggler .bi { + width: 1em; + height: 1em; + vertical-align: -.125em; + fill: currentcolor; +} + + + + diff --git a/Resources/Private/Partials/Page/Navbar/DarkModeToggler.html b/Resources/Private/Partials/Page/Navbar/DarkModeToggler.html index 0222033b..7d732932 100644 --- a/Resources/Private/Partials/Page/Navbar/DarkModeToggler.html +++ b/Resources/Private/Partials/Page/Navbar/DarkModeToggler.html @@ -27,7 +27,7 @@ diff --git a/Resources/Private/Templates/Main.html b/Resources/Private/Templates/Main.html index 2605c1c5..b9c4b102 100644 --- a/Resources/Private/Templates/Main.html +++ b/Resources/Private/Templates/Main.html @@ -6,6 +6,7 @@

The main configuration has to be create + GOOGLE TAG MANAGER (noscript) @@ -14,7 +15,23 @@

The main configuration has to be create - GOOGLE TAG MANAGER (noscript) + Skip links + + + + + +.skip-link:not(:focus) { + position: absolute; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(0 0 0 0); + clip-path: inset(100%); + white-space: nowrap; +} + + LOADING SPINNER
diff --git a/Resources/Public/Backend/RTE/t3sbootstrap.css b/Resources/Public/Backend/RTE/t3sbootstrap.css index ff2fc955..0a37335c 100644 --- a/Resources/Public/Backend/RTE/t3sbootstrap.css +++ b/Resources/Public/Backend/RTE/t3sbootstrap.css @@ -12,6 +12,40 @@ .h5 {font-size: 1.25rem; } .h6 {font-size: 1rem; } +.text-tiny { + font-size: 0.7em; +} +.text-small { + font-size: 0.85em; +} +.text-big { + font-size: 1.4em; + font-size: calc(1.3rem + .6vw) !important; +} +@media (min-width: 1200px) { + .text-big { + font-size: 1.75rem !important; + } +} +.text-huge { + font-size: calc(1.375rem + 1.5vw) !important; +} +@media (min-width: 1200px) { + .text-huge { + font-size: 2.5rem !important; + } +} + +.custom-block-indent-a { + margin-left: 12.5%; +} +.custom-block-indent-b { + margin-left: 25%; +} +.custom-block-indent-c { + margin-left: 50%; +} + .card-content, .card-footer, .card-header, .card-image { padding: .5rem !important; } @@ -23,10 +57,10 @@ mark.mark { } .cke_editable { - font-size: 13px; - line-height: 1.6; - /* Fix for missing scrollbars with RTL texts. (#10488) */ - word-wrap: break-word; + font-size: 13px; + line-height: 1.6; + /* Fix for missing scrollbars with RTL texts. (#10488) */ + word-wrap: break-word; } pre { @@ -56,7 +90,7 @@ code, pre { font-family: Menlo,Monaco,Consolas,"Courier New",monospace; } div { - display: block; + display: block; } div.alert { padding: .75rem 1.25rem; @@ -106,7 +140,7 @@ div.alert-dark { } div.alert p { - margin: 0; + margin: 0; } div.center-block { @@ -135,43 +169,43 @@ span.rounded-pill { } span.bg-primary, span.badge.text-bg-primary { - color: #fff; - background-color: #007bff; + color: #fff; + background-color: #007bff; } span.bg-secondary, span.badge.text-bg-secondary { - color: #fff; - background-color: #868e96; + color: #fff; + background-color: #868e96; } span.bg-success, span.badge.text-bg-success { - color: #fff; - background-color: #28a745; + color: #fff; + background-color: #28a745; } span.bg-danger, span.badge.text-bg-danger { - color: #fff; - background-color: #dc3545; + color: #fff; + background-color: #dc3545; } span.bg-warning, span.badge.text-bg-warning { - color: #111; - background-color: #ffc107; + color: #111; + background-color: #ffc107; } span.bg-info, span.badge.text-bg-info { - color: #fff; - background-color: #17a2b8; + color: #fff; + background-color: #17a2b8; } span.bg-light, span.badge.text-bg-light { - color: #111; - background-color: #f8f9fa; + color: #111; + background-color: #f8f9fa; } span.bg-dark, span.badge.text-bg-dark { - color: #fff; - background-color: #343a40; + color: #fff; + background-color: #343a40; } @@ -180,8 +214,8 @@ span.badge.text-bg-dark { font-weight: 300; } .small { - font-size: 80%; - font-weight: 400; + font-size: 80%; + font-weight: 400; } cite { @@ -261,11 +295,11 @@ cite { } blockquote.text-center { - text-align: center !important; + text-align: center !important; } blockquote.text-right { - text-align: right !important; + text-align: right !important; } blockquote footer, blockquote small, blockquote .small { color: #999999; @@ -283,22 +317,22 @@ blockquote p { } ul.list-unstyled { - padding-left: 0; - list-style: none; + padding-left: 0; + list-style: none; } ul.list-inline { - padding-left: 0; - list-style: none; + padding-left: 0; + list-style: none; } ul.list-inline > li.list-inline-item { - display: inline-block; + display: inline-block; } .btn-primary { - color: #fff; - background-color: #007bff; - border-color: #007bff; + color: #fff; + background-color: #007bff; + border-color: #007bff; } a.btn { @@ -315,44 +349,44 @@ a.btn { transition: all .15s ease-in-out; } a.btn.btn-primary { - color: #fff; - background-color: #007bff; - border-color: #007bff; + color: #fff; + background-color: #007bff; + border-color: #007bff; } a.btn.btn-secondary { - color: #fff; - background-color: #868e96; - border-color: #868e96; + color: #fff; + background-color: #868e96; + border-color: #868e96; } a.btn.btn-success { - color: #fff; - background-color: #28a745; - border-color: #28a745; + color: #fff; + background-color: #28a745; + border-color: #28a745; } a.btn.btn-danger { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; + color: #fff; + background-color: #dc3545; + border-color: #dc3545; } a.btn.btn-warning { - color: #111; - background-color: #ffc107; - border-color: #ffc107; + color: #111; + background-color: #ffc107; + border-color: #ffc107; } a.btn.btn-info { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; } a.btn.btn-light { - color: #111; - background-color: #f8f9fa; - border-color: #f8f9fa; + color: #111; + background-color: #f8f9fa; + border-color: #f8f9fa; } a.btn.btn-dark { - color: #fff; - background-color: #343a40; - border-color: #343a40; + color: #fff; + background-color: #343a40; + border-color: #343a40; } diff --git a/Resources/Public/Backend/t3sbootstrap.css b/Resources/Public/Backend/t3sbootstrap.css deleted file mode 100644 index b73bf6be..00000000 --- a/Resources/Public/Backend/t3sbootstrap.css +++ /dev/null @@ -1,412 +0,0 @@ - -body { - font-family: sans-serif, Arial, Verdana, "Trebuchet MS"; - font-size: 12px; - color: #333; - background-color: #fff; - margin: 20px; -} - -.h2, .h3, .h4, .h5, .h6 { - margin-bottom: 0.5rem; - font-family: inherit; - font-weight: 500; - line-height: 1.2; - color: inherit; -} -.h2 {font-size: 2rem; } -.h3 {font-size: 1.75rem; } -.h4 {font-size: 1.5rem; } -.h5 {font-size: 1.25rem; } -.h6 {font-size: 1rem; } - -.card-content, .card-footer, .card-header, .card-image { - padding: .5rem !important; -} - -mark { - background-color: yellow; - color: black; -} - -.cke_editable { - font-size: 13px; - line-height: 1.6; - /* Fix for missing scrollbars with RTL texts. (#10488) */ - word-wrap: break-word; -} - -pre { - background-color: #F5F5F5; - border: 1px solid #CCCCCC; - border-radius: 4px; - color: #333333; - display: block; - font-size: 13px; - line-height: 1.42857; - margin: 0 0 10px; - padding: 9.5px; - word-break: break-all; - word-wrap: break-word; - white-space: pre-wrap; -} - -code { - background-color: #F9F2F4; - border-radius: 4px; - color: #C7254E; - font-size: 90%; - padding: 2px 4px; - white-space: nowrap; -} -code, pre { - font-family: Menlo,Monaco,Consolas,"Courier New",monospace; -} - - -div.alert { - padding: .75rem 1.25rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: .25rem; -} -div.alert-primary { - color: #004085; - background-color: #cce5ff; - border-color: #b8daff; -} -div.alert-secondary { - color: #464a4e; - background-color: #e7e8ea; - border-color: #dddfe2; -} -div.alert-success { - color: #155724; - background-color: #d4edda; - border-color: #c3e6cb; -} -div.alert-info { - color: #0c5460; - background-color: #d1ecf1; - border-color: #bee5eb; -} -div.alert-warning { - color: #856404; - background-color: #fff3cd; - border-color: #ffeeba; -} -div.alert-danger { - color: #721c24; - background-color: #f8d7da; - border-color: #f5c6cb; -} -div.alert-light { - color: #818182; - background-color: #fefefe; - border-color: #fdfdfe; -} -div.alert-dark { - color: #1b1e21; - background-color: #d6d8d9; - border-color: #c6c8ca; -} - -div.alert p { - margin: 0; -} - -div.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} - -/* Badges */ -span.badge { - display: inline-block; - padding: .25em .4em; - font-size: 75%; - font-weight: 700; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25rem; -} -span.rounded-pill { - padding-right: .6em; - padding-left: .6em; - border-radius: 10rem; -} -span.bg-primary { - color: #fff; - background-color: #007bff; -} -span.bg-secondary { - color: #fff; - background-color: #868e96; -} -span.bg-success { - color: #fff; - background-color: #28a745; -} -span.bg-danger { - color: #fff; - background-color: #dc3545; -} -span.bg-warning { - color: #111; - background-color: #ffc107; -} -span.bg-info { - color: #fff; - background-color: #17a2b8; -} -span.bg-light { - color: #111; - background-color: #f8f9fa; -} -span.bg-dark { - color: #fff; - background-color: #343a40; -} - - -.lead { - font-size: 1.25rem; - font-weight: 300; -} -.small { - font-size: 80%; - font-weight: 400; -} - -cite { - font-style: normal; -} - - -/* object stile */ -.link-primary, -.text-primary { - color: #007bff !important; -} -.link-secondary, -.text-secondary { - color: #6c757d !important; -} -.link-success, -.text-success { - color: #1e7e34 !important; -} -.link-danger, -.text-danger { - color: #bd2130 !important; -} -.link-warning, -.text-warning { - color: #ffc107 !important; -} -.link-info, -.text-info { - color: #17a2b8 !important; -} -.link-light, -.text-light { - color: #dae0e5 !important; -} -.link-dark, -.text-dark { - color: #343a40 !important; -} - - -/* justify */ -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-justify { - text-align: justify; -} -.text-center { - text-align: center; -} - - -.text-uppercase { - text-transform: uppercase; -} -.text-lowercase { - text-transform: lowercase; -} -.text-capitalize { - text-transform: capitalize; -} - -.bg-dark { - background-color: #343a40!important; -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.25rem; - margin: 0 0 1rem; - margin-bottom: 1rem; -} - -blockquote.text-center { - text-align: center !important; -} - -blockquote.text-right { - text-align: right !important; -} -blockquote footer, blockquote small, blockquote .small { - color: #999999; - display: block; - font-size: 80%; - line-height: 1.42857; -} -blockquote.pull-right p, blockquote.pull-right small, blockquote.pull-right .small { - text-align: right; -} -blockquote p { - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; -} - -ul.list-unstyled { - padding-left: 0; - list-style: none; -} - -ul.list-inline { - padding-left: 0; - list-style: none; -} -ul.list-inline > li.list-inline-item { - display: inline-block; -} - -a.btn { - display: inline-block; - font-weight: 400; - text-align: center; - white-space: nowrap; - vertical-align: middle; - border: 1px solid transparent; - padding: .5rem .75rem; - font-size: 1rem; - line-height: 1.25; - border-radius: .25rem; - transition: all .15s ease-in-out; -} -a.btn-primary { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} -a.btn-secondary { - color: #fff; - background-color: #868e96; - border-color: #868e96; -} -a.btn-success { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} -a.btn-danger { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} -a.btn-warning { - color: #111; - background-color: #ffc107; - border-color: #ffc107; -} -a.btn-info { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} -a.btn-light { - color: #111; - background-color: #f8f9fa; - border-color: #f8f9fa; -} -a.btn-dark { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - - -table { - width: 100%; - max-width: 100%; - margin-bottom: 1rem; - background-color: transparent; -} -table.table-bordered { - border: 1px solid #e9ecef; -} -table.table-striped tbody tr:nth-of-type(2n+1) { - background-color: rgba(0, 0, 0, .05); -} -table.table-hover { - background-color: #f5f5f5; -} -table.table-sm {} -table.table-table-inverse {} - -a.internal-link { color: #2875A8; } -a.external-link { color: #D02845; } -a.download-link { color: #2875A8; } -a.email-link { color: #D02845; } - - - -.fw-bold { - font-weight: 700 !important; -} -.fw-bolder { - font-weight: bolder !important; -} -.fw-semibold { - font-weight: 600 !important; -} -.fw-normal { - font-weight: 400 !important; -} -.fw-light { - font-weight: 300 !important; -} -.fw-lighter { - font-weight: lighter !important; -} -.fst-italic { - font-style: italic !important; -} -.fst-normal { - font-style: normal !important; -} - -.lh-1 { - line-height: 1 !important; -} -lh-sm { - line-height: 1.25 !important; -} -.lh-base { - line-height: 1.5 !important; -} -.lh-lg { - line-height: 2 !important; -} diff --git a/Resources/Public/Styles/t3sbootstrap.css b/Resources/Public/Styles/t3sbootstrap.css index 4f685379..066b7e2b 100644 --- a/Resources/Public/Styles/t3sbootstrap.css +++ b/Resources/Public/Styles/t3sbootstrap.css @@ -1 +1 @@ -a{outline:0}.subheader{margin:0}.alert{display:grid}.code{padding:.2rem .4rem;font-size:90%;color:#bd4147;background-color:rgba(86,61,124,0.15);border-radius:.25rem;font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}mark{background-color:#ff0;color:#000}.back-to-top{position:fixed;bottom:2em;right:1.5em;text-decoration:none;color:#eee;background-color:transparent;opacity:.7;padding:1em;z-index:1030}.back-to-top:hover{background-color:transparent;color:#999}.text-hide{display:none}.news a{text-decoration:none}.dropend .dropdown-menu{top:0;right:auto;left:100%}.dropend .dropdown-menu[data-bs-popper]{margin-left:0!important}.dropup.dropend .dropdown-menu[data-bs-popper]{bottom:0!important;top:auto!important}.dropdown-item.parent-active{color:#151515;text-decoration:none;background-color:#f6f6f6}.dropdown-item.active.parent-active{color:#fff;text-decoration:none;background-color:var(--bs-primary)}.dropdown-hover-all .dropdown-menu,.dropdown-hover > .dropdown-menu.dropend{margin-left:-1px!important}.card.card-effect-one img{-moz-transition:transform .5s ease-in-out!important;-webkit-transition:transform .5s ease-in-out!important;transition:transform .5s ease-in-out!important}.card.card-effect-one:hover{background-color:var(--bs-light)}.card.card-effect-one:hover img{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.card.card-effect-one::before{content:"";position:absolute;z-index:-1;left:50%;right:50%;bottom:0;background:var(--bs-primary);height:4px;-webkit-transition-property:left,right;transition-property:left,right;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.card.card-effect-one:active::before,.card.card-effect-one:focus::before,.card.card-effect-one:hover::before{left:0;right:0}.card.card-effect-one{display:inline-block;vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;overflow:hidden;-webkit-transform:scale(1)}picture img.lazy{opacity:0}picture img.lazy:not(.initial){transition:opacity 2s}picture img.lazy.error,picture img.lazy.initial,picture img.lazy.loaded{opacity:1}picture img.lazy:not([src]):not([srcset]){visibility:hidden}figure{overflow:hidden}.dropdown-menu-end .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-left:-.5rem;vertical-align:.255em;content:" ";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent;transform:rotate(90deg)}.dropdown-menu-end .dropend .dropdown-toggle::after{display:none}.dropdown-menu-end .dropend .dropdown-menu{right:100%;left:auto}.dropdown-menu-end .dropdown-toggle[aria-expanded="true"]::before{transform:rotate(-90deg)}.dropdown-toggle::after,.dropdown-toggle::before{transition:.7s}.dropdown-toggle[aria-expanded="true"]::after{transform:rotate(180deg)}.dropdown-menu-end .dropend .dropdown-menu[data-bs-popper]{top:0!important;right:100%!important;left:auto!important;margin-top:0!important;margin-left:.125rem!important}#main-navbar.shrink{height:auto}#main-navbar.navbar-shrink{padding:.5rem 1rem}.mfp-fade.mfp-bg{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-bg.mfp-ready{opacity:.8}.mfp-fade.mfp-bg.mfp-removing{opacity:0}.mfp-fade.mfp-wrap .mfp-content{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-wrap.mfp-ready .mfp-content{opacity:1}.mfp-fade.mfp-wrap.mfp-removing .mfp-content{opacity:0}.white-popup{position:relative;background:#fff;padding:20px;width:auto;max-width:500px;margin:20px auto}.card figure,.ge_autoLayout_row figure{margin:0}.card .list-group-item{color:#212529}a.card{color:inherit}a.card:hover{text-decoration:none}.meta-nav.text-white a{color:#fff!important}div.alert p,div.alert ul{margin:0}#language{cursor:pointer}#language .t3js-icon{margin-right:5px;position:relative;top:-2px}.tx-indexedsearch-redMarkup{color:red}.tx-indexedsearch-info p{margin:0}section.parallax{background-attachment:fixed;background-position:50% 0;background-repeat:no-repeat;background-size:cover;z-index:-1}section.multiple-parallax{background-attachment:fixed,fixed;background-position:left top,50% 0;background-repeat:repeat,no-repeat;background-size:auto,cover;z-index:-1}.absolute{position:absolute!important}.content-consent.background-image,.jumbotron.background-image,div.background-image,section.background-image{background-repeat:no-repeat;background-size:cover;background-position:center center}.jumbotron.multiple-background-image,div.multiple-background-image,section.multiple-background-image{background-repeat:repeat,no-repeat;background-size:auto,cover;background-position:left top,center center}.jumbotron.background-fixed,div.background-fixed,section.background-fixed{background-attachment:fixed!important}.frame-ruler-before:before{content:"";display:block;border-top:1px solid rgba(0,0,0,0.25);margin-bottom:2em}.frame-ruler-after:after{content:"";display:block;border-bottom:1px solid rgba(0,0,0,0.25);margin-top:2em}.frame-indent{margin-left:15%;margin-right:15%}.frame-indent-left{margin-left:33%}.frame-indent-right{margin-right:33%}.preloader{z-index:999;position:absolute;left:calc(50% - 1.5rem);top:50%}.nav-meta,.nav-scroller{position:relative;z-index:2;height:2.75rem;overflow-y:hidden}.nav-meta .meta-text a,.nav-scroller .meta-text a{margin-right:1rem}.nav-meta .meta-text a:last-child,.nav-scroller .meta-text a:last-child{margin-right:0}.nav-scroller .nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-bottom:1rem;margin-top:-1px;overflow-x:auto;color:rgba(255,255,255,0.75);text-align:center;white-space:nowrap;-webkit-overflow-scrolling:touch}.nav-underline .nav-link{padding-top:.75rem;padding-bottom:.75rem;font-size:.875rem;color:var(--bs-gray-dark)}.nav-underline .nav-link:hover{color:var(--bs-danger)}.nav-underline .active{font-weight:500;color:var(--bs-gray-dark)}.nav-underline .nav-link.meta-text{color:var(--bs-gray-dark)}.nav-underline .nav-link.meta-text a:hover{color:var(--bs-danger)}.navbar-expand-no{max-height:100%!important}.sticky.is-sticky{position:fixed;left:0;right:0;top:0;z-index:1000;width:100%}.carousel-item{transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease,-webkit-transform .5s ease;-webkit-backface-visibility:visible;backface-visibility:visible;overflow:hidden!important}.carousel figure{margin:0!important}.carousel-caption.caption-animated.animated{position:absolute;top:0;display:flex;justify-content:center;width:auto;color:#fff;text-align:center;-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.content-consent{min-height:200px}.ce-link{text-decoration:none!important;color:inherit!important}.ce-link-content{text-decoration:none!important;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 1px 2px rgba(0,0,0,0.24);transition:all .3s cubic-bezier(0.25,0.8,0.25,1);padding:1.5rem}.ce-link-content:hover{box-shadow:0 14px 28px rgba(0,0,0,0.25),0 10px 10px rgba(0,0,0,0.22)}.card.ce-link-content{padding:0}.img-transform{transition:transform .3s ease!important}.img-transform:active,.img-transform:hover{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}figure.img-hover-zoom--brightness,figure.img-hover-zoom--colorize,figure.img-hover-zoom--slowmo,figure.img-hover-zoom--blur,figure.img-hover-zoom--zoom-n-rotate,figure.img-hover-zoom {display: flex;flex-flow: column;}.relative{position:relative}.relative .overlay > div{position:absolute;top:2rem}#site-preloader{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#f5f5f5;z-index:99999}#site-spinner{position:absolute;left:calc(50% - 1.5rem);top:50%}.sidebar-sub-item i{text-indent:-1px}figcaption{font-size:.75rem;font-weight:400}.fa,.fa-brands,.fal,.far,.fas,.fa-solid,.fa-regular,.fa-light,.fa-thin,fa-duotone,.fa-sharp{line-height:inherit}.bt_hidden{opacity:0}.bt_visible{opacity:1}.page-pagination{margin:2rem 0}.page-pagination .page-item:first-child .page-link{border-top-left-radius:0;border-bottom-left-radius:0}.page-pagination .page-item:last-child .page-link{border-top-right-radius:0;border-bottom-right-radius:0}.video-card .card-img-overlay{margin-bottom:40px}.zoom-overlay{overflow:hidden;background:0 0;opacity:0;transition:opacity 0.35s,-webkit-transform .35s;transition:opacity 0.35s,transform .35s}.image a:hover .zoom-overlay{opacity:.8}.magnifying-glass-icon{color:#fff;text-align:center;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border-radius:50%;padding:20px;border:1px solid #fff;line-height:1;background:rgba(0,0,0,0.5);width:60px;height:60px}.zoom-overlay .description .magnifying-glass-icon{top:50%}.card-img-overlay .card-body{padding:0}.navbar-brand img.d-inline-block{margin-right:.25rem}.media figure.image{position:relative;margin-bottom:0}.media .magnifying-glass-icon{top:50%}.w-33{width:33%!important}.w-66{width:66%!important}.fixedPosition{position:fixed;top:50%;margin:0!important;z-index:999}.fixedPosition-right{right:0}.fixedPosition-left{left:0}.rotate-plus{-moz-transform:rotate(90deg)!important;-ms-transform:rotate(90deg)!important;-o-transform:rotate(90deg)!important;-webkit-transform:rotate(90deg)!important;transform:rotate(90deg)!important;margin:0!important}.rotate-minus{-moz-transform:rotate(-90deg)!important;-ms-transform:rotate(-90deg)!important;-o-transform:rotate(-90deg)!important;-webkit-transform:rotate(-90deg)!important;transform:rotate(-90deg)!important;margin:0!important}.media-body p{margin-bottom:0}p .svg-inline--fa{margin-left:.1rem}@media (min-width: 576px){html{font-size:16px}.sm-twoColumns{min-width:26rem!important}.content-consent{min-height:300px}}@media (min-width: 768px){.md-twoColumns{min-width:26rem!important}.content-consent{min-height:300px}}@media (min-width: 992px){.lg-twoColumns{min-width:26rem!important}.content-consent{min-height:400px}}@media (min-width: 1200px){.xl-twoColumns{min-width:26rem!important}.content-consent{min-height:500px}}@media (max-width: 1199px){.navbar-expand-xl{max-height:100%!important}}@media (max-width: 991px){.navbar-expand-lg{max-height:100%!important}}@media (max-width: 767px){.navbar-expand-md{max-height:100%!important}.gallery .w-25,.gallery.w-25{width:100%!important}.gallery .w-50,.gallery.w-50{width:100%!important}.gallery .w-33,.gallery.w-33{width:100%!important}.gallery .w-66,.gallery.w-66{width:100%!important}.gallery .w-75,.gallery.w-75{width:100%!important}.align .w-25,.beside .w-25{width:100%!important}.align .w-50,.beside .w-50{width:100%!important}.align .w-33,.beside .w-33{width:100%!important}.align .w-66,.beside .w-66{width:100%!important}.align .w-75,.beside .w-75{width:100%!important}}@media (max-width: 575px){.navbar-expand-sm{max-height:100%!important}.gallery{text-align:center}.card .img-overlay{color:#fff;text-shadow:6px 0 6px #666}.card .img-overlay .card-body{padding:0}}.card-flipper .image-flip.hover .backside,.card-flipper .image-flip:active .backside,.card-flipper .image-flip:hover .backside{-webkit-transform:rotateY(0);-moz-transform:rotateY(0);-o-transform:rotateY(0);-ms-transform:rotateY(0);transform:rotateY(0);border-radius:.25rem}.card-flipper .image-flip.hover .frontside,.card-flipper .image-flip:active .frontside,.card-flipper .image-flip:hover .frontside{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.card-flipper .mainflip{-webkit-transition:1s;-webkit-transform-style:preserve-3d;-ms-transition:1s;-moz-transition:1s;-moz-transform:perspective(1000px);-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d;position:relative}.card-flipper .frontside{position:relative;-webkit-transform:rotateY(0);-ms-transform:rotateY(0);z-index:2;margin-bottom:30px}.card-flipper .backside{position:absolute;top:0;left:0;background:#fff;-webkit-transform:rotateY(-180deg);-moz-transform:rotateY(-180deg);-o-transform:rotateY(-180deg);-ms-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-box-shadow:5px 7px 9px -4px #9e9e9e;-moz-box-shadow:5px 7px 9px -4px #9e9e9e;box-shadow:5px 7px 9px -4px #9e9e9e}.card-flipper .backside,.card-flipper .frontside{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:1s;-webkit-transform-style:preserve-3d;-moz-transition:1s;-moz-transform-style:preserve-3d;-o-transition:1s;-o-transform-style:preserve-3d;-ms-transition:1s;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d}.card-flipper .backside .card,.card-flipper .frontside .card{min-height:312px}.card-flipper .fa-plus-square{color:var(--bs-primary)}#sectionmenu.section-menu.nav-fill.variant{background-color:#fff}#sectionmenu.section-menu.nav-fill.variant .nav-item{display:inline-block;position:relative;height:58px;border-right:2px solid var(--bs-light);border-top:2px solid var(--bs-light);border-bottom:2px solid var(--bs-light);text-align:center;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;color:#333;cursor:pointer;white-space:normal}#sectionmenu.section-menu.nav-fill.variant .nav-item:last-child{border-left:2px solid var(--bs-light)}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger{line-height:2.6}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active::before{border-left:13px solid transparent;border-right:13px solid transparent;border-top:12px solid var(--bs-primary);position:absolute;top:58px;left:calc(50% - 6px);content:"";display:inline;z-index:2000}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger:hover{color:var(--bs-primary);text-shadow:0 0 5px rgba(169,169,169,0.3)}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active,#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active:hover{background-color:var(--bs-primary);border-bottom:1px solid var(--bs-primary);color:#fff;margin-top:0;height:58px;border-top:none}#sectionmenu.section-menu .nav-item.nav-link.active,#sectionmenu .nav-link.active{color:var(--bs-danger)}#sectionmenu.section-menu.nav-pills .nav-item.nav-link.active{color:#fff}.bg-raster{position:relative}.bg-raster:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:url(/typo3conf/ext/t3sbootstrap/Resources/Public/Images/raster.png) repeat}#background-carousel{width:100%;height:100%;z-index:-1}#background-carousel .carousel,#background-carousel .carousel-inner{width:100%;height:100%;z-index:0;overflow:hidden}#background-carousel .carousel-item{width:100%;height:100%;background-position:center center;background-size:cover;z-index:0}#background-carousel #content-wrapper{position:absolute;z-index:1!important;min-width:100%;min-height:100%}#background-carousel .carousel-control-next,#background-carousel .carousel-control-prev{z-index:2}.carousel-control-next,.carousel-control-prev{z-index:10}.news .page-navigation:last-child{margin-top:1.5rem}.card-img-overlay .card-text p:last-child{margin-bottom:0}@media (min-width: 576px){.card-columns{column-count:2}.image-flip .backside,.image-flip .card,.image-flip .frontside,.image-flip .mainflip{height:100%}}@media (min-width: 768px){.card-columns{column-count:3}}@media (min-width: 992px){.card-columns{column-count:4}}@media (min-width: 1200px){.card-columns{column-count:4}}.news .card{box-shadow:0 0 0 transparent,0 1px 2px transparent;transition:all .3s cubic-bezier(0.25,0.8,0.25,1)}.news .card:active,.news .card:hover{box-shadow:0 4px 8px rgba(0,0,0,0.25),0 2px 2px rgba(0,0,0,0.22);z-index:101}.news .list-group-item .d-sm-block p{margin-bottom:0}#news-preloader{position:relative;top:0;left:0;right:0;bottom:0;background-color:transparent;z-index:99999}#news-preloader-bottom{position:relative;top:-75px;left:0;right:0;bottom:0;background-color:transparent;z-index:99999}#news-spinner{position:absolute;right:0;top:-.5rem}.news .list-group-item .card-text p{margin-bottom:0}.news .list-group-item .media figure{margin-bottom:0}.news-single figure.image .zoom-overlay{left:1rem}.cardflipper .mainflip{-webkit-transition:1s;-webkit-transform-style:preserve-3d;-ms-transition:1s;-moz-transition:1s;-moz-transform:perspective(1000px);-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d;position:relative}.cardflipper .frontside{position:relative;-webkit-transform:rotateY(0);-ms-transform:rotateY(0);z-index:2;margin-bottom:30px}.cardflipper .backside{position:absolute;top:0;left:0;background:#fff;-webkit-transform:rotateY(-180deg);-moz-transform:rotateY(-180deg);-o-transform:rotateY(-180deg);-ms-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-box-shadow:5px 7px 9px -4px #9e9e9e;-moz-box-shadow:5px 7px 9px -4px #9e9e9e;box-shadow:5px 7px 9px -4px #9e9e9e}.cardflipper .backside,.cardflipper .frontside{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:1s;-webkit-transform-style:preserve-3d;-moz-transition:1s;-moz-transform-style:preserve-3d;-o-transition:1s;-o-transform-style:preserve-3d;-ms-transition:1s;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d}.cardflipper .fa-plus-square{color:var(--bs-primary)}.cardflipper .fa-minus-square{color:var(--bs-primary)}.cardflipper .fa-minus-square:hover,.cardflipper .fa-plus-square:hover{cursor:pointer}.card-flipper .card-footer,.cardflipper .card-footer{padding:.75rem 1.25rem;background-color:transparent;border-top:none}.card-flipper .backside,.card-flipper .backside .card,.cardflipper .backside,.cardflipper .backside .card{height:100%}.card-footer{text-align:center}.image .toast{position: relative}.img-copyright{justify-content: flex-end !important;position:relative;margin-top:-31px;margin-right:.5rem;display:flex;margin-left:auto;z-index:1000;width: 30px;}.img-copyright:hover{cursor:help}.img-copyright-default{justify-content: flex-end !important;position:relative;margin-top:-24px;margin-right:.5rem;display:flex;margin-left:auto}span.copyright{margin-right:.5rem}.zoom-right{display:flex;margin-left:auto}.zoom-center{display:flex}.card .image-caption.text-right{margin-right:.5rem;margin-right:.5rem}figure .toast{margin-bottom:0!important;z-index:1}.imageorient-1 figure.image .zoom-overlay,.imageorient-9 figure.image .zoom-overlay{right:.5rem}.offcanvas{box-shadow:none}.offcanvas-header{box-shadow:0 .5rem 1rem #000 0 -1px 0 #000;padding-bottom:.75rem!important}.slideIn{-webkit-animation-name:slideIn;animation-name:slideIn}body.lg .dd-animate-1, body.md .dd-animate-1, body.xl .dd-animate-1{display:block;visibility:hidden;opacity:0;transform:translateY(50px);transition:.5s ease all }body.lg .dd-animate-1.show, body.md .dd-animate-1.show, body.xl .dd-animate-1.show{display:block;visibility:visible;opacity:1;transform:translateY(0);transition:.5s ease all }body.lg .dropdown-menu-end.dd-animate-1, body.md .dropdown-menu-end.dd-animate-1, body.xl .dropdown-menu-end.dd-animate-1{right: 0;left: auto;}body.lg .dd-animate-2, body.lg .dd-animate-2 .dropdown-submenu .dropdown-menu, body.md .dd-animate-2, body.md .dd-animate-2 .dropdown-submenu .dropdown-menu, body.xl .dd-animate-2, body.xl .dd-animate-2 .dropdown-submenu .dropdown-menu{animation-name:example;animation-duration:1s }@keyframes example{from{opacity:.2}to{opacity:1}}.bs-callout{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px}.bs-callout h4{margin-top:0;margin-bottom:5px}.bs-callout p,.bs-callout ul:last-child{margin-bottom:0}.bs-callout code{border-radius:3px}.bs-callout + .bs-callout{margin-top:-5px}.bs-callout-default{border-left-color:var(--bs-secondary)}.bs-callout-default h4{color:var(--bs-secondary)}.bs-callout-primary{border-left-color:var(--bs-primary)}.bs-callout-primary h4{color:var(--bs-primary)}.bs-callout-success{border-left-color:var(--bs-success)}.bs-callout-success h4{color:var(--bs-success)}.bs-callout-danger{border-left-color:var(--bs-danger)}.bs-callout-danger h4{color:var(--bs-danger)}.bs-callout-warning{border-left-color:var(--bs-warning)}.bs-callout-warning h4{color:var(--bs-warning)}.bs-callout-info{border-left-color:var(--bs-info)}.bs-callout-info h4{color:var(--bs-info)}.img-hover-zoom img{transition:transform .8s ease!important}.img-hover-zoom:hover img{transform:scale(1.5)}.img-hover-zoom--zoom-n-rotate img{transition:transform .5s ease-in-out!important}.img-hover-zoom--zoom-n-rotate:hover img{transform:scale(2) rotate(25deg)}.img-hover-zoom--slowmo img{transform-origin:50% 65%;transition:transform 5s,filter 3s ease-in-out!important;filter:brightness(150%)}.img-hover-zoom--slowmo:hover img{filter:brightness(100%);transform:scale(2)}.img-hover-zoom--brightness img{transition:transform 2s,filter 1.5s ease-in-out!important;transform-origin:center center;filter:brightness(50%)}.img-hover-zoom--brightness:hover img{filter:brightness(100%);transform:scale(1.3)}.img-hover-zoom--blur img{transition:transform 1s,filter 2s ease-in-out!important;filter:blur(2px);transform:scale(1.2)}.img-hover-zoom--blur:hover img{filter:blur(0);transform:scale(1)}.img-hover-zoom--colorize img{transition:transform 0.5s,filter 1.5s ease-in-out!important;filter:grayscale(100%)}.img-hover-zoom--colorize:hover img{filter:grayscale(0);transform:scale(1.1)}.nav-icon{margin:-1.5px;width:35px;border:none;background-color:transparent}.nav-icon div,.nav-icon:after,.nav-icon:before{background-color:#fff;border-radius:3px;content:"";display:block;height:5px;margin:7px 0;transition:all .2s ease-in-out}.nav-icon:not(.collapsed):before{transform:translateY(12px) rotate(135deg)}.nav-icon:not(.collapsed):after{transform:translateY(-12px) rotate(-135deg)}.nav-icon:not(.collapsed) div{transform:scale(0)}.nav-icon:active,.nav-icon:focus{outline:0;box-shadow:none}.media{display:flex!important}.media figure.image{flex-shrink:0!important}.media .media-body{flex-grow:1!important}.card figcaption{padding-right:.5rem;padding-left:.5rem}.back-to-top.st-none{transform:scale(0);transition:transform .4s cubic-bezier(0.5,0,0.3,1)}.back-to-top.st-block{transform:scale(1);transition:transform .4s cubic-bezier(0.5,0,0.3,1)}.image .toast,picture{overflow:hidden}#main-navbar{-moz-transition:all 1s ease-in;-webkit-transition:all 1s ease-in;-o-transition:all 1s ease-in;transition:all 1s ease-in}#main-navbar.shrink.bg-primary{-webkit-animation:fadein 2s;-moz-animation:fadein 2s;-ms-animation:fadein 2s;-o-animation:fadein 2s;animation:fadein 2s}@keyframes fadein{from{opacity:0}to{opacity:1}}@-moz-keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@-ms-keyframes fadein{from{opacity:0}to{opacity:1}}@-o-keyframes fadein{from{opacity:0}to{opacity:1}}.sticky{position:fixed!important;top:0;left:0;width:100%}.text-shadow{text-shadow:1px 1px 2px #000,0 0 25px #000,0 0 5px #000}.accordion-img::after{margin-right:1rem}@media (max-width: 575px){.col-image .background-image{min-height:250px}}@media (max-width: 991px){.col-image .background-image{min-height:350px}}.local-video{overflow:hidden}.local-video .card-img-overlay{max-width:1320px;width:100%;padding-right:15px;padding-left:15px;margin:0 auto}.local-video figure.video video{width:100%;height:100%;position:absolute;top:0;left:0}@media (max-width: 991.98px){.local-video figure.video{min-height:200px}.local-video .card-img-overlay{min-height:190px}}.video-container iframe{position:absolute;top:50%;left:50%;width:100vw;height:100vh;transform:translate(-50%,-50%)}#text{position:absolute;color:#fff;left:50%;top:50%;transform:translate(-50%,-50%)}@media (min-aspect-ratio: 16/9){.video-container iframe{height:56.25vw}}@media (max-aspect-ratio: 16/9){.video-container iframe{width:177.78vh}}.toast-container.top-70{top:70px!important}.card-body .btn-block,.card-footer .btn-block{width:100%}.toast-container{z-index:11}.carousel-item figure > a::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.card-body .card-text p:last-child{margin-bottom:0!important}.card .row .card-body{padding:.5rem 1rem .275rem}.btn-slide-in a,.btn-slide-in a:hover{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btnGroupSlider .btn-slide-out{right:auto;transition:right .3s ease-in-out}.btnGroupSlider .btn-slide-in{right:auto;transition:right .3s ease-in-out}.vimeo-wrapper .vimeo-btn:hover{filter:drop-shadow(0 0 0.75rem black)!important}.submenu.style-one .dd-item::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent;float:right;margin-top:.7rem}.submenu.style-one .dd-item[aria-expanded="true"]::after{transform:rotate(180deg)}.submenu.style-one .dropdown-toggle::before,.submenu .dd-item::after{transition:.7s}.submenu.style-one .nav-link:not(.active):hover{background-color:var(--bs-gray-100)}.submenu.style-one .nav-item.active .dd-item::after{transform:rotate(180deg)}.submenu .dd-link::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent;float:right;margin-top:.7rem}.submenu .dd-link[aria-expanded="true"]::after{transform:rotate(180deg)}.flip-card{background-color:transparent;height:100%;perspective:1000px}.flip-card-inner{position:relative;width:100%;height:100%;text-align:center;transition:transform .6s;transform-style:preserve-3d}.flip-card-front,.flip-card-back{position:absolute;width:100%;height:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden}.ratio{position:relative;width:100%}.navbar-nav .nav-link.parent-active {color: var(--bs-navbar-active-color)}.custom-popover {--bs-popover-max-width: 280px;--bs-popover-border-color: var(--bs-primary);--bs-popover-header-bg: var(--bs-primary);--bs-popover-header-color: var(--bs-white);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: .5rem;}.px-2-5 {padding-right: 0.75rem !important;padding-left: 0.75rem !important;}.offcanvas-body .dm-toggler {width: 100%;}.card.card-effect-one.secondary::before{background:var(--bs-secondary)}.card.card-effect-one.success::before{background:var(--bs-success)}.card.card-effect-one.info::before{background:var(--bs-info)}.card.card-effect-one.warning::before{background:var(--bs-warning)}.card.card-effect-one.danger::before{background:var(--bs-danger)}.card.card-effect-one.light::before{background:var(--bs-light)}.card.card-effect-one.dark::before{background:var(--bs-dark)}.card.card-effect-one.white::before{background:var(--bs-white)}figure.image a {position: relative;height: 100%;display: block}.card-img-overlay{margin: 0 auto} +a{outline:0}.subheader{margin:0}.alert{display:grid}.code{padding:.2rem .4rem;font-size:90%;color:#bd4147;background-color:rgba(86,61,124,0.15);border-radius:.25rem;font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}mark{background-color:#ff0;color:#000}.back-to-top{position:fixed;bottom:2em;right:1.5em;text-decoration:none;color:#eee;background-color:transparent;opacity:.7;padding:1em;z-index:1030}.back-to-top:hover{background-color:transparent;color:#999}.text-hide{display:none}.news a{text-decoration:none}.dropend .dropdown-menu{top:0;right:auto;left:100%}.dropend .dropdown-menu[data-bs-popper]{margin-left:0!important}.dropup.dropend .dropdown-menu[data-bs-popper]{bottom:0!important;top:auto!important}.dropdown-item.parent-active{color:#151515;text-decoration:none;background-color:#f6f6f6}.dropdown-item.active.parent-active{color:#fff;text-decoration:none;background-color:var(--bs-primary)}.dropdown-hover-all .dropdown-menu,.dropdown-hover > .dropdown-menu.dropend{margin-left:-1px!important}.card.card-effect-one img{-moz-transition:transform .5s ease-in-out!important;-webkit-transition:transform .5s ease-in-out!important;transition:transform .5s ease-in-out!important}.card.card-effect-one:hover{background-color:var(--bs-light)}.card.card-effect-one:hover img{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.card.card-effect-one::before{content:"";position:absolute;z-index:-1;left:50%;right:50%;bottom:0;background:var(--bs-primary);height:4px;-webkit-transition-property:left,right;transition-property:left,right;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.card.card-effect-one:active::before,.card.card-effect-one:focus::before,.card.card-effect-one:hover::before{left:0;right:0}.card.card-effect-one{display:inline-block;vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;overflow:hidden;-webkit-transform:scale(1)}picture img.lazy{opacity:0}picture img.lazy:not(.initial){transition:opacity 2s}picture img.lazy.error,picture img.lazy.initial,picture img.lazy.loaded{opacity:1}picture img.lazy:not([src]):not([srcset]){visibility:hidden}figure{overflow:hidden}.dropdown-menu-end .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-left:-.5rem;vertical-align:.255em;content:" ";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent;transform:rotate(90deg)}.dropdown-menu-end .dropend .dropdown-toggle::after{display:none}.dropdown-menu-end .dropend .dropdown-menu{right:100%;left:auto}.dropdown-menu-end .dropdown-toggle[aria-expanded="true"]::before{transform:rotate(-90deg)}.dropdown-toggle::after,.dropdown-toggle::before{transition:.7s}.dropdown-toggle[aria-expanded="true"]::after{transform:rotate(180deg)}.dropdown-menu-end .dropend .dropdown-menu[data-bs-popper]{top:0!important;right:100%!important;left:auto!important;margin-top:0!important;margin-left:.125rem!important}#main-navbar.shrink{height:auto}#main-navbar.navbar-shrink{padding:.5rem 1rem}.mfp-fade.mfp-bg{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-bg.mfp-ready{opacity:.8}.mfp-fade.mfp-bg.mfp-removing{opacity:0}.mfp-fade.mfp-wrap .mfp-content{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-wrap.mfp-ready .mfp-content{opacity:1}.mfp-fade.mfp-wrap.mfp-removing .mfp-content{opacity:0}.white-popup{position:relative;background:#fff;padding:20px;width:auto;max-width:500px;margin:20px auto}.card figure,.ge_autoLayout_row figure{margin:0}.card .list-group-item{color:#212529}a.card{color:inherit}a.card:hover{text-decoration:none}.meta-nav.text-white a{color:#fff!important}div.alert p,div.alert ul{margin:0}#language{cursor:pointer}#language .t3js-icon{margin-right:5px;position:relative;top:-2px}.tx-indexedsearch-redMarkup{color:red}.tx-indexedsearch-info p{margin:0}section.parallax{background-attachment:fixed;background-position:50% 0;background-repeat:no-repeat;background-size:cover;z-index:-1}section.multiple-parallax{background-attachment:fixed,fixed;background-position:left top,50% 0;background-repeat:repeat,no-repeat;background-size:auto,cover;z-index:-1}.absolute{position:absolute!important}.content-consent.background-image,.jumbotron.background-image,div.background-image,section.background-image{background-repeat:no-repeat;background-size:cover;background-position:center center}.jumbotron.multiple-background-image,div.multiple-background-image,section.multiple-background-image{background-repeat:repeat,no-repeat;background-size:auto,cover;background-position:left top,center center}.jumbotron.background-fixed,div.background-fixed,section.background-fixed{background-attachment:fixed!important}.frame-ruler-before:before{content:"";display:block;border-top:1px solid rgba(0,0,0,0.25);margin-bottom:2em}.frame-ruler-after:after{content:"";display:block;border-bottom:1px solid rgba(0,0,0,0.25);margin-top:2em}.frame-indent{margin-left:15%;margin-right:15%}.frame-indent-left{margin-left:33%}.frame-indent-right{margin-right:33%}.preloader{z-index:999;position:absolute;left:calc(50% - 1.5rem);top:50%}.nav-meta,.nav-scroller{position:relative;z-index:2;height:2.75rem;overflow-y:hidden}.nav-meta .meta-text a,.nav-scroller .meta-text a{margin-right:1rem}.nav-meta .meta-text a:last-child,.nav-scroller .meta-text a:last-child{margin-right:0}.nav-scroller .nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-bottom:1rem;margin-top:-1px;overflow-x:auto;color:rgba(255,255,255,0.75);text-align:center;white-space:nowrap;-webkit-overflow-scrolling:touch}.nav-underline .nav-link{padding-top:.75rem;padding-bottom:.75rem;font-size:.875rem;color:var(--bs-gray-dark)}.nav-underline .nav-link:hover{color:var(--bs-danger)}.nav-underline .active{font-weight:500;color:var(--bs-gray-dark)}.nav-underline .nav-link.meta-text{color:var(--bs-gray-dark)}.nav-underline .nav-link.meta-text a:hover{color:var(--bs-danger)}.navbar-expand-no{max-height:100%!important}.sticky.is-sticky{position:fixed;left:0;right:0;top:0;z-index:1000;width:100%}.carousel-item{transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease,-webkit-transform .5s ease;-webkit-backface-visibility:visible;backface-visibility:visible;overflow:hidden!important}.carousel figure{margin:0!important}.carousel-caption.caption-animated.animated{position:absolute;top:0;display:flex;justify-content:center;width:auto;color:#fff;text-align:center;-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.content-consent{min-height:200px}.ce-link{text-decoration:none!important;color:inherit!important}.ce-link-content{text-decoration:none!important;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 1px 2px rgba(0,0,0,0.24);transition:all .3s cubic-bezier(0.25,0.8,0.25,1);padding:1.5rem}.ce-link-content:hover{box-shadow:0 14px 28px rgba(0,0,0,0.25),0 10px 10px rgba(0,0,0,0.22)}.card.ce-link-content{padding:0}.img-transform{transition:transform .3s ease!important}.img-transform:active,.img-transform:hover{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}figure.img-hover-zoom--brightness,figure.img-hover-zoom--colorize,figure.img-hover-zoom--slowmo,figure.img-hover-zoom--blur,figure.img-hover-zoom--zoom-n-rotate,figure.img-hover-zoom {display: flex;flex-flow: column;}.relative{position:relative}.relative .overlay > div{position:absolute;top:2rem}#site-preloader{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#f5f5f5;z-index:99999}#site-spinner{position:absolute;left:calc(50% - 1.5rem);top:50%}.sidebar-sub-item i{text-indent:-1px}figcaption{font-size:.75rem;font-weight:400}.fa,.fa-brands,.fal,.far,.fas,.fa-solid,.fa-regular,.fa-light,.fa-thin,fa-duotone,.fa-sharp{line-height:inherit}.bt_hidden{opacity:0}.bt_visible{opacity:1}.page-pagination{margin:2rem 0}.page-pagination .page-item:first-child .page-link{border-top-left-radius:0;border-bottom-left-radius:0}.page-pagination .page-item:last-child .page-link{border-top-right-radius:0;border-bottom-right-radius:0}.video-card .card-img-overlay{margin-bottom:40px}.zoom-overlay{overflow:hidden;background:0 0;opacity:0;transition:opacity 0.35s,-webkit-transform .35s;transition:opacity 0.35s,transform .35s}.image a:hover .zoom-overlay{opacity:.8}.magnifying-glass-icon{color:#fff;text-align:center;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border-radius:50%;padding:20px;border:1px solid #fff;line-height:1;background:rgba(0,0,0,0.5);width:60px;height:60px}.zoom-overlay .description .magnifying-glass-icon{top:50%}.card-img-overlay .card-body{padding:0}.navbar-brand img.d-inline-block{margin-right:.25rem}.media figure.image{position:relative;margin-bottom:0}.media .magnifying-glass-icon{top:50%}.w-33{width:33%!important}.w-66{width:66%!important}.fixedPosition{position:fixed;top:50%;margin:0!important;z-index:999}.fixedPosition-right{right:0}.fixedPosition-left{left:0}.rotate-plus{-moz-transform:rotate(90deg)!important;-ms-transform:rotate(90deg)!important;-o-transform:rotate(90deg)!important;-webkit-transform:rotate(90deg)!important;transform:rotate(90deg)!important;margin:0!important}.rotate-minus{-moz-transform:rotate(-90deg)!important;-ms-transform:rotate(-90deg)!important;-o-transform:rotate(-90deg)!important;-webkit-transform:rotate(-90deg)!important;transform:rotate(-90deg)!important;margin:0!important}.media-body p{margin-bottom:0}p .svg-inline--fa{margin-left:.1rem}@media (min-width: 576px){html{font-size:16px}.sm-twoColumns{min-width:26rem!important}.content-consent{min-height:300px}}@media (min-width: 768px){.md-twoColumns{min-width:26rem!important}.content-consent{min-height:300px}}@media (min-width: 992px){.lg-twoColumns{min-width:26rem!important}.content-consent{min-height:400px}}@media (min-width: 1200px){.xl-twoColumns{min-width:26rem!important}.content-consent{min-height:500px}}@media (max-width: 1199px){.navbar-expand-xl{max-height:100%!important}}@media (max-width: 991px){.navbar-expand-lg{max-height:100%!important}}@media (max-width: 767px){.navbar-expand-md{max-height:100%!important}.gallery .w-25,.gallery.w-25{width:100%!important}.gallery .w-50,.gallery.w-50{width:100%!important}.gallery .w-33,.gallery.w-33{width:100%!important}.gallery .w-66,.gallery.w-66{width:100%!important}.gallery .w-75,.gallery.w-75{width:100%!important}.align .w-25,.beside .w-25{width:100%!important}.align .w-50,.beside .w-50{width:100%!important}.align .w-33,.beside .w-33{width:100%!important}.align .w-66,.beside .w-66{width:100%!important}.align .w-75,.beside .w-75{width:100%!important}}@media (max-width: 575px){.navbar-expand-sm{max-height:100%!important}.gallery{text-align:center}.card .img-overlay{color:#fff;text-shadow:6px 0 6px #666}.card .img-overlay .card-body{padding:0}}.card-flipper .image-flip.hover .backside,.card-flipper .image-flip:active .backside,.card-flipper .image-flip:hover .backside{-webkit-transform:rotateY(0);-moz-transform:rotateY(0);-o-transform:rotateY(0);-ms-transform:rotateY(0);transform:rotateY(0);border-radius:.25rem}.card-flipper .image-flip.hover .frontside,.card-flipper .image-flip:active .frontside,.card-flipper .image-flip:hover .frontside{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.card-flipper .mainflip{-webkit-transition:1s;-webkit-transform-style:preserve-3d;-ms-transition:1s;-moz-transition:1s;-moz-transform:perspective(1000px);-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d;position:relative}.card-flipper .frontside{position:relative;-webkit-transform:rotateY(0);-ms-transform:rotateY(0);z-index:2;margin-bottom:30px}.card-flipper .backside{position:absolute;top:0;left:0;background:#fff;-webkit-transform:rotateY(-180deg);-moz-transform:rotateY(-180deg);-o-transform:rotateY(-180deg);-ms-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-box-shadow:5px 7px 9px -4px #9e9e9e;-moz-box-shadow:5px 7px 9px -4px #9e9e9e;box-shadow:5px 7px 9px -4px #9e9e9e}.card-flipper .backside,.card-flipper .frontside{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:1s;-webkit-transform-style:preserve-3d;-moz-transition:1s;-moz-transform-style:preserve-3d;-o-transition:1s;-o-transform-style:preserve-3d;-ms-transition:1s;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d}.card-flipper .backside .card,.card-flipper .frontside .card{min-height:312px}.card-flipper .fa-plus-square{color:var(--bs-primary)}#sectionmenu.section-menu.nav-fill.variant{background-color:#fff}#sectionmenu.section-menu.nav-fill.variant .nav-item{display:inline-block;position:relative;height:58px;border-right:2px solid var(--bs-light);border-top:2px solid var(--bs-light);border-bottom:2px solid var(--bs-light);text-align:center;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;color:#333;cursor:pointer;white-space:normal}#sectionmenu.section-menu.nav-fill.variant .nav-item:last-child{border-left:2px solid var(--bs-light)}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger{line-height:2.6}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active::before{border-left:13px solid transparent;border-right:13px solid transparent;border-top:12px solid var(--bs-primary);position:absolute;top:58px;left:calc(50% - 6px);content:"";display:inline;z-index:2000}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger:hover{color:var(--bs-primary);text-shadow:0 0 5px rgba(169,169,169,0.3)}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active,#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active:hover{background-color:var(--bs-primary);border-bottom:1px solid var(--bs-primary);color:#fff;margin-top:0;height:58px;border-top:none}#sectionmenu.section-menu .nav-item.nav-link.active,#sectionmenu .nav-link.active{color:var(--bs-danger)}#sectionmenu.section-menu.nav-pills .nav-item.nav-link.active{color:#fff}.bg-raster{position:relative}.bg-raster:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:url(/typo3conf/ext/t3sbootstrap/Resources/Public/Images/raster.png) repeat}#background-carousel{width:100%;height:100%;z-index:-1}#background-carousel .carousel,#background-carousel .carousel-inner{width:100%;height:100%;z-index:0;overflow:hidden}#background-carousel .carousel-item{width:100%;height:100%;background-position:center center;background-size:cover;z-index:0}#background-carousel #content-wrapper{position:absolute;z-index:1!important;min-width:100%;min-height:100%}#background-carousel .carousel-control-next,#background-carousel .carousel-control-prev{z-index:2}.carousel-control-next,.carousel-control-prev{z-index:10}.news .page-navigation:last-child{margin-top:1.5rem}.card-img-overlay .card-text p:last-child{margin-bottom:0}@media (min-width: 576px){.card-columns{column-count:2}.image-flip .backside,.image-flip .card,.image-flip .frontside,.image-flip .mainflip{height:100%}}@media (min-width: 768px){.card-columns{column-count:3}}@media (min-width: 992px){.card-columns{column-count:4}}@media (min-width: 1200px){.card-columns{column-count:4}}.news .card{box-shadow:0 0 0 transparent,0 1px 2px transparent;transition:all .3s cubic-bezier(0.25,0.8,0.25,1)}.news .card:active,.news .card:hover{box-shadow:0 4px 8px rgba(0,0,0,0.25),0 2px 2px rgba(0,0,0,0.22);z-index:101}.news .list-group-item .d-sm-block p{margin-bottom:0}#news-preloader{position:relative;top:0;left:0;right:0;bottom:0;background-color:transparent;z-index:99999}#news-preloader-bottom{position:relative;top:-75px;left:0;right:0;bottom:0;background-color:transparent;z-index:99999}#news-spinner{position:absolute;right:0;top:-.5rem}.news .list-group-item .card-text p{margin-bottom:0}.news .list-group-item .media figure{margin-bottom:0}.news-single figure.image .zoom-overlay{left:1rem}.cardflipper .mainflip{-webkit-transition:1s;-webkit-transform-style:preserve-3d;-ms-transition:1s;-moz-transition:1s;-moz-transform:perspective(1000px);-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d;position:relative}.cardflipper .frontside{position:relative;-webkit-transform:rotateY(0);-ms-transform:rotateY(0);z-index:2;margin-bottom:30px}.cardflipper .backside{position:absolute;top:0;left:0;background:#fff;-webkit-transform:rotateY(-180deg);-moz-transform:rotateY(-180deg);-o-transform:rotateY(-180deg);-ms-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-box-shadow:5px 7px 9px -4px #9e9e9e;-moz-box-shadow:5px 7px 9px -4px #9e9e9e;box-shadow:5px 7px 9px -4px #9e9e9e}.cardflipper .backside,.cardflipper .frontside{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:1s;-webkit-transform-style:preserve-3d;-moz-transition:1s;-moz-transform-style:preserve-3d;-o-transition:1s;-o-transform-style:preserve-3d;-ms-transition:1s;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d}.cardflipper .fa-plus-square{color:var(--bs-primary)}.cardflipper .fa-minus-square{color:var(--bs-primary)}.cardflipper .fa-minus-square:hover,.cardflipper .fa-plus-square:hover{cursor:pointer}.card-flipper .card-footer,.cardflipper .card-footer{padding:.75rem 1.25rem;background-color:transparent;border-top:none}.card-flipper .backside,.card-flipper .backside .card,.cardflipper .backside,.cardflipper .backside .card{height:100%}.card-footer{text-align:center}.image .toast{position: relative}.img-copyright{justify-content: flex-end !important;position:relative;margin-top:-31px;margin-right:.5rem;display:flex;margin-left:auto;z-index:1000;width: 30px;}.img-copyright:hover{cursor:help}.img-copyright-default{justify-content: flex-end !important;position:relative;margin-top:-24px;margin-right:.5rem;display:flex;margin-left:auto}span.copyright{margin-right:.5rem}.zoom-right{display:flex;margin-left:auto}.zoom-center{display:flex}.card .image-caption.text-right{margin-right:.5rem;margin-right:.5rem}figure .toast{margin-bottom:0!important;z-index:1}.imageorient-1 figure.image .zoom-overlay,.imageorient-9 figure.image .zoom-overlay{right:.5rem}.offcanvas{box-shadow:none}.offcanvas-header{box-shadow:0 .5rem 1rem #000 0 -1px 0 #000;padding-bottom:.75rem!important}.slideIn{-webkit-animation-name:slideIn;animation-name:slideIn}body.lg .dd-animate-1, body.md .dd-animate-1, body.xl .dd-animate-1{display:block;visibility:hidden;opacity:0;transform:translateY(50px);transition:.5s ease all }body.lg .dd-animate-1.show, body.md .dd-animate-1.show, body.xl .dd-animate-1.show{display:block;visibility:visible;opacity:1;transform:translateY(0);transition:.5s ease all }body.lg .dropdown-menu-end.dd-animate-1, body.md .dropdown-menu-end.dd-animate-1, body.xl .dropdown-menu-end.dd-animate-1{right: 0;left: auto;}body.lg .dd-animate-2, body.lg .dd-animate-2 .dropdown-submenu .dropdown-menu, body.md .dd-animate-2, body.md .dd-animate-2 .dropdown-submenu .dropdown-menu, body.xl .dd-animate-2, body.xl .dd-animate-2 .dropdown-submenu .dropdown-menu{animation-name:example;animation-duration:1s }@keyframes example{from{opacity:.2}to{opacity:1}}.bs-callout{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px}.bs-callout h4{margin-top:0;margin-bottom:5px}.bs-callout p,.bs-callout ul:last-child{margin-bottom:0}.bs-callout code{border-radius:3px}.bs-callout + .bs-callout{margin-top:-5px}.bs-callout-default{border-left-color:var(--bs-secondary)}.bs-callout-default h4{color:var(--bs-secondary)}.bs-callout-primary{border-left-color:var(--bs-primary)}.bs-callout-primary h4{color:var(--bs-primary)}.bs-callout-success{border-left-color:var(--bs-success)}.bs-callout-success h4{color:var(--bs-success)}.bs-callout-danger{border-left-color:var(--bs-danger)}.bs-callout-danger h4{color:var(--bs-danger)}.bs-callout-warning{border-left-color:var(--bs-warning)}.bs-callout-warning h4{color:var(--bs-warning)}.bs-callout-info{border-left-color:var(--bs-info)}.bs-callout-info h4{color:var(--bs-info)}.img-hover-zoom img{transition:transform .8s ease!important}.img-hover-zoom:hover img{transform:scale(1.5)}.img-hover-zoom--zoom-n-rotate img{transition:transform .5s ease-in-out!important}.img-hover-zoom--zoom-n-rotate:hover img{transform:scale(2) rotate(25deg)}.img-hover-zoom--slowmo img{transform-origin:50% 65%;transition:transform 5s,filter 3s ease-in-out!important;filter:brightness(150%)}.img-hover-zoom--slowmo:hover img{filter:brightness(100%);transform:scale(2)}.img-hover-zoom--brightness img{transition:transform 2s,filter 1.5s ease-in-out!important;transform-origin:center center;filter:brightness(50%)}.img-hover-zoom--brightness:hover img{filter:brightness(100%);transform:scale(1.3)}.img-hover-zoom--blur img{transition:transform 1s,filter 2s ease-in-out!important;filter:blur(2px);transform:scale(1.2)}.img-hover-zoom--blur:hover img{filter:blur(0);transform:scale(1)}.img-hover-zoom--colorize img{transition:transform 0.5s,filter 1.5s ease-in-out!important;filter:grayscale(100%)}.img-hover-zoom--colorize:hover img{filter:grayscale(0);transform:scale(1.1)}.nav-icon{margin:-1.5px;width:35px;border:none;background-color:transparent}.nav-icon div,.nav-icon:after,.nav-icon:before{background-color:#fff;border-radius:3px;content:"";display:block;height:5px;margin:7px 0;transition:all .2s ease-in-out}.nav-icon:not(.collapsed):before{transform:translateY(12px) rotate(135deg)}.nav-icon:not(.collapsed):after{transform:translateY(-12px) rotate(-135deg)}.nav-icon:not(.collapsed) div{transform:scale(0)}.nav-icon:active,.nav-icon:focus{outline:0;box-shadow:none}.media{display:flex!important}.media figure.image{flex-shrink:0!important}.media .media-body{flex-grow:1!important}.card figcaption{padding-right:.5rem;padding-left:.5rem}.back-to-top.st-none{transform:scale(0);transition:transform .4s cubic-bezier(0.5,0,0.3,1)}.back-to-top.st-block{transform:scale(1);transition:transform .4s cubic-bezier(0.5,0,0.3,1)}.image .toast,picture{overflow:hidden}#main-navbar{-moz-transition:all 1s ease-in;-webkit-transition:all 1s ease-in;-o-transition:all 1s ease-in;transition:all 1s ease-in}#main-navbar.shrink.bg-primary{-webkit-animation:fadein 2s;-moz-animation:fadein 2s;-ms-animation:fadein 2s;-o-animation:fadein 2s;animation:fadein 2s}@keyframes fadein{from{opacity:0}to{opacity:1}}@-moz-keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@-ms-keyframes fadein{from{opacity:0}to{opacity:1}}@-o-keyframes fadein{from{opacity:0}to{opacity:1}}.sticky{position:fixed!important;top:0;left:0;width:100%}.text-shadow{text-shadow:1px 1px 2px #000,0 0 25px #000,0 0 5px #000}.accordion-img::after{margin-right:1rem}@media (max-width: 575px){.col-image .background-image{min-height:250px}}@media (max-width: 991px){.col-image .background-image{min-height:350px}}.local-video{overflow:hidden}.local-video .card-img-overlay{max-width:1320px;width:100%;padding-right:15px;padding-left:15px;margin:0 auto}.local-video figure.video video{width:100%;height:100%;position:absolute;top:0;left:0}@media (max-width: 991.98px){.local-video figure.video{min-height:200px}.local-video .card-img-overlay{min-height:190px}}.video-container iframe{position:absolute;top:50%;left:50%;width:100vw;height:100vh;transform:translate(-50%,-50%)}#text{position:absolute;color:#fff;left:50%;top:50%;transform:translate(-50%,-50%)}@media (min-aspect-ratio: 16/9){.video-container iframe{height:56.25vw}}@media (max-aspect-ratio: 16/9){.video-container iframe{width:177.78vh}}.toast-container.top-70{top:70px!important}.card-body .btn-block,.card-footer .btn-block{width:100%}.toast-container{z-index:11}.carousel-item figure > a::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.card-body .card-text p:last-child{margin-bottom:0!important}.card .row .card-body{padding:.5rem 1rem .275rem}.btn-slide-in a,.btn-slide-in a:hover{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btnGroupSlider .btn-slide-out{right:auto;transition:right .3s ease-in-out}.btnGroupSlider .btn-slide-in{right:auto;transition:right .3s ease-in-out}.vimeo-wrapper .vimeo-btn:hover{filter:drop-shadow(0 0 0.75rem black)!important}.submenu.style-one .dd-item::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent;float:right;margin-top:.7rem}.submenu.style-one .dd-item[aria-expanded="true"]::after{transform:rotate(180deg)}.submenu.style-one .dropdown-toggle::before,.submenu .dd-item::after{transition:.7s}.submenu.style-one .nav-link:not(.active):hover{background-color:var(--bs-gray-100)}.submenu.style-one .nav-item.active .dd-item::after{transform:rotate(180deg)}.submenu .dd-link::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent;float:right;margin-top:.7rem}.submenu .dd-link[aria-expanded="true"]::after{transform:rotate(180deg)}.flip-card{background-color:transparent;height:100%;perspective:1000px}.flip-card-inner{position:relative;width:100%;height:100%;text-align:center;transition:transform .6s;transform-style:preserve-3d}.flip-card-front,.flip-card-back{position:absolute;width:100%;height:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden}.ratio{position:relative;width:100%}.navbar-nav .nav-link.parent-active {color: var(--bs-navbar-active-color)}.custom-popover {--bs-popover-max-width: 280px;--bs-popover-border-color: var(--bs-primary);--bs-popover-header-bg: var(--bs-primary);--bs-popover-header-color: var(--bs-white);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: .5rem;}.px-2-5 {padding-right: 0.75rem !important;padding-left: 0.75rem !important;}.offcanvas-body .dm-toggler {width: 100%;}.card.card-effect-one.secondary::before{background:var(--bs-secondary)}.card.card-effect-one.success::before{background:var(--bs-success)}.card.card-effect-one.info::before{background:var(--bs-info)}.card.card-effect-one.warning::before{background:var(--bs-warning)}.card.card-effect-one.danger::before{background:var(--bs-danger)}.card.card-effect-one.light::before{background:var(--bs-light)}.card.card-effect-one.dark::before{background:var(--bs-dark)}.card.card-effect-one.white::before{background:var(--bs-white)}figure.image a {position: relative;height: 100%;display: block}.card-img-overlay{margin: 0 auto}.text-tiny{font-size:.7em}.text-small{font-size:.85em}.text-big{font-size:1.4em;font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){.text-big{font-size:1.75rem}}.text-huge{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){.text-huge{font-size:2.5rem}}.custom-block-indent-a{margin-left:12.5%}.custom-block-indent-b{margin-left:25%}.custom-block-indent-c{margin-left:50%} diff --git a/composer.json b/composer.json index 4f70fdcc..456d3fb5 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,7 @@ "type": "typo3-cms-extension", "require": { "php": "^8.1 || ^8.2", - "typo3/cms-core": "^12.4", + "typo3/cms-core": ">=12.4.12 <12.4.99", "b13/container": "^2", "ichhabrecht/content-defender": "^3" }, diff --git a/ext_conf_template.txt b/ext_conf_template.txt index 11561af1..376ce919 100644 --- a/ext_conf_template.txt +++ b/ext_conf_template.txt @@ -8,7 +8,7 @@ previewCropMaxCharacters = 80 previewClosedCollapsible = 0 # cat=content/enable/10; type=boolean; label=Spacing: Shows select-fields for padding and margin in any content element if enabled. You can set those classes also in the input-field "Extra Class" (clear cache) -spacing = 1 +spacing = 0 # cat=content/enable/20; type=boolean; label=Container: Shows a select-field for a .container or .container-fluid class in any content element if enabled (clear cache) container = 1 # cat=content/enable/30; type=boolean; label=Color: Shows palette "Bootstrap Color" in almost any content element if enabled. You can set those classes also in the input-field "Extra Class" (clear cache) diff --git a/ext_emconf.php b/ext_emconf.php index 56f48426..1927df16 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -14,7 +14,7 @@ 'title' => 'Bootstrap Components', 'description' => 'Startup extension to use bootstrap 5 classes, components and more out of the box. Example and info: www.t3sbootstrap.de', 'category' => 'templates', - 'version' => '5.3.7', + 'version' => '5.3.8', 'state' => 'stable', 'author' => 'Helmut Hackbarth', 'author_email' => 'typo3@t3solution.de', @@ -24,7 +24,7 @@ 'depends' => [ 'php' => '8.1.0-8.2.99', - 'typo3' => '12.4.7-12.4.99', + 'typo3' => '12.4.12-12.4.99', 'container' => '2.3.5-2.99.99', 'content_defender' => '3.4.1-3.99.99' ], diff --git a/ext_localconf.php b/ext_localconf.php index 317880f5..0ddfaa69 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -104,8 +104,9 @@ $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$extPath . 'locallang_db.xlf'][] = Environment::getPublicPath() . $ctPath . 'locallang_db.xlf'; $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$extPath . 'locallang_be.xlf'][] = Environment::getPublicPath() . $ctPath . 'locallang_be.xlf'; } - // CKEditor & if rte_ckeditor_fontawesome is loaded + // CKEditor if (ExtensionManagementUtility::isLoaded('rte_ckeditor_fontawesome')) { + // ... if rte_ckeditor_fontawesome is loaded if (array_key_exists('fontawesomeCss', $extconf) && $extconf['fontawesomeCss'] === '1') { // FA6 KIT $GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['t3sbootstrap'] = 'EXT:t3sbootstrap/Configuration/RTE/Fa6.yaml'; @@ -125,7 +126,7 @@ $GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['t3sbootstrap'] = 'EXT:t3sbootstrap/Configuration/RTE/Default.yaml'; } // Optional sitepackage - if (array_key_exists('sitepackage', $extconf) && !empty($extconf['sitepackage'])) { + if (ExtensionManagementUtility::isLoaded('t3sb_package') && array_key_exists('sitepackage', $extconf) && !empty($extconf['sitepackage'])) { ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.sitepackage = 1'); ExtensionManagementUtility::addTypoScriptConstants('@import \'EXT:t3sb_package/T3SB/Configuration/TypoScript/t3sbconstants.typoscript\''); ExtensionManagementUtility::addTypoScriptSetup('@import \'EXT:t3sb_package/T3SB/Configuration/TypoScript/t3sbsetup.typoscript\'');