Mydealz Navigation

Eingefärbtes Navigationmenü mit Links zu Feedback, Sammlung und Bookmarklets

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Mydealz Navigation
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Eingefärbtes Navigationmenü mit Links zu Feedback, Sammlung und Bookmarklets
// @author       MD928835
// @license      MIT
// @match        https://www.mydealz.de/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // --- Konfiguration ---
    const customCSS = `
    .nav, .subNav--light { background-color: #009900 !important; transition: none !important; display: flex; align-items: center; }
    .nav a, .nav span, .nav button, .subNav--light a, .subNav--light span, .subNav--light button { color: white !important; font-weight: bold !important; }
    .nav svg, .subNav--light svg { color: white !important; fill: white !important; }
    .input-widget .search-icon { color: #009900 !important; fill: #009900 !important; }
    .input--search { background-color: white !important; color: #333 !important; }
    .nav-button.button--type-secondary, .nav button, .subNav--light button, .button--type-tag, .button--mode-flat { background-color: transparent !important; border-color: transparent !important; }
    .nav button:hover, .subNav--light button:hover, .button--type-tag:hover, .button--mode-flat:hover, .nav a:hover, .nav span:hover, .nav button:hover, .subNav--light a:hover, .subNav--light span:hover, .subNav--light button:hover { background-color: transparent !important; }
    [data-t="dealAlarms"]:hover, a[href*="deal-alarm"]:hover { background-color: transparent !important; }
    .nav-logo > span { display: none !important; }
    .nav-logo { background-image: url("https://www.mydealz.de/assets/img/logo/default-light_d4b86.svg") !important; background-repeat: no-repeat !important; background-position: center !important; background-size: contain !important; width: 195px !important; height: 60px !important; pointer-events: auto !important; cursor: pointer; flex-shrink: 0; }
    .nav-hideSearch .button--mode-brand { background-color: white !important; color: #005B94 !important; }
    .nav-hideSearch .button--mode-brand svg, .nav-hideSearch .button--mode-brand span { color: #005B94 !important; fill: #005B94 !important; }
    .threadItemCard-img .scrollBox-container:not(.carousel--isNext) { display: none !important; }

    /* --- LAYOUT FÜR NAVIGATION --- */
     header .subNav--light { height: auto !important; min-height: 40px !important; position: relative; }
    header .subNav--light .scrollBox { position: relative; }
    /* -------------------------------------------- */
    header .subNav--light .scrollBox-container {
        display: flex !important;
        flex-wrap: nowrap !important;
        align-items: stretch !important;
        justify-content: flex-start !important;
        width: 100%;
        overflow-x: auto !important;
        padding: 0 5px !important;
        margin: 0 !important;
        box-sizing: border-box;
        background-color: #009900 !important;

        /* --- Scrollbar verstecken --- */
        scrollbar-width: none; /* Firefox */
        -ms-overflow-style: none;  /* Internet Explorer 10+ */
        /* --------------------------------- */
    }
    /* --- NEU: Scrollbar verstecken (WebKit) --- */
    header .subNav--light .scrollBox-container::-webkit-scrollbar {
        display: none; /* Safari and Chrome */
        width: 0;
        height: 0;
    }
    /* --------------------------------------- */

    header .subNav--light .scrollBox-item { flex-shrink: 0 !important; margin: 0 !important; padding: 0 !important; display: flex; align-items: center; }
    header .subNav--light .scrollBox-item .nav-link { display: flex !important; align-items: center !important; height: 100%; padding: 0 10px !important; white-space: nowrap !important; text-decoration: none !important; color: white !important; font-weight: bold !important; box-sizing: border-box; line-height: 1; cursor: pointer; }
    header .subNav--light .scrollBox-item .nav-link svg.icon { width: 18px; height: 18px; margin-right: 6px; flex-shrink: 0; }
    header .subNav--light .scrollBox-item:hover { background-color: transparent !important; }
    header .subNav--light .scrollBox-item .nav-link:hover { background-color: transparent !important; }
    header .subNav--light::before,
    header .subNav--light::after,
    header .subNav--light .scrollBox::before,
    header .subNav--light .scrollBox::after {
        display: none !important;
        background: none !important;
        content: none !important;
        width: 0 !important;
        z-index: -1 !important;
        pointer-events: none !important;
    }
    /* ----------------------------------------------------------------------- */


    /* --- Dropdown Menü Styles --- */
    .mydealz-dropdown-attached, .mdplus-dropdown-attached {
        position: fixed; z-index: 99999 !important; background-color: white; border-radius: 4px;
        box-shadow: 0 3px 10px rgba(0,0,0,0.2);
        padding: 8px 0; margin-top: 2px;
        min-width: 220px;
        opacity: 0;
        visibility: hidden;
        transform: translateY(-5px);
        transition: opacity 0.15s ease-in-out, transform 0.15s ease-in-out, visibility 0s linear 0.15s;
     }
    /* Sichtbarer Zustand */
    .dropdown-visible {
        opacity: 1;
        visibility: visible;
        transform: translateY(0);
        transition: opacity 0.15s ease-in-out, transform 0.15s ease-in-out, visibility 0s linear 0s;
    }
    .mydealz-dropdown-attached { width: 220px; }
    .mdplus-dropdown-attached { width: 240px; }
    .mydealz-dropdown-item, .mdplus-dropdown-item { display: block; padding: 10px 16px; color: #333 !important; text-decoration: none; white-space: nowrap; font-weight: normal !important; background-color: transparent; transition: background-color 0.1s ease; /* Hover-Transition */ }
    .mydealz-dropdown-item:hover, .mdplus-dropdown-item:hover { background-color: #f0f0f0 !important; color: #333 !important; }
    .mdplus-dropdown-item { cursor: pointer; }
    .mdplus-divider { height: 1px; margin: 8px 0; background-color: #e5e5e5; }
    .mdplus-add-item {
        color: #333 !important;
        font-weight: bold !important;
    }
    /* ----------------------------------------------------------------- */

    /* --- Mobile Ansicht (Nur Icons) --- */
    @media (max-width: 767px) {
        header .subNav--light .scrollBox-item .nav-link span {
            display: none;
        }
        header .subNav--light .scrollBox-item .nav-link svg.icon {
            margin-right: 0;
        }
         header .subNav--light .scrollBox-item .nav-link {
             padding: 0 12px !important;
         }
    }

    /* --- Modal Styles --- */
     .mdplus-modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); display: flex; justify-content: center; align-items: center; z-index: 10001; }
    .mdplus-modal-content { background-color: white; border-radius: 8px; padding: 24px; width: 500px; max-width: 90%; }
    .mdplus-modal-title { font-size: 18px; font-weight: bold; margin-bottom: 16px; color: #333; }
    .mdplus-form-group { margin-bottom: 16px; }
    .mdplus-form-label { display: block; margin-bottom: 8px; font-weight: bold; color: #555;}
    .mdplus-form-input, .mdplus-form-textarea { width: 100%; padding: 10px 12px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; font-size: 14px; color: #333; }
    .mdplus-form-textarea { min-height: 100px; font-family: monospace; resize: vertical; }
    .mdplus-form-error { color: red; font-size: 12px; margin-top: 4px; display: none; }
    .mdplus-modal-actions { display: flex; justify-content: flex-end; margin-top: 24px; }
    .mdplus-btn { padding: 10px 18px; border-radius: 4px; cursor: pointer; border: none; margin-left: 8px; font-weight: bold; font-size: 14px; transition: background-color 0.2s ease; }
    .mdplus-btn-cancel { background-color: #f0f0f0; color: #555; }
    .mdplus-btn-cancel:hover { background-color: #e0e0e0; }
    .mdplus-btn-save { background-color: #009900; color: white; }
    .mdplus-btn-save:hover { background-color: #007700; }
    `;

    // --- Daten ---
    const categoryTree = [ { name: "Auto & Motorrad", url: "/gruppe/auto-motorrad" }, { name: "Beauty & Gesundheit", url: "/gruppe/beauty" }, { name: "Dienstleistungen & Verträge", url: "/gruppe/dienstleistungen-vertraege" }, { name: "Elektronik", url: "/gruppe/elektronik" }, { name: "Family & Kids", url: "/gruppe/family-kids" }, { name: "Fashion & Accessoires", url: "/gruppe/fashion-accessoires" }, { name: "Gaming", url: "/gruppe/gaming" }, { name: "Garten & Baumarkt", url: "/gruppe/garten-baumarkt" }, { name: "Home & Living", url: "/gruppe/home-living" }, { name: "Kultur & Freizeit", url: "/gruppe/kultur-freizeit" }, { name: "Lebensmittel & Haushalt", url: "/gruppe/food" }, { name: "Sport & Outdoor", url: "/gruppe/sport" }, { name: "Telefon- & Internet-Verträge", url: "/gruppe/telefon-internet" }, { name: "Urlaub & Reisen", url: "/gruppe/reisen" }, { name: "Versicherung & Finanzen", url: "/gruppe/vertraege-finanzen" } ];
    const vouchers = [ { name: "Adidas", url: "/gutscheine/adidas-de" }, { name: "Amazon", url: "/gutscheine/amazon-de" }, { name: "IKEA", url: "/gutscheine/ikea-com" }, { name: "Lidl", url: "/gutscheine/lidl-de" }, { name: "Media Markt", url: "/gutscheine/mediamarkt-de" }, { name: "OTTO", url: "/gutscheine/otto-de" }, { name: "Saturn", url: "/gutscheine/saturn-de" }, { name: "Zalando", url: "/gutscheine/zalando-de" }, { name: "alle anzeigen ", url: "/gutscheine/" } ];

    // --- MD+ Funktionen ---
    function loadBookmarklets() { try { const bm = localStorage.getItem('mdplus_bookmarklets'); return bm ? JSON.parse(bm) : []; } catch (e) { console.error("[NavScript] Error loading bookmarklets:", e); return []; } }
    function saveBookmarklets(bms) { try { localStorage.setItem('mdplus_bookmarklets', JSON.stringify(bms)); } catch (e) { console.error("[NavScript] Error saving bookmarklets:", e); } }
    function addBookmarklet(title, code) { const bms = loadBookmarklets(); const idx = bms.findIndex(b => b.title === title); if (idx > -1) bms[idx] = {title, code}; else bms.push({title, code}); bms.sort((a, b) => a.title.localeCompare(b.title)); saveBookmarklets(bms); return bms; }
    function executeBookmarklet(code) { console.log("[NavScript] Attempting bookmarklet execution via script tag:", code.substring(0,100)+"..."); let finalCode = code; try { let cleanCode = code.trim().startsWith('javascript:') ? code.trim().substring(11) : code.trim(); try { const decoded = decodeURIComponent(cleanCode); cleanCode = decoded; } catch (e) { console.warn("[NavScript] Failed to decode bookmarklet code:", e); } finalCode = cleanCode; if (finalCode.startsWith('(function(){') && finalCode.endsWith('})()')) { finalCode = finalCode.substring('(function(){'.length, finalCode.length - '})()'.length); } if (finalCode.endsWith(';')) { finalCode = finalCode.slice(0, -1); } const script = document.createElement('script'); script.textContent = finalCode; document.head.appendChild(script); document.head.removeChild(script); } catch (error) { console.error('[NavScript] Bookmarklet execution error (script tag setup):', error); alert(`Bookmarklet Error (script tag setup):\n\n${error.name}: ${error.message}`); } }
    function createAddBookmarkletModal() { if (document.querySelector('.mdplus-modal')) return; const modal = document.createElement('div'); modal.className = 'mdplus-modal'; modal.innerHTML = `<div class="mdplus-modal-content"><div class="mdplus-modal-title">Bookmarklet hinzufügen</div><div class="mdplus-form-group"><label class="mdplus-form-label" for="bookmarklet-title">Titel</label><input type="text" id="bookmarklet-title" class="mdplus-form-input" placeholder="Name des Bookmarklets"></div><div class="mdplus-form-group"><label class="mdplus-form-label" for="bookmarklet-code">JavaScript-Code</label><textarea id="bookmarklet-code" class="mdplus-form-textarea" placeholder="javascript:... oder reiner JS-Code"></textarea><div id="bookmarklet-code-error" class="mdplus-form-error">Gültiger JavaScript-Code erforderlich.</div></div><div class="mdplus-modal-actions"><button class="mdplus-btn mdplus-btn-cancel">Abbrechen</button><button class="mdplus-btn mdplus-btn-save">Speichern</button></div></div>`; const titleInput = modal.querySelector('#bookmarklet-title'); const codeInput = modal.querySelector('#bookmarklet-code'); const errorElement = modal.querySelector('#bookmarklet-code-error'); modal.addEventListener('click', (e) => { if (e.target === modal) document.body.removeChild(modal); }); modal.querySelector('.mdplus-btn-cancel').addEventListener('click', () => document.body.removeChild(modal)); modal.querySelector('.mdplus-btn-save').addEventListener('click', () => { const title = titleInput.value.trim(); let code = codeInput.value.trim(); errorElement.style.display = 'none'; if (!title) { alert('Titel fehlt.'); titleInput.focus(); return; } if (!code) { alert('Code fehlt.'); codeInput.focus(); return; } if (!code.startsWith('javascript:')) code = 'javascript:' + code; if (code.length < "javascript:;".length && !code.startsWith('javascript:alert')) { errorElement.textContent = "Code zu kurz/ungültig."; errorElement.style.display = 'block'; codeInput.focus(); return; } addBookmarklet(title, code); document.body.removeChild(modal); updateMDPlusDropdown(); }); document.body.appendChild(modal); titleInput.focus(); }
    function updateMDPlusDropdown(dropdownElement) { if (!dropdownElement) { dropdownElement = dropdownCache['mdplus']; if (!dropdownElement) return; } const bms = loadBookmarklets(); dropdownElement.innerHTML = ''; if (bms.length === 0) { dropdownElement.innerHTML = '<div style="padding:10px 16px; color: #888; font-style: italic;">Keine Bookmarklets</div>'; } else { bms.forEach(bm => { const item = document.createElement('div'); item.className = 'mdplus-dropdown-item'; item.textContent = bm.title; item.title = bm.code; item.addEventListener('click', (e) => { e.stopPropagation(); executeBookmarklet(bm.code); hideDropdown(dropdownElement); }); dropdownElement.appendChild(item); }); } const divider = document.createElement('div'); divider.className = 'mdplus-divider'; dropdownElement.appendChild(divider); const addItem = document.createElement('div'); addItem.className = 'mdplus-dropdown-item mdplus-add-item'; addItem.textContent = 'Bookmarklet hinzufügen...'; addItem.addEventListener('click', (e) => { e.stopPropagation(); hideDropdown(dropdownElement); createAddBookmarkletModal(); }); dropdownElement.appendChild(addItem); }

    // --- Hauptlogik ---
    let subNavReplaced = false;
    let dropdownCache = {};
    let currentVisibleDropdown = null;
    let hideTimeout = null;

    // *** createNavItem mit title Attribut ***
    function createNavItem(text, url, iconName) {
        const item = document.createElement('div');
        item.className = 'scrollBox-item';
        const link = document.createElement('a');
        link.className = 'nav-link';
        link.href = url;
        link.innerHTML = `<svg width="18" height="18" class="icon icon--${iconName}"><use xlink:href="/assets/img/ico_f3562.svg#${iconName}"></use></svg><span>${text}</span>`;
        link.title = text; // Tooltip hinzufügen
        item.appendChild(link);
        return item;
    }
    // *** createDropdownItem mit title Attribut für den Hauptlink ***
    function createDropdownItem(text, url, iconName, dropdownKey, dropdownCssClass, items) {
        const item = document.createElement('div');
        item.className = 'scrollBox-item has-dropdown';
        item.dataset.dropdownKey = dropdownKey;
        const link = document.createElement('a');
        link.className = 'nav-link';
        link.href = url;
        link.innerHTML = `<svg width="18" height="18" class="icon icon--${iconName}"><use xlink:href="/assets/img/ico_f3562.svg#${iconName}"></use></svg><span>${text}</span>`;
        link.title = text; // Tooltip hinzufügen
        if (url === '#') link.addEventListener('click', e => e.preventDefault());
        item.appendChild(link);
        const dropdown = document.createElement('div');
        dropdown.className = dropdownCssClass + '-attached';
        dropdown.dataset.dropdownKey = dropdownKey;
        items.forEach(si => {
            const l = document.createElement('a');
            l.className = dropdownCssClass.includes('mydealz') ? 'mydealz-dropdown-item' : 'mdplus-dropdown-item';
            l.href = si.url;
            l.textContent = si.name;
            dropdown.appendChild(l);
        });
        dropdownCache[dropdownKey] = dropdown;
        return item;
    }
     // *** createMdPlusDropdownItem mit title Attribut ***
    function createMdPlusDropdownItem() {
        const dropdownKey = 'mdplus';
        const item = document.createElement('div');
        item.className = 'scrollBox-item has-dropdown nav-item-mdplus';
        item.dataset.dropdownKey = dropdownKey;
        const link = document.createElement('a');
        link.className = 'nav-link';
        link.href = "#";
        const iconName = 'bookmark';
        link.innerHTML = `<svg width="18" height="18" class="icon icon--${iconName}"><use xlink:href="/assets/img/ico_f3562.svg#${iconName}"></use></svg><span>MD+</span>`;
        link.title = "MD+"; // Tooltip hinzufügen
        link.addEventListener('click', (e) => e.preventDefault());
        item.appendChild(link);
        const dropdown = document.createElement('div');
        dropdown.className = 'mdplus-dropdown-attached';
        dropdown.dataset.dropdownKey = dropdownKey;
        dropdown.innerHTML = '<span style="padding:10px 16px; display: block; color: #888;">Lade...</span>';
        dropdownCache[dropdownKey] = dropdown;
        return item;
    }

    function showDropdown(triggerItem) {
        clearTimeout(hideTimeout);
        const key = triggerItem.dataset.dropdownKey;
        const dropdownElement = dropdownCache[key];
        if (!dropdownElement) { console.error(`[NavScript] Dropdown element not found for key: ${key}`); return; }
        if (currentVisibleDropdown && currentVisibleDropdown !== dropdownElement) { hideDropdown(currentVisibleDropdown); }
        const rect = triggerItem.getBoundingClientRect();
        dropdownElement.style.top = `${rect.bottom}px`;
        dropdownElement.style.left = `${rect.left}px`;
         const dropdownRight = rect.left + dropdownElement.offsetWidth;
        if (dropdownRight > window.innerWidth) {
            dropdownElement.style.left = `${window.innerWidth - dropdownElement.offsetWidth - 10}px`; // 10px Puffer
        }

        if (key === 'mdplus') { updateMDPlusDropdown(dropdownElement); }
        if (!dropdownElement.parentNode) { document.body.appendChild(dropdownElement); }
         requestAnimationFrame(() => {
             dropdownElement.classList.add('dropdown-visible');
        });
        currentVisibleDropdown = dropdownElement;
        if (!dropdownElement.hasAttribute('data-listeners-attached')) {
             dropdownElement.addEventListener('mouseenter', () => { clearTimeout(hideTimeout); });
             dropdownElement.addEventListener('mouseleave', () => { startHideTimeout(dropdownElement); });
             dropdownElement.setAttribute('data-listeners-attached', 'true');
        }
    }
    function hideDropdown(dropdownElement) {
        if (dropdownElement) {
            dropdownElement.classList.remove('dropdown-visible');
            if (dropdownElement.parentNode === document.body) {
                 setTimeout(() => {
                     // Nur entfernen, wenn es immer noch versteckt ist und im body hängt
                     if (!dropdownElement.classList.contains('dropdown-visible') && dropdownElement.parentNode === document.body) {
                         const currentCachedElement = dropdownCache[dropdownElement.dataset.dropdownKey];
                         if (currentCachedElement === dropdownElement) {
                            document.body.removeChild(dropdownElement);
                         }
                     }
                 }, 200); // Zeit muss länger sein als die CSS-Transition-Dauer
            }
            if (currentVisibleDropdown === dropdownElement) { currentVisibleDropdown = null; }
        }
    }
    function startHideTimeout(elementToHide = currentVisibleDropdown) {
        clearTimeout(hideTimeout);
        hideTimeout = setTimeout(() => {
            hideDropdown(elementToHide);
        }, 300); // Verzögerung bevor das Dropdown verschwindet
    }

    function replaceSubNav() {
        if (subNavReplaced) return;
        // Suche nach dem potentiellen .scrollBox Wrapper UND dem .scrollBox-container darin
        const scrollBoxWrapper = document.querySelector('header .subNav--light .scrollBox');
        const subNavContainer = document.querySelector('header .subNav--light .scrollBox-container');
        const targetContainer = scrollBoxWrapper ? scrollBoxWrapper : subNavContainer?.parentNode; // Nimm den Wrapper, wenn er existiert, sonst den direkten Parent

        if (!targetContainer || targetContainer.querySelector('.scrollBox-container[data-nav-modified="true"]')) {
            //console.log("[NavScript] Target container not found or already modified.");
            return;
        }

        const originalScrollBoxContainer = targetContainer.querySelector('.scrollBox-container');
        if (!originalScrollBoxContainer) {
             console.log("[NavScript] Original scrollBox-container not found inside target.");
             return;
        }


        console.log("[NavScript] Found target container, replacing content...");
        dropdownCache = {}; // Reset cache bei Neuaufbau
        const newNav = document.createElement('div');
        newNav.className = 'scrollBox-container'; // Behält die Originalklasse für eventuelle Basisstyles bei
        newNav.dataset.navModified = 'true'; // Markierung, dass das Skript aktiv war

        // Menüpunkte
        newNav.appendChild(createDropdownItem("Kategorien", "/gruppe/", "categories", "kategorien", "mydealz-dropdown", categoryTree));
        newNav.appendChild(createDropdownItem("Gutscheine", "/gutscheine/", "voucher", "gutscheine", "mydealz-dropdown", vouchers));
        newNav.appendChild(createNavItem("Deals", "/deals-new", "tag"));
        newNav.appendChild(createNavItem("Freebies", "/gruppe/freebies?temperatureFrom=any", "gift"));
        newNav.appendChild(createNavItem("Diskussionen", "/diskussion", "comments"));
        newNav.appendChild(createNavItem("Feedback", "/feedback", "campaign"));
        newNav.appendChild(createNavItem("Sammlung", "/2035404#comments", "cake"));
        newNav.appendChild(createMdPlusDropdownItem());

        try {
            targetContainer.replaceChild(newNav, originalScrollBoxContainer);
            subNavReplaced = true; // Flag setzen
            console.log("[NavScript] Container content replaced. Attaching listeners...");

             newNav.querySelectorAll('.has-dropdown').forEach(item => {
                const dropdown = dropdownCache[item.dataset.dropdownKey];
                if (!dropdown) {
                    console.warn(`[NavScript] Dropdown element for key ${item.dataset.dropdownKey} not in cache after creation.`);
                    return;
                }
                // Mouseenter auf das Menüitem zeigt das Dropdown
                item.addEventListener('mouseenter', () => {
                    showDropdown(item);
                });
                item.addEventListener('mouseleave', () => {
                    startHideTimeout();
                });
            });
            console.log("[NavScript] Item listeners attached.");

        } catch (error) {
            console.error("[NavScript] Error during replace/listeners:", error);
            subNavReplaced = false; // Reset flag on error
        }
    }

    // --- Initialisierung und Beobachtung ---
    function initializeNavigation() {
        replaceSubNav();
    }

    // CSS nur einmal einfügen
    const styleElement = document.createElement('style');
    styleElement.id = 'mydealz-nav-custom-styles';
    if (!document.getElementById(styleElement.id)) {
        styleElement.textContent = customCSS;
        document.head.appendChild(styleElement);
        console.log("[NavScript] CSS injected.");
    }

    let observer = null;
    const parentSelector = 'header .subNav--light';

    function startObserver() {
        const parentNode = document.querySelector(parentSelector);
        if (parentNode && !observer) {
            observer = new MutationObserver((mutationsList, obs) => {
                const modifiedContainer = parentNode.querySelector('.scrollBox-container[data-nav-modified="true"]');
                if (!modifiedContainer) {
                    //console.log("[NavScript Observer] Modified container disappeared. Resetting flag and attempting re-init...");
                    subNavReplaced = false;
                    initializeNavigation();
                } else {
                   Object.values(dropdownCache).forEach(dropdown => {
                       if (dropdown.classList.contains('dropdown-visible') && !dropdown.parentNode) {
                           console.warn("[NavScript Observer] Visible dropdown detached from body. Re-attaching.");
                           // Finde das zugehörige Trigger-Item neu, um Position zu bestimmen
                           const trigger = parentNode.querySelector(`.has-dropdown[data-dropdown-key="${dropdown.dataset.dropdownKey}"]`);
                           if (trigger) {
                               const rect = trigger.getBoundingClientRect();
                               dropdown.style.top = `${rect.bottom}px`;
                               dropdown.style.left = `${rect.left}px`;
                               document.body.appendChild(dropdown);
                           } else {
                               hideDropdown(dropdown);
                           }
                       }
                   });
                }
            });
            observer.observe(parentNode, { childList: true, subtree: true });
            //console.log("[NavScript] MutationObserver started on:", parentSelector);
        } else if (!parentNode) {
            // Falls der Elterncontainer noch nicht da ist, später erneut versuchen
            //console.log("[NavScript] Parent node for observer not found, retrying...");
            setTimeout(startObserver, 500);
        }
    }

    // Startlogik
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', () => {
            initializeNavigation();
            startObserver();
        });
    } else {
        initializeNavigation();
        startObserver();
    }

    setTimeout(initializeNavigation, 750);
    // Evtl. noch späterer Versuch für hartnäckige Fälle
    setTimeout(initializeNavigation, 2000);


    // Listener um Dropdowns zu schließen, wenn außerhalb geklickt wird
    document.addEventListener('click', function(event) {
      if (currentVisibleDropdown && !currentVisibleDropdown.contains(event.target)) {
        let clickedOnTrigger = false;
        document.querySelectorAll('.has-dropdown').forEach(trigger => {
            if (trigger.contains(event.target)) {
                clickedOnTrigger = true;
            }
        });
        if (!clickedOnTrigger) {
            hideDropdown(currentVisibleDropdown);
        }
      }
    }, true); // Use capture phase


})();