PageSourceSearch

https://rosengroupdallas.com/properties/sale

html rosengroupdallas.com collected 2026-10-08 07:20:12 UTC 379,021 bytes, 5,073 lines download raw bytes

1<!DOCTYPE html>
2<html class="no-js" lang=en>
3<head>
4    <meta charset="utf-8">
5    <meta http-equiv="x-ua-compatible" content="ie=edge">
6    <meta name="viewport" content="width=device-width, initial-scale=1.0">
7    <meta name="twitter:card" content="summary_large_image">
8    <meta property="og:type" content="website">
9        <title>Discover the Best Real Estate Properties | The Rosen Group</title>
10        <meta property="og:title" content="Discover the Best Real Estate Properties | The Rosen Group">
11        <meta name="twitter:title" content="Discover the Best Real Estate Properties | The Rosen Group">
12        <meta name="description" content="Explore the best real estate listings with The Rosen Group! Discover featured properties and start your journey to finding your perfect home today.">
13        <meta property="og:description" content="Explore the best real estate listings with The Rosen Group! Discover featured properties and start your journey to finding your perfect home today.">
14        <meta name="twitter:description" content="Explore the best real estate listings with The Rosen Group! Discover featured properties and start your journey to finding your perfect home today.">
15        <meta property="og:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format&#x3D;auto,quality&#x3D;85,fit&#x3D;scale-down,width&#x3D;1920/https://media-production.lp-cdn.com/media/4195cfd1-eaa5-4ed1-bc36-0235a5ac221a">
16        <meta name="twitter:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format&#x3D;auto,quality&#x3D;85,fit&#x3D;scale-down,width&#x3D;1920/https://media-production.lp-cdn.com/media/4195cfd1-eaa5-4ed1-bc36-0235a5ac221a">
17        <meta property="og:url" content="https://rosengroupdallas.com/properties/sale">
18        <link rel="canonical" href="https://rosengroupdallas.com/properties/sale">
19    
19<script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>
19
20    <link rel="preconnect" href="https://fonts.googleapis.com">
21    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
22    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Syncopate:400,700"><style>@font-face {font-family: 'CompassSans';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Regular.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Regular.woff') format('woff');font-weight: 400;font-style: normal;}@font-face {font-family: 'CompassSans';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Italic.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Italic.woff') format('woff');font-weight: 400;font-style: italic;}@font-face {font-family: 'CompassSans';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Medium.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Medium.woff') format('woff');font-weight: 500;font-style: normal;}@font-face {font-family: 'CompassSans';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-MediumItalic.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-MediumItalic.woff') format('woff');font-weight: 500;font-style: italic;}@font-face {font-family: 'CompassSans';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Bold.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Bold.woff') format('woff');font-weight: 700;font-style: normal;}@font-face {font-family: 'CompassSans';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-BoldItalic.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-BoldItalic.woff') format('woff');font-weight: 700;font-style: italic;}@font-face {font-family: 'CompassSans';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Medium.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Medium.woff') format('woff');font-weight: 600;font-style: normal;}@font-face {font-family: 'CompassSans';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-MediumItalic.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-MediumItalic.woff') format('woff');font-weight: 600;font-style: italic;}</style>
23    <link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
24    <noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css"></noscript>
25    <link rel="icon" type="image/x-icon" href="/favicon.ico">
26    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
27    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
28    <link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png">
29    <style id="global-css">:root{--global-primary-font-family:Syncopate,sans-serif;--global-primary-font-family-short:Syncopate;--global-secondary-font-family:CompassSans,sans-serif;--global-secondary-font-family-short:CompassSans;--global-body-padding:0px;--global-background-color:#fff;--global-body-font-size:16px;--global-h1-font-size:48px;--global-h2-font-size:32px;--global-h3-font-size:20px;--global-h4-font-size:24px;--global-h5-font-size:12px;--global-h6-font-size:32px;--global-section-padding:96px;}@media (max-width: 768px){:root{--global-section-padding:64px;}}body{padding:0px;background-color:#fff;font-family:CompassSans,sans-serif;font-size:16px;}@media (min-width: 768px){body{padding:0px 0px 0px 0px;}}h1,h2,h3,h4,h5,h6,button{font-family:Syncopate,sans-serif;}h1{font-size:48px;}h2{font-size:32px;}h3{font-size:20px;}h4{font-size:24px;}h5{font-size:12px;}h6{font-size:32px;}</style>
30        <link rel="stylesheet" type="text/css" href="https://styles.luxurypresence.com/visionary/index.css" />
31    <style id="website-css">:root{--global-h4-font-size:32px;--global-h5-font-size:24px;--global-h6-font-size:20px;--custom-opacity:rgba(157, 140, 121, .4);}@media only screen and (max-width: 768px){div#modal-global-contact-us .modal-content .contact-form-modal-form__title{padding-top:20px;}}body>div.mobile-contact-wrapper div.mobile-contact{bottom:150px;}@media only screen and (max-width: 768px){iframe[name='widgetCta']{bottom:55px!important;right:15px!important;}}iframe[name="widgetCta"]{bottom:70px!important;right:15px!important;}body>div.mobile-contact-wrapper{z-index:9999!important;}body>div.mobile-contact-wrapper .mobile-contact{z-index:9999!important;}.lp-h1,.lp-h2,.lp-h3{font-variation-settings:"opsz" 44,"GRAD" 0,"slnt" 0,"XTRA" 510,"XOPQ" 96,"YOPQ" 40,"YTLC" 540,"YTUC" 712,"YTAS" 750,"YTDE" -220,"YTFI" 738;}.watermark{font-variation-settings:"GRAD" 0,"slnt" 0,"XTRA" 511,"XOPQ" 96,"YOPQ" 50,"YTLC" 537,"YTUC" 712,"YTAS" 750,"YTDE" -221,"YTFI" 738,"opsz" 44;}h1.custom-intro__title--with-pretitle:before,[class*="intro__title"]:before{display:none;}
31h2:before{display:none!important;}section:has(.custom-intro) .custom-intro__overlay,section:has(.custom-intro) .custom-intro__pre-title{display:none;}section:has(.custom-intro) .custom-intro__title{margin-bottom:30px;}section:has(.custom-intro) .custom-intro__scroll-btn{background:transparent!important;border-color:rgba(255, 255, 255, .4)!important;}section:has(.custom-intro) .custom-intro__scroll-btn::after{background-color:#fff!important;}section:has(.custom-intro) .custom-intro__scroll-btn:hover{background:transparent!important;border-color:#fff!important;}@media only screen and (max-width: 768px){.contact-form-modal__close:after{height:25px;width:20px;--iconColor:#000;}}@media only screen and (min-width: 769px){.contact-form-modal__close:after{height:30px;width:40px;}}@media only screen and (min-width: 769px){body.page-sellers .hoverable-section{padding-bottom:0;padding-top:0;}}@media only screen and (max-width: 768px){body.page-sellers .hoverable-section{padding-bottom:80px;padding-top:80px;}}@media only screen and (min-width: 769px){body.page-buyers .hoverable-section{padding-bottom:0;padding-top:0;}}@media only screen and (max-width: 768px){body.page-buyers .hoverable-section{padding-bottom:80px;padding-top:80px;}}@media only screen and (min-width: 769px){.page-about-sir .lp-vertical-paddings:not([class*="pb-"]){padding-bottom:128px;padding-top:128px;}}@media only screen and (max-width: 768px){.page-about-sir .lp-vertical-paddings:not([class*="pb-"]){padding-bottom:80px;padding-top:80px;}}@media only screen and (min-width: 769px){.page-sir-auction .lp-vertical-paddings:not([class*="pb-"]){padding-bottom:128px;padding-top:128px;}}@media only screen and (max-width: 768px){.page-sir-auction .lp-vertical-paddings:not([class*="pb-"]){padding-bottom:80px;padding-top:80px;}}.page-concierge-auctions .custom-intro__title:after{content:"";background-image:url(https://media-production.lp-cdn.com/media/97d074d2-9190-4504-942c-236898102d72);height:150px;width:500px;max-width:100%;-webkit-filter:invert(1);filter:invert(1);-webkit-background-size:contain;background-size:contain;background-repeat:no-repeat;display:block;background-position-x:center;}@media only screen and (max-width: 768px){.page-concierge-auctions .custom-intro__title:after{height:100px;}}.page-concierge-auctions .custom-intro__title{font-size:0;}.lp-h1{text-transform:uppercase;}.lp-h2{text-transform:uppercase;}h1{text-transform:uppercase;}h2{text-transform:uppercase;}h3{text-transform:uppercase;}h4{text-transform:uppercase;}h5{text-transform:uppercase;}h6{text-transform:uppercase;}div#global-sidemenu.sidemenu a{text-transform:uppercase;}div#global-sidemenu.sidemenu button{text-transform:uppercase;}div#modal-global-contact-us .modal-content .contact-form-modal__close{color:#707070;background:transparent;}@media(max-width:1024px){div#modal-global-contact-us .modal-content .contact-form-modal__close{top:40px;right:10px;color:#707070!important;}div#modal-global-contact-us .modal-content .contact-form-modal__close::after{background-color:#707070!important;}}div#modal-global-contact-us .modal-content .contact-form-modal__close:hover{color:#707070!important;opacity:.7;}div#modal-global-contact-us .modal-content .contact-form-modal__close:hover::after{background:#707070;}div#modal-global-contact-us .modal-content .contact-form-modal__bg{background-image:linear-gradient(
32				rgba(234, 231, 224, 0.97),
33				rgba(234, 231, 224, 0.97)
34			),url("https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/eb35bd67-1bfe-4e9b-b59c-7f3a39631930");}div#modal-global-contact-us .modal-content .contact-form-modal__bg img{display:none;}div#modal-global-contact-us .modal-content .contact-form-modal-form{background:rgba(255,255,255,0.8);}div#modal-global-contact-us .modal-content .contact-form-modal__container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:1000px;margin-left:auto;margin-right:auto;}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-details,div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-form{width:100%;}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-details{text-align:center;padding:0;}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-details .contact-form-modal-details__title{max-width:unset;color:#707070;}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-details .contact-form-modal-details__title::after{content:' Touch';font-weight:700;}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-details .contact-form-modal-agent{-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-details .contact-form-modal-details__description{margin-left:auto;margin-right:auto;font-family:var(--lp-h1-font-family);color:#707070;letter-spacing:1px;font-weight:400;}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-details .lp-socials{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}@media(min-width:1024px){div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-form{margin-top:30px;}}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-form .lp-input{background:transparent;border:1px solid rgba(157, 140, 121, .4);}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-form .lp-input:hover,div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-form .lp-input:active{border-color:#9d8c79;}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-form .lp-label{text-transform:uppercase;letter-spacing:1px;font-size:12px;font-weight:400;}div#modal-global-contact-us .modal-content .contact-form-modal__container .lp-tcr-message{opacity:.5;}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-submit{display:block;margin-left:auto!important;margin-right:auto!important;}div#modal-global-contact-us .modal-content .contact-form-modal__container .contact-form-modal-submit::after{display:none;}div#modal-global-contact-us .modal-content .contact-form-modal-form__title{color:#707070;}div#modal-global-contact-us .modal-content .contact-form-modal-form__title::after{content:' Touch';font-weight:700;}nav#global-navbar header.scroll .header-navigation__link:after{background:#9d8c79!important;}nav#global-navbar .header-navigation__link:after{background:#fff;}nav#global-navbar .header-navigation__sub-nav-link{font-weight:400;}nav#global-navbar .header-navigation__sub-nav-link:hover{color:#9d8c79;}nav#global-navbar .header{background-color:transparent!important;}nav#global-navbar .header .header-logo__img--dark{display:none;}nav#global-navbar .header .header-navigation__link{color:#fff;text-transform:uppercase;font-weight:400;}nav#global-navbar .header .header-navigation__link:hover{color:#fff;}nav#global-navbar .header .header-navigation__link:before{background-color:#fff;}nav#global-navbar .header .header-navigation__sub-nav{background-color:#fff;}nav#global-navbar .header .header-navigation__sub-nav-link{text-transform:uppercase;color:#707070;}nav#global-navbar .header .header-navigation__sub-nav-link:hover{color:#9d8c79;}nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn,nav#global-navbar .header .header-search-btn{border-color:transparent;background-color:transparent;}nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn:after,nav#global-navbar .header .header-search-btn:after,nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn:before,nav#global-navbar .header .header-search-btn:before{background-color:#fff;}nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn:hover,nav#global-navbar .header .header-search-btn:hover{background-color:transparent;border-color:transparent;}nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn:hover:after,nav#global-navbar .header .header-search-btn:hover:after,nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn:hover:before,nav#global-navbar .header .header-search-btn:hover:before{background-color:#fff;}nav#global-navbar .header.scroll{box-shadow:rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;background-color:#EAE7E0!important;color:#707070!important;}nav#global-navbar .header.scroll .header-logo__img--dark{display:block;}nav#global-navbar .header.scroll .header-navigation__link{color:#707070;text-transform:uppercase;font-weight:400;}nav#global-navbar .header.scroll .header-navigation__link:hover{color:#9d8c79;}nav#global-navbar .header.scroll .header-navigation__link:before{background-color:#fff;}nav#global-navbar .header.scroll .header-navigation__sub-nav{background-color:#fff;}nav#global-navbar .header.scroll .header-navigation__link:hover{color:#9d8c79;}nav#global-navbar .header.scroll .header-navigation__link:hover:before{background-color:#9d8c79;}nav#global-navbar .header.scroll .button-style-2{color:#9d8c79!important;background-color:transparent!important;border-color:rgba(157, 140, 121, 0.4)!important;}nav#global-navbar .header.scroll .button-style-2:hover{border-color:rgba(157, 140, 121, 1)!important;}nav#global-navbar .header.scroll .header-buttons-wrapper .header-hamburger-btn,nav#global-navbar .header.scroll .header-search-btn{border-color:transparent;background-color:transparent;}nav#global-navbar .header.scroll .header-buttons-wrapper .header-hamburger-btn:after,nav#global-navbar .header.scroll .header-search-btn:after,nav#global-navbar .header.scroll .header-buttons-wrapper .header-hamburger-btn:before,nav#global-navbar .header.scroll .header-search-btn:before{background-color:#9d8c79;}nav#global-navbar .header.scroll .header-buttons-wrapper .header-hamburger-btn:hover,nav#global-navbar .header.scroll .header-search-btn:hover{background-color:transparent;border-color:transparent;}nav#global-navbar .header.scroll .header-buttons-wrapper .header-hamburger-btn:hover:after,nav#global-navbar .header.scroll .header-search-btn:hover:after,nav#global-navbar .header.scroll .header-buttons-wrapper .header-hamburger-btn:hover:before,nav#global-navbar .header.scroll .header-search-btn:hover:before{background-color:#9d8c79;}.page-property-details nav#global-navbar .header .header-navigation__link{color:#707070;text-transform:uppercase;font-weight:400;}.page-property-details nav#global-navbar .header .header-navigation__link:before{background-color:#707070;}.page-property-details nav#global-navbar .header .header-navigation__link:after{background-color:#707070;}.page-property-details nav#global-navbar .header .header-navigation__link:hover{color:#9d8c79;}.page-property-details nav#global-navbar .header .header-navigation__link:hover:before{background-color:#9d8c79;}.page-property-details nav#global-navbar .header .header-navigation__link:hover:after{background-color:#9d8c79;}.page-property-details nav#global-navbar .header .button-style-2{color:#9d8c79!important;background-color:transparent!important;border-color:rgba(157, 140, 121, 0.4)!important;}.page-property-details nav#global-navbar .header .button-style-2:hover{border-color:rgba(157, 140, 121, 1)!important;}.page-property-details nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn,.page-property-details nav#global-navbar .header .header-search-btn{border-color:transparent;background-color:transparent;}.page-property-details nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn:after,.page-property-details nav#global-navbar .header .header-search-btn:after,.page-property-details nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn:before,.page-property-details nav#global-navbar .header .header-search-btn:before{background-color:#9d8c79;}.page-property-details nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn:hover,.page-property-details nav#global-navbar .header .header-search-btn:hover{background-color:transparent;border-color:transparent;}.page-property-details nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn:hover:after,.page-property-details nav#global-navbar .header .header-search-btn:hover:after,.page-property-details nav#global-navbar .header .header-buttons-wrapper .header-hamburger-btn:hover:before,.page-property-details nav#global-navbar .header .header-search-btn:hover:before{background-color:#9d8c79;}.page-property-details nav#global-navbar .header .header-logo__img--dark{display:block!important;height:60px;}.page-property-details nav#global-navbar .header .header-logo__img--light{display:none!important;}@media (min-width: 1025px){#global-mobile-contact .pop-up{max-width:50vw!important;}}#global-mobile-contact .lp-ico:before{background-color:#817e61;}#global-mobile-contact .contact-form__container{border-color:#817e61;}#global-mobile-contact .lp-input{background-color:#fff;color:#817e61;}#global-mobile-contact h3{color:#817e61;}#global-mobile-contact .contact-form,#global-mobile-contact .lp-container{padding:25px;}@media (max-width: 767px){#global-mobile-contact .contact-form,#global-mobile-contact .lp-container{padding:10px;}}#global-mobile-contact .lp-disclaimer{color:#141414;}@media (max-width: 767px){#global-mobile-contact .lp-disclaimer{font-size:8px;}}@media (max-width: 767px){#global-mobile-contact .close-btn{margin-top:5px;}}@media (max-width: 1530px){#global-sidemenu .lp-socials{max-width:200
34px;}}#global-sidemenu:before{opacity:0.015;content:"";width:100%;height:100%;display:block;position:absolute;background-repeat:no-repeat;-webkit-background-size:600px;background-size:600px;-webkit-background-position:90% 50%;background-position:90% 50%;top:0;left:0;}#global-sidemenu .sidemenu-navigation__link,#global-sidemenu .sidemenu-navigation-sub-nav__item{text-transform:uppercase;box-orient:none!important;line-clamp:none!important;display:block!important;color:#707070;}#global-sidemenu .sidemenu-navigation__link:hover,#global-sidemenu .sidemenu-navigation-sub-nav__item:hover{color:#141414;}#global-sidemenu .sidemenu-navigation-sub-nav__link:hover{text-decoration-color:#817e61;}#global-sidemenu .sidemenu-navigation__item{gap:0;-webkit-transition:all ease .3s;transition:all ease .3s;}#global-sidemenu .sidemenu-navigation__item .sidemenu-navigation-sub-nav{height:0;-webkit-transform:scaleY(0);-moz-transform:scaleY(0);-ms-transform:scaleY(0);transform:scaleY(0);-webkit-transition:all ease .3s;transition:all ease .3s;transform-origin:top;opacity:0;}#global-sidemenu .sidemenu-navigation__item:hover{gap:14px;}#global-sidemenu .sidemenu-navigation__item:hover .sidemenu-navigation-sub-nav{height:auto;-webkit-transform:scaleY(100%);-moz-transform:scaleY(100%);-ms-transform:scaleY(100%);transform:scaleY(100%);opacity:1;}#global-sidemenu .sidemenu__col-description{color:#707070;}#global-footer .footer a:hover{text-decoration-color:#817e61!important;}#global-sidemenu a:hover{text-decoration-color:#817e61!important;}.button-style-1,.button-style-2,.button-style-3,.button-style-4{font-weight:500;letter-spacing:1px;text-align:center;font-size:14px;border-radius:0;}.lp-btn .lp-btn--filled__content,.lp-btn .lp-btn__content{padding-right:0;}.lp-btn .lp-btn--filled__content:after,.lp-btn .lp-btn__content:after{display:none;}.newsletter-contact-cta__btn:before{display:none!important;}.is-font-color-dark .lp-arrow{border-radius:0;border-color:rgba(157, 140, 121, 0.4);background-color:transparent;color:#9d8c79;}.is-font-color-dark .lp-arrow:after{background-color:#9d8c79;}.is-font-color-dark .lp-arrow:hover{background-color:transparent!important;border-color:#9d8c79!important;color:#9d8c79;}.is-font-color-dark .lp-arrow:hover:after{background-color:#9d8c79;}.is-font-color-light .lp-arrow{border-radius:0;background-color:transparent;border-color:rgba(255, 255, 255, 0.4);color:#fff;}.is-font-color-light .lp-arrow:after{background-color:#fff;}.is-font-color-light .lp-arrow:hover{background-color:transparent;border-color:#fff;}.is-font-color-light .lp-arrow:hover:after{background-color:#fff;}.paginationjs li a:hover:after{background-color:#9d8c79!important;}#global-footer::before{content:"";display:block;position:absolute;top:0;left:0;width:100%;height:100%;background:#fff;-webkit-background-position:center;background-position:center;background-repeat:no-repeat;-webkit-background-size:cover;background-size:cover;}@media (min-width: 769px){#global-footer::before{background-attachment:fixed;}}#global-footer .footer{position:relative;z-index:1;}#global-footer .footer__col-phone,#global-footer .footer__col-email,#global-footer .footer-navigation__link,#global-footer .footer-copyright a{position:relative;}#global-footer .footer__col-phone:after,#global-footer .footer__col-email:after,#global-footer .footer-navigation__link:after,#global-footer .footer-copyright a:after{content:"";position:absolute;display:block;left:0;bottom:0;height:1px;width:0;background-color:#9d8c79;-webkit-transition:all 0.4s;transition:all 0.4s;}#global-footer .footer__col-phone:hover,#global-footer .footer__col-email:hover,#global-footer .footer-navigation__link:hover,#global-footer .footer-copyright a:hover{color:#9d8c79;cursor:pointer;}#global-footer .footer__col-phone:hover:after,#global-footer .footer__col-email:hover:after,#global-footer .footer-navigation__link:hover:after,#global-footer .footer-copyright a:hover:after{width:100%;}#global-footer .footer-logos-row{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;display:block;margin-bottom:40px;}#global-footer .footer-logos-row img{max-height:150px;max-width:350px;width:100%;margin:auto;}#global-footer .footer-contact-row{-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;text-align:center;padding-bottom:30px;margin-bottom:50px;gap:40px;border-color:#9d8c79;}@media (max-width: 767px){#global-footer .footer-contact-row{gap:0;}}#global-footer .footer-contact-row .footer-info{border:none;-webkit-flex:1 1 66.66%;-ms-flex:1 1 66.66%;flex:1 1 66.66%;margin:0;max-width:unset;min-width:unset;}@media (max-width: 1024px){#global-footer .footer-contact-row .footer-info{-webkit-flex:1 1 100%;-ms-flex:1 1 100%;flex:1 1 100%;width:100%;}}#global-footer .footer-contact-row .footer-info .footer__col{margin:0;}#global-footer .footer-contact-row .footer-info .footer__section-content{gap:40px;}@media (max-width: 767px){#global-footer .footer-contact-row .footer-info .footer__section-content{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:0;}}#global-footer .footer-contact-row .footer-info .footer__section-content .footer__col-content{max-width:unset;min-width:unset;-webkit-flex:1 1 50%;-ms-flex:1 1 50%;flex:1 1 50%;}@media (max-width: 1024px){#global-footer .footer-contact-row .footer-info .footer__section-content .footer__col-content{-webkit-flex:1 1 100%;-ms-flex:1 1 100%;flex:1 1 100%;}}#global-footer .footer-contact-row .footer-info .footer__section-title{display:none;}#global-footer .footer-contact-row .footer-info .footer__col-title{max-width:unset;text-transform:uppercase;letter-spacing:2px;font-weight:500;font-size:14px;margin-bottom:10px;opacity:1;}#global-footer .footer-contact-row .footer-info .footer__col-description{max-width:unset;}#global-footer .footer-contact-row .lp-socials{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;padding-top:32px;-webkit-flex:1 1 33.33%;-ms-flex:1 1 33.33%;flex:1 1 33.33%;}#global-footer .footer-contact-row .lp-socials:before{content:"Follow Us";display:block;position:absolute;top:0;text-transform:uppercase;letter-spacing:2px;font-weight:500;margin-bottom:10px;font-size:14px;}@media (max-width: 1024px){#global-footer .footer-contact-row .lp-socials{-webkit-flex:1 1 100%;-ms-flex:1 1 100%;flex:1 1 100%;}}#global-footer .footer-navigation-row{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:20px;}#global-footer .footer-navigation-row .footer-navigation{gap:10px 0;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}@media (max-width: 1024px){#global-footer .footer-navigation-row .footer-navigation{width:100%;max-width:unset;min-width:unset;text-align:center;}}@media (min-width: 768px) and (max-width: 1024px){#global-footer .footer-navigation-row .footer-navigation{gap:20px 50px;}}@media (max-width: 767px){#global-footer .footer-navigation-row .footer-navigation{-ms-grid-auto-flow:unset;grid-auto-flow:unset;text-align:center;}}#global-footer .footer-navigation-row .footer-navigation-title{display:block;font-size:0;opacity:1;max-width:unset;width:100%;}#global-footer .footer-navigation-row .footer-navigation-title:after{content:"Sitemap";display:block;text-align:center;font-size:14px;letter-spacing:2px;font-weight:500;}#global-footer .footer-navigation-row .footer-navigation-title:last-of-type{display:none;}#global-footer .footer-disclaimer-row{padding-bottom:30px;margin-bottom:50px;border-bottom:1px solid #9d8c79;}@media (min-width: 769px){#global-footer .footer-copyright .footer-copyright__privacy-policy,#global-footer .footer-copyright .footer-copyright__privacy{padding:0;margin:0;border:none;}#global-footer .footer-copyright .footer-copyright__privacy>span{padding:0 20px;margin:0 20px;border:1px solid rgba(0, 0, 0, 0.2);border-width:0 1px;}}@media (max-width: 768px){#global-footer .footer-bottom-row{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;}#global-footer .footer-bottom-row .footer-copyright__powered,#global-footer .footer-bottom-row .footer-copyright__privacy{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:5px;-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;}}#global-footer .footer-navigation__link{text-transform:uppercase;}#global-footer .lp-a a{text-decoration-color:#9d8c79;}div#global-sidemenu{background-color:#EAE7E0;width:100vw;}div#global-sidemenu .sidemenu-close{z-index:4;}div#global-sidemenu:after{opacity:0.06;content:"";display:block;position:absolute;width:100vw;height:100vh;top:0;left:0;background-image:url("https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/eb35bd67-1bfe-4e9b-b59c-7f3a39631930");-webkit-background-size:cover;background-size:cover;background-repeat:no-repeat;-webkit-background-position:top right;background-position:top right;}div#global-sidemenu:before{opacity:0.03;}div#global-sidemenu .sidemenu-wrapper{z-index:4;max-width:1920px;}div#global-sidemenu .sidemenu-wrapper .sidemenu-nav-holder{max-width:800px;}@media (min-width: 1025px){div#global-sidemenu{width:100vw;padding:120px 60px;}div#global-sidemenu .sidemenu-nav-holder{-webkit-column-count:2;column-count:2;display:block;}div#global-sidemenu .sidemenu-navigation{break-inside:avoid-column;padding-bottom:24px;}div#global-sidemenu .sidemenu-wrapper{width:100%;max-width:1920px;}div#global-sidemenu .sidemenu-footer:before{width:100%;}}div#global-sidemenu .sidemenu-navigation__link{font-size:20px;}div#global-sidemenu .sidemenu-footer:before{background-color:#9d8c79;opacity:1;}div#global-sidemenu .sidemenu__col-title{color:#9d8c79;}div#global-sidemenu .sidemenu-close{background:transparent;border:1px solid rgba(234, 231, 224, 0.4)!important;}div#global-sidemenu .sidemenu-close:before,div#global-sidemenu .sidemenu-close:after{background:#9d8c79;}div#global-sidemenu .sidemenu-close:hover{background:transparent;border-color:#9d8c79!important;}div#global-sidemenu .sidemenu-close:hover:before,div#global-sidemenu .sidemenu-close:hover:after{background:#9d8c79;}div#global-sidemenu .lp-a a:hover{color:#9d8c79;}.lp-btn,.custom-intro__scroll-btn,.lp-input,.lp-arrow,.floating-contact-button__btn-connect,.custom-select .custom-select-menu,.lp-pagination.pagination-container ul li a,.pagination-container ul li a,.mls-properties-with-map-card__img-wrap,.calendar__item,.mortgage-results,[class*="__scroll-btn"],[class*="__close"],.lp-lightbox-arrow,.agents-slider__position,.blog-posts-slider-item__category,.blog-posts-slider-item__tag,.properties-slider-card__tag,.properties-slider-card__feature,.properties-list-item__icon-tag,.properties-list-item__tag,.agents-list__item-tag{border-radius:0;}.header-hamburger-btn.lp-btn,.close.lp-btn,.lp-btn.lp-btn--circle{border-radius:0;}.footer-disclaimer img{margin-top:20px;}.footer-disclaimer a{color:unset;-webkit-text-decoration:underline;text-decoration:underline;text-underline-offset:2px;text-decoration-color:#ccc;-webkit-transition:.3s;transition:.3s;}.footer-disclaimer a:hover{text-decoration-color:#817e61;color:#817e61;}.footer-logos-row{max-width:250px;margin-left:auto;margin-right:auto;}@media(max-width:769px){.footer-logos-row{max-width:220px;}}.gallery-style-menu-grid__item:hover::before{background:var(--custom-opacity)!important;opacity:1!important;}</style>
35    <style id="wow-hide-elements">.wow{visibility:hidden!important}</style>
36        <style id="page-css">
37            #section-a47ed492-3b7c-468d-99c5-27dfd2078c71{color:#FFF;--fontColor:#FFF;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#ffffff;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.00));background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/4195cfd1-eaa5-4ed1-bc36-0235a5ac221a');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-a47ed492-3b7c-468d-99c5-27dfd2078c71 .custom-intro__scroll-btn{background-color:#817E61;border-color:#817E61;margin-top:20px;}#section-a47ed492-3b7c-468d-99c5-27dfd2078c71 .custom-intro__scroll-btn:after{background:#FFF;}#section-a47ed492-3b7c-468d-99c5-27dfd2078c71 .custom-intro__scroll-btn:hover{background-color:#817E61;border-color:#817E61;}#section-a47ed492-3b7c-468d-99c5-27dfd2078c71{-webkit-background-position:bottom;background-position:bottom;}#section-a47ed492-3b7c-468d-99c5-27dfd2078c71:after{content:"";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:linear-gradient(to bottom, rgba(0, 0 ,0 ,0), rgba(0,0,0,0.7));z-index:1;}#section-a47ed492-3b7c-468d-99c5-27dfd2078c71 .custom-intro__overlay{z-index:2;}#section-a47ed492-3b7c-468d-99c5-27dfd2078c71 .custom-intro .custom-intro__content-box{background:transparent;margin-bottom:20px;}#section-a47ed492-3b7c-468d-99c5-27dfd2078c71 .custom-intro .custom-intro__content-box .custom-intro__title{color:#FFF;}#section-a47ed492-3b7c-468d-99c5-27dfd2078c71 .custom-intro .custom-intro__content-box .custom-intro__scroll-btn{margin-top:0;}@media (max-width: 767px){#section-a47ed492-3b7c-468d-99c5-27dfd2078c71 .custom-intro{height:500px;}#section-a47ed492-3b7c-468d-99c5-27dfd2078c71 .custom-intro .custom-intro__content-box{position:absolute;top:50%;}#section-a47ed492-3b7c-468d-99c5-27dfd2078c71 .custom-intro .custom-intro__overlay{height:115px;}}@media (min-width: 960px) and (orientation: landscape){#section-a47ed492-3b7c-468d-99c5-27dfd2078c71{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/4195cfd1-eaa5-4ed1-bc36-0235a5ac221a');}}@media (min-width: 1280px) and (orientation: landscape){#section-a47ed492-3b7c-468d-99c5-27dfd2078c71{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/4195cfd1-eaa5-4ed1-bc36-0235a5ac221a');}}@media (min-width: 1920px) and (orientation: landscape){#section-a47ed492-3b7c-468d-99c5-27dfd2078c71{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=2560/https://media-production.lp-cdn.com/media/4195cfd1-eaa5-4ed1-bc36-0235a5ac221a');}}@media (min-width: 2560px) and (orientation: landscape){#section-a47ed492-3b7c-468d-99c5-27dfd2078c71{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=3456/https://media-production.lp-cdn.com/media/4195cfd1-eaa5-4ed1-bc36-0235a5ac221a');}}#section-c20b1af6-e3e3-4d23-9029-d843644debe8{color:#707070;--fontColor:#707070;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:44%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-top:calc(6 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#ffffff;}@media (max-width: 768px){#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .properties-list__show-btn{background:transparent;color:#9d8c79;border-color:rgba(157, 140, 121, .4);}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .properties-list__show-btn:hover{border-color:rgba(157, 140, 121, 1);}}@media(min-width:769px){#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .properties-list .properties-list__filters{max-width:unset;}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .properties-list .properties-list__collection{gap:10px;margin:0;}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .properties-list .properties-list__collection .properties-list-item{width:calc(50% - 5px);position:relative;overflow:hidden;}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .properties-list .properties-list__collection .properties-list-item:hover .properties-list-item__info{-webkit-transform:unset;-moz-transform:unset;-ms-transform:unset;transform:unset;}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .properties-list .properties-list__collection .properties-list-item .properties-list-item__image-container{aspect-ratio:1/.725;}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .properties-list .properties-list__collection .properties-list-item .properties-list-item__info{position:absolute;bottom:0;background:rgba(234,231,224,0.9);width:100%;padding:30px 15px;-webkit-transition:.3s;transition:.3s;-webkit-transform:translatey(100%);-moz-transform:translatey(100%);-ms-transform:translatey(100%);transform:translatey(100%);}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .properties-list .pagination-container{margin-top:20px;}}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .lp-input{background:transparent!important;border:1px solid rgba(157, 140, 121, .4)!important;}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .lp-input:hover{border-color:rgba(157, 140, 121, 1)!important;background:transparent!important;}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .properties-list .properties-list__input-row .properties-list__input-icon:after{background-color:#817E61;}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 .properties-list-item__tag{opacity:1!important;background-color:#EBE7E0!important;color:#000;}#section-c20b1af6-e3e3-4d23-9029-d843644debe8 h2:after{content:" Active Listings";font-weight:700;letter-spacing:2px;}#section-c20b1af6-e3e3-4d23-9029-d843644debe8>div:last-child{padding-top:calc(6 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-b903aacd-3b0c-4042-9cd9-3066a61f407c{color:#707070;--fontColor:#707070;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:44%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#EBE7E0;--bgColor_H:38;--bgColor_S:22%;--bgColor_L:90%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-top:calc(6 / 4 * var(--global-section-padding));--section-padding-bottom:calc(6 / 4 * var(--global-section-padding));background-color:#EBE7E0;}#section-b903aacd-3b0c-4042-9cd9-3066a61f407c .simple-cta .simple-cta__text-block p{margin-bottom:0;}#section-b903aacd-3b0c-4042-9cd9-3066a61f407c .simple-cta .simple-cta__container{max-width:1700px;}#section-b903aacd-3b0c-4042-9cd9-3066a61f407c .simple-cta .simple-cta__container{max-width:1920px;}#section-b903aacd-3b0c-4042-9cd9-3066a61f407c .simple-cta .simple-cta__container .simple-cta__text-block{max-width:90%;}#section-b903aacd-3b0c-4042-9cd9-3066a61f407c .simple-cta .simple-cta__container .simple-cta__text-block h2{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}#section-b903aacd-3b0c-4042-9cd9-3066a61f407c>div:last-child{padding-top:calc(6 / 4 * var(--global-section-padding))!important;padding-bottom:calc(6 / 4 * var(--global-section-padding))!important;}#section-16a9df67-1fdd-4f21-b174-bf9a1c14b565{color:#fff;--fontColor:#fff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#ffffff;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.3));background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/37723123-8e08-4e2d-be7e-4333579850c7');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-16a9df67-1fdd-4f21-b174-bf9a1c14b565 .newsletter-contact-cta__wrapper{-webkit-box-pack:center;-ms-flex-pack:center;
37-webkit-justify-content:center;justify-content:center;}#section-16a9df67-1fdd-4f21-b174-bf9a1c14b565 .newsletter-contact-cta__description,#section-16a9df67-1fdd-4f21-b174-bf9a1c14b565 .newsletter-contact-cta__prefix-cell,#section-16a9df67-1fdd-4f21-b174-bf9a1c14b565 .newsletter-contact-cta__word-word{opacity:1;}@media (min-width: 1300px){#section-16a9df67-1fdd-4f21-b174-bf9a1c14b565{background-attachment:fixed;-webkit-background-position:center;background-position:center;background-repeat:no-repeat;-webkit-background-size:cover;background-size:cover;}}#section-16a9df67-1fdd-4f21-b174-bf9a1c14b565 h2:after{content:"With Us";font-weight:700;letter-spacing:2px;}@media (min-width: 960px) and (orientation: landscape){#section-16a9df67-1fdd-4f21-b174-bf9a1c14b565{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/37723123-8e08-4e2d-be7e-4333579850c7');}}@media (min-width: 1280px) and (orientation: landscape){#section-16a9df67-1fdd-4f21-b174-bf9a1c14b565{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/37723123-8e08-4e2d-be7e-4333579850c7');}}@media (min-width: 1920px) and (orientation: landscape){#section-16a9df67-1fdd-4f21-b174-bf9a1c14b565{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=2560/https://media-production.lp-cdn.com/media/37723123-8e08-4e2d-be7e-4333579850c7');}}@media (min-width: 2560px) and (orientation: landscape){#section-16a9df67-1fdd-4f21-b174-bf9a1c14b565{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=3456/https://media-production.lp-cdn.com/media/37723123-8e08-4e2d-be7e-4333579850c7');}}#section-4668b610-d9c1-4a67-adf4-0e6b4204182e{color:#1a1a1a;--fontColor:#1a1a1a;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:10%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#ffffff;}body>div.sidemenu{background-color:rgba(255, 255, 255, 1);color:rgba(0, 0, 0, 1);--fontColor:rgba(0, 0, 0, 1);--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:rgba(255, 255, 255, 1);--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;}footer{background-color:rgba(234, 231, 224, 1);color:rgba(54, 48, 49, 1);--fontColor:rgba(54, 48, 49, 1);--fontColor_H:350;--fontColor_S:6%;--fontColor_L:20%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:rgba(234, 231, 224, 1);--bgColor_H:42;--bgColor_S:19%;--bgColor_L:90%;--bgColor_A:1;--bgColor_darkenDir:-1;}
38        </style>
39    <style id="custom-style-css">.button-style-1{color:rgba(157, 140, 121, 1)!important;background-color:rgba(189, 175, 158, 0)!important;border-color:rgba(157, 140, 121, 0.4)!important;}.button-style-1:hover{color:rgba(157, 140, 121, 1)!important;background-color:rgba(145, 102, 72, 0)!important;border-color:rgba(157, 140, 121, 1)!important;}.pagination-style-1 li a{color:rgba(157, 140, 121, 1)!important;background-color:rgba(189, 175, 158, 0)!important;border-color:rgba(157, 140, 121, 0.4)!important;}.pagination-style-1 li a:hover{color:rgba(157, 140, 121, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(157, 140, 121, 1)!important;}.pagination-style-1 li.active a{color:rgba(157, 140, 121, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(157, 140, 121, 1)!important;}.social_icons-style-1 a{border-color:rgba(157, 140, 121, 0.4)!important;background-color:rgba(189, 175, 158, 0)!important;color:rgba(157, 140, 121, 1)!important;}.social_icons-style-1 a:hover{border-color:rgba(157, 140, 121, 1)!important;background-color:rgba(145, 102, 72, 0)!important;color:rgba(157, 140, 121, 1)!important;}.social_icons-style-1 a i{color:inherit!important;}
39.social_icons-style-1 a svg,.social_icons-style-1 a svg path{fill:currentColor!important;}.hyperlink-style-1{color:rgba(112, 112, 112, 1)!important;}.hyperlink-style-1:hover{color:rgba(129, 126, 97, 1)!important;}.hyperlink-style-2{color:rgba(255, 255, 255, 1)!important;}.hyperlink-style-2:hover{color:rgba(203, 202, 185, 1)!important;}.button-style-2{color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 0)!important;border-color:rgba(255, 255, 255, 0.4)!important;}.button-style-2:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(177, 132, 99, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.pagination-style-2 li a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 0)!important;border-color:rgba(255, 255, 255, 0.4)!important;}.pagination-style-2 li a:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(177, 132, 99, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.pagination-style-2 li.active a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(177, 132, 99, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.social_icons-style-2 a{border-color:rgba(255, 255, 255, 0.4)!important;background-color:rgba(255, 255, 255, 0)!important;color:rgba(255, 255, 255, 1)!important;}.social_icons-style-2 a:hover{border-color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 0)!important;color:rgba(255, 255, 255, 1)!important;}.social_icons-style-2 a i{color:inherit!important;}
39.social_icons-style-2 a svg,.social_icons-style-2 a svg path{fill:currentColor!important;}.button-style-3{color:rgba(255, 255, 255, 1)!important;background-color:rgba(157, 140, 121, 1)!important;border-color:rgba(157, 140, 121, 1)!important;}.button-style-3:hover{color:rgba(157, 140, 121, 1)!important;background-color:rgba(189, 175, 158, 0)!important;border-color:rgba(157, 140, 121, 1)!important;}.button-style-4{color:rgba(157, 140, 121, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-4:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 0)!important;border-color:#FFFFFF!important;}</style>
40        <!-- LP Consent bootstrap: blocking; resolves consent state, pushes Consent Mode
41             defaults, and dynamically loads the locale + main (and banner if needed). -->
42        
42<script src="https://cdn.luxurypresence.com/scripts/lp-consent/latest/lp-consent-boot.js" data-website-id="efd0b616-93bf-43b2-a015-21b3983523b4"></script>
42
43
44
45        
45<script>
46            (function utmParse() {
47                const url = new URL(window.location.href);
48                if (url.search) {
49                    const utm = url.search.split(/\?|&/g).reduce((acc, current) => {
50                        const matched = current.match(/utm_(content|campaign|medium|source|term|id)|gclid/g);
51                        if (matched) {
52                        acc[matched[0]] = current.replace(`${matched[0]}=`, '');
53                        }
54                        return acc;
55                    }, {});
56                    if (Object.keys(utm).length) {
57                        window.localStorage.setItem('utm_vars', JSON.stringify(utm));
58                    } else {
59                        // Remove old utm vars
60                        window.localStorage.removeItem('utm_vars');
61                    }
62                }
63                // Set referrer in local storage
64                // This is meant to be stored once to avoid self-referrals and to have the first referrer only.
65                if (!window.localStorage.getItem('referrer')) {
66                    // Capture the Referrer URL
67                    const referrer = document.referrer;
68                    if (referrer) {
69                        // Only store the referrer if it comes from outside the current domain (to avoid self-referrals)
70                        const currentDomain = window.location.hostname;
71                        const referrerDomain = new URL(referrer).hostname;
72
73                        if (referrerDomain !== currentDomain) {
74                            // Store it in localStorage
75                            localStorage.setItem('referrer', referrer);
76                        }
77                    }
78                }
79            })();
80        </script>
80
81        <!-- Bing Webmaster Tools Verification -->
82<script>
83        // Check if on the homepage before the body loads
84        if (window.location.pathname === '/' || window.location.pathname === '/index.html') {
85            document.write('<meta name="msvalidate.01" content="50D3F5A253C07EC098EA320AB65632E2" />');
86        }
87</script>
87
88
89<!-- begin Compass Pixel Code -->
90<script
91  src="https://www.compass.com/cxlp/a.min.js"
92  id="cxlp-ajs"
93  data-client-id="b2xuqqjb9nq1"
94  async
95></script>
95
96<!-- end Compass Pixel Code -->
97
98
99<script type="text/javascript">
100    // Function to inject JSON-LD schema
101    function injectSchema(schema) {
102        var script = document.createElement('script');
103        script.type = 'application/ld+json';
104        script.text = JSON.stringify(schema);
105        document.head.appendChild(script);
106    }
107
108    // Check if the current path is the homepage
109    if (window.location.pathname === '/') {
110        var realEstateAgentSchema = {
111            "@context": "https://schema.org",
112            "@type": "RealEstateAgent",
113            "name": "The Rosen Group",
114            "image": "https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/73ba6108-baa0-475b-9b27-2c49bd7d35ea",
115            "@id": "https://rosengroupdallas.com/#realEstateAgent",
116            "url": "https://rosengroupdallas.com/",
117            "telephone": "(214)927-1313",
118            "email": "[email protected]",
119            "description": "Dallas luxury real estate team led by Jordan and Jonathan Rosen, specializing in high-end residential sales in Highland Park, University Park, and Preston Hollow.",
120            "address": {
121                "@type": "PostalAddress",
122                "streetAddress": "5960 Berkshire Ln Ste 700",
123                "addressLocality": "Dallas",
124                "addressRegion": "TX",
125                "postalCode": "75225",
126                "addressCountry": "US"
127            },
128            "geo": {
129                "@type": "GeoCoordinates",
130                "latitude": 32.8647265,
131                "longitude": -96.8096770
132            },
133            "openingHoursSpecification": {
134                "@type": "OpeningHoursSpecification",
135                "dayOfWeek": [
136                    "Monday",
137                    "Tuesday",
138                    "Wednesday",
139                    "Thursday",
140                    "Friday",
141                    "Saturday",
142                    "Sunday"
143                ],
144                "opens": "00:00",
145                "closes": "23:59"
146            },
147            "employee": [
148                {
149                    "@type": "Person",
150                    "@id": "https://rosengroupdallas.com/#jordan-rosen",
151                    "name": "Jordan Rosen",
152                    "jobTitle": "Principal Associate Broker",
153                    "image": "https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/45cf699e-c039-4474-94aa-4f8e3a522aa7",
154                    "url": "https://rosengroupdallas.com/agents/jordan-rosen",
155                    "telephone": "(214)444-4813",
156                    "email": "[email protected]",
157                    "worksFor": {
158                        "@id": "https://rosengroupdallas.com/#realEstateAgent"
159                    },
160                    "sameAs": [
161                        "https://www.linkedin.com/in/jordan-rosen-b945a147/",
162                        "https://www.zillow.com/profile/jordan-rosen",
163                        "https://www.compass.com/agents/jordan-rosen/",
164                        "https://www.instagram.com/jordan.rosen.dallas/",
165                        "https://www.facebook.com/jordanrosendallas/"
166                    ]
167                },
168                {
169                    "@type": "Person",
170                    "@id": "https://rosengroupdallas.com/#jonathan-rosen",
171                    "name": "Jonathan Rosen",
172                    "jobTitle": "Principal",
173                    "image": "https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/d3949d84-cf36-42aa-8aca-4b533eaf63cd",
174                    "url": "https://rosengroupdallas.com/agents/jonathan-rosen",
175                    "telephone": "(214)927-1313",
176                    "email": "[email protected]",
177                    "worksFor": {
178                        "@id": "https://rosengroupdallas.com/#realEstateAgent"
179                    },
180                    "sameAs": [
181                        "https://www.linkedin.com/in/jonathan-rosen-1a777752/",
182                        "https://www.compass.com/agents/jonathan-rosen/",
183                        "https://www.zillow.com/profile/Jonathan%20Rosen",
184                        "https://www.facebook.com/Jonathanrosencompassdallas/",
185                        "https://www.instagram.com/jonathan.rosen.dallas/"
186                    ]
187                }
188            ],
189            "sameAs": [
190                "https://www.facebook.com/TheRosenGroup.compass/",
191                "https://www.instagram.com/the_rosen_group/",
192                "https://www.zillow.com/profile/therosengrouptx",
193                "https://www.compass.com/agents/the-rosen-group/"
194            ],
195            "knowsAbout": [
196                "Luxury Real Estate",
197                "Residential Sales",
198                "New Development",
199                "High-End Property Sales",
200                "Luxury Home Buying",
201                "Luxury Home Selling",
202                "Relocation Services"
203            ]
204        };
205        injectSchema(realEstateAgentSchema);
206    }
207</script>
207
208
209    <!-- GOOGLE TRANSLATE STYLES are moved to external CSS -->
210</head>
211<body>
212    <div id="google_translate_element" style="display: none"></div>
213
214        <nav id="global-navbar" data-el-id="3242b8f0-253e-46f7-b814-162ccf958ec2">
215            
216<header class="header js-header" style="--textColor: rgba(255, 255, 255, 1); --backgroundColor: rgba(26, 26, 26, 1);">
217  <div class="header-container header-container--center">
218    
219
220    <ul class="header-navigation">
221      <li class="header-navigation__item header-navigation__item--sub-nav">
222        
223        <a class="header-navigation__link js-subnav-opener"   style="--delay: 0s">Properties</a>
224          
225          <ul class="header-navigation__sub-nav">
226              <li class="header-navigation__sub-nav-item">
227                <a class="header-navigation__sub-nav-link"  href="/properties/sale" >Featured Properties</a>
228              </li>
229              <li class="header-navigation__sub-nav-item">
230                <a class="header-navigation__sub-nav-link"  href="/properties/sold" >Notable Sales</a>
231              </li>
232          </ul>
233      </li>
234      <li class="header-navigation__item ">
235        
236        <a class="header-navigation__link "  href="/home-search/listings"  style="--delay: 0.1s">Home Search</a>
237      </li>
238      <li class="header-navigation__item ">
239        
240        <a class="header-navigation__link "  href="/home-valuation"  style="--delay: 0.2s">Home Valuation</a>
241      </li>
242    </ul>
243
244    <a href="/" class="header-logo">
245      <img src="https://media-production.lp-cdn.com/media/bc58bcb6-b3ee-4667-a535-648a20928b9e" alt="Company logo" class="header-logo__img header-logo__img--dark">
246      <img src="https://media-production.lp-cdn.com/media/bdbf0277-23b2-4b0e-9bce-4a1626da0f44" alt="Company logo" class="header-logo__img header-logo__img--light">
247    </a>
248
249    <div class="header-buttons-wrapper">
250      <ul class="header-navigation">
251        <li class="header-navigation__item ">
252          <a class="header-navigation__link"  href="/neighborhoods"  style="--delay: 0s">Neighborhoods</a>
253        </li>
254        <li class="header-navigation__item ">
255          <a class="header-navigation__link"  href="/team"  style="--delay: 0.1s">Our Team</a>
256        </li>
257      </ul>
258              <a
259                  role="button"
260                  data-type="CONTACT_US"
261                  class="header-contact-btn lp-btn button-style-2"
262                  
263                  
264                  
265                  
266                  
267                  >
268                          Contact Us
269                  </a>
270
271
272
273      <button type="button" class="header-hamburger-btn lp-btn hamburger-component hamburger js-sidemenu-opener"
274        title="Toggle Sidemenu"></button>
275    </div>
276  </div>
277
278</header>
279
280        </nav>
281        <div id="global-sidemenu" class="sidemenu" data-el-id="033c3235-a8bd-45bf-a4a8-96977e33190d">
282            
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298<button class="sidemenu-close toggle close lp-btn lp-icon link-icon--plus"></button>
299
300
301<div class="sidemenu-wrapper " style="--navItemNumberColor: rgba(129, 126, 97, 1);">
302    <div class="sidemenu-nav-holder ">
303        <ul class="sidemenu-navigation ">
304                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
305                            <a  
306                                href="/" 
307                                class="sidemenu-navigation__link">Home</a>
308                
309                    </li>
310                  
311                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
312                            <a  
313                                href="/team" 
314                                class="sidemenu-navigation__link">Meet the Team</a>
315                
316                    </li>
317                  
318                    <li class="sidemenu-navigation__item js-idemenu-navigation-item sidemenu-navigation__item--sub-nav">
319                            <span class="sidemenu-navigation__link sidemenu-navigation__link--sub-nav sidemenu-navigation__link--sub-nav-active js-sub-nav-opener lp-icon">
320                                Properties
321                            </span>
322                
323                        <ul class="sidemenu-navigation-sub-nav lp-a">
324                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/properties/sale" class="sidemenu-navigation-sub-nav__link">Featured Properties</a></li>
325                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/properties/sold" class="sidemenu-navigation-sub-nav__link">Notable Sales</a></li>
326                        </ul>
327                    </li>
328                  
329        </ul>
330
331        <ul class="sidemenu-navigation ">
332                    <li class="sidemenu-navigation__item js-idemenu-navigation-item sidemenu-navigation__item--sub-nav">
333                            <span class="sidemenu-navigation__link sidemenu-navigation__link--sub-nav sidemenu-navigation__link--sub-nav-active js-sub-nav-opener lp-icon">
334                                Homes for Sale
335                            </span>
336                
337                        <ul class="sidemenu-navigation-sub-nav lp-a">
338                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/neighborhoods/highland-park" class="sidemenu-navigation-sub-nav__link">Highland Park, TX</a></li>
339                        </ul>
340                    </li>
341                  
342                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
343                            <a  
344                                href="/home-search/listings" 
345                                class="sidemenu-navigation__link">Home Search</a>
346                
347                    </li>
348                  
349                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
350                            <a  
351                                href="/home-valuation" 
352                                class="sidemenu-navigation__link">Home Valuation</a>
353                
354                    </li>
355                  
356        </ul>
357
358        <ul class="sidemenu-navigation ">
359                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
360                            <a  
361                                href="/neighborhoods" 
362                                class="sidemenu-navigation__link">Neighborhoods</a>
363                
364                    </li>
365                  
366                    <li class="sidemenu-navigation__item js-idemenu-navigation-item sidemenu-navigation__item--sub-nav">
367                            <span class="sidemenu-navigation__link sidemenu-navigation__link--sub-nav sidemenu-navigation__link--sub-nav-active js-sub-nav-opener lp-icon">
368                                Resources
369                            </span>
370                
371                        <ul class="sidemenu-navigation-sub-nav lp-a">
372                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/buyers" class="sidemenu-navigation-sub-nav__link">Buyer&#x27;s Guide</a></li>
373                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/sellers" class="sidemenu-navigation-sub-nav__link">Seller&#x27;s Guide</a></li>
374                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/blog" class="sidemenu-navigation-sub-nav__link">Blog</a></li>
375                        </ul>
376                    </li>
377                  
378                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
379                            <a  
380                                href="/testimonials" 
381                                class="sidemenu-navigation__link">Testimonials</a>
382                
383                    </li>
384                  
385        </ul>
386
387        <ul class="sidemenu-navigation ">
388                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
389                            <a  
390                                href="/press" 
391                                class="sidemenu-navigation__link">Press & Media</a>
392                
393                    </li>
394                  
395                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
396                            <a  
397                                href="/exclusive-inventory" 
398                                class="sidemenu-navigation__link">Exclusive Inventory</a>
399                
400                    </li>
401                  
402                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
403                            <a  
404                                href="/contact" 
405                                class="sidemenu-navigation__link">Contact Us</a>
406                
407                    </li>
408                  
409        </ul>
410    </div>
411
412    <div class="sidemenu-footer">
413        <div class="sidemenu__info-group sidemenu__col">
414                    <div class="sidemenu__section-content">
415                                <div class="sidemenu__col-content">
416                                <p class="sidemenu__col-title">Contact</p><div class="sidemenu__col-description lp-a">
417                                        <p class="sidemenu__col-agent-name">The Rosen Group</p>
418                                        <a href="tel:2149271313" class="sidemenu__col-phone">(214) 927-1313</a>
419                                        <a href="/cdn-cgi/l/email-protection#2b4144454a5f434a45055944584e456b4844465b4a585805484446" class="sidemenu__col-email"><span class="__cf_email__" data-cfemail="503a3f3e312438313e7e223f23353e10333f3d203123237e333f3d">[email&#160;protected]</span></a>
420                                    </div>
421                                </div>
422                                <div class="sidemenu__col-content">
423                                <p class="sidemenu__col-title">Office</p>                <div class="sidemenu__col-description lp-a sidemenu__col-description--pre-line"><p>5960 Berkshire Ln Ste 700<br>Dallas TX 75225</p></div>
424                                        
425                                </div>
426                    </div>
427                    
428        </div>
429
430            <div class="sidemenu-socials-block">
431                <p class="sidemenu__col-title">Follow Us</p>
432                    <ul class="lp-socials social_icons-style-1">
433                    
434                            <li>
435                              <a
436                                href="https://www.facebook.com/TheRosenGroup.compass/"
437                                class="lp-socials__link"
438                                data-wow-delay="0s"
439                                target="_blank"
440                                aria-label="FACEBOOK"
441                              >
442                                  <span class="lp-i lp-i--facebook" aria-hidden="true"></span>
443                              </a>
444                            </li>
445                            <li>
446                              <a
447                                href="https://www.instagram.com/https://www.instagram.com/the_rosen_group/"
448                                class="lp-socials__link"
449                                data-wow-delay="0.1s"
450                                target="_blank"
451                                aria-label="INSTAGRAM"
452                              >
453                                  <span class="lp-i lp-i--instagram" aria-hidden="true"></span>
454                              </a>
455                            </li>
456                            <li>
457                              <a
458                                href="https://www.zillow.com/profile/therosengrouptx"
459                                class="lp-socials__link"
460                                data-wow-delay="0.2s"
461                                target="_blank"
462                                aria-label="ZILLOW"
463                              >
464                                  <span class="lp-i lp-i--zillow" aria-hidden="true"></span>
465                              </a>
466                            </li>
467                            <li>
468                              <a
469                                href="https://www.compass.com/agents/the-rosen-group/"
470                                class="lp-socials__link"
471                                data-wow-delay="0.3s"
472                                target="_blank"
473                                aria-label="BROKERAGE"
474                              >
475                                <svg width="20" height="20" viewBox="0 0 60.14 60"><path d="M29.86 0a30 30 0 00.28 60 30.03 30.03 0 0030-30A30 30 0 0029.86 0zm.28 8a22.03 22.03 0 0122 22 22 22 0 11-22-22zm7.18 9.17l-20 20 5.65 5.66 20-20z" /></svg>
476                              </a>
477                            </li>
478                      </ul>            </div>
479    </div>
480</div>
481        </div>
482        <div  id="global-mobile-contact" class="mobile-contact-wrapper" data-el-id="4c08210d-8fa1-4e4b-ad13-3209994c2ceb">
483            <div class="floating-contact-button">
484  <div class="floating-contact-button__btn-holder js-btn-holder"
485    style="--backgroundColor: rgba(234, 231, 224, 1); --textColor: rgba(54, 48, 49, 1);  --pillTextColor: rgba(255, 255, 255, 1); --pillBackgroundColor: rgba(189, 175, 158, 1);">
486    <button type="button" class="floating-contact-button__btn-connect js-btn-connect lp-icon lp-ico-arrow-top">Contact Us</button>
487  </div>
488
489  <div class="floating-contact-button-pop-up js-pop-up" style="--backgroundColor: rgba(234, 231, 224, 1); --textColor: rgba(54, 48, 49, 1);">
490      <form class="floating-contact-button-pop-up__form js-form" data-type="contact-form">
491          <h3 class="floating-contact-button-pop-up__title">Leave a Message</h3>
492
493        <div class="floating-contact-button-pop-up__input-group lp-input-group">
494          <input id="__FullName" type="text" name="name"
495            class="lp-input js-input-name lp-input--light"
496            required placeholder="Full Name">
497        </div>
498        
499        <div class="floating-contact-button-pop-up__input-group lp-input-group">
500          <input id="__Email" type="email" name="email"
501            class="lp-input js-email-input "
502            required placeholder="Email">
503        </div>
504        
505        <div class="floating-contact-button-pop-up__input-group lp-input-group">
506          <input class="lp-input " type="tel" placeholder="Phone" id="__Phone"
507            name="phone" required>
508        </div>
509        
510        <select name="interest" id="-field-interest"
511          class="floating-contact-button-pop-up__input-group lp-input js-select " required>
512          <option value="" selected disabled data-label="Interest">Interested in...</option>
513          <option value="Selling &amp; Buying">Selling &amp; Buying</option>
514          <option value="Selling">Selling</option>
515          <option value="Buying">Buying</option>
516          <option value="Renting">Renting</option>
517          <option value="Other">Other</option>
518          <label for="-field-interest" class="lp-label sr-only">Interest</label>
519        </select>
520        
521        <div class="floating-contact-button-pop-up__input-group lp-input-group">
522          <textarea name="message" rows="4" id="__Message" class="lp-in
522put "
523            placeholder="Message" required></textarea>
524        </div>
525        
526        <div class="lp-disclaimer">  <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label>
527  <label class='lp-tcr-content'>
528    <span class='lp-tcr-checkbox'>
529      <input
530        type='checkbox'
531        id='-termsAccepted'
532        name='termsAccepted'
533        oninvalid="this.setCustomValidity('Please accept the terms and conditions')"
534        oninput="this.setCustomValidity('')"
535        required
536      /></span>
537    <span class='lp-tcr-message'>
538      
539        I agree to be contacted by
540        The Rosen Group
541        via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance.
542        You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary.
543        <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>.
544    </span>
545  </label>
546
547</div>
548        
549        <button type="submit" class="floating-contact-button-pop-up__btn-submit lp-btn lp-btn--mob-full-width ">Submit</button>
550
551        <div class="lp-h-pot">
552          <input id="__newsSignMiddleName" name="middleName" value="" autocomplete="off"
553            tabindex="-1">
554        </div>
555        <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" />
556        <input type="hidden" name="button_text" value="Contact Us">
557      </form>
558
559      <div class="floating-contact-button-pop-up__success js-success">
560          <h3 class="floating-contact-button-pop-up__title">Thank you for your message. We will be in touch with you shortly.</h3>
561
562                <a
563                    href="/properties/sale"
564                    
565                    class="lp-btn floating-contact-button-pop-up__success-btn"
566                    
567                    
568                    
569                    
570                    
571                    >
572                            Explore Our Properties
573                    </a>
574      </div>
575    <button type="button" class="floating-contact-button-pop-up__close js-close-btn lp-icon"></button>
576  </div>
577  
578</div>
579
580        </div>
581        <section  class="image-section is-font-color-light is-background-color-light" id="section-a47ed492-3b7c-468d-99c5-27dfd2078c71" data-el-id="d1637c2a-e69e-42d9-8d39-7fe5c68c7ee9">
582    <div class="custom-intro js-scroll-section custom-intro__horizon-center custom-intro__vertical-bottom"
583    style="
584        --titleColor: rgba(255, 255, 255, 1);
585        --boxBackColor: rgba(255, 255, 255, 1);
586        --backOverlayColor: rgba(255, 255, 255, 1);
587    "
588    >
589        <div class="custom-intro__overlay"></div>
590    <div class="custom-intro__container">
591        <div class="custom-intro__content-wrapper">
592                <div class="custom-intro__content-box">
593                        <h1 class="custom-intro__title ">Featured Properties</h1>
594                    <div class="custom-intro__scroll-btn jsScrollBtn"></div>
595                </div>
596        </div>
597    </div>
598</div>
599
600</section>
601<section id="section-c20b1af6-e3e3-4d23-9029-d843644debe8"  class="solid-section is-font-color-dark is-background-color-light" data-el-id="194f7b4b-fe39-4449-93f2-7e4994a1baa6">
vendor: 111 bytes, lines 601-602
601
602  <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
602<script src="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/15.8.1/nouislider.min.js" integrity="sha512-g/feAizmeiVKSwvfW0Xk3ZHZqv5Zs8PEXEBKzL15pM0SevEvoX8eJ4yFWbqakvRj7vtw1Q97bLzEpG2IVWX0Mg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
602
603<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/15.8.1/nouislider.css" integrity="sha512-MKxcSu/LDtbIYHBNAWUQwfB3iVoG9xeMCm32QV5hZ/9lFaQZJVaXfz9aFa0IZExWzCpm7OWvp9zq9gVip/nLMg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
604
605
606<script type="text/x-handlebars-template" class="propertyItem pagination-script">  <a href="{{#if fromMLS}}/home-search/listings/{{id}}{{else}}/properties/{{slug}}{{/if}}" class="properties-list-item">
607    <div class="properties-list-item__image-container lp_animation-img-zoom">
608      <span class="properties-list-item__tag lp-tag">{{formatPropertyStatus status false (hbFormatDate soldDate)}}</span>
609        {{#if openHouseHours}}
610          <span class="properties-list-item__open-houses lp-tag">Open House: {{openHouseHours}}</span>
611        {{/if}}
612      {{{mediaImage media.[0] alt=name width="400" height="270" class="properties-list-item__image"}}}
613    </div>
614
615    <div class="properties-list-item__info">
616
617      <div class="properties-list-item__top-block">
618        <p class="properties-list-item__address">{{#if privateAddress}}Private Address{{else}}{{fullAddress}}{{/if}}</p>
619        <h4 class="properties-list-item__price">{{formatPropertyPrice this}}</h4>
620
621        {{#if (or bedroomCount livingSpaceSize bathCount fullBathCount halfBathCount threeQuarterBathCount)}}
622          <div class="properties-list-item__icons-row">
623            {{#if bedroomCount}}
624              <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">{{bedroomCount}} Bed{{#numCompare bedroomCount 1 ">"}}s{{/numCompare}}</div>
625            {{/if}}
626
627              {{#if bathCount}}
628                <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">{{bathCount}} Bath{{#numCompare bathCount 1 ">"}}s{{/numCompare}}</div>
629              {{/if}}
630
631            {{#if livingSpaceSize}}
632              <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">{{lpFormatNumber livingSpaceSize}} {{formatAreaUnit livingSpaceUnits}}</div>
633            {{/if}}
634          </div>
635        {{/if}}
636      </div>
637
638      <div class="properties-list-item__bottom-block">
639        {{#if description}}
640          <p class="properties-list-item__bottom-label">Property description</p>
641          <p class="properties-list-item__description">{{{truncate (striptags description) 200 '...'}}}</p>
642        {{/if}}
643        <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
644      </div>
645
646    </div>
647  </a>
648</script>
648
649
650  <div class="properties-list lp-vertical-paddings" style="--titleColor: rgba(112, 112, 112, 1);">
651    
652
653
654      <span class="properties-list__show-btn show-btn lp-btn js-show-filter"><span>Show Filters <span class="properties-list__selected-filters js-selected-filters">0</span></span> <span class="properties-list__btn-icon lp-icon lp-icon-arrow"></span></span>
655      <span class="properties-list__hide-btn hide-btn lp-btn js-hide-filter">Hide Filters <span class="properties-list__btn-icon lp-icon lp-icon-arrow"></span></span>
656
657      <div class="properties-list__filters filters search-container" data-fetch-neighborhoods="true" data-fetch-rental-rates="true" aria-labelledby="filtersTitle">
658        <input name="companyId" type="hidden" value="116d6abd-55d8-410f-b7f3-bdd7f6c5b727" />
659
660        <div class="properties-list__input-row">
661          <div class="properties-list__input-group properties-list__input-group--search lp-input-group lp-input-group--search lp-input--with-icon">
662            <input type="text" class="properties-list__input lp-input" placeholder="Search by address" id="section-c20b1af6-e3e3-4d23-9029-d843644debe8-search-input" name="search-input">
663            <span class="properties-list__input-icon lp-icon lp-input-icon lp-input-icon--search"></span>
664          </div>
665
666          <div class="properties-list__input-group properties-list__input-group--neighborhood lp-input-group js-neighborhoods-select-holder">
667            <select id="section-c20b1af6-e3e3-4d23-9029-d843644debe8-neighborhood" name="neighborhood-select" class="properties-list__dropdown-select lp-input dropdown-select js-neighborhoods-select">
668              <option value="" selected disabled hidden data-label="Select neighborhood">Select neighborhood</option>
669            </select>
670            <label class="properties-list__label lp-label" for="section-c20b1af6-e3e3-4d23-9029-d843644debe8-neighborhood" style="display: none">Select neighborhood</label>
671          </div>
672
673          <div class="properties-list__input-group properties-list__input-group--rental-rates lp-input-group js-rental-rates-select-holder">
674            <select id="section-c20b1af6-e3e3-4d23-9029-d843644debe8-seasonal-price" name="seasonal-price" class="properties-list__dropdown-select lp-input dropdown-select js-rental-rates-select">
675              <option value="" selected disabled hidden data-label="Rental availability">Rental availability</option>
676            </select>
677            <label class="properties-list__label lp-label" for="section-c20b1af6-e3e3-4d23-9029-d843644debe8-seasonal-price" style="display: none">Rental availability</label>
678          </div>
679        </div>
680
681        <div class="properties-list-range__row">
682          
683          <div class="properties-list-range__slider-group">
684            <div class="properties-list-range__block">
685              <span class="properties-list-range__label">Sales Price</span>
686              <div class="properties-list-range__range">
687                <span class="js-price-slider-min properties-list-range__min"></span>
688                <span class="js-price-slider-max properties-list-range__max"></span>
689                <div class="js-price-slider" data-min="500000"  data-max="50000000"  data-step="100000"></div>
690              </div>
691            </div>
692            <div class="properties-list-range__block">
693              <span class="properties-list-range__label paragraph--14">Sq. Ft.</span>
694              <div class="properties-list-range__range">
695                <span class="js-area-slider-min properties-list-range__min"></span>
696                <span class="js-area-slider-max properties-list-range__max"></span>
697                <div class="js-area-slider" data-min="500" data-max="10000" data-step="500"></div>
698              </div>
699            </div>
700          </div>
701
702          <div>
703            <button type="button" class="properties-list-range__reset js-reset" aria-label="Clear search">Clear <span class="lp-icon"></span></button>
704          </div>
705        </div>
706      </div>
707  
708      <div class="properties-list__collection properties-list__collection--grid data-container">
709            <a href="/properties/6815-pemberton-drive-dallas-tx-us-75230-21369091" class="properties-list-item">
710              <div class="properties-list-item__image-container lp_animation-img-zoom">
711                <span class="properties-list-item__tag lp-tag">Pending</span>
712                <img src="https://dlajgvw9htjpb.cloudfront.net/cms/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/21369091/-5403336985861414639.jpg" class="properties-list-item__image" height="270" width="400" alt="White two-story home with peaked gables, an arched entry, and landscaped front lawn at dusk." loading="lazy">
713              </div>
714          
715              <div class="properties-list-item__info">
716          
717                <div class="properties-list-item__top-block">
718                  <p class="properties-list-item__address">6815 Pemberton Drive, Dallas, TX 75230</p>
719                  <h4 class="properties-list-item__price">$4,450,000</h4>
720          
721                    <div class="properties-list-item__icons-row">
722                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">5 Beds</div>
723          
724                          <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">7 Baths</div>
725          
726                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">7,021 Sq.Ft.</div>
727                    </div>
728                </div>
729          
730                <div class="properties-list-item__bottom-block">
731                    <p class="properties-list-item__bottom-label">Property description</p>
732                    <p class="properties-list-item__description">An exceptional expression of luxury in the heart of Preston Hollow, this architecturally striking home by Jessica Koltun Home embodies elevated design, sophisticated scale, and effortless livabilit...</p>
733                  <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
734                </div>
735          
736              </div>
737            </a>
738            <a href="/properties/6034-park-lane-dallas-tx-us-75225-21378839" class="properties-list-item">
739              <div class="properties-list-item__image-container lp_animation-img-zoom">
740                <span class="properties-list-item__tag lp-tag">For Sale</span>
741                <img src="https://dlajgvw9htjpb.cloudfront.net/cms/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/21378839/-6006850327597780291.jpg" class="properties-list-item__image" height="270" width="400" alt="Stone-and-brick house with dormer windows, a landscaped lawn, and a brick-edged front walkway." loading="lazy">
742              </div>
743          
744              <div class="properties-list-item__info">
745          
746                <div class="properties-list-item__top-block">
747                  <p class="properties-list-item__address">6034 Park Lane, Dallas, TX 75225</p>
748                  <h4 class="properties-list-item__price">$4,295,000</h4>
749          
750                    <div class="properties-list-item__icons-row">
751                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">5 Beds</div>
752          
753                          <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">7 Baths</div>
754          
755                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">6,422 Sq.Ft.</div>
756                    </div>
757                </div>
758          
759                <div class="properties-list-item__bottom-block">
760                    <p class="properties-list-item__bottom-label">Property description</p>
761                    <p class="properties-list-item__description">Set in the heart of coveted Preston Hollow, this beautiful French-inspired residence blends timeless architecture with refined, modern living. A grand, expansive foyer flows effortlessly into elega...</p>
762                  <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
763                </div>
764          
765              </div>
766            </a>
767            <a href="/properties/3608-n-fitzhugh-avenue-dallas-tx-us-75204-21281581" class="properties-list-item">
768              <div class="properties-list-item__image-container lp_animation-img-zoom">
769                <span class="properties-list-item__tag lp-tag">For Sale</span>
770                <img src="https://dlajgvw9htjpb.cloudfront.net/cms/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/21281581/8029129852244187017.jpg" class="properties-list-item__image" height="270" width="400" alt="Open-plan kitchen and dining area with a stone island and sliding doors to a courtyard." loading="lazy">
771              </div>
772          
773              <div class="properties-list-item__info">
774          
775                <div class="properties-list-item__top-block">
776                  <p class="properties-list-item__address">3608 N Fitzhugh Avenue, Dallas, TX 75204</p>
777                  <h4 class="properties-list-item__price">$2,149,000</h4>
778          
779                    <div class="properties-list-item__icons-row">
780                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">3 Beds</div>
781          
782                          <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">4 Baths</div>
783          
784                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">3,055 Sq.Ft.</div>
785                    </div>
786                </div>
787          
788                <div class="properties-list-item__bottom-block">
789                    <p class="properties-list-item__bottom-label">Property description</p>
790                    <p class="properties-list-item__description">Welcome to the epitome of modern elegance and serene living at 3608 N Fitzhugh Avenue, Dallas. This newly constructed two-story duplex is a harmonious blend of Japanese and Scandinavian design prin...</p>
791                  <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
792                </div>
793          
794              </div>
795            </a>
796            <a href="/properties/7842-caruth-court-dallas-tx-us-75225-21368073" class="properties-list-item">
797              <div class="properties-list-item__image-container lp_animation-img-zoom">
798                <span class="properties-list-item__tag lp-tag">For Sale</span>
799                <img src="https://dlajgvw9htjpb.cloudfront.net/cms/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/21368073/-5357995847786016414.jpg" class="properties-list-item__image" height="270" width="400" alt="Red brick home with an arched entry, warmly lit windows, and mature trees at dusk." loading="lazy">
800              </div>
801          
802              <div class="properties-list-item__info">
803          
804                <div class="properties-list-item__top-block">
805                  <p class="properties-list-item__address">7842 Caruth Court, Dallas, TX 75225</p>
806                  <h4 class="properties-list-item__price">$1,949,000</h4>
807          
808                    <div class="properties-list-item__icons-row">
809                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">3 Beds</div>
810          
811                          <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">4 Baths</div>
812          
813                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">2,567 Sq.Ft.</div>
814                    </div>
815                </div>
816          
817                <div class="properties-list-item__bottom-block">
818                    <p class="properties-list-item__bottom-label">Property description</p>
819                    <p class="properties-list-item__description">Nestled within the highly sought-after Caruth Homeplace neighborhood, 7842 Caruth Court is a beautifully reimagined single-level residence thoughtfully updated by Heritage Blue. Rarely does a fully...</p>
820                  <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
821                </div>
822          
823              </div>
824            </a>
825            <a href="/properties/5539-ridgedale-avenue-dallas-tx-us-75206-21388982" class="properties-list-item">
826              <div class="properties-list-item__image-container lp_animation-img-zoom">
827                <span class="properties-list-item__tag lp-tag">For Sale</span>
828                <img src="https://dlajgvw9htjpb.cloudfront.net/cms/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/21388982/6654958448550647900.jpg" class="properties-list-item__image" height="270" width="400" alt="Brick home with an arched entry and warmly lit windows, framed by mature trees at dusk." loading="lazy">
829              </div>
830          
831              <div class="properties-list-item__info">
832          
833                <div class="properties-list-item__top-block">
834                  <p class="properties-list-item__address">5539 Ridgedale Avenue, Dallas, TX 75206</p>
835                  <h4 class="properties-list-item__price">$1,399,000</h4>
836          
837                    <div class="properties-list-item__icons-row">
838                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">4 Beds</div>
839          
840                          <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">4 Baths</div>
841          
842                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">3,087 Sq.Ft.</div>
843                    </div>
844                </div>
845          
846                <div class="properties-list-item__bottom-block">
847                    <p class="properties-list-item__bottom-label">Property description</p>
848                    <p class="properties-list-item__description">Welcome to the most charming, quintessential Tudor in coveted Greenland Hills, just one block from Lower Greenville. This reimagined home was expanded in 2015 and features two living spaces, four b...</p>
849                  <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
850                </div>
851          
852              </div>
853            </a>
854            <a href="/properties/6208-jacqueline-drive-plano-tx-us-75024-21366088" class="properties-list-item">
855              <div class="properties-list-item__image-container lp_animation-img-zoom">
856                <span class="properties-list-item__tag lp-tag">For Sale</span>
857                <img src="https://dlajgvw9htjpb.cloudfront.net/cms/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/21366088/8322953077925010852.jpg" class="properties-list-item__image" height="270" width="400" alt="Two-story brick home framed by mature trees, with a landscaped entry and pink sunset sky." loading="lazy">
858              </div>
859          
860              <div class="properties-list-item__info">
861          
862                <div class="properties-list-item__top-block">
863                  <p class="properties-list-item__address">6208 Jacqueline Drive, Plano, TX 75024</p>
864                  <h4 class="properties-list-item__price">$1,149,000</h4>
865          
866                    <div class="properties-list-item__icons-row">
867                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">4 Beds</div>
868          
869                          <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">4 Baths</div>
870          
871                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">4,206 Sq.Ft.</div>
872                    </div>
873                </div>
874          
875                <div class="properties-list-item__bottom-block">
876                    <p class="properties-list-item__bottom-label">Property description</p>
877                    <p class="properties-list-item__description">Nestled in the highly sought-after Avignon Windhaven community of West Plano, this stunning custom home redefines luxury living. Spanning over 4,000 square feet, every inch of this property exudes ...</p>
878                  <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
879                </div>
880          
881              </div>
882            </a>
883            <a href="/properties/4133-maison-ridge-dallas-tx-us-75219-21400443" class="properties-list-item">
884              <div class="properties-list-item__image-container lp_animation-img-zoom">
885                <span class="properties-list-item__tag lp-tag">For Sale</span>
886                <img src="https://dlajgvw9htjpb.cloudfront.net/cms/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/21400443/3868480847640068679.jpg" class="properties-list-item__image" height="270" width="400" alt="4133 Maison Ridge" loading="lazy">
887              </div>
888          
889              <div class="properties-list-item__info">
890          
891                <div class="properties-list-item__top-block">
892                  <p class="properties-list-item__address">4133 Maison Ridge, Dallas, TX 75219</p>
893                  <h4 class="properties-list-item__price">$685,000</h4>
894          
895                    <div class="properties-list-item__icons-row">
896                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">3 Beds</div>
897          
898                          <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">3 Baths</div>
899          
900                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">2,100 Sq.Ft.</div>
901                    </div>
902                </div>
903          
904                <div class="properties-list-item__bottom-block">
905                    <p class="properties-list-item__bottom-label">Property description</p>
906                    <p class="properties-list-item__description">Anchored by a timeless brick facade and sweeping rooftop views of Old Parkland, Uptown, and Downtown, this meticulously kept, single-family home offers private living at its finest. Built in 2022 b...</p>
907                  <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
908                </div>
909          
910              </div>
911            </a>
912            <a href="/properties/3606-prescott-avenue-dallas-tx-us-75219-21346115" class="properties-list-item">
913              <div class="properties-list-item__image-container lp_animation-img-zoom">
914                <span class="properties-list-item__tag lp-tag">For Sale</span>
915                <img src="https://dlajgvw9htjpb.cloudfront.net/cms/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/21346115/55685643900262748.jpg" class="properties-list-item__image" height="270" width="400" alt="Open-plan living room with a gray sectional, fireplace, and kitchen beyond white columns." loading="lazy">
916              </div>
917          
918              <div class="properties-list-item__info">
919          
920                <div class="properties-list-item__top-block">
921                  <p class="properties-list-item__address">3606 Prescott Avenue, Dallas, TX 75219</p>
922                  <h4 class="properties-list-item__price">$650,000</h4>
923          
924                    <div class="properties-list-item__icons-row">
925                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">2 Beds</div>
926          
927                          <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">3 Baths</div>
928          
929                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">2,109 Sq.Ft.</div>
930                    </div>
931                </div>
932          
933                <div class="properties-list-item__bottom-block">
934                    <p class="properties-list-item__bottom-label">Property description</p>
935                    <p class="properties-list-item__description">Designed for the way people live today, this one-of-a-kind multi-level residence delivers sophisticated design and exceptional flexibility in one of Dallas' most connected locations. Every level ha...</p>
936                  <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
937                </div>
938          
939              </div>
940            </a>
941            <a href="/properties/7418-fenton-drive-dallas-tx-us-75231-21349391" class="properties-list-item">
942              <div class="properties-list-item__image-container lp_animation-img-zoom">
943                <span class="properties-list-item__tag lp-tag">Pending</span>
944                <img src="https://dlajgvw9htjpb.cloudfront.net/cms/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/21349391/346735196638587813.jpg" class="properties-list-item__image" height="270" width="400" alt="White-brick single-story home with a large front-yard tree and warmly lit windows at dusk." loading="lazy">
945              </div>
946          
947              <div class="properties-list-item__info">
948          
949                <div class="properties-list-item__top-block">
950                  <p class="properties-list-item__address">7418 Fenton Drive, Dallas, TX 75231</p>
951                  <h4 class="properties-list-item__price">$600,000</h4>
952          
953                    <div class="properties-list-item__icons-row">
954                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">2 Beds</div>
955          
956                          <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">2 Baths</div>
957          
958                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">1,817 Sq.Ft.</div>
959                    </div>
960                </div>
961          
962                <div class="properties-list-item__bottom-block">
963                    <p class="properties-list-item__bottom-label">Property description</p>
964                    <p class="properties-list-item__description">Charming ranch-style home located in coveted University Manor. Set on wide 70 x 110 lot, this fully turn-key home provides you with easy and private living, steps away from White Rock Lake, Flag Po...</p>
965                  <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
966                </div>
967          
968              </div>
969            </a>
970            <a href="/properties/3170-carmel-street-103-dallas-tx-us-75204-21268324" class="properties-list-item">
971              <div class="properties-list-item__image-container lp_animation-img-zoom">
972                <span class="properties-list-item__tag lp-tag">For Sale</span>
973                <img src="https://dlajgvw9htjpb.cloudfront.net/cms/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/21268324/646835893471099486.jpg" class="properties-list-item__image" height="270" width="400" alt="Staged living room with a white sofa, dark armchairs, tall windows, and a staircase." loading="lazy">
974              </div>
975          
976              <div class="properties-list-item__info">
977          
978                <div class="properties-list-item__top-block">
979                  <p class="properties-list-item__address">3170 Carmel Street 103, Dallas, TX 75204</p>
980                  <h4 class="properties-list-item__price">$499,000</h4>
981          
982                    <div class="properties-list-item__icons-row">
983                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">2 Beds</div>
984          
985                          <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">3 Baths</div>
986          
987                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">2,018 Sq.Ft.</div>
988                    </div>
989                </div>
990          
991                <div class="properties-list-item__bottom-block">
992                    <p class="properties-list-item__bottom-label">Property description</p>
993                    <p class="properties-list-item__description">Immaculate walk-up condo located in vibrant Bryan Place. Laid out over three stories, this 2018 construction home displays its quality with hardwood floors throughout, oversized windows, and Carrer...</p>
994                  <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
995                </div>
996          
997              </div>
998            </a>
999            <a href="/properties/9210-san-fernando-way-dallas-tx-us-75218-21328243" class="properties-list-item">
1000              <div class="properties-list-item__image-container lp_animation-img-zoom">
1001                <span class="properties-list-item__tag lp-tag">For Lease</span>
1002                <img src="https://dlajgvw9htjpb.cloudfront.net/cms/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/21328243/55010484355441030.jpg" class="properties-list-item__image" height="270" width="400" alt="9210 San Fernando Way" loading="lazy">
1003              </div>
1004          
1005              <div class="properties-list-item__info">
1006          
1007                <div class="properties-list-item__top-block">
1008                  <p class="properties-list-item__address">9210 San Fernando Way, Dallas, TX 75218</p>
1009                  <h4 class="properties-list-item__price">$3,350/mo</h4>
1010          
1011                    <div class="properties-list-item__icons-row">
1012                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bed">3 Beds</div>
1013          
1014                          <div class="properties-list-item__icon-tag lp-tag lp-icon icon-bath">2 Baths</div>
1015          
1016                        <div class="properties-list-item__icon-tag lp-tag lp-icon icon-sqft">1,606 Sq.Ft.</div>
1017                    </div>
1018                </div>
1019          
1020                <div class="properties-list-item__bottom-block">
1021                    <p class="properties-list-item__bottom-label">Property description</p>
1022                    <p class="properties-list-item__description">Tucked into quiet and private Little Forest Hills, this beautifully remodeled cottage sits on nearly half an acre of mature, secluded grounds. A darling covered front porch welcomes you home. The e...</p>
1023                  <span class="properties-list-item__btn lp-btn button-style-1">Property Details</span>
1024                </div>
1025          
1026              </div>
1027            </a>
1028      </div>
1029
1030        <div class="pagination-container pagination-style-1"></div>      
1031  </div>
1032
1033
1034
1035</section>
1036<section id="section-b903aacd-3b0c-4042-9cd9-3066a61f407c"  class="solid-section is-font-color-dark is-background-color-light" data-el-id="5df8f995-3382-4f7b-9162-beac6ac6395b">
1037  <div class="simple-cta lp-vertical-paddings">
1038  <div class="simple-cta__container simple-cta__container--Right-aligned">
1039    <div class="simple-cta__text-block">
1040        <h2 class="simple-cta__title"><p>Find Your <strong>Dream Home</strong></p></h2>
1041      
1042    </div>
1043            <a
1044                href="/home-search/listings"
1045                
1046                class="lp-btn lp-btn--outline lp-btn--mob-full-width button-style-1"
1047                
1048                
1049                
1050                
1051                
1052                >
1053                        Browse Homes
1054                </a>
1055  </div>
1056</div>
1057</section>
1058<section  class="image-section is-font-color-light is-background-color-light" id="section-16a9df67-1fdd-4f21-b174-bf9a1c14b565" data-el-id="1ed7f92a-2189-48c5-889c-3838656da504">
1059    <div class="newsletter-contact-cta lp-vertical-paddings"
1060        style="
1061            --titleColorFirst: rgba(0, 0, 0, 1);
1062            --newsletterBack: rgba(238, 237, 233, 0.85);
1063            --titleColorSecond: rgba(255, 255, 255, 1);
1064            --workWithBack: rgba(255, 255, 255, 0);
1065            --newsletterTextColor: rgba(255, 255, 255, 1);
1066            --rightBack: rgba(235, 231, 224, 0);
1067        "
1068>
1069    <div class="newsletter-contact-cta__right-back"></div>
1070    <div class="newsletter-contact-cta__container lp-container">
1071        <div class="newsletter-contact-cta__wrapper">
1072            <div class="newsletter-contact-cta__block newsletter-contact-cta__block--touch newsletter-contact-cta__block--no-newsletter">
1073                <div class="newsletter-contact-cta__heading">
1074                            <h2 class="newsletter-contact-cta__title newsletter-contact-cta__title--touch ">Work </h2>
1075                        <div class="newsletter-contact-cta__description"><p>Ready to make your next move? The Rosen Group is here to guide you every step of the way. With a dedicated team and a client-first approach, we make buying or selling your home feel effortless. Reach out today&mdash;we&rsquo;d love to work with you.</p></div>
1076                </div>
1077                    <div class="newsletter-contact-cta__btn-wrap">
1078        <a
1079            role="button"
1080            data-type="CONTACT_US"
1081            class="newsletter-contact-cta__btn lp-btn button-style-2"
1082            
1083            
1084            
1085            
1086            
1087            >
1088                                                <span class="lp-btn__content">Contact Us</span>
1089            </a>
1090                    </div>
1091                        <div class="newsletter-contact-cta__word-divide"><span class="newsletter-contact-cta__word-word">or</span></div>
1092                        <div class="newsletter-contact-cta__call-cell">
1093                                <span class="newsletter-contact-cta__prefix-cell">Call us at</span>
1094                            <a 
1095                                href="tel:2149271313"
1096                                class="newsletter-contact-cta__link lp-a lp-link hyperlink-style-2"
1097                            >
1098                                <span class="newsletter-contact-cta__phone-wrapper lp-icon link-icon--phone"></span>
1099                                (214) 927-1313
1100                            </a>
1101                        </div>
1102            </div>
1103        </div>
1104    </div>
1105</div>
1106</section>
1107<section id="section-4668b610-d9c1-4a67-adf4-0e6b4204182e"  class="solid-section is-font-color-dark is-background-color-light" data-el-id="85dc9e17-a4c7-449c-8890-869fdc11b485">
1108  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css"/>
1109<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"></script>
vendor: 1 bytes, line 1109
1109
1110<script type="text/x-handlebars-template" class="jsIGTemplate">
1111    {{#each items}}
1112        <a href="{{permalink}}" target="_blank" class="instagram-feed__item lp_animation-img-zoom splide__slide insta-item insta-type-{{mediaType}}">
1113          <img class="instagram-feed__image" src="{{#ifEquals mediaType 'VIDEO'}}{{thumbnailUrl}}{{else}}{{mediaUrl}}{{/ifEquals}}" alt="Instagram post by @{{username}}">
1114        </a>
1115    {{/each}}
1116</script>
1116
1117
1118<div class="instagram-feed lp-vertical-paddings">
1119    <div class="instagram-feed__container" style="--titleColor: #B18463; --boxColor: rgba(238, 237, 233, 1);">
1120        <div class="instagram-feed__title-group lp-title-group">
1121            <div class="instagram-feed__icon lp-icon"></div>
1122            <p class="instagram-feed__pretitle">Follow Us On Instagram</p>
1123            <h2 class="instagram-feed__title instagram-feed__title--with-pretitle"><a href="#" target="_blank" class="instagram-feed__link jsIGLink jsIGName"></a></h2>
1124        </div>
1125
1126        <div class="instagram-feed__collection splide js-slider">
1127          <div class="splide__track">
1128              <ul class="splide__list jsIGContainer">
1129              </ul>
1130          </div>
1131        </div>
1132    </div>
1133</div>
1134
1135
1136
1137
1138</section>
1139
1140        <div id="modals" class="modals"></div>
1141        <footer id="global-footer" class="is-font-color-dark is-background-color-light" data-el-id="b8c9ffd0-3b1f-4577-96fc-828efdac86e7">
1142            
1143
1144<div class="footer"> 
1145        <div class="footer-logos-row">
1146            <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/93c039dd-150f-4a0d-88a8-5801e08da0c3" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=320/https://media-production.lp-cdn.com/media/93c039dd-150f-4a0d-88a8-5801e08da0c3 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/93c039dd-150f-4a0d-88a8-5801e08da0c3 960w" class="footer-logo" sizes="350px" alt="Compass">
1147            
1148        </div>
1149    <div class="footer-contact-row">
1150        <div class="footer-info ">
1151                    <div class="footer__col">
1152                        <h5 class="footer__section-title">The Rosen Group</h5>
1153                        <div class="footer__section-content">
1154                                <div class="footer__col-content">
1155                                    <p class="footer__col-title">Contact</p>                <div class="footer__col-description lp-a lp-pre-line"><div><a href="tel:(214) 927-1313">tel:(214) 927-1313 </a><br><a href="/cdn-cgi/l/email-protection#4d2722232c39252c23633f223e28230d2e22203d2c3e3e632e2220"><span class="__cf_email__" data-cfemail="ef8580818e9b878e81c19d809c8a81af8c80829f8e9c9cc18c8082">[email&#160;protected]</span></a></div></div>
1156                                </div>
1157                            
1158                                <div class="footer__col-content">
1159                                    <p class="footer__col-title">Office</p>                <div class="footer__col-description lp-a lp-pre-line"><p><a href="tel:2148148100">tel:(214) 814-8100 </a><br>5960 Berkshire Ln Ste 700<br>Dallas TX 75225</p></div>
1160                                </div>
1161                        </div>
1162                    </div>
1163                
1164                
1165                
1166        </div>
1167
1168            <ul class="lp-socials social_icons-style-1 footer-socials">
1169            
1170                    <li>
1171                      <a
1172                        href="https://www.facebook.com/TheRosenGroup.compass/"
1173                        class="lp-socials__link socials__link"
1174                        data-wow-delay="0s"
1175                        target="_blank"
1176                        aria-label="FACEBOOK"
1177                      >
1178                          <span class="lp-i lp-i--facebook" aria-hidden="true"></span>
1179                      </a>
1180                    </li>
1181                    <li>
1182                      <a
1183                        href="https://www.instagram.com/the_rosen_group/"
1184                        class="lp-socials__link socials__link"
1185                        data-wow-delay="0.1s"
1186                        target="_blank"
1187                        aria-label="INSTAGRAM"
1188                      >
1189                          <span class="lp-i lp-i--instagram" aria-hidden="true"></span>
1190                      </a>
1191                    </li>
1192                    <li>
1193                      <a
1194                        href="https://www.zillow.com/profile/therosengrouptx"
1195                        class="lp-socials__link socials__link"
1196                        data-wow-delay="0.2s"
1197                        target="_blank"
1198                        aria-label="ZILLOW"
1199                      >
1200                          <span class="lp-i lp-i--zillow" aria-hidden="true"></span>
1201                      </a>
1202                    </li>
1203                    <li>
1204                      <a
1205                        href="https://www.compass.com/agents/the-rosen-group/"
1206                        class="lp-socials__link socials__link"
1207                        data-wow-delay="0.3s"
1208                        target="_blank"
1209                        aria-label="BROKERAGE"
1210                      >
1211                        <svg width="20" height="20" viewBox="0 0 60.14 60"><path d="M29.86 0a30 30 0 00.28 60 30.03 30.03 0 0030-30A30 30 0 0029.86 0zm.28 8a22.03 22.03 0 0122 22 22 22 0 11-22-22zm7.18 9.17l-20 20 5.65 5.66 20-20z" /></svg>
1212                      </a>
1213                    </li>
1214              </ul>    </div>
1215    
1216
1217        <div class="footer-navigation-row">
1218            <p class="footer-navigation-title">navigation</p>
1219            
1220            <ul class="footer-navigation lp-a">
1221                    <li class="footer-navigation__item">
1222                            <a  href="/properties/sale" class="footer-navigation__link ">Portfolio</a>
1223
1224                    </li>
1225                    <li class="footer-navigation__item">
1226                            <a  href="/home-search/listings" class="footer-navigation__link ">Home Search</a>
1227
1228                    </li>
1229                    <li class="footer-navigation__item">
1230                            <a  href="/home-valuation" class="footer-navigation__link ">Home Valuation</a>
1231
1232                    </li>
1233                    <li class="footer-navigation__item">
1234                            <a  href="/neighborhoods" class="footer-navigation__link ">Neighborhoods</a>
1235
1236                    </li>
1237                    <li class="footer-navigation__item">
1238
1239                            <a data-type="CONTACT_US" type="button" role="button" class="footer-navigation__link " >Contact Us</a>
1240                    </li>
1241            </ul>
1242        </div>
1243
1244        <div class="footer-navigation-row">
1245            <p class="footer-navigation-title">useful items</p>
1246            
1247            <ul class="footer-navigation lp-a">
1248                    <li class="footer-navigation__item">
1249                            <a  href="/buyers" class="footer-navigation__link ">Buyer's Guide</a>
1250
1251                    </li>
1252                    <li class="footer-navigation__item">
1253                            <a  href="/sellers" class="footer-navigation__link ">Seller's Guide</a>
1254
1255                    </li>
1256                    <li class="footer-navigation__item">
1257                            <a  href="/testimonials" class="footer-navigation__link ">Testimonials</a>
1258
1259                    </li>
1260            </ul>
1261        </div>
1262
1263   
1264        <div class="footer-disclaimer-row">
1265            <div class="footer-disclaimer"><div class="luxury-text">
1266<p style="text-align: center;"><a class="footerlink link hyperlink-style-1" style="font-size: 14px; font-weight: normal;" href="https://d1e1jt2fj4r8r.cloudfront.net/57836748-dc71-4fea-a5d4-3da8403ab1bd/hCykOYGpu/CN%201-4-1_1.pdf" target="_blank" rel="noopener"> Texas Real Estate Commission Consumer Protection Notice </a><br><a class="footerlink link hyperlink-style-1" style="font-size: 14px; font-weight: normal;" href="https://d1e1jt2fj4r8r.cloudfront.net/116d6abd-55d8-410f-b7f3-bdd7f6c5b727/2b0bfbe5-43b2-4316-a1e5-be6a24a74782/IABS%202024.pdf" target="_blank" rel="noopener"> Texas Real Estate Commission Information About Brokerage Services </a><br><a class="footerlink link hyperlink-style-1" style="font-size: 14px; font-weight: normal;" href="https://d1e1jt2fj4r8r.cloudfront.net/938208c7-113c-4b76-96bb-f65cefa93252/pkR5n4vC6/trec.pdf" target="_blank" rel="noopener">TREC Disclaimer</a></p>
1267<p style="font-size: 12px; text-align: center;">The Rosen Group is a team of real estate agents affiliated with compass. <a class="footerlink link hyperlink-style-1" style="font-size: 12px; font-weight: normal;" href="https://www.compass.com/" target="_blank" rel="noopener">Compass</a> is a licensed real estate broker and abides by all applicable equal housing opportunity laws. All material presented herein 
1267is intended for informational purposes only. Information is compiled from sources deemed reliable but is subject to errors, omissions, changes in price, condition, sale, or withdrawal without notice. No statement is made as to accuracy of any description. All measurements and square footages are approximate. This is not intended to solicit property already listed. Nothing herein shall be construed as legal, accounting or other professional advice outside the realm of real estate brokerage.</p>
1268<p style="opacity: 1;"><img style="width: 100px; height: auto; display: block; margin-left: auto; margin-right: auto;" src="https://res.cloudinary.com/luxuryp/images/f_auto,q_auto/g5qzbyky8ifp5w0ex0ik/realtor-eho-logo-07232021-update-dark"></p>
1269</div></div>
1270            
1271            
1272        </div>
1273    
1274
1275    <div class="footer-bottom-row">
1276            <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/jnymuan6tigs629jigsz" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=320/https://media-production.lp-cdn.com/media/jnymuan6tigs629jigsz 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/jnymuan6tigs629jigsz 390w" class="footer-logo" sizes="350px" alt="">
1277
1278        <div class="footer-copyright lp-a">
1279            <div class="footer-copyright__powered">
1280                Powered by <a href="https://www.luxurypresence.com/" class="hyperlink-style-1" target="_blank">Luxury Presence</a>
1281            </div>
1282            
1283            <div class="footer-copyright__privacy">
1284                <span>Copyright © <span class="auto-year-update">2026</span></span>
1285                
1286           
1287                <a href="/terms-and-conditions" class="footer-copyright__privacy-policy">Privacy Policy</a>
1288            </div>
1289        </div>
1290    </div>
1291
1292</div>
1293
1294        </footer>
1295
1296        <div id="modal-global-contact-us" class="modal "
1297            data-el-id=""
1298            style="background-color: ;"
1299            >
1300            <div class="modal-content">
1301                
1302        
1303        <div class="contact-form-modal lp-vertical-paddings" style="--leftPanelBgColor: rgba(235, 231, 224, 1); --textColor:rgba(0, 0, 0, 1); --formBgColor: rgba(255, 255, 255, 1); --formTextColor: rgba(0, 0, 0, 1)">
1304            <div class="contact-form-modal__bg">
1305                <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/c55206eb-22ba-454e-8168-62cf305fbcef" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=320/https://media-production.lp-cdn.com/media/c55206eb-22ba-454e-8168-62cf305fbcef 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/c55206eb-22ba-454e-8168-62cf305fbcef 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/c55206eb-22ba-454e-8168-62cf305fbcef 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/c55206eb-22ba-454e-8168-62cf305fbcef 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=2560/https://media-production.lp-cdn.com/media/c55206eb-22ba-454e-8168-62cf305fbcef 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=3456/https://media-production.lp-cdn.com/media/c55206eb-22ba-454e-8168-62cf305fbcef 3456w" sizes="(min-width: 1981px) 12.2222vw, (min-width: 1025px) 424px, 100vw" class="contact-form-modal__bg-image" alt="Bright entryway with pale wood floors, a large framed mirror, and a rustic console table.">
1306            </div>
1307            <div class="contact-form-modal__close-container">
1308                <button class="contact-form-modal__close toggle close lp-btn lp-icon link-icon--plus"></button>
1309            </div>
1310            <div class="contact-form-modal__container">
1311                  <div class="contact-form-modal-details only-desktop">
1312                        <h2 class="contact-form-modal-details__title only-desktop js-contact-title">Get in</h2>
1313                        <div class="contact-form-modal-agent">
1314                            <div class="contact-form-modal-agent__contact">    
1315                                <p class="contact-form-modal-agent__name">The Rosen Group</p>
1316                                <p class="contact-form-modal-agent__phone lp-a">
1317                                  <a class="contact-form-modal-agent__link" href="tel:2149271313">(214) 927-1313</a>
1318                                </p>
1319                                <p class="contact-form-modal-agent__email lp-a">
1320                                  <a class="contact-form-modal-agent__link" href="/cdn-cgi/l/email-protection#462c292827322e27286834293523280625292b362735356825292b"><span class="__cf_email__" data-cfemail="fb9194959a8f939a95d58994889e95bb9894968b9a8888d5989496">[email&#160;protected]</span></a>
1321                                </p>
1322                            </div>
1323                            <div class="contact-form-modal-agent__contact">
1324                                <p class="contact-form-modal-agent__addres lp-pre-line">5960 Berkshire Ln Ste 700
1325                Dallas TX 75225</p>
1326                            </div>
1327                        </div>
1328                
1329                        
1330                        <div class="contact-form-modal-details__description">Dallas Real Estate Experts</div>
1331                
1332                        <div class="contact-form-modal-details__socials">
1333                            <ul class="lp-socials social_icons-style-1 contact-form-modal-details__socials-l
1333ist lp-socials">
1334                            
1335                                    <li>
1336                                      <a
1337                                        href="https://www.facebook.com/TheRosenGroup.compass/"
1338                                        class="lp-socials__link contact-form-modal-details__socials-link"
1339                                        data-wow-delay="0s"
1340                                        target="_blank"
1341                                        aria-label="FACEBOOK"
1342                                      >
1343                                          <span class="lp-i lp-i--facebook" aria-hidden="true"></span>
1344                                      </a>
1345                                    </li>
1346                                    <li>
1347                                      <a
1348                                        href="https://www.instagram.com/the_rosen_group/"
1349                                        class="lp-socials__link contact-form-modal-details__socials-link"
1350                                        data-wow-delay="0.1s"
1351                                        target="_blank"
1352                                        aria-label="INSTAGRAM"
1353                                      >
1354                                          <span class="lp-i lp-i--instagram" aria-hidden="true"></span>
1355                                      </a>
1356                                    </li>
1357                                    <li>
1358                                      <a
1359                                        href="https://www.zillow.com/profile/therosengrouptx"
1360                                        class="lp-socials__link contact-form-modal-details__socials-link"
1361                                        data-wow-delay="0.2s"
1362                                        target="_blank"
1363                                        aria-label="ZILLOW"
1364                                      >
1365                                          <span class="lp-i lp-i--zillow" aria-hidden="true"></span>
1366                                      </a>
1367                                    </li>
1368                                    <li>
1369                                      <a
1370                                        href="https://www.compass.com/agents/the-rosen-group/"
1371                                        class="lp-socials__link contact-form-modal-details__socials-link"
1372                                        data-wow-delay="0.3s"
1373                                        target="_blank"
1374                                        aria-label="BROKERAGE"
1375                                      >
1376                                        <svg width="20" height="20" viewBox="0 0 60.14 60"><path d="M29.86 0a30 30 0 00.28 60 30.03 30.03 0 0030-30A30 30 0 0029.86 0zm.28 8a22.03 22.03 0 0122 22 22 22 0 11-22-22zm7.18 9.17l-20 20 5.65 5.66 20-20z" /></svg>
1377                                      </a>
1378                                    </li>
1379                              </ul>        </div>
1380                  </div>
1381                    <div class="contact-form-modal-form">
1382                        <h2 class="contact-form-modal-form__title only-mobile js-contact-title">Get in</h2>
1383                        <form action="" class="contact-form-modal-form__form js-form" data-type="contact-form">
1384                            <div class="lp-h-pot">
1385                                  <label for="-if-middleName">Middle Name</label>
1386                                  <input id="-if-middleName" name="middleName" value="" autocomplete="off" tabindex="-1">
1387                            </div> 
1388                            <div class="contact-form-modal-form__group">
1389                                <div class="contact-form-modal-form__group-container lp-input-group">
1390                                    <input required id="-name" name="name" type="text" class="lp-input js-input-name" placeholder="Enter your full name">
1391                                    <label for="-name" class="lp-label contact-form-modal-form__label">Name</label>
1392                                </div>   
1393                                <div class="contact-form-modal-form__group-container lp-input-group">
1394                                    <input required id="-phone" name="phone" type="tel" class="lp-in
1394put" placeholder="Your phone">
1395                                    <label for="-phone" class="lp-label contact-form-modal-form__label">Phone</label>
1396                                </div>
1397                            </div>
1398                            <div class="contact-form-modal-form__group lp-input-group">
1399                                <div class="contact-form-modal-form__input-container">
1400                                    <input required id="-email" name="email" type="email" class="lp-input js-email-input" placeholder="@">
1401                                    <div class="contact-form-modal-form__error error">Enter a valid email</div>
1402                                </div>
1403                                
1404                                <label for="-email" class="contact-form-modal-form__label lp-label">Email</label>
1405                            </div>
1406                            <div class="contact-form-modal-form__group lp-input-group">
1407                                <textarea id="-message" name="message" class="contact-form-modal-form__textarea lp-input" placeholder="Type your message"></textarea>
1408                                <label for="-message" class="contact-form-modal-form__label lp-label">Your Message</label>
1409                            </div>
1410                
1411                            <div class="contact-form-modal-form__disclaimer lp-disclaimer">  <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label>
1412                  <label class='lp-tcr-content'>
1413                    <span class='lp-tcr-checkbox'>
1414                      <input
1415                        type='checkbox'
1416                        id='-termsAccepted'
1417                        name='termsAccepted'
1418                        oninvalid="this.setCustomValidity('Please accept the terms and conditions')"
1419                        oninput="this.setCustomValidity('')"
1420                        required
1421                      /></span>
1422                    <span class='lp-tcr-message'>
1423                      
1424                        I agree to be contacted by
1425                        The Rosen Group
1426                        via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance.
1427                        You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary.
1428                        <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>.
1429                    </span>
1430                  </label>
1431                
1432                </div>
1433                
1434                            <button type="submit" class="contact-form-modal-submit lp-btn lp-icon button-style-1">
1435                                <div class="contact-form-modal-submit__default">
1436                                  <span class="contact-form-modal-submit__content lp-btn__content">Send Message</span>
1437                                </div>
1438                                <div class="contact-form-modal-submit__loading">
1439                                  <span class="contact-form-modal-submit__content lp-btn__content">Sending</span>
1440                                </div>
1441                                <div class="contact-form-modal-submit__success">
1442                                  <span class="contact-form-modal-submit__content lp-btn__content">Message Sent!</span>
1443                                </div>
1444                            </button>
1445                        </form>
1446                    </div>
1447                    
1448                  <div class="contact-form-modal-details only-mobile">
1449                        <h2 class="contact-form-modal-details__title only-desktop js-contact-title">Get in</h2>
1450                        <div class="contact-form-modal-agent">
1451                            <div class="contact-form-modal-agent__contact">    
1452                                <p class="contact-form-modal-agent__name">The Rosen Group</p>
1453                                <p class="contact-form-modal-agent__phone lp-a">
1454                                  <a class="contact-form-modal-agent__link" href="tel:2149271313">(214) 927-1313</a>
1455                                </p>
1456                                <p class="contact-form-modal-agent__email lp-a">
1457                                  <a class="contact-form-modal-agent__link" href="/cdn-cgi/l/email-protection#a0cacfcec1d4c8c1ce8ed2cfd3c5cee0c3cfcdd0c1d3d38ec3cfcd"><span class="__cf_email__" data-cfemail="acc6c3c2cdd8c4cdc282dec3dfc9c2eccfc3c1dccddfdf82cfc3c1">[email&#160;protected]</span></a>
1458                                </p>
1459                            </div>
1460                            <div class="contact-form-modal-agent__contact">
1461                                <p class="contact-form-modal-agent__addres lp-pre-line">5960 Berkshire Ln Ste 700
1462                Dallas TX 75225</p>
1463                            </div>
1464                        </div>
1465                
1466                        
1467                        <div class="contact-form-modal-details__description">Dallas Real Estate Experts</div>
1468                
1469                        <div class="contact-form-modal-details__socials">
1470                            <ul class="lp-socials social_icons-style-1 contact-form-modal-details__socials-l
1470ist lp-socials">
1471                            
1472                                    <li>
1473                                      <a
1474                                        href="https://www.facebook.com/TheRosenGroup.compass/"
1475                                        class="lp-socials__link contact-form-modal-details__socials-link"
1476                                        data-wow-delay="0s"
1477                                        target="_blank"
1478                                        aria-label="FACEBOOK"
1479                                      >
1480                                          <span class="lp-i lp-i--facebook" aria-hidden="true"></span>
1481                                      </a>
1482                                    </li>
1483                                    <li>
1484                                      <a
1485                                        href="https://www.instagram.com/the_rosen_group/"
1486                                        class="lp-socials__link contact-form-modal-details__socials-link"
1487                                        data-wow-delay="0.1s"
1488                                        target="_blank"
1489                                        aria-label="INSTAGRAM"
1490                                      >
1491                                          <span class="lp-i lp-i--instagram" aria-hidden="true"></span>
1492                                      </a>
1493                                    </li>
1494                                    <li>
1495                                      <a
1496                                        href="https://www.zillow.com/profile/therosengrouptx"
1497                                        class="lp-socials__link contact-form-modal-details__socials-link"
1498                                        data-wow-delay="0.2s"
1499                                        target="_blank"
1500                                        aria-label="ZILLOW"
1501                                      >
1502                                          <span class="lp-i lp-i--zillow" aria-hidden="true"></span>
1503                                      </a>
1504                                    </li>
1505                                    <li>
1506                                      <a
1507                                        href="https://www.compass.com/agents/the-rosen-group/"
1508                                        class="lp-socials__link contact-form-modal-details__socials-link"
1509                                        data-wow-delay="0.3s"
1510                                        target="_blank"
1511                                        aria-label="BROKERAGE"
1512                                      >
1513                                        <svg width="20" height="20" viewBox="0 0 60.14 60"><path d="M29.86 0a30 30 0 00.28 60 30.03 30.03 0 0030-30A30 30 0 0029.86 0zm.28 8a22.03 22.03 0 0122 22 22 22 0 11-22-22zm7.18 9.17l-20 20 5.65 5.66 20-20z" /></svg>
1514                                      </a>
1515                                    </li>
1516                              </ul>        </div>
1517                  </div>
1518            </div>
1519        </div>
1520        
1521            </div>
1522            <button class="close lp-close" type="button" aria-label="close modal">
1523                <span class="lp-close-icon" aria-hidden="true"></span>
1524            </button>
1525        </div>
1526        <div id="qualifying-questions-modal" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="qualifying-questions-modal-title" aria-hidden="true" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.7); z-index: 1050; display: none; align-items: center; justify-content: center;">
1527          <style>
1528            #qualifying-questions-modal .custom-select-toggle {
1529              border: 1px solid #848484;
1530              border-radius: 8px;
1531              padding: 12px 16px;
1532            }
1533        
1534            #qualifying-questions-modal .custom-select-toggle.is-placeholder {
1535              color: #848484;
1536            }
1537        
1538            #qualifying-questions-modal #qualifying-questions-modal-phoneNumber::placeholder {
1539              color: #848484;
1540              opacity: 1;
1541            }
1542        
1543            #qualifying-questions-modal .disclaimer-more {
1544              display: none;
1545            }
1546        
1547            #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-more {
1548              display: inline;
1549            }
1550        
1551            #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-ellipsis {
1552              display: none;
1553            }
1554          </style>
vendor: 119 bytes, lines 1554-1555
1554
1555          <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
1555<script>
1556            function toggleDisclaimerQualifyingQuestionsModal() {
1557              const disclaimerText = document.getElementById('qualifying-questions-modal-disclaimer-text');
1558              const toggleButton = document.getElementById('qualifying-questions-modal-toggle-disclaimer');
1559        
1560              if (disclaimerText.classList.contains('collapsed')) {
1561                disclaimerText.classList.remove('collapsed');
1562                toggleButton.textContent = 'Read less';
1563                toggleButton.setAttribute('aria-expanded', 'true');
1564              } else {
1565                disclaimerText.classList.add('collapsed');
1566                toggleButton.textContent = 'Read more';
1567                toggleButton.setAttribute('aria-expanded', 'false');
1568              }
1569            }
1570          </script>
1570
1571          <div style="max-width: 400px; width: 95%; margin: 0 auto;">
1572            <div style="background: #fff; border: none; border-radius: 16px; color: black; box-shadow: none; position: relative;">
1573              <button type="button" data-dismiss="modal" aria-label="Close" style="position: absolute; right: 20px; top: 10px; font-size: 28px; font-weight: 300; color: black; opacity: 1; background: none; border: none; padding: 0; width: auto; height: auto; cursor: pointer; z-index: 10;">
1574                <span aria-hidden="true">&times;</span>
1575              </button>
1576              <div style="padding: 40px 30px 32px;">
1577                <div style="text-align: left; margin-bottom: 32px;">
1578                  <h2 id="qualifying-questions-modal-title" style="margin: 0; color: #333; font-size: 18px; line-height: 1.4; text-transform: uppercase; letter-spacing: 0.5px; font-weight: normal;">
1579                    Thanks, please provide more information to help serve you
1580                  </h2>
1581                </div>
1582                <form id="qualifying-questions-modal-form" data-type="contact-form">
1583                  <input type="hidden" name="source" value="PROFILE_UPDATE" />
1584                  <input type="hidden" name="email" value="" id="qualifying-questions-modal-email" />
1585                  <input type="hidden" name="triggerSource" id="qualifying-questions-modal-triggerSource" value="" />
1586                  <label for="qualifying-questions-modal-email" style="display:none;">
1587                    Email
1588                  </label>
1589                  <label for="qualifying-questions-modal-triggerSource" style="display:none;">
1590                    Trigger Source
1591                  </label>
1592        
1593                  <div style="margin-bottom: 20px;">
1594                    <label for="qualifying-questions-modal-phoneNumber" style="display:none;">
1595                      Phone Number
1596                    </label>
1597                    <input
1598                      type="tel"
1599                      id="qualifying-questions-modal-phoneNumber"
1600                      name="phoneNumber"
1601                      style="padding: 12px 16px; font-size: 16px; border: 1px solid #848484; border-radius: 8px; background: transparent; color: black; width: 100%; box-sizing: border-box; outline: none;"
1602                      pattern="^\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}$"
1603                      required
1604                      placeholder="Phone"
1605                      aria-label="Phone Number"
1606                      inputmode="tel"
1607                      autocomplete="tel"
1608                      onfocus="this.style.borderColor='black';"
1609                      onblur="this.style.borderColor='#848484';"
1610                    />
1611                  </div>
1612        
1613                  <div style="margin-bottom: 20px;">
1614                    <label for="qualifying-questions-modal-interest" style="display:none;">
1615                      Interest
1616                    </label>
1617                    <select
1618                      id="qualifying-questions-modal-interest"
1619                      name="interest"
1620                      required
1621                      data-label="Interest"
1622                      aria-label="Interest"
1623                      style="padding: 12px 16px; font-size: 16px; border: 1px solid #848484; border-radius: 8px; background: #fff; color: #848484; width: 100%; box-sizing: border-box; outline: none; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 16 16%22%3E%3Cpath fill=%22%23666%22 d=%22M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z%22/%3E%3C/svg%3E'); background-repeat: no-repeat; background-position: right 16px center; background-size: 16px;"
1624                      onfocus="this.style.borderColor='black'; this.style.color='black';"
1625                      onblur="this.style.borderColor='#848484'; if(this.value === '') this.style.color='#848484'; else this.style.color='black';"
1626                    >
1627                      <option value="" style="background: #fff; color: #848484;" disabled selected>Interested in...</option>
1628                      <option value="Selling & Buying" style="background: #fff; color: black;">Selling & Buying</option>
1629                      <option value="Selling" style="background: #fff; color: black;">Selling</option>
1630                      <option value="Buying" style="background: #fff; color: black;">Buying</option>
1631                      <option value="Renting" style="background: #fff; color: black;">Renting</option>
1632                      <option value="Other" style="background: #fff; color: black;">Other</option>
1633                    </select>
1634                  </div>
1635        
1636                  <div style="margin-bottom: 32px; font-size: 12px; line-height: 1.2;">
1637                    <label style='display: none;' for='qualifying-questions-modal-qualifying-questions-termsAccepted'>Opt In/Disclaimer Consent:</label>
1638                    <label class='lp-tcr-content'>
1639                      <span class='lp-tcr-checkbox'>
1640                        <input
1641                          type='checkbox'
1642                          id='qualifying-questions-modal-qualifying-questions-termsAccepted'
1643                          name='termsAccepted'
1644                          aria-describedby='qualifying-questions-modal-disclaimer-text'
1645                          oninvalid="this.setCustomValidity('Please accept the terms and conditions')"
1646                          oninput="this.setCustomValidity('')"
1647                          required
1648                        /></span>
1649                      <span class='lp-tcr-message'>
1650                        <div id="qualifying-questions-modal-disclaimer-text" class="collapsed" style="color: #848484;">
1651                          
1652                            I agree to be contacted by
1653                            <strong>The Rosen Group</strong>
1654                            via call, email, and text <span class="disclaimer-more">for real estate services. 
1655                            To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 
1656                            You can also click the unsubscribe link in the emails. 
1657                            Message and data rates may apply. Message frequency may vary.</span>
1658                            <span class="disclaimer-ellipsis">...</span>
1659                            <a href='/terms-and-conditions' target='_blank' rel='noopener noreferrer' style='text-decoration: underline;'>Privacy Policy</a>.
1660                        </div>
1661                        <button
1662                          id="qualifying-questions-modal-toggle-disclaimer"
1663                          type="button"
1664                          style="background: none; border: none; color: #848484; font-size: inherit; font-weight: bold; padding: 0; margin-top: 4px; cursor: pointer;"
1665                          aria-expanded="false"
1666                          onclick="toggleDisclaimerQualifyingQuestionsModal()"
1667                        >
1668                          Read more
1669                        </button>
1670                      </span>
1671                    </label>
1672                  </div>
1673        
1674                  <div>
1675                    <button
1676                      type="submit"
1677                      style="padding: 12px 24px; font-size: 16px; font-weight: normal; border-radius: 8px; border: 1px solid black; background: black; color: white; width: 100%; cursor: pointer; transition: all 0.2s ease; text-transform: uppercase; letter-spacing: 0.5px;"
1678                      onmouseover="this.style.background='transparent'; this.style.color='black';"
1679                      onmouseout="this.style.background='black'; this.style.color='white';"
1680                    >
1681                      Submit
1682                    </button>
1683                  </div>
1684                </form>
1685              </div>
1686            </div>
1687          </div>
1688        </div>
1689
1690    
1690<script>
1691        (function() {
1692        var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy"));
1693
1694        if ("IntersectionObserver" in window && lazyVideos.length > 0) {
1695            var lazyVideoObserver = new IntersectionObserver(function(entries, observer) {
1696            entries.forEach(function(video) {
1697                if (video.isIntersecting) {
1698                for (var source in video.target.children) {
1699                    var videoSource = video.target.children[source];
1700                    if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") {
1701                    videoSource.src = videoSource.dataset.src;
1702                    }
1703                }
1704
1705                video.target.load();
1706                video.target.classList.remove("lazy");
1707                lazyVideoObserver.unobserve(video.target);
1708                }
1709            });
1710            });
1711
1712            lazyVideos.forEach(function(lazyVideo) {
1713                lazyVideoObserver.observe(lazyVideo);
1714            });
1715        }
1716        })();
1717    </script>
1717
1718
1719        <!-- Global site tag (gtag.js) - Google Analytics -->
1720        
1720<script defer src="https://www.googletagmanager.com/gtag/js"></script>
1720
1721
1722            <!-- Google Tag Manager -->
1723            
1723<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
1724                new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
1725                j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.async=false;j.src=
1726                'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
1727            })(window,document,'script','dataLayer','GTM-T9SFQGHZ');</script>
1727
1728            <!-- End Google Tag Manager -->
1729
1730
1731        <!-- LP Tracker (divolte.js) - LP Divolte -->
1732            
1732<script>window.divolteLp=window.divolteLp||function(){(divolteLp.q=divolteLp.q||[]).push(arguments)}</script>
1732
1733        <!-- LP Tracker (eventBus) - LP EventBus -->
1734            
1734<script>window.eventBusLp=window.eventBusLp||function(){(eventBusLp.q=eventBusLp.q||[]).push(arguments)}</script>
1734
1735
1736    
1736<script>
1737        window.dataLayer = window.dataLayer || [];
1738        document.sendGoogleTagManagerEvent = function() {
1739            /* Honor GPC-enabled browsers and prevent GTM event if GPC is enabled. More details: https://global-privacy-control.glitch.me/ */
1740            if (window.navigator.globalPrivacyControl) {
1741                return;
1742            }
1743
1744            dataLayer.push(arguments);
1745        }
1746
1747        document.sendGoogleTagManagerEvent('js', new Date());
1748            document.sendGoogleTagManagerEvent('config', 'G-TGY2F7MMBF', { page: location.pathname, location: location.href });
1749        document.sendGoogleAnalyticsEvent = function(googleEvent) {
1750            document.sendGoogleTagManagerEvent('event', googleEvent.eventAction || googleEvent.hitType, {
1751                event_category: googleEvent.eventCategory,
1752                event_label: googleEvent.eventLabel,
1753                value: googleEvent.eventValue,
1754                page: googleEvent.page,
1755                location: googleEvent.location
1756            })
1757        };
1758
1759        document.addEventListener("DOMContentLoaded", function() {
1760            (function() {
1761                //If the page has an element with ID of auto-year-update the element will be populated with the current year.
1762                var date = new Date();
1763                var elements = document.getElementsByClassName('auto-year-update');
1764                var i;
1765                for (i = 0; i < elements.length; i++) {
1766                    elements[i].innerText = date.getFullYear();
1767                }
1768            })();
1769            if (window.divolteLp) {
1770                window.divolteLp('sendLpPageView', {});
1771            }
1772            if (window.eventBusLp) {
1773                window.eventBusLp('sendLpPageView', {});
1774            }
1775        });
1776    </script>
1776
1777
1778
1779    
1779<script>
1780    // Function to dynamically load a script
1781    function loadScript(url, callback) {
1782        var script = document.createElement('script');
1783        script.type = 'text/javascript';
1784        script.src = url;
1785        script.defer = true;
1786        script.async = true;
1787        script.onload = callback;
1788        document.head.appendChild(script);
1789    }
1790
1791    // Function to dynamically load CSS file
1792    function loadCSS(url) {
1793        var link = document.createElement("link");
1794        link.rel = "stylesheet";
1795        link.href = url;
1796        document.head.appendChild(link);
1797    }
1798
1799    // Global methods / variables that can be accessed by element js
1800    window.luxuryPresence = {
1801        libs: {
1802            loadJs: loadScript,
1803            loadCss: loadCSS,
1804            jsLibsMap: {
1805                paroller: {
1806                    jsSrc: 'https://d1e1jt2fj4r8r.cloudfront.net/javascript/jquery.paroller.min.js',
1807                    isLoaded: false,
1808                },
1809                ionRangeSlider: {
1810                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js',
1811                    cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css',
1812                    isLoaded: false,
1813                    requires: ['jquery'],
1814                },
1815                splide: {
1816                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/js/splide.min.js',
1817                    cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/css/splide-core.min.css',
1818                    isLoaded: false,
1819                },
1820                wow: {
1821                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js',
1822                    isLoaded: false,
1823                },
1824                jquery: {
1825                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js',
1826                    isLoaded: false,
1827                },
1828                slick: {
1829                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js',
1830                    isLoaded: false,
1831                    requires: ['jquery'],
1832                },
1833                libphonenumber: {
1834                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.11.8/libphonenumber-js.min.js',
1835                    isLoaded: false,
1836                },
1837            },
1838        },
1839    };
1840    </script>
1840
1841    
1841<script defer src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer" onload="window.luxuryPresence.libs.jsLibsMap.jquery.isLoaded = true"></script>
1841
1842    
1842<script defer src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.8/handlebars.min.js"></script>
1842
1843    
1843<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/handlebars-intl.min.js"></script>
1843
1844    
1844<script defer src="https://cdnjs.cloudflare.com/ajax/libs/superagent/4.1.0/superagent.min.js"></script>
1844
1845    
1845<script defer src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js" onload="window.luxuryPresence.libs.jsLibsMap.slick.isLoaded = true"></script>
1845
1846    
1846<script defer src="https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js" onload="window.luxuryPresence.libs.jsLibsMap.wow.isLoaded = true"></script>
1846
1847    
1847<script defer src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js" onload="window.luxuryPresence.libs.jsLibsMap.ionRangeSlider.isLoaded = true"></script>
1847
1848
1849    <!-- GOOGLE TRANSLATE SCRIPT -->
1850    
1850<script>
1851        function googleTranslateElementInit() {
1852            // list of languages can be overridden by setting window.customLanguages in the head JS. example `window.customLanguages = 'en,de,fr,ro,sk,pl'`
1853            // Language codes can be taken from here https://cloud.google.com/translate/docs/languages
1854            const DEFAULT_LANGUAGES = 'en,es,zh-CN,zh-TW,tl,vi,ar,ko,ru,de,fr,hi,pt';
1855            document.querySelectorAll('[data-type="TRANSLATE"]').forEach(function(translate){
1856                translate.innerText = '';
1857                new google.translate.TranslateElement({
1858                    pageLanguage: 'en',
1859                    layout: google.translate.TranslateElement.InlineLayout.SIMPLE,
1860                    includedLanguages: window.customLanguages || DEFAULT_LANGUAGES,
1861                }, translate);
1862            });
1863        }
1864    </script>
1864
1865    
1865<script defer src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
1865
1866            
1866<script defer src="https://accounts.google.com/gsi/intermediate"></script>
1866
1867
1868    <!-- GOOGLE TRANSLATE SCRIPT END-->
1869    
1869<script>
1870
1871        // UI helpers
1872        (function () {
1873
1874            function getSideMenu () {
1875                return document.querySelector('body > div.sidemenu');
1876            }
1877
1878            function sideMenuHide (instant) {
1879                var sideMenu = getSideMenu();
1880                if (!sideMenu || !sideMenu.classList.contains('visible')) {
1881                  return;
1882                }
1883                sideMenu.classList.remove('visible');
1884                sideMenu.dispatchEvent(new CustomEvent('lpui-hide', { detail: { instant: !!instant } }));
1885                window.dispatchEvent(new CustomEvent('lpui-sidemenu-hide', { detail: {instant: !!instant} }));
1886            }
1887
1888            function sideMenuShow () {
1889                var sideMenu = getSideMenu();
1890                if (!sideMenu || sideMenu.classList.contains('visible')) {
1891                  return;
1892                }
1893                sideMenu.classList.add('visible');
1894                sideMenu.dispatchEvent(new Event('lpui-show'));
1895                window.dispatchEvent(new Event('lpui-sidemenu-show'));
1896            }
1897
1898            function sideMenuToggle () {
1899                var sideMenu = getSideMenu();
1900                if (!sideMenu) {
1901                  return;
1902                }
1903                var isSideMenuVisible = sideMenu.classList.contains('visible');
1904                if (isSideMenuVisible) {
1905                    sideMenuHide();
1906                } else {
1907                    sideMenuShow();
1908                }
1909            }
1910
1911            var scrollLockRequests = {};
1912            window.__debug_scrollLockRequests = scrollLockRequests;
1913            var hideScrollStyles = ''+
1914                    'body {'+
1915                    'overflow: hidden;' +
1916                    '}';
1917            var hideScrollId = 'hide-body-scroll-style';
1918
1919            function scrollLock () {
1920                var style = document.createElement('style');
1921                style.id = hideScrollId;
1922                style.textContent = hideScrollStyles;
1923                document.head.appendChild(style);
1924                window.dispatchEvent(new Event('lpui-scroll-locked'));
1925            }
1926
1927            function scrollUnlock () {
1928                document.getElementById(hideScrollId)?.remove();
1929                window.dispatchEvent(new Event('lpui-scroll-unlocked'));
1930            }
1931
1932            function requestScrollLock (lockId) {
1933                var wasLocked = Object.keys(scrollLockRequests).length > 0;
1934                scrollLockRequests[lockId || '__anonymous_lock'] = true;
1935                if (!wasLocked) {
1936                    scrollLock();
1937                }
1938            }
1939
1940            function releaseScrollLock (lockId) {
1941                if (lockId) {
1942                    delete scrollLockRequests[lockId];
1943                    if (!Object.keys(scrollLockRequests).length) {
1944                        scrollUnlock();
1945                    }
1946                } else {
1947                    scrollLockRequests = {};
1948                    window.__debug_scrollLockRequests = scrollLockRequests;
1949                    scrollUnlock();
1950                }
1951            }
1952
1953            function showModal (modalId, options) {
1954                var modal = document.getElementById(modalId);
1955                if (!modal) {
1956                    return;
1957                }
1958
1959                if (!modal.classList.contains('visible')) {
1960                    modal.classList.add('visible');
1961                    if (options && options.scrollLock) {
1962                        window.lpUI.requestScrollLock(modalId);
1963                    }
1964                    modal.dispatchEvent(new Event('lpui-show'));
1965                    window.dispatchEvent(new CustomEvent('lpui-modal-show', { detail: { id: modalId } }));
1966                }
1967
1968                const visibleModals = document.querySelectorAll('.modal.visible');
1969
1970                if (visibleModals.length > 1) {
1971
1972                    const maxZIndex = Array.from(visibleModals).reduce((maxZIndex, modal) => {
1973                        const zIndex = window.getComputedStyle(modal).zIndex;
1974                        const parsedZIndex = zIndex !== 'auto' ? parseInt(zIndex) : 0;
1975                        return Math.max(maxZIndex, parsedZIndex);
1976                    }, 0);
1977
1978                    modal.style.zIndex = maxZIndex + 1;
1979                }
1980
1981            }
1982
1983            function _hideModal (modalEl) {
1984                if (!modalEl) {
1985                    return;
1986                }
1987                if (!modalEl.classList.contains('visible')) {
1988                    return;
1989                }
1990                modalEl.classList.remove('visible');
1991                modalEl.style.zIndex = '';
1992                modalEl.dispatchEvent(new Event('lpui-hide'));
1993                var modalId = modalEl.getAttribute('id');
1994                if (modalId) {
1995                    window.lpUI.releaseScrollLock(modalId);
1996                    window.dispatchEvent(new CustomEvent('lpui-modal-hide', { detail: { id: modalId } }));
1997                }
1998            }
1999
2000            function hideModal (modalId) {
2001                _hideModal(document.getElementById(modalId));
2002            }
2003
2004            function hideClosestModal (el) {
2005              const modal = el?.closest('.modal');
2006              if (!modal) {
2007                return;
2008              }
2009              if (modal.classList) {
2010                _hideModal(modal);
2011                return;
2012              }
2013              if (modal.length && modal[0].classList) {
2014                _hideModal(modal[0]);
2015              }
2016            }
2017
2018            window.lpUI = {
2019                sideMenuHide: sideMenuHide,
2020                sideMenuShow: sideMenuShow,
2021                sideMenuToggle: sideMenuToggle,
2022                requestScrollLock: requestScrollLock,
2023                releaseScrollLock: releaseScrollLock,
2024                showModal: showModal,
2025                hideModal: hideModal,
2026                hideClosestModal: hideClosestModal
2027            }
2028        })();
2029
2030        var stringifyPrimitive = function(v) {
2031            switch (typeof v) {
2032                case 'string':
2033                    return v;
2034
2035                case 'boolean':
2036                    return v ? 'true' : 'false';
2037
2038                case 'number':
2039                    return isFinite(v) ? v : '';
2040
2041                default:
2042                    return '';
2043            }
2044        };
2045
2046        function objectToQuerystring(obj, sep, eq, name) {
2047            // https://github.com/Gozala/querystring/blob/master/encode.js
2048            sep = sep || '&';
2049            eq = eq || '=';
2050            if (obj === null) {
2051                obj = undefined;
2052            }
2053
2054            if (typeof obj === 'object') {
2055                return Object.keys(obj).map(function(k) {
2056                    var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
2057                    if (Array.isArray(obj[k])) {
2058                        return obj[k].map(function(v) {
2059                            return ks + encodeURIComponent(stringifyPrimitive(v));
2060                        }).join(sep);
2061                    } else {
2062                        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
2063                    }
2064                }).filter(Boolean).join(sep);
2065
2066            }
2067
2068            if (!name) return '';
2069            return encodeURIComponent(stringifyPrimitive(name)) + eq +
2070                    encodeURIComponent(stringifyPrimitive(obj));
2071        }
2072
2073        function getPath(url, options) {
2074            var parser = document.createElement('a');
2075            parser.href = url || '';
2076            var path = parser.pathname || '';
2077            if (path[0] !== '/') {
2078              // IE does not return path starting with a slash
2079              path = '/' + path;
2080            }
2081
2082            if (options && options.queryString) {
2083                path += parser.search;
2084            }
2085
2086            return path;
2087        }
2088
2089        function getMLSAutocomplete(keyword) {
2090            var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete';
2091            var query = {
2092                kind: 'listings',
2093                query: keyword
2094            };
2095
2096            return superagent
2097                .get(searchURL)
2098                .query(query)
2099                .then(function(res) {
2100                    var data = res.body || [];
2101                    // Array of listing_auto_complete documents: id, display_address, city, state,
2102                    // price, sold_price, status, status_modified_at, photo_urls (array of URLs).
2103
2104                    return data;
2105                });
2106        }
2107
2108        function getMLSAutocompleteWithFilters(keyword, filters = {}) {
2109            var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete';
2110
2111            return superagent
2112                .get(searchURL)
2113                .query({ kind: 'listings', query: keyword, ...filters })
2114                .then(function(res) {
2115                    // Same response shape as getMLSAutocomplete.
2116                    return res.body || [];
2117                });
2118        }
2119
2120        function makeMlsLink(data) {
2121            // Code Dupe from utils/googlePlace
2122            // mapping of google data type to mls data type
2123            var mapping = {
2124                neighborhood: 'neighborhood',
2125                locality: 'place',
2126                administrative_area_level_2: 'county',
2127                administrative_area_level_1: 'state',
2128                postal_code: 'postalcode',
2129            };
2130
2131            function _filterTypes(types) {
2132                return types.filter(function(type) { return type !== 'political' });
2133            }
2134
2135            if (!data || !Object.keys(data).length) {
2136                return '/home-search/listings';
2137            }
2138
2139            var newData = {};
2140            _filterTypes(data.types).forEach(function(type) {
2141                if (mapping[type]) {
2142                    newData.search_type = mapping[type];
2143                }
2144            });
2145            newData.omnibox = data.formatted_address;
2146            data.address_components.forEach(function(component) {
2147                _filterTypes(component.types).forEach(function(type) {
2148                    if (mapping[type]) {
2149                        newData[mapping[type]] = component.long_name;
2150                    }
2151                });
2152            });
2153            var bounds = data.geometry.bounds;
2154            var convertedData = Object.assign(bounds, newData);
2155
2156            return '/home-search/listings?' + objectToQuerystring(convertedData);
2157        }
2158
2159        function debounce(func, wait) {
2160            let timeout;
2161            return function(...args) {
2162                const context = this;
2163                clearTimeout(timeout);
2164                timeout = setTimeout(() => func.apply(context, args), wait)
2165            }
2166        }
2167
2168        // Global methods / variables that can be accessed by element js
2169        window.luxuryPresence = {
2170            ...window.luxuryPresence,
2171            defaults: {
2172                companyId: '116d6abd-55d8-410f-b7f3-bdd7f6c5b727',
2173                apiGatewayUrl: '/api-gw',
2174                routerUrl: '/api-nv',
2175                gql: {"agents":"\n  query Agents (\n    $agentId: ID\n    $agentIds: [ID!]\n    $companyId: String\n    $network: Boolean\n    $networkId: String\n    $officeId: [ID!]\n    $excludeOfficeId: [ID!]\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: SortDirectionEnum\n    $search: String\n    $tags: [String]\n    $tagsMode: TagsModeEnum\n    $teamId: [ID!]\n    $developmentId: [ID!]\n    $prioritizeIds: Boolean\n  ) {\n    agents (\n      agentId: $agentId\n      agentIds: $agentIds\n      companyId: $companyId\n      network: $network\n      networkId: $networkId\n      officeId: $officeId\n      excludeOfficeId: $excludeOfficeId\n      offset: $offset\n      limit: $limit\n      sort: $sort\n      sortDir: $sortDir\n      search: $search\n      tags: $tags\n      tagsMode: $tagsMode\n      teamId: $teamId\n      developmentId: $developmentId\n      prioritizeIds: $prioritizeIds\n    ) {\n      id\n      firstName\n      lastName\n      avatar {\n        smallUrl\n        mediumUrl\n        largeUrl\n        height\n        width\n      }\n      position\n      bioLong\n      bioShort\n      seoTitle\n      seoDescription\n      slug\n      phoneNumber\n      phoneNumber2\n      license\n      email\n      leadAgent\n      greaterArea\n      tags\n    }\n    agentsCount(\n      agentIds: $agentIds\n      companyId: $companyId\n      network: $network\n      networkId: $networkId\n      officeId: $officeId\n      excludeOfficeId: $excludeOfficeId\n      search: $search\n      tags: $tags\n      tagsMode: $tagsMode\n      teamId: $teamId\n      developmentId: $developmentId\n      prioritizeIds: $prioritizeIds\n    ) {\n      count\n    }\n  }\n","properties":"\n  query Properties(\n    $agentIds: [ID!]\n    $teamIds: [ID!]\n    $neighborhoodIds: [ID!]\n    $officeIds: [ID!]\n    $propertyId: ID\n    $companyId: String\n    $networkId: String\n    $network: Boolean\n    $statusId: String\n    $propertyIds: [ID!]\n    $prioritizeIds: Boolean\n    $statusIds: [String!]\n    $excludeStatusId: [String!]\n    $neighborhoodId: String\n    $addressState: [String!]\n    $addressCity: [String!]\n    $relatedNeighborhoodPropertyId: String\n    $developmentId: String\n    $featuredListing: Boolean\n    $leaseProperty: Boolean\n    $search: String\n    $searchTermMode: SearchTermModeEnum\n    $globalProperty: Boolean\n    $archived: Boolean\n    $salesPriceGTE: Float\n    $salesPriceLTE: Float\n    $leasePriceGTE: Float\n    $leasePriceLTE: Float\n    $livingSpaceSizeGTE: Float\n    $livingSpaceSizeLTE: Float\n    $bathCountGTE: Float\n    $bathCountLTE: Float\n    $bedroomCountGTE: Float\n    $bedroomCountLTE: Float\n    $architectureStyle: String\n    $lifestyle: String\n    $propertyTypeId: String\n    $propertyTypeIds: [String!]\n    $spaceTypeIds: [ID!]\n    $tag: String\n    $backfillMLSResults: Boolean\n    $displayMLSListings: String\n    $hostname: String\n    $websiteId: ID\n    $backfillProviders: [String!]\n    $backfillMLSListingIds: [String!]\n    $backfillMLSAgentIds: [String!]\n    $backfillMLSOfficeIds: [String!]\n    $backfillBoundary: JSON\n    $openHouse: Boolean\n    $withGeo: Boolean\n    $advancedFilters: JSON\n    $seasonalPriceId: ID\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: SortDirectionEnum\n  ) {\n    properties(\n      \n      agentIds: $agentIds\n      teamIds: $teamIds\n      propertyId: $propertyId\n      propertyIds: $propertyIds\n      prioritizeIds: $prioritizeIds\n      companyId: $companyId\n      network: $network\n      networkId: $networkId\n      statusId: $statusId\n      statusIds: $statusIds\n      excludeStatusId: $excludeStatusId\n      neighborhoodId: $neighborhoodId\n      neighborhoodIds: $neighborhoodIds\n      officeIds: $officeIds\n      addressState: $addressState\n      addressCity: $addressCity\n      developmentId: $developmentId\n      featuredListing: $featuredListing\n      leaseProperty: $leaseProperty\n      search: $search\n      searchTermMode: $searchTermMode\n      salesPriceGTE: $salesPriceGTE\n      salesPriceLTE: $salesPriceLTE\n      leasePriceGTE: $leasePriceGTE\n      leasePriceLTE: $leasePriceLTE\n      livingSpaceSizeGTE: $livingSpaceSizeGTE\n      livingSpaceSizeLTE: $livingSpaceSizeLTE\n      bathCountGTE: $bathCountGTE\n      bathCountLTE: $bathCountLTE\n      bedroomCountGTE: $bedroomCountGTE\n      bedroomCountLTE: $bedroomCountLTE\n      architectureStyle: $architectureStyle\n      lifestyle: $lifestyle\n      propertyTypeId: $propertyTypeId\n      propertyTypeIds: $propertyTypeIds\n      spaceTypeIds: $spaceTypeIds\n      tag: $tag\n      archived: $archived\n      globalProperty: $globalProperty\n      withGeo: $withGeo\n      openHouse: $openHouse\n      displayMLSListings: $displayMLSListings\n      advancedFilters: $advancedFilters\n      seasonalPriceId: $seasonalPriceId\n\n      relatedNeighborhoodPropertyId: $relatedNeighborhoodPropertyId\n      backfillMLSResults: $backfillMLSResults\n      hostname: $hostname\n      websiteId: $websiteId\n      backfillProviders: $backfillProviders\n      backfillMLSListingIds: $backfillMLSListingIds\n      backfillMLSAgentIds: $backfillMLSAgentIds\n      backfillMLSOfficeIds: $backfillMLSOfficeIds\n      backfillBoundary: $backfillBoundary\n      offset: $offset\n      limit: $limit\n      sort: $sort,\n      sortDir: $sortDir\n    ){\n      id\n      name\n      status\n      originalStatus {\n        id\n        name\n      }\n      salesPrice\n      reducedPrice\n      isPasswordProtected\n      bedroomCount\n      bathCount\n      fullBathCount\n      halfBathCount\n      threeQuarterBathCount\n      fullAddress\n      addressLine1\n      addressLine2\n      addressCity\n      addressState\n      addressCountry\n      postalCode\n      description\n      syncedAt\n      officeName\n      attributionContact\n      neighborhood {\n        id\n      }\n      media {\n        smallUrl\n        mediumUrl\n        largeUrl\n        xLargeUrl\n        xxLargeUrl\n        height\n        width\n      }\n      seoTitle\n      seoDescription\n      slug\n      fromMLS\n      mlsId\n      mlsLogo\n      mlsAttribution\n      openHouse\n      openHouseHours\n      priceUponRequest\n      privateAddress\n      leaseProperty\n      leasePrice\n      currency\n      leaseTermFrequencyInterval\n      leaseTermFrequencyCount\n      leasePeriod\n      livingSpaceSize\n      livingSpaceUnits\n      lotAreaSize\n      lotAreaUnits\n      tags\n      latitude\n      longitude\n      soldDate\n      timeZone\n      buyerAgencyCompensation\n      buyerAgencyCompensationType\n      landIdUrl\
2175n    }\n    propertiesCount(\n    \n      agentIds: $agentIds\n      teamIds: $teamIds\n      propertyId: $propertyId\n      propertyIds: $propertyIds\n      prioritizeIds: $prioritizeIds\n      companyId: $companyId\n      network: $network\n      networkId: $networkId\n      statusId: $statusId\n      statusIds: $statusIds\n      excludeStatusId: $excludeStatusId\n      neighborhoodId: $neighborhoodId\n      neighborhoodIds: $neighborhoodIds\n      officeIds: $officeIds\n      addressState: $addressState\n      addressCity: $addressCity\n      developmentId: $developmentId\n      featuredListing: $featuredListing\n      leaseProperty: $leaseProperty\n      search: $search\n      searchTermMode: $searchTermMode\n      salesPriceGTE: $salesPriceGTE\n      salesPriceLTE: $salesPriceLTE\n      leasePriceGTE: $leasePriceGTE\n      leasePriceLTE: $leasePriceLTE\n      livingSpaceSizeGTE: $livingSpaceSizeGTE\n      livingSpaceSizeLTE: $livingSpaceSizeLTE\n      bathCountGTE: $bathCountGTE\n      bathCountLTE: $bathCountLTE\n      bedroomCountGTE: $bedroomCountGTE\n      bedroomCountLTE: $bedroomCountLTE\n      architectureStyle: $architectureStyle\n      lifestyle: $lifestyle\n      propertyTypeId: $propertyTypeId\n      propertyTypeIds: $propertyTypeIds\n      spaceTypeIds: $spaceTypeIds\n      tag: $tag\n      archived: $archived\n      globalProperty: $globalProperty\n      withGeo: $withGeo\n      openHouse: $openHouse\n      displayMLSListings: $displayMLSListings\n      advancedFilters: $advancedFilters\n      seasonalPriceId: $seasonalPriceId\n\n    ) {\n      count\n    }\n  }\n","pressReleases":"\n  query PressReleases (\n    $companyId: ID\n    $pressReleaseIds: [ID!]\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: String\n    $search: String\n    $categories: [String!]\n    $propertyId: [ID!]\n    $developmentId: [ID!]\n    $agentId: [ID!]\n    $teamId: [ID!]\n    $year: [Int!]\n  ) {\n    pressReleases (\n      companyId: $companyId\n      pressReleaseIds: $pressReleaseIds\n      offset: $offset\n      limit: $limit\n      sort: $sort\n      sortDir: $sortDir\n      search: $search\n      categories: $categories\n      propertyId: $propertyId\n      developmentId: $developmentId\n      agentId: $agentId\n      teamId: $teamId\n      year: $year\n    ) {\n      items {\n        id\n        title\n        description\n        author\n        externalUrl\n        media {\n          smallUrl\n          mediumUrl\n          largeUrl\n          xLargeUrl\n          xxLargeUrl\n          height\n          width\n          altTagText\n        }\n        publishedAt\n        categories\n      }\n      total\n    }\n  }\n","posts":"\n  query Posts (\n    $companyId: String\n    $postId: [ID!]\n    $slug: String\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: String\n    $search: String\n    $featured: Boolean\n    $categoryId: [String!]\n    $neighborhoodId: [String!]\n  ) {\n    posts (\n      companyId: $companyId\n      postId: $postId\n      slug: $slug\n      offset: $offset\n      limit: $limit\n      sort: $sort\n      sortDir: $sortDir\n      search: $search\n      featured: $featured\n      postStatusId: \"5f528253-abb7-484e-95c3-330269ac1102\"\n      categoryId: $categoryId\n      neighborhoodId: $neighborhoodId\n    ) {\n      items {\n        id\n        postId\n        title\n        subtitle\n        description\n        status: postStatus\n        featured\n        slug\n        categories {\n          id\n          name\n        }\n        createdAt\n        publishedAt\n        updatedAt\n        scheduledAt\n        createdBy {\n          ... on Agent {\n            firstName\n            lastName\n          }\n        }\n        customAuthor\n        media {\n          smallUrl\n          mediumUrl\n          largeUrl\n          xLargeUrl\n          xxLargeUrl\n          height\n          width\n          altTagText\n        }\n        seoTitle\n        seoDescription\n      }\n      total\n    }\n  }\n","testimonials":"\n  query Testimonials (\n    $companyId: String\n    $agentId: ID\n    $teamId: ID\n    $testimonialIds: [ID!]\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: String\n    $search: String\n  ) {\n    testimonials (\n      companyId: $companyId\n      agentId: $agentId\n      teamId: $teamId\n      testimonialIds: $testimonialIds\n      offset: $offset\n      limit: $limit\n      sort: $sort\n      sortDir: $sortDir\n      search: $search\n    ) {\n      items {\n        id\n        testimonialId\n        body\n        author\n        position\n        media {\n          smallUrl\n          mediumUrl\n          largeUrl\n          xLargeUrl\n          xxLargeUrl\n          height\n          width\n          altTagText\n        }\n        seoTitle\n        seoDescription\n        agents {\n          slug\n          email\n          firstName\n          lastName\n          avatar {\n            smallUrl\n            height\n            width\n          }\n        }\n      }\n      total\n    }\n  }\n","neighborhoods":"\n  query Neighborhoods (\n    $neighborhoodId: ID\n    $companyId: String\n    $search: String\n    $tag: String\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: SortDirectionEnum\n  ) {\n    neighborhoods (\n      neighborhoodId: $neighborhoodId\n      companyId: $companyId\n      search: $search\n      tag: $tag\n      offset: $offset\n      limit: $limit\n      sort: $sort\n      sortDir: $sortDir\n    ) {\n      id\n      name\n      description\n      descriptionShort\n      slug\n      tags\n      googlePlaceData\n      mlsLink\n      createdAt\n      media {\n        smallUrl\n        mediumUrl\n        largeUrl\n        xLargeUrl\n        xxLargeUrl\n        height\n        width\n      }\n      seoTitle\n      seoDescription\n    }\n    neighborhoodsCount(\n      companyId: $companyId\n      search: $search\n      tag: $tag\n    ) {\n      count\n    }\n  }\n","developments":"\n  query Developments (\n    $developmentId: ID\n    $companyId: String\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: SortDirectionEnum\n    $search: String\n    $tag: [String!]\n    $agentId: [ID!]\n    $neighborhoodId: ID\n    $neighborhoodIds: [ID!]\n  ) {\n    developments (\n      developmentId: $developmentId\n      companyId: $companyId\n      offset: $offset\n      limit: $limit\n      sort: $sort\n      sortDir: $sortDir\n      search: $search\n      tag: $tag\n      agentId: $agentId\n      neighborhoodId: $neighborhoodId\n      neighborhoodIds: $neighborhoodIds\n    ) {\n      id\n      name\n      description\n      descriptionShort\n      slug\n      createdAt\n      media {\n        smallUrl\n        mediumUrl\n        largeUrl\n        xLargeUrl\n        xxLargeUrl\n        height\n        width\n      }\n      googlePlaceData\n      seoTitle\n      seoDescription\n      tags\n    }\n    developmentsCount(\n      companyId: $companyId\n      search: $search\n      tag: $tag\n      agentId: $agentId\n      neighborhoodId: $neighborhoodId\n      neighborhoodIds: $neighborhoodIds\n    ) {\n      count\n    }\n  }\n","pois":"\n  query PointsOfInterest (\n    $regionId: UUID!\n    $radiu
2175s: Int\n    $offset: Int\n    $limit: Int\n    $categories: [AreasOfInterestCategories!]\n    $sortBy: AreasOfInterestSorting\n  ) {\n    pois: areasOfInterest (\n      input: {\n        regionId: $regionId\n        radius: $radius\n        offset: $offset\n        limit: $limit\n        categories: $categories\n        sortBy: $sortBy\n      }\n    ) {\n      items {\n        name\n        imageUrl\n        url\n        reviewCount\n        rating\n        price\n        displayPhone\n        distance\n        category\n        location {\n          address1\n          address2\n          address3\n          city\n          zipCode\n          country\n          state\n        }\n      }\n      total\n    }\n  }\n","offices":"\n  query Offices (\n    $companyId: ID!\n    $officeIds: [ID!]\n    $officeMlsIds: [String!]\n    $externalIds: [String!]\n    $externalSource: String\n    $agentId: ID\n    $archived: Boolean\n    $tags: [String!]\n    $slug: String\n    $search: String\n    $sort: String\n    $sortDir: SortDirection\n    $offset: Int\n    $limit: Int\n  ) {\n    offices (\n      companyId: $companyId\n      officeIds: $officeIds\n      officeMlsIds: $officeMlsIds\n      externalIds: $externalIds\n      externalSource: $externalSource\n      agentId: $agentId\n      archived: $archived\n      tags: $tags\n      slug: $slug\n      search: $search\n      sort: $sort\n      sortDir: $sortDir\n      offset: $offset\n      limit: $limit\n    ) {\n      items {\n        id\n        companyId\n        name\n        slug\n        officeMlsId\n        shortDescription\n        fullDescription\n        addressLine1\n        addressLine2\n        addressCity\n        addressState\n        addressPostalCode\n        addressCountry\n        phone\n        email\n        officeHours\n        coordinates\n        googlePlaceData\n        seoTitle\n        seoDescription\n        fullAddress\n        tags\n        media {\n          id\n          originalUrl\n          thumbnailUrl\n          smallUrl\n          mediumUrl\n          largeUrl\n          xLargeUrl\n          xxLargeUrl\n        }\n      }\n      total\n    }\n  }\n","teams":"\n  query Teams (\n    $companyId: ID\n    $teamIds: [ID!]\n    $agentId: ID\n    $externalIds: [String!]\n    $externalSource: String\n    $slug: String\n    $search: String\n    $sort: String\n    $sortDir: String\n    $offset: Int\n    $limit: Int\n  ) {\n    teams (\n      companyId: $companyId\n      teamIds: $teamIds\n      agentId: $agentId\n      externalIds: $externalIds\n      externalSource: $externalSource\n      slug: $slug\n      search: $search\n      sort: $sort\n      sortDir: $sortDir\n      offset: $offset\n      limit: $limit\n    ) {\n      items {\n        id\n        companyId\n        name\n        email\n        shortBio\n        addressLine1\n        addressLine2\n        addressCity\n        addressState\n        addressCountry\n        phoneNumber1\n        phoneNumber2\n        postalCode\n        avatar {\n          id\n          thumbnailUrl\n          smallUrl\n          mediumUrl\n          largeUrl\n        }\n        urlWebsite\n        socialLinks\n        socialLinksArray\n        tags\n        seoTitle\n        seoDesc\n        slug\n        displayOrder\n      }\n      total\n    }\n  }\n"},
2176                propertyPlaceholderImage: {"id":"455e491f-ec44-4b48-b20a-2bdd563b0f65","alt":null,"bytes":80380,"width":1920,"format":"png","height":1200,"pngUrl":"","shared":true,"curated":false,"duration":null,"largeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f8f2eaba-c548-4895-9fa3-4dc22da5063c","smallUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/f8f2eaba-c548-4895-9fa3-4dc22da5063c","authorUrl":null,"createdAt":"2025-03-31T19:40:52.874Z","mediumUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/f8f2eaba-c548-4895-9fa3-4dc22da5063c","sourceUrl":null,"updatedAt":"2025-03-31T19:40:52.874Z","xLargeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f8f2eaba-c548-4895-9fa3-4dc22da5063c","__typename":"Media","altTagText":null,"authorName":null,"sourceName":"r2","xxLargeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f8f2eaba-c548-4895-9fa3-4dc22da5063c","de
2176scription":null,"displayName":"property_logo-1-1","originalUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f8f2eaba-c548-4895-9fa3-4dc22da5063c","resourceType":"image","thumbnailUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=320/https://media-production.lp-cdn.com/media/f8f2eaba-c548-4895-9fa3-4dc22da5063c","originalFileName":"Property_Logo (1) (1)","cloudinaryPublicId":"f8f2eaba-c548-4895-9fa3-4dc22da5063c"}
2177            },
2178            objectToQuerystring: objectToQuerystring,
2179            getPath: getPath,
2180            getMLSAutocomplete: getMLSAutocomplete,
2181            getMLSAutocompleteWithFilters: getMLSAutocompleteWithFilters,
2182            makeMlsLink: makeMlsLink,
2183            debounce: debounce,
2184        };
2185
2186        var wowOffset = 100;
2187    </script>
2187
2188    
2188<script>
2189        (()=>{function e(e){return e&&e.__esModule?e.default:e}var t={},i={};i={getVideoFirstFrame(e){let t="https://res.cloudinary.com/";if(!e||!e.startsWith(t))return null;let i=e.replace(t,"").replace("f_auto:video","f_auto").split("/");if(-1===i[1].toLowerCase().indexOf("video"))return null;let s=i[i.length-1];s.lastIndexOf(".")>-1?s=`${s.slice(0,s.lastIndexOf("."))}.jpg`:s+=".jpg",i[i.length-1]=s;let r=3;"videos"===i[1].toLowerCase()&&""!==i[2]&&(r=2);let a=/^(?:[a-z]{1,3}|\$\w+)_\S+$/;for(;r<i.length-1&&a.test(i[r]);)r++;return i.splice(r,0,"so_0,eo_0"),t+i.join("/")}};let s={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "},r=/&(?:amp|lt|gt|quot|apos|nbsp|#(?:[0-9]+|[xX][0-9a-fA-F]+));/y,a=/[<&]/g,o=/["'>]/g,n=/<\/p\s*>|<br\s*\/?>|[\r\n\u2028\u2029]/g;function l(e,t){let i="";for(let l=0;l<e.length;){a.lastIndex=l;let d=a.exec(e);if(!d){i+=e.slice(l);break}let c=d.index;i+=e.slice(l,c);let u="&"===e[c]?function(e,t){r.lastIndex=t;let i=r.exec(e);return{text:i?function(e){if("#"!==e[1])return s[e.slice(1,-1)];
2189let t="x"===e[2]||"X"===e[2],i=parseInt(e.slice(t?3:2,-1),t?16:10);return 0===i||i>1114111||i>=55296&&i<=57343?e:160===i?" ":String.fromCodePoint(i)}(i[0]):"&",end:i?r.lastIndex:t+1}}(e,c):function(e,t,i){let s=function(e,t){let i=null;o.lastIndex=t+1;let s=o.exec(e);for(;s;){let t=s[0];if(i)t===i&&(i=null);else if('"'===t||"'"===t)i=t;else if(">"===t)return o.lastIndex;s=o.exec(e)}return -1}(e,t);return{text:-1===s?"<":function(e,t,i,s){if(!s)return"";let r=e.slice(t,i);if(/^<br\s*\/?>$/.test(r))return"&#10;";if(/^<\/p\s*>$/.test(r)){n.lastIndex=i;let t=n.exec(e);if(t&&"<"===t[0][0])return"&#10;"}return""}(e,t,s,i),end:-1===s?t+1:s}}(e,c,t);i+=u.text,l=u.end}return i}t=function(e,{isEqual:t}){let s=[{field:"thumbnailUrl",w:320},{field:"smallUrl",w:960},{field:"mediumUrl",w:1280},{field:"largeUrl",w:1920},{field:"xLargeUrl",w:2560},{field:"xxLargeUrl",w:3456}],r=function(e,t,i){let s="en-US";if(!e)return"";if("string"==typeof e){let t=e.trim();if(/[^+\-0-9.]/.test(t))return e;if(!(e=parseFloat(t)))return""}let r="number"==typeof i?i:0,a=Number.isInteger(e)?0:r,o={minimumFractionDigits:a,maximumFractionDigits:a};return"USD"===t?`$${e.toLocaleString(s,o)}`:"CAD"===t?`$${e.toLocaleString(s,o)} CAD`:"EUR"===t?`\u{20AC}${e.toLocaleString(s,o)}`:"GBP"===t?`\xa3${e.toLocaleString(s,o)}`:"PERCENT"===t?`${e}%`:"number"==typeof i&&i>-1?e.toLocaleString(s,{maximumFractionDigits:i}):e.toLocaleString(s)},a=function(e){switch(e){case"DAY":return"daily";case"MONTH":return"monthly";case"WEEK":return"weekly";case"YEAR":return"yearly";case"QUARTER":return"quarterly";case"HALF_YEAR":return"semi-annually";case"NIGHTLY":return"nightly";case"SEASONAL":return"seasonally";default:return""}},o=function(e){switch(e){case"DAY":return"day";case"WEEK":return"wk";case"MONTH":return"mo";case"YEAR":return"yr";case"QUARTER":return"3 mos";case"HALF_YEAR":return"6 mos";case"NIGHTLY":return"night";case"SEASONAL":return"season";default:return""}},n=function(e){switch(e){case"DAY":return"day";case"WEEK":return"week";case"MONTH":return"month";case"YEAR":return"year";case"QUARTER":return"quarter";case"HALF_YEAR":return"6 months";case"NIGHTLY":return"night";case"SEASONAL":return"season";default:return""}},d=function(e,t){let i,s,r=t||{};switch(r.mode){case"short":i=o(e),s=r.frequencySeparator||"/";break;case"standard":case"std":i=n(e),s=r.frequencySeparator||"/";break;default:i=a(e),s=r.frequencySeparator||" "}return i?r.frequencyTag||r.frequencyClass?`${s}<${r.frequencyTag||"span"}${r.frequencyClass?` class="${r.frequencyClass}"`:""}>${i}</${r.frequencyTag||"span"}>`:s+i:""};return{isEmpty(e,t){let i=!e||"string"==typeof e&&!e.trim()||!Object.keys(e).length;return t.fn?i?t.fn(this):t.inverse(this):i},ifEquals(e,i,s){return t(e,i)?s.fn(this):s.inverse(this)},"raw-helper":function(e){return e.fn()},striptags:e=>e?l(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,""),!1):"",striptagsLineBreaks:e=>e?l(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,""),!0):"",truncate:(e,t,i)=>e?e.length>t?"string"==typeof i?e.slice(0,t-i.length)+i:e.slice(0,t):e:"",setSubArray(e=[],t,i,s,r){r.data.root[s]=e.slice(t,i)},formatAreaUnit(e){switch(e){case"ACRE":return"Acres";case"SQUARE_METER":return"Sq.M.";case"SQUARE_YARD":return"Sq.Yd.";default:return"Sq.Ft."}},formatFrequency:a,formatFrequencyShort:o,lpFormatFrequency:(e,t)=>d(e,t&&t.hash),subArray(e,t,i,s){return e>=t&&e<i?s.fn(this):s.inverse(this)},formatPropertyStatus(e,t,i){let s="";switch(e){case"SOLD":s="Sold";break;case"FOR_SALE":s="For Sale";break;case"COMING_SOON":s="Coming Soon";break;case"INACTIVE":s="Inactive";break;case"POCKET_LISTING":s="Pocket Listing";break;case"PENDING":s="Pending";break;case"UNDER_CONTRACT":s="Under Contract";break;case"ACTIVE_UNDER_CONTRACT":s="Active Under Contract";break;default:s=e}return("Sold"===s||"Leased"===s)&&t&&"string"==typeof i&&i&&(s+=` on ${i}`),s},formatGrade(e){switch(e){case"UNDERGRADUATE_COURSES":return"Undergrad";case"PRE_KINDERGARTEN":return"PreK";case"KINDERGARTEN":return"K";case"FIRST_GRADE":return"1st";case"SECOND_GRADE":return"2nd";case"THIRD_GRADE":return"3rd";case"FOURTH_GRADE":return"4th";case"FIFTH_GRADE":return"5th";case"SIXTH_GRADE":return"6th";case"SEVENTH_GRADE":return"7th";case"EIGHTH_GRADE":return"8th";case"NINTH_GRADE":return"9th";case"TENTH_GRADE":return"10th";case"ELEVENTH_GRADE":return"11th";case"TWELFTH_GRADE":return"12th";default:return""}},encodeURI:e=>encodeURI(e),encodeURIComponent:e=>encodeURIComponent(e),hbFormatDate(e,t){if(!e)return"";let i="current"===e?new Date:new Date(e);if(Number.isNaN(i.getTime()))return"";if("YYYY"===t||"year"===t)return`${i.getFullYear()}`;if("MM/DD/YY"===t){let e=i.getMonth()+1;return e<10&&(e=`0${e.toString()}`),`${e}/${i.getDate()}/${i.getFullYear().toString().substr(-2)}`}return`${["January","February","March","April","May","June","July","August","September","October","November","December"][i.getMonth()]} ${i.getDate()}, ${i.getFullYear()}`},openHousesFormat(e,t,i){if(!e||!t)return"";let s=e=>{let t=e.getHours();t>12&&(t-=12);let i=`${t}:${e.getMinutes()>9?e.getMinutes():"0"+e.getMinutes()}`;return e.getHours()>11?i+="PM":i+="AM",i},r="",a=e,o=t;
2189i&&(a=new Date(e).toLocaleString("en-US",{timeZone:i}),o=new Date(t).toLocaleString("en-US",{timeZone:i}),[,,,r]=new Date(t).toLocaleString("en-US",{timeZone:i,timeZoneName:"short"}).split(" "));let n=new Date(a),l=n.toLocaleDateString("en-US"),d=s(n),c=s(new Date(o));return`${l} ${d} - ${c} ${r}`},math:(e,t,i)=>(e=parseFloat(e),({"+":e+(i=parseFloat(i)),"-":e-i,"*":e*i,"/":e/i,"%":e%i})[t]),findByKey(e,t,i,s){let r=(e||[]).find(e=>e[t]===i);return s.fn(r)},capitalize(e,t,i){let s;return"string"==typeof e&&e.length&&(s=e.toLowerCase().split(t).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ").toString()),s},and:(...e)=>Array.prototype.slice.call(e).every(Boolean),or:(...e)=>Array.prototype.slice.call(e,0,-1).some(Boolean),not:e=>!e,orderByIds(t,i,s){let r="",a=null;s.data&&(a=e.createFrame(s.data));let o=(i||[]).filter(Boolean);if(o&&o.length){let e=0;r=o.reduce((i,r,o)=>{let n=(t||[]).find(e=>e.id===r);return n?(a&&(a.index=o-e),i+s.fn(n,{data:a})):(e+=1,i)},"")}else for(let e=0,i=(t||[]).length;e<i;e++)a&&(a.index=e),r+=s.fn(t[e],{data:a});return r},ifIn(e,t,i){return t&&t.indexOf(e)>-1?i.fn(this):i.inverse(this)},partial:(t,i)=>(e.registerPartial(t,e.compile(i.fn())),`
2189<script type="text/x-handlebars-template" class="${t} pagination-script">${i.fn()}<\/script>`),numCompare(e,t,i,s){return({"==":function(e,t){return e==t},"===":function(e,t){return e===t},"!=":function(e,t){return e!=t},"<":function(e,t){return e<t},">":function(e,t){return e>t},"<=":function(e,t){return e<=t},">=":function(e,t){return e>=t}})[i](e,t)?!s.fn||s.fn(this):!!s.fn&&s.inverse(this)},lpFormatNumber:r,arrayToHtmlList:(e,t)=>e.reduce((e,t)=>{try{if("object"==typeof t||null===t)return e;return e+=`<li>${t}</li>`}catch(e){}},""),join:(e,t,i)=>e&&e.join?e.join("string"==typeof t?t:", "):"",dedupe(t,i,s){let r=null,a=0,o=new Set;return s.data&&(r=e.createFrame(s.data)),(t||[]).reduce((e,t,n)=>{let l=i?t[i]:t;return!o.has(l)||i&&void 0===l?(o.add(l),r&&(r.index=n-a),e+s.fn(t,{data:r})):(a+=1,e)},"")},JSONstringify:(e,t)=>JSON.stringify(e),formatPropertyPrice(...t){let i=t[t.length-1].hash,s=t.length>1?t[0]:i.property,a=i.precision||0;t.length>2&&(i.mode=t[1]),i.mode||(i.mode="short");let o=t.length>3?t[2]:i.separator;if("string"!=typeof o&&(o=" | "),s.isPasswordProtected)return"Exclusive Listing";let n=t.length>4?t[3]:i.priceUponRequestText;if("string"!=typeof n&&(n="Price Upon Request"),s.priceUponRequest)return n;let l=s.salesPrice,c=null;"SOLD"!==s.status&&"Leased"!==s.status&&s.reducedPrice&&(i.reducedClass?c=s.reducedPrice:l=s.reducedPrice);let u="";c&&(u+=`<${i.reducedTag||"span"} class="${i.reducedClass}">${r(c,s.currency,a)}</${i.reducedTag||"span"}>`),l&&(l=r(l,s.currency,a),i.priceTag||i.priceClass?u+=`<${i.priceTag||"span"}${i.priceClass?` class="${i.priceClass}"`:""}>${l}</${i.priceTag||"span"}>`:u+=l);let h=s.leasePrice&&r(s.leasePrice,s.currency,a);if(h){u&&(u+=o);let e=`${h}${d(s.leasePeriod,i)}`;i.leaseTag||i.leaseClass?u+=`<${i.leaseTag||"span"}${i.leaseClass?` class="${i.leaseClass}"`:""}>${e}</${i.leaseTag||"span"}>`:u+=e}
2189return new e.SafeString(u)},mediaImage(t,i={}){if(!t)return;let{lazy:r,...a}=i.hash,o="",n="";if("string"==typeof t)o=t;else{let e={},{height:r,width:l,altTagText:d}=t;s.forEach(i=>{t[i.field]&&!e[t[i.field]]&&(e[t[i.field]]=i.w)});let c=Object.keys(e);if(!c.length)return;if(d&&(a.alt=d),r&&l&&(r>=l&&(a.class?a.class+=" portrait":a.class="portrait"),"setDims"in i.hash&&(a.width=l,a.height=r)),c.length>1&&l&&l<e[c[c.length-1]]){let t=c.findIndex(t=>e[t]>=l);c.splice(t+1),e[c[c.length-1]]=l}c.length>1&&(n=c.map(t=>`${t} ${e[t]}w`).join(", "),c.sort((t,i)=>Math.abs(e[t]-1280)-Math.abs(e[i]-1280))),o=c[0]}delete a.setDims,n||delete a.sizes,"alt"in a||(a.alt=""),!("loading"in a)&&(i?.data?.root?.sectionIndex>1||r)&&(a.loading="lazy");let l=Object.keys(a).map(t=>`${e.escapeExpression(t)}="${e.escapeExpression(a[t])}"`).join(" ");return new e.SafeString(`<img src="${o}"${n?` srcset="${n}"`:""}${l?` ${l}`:""}>`)},bgImage:e=>e?"string"==typeof e?e:e.largeUrl||e.url||"":"",concat(...e){let t="";for(let i in e)null!==e[i]&&void 0!==e[i]&&"object"!=typeof e[i]&&(t+=e[i]);return t},setVideoExtension(e,t){if(!e||!t)return"";let i=new URL(e);if("res.cloudinary.com"!==i.host)return i.pathname.endsWith(`.${t}`)?e:"";let s=i.pathname.lastIndexOf("."),r=i.pathname;return -1!==s&&(r=i.pathname.substr(0,s)),i.pathname=`${r}.${t}`,i.toString()},addVideoSources(e){if(!e)return"";if(!e.includes("res.cloudinary.com"))return`<source data-src="${e}">`;let t=e.replace(/\.(?:3gp|mpeg|mp4|m4v|m4p|ogv|ogg|mov|webm)$/,"");return[{format:"webm",codec:"vp9",htmlCodecs:";codecs=vp9"},{format:"mp4",codec:"h265",htmlCodecs:";codecs=hvc1"},{format:"mp4",codec:"h264",htmlCodecs:""}].map(e=>{let i=`${t.replace(/f_auto(?::video)?(?:,q_auto(?::\w+)?)?/,`f_${e.format},vc_${e.codec},q_auto:best,w_1920,c_limit`)}.${e.format}`;return`<source data-src="${i}" type="video/${e.format}${e.htmlCodecs}">`}).join("\n")},cloudinaryVideoFirstFrame:i.getVideoFirstFrame,initials(e,t){if(!e)return"";t?.hash?.endChar&&(e=e.split(t.hash.endChar)[0]);let i=+t?.hash?.maxChars||2,s=e.match(/\b\w/g)?.slice(0,i);return s?(t?.hash?.addText&&(s=s.map(e=>e+t.hash.addText)),s.join(t?.hash?.joinWith||"").toUpperCase()):""},normalizePhone(e){if(!e)return"";let t=String(e).trim();return(t.startsWith("+")?"+":"")+t.replace(/\D/g,"")}}};class d{constructor(e,t,i){if(this.config=e,this.window=t,this.document=i,!this.destroy)throw Error("Controllers must implement a deconstructor")}}let c="lp_lead_form_conversion_fired";function u(e,t){if(e&&t&&"function"==typeof t.sendGoogleTagManagerEvent&&!function(e){try{return"true"===e.sessionStorage.getItem(c)}catch{return!1}}(e))try{t.sendGoogleTagManagerEvent("event","generate_lead");try{e.sessionStorage.setItem(c,"true")}catch{}}catch{}}function h(e){return!!e&&(!!e.expired||Date.now()>=e.expiresAt)}let p="/api/v1/home-valuation";class m extends d{destroy(){}_cleanAddressString(e){if(!e||"string"!=typeof e)return"";let t=e.trim();if(t.includes("User entered address:")){let e=t.match(/User entered address:\s*\n?\s*([^\n]+)/);e&&e[1]&&(t=e[1].trim())}let i=t.indexOf(", call time frame:");return -1!==i&&(t=t.substring(0,i).trim()),t}_transformAddressComponents(e){let t=t=>(e.find(e=>e.componentType===t)||{}).componentName?.text,i={},s=t("street_number"),r=t("route"),a=t("administrative_area_level_1"),o=t("postal_code"),n=t("subpremise"),l=t("locality")||t("sublocality_level_1")||t("neighborhood");return s&&(i.streetNumber=s),r&&(i.streetName=r),l&&(i.city=l),a&&(i.state=a),o&&(i.zipcode=o),n&&(i.addressLine2=n),i}_extractAddressAndCoordinates(e){let t=null,i=null;if(e?.result){let{result:s}=e;s.address?.addressComponents&&(t=this._transformAddressComponents(s.address.addressComponents)),s.geocode?.location&&(i={latitude:s.geocode.location.latitude,longitude:s.geocode.location.longitude})}return{structuredAddress:t,coordinates:i}}_filterEmptyStrings(e){let t={};for(let[i,s]of Object.entries(e))""!==s&&null!=s&&(t[i]=s);return t}_getRawAddress(e){let t=e.activity.content||{},i=e.activity.comments_attributes?.[0]?.text;return[t.address,t["property-address"],t.property_address,t.Property_Address,i,t.message,t.homeValuationAddress,t.propertyAddress].map(e=>e&&this._cleanAddressString(e)).find(Boolean)||""}_logLeadEvent(e,t,i=null){let s={event:e,companyId:this.config.companyId,websiteId:this.config.websiteId,timestamp:new Date().toISOString(),hasEmail:!!t.activity?.author_email,hasAddress:!!this._getRawAddress(t)};if(i&&(s.errorMessage=i.userMessage||(i.status?`Request failed with status ${i.status}`:"An error occurred"),s.errorName=i.name,s.errorStatus=i.status),console.error(`[HomeValuation] ${e}`,JSON.stringify(s)),this.window.posthog)try{this.window.posthog.capture(e,s)}catch(e){console.error("[HomeValuation] PostHog capture failed:",e)}}_getUserFriendlyErrorMessage(e){return"AbortError"===e.name||e.message?.includes("timeout")?"Connection timed out. Please try again.":"TypeError"===e.name&&e.message?.includes("fetch")?"Unable to connect. Please check your internet connection and try again.":503===e.status||502===e.status||504===e.status?"Service temporarily unavailable. Please try again in a moment.":400===e.status?"Please check your information and try again.":"Something went wrong. Please try again or c
2189ontact us directly."}_formatStructuredAddress(e){if(!e||0===Object.keys(e).length)return"";let t=[];return t.push([e.streetNumber,e.streetName,e.addressLine2].filter(Boolean).join(" ")),t.push([[e.city,e.state].filter(Boolean).join(", "),e.zipcode].filter(Boolean).join(" ")),t.filter(Boolean).join(", ")}_buildHomeValuationData(e,t,i,s){let r=this._formatStructuredAddress(i)||this._getRawAddress(e);if(!r)throw Error("Unable to extract home valuation address from form data");let a={companyId:e.companyId,homeValuationAddress:r,homeValuationEstimate:t?new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0,minimumFractionDigits:0}).format(t):null,websiteId:e.page.websiteId,sourceUrl:e.activity.source_url},o={leadEmailAddress:e.activity.author_email,leadFullName:e.activity.author_name,leadFirstName:e.activity.firstName,leadLastName:e.activity.lastName,leadPhoneNumber:e.activity.author_phone,parcelId:e.activity.content?.parcelId,resourceId:e.page.pageMeta?.resourceId,pageId:e.page.pageId,sourceResource:e.page.pageMeta?.s
2189ourceResource,pageElementId:e.page.pageMeta?.pageElementId,formId:e.page.pageMeta?.formId,utmSource:e.activity.content?.utm_source,utmMedium:e.activity.content?.utm_medium,utmCampaign:e.activity.content?.utm_campaign,utmTerm:e.activity.content?.utm_term,utmContent:e.activity.content?.utm_content,utmId:e.activity.content?.utm_id,timeToSell:e.activity.content?.timeToSell,lookingToBuy:e.activity.content?.lookingToBuy,consented:!!e.activity.content?.termsAccepted,referrer:e.referrer,content:e.activity.content||{},fields:e.fields||{}},n=this._filterEmptyStrings(o);return{...a,...n,...i&&{address:i},...s&&{coordinates:s}}}async _validateAddressSafely(e){if(!e)return console.error("Home valuation: No address found in form data"),null;try{return await this._validateAddressWithGoogleMaps(e)}catch(e){throw console.error("Error validating address with Google Maps:",e),e.userMessage=this._getUserFriendlyErrorMessage(e),e}}async _getHomeValuationEstimateSafely(e){try{return await this._getHomeValuationEstimate(e)}catch(e){throw console.error("Error getting home valuation estimate:",e),e.userMessage=this._getUserFriendlyErrorMessage(e),e}}_isSafeRedirectUrl(e){try{let{protocol:t}=new URL(e,this.window.location.href);return"https:"===t||"http:"===t}catch{return!1}}_parseResponsePayload(e){try{return e?JSON.parse(e):{}}catch{return{raw:e}}}_createResponseError(e,t){let i=Error(e&&"object"==typeof e&&Object.keys(e).length?e.message||JSON.stringify(e):"Request failed");return e&&"object"==typeof e&&Object.keys(e).length&&Object.assign(i,e),i.status=t,i}_resolveValuationApiBase(){let{config:e}=this;if(void 0!==e.valuationApiBase&&null!==e.valuationApiBase&&(""!==e.valuationApiBase||!e.isBuilder))return e.valuationApiBase;if(e.websiteApiGatewayUrl)return e.websiteApiGatewayUrl;throw Error("websiteApiGatewayUrl/valuationApiBase not configured for home valuation")}async _submitLead(e,t,i){let s=new AbortController,r=setTimeout(()=>s.abort(),1e4);try{let a=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),signal:s.signal});clearTimeout(r);let o=await a.text(),n=this._parseResponsePayload(o);if(!a.ok)throw this._createResponseError(n,a.status);if(n&&"success"===n.status&&n.redirectUrl){if(h(i))return n;if(!this._isSafeRedirectUrl(n.redirectUrl))return console.error("Home valuation: refusing redirect to unsupported protocol"),n;return this.window.location.href=n.redirectUrl,{redirected:!0,url:n.redirectUrl}}return n}catch(e){throw clearTimeout(r),e}}async _submitHomeValuationRequest(e){let t=this._resolveValuationApiBase();this._logLeadEvent("home_valuation_submission_started",e);try{let i=this._getRawAddress(e),s=null;try{s=await this._validateAddressSafely(i)}catch(t){throw this._logLeadEvent("home_valuation_address_validation_failed",e,t),t}let r=null;try{r=await this._getHomeValuationEstimateSafely(s)}catch(t){this._logLeadEvent("home_valuation_estimate_failed",e,t),r=null}let{structuredAddress:a,coordinates:o}=this._extractAddressAndCoordinates(s),n=`${t}${p}`,l=this._buildHomeValuationData(e,r,a,o),d=await this._submitLead(n,l,e.deadline);return this._logLeadEvent("home_valuation_submission_success",e),d}catch(t){throw t.userMessage||(t.userMessage=this._getUserFriendlyErrorMessage(t)),this._logLeadEvent("home_valuation_submission_failed",e,t),t}}async _validateAddressWithGoogleMaps(e){let{config:t,window:i}=this,s=t.googleMapsAPIKey;if(!s&&i.luxuryPresence?.mapApiLoader&&(s=await i.luxuryPresence.mapApiLoader.getMapApiKey()),!s)throw Error("Google Maps API key not configured");let r=new AbortController,a=setTimeout(()=>r.abort(),1e4);try{let t=await fetch(`https://addressvalidation.googleapis.com/v1:validateAddress?key=${s}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({address:{addressLines:[e]},enableUspsCass:!1}),signal:r.signal});if(clearTimeout(a),!t.ok){let e=Error(`Address validation failed: ${t.status}`);throw e.status=t.status,e}return t.json()}catch(e){throw clearTimeout(a),e}}_hasMandatoryAddressFields(e){return!!(e.streetNumber&&e.streetName&&e.city&&e.state&&e.zipcode)}_logMissingAddressFields(e){let t=[];e.streetNumber||t.push("streetNumber"),e.streetName||t.push("streetName"),e.city||t.push("city"),e.state||t.push("state"),e.zipcode||t.push("zipcode"),console.log("Home valuation estimate skipped - missing required fields:",t.join(", "),"Available fields:",Object.keys(e).join(", "))}_buildAddressQueryString(e){return Object.entries(e).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&")}async _getHomeValuationEstimate(e=null){let t=`${this._resolveValuationApiBase()}${p}`;if(!e?.result?.address?.addressComponents)return null;let i=this._transformAddressComponents(e.result.address.addressComponents);if(!this._hasMandatoryAddressFields(i))return this._logMissingAddressFields(i),null;let s=this._buildAddressQueryString(i),r=`${t}?${s}`,a=new AbortController,o=setTimeout(()=>a.abort(),1e4);try{let e=await fetch(r,{headers:{Accept:"application/json"},signal:a.signal});if(clearTimeout(o),!e.ok){let t=Error(`Home valuation estimate failed: ${e.status}`);throw t.status=e.status,t}let t=await e.json();return t?.valueDollars??null}catch(e){throw clearTimeout(o),e}}}let g="middleName",y="redirect-pending",f=["name","firstName","lastName",g,"email","phone","phoneNumber","source","message","mlsId","sourceUrl"],v="lp_map_key_failed",w="oauthSuccess",b={cookieyes:{eventName:"cookieyes_consent_update",hasAnalyticsConsent:e=>(function(e){let t=e.cookie.match(/cookieyes-consent=([^;
2189]+)/);if(!t)return!1;try{let e=decodeURIComponent(t[1]);if(e.includes(",")){let t=e.split(",").map(e=>e.trim());if(t.some(e=>e.includes(":")))return t.some(e=>"analytics:yes"===e);return t.includes("analytics")}return e.includes("analytics")}catch(e){return!1}})(e),isAnalyticsAccepted:e=>Array.isArray(e?.accepted)&&e.accepted.includes("analytics")},"lp-consent":{eventName:"lp_consent_update",hasAnalyticsConsent:(e,t)=>!!t.__lpConsent?.state?.c?.analytics,isAnalyticsAccepted:e=>!!e?.choices?.analytics}};function S(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function _(e,t){t.forEach(t=>{let i=e[t];Array.isArray(i)&&0===i.length&&delete e[t]})}function I(e,t,i,s){let r=t.map(t=>(function e(t){return Array.isArray(t)?t.flatMap(t=>e(t)):"string"==typeof t?t.split(/\s+/).filter(Boolean):null==t?[]:[t]})(e[t])),a=s?.merge?r.flat():r.find(e=>e.length>0)??[];t.forEach(t=>{delete e[t]}),a.length>0&&(e[i]=[...new Set(a)])}function E(e){let t={...e};if(t.urlWebsite||(t.urlWebsite=null),t.urlYoutube=null,t.urlFacebook=null,t.urlInstagram=null,t.urlLinkedin=null,t.urlPodcast=null,t.urlTwitter=null,Array.isArray(e.socialLinks)){let i=[...e.socialLinks].sort((e,t)=>{let i=e.type?.toLowerCase()||"",s=t.type?.toLowerCase()||"";return i.localeCompare(s)});t.socialLinks=i;let s={youtube:"urlYoutube",facebook:"urlFacebook",instagram:"urlInstagram",linkedin:"urlLinkedin",podcast:"urlPodcast",twitter:"urlTwitter"};i.forEach(e=>{let i=s[e.type?.toLowerCase()??""];i&&(t[i]=e.link)})}return t}function A(e){return e&&Array.isArray(e)?e.map(e=>E(e)):e}function L(e){let{region:t}=e;if(!S(t))return e;let{schools:i,pois:s,...r}=t,a={...r,schools:S(i)?i.data??[]:[],...Array.isArray(s)?{pois:s.map(e=>({...e,category:"string"==typeof e.category?e.category.toUpperCase():e.category}))}:{}};return{...e,region:a}}function x(e){return e&&Array.isArray(e)?e.map(e=>L(e)):e}function $(e){let t=e.featuresAndAmenities;if(!Array.isArray(t))return e;let i=t.map(e=>({featureIds:e.featureIds??[],features:e.features??[],description:e.description}));return{...e,featuresAndAmenities:i}}function T(e){return e&&Array.isArray(e)?e.map(e=>$(e)):e}function C(e,t){return S(e)?t(e):e}function k(e,t){return Array.isArray(e)?t(e):e}var M={};M=`
2190  query PropertyDisclaimers($input: PropertyDisclaimersInput!) {
2191    propertyDisclaimers(input: $input) {
2192      feedId
2193      listingId
2194      resolvedFromListing
2195      listingCardAttribution
2196      listingDetailCourtesy
2197      listingDetailFooter
2198      logo
2199    }
2200  }
2201`;let P={mlsAttribution:"listingCardAttribution",mlsLogo:"logo",listingDetailCourtesy:"listingDetailCourtesy",listingDetailFooter:"listingDetailFooter"},U=new class{constructor(e){this.isBuilder=!1,this.companyId=null,this.websiteId=null,this.pageId=null,this.shareId=null,this.pageMeta=null,this.websiteApiGatewayUrl=null,this.buyerSellerServiceUrl=null,this.leadIngesterUrl=null,this.divolteServiceUrl=null,this.eventBus=null,this.templateId=null,this.myhomeDashboardEnabled=!1,this.mlsEnabled=!1,this.hstValuationRedirectEnabled=!1,this.hvStepTwoCaptureEnabled=!1,this.googleMapsAPIKey=null}get valuationApiBase(){return this.isBuilder?this.websiteApiGatewayUrl:""}destroy(){}setPage(e,t={}){this.pageId=e,this.shareId=t.shareId||null,this.pageMeta={sourceResource:t.sourceResource,pageElementId:t.pageElementId,pageQueryVariables:t.pageQueryVariables||{}}}setIsBuilder(e){this.isBuilder=e}setCompany(e,t={}){this.companyId=e}setWebsite(e,t={}){this.websiteId=e,t.myhomeDashboardEnabled&&(this.myhomeDashboardEnabled=t.myhomeDashboardEnabled),t.mlsEnabled&&(this.mlsEnabled=t.mlsEnabled),t.hstValuationRedirectEnabled&&(this.hstValuationRedirectEnabled=t.hstValuationRedirectEnabled),t.hvStepTwoCaptureEnabled&&(this.hvStepTwoCaptureEnabled=t.hvStepTwoCaptureEnabled)}setWebsiteApiGatewayUrl(e,t={}){this.websiteApiGatewayUrl=e}setBuyerSellerServiceUrl(e,t={}){this.buyerSellerServiceUrl=e}setDivolteServiceUrl(e,t={}){this.divolteServiceUrl=e}setEventBusUrl(e,t={}){this.eventBusUrl=e}setTemplateId(e,t={}){this.templateId=e}setLeadIngesterUrl(e,t={}){this.leadIngesterUrl=e}setGoogleMapsAPIKey(e,t={}){this.googleMapsAPIKey=e}setEventBus({enabled:e,apiKey:t,url:i}){this.eventBus={enabled:e,apiKey:t,url:i}}}({}),N=new class extends d{constructor(e,t,i){super(e,t,i),this.setLoginState=this.setLoginState.bind(this),this.pageId=null,this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}initialize(e){try{let{config:t,document:i}=this;this.pageId=t.pageId,this.modals=i.querySelectorAll("body > #modals >
2201 .modal"),e.modals.forEach(e=>{this._attachModalHandler(e)})}catch(e){console.log(e)}}destroy(){let{document:e}=this;this.exitModalEventListeners.forEach(t=>{e.removeEventListener("mouseout",t)}),this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}setModalWithExpiry(e){let{window:t}=this,i=new Date().getTime()+864e5,s=`modal-controller-${e}`;try{t.localStorage.setItem(s,JSON.stringify(i))}catch(e){}}setLoginState(){let{window:e}=this;try{e.localStorage.setItem("isSignedUp","true")}catch(e){}}getModalWithExpiry(e){let{window:t}=this,i=t.localStorage,s=i.getItem(`modal-controller-${e}`);if(!s)return!1;let r=JSON.parse(s);return!(new Date().getTime()>r)||(i.removeItem(`modal-controller-${e}`),!1)}show(e,t={}){let{window:i}=this,s=this.getModalWithExpiry(e);(e&&!s||!0===t.forced)&&(i.lpUI.showModal(`modal-${e}`,t),this.setModalWithExpiry(e))}_attachModalHandler(e){let{pageId:t}=this,{trigger:i,pageSpecific:s}=e;(!s||e.pages.map(e=>e.pageId).includes(t))&&("EXIT"===i?this._exitModalHandler(e):"TIMER"===i?this._timerModalHandler(e):"FORCED"===i&&this._forcedModalHandler(e))}_exitModalHandler(e){let t=this,{document:i,exitModalTriggered:s}=this,{modalId:r}=e;function a(e){!s[r]&&(e.toElement||e.relatedTarget||(t.show(r),s[r]=!0))}i.addEventListener("mouseout",a),this.exitModalEventListeners.push(a)}_timerModalHandler(e){let{modalId:t,timerDelay:i}=e;setTimeout(()=>{this.show(t)},i)}_forcedModalHandler(e){let{modalId:t}=e,{window:i,document:s}=this;if("true"!==i.localStorage.getItem("isSignedUp")){let e=s.querySelector(`#modal-${t}`),r=e?.querySelector("form"),a=r?.dataset.delay||2e3;r.addEventListener("formsubmitted",()=>{this.setLoginState()}),i.addEventListener("oauthSuccess",()=>{this.setLoginState(),r.classList.add("success"),setTimeout(()=>{i.lpUI.hideModal(`modal-${t}`),r.reset(),r.classList.remove("success")},a)}),this.show(t,{forced:!0})}}}(U,window,document),R=new class extends d{constructor(e,t,i){super(e,t,i),this._boundClickHandler=this._buttonClickHandler.bind(this)}initialize(e={}){try{let{document:e}=this;e.body.removeEventListener("click",this._boundClickHandler),e.body.addEventListener("click",this._boundClickHandler)}catch(e){console.error(e)}}destroy(){let{document:e}=this;e.body.removeEventListener("click",this._boundClickHandler)}_buttonClickHandler(e){this._handleButtonClick(e).catch(e=>console.error(e))}async _handleButtonClick(e){let{window:t,document:i}=this,s=e.target.closest("button, a");if(!s)return;let r=s.dataset.type||"",a=s.href||s.dataset.href||"",o=s.target||"",{submit:n}=s.dataset;if(n){try{await this._handleSubmit(s)}catch(e){console.error(e)}((e,t=!1)=>{if(e){if(t)return window.open(e);window.location.assign(e)}})(a,"_blank"===o)}if(this._trackConversion(s),"VIDEO"===r)return void this._handleVideoButton(s);if("CONTACT_US"===r)return void this._handleContactUsButton(s);if("SUBSCRIBE"===r)return void t.lpUI.showModal("modal-global-subscribe");if("MY_ACCOUNT"===r)return void t.lpUI.showModal("modal-global-my-account");if("SHARE_POPUP"===r){let t=s.querySelector(".share-popup");t&&(t.style.display="flex"),e.stopPropagation();return}if("MODAL_"===r.substring(0,6)){let e=r.substring(6);t.lpUI.showModal(`modal-${e}`);return}if(a?.startsWith("mailto:")){let e=a.substring(7);i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Email",eventValue:e})}else if(a?.startsWith("tel:")){let e=a.substring(4);i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Phone",eventValue:e})}}async _handleSubmit(e){let t=e.closest("form"),{window:i}=this;return t?await i.luxuryPresence.contactForms.submitForm(t):null}_getVimeoSrc(e){if(!e||!e.includes("vimeo.com")||e.length>2e3)return null;let t=e.match(/(?:(?:www\.)?vimeo\.com\/(?:showcase\/\d+(?:\/video\/|\?video[=/])|channels\/(?:\w+\/)?|groups\/(?:[^/]*)\/videos\/|)|player\.vimeo\.com\/video\/)(\d+)(?:(?:\?.*&*h=|\/)+([\d,a-f]+))?/);if(!t)return null;let[,i,s]=t,r=`https://player.vimeo.com/video/${i}?`;return s&&(r+=`h=${s}&`),r+="autoplay=1"}_handleVideoButton(e){let{document:t}=this,i=e.closest("section"),{src:s}=e.dataset,r="";if(s&&(s.includes("youtube.com")||s.includes("youtu.be"))&&!s.includes("youtube.com/embed")){let e=s.match(/(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v=)
2201)|youtu.be\/)([a-zA-Z0-9_-]{6,11})/);e&&(r=e[1])}let a=this._getVimeoSrc(s);if(r?s=`https://youtube.com/embed/${r}?autoplay=1&controls=0`:a&&(s=a),!s||!i)return;let o=s.endsWith(".mp4")||s.endsWith(".webm")||s.includes("cloudinary.com"),n=`
2202      <div id="modal-${i.id}" class="modal visible">
2203        <div class="modal-content">
2204          <div class="lightbox-video">
2205            <div class="video-player">
2206              <div class="embed-container">
2207                ${o?`<video controls autoplay src="${s}"></video>`:`<iframe frameborder="0" allowfullscreen="1" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" width="100%" height="100%" src="${s}"></iframe>`}
2208              </div>
2209            </div>
2210          </div>
2211        </div>
2212        <button class="close lp-close" type="button" aria-label="close modal"><span class="lp-close-icon" aria-hidden="true"></span></button>
2213      </div>
2214    `;t.body.insertAdjacentHTML("beforeend",n);let l=t.getElementById(`modal-${i.id}`);l.querySelector(".close").addEventListener("click",()=>{l.remove()})}_handleContactUsButton(e){let{window:t,document:i}=this;i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"contact"}),t.lpUI.showModal("modal-global-contact-us",{scrollLock:!0})}_trackConversion(e){let{window:t,document:i}=this,{gtagConversionId:s,gtagConversionLabel:r,fbEventName:a}=e.dataset;if(s&&r){t.dataLayer&&t.dataLayer.length&&(t.dataLayer.some(e=>e.length&&"config"===e[0]&&e[1]===s)||i.sendGoogleTagManagerEvent("config",s));let e=`${s}/${r}`;i.sendGoogleTagManagerEvent("event","conversion",{send_to:e})}t.fbq&&a&&t.fbq("track",a,{})}}(U,window,document),B=new class extends d{constructor(e,t,i){super(e,t,i),this.validatedForms=[]}initialize(e={}){try{let{window:t,document:i}=this,{selector:s}=e,r=[];if(r=s?i.querySelectorAll(`${s} form[data-type="contact-form"]`):i.querySelectorAll('form[data-type="contact-form"]'),i.querySelectorAll('input[type="tel"]').length&&!t.libphonenumber&&t?.luxuryPresence?.libs){let{loadJs:e,jsLibsMap:i}=t.luxuryPresence.libs,{libphonenumber:s}=i;e(s.jsSrc,this.attachValidation.bind(this,r))}else this.attachValidation(r);this.validatedForms=this.validatedForms.concat(r)}catch(e){console.log(e)}}destroy(){this.validatedForms=[]}attachValidation(e){e.forEach(e=>{e.querySelectorAll("input, select, textarea").forEach(e=>{this.applyFieldValidation(e)})})}applyFieldValidation(e){"tel"===e.getAttribute("type")&&this._applyPhoneValidation(e)}_applyPhoneValidation(e){let{window:t}=this;if(t.libphonenumber){let i=t.libphonenumber.isValidPhoneNumber;e.addEventListener("keyup",function(){if(this.hasAttribute("required")||this.value.replace(/\s/g,"").length)try{let e=this.value;i(e,"US")?this.setCustomValidity(""):this.setCustomValidity("Please enter a valid phone number.")}catch(e){this.setCustomValidity("Please enter a valid phone number.")}else this.setCustomValidity("")})}}}(U,window,document),D=new class extends d{constructor(e,t,i){super(e,t,i),this.forms=[],this.homeValuationService=new m(e,t,i)}initialize(e={}){try{let{document:t}=this,{selector:i}=e,s=[];(s=i?t.querySelectorAll(`${i} form[data-type="contact-form"]`):t.querySelectorAll('form[data-type="contact-form"]')).forEach(e=>{this._attachSubmitHandler(e)}),this.forms=this.forms.concat(s)}catch(e){console.log(e)}}destroy(){this.forms=[]}submitForm(e){this._handleSubmit(null,e).catch(e=>console.error(e))}_attachValidation(e){let{window:t}=this;e.querySelectorAll("input, select, textarea").forEach(e=>{t.luxuryPresence.validation.applyFieldValidation(e)})}_attachSubmitHandler(e){e.addEventListener("submit",t=>this._handleSubmit(t,e))}_extractFormValues(e){let t=new FormData(e),i={},s=[],r=/^name(?:-\d+)?$/;return t.forEach((e,t)=>{if("string"==typeof e){let a=e.trim();r.test(t)&&a&&s.push(a);let o=i[t];i[t]=o?`${o} ${a}`:a}else i[t]=e}),s.length?i.name=s.join(" ").trim():!i.name&&i.firstName&&(i.name=i.firstName,i.lastName&&(i.name+=` ${i.lastName}`)),this._deriveNameParts(i)}_deriveNameParts(e){if(e.firstName||!e.name)return e;let t=e.name.indexOf(" ");return -1===t?{...e,firstName:e.name}:{...e,firstName:e.name.slice(0,t),lastName:e.lastName||e.name.slice(t+1).trim()}}_buildSubmissionData(e,t,i){let{window:s,config:r}=this,a=Object.keys(e).filter(e=>!f.includes(e)).reduce((t,i)=>(t[i]=e[i],t),{}),{pageId:o,companyId:n,websiteId:l,pageMeta:d}=r,c=s.localStorage.getItem("utm_vars")||"{}",u=s.localStorage.getItem("referrer")||"",h=this._getFormId(i);return{activity:{author_email:e.email,author_name:e.name,firstName:e.firstName||void 0,lastName:e.lastName||void 0,author_phone:e.phone||e.phoneNumber,activity_source:e.source||"CONTACT_INQUIRY",comments_attributes:[{text:e.message||void 0}],source_url:s.location.href,content:{...a,...JSON.parse(c)}},page:{pageId:o,companyId:n,websiteId:l,pageMeta:{...d,formId:h}},companyId:n,referrer:u,fields:t}}_handleSubmissionSuccess(e){let{window:t}=this,i=e.dataset.delay||2e3;e.classList.remove("loading"),e.classList.remove("error"),e.classList.add("success"),e.querySelectorAll(".success").forEach(e
2214=>e.classList.remove("hide")),e.dispatchEvent(new Event("formsubmitted")),setTimeout(()=>{t.lpUI.hideClosestModal(e),e.reset(),t.lpUI.sideMenuHide(),e.querySelectorAll(".success").forEach(e=>e.classList.add("hide")),e.classList.remove("success")},i)}async _handleSubmit(e,t){if(e&&e.preventDefault(),!t.classList.contains("loading")){this._hideSubmissionError(t),t.classList.remove("error"),t.classList.add("loading");try{let e=this._extractFormValues(t);if(e.middleName)return void t.classList.remove("loading");let i=this._getFields(t),s=this._buildSubmissionData(e,i,t);u(this.window,this.document);let r=await this._waitForLeadSubmit(e=>this._submitLeadRequest(s,e));if(this._sendGAEvent(s),r?.redirected)return void this._showRedirectPending(t);this._handleSubmissionSuccess(t)}catch(e){console.error("Form submission failed:",e),t.dispatchEvent(new Event("formsubmiterror")),t.classList.remove("loading"),t.classList.add("error"),e.userMessage?this._showSubmissionError(t,e.userMessage):this._showSubmissionError(t,"Something went wrong. Please try again.")}}}async _waitForLeadSubmit(e){let t,i={expired:!1,expiresAt:Date.now()+6e3},s=new Promise(e=>{t=setTimeout(()=>{i.expired=!0,e(null)},6e3)}),r=e(i).catch(e=>{if(h(i))return null;throw e});try{return await Promise.race([r,s])}finally{clearTimeout(t)}}_showRedirectPending(e){if(e.classList.add(y),e.querySelector(`.${y}__indicator`))return;let t=this.document.createElement("div");t.className=`${y}__indicator`,t.setAttribute("role","status"),t.setAttribute("aria-label","Loading"),t.innerHTML='<span class="lp-i lp-i--spinner lp-i--pulse" aria-hidden="true"></span>',e.appendChild(t)}_aliasUserWithEventBus(e){try{if(!this.window.eventBusProvider?.alias||!this.window.eventBusProvider?.isIdentified||!this.window.eventBusProvider?.getDistinctId||!this.window.LuxuryPresenceEventBus?.generateUUIDv5FromCompanyEmail)return;if(this.window.eventBusProvider.isIdentified())return void console.log("[EventBus] User already identified, skipping alias");let t=e.activity?.author_email,{companyId:i}=this.config;if(!t||!i)return void console.warn("[EventBus] Missing required data for user alias");let s=this.window.eventBusProvider.getDistinctId();if(!s)return void console.warn("[EventBus] No anonymous ID available for alias");let r=this.window.LuxuryPresenceEventBus.generateUUIDv5FromCompanyEmail(i,t);this.window.eventBusProvider.alias({anonId:s,canonicalId:r}),console.log("[EventBus] User aliased with canonical ID")}catch(e){console.error("[EventBus] User alias failed:",e)}}async _submitLeadRequest(e,t){let{config:i}=this;return(this._aliasUserWithEventBus(e),i.myhomeDashboardEnabled&&(e.activity?.activity_source==="HOME_VALUATION"||e.activity?.activity_source==="HOME_VALUE"))?this.homeValuationService._submitHomeValuationRequest({...e,deadline:t}):fetch(`${i.leadIngesterUrl}/api/v1/leads`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).then(e=>e.ok?e.json():e.json().then(e=>{throw e}))}_sendGAEvent(e){let{document:t}=this,i={hitType:"event",eventCategory:"button",eventAction:"click"};switch(e.activity.activity_source){case"NEWSLETTER_SIGNUP":i.eventLabel="Newsletter",t.sendGoogleTagManagerEvent("event","newsletter_signup");break;case"HOME_SEARCH":i.eventLabel="HomeSearch",t.sendGoogleTagManagerEvent("event","home_search");break;case"HOME_VALUE":case"HOME_VALUATION":i.eventLabel="HomeValue",t.sendGoogleTagManagerEvent("event","home_valuation");break;case"EBOOK":i.eventLabel="Ebook",t.sendGoogleTagManagerEvent("event","ebook_download");break;default:i={hitType:"pageview",page:"/thank-you"},t.sendGoogleTagManagerEvent("event","contact_inquiry")}t.sendGoogleAnalyticsEvent(i)}_getFields(e){let t=e.querySelectorAll("input, select, textarea"),i={};return t.forEach(t=>{let{id:s,name:r,type:a}=t;if(r===g)return!0;let o="";if(s){let i=e.querySelector(`label[for='${s}']`);i?o=i.textContent.trim():t.placeholder&&(o=t.placeholder.trim())}i[r]={label:o,type:t.tagName,inputType:"INPUT"===t.tagName?a:"text"}}),i}_getFormId(e){let t=e.closest("section[id^='section-'], footer[id], .modal[id^='modal-']");return t?.id?this._cleanFormId(t.id):""}_cleanFormId(e){for(let t of["section-","modal-"])if(e.startsWith(t))return e.substring(t.length);return e}_showSubmissionError(e,t){let i=e.querySelector(".submission-error-message");i||((i=this.document.createElement("div")).className="submission-error-message",i.setAttribute("role","alert"),e.appendChild(i)),i.textContent=t||"Something went wrong. Please try again.",i.style.display="block"}_hideSubmissionError(e){let t=e.querySelector(".submission-error-message");t&&(t.style.display="none")}}(U,window,document),O=new class extends d{constructor(e,t,i){super(e,t,i),this.retries=3,this.callbacks=[],this.id=`__googleMapsScriptId${Date.now()}`,this._apiKey="",this.reset()}set apiKey(e){this._apiKey=e,this.config.setGoogleMapsAPIKey(e)}get apiKey(){return this._apiKey}reset(){this.deleteScript(),this.done=!1,this.loading=!1,this.failed=!1,this.errors=[],this.onerrorEvent=null}destroy(){this.reset()}async getMapApiKey(){if(this.apiKey)return this.apiKey;let e=this._hadPreviousFailure(),t=!1;for(let i=1;i<=3;i+=1){let s=e&&!t;try{let e=await fetch(this._getMapKeyUrl(i,s));if(t=t||s,this._setFailureFlag(!1),!e.ok)throw Error(`Failed to fetch API key: ${e.status}`);let r=await e.text();if(!r)return"";return this.apiKey=r,this.apiKey}catch(e){console.error(e),i<3&&await this._delay(300*2**(i-1))}}return this._setFailureFlag(!0),""}_getMapKeyUrl(e,t){let i=[];e>1&&i.push(`attempt=${e}`),t&&i.push("recovered_after_failure=1");let s=i.length?`?${i.join("&")}`:"";return`${this._getBaseUrl()}/api/v1/map${s}`}_hadPreviousFailure(){try{return"1"===this.window.sessionStorage.getItem(v)}catch(e){return!1}}_setFailureFlag(e){try{e?this.window.sessionStorage.setItem(v,"1"):this.window.sessionStorage.removeItem(v)}catch(e){}}_delay(e){return new Promise(t=>{this.window.setTimeout(t,e)})}async createUrl(){let e=await this.getMapApiKey();if(!e)throw Error("Refusing to load Google Maps without an API key");
2214let t="https://maps.googleapis.com/maps/api/js";return t+`?callback=__googleMapsCallback&key=${e}&libraries=places`}async setScript(){let e;if(this.document.getElementById(this.id))return void this.callback();try{e=await this.createUrl()}catch(e){console.error(e),this.failed=!0,this.loading=!1,this.onerrorEvent=e,this.callback();return}let t=this.document.createElement("script");t.id=this.id,t.type="text/javascript",t.src=e,t.onerror=this.loadErrorCallback.bind(this),t.defer=!0,t.async=!0,this.document.head.appendChild(t)}loadErrorCallback(e){if(this.errors.push(e),this.errors.length<=this.retries){let e=this.errors.length*2**this.errors.length;console.log(`Failed to load Google Maps script, retrying in ${e} ms.`),setTimeout(()=>{this.deleteScript(),this.setScript().catch(e=>console.error(e))},e)}else this.failed=!0,this.onerrorEvent=e,this.callback()}deleteScript(){let e=this.document.getElementById(this.id);e&&e.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((e,t)=>{this.loadCallback(i=>{i?t(i):e()})})}loadCallback(e){this.callbacks.push(e),this.execute()}setCallback(){this.window.__googleMapsCallback=this.callback.bind(this)}resetIfRetryingFailed(){this.failed&&this.reset()}callback(){this.done=!0,this.loading=!1,this.callbacks.forEach(e=>{e(this.onerrorEvent)}),this.callbacks=[]}execute(){this.window.google&&this.window.google.maps&&this.window.google.maps.version&&this.callback(),this.resetIfRetryingFailed(),this.done?this.callback():this.loading||(this.loading=!0,this.setCallback(),this.setScript().catch(e=>console.error(e)))}_getBaseUrl(){let{isBuilder:e,websiteApiGatewayUrl:t}=this.config;return e?t:""}resizeStaticMapDimensions(e,t){if(e<=1024&&t<=1024)return{width:e,height:t};let i=Math.min(1024/e,1024/t);return{width:parseInt(e*i),height:parseInt(t*i)}}convertThemeToStaticApiUrl(e){return e.map(e=>{let t=e.stylers.reduce((e,t)=>{let i=t.visibility?`visibility:${t.visibility}`:"",s=t.color?`color:${t.color.replace("#","0x")}`:"",r=t.lightness?`lightness:${t.lightness}`:"";return`${e}|${i}${s}${r}`},""),i=e.elementType?`|element:${e.elementType}`:"";return`feature:${e.featureType}${i}${t}`})}async getMapApiSignedUrl(e){try{let t=await fetch(`${this._getBaseUrl()}/api/v1/map/signature?${e}`);if(!t.ok)throw Error("Failed to fetch signed URL");let{url:i}=await t.json();return i}catch(e){return console.error(e),""}}generateStaticMapUrl(e,t,i,s,r,a){let{width:o,height:n}=this.resizeStaticMapDimensions(r,a),l={center:`${e},${t}`,zoom:i,scale:2,size:`${o}x${n}`,key:this.apiKey};s&&(l.style=this.convertThemeToStaticApiUrl(s));let d=new URLSearchParams;return Object.entries(l).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>d.append(e,t.toString())):d.append(e,t.toString())}),`https://maps.googleapis.com/maps/api/staticmap?${d.toString()}`}async generateDigitallySignedStaticMapUrl({srcWidth:e,srcHeight:t,theme:i,...s}){let{width:r,height:a}=this.resizeStaticMapDimensions(e,t),o={...s,size:`${r}x${a}`};i&&(o.style=this.convertThemeToStaticApiUrl(i));let n=new URLSearchParams;Object.entries(o).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.append(e,t.toString())):n.append(e,t.toString())});let l=n.toString();try{return await this.getMapApiSignedUrl(l)}catch(e){return console.error(e),""}}}(U,window,document),q=new class extends d{destroy(){}updateQueryString(e,t,i){i||(i=this.window.location.href);let s=RegExp(`([?&])${e}=.*?(&|#|$)`,"i"),r="";null!=t&&(Array.isArray(t)?t.length&&(r=this.serializeArray(e,t)):"object"==typeof t?(s=RegExp(`([?&])${e}\\[[^=]*\\]=.*?(&|#|$)`,"i"),r=this.serializeObj(t,"",e)):r=`${e}=${encodeURIComponent(t)}`);let a=i.split("#"),o=a[0];if(s.test(i)){let e=o;for(r=r?`$1${r}$2`:"$1";s.test(e);)o=e.replace(s,r),e=e.replace(s,"$1");o=o.replace(/(&|\?)$/,"")}else if(r){let e=-1!==o.indexOf("?")?"&":"?";o+=`${e}${r}`}return void 0!==a[1]&&null!==a[1]&&(o+=`#${a[1]}`),o}getParameterByName(e,t){t||(t=this.window.location.href),e=e.replace(/[[\]]/g,"\\$&");let i=RegExp(`[?&]${e}(=([^&#]*)|&|#|$)`),s=Array.from(RegExp.prototype[Symbol.matchAll].call(i,t)).flat();if(!s.length){let i=RegExp(`[?&]${e}(\\[.*?\\])=(.*?)(?=&|#|$)`,"g");return s=Array.from(RegExp.prototype[Symbol.matchAll].call(i,t)).flat(),this._parseParamToObject(s,"advancedFilters"===e)}return s.length>3?s.reduce((e,t,i)=>((i+1)%3==0&&e.push(decodeURIComponent(t.replace(/\+/g," "))),e),[]):s[2]?decode
2214URIComponent(s[2].replace(/\+/g," ")):""}makePageKey(e){return e.replace("section-","").replace(/-/g,"")}makeParamKey(e,t){return e.global?e.urlKey:`${t}-${e.urlKey}`}deserializeParams(e,t){let i={},s=this.makePageKey(t),r=this.getParameterByName(s);return r&&(i.page=parseInt(r)),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,s),r=this.getParameterByName(t);if("int"===e.type)isFinite(r=parseInt(r))||(r=null);else if("bool"===e.type||"boolean"===e.type)r="true"===r||"false"!==r&&null;else if("json"===e.type)try{r=JSON.parse(r)}catch(e){}i[e.formKey||e.param]=r}),i}serializeParams(e,t,i){let s=this.window.location.href,r=this.makePageKey(t);return s=this.updateQueryString(r,i.page,s),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,r),a=i[e.formKey||e.param];"json"===e.type&&null!=a&&(a=JSON.stringify(a)),s=this.updateQueryString(t,a,s)}),s}formatSliderAtom(e,t=""){return t+(Number.isInteger(e)?e:e.toFixed(2))}formatSliderValue(e,t="",i=""){return e<1e3?this.formatSliderAtom(e,t):e<1e6?`${this.formatSliderAtom(e/1e3,t)}${i}K`:`${this.formatSliderAtom(e/1e6,t)}${i}M`}formatSliderPriceRange(e,t,i,s){return t.min===e&&0!==e?`${s.lowPrefix}${this.formatSliderValue(e,i," ")}`:t.max===e?`${this.formatSliderValue(e,i," ")}${s.highSuffix}`:`${this.formatSliderValue(e,i," ")}`}formatSliderAreaRange(e,t,i,s){return t.min===e&&0!==e?`${s.lowPrefix}${this.formatSliderValue(e)} ${i}`:t.max===e?`${this.formatSliderValue(e)}${s.highSuffix} ${i}`:`${this.formatSliderValue(e)} ${i}`}getSearchFormValues(e){let{queryElement:t,priceSliderElement:i,areaSliderElement:s,neighborhoodSelect:r}=e,a={};if(t&&(a.search=t.value||null),i){let e=i.value.split(";"),t=parseInt(i.dataset.min),s=parseInt(i.dataset.max),r=parseInt(e[0]),o=parseInt(e[1]);a.priceMin=r!==t?r:null,a.priceMax=o!==s?o:null}if(s){let e=s.value.split(";"),t=parseInt(s.dataset.min),i=parseInt(s.dataset.max),r=parseInt(e[0]),o=parseInt(e[1]);a.areaMin=r!==t?r:null,a.areaMax=o!==i?o:null}return r&&(a.neighborhoodId=r.value||null),a}serializeObj(e,t="",i=""){let s=[];for(let r in e)if(e.hasOwnProperty(r)){let a,o=e[r];if(i){let e=t?`[${t}][${r}]`:`[${r}]`;a=`${i}${e}`}else a=t?`${t}[${r}]`:r;null!==o&&Array.isArray(o)?o.length&&s.push(this.serializeArray(a,o)):null!==o&&"object"==typeof o?s.push(this.serializeObj(o,a)):s.push(`${a}=${encodeURIComponent(o)}`)}return s.join("&")}serializeArray(e,t,i=""){let s=[];return t.forEach(t=>{let r=i?`${i}${e}`:e;s.push(`${r}=${encodeURIComponent(t)}`)}),s.join("&")}_parseParamToObject(e,t=!1){if(!e.length)return null;let i={};for(let s=0;s<e.length;s++)if((s+1)%3==0){let r=decodeURIComponent(e[s].replace(/\+/g," ")),a=e[s-1];Object.assign(i,this._setObjectPath(a,r,i,t))}return i}_setObjectPath(e,t,i,s=!1){let r=e.split(/[\[\]]/).filter(Boolean),a=["in","nin","btw","ciin","cinin"],o={},n=o,l=((e,t,i)=>{if(!t)return;let s=(Array.isArray(t)?t:t.match(/([^[.\]])+/g)).reduce((e,t)=>e&&e[t],e);return void 0===s?i:s})(i,r.join("."));return r.forEach((e,o)=>{o===r.length-1?l?n[e]=Array.isArray(l)?[...l,t]:[l,t]:n[e]=s&&a.includes(e)?[t]:t:(n[e]=i[e]?i[e]:{},n=n[e])}),o}}(U,window,document),V=new class extends d{constructor(e,t,i){super(e,t,i),this._createLightbox=this._createLightbox.bind(this),this.expandSliders=[]}initialize(e={}){try{let{document:e}=this,t=e.querySelectorAll(".has-mobile-expand");t.forEach(e=>{this._addExpandButton(e)}),this.expandSliders=this.expandSliders.concat(t)}catch(e){console.log(e)}}destroy(){let{document:e}=this;e.querySelectorAll(".lp-expand-btn, .lp-expand-btn-wrapper").forEach(e=>e.remove()),this.expandSliders=[]}_addExpandButton(e){let{document:t}=this,i=e.closest("section[id]"),s=e.dataset.append,r=i.querySelector(".lp-expand-btn");if(!r)if((r=t.createElement("button")).className="lp-expand-btn",r.setAttribute("aria-label","Open a lightbox"),r.innerHTML='<span class="lp-i lp-i--expand-alt" aria-hidden="true"></span>',s){let e=i.querySelector(s);e&&e.appendChild(r)}else{let i=t.createElement("div");i.className="lp-expand-btn-wrapper",i.style.position="relative",i.appendChild(r),e.parentNode.insertBefore(i,e.nextSibling)}r.addEventListener("click",()=>{this._createLightbox({slider:e,section:i})})}_createLightbox({slider:e,section:t,initialIndex:i}){let{window:s,document:r}=this,a=`lightbox-for-${t?.id}`,o=s.$&&s.$.fn.slick,n=o&&e.slick,l="function"==typeof s.Splide,d=e.classList.contains("is-initialized")&&e.classList.contains("splide");function c(){let t=r.createElement("div");t.id=a,t.className="lp-lightbox",t.setAttribute("tabindex","-1"),t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.innerHTML=`
2215      <button class="lp-lightbox__close" aria-label="close modal"></button>
2216      <div class="lp-lightbox__content">
2217        <div class="lp-lightbox__carousel splide" role="group" aria-label="Image Gallery">
2218          <div class="splide__arrows">
2219            <button class="splide__arrow splide__arrow--prev lp-lightbox-arrow lp-lightbox-arrow--prev"></button>
2220            <button class="splide__arrow splide__arrow--next lp-lightbox-arrow lp-lightbox-arrow--next"></button>
2221          </div>
2222          <div class="splide__track">
2223            <ul class="splide__list"></ul>
2224          </div>
2225        </div>
2226      </div>
2227    `,"function"==typeof s.lpUI.requestScrollLock?s.lpUI.requestScrollLock(a):r.body.style.overflow="hidden",r.body.appendChild(t);let o=t.querySelector(".lp-lightbox__carousel"),n=o.querySelector(".splide__list");t.classList.add("show"),(d?e.querySelectorAll(".splide__slide:not(.splide__slide--clone) img"):e.querySelectorAll("img")).forEac
2227h(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let i=r.createElement("li");i.className="lp-lightbox__slide splide__slide",i.appendChild(t),n.appendChild(i)});let l=new s.Splide(o,{rewind:!0,arrows:!0,arrowPath:"",type:"loop",clones:1,pagination:!1,perPage:1,perMove:1});l.mount(),void 0!==i&&i>=0&&l.go(i),setTimeout(()=>{t.focus()},100);let c=e=>{if(!t.classList.contains("show"))return;let i=t.querySelector(".splide__arrow--prev"),s=t.querySelector(".splide__arrow--next"),r=t.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&i?(e.preventDefault(),i.click()):"ArrowRight"===e.key&&s?(e.preventDefault(),s.click()):"Escape"===e.key&&r&&(e.preventDefault(),r.click())};r.addEventListener("keydown",c),t.querySelector(".lp-lightbox__close").addEventListener("click",()=>{r.removeEventListener("keydown",c),t.classList.remove("show"),l&&l.destroy(),"function"==typeof s.lpUI.releaseScrollLock?s.lpUI.releaseScrollLock(a):r.body.style.overflow="",t.remove()})}if("function"==typeof s.lpUI.requestScrollLock?s.lpUI.requestScrollLock(a):r.body.style.overflow="hidden",o&&!d){let t,i,o,l,d;i={arrows:!0,dots:!1,infinite:!0,draggable:!0,prevArrow:'<button type="button" class="lp-lightbox-arrow--prev lp-lightbox-arrow" aria-label="Previous"></button>',nextArrow:'<button type="button" class="lp-lightbox-arrow--next lp-lightbox-arrow" aria-label="Next"></button>'},(o=r.createElement("div")).id=a,o.className="lp-lightbox",o.setAttribute("tabindex","-1"),o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.innerHTML=`
2228        <button class="lp-lightbox__close" aria-label="close modal"></button>
2229        <div class="lp-lightbox__content">
2230          <div class="lp-lightbox__carousel"></div>
2231        </div>
2232      `,r.body.appendChild(o),l=o.querySelector(".lp-lightbox__carousel"),o.classList.add("show"),n?(t=e.slick.$slides.find("img"),i.initialSlide=e.slick?.currentSlide||0,t.each(function(){s.$(".lp-lightbox__carousel").append(s.$(this).clone(!1).removeAttr("style").wrap('<div class="lp-lightbox__slide"></div>').parent())})):(t=e.querySelectorAll("img")).forEach(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let i=r.createElement("div");i.className="lp-lightbox__slide",i.appendChild(t),l.appendChild(i)}),s.$(l).slick(i),setTimeout(()=>{o.focus()},100),d=e=>{if(!o.classList.contains("show"))return;let t=o.querySelector(".lp-lightbox-arrow--prev"),i=o.querySelector(".lp-lightbox-arrow--next"),s=o.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&t?(e.preventDefault(),t.click()):"ArrowRight"===e.key&&i?(e.preventDefault(),i.click()):"Escape"===e.key&&s&&(e.preventDefault(),s.click())},r.addEventListener("keydown",d),o.querySelector(".lp-lightbox__close").addEventListener("click",()=>{r.removeEventListener("keydown",d),o.classList.remove("show");let t=l?.slick?s.$(l).slick("slickCurrentSlide"):0;l?.slick&&s.$(l).slick("unslick"),n&&s.$(e).slick("slickGoTo",t),"function"==typeof s.lpUI.releaseScrollLock?s.lpUI.releaseScrollLock(a):r.body.style.overflow="",o.remove()})}else l?c():(s.luxuryPresence.libs.loadCss(s.luxuryPresence.libs.jsLibsMap.splide.cssSrc),s.luxuryPresence.libs.loadJs(s.luxuryPresence.libs.jsLibsMap.splide.jsSrc,()=>{c(),s.luxuryPresence.libs.jsLibsMap.splide.isLoaded=!0}))}}(U,window,document),F=new class extends d{destroy(){this.window.divolte||(this.window.divolteLp=function(){(this.window.divolteLp.q=this.window.divolteLp.q||[]).push(arguments)})}initialize(e={}){let{divolteServiceUrl:t}=this.config;t&&!this.window.divolte&&this.loadScript()}loadScript(){let{divolteServiceUrl:e}=this.config,t=this.document.createElement("script");t.id="divolte-script",t.type="text/javascript",t.defer=!0,t.async=!0,t.src=`${e}/divolte.js`,this.document.head.appendChild(t),t.addEventListener("load",this.executeQueue.bind(this))}executeQueue(){(this.window.divolteLp.q||[]).forEach(([e,t])=>{this[e](t)}),this.window.divolteLp=this.divolteLp.bind(this)}divolteLp(e,t){try{this[e](t)}catch(e){console.log(e)}}sendLpEvent(e,t){if(!e.includes("pageView"))return void console.log(`${e} IS NOT SUPPORTED`);let{companyId:i,templateId:s,websiteId:r,pageId:a,shareId:o,pageMeta:n}=this.config;this.window.divolte.signal(e,Object.assign({companyId:i,templateId:s,websiteId:r,pageId:a,shareId:o,pageMeta:n},t))}sendLpPageView(){this.sendLpEvent("pageView",{})}}(U,window,document),j=new class extends d{constructor(e,t,i){super(e,t,i)}initialize(e={}){(void 0!==e.enabled?e.enabled:this.config.eventBus?.enabled)&&this.config.eventBus?.apiKey&&this.config.eventBus?.url&&this.loadScript()}loadScript(){let{eventBusUrl:e}=this.config,t=this.document.createElement("script");t.id="posthog-script",t.type="text/javascript",t.defer=!0,t.async=!0,t.src=`${e}/v2.8.0/event-bus-js.js`,this.document.head.appendChild(t),t.addEventListener("load",this.executeQueue.bind(this))}executeQueue(){this.window.LuxuryPresenceEventBus&&(this.window.eventBusProvider=this.window.LuxuryPresenceEventBus.createEventBusProvider({apiKey:this.config.eventBus.apiKey,host:this.config.eventBus.url,defaultSource:"frontend://website-render-engine"}
2232)),(this.window.eventBusLp.q||[]).forEach(([e,t])=>{this[e](t)}),this.window.eventBusLp=this.eventBusLp.bind(this)}destroy(){if(!this.window.eventBusProvider){this.window.eventBusLp=function(){(this.window.eventBusLp.q=this.window.eventBusLp.q||[]).push(arguments)};return}this.window.eventBusProvider.shutdown()}sendLpEvent(e,t){if("user.activity.page.viewed"!==e)return void console.log(`${e} IS NOT SUPPORTED`);if(!this.window.eventBusProvider)return;let{companyId:i}=this.config;try{this.window.eventBusProvider.capture(e,{company:i,data:{}})}catch(e){console.log("EventBus capture error:",e)}}eventBusLp(e,t){try{this[e](t)}catch(e){console.log(e)}}sendLpPageView(){this.sendLpEvent("user.activity.page.viewed",{})}}(U,window,document),H=new class extends d{constructor(e,t,i){super(e,t,i),this.successListeners=[],this._listenToMessages=this._listenToMessages.bind(this),this._listenToOneTapMessage=this._listenToOneTapMessage.bind(this)}initialize(e={}){try{e.googleSignOnEnabled&&!e.iframe&&this._renderGoogleOneTap(),this.document.querySelectorAll('div[data-signin-type="google-sign-in"]').forEach(e=>this._convertGoogleSignIn(e)),this.document.querySelectorAll('div[data-signin-type="facebook-sign-in"]').forEach(e=>this._convertFacebookSignIn(e))}catch(e){console.log(e)}}destroy(){this.successListeners.forEach(e=>{this.window.removeEventListener("message",this._listenToMessages),this.window.removeEventListener("message",this._listenToOneTapMessage),this.window.removeEventListener(w,this.window[e])})}_renderGoogleOneTap(){if(!this._isGoogleOneTapOnCooldown()){let e=this.document.createElement("div");google.accounts.id.initializeIntermediate({src:this._buildUrlAndCopyAttributes(e,e,"googleOneTap")}),this.window.localStorage.removeItem("googleOneTapExpiration"),this.window.addEventListener("message",this._listenToOneTapMessage)}}_listenToOneTapMessage(e){let t="show_intermediate_iframe",{buyerSellerServiceUrl:i}=this.config,{data:s,origin:r}=e,{type:a,height:o,event:n,source:l,token:d}=s;if(a===t||"hide_intermediate_iframe"===a){let e=this.document.getElementById("onetap_google_intermediate_iframe");e&&(e.style.height=o,e.style.display=a===t?"unset":"none")}r===i&&"GOOGLE_SIGN_ON"===l&&("success"===n?(this._setExpirationLsItem(864e5),this._handleQualifyingQuestionsModal(d)):"cancel"===n&&this._setExpirationLsItem(72e5))}_setExpirationLsItem(e){let t=new Date().getTime()+e;this.window.localStorage.setItem("googleOneTapExpiration",t)}_isGoogleOneTapOnCooldown(){return Number(this.window.localStorage.getItem("googleOneTapExpiration"))>new Date().getTime()}_convertGoogleSignIn(e){this._replaceWithIframe("googleSignIn",e)}_convertFacebookSignIn(e){this._replaceWithIframe("facebookSignIn",e)}_replaceWithIframe(e,t){this._attachSuccessCallback(t);let i=this.document.createElement("iframe");i.src=this._buildUrlAndCopyAttributes(t,i,e),i.dataset.isSocialOauthButton=!0,t.replaceWith(i)}_listenToMessages(e){let{buyerSellerServiceUrl:t}=this.config;if(e.origin===t&&"success"===e.data.event){let e=new Event(w);this.window.dispatchEvent(e),u(this.window,this.document),this.successListeners.forEach(t=>{this.window[t]?this.window[t](e):console.error(`Callback function ${t} not found on window object`)}),this.document.documentElement.classList.add("is-login-success")}}_attachSuccessCallback(e){this.window.addEventListener("message",this._listenToMessages);let t=e.dataset.onSuccessFunctionName;t&&this.successListeners.push(t)}_buildUrlAndCopyAttributes(e,t,i){let{buyerSellerServiceUrl:s,companyId:r,websiteId:a,pageId:o,pageMeta:n}=this.config,{location:l}=this.window,d=l.origin+l.pathname,c=new URL(`${s}/buttons/${i}`),u=this.window.localStorage.getItem("utm_vars"),h=this.window.localStorage.getItem("referrer");c.searchParams.append("companyId",r),c.searchParams.append("websiteId",a),c.searchParams.append("pageId",o),c.searchParams.append("sourceUrl",d),c.searchParams.append("pageMeta",JSON.stringify(n)),u&&c.searchParams.append("utm",u),h&&c.searchParams.append("referrer",h);let p=["data-size","data-width","data-text","data-button-type","data-shape","data-layout","data-max-rows","data-use-continue-as","data-type","data-theme","data-logo_alignment","data-locale"];
2232return Array.from(e.attributes).forEach(e=>{p.includes(e.nodeName)?c.searchParams.append(e.nodeName,e.nodeValue):t.setAttribute("id"===e.nodeName?"data-id":e.nodeName,e.nodeValue)}),c.toString()}_decodeToken(e){try{let t=e.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),i=4-t.length%4,s=4===i?t:t+"=".repeat(i);return JSON.parse(atob(s))}catch(e){return null}}_handleQualifyingQuestionsModal(e){if(e&&this.window.luxuryPresence&&this.window.luxuryPresence.qualifyingQuestionsModal){let t=this._decodeToken(e);t&&t.email&&this.window.luxuryPresence.qualifyingQuestionsModal.showModal(t.email,"Google Sign On")}}}(U,window,document),G=new class extends d{constructor(e,t,i){super(e,t,i),this.showModal=this.showModal.bind(this),this.hasModalBeenSubmitted=this.hasModalBeenSubmitted.bind(this),this.modalId="qualifying-questions-modal",this.cookieKey="qualifyingQuestionsModalSubmitted",this.qualifyingQuestionsModalEnabled=!0,this.eventListeners=[],this.timeouts=[]}initialize(e={}){this.qualifyingQuestionsModalEnabled=e.qualifyingQuestionsModalEnabled??this.qualifyingQuestionsModalEnabled,this.qualifyingQuestionsModalEnabled&&this.attachModalCloseListeners()}destroy(){this.eventListeners.forEach(({element:e,event:t,handler:i})=>{e&&e.removeEventListener&&e.removeEventListener(t,i)}),this.timeouts.forEach(e=>{clearTimeout(e)}),this.restoreBodyScroll(),this.eventListeners=[],this.timeouts=[]}hasModalBeenSubmitted(){return"true"===this.getCookie(this.cookieKey)}setModalSubmittedCookie(){this.setCookie(this.cookieKey,"true",365)}showModal(e,t){!this.qualifyingQuestionsModalEnabled||this.hasModalBeenSubmitted()||(this.updateEmailValue(e),this.updateTriggerSourceValue(t),this.showModalElement())}getModalElement(){let e=this.document.getElementById(this.modalId);return e||console.error("Modal element not found:",this.modalId),e}updateEmailValue(e){let t=this.getModalElement();if(!t)return;let i=t.querySelector('input[name="email"]');i&&"string"==typeof e&&(i.value=e)}updateTriggerSourceValue(e){let t=this.getModalElement();if(!t)return;let i=t.querySelector(`#${this.modalId}-triggerSource`);i&&"string"==typeof e&&(i.value=e)}showModalElement(){let e=this.getModalElement();e&&(e.style.display="flex",this.blockBodyScroll())}getCookie(e){let t=`; ${this.document.cookie}`.split(`; ${e}=`);return 2===t.length?decodeURIComponent(t.pop().split(";").shift()):null}setCookie(e,t,i){let s="";if(i){let e=new Date;e.setTime(e.getTime()+864e5*i),s=`; expires=${e.toUTCString()}`}let r="; path=/; SameSite=Lax";this.window&&this.window.location&&"https:"===this.window.location.protocol&&(r+="; Secure"),this.document.cookie=`${e}=${encodeURIComponent(t||"")}${s}${r}`}blockBodyScroll(){this._prevOverflow=this.document.body.style.overflow,this.document.body.style.overflow="hidden"}restoreBodyScroll(){this.document.body.style.overflow=this._prevOverflow||"",this._prevOverflow=null}attachModalCloseListeners(){let e=this.getModalElement();if(!e)return;let t=this.document.getElementById(`${this.modalId}-form`);if(t){let i=()=>{this.setModalSubmittedCookie();let t=setTimeout(()=>{e.style.display="none",this.restoreBodyScroll()},100);this.timeouts.push(t)};t.addEventListener("formsubmitted",i),this.eventListeners.push({element:t,event:"formsubmitted",handler:i})}let i=e.querySelector('[data-dismiss="modal"]');if(i){let t=()=>{e.style.display="none",this.restoreBodyScroll()};i.addEventListener("click",t),this.eventListeners.push({element:i,event:"click",handler:t})}let s=t=>{(t.target===e||t.target.id===this.modalId)&&(e.style.display="none",this.restoreBodyScroll())};e.addEventListener("click",s),this.eventListeners.push({element:e,event:"click",handler:s})}}(U,window,document),K=new class extends d{constructor(e,t,i){super(e,t,i),this.isValidating=!1,this.lastValidationResult=null,this.lastValidationTime=null,this.validationCacheDuration=3e5}destroy(){this.isValidating=!1,this.lastValidationResult=null,this.lastValidationTime=null}async validateSession(e={}){let{useCache:t=!0}=e;if(t&&null!==this.lastValidationResult&&this.lastValidationTime&&Date.now()-this.lastValidationTime<this.validationCacheDuration)return this.lastValidationResult;if(this.isValidating)return null!==this.lastValidationResult&&this.lastValidationResult;this.isValidating=!0;let i=`
2233      query {
2234        validSession {
2235          success
2236        }
2237      }
2238    `;try{let e=await this.window.fetch("/graphql",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({query:i})});if(!e.ok)return console.error("SessionController: HTTP error during session validation",e.status),this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1;let t=await e.json();if(t.errors)return this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1;let s=t.data?.validSession?.success===!0;return this.lastValidationResult=s,this.lastValidationTime=Date.now(),s}catch(e){return console.error("SessionController: Error validating session",e),this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1}finally{this.isValidating=!1}}clearCache(){this.lastValidationResult=null,this.lastValidationTime=null}}(U,window,document),z=new class extends d{constructor(e,t,i){super(e,t,i),this.consentListener=null,this.eventName=null}destroy(){this.consentListener&&this.eventName&&(this.document.removeEventListener(this.eventName,this.consentListener),this.consentListener=null)}loadScript(){this.document.getElementById("posthog-script")||this.window.luxuryPresence.eventBus.initialize({enabled:this.config.eventBus?.enabled}),this.document.getElementById("divolte-script")||this.window.luxuryPresence.divolte.initialize({})}removeScripts(){this.window.luxuryPresence?.eventBus?.destroy?.(),this.window.luxuryPresence?.divolte?.destroy?.(),this.document.getElementById("posthog-script")?.remove(),this.document.getElementById("divolte-script")?.remove()}async initialize(e={}){let t=b[e.provider];if(!t)return;this.eventName=t.eventName;let i=await this.window.luxuryPresence.session.validateSession();(t.hasAnalyticsConsent(this.document,this.window)||i)&&this.loadScript(),this.consentListener||(this.consentListener=e=>{t.isAnalyticsAccepted(e.detail)?this.loadScript():this.removeScripts()},this.document.addEventListener(t.eventName,this.consentListener))}}(U,window,document),Q=new class extends d{destroy(){}transformVariables(e,t){let i;return _(i={...t},["testimonialId"]),I(i,["testimonialId"],"testimonialIds"),0===i.limit&&delete i.limit,(void 0===i.limit||null===i.limit)&&(("testimonials"===e||"testimonialsCount"===e)&&(i.limit=50),("agents"===e||"agentsCount"===e||"developments"===e||"developmentsCount"===e||"neighborhoods"===e||"neighborhoodsCount"===e||"posts"===e||"postsCount"===e||"pressReleases"===e||"pressReleasesCount"===e)&&(i.limit=100)),!function(e){let{sortDir:t}=e;"string"==typeof t&&t.includes("_")&&(e.sortDir=t.replace(/_/g," "))}(i),!function(e,t){switch(t){case"agent":break;case"testimonials":case"testimonialsCount":_(e,["testimonialIds"]);break;case"agents":case"agentsCount":_(e,["officeId","teamId","developmentId","agentIds","tags"]),I(e,["officeId"],"officeIds"),I(e,["teamId"],"teamIds"),I(e,["developmentId"],"developmentIds");break;case"neighborhoods":case"neighborhoodsCount":_(e,["neighborhoodIds","neighborhoodId"]),I(e,["neighborhoodIds","neighborhoodId"],"neighborhoodId");break;case"developments":case"developmentsCount":_(e,["agentId","neighborhoodIds","neighborhoodId","developmentIds","tag"]),e.agentId&&Array.isArray(e.agentId)&&([e.agentId]=e.agentId),I(e,["neighborhoodIds","neighborhoodId"],"neighborhoodIds"),I(e,["developmentIds","developmentId"],"developmentIds");break;case"properties":case"propertiesCount":_(e,["statusIds","statusId","propertyTypeIds","propertyTypeId","propertyId","networkId","propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","
2238spaceTypeIds","addressState","addressCity","backfillProviders","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"]),["propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","spaceTypeIds","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"].forEach(t=>I(e,[t],t)),I(e,["statusIds","statusId"],"propertyStatusId"),e.excludeStatusId&&(e.excludePropertyStatusId=e.excludeStatusId,delete e.excludeStatusId),I(e,["propertyTypeIds","propertyTypeId"],"propertyTypeId"),I(e,["networkId"],"networkId"),I(e,["propertyId"],"propertyIds"),["salesPriceGTE","salesPriceLTE","leasePriceGTE","leasePriceLTE","livingSpaceSizeGTE","livingSpaceSizeLTE"].forEach(t=>{null!=e[t]&&(e[t]=Math.trunc(Number(e[t])))});break;case"posts":case"postsCount":_(e,["categoryIds","categoryId","neighborhoodId"]),void 0!==e.order&&(e.sort=e.order,delete e.order),I(e,["categoryIds","categoryId"],"categoryId");break;case"postCategories":_(e,["categoryId","categoryIds"]),void 0!==e.order&&(e.sort=e.order,delete e.order),I(e,["categoryIds","categoryId"],"categoryId");break;case"pressReleases":case"pressReleasesCount":_(e,["pressReleaseId","categories","propertyId","developmentId","agentId","teamId"]),I(e,["pressReleaseId"],"pressReleaseIds");break;case"offices":case"officesCount":_(e,["officeId","officeIds","tags"]),I(e,["officeId"],"officeIds");break;case"teams":case"teamsCount":_(e,["teamId","teamIds"]),I(e,["teamId"],"teamIds");break;case"pois":_(e,["categories"]),Array.isArray(e.categories)&&(e.categories=e.categories.map(e=>e.toLowerCase())),"string"==typeof e.sortBy&&(e.sortBy=e.sortBy.toLowerCase())}}(i,e),i}transformResponse(e,t){return"agent"===e?C(t,E):"agents"===e||"agentsCount"===e?k(t,A):"neighborhood"===e?C(t,L):"neighborhoods"===e||"neighborhoodsCount"===e?k(t,x):"development"===e?C(t,$):"developments"===e||"developmentsCount"===e?k(t,T):t}transformPage(e){return{items:e&&e.items||[],count:e&&e.total||0}}applyPropertyDisclaimers(t,i){if(!Array.isArray(t)||!t.length||!i||!i.length)return Promise.resolve(t);let s=t.filter(e=>e&&e.vendorId&&e.mlsId).map(e=>({feedId:e.vendorId,listingId:e.mlsId,officeName:e.officeName??null,agentMlsId:e.mlsAgentId??null,officeMlsId:e.mlsOfficeId??null,attributionContact:e.attributionContact??null,status:e.status??null,syncedAt:e.syncedAt??null})),r=e=>{let s={};return(e||[]).forEach(e=>{s[`${e.feedId}:${e.listingId}`]=e}),t.map(e=>{let t=e&&s[`${e.vendorId}:${e.mlsId}`],r={};return i.forEach(e=>{let i=t?t[P[e]]:void 0;r[e]=i??null}),{...e,...r}})};if(!s.length)return Promise.resolve(r([]));let{websiteId:a}=this.config;return this.window.superagent?this.window.superagent.post(`${this.window.luxuryPresence.defaults.routerUrl}/graphql`).withCredentials().send({query:e(M),variables:{input:{websiteId:"string"==typeof a?a:void 0,properties:s}}}).then(e=>r(e.body&&e.body.data&&e.body.data.propertyDisclaimers),e=>(console.warn("[RouterApiController] propertyDisclaimers lookup failed:",e),r([]))):Promise.resolve(r([]))}}(U,window,document);function W(e,t){if(window.luxuryPresence[e])try{window.luxuryPresence[e].destroy()}catch(e){console.log(e)}window.luxuryPresence[e]=t}W("config",U),W("modals",N),W("buttons",R),W("validation",B),W("contactForms",D),W("mapApiLoader",O),W("pagination",q),W("expandSliders",V),W("divolte",F),W("eventBus",j),W("oauth",H),W("qualifyingQuestionsModal",G),W("session",K),W("consent",z),W("redirects",{checkHstRedirect:function(e){let{config:t}=window.luxuryPresence;return!t.hvStepTwoCaptureEnabled&&!!t.hstValuationRedirectEnabled&&!!t.mlsEnabled&&!!t.myhomeDashboardEnabled&&(window.location.href=`/home-search/home-valuation?address=${encodeURIComponent(e)}`,!0)},destroy(){}}),W("routerApi",Q),window.luxuryPresence.formatSliderPriceRange=q.formatSliderPriceRange.bind(q),window.luxuryPresence.formatSliderAreaRange=q.formatSliderAreaRange.bind(q),window.luxuryPresence.getSearchFormValues=q.getSearchFormValues.bind(q),window.luxuryPresence.handlebarsHelpersFactory=function(i){return e(t)(i,{isEqual:(e,t)=>e==t})}})();
2239//# sourceMappingURL=lp-sdk.js.map
2240
2241    </script>
2241
2242
2243    
2243<script>
2244        var lpGlobalInitialized = false;
2245
2246        function lpGlobalInit () {
2247          if (lpGlobalInitialized) {
2248            return;
2249          }
2250            lpGlobalInitialized = true;
2251            // Initialize wow animation plugin only according to turbolinks
2252            var wow;
2253            if (window.WOW) {
2254                wow = new WOW({
2255                    animateClass: 'animated',
2256                    offset: wowOffset,
2257                    live: false,
2258                    callback: function(box) {}
2259                });
2260            }
2261            // Initialize handlebar helpers only once
2262            function handlebarsInit() {
2263              if (!window.Handlebars) {
2264                return;
2265              }
2266              HandlebarsIntl.registerWith(Handlebars);
2267              Handlebars.registerHelper(window.luxuryPresence.handlebarsHelpersFactory(Handlebars));
2268            }
2269
2270            handlebarsInit();
2271
2272              var modalContentUrl = "/modals.html";
2273                const modalsContainer = document.getElementById('modals');
2274                if (modalsContainer) {
2275                  fetch(modalContentUrl).then(function(res) {
2276                    if (!res.ok) {
2277                      throw new Error(`HTTP error! Status: ${res.status}`);
2278                    }
2279                    return res.text();
2280                  }).then(function(resultText) {
2281                    modalsContainer.innerHTML = resultText;
2282
2283                    // now we need to execute all script elements
2284                    Array.from(modalsContainer.getElementsByTagName('script')).forEach(function (s) {
2285                      const script  = document.createElement("script");
2286                      script.text = s.innerHTML;
2287                      Array.from(s.attributes).forEach(function (a) {
2288                        script.setAttribute(a.name, a.value);
2289                      })
2290                      s.parentNode.replaceChild(script, s);
2291                    });
2292
2293                    try {
2294                      window.luxuryPresence.modals.initialize(window.luxuryPresence._modalIncludes);
2295                      window.luxuryPresence.contactForms.initialize({ selector: '#modals' });
2296                      window.luxuryPresence.validation.initialize({ selector: '#modals' });
2297                      window.luxuryPresence.oauth.initialize({
2298                        googleSignOnEnabled: true,
2299                        iframe: false });
2300                    } catch (e) {
2301                      console.log(e);
2302                    }
2303                    document.querySelectorAll('.modals > .modal .close').forEach(closeModalBtn => {
2304                      closeModalBtn.addEventListener('click', function() {
2305                        window.lpUI.hideClosestModal(closeModalBtn);
2306                      });
2307                    });
2308                  }).catch((e) => console.log(e));
2309                }
2310            /* Initialize Luxury Presence SDK */
2311            try {
2312                window.luxuryPresence.config.setCompany("116d6abd-55d8-410f-b7f3-bdd7f6c5b727", {});
2313                window.luxuryPresence.config.setWebsite("efd0b616-93bf-43b2-a015-21b3983523b4", {
2314                    myhomeDashboardEnabled: true,
2315                    mlsEnabled: true,
2316                    hstValuationRedirectEnabled: true,
2317                    hvStepTwoCaptureEnabled: false
2318                });
2319                const url = new URL(window.location.href);
2320                const shareId = url.searchParams.get('shareId');
2321                window.luxuryPresence.config.setPage("ac498edb-f816-4af6-aa6a-c17f67e90223", {
2322                    sourceResource: "",
2323                    pageElementId: "",
2324                    pageQueryVariables: {},
2325                    shareId: "",
2326                });
2327                window.luxuryPresence.config.setWebsiteApiGatewayUrl("https://wgw.luxurypresence.com", {});
2328                window.luxuryPresence.config.setBuyerSellerServiceUrl("https://bss.luxurypresence.com", {});
2329                    window.luxuryPresence.config.setDivolteServiceUrl("https://t.luxurypresence.com", {});
2330                  window.luxuryPresence.config.setEventBusUrl("https://cdn.luxurypresence.com/scripts/event-bus-js", {});
2331                  window.luxuryPresence.config.setEventBus({
2332                    enabled: true,
2333                    apiKey: "phc_PMYT31xlmXBaTCwpIRx1v6RrpLVZIuP47N3mOT6KLnr",
2334                    url: "https://p.luxurypresence.com",
2335                  });
2336                window.luxuryPresence.config.setTemplateId("1d3967df-14f2-449d-87b7-bd68bf93906f", {});
2337                window.luxuryPresence.config.setLeadIngesterUrl("https://leads.luxurypresence.com", {});
2338                window.luxuryPresence.buttons.initialize({});
2339                    window.luxuryPresence.consent.initialize({ provider: 'lp-consent' });
2340                window.luxuryPresence.contactForms.initialize({});
2341                window.luxuryPresence.validation.initialize({});
2342                window.luxuryPresence.expandSliders.initialize({});
2343                window.luxuryPresence.oauth.initialize({ googleSignOnEnabled: true, iframe: false });
2344                window.luxuryPresence.qualifyingQuestionsModal.initialize({ qualifyingQuestionsModalEnabled: true });
2345            } catch (e) {
2346                console.log(e);
2347            }
2348
2349            /* Inject Section Specific Javascript */
2350                try {
2351(function init(sectionDomId) {
2352  const section = document.getElementById(sectionDomId);
2353  const contactTitle = section.querySelector('.js-contact-title');
2354  const emailInput = section.querySelector('.js-email-input');
2355  const emailRegex = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~\-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+/;
2356  emailInput.addEventListener('input', function () {
2357    if (emailRegex.test(this.value)) {
2358      this.setCustomValidity('');
2359    } else {
2360      this.setCustomValidity('Please enter a valid email address.');
2361    }
2362    this.reportValidity();
2363  });
2364  const inputName = section.querySelector('.js-input-name');
2365  inputName.addEventListener('keyup', function () {
2366    if (this.value.replaceAll(/\d/g, "").trim().split(" ").length < 2 || this.value.replaceAll(/\d/g, "").trim() === "") {
2367      this.setCustomValidity("Please input your first name and last name.");
2368    } else {
2369      this.setCustomValidity("");
2370    }
2371  });
2372  function setHttp(link) {
2373    if (link.search(/^http[s]?\:\/\/|\//) == -1) {
2374      link = 'https://' + link;
2375    }
2376    return link;
2377  }
2378  const socialLinks = section.querySelectorAll('.lp-socials__link, .contact-form-modal-details__socials-l
2378ink');
2379  socialLinks.forEach(linkElement => {
2380    const href = linkElement.getAttribute('href');
2381    if (href) {
2382      linkElement.setAttribute('href', setHttp(href));
2383    }
2384  });
2385  if (contactTitle.length < 1) return;
2386  let words = contactTitle.textContent.split(" ");
2387  if (words.length > 1) {
2388    contactTitle.innerHTML = `<span class="contact__title-top">${words[0]} </span><span class="contact__title-bottom">${words.splice(1).join(" ")}</span>`;
2389  }
2390  const addRedirectToForm = () => {
2391    const redirectLink = document.getElementById(`${sectionDomId}`).querySelector('.js-redirect-link');
2392    const form = document.getElementById(`${sectionDomId}`).querySelector('.js-form');
2393    function redirectPage(link) {
2394      if (link) {
2395        const rawHref = link.getAttribute('href');
2396        link.setAttribute('href', setHttp(rawHref));
2397        link.click();
2398      }
2399    }
2400    function setHttp(link) {
2401      if (link.search(/^http[s]?\:\/\/|\//) == -1) {
2402        link = 'http://' + link;
2403      }
2404      return link;
2405    }
2406    form.addEventListener("reset", function () {
2407      redirectPage(redirectLink);
2408    });
2409  };
2410  addRedirectToForm();
2411})('modal-global-contact-us');
2412} catch(e) {
2413console.log(e);
2414}
2415                
2416                try {
2417(function init(sectionDomId) {
2418  (function () {
2419    const observer = new IntersectionObserver(entries => {
2420      entries.forEach(entry => {
2421        if (entry.isIntersecting) entry.target.classList.add('is-in-viewport');
2422      });
2423    }, {
2424      threshold: 0.5
2425    });
2426    const initialElements = document.querySelectorAll('[data-animate="true"]');
2427    initialElements.forEach(element => observer.observe(element));
2428    const container = document.querySelector('.data-container');
2429    if (container) {
2430      const mutationObserver = new MutationObserver(mutations => {
2431        mutations.forEach(mutation => {
2432          if (mutation.type === 'childList') {
2433            mutation.addedNodes.forEach(node => {
2434              if (node.nodeType === 1 && node.getAttribute('data-animate') === 'true') observer.observe(node);
2435            });
2436          }
2437        });
2438      });
2439      mutationObserver.observe(container, {
2440        childList: true,
2441        subtree: true
2442      });
2443    }
2444  })();
2445  const sectionSelector = document.getElementById(sectionDomId);
2446  const searchToggleSelector = sectionSelector.querySelector('.js-search-toggle-btn');
2447  const searchWrapperSelector = sectionSelector.querySelector('.js-header-search');
2448  const header = sectionSelector.querySelector('.js-header');
2449  let lastScrollTop = 0;
2450  (function (stickyAnchorRoot) {
2451    if (!stickyAnchorRoot) return;
2452    function getInFlowTop(target) {
2453      var inlineValue = target.style.getPropertyValue('position');
2454      var inlinePriority = target.style.getPropertyPriority('position');
2455      target.style.setProperty('position', 'relative', 'important');
2456      var top = target.getBoundingClientRect().top + window.pageYOffset;
2457      if (inlineValue) target.style.setProperty('position', inlineValue, inlinePriority);else target.style.removeProperty('position');
2458      var scrollMarginTop = parseFloat(window.getComputedStyle(target).scrollMarginTop) || 0;
2459      return Math.max(0, top - scrollMarginTop);
2460    }
2461    stickyAnchorRoot.addEventListener('click', function (event) {
2462      if (event.defaultPrevented || event.button !== 0) return;
2463      if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
2464      if (document.body.hasAttribute('data-scroll-container')) return;
2465      var link = event.target.closest('a[href]');
2466      if (!link || !stickyAnchorRoot.contains(link) || link.target === '_blank') return;
2467      var href = link.getAttribute('href');
2468      if (!/^#[^#]/.test(href)) return;
2469      var targetId;
2470      try {
2471        targetId = decodeURIComponent(href.slice(1));
2472      } catch (e) {
2473        return;
2474      }
2475      var target = document.getElementById(targetId);
2476      if (!target || window.getComputedStyle(target).position !== 'sticky') return;
2477      event.preventDefault();
2478      if (window.location.hash !== href) window.history.pushState(null, '', href);
2479      window.requestAnimationFrame(function () {
2480        window.scrollTo({
2481          top: getInFlowTop(target)
2482        });
2483      });
2484    });
2485  })(document.getElementById(sectionDomId));
2486  const subNavOpeners = sectionSelector.querySelectorAll('.js-subnav-opener');
2487  subNavOpeners.forEach(opener => {
2488    opener.addEventListener('click', function (e) {
2489      e.preventDefault();
2490      e.stopPropagation();
2491      const parent = opener.parentElement;
2492      subNavOpeners.forEach(otherOpener => {
2493        if (otherOpener !== opener) {
2494          otherOpener.parentElement.classList.remove('header-navigation__item--sub-nav--opened');
2495        }
2496      });
2497      parent.classList.toggle('header-navigation__item--sub-nav--opened');
2498    });
2499  });
2500  document.addEventListener('click', function (e) {
2501    if (!e.target.closest('.js-subnav-opener') && !e.target.closest('.header-navigation__item--sub-nav--opened')) {
2502      subNavOpeners.forEach(opener => {
2503        opener.parentElement.classList.remove('header-navigation__item--sub-nav--opened');
2504      });
2505    }
2506  });
2507  function initHeaderColors() {
2508    try {
2509      var colorStr = window.getComputedStyle(header).getPropertyValue("--backgroundColor");
2510      var bgColor = makeColor(colorStr);
2511      var isDark = (bgColor.rgba.r * 299 + bgColor.rgba.g * 587 + bgColor.rgba.b * 114) / 1000 < 128;
2512      sectionSelector.classList.add('is-background-color-' + (isDark ? 'dark' : 'light'));
2513    } catch (e) {}
2514  }
2515  function makeColor(str) {
2516    var color = {
2517      rgba: {
2518        r: 0,
2519        g: 0,
2520        b: 0,
2521        a: 0
2522      }
2523    };
2524    if (str && str.match) {
2525      var m = str.match(/rgba?\s*\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*([\.0-9]+))?\)/);
2526      if (m) {
2527        color.rgba.r = parseInt(m[1]);
2528        color.rgba.g = parseInt(m[2]);
2529        color.rgba.b = parseInt(m[3]);
2530        color.rgba.a = parseFloat(m[4]);
2531        if (isNaN(color.rgba.a)) {
2532          color.rgba.a = 1;
2533        }
2534      }
2535    }
2536    return color;
2537  }
2538  initHeaderColors();
2539  var navEl = document.querySelector('nav > header') || document.querySelector('nav');
2540  var navbarHeight = navEl ? navEl.offsetHeight : 0;
2541  if (navEl) {
2542    if (window.ResizeObserver) {
2543      new ResizeObserver(function (entries) {
2544        if (!entries.length) return;
2545        navbarHeight = entries[0].target.offsetHeight;
2546      }).observe(navEl);
2547    } else {
2548      window.addEventListener('resize', function () {
2549        navbarHeight = navEl.offsetHeight;
2550      });
2551    }
2552  }
2553  function isLocomotiveActive() {
2554    return document.body.hasAttribute('data-scroll-container');
2555  }
2556  function updateHeaderVisibility(currentScrollTop) {
2557    if (!searchWrapperSelector || searchWrapperSelector.style.display !== 'block') {
2558      if (currentScrollTop === 0) header.classList.remove('header--hide');else if (currentScrollTop > lastScrollTop) header.classList.add('header--hide');else header.classList.remove('header--hide');
2559    }
2560    lastScrollTop = currentScrollTop;
2561  }
2562  function customHeaderHideShow(currentScrollTop) {
2563    if (!navEl) return;
2564    if (currentScrollTop > 0) {
2565      navEl.classList.add('scroll');
2566    } else {
2567      navEl.classList.remove('scroll');
2568    }
2569    if (currentScrollTop > lastScrollTop && currentScrollTop > navbarHeight) {
2570      document.documentElement.style.setProperty('--global-header-height', '0px');
2571    } else {
2572      document.documentElement.style.setProperty('--global-header-height', navbarHeight + 'px');
2573    }
2574  }
2575  window.addEventListener('scroll', function () {
2576    if (isLocomotiveActive()) return;
2577    var currentScrollTop = window.scrollY || document.documentElement.scrollTop;
2578    updateHeaderVisibility(currentScrollTop);
2579  });
2580  var isTicking = false;
2581  var latestLocoScrollY = 0;
2582  window.addEventListener('locomotive-scroll', function (e) {
2583    latestLocoScrollY = e.detail.scrollY;
2584    if (!isTicking) {
2585      window.requestAnimationFrame(function () {
2586        customHeaderHideShow(latestLocoScrollY);
2587        updateHeaderVisibility(latestLocoScrollY);
2588        isTicking = false;
2589      });
2590      isTicking = true;
2591    }
2592  });
2593  if (searchToggleSelector !== null) {
2594    searchToggleSelector.addEventListener('click', function () {
2595      if (searchWrapperSelector.style.display === 'block') {
2596        searchWrapperSelector.style.display = 'none';
2597      } else {
2598        searchWrapperSelector.style.display = 'block';
2599        header.classList.remove('header--hide');
2600      }
2601    });
2602    document.addEventListener('click', function (evt) {
2603      if (!searchToggleSelector.contains(evt.target) && !searchWrapperSelector.contains(evt.target)) searchWrapperSelector.style.display = 'none';
2604    });
2605  }
2606  window.luxuryPresence.mapApiLoader.load().then(() => {
2607    if (!searchWrapperSelector) return;
2608    const templateHTML = sectionSelector.querySelector('.js-card-template')?.innerHTML;
2609    const itemTemplate = templateHTML && Handlebars.compile(templateHTML);
2610    const searchMls = searchWrapperSelector.dataset.searchMls === 'true';
2611    const searchProperties = searchWrapperSelector.dataset.searchProperties === 'true';
2612    const selectedCountries = searchWrapperSelector.dataset.locations;
2613    const searchInputSelector = sectionSelector.querySelector('.js-header-search-input');
2614    const searchIconSelector = sectionSelector.querySelector('.js-header-btn-search');
2615    const closeIconSelector = sectionSelector.querySelector('.js-header-btn-close');
2616    const searchResultsSelector = sectionSelector.querySelector('.js-header-search-results-holder');
2617    const resultsContainerSelector = sectionSelector.querySelector('.js-header-results-container');
2618    const loaderSelector = sectionSelector.querySelector('.js-header-spinner');
2619    const predefinedSelector = sectionSelector.querySelector('.js-header-search-results-predefined');
2620    const nothingFoundSelector = sectionSelector.querySelector('.js-header-spinner-nothing-found');
2621    const service = new google.maps.places.AutocompleteService();
2622    const geocoder = new google.maps.Geocoder();
2623    var keyword;
2624    var leasePropertyState = false;
2625    var leasePropertySearched;
2626    var isLoading = false;
2627    var newSearchTimer;
2628    var placesResult = {};
2629    function updateSearchDisplay() {
2630      var hasResults = !!resultsContainerSelector.innerHTML;
2631      var hasPredefined = predefinedSelector.querySelectorAll('a:not(.not-processed)').length > 0;
2632      nothingFoundSelector.style.display = 'none';
2633      if (hasResults) {
2634        predefinedSelector.style.display = 'none';
2635        loaderSelector.style.display = 'none';
2636        resultsContainerSelector.style.display = 'block';
2637      } else if (isLoading) {
2638        resultsContainerSelector.style.display = 'none';
2639        predefinedSelector.style.display = 'none';
2640        loaderSelector.style.display = 'block';
2641      } else if (hasPredefined) {
2642        resultsContainerSelector.style.display = 'none';
2643        loaderSelector.style.display = 'none';
2644        predefinedSelector.style.display = 'block';
2645      } else {
2646        resultsContainerSelector.style.display = 'none';
2647        loaderSelector.style.display = 'none';
2648        predefinedSelector.style.display = 'none';
2649        if (keyword) nothingFoundSelector.style.display = 'block';
2650      }
2651    }
2652    function moveSelection(up) {
2653      var count = resultsContainerSelector.innerHTML ? resultsContainerSelector : predefinedSelector;
2654      var links = count.querySelectorAll('.results-link');
2655      if (!links.length) return;
2656      var idx = -1;
2657      links.forEach((link, i) => {
2658        if (idx === -1 && link.classList.contains('header-search-results__link--selected')) idx = i;
2659      });
2660      var newIdx;
2661      if (up) {
2662        newIdx = idx - 1;
2663        if (newIdx < 0) newIdx = links.length - 1;
2664      } else {
2665        newIdx = idx + 1;
2666        if (newIdx > links.length - 1) newIdx = 0;
2667      }
2668      if (newIdx !== idx) {
2669        searchResultsSelector.querySelector('.header-search-results__link--selected')?.classList.remove('header-search-results__link--selected');
2670        links[newIdx].classList.add('header-search-results__link--selected');
2671      }
2672    }
2673    function startSearch() {
2674      const term = searchInputSelector.value;
2675      if (term === keyword && leasePropertySearched === leasePropertyState) return;
2676      leasePropertySearched = leasePropertyState;
2677      keyword = term;
2678      if (term) doSearch(term, leasePropertySearched);else setResults(null);
2679    }
2680    function mlsSearch(term) {
2681      var query = {
2682        omnibox: term,
2683        limit: 5
2684      };
2685      return superagent.get(window.location.protocol + '//' + window.location.host + '/home-search/listings.json').query(query).then(function (res) {
2686        if (!Array.isArray(res.body)) return [];
2687        return res.body.map(function (item) {
2688          return {
2689            id: item.id,
2690            display_address: [item.address_1, item.city, [item.state, item.postal_code].filter(function (i) {
2691              return i;
2692            }).join(' ')].filter(function (i) {
2693              return i;
2694            }).join(', ')
2695          };
2696        });
2697      }, function (e) {
2698        console.log(e);
2699        return [];
2700      });
2701    }
2702    function resolveGeoBounds(placeId, description) {
2703      return new Promise(function (resolve, reject) {
2704        geocoder.geocode({
2705          'placeId': placeId
2706        }, function (results, status) {
2707          if (status != 'OK') return resolve(null);
2708          var result = results[0];
2709          var bounds = new google.maps.LatLngBounds();
2710          bounds.extend(result.geometry.viewport.getSouthWest());
2711          bounds.extend(result.geometry.viewport.getNorthEast());
2712          result.geometry.bounds = bounds.toJSON();
2713          var placeUrl = window.luxuryPresence.makeMlsLink(result);
2714          return resolve({
2715            placeUrl: placeUrl,
2716            description: description
2717          });
2718        });
2719      });
2720    }
2721    function addRestrictions(request) {
2722      switch (selectedCountries) {
2723        case 'Worldwide':
2724          return request;
2725        case 'US & Canada':
2726          request.componentRestrictions = {
2727            country: ['us', 'ca']
2728          };
2729          return request;
2730        default:
2731          request.componentRestrictions = {
2732            country: 'us'
2733          };
2734          return request;
2735      }
2736    }
2737    function resolveAutocomplete(term, deeper) {
2738      var request = addRestrictions({
2739        input: term,
2740        types: deeper ? ['geocode'] : ['(regions)'],
2741        limit: 1
2742      });
2743      return new Promise(function (resolve, reject) {
2744        service.getPlacePredictions(request, function (results, status) {
2745          if (status !== google.maps.places.PlacesServiceStatus.OK) {
2746            resolve(null);
2747            return;
2748          }
2749          if (!Array.isArray(results)) {
2750            resolve(null);
2751            return;
2752          }
2753          if (deeper) {
2754            var allowedTypes = {
2755              'neighborhood': true,
2756              'administrative_area_level_3': true,
2757              'administrative_area_level_4': true,
2758              'administrative_area_level_5': true,
2759              'sublocality_level_1': true,
2760              'sublocality_level_2': true,
2761              'sublocality_level_3': true
2762            };
2763            results = results.filter(function (res) {
2764              return res.types.find(t => allowedTypes[t]);
2765            });
2766          }
2767          if (!results.length) {
2768            resolve(null);
2769            return;
2770          }
2771          resolve(results);
2772        });
2773      });
2774    }
2775    function placesSearch(term, ignoreInput) {
2776      if (placesResult.term !== term) {
2777        placesResult = {
2778          term: term,
2779          result: resolveAutocomplete(term).then(function (results) {
2780            if (!ignoreInput && term !== keyword) return null;
2781            if (ignoreInput && !results) return resolveAutocomplete(term, true);
2782            return results;
2783          }).then(function (results) {
2784            if (!ignoreInput && term !== keyword || !results) return [];
2785            var geoResultPromises = results.map(function (result) {
2786              return resolveGeoBounds(result.place_id, result.description);
2787            });
2788            return Promise.all(geoResultPromises).then(function (geoLinks) {
2789              return geoLinks.filter(function (i) {
2790                return i;
2791              }).slice(0, 3);
2792            });
2793          })
2794        };
2795      }
2796      return placesResult.result;
2797    }
2798    function propertiesSearch(term) {
2799      var payload = {
2800        companyId: window.luxuryPresence.defaults.companyId,
2801        search: term,
2802        offset: 0,
2803        limit: 4,
2804        statusIds: ["5f528253-abb7-484e-95c3-330269ac1105", "959c11cf-8655-4f91-874c-292b0ab7ea6b", "a0012964-4f51-4430-abf8-6547c5ab6441", "df04ccbe-4621-4140-a504-ee1a17430bb7", "88b4ace6-f39b-4b25-a051-8f6dba976833", "96031d77-bbe5-4de3-90d8-1e4e70de8ca8"]
2805      };
2806      var gqlQuery = 'query ($companyId: String, $search: String, $offset: Int, $limit: Int, $propertyStatusId: [String!]) {properties (companyId: $companyId, search: $search, offset: $offset, limit: $limit, propertyStatusId: $propertyStatusId) {items {id name slug fullAddress privateAddress status isPasswordProtected priceUponRequest salesPrice reducedPrice leasePrice currency media {smallUrl mediumUrl largeUrl xLargeUrl xxLargeUrl height width altTagText}}}}';
2807      return superagent.post(window.luxuryPresence.defaults.routerUrl + '/graphql').send({
2808        query: gqlQuery,
2809        variables: window.luxuryPresence.routerApi.transformVariables('properties', payload)
2810      }).then(function (res) {
2811        var page = (res.body.data || {}).properties;
2812        return page && page.items || [];
2813      }, function (err) {
2814        return [];
2815      });
2816    }
2817    function doSearch(term, leaseProperty) {
2818      isLoading = true;
2819      updateSearchDisplay();
2820      Promise.all([searchMls ? mlsSearch(term, leaseProperty) : [], searchMls ? placesSearch(term) : [], searchProperties ? propertiesSearch(term, leaseProperty) : []]).then(function (res) {
2821        if (term !== keyword) return;
2822        setResults(res[0], res[1], res[2], leaseProperty);
2823      });
2824    }
2825    function makeResultsBlockHtml(title, elementClass, links) {
2826      if (!links || !links.length) return '';else return '<div class="header-search-results__block"><div class="header-search-results__title">' + title + '</div><div class="' + elementClass + '">' + links.join('') + '</div></div>';
2827    }
2828    function setResults(mlsResults, placesResults, propertiesResults, leaseProperty) {
2829      searchResultsSelector.querySelector('.header-search-results__link--selected')?.classList.remove('header-search-results__link--selected');
2830      isLoading = false;
2831      updateSearchDisplay();
2832      if (!mlsResults) {
2833        resultsContainerSelector.innerHTML = '';
2834        updateSearchDisplay();
2835        return;
2836      }
2837      if (!mlsResults.length && !placesResults.length && !propertiesResults.length) {
2838        updateSearchDisplay();
2839        return;
2840      }
2841      var propertiesHtml = makeResultsBlockHtml('Featured Properties', 'header-properties', propertiesResults.map(function (result) {
2842        return itemTemplate(result);
2843      }));
2844      var placesHtml = makeResultsBlockHtml('Locations', '', placesResults.map(function (result) {
2845        return `<a class="header-search-results__link lp-icon" href="${result.placeUrl}${leaseProperty ? '&lease_property=true' : ''}">${result.description}</a>`;
2846      }));
2847      var mlsHtml = makeResultsBlockHtml('Address', '', mlsResults.map(function (result) {
2848        return `<a href="/home-search/listings/${result.id}" class="header-search-results__link lp-icon">${result.display_address}</a>`;
2849      }));
2850      resultsContainerSelector.innerHTML = propertiesHtml + placesHtml + mlsHtml;
2851      updateSearchDisplay();
2852    }
2853    var neighborhoods = null;
2854    function fetchNeighborhoods() {
2855      var url = window.luxuryPresence.defaults.routerUrl;
2856      var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {neighborhoods (companyId: $companyId, offset: $offset, limit: $limit) {items {id, name, mlsLink, googlePlaceData}}}';
2857      var payload = {};
2858      payload.offset = 0;
2859      payload.limit = 100;
2860      payload.companyId = window.luxuryPresence.defaults.companyId;
2861      return superagent.post(url + '/graphql').withCredentials().send({
2862        query: gqlQuery,
2863        variables: payload
2864      }).then(function (res) {
2865        var data = res.body.data && res.body.data.neighborhoods;
2866        neighborhoods = data && data.items || null;
2867        if (neighborhoods && !neighborhoods.length) {
2868          neighborhoods = null;
2869        }
2870      });
2871    }
2872    function setPredefinedNeighborhoods() {
2873      return fetchNeighborhoods().then(function () {
2874        if (!neighborhoods) return;
2875        var placesHtml = makeResultsBlockHtml('Locations', neighborhoods.map(function (item) {
2876          return `<a class="header-search-results__link lp-icon" href="${item.mlsLink}${leasePropertyState ? '&lease_property=true' : ''}">${item.googlePlaceData && item.googlePlaceData.formatted_address || item.name}</a>`;
2877        }));
2878        predefinedSelector.innerHTML = placesHtml;
2879        updateSearchDisplay();
2880      });
2881    }
2882    if (searchMls) setPredefinedNeighborhoods();
2883    closeIconSelector.style.opacity = '0';
2884    closeIconSelector.style.pointerEvents = 'none';
2885    searchInputSelector.setAttribute('inputmode', 'search');
2886    searchInputSelector.addEventListener('input', function () {
2887      if (this.value === '') {
2888        closeIconSelector.style.opacity = '0';
2889        closeIconSelector.style.pointerEvents = 'none';
2890        searchIconSelector.style.opacity = '1';
2891        searchIconSelector.style.pointerEvents = 'auto';
2892      } else {
2893        closeIconSelector.style.opacity = '1';
2894        closeIconSelector.style.pointerEvents = 'auto';
2895        searchIconSelector.style.opacity = '0';
2896        searchIconSelector.style.pointerEvents = 'none';
2897      }
2898      window.clearTimeout(newSearchTimer);
2899      newSearchTimer = window.setTimeout(startSearch, 300);
2900    });
2901    searchInputSelector.addEventListener('keydown', function (ev) {
2902      if (ev.which === 38) {
2903        ev.preventDefault();
2904        moveSelection(true);
2905        return false;
2906      }
2907      if (ev.which === 40) {
2908        ev.preventDefault();
2909        moveSelection();
2910        return false;
2911      }
2912      if (ev.which === 13) {
2913        let $lnk = searchResultsSelector.querySelector('.header-search-results__link--selected');
2914        if ($lnk) {
2915          $lnk.click();
2916          searchActive = false;
2917          updateSearchDisplay();
2918        } else {
2919          $searchBtn.click();
2920        }
2921      }
2922    });
2923    closeIconSelector.addEventListener('click', function () {
2924      searchInputSelector.value = '';
2925      searchInputSelector.dispatchEvent(new Event('input'));
2926      searchActive = false;
2927      updateSearchDisplay();
2928    });
2929    searchResultsSelector.addEventListener('mouseenter', function (ev) {
2930      searchResultsSelector.querySelector('.header-search-results__link--selected')?.classList.remove('header-search-results__link--selected');
2931    });
2932    function outsideClickHandler(e) {
2933      if (searchWrapperSelector.contains(e.target)) return;
2934      searchActive = false;
2935      updateSearchDisplay();
2936    }
2937    document.addEventListener('click', outsideClickHandler);
2938  });
2939})('global-navbar');
2940} catch(e) {
2941console.log(e);
2942}
2943                try {
2944(function init(sectionDomId, options) {
2945  var elementSelector = options.elementSelector || 'nav';
2946  var element = document.querySelector(elementSelector);
2947  var sections = document.querySelectorAll('body > section');
2948  var subNavContainers = element.querySelectorAll('.sub-nav');
2949  var initialBackgroundColor = options.initialBackgroundColor || element.style.backgroundColor;
2950  var backgroundColorScroll = options.backgroundColorScroll || '#191919';
2951  var fontColor = options.fontColor || '#fff';
2952  var fontColorScroll = options.fontColorScroll || '#000';
2953  var didScroll = false;
2954  var lastScrollTop = 0;
2955  var delta = 5;
2956
2957  // eslint-disable-next-line sonarjs/no-collapsible-if
2958  if (wow) {
2959    // Wowjs might not trigger for position fixed elements
2960    if (window.scrollY > 0) {
2961      element.querySelectorAll('.wow').forEach(el => wow.show(el));
2962    }
2963  }
2964  function adjustNavPinState() {
2965    // Remove 'visible' class from all subNavContainers
2966    for (let i = 0; i < subNavContainers.length; i++) {
2967      subNavContainers[i].classList.remove('visible');
2968    }
2969    if (window.scrollY > 0) {
2970      element.style.backgroundColor = backgroundColorScroll;
2971      element.style.color = fontColorScroll;
2972      element.classList.add('scroll');
2973    } else {
2974      element.style.backgroundColor = initialBackgroundColor;
2975      element.style.color = fontColor;
2976      element.classList.remove('scroll');
2977    }
2978  }
2979  adjustNavPinState();
2980  function onScroll() {
2981    didScroll = true;
2982  }
2983  window.addEventListener('scroll', onScroll);
2984
2985  // eslint-disable-next-line
2986  var debounceInterval = setInterval(() => {
2987    if (didScroll) {
2988      // eslint-disable-next-line
2989      hasScrolled();
2990      didScroll = false;
2991    }
2992  }, 250);
2993  function hasScrolled() {
2994    adjustNavPinState();
2995    // eslint-disable-next-line
2996    var navbarHeight = element.offsetHeight;
2997    // eslint-disable-next-line
2998    var st = window.scrollY;
2999
3000    // Make sure they scroll more than delta
3001    if (Math.abs(lastScrollTop - st) <= delta) {
3002      return;
3003    }
3004    if (st > lastScrollTop && st > navbarHeight) {
3005      // Scroll Down
3006      element.style.transform = `translateY(-${navbarHeight}px) scaleY(0)`;
3007      document.documentElement.style.setProperty('--global-header-height', '0px');
3008
3009      // Some sections "follow" the navbar with class sticky (i.e. Producer search)
3010      sections.forEach(section => {
3011        if (section.classList.contains('sticky')) {
3012          section.style.top = '0px';
3013        }
3014      });
3015    } else {
3016      // Scroll Up
3017      // eslint-disable-next-line
3018      if (st + window.innerHeight < document.documentElement.scrollHeight) {
3019        element.style.transform = `translateY(0) scaleY(1)`;
3020        document.documentElement.style.setProperty('--global-header-height', `${navbarHeight}px`);
3021        sections.forEach(section => {
3022          if (section.classList.contains('sticky')) {
3023            section.style.top = `${navbarHeight}px`;
3024          }
3025        });
3026      }
3027    }
3028    lastScrollTop = st;
3029  }
3030})('NAVBAR', JSON.parse("{\"fontColor\":\"#161515\",\"elementSelector\":\".header\",\"fontColorScroll\":\"#fff\",\"backgroundColorScroll\":\"rgba(26,26,26, .8)\",\"initialBackgroundColor\":\"#fff\"}"));
3031} catch(e) {
3032console.log(e);
3033}
3034                try {
3035(function init(sectionDomId) {
3036  if (sectionDomId === "main-section") sectionDomId = "global-sidemenu";
3037  (function (stickyAnchorRoot) {
3038    if (!stickyAnchorRoot) return;
3039    function getInFlowTop(target) {
3040      var inlineValue = target.style.getPropertyValue('position');
3041      var inlinePriority = target.style.getPropertyPriority('position');
3042      target.style.setProperty('position', 'relative', 'important');
3043      var top = target.getBoundingClientRect().top + window.pageYOffset;
3044      if (inlineValue) target.style.setProperty('position', inlineValue, inlinePriority);else target.style.removeProperty('position');
3045      var scrollMarginTop = parseFloat(window.getComputedStyle(target).scrollMarginTop) || 0;
3046      return Math.max(0, top - scrollMarginTop);
3047    }
3048    stickyAnchorRoot.addEventListener('click', function (event) {
3049      if (event.defaultPrevented || event.button !== 0) return;
3050      if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
3051      if (document.body.hasAttribute('data-scroll-container')) return;
3052      var link = event.target.closest('a[href]');
3053      if (!link || !stickyAnchorRoot.contains(link) || link.target === '_blank') return;
3054      var href = link.getAttribute('href');
3055      if (!/^#[^#]/.test(href)) return;
3056      var targetId;
3057      try {
3058        targetId = decodeURIComponent(href.slice(1));
3059      } catch (e) {
3060        return;
3061      }
3062      var target = document.getElementById(targetId);
3063      if (!target || window.getComputedStyle(target).position !== 'sticky') return;
3064      event.preventDefault();
3065      if (window.location.hash !== href) window.history.pushState(null, '', href);
3066      window.requestAnimationFrame(function () {
3067        window.scrollTo({
3068          top: getInFlowTop(target)
3069        });
3070      });
3071    });
3072  })(document.getElementById(sectionDomId));
3073  var sidemenu = document.getElementById(sectionDomId);
3074  var openers = sidemenu.querySelectorAll('.js-sub-nav-opener');
3075  var items = sidemenu.querySelectorAll('.js-idemenu-navigation-item');
3076  var watermark = document.querySelector('.js-sidemenu-watermark');
3077  var onShow = function () {
3078    window.lpUI.requestScrollLock(sectionDomId);
3079  };
3080  var onHide = function () {
3081    window.lpUI.releaseScrollLock(sectionDomId);
3082  };
3083  sidemenu.addEventListener('lpui-show', onShow);
3084  sidemenu.addEventListener('lpui-hide', onHide);
3085  openers.forEach(function (opener) {
3086    opener.addEventListener('click', function (event) {
3087      event.preventDefault();
3088      this.classList.toggle('sidemenu-navigation__link--active');
3089      this.classList.toggle('sidemenu-navigation__link--sub-nav-active');
3090    });
3091  });
3092  document.body.addEventListener('click', function (evt) {
3093    if (!evt.target.closest('.sidemenu') && !evt.target.closest('.js-sidemenu-opener')) {
3094      window.lpUI.sideMenuHide();
3095    }
3096  });
3097  const handleLinkClick = function (href) {
3098    if (href && href.match(/^#[^#].*$/)) {
3099      window.lpUI.sideMenuHide();
3100    }
3101  };
3102  const mainNavLinks = sidemenu.querySelectorAll('.sidemenu-navigation__link');
3103  mainNavLinks.forEach(function (link) {
3104    link.addEventListener('click', function (event) {
3105      const href = this.getAttribute('href');
3106      handleLinkClick(href);
3107    });
3108  });
3109  const subNavLinks = sidemenu.querySelectorAll('.sidemenu-navigation-sub-nav__link');
3110  subNavLinks.forEach(function (link) {
3111    link.addEventListener('click', function (event) {
3112      const href = this.getAttribute('href');
3113      handleLinkClick(href);
3114    });
3115  });
3116  if (watermark) {
3117    items.forEach(function (item, index) {
3118      item.setAttribute("data-id", index <= 9 ? "0" + (index + 1) : index + 1);
3119    });
3120    items.forEach(function (item) {
3121      item.addEventListener('mouseenter', function () {
3122        watermark.setAttribute("data-id", item.getAttribute("data-id"));
3123        watermark.style.opacity = 1;
3124      });
3125      item.addEventListener('mouseleave', function () {
3126        watermark.style.opacity = 0;
3127      });
3128    });
3129  }
3130})('global-sidemenu');
3131} catch(e) {
3132console.log(e);
3133}
3134                
3135                try {
3136(function init(sectionDomId) {
3137  const sectionDom = document.getElementById(sectionDomId);
3138  const backToTopBtn = sectionDom.querySelector('.js-back-to-top');
3139  backToTopBtn?.addEventListener('click', () => {
3140    window.scrollTo({
3141      top: 0,
3142      behavior: 'smooth'
3143    });
3144  });
3145})('global-footer');
3146} catch(e) {
3147console.log(e);
3148}
3149                
3150                try {
3151(function init(sectionDomId) {
3152  const customDropdownHTML = `
3153  <div class="custom-select" role="presentation">
3154    <button class="custom-select-toggle" type="button" aria-haspopup="true" aria-expanded="false" role="combobox"></button>
3155    <div class="custom-select-menu"><div class="custom-select-content"></div></div>
3156  </div>`;
3157  const hideOriginalSelect = originalSelect => {
3158    originalSelect.classList.remove(...originalSelect.classList);
3159    originalSelect.classList.add("sr-only");
3160  };
3161  const openCustomSelect = customSelectToggle => {
3162    let customSelectMenu = customSelectToggle.nextElementSibling;
3163    customSelectMenu.classList.add("open");
3164    customSelectToggle.classList.add("open");
3165    customSelectToggle.ariaExpanded = true;
3166  };
3167  const closeCustomSelect = customSelectToggle => {
3168    let customSelectMenu = customSelectToggle.nextElementSibling;
3169    customSelectMenu.classList.remove("open");
3170    customSelectToggle.classList.remove("open");
3171    customSelectToggle.ariaExpanded = false;
3172  };
3173  const inheritAttributes = (originalSelect, customSelectToggle, customSelectMenu) => {
3174    customSelectToggle.className = customSelectToggle.className.concat(' ', originalSelect.className);
3175    customSelectToggle.id = originalSelect.getAttribute("id") + "custom";
3176    customSelectToggle.dataset.name = originalSelect.getAttribute("name");
3177    customSelectMenu.setAttribute("aria-labelledby", customSelectToggle.id);
3178  };
3179  const initiateQuerySelectors = customSelect => {
3180    let customSelectToggle = customSelect.querySelector('.custom-select-toggle'),
3181      customSelectMenu = customSelect.querySelector('.custom-select-menu'),
3182      customSelectContent = customSelect.querySelector('.custom-select-content');
3183    return {
3184      customSelectToggle,
3185      customSelectMenu,
3186      customSelectContent
3187    };
3188  };
3189  const initiateToggleText = (originalSelect, customSelectToggle) => {
3190    const dataLabelOption = originalSelect.querySelector("[data-label]");
3191    const isMultiple = originalSelect?.multiple;
3192    if (!isMultiple) {
3193      const toggleText = dataLabelOption && dataLabelOption.dataset.label || originalSelect.querySelector(":checked")?.textContent || originalSelect.querySelector("option")?.textContent;
3194      customSelectToggle.classList.add("is-placeholder");
3195      customSelectToggle.innerHTML = toggleText;
3196    } else {
3197      const placeholderText = dataLabelOption && dataLabelOption.dataset.label || originalSelect.querySelector("option")?.textContent || "Select";
3198      const selectedOptions = Array.from(originalSelect.querySelectorAll("option:checked")).filter(opt => opt.value !== "");
3199      if (selectedOptions.length === 0) {
3200        customSelectToggle.innerHTML = placeholderText;
3201        customSelectToggle.classList.add("is-placeholder");
3202      } else if (selectedOptions.length === 1) {
3203        customSelectToggle.innerHTML = selectedOptions[0].textContent;
3204        customSelectToggle.classList.remove("is-placeholder");
3205      } else {
3206        customSelectToggle.innerHTML = `${selectedOptions[0].textContent} +${selectedOptions.length - 1}`;
3207        customSelectToggle.classList.remove("is-placeholder");
3208      }
3209    }
3210  };
3211  const convertOptionsToButtons = (originalSelect, customSelectContent) => {
3212    originalSelect.querySelectorAll('option').forEach(option => {
3213      const button = createButtonFromOption(option);
3214      customSelectContent.appendChild(button);
3215    });
3216  };
3217  const createButtonFromOption = option => {
3218    let button = document.createElement('button');
3219    button.className = "custom-select-item";
3220    button.setAttribute("role", "option");
3221    button.setAttribute("type", "button");
3222    button.textContent = option.textContent;
3223    button.setAttribute('value', option.value);
3224    if (option.disabled) {
3225      button.setAttribute("disabled", "true");
3226    }
3227    if (option.selected && option.value !== "") {
3228      button.classList.add("is-selected");
3229      button.setAttribute("aria-selected", "true");
3230    }
3231    return button;
3232  };
3233  const initiateEventListeners = (originalSelect, customSelectToggle, customSelectMenu) => {
3234    const isMultiple = originalSelect?.multiple;
3235    originalSelect.addEventListener("focus", function () {
3236      openCustomSelect(customSelectToggle);
3237      customSelectToggle.focus();
3238    });
3239    customSelectToggle.addEventListener("click", function () {
3240      if (customSelectToggle.getAttribute("aria-expanded") === "true") {
3241        closeCustomSelect(customSelectToggle);
3242      } else {
3243        openCustomSelect(customSelectToggle);
3244      }
3245    });
3246    customSelectMenu.addEventListener("click", function (event) {
3247      if (event.target.classList.contains('custom-select-item')) {
3248        const clickedValue = event.target.value;
3249        const clickedOption = originalSelect.querySelector(`option[value="${clickedValue}"]`);
3250        const placeholderOption = originalSelect.querySelector("[data-label]");
3251        const placeholderText = placeholderOption?.dataset.label || originalSelect.querySelector("option")?.textContent || "Select";
3252        if (!isMultiple) {
3253          let opts = customSelectMenu.querySelectorAll(".is-selected");
3254          [].forEach.call(opts, function (el) {
3255            el.classList.remove("is-selected");
3256          });
3257          event.target.classList.add("is-selected");
3258          clickedOption.selected = true;
3259          customSelectToggle.innerHTML = clickedOption.textContent;
3260          if (clickedValue === "" || event.target.classList.contains("is-placeholder")) {
3261            customSelectToggle.classList.add("is-placeholder");
3262          } else {
3263            customSelectToggle.classList.remove("is-placeholder");
3264          }
3265          let changeEvent = new Event('change', {
3266            bubbles: true
3267          });
3268          originalSelect.dispatchEvent(changeEvent);
3269          closeCustomSelect(customSelectToggle);
3270        } else {
3271          if (clickedValue === "") {
3272            customSelectMenu.querySelectorAll(".is-selected").forEach(el => {
3273              el.classList.remove("is-selected");
3274              el.setAttribute("aria-selected", "false");
3275            });
3276            originalSelect.querySelectorAll("option").forEach(opt => opt.selected = false);
3277            customSelectToggle.innerHTML = placeholderText;
3278            customSelectToggle.classList.add("is-placeholder");
3279          } else {
3280            const isCurrentlySelected = event.target.classList.contains("is-selected");
3281            event.target.classList.toggle("is-selected");
3282            event.target.setAttribute("aria-selected", (!isCurrentlySelected).toString());
3283            clickedOption.selected = !isCurrentlySelected;
3284            const allItem = customSelectMenu.querySelector('.custom-select-item[value=""]');
3285            if (allItem) {
3286              allItem.classList.remove("is-selected");
3287              allItem.setAttribute("aria-selected", "false");
3288            }
3289            const allOption = originalSelect.querySelector('option[value=""]');
3290            if (allOption) allOption.selected = false;
3291            const selectedItems = customSelectMenu.querySelectorAll(".custom-select-item.is-selected");
3292            if (selectedItems.length === 0) {
3293              customSelectToggle.innerHTML = placeholderText;
3294              customSelectToggle.classList.add("is-placeholder");
3295            } else if (selectedItems.length === 1) {
3296              customSelectToggle.innerHTML = selectedItems[0].textContent;
3297              customSelectToggle.classList.remove("is-placeholder");
3298            } else {
3299              customSelectToggle.innerHTML = `${selectedItems[0].textContent} +${selectedItems.length - 1}`;
3300              customSelectToggle.classList.remove("is-placeholder");
3301            }
3302          }
3303          let changeEvent = new Event('change', {
3304            bubbles: true
3305          });
3306          originalSelect.dispatchEvent(changeEvent);
3307        }
3308      }
3309    });
3310    document.addEventListener("click", function (event) {
3311      if (!customSelectMenu.contains(event.target) && !customSelectToggle.contains(event.target)) {
3312        closeCustomSelect(customSelectToggle);
3313      }
3314    });
3315  };
3316  const createCustomSelect = originalSelect => {
3317    const customSelect = document.createElement('div');
3318    customSelect.innerHTML = customDropdownHTML;
3319    const {
3320      customSelectToggle,
3321      customSelectMenu,
3322      customSelectContent
3323    } = initiateQuerySelectors(customSelect);
3324    inheritAttributes(originalSelect, customSelectToggle, customSelectMenu);
3325    hideOriginalSelect(originalSelect);
3326    initiateToggleText(originalSelect, customSelectToggle);
3327    convertOptionsToButtons(originalSelect, customSelectContent);
3328    initiateEventListeners(originalSelect, customSelectToggle, customSelectMenu);
3329    return customSelect;
3330  };
3331  const setCustomSelectValue = (originalSelect, value) => {
3332    let customSelect = originalSelect.nextElementSibling;
3333    let customSelectToggle = customSelect.querySelector(".custom-select-toggle");
3334    let customSelectContent = customSelect.querySelector(".custom-select-content");
3335    if (!customSelectContent) return;
3336    let selectedOption = value ? Array.from(customSelectContent.children).find(function (b) {
3337      return b.value === value;
3338    }) : customSelectContent.firstChild;
3339    if (!selectedOption) {
3340      return;
3341    }
3342    if (selectedOption.classList.contains("is-disabled")) return;
3343    let elementNumber = Array.from(selectedOption.parentNode.children).indexOf(selectedOption);
3344    let linkedOption = originalSelect.querySelectorAll("option")[elementNumber];
3345    linkedOption.selected = true;
3346    selectedOption.classList.add("is-selected");
3347    selectedOption.parentNode.querySelectorAll(".custom-select-item").forEach(el => {
3348      if (el !== selectedOption) {
3349        el.classList.remove("is-selected");
3350      }
3351    });
3352    closeCustomSelect(customSelectToggle);
3353    customSelectToggle.innerHTML = linkedOption.innerHTML;
3354    if (linkedOption.value) {
3355      customSelectToggle.classList.remove("is-placeholder");
3356      if (linkedOption.value !== "") {
3357        customSelect.classList.add("has-selection");
3358      } else {
3359        customSelect.classList.remove("has-selection");
3360      }
3361    } else {
3362      customSelect.classList.remove("has-selection");
3363      customSelectToggle.classList.add("is-placeholder");
3364    }
3365  };
3366  const customSelect = originalSelect => {
3367    const customSelect = createCustomSelect(originalSelect);
3368    originalSelect.insertAdjacentElement('afterend', customSelect);
3369    return customSelect;
3370  };
3371  const resetCustomSelect = originalSelect => {
3372    const customSelectEl = originalSelect.nextElementSibling;
3373    const customSelectToggle = customSelectEl?.querySelector('.custom-select-toggle');
3374    const customSelectContent = customSelectEl?.querySelector('.custom-select-content');
3375    if (!customSelectToggle || !customSelectContent) return;
3376    const placeholderOption = originalSelect.querySelector("[data-label]");
3377    const placeholderText = placeholderOption?.dataset.label || originalSelect.querySelector("option")?.textContent || "Select";
3378    customSelectContent.querySelectorAll('.custom-select-item').forEach(item => {
3379      item.classList.remove('is-selected');
3380      item.setAttribute('aria-selected', 'false');
3381    });
3382    originalSelect.querySelectorAll('option').forEach(opt => opt.selected = false);
3383    customSelectToggle.innerHTML = placeholderText;
3384    customSelectToggle.classList.add('is-placeholder');
3385    const customSelectWrapper = customSelectEl.querySelector('.custom-select');
3386    if (customSelectWrapper) {
3387      customSelectWrapper.classList.remove('has-selection');
3388    }
3389  };
3390  const section = document.getElementById(sectionDomId);
3391  const closeBtn = section.querySelector(".js-close-btn");
3392  const connectBtn = section.querySelector(".js-btn-connect");
3393  const popUp = section.querySelector(".js-pop-up");
3394  const btnHolder = section.querySelector(".js-btn-holder");
3395  const form = section.querySelector(".js-form");
3396  const successMessage = section.querySelector(".js-success");
3397  const redirectLink = section.querySelector(".js-redirect-link");
3398  function setHttp(link) {
3399    if (link.search(/^(http[s]?\:\/\/|\/)/) == -1) {
3400      link = "https://" + link;
3401    }
3402    return link;
3403  }
3404  function redirectPage(link) {
3405    if (link) {
3406      window.location.href = setHttp(link.getAttribute("href"));
3407    }
3408  }
3409  const selects = document.querySelectorAll(".floating-contact-button select.js-select");
3410  selects.forEach(function (el) {
3411    customSelect(el);
3412  });
3413  const inputName = form.querySelector('.js-input-name');
3414  inputName.addEventListener('keyup', function () {
3415    if (this.value.replaceAll(/\d/g, "").trim().split(" ").length < 2 || this.value.replaceAll(/\d/g, "").trim() === "") {
3416      this.setCustomValidity("Please input your first name and last name.");
3417    } else {
3418      this.setCustomValidity("");
3419    }
3420  });
3421  function showSuccessMessage() {
3422    successMessage.style.display = "block";
3423    form.style.display = "none";
3424  }
3425  form.addEventListener("formsubmitted", showSuccessMessage);
3426  form.addEventListener("reset", function () {
3427    showSuccessMessage();
3428    redirectPage(redirectLink);
3429  });
3430  window.addEventListener("scroll", function () {
3431    if (window.scrollY >= 150 && window.getComputedStyle(popUp).display !== "block") btnHolder.classList.add("floating-contact-button__btn-holder--visible");else btnHolder.classList.remove("floating-contact-button__btn-holder--visible");
3432  });
3433  closeBtn.addEventListener("click", function () {
3434    popUp.style.display = "none";
3435    btnHolder.classList.add("floating-contact-button__btn-holder--visible");
3436  });
3437  connectBtn.addEventListener("click", function () {
3438    popUp.style.display = "block";
3439    btnHolder.classList.remove("floating-contact-button__btn-holder--visible");
3440  });
3441})('global-mobile-contact');
3442} catch(e) {
3443console.log(e);
3444}
3445                
3446                try {
3447(function init(sectionDomId) {
3448  const scrollSection = document.getElementById(`${sectionDomId}`).querySelector('.js-scroll-section');
3449  const introBtn = document.getElementById(`${sectionDomId}`).querySelector('.jsScrollBtn');
3450  introBtn.addEventListener("click", function (e) {
3451    e.preventDefault();
3452    window.scrollTo({
3453      top: scrollSection.offsetTop + scrollSection.offsetHeight,
3454      behavior: "smooth"
3455    });
3456  });
3457})('section-a47ed492-3b7c-468d-99c5-27dfd2078c71', 'undefined');
3458} catch(e) {
3459console.log(e);
3460}
3461                try {
3462(function init(sectionDomId, options) {
3463  let section = null;
3464  switch (sectionDomId) {
3465    case 'NAVBAR':
3466      section = document.querySelector('body > nav, #global-navbar');
3467      break;
3468    case 'FOOTER':
3469      section = document.querySelector('body > footer, #global-footer');
3470      break;
3471    case 'SIDEMENU':
3472      section = document.querySelector('body > div.sidemenu, #global-sidemenu');
3473      break;
3474    case 'CONTACT':
3475      section = document.querySelector('#modal-global-contact-us');
3476      break;
3477    case 'MOBILE_CONTACT':
3478      section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact');
3479      break;
3480    case 'SUBSCRIBE':
3481      // Subscribe Not Implemented
3482      section = null;
3483      break;
3484    case 'ACCOUNT':
3485      // Account Not Implemented
3486      section = null;
3487      break;
3488    default:
3489      section = document.querySelector('#' + sectionDomId);
3490  }
3491  if (!section) {
3492    return;
3493  }
3494
3495  // Where content / items are rendered
3496  const dataContainer = section.querySelector('.data-container');
3497  if (!dataContainer) {
3498    // no place to render items = no need to query server or do anything else
3499    return;
3500  }
3501  let variables = options.variables || {};
3502
3503  // Some variables in options may not have been injected - remove
3504  Object.keys(variables).forEach(function (variableName) {
3505    if (typeof variables[variableName] === 'string' && variables[variableName].match(/^{{.*}}$/)) {
3506      delete variables[variableName];
3507    }
3508  });
3509
3510  // Merge page query variables
3511  if (options.usePageResource) {
3512    variables = {
3513      ...variables,
3514      ...window.luxuryPresence.config.pageMeta.pageQueryVariables[options.resource]
3515    };
3516  }
3517
3518  // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Callers
3519  // resolve the flag — fetchData reads the section stamp, aux fetches read
3520  // their own resource's stamp (auxUsesRouter).
3521  function apiUrl(useRouter) {
3522    return options.url || (useRouter ? window.luxuryPresence.defaults.routerUrl : window.luxuryPresence.defaults.apiGatewayUrl);
3523  }
3524
3525  // ROUTER-CLEANUP: aux resources roll out on their own flag, not the section's
3526  // (options.routerApiAux is stamped per aux resource server-side).
3527  function auxUsesRouter(resource) {
3528    return !!(options.routerApiAux && options.routerApiAux[resource]);
3529  }
3530
3531  // Pagination Executes on a Numbered Pagination Container
3532  //  Or via a load more button
3533  let mode = 'BUTTONLESS_PAGINATION';
3534  const container = section.querySelector('.pagination-container');
3535  const loadMoreButton = section.querySelector(options?.loadMoreSelector);
3536  if (container) {
3537    mode = 'NUMBERED_PAGINATION';
3538  }
3539  if (loadMoreButton) {
3540    mode = 'LOAD_MORE_BUTTON';
3541  }
3542  let searchContainer = section.querySelector('.search-container');
3543  const hidePaginationOnFirstPage = options.hidePaginationOnFirstPage || false;
3544  const eventPrefix = '__pagination-';
3545  const searchFormParams = options.searchFormParams || (options.resource === 'properties' ? [{
3546    param: 'neighborhoodId',
3547    urlKey: 'neighborhood'
3548  }, {
3549    param: 'search',
3550    urlKey: 'search'
3551  }, {
3552    param: 'salesPriceGTE',
3553    urlKey: 'pricemin',
3554    formKey: 'priceMin',
3555    type: 'int'
3556  }, {
3557    param: 'salesPriceLTE',
3558    urlKey: 'pricemax',
3559    formKey: 'priceMax',
3560    type: 'int'
3561  }, {
3562    param: 'livingSpaceSizeGTE',
3563    urlKey: 'areamin',
3564    formKey: 'areaMin',
3565    type: 'int'
3566  }, {
3567    param: 'livingSpaceSizeLTE',
3568    urlKey: 'areamax',
3569    formKey: 'areaMax',
3570    type: 'int'
3571  }] : []);
3572
3573  // Total entries - initialized in first render
3574  let totalNumber = 0;
3575  const DefaultSearchParams = {
3576    page: 1
3577  };
3578  searchFormParams.forEach(function (formParam) {
3579    DefaultSearchParams[formParam.formKey || formParam.param] = null;
3580  });
3581  let searchParams = {
3582    ...DefaultSearchParams
3583  };
3584  const offset = options.variables?.offset || 0;
3585  let scrollTarget = options.scrollTargetSelector ? section.querySelector(options.scrollTargetSelector) || section : section;
3586  let scrollOffset = (parseInt(options.scrollOffset, 10) || 0) ?? 100;
3587
3588  // entries of per page
3589  // when query variables for a given section would't be filled options.pageSize can store
3590  // template string, ex: "{{variables.limit}}", below code handles that case and set 9 as a default value
3591  let pageSize = parseInt(options.pageSize, 10) || 9;
3592
3593  // Adding mobile pageRange support
3594  var NARROW_BREAKPOINT = 600;
3595  var mobileBreakpoint = options.mobileBreakpoint > 0 ? options.mobileBreakpoint : NARROW_BREAKPOINT;
3596  var paginationMql = window.matchMedia(`(max-width: ${mobileBreakpoint}px)`);
3597
3598  // Page range (pages on both sides of the current page)
3599  var mobilePageRange = options.mobilePageRange > 0 ? options.mobilePageRange : 0;
3600  var desktopPageRange = options.pageRange >= 0 ? options.pageRange : 2;
3601  var pageRange = paginationMql.matches ? mobilePageRange : desktopPageRange;
3602
3603  // Whether to display the 'Previous' button
3604  var showPrevious = true;
3605
3606  // Whether to display the 'Next' button
3607  var showNext = true;
3608
3609  // Whether to display the page buttons
3610  var showPageNumbers = true;
3611
3612  // 'Previous' text
3613  var prevText = options.prevText || '&laquo;';
3614
3615  // 'Next' text
3616  var nextText = options.nextText || '&raquo;';
3617
3618  // Ellipsis text
3619  var ellipsisText = '&hellip;';
3620  var classPrefix = 'paginationjs';
3621
3622  // Default active class
3623  var activeClassName = 'active';
3624
3625  // Default disable class
3626  var disableClassName = 'disabled';
3627
3628  // Pagination element's position in the container
3629  var position = 'bottom';
3630
3631  // Whether to trigger pagination at initialization
3632  var triggerPagingOnInit = !options.skipInitialLoad;
3633  var showFirstOnEllipsisShow = true;
3634  var showLastOnEllipsisShow = true;
3635
3636  // Instantiated in init()
3637  var el = null;
3638
3639  // Controls scrollTop logic
3640  var firstRender = true;
3641  var renderBySearch = false;
3642  var disabled = false;
3643
3644  // Pagination script class selector
3645  var paginationScriptSelector = options.paginationPartialName ? `.${options.paginationPartialName}` : '.pagination-script';
3646
3647  // Property Specific Image Override if No Image
3648  var propertyPlaceholderImage = window.luxuryPresence.defaults.propertyPlaceholderImage;
3649
3650  // Construct template
3651  var templateHTML = section.querySelector(`script${paginationScriptSelector}`)?.innerHTML || '';
3652  var template = Handlebars.compile(templateHTML);
3653
3654  // Initialize
3655  init();
3656  function init() {
3657    Object.assign(searchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId));
3658
3659    // Append/prepend pagination element to the pagination container
3660    if (mode === 'NUMBERED_PAGINATION') {
3661      el = document.createElement('div');
3662      el.className = 'paginationjs';
3663      container[position === 'bottom' ? 'append' : 'prepend'](el);
3664    }
3665    if (searchContainer) {
3666      initSearchContainer({
3667        fetchNeighborhoods: searchContainer.dataset.fetchNeighborhoods === 'true',
3668        fetchPostCategories: searchContainer.dataset.fetchPostCategories === 'true',
3669        fetchOffices: searchContainer.dataset.fetchOffices === 'true',
3670        fetchRentalRates: searchContainer.dataset.fetchRentalRates === 'true'
3671      }, function () {
3672        syncSearchFormState(searchParams);
3673      });
3674    }
3675
3676    // Bind events
3677    observer();
3678  }
3679  function syncSearchFormState(params) {
3680    searchContainer.dispatchEvent(new CustomEvent('sync', {
3681      detail: params
3682    }));
3683  }
3684  function initSearchContainer(options, done) {
3685    var promises = [];
3686    if (options.fetchNeighborhoods) {
3687      promises.push(fetchAllNeighborhoods(function (neighborhoods) {
3688        searchContainer.dispatchEvent(new CustomEvent('neighborhoods-data', {
3689          detail: {
3690            data: neighborhoods.map(function (item) {
3691              return {
3692                value: item.id,
3693                label: item.name
3694              };
3695            })
3696          }
3697        }));
3698      }));
3699    }
3700    if (options.fetchPostCategories) {
3701      promises.push(fetchPostCategories(function (categories) {
3702        searchContainer.dispatchEvent(new CustomEvent('post-categories-data', {
3703          detail: {
3704            data: categories
3705          }
3706        }));
3707      }));
3708    }
3709    if (options.fetchOffices) {
3710      promises.push(fetchOffices(function (offices) {
3711        searchContainer.dispatchEvent(new CustomEvent('offices-data', {
3712          detail: {
3713            data: offices
3714          }
3715        }));
3716      }));
3717    }
3718    if (options.fetchRentalRates) {
3719      promises.push(fetchAllRentalRates(function (rentalRates) {
3720        searchContainer.dispatchEvent(new CustomEvent('rental-rates-data', {
3721          detail: {
3722            data: rentalRates
3723          }
3724        }));
3725      }));
3726    }
3727    if (promises.length > 0) {
3728      Promise.all(promises).then(function () {
3729        done();
3730      });
3731    } else {
3732      // element's custom code is not executed yet, so we're scheduling callback to after element's code
3733      setTimeout(done);
3734    }
3735  }
3736  function fetchAllNeighborhoods(done) {
3737    var useRouter = auxUsesRouter('neighborhoods');
3738    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Same
3739    // args on both APIs (the federated neighborhoods field accepts
3740    // withProperties/withBlogPosts); only the selection set differs.
3741    var gqlQuery = 'query ($companyId: String, $withProperties: NeighborhoodPropertiesFilter, $withBlogPosts: NeighborhoodBlogPostsFilter, $offset: Int, $limit: Int) {' + 'neighborhoods (companyId: $companyId, withProperties: $withProperties, withBlogPosts: $withBlogPosts, offset: $offset, limit: $limit) {' + (useRouter ? 'items {id, name}' : 'id, name') + '}}';
3742    var payload = {};
3743    payload.offset = 0;
3744    payload.limit = 100;
3745    payload.companyId = variables.companyId;
3746    if (options.resource === 'properties') {
3747      payload.withProperties = {
3748        active: true
3749      };
3750      ['agentIds', 'tag', 'propertyTypeId', 'statusIds', 'architectureStyle', 'lifestyle', 'salesPriceGTE', 'salesPriceLTE', 'leasePriceGTE', 'leasePriceLTE', 'livingSpaceSizeGTE', 'livingSpaceSizeLTE', 'bathCountGTE', 'bathCountLTE', 'bedroomCountGTE', 'bedroomCountLTE', 'bathCountGTE', 'bathCountLTE', 'bedroomCountGTE', 'bedroomCountLTE', 'featuredListing', 'leaseProperty', 'neighborhoodId', 'developmentId', 'openHouse'].forEach(function (field) {
3751        if (variables[field] !== undefined && variables[field] !== null) {
3752          payload.withProperties[field] = variables[field];
3753        }
3754      });
3755    }
3756    if (options.resource === 'posts') {
3757      payload.withBlogPosts = {
3758        active: true
3759      };
3760      ['search', 'postStatusId', 'featured', 'categoryId', 'categoryIds', 'neighborhoodId', 'slug'].forEach(function (field) {
3761        if (variables[field] !== undefined && variables[field] !== null) {
3762          payload.withBlogPosts[field] = variables[field];
3763        }
3764      });
3765    }
3766
3767    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3768    if (useRouter) {
3769      payload = window.luxuryPresence.routerApi.transformVariables('neighborhoods', payload);
3770    }
3771    superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({
3772      query: gqlQuery,
3773      variables: payload
3774    }).then(function (res) {
3775      var value = res.body.data && res.body.data.neighborhoods || {};
3776      // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3777      var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || [];
3778      done(items, items.length);
3779    });
3780  }
3781  function fetchPostCategories(done) {
3782    var featured = options.resource === 'posts' && !!variables.featured;
3783    var useRouter = auxUsesRouter('postCategories');
3784    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the
3785    // selection set differs ({ items {...} } on the router).
3786    var selection = 'id, name, publishedCount, featuredPublishedCount';
3787    var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'postCategories (companyId: $companyId, offset: $offset, limit: $limit ' + (featured ? ' withFeaturedPublishedOnly: true' : ' withPublishedOnly: true') + ') {' + (useRouter ? 'items {' + selection + '}' : selection) + '}}';
3788    var payload = {};
3789    payload.offset = 0;
3790    payload.limit = 100;
3791    payload.companyId = variables.companyId;
3792    superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({
3793      query: gqlQuery,
3794      variables: payload
3795    }).then(function (res) {
3796      var value = res.body.data && res.body.data.postCategories || {};
3797      // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3798      var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || [];
3799      done(items.map(function (item) {
3800        item.count = featured ? item.featuredPublishedCount : item.publishedCount;
3801        return item;
3802      }), items.length);
3803    });
3804  }
3805  function fetchOffices(done) {
3806    var useRouter = auxUsesRouter('offices');
3807    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the
3808    // selection set differs ({ items {...} } on the router).
3809    var selection = 'id, name, tags';
3810    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. The two
3811    // APIs differ in more than the items wrapper: federated offices takes
3812    // companyId: ID! (legacy gateway: String), so each branch builds its whole doc.
3813    var gqlQuery = useRouter ? 'query ($companyId: ID!, $offset: Int, $limit: Int) {' + 'offices (companyId: $companyId, offset: $offset, limit: $limit) {' + 'items {' + selection + '}}}' : 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'offices (companyId: $companyId, offset: $offset, limit: $limit) {' + selection + '}}';
3814    var payload = {
3815      offset: 0,
3816      limit: 100,
3817      companyId: variables.companyId
3818    };
3819
3820    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3821    if (useRouter) {
3822      payload = window.luxuryPresence.routerApi.transformVariables('office
3822s', payload);
3823    }
3824    superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({
3825      query: gqlQuery,
3826      variables: payload
3827    }).then(function (res) {
3828      var value = res.body.data && res.body.data.offices || {};
3829      // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3830      var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || [];
3831      done(items, items.length);
3832    });
3833  }
3834
3835  // ROUTER-CLEANUP: no rentalRates field on the federated router — legacy only.
3836  function fetchAllRentalRates(done) {
3837    var url = options.url || window.luxuryPresence.defaults.apiGatewayUrl;
3838    var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'rentalRates (companyId: $companyId, offset: $offset, limit: $limit) {rentalRateId, label}}';
3839    var payload = {
3840      offset: 0,
3841      limit: 100,
3842      companyId: variables.companyId
3843    };
3844    superagent.post(url + '/graphql').withCredentials().send({
3845      query: gqlQuery,
3846      variables: payload
3847    }).then(function (res) {
3848      var items = res.body.data && res.body.data.rentalRates || [];
3849      done(items, items.length);
3850    }).catch(function (err) {
3851      console.error('Error fetching rental rates:', err);
3852      done([], 0);
3853    });
3854  }
3855  function fetchData(params, done) {
3856    var resource = options.resource;
3857    var gqlQuery = options.query || window.luxuryPresence.defaults.gql[resource];
3858    var payload = {};
3859    try {
3860      payload = JSON.parse(JSON.stringify(variables));
3861    } catch (e) {
3862      Object.keys(variables).forEach(function (variableName) {
3863        payload[variableName] = variables[variableName];
3864      });
3865    }
3866    payload.offset = (params.page - 1) * pageSize + offset;
3867    payload.limit = pageSize;
3868    payload.companyId = options.companyId;
3869    searchFormParams.forEach(function (formParam) {
3870      var val = params[formParam.formKey || formParam.param];
3871      if (val !== null && val !== undefined) {
3872        objSet(payload, formParam.param, val);
3873      }
3874    });
3875
3876    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3877    if (options.useRouterApi) {
3878      payload = window.luxuryPresence.routerApi.transformVariables(resource, payload);
3879    }
3880
3881    // TODO: Disabled loading due to jarring effect
3882    // dataContainer.html('Loading...');
3883    superagent.post(apiUrl(options.useRouterApi) + '/graphql').withCredentials().send({
3884      query: gqlQuery,
3885      variables: payload
3886    }).then(function (res) {
3887      if (res.body.errors) {
3888        done(res.body.errors);
3889        return;
3890      }
3891      var data = res.body.data || {};
3892      // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3893      var resources;
3894      var resourceCount;
3895      if (options.useRouterApi) {
3896        var page = window.luxuryPresence.routerApi.transformPage(data[resource]);
3897        resources = window.luxuryPresence.routerApi.transformResponse(resource, page.items);
3898        resourceCount = page.count;
3899      } else {
3900        resources = data[resource] || [];
3901        resourceCount = data[resource + 'Count'] && data[resource + 'Count'].count ? data[resource + 'Count'].count : 0;
3902      }
3903      const finish = function (items) {
3904        if (resource === 'properties' && propertyPlaceholderImage?.id) {
3905          items = items.map(item => {
3906            if (item.media?.length === 0) {
3907              return Object.assign(item, {
3908                media: [propertyPlaceholderImage]
3909              });
3910            }
3911            return item;
3912          });
3913        }
3914        done(null, items, resourceCount);
3915      };
3916
3917      // ROUTER-CLEANUP: client half of PLAT-4073 — resolve the requested
3918      // disclaimers before rendering; older SDKs skip (keys stay unset).
3919      if (options.useRouterApi && resource === 'properties' && options.routerPropertyDisclaimers && options.routerPropertyDisclaimers.length && window.luxuryPresence.routerApi && typeof window.luxuryPresence.routerApi.applyPropertyDisclaimers === 'function') {
3920        window.luxuryPresence.routerApi.applyPropertyDisclaimers(resources, options.routerPropertyDisclaimers).then(finish);
3921        return;
3922      }
3923      finish(resources);
3924    });
3925  }
3926  function getTotalPage() {
3927    return Math.ceil(totalNumber / pageSize);
3928  }
3929  function renderPaginationList() {
3930    var totalPages = getTotalPage();
3931    var rangeStart = searchParams.page - pageRange;
3932    var rangeEnd = searchParams.page + pageRange;
3933    if (rangeEnd > totalPages) {
3934      rangeEnd = totalPages;
3935      rangeStart = totalPages - pageRange * 2;
3936      rangeStart = rangeStart < 1 ? 1 : rangeStart;
3937    }
3938    if (rangeStart <= 1) {
3939      rangeStart = 1;
3940      rangeEnd = Math.min(pageRange * 2 + 1, totalPages);
3941    }
3942
3943    // Making sure that 1 more page button is shown in edge positions
3944    if (pageRange === 0) {
3945      if (searchParams.page === totalPages) {
3946        rangeStart = totalPages <= 1 ? 1 : totalPages - 1;
3947      }
3948      if (searchParams.page === 1) {
3949        rangeEnd = Math.min(2, totalPages);
3950      }
3951    }
3952
3953    // Render pagination list
3954    if (mode === 'NUMBERED_PAGINATION') {
3955      el.innerHTML = generateHTML({
3956        currentPage: searchParams.page,
3957        pageRange: pageRange,
3958        rangeStart: rangeStart,
3959        rangeEnd: rangeEnd
3960      });
3961      if (totalPages < 2 && hidePaginationOnFirstPage) {
3962        container.style.display = 'none';
3963      } else {
3964        container.style.display = '';
3965      }
3966    } else if (mode === 'LOAD_MORE_BUTTON') {
3967      if (searchParams.page >= totalPages) {
3968        loadMoreButton.style.display = 'none';
3969      } else {
3970        loadMoreButton.style.display = '';
3971      }
3972    }
3973  }
3974  function render(data) {
3975    renderPaginationList();
3976
3977    // Render new content with handlebars
3978    var html = '';
3979    if (mode === 'LOAD_MORE_BUTTON' && searchParams.page > 1) {
3980      // If using load more, append search results to existing results
3981      html = dataContainer.innerHTML;
3982    }
3983    for (var i = 0; i < data.length; i++) {
3984      var itemData = recursivelyParse(data[i]);
3985      itemData.sectionIndex = options.sectionIndex;
3986      itemData.renderOptions = options.renderOptions;
3987      html += template(itemData);
3988    }
3989    dataContainer.innerHTML = html;
3990
3991    // Scroll Top
3992    if (!firstRender && mode === 'NUMBERED_PAGINATION' && (!renderBySearch || !options.skipScrollOnSearch)) {
3993      // Only animate to the top if we replace dataContainer (numbered pagination)
3994      setTimeout(() => {
3995        const scrollTargetOffsetTop = scrollTarget.getBoundingClientRect().top + window.scrollY - scrollOffset;
3996        window.scrollTo({
3997          top: scrollTargetOffsetTop,
3998          behavior: 'smooth'
3999        });
4000      }, 250);
4001    }
4002    return true;
4003  }
4004  function generateHTML(args) {
4005    const totalPages = getTotalPage();
4006    const {
4007      rangeStart,
4008      rangeEnd
4009    } = args;
4010    const makeLnk = page => window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, {
4011      ...searchParams,
4012      page
4013    });
4014    let html = '';
4015    if (showPrevious || showPageNumbers || showNext) {
4016      html += '<div class="paginationjs-pages"><ul>';
4017
4018      // Previous button
4019      if (showPrevious) {
4020        if (searchParams.page <= 1) {
4021          html += `<li class="${classPrefix}-prev ${disableClassName}"><a>${prevText}</a></li>`;
4022        } else {
4023          html += `<li class="${classPrefix}-prev J-paginationjs-previous" data-num="${searchParams.page - 1}" title="Previous page"><a href="${makeLnk(searchParams.page - 1)}">${prevText}</a></li>`;
4024        }
4025      }
4026
4027      // Pages
4028      if (showPageNumbers) {
4029        if (rangeStart <= 3) {
4030          for (let i = 1; i < rangeStart; i++) {
4031            html += `<li class="${classPrefix}-page J-paginationjs-page ${i === searchParams.page ? activeClassName : ''}" data-num="${i}"><a ${i === searchParams.page ? '' : `href="${makeLnk(i)}"`}>${i}</a></li>`;
4032          }
4033        } else {
4034          if (showFirstOnEllipsisShow) {
4035            html += `<li class="${classPrefix}-page ${classPrefix}-first J-paginationjs-page" data-num="1"><a href="${makeLnk(1)}">1</a></li>`;
4036          }
4037          html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`;
4038        }
4039        for (let i = rangeStart; i <= rangeEnd; i++) {
4040          html += `<li class="${classPrefix}-page J-paginationjs-page ${i === searchParams.page ? activeClassName : ''}" data-num="${i}"><a ${i === searchParams.page ? '' : `href="${makeLnk(i)}"`}>${i}</a></li>`;
4041        }
4042        if (rangeEnd < totalPages - 2) {
4043          html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`;
4044          if (showLastOnEllipsisShow) {
4045            html += `<li class="${classPrefix}-page ${classPrefix}-last J-paginationjs-page" data-num="${totalPages}"><a href="${makeLnk(totalPages)}">${totalPages}</a></li>`;
4046          }
4047        } else {
4048          for (let i = rangeEnd + 1; i <= totalPages; i++) {
4049            html += `<li class="${classPrefix}-page J-paginationjs-page" data-num="${i}"><a href="${makeLnk(i)}">${i}</a></li>`;
4050          }
4051        }
4052      }
4053
4054      // Next button
4055      if (showNext) {
4056        if (searchParams.page >= totalPages) {
4057          html += `<li class="${classPrefix}-next ${disableClassName}"><a>${nextText}</a></li>`;
4058        } else {
4059          html += `<li class="${classPrefix}-next J-paginationjs-next" data-num="${searchParams.page + 1}" title="Next page"><a href="${makeLnk(searchParams.page + 1)}">${nextText}</a></li>`;
4060        }
4061      }
4062      html += '</ul></div>';
4063    }
4064    return html;
4065  }
4066  function go(newSearchParams, callback, restorationVisit) {
4067    if (disabled) return;
4068    var goToPageNumber = newSearchParams.page;
4069
4070    // Page number is out of bounds
4071    if (!goToPageNumber || goToPageNumber < 1) return;
4072    var totalPage = getTotalPage();
4073
4074    // Page number is out of bounds
4075    if (!restorationVisit && totalNumber > 0) {
4076      if (goToPageNumber > totalPage) return;
4077    }
4078    if (!options.skipSerialization && (mode === 'NUMBERED_PAGINATION' || searchContainer)) {
4079      var newURL = window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, {
4080        ...newSearchParams,
4081        page: goToPageNumber !== 1 && mode === 'NUMBERED_PAGINATION' ? newSearchParams.page : null
4082      });
4083      if (!areQueryParamsEqual(newSearchParams, searchParams) && !restorationVisit) {
4084        window.history.pushState({}, '', window.luxuryPresence.getPath(newURL, {
4085          queryString: true
4086        }));
4087      }
4088    }
4089
4090    // Fetch and update page
4091    fetchData(newSearchParams, renderWithData);
4092    disabled = true;
4093    function renderWithData(err, data, count) {
4094      if (err) {
4095        dataContainer.dispatchEvent(new Event('error'));
4096      } else {
4097        searchParams = {
4098          ...newSearchParams
4099        };
4100        totalNumber = count - offset;
4101        if (data.length === 0) {
4102          dataContainer.dispatchEvent(new Event('no-data'));
4103        } else {
4104          dataContainer.dispatchEvent(new Event('data'));
4105        }
4106        render(data);
4107        firstRender = false;
4108      }
4109      disabled = false;
4110      renderBySearch = false;
4111    }
4112  }
4113  function areQueryParamsEqual(first, second) {
4114    var differ = Object.keys(first).find(function (key) {
4115      return first[key] !== undefined && first[key] !== null && first[key] !== second[key];
4116    });
4117    if (differ) {
4118      return false;
4119    }
4120    differ = Object.keys(second).find(function (key) {
4121      return second[key] !== undefined && second[key] !== null && second[key] !== first[key];
4122    });
4123    return !differ;
4124  }
4125  function next(callback) {
4126    go({
4127      ...searchParams,
4128      page: searchParams.page + 1
4129    }, callback);
4130  }
4131  function previous(callback) {
4132    go({
4133      ...searchParams,
4134      page: searchParams.page - 1
4135    }, callback);
4136  }
4137  function refresh(callback) {
4138    go(searchParams, callback);
4139  }
4140  function update(params, callback) {
4141    renderBySearch = true;
4142    go(params, callback);
4143  }
4144  function observer() {
4145    if (searchContainer) {
4146      searchContainer.addEventListener('search', function (event, newSearchParams) {
4147        newSearchParams = event.detail || newSearchParams;
4148        update({
4149          ...searchParams,
4150          ...newSearchParams,
4151          page: 1
4152        });
4153      });
4154      searchContainer.addEventListener('clear-search', function () {
4155        const defaultSearchParams = {
4156          ...DefaultSearchParams
4157        };
4158        const isCurrentSearchFormStateDefault = areQueryParamsEqual({
4159          ...defaultSearchParams,
4160          page: null
4161        }, {
4162          ...searchParams,
4163          page: null
4164        });
4165
4166        // if mode is LOAD_MORE_BUTTON we should't make anything on clear
4167        // when search form have default state
4168        if (isCurrentSearchFormStateDefault && mode !== 'NUMBERED_PAGINATION') {
4169          return;
4170        }
4171
4172        // if someone initially go to some page and click 'Clear' on search from
4173        // we should't navigate to first page. We should preserve page value
4174        if (isCurrentSearchFormStateDefault) {
4175          defaultSearchParams.page = searchParams.page;
4176        }
4177        syncSearchFormState(defaultSearchParams);
4178        update(defaultSearchParams);
4179      });
4180    }
4181    if (mode === 'LOAD_MORE_BUTTON') {
4182      loadMoreButton.addEventListener('click', function (event) {
4183        go({
4184          ...searchParams,
4185          page: searchParams.page + 1
4186        });
4187        return false;
4188      });
4189    }
4190    if (mode === 'LOAD_MORE_BUTTON' || mode === 'BUTTONLESS_PAGINATION') {
4191      // Do initial render
4192      go(Object.assign({}, searchParams, {
4193        page: 1
4194      }));
4195      return;
4196    }
4197    if (mode === 'NUMBERED_PAGINATION') {
4198      // Go to specified page number
4199      container.addEventListener(eventPrefix + 'go', function (event) {
4200        let {
4201          pageNumber,
4202          done
4203        } = event.detail || {};
4204        pageNumber = parseInt(pageNumber, 10);
4205        if (!pageNumber) {
4206          return;
4207        }
4208        go({
4209          ...searchParams,
4210          page: pageNumber
4211        }, done);
4212      });
4213
4214      // Page number button click
4215      el.addEventListener('click', function (event) {
4216        let clickTarget = event.target;
4217        let current = clickTarget.closest('.J-paginationjs-page, .J-paginationjs-previous, .J-paginationjs-next');
4218        let pageNumber = current?.getAttribute('data-num');
4219        if (!pageNumber || current.classList.contains(disableClassName) || current.classList.contains(activeClassName)) {
4220          return;
4221        } else {
4222          go({
4223            ...searchParams,
4224            page: parseInt(pageNumber, 10)
4225          });
4226        }
4227        event.preventDefault();
4228      });
4229
4230      // Whether to load the default page
4231      var defaultPageNumber = searchParams.page;
4232      if (triggerPagingOnInit) {
4233        container.dispatchEvent(new CustomEvent(eventPrefix + 'go', {
4234          detail: {
4235            pageNumber: defaultPageNumber
4236          }
4237        }));
4238      }
4239    }
4240    window.addEventListener('popstate', function (event) {
4241      var newParams = Object.assign({}, DefaultSearchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId));
4242      if (!areQueryParamsEqual(newParams, searchParams)) {
4243        go(newParams, null, true);
4244        if (searchContainer) {
4245          syncSearchFormState(newParams);
4246        }
4247      }
4248    });
4249  }
4250  function replaceVariables(template, variables) {
4251    var formattedString;
4252    for (var key in variables) {
4253      var value = variables[key];
4254      var regexp = new RegExp('<%=\\s*' + key + '\\s*%>', 'img');
4255      formattedString = (formattedString || template).replace(regexp, value);
4256    }
4257    return formattedString;
4258  }
4259  function isTextEditorValue(obj) {
4260    return 'raw' in obj || 'gjs' in obj;
4261  }
4262  function getTextEditorValue(obj) {
4263    if (!obj.html) {
4264      return '';
4265    }
4266    var data = obj.html;
4267    var css = (obj.raw || obj.gjs || {}).css;
4268    if (css) {
4269      data = data + '<style>' + css + '</style>';
4270    }
4271    return data;
4272  }
4273
4274  /**
4275   * check rendered resources for html and raw properties that could indicate if resource is from an advanced text editor.
4276   * strips out raw proprties and returns only HTML if it exists.
4277   * @param {Object} resources a collection retrieved from the database
4278   * @return {Object} the newly modified object.
4279   */
4280  function recursivelyParse(resources) {
4281    forEach(resources, function (value, key) {
4282      if (!value) {
4283        return;
4284      }
4285      if (value instanceof Object) {
4286        if (isTextEditorValue(value)) {
4287          resources[key] = getTextEditorValue(value);
4288          return;
4289        } else {
4290          return recursivelyParse(value);
4291        }
4292      }
4293      try {
4294        var parsedData = JSON.parse(value);
4295        if (isTextEditorValue(parsedData)) {
4296          resources[key] = getTextEditorValue(parsedData);
4297        }
4298      } catch (e) {
4299        // do nothing if we failed to parse value as JSON
4300      }
4301    });
4302    return resources;
4303  }
4304  function forEach(collection, iteratee) {
4305    var func = Array.isArray(collection) ? arrayEach : baseFor;
4306    return func(collection, iteratee);
4307  }
4308  function baseFor(object, iteratee) {
4309    if (!object) {
4310      return;
4311    }
4312    var iterable = Object(object);
4313    var props = Object.keys(object);
4314    var length = props.length;
4315    var index = -1;
4316    while (length--) {
4317      var key = props[++index];
4318      if (iteratee(iterable[key], key, iterable) === false) {
4319        break;
4320      }
4321    }
4322    return object;
4323  }
4324  function objSet(obj, path, value) {
4325    const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
4326    pathArray.reduce((acc, key, i) => {
4327      if (acc[key] === undefined) acc[key] = {};
4328      if (i === pathArray.length - 1) acc[key] = value;
4329      return acc[key];
4330    }, obj);
4331  }
4332  function arrayEach(array, iteratee) {
4333    var index = -1;
4334    var length = array.length;
4335    while (++index < length) {
4336      if (iteratee(array[index], index, array) === false) {
4337        break;
4338      }
4339    }
4340    return array;
4341  }
4342  function selectPageRangeMode(e) {
4343    pageRange = e.matches ? mobilePageRange : desktopPageRange;
4344    renderPaginationList();
4345  }
4346  paginationMql.addEventListener('change', selectPageRangeMode);
4347})('section-c20b1af6-e3e3-4d23-9029-d843644debe8', JSON.parse("{\"pageSize\":\"99\",\"resource\":\"properties\",\"pageRange\":1,\"variables\":{\"sort\":\"salesPrice\",\"limit\":99,\"order\":\"salesPrice\",\"offset\":0,\"sortDir\":\"DESC\",\"statusId\":\"{{variables.statusId}}\",\"companyId\":\"116d6abd-55d8-410f-b7f3-bdd7f6c5b727\",\"backfillMLSResults\":\"{{variables.backfillMLSResults}}\",\"statusIds\":[\"5f528253-abb7-484e-95c3-330269ac1105\"],\"propertyIds\":[],\"advancedFilters\":{\"query\":{\"statusIds\":{\"in\":[\"5f528253-abb7-484e-95c3-330269ac1105\",\"959c11cf-8655-4f91-874c-292b0ab7ea6b\",\"a0012964-4f51-4430-abf8-6547c5ab6441\",\"df04ccbe-4621-4140-a504-ee1a17430bb7\",\"88b4ace6-f39b-4b25-a051-8f6dba976833\"]}}},\"websiteId\":\"efd0b616-93bf-43b2-a015-21b3983523b4\"},\"searchFormParams\":[{\"param\":\"search\",\"global\":true,\"urlKey\":\"search\"},{\"type\":\"string\",\"param\":\"neighborhoodId\",\"global\":true,\"urlKey\":\"neighborhoodId\"},{\"type\":\"int\",\"param\":\"salesPriceGTE\",\"global\":true,\"urlKey\":\"pricemin\"},{\"type\":\"int\",\"param\":\"salesPriceLTE\",\"global\":true,\"urlKey\":\"pricemax\"},{\"type\":\"int\",\"param\":\"livingSpaceSizeGTE\",\"global\":true,\"urlKey\":\"areamin\"},{\"type\":\"int\",\"param\":\"livingSpaceSizeLTE\",\"global\":true,\"urlKey\":\"areamax\"},{\"type\":\"string\",\"param\":\"seasonalPriceId\",\"global\":true,\"urlKey\":\"seasonalPriceId\"}],\"skipScrollOnSearch\":true,\"hidePaginationOnFirstPage\":true,\"companyId\":\"116d6abd-55d8-410f-b7f3-bdd7f6c5b727\",\"usePageResource\":false,\"sectionIndex\":2,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}"));
4348} catch(e) {
4349console.log(e);
4350}
4351                try {
4352(function init(sectionDomId) {
4353  const customDropdownHTML = `
4354  <div class="custom-select" role="presentation">
4355    <button class="custom-select-toggle" type="button" aria-haspopup="true" aria-expanded="false" role="combobox"></button>
4356    <div class="custom-select-menu"><div class="custom-select-content"></div></div>
4357  </div>`;
4358  const hideOriginalSelect = originalSelect => {
4359    originalSelect.classList.remove(...originalSelect.classList);
4360    originalSelect.classList.add("sr-only");
4361  };
4362  const openCustomSelect = customSelectToggle => {
4363    let customSelectMenu = customSelectToggle.nextElementSibling;
4364    customSelectMenu.classList.add("open");
4365    customSelectToggle.classList.add("open");
4366    customSelectToggle.ariaExpanded = true;
4367  };
4368  const closeCustomSelect = customSelectToggle => {
4369    let customSelectMenu = customSelectToggle.nextElementSibling;
4370    customSelectMenu.classList.remove("open");
4371    customSelectToggle.classList.remove("open");
4372    customSelectToggle.ariaExpanded = false;
4373  };
4374  const inheritAttributes = (originalSelect, customSelectToggle, customSelectMenu) => {
4375    customSelectToggle.className = customSelectToggle.className.concat(' ', originalSelect.className);
4376    customSelectToggle.id = originalSelect.getAttribute("id") + "custom";
4377    customSelectToggle.dataset.name = originalSelect.getAttribute("name");
4378    customSelectMenu.setAttribute("aria-labelledby", customSelectToggle.id);
4379  };
4380  const initiateQuerySelectors = customSelect => {
4381    let customSelectToggle = customSelect.querySelector('.custom-select-toggle'),
4382      customSelectMenu = customSelect.querySelector('.custom-select-menu'),
4383      customSelectContent = customSelect.querySelector('.custom-select-content');
4384    return {
4385      customSelectToggle,
4386      customSelectMenu,
4387      customSelectContent
4388    };
4389  };
4390  const initiateToggleText = (originalSelect, customSelectToggle) => {
4391    const dataLabelOption = originalSelect.querySelector("[data-label]");
4392    const isMultiple = originalSelect?.multiple;
4393    if (!isMultiple) {
4394      const toggleText = dataLabelOption && dataLabelOption.dataset.label || originalSelect.querySelector(":checked")?.textContent || originalSelect.querySelector("option")?.textContent;
4395      customSelectToggle.classList.add("is-placeholder");
4396      customSelectToggle.innerHTML = toggleText;
4397    } else {
4398      const placeholderText = dataLabelOption && dataLabelOption.dataset.label || originalSelect.querySelector("option")?.textContent || "Select";
4399      const selectedOptions = Array.from(originalSelect.querySelectorAll("option:checked")).filter(opt => opt.value !== "");
4400      if (selectedOptions.length === 0) {
4401        customSelectToggle.innerHTML = placeholderText;
4402        customSelectToggle.classList.add("is-placeholder");
4403      } else if (selectedOptions.length === 1) {
4404        customSelectToggle.innerHTML = selectedOptions[0].textContent;
4405        customSelectToggle.classList.remove("is-placeholder");
4406      } else {
4407        customSelectToggle.innerHTML = `${selectedOptions[0].textContent} +${selectedOptions.length - 1}`;
4408        customSelectToggle.classList.remove("is-placeholder");
4409      }
4410    }
4411  };
4412  const convertOptionsToButtons = (originalSelect, customSelectContent) => {
4413    originalSelect.querySelectorAll('option').forEach(option => {
4414      const button = createButtonFromOption(option);
4415      customSelectContent.appendChild(button);
4416    });
4417  };
4418  const createButtonFromOption = option => {
4419    let button = document.createElement('button');
4420    button.className = "custom-select-item";
4421    button.setAttribute("role", "option");
4422    button.setAttribute("type", "button");
4423    button.textContent = option.textContent;
4424    button.setAttribute('value', option.value);
4425    if (option.disabled) {
4426      button.setAttribute("disabled", "true");
4427    }
4428    if (option.selected && option.value !== "") {
4429      button.classList.add("is-selected");
4430      button.setAttribute("aria-selected", "true");
4431    }
4432    return button;
4433  };
4434  const initiateEventListeners = (originalSelect, customSelectToggle, customSelectMenu) => {
4435    const isMultiple = originalSelect?.multiple;
4436    originalSelect.addEventListener("focus", function () {
4437      openCustomSelect(customSelectToggle);
4438      customSelectToggle.focus();
4439    });
4440    customSelectToggle.addEventListener("click", function () {
4441      if (customSelectToggle.getAttribute("aria-expanded") === "true") {
4442        closeCustomSelect(customSelectToggle);
4443      } else {
4444        openCustomSelect(customSelectToggle);
4445      }
4446    });
4447    customSelectMenu.addEventListener("click", function (event) {
4448      if (event.target.classList.contains('custom-select-item')) {
4449        const clickedValue = event.target.value;
4450        const clickedOption = originalSelect.querySelector(`option[value="${clickedValue}"]`);
4451        const placeholderOption = originalSelect.querySelector("[data-label]");
4452        const placeholderText = placeholderOption?.dataset.label || originalSelect.querySelector("option")?.textContent || "Select";
4453        if (!isMultiple) {
4454          let opts = customSelectMenu.querySelectorAll(".is-selected");
4455          [].forEach.call(opts, function (el) {
4456            el.classList.remove("is-selected");
4457          });
4458          event.target.classList.add("is-selected");
4459          clickedOption.selected = true;
4460          customSelectToggle.innerHTML = clickedOption.textContent;
4461          if (clickedValue === "" || event.target.classList.contains("is-placeholder")) {
4462            customSelectToggle.classList.add("is-placeholder");
4463          } else {
4464            customSelectToggle.classList.remove("is-placeholder");
4465          }
4466          let changeEvent = new Event('change', {
4467            bubbles: true
4468          });
4469          originalSelect.dispatchEvent(changeEvent);
4470          closeCustomSelect(customSelectToggle);
4471        } else {
4472          if (clickedValue === "") {
4473            customSelectMenu.querySelectorAll(".is-selected").forEach(el => {
4474              el.classList.remove("is-selected");
4475              el.setAttribute("aria-selected", "false");
4476            });
4477            originalSelect.querySelectorAll("option").forEach(opt => opt.selected = false);
4478            customSelectToggle.innerHTML = placeholderText;
4479            customSelectToggle.classList.add("is-placeholder");
4480          } else {
4481            const isCurrentlySelected = event.target.classList.contains("is-selected");
4482            event.target.classList.toggle("is-selected");
4483            event.target.setAttribute("aria-selected", (!isCurrentlySelected).toString());
4484            clickedOption.selected = !isCurrentlySelected;
4485            const allItem = customSelectMenu.querySelector('.custom-select-item[value=""]');
4486            if (allItem) {
4487              allItem.classList.remove("is-selected");
4488              allItem.setAttribute("aria-selected", "false");
4489            }
4490            const allOption = originalSelect.querySelector('option[value=""]');
4491            if (allOption) allOption.selected = false;
4492            const selectedItems = customSelectMenu.querySelectorAll(".custom-select-item.is-selected");
4493            if (selectedItems.length === 0) {
4494              customSelectToggle.innerHTML = placeholderText;
4495              customSelectToggle.classList.add("is-placeholder");
4496            } else if (selectedItems.length === 1) {
4497              customSelectToggle.innerHTML = selectedItems[0].textContent;
4498              customSelectToggle.classList.remove("is-placeholder");
4499            } else {
4500              customSelectToggle.innerHTML = `${selectedItems[0].textContent} +${selectedItems.length - 1}`;
4501              customSelectToggle.classList.remove("is-placeholder");
4502            }
4503          }
4504          let changeEvent = new Event('change', {
4505            bubbles: true
4506          });
4507          originalSelect.dispatchEvent(changeEvent);
4508        }
4509      }
4510    });
4511    document.addEventListener("click", function (event) {
4512      if (!customSelectMenu.contains(event.target) && !customSelectToggle.contains(event.target)) {
4513        closeCustomSelect(customSelectToggle);
4514      }
4515    });
4516  };
4517  const createCustomSelect = originalSelect => {
4518    const customSelect = document.createElement('div');
4519    customSelect.innerHTML = customDropdownHTML;
4520    const {
4521      customSelectToggle,
4522      customSelectMenu,
4523      customSelectContent
4524    } = initiateQuerySelectors(customSelect);
4525    inheritAttributes(originalSelect, customSelectToggle, customSelectMenu);
4526    hideOriginalSelect(originalSelect);
4527    initiateToggleText(originalSelect, customSelectToggle);
4528    convertOptionsToButtons(originalSelect, customSelectContent);
4529    initiateEventListeners(originalSelect, customSelectToggle, customSelectMenu);
4530    return customSelect;
4531  };
4532  const setCustomSelectValue = (originalSelect, value) => {
4533    let customSelect = originalSelect.nextElementSibling;
4534    let customSelectToggle = customSelect.querySelector(".custom-select-toggle");
4535    let customSelectContent = customSelect.querySelector(".custom-select-content");
4536    if (!customSelectContent) return;
4537    let selectedOption = value ? Array.from(customSelectContent.children).find(function (b) {
4538      return b.value === value;
4539    }) : customSelectContent.firstChild;
4540    if (!selectedOption) {
4541      return;
4542    }
4543    if (selectedOption.classList.contains("is-disabled")) return;
4544    let elementNumber = Array.from(selectedOption.parentNode.children).indexOf(selectedOption);
4545    let linkedOption = originalSelect.querySelectorAll("option")[elementNumber];
4546    linkedOption.selected = true;
4547    selectedOption.classList.add("is-selected");
4548    selectedOption.parentNode.querySelectorAll(".custom-select-item").forEach(el => {
4549      if (el !== selectedOption) {
4550        el.classList.remove("is-selected");
4551      }
4552    });
4553    closeCustomSelect(customSelectToggle);
4554    customSelectToggle.innerHTML = linkedOption.innerHTML;
4555    if (linkedOption.value) {
4556      customSelectToggle.classList.remove("is-placeholder");
4557      if (linkedOption.value !== "") {
4558        customSelect.classList.add("has-selection");
4559      } else {
4560        customSelect.classList.remove("has-selection");
4561      }
4562    } else {
4563      customSelect.classList.remove("has-selection");
4564      customSelectToggle.classList.add("is-placeholder");
4565    }
4566  };
4567  const customSelect = originalSelect => {
4568    const customSelect = createCustomSelect(originalSelect);
4569    originalSelect.insertAdjacentElement('afterend', customSelect);
4570    return customSelect;
4571  };
4572  const resetCustomSelect = originalSelect => {
4573    const customSelectEl = originalSelect.nextElementSibling;
4574    const customSelectToggle = customSelectEl?.querySelector('.custom-select-toggle');
4575    const customSelectContent = customSelectEl?.querySelector('.custom-select-content');
4576    if (!customSelectToggle || !customSelectContent) return;
4577    const placeholderOption = originalSelect.querySelector("[data-label]");
4578    const placeholderText = placeholderOption?.dataset.label || originalSelect.querySelector("option")?.textContent || "Select";
4579    customSelectContent.querySelectorAll('.custom-select-item').forEach(item => {
4580      item.classList.remove('is-selected');
4581      item.setAttribute('aria-selected', 'false');
4582    });
4583    originalSelect.querySelectorAll('option').forEach(opt => opt.selected = false);
4584    customSelectToggle.innerHTML = placeholderText;
4585    customSelectToggle.classList.add('is-placeholder');
4586    const customSelectWrapper = customSelectEl.querySelector('.custom-select');
4587    if (customSelectWrapper) {
4588      customSelectWrapper.classList.remove('has-selection');
4589    }
4590  };
4591  const section = document.getElementById(sectionDomId);
4592  const searchContainer = section.querySelector('.search-container');
4593  if (!searchContainer) return;
4594  const emptyResultElement = section.querySelector('.empty-result');
4595  const dataContainer = section.querySelector('.data-container');
4596  const areaSlider = searchContainer.querySelector('input[name="area-slider"]');
4597  const neighborhoodSelect = searchContainer.querySelector('select[name="neighborhood-select"]');
4598  const seasonalPriceSelect = section.querySelector('select[name="seasonal-price"]');
4599  const searchInput = searchContainer.querySelector('input[name="search-input"]');
4600  const resetSearchInput = section.querySelector(".js-reset");
4601  const showFilter = section.querySelector('.js-show-filter');
4602  const filtersCount = section.querySelector('.js-selected-filters');
4603  const hideFilter = section.querySelector('.js-hide-filter');
4604  const neighborhoodsSelectHolder = section.querySelector('.js-neighborhoods-select-holder');
4605  const seasonalPriceSelectHolder = section.querySelector('.js-rental-rates-select-holder');
4606  const _priceSlider = section.querySelector('.js-price-slider');
4607  const _priceSliderMinLabel = section.querySelector('.js-price-slider-min');
4608  const _priceSliderMaxLabel = section.querySelector('.js-price-slider-max');
4609  const _areaSlider = section.querySelector('.js-area-slider');
4610  const _areaSliderMinLabel = section.querySelector('.js-area-slider-min');
4611  const _areaSliderMaxLabel = section.querySelector('.js-area-slider-max');
4612  const _priceMin = parseInt(_priceSlider.getAttribute("data-min"), 10);
4613  const _priceMax = parseInt(_priceSlider.getAttribute("data-max"), 10);
4614  const _priceStep = parseInt(_priceSlider.getAttribute("data-step"), 10);
4615  const _areaMin = parseInt(_areaSlider.getAttribute("data-min"), 10);
4616  const _areaMax = parseInt(_areaSlider.getAttribute("data-max"), 10);
4617  const _areaStep = parseInt(_areaSlider.getAttribute("data-step"), 10);
4618  let _currentPriceSliderMin, _currentPriceSliderMax;
4619  let _currentAreaSliderMin, _currentAreaSliderMax;
4620  showFilter.addEventListener('click', function () {
4621    searchContainer.style.display = 'block';
4622    showFilter.style.display = 'none';
4623    hideFilter.style.display = 'flex';
4624  });
4625  hideFilter.addEventListener('click', function () {
4626    searchContainer.style.display = 'none';
4627    showFilter.style.display = 'flex';
4628    hideFilter.style.display = 'none';
4629  });
4630  if (_priceSlider) {
4631    noUiSlider.create(_priceSlider, {
4632      start: [_priceMin, _priceMax],
4633      connect: true,
4634      step: _priceStep,
4635      range: {
4636        'min': _priceMin,
4637        'max': _priceMax
4638      },
4639      format: {
4640        to: function (val) {
4641          return window.luxuryPresence.formatSliderPriceRange(val, {
4642            min: _priceMin,
4643            max: _priceMax
4644          }, "$", {
4645            lowPrefix: "<",
4646            highSuffix: "+"
4647          });
4648        },
4649        from: function (val) {
4650          return Number(val.replace(/[^0-9.-]+/g, ""));
4651        }
4652      }
4653    });
4654    _priceSlider.noUiSlider.on('update', function (values) {
4655      _priceSliderMinLabel.innerHTML = `${values[0]}`;
4656      _priceSliderMaxLabel.innerHTML = `${values[1]}`;
4657      const [rawMin, rawMax] = _priceSlider.noUiSlider.get(true);
4658      _currentPriceSliderMin = rawMin;
4659      _currentPriceSliderMax = rawMax;
4660    });
4661    _priceSlider.noUiSlider.on('end', function () {
4662      onSearch();
4663    });
4664  }
4665  if (_areaSlider) {
4666    noUiSlider.create(_areaSlider, {
4667      start: [_areaMin, _areaMax],
4668      connect: true,
4669      step: _areaStep,
4670      range: {
4671        'min': _areaMin,
4672        'max': _areaMax
4673      },
4674      format: {
4675        to: function (val) {
4676          return window.luxuryPresence.formatSliderPriceRange(val, {
4677            min: _areaMin,
4678            max: _areaMax
4679          }, "", {
4680            lowPrefix: "<",
4681            highSuffix: "+"
4682          });
4683        },
4684        from: function (val) {
4685          return Number(val.replace(/[^0-9.-]+/g, ""));
4686        }
4687      }
4688    });
4689    _areaSlider.noUiSlider.on('update', function (values) {
4690      _areaSliderMinLabel.innerHTML = `${values[0]}`;
4691      _areaSliderMaxLabel.innerHTML = `${values[1]}`;
4692      const [rawMin, rawMax] = _areaSlider.noUiSlider.get(true);
4693      _currentAreaSliderMin = rawMin;
4694      _currentAreaSliderMax = rawMax;
4695    });
4696    _areaSlider.noUiSlider.on('end', function () {
4697      onSearch();
4698    });
4699  }
4700  function onSearch() {
4701    const params = {
4702      salesPriceGTE: _currentPriceSliderMin != _priceMin ? _currentPriceSliderMin : null,
4703      salesPriceLTE: _currentPriceSliderMax != _priceMax ? _currentPriceSliderMax : null,
4704      livingSpaceSizeGTE: _currentAreaSliderMin != _areaMin ? _currentAreaSliderMin : null,
4705      livingSpaceSizeLTE: _currentAreaSliderMax != _areaMax ? _currentAreaSliderMax : null,
4706      bedroomCountGTE: null,
4707      bathCountGTE: null,
4708      neighborhoodId: neighborhoodSelect.value || null,
4709      seasonalPriceId: seasonalPriceSelect?.value || null,
4710      search: searchInput.value || null
4711    };
4712    const paramCount = Object.values(params).filter(value => value !== null).length;
4713    if (paramCount > 0) {
4714      filtersCount.textContent = paramCount;
4715      filtersCount.style.display = 'inline-block';
4716    } else {
4717      filtersCount.style.display = 'none';
4718    }
4719    const event = new CustomEvent('search', {
4720      detail: params
4721    });
4722    searchContainer.dispatchEvent(event);
4723  }
4724  searchContainer.addEventListener('neighborhoods-data', function (ev) {
4725    const neighborhoods = ev.detail;
4726    neighborhoods.data.forEach(item => {
4727      const option = document.createElement('option');
4728      option.value = item.value;
4729      option.textContent = item.label;
4730      neighborhoodSelect.appendChild(option);
4731    });
4732    customSelect(section.querySelector(".dropdown-select[name='neighborhood-select']"));
4733    if (neighborhoods.data.length) neighborhoodsSelectHolder.style.display = 'block';
4734  });
4735  if (seasonalPriceSelect) {
4736    searchContainer.addEventListener('rental-rates-data', function (ev) {
4737      const rentalRates = ev.detail;
4738      rentalRates.data.forEach(item => {
4739        const option = document.createElement('option');
4740        option.value = item.rentalRateId;
4741        option.textContent = item.label;
4742        seasonalPriceSelect.appendChild(option);
4743      });
4744      customSelect(section.querySelector(".dropdown-select[name='seasonal-price']"));
4745      if (rentalRates.data.length) seasonalPriceSelectHolder.style.display = 'block';
4746    });
4747  }
4748  searchContainer.addEventListener('sync', function (ev) {
4749    const params = ev.detail;
4750    searchInput.value = params.search || '';
4751    if (neighborhoodSelect) setCustomSelectValue(neighborhoodSelect, params.neighborhoodId);
4752    if (seasonalPriceSelect) setCustomSelectValue(seasonalPriceSelect, params.seasonalPriceId);
4753    _priceSlider.noUiSlider.set([params.salesPriceGTE || _priceMin, params.salesPriceLTE || _priceMax]);
4754    _areaSlider.noUiSlider.set([params.livingSpaceSizeGTE || _areaMin, params.livingSpaceSizeLTE || _areaMax]);
4755  });
4756  searchInput.addEventListener('input', window.luxuryPresence.debounce(onSearch, 1000));
4757  resetSearchInput.addEventListener('click', function () {
4758    neighborhoodSelect.value = '';
4759    searchInput.value = '';
4760    if (seasonalPriceSelect) {
4761      seasonalPriceSelect.value = '';
4762      setCustomSelectValue(seasonalPriceSelect, '');
4763    }
4764    setCustomSelectValue(neighborhoodSelect);
4765    _priceSlider.noUiSlider.set([_priceMin, _priceMax]);
4766    _areaSlider.noUiSlider.set([_areaMin, _areaMax]);
4767    setTimeout(() => {
4768      const params = {
4769        salesPriceGTE: null,
4770        salesPriceLTE: null,
4771        livingSpaceSizeGTE: null,
4772        livingSpaceSizeLTE: null,
4773        bedroomCountGTE: null,
4774        bathCountGTE: null,
4775        neighborhoodId: null,
4776        seasonalPriceId: null,
4777        search: null
4778      };
4779      const event = new CustomEvent('search', {
4780        detail: params
4781      });
4782      searchContainer.dispatchEvent(event);
4783    }, 1000);
4784  });
4785  neighborhoodSelect.addEventListener('change', onSearch);
4786  if (seasonalPriceSelect) {
4787    seasonalPriceSelect.addEventListener('change', onSearch);
4788  }
4789})('section-c20b1af6-e3e3-4d23-9029-d843644debe8', JSON.parse("{\"resource\":\"properties\",\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true},\"companyId\":\"116d6abd-55d8-410f-b7f3-bdd7f6c5b727\",\"usePageResource\":false,\"sectionIndex\":2}"));
4790} catch(e) {
4791console.log(e);
4792}
4793                try {
4794(function init(sectionDomId) {})('section-b903aacd-3b0c-4042-9cd9-3066a61f407c', 'undefined');
4795} catch(e) {
4796console.log(e);
4797}
4798                try {
4799(function init(sectionDomId) {})('section-16a9df67-1fdd-4f21-b174-bf9a1c14b565', 'undefined');
4800} catch(e) {
4801console.log(e);
4802}
4803                try {
4804(function init(sectionDomId, options) {
4805  let section = null;
4806  switch (sectionDomId) {
4807    case 'NAVBAR':
4808      section = document.querySelector('body > nav, #global-navbar');
4809      break;
4810    case 'FOOTER':
4811      section = document.querySelector('body > footer, #global-footer');
4812      break;
4813    case 'SIDEMENU':
4814      section = document.querySelector('body > div.sidemenu, #global-sidemenu');
4815      break;
4816    case 'CONTACT':
4817      section = document.querySelector('#modal-global-contact-us');
4818      break;
4819    case 'MOBILE_CONTACT':
4820      section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact');
4821      break;
4822    case 'SUBSCRIBE':
4823      // Subscribe Not Implemented
4824      section = null;
4825      break;
4826    case 'ACCOUNT':
4827      // Account Not Implemented
4828      section = null;
4829      break;
4830    default:
4831      section = document.querySelector('#' + sectionDomId);
4832  }
4833  if (!section) {
4834    return;
4835  }
4836  var url = window.luxuryPresence.defaults.routerUrl;
4837  var companyId = window.luxuryPresence.defaults.companyId;
4838  var limit = options.limit || 8;
4839  if (typeof limit === 'string') {
4840    limit = parseInt(limit, 10) || 8; // this NaN protection also filters out 0 - this is expected
4841  }
4842  var templateSelector = options.templateSelector || '.jsIGTemplate';
4843  var containerSelector = options.containerSelector || '.jsIGContainer';
4844  var hasDataClass = options.hasDataClass || 'has-data';
4845  var hideActivateMessage = options.hasDataClass || false;
4846  var payload = {
4847    companyId: companyId,
4848    limit: limit
4849  };
4850  if (options.resourceId && typeof options.resourceId === 'string' && !
4850options.resourceId.match(/^{{.*}}$/)) {
4851    payload.resourceId = options.resourceId;
4852    // Federated enum values are uppercase (AGENT/TEAM); element configs carry lowercase
4853    payload.resource = String(options.resource || 'agent').toUpperCase();
4854    payload.fallbackToNoResource = options.fallbackToNoResource === 'true' || options.fallbackToNoResource === true;
4855  }
4856  var query = 'query InstagramFeed (\n' + '  $companyId: ID!\n' + '  $instagramAuthorizationId: ID\n' + '  $username: String\n' + (payload.resourceId ? '$resource: InstagramContentAuthResourceEnum\n $resourceId: ID\n $fallbackToNoResource: Boolean' : '') + '  $limit: Int\n' + ') {\n' + '  instagramContentFeed (\n' + '  companyId: $companyId\n' + '  instagramAuthorizationId: $instagramAuthorizationId\n' + '  username: $username\n' + (payload.resourceId ? 'resource: $resource\n resourceId: $resourceId\n fallbackToNoResource: $fallbackToNoResource' : '') + '  limit: $limit\n' + '  ) {\n' + '    active\n' + '    feedUrl\n' + '    username\n' + '    items {\n' + '      id\n' + '      caption\n' + '      commentsCount\n' + '      likeCount\n' + '      mediaType\n' + '      mediaUrl\n' + '      permalink\n' + '      shortcode\n' + '      thumbnailUrl\n' + '      timestamp\n' + '      username\n' + '    }\n' + '  }\n' + '}\n';
4857  var templateHTML = section.querySelector(templateSelector)?.innerHTML || '';
4858  var template = Handlebars.compile(templateHTML);
4859  var container = section.querySelector(containerSelector);
4860  if (options.variables) {
4861    Object.keys(options.variables).forEach(function (key) {
4862      if (options.variables.hasOwnProperty(key) && (typeof options.variables[key] !== 'string' || !options.variables[key].match(/^{{.*}}$/))) {
4863        payload[key] = options.variables[key];
4864      }
4865    });
4866  }
4867  function getData() {
4868    var feed = {
4869      error: true
4870    };
4871    if (payload.companyId == null || payload.companyId === '') {
4872      // instagramContentFeed requires companyId (ID!) — nothing to fetch without it.
4873      // Checked after the options.variables merge, which may override the default.
4874      // Deferred so element listeners (attached after this template runs) still receive it.
4875      setTimeout(function () {
4876        section.dispatchEvent(new CustomEvent('ig-data', {
4877          detail: feed
4878        }));
4879      }, 0);
4880      return;
4881    }
4882    superagent.post(url + '/graphql').send({
4883      query: query,
4884      variables: payload
4885    }).then(res => {
4886      try {
4887        if (!res.body.errors) {
4888          feed = res.body.data.instagramContentFeed;
4889          if (!feed.active) {
4890            if (!hideActivateMessage && sectionDomId === 'section-temp' && container) {
4891              if (payload.resourceId) {
4892                container.innerHTML = '<div style="text-align: center">Instagram account is not connected to selected ' + payload.resource + '.<br /> Connect it on the ' + payload.resource + ' page</div>';
4893              } else {
4894                container.innerHTML = '<div style="text-align: center">Instagram account is not connected.<br /> Connect it on <a href="/profile">Profile page</a></div>';
4895              }
4896            }
4897          } else {
4898            if (feed.items.length) {
4899              if (hasDataClass) {
4900                section.classList.add(hasDataClass);
4901              }
4902              const feedName = feed.username;
4903              section.querySelectorAll('.jsIGLink').forEach(link => link.setAttribute('href', feed.feedUrl));
4904              section.querySelectorAll('.jsIGName').forEach(name => {
4905                name.textContent = '@' + feedName;
4906                name.setAttribute('title', '@' + feedName);
4907              });
4908              if (container && template) {
4909                container.innerHTML = template(feed);
4910              }
4911            }
4912          }
4913        }
4914      } catch (e) {}
4915      section.dispatchEvent(new CustomEvent('ig-data', {
4916        detail: feed
4917      }));
4918    }).catch(e => {
4919      console.log('err', e);
4920      section.dispatchEvent(new CustomEvent('ig-data', {
4921        detail: feed
4922      }));
4923    });
4924  }
4925  getData();
4926})('section-4668b610-d9c1-4a67-adf4-0e6b4204182e', JSON.parse("{\"limit\":11,\"resource\":\"agent\",\"resourceId\":\"{{id}}\",\"fallbackToNoResource\":\"{{{fallbackToNoResource}}}\",\"companyId\":\"116d6abd-55d8-410f-b7f3-bdd7f6c5b727\",\"usePageResource\":false,\"sectionIndex\":5,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}"));
4927} catch(e) {
4928console.log(e);
4929}
4930                try {
4931(function init(sectionDomId) {
4932  const section = document.getElementById(sectionDomId);
4933  const slider = section.querySelector(".js-slider");
4934  section.addEventListener("ig-data", function () {
4935    var splide = new Splide(slider, {
4936      rewind: true,
4937      arrows: false,
4938      type: 'loop',
4939      padding: '20%',
4940      gap: '16px',
4941      pagination: false,
4942      clones: 1,
4943      perPage: 1,
4944      perMove: 1,
4945      destroy: true,
4946      breakpoints: {
4947        768: {
4948          destroy: false
4949        }
4950      }
4951    });
4952    splide.mount();
4953  });
4954})('section-4668b610-d9c1-4a67-adf4-0e6b4204182e', JSON.parse("{\"resource\":\"agent\",\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true},\"companyId\":\"116d6abd-55d8-410f-b7f3-bdd7f6c5b727\",\"usePageResource\":false,\"sectionIndex\":5}"));
4955} catch(e) {
4956console.log(e);
4957}
4958
4959            var { body } = document;
4960            var globalNav = body.querySelector(':scope > nav');
4961            var globalSideMenu = body.querySelector(':scope > div.sidemenu');
4962
4963            document.querySelectorAll('body > .modal .close').forEach(modalCloseBtn => {
4964                modalCloseBtn.addEventListener('click', function() {
4965                window.lpUI.hideClosestModal(modalCloseBtn);
4966              });
4967            });
4968
4969            window.addEventListener('click', function() {
4970                document.querySelectorAll('.share-popup').forEach(sharedPopup => {
4971                    sharedPopup.style.display = 'none' ;
4972                });
4973            });
4974
4975            /* Misc Partials / Addons */
4976            function initWOW() {
4977                if (wow) {
4978                    wow.init();
4979                    wow.scrollHandler();
4980                    setTimeout(function () {
4981                        const wowHideStyle = document.getElementById('wow-hide-elements');
4982                        if(wowHideStyle) {
4983                            wowHideStyle.disabled = true;
4984                        }
4985                    }, 1);
4986                }
4987            }
4988
4989            const wowHideElements =  document.getElementById('wow-hide-elements');
4990            if (wowHideElements) {
4991               wowHideElements.disabled = false;
4992            }
4993
4994                initWOW();
4995
4996            /* Generic Navbar Handling */
4997            globalNav?.querySelectorAll('.hamburger-component').forEach(hamburgerComponent => {
4998                hamburgerComponent.addEventListener('click', function() {
4999                window.lpUI.sideMenuToggle();
5000              });
5001            });
5002            globalSideMenu?.querySelectorAll('.toggle').forEach(toggleEl => {
5003                toggleEl.addEventListener('click', function() {
5004                window.lpUI.sideMenuToggle();
5005              });
5006            });
5007
5008            document.querySelectorAll('body > nav .sub-nav-container > a, body > div.sidemenu .sub-nav-container > a').forEach(linkEl => {
5009                linkEl.addEventListener('click', function(e) {
5010                  e.preventDefault();
5011                  e.stopPropagation();
5012                  var subNav = linkEl.parentElement.querySelector(':scope > .sub-nav');
5013                  if (subNav && subNav.classList.contains('visible')){
5014                    subNav.classList.remove('visible');
5015                  } else {
5016                    globalNav?.querySelectorAll('.sub-nav-container .sub-nav').forEach(globalSubNav => {
5017                      globalSubNav.classList.remove('visible');
5018                    });
5019                    globalSideMenu?.querySelectorAll('.sub-nav').forEach(sideMenuSubNav => {
5020                        sideMenuSubNav.classList.remove('visible');
5021                    });
5022                    subNav?.classList.add('visible');
5023                  }
5024                });
5025            });
5026            window.addEventListener('click', function() {
5027                document.querySelectorAll('nav .sub-nav.visible, .sidemenu .sub-nav.visible').forEach(subNavEl => {
5028                    subNavEl.classList.remove('visible');
5029                });
5030            });
5031
5032        }
5033
5034        document.addEventListener('DOMContentLoaded', lpGlobalInit);
5035
5036    </script>
5036
5037
5038    
5038<script type="module">
5039    function selectorExists(selector) {
5040        return document.querySelector(selector) !== null;
5041    }
5042
5043    // Function to initialize the third-party library
5044    function initParoller(selector = '.my-paroller') {
5045        var $parollerElements = $(selector);
5046        if ($parollerElements.length > 0 && typeof $parollerElements.paroller === 'function') {
5047            $parollerElements.paroller();
5048        }
5049    }
5050
5051    const parollerSelector = '.my-paroller';
5052
5053    if (selectorExists(parollerSelector)) {
5054        window.luxuryPresence.libs.loadJs(window.luxuryPresence.libs.jsLibsMap.paroller.jsSrc, function() {
5055            initParoller(parollerSelector);
5056            window.luxuryPresence.libs.jsLibsMap.paroller.isLoaded = true;
5057        });
5058    }
5059    </script>
5059
5060
5061            <!-- Google Tag Manager (noscript) -->
vendor: 80 bytes, lines 5061-5062
5061
5062            <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
5062GTM-T9SFQGHZ
vendor: 107 bytes, lines 5062-5064
5062"
5063            height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
5064            
5064<!-- End Google Tag Manager -->
5065        
5066            
5066<script
5067                src="https://cdn.luxurypresence.com/scripts/a11y-widget/latest/widget.js"
5068                data-website-id="efd0b616-93bf-43b2-a015-21b3983523b4"
5069                
5070                defer></script>
vendor: 1 bytes, line 5070
5070
5071<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"d2a8f4b3d65944edb8fcd6ffce49ee5e","spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 5071
5071
5072<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a47361b59e0fd7c2',t:'MTc5MTQ0NDAxMg=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
5072</body>
5073</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.