@@ -4995,6 +4995,8 @@ class FastSearchCard extends HTMLElement {
49954995 }
49964996
49974997 showCategoryButtons() {
4998+ this.collapsePanel();
4999+
49985000 if (this.isMobile()) {
49995001 const searchWrapper = this.shadowRoot.querySelector('.search-panel');
50005002 if (searchWrapper) {
@@ -5003,30 +5005,43 @@ class FastSearchCard extends HTMLElement {
50035005 }
50045006
50055007 const categoryButtons = this.shadowRoot.querySelector('.category-buttons');
5006- const searchPanel = this.shadowRoot.querySelector('.search-panel');
50075008
5008- // ✅ Reset + Vorbereitung
5009+ // ✅ Reset
50095010 this.resetAllCategoryStyles();
5011+
50105012 this.isMenuView = true;
50115013 categoryButtons.classList.add('visible');
50125014
5013- // ✅ SYNCHRONISIERT: Panel UND Buttons gleichzeitig animieren
5014-
5015- // 1️⃣ Panel sofort kollabieren (ohne Animation)
5016- this.isPanelExpanded = false;
5017- searchPanel.classList.remove('expanded');
5015+ // ✅ KRITISCHER FIX: Backdrop-Filter sofort aktivieren
5016+ this.forceBackdropFilterActivation(categoryButtons);
50185017
5019- // 2️⃣ Kurze Pause, dann Panel UND Buttons gleichzeitig expandieren/animieren
5018+ // Animation danach
50205019 setTimeout(() => {
5021- // Panel expandieren (für milchigen Background)
5022- this.isPanelExpanded = true;
5023- searchPanel.classList.add('expanded');
5024-
5025- // Buttons animieren - GLEICHZEITIG!
50265020 this.animateRippleEffect(categoryButtons);
50275021 }, 50);
50285022 }
50295023
5024+ forceBackdropFilterActivation(categoryButtons) {
5025+ const buttons = categoryButtons.querySelectorAll('.category-button');
5026+
5027+ buttons.forEach(button => {
5028+ // ✅ Browser zum Neubau des Backdrop-Filters zwingen
5029+ button.style.transform = 'translateZ(0)';
5030+ button.style.willChange = 'transform';
5031+
5032+ // ✅ Kurzer "Flicker" um Backdrop-Filter zu aktivieren
5033+ button.style.opacity = '0.99';
5034+
5035+ // Sofort wieder normal
5036+ setTimeout(() => {
5037+ button.style.opacity = '1';
5038+ }, 1);
5039+ });
5040+
5041+ // ✅ Browser zur Neuberechnung zwingen
5042+ categoryButtons.offsetHeight; // Force reflow
5043+ }
5044+
50305045 resetAllCategoryStyles() {
50315046 const categoryButtons = this.shadowRoot.querySelector('.category-buttons');
50325047 const buttons = categoryButtons?.querySelectorAll('.category-button');
@@ -5102,41 +5117,41 @@ class FastSearchCard extends HTMLElement {
51025117 animateRippleEffect(categoryButtons) {
51035118 const buttons = categoryButtons.querySelectorAll('.category-button');
51045119
5105- // ✅ Container und Buttons sofort sichtbar
5120+ // ✅ Container sichtbar
51065121 categoryButtons.style.opacity = '1';
5107- categoryButtons.style.transform = 'translateX(0) scale(1)';
51085122 categoryButtons.style.display = 'flex';
51095123
5124+ // ✅ Buttons sofort sichtbar mit aktivem Backdrop-Filter
51105125 buttons.forEach(button => {
51115126 button.style.opacity = '1';
51125127 button.style.transform = 'none';
51135128 button.style.filter = 'none';
51145129 });
51155130
5116- // ✅ Schnellere, elegantere Animation
5131+ // ✅ Schnelle Animation
51175132 setTimeout(() => {
51185133 buttons.forEach((button, index) => {
51195134 button.animate([
51205135 {
51215136 opacity: 1,
5122- transform: 'translateY(0) scale(1) rotate(0deg) ',
5137+ transform: 'translateY(0) scale(1)',
51235138 filter: 'blur(0px)'
51245139 },
51255140 {
5126- opacity: 0.8 ,
5127- transform: 'translateY(-5px ) scale(1.1) rotate(2deg )',
5141+ opacity: 0.9 ,
5142+ transform: 'translateY(-3px ) scale(1.05 )',
51285143 filter: 'blur(0px)',
5129- offset: 0.4
5144+ offset: 0.5
51305145 },
51315146 {
51325147 opacity: 1,
5133- transform: 'translateY(0) scale(1) rotate(0deg) ',
5148+ transform: 'translateY(0) scale(1)',
51345149 filter: 'blur(0px)'
51355150 }
51365151 ], {
5137- duration: 300, // ← Schneller!
5152+ duration: 250,
51385153 easing: 'cubic-bezier(0.16, 1, 0.3, 1)',
5139- delay: index * 40, // ← Weniger Delay
5154+ delay: index * 30,
51405155 fill: 'none'
51415156 });
51425157 });
0 commit comments