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>For Sale Properties | Allison Ziefert Real Estate Group</title> 10 <meta property="og:title" content="For Sale Properties | Allison Ziefert Real Estate Group"> 11 <meta name="twitter:title" content="For Sale Properties | Allison Ziefert Real Estate Group"> 12 <meta name="description" content="Explore available properties for sale and listings in New Jersey. Contact Allison Ziefert Group for exclusive real estate opportunities. Contact us now!"> 13 <meta property="og:description" content="Explore available properties for sale and listings in New Jersey. Contact Allison Ziefert Group for exclusive real estate opportunities. Contact us now!"> 14 <meta name="twitter:description" content="Explore available properties for sale and listings in New Jersey. Contact Allison Ziefert Group for exclusive real estate opportunities. Contact us now!"> 15 <meta property="og:image" content="https://res.cloudinary.com/luxuryp/images/w_960,c_limit,f_auto,q_auto/buumir1m8evswwhzk0ss/modern-living-room-3-1"> 16 <meta name="twitter:image" content="https://res.cloudinary.com/luxuryp/images/w_960,c_limit,f_auto,q_auto/buumir1m8evswwhzk0ss/modern-living-room-3-1"> 17 <meta property="og:url" content="https://njfromatoz.com/properties/sale"> 18 <link rel="canonical" href="https://njfromatoz.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 <style>@font-face {font-family: 'CompassSerif';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-Regular.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-Regular.woff') format('woff');font-weight: 400;font-style: normal;}@font-face {font-family: 'CompassSerif';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-Italic.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-Italic.woff') format('woff');font-weight: 400;font-style: italic;}@font-face {font-family: 'CompassSerif';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-SemiBold.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-SemiBold.woff') format('woff');font-weight: 600;font-style: normal;}@font-face {font-family: 'CompassSerif';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-SemiBoldItalic.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-SemiBoldItalic.woff') format('woff');font-weight: 600;font-style: italic;}@font-face {font-family: 'CompassSerif';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-Bold.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-Bold.woff') format('woff');font-weight: 700;font-style: normal;}@font-face {font-family: 'CompassSerif';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-BoldItalic.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-BoldItalic.woff') format('woff');font-weight: 700;font-style: italic;}@font-face {font-family: 'CompassSerif';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-SemiBold.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-SemiBold.woff') format('woff');font-weight: 500;font-style: normal;}@font-face {font-family: 'CompassSerif';src: url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-SemiBoldItalic.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSerif/CompassSerif-SemiBoldItalic.woff') format('woff');font-weight: 500;font-style: italic;}</style><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:100,200,300,400,500,600,700,800,900"> 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:CompassSerif,serif;--global-primary-font-family-short:CompassSerif;--global-secondary-font-family:Inter,sans-serif;--global-secondary-font-family-short:Inter;--global-body-padding:0px;--global-background-color:#fff;--global-body-font-size:16px;--global-h1-font-size:57px;--global-h2-font-size:36px;--global-h3-font-size:28px;--global-h4-font-size:28px;--global-h5-font-size:22px;--global-h6-font-size:20px;--global-section-padding:96px;}@media (max-width: 768px){:root{--global-section-padding:64px;}}body{padding:0px;background-color:#fff;font-family:Inter,sans-serif;font-size:16px;}@media (min-width: 768px){body{padding:0px 0px 0px 0px;}}h1,h2,h3,h4,h5,h6,button{font-family:CompassSerif,serif;}h1{font-size:57px;}h2{font-size:36px;}h3{font-size:28px;}h4{font-size:28px;}h5{font-size:22px;}h6{font-size:20px;}</style> 30 <link rel="stylesheet" type="text/css" href="https://styles.luxurypresence.com/masterpiece/index.css" /> 31 <style id="website-css">h1,.lp-h1,h2,.lp-h2,h3,.lp-h3,h4,.lp-h4,h5,.lp-h5{text-transform:none!important;}.testimonials-section .list-cell .title h6.body.lp-h6{font-size:16px;font-weight:400;line-height:27px;}.testimonials-section .list-cell .title h6.title.lp-h6{font-family:var(--global-primary-font-family);}body>div.mobile-contact-wrapper{z-index:99999999!important;}@media only screen and (max-width: 768px){footer#global-footer a:not(.socials__item),footer#global-footer .link,footer#global-footer .footer-navigation__link{text-underline-offset:5px;}}.cta-block .lp-h2 p{margin-bottom:0;}.hyperlink-style-1:before,.hyperlink-style-2:before{content:""!important;}div.popup-modal button.popup-modal__close{opacity:0.8!important;}@media(max-width : 768px){div.popup-modal button.popup-modal__close:before,div.popup-modal button.popup-modal__close:after{background-color:#000000!important;box-shadow:0px 0px 18px 5px rgba(255,255,255,0.75);}}div.popup-modal h2{font-size:50px;}@media(max-width : 768px){div.popup-modal h2{font-size:40px;}}div.popup-modal span.lp-tcr-message a{color:#9C9E8F;}div.popup-modal span.lp-tcr-message a:hover{color:#000000;}nav .navigation__link{text-transform:none;font-size:16px!important;}nav#global-navbar{background-color:unset!important;}nav#global-navbar .header.theme-light .lp-container .logo img.light{display:block;}nav#global-navbar .header.theme-light .lp-container .logo img.dark{display:none;}nav#global-navbar .header.theme-light .header__hamburger circle{fill:#fff;}nav#global-navbar .header.theme-light .header__hamburger svg rect{fill:#9C9E8F!important;}nav#global-navbar .header.theme-light ul.navigation li.navigation__item{color:#fff;}nav#global-navbar .header.theme-light ul.navigation li.navigation__item .sub-nav__link{color:#000;background-color:#fff;}nav#global-navbar .header.theme-light ul.navigation li.navigation__item .sub-nav__link:hover{color:#fff;background-color:#9C9E8F;}nav#global-navbar .header.theme-light ul.navigation li.navigation__item .navigation__link:after{background:#fff;}nav#global-navbar .header .lp-container .logo img.light{display:none;}nav#global-navbar .header .lp-container .logo img.dark{display:block;}nav#global-navbar .header .header__hamburger circle{fill:#9C9E8F;}nav#global-navbar .header .header__hamburger svg rect{fill:#ffffff!important;}nav#global-navbar .header ul.navigation li.navigation__item{color:#000000;}nav#global-navbar .header ul.navigation li.navigation__item .sub-nav__link{color:#000;background-color:#fff;}nav#global-navbar .header ul.navigation li.navigation__item .sub-nav__link:hover{color:#ffffff;background-color:#9C9E8F;}nav#global-navbar .header ul.navigation li.navigation__item .navigation__link:after{background:#9C9E8F;}nav#global-navbar.scroll .header{background-color:#fff;}nav#global-navbar.scroll .header .lp-container .logo img.light{display:none;}nav#global-navbar.scroll .header .lp-container .logo img.dark{display:block;}nav#global-navbar.scroll .header .header__hamburger circle{fill:#9C9E8F;}nav#global-navbar.scroll .header .header__hamburger svg rect{fill:#fff!important;}nav#global-navbar.scroll .header ul.navigation li.navigation__item{color:#000;}nav#global-navbar.scroll .header ul.navigation li.navigation__item .sub-nav__link{color:#000;background-color:#fff;}nav#global-navbar.scroll .header ul.navigation li.navigation__item .sub-nav__link:hover{color:#ffffff;background-color:#9C9E8F;}nav#global-navbar.scroll .header ul.navigation li.navigation__item .navigation__link:after{background:#9C9E8F;}nav .header{padding-top:10px;padding-bottom:20px;}nav.scroll .header{padding-top:10px;padding-bottom:10px;}nav#global-navbar .header .header__logo a.logo{height:90px;}@media screen and (max-width: 768px){nav#global-navbar .header .header__logo a.logo{height:60px;}}footer .site-footer__logo-bar{padding-bottom:40px;}
31footer .site-footer__col-content{opacity:1.0!important;padding-bottom:16px;}footer h5{text-transform:uppercase;}footer .site-footer__disclaimer{padding-top:40px;opacity:1.0!important;}footer .site-footer__col-content a{color:#ffffff!important;}footer .site-footer__col-content a:hover{color:#cecece!important;}footer#global-footer .site-footer .footer-navigation__link{-webkit-text-decoration:underline;text-decoration:underline;text-transform:none;text-underline-offset:4px;letter-spacing:-0.5px;}footer#global-footer .site-footer .footer-navigation__link:hover{color:#cecece;}footer .site-footer__disclaimer a{-webkit-text-decoration:underline;text-decoration:underline;text-underline-offset:4px;letter-spacing:-0.5px;color:#ffffff;}footer .site-footer__disclaimer a:hover{color:#cecece;}footer#global-footer .lp-container .site-footer__copy a{position:relative;display:inline-block;color:#ffffff;}footer#global-footer .lp-container .site-footer__copy a:before,footer#global-footer .lp-container .site-footer__copy a:after{content:"";position:absolute;display:block;width:100%;height:1px;opacity:.9;-webkit-transition:0.3s linear;transition:0.3s linear;background:currentColor;bottom:0;left:0;}footer#global-footer .lp-container .site-footer__copy a:after{opacity:1;width:0;}footer#global-footer .lp-container .site-footer__copy a:hover{color:#cecece;}footer#global-footer .lp-container .site-footer__copy a:hover:after{opacity:1;width:100%;color:#cecece;}@media (max-width: 420px){footer .site-footer__socials{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin-left:auto!important;}footer .site-footer__socials li:first-child{margin-left:0;}footer .site-footer__socials li{margin:0 3px;}}.sidemenu .sidemenu__nav .navigation__item{border-color:#9C9E8F;}div#global-sidemenu .navigation .navigation__link:hover{color:#9C9E8F;}body>div.sidemenu .sidemenu__header{padding-bottom:0!important;}body>div.sidemenu .navigation__link{padding:6px 12px 6px 70px;}body>div.sidemenu .sub-nav__link{text-transform:none;font-family:var(--global-primary-font-family)!important;}body>div.sidemenu .sub-nav__link:hover{color:#9C9E8F;}footer .site-footer__logo-container img{-webkit-filter:invert(1);filter:invert(1);}@media (max-width: 520px){footer .site-footer__logo-container img{max-width:210px!important;}}div#global-mobile-contact .pop-up button.lp-btn{border:1px solid #9C9E8F!important;color:#9C9E8F!important;background-color:transparent;}div#global-mobile-contact .pop-up button.lp-btn:hover{color:#ffffff!important;background-color:#9C9E8F!important;}div#global-mobile-contact .pop-up span.lp-tcr-message a:hover{color:#9C9E8F;}div#global-mobile-contact .pop-up input.lp-input,div#global-mobile-contact .pop-up textarea{border-color:#000000;color:#000000;}@media only screen and (min-width: 769px){div#modal-global-contact-us div.contact-form__close.close{color:#9C9E8F;opacity:1;}}@media only screen and (max-width: 1024px){div#modal-global-contact-us div.contact-form__close.close{color:#fff;opacity:1;}}@media (max-width: 767px){#modal-global-contact-us .socials .lp-socials{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}#modal-global-contact-us .socials .lp-socials li{padding:8px 4px;}}@media only screen and (min-width: 768px){#global-sidemenu .sidemenu__wrapper::-webkit-scrollbar{width:10px!important;}#global-sidemenu .sidemenu__wrapper::-webkit-scrollbar-track{background:#f1f1f1;}#global-sidemenu .sidemenu__wrapper::-webkit-scrollbar-thumb{background:#000;cursor:pointer;}#global-sidemenu .sidemenu__wrapper::-webkit-scrollbar-thumb:hover{background:#000;}}</style> 32 <style id="wow-hide-elements">.wow{visibility:hidden!important}</style> 33 <style id="page-css"> 34 #section-08c11126-4ca7-4355-a714-186817126398{color:#ffffff;--fontColor:#ffffff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#000000;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:0%;--bgColor_A:1;--bgColor_darkenDir:1;background-color:#000000;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.30));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/f316f071-8a9f-4130-8688-cb51eb1ef6dd');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-08c11126-4ca7-4355-a714-186817126398 .video-wrapper .full-screen-video-component .video-wrapper::before{content:'';position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000;z-index:-1000;}#section-08c11126-4ca7-4355-a714-186817126398 .video-wrapper .full-screen-video-component .video-wrapper video{-webkit-transition:opacity 2s cubic-bezier(0.835, 0, 0.19, 1);transition:opacity 2s cubic-bezier(0.835, 0, 0.19, 1);opacity:0!important;}#section-08c11126-4ca7-4355-a714-186817126398 .video-wrapper .full-screen-video-component .video-wrapper.playing video{opacity:1!important;}#section-08c11126-4ca7-4355-a714-186817126398 .lp-play{opacity:0;background-color:transparent;display:inline-block;border:none;position:absolute;bottom:50px;right:50px;width:27px;height:24px;z-index:3;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;cursor:unset;}#section-08c11126-4ca7-4355-a714-186817126398 .lp-play.visible{opacity:1;cursor:pointer;}@media (max-width: 900px){#section-08c11126-4ca7-4355-a714-186817126398 .lp-play.visible{display:none;}}@media (max-width: 900px){#section-08c11126-4ca7-4355-a714-186817126398 .lp-play{display:none;}}#section-08c11126-4ca7-4355-a714-186817126398.parallax-enabled{z-index:unset;}#section-08c11126-4ca7-4355-a714-186817126398.parallax-enabled .lp-container{position:relative;}#section-08c11126-4ca7-4355-a714-186817126398.parallax-enabled>div.video-wrapper{position:fixed;left:var(--global-body-padding, 0);top:var(--global-body-padding, 0);width:calc(100% - var(--global-body-padding, 0px) * 2);z-index:-1001;}@media (max-width: 767px){#section-08c11126-4ca7-4355-a714-186817126398.parallax-enabled>
34div.video-wrapper{left:0;top:0;width:100%;}}#section-08c11126-4ca7-4355-a714-186817126398.parallax-enabled>div.overlay-component{position:fixed;left:var(--global-body-padding, 0);top:var(--global-body-padding, 0);right:unset;width:calc(100% - var(--global-body-padding, 0px) * 2);}@media (max-width: 767px){#section-08c11126-4ca7-4355-a714-186817126398.parallax-enabled>div.overlay-component{left:0;top:0;width:100%;}}#section-08c11126-4ca7-4355-a714-186817126398.parallax-enabled .opening-with-search:before{display:block;content:'';left:var(--global-body-padding, 0);top:var(--global-body-padding, 0);width:calc(100% - var(--global-body-padding, 0px) * 2);background:var(--sectionBackground) center no-repeat;-webkit-background-size:cover;background-size:cover;background-position-y:22%;position:fixed;z-index:-1001;height:100%;}@media (max-width: 767px){#section-08c11126-4ca7-4355-a714-186817126398.parallax-enabled .opening-with-search:before{left:0;top:0;width:100%;}}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search{position:relative;--top-padding:170px;--bottom-padding:30px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-height:770px;padding-top:var(--top-padding);padding-bottom:var(--bottom-padding);}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search:before{display:none;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search.height-class-Full{min-height:100vh;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search.height-class-Full>div.video-wrapper{height:100vh;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search.height-class-Full:before{min-height:100vh;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search.height-class-770px{min-height:770px;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search.height-class-770px>div.video-wrapper{height:770px;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search.height-class-770px:before{min-height:770px;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search.height-class-600px{min-height:600px;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search.height-class-600px>div.video-wrapper{height:600px;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search.height-class-600px:before{min-height:600px;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .bottom-spacer{-webkit-flex:1 0 0%;-ms-flex:1 0 0%;flex:1 0 0%;max-height:calc(var(--top-padding) - var(--bottom-padding));}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .center-block{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-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;text-align:center;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .opening-description{letter-spacing:.1em;margin-bottom:15px;max-width:640px;margin-left:auto;margin-right:auto;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .opening-description a,#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .opening-description a[x-apple-data-detectors]{color:inherit!important;-webkit-text-decoration:none!important;text-decoration:none!important;font-size:inherit!important;font-family:inherit!important;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .opening-pretitle{margin-bottom:15px;max-width:860px;margin-left:auto;margin-right:auto;white-space:pre-line;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .opening-title{margin-bottom:15px;max-width:860px;margin-left:auto;margin-right:auto;white-space:pre-line;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .opening-button{margin:0 15px;}@media (max-width: 768px){#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .opening-button{margin:0;}}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-form{margin-top:30px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-form.with-filters{padding-top:32px;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-button{margin:5px;border:none;border-radius:0;outline:none;background-color:#000;color:#fff;height:44px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:50px;padding-right:50px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;cursor:pointer;-webkit-transition:all .3s ease;transition:all .3s ease;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-button:hover{background-color:#fff;color:#000;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-lease-tabs{position:absolute;left:0;bottom:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-lease-tab{padding:4px 20px;background-color:#000;color:#fff;cursor:pointer;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-lease-tab.active{background-color:#fff;color:#000;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-wrapper{margin:5px;letter-spacing:normal;width:100%;max-width:444px;position:relative;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-input-container{width:100%;border:none;height:43px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 16px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-input-container .search-icon{color:#c0c0c0;margin-right:10px;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:20px;line-height:0;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-input-container .search-input{color:#000;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;width:50px;border:none;border-radius:0;outline:none;background:transparent;font-size:16px;padding:0;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-results{line-height:normal;text-align:left;background-color:rgba(0, 0, 0, 0.8);position:absolute;width:100%;left:0;top:100%;border:none;overflow:hidden;-webkit-transition:height 0.3s ease;transition:height 0.3s ease;height:0;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .results-container,#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .predefined-links{padding:10px 0;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .results-container a,#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .predefined-links a{color:#b6b6b6;-webkit-transition:color 0.3s ease;transition:color 0.3s ease;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .results-container a:hover,#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .predefined-links a:hover{color:#fff;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .predefined-links{max-height:400px;overflow:auto;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .results-block{margin:15px 0;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .results-block-title{margin:0;padding:0 48px;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .results-block-title .results-title-label{margin:0 20px 10px 0;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .results-block-title .search-near-container{margin-bottom:15px;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .results-block:nth-child(n + 2) .search-near-container{display:none;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .results-link{display:block;padding:4px 48px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .results-link.selected-link{color:#fff;background-color:rgba(255, 255, 255, 0.2);}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-in-progress{padding:30px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:30px;opacity:0.5;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .not-visible{display:none!important;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .nothing-found{width:100%;padding:20px;}@media (max-width: 560px){#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-form{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-button{width:100%;max-width:444px;}}#section-08c11126-4ca7-4355-a714-186817126398 .opening-with-search .search-near{cursor:pointer;}#section-08c11126-4ca7-4355-a714-186817126398 .loc-msg-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;-webkit-transition:background-color 0.3s ease;transition:background-color 0.3s ease;background-color:transparent;}#section-08c11126-4ca7-4355-a714-186817126398 .loc-msg-wrap{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;padding:20px;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-clip-path:polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%);clip-path:polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%);-webkit-transition:clip-path 0.4s ease;transition:clip-path 0.4s ease;}#section-08c11126-4ca7-4355-a714-186817126398 .loc-msg-modal{border-radius:20px;padding:10px 20px 20px;max-width:400px;min-width:100px;background-color:rgba(0,0,0,0.9);color:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;position:relative;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;max-height:100%;}#section-08c11126-4ca7-4355-a714-186817126398 .loc-msg-close{position:absolute;width:40px;height:40px;top:10px;right:10px;cursor:pointer;-webkit-transition:all 0.3s ease;transition:all 0.3s ease;}#section-08c11126-4ca7-4355-a714-186817126398 .loc-msg-close:before{content:'';width:20px;height:2px;background-color:#fff;position:absolute;left:10px;top:19px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);}#section-08c11126-4ca7-4355-a714-186817126398 .loc-msg-close:after{content:'';width:20px;height:2px;background-color:#fff;position:absolute;left:10px;top:19px;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);}#section-08c11126-4ca7-4355-a714-186817126398 .loc-msg-close:hover{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);}#section-08c11126-4ca7-4355-a714-186817126398 .search-near-hidden .search-near-container{display:none;}#section-08c11126-4ca7-4355-a714-186817126398 .loc-msg-title{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:20px;}#section-08c11126-4ca7-4355-a714-186817126398 .loc-msg-container{-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;overflow:auto;}#section-08c11126-4ca7-4355-a714-186817126398 .loc-msg-container p{margin:0;}#section-08c11126-4ca7-4355-a714-186817126398 .loc-msg-container p+p{margin-top:1em;}#section-08c11126-4ca7-4355-a714-186817126398.visible-loc-msg{z-index:1000;}#section-08c11126-4ca7-4355-a714-186817126398.visible-loc-msg .loc-msg-backdrop{background-color:rgba(255,255,255,0.4);}#section-08c11126-4ca7-4355-a714-186817126398.visible-loc-msg .loc-msg-wrap{-webkit-clip-path:polygon(0 0, 0 100%, 100% 100%, 100% 0%);clip-path:polygon(0 0, 0 100%, 100% 100%, 100% 0%);}@media (min-width: 960px) and (orientation: landscape){#section-08c11126-4ca7-4355-a714-186817126398{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/f316f071-8a9f-4130-8688-cb51eb1ef6dd');}}@media (min-width: 1280px) and (orientation: landscape){#section-08c11126-4ca7-4355-a714-186817126398{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/f316f071-8a9f-4130-8688-cb51eb1ef6dd');}}@media (min-width: 1920px) and (orientation: landscape){#section-08c11126-4ca7-4355-a714-186817126398{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/f316f071-8a9f-4130-8688-cb51eb1ef6dd');}}@media (min-width: 2560px) and (orientation: landscape){#section-08c11126-4ca7-4355-a714-186817126398{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/f316f071-8a9f-4130-8688-cb51eb1ef6dd');}}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927{color:#211f1f;--fontColor:#211f1f;--fontColor_H:0;--fontColor_S:3%;--fontColor_L:13%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#fff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#fff;}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .section .lp-container p.bf1.label{background:#9C9E8F!important;color:#FFF;}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 div.section .item p.bf1{text-transform:uppercase;}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .section .lp-container .paginationjs-pages .paginationjs-prev:not(.disabled):hover a:after,#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .section .lp-container .paginationjs-pages .paginationjs-next:not(.disabled):hover a:after{color:#9C9E8F;opacity:.7;}@media (min-width: 1921px){#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .section .lp-container{max-width:2000px;}}
34#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .collection{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0 -10px;}@media (min-width: 1024px){#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .collection:not(.collection--3) .item{width:calc(50% - 20px);}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .collection:not(.collection--3) .item figure{height:462px;}}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item{width:calc(33.33333% - 20px);margin:0 10px 48px;-webkit-text-decoration:none;text-decoration:none;color:inherit;}@media (max-width: 991px){#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item{width:calc(50% - 20px);}}@media (max-width: 768px){#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item{margin-bottom:24px;width:100%;}}@media (hover: hover) and (pointer: fine){#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item:hover .img{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1);}}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item figure{position:relative;overflow:hidden;margin:0 0 16px;background-color:#f2f2f2;height:310px;}@media (min-width: 1921px){#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item figure{height:464px;}}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item .img{-webkit-transition:all .3s;transition:all .3s;height:100%;width:100%;object-fit:cover;}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item .label{position:absolute;text-transform:uppercase;top:10px;right:10px;padding:6px 10px;background-color:rgba(255,255,255, .8);margin:0;max-width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item .lp-h5{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;margin:0 0 4px;}@media (min-width: 1921px){#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item .lp-h5{font-size:28px;}}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item .bf1{margin:0 0 4px;}@media (min-width: 1921px){#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item .bf1{font-size:16px;}}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item .item-text{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;margin:0;}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item .bf2{list-style:none;margin:0;padding:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;text-transform:uppercase;}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item .bf2 li{margin:0;}@media (min-width: 1921px){#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item .bf2 li{font-size:14px;}}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .item .bf2 li+li:before{content:'\00a0\00a0|\00a0\00a0';}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .lp-pagination{margin-top:16px;}@media (max-width: 768px){#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .lp-pagination{margin-top:8px;}}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .lp-text--subtitle p{margin:0;}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .label-house{position:absolute;bottom:10px;left:10px;background:rgba(0, 0, 0, 0.8);padding:6px 10px;line-height:22px;color:#ffffff;text-transform:uppercase;}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .mls-compliance-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;position:relative;padding-top:16px;gap:10px;}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927 .lp-mls-compliance__mls-logo{margin-left:auto;}#section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-855d0879-113a-4e34-8b5b-781d0b1f30d9{color:#000000;--fontColor:#000000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#EFEFEF;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:94%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#EFEFEF;}#section-855d0879-113a-4e34-8b5b-781d0b1f30d9 .cta-block{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;
34-webkit-justify-content:space-between;justify-content:space-between;}#section-855d0879-113a-4e34-8b5b-781d0b1f30d9 .cta-block .text-block{max-width:65%;}@media (max-width: 768px){#section-855d0879-113a-4e34-8b5b-781d0b1f30d9 .cta-block .text-block{max-width:100%;margin-bottom:24px;}}#section-855d0879-113a-4e34-8b5b-781d0b1f30d9 .cta-block .lp-h2{margin-bottom:0;}@media (max-width: 768px){#section-855d0879-113a-4e34-8b5b-781d0b1f30d9 .cta-block{-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;}#section-855d0879-113a-4e34-8b5b-781d0b1f30d9 .cta-block .lp-h2{margin-bottom:24px;text-align:center;}}#section-855d0879-113a-4e34-8b5b-781d0b1f30d9 .cta-block--Center-aligned{-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;text-align:center;}#section-855d0879-113a-4e34-8b5b-781d0b1f30d9 .cta-block--Center-aligned .text-block{margin-left:auto;margin-right:auto;margin-bottom:24px;}@media (min-width: 769px){#section-855d0879-113a-4e34-8b5b-781d0b1f30d9 .cta-block--Right-aligned .text-block{padding-right:20px;}}#section-855d0879-113a-4e34-8b5b-781d0b1f30d9 h2{color:#9C9E8F;}#section-9b699237-bd33-47e1-a3a6-3c086016df48{color:#ffffff;--fontColor:#ffffff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#fff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#fff;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.45));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/24e0d451-42e0-441f-af46-0b5139b7720f');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}@media (max-width: 767px){#section-9b699237-bd33-47e1-a3a6-3c086016df48 .section{min-height:65vh!important;}}#section-9b699237-bd33-47e1-a3a6-3c086016df48 .lp-title-group{max-width:750px;}#section-9b699237-bd33-47e1-a3a6-3c086016df48.parallax-enabled{-webkit-clip-path:polygon(0px 0px, 100% 0%, 100% 100%, 0% 100%);clip-path:polygon(0px 0px, 100% 0%, 100% 100%, 0% 100%);}#section-9b699237-bd33-47e1-a3a6-3c086016df48.parallax-enabled>div.video-wrapper{position:fixed;left:0;top:0;width:100vw;height:100vh;z-index:-9999;}#section-9b699237-bd33-47e1-a3a6-3c086016df48.parallax-enabled .work-with-us:before{display:block;content:'';left:0;top:0;width:100%;background:var(--sectionBackground) center no-repeat;-webkit-background-size:cover;background-size:cover;position:fixed;z-index:-1;height:100%;}#section-9b699237-bd33-47e1-a3a6-3c086016df48 .section{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;min-height:780px;text-align:center;position:relative;z-index:2;}@media (max-width: 767px){#section-9b699237-bd33-47e1-a3a6-3c086016df48 .section{min-height:100vh;}}#section-9b699237-bd33-47e1-a3a6-3c086016df48 .section:before{content:'';position:absolute;bottom:0;left:0;height:50%;width:100%;pointer-events:none;z-index:3;-webkit-transform:translateZ(1px);-moz-transform:translateZ(1px);-ms-transform:translateZ(1px);transform:translateZ(1px);background:linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, var(--opacityColor) 100%);}#section-9b699237-bd33-47e1-a3a6-3c086016df48 .section .btn-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:23px;margin-top:32px;}@media(max-width: 560px){#section-9b699237-bd33-47e1-a3a6-3c086016df48 .section .btn-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:10px;}}#section-9b699237-bd33-47e1-a3a6-3c086016df48 .lp-container{-webkit-transform:translateZ(1px);-moz-transform:translateZ(1px);-ms-transform:translateZ(1px);transform:translateZ(1px);}@media (min-width: 960px) and (orientation: landscape){#section-9b699237-bd33-47e1-a3a6-3c086016df48{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/24e0d451-42e
340-441f-af46-0b5139b7720f');}}@media (min-width: 1280px) and (orientation: landscape){#section-9b699237-bd33-47e1-a3a6-3c086016df48{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/24e0d451-42e0-441f-af46-0b5139b7720f');}}@media (min-width: 1920px) and (orientation: landscape){#section-9b699237-bd33-47e1-a3a6-3c086016df48{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/24e0d451-42e0-441f-af46-0b5139b7720f');}}@media (min-width: 2560px) and (orientation: landscape){#section-9b699237-bd33-47e1-a3a6-3c086016df48{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/24e0d451-42e0-441f-af46-0b5139b7720f');}}#section-843c4f7d-2270-4187-af56-23dd530aef1f{color:#000000;--fontColor:#000000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#FFF;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-top:calc(2 / 4 * var(--global-section-padding));background-color:#FFF;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .lp-h3{color:#9C9E8F;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed{display:none;margin:50px 0 100px;}@media (max-width: 768px){#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed{margin:30px 0 60px;}}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed .pre-title{display:block;margin-bottom:20px;text-align:center;margin-bottom:2px;color:hsla( 35 var(--fontColor_H), 36 var(--fontColor_S), 37 calc(50% + (var(--fontColor_L) - 50%) * 0.7), 38 var(--fontColor_A) 39 );}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed h2,#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed h3{text-align:center;margin:20px 0 60px;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;padding-bottom:25%;position:relative;z-index:1;}@media (max-width: 768px){#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content__item{-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;padding-bottom:62.5%;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content__item:nth-child(n+5){display:none;}}@media (max-width: 520px){#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content__item{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-bottom:125%;}}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content__item:hover{z-index:2;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content__item:nth-child(n+6){display:none;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content__item__img{bottom:0;position:absolute;height:100%;width:100%;background-color:lightgray;-webkit-background-size:cover;background-size:cover;-webkit-background-position:center center;background-position:center center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-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;-webkit-transition:all linear 0.2s;transition:all linear 0.2s;transform-origin:bottom;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content__item__img svg{display:none;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content__item__img:hover{position:absolute;background-image:linear-gradient(rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0.45));height:108%;width:104%;margin-left:-2%;}@media (max-width: 768px){#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content__item__img:hover{height:104%;width:104%;margin-left:-2%;}}#section-843c4f7d-2270-4187-af56-23dd530aef1f .feed__content__item__img:hover svg{display:block;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .instagram-link{display:block;overflow:hidden;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .instagram-link,#section-843c4f7d-2270-4187-af56-23dd530aef1f .instagram-link:hover,#section-843c4f7d-2270-4187-af56-23dd530aef1f .instagram-link:visited{color:inherit;-webkit-text-decoration:none;text-decoration:none;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .instagram-username{overflow-wrap:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .media-type-icon{position:absolute;top:10px;right:10px;}#section-843c4f7d-2270-4187-af56-23dd530aef1f .has-data .feed{display:block;}#section-843c4f7d-2270-4187-af56-23dd530aef1f.has-data .feed,#section-843c4f7d-2270-4187-af56-23dd530aef1f#section-temp .feed{display:block;}#section-843c4f7d-2270-4187-af56-23dd530aef1f>div:last-child{padding-top:calc(2 / 4 * var(--global-section-padding))!important;}#modal-global-contact-us>.close{display:none;}#modal-global-contact-us .contact-form{--colorLighter1:hsla(var(--fontColor_H), var(--fontColor_S), var(--fontColor_L), 0.5);--colorLighter2:hsla(var(--fontColor_H), var(--fontColor_S), var(--fontColor_L), 0.3);width:100%;background:center no-repeat;-webkit-background-size:cover;background-size:cover;min-height:800px;height:100vh;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;color:#000;-webkit-box-pack:space-around;-ms-flex-pack:space-around;
39-webkit-justify-content:space-around;justify-content:space-around;}#modal-global-contact-us .contact-form ::parent{-webkit-align-items:unset;-webkit-box-align:unset;-ms-flex-align:unset;align-items:unset;}@media (max-width: 1024px){#modal-global-contact-us .contact-form{min-height:100vh;height:auto;display:block;}}#modal-global-contact-us .contact-form .input-container{width:100%;}#modal-global-contact-us .contact-form .input-container+.input-container{margin-top:8px;}#modal-global-contact-us .contact-form__container{z-index:2;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}@media (max-width: 1024px){#modal-global-contact-us .contact-form__container{padding:0;width:100%;display:block;}}#modal-global-contact-us .contact-form__close{position:absolute;right:5px;top:5px;z-index:10;background-color:transparent;border:none;width:40px;height:40px;cursor:pointer;opacity:0.2;}#modal-global-contact-us .contact-form__close.close{color:#000;}#modal-global-contact-us .contact-form__close:before,#modal-global-contact-us .contact-form__close:after{display:block;content:'';position:absolute;width:20px;height:2px;background-color:currentColor;left:50%;top:50%;}@media (max-width: 768px){#modal-global-contact-us .contact-form__close{top:1vh;}}@media (min-width: 768px) and (max-width: 810px),(min-height: 1024px) and (max-height: 1080px){#modal-global-contact-us .contact-form__close{top:3vh;}}#modal-global-contact-us .contact-form__close:before{-webkit-transform:translate(-50%, -50%) rotate(45deg);-moz-transform:translate(-50%, -50%) rotate(45deg);-ms-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);}#modal-global-contact-us .contact-form__close:after{-webkit-transform:translate(-50%, -50%) rotate(-45deg);-moz-transform:translate(-50%, -50%) rotate(-45deg);-ms-transform:translate(-50%, -50%) rotate(-45deg);transform:translate(-50%, -50%) rotate(-45deg);}#modal-global-contact-us .contact-form__form{width:100%;max-width:637px;text-align:center;min-height:463px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-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;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;margin-right:110px;padding:64px 65px;margin-bottom:0;}@media (max-width: 1024px){#modal-global-contact-us .contact-form__form{width:100%;max-width:100%;margin-right:0;padding:44px 24px;}}#modal-global-contact-us .contact-form__details{width:100%;max-width:510px;margin-top:66px;}@media (max-width: 1024px){#modal-global-contact-us .contact-form__details{width:100%;max-width:100%;margin-top:48px;padding-left:24px;padding-right:24px;}}#modal-global-contact-us .contact-form__input{width:100%;}#modal-global-contact-us .contact-form__submit{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin-top:16px;width:100%;padding-top:5px;padding-bottom:5px;height:50px;}#modal-global-contact-us .contact-form .thank-you{display:none;padding:24px;}#modal-global-contact-us .contact-form .success .thank-you{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-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;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}
39#modal-global-contact-us .contact-form .success .form-group{display:none;}#modal-global-contact-us .contact-form .success .image{display:none;}#modal-global-contact-us .contact-form__title1{margin-bottom:16px;text-align:left;}#modal-global-contact-us .contact-form__title2{margin-bottom:16px;}#modal-global-contact-us .contact-form__description{margin-bottom:48px;}@media (max-width: 1024px){#modal-global-contact-us .contact-form__description{margin-bottom:32px;}}#modal-global-contact-us .form-inputs-wrap.center-aligned{margin-left:auto;margin-right:auto;}#modal-global-contact-us .company{padding-top:24px;padding-bottom:48px;border-top:1px solid rgba(0, 0, 0, 0.5);color:rgba(0, 0, 0, 0.5);}@media (max-width: 1024px){#modal-global-contact-us .company{padding-bottom:32px;}}#modal-global-contact-us .company_title{margin-bottom:0;}#modal-global-contact-us .company .lp-a a{white-space:nowrap;}#modal-global-contact-us .company p{margin-bottom:0;}#modal-global-contact-us .socials{margin:-8px;margin-bottom:20px;}@media (max-width: 767px){#modal-global-contact-us .socials{margin-left:auto;width:-webkit-max-content;width:-moz-max-content;width:max-content;margin-right:auto;max-width:100%;}}#modal-global-contact-us .socials li{margin:0;padding:8px;}#modal-global-contact-us .contact-form__submit{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}#modal-global-contact-us .sync-icon{display:none;margin-right:10px;-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;}#modal-global-contact-us .success-icon{display:none;margin-right:10px;-webkit-transition:0s;transition:0s;visibility:visible;}#modal-global-contact-us .loading{pointer-events:none;}#modal-global-contact-us .loading .sync-icon{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}#modal-global-contact-us .success-text{display:none;}#modal-global-contact-us .success{pointer-events:none;}#modal-global-contact-us .success .success-icon{display:block;}#modal-global-contact-us .success .success-text{display:inline;}nav{-webkit-transition:0.2s all;transition:0.2s all;}nav nav{-webkit-transition:0.2s all;transition:0.2s all;}nav .header{padding-top:30px;padding-bottom:30px;}nav .header__right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;}nav .header__container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}nav .header__btn-contact{border:1px solid;border-radius:3px;padding:18px 40px;-webkit-transition:0.2s all;transition:0.2s all;text-transform:none;margin-left:40px;font-size:18px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}@media (hover: hover) and (pointer: fine){nav .header__btn-contact:hover{background-color:var(--themeBlack);color:var(--themeWhite);}}@media (max-width: 768px){nav .header__btn-contact{padding:10px;margin-left:5px;margin-right:12px;}}nav .header__hamburger{background-color:transparent;cursor:pointer;outline:none;position:relative;padding:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin-left:41px;width:60px;height:60px;border:none;}@media (max-width: 768px){nav .header__hamburger{width:40px;height:40px;margin-left:15px;}}@media (hover: hover) and (pointer: fine){nav .header__hamburger:hover .line--top{width:12px;x:30px;}nav .header__hamburger:hover .line--bottom{width:24px;x:18px;}}nav .header__hamburger svg{width:100%;height:100%;}
39nav .header__hamburger circle{fill:var(--themeBeige);}nav .header__hamburger .line{fill:var(--themeWhite);height:2px;width:24px;x:18px;y:26px;-webkit-transition:0.2s all;transition:0.2s all;}nav .header__hamburger .line--bottom{width:12px;x:30px;y:32px;}nav .sub-nav{position:absolute;left:0;top:100%;padding:0;max-height:0;z-index:5;margin:0;list-style-type:none;overflow:hidden;visibility:hidden;-webkit-transition:visibility 0s linear 0.3s,max-height 0.3s ease;transition:visibility 0s linear 0.3s,max-height 0.3s ease;}nav .sub-nav.visible{-webkit-transition:visibility 0s linear 0s,max-height 0.3s ease-in;transition:visibility 0s linear 0s,max-height 0.3s ease-in;max-height:100vh;visibility:visible;}nav .sub-nav__item{position:relative;display:block;margin:0;text-align:left;}nav .sub-nav__link{display:block;color:var(--themeWhite);font-size:14px;font-weight:600;padding:10px 18px;position:relative;width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:178px;min-width:100%;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;background-color:var(--themeBlack);}@media (hover: hover) and (pointer: fine){nav .sub-nav__link:hover{color:var(--themeWhite);background-color:rgba(75, 75, 75, 1);}}nav .logo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;outline:none;max-width:234px;height:60px;}@media (max-width: 768px){nav .logo{width:145px;}}nav .logo__img{object-fit:contain;object-position:left;max-width:100%;max-height:100%;}nav .logo__img.light{display:none;}nav .logo__img.dark{display:block;}nav .scroll .header{padding-top:22px;padding-bottom:22px;}@media (hover: hover) and (pointer: fine){nav .scroll .header__btn-contact:hover{background-color:var(--themeWhite);color:var(--themeBlack);}}nav .scroll .search__btn{color:var(--themeWhite);}nav .scroll .logo__img.dark{display:none;}nav .scroll .logo__img.light{display:block;}nav .header.theme-light{color:#fff;}nav .header.theme-light .lp-btn.lp-btn--dark.lp-btn--outline{color:var(--themeWhite, #fff);border-color:var(--themeWhite, #fff);}nav .header.theme-light .lp-btn.lp-btn--dark.lp-btn--outline:hover{color:var(--themeBlack, #fff);border-color:var(--themeBlack, #fff);background-color:var(--themeWhite, #fff);}nav .header.theme-light .logo__img.dark{display:none;}nav .header.theme-light .logo__img.light{display:block;}nav.scroll .header{padding-top:22px;padding-bottom:22px;}nav.scroll .lp-btn.lp-btn--dark.lp-btn--outline{color:var(--themeWhite, #fff);border-color:var(--themeWhite, #fff);}nav.scroll .lp-btn.lp-btn--dark.lp-btn--outline:hover{color:var(--themeBlack, #fff);border-color:var(--themeBlack, #fff);background-color:var(--themeWhite, #fff);}nav.scroll .search__btn{color:var(--themeWhite);}nav.scroll .logo__img.dark{display:none;}nav.scroll .logo__img.light{display:block;}nav .navigation{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;list-style-type:none;margin:0;padding:0;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex:1;-ms-flex:1;flex:1;}@media (max-width: 1024px){nav .navigation{display:none;}}nav .navigation__item{padding:0;margin:0;visibility:hidden;height:0;}nav .navigation__item+.navigation__item{padding-left:20px;}@media (hover: hover) and (pointer: fine){nav .navigation .navigation__item:not(.sub-nav-container) .navigation__link:after{content:'';position:absolute;display:block;width:0;height:2px;-webkit-transition:width .3s linear;transition:width .3s linear;background:var(--themeBeige);bottom:0;left:0;}nav .navigation .navigation__item:not(.sub-nav-container) .navigation__link:hover:after{width:100%;}}nav .navigation__link{display:block;position:relative;font-size:18px;line-height:18px;background-color:transparent;border:none;border-bottom:2px solid transparent;border-top:2px solid transparent;cursor:pointer;padding:21px 10px;max-width:180px;z-index:2;outline:none;color:inherit;-webkit-text-decoration:none;text-decoration:none;white-space:nowrap;-webkit-font-smoothing:unset;-webkit-transition:color .3s linear;transition:color .3s linear;}nav .navigation__link:focus,nav .navigation__link:active{outline:none;}nav .sub-nav-container{position:relative;padding-right:21px;}nav .sub-nav-container:after{display:block;content:'';width:8px;height:8px;border-right:2px solid;border-bottom:2px solid;position:absolute;right:3px;top:50%;-webkit-transform:translate(0, calc(-50% - 3px)) rotate(45deg);-moz-transform:translate(0, calc(-50% - 3px)) rotate(45deg);-ms-transform:translate(0, calc(-50% - 3px)) rotate(45deg);transform:translate(0, calc(-50% - 3px)) rotate(45deg);-webkit-transition:-webkit-transform 0.2s linear;transition:transform 0.2s linear;}nav .sub-nav-container.active:after{-webkit-transform:translate(0, calc(-50% + 3px)) rotate(-135deg);-moz-transform:translate(0, calc(-50% + 3px)) rotate(-135deg);-ms-transform:translate(0, calc(-50% + 3px)) rotate(-135deg);transform:translate(0, calc(-50% + 3px)) rotate(-135deg);}nav .search{position:relative;}nav .search__btn{border:none;background-color:transparent;margin-left:20px;cursor:pointer;display:block;color:inherit;}@media (max-width: 768px){nav .search__btn{margin-left:0;}}nav .search__btn svg{display:block;}@media (max-width: 768px){nav .hide-mobile{display:none;}}body>div.sidemenu{background-color:rgba(239, 239, 239, 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(239, 239, 239, 1);--bgColor_H:0;--bgColor_S:0%;--bgColor_L:94%;--bgColor_A:1;--bgColor_darkenDir:-1;}body>div.sidemenu{--colorLighter1:hsla(var(--fontColor_H), var(--fontColor_S), var(--fontColor_L), 0.1);width:100%;display:block;-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:.1s all ease-out 2s;transition:.1s all ease-out 2s;background:transparent;}body>div.sidemenu .sidemenu__container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}body>div.sidemenu.visible{-webkit-transition:0s all;transition:0s all;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);z-index:900;background-color:transparent;}body>div.sidemenu.visible .sidemenu__img{-webkit-transform:translateY(0%);-moz-transform:translateY(0%);-ms-transform:translateY(0%);transform:translateY(0%);-webkit-transition:.7s cubic-bezier(0.645, 0.045, 0.355, 1.000);transition:.7s cubic-bezier(0.645, 0.045, 0.355, 1.000);}body>div.sidemenu.visible .sidemenu__wrapper{-webkit-transform:translateY(0%);-moz-transform:translateY(0%);-ms-transform:translateY(0%);transform:translateY(0%);-webkit-transition:1s cubic-bezier(0.645, 0.045, 0.355, 1.000);transition:1s cubic-bezier(0.645, 0.045, 0.355, 1.000);}body>div.sidemenu.visible .sidemenu__toggle{pointer-events:auto;}body>div.sidemenu .sidemenu__img{background:center no-repeat;-webkit-background-size:cover;background-size:cover;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:.7s cubic-bezier(0.645, 0.045, 0.355, 1.000) .5s;transition:.7s cubic-bezier(0.645, 0.045, 0.355, 1.000) .5s;}@media (max-width: 768px){body>div.sidemenu .sidemenu__img{display:none;}}body>div.sidemenu .sidemenu__wrapper{background-color:var(--bgColor, #211F1F);-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;
39-webkit-justify-content:space-between;justify-content:space-between;height:100vh;padding:80px 0 66px 0;overflow-y:auto;max-width:700px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:1s cubic-bezier(0.645, 0.045, 0.355, 1.000) .5s;transition:1s cubic-bezier(0.645, 0.045, 0.355, 1.000) .5s;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}body>div.sidemenu .sidemenu__wrapper::-webkit-scrollbar{width:4px;background-color:transparent;}body>div.sidemenu .sidemenu__wrapper::-webkit-scrollbar-thumb{background-color:var(--fontColor, #ffffff);}body>div.sidemenu .sidemenu__wrapper::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 4px rgba(0,0,0,0.3);background-color:var(--bgColor, #211F1F);}@media (max-width: 768px){body>div.sidemenu .sidemenu__wrapper{padding:40px 0 66px 0;}}body>div.sidemenu .sidemenu__toggle{height:48px;margin-right:auto;margin-left:70px;position:relative;border:none;background-color:transparent;outline:none;color:var(--fontColor, #ffffff);padding-right:50px;font-family:inherit;pointer-events:none;cursor:pointer;}@media (max-width: 768px){body>div.sidemenu .sidemenu__toggle{margin-left:20px;}}body>div.sidemenu .sidemenu__toggle--right{margin-left:auto;margin-right:70px;}@media (max-width: 768px){body>div.sidemenu .sidemenu__toggle--right{margin-right:20px;}}body>div.sidemenu .sidemenu__toggle:focus{outline:none;}body>div.sidemenu .sidemenu__toggle:before,body>div.sidemenu .sidemenu__toggle:after{content:'';display:block;position:absolute;width:20px;height:2px;background-color:currentColor;right:0;top:50%;}body>div.sidemenu .sidemenu__toggle:before{-webkit-transform:translate(-50%, -50%) rotate(45deg);-moz-transform:translate(-50%, -50%) rotate(45deg);-ms-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);}body>div.sidemenu .sidemenu__toggle:after{-webkit-transform:translate(-50%, -50%) rotate(-225deg);-moz-transform:translate(-50%, -50%) rotate(-225deg);-ms-transform:translate(-50%, -50%) rotate(-225deg);transform:translate(-50%, -50%) rotate(-225deg);}body>div.sidemenu .sidemenu__nav{margin-bottom:auto;padding:0;}body>div.sidemenu .sidemenu__socials{margin-left:auto;padding-top:30px;padding-right:70px;}@media (max-width: 768px){body>div.sidemenu .sidemenu__socials{padding-right:20px;padding-left:20px;}}body>div.sidemenu .sidemenu__socials .lp-socials li{margin-bottom:14px;}body>div.sidemenu .sidemenu__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-bottom:93px;}@media (max-width: 768px){body>div.sidemenu .sidemenu__header{padding-bottom:59px;}}body>div.sidemenu .sidemenu__logo{display:none;}@media (max-width: 768px){body>div.sidemenu .sidemenu__logo{display:block;}}body>div.sidemenu .sidemenu__logo-img{display:block;max-height:50px;}body>div.sidemenu .navigation{list-style-type:none;margin:0;padding:0;max-width:100%;}body>div.sidemenu .navigation__item{border-bottom:1px solid var(--colorLighter1);margin:0;overflow:hidden;}body>div.sidemenu .navigation__link{padding:12px 12px 12px 70px;display:block;font-size:22px;font-weight:400;line-height:48px;color:var(--fontColor, #ffffff);-webkit-transition:0.2s all;transition:0.2s all;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;font-family:var(--global-primary-font-family);-webkit-transform:translateY(100%);-moz-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%);opacity:0;position:relative;transition-property:transform,opacity,color;transition-duration:0.55s,0.55s,0.3s;transition-timing-function:cubic-bezier(0.645, 0.045, 0.355, 1),ease-in-out,ease-in-out;}@media(max-width: 768px){body>div.sidemenu .navigation__link{padding-left:20px;padding-right:20px;padding-bottom:16px;}}@media (hover: hover) and (pointer: fine){body>div.sidemenu .navigation__link:hover{color:var(--fontColor, #ffffff);}}body>div.sidemenu .sub-nav{list-style-type:none;display:none;margin:0;padding:10px 0 30px 85px;}@media(max-width: 768px){body>div.sidemenu .sub-nav{padding-bottom:16px;padding-left:35px;}}body>div.sidemenu .sub-nav__item{padding-bottom:10px;margin:0;opacity:0;}body>div.sidemenu .sub-nav__item.fadeInUp{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:var(--delay);animation-delay:var(--delay);}body>div.sidemenu .sub-nav__link{font-size:16px;font-weight:400;cursor:pointer;color:var(--fontColor, #ffffff);font-family:var(--global-secondary-font-family);-webkit-text-decoration:none;text-decoration:none;}body>div.sidemenu .sub-nav.visible{display:block;}body>div.sidemenu .lp-socials__link{opacity:0;-webkit-transform:translateY(-50px);-moz-transform:translateY(-50px);-ms-transform:translateY(-50px);transform:translateY(-50px);position:relative;transition-property:transform,opacity,color;transition-duration:0.55s,0.55s,0.3s;transition-timing-function:cubic-bezier(0.645, 0.045, 0.355, 1),ease-in-out,ease-in-out;}body>div.sidemenu body>div.sidemenu{width:100%;}body>div.sidemenu body>div.sidemenu.visible{-webkit-transition:0s all;transition:0s all;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);z-index:900;background-color:transparent;}body>div.sidemenu body>div.sidemenu.visible .sidemenu__img{-webkit-transform:translateY(0%);-moz-transform:translateY(0%);-ms-transform:translateY(0%);transform:translateY(0%);-webkit-transition:.7s cubic-bezier(0.645, 0.045, 0.355, 1.000);transition:.7s cubic-bezier(0.645, 0.045, 0.355, 1.000);}body>div.sidemenu body>div.sidemenu.visible .sidemenu__wrapper{-webkit-transform:translateY(0%);-moz-transform:translateY(0%);-ms-transform:translateY(0%);transform:translateY(0%);-webkit-transition:1s cubic-bezier(0.645, 0.045, 0.355, 1.000);transition:1s cubic-bezier(0.645, 0.045, 0.355, 1.000);}body>div.sidemenu body>div.sidemenu.visible .sidemenu__toggle{pointer-events:auto;}body>div.sidemenu .fade-in{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}body>div.sidemenu .arrow{vertical-align:middle;margin-bottom:10px;-webkit-transition:.4s;transition:.4s;}body>div.sidemenu .arrow.active{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg);-webkit-transition:.4s;transition:.4s;}footer{background-color:rgba(156, 158, 143, 1);color:rgba(255, 255, 255, 1);--fontColor:rgba(255, 255, 255, 1);--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:rgba(156, 158, 143, 1);--bgColor_H:68;--bgColor_S:7%;--bgColor_L:59%;--bgColor_A:1;--bgColor_darkenDir:-1;}footer .lp-input--dark{background-color:#fff;}footer .site-footer__subscribe{padding-top:92px;padding-bottom:92px;background-color:rgba(0,0,0,0.1);}@media (max-width: 768px){footer .site-footer__subscribe{padding-top:64px;padding-bottom:64px;}}footer .site-footer__logo-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-bottom:64px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}@media (max-width: 768px){footer .site-footer__logo-bar{padding-bottom:24px;}}footer .site-footer__logo-container img{max-width:268px;max-height:56px;object-fit:contain;display:block;object-position:left top;}footer .site-footer__logo-container+.site-footer__logo-container{margin-left:50px;}@media (max-width: 768px){footer .site-footer__logo-container+.site-footer__logo-container{margin-left:0;margin-top:16px;width:100%;}}footer .site-footer__info{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}@media (max-width: 768px){footer .site-footer__info{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}footer .site-footer__info .lp-a a{white-space:nowrap;}
39footer .site-footer__col{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-right:32px;}footer .site-footer__col-title{width:100%;margin-bottom:16px;min-height:29px;}footer .site-footer__col-content{opacity:0.5;padding-bottom:16px;}footer .site-footer__col-content p{margin-bottom:0;}footer .site-footer__col-content a{color:inherit;}footer .site-footer__col-content+.site-footer__col-content{padding-left:40px;}@media (max-width: 768px){footer .site-footer__col-content+.site-footer__col-content{padding-left:0;}}footer .site-footer__navigation-wrap{width:100%;padding-top:32px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}@media (max-width: 992px){footer .site-footer__navigation-wrap{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-bottom:18px;}}@media (max-width: 768px){footer .site-footer__navigation-wrap{padding-top:24px;padding-bottom:0;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}}footer .site-footer__socials{margin-left:auto;}@media (max-width: 992px){footer .site-footer__socials{margin-left:0;}}@media (max-width: 768px){footer .site-footer__socials{margin-right:auto;}}footer .site-footer__socials li{margin-bottom:0;}footer .site-footer__disclaimer{padding-top:64px;padding-bottom:32px;position:relative;opacity:0.5;}@media (max-width: 768px){footer .site-footer__disclaimer{padding-top:18px;padding-bottom:25px;}}footer .site-footer__disclaimer:after{content:'';display:block;position:absolute;left:0;bottom:0;right:0;height:1px;background-color:currentColor;opacity:0.2;}footer .site-footer__copy{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-top:32px;font-size:18px;}@media (max-width: 768px){footer .site-footer__copy{padding-top:15px;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}footer .site-footer__copy>div:first-child{margin-bottom:15px;}}footer .site-footer__copy a{color:inherit;}footer .site-footer__copy-lp span{margin-right:5px;}footer .site-footer__copy-lp img{margin-right:30px;}@media (max-width: 768px){footer .site-footer__copy-lp img{margin-right:0;margin-bottom:15px;}}@media (min-width: 769px){footer .site-footer__copy-lp{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}}footer .site-footer__bottom{padding-top:96px;padding-bottom:96px;}@media (max-width: 768px){footer .site-footer__bottom{padding-top:64px;padding-bottom:64px;}}footer .footer-contact{margin-bottom:13px;}footer .footer-contact p{margin-bottom:0;opacity:.7;}footer .footer-contact ul{list-style:none;padding-left:0;margin:0;}footer .footer-subscribe{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}@media (max-width: 768px){footer .footer-subscribe{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}footer .footer-subscribe__title-wrap{padding-right:50px;}@media (max-width: 768px){footer .footer-subscribe__title-wrap{padding-right:0;padding-bottom:32px;}}footer .footer-subscribe__title{margin-bottom:8px;}footer .footer-subscribe__sub-title{margin-bottom:0;}footer .footer-subscribe__form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;max-width:330px;margin-bottom:0;position:relative;}footer .footer-subscribe__submit{margin-top:16px;}footer .footer-subscribe__success-msg{position:absolute;top:100%;width:100%;text-align:center;opacity:.7;padding-top:10px;}footer .footer-navigation{list-style:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 20px 0 0;margin:0 -30px;}@media (max-width: 992px){footer .footer-navigation{margin-bottom:36px;}}@media (max-width: 768px){footer .footer-navigation{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin:0 0 36px;}}footer .footer-navigation__item{margin:0 30px;}@media (max-width: 768px){footer .footer-navigation__item{margin:0 0 10px;}}
39footer .footer-navigation__link{color:inherit;-webkit-text-decoration:none;text-decoration:none;font-size:14px;line-height:14px;background-color:transparent;border:none;font-family:inherit;cursor:pointer;padding-left:0;padding-right:0;-webkit-transition:0.2s all;transition:0.2s all;}@media (hover: hover) and (pointer: fine){footer .footer-navigation__link:hover{color:var(--themeBeige);}}footer .lp-socials li{margin-bottom:14px;}footer .sync-icon{display:none;margin-right:10px;-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;}footer .success-icon{display:none;margin-right:10px;-webkit-transition:0s;transition:0s;visibility:visible;}footer .loading{pointer-events:none;}footer .loading .sync-icon{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}footer .success .success-icon{display:block;}footer .lp-footer-disclaimers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:20px;margin-top:32px;padding-top:32px;}@media (max-width: 768px){footer .lp-footer-disclaimers{padding-top:15px;margin-top:15px;}}body>div.mobile-contact-wrapper{z-index:200;position:relative;}body>div.mobile-contact-wrapper .lp-ico:before{content:'';width:1em;height:1em;background-color:currentColor;-webkit-background-size:cover;background-size:cover;display:block;-webkit-mask-position:center;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-transition:all .3s;transition:all .3s;}body>div.mobile-contact-wrapper .lp-ico-search:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewB
39ox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewBox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewBox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-arrow-top:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-scroll-top:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");}body>div.mobile-contact-wrapper .lp-ico-close:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");}body>div.mobile-contact-wrapper .lp-ico-phone:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8
39699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-sms:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-email:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.85
3971 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.8571 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.8571 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper a{-webkit-text-decoration:none;text-decoration:none;}body>div.mobile-contact-wrapper .btn-holder{bottom:-50px;left:19px;position:fixed;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:13px;opacity:0;-webkit-transition:all .3s;transition:all .3s;}@media (max-width: 1024px){body>div.mobile-contact-wrapper .btn-holder{right:19px;padding:0 48px;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}}body>div.mobile-contact-wrapper .btn-holder.visible{bottom:28px;opacity:1;}body>div.mobile-contact-wrapper .search-btn{width:48px;height:48px;border-radius:999px;font-size:0;line-height:0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-transition:all .3s;transition:all .3s;padding:12px;color:#141414;background:#fff;}@media (max-width: 1024px){body>div.mobile-contact-wrapper .search-btn{position:absolute;left:0;bottom:0;}}body>div.mobile-contact-wrapper .search-btn:before{width:24px;height:24px;}body>div.mobile-contact-wrapper .connect-btn{height:48px;padding:0 24px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;text-transform:uppercase;border-radius:25px;color:var(--pillTextColor);background:var(--pillBackgroundColor);border:1px solid rgba(255, 255, 255, 0.2);cursor:pointer;font-size:10px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:0.4px;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-transition:all .4s;transition:all .4s;box-shadow:0 0 0 0 rgba(255, 255, 255, 0.2);-webkit-animation:pulsate 2s ease infinite;animation:pulsate 2s ease infinite;}body>div.mobile-contact-wrapper .connect-btn:before{width:16px;height:16px;}body>div.mobile-contact-wrapper .pop-up{display:none;position:fixed;bottom:0;left:0;width:100%;-webkit-transition:all .3s;transition:all .3s;border-radius:16px 16px 0 0;color:var(--textColor);background:var(--backgroundColor);}@media (max-height: 850px){body>div.mobile-contact-wrapper .pop-up{max-height:85vh;overflow-y:auto;}}@media (min-width: 1025px){body>div.mobile-contact-wrapper .pop-up{max-height:none;overflow-y:initial;max-width:637px;border-radius:16px;bottom:28px;left:19px;}}body>div.mobile-contact-wrapper .pop-up .lp-container{padding-top:24px;padding-bottom:24px;-webkit-box-pack:center;-ms-flex-pack:center;
39-webkit-justify-content:center;justify-content:center;}@media (min-width: 1025px){body>div.mobile-contact-wrapper .pop-up .lp-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-top:40px;padding-bottom:40px;min-height:450px;padding-left:56px;padding-right:56px;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}body>div.mobile-contact-wrapper .pop-up .close-btn{width:44px;height:44px;background-color:transparent;border-color:transparent;display:block;margin:24px auto 0;-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;color:var(--textColor);cursor:pointer;padding:10px;border:0;}body>div.mobile-contact-wrapper .pop-up .close-btn:before{width:24px;height:24px;}@media (min-width: 1025px){body>div.mobile-contact-wrapper .pop-up .close-btn{position:absolute;top:14px;right:12px;margin:0;}}body>div.mobile-contact-wrapper .pop-up .icon-btn{width:44px;height:44px;border-radius:999px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-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;margin-left:8px;color:var(--textColor);position:relative;}body>div.mobile-contact-wrapper .pop-up .icon-btn:after{position:absolute;bottom:0;width:100%;left:0;border-radius:999px;
39height:100%;content:'';border:solid 1px var(--textColor);opacity:.3;}body>div.mobile-contact-wrapper .pop-up .icon-btn:before{width:24px;height:24px;}body>div.mobile-contact-wrapper .success-block{display:none;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media (min-width: 1025px){body>div.mobile-contact-wrapper .success-block{-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}}body>div.mobile-contact-wrapper .success-block .lp-btn{margin-top:24px;}body>div.mobile-contact-wrapper .contact-form{margin:0;}@media (max-width: 1024px){body>div.mobile-contact-wrapper .contact-form__item{width:100%;}}body>div.mobile-contact-wrapper .contact-form__item .lp-input{width:100%;}body>div.mobile-contact-wrapper .contact-form__item .is-placeholder{color:#818181;}body>div.mobile-contact-wrapper .contact-form__item+.contact-form__item{margin-top:16px;}body>div.mobile-contact-wrapper .contact-form.show-success .contact-form__container,body>div.mobile-contact-wrapper .contact-form.success .contact-form__container{display:none;}body>div.mobile-contact-wrapper .contact-form.show-success .success-block,body>div.mobile-contact-wrapper .contact-form.success .success-block{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}body>div.mobile-contact-wrapper .contact-form .lp-disclaimer{margin-top:16px;}body>div.mobile-contact-wrapper .contact-form .lp-h3{margin-bottom:16px;}body>div.mobile-contact-wrapper .success-message{font-size:22px;}@-webkit-keyframes pulsate{0%{box-shadow:0 0 0 0 rgba(255, 255, 255, 0.2);}50%{box-shadow:0 0 4px 6px rgba(255, 255, 255, .5);}100%{box-shadow:0 0 12px 12px rgba(255, 255, 255, 0);}} 40 </style> 41 <style id="custom-style-css">.pagination-style-1 li a{color:rgba(156, 158, 143, 1)!important;background-color:rgba(255, 255, 255, 0)!important;border-color:rgba(33, 31, 31, 0)!important;}.pagination-style-1 li a:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(156, 158, 143, 1)!important;border-color:rgba(156, 158, 143, 1)!important;}.pagination-style-1 li.active a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(156, 158, 143, 1)!important;border-color:rgba(156, 158, 143, 1)!important;}.button-style-1{color:rgba(156, 158, 143, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(156, 158, 143, 1)!important;}.button-style-1:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(156, 158, 143, 1)!important;border-color:rgba(156, 158, 143, 1)!important;}.social_icons-style-1 a{border-color:rgba(156, 158, 143, 1)!important;background-color:rgba(0, 0, 0, 0)!important;color:rgba(156, 158, 143, 1)!important;}.social_icons-style-1 a:hover{border-color:rgba(156, 158, 143, 1)!important;background-color:rgba(156, 158, 143, 1)!important;color:rgba(255, 255, 255, 1)!important;}.social_icons-style-1 a i{color:inherit!important;}
41.social_icons-style-1 a svg,.social_icons-style-1 a svg path{fill:currentColor!important;}.hyperlink-style-1{color:rgba(0, 0, 0, 1)!important;}.hyperlink-style-1:hover{color:rgba(156, 158, 143, 1)!important;}.button-style-2{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-2:hover{color:rgba(156, 158, 143, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255,255,255,1)!important;}.hyperlink-style-2{color:rgba(255, 255, 255, 1)!important;}.hyperlink-style-2:hover{color:rgba(206, 206, 206, 1)!important;}.pagination-style-2 li a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(255, 255, 255, 0)!important;}.pagination-style-2 li a:hover{color:rgba(156, 158, 143, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255, 255, 255, 1)!important;}.pagination-style-2 li.active a{color:rgba(156, 158, 143, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255, 255, 255, 1)!important;}.social_icons-style-2 a{border-color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 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, 1)!important;color:rgba(156, 158, 143, 1)!important;}.social_icons-style-2 a i{color:inherit!important;}
41.social_icons-style-2 a svg,.social_icons-style-2 a svg path{fill:currentColor!important;}.hyperlink-style-3{color:rgba(0, 0, 0, 1)!important;}.hyperlink-style-3:hover{color:rgba(156, 158, 143, 1)!important;}.hyperlink-style-4{color:rgba(255, 255, 255, 1)!important;}.hyperlink-style-4:hover{color:rgba(206, 206, 206, 1)!important;}</style> 42 <!-- LP Consent bootstrap: blocking; resolves consent state, pushes Consent Mode 43 defaults, and dynamically loads the locale + main (and banner if needed). --> 44
44<script src="https://cdn.luxurypresence.com/scripts/lp-consent/latest/lp-consent-boot.js" data-website-id="be227485-eaf0-455b-aee0-a0e351474420"></script>
44 45 46 47
47<script> 48 (function utmParse() { 49 const url = new URL(window.location.href); 50 if (url.search) { 51 const utm = url.search.split(/\?|&/g).reduce((acc, current) => { 52 const matched = current.match(/utm_(content|campaign|medium|source|term|id)|gclid/g); 53 if (matched) { 54 acc[matched[0]] = current.replace(`${matched[0]}=`, ''); 55 } 56 return acc; 57 }, {}); 58 if (Object.keys(utm).length) { 59 window.localStorage.setItem('utm_vars', JSON.stringify(utm)); 60 } else { 61 // Remove old utm vars 62 window.localStorage.removeItem('utm_vars'); 63 } 64 } 65 // Set referrer in local storage 66 // This is meant to be stored once to avoid self-referrals and to have the first referrer only. 67 if (!window.localStorage.getItem('referrer')) { 68 // Capture the Referrer URL 69 const referrer = document.referrer; 70 if (referrer) { 71 // Only store the referrer if it comes from outside the current domain (to avoid self-referrals) 72 const currentDomain = window.location.hostname; 73 const referrerDomain = new URL(referrer).hostname; 74 75 if (referrerDomain !== currentDomain) { 76 // Store it in localStorage 77 localStorage.setItem('referrer', referrer); 78 } 79 } 80 } 81 })(); 82 </script>
82 83 <!-- Bing Webmaster Tools Verification -->
84<script> 85 // Check if on the homepage before the body loads 86 if (window.location.pathname === '/' || window.location.pathname === '/index.html') { 87 document.write('<meta name="msvalidate.01" content="9444E455BC3D007F3F70BCA3F6F54DD2" />'); 88 } 89</script>
89 90 <!-- GOOGLE TRANSLATE STYLES are moved to external CSS --> 91</head> 92<body> 93 <div id="google_translate_element" style="display: none"></div> 94 95 <nav id="global-navbar" data-el-id="b395957e-29e6-4bd5-99ee-352fbee7732a"> 96 <div class="header theme-auto"> 97 <div class="lp-container header__container"> 98 <div class="header__logo"> 99 <a href="/" class="logo"> 100 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/1a7319f0-bc14-4910-8be8-98cc038c9789" 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/1a7319f0-bc14-4910-8be8-98cc038c9789 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/1a7319f0-bc14-4910-8be8-98cc038c9789 960w" sizes="500px" class="logo__img dark" alt="Allison Ziefert Real Estate Group"> 101 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/414a1dad-2db4-45d6-aed8-def07b029be3" 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/414a1dad-2db4-45d6-aed8-def07b029be3 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/414a1dad-2db4-45d6-aed8-def07b029be3 960w" sizes="500px" class="logo__img light" alt="Allison Ziefert Real Estate Group"> 102 </a> 103 </div> 104 105 <div class="header__right"> 106 <ul class="navigation"> 107 <li class="navigation__item sub-nav-container"> 108 <a href="#" class="navigation__link">Properties</a> 109 <ul class="sub-nav"> 110 <li class="sub-nav__item"><a href="/properties/sale" class="sub-nav__link">Featured Properties</a></li> 111 <li class="sub-nav__item"><a href="/properties/sold" class="sub-nav__link">Past Transactions</a></li> 112 </ul> 113 </li> 114 <li class="navigation__item"> 115 <a href="/home-search/listings" class="navigation__link">Home Search</a> 116 </li> 117 <li class="navigation__item"> 118 <a href="/home-valuation" class="navigation__link">Home Valuation</a> 119 </li> 120 <li class="navigation__item"> 121 <a href="/communities" class="navigation__link">Communities</a> 122 </li> 123 <li class="navigation__item"> 124 <a data-type="CONTACT_US" class="navigation__link">Contact Us</a> 125 </li> 126 127 </ul> 128 129 130 131 132 133 <button class="hamburger-component header__hamburger">
134 <svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg"> 135 <circle cx="30" cy="30" r="30" /> 136 <rect class="line line--top" x="18" y="26" width="24" height="2" /> 137 <rect class="line line--bottom" x="30" y="32" width="12" height="2" /> 138 </svg> 139 </button> 140 </div> 141 142 </div> 143</div> 144 </nav> 145 <div id="global-sidemenu" class="sidemenu" data-el-id="1575f740-92ae-4292-919d-936adffb0f46"> 146 <div class="sidemenu__container"> 147 148 149 <div class="sidemenu__img" style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/129701c0-e121-454e-9084-abcb96fcdbf9');"> 150 </div> 151 152 <div class="sidemenu__wrapper"> 153 <div class="sidemenu__header"> 154 <button class="sidemenu__toggle toggle sidemenu__toggle--right">Close Menu</button> 155 </div> 156 157 <div class="sidemenu__nav"> 158 <ul class="navigation"> 159 <li class="navigation__item" > 160 <a href="/" class="navigation__link" >Home</a> 161 </li> 162 <li class="navigation__item" > 163 <a href="/team" class="navigation__link" >Meet the Team</a> 164 </li> 165 <li class="navigation__item sub-nav-container" data-wow-delay="2.2s"> 166 <a href="#" class="navigation__link"> 167 Properties 168 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" class="arrow" xmlns="http://www.w3.org/2000/svg"> 169 <path d="M7.41 8.58984L12 13.1698L16.59 8.58984L18 9.99984L12 15.9998L6 9.99984L7.41 8.58984Z" fill="currentColor"/> 170 </svg> 171 </a> 172 <ul class="sub-nav"> 173 <li class="sub-nav__item"><a href="/properties/sale" class="sub-nav__link feature">Featured Properties</a></li> 174 <li class="sub-nav__item"><a href="/properties/sold" class="sub-nav__link feature">Past Transactions</a></li> 175 </ul> 176 177 </li> 178 <li class="navigation__item" > 179 <a href="/home-search/listings" class="navigation__link" >Home Search</a> 180 </li> 181 <li class="navigation__item" > 182 <a href="/home-valuation" class="navigation__link" >Home Valuation</a> 183 </li> 184 <li class="navigation__item" > 185 <a href="/communities" class="navigation__link" >Communities</a> 186 </li> 187 <li class="navigation__item" > 188 <a href="/testimonials" class="navigation__link" >Testimonials</a> 189 </li> 190 <li class="navigation__item sub-nav-container" data-wow-delay="2.7s"> 191 <a href="#" class="navigation__link"> 192 Resources 193 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" class="arrow" xmlns="http://www.w3.org/2000/svg"> 194 <path d="M7.41 8.58984L12 13.1698L16.59 8.58984L18 9.99984L12 15.9998L6 9.99984L7.41 8.58984Z" fill="currentColor"/> 195 </svg> 196 </a> 197 <ul class="sub-nav"> 198 <li class="sub-nav__item"><a href="/buyers-guide" class="sub-nav__link feature">Buyer's Guide</a></li> 199 <li class="sub-nav__item"><a href="/sellers-guide" class="sub-nav__link feature">Seller's Guide</a></li> 200 <li class="sub-nav__item"><a href="/mortgage-calculator" class="sub-nav__link feature">Mortgage Calculator</a></li> 201 </ul> 202 203 </li> 204 <li class="navigation__item" > 205 <a href="/market-reports" class="navigation__link" >Market Reports</a> 206 </li> 207 <li class="navigation__item" > 208 <a href="/video" class="navigation__link" >Video Gallery</a> 209 </li> 210 <li class="navigation__item" > 211 <a href="/press" class="navigation__link" >Press & Media</a> 212 </li> 213 <li class="navigation__item" > 214 <a href="/blog" class="navigation__link" >Blog</a> 215 </li> 216 <li class="navigation__item" > 217 <a href="/contact-us" class="navigation__link" >Contact Us</a> 218 </li> 219 <li class="navigation__item" > 220 <a href="/home-search/auth/sign_in" class="navigation__link" >My Search Portal</a> 221 </li> 222 </ul> 223 </div> 224 225 <div class="sidemenu__socials"> 226 <ul class="lp-socials social_icons-style-1 sidemenu-social-links"> 227 228 <li> 229 <a 230 href="https://www.instagram.com/njfromatoz/" 231 class="lp-socials__link socials__item" 232 data-wow-delay="0s" 233 target="_blank" 234 aria-label="INSTAGRAM" 235 >
236 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 237 </a> 238 </li> 239 <li> 240 <a 241 href="https://www.linkedin.com/in/allisonziefert/" 242 class="lp-socials__link socials__item" 243 data-wow-delay="0.1s" 244 target="_blank" 245 aria-label="LINKEDIN" 246 > 247 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 248 </a> 249 </li> 250 <li> 251 <a 252 href="https://www.youtube.com/@njfromatoz/featured" 253 class="lp-socials__link socials__item" 254 data-wow-delay="0.2s" 255 target="_blank" 256 aria-label="YOUTUBE" 257 > 258 <span class="lp-i lp-i--youtube" aria-hidden="true"></span> 259 </a> 260 </li> 261 <li> 262 <a 263 href="https://www.google.com/search?q=Allison+Ziefert+realtor&rlz=1C1VDKB_enPH1045PH1045&oq=Allison+Ziefert+realtor&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg9MgYIAhBFGDzSAQk0NTkyajBqMTWoAgiwAgHxBe38LS_e99po&sourceid=chrome&ie=UTF-8#lrd=0x89c3ac44e59ca929:0xe5947d912e97eba9,1,,,," 264 class="lp-socials__link socials__item" 265 data-wow-delay="0.3s" 266 target="_blank" 267 aria-label="GOOGLE" 268 > 269 <span class="lp-i lp-i--google" aria-hidden="true"></span> 270 </a> 271 </li> 272 <li> 273 <a 274 href="https://www.zillow.com/profile/Allison%20Ziefert" 275 class="lp-socials__link socials__item" 276 data-wow-delay="0.4s" 277 target="_blank" 278 aria-label="ZILLOW" 279 > 280 <span class="lp-i lp-i--zillow" aria-hidden="true"></span> 281 </a> 282 </li> 283 <li> 284 <a 285 href="https://www.compass.com/agents/allison-ziefert-real-estate-group/" 286 class="lp-socials__link socials__item" 287 data-wow-delay="0.5s" 288 target="_blank" 289 aria-label="BROKERAGE" 290 > 291 <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> 292 </a> 293 </li> 294 </ul> </div> 295 </div> 296</div> 297 298 </div> 299 <div id="global-mobile-contact" class="mobile-contact-wrapper" data-el-id="befe5af2-a6ca-4119-924a-a85d96d36b51"> 300 <div class="btn-holder" 301style=" 302--backgroundColor: rgba(239, 239, 239, 1); 303--textColor: rgba(0, 0, 0, 1); 304--pillTextColor: rgba(255, 255, 255, 1); 305--pillBackgroundColor: rgba(156, 158, 143, 1);"> 306 307 <button type="button" class="connect-btn lp-ico lp-ico-arrow-top visible">Contact Us</button> 308</div> 309 310 311<div class="pop-up" style="--backgroundColor: rgba(239, 239, 239, 1); --textColor: rgba(0, 0, 0, 1);"> 312 <div class="lp-container"> 313 <form data-type="contact-form" class="contact-form"> 314 <div class="contact-form__container"> 315 <h3 class="lp-h3">Leave a Message</h3> 316 317 <div class="contact-form__content"> 318 <div class="contact-form__inputs-container"> 319 <div class="contact-form__item"> 320 <input 321 id="__FullName" 322 type="text" name="name" 323 class="lp-input lp-input--light" 324 required 325 placeholder="Full Name"> 326 </div> 327 <div class="contact-form__item"> 328 <input 329 id="__Email" 330 type="email" name="email"
331 class="lp-input js-email-input lp-input--light" 332 required 333 placeholder="Email"> 334 </div> 335 <div class="contact-form__item"> 336 <input 337 class="lp-input lp-input--light" 338 type="tel" 339 placeholder="Phone" 340 id="__Phone" 341 name="phone" 342 required> 343 </div> 344 345 <div class="contact-form__item input-group-select"> 346 <select name="interest" id="-field-interest" placeholder="Interest" 347 class="lp-input dropdown-select js-select js-form-element lp-input--light" required> 348 <option value="" disabled selected data-label="Interest">Interested in...</option> 349 <option value="Selling & Buying">Selling & Buying</option> 350 <option value="Selling">Selling</option> 351 <option value="Buying">Buying</option> 352 <option value="Renting">Renting</option> 353 <option value="Other">Other</option> 354 </select> 355 <label for="-field-interest" class="lp-label sr-only">Interest</label> 356 </div> 357 358 <div class="contact-form__item"> 359 <textarea 360 name="message" 361 rows="4" 362 id="__Message" 363 class="lp-input lp-input--light" 364 placeholder="Message" 365 required></textarea> 366 </div> 367 <div class="lp-disclaimer"> <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label> 368 <label class='lp-tcr-content'> 369 <span class='lp-tcr-checkbox'> 370 <input 371 type='checkbox' 372 id='-termsAccepted' 373 name='termsAccepted' 374 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 375 oninput="this.setCustomValidity('')" 376 required 377 /></span> 378 <span class='lp-tcr-message'> 379 380 I agree to be contacted by 381 Allison Ziefert Real Estate Group 382 via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 383 You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. 384 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. 385 </span> 386 </label> 387 388</div> 389 <button type="submit" class="lp-btn lp-btn--filled lp-btn--dark submit contact-form__item">Submit</button> 390 391 <div class="lp-h-pot"> 392 <input id="__newsSignMiddleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 393 </div> 394 395 <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" /> 396 <input type="hidden" name="button_text" value="Contact Us"> 397 </div> 398 </div> 399 </div> 400 401 402 <div class="success-block"> 403 <h3 class="lp-h3 success-message">Thank you for your message. We will be in touch with you shortly.</h3> 404 405 </div> 406 </form> 407 408 <button type="button" class="close-btn lp-ico lp-ico-close"></button> 409 410 411 </div> 412</div> 413 414 415 </div> 416 <section class="image-section is-font-color-light is-background-color-dark" id="section-08c11126-4ca7-4355-a714-186817126398" data-el-id="bce33bae-7388-4ccc-abff-e0ce18ec46d2"> 417
418<script> 419 (function(){ 420 const sectionId = 'section-08c11126-4ca7-4355-a714-186817126398' 421 const section = document.querySelector(`#${sectionId}`); 422 var sectionBg = window.getComputedStyle(section, null).getPropertyValue('background-image'); 423 424 if('true' === 'true') { 425 section.classList.add('parallax-enabled'); 426 section.style.setProperty('--sectionBackground', sectionBg); 427 section.style.setProperty('background', 'transparent'); 428 } 429 })() 430</script>
430 431 432 433<div class="opening-with-search height-class-600px parallax"> 434 <div class="center-block"> 435 <button class='lp-play video-section__play-button js-play-btn'></button> 436 <div class="container lp-container"> 437 438 <div class="lp-title-group"> 439 440 441 <h1 class="h1 lp-h1 opening-title lp-pre-line" style="color: rgba(255, 255, 255, 1)">Featured Properties</h1> 442 443 444 </div> 445 446 <div class="buttons"></div> 447 448 </div> 449 </div> 450 <div class="bottom-spacer"></div> 451</div> 452</section> 453<section id="section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927" class="solid-section is-font-color-dark is-background-color-light" data-el-id="4466f752-1b35-475b-b356-3b1a744bc6ee">
454<script type="text/x-handlebars-template" class="item pagination-script"> <a class="item" href="{{#if fromMLS}}/home-search/listings/{{id}}{{else}}/properties/{{slug}}{{/if}}"> 455 <figure> 456 {{#if media.[0]}} 457 {{{mediaImage media.[0] sizes="(min-width: 769px) 640px, 100vw" class="img" alt=name}}} 458 {{/if}} 459 460 {{#if status}} 461 <p class="bf1 label">{{formatPropertyStatus status false (hbFormatDate soldDate)}}</p> 462 {{/if}} 463 {{#if openHouseHours}} 464 <div class="open-house label-house bf1">Open House: {{openHouseHours}}</div> 465 {{/if}} 466 </figure> 467 <h5 class="lp-h5"> 468 {{formatPropertyPrice this}} 469 </h5> 470 <p class="bf1"> 471 {{#if privateAddress}} 472 {{name}}<br/> 473 Private Address 474 {{else}} 475 {{#if fullAddress}} 476 {{fullAddress}} 477 {{/if}} 478 {{/if}} 479 </p> 480 <ul class="bf2"> 481 {{#if (or bedroomCount bathCount livingSpaceSize)}} 482 {{#if bedroomCount}} 483 <li>{{bedroomCount}} Bed{{#numCompare bedroomCount 1 ">"}}s{{/numCompare}}</li> 484 {{/if}} 485 {{#if bathCount}} 486 <li>{{bathCount}} Bath{{#numCompare bathCount 1 ">"}}s{{/numCompare}}</li> 487 {{/if}} 488 {{#if livingSpaceSize}} 489 <li>{{lpFormatNumber livingSpaceSize}} {{formatAreaUnit livingSpaceUnits}}</li> 490 {{/if}} 491 {{/if}} 492 </ul> 493 </a> 494</script>
494 495<div class="section lp-vertical-paddings"> 496 <div class="lp-container"> 497 498 <div class="collection collection--3 data-container"> 499 <a class="item" href="/properties/412-N-Park-Avenue"> 500 <figure> 501 <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/e68928a3-e8be-4e2f-8fe6-bab2e05795c4" srcset="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/e68928a3-e8be-4e2f-8fe6-bab2e05795c4 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/e68928a3-e8be-4e2f-8fe6-bab2e05795c4 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/e68928a3-e8be-4e2f-8fe6-bab2e05795c4 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/e68928a3-e8be-4e2f-8fe6-bab2e05795c4 2048w" alt="412 North Park Avenue" class="img" sizes="(min-width: 769px) 640px, 100vw" loading="lazy"> 502 503 <p class="bf1 label">For Sale</p> 504 </figure> 505 <h5 class="lp-h5"> 506 $395,000 507 </h5> 508 <p class="bf1"> 509 412 North Park Avenue, Linden, NJ 07036 510 </p> 511 <ul class="bf2"> 512 <li>3 Beds</li> 513 <li>1.1 Baths</li> 514 <li>735 Sq.Ft.</li> 515 </ul> 516 </a> 517 <a class="item" href="/properties/147-Glen-Avenue"> 518 <figure> 519 <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/cc344583-d59a-445f-846c-28f2a69aaf4e" srcset="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/cc344583-d59a-445f-846c-28f2a69aaf4e 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/cc344583-d59a-445f-846c-28f2a69aaf4e 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/cc344583-d59a-445f-846c-28f2a69aaf4e 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/cc344583-d59a-445f-846c-28f2a69aaf4e 2048w" alt="147 Glen Avenue" class="img" sizes="(min-width: 769px) 640px, 100vw" loading="lazy"> 520 521 <p class="bf1 label">For Sale</p> 522 </figure> 523 <h5 class="lp-h5"> 524 $6,000/mo 525 </h5> 526 <p class="bf1"> 527 147 Glen Avenue, Millburn, NJ 07041 528 </p> 529 <ul class="bf2"> 530 <li>4 Beds</li> 531 <li>3.1 Baths</li> 532 <li>3,209 Sq.Ft.</li> 533 </ul> 534 </a> 535 <a class="item" href="/properties/321-Boyden-Ave"> 536 <figure> 537 <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/c885b127-d60e-4a61-bc2e-d6ced98968ca" srcset="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/c885b127-d60e-4a61-bc2e-d6ced98968ca 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/c885b127-d60e-4a61-bc2e-d6ced98968ca 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/c885b127-d60e-4a61-bc2e-d6ced98968ca 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/c885b127-d60e-4a61-bc2e-d6ced98968ca 2048w" alt="321 Boyden Avenue home with a blue front door, flowering garden, and green lawn." class="img" sizes="(min-width: 769px) 640px, 100vw" loading="lazy"> 538 539 <p class="bf1 label">For Sale</p> 540 <div class="open-house label-house bf1">Open House: 10/10/2026, 2:00 PM - 4:00 PM</div> 541 </figure> 542 <h5 class="lp-h5"> 543 $489,000 544 </h5> 545 <p class="bf1"> 546 321 Boyden Avenue, Maplewood, NJ 07040 547 </p> 548 <ul class="bf2"> 549 <li>2 Beds</li> 550 <li>1 Bath</li> 551 </ul> 552 </a> 553 <a class="item" href="/properties/28-Oxford-Terrace"> 554 <figure> 555 <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/f77ad2a7-d5c0-4e22-82e0-9cac37ae131f" srcset="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/f77ad2a7-d5c0-4e22-82e0-9cac37ae131f 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/f77ad2a7-d5c0-4e22-82e0-9cac37ae131f 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/f77ad2a7-d5c0-4e22-82e0-9cac37ae131f 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f77ad2a7-d5c0-4e22-82e0-9cac37ae131f 2048w" alt="Two-story gray house with a covered porch, brick steps, and a broad green lawn." class="img" sizes="(min-width: 769px) 640px, 100vw" loading="lazy"> 556 557 <p class="bf1 label">Pending</p> 558 </figure> 559 <h5 class="lp-h5"> 560 $749,000 561 </h5> 562 <p class="bf1"> 563 28 Oxford Terrace, West Orange, NJ 07052 564 </p> 565 <ul class="bf2"> 566 <li>4 Beds</li> 567 <li>2.1 Baths</li> 568 </ul> 569 </a> 570 </div> 571 <div class="lp-pagination pagination-container pagination-style-1"></div> 572 </div> 573</div> 574</section> 575<section id="section-855d0879-113a-4e34-8b5b-781d0b1f30d9" class="solid-section is-font-color-light is-background-color-dark" data-el-id="e7db0aa2-a33d-4b1c-bd9f-41337c1c9384"> 576 <div class="lp-vertical-paddings redesign"> 577 <div class="lp-container cta-block cta-block--Right-aligned"> 578 <div class="text-block"> 579 <h2 class="lp-h2"><p>Find Your Dream Home Today</p></h2> 580 </div> 581 582 <a 583 href="/home-search/listings" 584 585 class="lp-btn lp-btn--dark lp-btn--big lp-btn--outline lp-btn--mob-full-width button-style-1" 586 587 588 589 590 591 > 592 Browse Properties 593 </a> 594 </div> 595</div> 596</section> 597<section class="image-section is-font-color-light is-background-color-light" id="section-9b699237-bd33-47e1-a3a6-3c086016df48" data-el-id="60f303de-57c9-4a3b-87cf-c1b576e15623"> 598
598<script> 599 (function(){ 600 const sectionId = 'section-9b699237-bd33-47e1-a3a6-3c086016df48' 601 const section = document.querySelector(`#${sectionId}`); 602 var sectionBg = window.getComputedStyle(section, null).getPropertyValue('background-image'); 603 604 if('true' === 'true') { 605 section.classList.add('parallax-enabled'); 606 section.style.setProperty('--sectionBackground', sectionBg); 607 section.style.setProperty('background', 'none'); 608 } 609 })() 610</script>
610 611 612<div class="section work-with-us parallax" style="--opacityColor:rgba(0, 0, 0, 0);"> 613 <div class="lp-container lp-vertical-paddings"> 614 615 <div class="lp-title-group"> 616 <h2 class="lp-h2">Work With Us</h2> 617 618 <p class="pre-line">We are passionate about researching market stats, negotiating contracts, and helping our clients find and sell homes. The majority of our business comes from past clients and referrals from people who know our work. </p> 619 </div> 620 621 622 623 624 625 626 627 <div class="btn-container"> 628 <a 629 role="button" 630 data-type="CONTACT_US" 631 class="btn btn--link lp-btn lp-btn--dark lp-btn--outline lp-btn--mob-full-width button-style-2" 632 633 634 635 636 637 > 638 Contact Us 639 </a> 640 </div> 641 </div> 642</div> 643</section> 644<section id="section-843c4f7d-2270-4187-af56-23dd530aef1f" class="solid-section is-font-color-dark is-background-color-light" data-el-id="1b5dc03a-76a1-431a-b1f1-9def4c75f9f5"> 645
645<script type="text/x-handlebars-template" class="jsIGTemplate"> 646 {{#each items}} 647 <a href="{{permalink}}" target="_blank" class="feed__content__item wow fadeInUp insta-type-{{mediaType}}" data-wow-delay="1.{{@index}}s"> 648 <div class=" feed__content__item__img" style="background-image: url('{{#ifEquals mediaType 'VIDEO'}}{{thumbnailUrl}}{{else}}{{mediaUrl}}{{/ifEquals}}');"> 649 <svg class=" feed__content__item__img__icon " xmlns=" http://www.w3.org/2000/svg " width=" 24px " height=" 24px " viewBox=" 0 0 1024 1024 " fill=" #ffffff "> 650 <path d=" M710.5 127c-51.4 2.9-99.2 20.1-140.6 50.6-12.2 9-24.6 20.5-40.9 38-8.9 9.6-16.6 17.4-17 17.4-.4 0-9-8.8-19.1-19.6-10.1-10.8-22.8-23.4-28.4-28.1-27.1-22.9-60.5-40-95-48.8-25.3-6.4-42.3-8.5-71.2-8.5-85.6 0-155.3 33.7-203.9 98.6-35.5 47.4-53 103-51.1 161.9 1.4 40.2 9.9 74 27.9 109.9 10.7 21.4 26 43.7 41.5 60.5 21.2 23.2 398.7 422.6 399.3 422.6.6 0 378.1-399.4 399.3-422.6 15.5-16.8 30.8-39.1 41.5-60.5 18-35.9 26.5-69.7 27.9-109.9 1.4-42.1-6.6-80.4-24.6-118-26.5-55.2-67.5-95.5-122.7-120.8-26.5-12.1-60.4-20.7-87.4-22.2-19.8-1.1-22.8-1.2-35.5-.5z "></path> 651 </svg> 652 </div> 653 {{#ifEquals mediaType 'VIDEO'}} 654 <div class="media-type-icon"> 655 <svg width="30px" height="30px" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="#fff" d="M19.369 6.042H2.082A2.086 2.086 0 000 8.125v13.71a2.086 2.086 0 002.083 2.083h17.285a2.086 2.086 0 002.084-2.083V8.125a2.086 2.086 0 00-2.084-2.083zM22.84 17.833l7.16 3.91V8.262l-7.16 3.908v5.662z"/></svg> 656 </div> 657 {{/ifEquals}} 658 </a> 659 {{/each}} 660</script>
660 661<div class="feed redesign"> 662 <div class="lp-container"> 663 <span class="pre-title feature wow fadeInUp">Follow Us</span> 664 <a href="#" target="_blank" class="instagram-link jsIGLink"><h3 class="lp-h3 wow fadeInUp jsIGName jsShrink instagram-username" data-wow-delay=".5s"></h3></a> 665 <div class="feed__content jsIGContainer"></div> 666 </div> 667</div> 668</section> 669 670 <div id="modals" class="modals"></div> 671 <footer id="global-footer" class="is-font-color-light is-background-color-light" data-el-id="f3892c1c-f128-483a-b998-cb1ea48c25c1"> 672 <div class="site-footer"> 673 674 <div class="site-footer__bottom"> 675 <div class="lp-container"> 676 677 <div class="site-footer__logo-bar"> 678 <div class="site-footer__logo-container"> 679 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/0b0306ca-6610-41f3-bf9f-7c5bf6a4ed00" 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/0b0306ca-6610-41f3-bf9f-7c5bf6a4ed00 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/0b0306ca-6610-41f3-bf9f-7c5bf6a4ed00 960w" sizes="268px" alt="Compass"> 680 </div> 681 <div class="site-footer__logo-container"> 682 683 </div> 684 </div> 685 686 <div class="site-footer__info"> 687 <div class="site-footer__col"> 688 <h5 class="lp-h5 site-footer__col-title">Allison Ziefert Real Estate Group</h5> 689 690 <div class="site-footer__col-content lp-a"><p><a href="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/7a42cd3e-ba98-4731-88af-7d1fae90a030" target="_blank" rel="noopener">Top 1% on Garden State MLS</a></p> 691<p><a href="tel:9177510448" target="_blank" rel="noopener">(917) 751-0448</a><br><a href="/cdn-cgi/l/email-protection#90f8f5fcfcffd0fefaf6e2fffdf1e4ffeabef3fffd" target="_blank" rel="noopener"><span class="__cf_email__" data-cfemail="b6ded3dadad9f6d8dcd0c4d9dbd7c2d9cc98d5d9db">[email protected]</span> </a></p></div> 692 </div> 693 694 695 <div class="site-footer__col"> 696 <h5 class="lp-h5 site-footer__col-title">Address</h5> 697 698 <div class="site-footer__col-content lp-a"><p>378-380 Millburn Ave., 2nd Floor, Millburn, NJ 07041<br>113 Grove St, <span class="fMYBhe">Montclair, NJ 07042<br>1776 On The Green, Morristown, NJ 07960</span></p></div> 699 </div> 700 701 <div class="site-footer__navigation-wrap"> 702 <ul class="footer-navigation"> 703 <li class="footer-navigation__item"> 704 <a href="/" class="footer-navigation__link">Home</a> 705 </li> 706 <li class="footer-navigation__item"> 707 <a href="/team" class="footer-navigation__link">Meet the Team</a> 708 </li> 709 <li class="footer-navigation__item"> 710 <a href="/properties/sale" class="footer-navigation__link">Featured Properties</a> 711 </li> 712 <li class="footer-navigation__item"> 713 <a href="/communities" class="footer-navigation__link">Communities</a> 714 </li> 715 <li class="footer-navigation__item"> 716 <a href="/testimonials" class="footer-navigation__link">Testimonials</a> 717 </li> 718 <li class="footer-navigation__item"> 719 <button data-type="CONTACT_US" class="footer-navigation__link" type="button">Contact Us</button> 720 </li> 721 </ul> 722 723 <ul class="lp-socials social_icons-style-2 site-footer__socials socials"> 724 725 <li> 726 <a 727 href="https://www.instagram.com/njfromatoz/" 728 class="lp-socials__link socials__item" 729 data-wow-delay="0s" 730 target="_blank" 731 aria-label="INSTAGRAM" 732 > 733 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 734 </a> 735 </li> 736 <li> 737 <a 738 href="https://www.linkedin.com/in/allisonziefert/" 739 class="lp-socials__link socials__item" 740 data-wow-delay="0.1s" 741 target="_blank" 742 aria-label="LINKEDIN" 743 >
744 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 745 </a> 746 </li> 747 <li> 748 <a 749 href="https://www.youtube.com/@njfromatoz/featured" 750 class="lp-socials__link socials__item" 751 data-wow-delay="0.2s" 752 target="_blank" 753 aria-label="YOUTUBE" 754 > 755 <span class="lp-i lp-i--youtube" aria-hidden="true"></span> 756 </a> 757 </li> 758 <li> 759 <a 760 href="https://www.google.com/search?q=Allison+Ziefert+realtor&rlz=1C1VDKB_enPH1045PH1045&oq=Allison+Ziefert+realtor&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg9MgYIAhBFGDzSAQk0NTkyajBqMTWoAgiwAgHxBe38LS_e99po&sourceid=chrome&ie=UTF-8#lrd=0x89c3ac44e59ca929:0xe5947d912e97eba9,1,,,," 761 class="lp-socials__link socials__item" 762 data-wow-delay="0.3s" 763 target="_blank" 764 aria-label="GOOGLE" 765 > 766 <span class="lp-i lp-i--google" aria-hidden="true"></span> 767 </a> 768 </li> 769 <li> 770 <a 771 href="https://www.zillow.com/profile/Allison%20Ziefert" 772 class="lp-socials__link socials__item" 773 data-wow-delay="0.4s" 774 target="_blank" 775 aria-label="ZILLOW" 776 > 777 <span class="lp-i lp-i--zillow" aria-hidden="true"></span> 778 </a> 779 </li> 780 <li> 781 <a 782 href="https://www.compass.com/agents/allison-ziefert-real-estate-group/" 783 class="lp-socials__link socials__item" 784 data-wow-delay="0.5s" 785 target="_blank" 786 aria-label="BROKERAGE" 787 > 788 <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> 789 </a> 790 </li> 791 </ul> 792 793 </div> 794 </div> 795 796 <div class="site-footer__disclaimer"><p style="font-size: 12px;">Allison Ziefert Real Estate Group is a team of real estate broker-salespersons affiliated with Compass. <a href="https://www.compass.com" target="_blank" rel="noopener">Compass</a> is a licensed real estate broker and abides by equal housing opportunity laws. All material presented herein is 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> 797<p style="font-size: 12px;">DIRECT DATA COLLECTION<br>Personal data is only stored when voluntarily given by you for a determined purpose e.g. in context of a registration, a survey, a contest, or in performance of a contract. Your individual, identifiable, personal data will not be disclosed to third parties, without your consent.</p> 798<p style="font-size: 12px;">PHONE NUMBERS<br>Any phone numbers collected through our site, whether through webform or other means, will be used exclusively to communicate with you regarding our services and will never be shared or sold to third parties for promotional or marketing purposes.</p> 799<p style="font-size: 12px;">TELEPHONE COMMUNICATIONS WITH YOU<br>You agree that our company and its agents may call or text you at any phone number (landline or wireless) that you provide to us, using an automated dialing system and/or a prerecorded message, for marketing services and/or account-related purposes, such as appointment confirmations, service alerts, billing and collection issues or account recovery concerns. You can manage your contact preferences by emailing us, c
799alling us, or replying to text messages with “HELP” for assistance or “STOP” to unsubscribe. Reply “START” to resubscribe. Message and data rates may apply.</p> 800<p><img style="filter: invert(1); width: 100px; margin-top: 10px;" src="https://res.cloudinary.com/luxuryp/images/zbxf1j3xdplm6lhfnqo3/realtor-eho-logo-07232021-update-dark" alt=""></p></div> 801 802 <div class="site-footer__copy"> 803 <div class="lp-a site-footer__copy-lp"> 804 <div class="site-footer__logo-container"> 805 <img src="https://media-production.lp-cdn.com/media/f78e371f-8cef-4648-9d4d-fb6d0cdbee59" alt=""> 806 </div> 807 <span>Website designed and developed by</span> 808 <a href="https://www.luxurypresence.com/" class="" target="_blank">Luxury Presence</a> 809 </div> 810 <div>Copyright © <span class="auto-year-update">2026</span> | <a href="/terms-and-conditions">Privacy Policy</a></div> 811 </div> 812 813 </div> 814 </div> 815 816 817 818</div> 819 820 </footer> 821 822 <div id="modal-global-contact-us" class="modal " 823 data-el-id="" 824 style="background-color: ;" 825 > 826 <div class="modal-content"> 827 <div class="contact-form"> 828 <div class="contact-form__close close"></div> 829 <div class="contact-form__container"> 830 831 <form class="contact-form__form" data-type="contact-form" style="color: rgba(255, 255, 255, 1); background: rgba(156, 158, 143, 1); fill: rgba(255, 255, 255, 1);"> 832 <h5 class="lp-h5 contact-form__title1">Get in Touch</h5> 833 <div class="input-container"> 834 <input id="-cmp-name" name="name" type="text" class="lp-input lp-input--light contact-form__input" placeholder="Name" required> 835 <span class="input-icon"></span> 836 </div> 837 838 <div class="input-container"> 839 <input id="-cmp-email" name="email" type="email" class="lp-input lp-input--light contact-form__input" placeholder="Email" required pattern="[a-zA-Z0-9.!#$%&â*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+"> 840 <span class="input-icon"></span> 841 </div> 842 843 <div class="input-container"> 844 <input id="-cmp-phone" name="phone" type="tel" class="lp-input lp-input--light contact-form__input" placeholder="Phone" required> 845 <span class="input-icon"></span> 846 </div> 847 848 <div class="input-container"> 849 <textarea id="-cmp-contactMessage" placeholder="Message" name="message" required type="text" class="lp-input lp-input--light contact-form__input"></textarea> 850 <span class="input-icon"></span> 851 </div> 852 853 <div class="h-pot"> 854 <label for="-cmp-middleName">Middle Name</label> 855 <input id="-cmp-middleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 856 </div> 857 858 <div class="lp-disclaimer"> <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label> 859 <label class='lp-tcr-content'> 860 <span class='lp-tcr-checkbox'> 861 <input 862 type='checkbox' 863 id='-termsAccepted' 864 name='termsAccepted' 865 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 866 oninput="this.setCustomValidity('')" 867 required 868 /></span> 869 <span class='lp-tcr-message'> 870 871 I agree to be contacted by 872 Allison Ziefert Real Estate Group 873 via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 874 You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. 875 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. 876 </span> 877 </label> 878 879 </div> 880 881 <input type="hidden" name="source" value="CONTACT_INQUIRY"> 882 <button class="contact-form__submit btn lp-btn lp-btn--filled button-style-2" type="submit"> 883
884 <span class="sync-icon lp-i--spin"> 885 <svg width="20" height="15" viewBox="0 0 20 15" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 886 <path d="M16.3636 3.66667L12.7273 7.33333H15.4545C15.4545 10.3675 13.0091 12.8333 10 12.8333C9.08182 12.8333 8.20909 12.6042 7.45455 12.1917L6.12727 13.53C7.24545 14.245 8.57273 14.6667 10 14.6667C14.0182 14.6667 17.2727 11.385 17.2727 7.33333H20L16.3636 3.66667ZM4.54545 7.33333C4.54545 4.29917 6.99091 1.83333 10 1.83333C10.9182 1.83333 11.7909 2.0625 12.5455 2.475L13.8727 1.13667C12.7545 0.421666 11.4273 0 10 0C5.98182 0 2.72727 3.28167 2.72727 7.33333H0L3.63636 11L7.27273 7.33333H4.54545Z" /> 887 </svg> 888 </span> 889 890 <span class="success-icon"> 891 <svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 892 <path d="M10 0C4.48 0 0 4.48 0 10C0 15.52 4.48 20 10 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 10 0ZM10 18C5.59 18 2 14.41 2 10C2 5.59 5.59 2 10 2C14.41 2 18 5.59 18 10C18 14.41 14.41 18 10 18ZM14.59 5.58L8 12.17L5.41 9.59L4 11L8 15L16 7L14.59 5.58Z" /> 893 </svg> 894 </span> 895 896 Submit<span class="success-text">ted</span> 897 </button> 898 </form> 899 900 <div class="contact-form__details"> 901 <h5 class="lp-h5 contact-form__title2">Contact Details</h5> 902 <div class="company"> 903 <div class="company_contact lp-a"> 904 <p><strong>Allison Ziefert Real Estate Group</strong></p> 905 <p><a href="tel:9177510448" target="_blank" rel="noopener">(917) 751-0448</a></p> 906 <p><a href="/cdn-cgi/l/email-protection#fa929f969695ba94909c8895979b8e9580d4999597" target="_blank" rel="noopener"><span class="__cf_email__" data-cfemail="f098959c9c9fb09e9a96829f9d91849f8ade939f9d">[email protected]</span> </a></p> 907 <p><br><br></p> 908 <p>378-380 Millburn Ave., 2nd Floor, Millburn, NJ 07041<br>113 Grove St, <span class="fMYBhe">Montclair, NJ 07042<br>1776 On The Green, Morristown, NJ 07960</span></p> 909 </div> 910 </div> 911 912 <div class="socials"> 913 <ul class="lp-socials social_icons-style-1 lp-socials socials--theme-1"> 914 915 <li> 916 <a 917 href="https://www.instagram.com/njfromatoz/" 918 class="lp-socials__link lp-socials__link" 919 data-wow-delay="0s" 920 target="_blank" 921 aria-label="INSTAGRAM" 922 > 923 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 924 </a> 925 </li> 926 <li> 927 <a 928 href="https://www.linkedin.com/in/allisonziefert/" 929 class="lp-socials__link lp-socials__link" 930 data-wow-delay="0.1s" 931 target="_blank" 932 aria-label="LINKEDIN" 933 > 934 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 935 </a> 936 </li> 937 <li> 938 <a 939 href="https://www.youtube.com/@njfromatoz/featured" 940 class="lp-socials__link lp-socials__link" 941 data-wow-delay="0.2s" 942 target="_blank" 943 aria-label="YOUTUBE" 944 > 945 <span class="lp-i lp-i--youtube" aria-hidden="true"></span> 946 </a> 947 </li> 948 <li> 949 <a 950 href="https://www.google.com/search?q=Allison+Ziefert+realtor&rlz=1C1VDKB_enPH1045PH1045&oq=Allison+Ziefert+realtor&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg9MgYIAhBFGDzSAQk0NTkyajBqMTWoAgiwAgHxBe38LS_e99po&sourceid=chrome&ie=UTF-8#lrd=0x89c3ac44e59ca929:0xe5947d912e97eba9,1,,,," 951 class="lp-socials__link lp-socials__link" 952 data-wow-delay="0.3s" 953 target="_blank" 954 aria-label="GOOGLE" 955 >
956 <span class="lp-i lp-i--google" aria-hidden="true"></span> 957 </a> 958 </li> 959 <li> 960 <a 961 href="https://www.zillow.com/profile/Allison%20Ziefert" 962 class="lp-socials__link lp-socials__link" 963 data-wow-delay="0.4s" 964 target="_blank" 965 aria-label="ZILLOW" 966 > 967 <span class="lp-i lp-i--zillow" aria-hidden="true"></span> 968 </a> 969 </li> 970 <li> 971 <a 972 href="https://www.compass.com/agents/allison-ziefert-real-estate-group/" 973 class="lp-socials__link lp-socials__link" 974 data-wow-delay="0.5s" 975 target="_blank" 976 aria-label="BROKERAGE" 977 > 978 <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> 979 </a> 980 </li> 981 </ul> </div> 982 </div> 983 </div> 984 </div> 985 <!-- version 1 --> 986 </div> 987 <button class="close lp-close" type="button" aria-label="close modal"> 988 <span class="lp-close-icon" aria-hidden="true"></span> 989 </button> 990 </div> 991 <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;"> 992 <style> 993 #qualifying-questions-modal .custom-select-toggle { 994 border: 1px solid #848484; 995 border-radius: 8px; 996 padding: 12px 16px; 997 } 998 999 #qualifying-questions-modal .custom-select-toggle.is-placeholder { 1000 color: #848484; 1001 } 1002 1003 #qualifying-questions-modal #qualifying-questions-modal-phoneNumber::placeholder { 1004 color: #848484; 1005 opacity: 1; 1006 } 1007 1008 #qualifying-questions-modal .disclaimer-more { 1009 display: none; 1010 } 1011 1012 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-more { 1013 display: inline; 1014 } 1015 1016 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-ellipsis { 1017 display: none; 1018 } 1019 </style>
vendor: 119 bytes, lines 1019-1020
1019 1020 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
1020<script> 1021 function toggleDisclaimerQualifyingQuestionsModal() { 1022 const disclaimerText = document.getElementById('qualifying-questions-modal-disclaimer-text'); 1023 const toggleButton = document.getElementById('qualifying-questions-modal-toggle-disclaimer'); 1024 1025 if (disclaimerText.classList.contains('collapsed')) { 1026 disclaimerText.classList.remove('collapsed'); 1027 toggleButton.textContent = 'Read less'; 1028 toggleButton.setAttribute('aria-expanded', 'true'); 1029 } else { 1030 disclaimerText.classList.add('collapsed'); 1031 toggleButton.textContent = 'Read more'; 1032 toggleButton.setAttribute('aria-expanded', 'false'); 1033 } 1034 } 1035 </script>
1035 1036 <div style="max-width: 400px; width: 95%; margin: 0 auto;"> 1037 <div style="background: #fff; border: none; border-radius: 16px; color: black; box-shadow: none; position: relative;"> 1038 <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;"> 1039 <span aria-hidden="true">×</span> 1040 </button> 1041 <div style="padding: 40px 30px 32px;"> 1042 <div style="text-align: left; margin-bottom: 32px;"> 1043 <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;"> 1044 Thanks, please provide more information to help serve you 1045 </h2> 1046 </div> 1047 <form id="qualifying-questions-modal-form" data-type="contact-form"> 1048 <input type="hidden" name="source" value="PROFILE_UPDATE" /> 1049 <input type="hidden" name="email" value="" id="qualifying-questions-modal-email" /> 1050 <input type="hidden" name="triggerSource" id="qualifying-questions-modal-triggerSource" value="" /> 1051 <label for="qualifying-questions-modal-email" style="display:none;"> 1052 Email 1053 </label> 1054 <label for="qualifying-questions-modal-triggerSource" style="display:none;"> 1055 Trigger Source 1056 </label> 1057 1058 <div style="margin-bottom: 20px;"> 1059 <label for="qualifying-questions-modal-phoneNumber" style="display:none;"> 1060 Phone Number 1061 </label> 1062 <input 1063 type="tel" 1064 id="qualifying-questions-modal-phoneNumber" 1065 name="phoneNumber" 1066 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;" 1067 pattern="^\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}$" 1068 required 1069 placeholder="Phone" 1070 aria-label="Phone Number" 1071 inputmode="tel" 1072 autocomplete="tel" 1073 onfocus="this.style.borderColor='black';" 1074 onblur="this.style.borderColor='#848484';" 1075 /> 1076 </div> 1077 1078 <div style="margin-bottom: 20px;"> 1079 <label for="qualifying-questions-modal-interest" style="display:none;"> 1080 Interest 1081 </label> 1082 <select 1083 id="qualifying-questions-modal-interest" 1084 name="interest" 1085 required 1086 data-label="Interest" 1087 aria-label="Interest" 1088 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;" 1089 onfocus="this.style.borderColor='black'; this.style.color='black';" 1090 onblur="this.style.borderColor='#848484'; if(this.value === '') this.style.color='#848484'; else this.style.color='black';" 1091 > 1092 <option value="" style="background: #fff; color: #848484;" disabled selected>Interested in...</option> 1093 <option value="Selling & Buying" style="background: #fff; color: black;">Selling & Buying</option> 1094 <option value="Selling" style="background: #fff; color: black;">Selling</option> 1095 <option value="Buying" style="background: #fff; color: black;">Buying</option> 1096 <option value="Renting" style="background: #fff; color: black;">Renting</option> 1097 <option value="Other" style="background: #fff; color: black;">Other</option> 1098 </select> 1099 </div> 1100 1101 <div style="margin-bottom: 32px; font-size: 12px; line-height: 1.2;"> 1102 <label style='display: none;' for='qualifying-questions-modal-qualifying-questions-termsAccepted'>Opt In/Disclaimer Consent:</label> 1103 <label class='lp-tcr-content'>
1104 <span class='lp-tcr-checkbox'> 1105 <input 1106 type='checkbox' 1107 id='qualifying-questions-modal-qualifying-questions-termsAccepted' 1108 name='termsAccepted' 1109 aria-describedby='qualifying-questions-modal-disclaimer-text' 1110 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 1111 oninput="this.setCustomValidity('')" 1112 required 1113 /></span> 1114 <span class='lp-tcr-message'> 1115 <div id="qualifying-questions-modal-disclaimer-text" class="collapsed" style="color: #848484;"> 1116 1117 I agree to be contacted by 1118 <strong>Allison Ziefert Real Estate Group</strong> 1119 via call, email, and text <span class="disclaimer-more">for real estate services. 1120 To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 1121 You can also click the unsubscribe link in the emails. 1122 Message and data rates may apply. Message frequency may vary.</span> 1123 <span class="disclaimer-ellipsis">...</span> 1124 <a href='/terms-and-conditions' target='_blank' rel='noopener noreferrer' style='text-decoration: underline;'>Privacy Policy</a>. 1125 </div> 1126 <button 1127 id="qualifying-questions-modal-toggle-disclaimer" 1128 type="button" 1129 style="background: none; border: none; color: #848484; font-size: inherit; font-weight: bold; padding: 0; margin-top: 4px; cursor: pointer;" 1130 aria-expanded="false" 1131 onclick="toggleDisclaimerQualifyingQuestionsModal()" 1132 > 1133 Read more 1134 </button> 1135 </span> 1136 </label> 1137 </div> 1138 1139 <div> 1140 <button 1141 type="submit" 1142 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;" 1143 onmouseover="this.style.background='transparent'; this.style.color='black';" 1144 onmouseout="this.style.background='black'; this.style.color='white';" 1145 > 1146 Submit 1147 </button> 1148 </div> 1149 </form> 1150 </div> 1151 </div> 1152 </div> 1153 </div> 1154 1155
1155<script> 1156 (function() { 1157 var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy")); 1158 1159 if ("IntersectionObserver" in window && lazyVideos.length > 0) { 1160 var lazyVideoObserver = new IntersectionObserver(function(entries, observer) { 1161 entries.forEach(function(video) { 1162 if (video.isIntersecting) { 1163 for (var source in video.target.children) { 1164 var videoSource = video.target.children[source]; 1165 if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") { 1166 videoSource.src = videoSource.dataset.src; 1167 } 1168 } 1169 1170 video.target.load(); 1171 video.target.classList.remove("lazy"); 1172 lazyVideoObserver.unobserve(video.target); 1173 } 1174 }); 1175 }); 1176 1177 lazyVideos.forEach(function(lazyVideo) { 1178 lazyVideoObserver.observe(lazyVideo); 1179 }); 1180 } 1181 })(); 1182 </script>
1182 1183 1184 <!-- Global site tag (gtag.js) - Google Analytics --> 1185
1185<script defer src="https://www.googletagmanager.com/gtag/js"></script>
1185 1186 1187 <!-- Google Tag Manager --> 1188
1188<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 1189 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 1190 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.async=false;j.src= 1191 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 1192 })(window,document,'script','dataLayer','GTM-T9SFQGHZ');</script>
1192 1193 <!-- End Google Tag Manager --> 1194 1195 1196 <!-- LP Tracker (divolte.js) - LP Divolte --> 1197
1197<script>window.divolteLp=window.divolteLp||function(){(divolteLp.q=divolteLp.q||[]).push(arguments)}</script>
1197 1198 <!-- LP Tracker (eventBus) - LP EventBus --> 1199
1199<script>window.eventBusLp=window.eventBusLp||function(){(eventBusLp.q=eventBusLp.q||[]).push(arguments)}</script>
1199 1200 1201
1201<script> 1202 window.dataLayer = window.dataLayer || []; 1203 document.sendGoogleTagManagerEvent = function() { 1204 /* Honor GPC-enabled browsers and prevent GTM event if GPC is enabled. More details: https://global-privacy-control.glitch.me/ */ 1205 if (window.navigator.globalPrivacyControl) { 1206 return; 1207 } 1208 1209 dataLayer.push(arguments); 1210 } 1211 1212 document.sendGoogleTagManagerEvent('js', new Date()); 1213 document.sendGoogleTagManagerEvent('config', 'G-2F54L7HCW5', { page: location.pathname, location: location.href }); 1214 document.sendGoogleAnalyticsEvent = function(googleEvent) { 1215 document.sendGoogleTagManagerEvent('event', googleEvent.eventAction || googleEvent.hitType, { 1216 event_category: googleEvent.eventCategory, 1217 event_label: googleEvent.eventLabel, 1218 value: googleEvent.eventValue, 1219 page: googleEvent.page, 1220 location: googleEvent.location 1221 }) 1222 }; 1223 1224 document.addEventListener("DOMContentLoaded", function() { 1225 (function() { 1226 //If the page has an element with ID of auto-year-update the element will be populated with the current year. 1227 var date = new Date(); 1228 var elements = document.getElementsByClassName('auto-year-update'); 1229 var i; 1230 for (i = 0; i < elements.length; i++) { 1231 elements[i].innerText = date.getFullYear(); 1232 } 1233 })(); 1234 if (window.divolteLp) { 1235 window.divolteLp('sendLpPageView', {}); 1236 } 1237 if (window.eventBusLp) { 1238 window.eventBusLp('sendLpPageView', {}); 1239 } 1240 }); 1241 </script>
1241 1242 1243 1244
1244<script> 1245 // Function to dynamically load a script 1246 function loadScript(url, callback) { 1247 var script = document.createElement('script'); 1248 script.type = 'text/javascript'; 1249 script.src = url; 1250 script.defer = true; 1251 script.async = true; 1252 script.onload = callback; 1253 document.head.appendChild(script); 1254 } 1255 1256 // Function to dynamically load CSS file 1257 function loadCSS(url) { 1258 var link = document.createElement("link"); 1259 link.rel = "stylesheet"; 1260 link.href = url; 1261 document.head.appendChild(link); 1262 } 1263 1264 // Global methods / variables that can be accessed by element js 1265 window.luxuryPresence = { 1266 libs: { 1267 loadJs: loadScript, 1268 loadCss: loadCSS, 1269 jsLibsMap: { 1270 paroller: { 1271 jsSrc: 'https://d1e1jt2fj4r8r.cloudfront.net/javascript/jquery.paroller.min.js', 1272 isLoaded: false, 1273 }, 1274 ionRangeSlider: { 1275 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js', 1276 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css', 1277 isLoaded: false, 1278 requires: ['jquery'], 1279 }, 1280 splide: { 1281 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/js/splide.min.js', 1282 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/css/splide-core.min.css', 1283 isLoaded: false, 1284 }, 1285 wow: { 1286 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js', 1287 isLoaded: false, 1288 }, 1289 jquery: { 1290 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js', 1291 isLoaded: false, 1292 }, 1293 slick: { 1294 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js', 1295 isLoaded: false, 1296 requires: ['jquery'], 1297 }, 1298 libphonenumber: { 1299 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.11.8/libphonenumber-js.min.js', 1300 isLoaded: false, 1301 }, 1302 }, 1303 }, 1304 }; 1305 </script>
1305 1306
1306<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>
1306 1307
1307<script defer src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.8/handlebars.min.js"></script>
1307 1308
1308<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/handlebars-intl.min.js"></script>
1308 1309
1309<script defer src="https://cdnjs.cloudflare.com/ajax/libs/superagent/4.1.0/superagent.min.js"></script>
1309 1310
1310<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>
1310 1311
1311<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>
1311 1312
1312<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>
1312 1313 1314 <!-- GOOGLE TRANSLATE SCRIPT --> 1315
1315<script> 1316 function googleTranslateElementInit() { 1317 // list of languages can be overridden by setting window.customLanguages in the head JS. example `window.customLanguages = 'en,de,fr,ro,sk,pl'` 1318 // Language codes can be taken from here https://cloud.google.com/translate/docs/languages 1319 const DEFAULT_LANGUAGES = 'en,es,zh-CN,zh-TW,tl,vi,ar,ko,ru,de,fr,hi,pt'; 1320 document.querySelectorAll('[data-type="TRANSLATE"]').forEach(function(translate){ 1321 translate.innerText = ''; 1322 new google.translate.TranslateElement({ 1323 pageLanguage: 'en', 1324 layout: google.translate.TranslateElement.InlineLayout.SIMPLE, 1325 includedLanguages: window.customLanguages || DEFAULT_LANGUAGES, 1326 }, translate); 1327 }); 1328 } 1329 </script>
1329 1330
1330<script defer src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
1330 1331
1331<script defer src="https://accounts.google.com/gsi/intermediate"></script>
1331 1332 1333 <!-- GOOGLE TRANSLATE SCRIPT END--> 1334
1334<script> 1335 1336 // UI helpers 1337 (function () { 1338 1339 function getSideMenu () { 1340 return document.querySelector('body > div.sidemenu'); 1341 } 1342 1343 function sideMenuHide (instant) { 1344 var sideMenu = getSideMenu(); 1345 if (!sideMenu || !sideMenu.classList.contains('visible')) { 1346 return; 1347 } 1348 sideMenu.classList.remove('visible'); 1349 sideMenu.dispatchEvent(new CustomEvent('lpui-hide', { detail: { instant: !!instant } })); 1350 window.dispatchEvent(new CustomEvent('lpui-sidemenu-hide', { detail: {instant: !!instant} })); 1351 } 1352 1353 function sideMenuShow () { 1354 var sideMenu = getSideMenu(); 1355 if (!sideMenu || sideMenu.classList.contains('visible')) { 1356 return; 1357 } 1358 sideMenu.classList.add('visible'); 1359 sideMenu.dispatchEvent(new Event('lpui-show')); 1360 window.dispatchEvent(new Event('lpui-sidemenu-show')); 1361 } 1362 1363 function sideMenuToggle () { 1364 var sideMenu = getSideMenu(); 1365 if (!sideMenu) { 1366 return; 1367 } 1368 var isSideMenuVisible = sideMenu.classList.contains('visible'); 1369 if (isSideMenuVisible) { 1370 sideMenuHide(); 1371 } else { 1372 sideMenuShow(); 1373 } 1374 } 1375 1376 var scrollLockRequests = {}; 1377 window.__debug_scrollLockRequests = scrollLockRequests; 1378 var hideScrollStyles = ''+ 1379 'body {'+ 1380 'overflow: hidden;' + 1381 '}'; 1382 var hideScrollId = 'hide-body-scroll-style'; 1383 1384 function scrollLock () { 1385 var style = document.createElement('style'); 1386 style.id = hideScrollId; 1387 style.textContent = hideScrollStyles; 1388 document.head.appendChild(style); 1389 window.dispatchEvent(new Event('lpui-scroll-locked')); 1390 } 1391 1392 function scrollUnlock () { 1393 document.getElementById(hideScrollId)?.remove(); 1394 window.dispatchEvent(new Event('lpui-scroll-unlocked')); 1395 } 1396 1397 function requestScrollLock (lockId) { 1398 var wasLocked = Object.keys(scrollLockRequests).length > 0; 1399 scrollLockRequests[lockId || '__anonymous_lock'] = true; 1400 if (!wasLocked) { 1401 scrollLock(); 1402 } 1403 } 1404 1405 function releaseScrollLock (lockId) { 1406 if (lockId) { 1407 delete scrollLockRequests[lockId]; 1408 if (!Object.keys(scrollLockRequests).length) { 1409 scrollUnlock(); 1410 } 1411 } else { 1412 scrollLockRequests = {}; 1413 window.__debug_scrollLockRequests = scrollLockRequests; 1414 scrollUnlock(); 1415 } 1416 } 1417 1418 function showModal (modalId, options) { 1419 var modal = document.getElementById(modalId); 1420 if (!modal) { 1421 return; 1422 } 1423 1424 if (!modal.classList.contains('visible')) { 1425 modal.classList.add('visible'); 1426 if (options && options.scrollLock) { 1427 window.lpUI.requestScrollLock(modalId); 1428 } 1429 modal.dispatchEvent(new Event('lpui-show')); 1430 window.dispatchEvent(new CustomEvent('lpui-modal-show', { detail: { id: modalId } })); 1431 } 1432 1433 const visibleModals = document.querySelectorAll('.modal.visible'); 1434 1435 if (visibleModals.length > 1) { 1436 1437 const maxZIndex = Array.from(visibleModals).reduce((maxZIndex, modal) => { 1438 const zIndex = window.getComputedStyle(modal).zIndex; 1439 const parsedZIndex = zIndex !== 'auto' ? parseInt(zIndex) : 0; 1440 return Math.max(maxZIndex, parsedZIndex); 1441 }, 0); 1442 1443 modal.style.zIndex = maxZIndex + 1; 1444 } 1445 1446 } 1447 1448 function _hideModal (modalEl) { 1449 if (!modalEl) { 1450 return; 1451 } 1452 if (!modalEl.classList.contains('visible')) { 1453 return; 1454 } 1455 modalEl.classList.remove('visible'); 1456 modalEl.style.zIndex = '';
1457 modalEl.dispatchEvent(new Event('lpui-hide')); 1458 var modalId = modalEl.getAttribute('id'); 1459 if (modalId) { 1460 window.lpUI.releaseScrollLock(modalId); 1461 window.dispatchEvent(new CustomEvent('lpui-modal-hide', { detail: { id: modalId } })); 1462 } 1463 } 1464 1465 function hideModal (modalId) { 1466 _hideModal(document.getElementById(modalId)); 1467 } 1468 1469 function hideClosestModal (el) { 1470 const modal = el?.closest('.modal'); 1471 if (!modal) { 1472 return; 1473 } 1474 if (modal.classList) { 1475 _hideModal(modal); 1476 return; 1477 } 1478 if (modal.length && modal[0].classList) { 1479 _hideModal(modal[0]); 1480 } 1481 } 1482 1483 window.lpUI = { 1484 sideMenuHide: sideMenuHide, 1485 sideMenuShow: sideMenuShow, 1486 sideMenuToggle: sideMenuToggle, 1487 requestScrollLock: requestScrollLock, 1488 releaseScrollLock: releaseScrollLock, 1489 showModal: showModal, 1490 hideModal: hideModal, 1491 hideClosestModal: hideClosestModal 1492 } 1493 })(); 1494 1495 var stringifyPrimitive = function(v) { 1496 switch (typeof v) { 1497 case 'string': 1498 return v; 1499 1500 case 'boolean': 1501 return v ? 'true' : 'false'; 1502 1503 case 'number': 1504 return isFinite(v) ? v : ''; 1505 1506 default: 1507 return ''; 1508 } 1509 }; 1510 1511 function objectToQuerystring(obj, sep, eq, name) { 1512 // https://github.com/Gozala/querystring/blob/master/encode.js 1513 sep = sep || '&'; 1514 eq = eq || '='; 1515 if (obj === null) { 1516 obj = undefined; 1517 } 1518 1519 if (typeof obj === 'object') { 1520 return Object.keys(obj).map(function(k) { 1521 var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; 1522 if (Array.isArray(obj[k])) { 1523 return obj[k].map(function(v) { 1524 return ks + encodeURIComponent(stringifyPrimitive(v)); 1525 }).join(sep); 1526 } else { 1527 return ks + encodeURIComponent(stringifyPrimitive(obj[k])); 1528 } 1529 }).filter(Boolean).join(sep); 1530 1531 } 1532 1533 if (!name) return ''; 1534 return encodeURIComponent(stringifyPrimitive(name)) + eq + 1535 encodeURIComponent(stringifyPrimitive(obj)); 1536 } 1537 1538 function getPath(url, options) { 1539 var parser = document.createElement('a'); 1540 parser.href = url || ''; 1541 var path = parser.pathname || ''; 1542 if (path[0] !== '/') { 1543 // IE does not return path starting with a slash 1544 path = '/' + path; 1545 } 1546 1547 if (options && options.queryString) { 1548 path += parser.search; 1549 } 1550 1551 return path; 1552 } 1553 1554 function getMLSAutocomplete(keyword) { 1555 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 1556 var query = { 1557 kind: 'listings', 1558 query: keyword 1559 }; 1560 1561 return superagent 1562 .get(searchURL) 1563 .query(query) 1564 .then(function(res) { 1565 var data = res.body || []; 1566 // Array of listing_auto_complete documents: id, display_address, city, state, 1567 // price, sold_price, status, status_modified_at, photo_urls (array of URLs). 1568 1569 return data; 1570 }); 1571 } 1572 1573 function getMLSAutocompleteWithFilters(keyword, filters = {}) { 1574 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 1575 1576 return superagent 1577 .get(searchURL) 1578 .query({ kind: 'listings', query: keyword, ...filters }) 1579 .then(function(res) { 1580 // Same response shape as getMLSAutocomplete. 1581 return res.body || []; 1582 }); 1583 } 1584 1585 function makeMlsLink(data) { 1586 // Code Dupe from utils/googlePlace 1587 // mapping of google data type to mls data type 1588 var mapping = { 1589 neighborhood: 'neighborhood', 1590 locality: 'place', 1591 administrative_area_level_2: 'county', 1592 administrative_area_level_1: 'state', 1593 postal_code: 'postalcode', 1594 }; 1595 1596 function _filterTypes(types) { 1597 return types.filter(function(type) { return type !== 'political' }); 1598 } 1599 1600 if (!data || !Object.keys(data).length) { 1601 return '/home-search/listings'; 1602 } 1603 1604 var newData = {};
1605 _filterTypes(data.types).forEach(function(type) { 1606 if (mapping[type]) { 1607 newData.search_type = mapping[type]; 1608 } 1609 }); 1610 newData.omnibox = data.formatted_address; 1611 data.address_components.forEach(function(component) { 1612 _filterTypes(component.types).forEach(function(type) { 1613 if (mapping[type]) { 1614 newData[mapping[type]] = component.long_name; 1615 } 1616 }); 1617 }); 1618 var bounds = data.geometry.bounds; 1619 var convertedData = Object.assign(bounds, newData); 1620 1621 return '/home-search/listings?' + objectToQuerystring(convertedData); 1622 } 1623 1624 function debounce(func, wait) { 1625 let timeout; 1626 return function(...args) { 1627 const context = this; 1628 clearTimeout(timeout); 1629 timeout = setTimeout(() => func.apply(context, args), wait) 1630 } 1631 } 1632 1633 // Global methods / variables that can be accessed by element js 1634 window.luxuryPresence = { 1635 ...window.luxuryPresence, 1636 defaults: { 1637 companyId: 'b0108bde-2b87-474d-8bcd-d7fcfd16c5cc', 1638 apiGatewayUrl: '/api-gw', 1639 routerUrl: '/api-nv', 1640 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\
1640n }\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 $companyId: ID!\n $developmentIds: [ID!]\n $agentId: String\n $slug: String\n $search: String\n $tag: [String!]\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirection\n $neighborhoodId: ID\n $neighborhoodIds: [ID!]\n ) {\n developments (\n companyId: $companyId\n developmentIds: $developmentIds\n agentId: $agentId\n slug: $slug\n search: $search\n tag: $tag\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n ) {\n items {\n id\n name\n description\n descriptionShort\n slug\n createdAt\n updatedAt\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n logoMedia {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n websiteUrl\n videoUrl\n googlePlaceData\n coordinates\n mlsLink\n seoTitle\n seoDescription\n featuresAndAmenities {\n featureIds\n features {\n featureId\n name\n }\n description\n }\n latitude\n longitude\n addressLine1\n addressLine2\n city\n state\n zipCode\n country\n yearCompleted\n residences\n availability\n neighborhoodId\n developer\n architect\n interiorDesigner\n stories\n buildingHeight\n buildingHeightUnit\n bedMin\n bedMax\n bathMin\n bathMax\n livingSpaceMin\n livingSpaceMa
1640x\n livingSpaceUnit\n lotSizeMin\n lotSizeMax\n lotSizeUnit\n priceMin\n priceMax\n priceCurrency\n tags\n }\n total\n }\n }\n","pois":"\n query PointsOfInterest (\n $regionId: UUID!\n $radius: 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"}, 1641 propertyPlaceholderImage: {"id":"4d94deb4-51cf-42cc-aa43-81fa37e4b51b","alt":null,"bytes":62125,"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/1e323f03-efda-446d-91b0-6430cb26c8bc","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/1e323f03-efda-446d-91b0-6430cb26c8bc","authorUrl":null,"createdAt":"2025-03-10T18:36:49.361Z","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/1e323f03-efda-446d-91b0-6430cb26c8bc","sourceUrl":null,"updatedAt":"2025-03-10T18:36:49.361Z","xLargeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/1e323f03-efda-446d-91b0-6430cb26c8bc","__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/1e323f03-efda-446d-91b0-6430cb26c8bc","de
1641scription":null,"displayName":"property_placeholder-logo-1","originalUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/1e323f03-efda-446d-91b0-6430cb26c8bc","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/1e323f03-efda-446d-91b0-6430cb26c8bc","originalFileName":"Property_placeholder-logo (1)","cloudinaryPublicId":"1e323f03-efda-446d-91b0-6430cb26c8bc"} 1642 }, 1643 objectToQuerystring: objectToQuerystring, 1644 getPath: getPath, 1645 getMLSAutocomplete: getMLSAutocomplete, 1646 getMLSAutocompleteWithFilters: getMLSAutocompleteWithFilters, 1647 makeMlsLink: makeMlsLink, 1648 debounce: debounce, 1649 }; 1650 1651 var wowOffset = 100; 1652 </script>
1652 1653
1653<script> 1654 (()=>{function e(e){return e&&e.__esModule?e.default:e}var t=globalThis,r={},i={},s=t.parcelRequired4f7;null==s&&((s=function(e){if(e in r)return r[e].exports;if(e in i){var t=i[e];delete i[e];var s={id:e,exports:{}};return r[e]=s,t.call(s.exports,s,s.exports),s.exports}var o=Error("Cannot find module '"+e+"'");throw o.code="MODULE_NOT_FOUND",o}).register=function(e,t){i[e]=t},t.parcelRequired4f7=s);var o=s.register;o("ikl6F",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.formatMoney=e.exports.convertAmount=e.exports.fetchExchangeRates=e.exports.toSupportedToCurrency=e.exports.toSupportedFromCurrency=e.exports.SUPPORTED_TO_CURRENCIES=e.exports.SUPPORTED_FROM_CURRENCIES=e.exports.DISPLAY_CURRENCIES=e.exports.writeCurrencyCookie=e.exports.readValidCurrencyCookie=e.exports.readCurrencyCookie=e.exports.clearCurrencyCookie=e.exports.CURRENCY_COOKIE_SAME_SITE=e.exports.CURRENCY_COOKIE_PATH=e.exports.CURRENCY_COOKIE_NAME=e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS=void 0;var r=s("65bUu");Object.defineProperty(e.exports,"CURRENCY_COOKIE_MAX_AGE_SECONDS",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_MAX_AGE_SECONDS}}),Object.defineProperty(e.exports,"CURRENCY_COOKIE_NAME",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_NAME}}),Object.defineProperty(e.exports,"CURRENCY_COOKIE_PATH",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_PATH}}),Object.defineProperty(e.exports,"CURRENCY_COOKIE_SAME_SITE",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_SAME_SITE}}),Object.defineProperty(e.exports,"clearCurrencyCookie",{enumerable:!0,get:function(){return r.clearCurrencyCookie}}),Object.defineProperty(e.exports,"readCurrencyCookie",{enumerable:!0,get:function(){return r.readCurrencyCookie}}),Object.defineProperty(e.exports,"readValidCurrencyCookie",{enumerable:!0,get:function(){return r.readValidCurrencyCookie}}),Object.defineProperty(e.exports,"writeCurrencyCookie",{enumerable:!0,get:function(){return r.writeCurrencyCookie}});var i=s("gUuHZ");Object.defineProperty(e.exports,"DISPLAY_CURRENCIES",{enumerable:!0,get:function(){return i.DISPLAY_CURRENCIES}}),Object.defineProperty(e.exports,"SUPPORTED_FROM_CURRENCIES",{enumerable:!0,get:function(){return i.SUPPORTED_FROM_CURRENCIES}}),Object.defineProperty(e.exports,"SUPPORTED_TO_CURRENCIES",{enumerable:!0,get:function(){return i.SUPPORTED_TO_CURRENCIES}}),Object.defineProperty(e.exports,"toSupportedFromCurrency",{enumerable:!0,get:function(){return i.toSupportedFromCurrency}}),Object.defineProperty(e.exports,"toSupportedToCurrency",{enumerable:!0,get:function(){return i.toSupportedToCurrency}});var o=s("jCxYG");Object.defineProperty(e.exports,"fetchExchangeRates",{enumerable:!0,get:function(){return o.fetchExchangeRates}});var n=s("igUcG");Object.defineProperty(e.exports,"convertAmount",{enumerable:!0,get:function(){return n.convertAmount}}),Object.defineProperty(e.exports,"formatMoney",{enumerable:!0,get:function(){return n.formatMoney}})}),o("65bUu",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.readValidCurrencyCookie=e.exports.clearCurrencyCookie=e.exports.writeCurrencyCookie=e.exports.readCurrencyCookie=e.exports.CURRENCY_COOKIE_PATH=e.exports.CURRENCY_COOKIE_SAME_SITE=e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS=e.exports.CURRENCY_COOKIE_NAME=void 0;var r=s("gUuHZ");e.exports.CURRENCY_COOKIE_NAME="lp-currency",e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS=31536e3,e.exports.CURRENCY_COOKIE_SAME_SITE="Lax",e.exports.CURRENCY_COOKIE_PATH="/";let i=e=>e?.trim().toLowerCase().replace(/^\.+/,"")||void 0,o=e=>"undefined"!=typeof DOMException&&e instanceof DOMException,n=({document:t})=>{let r=`${e.exports.CURRENCY_COOKIE_NAME}=`;return t.cookie.split(";").map(e=>e.trim()).filter(e=>e.startsWith(r)).map(e=>e.slice(r.length))},a=e=>{try{return decodeURIComponent(e)}catch{return}};e.exports.readCurrencyCookie=e=>{let t=(e=>{try{return n(e)[0]}catch(e){if(!o(e))throw e;return}})(e);return void 0===t?void 0:a(t)};let l=(t,r,i,s)=>{var o;let n,a;t.document.cookie=`${e.exports.CURRENCY_COOKIE_NAME}=${r}${o=t.location,n="https:"===o.protocol?"; Secure":"",a=s?`; Domain=${s}`:"",`; Path=${e.exports.CURRENCY_COOKIE_PATH}; Max-Age=${i}; SameSite=${e.exports.CURRENCY_COOKIE_SAME_SITE}${n}${a}`}`};e.exports.writeCurrencyCookie=(t,s)=>{let a,d=(0,r.toSupportedToCurrency)(s);if(!d)return!1;let c=i(t.domain);try{if(a=n(t)[0],c&&l(t,"",0,void 0),l(t,encodeURIComponent(d),e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS,c),(0,e.exports.readCurrencyCookie)(t)===d)return!0}catch(e){if(!o(e))throw e}return c&&void 0!==a&&((t,r)=>{try{if(n(t).includes(r))return;l(t,r,e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS,void 0)}catch(e){if(!o(e))throw e}})(t,a),!1},e.exports.clearCurrencyCookie=e=>{let t=i(e.domain);try{t&&l(e,"",0,void 0),l(e,"",0,t)}catch(e){if(!o(e))throw e}},e.exports.readValidCurrencyCookie=(t,{enabled:s,enabledCurrencies:d})=>{if(!s)return;let c=(e=>{try{let t=n(e);if(!i(e.domain)||t.length<2)return t[0];return l(e,"",0,void 0),n(e)[0]}catch(e){if(!o(e))throw e;return}})(t);if(void 0===c)return;let u=new Set(d.map(r.toSupportedToCurrency).filter(e=>!!e)),h=(0,r.toSupportedToCurrency)(a(c));
1654if(h&&u.has(h))return h;(0,e.exports.clearCurrencyCookie)(t)}}),o("gUuHZ",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.toSupportedToCurrency=e.exports.SUPPORTED_TO_CURRENCIES=e.exports.DISPLAY_CURRENCIES=e.exports.toSupportedFromCurrency=e.exports.SUPPORTED_FROM_CURRENCIES=void 0,e.exports.SUPPORTED_FROM_CURRENCIES=["usd","cad","eur","gbp"];let r=(e,t)=>{if("string"!=typeof e)return;let r=e.toLowerCase();return t.includes(r)?r:void 0};e.exports.toSupportedFromCurrency=t=>r(t,e.exports.SUPPORTED_FROM_CURRENCIES),e.exports.DISPLAY_CURRENCIES=[{code:"usd",name:"US dollar"},{code:"eur",name:"Euro"},{code:"gbp",name:"Pound sterling"},{code:"cad",name:"Canadian dollar"},{code:"chf",name:"Swiss franc"},{code:"brl",name:"Brazilian real"},{code:"mxn",name:"Mexican peso"},{code:"sek",name:"Swedish krona"},{code:"nok",name:"Norwegian krone"},{code:"dkk",name:"Danish krone"},{code:"ars",name:"Argentine peso"},{code:"cop",name:"Colombian peso"},{code:"clp",name:"Chilean peso"},{code:"pen",name:"Peruvian sol"},{code:"dop",name:"Dominican peso"},{code:"gtq",name:"Guatemalan quetzal"},{code:"crc",name:"Costa Rican colón"},{code:"bob",name:"Bolivian boliviano"},{code:"pyg",name:"Paraguayan guaranÃ"},{code:"kyd",name:"Cayman Islands dollar"}],e.exports.SUPPORTED_TO_CURRENCIES=e.exports.DISPLAY_CURRENCIES.map(e=>e.code),e.exports.toSupportedToCurrency=t=>r(t,e.exports.SUPPORTED_TO_CURRENCIES)}),o("jCxYG",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.fetchExchangeRates=void 0;var r=s("gUuHZ");let i=async(e,{baseUrl:t,signal:i,fetch:s,onError:o})=>{let n=(0,r.toSupportedFromCurrency)(e);if(!n)return{};let a=`${t.replace(/\/$/,"")}/api/v1/exchange-rates?from=${encodeURIComponent(n)}`;try{let e=await (s??fetch)(a,{credentials:"omit",signal:i});if(!e.ok)throw Error(`Exchange rates HTTP ${e.status}`);var l=await e.json();let t=l?.rates;if("object"!=typeof t||null===t)return{};let o={};return Object.entries(t).forEach(([e,t])=>{let i=(0,r.toSupportedToCurrency)(e);i&&"number"==typeof t&&Number.isFinite(t)&&t>0&&(o[i]=t)}),o}catch(e){try{o?.(e)}catch(e){console.warn("fetchExchangeRates: onError callback threw",e)}return{}}};e.exports.fetchExchangeRates=i}),o("igUcG",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.formatMoney=e.exports.convertAmount=void 0;var r=s("gUuHZ");e.exports.convertAmount=(e,t)=>{if(Number.isFinite(e)&&Number.isFinite(t)&&!(t<=0))return e*t},e.exports.formatMoney=(e,t,{precision:i=0}={})=>{let s=(0,r.toSupportedToCurrency)(t);if(!s||!Number.isFinite(e))return;let o=Number.isInteger(i)?i:0,n=Number.isInteger(e)?0:Math.min(Math.max(o,0),20);return new Intl.NumberFormat("en-US",{style:"currency",currency:s.toUpperCase(),minimumFractionDigits:n,maximumFractionDigits:n}).format(e)}});var n={},a={};a={getVideoFirstFrame(e){let t="https://res.cloudinary.com/";if(!e||!e.startsWith(t))return null;let r=e.replace(t,"").replace("f_auto:video","f_auto").split("/");if(-1===r[1].toLowerCase().indexOf("video"))return null;let i=r[r.length-1];i.lastIndexOf(".")>-1?i=`${i.slice(0,i.lastIndexOf("."))}.jpg`:i+=".jpg",r[r.length-1]=i;let s=3;"videos"===r[1].toLowerCase()&&""!==r[2]&&(s=2);let o=/^(?:[a-z]{1,3}|\$\w+)_\S+$/;for(;s<r.length-1&&o.test(r[s]);)s++;return r.splice(s,0,"so_0,eo_0"),t+r.join("/")}};let l={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "},d=/&(?:amp|lt|gt|quot|apos|nbsp|#(?:[0-9]+|[xX][0-9a-fA-F]+));/y,c=/[<&]/g,u=/["'>]/g,h=/<\/p\s*>|<br\s*\/?>|[\r\n\u2028\u2029]/g;function p(e,t){let r="";for(let i=0;i<e.length;){c.lastIndex=i;let s=c.exec(e);if(!s){r+=e.slice(i);break}let o=s.index;r+=e.slice(i,o);let n="&"===e[o]?function(e,t){d.lastIndex=t;let r=d.exec(e);return{text:r?function(e){if("#"!==e[1])return l[e.slice(1,-1)];
1654let t="x"===e[2]||"X"===e[2],r=parseInt(e.slice(t?3:2,-1),t?16:10);return 0===r||r>1114111||r>=55296&&r<=57343?e:160===r?" ":String.fromCodePoint(r)}(r[0]):"&",end:r?d.lastIndex:t+1}}(e,o):function(e,t,r){let i=function(e,t){let r=null;u.lastIndex=t+1;let i=u.exec(e);for(;i;){let t=i[0];if(r)t===r&&(r=null);else if('"'===t||"'"===t)r=t;else if(">"===t)return u.lastIndex;i=u.exec(e)}return -1}(e,t);return{text:-1===i?"<":function(e,t,r,i){if(!i)return"";let s=e.slice(t,r);if(/^<br\s*\/?>$/.test(s))return" ";if(/^<\/p\s*>$/.test(s)){h.lastIndex=r;let t=h.exec(e);if(t&&"<"===t[0][0])return" "}return""}(e,t,i,r),end:-1===i?t+1:i}}(e,o,t);r+=n.text,i=n.end}return r}n=function(e,{isEqual:t}){let r=[{field:"thumbnailUrl",w:320},{field:"smallUrl",w:960},{field:"mediumUrl",w:1280},{field:"largeUrl",w:1920},{field:"xLargeUrl",w:2560},{field:"xxLargeUrl",w:3456}],i=function(e,t,r){let i="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 s="number"==typeof r?r:0,o=Number.isInteger(e)?0:s,n={minimumFractionDigits:o,maximumFractionDigits:o};return"USD"===t?`$${e.toLocaleString(i,n)}`:"CAD"===t?`$${e.toLocaleString(i,n)} CAD`:"EUR"===t?`\u{20AC}${e.toLocaleString(i,n)}`:"GBP"===t?`\xa3${e.toLocaleString(i,n)}`:"PERCENT"===t?`${e}%`:"number"==typeof r&&r>-1?e.toLocaleString(i,{maximumFractionDigits:r}):e.toLocaleString(i)},s=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""}},l=function(e,t){let r,i,a=t||{};switch(a.mode){case"short":r=o(e),i=a.frequencySeparator||"/";break;case"standard":case"std":r=n(e),i=a.frequencySeparator||"/";break;default:r=s(e),i=a.frequencySeparator||" "}return r?a.frequencyTag||a.frequencyClass?`${i}<${a.frequencyTag||"span"}${a.frequencyClass?` class="${a.frequencyClass}"`:""}>${r}</${a.frequencyTag||"span"}>`:i+r:""};return{isEmpty(e,t){let r=!e||"string"==typeof e&&!e.trim()||!Object.keys(e).length;return t.fn?r?t.fn(this):t.inverse(this):r},ifEquals(e,r,i){return t(e,r)?i.fn(this):i.inverse(this)},"raw-helper":function(e){return e.fn()},striptags:e=>e?p(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,""),!1):"",striptagsLineBreaks:e=>e?p(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,""),!0):"",truncate:(e,t,r)=>e?e.length>t?"string"==typeof r?e.slice(0,t-r.length)+r:e.slice(0,t):e:"",setSubArray(e=[],t,r,i,s){s.data.root[i]=e.slice(t,r)},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:s,formatFrequencyShort:o,lpFormatFrequency:(e,t)=>l(e,t&&t.hash),subArray(e,t,r,i){return e>=t&&e<r?i.fn(this):i.inverse(this)},formatPropertyStatus(e,t,r){let i="";switch(e){case"SOLD":i="Sold";break;case"FOR_SALE":i="For Sale";break;case"COMING_SOON":i="Coming Soon";break;case"INACTIVE":i="Inactive";break;case"POCKET_LISTING":i="Pocket Listing";break;case"PENDING":i="Pending";break;case"UNDER_CONTRACT":i="Under Contract";break;case"ACTIVE_UNDER_CONTRACT":i="Active Under Contract";break;default:i=e}return("Sold"===i||"Leased"===i)&&t&&"string"==typeof r&&r&&(i+=` on ${r}`),i},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 r="current"===e?new Date:new Date(e);if(Number.isNaN(r.getTime()))return"";if("YYYY"===t||"year"===t)return`${r.getFullYear()}`;if("MM/DD/YY"===t){let e=r.getMonth()+1;return e<10&&(e=`0${e.toString()}`),`${e}/${r.getDate()}/${r.getFullYear().toString().substr(-2)}`}return`${["January","February","March","April","May","June","July","August","September","October","November","December"][r.getMonth()]} ${r.getDate()}, ${r.getFullYear()}`},openHousesFormat(e,t,r){if(!e||!t)return"";let i=e=>{let t=e.getHours();t>12&&(t-=12);let r=`${t}:${e.getMinutes()>9?e.getMinutes():"0"+e.getMinutes()}`;return e.getHours()>11?r+="PM":r+="AM",r},s="",o=e,n=t;
1654r&&(o=new Date(e).toLocaleString("en-US",{timeZone:r}),n=new Date(t).toLocaleString("en-US",{timeZone:r}),[,,,s]=new Date(t).toLocaleString("en-US",{timeZone:r,timeZoneName:"short"}).split(" "));let a=new Date(o),l=a.toLocaleDateString("en-US"),d=i(a),c=i(new Date(n));return`${l} ${d} - ${c} ${s}`},math:(e,t,r)=>(e=parseFloat(e),({"+":e+(r=parseFloat(r)),"-":e-r,"*":e*r,"/":e/r,"%":e%r})[t]),findByKey(e,t,r,i){let s=(e||[]).find(e=>e[t]===r);return i.fn(s)},capitalize(e,t,r){let i;return"string"==typeof e&&e.length&&(i=e.toLowerCase().split(t).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ").toString()),i},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,r,i){let s="",o=null;i.data&&(o=e.createFrame(i.data));let n=(r||[]).filter(Boolean);if(n&&n.length){let e=0;s=n.reduce((r,s,n)=>{let a=(t||[]).find(e=>e.id===s);return a?(o&&(o.index=n-e),r+i.fn(a,{data:o})):(e+=1,r)},"")}else for(let e=0,r=(t||[]).length;e<r;e++)o&&(o.index=e),s+=i.fn(t[e],{data:o});return s},ifIn(e,t,r){return t&&t.indexOf(e)>-1?r.fn(this):r.inverse(this)},partial:(t,r)=>(e.registerPartial(t,e.compile(r.fn())),`
1654<script type="text/x-handlebars-template" class="${t} pagination-script">${r.fn()}<\/script>`),numCompare(e,t,r,i){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}})[r](e,t)?!i.fn||i.fn(this):!!i.fn&&i.inverse(this)},lpFormatNumber:i,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,r)=>e&&e.join?e.join("string"==typeof t?t:", "):"",dedupe(t,r,i){let s=null,o=0,n=new Set;return i.data&&(s=e.createFrame(i.data)),(t||[]).reduce((e,t,a)=>{let l=r?t[r]:t;return!n.has(l)||r&&void 0===l?(n.add(l),s&&(s.index=a-o),e+i.fn(t,{data:s})):(o+=1,e)},"")},JSONstringify:(e,t)=>JSON.stringify(e),formatPropertyPrice(...t){let r=t[t.length-1].hash,s=t.length>1?t[0]:r.property,o=r.precision||0;t.length>2&&(r.mode=t[1]),r.mode||(r.mode="short");let n=t.length>3?t[2]:r.separator;if("string"!=typeof n&&(n=" | "),s.isPasswordProtected)return"Exclusive Listing";let a=t.length>4?t[3]:r.priceUponRequestText;if("string"!=typeof a&&(a="Price Upon Request"),s.priceUponRequest)return a;let d=s.salesPrice,c=null;"SOLD"!==s.status&&"Leased"!==s.status&&s.reducedPrice&&(r.reducedClass?c=s.reducedPrice:d=s.reducedPrice);let u="";c&&(u+=`<${r.reducedTag||"span"} class="${r.reducedClass}">${i(c,s.currency,o)}</${r.reducedTag||"span"}>`),d&&(d=i(d,s.currency,o),r.priceTag||r.priceClass?u+=`<${r.priceTag||"span"}${r.priceClass?` class="${r.priceClass}"`:""}>${d}</${r.priceTag||"span"}>`:u+=d);let h=s.leasePrice&&i(s.leasePrice,s.currency,o);if(h){u&&(u+=n);let e=`${h}${l(s.leasePeriod,r)}`;r.leaseTag||r.leaseClass?u+=`<${r.leaseTag||"span"}${r.leaseClass?` class="${r.leaseClass}"`:""}>${e}</${r.leaseTag||"span"}>`:u+=e}
1654return new e.SafeString(u)},mediaImage(t,i={}){if(!t)return;let{lazy:s,...o}=i.hash,n="",a="";if("string"==typeof t)n=t;else{let e={},{height:s,width:l,altTagText:d}=t;r.forEach(r=>{t[r.field]&&!e[t[r.field]]&&(e[t[r.field]]=r.w)});let c=Object.keys(e);if(!c.length)return;if(d&&(o.alt=d),s&&l&&(s>=l&&(o.class?o.class+=" portrait":o.class="portrait"),"setDims"in i.hash&&(o.width=l,o.height=s)),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&&(a=c.map(t=>`${t} ${e[t]}w`).join(", "),c.sort((t,r)=>Math.abs(e[t]-1280)-Math.abs(e[r]-1280))),n=c[0]}delete o.setDims,a||delete o.sizes,"alt"in o||(o.alt=""),!("loading"in o)&&(i?.data?.root?.sectionIndex>1||s)&&(o.loading="lazy");let l=Object.keys(o).map(t=>`${e.escapeExpression(t)}="${e.escapeExpression(o[t])}"`).join(" ");return new e.SafeString(`<img src="${n}"${a?` srcset="${a}"`:""}${l?` ${l}`:""}>`)},bgImage:e=>e?"string"==typeof e?e:e.largeUrl||e.url||"":"",concat(...e){let t="";for(let r in e)null!==e[r]&&void 0!==e[r]&&"object"!=typeof e[r]&&(t+=e[r]);return t},setVideoExtension(e,t){if(!e||!t)return"";let r=new URL(e);if("res.cloudinary.com"!==r.host)return r.pathname.endsWith(`.${t}`)?e:"";let i=r.pathname.lastIndexOf("."),s=r.pathname;return -1!==i&&(s=r.pathname.substr(0,i)),r.pathname=`${s}.${t}`,r.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 r=`${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="${r}" type="video/${e.format}${e.htmlCodecs}">`}).join("\n")},cloudinaryVideoFirstFrame:a.getVideoFirstFrame,initials(e,t){if(!e)return"";t?.hash?.endChar&&(e=e.split(t.hash.endChar)[0]);let r=+t?.hash?.maxChars||2,i=e.match(/\b\w/g)?.slice(0,r);return i?(t?.hash?.addText&&(i=i.map(e=>e+t.hash.addText)),i.join(t?.hash?.joinWith||"").toUpperCase()):""},normalizePhone(e){if(!e)return"";let t=String(e).trim();return(t.startsWith("+")?"+":"")+t.replace(/\D/g,"")}}};class m{constructor(e,t,r){if(this.config=e,this.window=t,this.document=r,!this.destroy)throw Error("Controllers must implement a deconstructor")}}let g="lp_lead_form_conversion_fired";function y(e,t){if(e&&t&&"function"==typeof t.sendGoogleTagManagerEvent&&!function(e){try{return"true"===e.sessionStorage.getItem(g)}catch{return!1}}(e))try{t.sendGoogleTagManagerEvent("event","generate_lead");try{e.sessionStorage.setItem(g,"true")}catch{}}catch{}}function f(e){return!!e&&(!!e.expired||Date.now()>=e.expiresAt)}let b="/api/v1/home-valuation";class v extends m{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 r=t.indexOf(", call time frame:");return -1!==r&&(t=t.substring(0,r).trim()),t}_transformAddressComponents(e){let t=t=>(e.find(e=>e.componentType===t)||{}).componentName?.text,r={},i=t("street_number"),s=t("route"),o=t("administrative_area_level_1"),n=t("postal_code"),a=t("subpremise"),l=t("locality")||t("sublocality_level_1")||t("neighborhood");return i&&(r.streetNumber=i),s&&(r.streetName=s),l&&(r.city=l),o&&(r.state=o),n&&(r.zipcode=n),a&&(r.addressLine2=a),r}_extractAddressAndCoordinates(e){let t=null,r=null;if(e?.result){let{result:i}=e;i.address?.addressComponents&&(t=this._transformAddressComponents(i.address.addressComponents)),i.geocode?.location&&(r={latitude:i.geocode.location.latitude,longitude:i.geocode.location.longitude})}return{structuredAddress:t,coordinates:r}}_filterEmptyStrings(e){let t={};for(let[r,i]of Object.entries(e))""!==i&&null!=i&&(t[r]=i);return t}_getRawAddress(e){let t=e.activity.content||{},r=e.activity.comments_attributes?.[0]?.text;return[t.address,t["property-address"],t.property_address,t.Property_Address,r,t.message,t.homeValuationAddress,t.propertyAddress].map(e=>e&&this._cleanAddressString(e)).find(Boolean)||""}_logLeadEvent(e,t,r=null){let i={event:e,companyId:this.config.companyId,websiteId:this.config.websiteId,timestamp:new Date().toISOString(),hasEmail:!!t.activity?.author_email,hasAddress:!!this._getRawAddress(t)};if(r&&(i.errorMessage=r.userMessage||(r.status?`Request failed with status ${r.status}`:"An error occurred"),i.errorName=r.name,i.errorStatus=r.status),console.error(`[HomeValuation] ${e}`,JSON.stringify(i)),this.window.posthog)try{this.window.posthog.capture(e,i)}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
1654ontact 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,r,i){let s=this._formatStructuredAddress(r)||this._getRawAddress(e);if(!s)throw Error("Unable to extract home valuation address from form data");let o={companyId:e.companyId,homeValuationAddress:s,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},n={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
1654ourceResource,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||{}},a=this._filterEmptyStrings(n);return{...o,...a,...r&&{address:r},...i&&{coordinates:i}}}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 r=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(r,e),r.status=t,r}_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,r){let i=new AbortController,s=setTimeout(()=>i.abort(),1e4);try{let o=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),signal:i.signal});clearTimeout(s);let n=await o.text(),a=this._parseResponsePayload(n);if(!o.ok)throw this._createResponseError(a,o.status);if(a&&"success"===a.status&&a.redirectUrl){if(f(r))return a;if(!this._isSafeRedirectUrl(a.redirectUrl))return console.error("Home valuation: refusing redirect to unsupported protocol"),a;return this.window.location.href=a.redirectUrl,{redirected:!0,url:a.redirectUrl}}return a}catch(e){throw clearTimeout(s),e}}async _submitHomeValuationRequest(e){let t=this._resolveValuationApiBase();this._logLeadEvent("home_valuation_submission_started",e);try{let r=this._getRawAddress(e),i=null;try{i=await this._validateAddressSafely(r)}catch(t){throw this._logLeadEvent("home_valuation_address_validation_failed",e,t),t}let s=null;try{s=await this._getHomeValuationEstimateSafely(i)}catch(t){this._logLeadEvent("home_valuation_estimate_failed",e,t),s=null}let{structuredAddress:o,coordinates:n}=this._extractAddressAndCoordinates(i),a=`${t}${b}`,l=this._buildHomeValuationData(e,s,o,n),d=await this._submitLead(a,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:r}=this,i=t.googleMapsAPIKey;if(!i&&r.luxuryPresence?.mapApiLoader&&(i=await r.luxuryPresence.mapApiLoader.getMapApiKey()),!i)throw Error("Google Maps API key not configured");let s=new AbortController,o=setTimeout(()=>s.abort(),1e4);try{let t=await fetch(`https://addressvalidation.googleapis.com/v1:validateAddress?key=${i}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({address:{addressLines:[e]},enableUspsCass:!1}),signal:s.signal});if(clearTimeout(o),!t.ok){let e=Error(`Address validation failed: ${t.status}`);throw e.status=t.status,e}return t.json()}catch(e){throw clearTimeout(o),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()}${b}`;if(!e?.result?.address?.addressComponents)return null;let r=this._transformAddressComponents(e.result.address.addressComponents);if(!this._hasMandatoryAddressFields(r))return this._logMissingAddressFields(r),null;let i=this._buildAddressQueryString(r),s=`${t}?${i}`,o=new AbortController,n=setTimeout(()=>
1654o.abort(),1e4);try{let e=await fetch(s,{headers:{Accept:"application/json"},signal:o.signal});if(clearTimeout(n),!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(n),e}}}let w="middleName",E="redirect-pending",_=["name","firstName","lastName",w,"email","phone","phoneNumber","source","message","mlsId","sourceUrl"],S="lp_map_key_failed",C="oauthSuccess",I={cookieyes:{eventName:"cookieyes_consent_update",hasAnalyticsConsent:e=>(function(e){let t=e.cookie.match(/cookieyes-consent=([^;]+)/);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 A(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function x(e,t){t.forEach(t=>{let r=e[t];Array.isArray(r)&&0===r.length&&delete e[t]})}function R(e,t,r,i){let s=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])),o=i?.merge?s.flat():s.find(e=>e.length>0)??[];t.forEach(t=>{delete e[t]}),o.length>0&&(e[r]=[...new Set(o)])}function T(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 r=[...e.socialLinks].sort((e,t)=>{let r=e.type?.toLowerCase()||"",i=t.type?.toLowerCase()||"";return r.localeCompare(i)});t.socialLinks=r;let i={youtube:"urlYoutube",facebook:"urlFacebook",instagram:"urlInstagram",linkedin:"urlLinkedin",podcast:"urlPodcast",twitter:"urlTwitter"};r.forEach(e=>{let r=i[e.type?.toLowerCase()??""];r&&(t[r]=e.link)})}return t}function L(e){return e&&Array.isArray(e)?e.map(e=>T(e)):e}function k(e){let{region:t}=e;if(!A(t))return e;let{schools:r,pois:i,...s}=t,o={...s,schools:A(r)?r.data??[]:[],...Array.isArray(i)?{pois:i.map(e=>({...e,category:"string"==typeof e.category?e.category.toUpperCase():e.category}))}:{}};return{...e,region:o}}function M(e){return e&&Array.isArray(e)?e.map(e=>k(e)):e}function $(e){let t=e.featuresAndAmenities;if(!Array.isArray(t))return e;let r=t.map(e=>({featureIds:e.featureIds??[],features:e.features??[],description:e.description}));return{...e,featuresAndAmenities:r}}function U(e){return e&&Array.isArray(e)?e.map(e=>$(e)):e}function P(e,t){return A(e)?t(e):e}function O(e,t){return Array.isArray(e)?t(e):e}var N={};N=` 1655 query PropertyDisclaimers($input: PropertyDisclaimersInput!) { 1656 propertyDisclaimers(input: $input) { 1657 feedId 1658 listingId 1659 resolvedFromListing 1660 listingCardAttribution 1661 listingDetailCourtesy 1662 listingDetailFooter 1663 logo 1664 } 1665 } 1666`;let D={mlsAttribution:"listingCardAttribution",mlsLogo:"logo",listingDetailCourtesy:"listingDetailCourtesy",listingDetailFooter:"listingDetailFooter"};var F={};F=s("ikl6F");let B=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,this.currencyConversionEnabled=!1,this.enabledCurrencies=[]}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}setCurrencyConversion({enabled:e,enabledCurrencies:t}={}){this.currencyConversionEnabled=!0===e,this.enabledCurrencies=Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}setEventBus({enabled:e,apiKey:t,url:r}){this.eventBus={enabled:e,apiKey:t,url:r}}}({}),q=new class extends m{constructor(e,t,r){super(e,t,r),this.setLoginState=this.setLoginState.bind(this),this.pageId=null,this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}initialize(e){try{let{config:t,document:r}=this;this.pageId=t.pageId,this.modals=r.querySelectorAll("body > #modals >
1666 .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,r=new Date().getTime()+864e5,i=`modal-controller-${e}`;try{t.localStorage.setItem(i,JSON.stringify(r))}catch(e){}}setLoginState(){let{window:e}=this;try{e.localStorage.setItem("isSignedUp","true")}catch(e){}}getModalWithExpiry(e){let{window:t}=this,r=t.localStorage,i=r.getItem(`modal-controller-${e}`);if(!i)return!1;let s=JSON.parse(i);return!(new Date().getTime()>s)||(r.removeItem(`modal-controller-${e}`),!1)}show(e,t={}){let{window:r}=this,i=this.getModalWithExpiry(e);(e&&!i||!0===t.forced)&&(r.lpUI.showModal(`modal-${e}`,t),this.setModalWithExpiry(e))}_attachModalHandler(e){let{pageId:t}=this,{trigger:r,pageSpecific:i}=e;(!i||e.pages.map(e=>e.pageId).includes(t))&&("EXIT"===r?this._exitModalHandler(e):"TIMER"===r?this._timerModalHandler(e):"FORCED"===r&&this._forcedModalHandler(e))}_exitModalHandler(e){let t=this,{document:r,exitModalTriggered:i}=this,{modalId:s}=e;function o(e){!i[s]&&(e.toElement||e.relatedTarget||(t.show(s),i[s]=!0))}r.addEventListener("mouseout",o),this.exitModalEventListeners.push(o)}_timerModalHandler(e){let{modalId:t,timerDelay:r}=e;setTimeout(()=>{this.show(t)},r)}_forcedModalHandler(e){let{modalId:t}=e,{window:r,document:i}=this;if("true"!==r.localStorage.getItem("isSignedUp")){let e=i.querySelector(`#modal-${t}`),s=e?.querySelector("form"),o=s?.dataset.delay||2e3;s.addEventListener("formsubmitted",()=>{this.setLoginState()}),r.addEventListener("oauthSuccess",()=>{this.setLoginState(),s.classList.add("success"),setTimeout(()=>{r.lpUI.hideModal(`modal-${t}`),s.reset(),s.classList.remove("success")},o)}),this.show(t,{forced:!0})}}}(B,window,document),V=new class extends m{constructor(e,t,r){super(e,t,r),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:r}=this,i=e.target.closest("button, a");if(!i)return;let s=i.dataset.type||"",o=i.href||i.dataset.href||"",n=i.target||"",{submit:a}=i.dataset;if(a){try{await this._handleSubmit(i)}catch(e){console.error(e)}((e,t=!1)=>{if(e){if(t)return window.open(e);window.location.assign(e)}})(o,"_blank"===n)}if(this._trackConversion(i),"VIDEO"===s)return void this._handleVideoButton(i);if("CONTACT_US"===s)return void this._handleContactUsButton(i);if("SUBSCRIBE"===s)return void t.lpUI.showModal("modal-global-subscribe");if("MY_ACCOUNT"===s)return void t.lpUI.showModal("modal-global-my-account");if("SHARE_POPUP"===s){let t=i.querySelector(".share-popup");t&&(t.style.display="flex"),e.stopPropagation();return}if("MODAL_"===s.substring(0,6)){let e=s.substring(6);t.lpUI.showModal(`modal-${e}`);return}if(o?.startsWith("mailto:")){let e=o.substring(7);r.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Email",eventValue:e})}else if(o?.startsWith("tel:")){let e=o.substring(4);r.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Phone",eventValue:e})}}async _handleSubmit(e){let t=e.closest("form"),{window:r}=this;return t?await r.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[,r,i]=t,s=`https://player.vimeo.com/video/${r}?`;return i&&(s+=`h=${i}&`),s+="autoplay=1"}_handleVideoButton(e){let{document:t}=this,r=e.closest("section"),{src:i}=e.dataset,s="";if(i&&(i.includes("youtube.com")||i.includes("youtu.be"))&&!i.includes("youtube.com/embed")){let e=i.match(/(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v=)
1666)|youtu.be\/)([a-zA-Z0-9_-]{6,11})/);e&&(s=e[1])}let o=this._getVimeoSrc(i);if(s?i=`https://youtube.com/embed/${s}?autoplay=1&controls=0`:o&&(i=o),!i||!r)return;let n=i.endsWith(".mp4")||i.endsWith(".webm")||i.includes("cloudinary.com"),a=` 1667 <div id="modal-${r.id}" class="modal visible"> 1668 <div class="modal-content"> 1669 <div class="lightbox-video"> 1670 <div class="video-player"> 1671 <div class="embed-container"> 1672 ${n?`<video controls autoplay src="${i}"></video>`:`<iframe frameborder="0" allowfullscreen="1" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" width="100%" height="100%" src="${i}"></iframe>`} 1673 </div> 1674 </div> 1675 </div> 1676 </div> 1677 <button class="close lp-close" type="button" aria-label="close modal"><span class="lp-close-icon" aria-hidden="true"></span></button> 1678 </div> 1679 `;t.body.insertAdjacentHTML("beforeend",a);let l=t.getElementById(`modal-${r.id}`);l.querySelector(".close").addEventListener("click",()=>{l.remove()})}_handleContactUsButton(e){let{window:t,document:r}=this;r.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"contact"}),t.lpUI.showModal("modal-global-contact-us",{scrollLock:!0})}_trackConversion(e){let{window:t,document:r}=this,{gtagConversionId:i,gtagConversionLabel:s,fbEventName:o}=e.dataset;if(i&&s){t.dataLayer&&t.dataLayer.length&&(t.dataLayer.some(e=>e.length&&"config"===e[0]&&e[1]===i)||r.sendGoogleTagManagerEvent("config",i));let e=`${i}/${s}`;r.sendGoogleTagManagerEvent("event","conversion",{send_to:e})}t.fbq&&o&&t.fbq("track",o,{})}}(B,window,document),j=new class extends m{constructor(e,t,r){super(e,t,r),this.validatedForms=[]}initialize(e={}){try{let{window:t,document:r}=this,{selector:i}=e,s=[];if(s=i?r.querySelectorAll(`${i} form[data-type="contact-form"]`):r.querySelectorAll('form[data-type="contact-form"]'),r.querySelectorAll('input[type="tel"]').length&&!t.libphonenumber&&t?.luxuryPresence?.libs){let{loadJs:e,jsLibsMap:r}=t.luxuryPresence.libs,{libphonenumber:i}=r;e(i.jsSrc,this.attachValidation.bind(this,s))}else this.attachValidation(s);this.validatedForms=this.validatedForms.concat(s)}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 r=t.libphonenumber.isValidPhoneNumber;e.addEventListener("keyup",function(){if(this.hasAttribute("required")||this.value.replace(/\s/g,"").length)try{let e=this.value;r(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("")})}}}(B,window,document),H=new class extends m{constructor(e,t,r){super(e,t,r),this.forms=[],this.homeValuationService=new v(e,t,r)}initialize(e={}){try{let{document:t}=this,{selector:r}=e,i=[];(i=r?t.querySelectorAll(`${r} form[data-type="contact-form"]`):t.querySelectorAll('form[data-type="contact-form"]')).forEach(e=>{this._attachSubmitHandler(e)}),this.forms=this.forms.concat(i)}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),r={},i=[],s=/^name(?:-\d+)?$/;return t.forEach((e,t)=>{if("string"==typeof e){let o=e.trim();s.test(t)&&o&&i.push(o);let n=r[t];r[t]=n?`${n} ${o}`:o}else r[t]=e}),i.length?r.name=i.join(" ").trim():!r.name&&r.firstName&&(r.name=r.firstName,r.lastName&&(r.name+=` ${r.lastName}`)),this._deriveNameParts(r)}_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,r){let{window:i,config:s}=this,o=Object.keys(e).filter(e=>!_.includes(e)).reduce((t,r)=>(t[r]=e[r],t),{}),{pageId:n,companyId:a,websiteId:l,pageMeta:d}=s,c=i.localStorage.getItem("utm_vars")||"{}",u=i.localStorage.getItem("referrer")||"",h=this._getFormId(r);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:i.location.href,content:{...o,...JSON.parse(c)}},page:{pageId:n,companyId:a,websiteId:l,pageMeta:{...d,formId:h}},companyId:a,referrer:u,fields:t}}_handleSubmissionSuccess(e){let{window:t}=this,r=e.dataset.delay||2e3;e.classList.remove("loading"),e.classList.remove("error"),e.classList.add("success"),e.querySelectorAll(".success").forEach(e
1679=>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")},r)}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 r=this._getFields(t),i=this._buildSubmissionData(e,r,t);y(this.window,this.document);let s=await this._waitForLeadSubmit(e=>this._submitLeadRequest(i,e));if(this._sendGAEvent(i),s?.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,r={expired:!1,expiresAt:Date.now()+6e3},i=new Promise(e=>{t=setTimeout(()=>{r.expired=!0,e(null)},6e3)}),s=e(r).catch(e=>{if(f(r))return null;throw e});try{return await Promise.race([s,i])}finally{clearTimeout(t)}}_showRedirectPending(e){if(e.classList.add(E),e.querySelector(`.${E}__indicator`))return;let t=this.document.createElement("div");t.className=`${E}__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:r}=this.config;if(!t||!r)return void console.warn("[EventBus] Missing required data for user alias");let i=this.window.eventBusProvider.getDistinctId();if(!i)return void console.warn("[EventBus] No anonymous ID available for alias");let s=this.window.LuxuryPresenceEventBus.generateUUIDv5FromCompanyEmail(r,t);this.window.eventBusProvider.alias({anonId:i,canonicalId:s}),console.log("[EventBus] User aliased with canonical ID")}catch(e){console.error("[EventBus] User alias failed:",e)}}async _submitLeadRequest(e,t){let{config:r}=this;return(this._aliasUserWithEventBus(e),r.myhomeDashboardEnabled&&(e.activity?.activity_source==="HOME_VALUATION"||e.activity?.activity_source==="HOME_VALUE"))?this.homeValuationService._submitHomeValuationRequest({...e,deadline:t}):fetch(`${r.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,r={hitType:"event",eventCategory:"button",eventAction:"click"};switch(e.activity.activity_source){case"NEWSLETTER_SIGNUP":r.eventLabel="Newsletter",t.sendGoogleTagManagerEvent("event","newsletter_signup");break;case"HOME_SEARCH":r.eventLabel="HomeSearch",t.sendGoogleTagManagerEvent("event","home_search");break;case"HOME_VALUE":case"HOME_VALUATION":r.eventLabel="HomeValue",t.sendGoogleTagManagerEvent("event","home_valuation");break;case"EBOOK":r.eventLabel="Ebook",t.sendGoogleTagManagerEvent("event","ebook_download");break;default:r={hitType:"pageview",page:"/thank-you"},t.sendGoogleTagManagerEvent("event","contact_inquiry")}t.sendGoogleAnalyticsEvent(r)}_getFields(e){let t=e.querySelectorAll("input, select, textarea"),r={};return t.forEach(t=>{let{id:i,name:s,type:o}=t;if(s===w)return!0;let n="";if(i){let r=e.querySelector(`label[for='${i}']`);r?n=r.textContent.trim():t.placeholder&&(n=t.placeholder.trim())}r[s]={label:n,type:t.tagName,inputType:"INPUT"===t.tagName?o:"text"}}),r}_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 r=e.querySelector(".submission-error-message");r||((r=this.document.createElement("div")).className="submission-error-message",r.setAttribute("role","alert"),e.appendChild(r)),r.textContent=t||"Something went wrong. Please try again.",r.style.display="block"}_hideSubmissionError(e){let t=e.querySelector(".submission-error-message");t&&(t.style.display="none")}}(B,window,document),G=new class extends m{constructor(e,t,r){super(e,t,r),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 r=1;r<=3;r+=1){let i=e&&!t;try{let e=await fetch(this._getMapKeyUrl(r,i));if(t=t||i,this._setFailureFlag(!1),!e.ok)throw Error(`Failed to fetch API key: ${e.status}`);let s=await e.text();if(!s)return"";return this.apiKey=s,this.apiKey}catch(e){console.error(e),r<3&&await this._delay(300*2**(r-1))}}return this._setFailureFlag(!0),""}_getMapKeyUrl(e,t){let r=[];e>1&&r.push(`attempt=${e}`),t&&r.push("recovered_after_failure=1");let i=r.length?`?${r.join("&")}`:"";return`${this._getBaseUrl()}/api/v1/map${i}`}_hadPreviousFailure(){try{return"1"===this.window.sessionStorage.getItem(S)}catch(e){return!1}}_setFailureFlag(e){try{e?this.window.sessionStorage.setItem(S,"1"):this.window.sessionStorage.removeItem(S)}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");
1679let 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(r=>{r?t(r):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 r=Math.min(1024/e,1024/t);return{width:parseInt(e*r),height:parseInt(t*r)}}convertThemeToStaticApiUrl(e){return e.map(e=>{let t=e.stylers.reduce((e,t)=>{let r=t.visibility?`visibility:${t.visibility}`:"",i=t.color?`color:${t.color.replace("#","0x")}`:"",s=t.lightness?`lightness:${t.lightness}`:"";return`${e}|${r}${i}${s}`},""),r=e.elementType?`|element:${e.elementType}`:"";return`feature:${e.featureType}${r}${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:r}=await t.json();return r}catch(e){return console.error(e),""}}generateStaticMapUrl(e,t,r,i,s,o){let{width:n,height:a}=this.resizeStaticMapDimensions(s,o),l={center:`${e},${t}`,zoom:r,scale:2,size:`${n}x${a}`,key:this.apiKey};i&&(l.style=this.convertThemeToStaticApiUrl(i));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:r,...i}){let{width:s,height:o}=this.resizeStaticMapDimensions(e,t),n={...i,size:`${s}x${o}`};r&&(n.style=this.convertThemeToStaticApiUrl(r));let a=new URLSearchParams;Object.entries(n).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>a.append(e,t.toString())):a.append(e,t.toString())});let l=a.toString();try{return await this.getMapApiSignedUrl(l)}catch(e){return console.error(e),""}}}(B,window,document),K=new class extends m{destroy(){}updateQueryString(e,t,r){r||(r=this.window.location.href);let i=RegExp(`([?&])${e}=.*?(&|#|$)`,"i"),s="";null!=t&&(Array.isArray(t)?t.length&&(s=this.serializeArray(e,t)):"object"==typeof t?(i=RegExp(`([?&])${e}\\[[^=]*\\]=.*?(&|#|$)`,"i"),s=this.serializeObj(t,"",e)):s=`${e}=${encodeURIComponent(t)}`);let o=r.split("#"),n=o[0];if(i.test(r)){let e=n;for(s=s?`$1${s}$2`:"$1";i.test(e);)n=e.replace(i,s),e=e.replace(i,"$1");n=n.replace(/(&|\?)$/,"")}else if(s){let e=-1!==n.indexOf("?")?"&":"?";n+=`${e}${s}`}return void 0!==o[1]&&null!==o[1]&&(n+=`#${o[1]}`),n}getParameterByName(e,t){t||(t=this.window.location.href),e=e.replace(/[[\]]/g,"\\$&");let r=RegExp(`[?&]${e}(=([^&#]*)|&|#|$)`),i=Array.from(RegExp.prototype[Symbol.matchAll].call(r,t)).flat();if(!i.length){let r=RegExp(`[?&]${e}(\\[.*?\\])=(.*?)(?=&|#|$)`,"g");return i=Array.from(RegExp.prototype[Symbol.matchAll].call(r,t)).flat(),this._parseParamToObject(i,"advancedFilters"===e)}return i.length>3?i.reduce((e,t,r)=>((r+1)%3==0&&e.push(decodeURIComponent(t.replace(/\+/g," "))),e),[]):i[2]?decode
1679URIComponent(i[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 r={},i=this.makePageKey(t),s=this.getParameterByName(i);return s&&(r.page=parseInt(s)),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,i),s=this.getParameterByName(t);if("int"===e.type)isFinite(s=parseInt(s))||(s=null);else if("bool"===e.type||"boolean"===e.type)s="true"===s||"false"!==s&&null;else if("json"===e.type)try{s=JSON.parse(s)}catch(e){}r[e.formKey||e.param]=s}),r}serializeParams(e,t,r){let i=this.window.location.href,s=this.makePageKey(t);return i=this.updateQueryString(s,r.page,i),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,s),o=r[e.formKey||e.param];"json"===e.type&&null!=o&&(o=JSON.stringify(o)),i=this.updateQueryString(t,o,i)}),i}formatSliderAtom(e,t=""){return t+(Number.isInteger(e)?e:e.toFixed(2))}formatSliderValue(e,t="",r=""){return e<1e3?this.formatSliderAtom(e,t):e<1e6?`${this.formatSliderAtom(e/1e3,t)}${r}K`:`${this.formatSliderAtom(e/1e6,t)}${r}M`}formatSliderPriceRange(e,t,r,i){return t.min===e&&0!==e?`${i.lowPrefix}${this.formatSliderValue(e,r," ")}`:t.max===e?`${this.formatSliderValue(e,r," ")}${i.highSuffix}`:`${this.formatSliderValue(e,r," ")}`}formatSliderAreaRange(e,t,r,i){return t.min===e&&0!==e?`${i.lowPrefix}${this.formatSliderValue(e)} ${r}`:t.max===e?`${this.formatSliderValue(e)}${i.highSuffix} ${r}`:`${this.formatSliderValue(e)} ${r}`}getSearchFormValues(e){let{queryElement:t,priceSliderElement:r,areaSliderElement:i,neighborhoodSelect:s}=e,o={};if(t&&(o.search=t.value||null),r){let e=r.value.split(";"),t=parseInt(r.dataset.min),i=parseInt(r.dataset.max),s=parseInt(e[0]),n=parseInt(e[1]);o.priceMin=s!==t?s:null,o.priceMax=n!==i?n:null}if(i){let e=i.value.split(";"),t=parseInt(i.dataset.min),r=parseInt(i.dataset.max),s=parseInt(e[0]),n=parseInt(e[1]);o.areaMin=s!==t?s:null,o.areaMax=n!==r?n:null}return s&&(o.neighborhoodId=s.value||null),o}serializeObj(e,t="",r=""){let i=[];for(let s in e)if(e.hasOwnProperty(s)){let o,n=e[s];if(r){let e=t?`[${t}][${s}]`:`[${s}]`;o=`${r}${e}`}else o=t?`${t}[${s}]`:s;null!==n&&Array.isArray(n)?n.length&&i.push(this.serializeArray(o,n)):null!==n&&"object"==typeof n?i.push(this.serializeObj(n,o)):i.push(`${o}=${encodeURIComponent(n)}`)}return i.join("&")}serializeArray(e,t,r=""){let i=[];return t.forEach(t=>{let s=r?`${r}${e}`:e;i.push(`${s}=${encodeURIComponent(t)}`)}),i.join("&")}_parseParamToObject(e,t=!1){if(!e.length)return null;let r={};for(let i=0;i<e.length;i++)if((i+1)%3==0){let s=decodeURIComponent(e[i].replace(/\+/g," ")),o=e[i-1];Object.assign(r,this._setObjectPath(o,s,r,t))}return r}_setObjectPath(e,t,r,i=!1){let s=e.split(/[\[\]]/).filter(Boolean),o=["in","nin","btw","ciin","cinin"],n={},a=n,l=((e,t,r)=>{if(!t)return;let i=(Array.isArray(t)?t:t.match(/([^[.\]])+/g)).reduce((e,t)=>e&&e[t],e);return void 0===i?r:i})(r,s.join("."));return s.forEach((e,n)=>{n===s.length-1?l?a[e]=Array.isArray(l)?[...l,t]:[l,t]:a[e]=i&&o.includes(e)?[t]:t:(a[e]=r[e]?r[e]:{},a=a[e])}),n}}(B,window,document),Y=new class extends m{constructor(e,t,r){super(e,t,r),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,r=e.closest("section[id]"),i=e.dataset.append,s=r.querySelector(".lp-expand-btn");if(!s)if((s=t.createElement("button")).className="lp-expand-btn",s.setAttribute("aria-label","Open a lightbox"),s.innerHTML='<span class="lp-i lp-i--expand-alt" aria-hidden="true"></span>',i){let e=r.querySelector(i);e&&e.appendChild(s)}else{let r=t.createElement("div");r.className="lp-expand-btn-wrapper",r.style.position="relative",r.appendChild(s),e.parentNode.insertBefore(r,e.nextSibling)}s.addEventListener("click",()=>{this._createLightbox({slider:e,section:r})})}_createLightbox({slider:e,section:t,initialIndex:r}){let{window:i,document:s}=this,o=`lightbox-for-${t?.id}`,n=i.$&&i.$.fn.slick,a=n&&e.slick,l="function"==typeof i.Splide,d=e.classList.contains("is-initialized")&&e.classList.contains("splide");function c(){let t=s.createElement("div");t.id=o,t.className="lp-lightbox",t.setAttribute("tabindex","-1"),t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.innerHTML=` 1680 <button class="lp-lightbox__close" aria-label="close modal"></button> 1681 <div class="lp-lightbox__content"> 1682 <div class="lp-lightbox__carousel splide" role="group" aria-label="Image Gallery"> 1683 <div class="splide__arrows"> 1684 <button class="splide__arrow splide__arrow--prev lp-lightbox-arrow lp-lightbox-arrow--prev"></button> 1685 <button class="splide__arrow splide__arrow--next lp-lightbox-arrow lp-lightbox-arrow--next"></button> 1686 </div> 1687 <div class="splide__track"> 1688 <ul class="splide__list"></ul> 1689 </div> 1690 </div> 1691 </div> 1692 `,"function"==typeof i.lpUI.requestScrollLock?i.lpUI.requestScrollLock(o):s.body.style.overflow="hidden",s.body.appendChild(t);let n=t.querySelector(".lp-lightbox__carousel"),a=n.querySelector(".splide__list");t.classList.add("show"),(d?e.querySelectorAll(".splide__slide:not(.splide__slide--clone) img"):e.querySelectorAll("img")).forEac
1692h(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let r=s.createElement("li");r.className="lp-lightbox__slide splide__slide",r.appendChild(t),a.appendChild(r)});let l=new i.Splide(n,{rewind:!0,arrows:!0,arrowPath:"",type:"loop",clones:1,pagination:!1,perPage:1,perMove:1});l.mount(),void 0!==r&&r>=0&&l.go(r),setTimeout(()=>{t.focus()},100);let c=e=>{if(!t.classList.contains("show"))return;let r=t.querySelector(".splide__arrow--prev"),i=t.querySelector(".splide__arrow--next"),s=t.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&r?(e.preventDefault(),r.click()):"ArrowRight"===e.key&&i?(e.preventDefault(),i.click()):"Escape"===e.key&&s&&(e.preventDefault(),s.click())};s.addEventListener("keydown",c),t.querySelector(".lp-lightbox__close").addEventListener("click",()=>{s.removeEventListener("keydown",c),t.classList.remove("show"),l&&l.destroy(),"function"==typeof i.lpUI.releaseScrollLock?i.lpUI.releaseScrollLock(o):s.body.style.overflow="",t.remove()})}if("function"==typeof i.lpUI.requestScrollLock?i.lpUI.requestScrollLock(o):s.body.style.overflow="hidden",n&&!d){let t,r,n,l,d;r={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>'},(n=s.createElement("div")).id=o,n.className="lp-lightbox",n.setAttribute("tabindex","-1"),n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.innerHTML=` 1693 <button class="lp-lightbox__close" aria-label="close modal"></button> 1694 <div class="lp-lightbox__content"> 1695 <div class="lp-lightbox__carousel"></div> 1696 </div> 1697 `,s.body.appendChild(n),l=n.querySelector(".lp-lightbox__carousel"),n.classList.add("show"),a?(t=e.slick.$slides.find("img"),r.initialSlide=e.slick?.currentSlide||0,t.each(function(){i.$(".lp-lightbox__carousel").append(i.$(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 r=s.createElement("div");r.className="lp-lightbox__slide",r.appendChild(t),l.appendChild(r)}),i.$(l).slick(r),setTimeout(()=>{n.focus()},100),d=e=>{if(!n.classList.contains("show"))return;let t=n.querySelector(".lp-lightbox-arrow--prev"),r=n.querySelector(".lp-lightbox-arrow--next"),i=n.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&t?(e.preventDefault(),t.click()):"ArrowRight"===e.key&&r?(e.preventDefault(),r.click()):"Escape"===e.key&&i&&(e.preventDefault(),i.click())},s.addEventListener("keydown",d),n.querySelector(".lp-lightbox__close").addEventListener("click",()=>{s.removeEventListener("keydown",d),n.classList.remove("show");let t=l?.slick?i.$(l).slick("slickCurrentSlide"):0;l?.slick&&i.$(l).slick("unslick"),a&&i.$(e).slick("slickGoTo",t),"function"==typeof i.lpUI.releaseScrollLock?i.lpUI.releaseScrollLock(o):s.body.style.overflow="",n.remove()})}else l?c():(i.luxuryPresence.libs.loadCss(i.luxuryPresence.libs.jsLibsMap.splide.cssSrc),i.luxuryPresence.libs.loadJs(i.luxuryPresence.libs.jsLibsMap.splide.jsSrc,()=>{c(),i.luxuryPresence.libs.jsLibsMap.splide.isLoaded=!0}))}}(B,window,document),z=new class extends m{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:r,templateId:i,websiteId:s,pageId:o,shareId:n,pageMeta:a}=this.config;this.window.divolte.signal(e,Object.assign({companyId:r,templateId:i,websiteId:s,pageId:o,shareId:n,pageMeta:a},t))}sendLpPageView(){this.sendLpEvent("pageView",{})}}(B,window,document),W=new class extends m{constructor(e,t,r){super(e,t,r)}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"}
1697)),(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:r}=this.config;try{this.window.eventBusProvider.capture(e,{company:r,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",{})}}(B,window,document),Q=new class extends m{constructor(e,t,r){super(e,t,r),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(C,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:r}=this.config,{data:i,origin:s}=e,{type:o,height:n,event:a,source:l,token:d}=i;if(o===t||"hide_intermediate_iframe"===o){let e=this.document.getElementById("onetap_google_intermediate_iframe");e&&(e.style.height=n,e.style.display=o===t?"unset":"none")}s===r&&"GOOGLE_SIGN_ON"===l&&("success"===a?(this._setExpirationLsItem(864e5),this._handleQualifyingQuestionsModal(d)):"cancel"===a&&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 r=this.document.createElement("iframe");r.src=this._buildUrlAndCopyAttributes(t,r,e),r.dataset.isSocialOauthButton=!0,t.replaceWith(r)}_listenToMessages(e){let{buyerSellerServiceUrl:t}=this.config;if(e.origin===t&&"success"===e.data.event){let e=new Event(C);this.window.dispatchEvent(e),y(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,r){let{buyerSellerServiceUrl:i,companyId:s,websiteId:o,pageId:n,pageMeta:a}=this.config,{location:l}=this.window,d=l.origin+l.pathname,c=new URL(`${i}/buttons/${r}`),u=this.window.localStorage.getItem("utm_vars"),h=this.window.localStorage.getItem("referrer");c.searchParams.append("companyId",s),c.searchParams.append("websiteId",o),c.searchParams.append("pageId",n),c.searchParams.append("sourceUrl",d),c.searchParams.append("pageMeta",JSON.stringify(a)),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"];
1697return 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,"/"),r=4-t.length%4,i=4===r?t:t+"=".repeat(r);return JSON.parse(atob(i))}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")}}}(B,window,document),J=new class extends m{constructor(e,t,r){super(e,t,r),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:r})=>{e&&e.removeEventListener&&e.removeEventListener(t,r)}),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 r=t.querySelector('input[name="email"]');r&&"string"==typeof e&&(r.value=e)}updateTriggerSourceValue(e){let t=this.getModalElement();if(!t)return;let r=t.querySelector(`#${this.modalId}-triggerSource`);r&&"string"==typeof e&&(r.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,r){let i="";if(r){let e=new Date;e.setTime(e.getTime()+864e5*r),i=`; expires=${e.toUTCString()}`}let s="; path=/; SameSite=Lax";this.window&&this.window.location&&"https:"===this.window.location.protocol&&(s+="; Secure"),this.document.cookie=`${e}=${encodeURIComponent(t||"")}${i}${s}`}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 r=()=>{this.setModalSubmittedCookie();let t=setTimeout(()=>{e.style.display="none",this.restoreBodyScroll()},100);this.timeouts.push(t)};t.addEventListener("formsubmitted",r),this.eventListeners.push({element:t,event:"formsubmitted",handler:r})}let r=e.querySelector('[data-dismiss="modal"]');if(r){let t=()=>{e.style.display="none",this.restoreBodyScroll()};r.addEventListener("click",t),this.eventListeners.push({element:r,event:"click",handler:t})}let i=t=>{(t.target===e||t.target.id===this.modalId)&&(e.style.display="none",this.restoreBodyScroll())};e.addEventListener("click",i),this.eventListeners.push({element:e,event:"click",handler:i})}}(B,window,document),X=new class extends m{constructor(e,t,r){super(e,t,r),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 r=` 1698 query { 1699 validSession { 1700 success 1701 } 1702 } 1703 `;try{let e=await this.window.fetch("/graphql",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({query:r})});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 i=t.data?.validSession?.success===!0;return this.lastValidationResult=i,this.lastValidationTime=Date.now(),i}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}}(B,window,document),Z=new class extends m{constructor(e,t,r){super(e,t,r),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=I[e.provider];if(!t)return;this.eventName=t.eventName;let r=await this.window.luxuryPresence.session.validateSession();(t.hasAnalyticsConsent(this.document,this.window)||r)&&this.loadScript(),this.consentListener||(this.consentListener=e=>{t.isAnalyticsAccepted(e.detail)?this.loadScript():this.removeScripts()},this.document.addEventListener(t.eventName,this.consentListener))}}(B,window,document),ee=new class extends m{destroy(){}transformVariables(e,t){let r;return x(r={...t},["testimonialId"]),R(r,["testimonialId"],"testimonialIds"),0===r.limit&&delete r.limit,(void 0===r.limit||null===r.limit)&&(("testimonials"===e||"testimonialsCount"===e)&&(r.limit=50),("agents"===e||"agentsCount"===e||"developments"===e||"developmentsCount"===e||"neighborhoods"===e||"neighborhoodsCount"===e||"posts"===e||"postsCount"===e||"pressReleases"===e||"pressReleasesCount"===e)&&(r.limit=100)),!function(e){let{sortDir:t}=e;"string"==typeof t&&t.includes("_")&&(e.sortDir=t.replace(/_/g," "))}(r),!function(e,t){switch(t){case"agent":break;case"testimonials":case"testimonialsCount":x(e,["testimonialIds"]);break;case"agents":case"agentsCount":x(e,["officeId","teamId","developmentId","agentIds","tags"]),R(e,["officeId"],"officeIds"),R(e,["teamId"],"teamIds"),R(e,["developmentId"],"developmentIds");break;case"neighborhoods":case"neighborhoodsCount":x(e,["neighborhoodIds","neighborhoodId"]),R(e,["neighborhoodIds","neighborhoodId"],"neighborhoodId");break;case"developments":case"developmentsCount":x(e,["agentId","neighborhoodIds","neighborhoodId","developmentIds","tag"]),e.agentId&&Array.isArray(e.agentId)&&([e.agentId]=e.agentId),R(e,["neighborhoodIds","neighborhoodId"],"neighborhoodIds"),R(e,["developmentIds","developmentId"],"developmentIds");break;case"properties":case"propertiesCount":x(e,["statusIds","statusId","propertyTypeIds","propertyTypeId","propertyId","networkId","propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","
1703spaceTypeIds","addressState","addressCity","backfillProviders","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"]),["propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","spaceTypeIds","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"].forEach(t=>R(e,[t],t)),R(e,["statusIds","statusId"],"propertyStatusId"),e.excludeStatusId&&(e.excludePropertyStatusId=e.excludeStatusId,delete e.excludeStatusId),R(e,["propertyTypeIds","propertyTypeId"],"propertyTypeId"),R(e,["networkId"],"networkId"),R(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":x(e,["categoryIds","categoryId","neighborhoodId"]),void 0!==e.order&&(e.sort=e.order,delete e.order),R(e,["categoryIds","categoryId"],"categoryId");break;case"postCategories":x(e,["categoryId","categoryIds"]),void 0!==e.order&&(e.sort=e.order,delete e.order),R(e,["categoryIds","categoryId"],"categoryId");break;case"pressReleases":case"pressReleasesCount":x(e,["pressReleaseId","categories","propertyId","developmentId","agentId","teamId"]),R(e,["pressReleaseId"],"pressReleaseIds");break;case"offices":case"officesCount":x(e,["officeId","officeIds","tags"]),R(e,["officeId"],"officeIds");break;case"teams":case"teamsCount":x(e,["teamId","teamIds"]),R(e,["teamId"],"teamIds");break;case"pois":x(e,["categories"]),Array.isArray(e.categories)&&(e.categories=e.categories.map(e=>e.toLowerCase())),"string"==typeof e.sortBy&&(e.sortBy=e.sortBy.toLowerCase())}}(r,e),r}transformResponse(e,t){return"agent"===e?P(t,T):"agents"===e||"agentsCount"===e?O(t,L):"neighborhood"===e?P(t,k):"neighborhoods"===e||"neighborhoodsCount"===e?O(t,M):"development"===e?P(t,$):"developments"===e||"developmentsCount"===e?O(t,U):t}transformPage(e){return{items:e&&e.items||[],count:e&&e.total||0}}applyPropertyDisclaimers(t,r){if(!Array.isArray(t)||!t.length||!r||!r.length)return Promise.resolve(t);let i=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})),s=e=>{let i={};return(e||[]).forEach(e=>{i[`${e.feedId}:${e.listingId}`]=e}),t.map(e=>{let t=e&&i[`${e.vendorId}:${e.mlsId}`],s={};return r.forEach(e=>{let r=t?t[D[e]]:void 0;s[e]=r??null}),{...e,...s}})};if(!i.length)return Promise.resolve(s([]));let{websiteId:o}=this.config;return this.window.superagent?this.window.superagent.post(`${this.window.luxuryPresence.defaults.routerUrl}/graphql`).withCredentials().send({query:e(N),variables:{input:{websiteId:"string"==typeof o?o:void 0,properties:i}}}).then(e=>s(e.body&&e.body.data&&e.body.data.propertyDisclaimers),e=>(console.warn("[RouterApiController] propertyDisclaimers lookup failed:",e),s([]))):Promise.resolve(s([]))}}(B,window,document),et=new class extends m{constructor(e,t,r){super(e,t,r),this.natives=new WeakMap,this.rates=new Map,this.pending=new Map,this.target=void 0,this.generation=0,this.initialized=!1,this.observer=null,this.abortController=null}get currentCurrency(){return this.target}get cookieOptions(){return{document:this.document,location:this.window.location}}get enabledCurrencies(){return(this.config.enabledCurrencies??[]).map(F.toSupportedToCurrency).filter(Boolean)}initialize(){return this.initialized||!this.config.currencyConversionEnabled?Promise.resolve():(this.initialized=!0,this.generation=0,this.abortController=new this.window.AbortController,this.target=(0,F.readValidCurrencyCookie)(this.cookieOptions,{enabled:!0,enabledCurrencies:this.enabledCurrencies}),this.observer=new this.window.MutationObserver(()=>this.ensureRates(this.apply())),this.observer.observe(this.document.body,{childList:!0,subtree:!0}),this.ensureRates(this.apply()))}setCurrency(e){if(!this.config.currencyConversionEnabled)return!1;let t=(0,F.toSupportedToCurrency)(e);return!!t&&!!this.enabledCurrencies.includes(t)&&(this.target=t,this.generation+=1,(0,F.writeCurrencyCookie)(this.cookieOptions,t)||console.warn("[CurrencyConversionController] could not persist currency preference:",t),this.apply(),!0)}reset(){this.config.currencyConversionEnabled&&(this.target=void 0,this.generation+=1,(0,F.clearCurrencyCookie)(this.cookieOptions),this.apply())}destroy(){this.observer?.disconnect(),this.observer=null,this.abortController?.abort(),this.abortController=null,this.pending.clear(),this.rates.clear(),this.generation=null,this.initialized=!1}apply(){let e=new Set;return this.document.querySelectorAll("[data-lp-price]").forEach(t=>{let r=this.natives.get(t);if(!r){if(!(r=(e=>{let t=e.getAttribute("data-lp-native-amount"),r=null===t||""===t.trim()?NaN:Number(t),i=(0,F.toSupportedFromCurrency)(e.getAttribute("data-lp-native-currency"));if(!Number.isFinite(r)||r<0||!i)return;let s=Number(e.getAttribute("data-lp-precision"));return{amount:r,currency:i,precision:Number.isInteger(s)&&s>=0?s:0,originalHTML:e.innerHTML}})(t)))return;this.natives.set(t,r)}this.rates.has(r.currency)||e.add(r.currency),this.render(t,r)}),[...e]}render(e,t){let r=this.convertedText(t);if(void 0===r){e.innerHTML!==t.originalHTML&&(e.innerHTML=t.originalHTML);return}e.textContent!==r&&(e.textContent=r)}convertedText(e){if(!this.target||this.target===e.currency)return;let t=this.rates.get(e.currency)?.[this.target];
1703if("number"!=typeof t||!Number.isFinite(t))return;let r=(0,F.convertAmount)(e.amount,t);if(void 0!==r)return(0,F.formatMoney)(r,this.target,{precision:e.precision})}ensureRates(e){return e.length?Promise.all(e.map(e=>this.requestRates(e))).then(()=>{null!==this.generation&&this.apply()}):Promise.resolve()}requestRates(e){let t=this.pending.get(e);if(t)return t;let r=this.abortController?.signal,i=(0,F.fetchExchangeRates)(e,{baseUrl:this.config.valuationApiBase,signal:r,onError:t=>console.warn(`[CurrencyConversionController] exchange rate fetch failed for ${e}:`,t)}).then(t=>{r?.aborted||this.rates.set(e,t??{})});return this.pending.set(e,i),i}}(B,window,document);function er(e,t){if(window.luxuryPresence[e])try{window.luxuryPresence[e].destroy()}catch(e){console.log(e)}window.luxuryPresence[e]=t}er("config",B),er("modals",q),er("buttons",V),er("validation",j),er("contactForms",H),er("mapApiLoader",G),er("pagination",K),er("expandSliders",Y),er("divolte",z),er("eventBus",W),er("oauth",Q),er("qualifyingQuestionsModal",J),er("session",X),er("consent",Z),er("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(){}}),er("routerApi",ee),er("currencyConversion",et),window.luxuryPresence.formatSliderPriceRange=K.formatSliderPriceRange.bind(K),window.luxuryPresence.formatSliderAreaRange=K.formatSliderAreaRange.bind(K),window.luxuryPresence.getSearchFormValues=K.getSearchFormValues.bind(K),window.luxuryPresence.handlebarsHelpersFactory=function(t){return e(n)(t,{isEqual:(e,t)=>e==t})}})(); 1704//# sourceMappingURL=lp-sdk.js.map 1705 1706 </script>
1706 1707 1708
1708<script> 1709 var lpGlobalInitialized = false; 1710 1711 function lpGlobalInit () { 1712 if (lpGlobalInitialized) { 1713 return; 1714 } 1715 lpGlobalInitialized = true; 1716 // Initialize wow animation plugin only according to turbolinks 1717 var wow; 1718 if (window.WOW) { 1719 wow = new WOW({ 1720 animateClass: 'animated', 1721 offset: wowOffset, 1722 live: false, 1723 callback: function(box) {} 1724 }); 1725 } 1726 // Initialize handlebar helpers only once 1727 function handlebarsInit() { 1728 if (!window.Handlebars) { 1729 return; 1730 } 1731 HandlebarsIntl.registerWith(Handlebars); 1732 Handlebars.registerHelper(window.luxuryPresence.handlebarsHelpersFactory(Handlebars)); 1733 } 1734 1735 handlebarsInit(); 1736 1737 /* Initialize Luxury Presence SDK */ 1738 try { 1739 window.luxuryPresence.config.setCompany("b0108bde-2b87-474d-8bcd-d7fcfd16c5cc", {}); 1740 window.luxuryPresence.config.setWebsite("be227485-eaf0-455b-aee0-a0e351474420", { 1741 myhomeDashboardEnabled: true, 1742 mlsEnabled: true, 1743 hstValuationRedirectEnabled: true, 1744 hvStepTwoCaptureEnabled: false 1745 }); 1746 const url = new URL(window.location.href); 1747 const shareId = url.searchParams.get('shareId'); 1748 window.luxuryPresence.config.setPage("f8bf671a-859a-442e-bad2-5679ce8ef9b4", { 1749 sourceResource: "", 1750 pageElementId: "", 1751 pageQueryVariables: {}, 1752 shareId: "", 1753 }); 1754 window.luxuryPresence.config.setWebsiteApiGatewayUrl("https://wgw.luxurypresence.com", {}); 1755 window.luxuryPresence.config.setBuyerSellerServiceUrl("https://bss.luxurypresence.com", {}); 1756 window.luxuryPresence.config.setDivolteServiceUrl("https://t.luxurypresence.com", {}); 1757 window.luxuryPresence.config.setEventBusUrl("https://cdn.luxurypresence.com/scripts/event-bus-js", {}); 1758 window.luxuryPresence.config.setEventBus({ 1759 enabled: true, 1760 apiKey: "phc_PMYT31xlmXBaTCwpIRx1v6RrpLVZIuP47N3mOT6KLnr", 1761 url: "https://p.luxurypresence.com", 1762 }); 1763 window.luxuryPresence.config.setTemplateId("34ae9410-e2da-4ccb-947e-bdaa3b48f731", {}); 1764 window.luxuryPresence.config.setLeadIngesterUrl("https://leads.luxurypresence.com", {}); 1765 window.luxuryPresence.buttons.initialize({}); 1766 window.luxuryPresence.consent.initialize({ provider: 'lp-consent' }); 1767 window.luxuryPresence.contactForms.initialize({}); 1768 window.luxuryPresence.validation.initialize({}); 1769 window.luxuryPresence.expandSliders.initialize({}); 1770 window.luxuryPresence.oauth.initialize({ googleSignOnEnabled: true, iframe: false }); 1771 window.luxuryPresence.qualifyingQuestionsModal.initialize({ qualifyingQuestionsModalEnabled: true }); 1772 /* Optional: cached pages / older SDKs may not carry this controller */ 1773 window.luxuryPresence.currencyConversion?.initialize(); 1774 } catch (e) { 1775 console.log(e); 1776 } 1777 1778 /* Inject Section Specific Javascript */ 1779 try { 1780(function init(sectionDomId) { 1781 let address = $('#' + sectionDomId + " .company_address").text().trim(); 1782 $('#' + sectionDomId + " .company_address").text(address); 1783 function setHttp(link) { 1784 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 1785 link = 'http://' + link; 1786 } 1787 return link; 1788 } 1789 $(`#${sectionDomId} .contact-form__form`).on('reset', () => { 1790 const redirectLink = $('#' + sectionDomId + ' .redirect-link'); 1791 if (redirectLink.length) { 1792 const rawHref = redirectLink.attr('href'); 1793 redirectLink.attr('href', setHttp(rawHref)); 1794 redirectLink[0].click(); 1795 } 1796 }); 1797})('modal-global-contact-us'); 1798} catch(e) { 1799console.log(e); 1800} 1801 1802 try { 1803(function init(sectionDomId) { 1804 var resizeMenu = function () { 1805 var widthSoFar = 0; 1806 var availableWidth = $('#' + sectionDomId + ' .navigation').width(); 1807 if ($(window).width() > 1024) { 1808 $('#' + sectionDomId + ' .navigation > li').each(function () { 1809 $(this).hide(); 1810 const currentItemWidth = $(this).outerWidth(); 1811 if (availableWidth - widthSoFar >= currentItemWidth) $(this).css({ 1812 "visibility": "visible", 1813 "display": "list-item", 1814 "height": "auto" 1815 }); 1816 widthSoFar += $(this).outerWidth(); 1817 }); 1818 } 1819 }; 1820 $(window).on('resize.lpui-auto-clean', resizeMenu); 1821 const mediaQuery = window.matchMedia('(hover: hover) and (pointer: fine)'); 1822 var $subNavTrigger = $('body > nav .sub-nav-container a'); 1823 var $subNavContainer = $('body > nav .sub-nav-container'); 1824 if (mediaQuery.matches) { 1825 $subNavTrigger.off('click'); 1826 $subNavContainer.mouseout(function () { 1827 var self = $(this); 1828 self.removeClass('active').find('.sub-nav').removeClass('visible'); 1829 }).mouseover(function () { 1830 $(this).siblings('.sub-nav-container').removeClass('active').find('.sub-nav').removeClass('visible'); 1831 $(this).addClass('active').find('.sub-nav').addClass('visible'); 1832 }).mouseup(function () { 1833 var self = $(this); 1834 self.toggleClass('active'); 1835 }); 1836 } 1837 function isSectionLight(sect) { 1838 if (!sect || !sect.style) { 1839 return true; 1840 } 1841 if (sect.style.backgroundImage) { 1842 return false;
1843 } 1844 if ($(sect).children('.video-wrapper').length) { 1845 return false; 1846 } 1847 return sect.classList.contains('is-background-color-light'); 1848 } 1849 const $header = $(`#${sectionDomId} > .header`); 1850 if ($header.hasClass('theme-auto')) { 1851 if (isSectionLight($('body > section')[0])) { 1852 $header.removeClass('theme-light'); 1853 } else { 1854 $header.addClass('theme-light'); 1855 } 1856 } 1857 var resizeTimeout; 1858 clearTimeout(resizeTimeout); 1859 resizeTimeout = setTimeout(function () { 1860 resizeMenu(); 1861 }, 1000); 1862})('global-navbar'); 1863} catch(e) { 1864console.log(e); 1865} 1866 try { 1867(function init(sectionDomId, options) { 1868 var elementSelector = options.elementSelector || 'nav'; 1869 var element = document.querySelector(elementSelector); 1870 var sections = document.querySelectorAll('body > section'); 1871 var subNavContainers = element.querySelectorAll('.sub-nav'); 1872 var initialBackgroundColor = options.initialBackgroundColor || element.style.backgroundColor; 1873 var backgroundColorScroll = options.backgroundColorScroll || '#191919'; 1874 var fontColor = options.fontColor || '#fff'; 1875 var fontColorScroll = options.fontColorScroll || '#000'; 1876 var didScroll = false; 1877 var lastScrollTop = 0; 1878 var delta = 5; 1879 1880 // eslint-disable-next-line sonarjs/no-collapsible-if 1881 if (wow) { 1882 // Wowjs might not trigger for position fixed elements 1883 if (window.scrollY > 0) { 1884 element.querySelectorAll('.wow').forEach(el => wow.show(el)); 1885 } 1886 } 1887 function adjustNavPinState() { 1888 // Remove 'visible' class from all subNavContainers 1889 for (let i = 0; i < subNavContainers.length; i++) { 1890 subNavContainers[i].classList.remove('visible'); 1891 } 1892 if (window.scrollY > 0) { 1893 element.style.backgroundColor = backgroundColorScroll; 1894 element.style.color = fontColorScroll; 1895 element.classList.add('scroll'); 1896 } else { 1897 element.style.backgroundColor = initialBackgroundColor; 1898 element.style.color = fontColor; 1899 element.classList.remove('scroll'); 1900 } 1901 } 1902 adjustNavPinState(); 1903 function onScroll() { 1904 didScroll = true; 1905 } 1906 window.addEventListener('scroll', onScroll); 1907 1908 // eslint-disable-next-line 1909 var debounceInterval = setInterval(() => { 1910 if (didScroll) { 1911 // eslint-disable-next-line 1912 hasScrolled(); 1913 didScroll = false; 1914 } 1915 }, 250); 1916 function hasScrolled() { 1917 adjustNavPinState(); 1918 // eslint-disable-next-line 1919 var navbarHeight = element.offsetHeight; 1920 // eslint-disable-next-line 1921 var st = window.scrollY; 1922 1923 // Make sure they scroll more than delta 1924 if (Math.abs(lastScrollTop - st) <= delta) { 1925 return; 1926 } 1927 if (st > lastScrollTop && st > navbarHeight) { 1928 // Scroll Down 1929 element.style.transform = `translateY(-${navbarHeight}px) scaleY(0)`; 1930 document.documentElement.style.setProperty('--global-header-height', '0px'); 1931 1932 // Some sections "follow" the navbar with class sticky (i.e. Producer search) 1933 sections.forEach(section => { 1934 if (section.classList.contains('sticky')) { 1935 section.style.top = '0px'; 1936 } 1937 }); 1938 } else { 1939 // Scroll Up 1940 // eslint-disable-next-line 1941 if (st + window.innerHeight < document.documentElement.scrollHeight) { 1942 element.style.transform = `translateY(0) scaleY(1)`; 1943 document.documentElement.style.setProperty('--global-header-height', `${navbarHeight}px`); 1944 sections.forEach(section => { 1945 if (section.classList.contains('sticky')) { 1946 section.style.top = `${navbarHeight}px`; 1947 } 1948 }); 1949 } 1950 } 1951 lastScrollTop = st; 1952 } 1953})('NAVBAR', JSON.parse("{\"fontColor\":\"#211F1F\",\"elementSelector\":\"nav\",\"fontColorScroll\":\"#ffffff\",\"backgroundColorScroll\":\"#2C3426\",\"initialBackgroundColor\":\"transparent\"}")); 1954} catch(e) { 1955console.log(e); 1956} 1957 try { 1958(function init(sectionDomId) { 1959 sectionDomId = "global-sidemenu"; 1960 var $sidemenu = $('#' + sectionDomId); 1961 const subNavItems = $('body > div.sidemenu .sub-nav-container .sub-nav__item'); 1962 const hideSubNavItems = () => { 1963 subNavItems.removeClass('fadeInUp'); 1964 }; 1965 const showSubNavItems = subnav => { 1966 if ($(subnav).find('.arrow').hasClass('active')) { 1967 $(".sidemenu").find('.arrow').removeClass('active'); 1968 } else { 1969 $(".sidemenu").find('.arrow').removeClass('active'); 1970 $(subnav).find('.arrow').addClass('active'); 1971 } 1972 let i = 0; 1973 subnav.find('.sub-nav__item').each((idx, item) => { 1974 i++; 1975 var timeout; 1976 clearTimeout(timeout); 1977 timeout = setTimeout(() => { 1978 $(item).addClass('fadeInUp'); 1979 }, 100 + i * 50); 1980 }); 1981 }; 1982 $(document).on("click", function (e) {
1983 if ($(e.target).closest(".navigation").length < 1) { 1984 hideSubNavItems(); 1985 } 1986 }); 1987 $('body > div.sidemenu .sub-nav-container > a').click(function (e) { 1988 const subnavContainer = $(this).closest('.sub-nav-container'); 1989 hideSubNavItems(); 1990 showSubNavItems(subnavContainer); 1991 }); 1992 const hideSideMenu = () => { 1993 $('body > div.sidemenu').removeClass('visible'); 1994 }; 1995 $('body > div.sidemenu .navigation .navigation__item:not(.sub-nav-container) .navigation__link').on('click', function (e) { 1996 onHide(); 1997 hideSideMenu(); 1998 }); 1999 $('body > div.sidemenu .sub-nav-container .sub-nav__link').on('click', function (e) { 2000 onHide(); 2001 setTimeout(() => { 2002 hideSideMenu(); 2003 }, 1601); 2004 }); 2005 var shown = false; 2006 function onShow() { 2007 if (shown) { 2008 return; 2009 } 2010 shown = true; 2011 window.lpUI.requestScrollLock(sectionDomId); 2012 $('#' + sectionDomId + ' .navigation__link').removeClass('fade-in'); 2013 $('#' + sectionDomId + ' .lp-socials__link').removeClass('fade-in'); 2014 let i = 0; 2015 $('#' + sectionDomId + ' .navigation__link').each(function () { 2016 i++; 2017 setTimeout(() => { 2018 $(this).addClass('fade-in'); 2019 }, 900 + i * 50); 2020 }); 2021 $('#' + sectionDomId + ' .lp-socials__link').each(function () { 2022 i++; 2023 setTimeout(() => { 2024 $(this).addClass('fade-in'); 2025 }, 900 + i * 50); 2026 }); 2027 } 2028 function onHide() { 2029 hideSubNavItems(); 2030 if (!shown) { 2031 return; 2032 } 2033 $('#' + sectionDomId + ' .lp-socials__link').removeClass('fade-in'); 2034 let i = 0; 2035 $($('#' + sectionDomId + ' .navigation__link').get().reverse()).each(function () { 2036 i++; 2037 setTimeout(() => { 2038 $(this).removeClass('fade-in'); 2039 }, i * 50); 2040 }); 2041 shown = false; 2042 setTimeout(() => { 2043 window.lpUI.releaseScrollLock(sectionDomId); 2044 }, 1600); 2045 } 2046 $sidemenu.on('lpui-show', onShow); 2047 $sidemenu.on('lpui-hide', onHide); 2048})('global-sidemenu'); 2049} catch(e) { 2050console.log(e); 2051} 2052 2053 try { 2054(function init(sectionDomId) { 2055 function setHttp(link) { 2056 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 2057 link = 'http://' + link; 2058 } 2059 return link; 2060 } 2061 $(`#${sectionDomId} form`).on("reset", function () { 2062 const redirectLink = $('#' + sectionDomId + ' .redirect-link'); 2063 if (redirectLink.length) { 2064 const rawHref = redirectLink.attr('href'); 2065 redirectLink.attr('href', setHttp(rawHref)); 2066 redirectLink[0].click(); 2067 } 2068 }); 2069})('global-footer'); 2070} catch(e) { 2071console.log(e); 2072} 2073 2074 try { 2075(function init(sectionDomId) { 2076 var _section = $('#' + sectionDomId); 2077 var _footer = document.getElementById('global-footer'); 2078 const redirectLink = _section.find('.js-redirect-link'); 2079 function setHttp(link) { 2080 if (link.search(/^(http[s]?\:\/\/|\/)/) == -1) { 2081 link = 'https://' + link; 2082 } 2083 return link; 2084 } 2085 function redirectPage(link) { 2086 if (link.length) { 2087 window.location.href = setHttp(link.attr('href')); 2088 } 2089 } 2090 const emailInput = _section.find('.js-email-input'); 2091 const emailRegex = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~\-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+/; 2092 emailInput.on('input', function () { 2093 if (emailRegex.test(this.value)) { 2094 this.setCustomValidity(''); 2095 } else { 2096 this.setCustomValidity('Please enter a valid email address.'); 2097 } 2098 this.reportValidity(); 2099 }); 2100 _section.find('input[name="name"]').on("keyup", function () { 2101 if (this.value.replaceAll(/\d/g, "").trim().split(" ").length < 2 || this.value.replaceAll(/\d/g, "").trim() === "") { 2102 this.setCustomValidity("Please input your first name and last name."); 2103 } else { 2104 this.setCustomValidity(""); 2105 } 2106 }); 2107 _section.find('form').on("reset", function () { 2108 $(this).addClass("show-success"); 2109 redirectPage(redirectLink); 2110 }); 2111 $(window).scroll(function () { 2112 if ($(this).scrollTop() >= 150) _section.find('.btn-holder').addClass('visible');else _section.find('.btn-holder').removeClass('visible'); 2113 }); 2114 _section.find('.close-btn, .connect-btn').click(function () { 2115 _section.find('.pop-up').toggle(); 2116 _section.find('.btn-holder').toggle(); 2117 }); 2118 if (!_footer) return; 2119 const observer = new IntersectionObserver(entries => {
2120 entries.forEach(entry => { 2121 if (entry.isIntersecting) _section.hide();else _section.show(); 2122 }); 2123 }, { 2124 threshold: 0.1 2125 }); 2126 observer.observe(_footer); 2127 function selectToDropdown(selectItem) { 2128 let customDropdown = ` 2129 <div class="custom-select" role="presentation"> 2130 <button class="custom-select-toggle is-placeholder" type="button" aria-haspopup="true" aria-expanded="false"></button> 2131 <div class="custom-select-menu" style="display: none;max-height: none;"> 2132 <div class="custom-select-content"> 2133 </div> 2134 </div> 2135 </div>`; 2136 $(customDropdown).insertAfter(selectItem); 2137 let $dropdown = $($(selectItem).next()); 2138 let $dropdownToggle = $dropdown.find(".custom-select-toggle"); 2139 let $dropdownMenu = $dropdown.find(".custom-select-menu"); 2140 let $dropdownContent = $dropdown.find(".custom-select-content"); 2141 $dropdownToggle.addClass($(selectItem).attr("class")).removeClass("dropdown-select"); 2142 $dropdownToggle.attr("id", $(selectItem).attr("id") + "custom"); 2143 $dropdownMenu.attr("aria-labelledby", $dropdownToggle.attr("id")); 2144 appendOptionButtons(selectItem, $dropdownContent); 2145 $(selectItem).removeClass().addClass("sr-only"); 2146 var toggleText = $(selectItem).find(":selected").first().text() || $(selectItem).children().first().text(); 2147 $dropdownToggle.html(toggleText); 2148 $dropdown.on("click", ".custom-select-item", function (e) { 2149 if ($(this).hasClass("is-disabled")) return; 2150 let elementNumber = $(this).index(); 2151 let $originalSelect = $(this).closest(".custom-select").siblings("select"); 2152 let $linkedOption = $originalSelect.find("option").eq(elementNumber); 2153 if (!$linkedOption.prop("selected")) { 2154 $linkedOption.prop("selected", true); 2155 $originalSelect.change(); 2156 $(this).addClass("is-selected").siblings(".custom-select-item").removeClass("is-selected"); 2157 $dropdownToggle.html($(this).html()); 2158 closeSelectMenu($(this).closest(".custom-select-menu")); 2159 } 2160 $dropdownToggle.removeClass("is-placeholder"); 2161 }); 2162 function convertOptionToButton(option) { 2163 var optionText = $(option).text(); 2164 var optionValue = $(option).attr("value") || $(option).text(); 2165 var optionIsDisabled = $(option).prop("disabled"); 2166 var outputButton = `<button value="${optionValue}" class="custom-select-item" type="button" ${optionIsDisabled ? "disabled" : ""}>${optionText}</button>`; 2167 return outputButton; 2168 } 2169 function appendOptionButtons(selectItem, appendTarget) { 2170 $(selectItem).find("option").each(function () { 2171 let currentButton = convertOptionToButton(this); 2172 $(appendTarget).append(currentButton); 2173 }); 2174 } 2175 function showSelectMenu(selectMenu) { 2176 var customSelect = $(selectMenu).closest(".custom-select")[0]; 2177 $(customSelect).addClass("open"); 2178 $(selectMenu).slideDown(); 2179 } 2180 function closeSelectMenu(selectMenu) { 2181 var customSelect = $(selectMenu).closest(".custom-select")[0]; 2182 $(customSelect).removeClass("open"); 2183 $(selectMenu).slideUp(); 2184 } 2185 $dropdown.on("click", ".custom-select-toggle", function (e) { 2186 var $customSelect = $(this).closest(".custom-select"); 2187 var selectMenu = $customSelect.find(".custom-select-menu")[0]; 2188 if ($customSelect.hasClass("open")) { 2189 closeSelectMenu(selectMenu); 2190 } else { 2191 showSelectMenu(selectMenu); 2192 } 2193 }); 2194 $(document).on("click", function (e) { 2195 if ($(e.target).closest(".custom-select").length < 1 && $(".custom-select").hasClass("open")) { 2196 $(".custom-select.open").each(function () { 2197 var selectMenu = $(this).find(".custom-select-menu")[0]; 2198 closeSelectMenu(selectMenu); 2199 }); 2200 } 2201 }); 2202 } 2203 $(".pop-up select[name='interest']").each(function () { 2204 selectToDropdown(this); 2205 }); 2206})('global-mobile-contact'); 2207} catch(e) { 2208console.log(e); 2209} 2210 2211 try { 2212(function init(sectionDomId) { 2213 const $section = $('#' + sectionDomId); 2214 const $videoWrap = $section.find('.full-screen-video-component > .video-wrapper'); 2215 const $playButton = $section.find('.js-play-btn'); 2216 if ($videoWrap.length) { 2217 const $video = $videoWrap.find('video'); 2218 $video.each(function () { 2219 var v = this; 2220 if (v.readyState > 0) { 2221 $videoWrap.addClass('playing'); 2222 var promise = v.play(); 2223 if (promise !== undefined) { 2224 promise.catch(error => { 2225 $playButton.addClass('visible'); 2226 }).then(() => {}); 2227 } 2228 } else { 2229 v.addEventListener('canplay', function () { 2230 $videoWrap.addClass('playing'); 2231 }, { 2232 once: true 2233 }); 2234 } 2235 }); 2236 } 2237 $playButton.on('click', function () { 2238 const $video = $videoWrap.find('video'); 2239 this.classList.remove('visible'); 2240 if ($video[0].currentTime === 0) { 2241 $video[0].load(); 2242 $video[0].play(); 2243 } 2244 }); 2245 window.luxuryPresence.mapApiLoader.load().then(() => {
2246 const $searchWrapper = $section.find('.search-wrapper'); 2247 if (!$searchWrapper.length) { 2248 return; 2249 } 2250 const searchMls = $searchWrapper[0].dataset.searchMls === 'true'; 2251 const searchProperties = $searchWrapper[0].dataset.searchProperties === 'true'; 2252 const searchPlaces = searchMls; 2253 const showNeighborhoods = searchMls; 2254 const searchNearEnabled = searchMls; 2255 const $searchInput = $section.find('.search-input'); 2256 const $searchResults = $section.find('.search-results'); 2257 const $resultsContainer = $section.find('.results-container'); 2258 const $loader = $section.find('.search-in-progress'); 2259 const $predefined = $section.find('.predefined-links'); 2260 const $searchBtn = $section.find('.search-button'); 2261 const $leaseFalseButton = $section.find('.jsLeaseFalse'); 2262 const $leaseTrueButton = $section.find('.jsLeaseTrue'); 2263 const $nextSection = $section.next(); 2264 const fixZIndex = $nextSection.length && parseInt($nextSection.css('z-index')) || 1; 2265 const searchDelay = 300; 2266 const maxPlaces = 3; 2267 const maxMls = 5; 2268 const leaseFilter = $leaseFalseButton.length > 0 && $leaseTrueButton.length > 0; 2269 const service = new google.maps.places.AutocompleteService(); 2270 const geocoder = new google.maps.Geocoder(); 2271 var keyword; 2272 var leasePropertyState = false; 2273 var leasePropertySearched; 2274 var searchActive = false; 2275 var isLoading = false; 2276 function showSearchResults() { 2277 searchActive = true; 2278 updateSearchDisplay(); 2279 } 2280 function hideSearchResults() { 2281 searchActive = false; 2282 updateSearchDisplay(); 2283 } 2284 function showLoading() { 2285 isLoading = true; 2286 updateSearchDisplay(); 2287 } 2288 function hideLoading() { 2289 isLoading = false; 2290 updateSearchDisplay(); 2291 } 2292 function updateSearchDisplay() { 2293 if (leaseFilter) { 2294 if (leasePropertyState) { 2295 $leaseTrueButton.addClass('active'); 2296 $leaseFalseButton.removeClass('active'); 2297 } else { 2298 $leaseFalseButton.addClass('active'); 2299 $leaseTrueButton.removeClass('active'); 2300 } 2301 } 2302 if (!searchActive) { 2303 $searchResults.removeClass('show'); 2304 $searchResults.css('height', '0'); 2305 return; 2306 } 2307 var hasResults = !!$resultsContainer.html(); 2308 var hasPredefined = $predefined.find('a:not(.not-processed)').length > 0; 2309 if (hasResults) { 2310 $predefined.addClass('not-visible'); 2311 $loader.addClass('not-visible'); 2312 $resultsContainer.removeClass('not-visible'); 2313 } else if (isLoading) { 2314 $resultsContainer.addClass('not-visible'); 2315 $predefined.addClass('not-visible'); 2316 $loader.removeClass('not-visible'); 2317 } else if (hasPredefined) { 2318 $resultsContainer.addClass('not-visible'); 2319 $loader.addClass('not-visible'); 2320 $predefined.removeClass('not-visible'); 2321 } else { 2322 $resultsContainer.addClass('not-visible'); 2323 $loader.addClass('not-visible'); 2324 $predefined.addClass('not-visible'); 2325 } 2326 var height = 0; 2327 height += $predefined[0].getBoundingClientRect().height; 2328 height += $resultsContainer[0].getBoundingClientRect().height; 2329 height += $loader[0].getBoundingClientRect().height; 2330 if (height > 0) { 2331 $searchResults.addClass('show'); 2332 } else { 2333 $searchResults.removeClass('show'); 2334 } 2335 $searchResults.css('height', height + 'px'); 2336 } 2337 function clearSelection() { 2338 $searchResults.find('.selected-link').removeClass('selected-link'); 2339 } 2340 function moveSelection(up) { 2341 var $cont = $resultsContainer.html() ? $resultsContainer : $predefined; 2342 var $links = $cont.find('.results-link'); 2343 if (!$links.length) { 2344 return; 2345 } 2346 var idx = -1; 2347 $links.each(function (i) { 2348 if (idx === -1 && $(this).is('.selected-link')) { 2349 idx = i; 2350 } 2351 }); 2352 var newIdx; 2353 if (up) { 2354 newIdx = idx - 1; 2355 if (newIdx < 0) { 2356 newIdx = $links.length - 1; 2357 } 2358 } else { 2359 newIdx = idx + 1; 2360 if (newIdx > $links.length - 1) { 2361 newIdx = 0; 2362 } 2363 } 2364 if (newIdx !== idx) { 2365 $searchResults.find('.selected-link').removeClass('selected-link'); 2366 $($links.get(newIdx)).addClass('selected-link'); 2367 } 2368 } 2369 var newSearchTimer; 2370 function inputChanged(ev) { 2371 if (ev.which === 38) { 2372 ev.preventDefault(); 2373 moveSelection(true); 2374 return false;
2375 } 2376 if (ev.which === 40) { 2377 ev.preventDefault(); 2378 moveSelection(); 2379 return false; 2380 } 2381 if (ev.which === 13) { 2382 $lnk = $searchResults.find('.selected-link'); 2383 if ($lnk.length) { 2384 $lnk[0].click(); 2385 hideSearchResults(); 2386 } else { 2387 $searchBtn.click(); 2388 } 2389 } 2390 window.clearTimeout(newSearchTimer); 2391 newSearchTimer = window.setTimeout(startSearch, searchDelay); 2392 } 2393 function startSearch() { 2394 const term = $searchInput.val(); 2395 if (term === keyword && leasePropertySearched === leasePropertyState) { 2396 return; 2397 } 2398 leasePropertySearched = leasePropertyState; 2399 keyword = term; 2400 if (term) { 2401 doSearch(term, leasePropertySearched); 2402 } else { 2403 setResults(null); 2404 } 2405 } 2406 function mlsSearch(term, leaseProperty) { 2407 var query = { 2408 keyword_search: term, 2409 limit: maxMls 2410 }; 2411 if (leaseFilter && leaseProperty) { 2412 query.lease_property = true; 2413 } 2414 return superagent.get(window.location.protocol + '//' + window.location.host + '/home-search/listings.json').query(query).then(function (res) { 2415 if (!Array.isArray(res.body)) { 2416 return []; 2417 } 2418 return res.body.map(function (item) { 2419 return { 2420 id: item.id, 2421 display_address: [item.address_1, item.city, [item.state, item.postal_code].filter(function (i) { 2422 return i; 2423 }).join(' ')].filter(function (i) { 2424 return i; 2425 }).join(', ') 2426 }; 2427 }); 2428 }, function (e) { 2429 console.log(e); 2430 return []; 2431 }); 2432 } 2433 function resolveGeoBounds(placeId, description, terms) { 2434 return new Promise(function (resolve, reject) { 2435 geocoder.geocode({ 2436 'placeId': placeId 2437 }, function (results, status) { 2438 if (status != 'OK') { 2439 return resolve(null); 2440 } 2441 var result = results[0]; 2442 var bounds = new google.maps.LatLngBounds();
2443 bounds.extend(result.geometry.viewport.getSouthWest()); 2444 bounds.extend(result.geometry.viewport.getNorthEast()); 2445 result.geometry.bounds = bounds.toJSON(); 2446 var placeUrl = window.luxuryPresence.makeMlsLink(result); 2447 return resolve({ 2448 placeUrl: placeUrl, 2449 description: description, 2450 cityName: terms[0].value, 2451 stateName: terms[1].value 2452 }); 2453 }); 2454 }); 2455 } 2456 function resolveAutocomplete(term, deeper) { 2457 var request = { 2458 input: term, 2459 componentRestrictions: { 2460 country: 'us' 2461 }, 2462 types: deeper ? ['geocode'] : ['(regions)'], 2463 limit: 1 2464 }; 2465 return new Promise(function (resolve, reject) { 2466 service.getPlacePredictions(request, function (results, status) { 2467 if (status !== google.maps.places.PlacesServiceStatus.OK) { 2468 resolve(null); 2469 return; 2470 } 2471 if (!Array.isArray(results)) { 2472 resolve(null); 2473 return; 2474 } 2475 if (deeper) { 2476 var allowedTypes = { 2477 'neighborhood': true, 2478 'administrative_area_level_3': true, 2479 'administrative_area_level_4': true, 2480 'administrative_area_level_5': true, 2481 'sublocality_level_1': true, 2482 'sublocality_level_2': true, 2483 'sublocality_level_3': true 2484 }; 2485 results = results.filter(function (res) { 2486 return res.types.find(t => allowedTypes[t]); 2487 }); 2488 } 2489 if (!results.length) { 2490 resolve(null); 2491 return; 2492 } 2493 resolve(results); 2494 }); 2495 }); 2496 } 2497 var placesResult = {}; 2498 function placesSearch(term, ignoreInput) { 2499 if (placesResult.term !== term) { 2500 placesResult = { 2501 term: term, 2502 result: resolveAutocomplete(term).then(function (results) { 2503 if (!ignoreInput && term !== keyword) { 2504 return null; 2505 } 2506 if (ignoreInput && !results) { 2507 return resolveAutocomplete(term, true); 2508 } 2509 return results; 2510 }).then(function (results) { 2511 if (!ignoreInput && term !== keyword) { 2512 return []; 2513 } 2514 if (!results) { 2515 return []; 2516 } 2517 var geoResultPromises = results.map(function (result) { 2518 return resolveGeoBounds(result.place_id, result.description, result.terms); 2519 }); 2520 return Promise.all(geoResultPromises).then(function (geoLinks) { 2521 return geoLinks.filter(function (i) { 2522 return i; 2523 }).slice(0, maxPlaces); 2524 }); 2525 }) 2526 }; 2527 } 2528 return placesResult.result; 2529 } 2530 function propertiesSearch(term, leaseProperty) { 2531 var payload = { 2532 companyId: window.luxuryPresence.defaults.companyId, 2533 search: term, 2534 offset: 0, 2535 limit: 6, 2536 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"] 2537 }; 2538 if (leaseFilter) { 2539 payload.leaseProperty = !!leaseProperty; 2540 } 2541 var gqlQuery = 'query ($companyId: String, $search: String, $offset: Int, $limit: Int, $propertyStatusId: [String!], $leaseProperty: Boolean) {properties (companyId: $companyId, search: $search, offset: $offset, limit: $limit, propertyStatusId: $propertyStatusId, leaseProperty: $leaseProperty) {items {id name slug fullAddress privateAddress}}}'; 2542 return superagent.post(window.luxuryPresence.defaults.routerUrl + '/graphql').send({ 2543 query: gqlQuery, 2544 variables: window.luxuryPresence.routerApi.transformVariables('properties', payload) 2545 }).then(function (res) { 2546 var data = res.body.data || {}; 2547 var page = data.properties || {}; 2548 return page.items || []; 2549 }, function (err) { 2550 return []; 2551 }); 2552 } 2553 function doSearch(term, leaseProperty) { 2554 showLoading(); 2555 Promise.all([searchMls ? mlsSearch(term, leaseProperty) : [], searchPlaces ? placesSearch(term) : [], searchProperties ? propertiesSearch(term, leaseProperty) : []]).then(function (res) { 2556 if (term !== keyword) { 2557 return; 2558 } 2559 setResults(res[0], res[1], res[2], leaseProperty); 2560 }); 2561 } 2562 function makeResultsBlockHtml(title, links) { 2563 if (!links || !links.length) { 2564 return ''; 2565 } 2566 var html = '<div class="results-block">'; 2567 html += '<div class="results-block-title">'; 2568 if (searchNearEnabled) { 2569 html += '<div class="search-near-container"><a class="search-near lp-link lp-link--light">Search Near Me</a></div>'; 2570 } 2571 html += '<div class="results-title-label">' + title + '</div></div>'; 2572 html += links.join('') + '</div>'; 2573 return html; 2574 } 2575 function setResults(mlsResults, placesResults, propertiesResults, leaseProperty) { 2576 clearSelection(); 2577 hideLoading(); 2578 if (!mlsResults) { 2579 $resultsContainer.html(''); 2580 updateSearchDisplay(); 2581 return; 2582 } 2583 if (!mlsResults.length && !placesResults.length && !propertiesResults.length) { 2584 $resultsContainer.html('<div class="nothing-found">No results found</div>'); 2585 updateSearchDisplay(); 2586 return; 2587 } 2588 var propertiesHtml = makeResultsBlockHtml('Featured Properties', propertiesResults.map(function (result) { 2589 return `<a href="/properties/${result.slug}" class="results-link">${result.privateAddress ? result.name : result.fullAddress}</a>`; 2590 })); 2591 var placesHtml = makeResultsBlockHtml('Locations', placesResults.map(function (result) { 2592 return `<a class="results-link" href="${result.placeUrl}${leaseProperty ? '&lease_property=true' : ''}&cityName=${result.cityName}&stateName=${result.stateName}">${result.description}</a>`; 2593 })); 2594 var mlsHtml = makeResultsBlockHtml('Address', mlsResults.map(function (result) { 2595 return `<a href="/home-search/listings/${result.id}" class="results-link">${result.display_address}</a>`; 2596 }));
2597 $resultsContainer.html(propertiesHtml + placesHtml + mlsHtml); 2598 updateSearchDisplay(); 2599 } 2600 function searchBtnClicked() { 2601 var resultsBlockHref = $("#" + sectionDomId + " .results-block .results-link").attr("href"); 2602 const term = $searchInput.val(); 2603 if (!term) { 2604 return; 2605 } 2606 if (searchMls) { 2607 window.location.href = resultsBlockHref; 2608 return; 2609 } 2610 if (searchProperties) { 2611 window.location.href = "/properties/sale"; 2612 } 2613 } 2614 var neighborhoods = null; 2615 function fetchNeighborhoods() { 2616 var url = window.luxuryPresence.defaults.routerUrl; 2617 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'neighborhoods (companyId: $companyId, offset: $offset, limit: $limit) {items {id, name, mlsLink, googlePlaceData}}}'; 2618 var payload = {}; 2619 payload.offset = 0; 2620 payload.limit = 100; 2621 payload.companyId = window.luxuryPresence.defaults.companyId; 2622 return superagent.post(url + '/graphql').withCredentials().send({ 2623 query: gqlQuery, 2624 variables: payload 2625 }).then(function (res) { 2626 var data = res.body.data && res.body.data.neighborhoods; 2627 neighborhoods = data && data.items || null; 2628 if (neighborhoods && !neighborhoods.length) { 2629 neighborhoods = null; 2630 } 2631 }); 2632 } 2633 function setPredefinedNeighborhoods() { 2634 return fetchNeighborhoods().then(function () { 2635 if (!neighborhoods) { 2636 return; 2637 } 2638 var leaseProperty = leaseFilter && leasePropertyState; 2639 var placesHtml = makeResultsBlockHtml('Locations', neighborhoods.map(function (item) { 2640 return `<a class="results-link" href="${item.mlsLink}${leaseProperty ? '&lease_property=true' : ''}">${item.googlePlaceData && item.googlePlaceData.formatted_address || item.name}</a>`; 2641 })); 2642 $predefined.html(placesHtml); 2643 updateSearchDisplay(); 2644 }); 2645 } 2646 if (showNeighborhoods) { 2647 setPredefinedNeighborhoods(); 2648 } 2649 $searchInput.on('focus', showSearchResults); 2650 $searchInput.on('keyup focus', inputChanged); 2651 $searchResults.on('mouseenter', '.results-link', function (ev) { 2652 clearSelection(); 2653 }); 2654 $searchBtn.on('click', searchBtnClicked); 2655 $leaseFalseButton.on('click', function () { 2656 if (leasePropertyState) { 2657 leasePropertyState = false; 2658 if (showNeighborhoods) { 2659 setPredefinedNeighborhoods(); 2660 } 2661 updateSearchDisplay(); 2662 setResults(null); 2663 startSearch(); 2664 } 2665 }); 2666 $leaseTrueButton.on('click', function () { 2667 if (!leasePropertyState) { 2668 leasePropertyState = true; 2669 if (showNeighborhoods) { 2670 setPredefinedNeighborhoods(); 2671 } 2672 updateSearchDisplay(); 2673 setResults(null); 2674 startSearch(); 2675 } 2676 }); 2677 function createPolygonUrl(center, radius, n) { 2678 var step = Math.PI * 2 / n; 2679 var angle = 0 - step / 2; 2680 var points = []; 2681 var kx = 1.0 / Math.cos(center[1] * Math.PI / 180); 2682 for (var i = 0; i < n; i++) { 2683 points.push('[' + (center[0] + radius * Math.sin(angle) * kx).toFixed(5) + ',' + (center[1] - radius * Math.cos(angle)).toFixed(5) + ']'); 2684 angle += step; 2685 } 2686 points.push(points[0]); 2687 var str = '[[' + points.join(',') + ']]'; 2688 return '&polygon=' + encodeURIComponent(str); 2689 } 2690 function makeNearMeUrl(center, leaseProperty) { 2691 var url = '/home-search/listings?search_type=envelope'; 2692 if (leaseProperty) { 2693 url += '&lease_property=true'; 2694 } 2695 var distance = 0.11; 2696 var lat = center[1]; 2697 var lng = center[0]; 2698 url += '&south=' + (lat - distance); 2699 url += '&north=' + (lat + distance); 2700 url += '&west=' + (lng - distance); 2701 url += '&east=' + (lng + distance); 2702 url += createPolygonUrl(center, distance, 54); 2703 return url; 2704 } 2705 var $locMsg = null; 2706 $section.on('click', '.search-near', function () { 2707 showLoading(); 2708 navigator.geolocation.getCurrentPosition(function (position) { 2709 hideLoading(); 2710 hideSearchResults(); 2711 if (!position || !position.coords || !position.coords.latitude || !position.coords.longitude) { 2712 showLocationMessage('Unknown Location', '<p>Getting position of your device failed.</p><p>
2712You can type your address manually in the search field</p>'); 2713 return; 2714 } 2715 var url = makeNearMeUrl([position.coords.longitude, position.coords.latitude], leaseFilter && leasePropertyState); 2716 var link = document.createElement('a'); 2717 link.href = url; 2718 link.class = 'lp-visually-hidden'; 2719 $section[0].appendChild(link); 2720 link.click(); 2721 setTimeout(function () { 2722 $section[0].removeChild(link); 2723 }, 100); 2724 }, function (geoError) { 2725 hideLoading(); 2726 hideSearchResults(); 2727 var title = 'Unknown Location'; 2728 var msg; 2729 if (geoError.code === 1) { 2730 msg = '<p>To be able to search near you we need to know your current location.</p><p>If you don\'t want to give access to your device\'s location, you can type your address in the search field</p>'; 2731 } else { 2732 msg = '<p>Getting position of your device failed.</p><p>You can type your address manually in the search field</p>'; 2733 } 2734 showLocationMessage(title, msg); 2735 }); 2736 }); 2737 var locHideTimer = null; 2738 function showLocationMessage(title, message) { 2739 clearTimeout(locHideTimer); 2740 if (!$locMsg) { 2741 var html = `<div class="loc-msg-backdrop"> 2742 <div class="loc-msg-wrap"> 2743 <div class="loc-msg-modal"> 2744 <div class="loc-msg-close"></div> 2745 <h4 class="loc-msg-title lp-h4"></h4> 2746 <div class="loc-msg-container"></div> 2747 </div> 2748 </div> 2749 </div> 2750 `; 2751 $locMsg = $(html); 2752 $locMsg.on('click', hideLocationMessage); 2753 $section.append($locMsg); 2754 } 2755 $locMsg.find('.loc-msg-container').html(message); 2756 $locMsg.find('.loc-msg-title').html(title); 2757 setTimeout(function () { 2758 if ($locMsg) { 2759 $section.addClass('visible-loc-msg'); 2760 } 2761 }); 2762 } 2763 function hideLocationMessage() { 2764 $section.removeClass('visible-loc-msg'); 2765 locHideTimer = setTimeout(function () { 2766 $locMsg.remove(); 2767 $locMsg = null; 2768 }, 400); 2769 } 2770 function outsideClickHandler(e) { 2771 if ($searchWrapper.find($(e.target)).length > 0) { 2772 return; 2773 } 2774 hideSearchResults(); 2775 } 2776 $(document).on('click', outsideClickHandler); 2777 if ('geolocation' in navigator) { 2778 $searchWrapper.removeClass('search-near-hidden'); 2779 } 2780 updateSearchDisplay(); 2781 }); 2782})('section-08c11126-4ca7-4355-a714-186817126398', 'undefined'); 2783} catch(e) { 2784console.log(e); 2785} 2786 try { 2787(function init(sectionDomId, options) { 2788 let section = null; 2789 switch (sectionDomId) { 2790 case 'NAVBAR': 2791 section = document.querySelector('body > nav, #global-navbar'); 2792 break; 2793 case 'FOOTER': 2794 section = document.querySelector('body > footer, #global-footer'); 2795 break; 2796 case 'SIDEMENU': 2797 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 2798 break; 2799 case 'CONTACT': 2800 section = document.querySelector('#modal-global-contact-us'); 2801 break; 2802 case 'MOBILE_CONTACT': 2803 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 2804 break; 2805 case 'SUBSCRIBE': 2806 // Subscribe Not Implemented 2807 section = null; 2808 break; 2809 case 'ACCOUNT': 2810 // Account Not Implemented 2811 section = null; 2812 break; 2813 default: 2814 section = document.querySelector('#' + sectionDomId); 2815 } 2816 if (!section) { 2817 return; 2818 } 2819 2820 // Where content / items are rendered 2821 const dataContainer = section.querySelector('.data-container'); 2822 if (!dataContainer) { 2823 // no place to render items = no need to query server or do anything else 2824 return; 2825 } 2826 let variables = options.variables || {}; 2827 2828 // Some variables in options may not have been injected - remove 2829 Object.keys(variables).forEach(function (variableName) { 2830 if (typeof variables[variableName] === 'string' && variables[variableName].match(/^{{.*}}$/)) { 2831 delete variables[variableName]; 2832 } 2833 }); 2834 2835 // Merge page query variables 2836 if (options.usePageResource) { 2837 variables = { 2838 ...variables, 2839 ...window.luxuryPresence.config.pageMeta.pageQueryVariables[options.resource] 2840 }; 2841 } 2842 2843 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Callers 2844 // resolve the flag â fetchData reads the section stamp, aux fetches read 2845 // their own resource's stamp (auxUsesRouter). 2846 function apiUrl(useRouter) { 2847 return options.url || (useRouter ? window.luxuryPresence.defaults.routerUrl : window.luxuryPresence.defaults.apiGatewayUrl); 2848 } 2849 2850 // ROUTER-CLEANUP: aux resources roll out on their own flag, not the section's 2851 // (options.routerApiAux is stamped per aux resource server-side). 2852 function auxUsesRouter(resource) { 2853 return !!(options.routerApiAux && options.routerApiAux[resource]); 2854 } 2855 2856 // Pagination Executes on a Numbered Pagination Container 2857 // Or via a load more button 2858 let mode = 'BUTTONLESS_PAGINATION'; 2859 const container = section.querySelector('.pagination-container');
2860 const loadMoreButton = section.querySelector(options?.loadMoreSelector); 2861 if (container) { 2862 mode = 'NUMBERED_PAGINATION'; 2863 } 2864 if (loadMoreButton) { 2865 mode = 'LOAD_MORE_BUTTON'; 2866 } 2867 let searchContainer = section.querySelector('.search-container'); 2868 const hidePaginationOnFirstPage = options.hidePaginationOnFirstPage || false; 2869 const eventPrefix = '__pagination-'; 2870 const searchFormParams = options.searchFormParams || (options.resource === 'properties' ? [{ 2871 param: 'neighborhoodId', 2872 urlKey: 'neighborhood' 2873 }, { 2874 param: 'search', 2875 urlKey: 'search' 2876 }, { 2877 param: 'salesPriceGTE', 2878 urlKey: 'pricemin', 2879 formKey: 'priceMin', 2880 type: 'int' 2881 }, { 2882 param: 'salesPriceLTE', 2883 urlKey: 'pricemax', 2884 formKey: 'priceMax', 2885 type: 'int' 2886 }, { 2887 param: 'livingSpaceSizeGTE', 2888 urlKey: 'areamin', 2889 formKey: 'areaMin', 2890 type: 'int' 2891 }, { 2892 param: 'livingSpaceSizeLTE', 2893 urlKey: 'areamax', 2894 formKey: 'areaMax', 2895 type: 'int' 2896 }] : []); 2897 2898 // Total entries - initialized in first render 2899 let totalNumber = 0; 2900 const DefaultSearchParams = { 2901 page: 1 2902 }; 2903 searchFormParams.forEach(function (formParam) { 2904 DefaultSearchParams[formParam.formKey || formParam.param] = null; 2905 }); 2906 let searchParams = { 2907 ...DefaultSearchParams 2908 }; 2909 const offset = options.variables?.offset || 0; 2910 let scrollTarget = options.scrollTargetSelector ? section.querySelector(options.scrollTargetSelector) || section : section; 2911 let scrollOffset = (parseInt(options.scrollOffset, 10) || 0) ?? 100; 2912 2913 // entries of per page 2914 // when query variables for a given section would't be filled options.pageSize can store 2915 // template string, ex: "{{variables.limit}}", below code handles that case and set 9 as a default value 2916 let pageSize = parseInt(options.pageSize, 10) || 9; 2917 2918 // Adding mobile pageRange support 2919 var NARROW_BREAKPOINT = 600; 2920 var mobileBreakpoint = options.mobileBreakpoint > 0 ? options.mobileBreakpoint : NARROW_BREAKPOINT; 2921 var paginationMql = window.matchMedia(`(max-width: ${mobileBreakpoint}px)`); 2922 2923 // Page range (pages on both sides of the current page) 2924 var mobilePageRange = options.mobilePageRange > 0 ? options.mobilePageRange : 0; 2925 var desktopPageRange = options.pageRange >= 0 ? options.pageRange : 2; 2926 var pageRange = paginationMql.matches ? mobilePageRange : desktopPageRange; 2927 2928 // Whether to display the 'Previous' button 2929 var showPrevious = true; 2930 2931 // Whether to display the 'Next' button 2932 var showNext = true; 2933 2934 // Whether to display the page buttons 2935 var showPageNumbers = true; 2936 2937 // 'Previous' text 2938 var prevText = options.prevText || '«'; 2939 2940 // 'Next' text 2941 var nextText = options.nextText || '»'; 2942 2943 // Ellipsis text 2944 var ellipsisText = '…'; 2945 var classPrefix = 'paginationjs'; 2946 2947 // Default active class 2948 var activeClassName = 'active'; 2949 2950 // Default disable class 2951 var disableClassName = 'disabled'; 2952 2953 // Pagination element's position in the container 2954 var position = 'bottom'; 2955 2956 // Whether to trigger pagination at initialization 2957 var triggerPagingOnInit = !options.skipInitialLoad; 2958 var showFirstOnEllipsisShow = true; 2959 var showLastOnEllipsisShow = true; 2960 2961 // Instantiated in init() 2962 var el = null; 2963 2964 // Controls scrollTop logic 2965 var firstRender = true; 2966 var renderBySearch = false; 2967 var disabled = false; 2968 2969 // Pagination script class selector 2970 var paginationScriptSelector = options.paginationPartialName ? `.${options.paginationPartialName}` : '.pagination-script'; 2971 2972 // Property Specific Image Override if No Image 2973 var propertyPlaceholderImage = window.luxuryPresence.defaults.propertyPlaceholderImage; 2974 2975 // Construct template 2976 var templateHTML = section.querySelector(`script${paginationScriptSelector}`)?.innerHTML || ''; 2977 var template = Handlebars.compile(templateHTML); 2978 2979 // Initialize 2980 init(); 2981 function init() { 2982 Object.assign(searchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 2983 2984 // Append/prepend pagination element to the pagination container 2985 if (mode === 'NUMBERED_PAGINATION') { 2986 el = document.createElement('div'); 2987 el.className = 'paginationjs';
2988 container[position === 'bottom' ? 'append' : 'prepend'](el); 2989 } 2990 if (searchContainer) { 2991 initSearchContainer({ 2992 fetchNeighborhoods: searchContainer.dataset.fetchNeighborhoods === 'true', 2993 fetchPostCategories: searchContainer.dataset.fetchPostCategories === 'true', 2994 fetchOffices: searchContainer.dataset.fetchOffices === 'true', 2995 fetchRentalRates: searchContainer.dataset.fetchRentalRates === 'true' 2996 }, function () { 2997 syncSearchFormState(searchParams); 2998 }); 2999 } 3000 3001 // Bind events 3002 observer(); 3003 } 3004 function syncSearchFormState(params) { 3005 searchContainer.dispatchEvent(new CustomEvent('sync', { 3006 detail: params 3007 })); 3008 } 3009 function initSearchContainer(options, done) { 3010 var promises = []; 3011 if (options.fetchNeighborhoods) { 3012 promises.push(fetchAllNeighborhoods(function (neighborhoods) { 3013 searchContainer.dispatchEvent(new CustomEvent('neighborhoods-data', { 3014 detail: { 3015 data: neighborhoods.map(function (item) { 3016 return { 3017 value: item.id, 3018 label: item.name 3019 }; 3020 }) 3021 } 3022 })); 3023 })); 3024 } 3025 if (options.fetchPostCategories) { 3026 promises.push(fetchPostCategories(function (categories) { 3027 searchContainer.dispatchEvent(new CustomEvent('post-categories-data', { 3028 detail: { 3029 data: categories 3030 } 3031 })); 3032 })); 3033 } 3034 if (options.fetchOffices) { 3035 promises.push(fetchOffices(function (offices) { 3036 searchContainer.dispatchEvent(new CustomEvent('offices-data', { 3037 detail: { 3038 data: offices 3039 } 3040 })); 3041 })); 3042 } 3043 if (options.fetchRentalRates) { 3044 promises.push(fetchAllRentalRates(function (rentalRates) { 3045 searchContainer.dispatchEvent(new CustomEvent('rental-rates-data', { 3046 detail: { 3047 data: rentalRates 3048 } 3049 })); 3050 })); 3051 } 3052 if (promises.length > 0) { 3053 Promise.all(promises).then(function () { 3054 done(); 3055 }); 3056 } else { 3057 // element's custom code is not executed yet, so we're scheduling callback to after element's code 3058 setTimeout(done); 3059 } 3060 } 3061 function fetchAllNeighborhoods(done) { 3062 var useRouter = auxUsesRouter('neighborhoods'); 3063 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Same 3064 // args on both APIs (the federated neighborhoods field accepts 3065 // withProperties/withBlogPosts); only the selection set differs. 3066 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') + '}}'; 3067 var payload = {}; 3068 payload.offset = 0; 3069 payload.limit = 100; 3070 payload.companyId = variables.companyId; 3071 if (options.resource === 'properties') { 3072 payload.withProperties = { 3073 active: true 3074 }; 3075 ['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) { 3076 if (variables[field] !== undefined && variables[field] !== null) { 3077 payload.withProperties[field] = variables[field]; 3078 } 3079 }); 3080 } 3081 if (options.resource === 'posts') { 3082 payload.withBlogPosts = { 3083 active: true 3084 }; 3085 ['search', 'postStatusId', 'featured', 'categoryId', 'categoryIds', 'neighborhoodId', 'slug'].forEach(function (field) { 3086 if (variables[field] !== undefined && variables[field] !== null) { 3087 payload.withBlogPosts[field] = variables[field]; 3088 } 3089 }); 3090 } 3091 3092 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 3093 if (useRouter) { 3094 payload = window.luxuryPresence.routerApi.transformVariables('neighborhoods', payload); 3095 } 3096 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 3097 query: gqlQuery, 3098 variables: payload 3099 }).then(function (res) { 3100 var value = res.body.data && res.body.data.neighborhoods || {}; 3101 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 3102 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 3103 done(items, items.length); 3104 }); 3105 } 3106 function fetchPostCategories(done) { 3107 var featured = options.resource === 'posts' && !!variables.featured; 3108 var useRouter = auxUsesRouter('postCategories'); 3109 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 3110 // selection set differs ({ items {...} } on the router). 3111 var selection = 'id, name, publishedCount, featuredPublishedCount'; 3112 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) + '}}'; 3113 var payload = {}; 3114 payload.offset = 0; 3115 payload.limit = 100; 3116 payload.companyId = variables.companyId; 3117 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 3118 query: gqlQuery, 3119 variables: payload 3120 }).then(function (res) { 3121 var value = res.body.data && res.body.data.postCategories || {}; 3122 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 3123 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 3124 done(items.map(function (item) { 3125 item.count = featured ? item.featuredPublishedCount : item.publishedCount; 3126 return item; 3127 }), items.length); 3128 }); 3129 } 3130 function fetchOffices(done) { 3131 var useRouter = auxUsesRouter('offices'); 3132 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 3133 // selection set differs ({ items {...} } on the router). 3134 var selection = 'id, name, tags'; 3135 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. The two 3136 // APIs differ in more than the items wrapper: federated offices takes 3137 // companyId: ID! (legacy gateway: String), so each branch builds its whole doc. 3138 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 + '}}'; 3139 var payload = { 3140 offset: 0, 3141 limit: 100, 3142 companyId: variables.companyId 3143 }; 3144 3145 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 3146 if (useRouter) { 3147 payload = window.luxuryPresence.routerApi.transformVariables('office
3147s', payload); 3148 } 3149 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 3150 query: gqlQuery, 3151 variables: payload 3152 }).then(function (res) { 3153 var value = res.body.data && res.body.data.offices || {}; 3154 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 3155 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 3156 done(items, items.length); 3157 }); 3158 } 3159 3160 // ROUTER-CLEANUP: no rentalRates field on the federated router â legacy only. 3161 function fetchAllRentalRates(done) { 3162 var url = options.url || window.luxuryPresence.defaults.apiGatewayUrl; 3163 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'rentalRates (companyId: $companyId, offset: $offset, limit: $limit) {rentalRateId, label}}'; 3164 var payload = { 3165 offset: 0, 3166 limit: 100, 3167 companyId: variables.companyId 3168 }; 3169 superagent.post(url + '/graphql').withCredentials().send({ 3170 query: gqlQuery, 3171 variables: payload 3172 }).then(function (res) { 3173 var items = res.body.data && res.body.data.rentalRates || []; 3174 done(items, items.length); 3175 }).catch(function (err) { 3176 console.error('Error fetching rental rates:', err); 3177 done([], 0); 3178 }); 3179 } 3180 function fetchData(params, done) { 3181 var resource = options.resource; 3182 var gqlQuery = options.query || window.luxuryPresence.defaults.gql[resource]; 3183 var payload = {}; 3184 try { 3185 payload = JSON.parse(JSON.stringify(variables)); 3186 } catch (e) { 3187 Object.keys(variables).forEach(function (variableName) { 3188 payload[variableName] = variables[variableName]; 3189 }); 3190 } 3191 payload.offset = (params.page - 1) * pageSize + offset; 3192 payload.limit = pageSize; 3193 payload.companyId = options.companyId; 3194 searchFormParams.forEach(function (formParam) { 3195 var val = params[formParam.formKey || formParam.param]; 3196 if (val !== null && val !== undefined) { 3197 objSet(payload, formParam.param, val); 3198 } 3199 }); 3200 3201 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 3202 if (options.useRouterApi) { 3203 payload = window.luxuryPresence.routerApi.transformVariables(resource, payload); 3204 } 3205 3206 // TODO: Disabled loading due to jarring effect 3207 // dataContainer.html('Loading...'); 3208 superagent.post(apiUrl(options.useRouterApi) + '/graphql').withCredentials().send({ 3209 query: gqlQuery, 3210 variables: payload 3211 }).then(function (res) { 3212 if (res.body.errors) { 3213 done(res.body.errors); 3214 return; 3215 } 3216 var data = res.body.data || {}; 3217 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 3218 var resources; 3219 var resourceCount; 3220 if (options.useRouterApi) { 3221 var page = window.luxuryPresence.routerApi.transformPage(data[resource]); 3222 resources = window.luxuryPresence.routerApi.transformResponse(resource, page.items); 3223 resourceCount = page.count; 3224 } else { 3225 resources = data[resource] || []; 3226 resourceCount = data[resource + 'Count'] && data[resource + 'Count'].count ? data[resource + 'Count'].count : 0; 3227 } 3228 const finish = function (items) { 3229 if (resource === 'properties' && propertyPlaceholderImage?.id) { 3230 items = items.map(item => { 3231 if (item.media?.length === 0) { 3232 return Object.assign(item, { 3233 media: [propertyPlaceholderImage] 3234 }); 3235 } 3236 return item; 3237 }); 3238 } 3239 done(null, items, resourceCount); 3240 }; 3241 3242 // ROUTER-CLEANUP: client half of PLAT-4073 â resolve the requested 3243 // disclaimers before rendering; older SDKs skip (keys stay unset). 3244 if (options.useRouterApi && resource === 'properties' && options.routerPropertyDisclaimers && options.routerPropertyDisclaimers.length && window.luxuryPresence.routerApi && typeof window.luxuryPresence.routerApi.applyPropertyDisclaimers === 'function') { 3245 window.luxuryPresence.routerApi.applyPropertyDisclaimers(resources, options.routerPropertyDisclaimers).then(finish); 3246 return; 3247 } 3248 finish(resources); 3249 }); 3250 } 3251 function getTotalPage() { 3252 return Math.ceil(totalNumber / pageSize); 3253 } 3254 function renderPaginationList() { 3255 var totalPages = getTotalPage(); 3256 var rangeStart = searchParams.page - pageRange; 3257 var rangeEnd = searchParams.page + pageRange; 3258 if (rangeEnd > totalPages) { 3259 rangeEnd = totalPages; 3260 rangeStart = totalPages - pageRange * 2; 3261 rangeStart = rangeStart < 1 ? 1 : rangeStart; 3262 } 3263 if (rangeStart <= 1) { 3264 rangeStart = 1; 3265 rangeEnd = Math.min(pageRange * 2 + 1, totalPages); 3266 } 3267 3268 // Making sure that 1 more page button is shown in edge positions 3269 if (pageRange === 0) { 3270 if (searchParams.page === totalPages) { 3271 rangeStart = totalPages <= 1 ? 1 : totalPages - 1; 3272 } 3273 if (searchParams.page === 1) { 3274 rangeEnd = Math.min(2, totalPages); 3275 } 3276 } 3277 3278 // Render pagination list 3279 if (mode === 'NUMBERED_PAGINATION') { 3280 el.innerHTML = generateHTML({ 3281 currentPage: searchParams.page, 3282 pageRange: pageRange, 3283 rangeStart: rangeStart, 3284 rangeEnd: rangeEnd 3285 }); 3286 if (totalPages < 2 && hidePaginationOnFirstPage) { 3287 container.style.display = 'none'; 3288 } else { 3289 container.style.display = ''; 3290 } 3291 } else if (mode === 'LOAD_MORE_BUTTON') { 3292 if (searchParams.page >= totalPages) {
3293 loadMoreButton.style.display = 'none'; 3294 } else { 3295 loadMoreButton.style.display = ''; 3296 } 3297 } 3298 } 3299 function render(data) { 3300 renderPaginationList(); 3301 3302 // Render new content with handlebars 3303 var html = ''; 3304 if (mode === 'LOAD_MORE_BUTTON' && searchParams.page > 1) { 3305 // If using load more, append search results to existing results 3306 html = dataContainer.innerHTML; 3307 } 3308 for (var i = 0; i < data.length; i++) { 3309 var itemData = recursivelyParse(data[i]); 3310 itemData.sectionIndex = options.sectionIndex; 3311 itemData.renderOptions = options.renderOptions; 3312 html += template(itemData); 3313 } 3314 dataContainer.innerHTML = html; 3315 3316 // Scroll Top 3317 if (!firstRender && mode === 'NUMBERED_PAGINATION' && (!renderBySearch || !options.skipScrollOnSearch)) { 3318 // Only animate to the top if we replace dataContainer (numbered pagination) 3319 setTimeout(() => { 3320 const scrollTargetOffsetTop = scrollTarget.getBoundingClientRect().top + window.scrollY - scrollOffset; 3321 window.scrollTo({ 3322 top: scrollTargetOffsetTop, 3323 behavior: 'smooth' 3324 }); 3325 }, 250); 3326 } 3327 return true; 3328 } 3329 function generateHTML(args) { 3330 const totalPages = getTotalPage(); 3331 const { 3332 rangeStart, 3333 rangeEnd 3334 } = args; 3335 const makeLnk = page => window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 3336 ...searchParams, 3337 page 3338 }); 3339 let html = ''; 3340 if (showPrevious || showPageNumbers || showNext) { 3341 html += '<div class="paginationjs-pages"><ul>'; 3342 3343 // Previous button 3344 if (showPrevious) { 3345 if (searchParams.page <= 1) { 3346 html += `<li class="${classPrefix}-prev ${disableClassName}"><a>${prevText}</a></li>`; 3347 } else { 3348 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>`; 3349 } 3350 } 3351 3352 // Pages 3353 if (showPageNumbers) { 3354 if (rangeStart <= 3) { 3355 for (let i = 1; i < rangeStart; i++) { 3356 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>`; 3357 } 3358 } else { 3359 if (showFirstOnEllipsisShow) { 3360 html += `<li class="${classPrefix}-page ${classPrefix}-first J-paginationjs-page" data-num="1"><a href="${makeLnk(1)}">1</a></li>`; 3361 } 3362 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 3363 } 3364 for (let i = rangeStart; i <= rangeEnd; i++) { 3365 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>`; 3366 } 3367 if (rangeEnd < totalPages - 2) { 3368 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 3369 if (showLastOnEllipsisShow) { 3370 html += `<li class="${classPrefix}-page ${classPrefix}-last J-paginationjs-page" data-num="${totalPages}"><a href="${makeLnk(totalPages)}">${totalPages}</a></li>`; 3371 } 3372 } else { 3373 for (let i = rangeEnd + 1; i <= totalPages; i++) { 3374 html += `<li class="${classPrefix}-page J-paginationjs-page" data-num="${i}"><a href="${makeLnk(i)}">${i}</a></li>`; 3375 } 3376 } 3377 } 3378 3379 // Next button 3380 if (showNext) { 3381 if (searchParams.page >= totalPages) { 3382 html += `<li class="${classPrefix}-next ${disableClassName}"><a>${nextText}</a></li>`; 3383 } else { 3384 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>`; 3385 } 3386 } 3387 html += '</ul></div>'; 3388 } 3389 return html; 3390 } 3391 function go(newSearchParams, callback, restorationVisit) { 3392 if (disabled) return; 3393 var goToPageNumber = newSearchParams.page; 3394 3395 // Page number is out of bounds 3396 if (!goToPageNumber || goToPageNumber < 1) return; 3397 var totalPage = getTotalPage(); 3398 3399 // Page number is out of bounds 3400 if (!restorationVisit && totalNumber > 0) { 3401 if (goToPageNumber > totalPage) return; 3402 } 3403 if (!options.skipSerialization && (mode === 'NUMBERED_PAGINATION' || searchContainer)) {
3404 var newURL = window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 3405 ...newSearchParams, 3406 page: goToPageNumber !== 1 && mode === 'NUMBERED_PAGINATION' ? newSearchParams.page : null 3407 }); 3408 if (!areQueryParamsEqual(newSearchParams, searchParams) && !restorationVisit) { 3409 window.history.pushState({}, '', window.luxuryPresence.getPath(newURL, { 3410 queryString: true 3411 })); 3412 } 3413 } 3414 3415 // Fetch and update page 3416 fetchData(newSearchParams, renderWithData); 3417 disabled = true; 3418 function renderWithData(err, data, count) { 3419 if (err) { 3420 dataContainer.dispatchEvent(new Event('error')); 3421 } else { 3422 searchParams = { 3423 ...newSearchParams 3424 }; 3425 totalNumber = count - offset; 3426 if (data.length === 0) { 3427 dataContainer.dispatchEvent(new Event('no-data')); 3428 } else { 3429 dataContainer.dispatchEvent(new Event('data')); 3430 } 3431 render(data); 3432 firstRender = false; 3433 } 3434 disabled = false; 3435 renderBySearch = false; 3436 } 3437 } 3438 function areQueryParamsEqual(first, second) { 3439 var differ = Object.keys(first).find(function (key) { 3440 return first[key] !== undefined && first[key] !== null && first[key] !== second[key]; 3441 }); 3442 if (differ) { 3443 return false; 3444 } 3445 differ = Object.keys(second).find(function (key) { 3446 return second[key] !== undefined && second[key] !== null && second[key] !== first[key]; 3447 }); 3448 return !differ; 3449 } 3450 function next(callback) { 3451 go({ 3452 ...searchParams, 3453 page: searchParams.page + 1 3454 }, callback); 3455 } 3456 function previous(callback) { 3457 go({ 3458 ...searchParams, 3459 page: searchParams.page - 1 3460 }, callback); 3461 } 3462 function refresh(callback) { 3463 go(searchParams, callback); 3464 } 3465 function update(params, callback) { 3466 renderBySearch = true; 3467 go(params, callback); 3468 } 3469 function observer() { 3470 if (searchContainer) { 3471 searchContainer.addEventListener('search', function (event, newSearchParams) { 3472 newSearchParams = event.detail || newSearchParams; 3473 update({ 3474 ...searchParams, 3475 ...newSearchParams, 3476 page: 1 3477 }); 3478 }); 3479 searchContainer.addEventListener('clear-search', function () { 3480 const defaultSearchParams = { 3481 ...DefaultSearchParams 3482 }; 3483 const isCurrentSearchFormStateDefault = areQueryParamsEqual({ 3484 ...defaultSearchParams, 3485 page: null 3486 }, { 3487 ...searchParams, 3488 page: null 3489 }); 3490 3491 // if mode is LOAD_MORE_BUTTON we should't make anything on clear 3492 // when search form have default state 3493 if (isCurrentSearchFormStateDefault && mode !== 'NUMBERED_PAGINATION') { 3494 return; 3495 } 3496 3497 // if someone initially go to some page and click 'Clear' on search from 3498 // we should't navigate to first page. We should preserve page value 3499 if (isCurrentSearchFormStateDefault) { 3500 defaultSearchParams.page = searchParams.page; 3501 } 3502 syncSearchFormState(defaultSearchParams); 3503 update(defaultSearchParams); 3504 }); 3505 } 3506 if (mode === 'LOAD_MORE_BUTTON') { 3507 loadMoreButton.addEventListener('click', function (event) { 3508 go({ 3509 ...searchParams, 3510 page: searchParams.page + 1 3511 }); 3512 return false; 3513 }); 3514 } 3515 if (mode === 'LOAD_MORE_BUTTON' || mode === 'BUTTONLESS_PAGINATION') { 3516 // Do initial render 3517 go(Object.assign({}, searchParams, { 3518 page: 1 3519 })); 3520 return; 3521 } 3522 if (mode === 'NUMBERED_PAGINATION') { 3523 // Go to specified page number 3524 container.addEventListener(eventPrefix + 'go', function (event) { 3525 let { 3526 pageNumber, 3527 done 3528 } = event.detail || {}; 3529 pageNumber = parseInt(pageNumber, 10); 3530 if (!pageNumber) { 3531 return; 3532 } 3533 go({ 3534 ...searchParams, 3535 page: pageNumber 3536 }, done); 3537 }); 3538 3539 // Page number button click 3540 el.addEventListener('click', function (event) { 3541 let clickTarget = event.target; 3542 let current = clickTarget.closest('.J-paginationjs-page, .J-paginationjs-previous, .J-paginationjs-next'); 3543 let pageNumber = current?.getAttribute('data-num'); 3544 if (!pageNumber || current.classList.contains(disableClassName) || current.classList.contains(activeClassName)) { 3545 return; 3546 } else { 3547 go({ 3548 ...searchParams, 3549 page: parseInt(pageNumber, 10) 3550 }); 3551 } 3552 event.preventDefault(); 3553 }); 3554 3555 // Whether to load the default page 3556 var defaultPageNumber = searchParams.page; 3557 if (triggerPagingOnInit) {
3558 container.dispatchEvent(new CustomEvent(eventPrefix + 'go', { 3559 detail: { 3560 pageNumber: defaultPageNumber 3561 } 3562 })); 3563 } 3564 } 3565 window.addEventListener('popstate', function (event) { 3566 var newParams = Object.assign({}, DefaultSearchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 3567 if (!areQueryParamsEqual(newParams, searchParams)) { 3568 go(newParams, null, true); 3569 if (searchContainer) { 3570 syncSearchFormState(newParams); 3571 } 3572 } 3573 }); 3574 } 3575 function replaceVariables(template, variables) { 3576 var formattedString; 3577 for (var key in variables) { 3578 var value = variables[key]; 3579 var regexp = new RegExp('<%=\\s*' + key + '\\s*%>', 'img'); 3580 formattedString = (formattedString || template).replace(regexp, value); 3581 } 3582 return formattedString; 3583 } 3584 function isTextEditorValue(obj) { 3585 return 'raw' in obj || 'gjs' in obj; 3586 } 3587 function getTextEditorValue(obj) { 3588 if (!obj.html) { 3589 return ''; 3590 } 3591 var data = obj.html; 3592 var css = (obj.raw || obj.gjs || {}).css; 3593 if (css) { 3594 data = data + '<style>' + css + '</style>'; 3595 } 3596 return data; 3597 } 3598 3599 /** 3600 * check rendered resources for html and raw properties that could indicate if resource is from an advanced text editor. 3601 * strips out raw proprties and returns only HTML if it exists. 3602 * @param {Object} resources a collection retrieved from the database 3603 * @return {Object} the newly modified object. 3604 */ 3605 function recursivelyParse(resources) { 3606 forEach(resources, function (value, key) { 3607 if (!value) { 3608 return; 3609 } 3610 if (value instanceof Object) { 3611 if (isTextEditorValue(value)) { 3612 resources[key] = getTextEditorValue(value); 3613 return; 3614 } else { 3615 return recursivelyParse(value); 3616 } 3617 } 3618 try { 3619 var parsedData = JSON.parse(value); 3620 if (isTextEditorValue(parsedData)) { 3621 resources[key] = getTextEditorValue(parsedData); 3622 } 3623 } catch (e) { 3624 // do nothing if we failed to parse value as JSON 3625 } 3626 }); 3627 return resources; 3628 } 3629 function forEach(collection, iteratee) { 3630 var func = Array.isArray(collection) ? arrayEach : baseFor; 3631 return func(collection, iteratee); 3632 } 3633 function baseFor(object, iteratee) { 3634 if (!object) { 3635 return; 3636 } 3637 var iterable = Object(object); 3638 var props = Object.keys(object); 3639 var length = props.length; 3640 var index = -1; 3641 while (length--) { 3642 var key = props[++index]; 3643 if (iteratee(iterable[key], key, iterable) === false) { 3644 break; 3645 } 3646 } 3647 return object; 3648 } 3649 function objSet(obj, path, value) { 3650 const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g); 3651 pathArray.reduce((acc, key, i) => { 3652 if (acc[key] === undefined) acc[key] = {}; 3653 if (i === pathArray.length - 1) acc[key] = value; 3654 return acc[key]; 3655 }, obj); 3656 } 3657 function arrayEach(array, iteratee) { 3658 var index = -1; 3659 var length = array.length; 3660 while (++index < length) { 3661 if (iteratee(array[index], index, array) === false) { 3662 break; 3663 } 3664 } 3665 return array; 3666 } 3667 function selectPageRangeMode(e) { 3668 pageRange = e.matches ? mobilePageRange : desktopPageRange; 3669 renderPaginationList(); 3670 } 3671 paginationMql.addEventListener('change', selectPageRangeMode); 3672})('section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927', JSON.parse("{\"pageSize\":\"9\",\"resource\":\"properties\",\"pageRange\":1,\"variables\":{\"limit\":9,\"offset\":0,\"sortDir\":\"DESC\",\"companyId\":\"b0108bde-2b87-474d-8bcd-d7fcfd16c5cc\",\"categoryId\":\"{{pageElement.categoryId}}\",\"sort\":\"createdAt\",\"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\"],\"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\":\"be227485-eaf0-455b-aee0-a0e351474420\"},\"hidePaginationOnFirstPage\":true,\"companyId\":\"b0108bde-2b87-474d-8bcd-d7fcfd16c5cc\",\"usePageResource\":false,\"sectionIndex\":2,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 3673} catch(e) { 3674console.log(e); 3675} 3676 try { 3677(function init(sectionDomId) {})('section-d55c7d5f-e879-4fc8-9812-a1a4be8f3927', JSON.parse("{\"resource\":\"properties\",\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true},\"companyId\":\"b0108bde-2b87-474d-8bcd-d7fcfd16c5cc\",\"usePageResource\":false,\"sectionIndex\":2}")); 3678} catch(e) { 3679console.log(e); 3680} 3681 try { 3682(function init(sectionDomId) {})('section-855d0879-113a-4e34-8b5b-781d0b1f30d9', 'undefined'); 3683} catch(e) { 3684console.log(e); 3685} 3686 try { 3687(function init(sectionDomId) { 3688 const $section = $('#' + sectionDomId); 3689 if ($section.find('.parallax').length) $section.addClass('parallax-enabled'); 3690 if ($section.find('.video-wrapper').length) $section.addClass('video'); 3691})('section-9b699237-bd33-47e1-a3a6-3c086016df48', 'undefined'); 3692} catch(e) { 3693console.log(e); 3694} 3695 try { 3696(function init(sectionDomId, options) { 3697 let section = null; 3698 switch (sectionDomId) { 3699 case 'NAVBAR': 3700 section = document.querySelector('body > nav, #global-navbar'); 3701 break; 3702 case 'FOOTER': 3703 section = document.querySelector('body > footer, #global-footer'); 3704 break; 3705 case 'SIDEMENU': 3706 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 3707 break; 3708 case 'CONTACT':
3709 section = document.querySelector('#modal-global-contact-us'); 3710 break; 3711 case 'MOBILE_CONTACT': 3712 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 3713 break; 3714 case 'SUBSCRIBE': 3715 // Subscribe Not Implemented 3716 section = null; 3717 break; 3718 case 'ACCOUNT': 3719 // Account Not Implemented 3720 section = null; 3721 break; 3722 default: 3723 section = document.querySelector('#' + sectionDomId); 3724 } 3725 if (!section) { 3726 return; 3727 } 3728 var url = window.luxuryPresence.defaults.routerUrl; 3729 var companyId = window.luxuryPresence.defaults.companyId; 3730 var limit = options.limit || 8; 3731 if (typeof limit === 'string') { 3732 limit = parseInt(limit, 10) || 8; // this NaN protection also filters out 0 - this is expected 3733 } 3734 var templateSelector = options.templateSelector || '.jsIGTemplate'; 3735 var containerSelector = options.containerSelector || '.jsIGContainer'; 3736 var hasDataClass = options.hasDataClass || 'has-data'; 3737 var hideActivateMessage = options.hasDataClass || false; 3738 var payload = { 3739 companyId: companyId, 3740 limit: limit 3741 }; 3742 if (options.resourceId && typeof options.resourceId === 'string' && !options.resourceId.match(/^{{.*}}$/)) { 3743 payload.resourceId = options.resourceId; 3744 // Federated enum values are uppercase (AGENT/TEAM); element configs carry lowercase 3745 payload.resource = String(options.resource || 'agent').toUpperCase(); 3746 payload.fallbackToNoResource = options.fallbackToNoResource === 'true' || options.fallbackToNoResource === true; 3747 } 3748 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'; 3749 var templateHTML = section.querySelector(templateSelector)?.innerHTML || ''; 3750 var template = Handlebars.compile(templateHTML); 3751 var container = section.querySelector(containerSelector); 3752 if (options.variables) { 3753 Object.keys(options.variables).forEach(function (key) { 3754 if (options.variables.hasOwnProperty(key) && (typeof options.variables[key] !== 'string' || !options.variables[key].match(/^{{.*}}$/))) { 3755 payload[key] = options.variables[key]; 3756 } 3757 }); 3758 } 3759 function getData() { 3760 var feed = { 3761 error: true 3762 }; 3763 if (payload.companyId == null || payload.companyId === '') { 3764 // instagramContentFeed requires companyId (ID!) â nothing to fetch without it. 3765 // Checked after the options.variables merge, which may override the default. 3766 // Deferred so element listeners (attached after this template runs) still receive it. 3767 setTimeout(function () { 3768 section.dispatchEvent(new CustomEvent('ig-data', { 3769 detail: feed 3770 })); 3771 }, 0); 3772 return; 3773 } 3774 superagent.post(url + '/graphql').send({ 3775 query: query, 3776 variables: payload 3777 }).then(res => { 3778 try { 3779 if (!res.body.errors) { 3780 feed = res.body.data.instagramContentFeed; 3781 if (!feed.active) { 3782 if (!hideActivateMessage && sectionDomId === 'section-temp' && container) { 3783 if (payload.resourceId) { 3784 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>'; 3785 } else { 3786 container.innerHTML = '<div style="text-align: center">Instagram account is not connected.<br /> Connect it on <a href="/profile">Profile page</a></div>'; 3787 } 3788 } 3789 } else { 3790 if (feed.items.length) { 3791 if (hasDataClass) { 3792 section.classList.add(hasDataClass); 3793 } 3794 const feedName = feed.username; 3795 section.querySelectorAll('.jsIGLink').forEach(link => link.setAttribute('href', feed.feedUrl)); 3796 section.querySelectorAll('.jsIGName').forEach(name => { 3797 name.textContent = '@' + feedName; 3798 name.setAttribute('title', '@' + feedName); 3799 }); 3800 if (container && template) { 3801 container.innerHTML = template(feed); 3802 } 3803 } 3804 } 3805 } 3806 } catch (e) {} 3807 section.dispatchEvent(new CustomEvent('ig-data', { 3808 detail: feed 3809 })); 3810 }).catch(e => { 3811 console.log('err', e); 3812 section.dispatchEvent(new CustomEvent('ig-data', { 3813 detail: feed 3814 })); 3815 }); 3816 } 3817 getData(); 3818})('section-843c4f7d-2270-4187-af56-23dd530aef1f', JSON.parse("{\"limit\":5,\"resource\":\"agent\",\"resourceId\":\"\",\"fallbackToNoResource\":\"true\",\"companyId\":\"b0108bde-2b87-474d-8bcd-d7fcfd16c5cc\",\"usePageResource\":false,\"sectionIndex\":5,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 3819} catch(e) { 3820console.log(e); 3821} 3822 try { 3823(function init(sectionId) { 3824 const $section = $('#' + sectionId); 3825 const $autoShrinks = $section.find('.jsShrink'); 3826 const toAdjust = []; 3827 const minFontSize = 10; 3828 $autoShrinks.each(function () { 3829 const $el = $(this); 3830 const $parent = $el.parent(); 3831 const { 3832 $cl: $sizer 3833 } = makeElementCopy($el, $parent); 3834 const { 3835 $cl: $sizerMin 3836 } = makeElementCopy($el, $parent); 3837 toAdjust.push({ 3838 $el, 3839 $parent, 3840 $sizer, 3841 $sizerMin, 3842 altered: false 3843 }); 3844 }); 3845 adjustSizes(); 3846 $section.on('ig-data', adjustSizes); 3847 $(window).on('resize.lpui-auto-clean', adjustSizes); 3848 function makeElementCopy($el, $parent) { 3849 const $cont = $('<div style="width: 0; height: 0; position: relative; overflow: hidden;"></div>');
3850 $parent.prepend($cont); 3851 const $cl = $el.clone().removeClass('wow fadeInUp jsShrink').appendTo($cont); 3852 $cl[0].removeAttribute('style'); 3853 $cl[0].removeAttribute('data-wow-delay'); 3854 $cl.css({ 3855 'position': 'absolute', 3856 'overflow-wrap': 'normal', 3857 'white-space': 'nowrap' 3858 }); 3859 return { 3860 $cont, 3861 $cl 3862 }; 3863 } 3864 function resetStyles(item) { 3865 if (item.altered) { 3866 item.$el[0].style.fontSize = ''; 3867 item.$el[0].style.letterSpacing = ''; 3868 item.altered = false; 3869 } 3870 } 3871 function setStyles($el, k, fontSize, letterSpacing) { 3872 $el.css('font-size', `${Math.floor(fontSize * k)}px`); 3873 if (letterSpacing) { 3874 $el.css('letter-spacing', `${letterSpacing * k}px`); 3875 } 3876 } 3877 function adjustSizes() { 3878 toAdjust.forEach(function (item) { 3879 const { 3880 $el, 3881 $parent, 3882 $sizer, 3883 $sizerMin 3884 } = item; 3885 try { 3886 const contW = $parent[0].getBoundingClientRect().width; 3887 const sizeW = $sizer[0].getBoundingClientRect().width; 3888 if (!sizeW || contW >= sizeW) { 3889 resetStyles(item); 3890 return; 3891 } 3892 const mf = $sizer.css('font-size').match(/([\d\.]+)px/); 3893 if (!mf) { 3894 resetStyles(item); 3895 return; 3896 } 3897 const origFontSize = parseFloat(mf[1]); 3898 if (!origFontSize || origFontSize <= minFontSize) { 3899 resetStyles(); 3900 return; 3901 } 3902 const ms = $sizer.css('letter-spacing').match(/([\d\.]+)px/); 3903 const origLetterSpacing = ms && parseFloat(ms[1]) || 0; 3904 const fontK = minFontSize / origFontSize; 3905 setStyles($sizerMin, fontK, origFontSize, origLetterSpacing); 3906 const minW = $sizerMin[0].getBoundingClientRect().width; 3907 item.altered = true; 3908 if (minW >= contW) { 3909 setStyles($el, fontK, origFontSize, origLetterSpacing); 3910 } else { 3911 setStyles($el, contW / minW * fontK, origFontSize, origLetterSpacing); 3912 } 3913 } catch (e) { 3914 console.log(e); 3915 } 3916 }); 3917 } 3918})('section-843c4f7d-2270-4187-af56-23dd530aef1f', JSON.parse("{\"resource\":\"agent\",\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true},\"companyId\":\"b0108bde-2b87-474d-8bcd-d7fcfd16c5cc\",\"usePageResource\":false,\"sectionIndex\":5}")); 3919} catch(e) { 3920console.log(e); 3921} 3922 3923 var { body } = document; 3924 var globalNav = body.querySelector(':scope > nav'); 3925 var globalSideMenu = body.querySelector(':scope > div.sidemenu'); 3926 3927 document.querySelectorAll('body > .modal .close').forEach(modalCloseBtn => { 3928 modalCloseBtn.addEventListener('click', function() { 3929 window.lpUI.hideClosestModal(modalCloseBtn); 3930 }); 3931 }); 3932 3933 window.addEventListener('click', function() { 3934 document.querySelectorAll('.share-popup').forEach(sharedPopup => { 3935 sharedPopup.style.display = 'none' ; 3936 }); 3937 }); 3938 3939 /* Misc Partials / Addons */ 3940 function initWOW() { 3941 if (wow) { 3942 wow.init(); 3943 wow.scrollHandler(); 3944 setTimeout(function () { 3945 const wowHideStyle = document.getElementById('wow-hide-elements'); 3946 if(wowHideStyle) { 3947 wowHideStyle.disabled = true; 3948 } 3949 }, 1); 3950 } 3951 } 3952 3953 const wowHideElements = document.getElementById('wow-hide-elements'); 3954 if (wowHideElements) { 3955 wowHideElements.disabled = false; 3956 } 3957 3958 initWOW(); 3959 3960 /* Generic Navbar Handling */ 3961 globalNav?.querySelectorAll('.hamburger-component').forEach(hamburgerComponent => { 3962 hamburgerComponent.addEventListener('click', function() { 3963 window.lpUI.sideMenuToggle(); 3964 }); 3965 }); 3966 globalSideMenu?.querySelectorAll('.toggle').forEach(toggleEl => { 3967 toggleEl.addEventListener('click', function() { 3968 window.lpUI.sideMenuToggle(); 3969 }); 3970 }); 3971 3972 document.querySelectorAll('body > nav .sub-nav-container > a, body > div.sidemenu .sub-nav-container > a').forEach(linkEl => { 3973 linkEl.addEventListener('click', function(e) { 3974 e.preventDefault(); 3975 e.stopPropagation();
3976 var subNav = linkEl.parentElement.querySelector(':scope > .sub-nav'); 3977 if (subNav && subNav.classList.contains('visible')){ 3978 subNav.classList.remove('visible'); 3979 } else { 3980 globalNav?.querySelectorAll('.sub-nav-container .sub-nav').forEach(globalSubNav => { 3981 globalSubNav.classList.remove('visible'); 3982 }); 3983 globalSideMenu?.querySelectorAll('.sub-nav').forEach(sideMenuSubNav => { 3984 sideMenuSubNav.classList.remove('visible'); 3985 }); 3986 subNav?.classList.add('visible'); 3987 } 3988 }); 3989 }); 3990 window.addEventListener('click', function() { 3991 document.querySelectorAll('nav .sub-nav.visible, .sidemenu .sub-nav.visible').forEach(subNavEl => { 3992 subNavEl.classList.remove('visible'); 3993 }); 3994 }); 3995 3996 } 3997 3998 document.addEventListener('DOMContentLoaded', lpGlobalInit); 3999 4000 </script>
4000 4001 4002
4002<script type="module"> 4003 function selectorExists(selector) { 4004 return document.querySelector(selector) !== null; 4005 } 4006 4007 // Function to initialize the third-party library 4008 function initParoller(selector = '.my-paroller') { 4009 var $parollerElements = $(selector); 4010 if ($parollerElements.length > 0 && typeof $parollerElements.paroller === 'function') { 4011 $parollerElements.paroller(); 4012 } 4013 } 4014 4015 const parollerSelector = '.my-paroller'; 4016 4017 if (selectorExists(parollerSelector)) { 4018 window.luxuryPresence.libs.loadJs(window.luxuryPresence.libs.jsLibsMap.paroller.jsSrc, function() { 4019 initParoller(parollerSelector); 4020 window.luxuryPresence.libs.jsLibsMap.paroller.isLoaded = true; 4021 }); 4022 } 4023 </script>
4023 4024 4025 <!-- Google Tag Manager (noscript) -->
vendor: 80 bytes, lines 4025-4026
4025 4026 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
4026GTM-T9SFQGHZ
vendor: 107 bytes, lines 4026-4028
4026" 4027 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 4028
4028<!-- End Google Tag Manager --> 4029 4030
4030<script 4031 src="https://cdn.luxurypresence.com/scripts/a11y-widget/latest/widget.js" 4032 data-website-id="be227485-eaf0-455b-aee0-a0e351474420" 4033 4034 defer></script>
vendor: 1 bytes, line 4034
4034
4035<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 4035
4035
4036<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:'a4813825ecc46cba',t:'MTc5MTU4OTExMA=='};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>
4036</body> 4037</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.