(function() {
    const antiFlashCSS = document.createElement('style');
    antiFlashCSS.textContent = `
        .bf-loading .megamenu-nimbus {
            opacity: 0 !important;
            visibility: hidden !important;
        }
    `;
    document.head.appendChild(antiFlashCSS);
    document.documentElement.classList.add('bf-loading');
})();

document.addEventListener('DOMContentLoaded', function() {
    const CONFIG = {
        triggerAttribute: 'trigger-nimbus',
        menuClass: 'megamenu-nimbus',
        textColor: '#ffffff'
    };

    const style = document.createElement('style');
    style.textContent = `
        .${CONFIG.menuClass} {
            opacity: 0;
            visibility: hidden;
            pointer-events: none;
            clip-path: inset(0 0 100% 0);
            transform: translateY(-3px);
            position: absolute;
            top: 100%;
            left: 0;
            right: 0;
            z-index: 9999;
            transition: opacity 0.55s cubic-bezier(0.19, 1, 0.22, 1), 
                        clip-path 0.55s cubic-bezier(0.19, 1, 0.22, 1), 
                        transform 0.55s cubic-bezier(0.19, 1, 0.22, 1),
                        visibility 0s linear 0.55s;
            will-change: opacity, clip-path, transform;
        }

        .${CONFIG.menuClass}.active {
            opacity: 1;
            visibility: visible;
            pointer-events: auto;
            clip-path: inset(0 0 0% 0);
            transform: translateY(0);
            transition: opacity 0.55s cubic-bezier(0.19, 1, 0.22, 1), 
                        clip-path 0.55s cubic-bezier(0.19, 1, 0.22, 1), 
                        transform 0.55s cubic-bezier(0.19, 1, 0.22, 1);
        }

        .${CONFIG.menuClass} > * {
            opacity: 0;
            transform: translateY(-6px);
            transition: opacity 0.6s cubic-bezier(0.19, 1, 0.22, 1) 0.12s, 
                        transform 0.6s cubic-bezier(0.19, 1, 0.22, 1) 0.12s;
            will-change: opacity, transform;
        }

        .${CONFIG.menuClass}.active > * {
            opacity: 1;
            transform: translateY(0);
        }

        [${CONFIG.triggerAttribute}] {
            transition: background-color 0.25s cubic-bezier(0.23, 1, 0.32, 1), 
                        box-shadow 0.25s cubic-bezier(0.23, 1, 0.32, 1),
                        border-radius 0.25s cubic-bezier(0.23, 1, 0.32, 1);
            position: relative;
            z-index: 1;
            cursor: pointer;
            will-change: background-color, box-shadow, border-radius;
        }

        [${CONFIG.triggerAttribute}].active-trigger {
            background-color: rgba(99, 102, 241, 0.2);
            border-radius: 6px;
            padding: 6px 10px;
            margin: -6px -10px;
            z-index: 1000;
        }

        [${CONFIG.triggerAttribute}].active-trigger,
        [${CONFIG.triggerAttribute}].active-trigger * {
            color: ${CONFIG.textColor} !important;
        }

        .${CONFIG.menuClass}.instant-close,
        .${CONFIG.menuClass}.instant-close > * {
            transition: none !important;
        }
    `;
    document.head.appendChild(style);

    const menuTriggers = document.querySelectorAll(`[${CONFIG.triggerAttribute}]`);
    const menus = document.querySelectorAll(`.${CONFIG.menuClass}`);
    const animatingMenus = new Set();

    menus.forEach(menu => {
        menu.classList.remove('active');
        const parent = menu.parentElement;
        if (parent && getComputedStyle(parent).position === 'static') {
            parent.style.position = 'relative';
        }
    });

    document.documentElement.classList.remove('bf-loading');

    function updateTriggerState(targetId, isActive) {
        menuTriggers.forEach(trigger => {
            const triggerId = trigger.getAttribute(CONFIG.triggerAttribute);
            if (triggerId === targetId) {
                if (isActive) {
                    trigger.style.zIndex = '1000';
                    trigger.classList.add('active-trigger');
                } else {
                    trigger.classList.remove('active-trigger');
                    setTimeout(() => {
                        if (!trigger.classList.contains('active-trigger')) {
                            trigger.style.zIndex = '1';
                        }
                    }, 300);
                }
            }
        });
    }

    function handleMenuTransition(menu, isClosing, instantClose = false) {
        const menuId = menu.id;
        if (animatingMenus.has(menuId)) return;
        animatingMenus.add(menuId);

        if (instantClose) {
            menu.classList.add('instant-close');
            menu.classList.remove('active');
            updateTriggerState(menuId, false);
            setTimeout(() => {
                menu.classList.remove('instant-close');
                animatingMenus.delete(menuId);
            }, 50);
            return;
        }

        if (isClosing) {
            menu.classList.remove('active');
            updateTriggerState(menuId, false);
            setTimeout(() => animatingMenus.delete(menuId), 550);
        } else {
            menu.classList.add('active');
            updateTriggerState(menuId, true);
            setTimeout(() => animatingMenus.delete(menuId), 50);
        }
    }

    function closeAllMenus(exceptMenuId = null) {
        menus.forEach(menu => {
            if (menu.id !== exceptMenuId && menu.classList.contains('active')) {
                handleMenuTransition(menu, true, !!exceptMenuId);
            }
        });
    }

    menuTriggers.forEach(trigger => {
        trigger.addEventListener('click', function(e) {
            e.preventDefault();
            e.stopPropagation();
            const targetId = this.getAttribute(CONFIG.triggerAttribute);
            const targetMenu = document.getElementById(targetId);
            if (!targetMenu || animatingMenus.has(targetId)) return;

            if (targetMenu.classList.contains('active')) {
                handleMenuTransition(targetMenu, true);
                return;
            }

            closeAllMenus(targetId);
            handleMenuTransition(targetMenu, false);
        });
    });

    document.addEventListener('click', function(e) {
        const isClickInsideMenu = Array.from(menus).some(menu => menu.contains(e.target));
        const isClickOnTrigger = Array.from(menuTriggers).some(trigger => trigger.contains(e.target));
        if (!isClickInsideMenu && !isClickOnTrigger) closeAllMenus();
    });

    document.addEventListener('keydown', function(e) {
        if (e.key === 'Escape') closeAllMenus();
    });
});
body:not([data-builder-mode]) .brxe-dropdown[data-static] .brx-dropdown-content {
    display: block;
    position: fixed;
    top: 0;
    right: 0;
    width: 100%;
    height: fit-content;
    min-height: 100%;
    background: #0A0A0F;
    clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%);
    visibility: visible;
    transition: clip-path 0.5s cubic-bezier(0.77, 0, 0.175, 1);
    z-index: 1000;
}

body:not([data-builder-mode]) .brxe-dropdown[data-static].open > .brx-dropdown-content,
body:not([data-builder-mode]) .brxe-dropdown[data-static] .open > .brx-dropdown-content {
    clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
}

body:not([data-builder-mode]) .brxe-dropdown[data-static] .brx-dropdown-content > * {
    opacity: 0;
    transform: translateX(20px);
    transition: opacity 0.4s ease, transform 0.4s ease;
}

body:not([data-builder-mode]) .brxe-dropdown[data-static].open .brx-dropdown-content > *,
body:not([data-builder-mode]) .brxe-dropdown[data-static] .open .brx-dropdown-content > * {
    opacity: 1;
    transform: translateX(0);
    transition-delay: 0.2s;
}

body:not([data-builder-mode]) .brxe-dropdown[data-static] .brx-dropdown-content.closing {
    clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%);
}

body:not([data-builder-mode]) .brxe-dropdown[data-static] .brx-dropdown-content.closing > * {
    opacity: 0;
    transform: translateX(20px);
    transition-delay: 0s;
}
function simulateButtonClick(selector) {
    const targetButton = document.querySelector(selector);
    if (targetButton) {
        if (selector.includes('.BF-menu .brx-submenu-toggle > button[aria-expanded="true"]')) {
            const dropdown = targetButton.closest('.brxe-dropdown[data-static]');
            if (dropdown) {
                const dropdownContent = dropdown.querySelector('.brx-dropdown-content');
                if (dropdownContent) {
                    dropdownContent.classList.add('closing');
                    setTimeout(function() {
                        targetButton.click();
                        setTimeout(function() {
                            dropdownContent.classList.remove('closing');
                        }, 50);
                    }, 500);
                    return;
                }
            }
        }
        targetButton.click();
    }
}

Trusted by Renters Everywhere

find your sanctuary with

simple pricing

We source, verify, and secure the finest rental properties before they hit the market.
We are Your personal sourcing team, powered by data.

see pricing plans >>

the ESSENTIALS

Best for simple, standard searches for singles, couples or small families. In addition to the monthly plan, a referral fee is charged when we find you a match. Essentials Plan referral fee is 1% of the lease value.

$195

/mo

includes:
  • Ai and Live Agent Working 24/7
  • Verified properties and owner introductions. Book direct with owners
  • Receive curated shortlists of high-fit properties
  • Tenant Priority Support

Advanced Executive Plan

For busy executives and their families, group searches or large higher end properties.

the CONCIERGE

Best for comprehensive, accelerated searches for large families or busy professionals. In addition to the monthly plan, a referral fee is charged when we find you a match. The Concierge plan is 3% of the lease value.

$295

/mo

includes: eVERYTHING IN ESSENTIALS PLUS
  • Early access to off-market properties
  • Onsite walk-through video tours live or shared digitally where needed
  • Receive exclusive shortlists of high-fit properties
  • Tenant Priority Support
  • Assistance with furnishings and outfitting if needed

Get Property Selections Tailored to Your Needs

For busy executives and their families, group searches or large higher end properties.

  • “Logical way of going about an efficient property search. Save yourselves the heacache and get onboard. I found my perfect spot in 12 days after searching for months.

    N. Welsch

    Deputy Director

  • “Indispensible service for sure! Saved my a ton of time and a few bucks too. Try it, you will be amazed at what they can do.

    Kai N.

    Full Stack Engineer