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>Meet the East Bay Home Transitions Real Estate Group</title> 10 <meta property="og:title" content="Meet the East Bay Home Transitions Real Estate Group"> 11 <meta name="twitter:title" content="Meet the East Bay Home Transitions Real Estate Group"> 12 <meta name="description" content="East Bay Home Transitions, your expert local realtors in Oakland, Montclair, Alameda, and more. Find your dream home. Call today for a free consultation!"> 13 <meta property="og:description" content="East Bay Home Transitions, your expert local realtors in Oakland, Montclair, Alameda, and more. Find your dream home. Call today for a free consultation!"> 14 <meta name="twitter:description" content="East Bay Home Transitions, your expert local realtors in Oakland, Montclair, Alameda, and more. Find your dream home. Call today for a free consultation!"> 15 <meta property="og:image" content="https://media-production.lp-cdn.com/media/14d3ce0a-ac5c-47ff-b6b6-a2af36d4aea2"> 16 <meta name="twitter:image" content="https://media-production.lp-cdn.com/media/14d3ce0a-ac5c-47ff-b6b6-a2af36d4aea2"> 17 <meta property="og:url" content="https://ebhometransitions.com/team"> 18 <link rel="canonical" href="https://ebhometransitions.com/team"> 19
19<script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>
19 20 <link rel="preconnect" href="https://fonts.googleapis.com"> 21 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 22 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Montserrat:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i"> 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:Montserrat,sans-serif;--global-primary-font-family-short:Montserrat;--global-secondary-font-family:Montserrat,sans-serif;--global-secondary-font-family-short:Montserrat;--global-body-padding:0px;--global-background-color:#fff;--global-body-font-size:16px;--global-h1-font-size:70px;--global-h2-font-size:43px;--global-h3-font-size:30px;--global-h4-font-size:21px;--global-h5-font-size:17px;--global-h6-font-size:16px;--global-section-padding:96px;}@media (max-width: 768px){:root{--global-section-padding:64px;}}body{padding:0px;background-color:#fff;font-family:Montserrat,sans-serif;font-size:16px;}@media (min-width: 768px){body{padding:0px 0px 0px 0px;}}h1,h2,h3,h4,h5,h6,button{font-family:Montserrat,sans-serif;}h1{font-size:70px;}h2{font-size:43px;}h3{font-size:30px;}h4{font-size:21px;}h5{font-size:17px;}h6{font-size:16px;}</style> 30 <link rel="stylesheet" type="text/css" href="https://styles.luxurypresence.com/producer/index.css" /> 31 <style id="website-css">@media(max-width:769px){nav#global-navbar .logo img{max-width:200px;}}.lp-btn,.redesign .lp-btn{padding:20px 46px;}#modal-global-contact-us .contact-form .section-message form .submitButton{padding:14px 20px;}nav#global-navbar .header .navigation .sub-nav ul{background-color:transparent;}nav#global-navbar .header .navigation .sub-nav ul li{background-color:rgba(255,255,255,0.9);}nav#global-navbar .header .navigation .sub-nav ul li:hover{background-color:rgba(255,255,255,1);}nav#global-navbar .header .navigation .sub-nav ul a{color:#000;}nav#global-navbar.scroll{background-color:#F1F1F1!important;}nav#global-navbar.scroll li.navigation__item a.navigation__link{color:#000;}nav#global-navbar.scroll li.navigation__item a.navigation__link span:after{background-color:#000;}nav#global-navbar.scroll button.hamburger-component.hamburger{color:#000;}#global-navbar.scroll .header a.logo__link img:last-child{display:block!important;}#global-navbar.scroll .header a.logo__link img:first-child{display:none!important;}@media only screen and (min-width:768px){nav#global-navbar .header .logo img{max-height:39px;}}h1{text-transform:uppercase!important;}.lp-h1{text-transform:uppercase!important;}h2{text-transform:uppercase!important;}.lp-h2{text-transform:uppercase!important;}h3{text-transform:uppercase!important;}.lp-h3{text-transform:uppercase!important;}div#global-sidemenu.sidemenu a{text-transform:uppercase;}div#global-sidemenu.sidemenu button{text-transform:uppercase;}div#modal-global-contact-us .contact-form .section-message form{max-width:490px;}@media only screen and (max-width:1080px){div#modal-global-contact-us .contact-form h2{font-size:37px;}}@media only screen and (max-width:925px){div#modal-global-contact-us .contact-form h2{font-size:28px;}}footer#global-footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:46px;}@media (max-width: 768px){footer#global-footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:20px;}}div#modal-global-contact-us .contact-form .info-zone .type_user:nth-of-type(2){margin-bottom:1px;}@media (max-width: 768px){div#modal-global-contact-us .contact-form .info-zone .type_user{margin-bottom:25px;}}div#modal-global-contact-us .contact-form .info-zone_contact{margin-bottom:14px;}footer#global-footer .redesign.footer .grey-text{text-transform:none;}footer#global-footer .info-wrap-contact_zone .info-wrap-contact_cell p:nth-child(4){text-transform:none;}#modal-global-contact-us .redesign .link--white{text-transform:none;}#modal-global-contact-us .contact-form .pre-line{text-transform:none;}ul.lp-socials li a:hover i.fa-podcast:before{background-image:url(https://res.cloudinary.com/luxuryp/images/w_320,c_limit,f_auto,q_auto/uxp2xv3fsr9t4ryxqdgu/vppafagymzpshkyacaiy-2-2-3-1-1-1-1-2-1-2-3-3);-webkit-filter:invert(1);filter:invert(1);}ul.lp-socials li a i.fa-podcast:before{background-image:url(https://res.cloudinary.com/luxuryp/images/w_320,c_limit,f_auto,q_auto/uxp2xv3fsr9t4ryxqdgu/vppafagymzpshkyacaiy-2-2-3-1-1-1-1-2-1-2-3-3);content:"";width:25px;height:25px;display:block;-webkit-background-size:contain;background-size:contain;white-space:pre;background-repeat:no-repeat;}div#modal-global-contact-us ul.lp-socials li a:hover i.fa-podcast:before{background-image:url(https://res.cloudinary.com/luxuryp/images/w_320,c_limit,f_auto,q_auto/gnpjv6puok75bx3dg4bv/vpp
31afagymzpshkyacaiy-2-2-3-1-1-1-1-2-1-2-3-2);-webkit-filter:invert(1);filter:invert(1);}div#modal-global-contact-us ul.lp-socials li a i.fa-podcast:before{background-image:url(https://res.cloudinary.com/luxuryp/images/w_320,c_limit,f_auto,q_auto/gnpjv6puok75bx3dg4bv/vppafagymzpshkyacaiy-2-2-3-1-1-1-1-2-1-2-3-2);content:"";width:25px;height:25px;display:block;-webkit-background-size:contain;background-size:contain;white-space:pre;background-repeat:no-repeat;}footer#global-footer .footer .first_text_footer .img_size img{margin-top:32px;}@media (max-width: 768px){div#modal-global-contact-us .close{right:3vw;top:3vw;}}</style> 32 <style id="wow-hide-elements">.wow{visibility:hidden!important}</style> 33 <style id="page-css"> 34 #section-eda32161-87c2-43c6-ac2a-1503a8905a4c{-webkit-background-position:50% 20%!important;background-position:50% 20%!important;color:#fff;--fontColor:#fff;--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.6));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/ymcrdguyuvj4sdptbvmt');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-eda32161-87c2-43c6-ac2a-1503a8905a4c .custom-intro{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:600px;-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;}#section-eda32161-87c2-43c6-ac2a-1503a8905a4c .custom-intro .container{z-index:1;text-align:center;max-width:900px;}#section-eda32161-87c2-43c6-ac2a-1503a8905a4c .custom-intro__title{margin-bottom:0px;font-weight:400;margin-bottom:24px;}@media (max-width: 768px){#section-eda32161-87c2-43c6-ac2a-1503a8905a4c .custom-intro__title{font-size:32px;}}@media (max-width: 360px){#section-eda32161-87c2-43c6-ac2a-1503a8905a4c .custom-intro__title{font-size:22px;}}#section-eda32161-87c2-43c6-ac2a-1503a8905a4c .custom-intro__subtitle{font-weight:400;white-space:pre-line;font-size:21px;line-height:1.57;}@media (max-width: 768px){#section-eda32161-87c2-43c6-ac2a-1503a8905a4c .custom-intro__subtitle{font-size:18px;}}#section-eda32161-87c2-43c6-ac2a-1503a8905a4c .description{margin-bottom:15px;}@media (min-width: 960px) and (orientation: landscape){#section-eda32161-87c2-43c6-ac2a-1503a8905a4c{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/ymcrdguyuvj4sdptbvmt');}}@media (min-width: 1280px) and (orientation: landscape){#section-eda32161-87c2-43c6-ac2a-1503a8905a4c{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/ymcrdguyuvj4sdptbvmt');}}@media (min-width: 1920px) and (orientation: landscape){#section-eda32161-87c2-43c6-ac2a-1503a8905a4c{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/ymcrdguyuvj4sdptbvmt');}}@media (min-width: 2560px) and (orientation: landscape){#section-eda32161-87c2-43c6-ac2a-1503a8905a4c{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/ymcrdguyuvj4sdptbvmt');}}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9{color:#000000;--fontColor:#000000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(2 / 4 * var(--global-section-padding));background-color:#ffffff;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-grid{padding:140px 0 90px;}@media (max-width: 768px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-grid{padding:40px 0;}}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-grid__title{text-align:center;margin-bottom:50px;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-grid .lp-input{width:100%;height:35px;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-grid__wrapper{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-left:-25px;margin-right:-25px;}@media(min-width: 1001px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-grid__wrapper.two-col{max-width:750px;width:100%;margin:0 auto;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-grid__wrapper.two-col .team-member__container{width:50%;}}@media(max-width: 1000px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-grid__wrapper{max-width:1000px;}}@media (max-width: 768px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-grid__wrapper{-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;}}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container{width:33.333%;padding-left:25px;padding-right:25px;margin-bottom:50px;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container:first-child{margin-left:auto;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container:last-child{margin-right:auto;}@media(max-width: 1000px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container{width:50%;}}@media (max-width: 768px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container{width:100%;}}@media (hover: hover) and (pointer: fine){@media (min-width: 769px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container:hover .team-member__image{opacity:.5;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container:hover .team-member__hover{opacity:1;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container:hover .team-member__hover::before,#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container:hover .team-member__hover::after{width:100%;height:100%;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container:hover .team-member__hover::before{border-top-color:inherit;border-right-color:inherit;-webkit-transition:width 0.25s ease-out,height 0.25s ease-out 0.25s;transition:width 0.25s ease-out,height 0.25s ease-out 0.25s;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container:hover .team-member__hover::after{border-bottom-color:inherit;border-left-color:inherit;-webkit-transition:width 0.25s ease-out 0.5s,height 0.25s ease-out 0.75s,border-color 0.01s ease-out 0.5s;transition:width 0.25s ease-out 0.5s,height 0.25s ease-out 0.75s,border-color 0.01s ease-out 0.5s;}}}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__container.filtered-out{display:none;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__link{position:relative;display:block;height:100%;cursor:pointer;color:inherit;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__image{position:relative;width:100%;padding-top:130%;background-color:#cccccc;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__image img{position:absolute;object-fit:cover;width:100%;height:100%;top:0;left:0;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__image-wrap{position:relative;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__hover{opacity:0;position:absolute;top:0;right:0;left:0;bottom:0;-webkit-transform:translate(20px, 20px);-moz-transform:translate(20px, 20px);-ms-transform:translate(20px, 20px);transform:translate(20px, 20px);
34display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:flex-end;-webkit-box-align:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;padding:10px;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__hover:before,#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__hover:after{content:' ';position:absolute;border:2px solid transparent;width:0;height:0;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__hover:before{top:0;left:0;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__hover:after{bottom:0;right:0;}@media (hover:none) and (pointer: coarse){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__hover{display:none;}}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__name{display:block;margin-top:25px;font-size:30px;line-height:40px;font-weight:400;font-family:var(--global-primary-font-family);}@media (max-width: 560px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__name{font-size:18px;line-height:29px;letter-spacing:0.75px;}}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__role{display:block;margin-top:8px;font-size:14px;line-height:24px;font-weight:700;font-family:inherit;text-transform:uppercase;letter-spacing:1.5px;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__license{font-size:13px;text-transform:uppercase;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__info{text-align:center;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .team-member__btn{margin-bottom:60px;position:relative;z-index:1;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .form-container{padding-bottom:48px;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .search-form{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-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin:0 -10px -8px;}@media (max-width: 600px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .search-form{-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin:0;}}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .input-group{-webkit-flex:1 0 250px;-ms-flex:1 0 250px;flex:1 0 250px;max-width:300px;position:relative;margin:8px 10px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}@media (max-width: 600px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .input-group{-webkit-flex:1;-ms-flex:1;flex:1;max-width:unset;margin:8px 0;}}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .search-icon{position:absolute;top:50%;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);right:0;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .search-clear-icon{color:#b2b2b2;position:absolute;top:calc(50% + 2px);-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);right:40px;-webkit-transition:-webkit-transform 0.3s ease,opacity 0.3s ease,visibility 0s linear 0.3s;transition:transform 0.3s ease,opacity 0.3s ease,visibility 0s linear 0.3s;opacity:1;visibility:visible;cursor:pointer;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .search-clear-icon:hover{-webkit-transform:translateY(-50%) scale(1.2);-moz-transform:translateY(-50%) scale(1.2);-ms-transform:translateY(-50%) scale(1.2);transform:translateY(-50%) scale(1.2);}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .is-empty .search-clear-icon{opacity:0;visibility:hidden;-webkit-transition:-webkit-transform 0.3s ease,opacity 0.3s ease,visibility 0s linear 0s;transition:transform 0.3s ease,opacity 0.3s ease,visibility 0s linear 0s;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .search-input{padding-right:65px;}@media (max-width: 569px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .search-input{padding-bottom:5px;}}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-toggle{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;outline:none;text-align:left;cursor:pointer;position:relative;padding-right:65px;overflow:hidden;text-overflow:ellipsis;text-transform:none;font-family:var(--global-secondary-font-family);}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-open-icon{position:absolute;right:17px;top:calc(50% - 1px);-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:-webkit-transform .3s ease;transition:transform .3s ease;cursor:pointer;color:#b2b2b2;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-clear{color:#b2b2b2;position:absolute;right:40px;top:calc(50% + 2px);-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:-webkit-transform 0.3s ease,opacity 0.3s ease,visibility 0s linear 0.3s;transition:transform 0.3s ease,opacity 0.3s ease,visibility 0s linear 0.3s;opacity:1;visibility:visible;cursor:pointer;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-clear:hover{-webkit-transform:translateY(-50%) scale(1.2);-moz-transform:translateY(-50%) scale(1.2);-ms-transform:translateY(-50%) scale(1.2);transform:translateY(-50%) scale(1.2);}@media (max-width: 639px){#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-clear{display:none;}}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-dropdown{position:absolute;width:100%;top:calc(100% + 5px);overflow:hidden;height:0;-webkit-transition:height 0.3s ease;transition:height 0.3s ease;background-color:#f5f5f5;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-dropdown.on-top{bottom:calc(100% + 5px);top:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:flex-end;-webkit-box-align:flex-end;-ms-flex-align:flex-end;align-items:flex-end;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-dropdown.opened{z-index:999;position:fixed;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-dropdown-wrapper{width:100%;overflow:hidden auto;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-optgroup{width:100%;padding:11px 20px;color:#b2b2b2;cursor:default;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-option{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;text-align:left;width:100%;border:none;border-radius:0;background-color:transparent;cursor:pointer;padding:11px 20px;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;text-transform:none;font-family:var(--global-secondary-font-family);}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select-option:hover{background-color:#b2b2b2;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select{-webkit-flex:1 0 0%;-ms-flex:1 0 0%;flex:1 0 0%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select.is-empty .c-select-toggle{color:#b2b2b2;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select.is-empty .c-select-clear{opacity:0;visibility:hidden;-webkit-transition:-webkit-transform 0.3s ease,opacity 0.3s ease,visibility 0s linear 0s;transition:transform 0.3s ease,opacity 0.3s ease,visibility 0s linear 0s;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .c-select.opened .c-select-open-icon{color:currentColor;-webkit-transform:translateY(-50%) rotateX(180deg);-moz-transform:translateY(-50%) rotateX(180deg);-ms-transform:translateY(-50%) rotateX(180deg);transform:translateY(-50%) rotateX(180deg);}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .empty-message{padding:160px 0;text-align:center;display:none;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .empty-message.visible{display:block;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9 .visually-hidden{position:absolute;overflow:hidden;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;border:0;}#section-109ad32a-04ff-4f2e-9203-cb2104dad1b9>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(2 / 4 * var(--global-section-padding))!important;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7{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:#f8f8f8;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:97%;--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:#f8f8f8;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.6));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/rvpjl6frumsiyimq9ptk');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .redesign .link:after{background-color:#ffffff;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7.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-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7.parallax-enabled>div.video-wrapper{position:fixed;left:0;top:0;width:100vw;height:100vh;z-index:-9999;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7.parallax-enabled .featured-testimonials:before{display:block;content:'';left:0;top:0;width:100%;
34background:var(--sectionBackground) center no-repeat;-webkit-background-size:cover;background-size:cover;position:fixed;z-index:-1;height:100%;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials{padding:140px 0;position:relative;max-height:100vh;}@media(max-width: 768px){#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials{padding:40px 0;max-height:unset;}}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .container{max-width:1300px;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .container:after{content:'';clear:both;display:block;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .slick-arrow:not(.slick-disabled){cursor:pointer;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__left{text-align:right;padding-right:45px;max-width:500px;width:100%;float:left;}@media(max-width: 991px){#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__left{max-width:350px;width:inherit;padding-right:30px;}}@media(max-width: 768px){#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__left{text-align:center;padding-right:0;margin-bottom:30px;float:none;max-width:100%;}}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__left h2{margin:0 0 15px;width:100%;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__left .slick-links-nav{display:inline-block;list-style:none;vertical-align:top;margin:0;padding:0;white-space:nowrap;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__left .slick-links-nav li{display:inline-block;vertical-align:top;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__left .slick-links-nav .separator{margin-left:40px;position:relative;pointer-events:none;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__left .slick-links-nav .separator:before{content:'';position:absolute;left:-23px;width:1px;height:10px;margin-top:-5px;top:50%;background-color:currentColor;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__left .slick-links-nav .link.slick-disabled:hover{color:inherit;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__left .slick-links-nav .link.slick-disabled:before,#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__left .slick-links-nav .link.slick-disabled:after{opacity:0;color:inherit;background-color:inherit;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__right{padding-left:45px;max-width:700px;overflow:hidden;}@media(max-width: 991px){#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__right{padding-left:30px;}}@media(max-width: 768px){#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials .featured-testimonials__right{overflow:visible;padding-left:0;}}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials__slider{border-left:solid 1px #d5d5d5;margin-left:-45px;padding-left:45px;margin-bottom:40px;}@media(max-width: 991px){#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials__slider{margin-left:-30px;padding-left:30px;}}@media(max-width: 768px){#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials__slider{margin-left:0;padding:0;margin-bottom:30px;border:none;}}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials__slider blockquote{margin:0 0 25px;white-space:pre-line;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials__slider cite{font-weight:bold;font-size:14px;line-height:18px;text-transform:uppercase;font-style:normal;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials__slider .slick-slide{vertical-align:top;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials__slider:not(.slick-initialized){display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7 .featured-testimonials__slider:not(.slick-initialized) li:not(:first-child){display:none;}#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}@media (min-width: 960px) and (orientation: landscape){#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7{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/rvpjl6frumsiyimq9ptk');}}@media (min-width: 1280px) and (orientation: landscape){#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7{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/rvpjl6frumsiyimq9ptk');}}@media (min-width: 1920px) and (orientation: landscape){#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7{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/rvpjl6frumsiyimq9ptk');}}@media (min-width: 2560px) and (orientation: landscape){#section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7{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/rvpjl6frumsiyimq9ptk');}}
34#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c{color:#000;--fontColor:#000;--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-bottom:calc(0 / 4 * var(--global-section-padding));background-color:#fff;}#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c .boxed-text__description{margin-bottom:50px;text-align:center;}@media (max-width: 768px){#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c .boxed-text__description{margin-bottom:30px;}}#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c .lp-title-group .lp-h2{margin-top:0;}#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c .button-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;}@media(max-width: 600px){#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c .button-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c .button-container .lp-btn{margin-right:20px;}#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c .button-container .lp-btn:last-of-type{margin-right:0;}@media(max-width: 600px){#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c .button-container .lp-btn{margin-right:0px;margin-bottom:20px;width:100%;}#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c .button-container .lp-btn:last-of-type{margin-bottom:0;}}#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c .lp-text--subtitle{margin-left:auto;margin-right:auto;text-transform:none;}#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c .redesign p{margin-bottom:1.666rem;}#section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c>div:last-child{padding-bottom:calc(0 / 4 * var(--global-section-padding))!important;}#section-64de7b13-9930-4519-a89c-b80f37d851fa{color:#F9F5F5;--fontColor:#F9F5F5;--fontColor_H:0;--fontColor_S:25%;--fontColor_L:97%;--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.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/rwmeayehltp0psyrfhhg');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-64de7b13-9930-4519-a89c-b80f37d851fa .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;-webkit-justify-content:space-between;justify-content:space-between;}#section-64de7b13-9930-4519-a89c-b80f37d851fa .cta-block .text-block{max-width:65%;}@media (max-width: 768px){#section-64de7b13-9930-4519-a89c-b80f37d851fa .cta-block .text-block{max-width:100%;margin-bottom:24px;}}#section-64de7b13-9930-4519-a89c-b80f37d851fa .cta-block .lp-h2{margin-bottom:0;}@media (max-width: 768px){#section-64de7b13-9930-4519-a89c-b80f37d851fa .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-64de7b13-9930-4519-a89c-b80f37d851fa .cta-block .lp-h2{margin-bottom:24px;text-align:center;}}#section-64de7b13-9930-4519-a89c-b80f37d851fa .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-64de7b13-9930-4519-a89c-b80f37d851fa .cta-block--Center-aligned .text-block{margin-left:auto;margin-right:auto;margin-bottom:24px;}@media (min-width: 769px){#section-64de7b13-9930-4519-a89c-b80f37d851fa .cta-block--Right-aligned .text-block{padding-right:20px;}}@media (min-width: 960px) and (orientation: landscape){#section-64de7b13-9930-4519-a89c-b80f37d851fa{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/rwmeayehltp0psyrfhhg');}}@media (min-width: 1280px) and (orientation: landscape){#section-64de7b13-9930-4519-a89c-b80f37d851fa{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/rwmeayehltp0psyrfhhg');}}@media (min-width: 1920px) and (orientation: landscape){#section-64de7b13-9930-4519-a89c-b80f37d851fa{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/rwmeayehltp0psyrfhhg');}}@media (min-width: 2560px) and (orientation: landscape){#section-64de7b13-9930-4519-a89c-b80f37d851fa{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/rwmeayehltp0psyrfhhg');}}#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a{color:#010101;--fontColor:#010101;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#F9F5F5;--bgColor_H:0;--bgColor_S:25%;--bgColor_L:97%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#F9F5F5;}#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a.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-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a.parallax-enabled>div.video-wrapper{position:fixed;left:0;top:0;width:100vw;height:100vh;z-index:-9999;}#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a.parallax-enabled .work-with-us:before{display:block;content:'';left:0;top:0;width:100%;
34background:var(--sectionBackground) center no-repeat;-webkit-background-size:cover;background-size:cover;position:fixed;z-index:-1;height:100%;}#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a .redesign.work-with-us{position:relative;color:var(--fontColor, #ffffff);}#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a .redesign.work-with-us .container{text-align:center;max-width:750px;min-height:689px;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;padding-top:50px;padding-bottom:50px;position:relative;z-index:1;}@media (max-width: 768px){#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a .redesign.work-with-us .container{min-height:auto;padding-top:100px;padding-bottom:100px;}}#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a .redesign.work-with-us h2{position:relative;padding-bottom:28px;margin:0 0 30px;}@media(max-width: 768px){#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a .redesign.work-with-us h2{padding-bottom:40px;}}#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a .redesign.work-with-us h2:after{content:'';position:absolute;bottom:0;left:50%;margin-left:-55px;width:110px;height:1px;background-color:var(--fontColor, #ffffff);}#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a .redesign.work-with-us .description{margin:0 0 30px;}@media(max-width: 768px){#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a .redesign.work-with-us .description{margin-bottom:40px;}}#section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a .redesign.work-with-us .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-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a .redesign.work-with-us .btn-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:10px;}}#section-91779466-3754-443e-816b-903fe9150afb{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(241, 241, 241, 1);--bgColor_H:0;--bgColor_S:0%;--bgColor_L:95%;--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:rgba(241, 241, 241, 1);}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section ul.featured-properties div.slick-track li.featured-properties__item-cover span.featured-properties__label{background:#000;color:#fff;}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section ul.featured-properties .featured-properties__item{background-color:#fff;}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section ul.featured-properties .featured-properties__text{padding-top:35px;padding-bottom:35px;background-color:#fff;}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section ul.featured-properties .featured-properties__text p{color:#000;}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section ul.featured-properties .featured-properties__text h4{color:#000;text-transform:uppercase;}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section ul.featured-properties .featured-properties__text h5{color:#000;}@media only screen and (max-width:1024px){#section-91779466-3754-443e-816b-903fe9150afb div.featured-properties-button-holder{margin-top:20px;}}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section span.link--white{color:#000;border-color:#000;}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section span.link--white:after{background-color:#a1a1a1;color:#a1a1a1;}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section ul.slick-links-nav span.spacer{background-color:#000;}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section ul.slick-links-nav li span.link:before{background-color:#000;}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section span.link:hover{color:#a1a1a1;}#section-91779466-3754-443e-816b-903fe9150afb div.redesign.featured-properties-section span.link:after{background-color:#a1a1a1;color:#a1a1a1;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section{padding:140px 0;}@media (max-width: 991px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section{padding:100px 0;}}@media (max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section{padding:40px 0;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-list{width:100%;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-track{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-slide{height:inherit!important;display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-arrow:not(.slick-disabled){cursor:pointer;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-links-nav{display:inline-block;list-style:none;vertical-align:top;margin:0 0 0;padding:28px 0 0;white-space:nowrap;}@media (max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-links-nav{padding: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;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-links-nav li{display:inline-block;vertical-align:top;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-links-nav li+li{margin-left:40px;position:relative;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-links-nav .slick-hidden+.spacer{display:none;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-links-nav .spacer{position:absolute;left:-23px;width:1px;height:10px;margin-top:-5px;top:50%;background-color:#fff;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-links-nav .link.slick-disabled{cursor:default;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-links-nav .link.slick-disabled:hover{color:inherit;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-links-nav .link.slick-disabled:before,#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .slick-links-nav .link.slick-disabled:after{opacity:0;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .btn{min-width:250px;}@media (min-width: 561px) and (max-width: 1024px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-section .btn{width:275px;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-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;margin-bottom:60px;text-align:center;}@media (max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-header{display:block;margin-bottom:40px;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-header h2{color:var(--fontColor);margin:0;}@media (max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-header h2{margin-bottom:25px;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-button-holder{text-align:center;margin-top:80px;}@media (max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-button-holder{margin-top:40px;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}@media (max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-nav{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-nav .slick-arrow{position:relative;left:auto;right:auto;bottom:auto;top:auto;text-align:left;font-size:14px;line-height:24px;width:auto;height:24px;text-transform:uppercase;margin-top:15px;color:#C6C6C6;opacity:1!important;-webkit-transform:translate(0, 0);-moz-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0);font-family:var(--global-secondary-font-family);}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-nav .slick-arrow:hover{color:#fff;opacity:1;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-nav .slick-arrow:before{content:'';}@media (max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-nav .slick-arrow{margin-top:0;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-nav .slick-arrow:after{content:'';position:absolute;bottom:3px;height:1px;background-color:#fff;left:0;right:0;-webkit-transition:opacity .3s;transition:opacity .3s;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-nav .slick-arrow.slick-prev:before{content:none;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-nav .slick-arrow.slick-next{margin-left:41px;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-nav .slick-arrow.slick-next:before{left:-21px;width:1px;height:12px;background-color:#fff;pointer-events:none;top:8px;opacity:1;position:absolute;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties-nav .slick-arrow.slick-disabled:after{opacity:0;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties{padding:0;margin:0 -40px;color:#000;}@media (max-width: 991px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties{margin-left:-12px;margin-right:-12px;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item-cover{padding:0 40px;}@media (max-width: 991px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item-cover{padding:0 12px;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item-cover:focus{outline:none;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item{background-color:#fff;text-align:center;font-weight:bold;position:relative;height:100%;color:var(--fontColor);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media (min-width: 1025px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item{min-height:500px;}}@media (hover: none) and (pointer: coarse){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item{min-height:1px;background-color:transparent;}}@media (hover: hover) and (pointer: fine){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item:hover .featured-properties__hover{opacity:1;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item h4{text-transform:none;color:black;margin:0 0 7px;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item p{color:black;margin:0 0 7px;}@media (max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item p{margin-bottom:3px;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item h5{color:black;margin:0;font-family:var(--global-secondary-font-family);text-transform:none;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__item >a{width:100%;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__img{vertical-align:top;width:100%;height:315px;background-color:gray;position:relative;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__img img{width:100%;height:100%;object-fit:cover;}@media (max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__img{height:200px;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__text{color:var(--fontColor);background-color:#fff;padding:25px 15px 15px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}@media (hover: none) and (pointer: coarse){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__text{padding:13px;min-height:175px;}}@media (max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__text h4{max-height:56px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__text p{white-space:normal;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__label{position:absolute;top:0;right:0;background:#000;color:#fff;
34padding:4px 35px;z-index:2;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__hover{color:var(--bgColor);padding:15px;position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(255, 255, 255, 0.75);opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear;z-index:3;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;}@media(max-width: 991px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__hover{display:none;}}@media(max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__hover h4{display:none;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__hover >a{position:absolute;top:0;left:0;width:100%;height:100%;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__buttons{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-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:10px 24px;position:relative;z-index:2;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__share{display:inline-block;position:relative;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__share.featured-properties__share--opened .socials{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}@media (hover: none) and (pointer: coarse){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__share{display:block;width:100%;margin-top:4px;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__share .btn.btn--primary-light{display:block;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__share .socials{-webkit-box-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:absolute;top:100%;left:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);display:none;}@media (hover: none) and (pointer: coarse){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__share .socials{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:static;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);top:auto;left:auto;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__share .socials .socials__link{width:69px;}@media (hover: none) and (pointer: coarse){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties .featured-properties__share .socials .socials__link:hover{border-bottom:transparent!important;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties:not(.slick-initialized){display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;overflow:hidden;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties:not(.slick-initialized) >.featured-properties__item-cover{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:100%;}@media (min-width: 769px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties:not(.slick-initialized) >.featured-properties__item-cover{width:50%;}}@media (min-width: 1100px){#section-91779466-3754-443e-816b-903fe9150afb .three-slides .featured-properties:not(.slick-initialized)>.featured-properties__item-cover{width:33%;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties__item-info{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:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;height:100%;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties__item-info:has(.mls-compliance-container) .featured-properties__text{padding-bottom:0;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties__item-mls-attribution{text-shadow:none;margin:0!important;color:#000!important;width:calc(100% - 200px);}@media (max-width: 1024px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties__item-mls-attribution{width:100%;}}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties__item .featured-properties__item-mls-attribution+.featured-properties__item-mls-logo{position:absolute!important;right:15px!important;bottom:15px!important;display:inline-block;}@media (max-width: 1024px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties__item .featured-properties__item-mls-attribution+.featured-properties__item-mls-logo{position:static!important;}}@media (max-width: 1024px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties__item .featured-properties__item-mls-logo{display:inline-block!important;}}#section-91779466-3754-443e-816b-903fe9150afb .mls-compliance-container{margin-top:auto;padding:15px!important;}#section-91779466-3754-443e-816b-903fe9150afb .featured-properties__open-house{position:absolute;bottom:0;left:0;width:100%;padding:8px 0;color:black;background:rgba(255, 255, 255, 0.7);}@media (max-width: 768px){#section-91779466-3754-443e-816b-903fe9150afb .featured-properties__open-house{font-size:12px;}}#section-91779466-3754-443e-816b-903fe9150afb .description{margin-bottom:15px;}#section-91779466-3754-443e-816b-903fe9150afb>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#modal-global-contact-us .close{z-index:11;}#modal-global-contact-us .description{margin-bottom:15px;}#modal-global-contact-us .close:focus{outline:0;}#modal-global-contact-us .contact-form{padding:70px 0;width:100%;min-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;position:relative;color:var(--colorTxt, #ffffff);-webkit-background-size:cover;background-size:cover;}#modal-global-contact-us .contact-form:after{content:'';position:absolute;display:block;background-color:rgba(2, 5, 7, 0.85);height:100%;width:100%;z-index:0;}
34#modal-global-contact-us .contact-form.loading textarea,#modal-global-contact-us .contact-form.loading input,#modal-global-contact-us .contact-form.loading label,#modal-global-contact-us .contact-form.loading button{pointer-events:none;opacity:.5;}#modal-global-contact-us .contact-form.loading .submit-icon{display:inline-block;}#modal-global-contact-us .contact-form .submit-icon{display:none;}#modal-global-contact-us .contact-form .contact-form-close{width:40px;height:50px;display:block;padding:0;border:none;background-color:transparent;cursor:pointer;position:absolute;right:50px;top:50px;z-index:110;}@media (max-width: 560px){#modal-global-contact-us .contact-form .contact-form-close{right:20px;top:20px;width:30px;height:40px;}}#modal-global-contact-us .contact-form .contact-form-close:before,#modal-global-contact-us .contact-form .contact-form-close:after{content:'';display:block;width:40px;height:1px;background-color:#fff;position:absolute;left:50%;top:50%;}@media (max-width: 560px){#modal-global-contact-us .contact-form .contact-form-close:before,#modal-global-contact-us .contact-form .contact-form-close:after{width:30px;}}#modal-global-contact-us .contact-form .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 .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 .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;max-width:1440px;width:100%;padding:0 160px;margin:0 auto;z-index:10;}@media (max-width: 1320px){#modal-global-contact-us .contact-form .container{padding:0 80px;}}@media (max-width: 1200px){#modal-global-contact-us .contact-form .container{padding:0 30px;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .container{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}@media (max-width: 560px){#modal-global-contact-us .contact-form .container{padding:0 20px;}}#modal-global-contact-us .contact-form h2{margin:0 0 18px 0;padding:0;}@media (max-width: 560px){#modal-global-contact-us .contact-form h2{margin:0 0 24px 0;}}#modal-global-contact-us .contact-form .section-details{width:50%;}@media (max-width: 1200px){#modal-global-contact-us .contact-form .section-details{padding-right:30px;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-details{width:100%;padding-right:0;max-width:700px;margin-bottom:38px;}}#modal-global-contact-us .contact-form .section-message{width:50%;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;position:relative;}@media (max-width: 1200px){#modal-global-contact-us .contact-form .section-message{padding-left:30px;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-message{width:100%;padding-left:0;-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;}}#modal-global-contact-us .contact-form .section-message:after{content:'';position:absolute;display:block;width:1px;background:#999999;height:calc(100% + 50px);left:0;top:-20px;}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-message:after{display:none;}}#modal-global-contact-us .contact-form .section-message form{max-width:435px;width:100%;}#modal-global-contact-us .contact-form .section-message form .submitButton{width:auto;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message form .submitButton{width:100%;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-message form{max-width:700px;}}#modal-global-contact-us .contact-form .section-message form.loading textarea,#modal
34-global-contact-us .contact-form .section-message form.loading input,#modal-global-contact-us .contact-form .section-message form.loading label,#modal-global-contact-us .contact-form .section-message form.loading button{pointer-events:none;opacity:.5;}#modal-global-contact-us .contact-form .section-message form.loading .label-loading{display:inline;}#modal-global-contact-us .contact-form .section-message form.loading .label-success,#modal-global-contact-us .contact-form .section-message form.loading .label-initial{display:none;}#modal-global-contact-us .contact-form .section-message form.loading .submit-icon{display:inline-block;}#modal-global-contact-us .contact-form .section-message form.success .label-loading,#modal-global-contact-us .contact-form .section-message form.success .label-initial{display:none;}#modal-global-contact-us .contact-form .section-message form.success .label-success{display:inline;}#modal-global-contact-us .contact-form .section-message .label-loading,#modal-global-contact-us .contact-form .section-message .label-success{display:none;}#modal-global-contact-us .contact-form .section-message .submit-icon{display:none;}#modal-global-contact-us .contact-form .section-message h2{margin-bottom:28px;}#modal-global-contact-us .contact-form .section-message .form-group_modal{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:39px;}#modal-global-contact-us .contact-form .section-message .form-group_modal input{border:none;border-bottom:1px solid #c0c0c0;display:block;width:100%;background:transparent;color:#ffffff;height:22px;font-size:16px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message .form-group_modal input{height:25px;}}#modal-global-contact-us .contact-form .section-message .form-group-textarea{margin-bottom:30px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message .form-group-textarea{margin-bottom:23px;}}#modal-global-contact-us .contact-form .section-message label{display:block;width:100%;line-height:1.63;letter-spacing:1px;color:#c0c0c0;font-weight:bold;text-transform:uppercase;}#modal-global-contact-us .contact-form .section-message textarea{resize:none;height:105px;width:100%;background:transparent;border:solid 1px #ffffff;margin:23px 0 0 0;color:#ffffff;padding:10px;font-size:16px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message textarea{margin:10px 0 0 0;height:89px;}}#modal-global-contact-us .contact-form .info-zone h4{margin:0 0 16px 0;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone h4{margin:0 0 13px 0;}}#modal-global-contact-us .contact-form .info-zone .type_user:nth-of-type(2){margin-bottom:30px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone .type_user{margin-bottom:58px;}}#modal-global-contact-us .contact-form .info-zone_contact{margin-bottom:23px;}#modal-global-contact-us .contact-form .info-zone_contact:nth-last-child(2){margin-bottom:30px;}#modal-global-contact-us .contact-form .info-zone_contact_cell{position:relative;padding-left:45px;margin-bottom:22px;font-weight:bold;font-size:14px;max-width:90%;letter-spacing:1.5px;text-transform:uppercase;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone_contact_cell{padding-left:0;}}#modal-global-contact-us .contact-form .info-zone_contact_cell:last-of-type{margin-bottom:0;}#modal-global-contact-us .contact-form .info-zone_contact_cell i{position:absolute;left:0;top:0;display:block;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone_contact_cell i{position:relative;margin-bottom:7px;}}#modal-global-contact-us .contact-form .info-zone_contact_cell i svg path{fill:var(--colorTxt);}#modal-global-contact-us .contact-form .info-zone_contact_cell div{padding:0;}#modal-global-contact-us .contact-form .info-zone_contact_cell .contact_title{line-height:1;margin-bottom:5px;}#modal-global-contact-us .contact-form .info-zone_contact_link{color:var(--colorTxt);}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone .type_user:nth-of-type(2){margin-bottom:58px;}}@media (max-width: 560px){#modal-global-contact-us .contact-form .hours_box{margin-bottom:52px;}}#modal-global-contact-us .contact-form .socials_zone{padding-left:45px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .socials_zone{padding-left:0;}}#modal-global-contact-us .contact-form .socials_zone li{margin-bottom:10px;}#modal-global-contact-us .contact-form .socials_zone li:not(:last-child){padding-right:34px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .socials_zone li:not(:last-child){padding-right:12px;}}#modal-global-contact-us .contact-form .success-message.success{margin-top:15px;color:var(--colorTxt);position:absolute;}#modal-global-contact-us .contact-form .success-message.hide{opacity:0;}#modal-global-contact-us .contact-form.one_contact .info-zone .type_user{margin-bottom:73px;}@media (max-width: 768px){#modal-global-contact-us .contact-form.one_contact .info-zone .type_user{margin-bottom:51px;}}@media (max-width: 560px){#modal-global-contact-us .contact-form.one_contact .info-zone .type_user{margin-bottom:40px;}}#modal-global-contact-us .contact-form.one_contact .hours_box{margin-bottom:38px;}#modal-global-contact-us .contact-form.no_icon .info-zone_contact_cell{padding-left:0;}#modal-global-contact-us .contact-form.no_icon .info-zone_contact_cell i{display:none;}#modal-global-contact-us .contact-form.no_icon .socials_zone{padding-left:0;}#modal-global-contact-us .contact-form .pre-line{white-space:pre-line;}#modal-global-contact-us .lp-input-group{margin-bottom:40px;}#modal-global-contact-us .lp-input-group.m16{margin-bottom:16px;}#modal-global-contact-us .lp-disclaimer{margin-top:0;}#modal-global-contact-us .lp-input{border-color:#ffffff;}#modal-global-contact-us .lp-input:focus,#modal-global-contact-us .lp-input:active{border-color:#5e5e5e;}nav{color:#fff;-webkit-transition:0.2s -webkit-transform ease;transition:0.2s transform ease;z-index:102;}nav.scroll .logo .logo__img.light{display:block;}nav.scroll .logo .logo__img.dark{display:none;}nav .header{height:100px;-webkit-transform:translateY(24px);-moz-transform:translateY(24px);-ms-transform:translateY(24px);transform:translateY(24px);}@media (max-width: 768px){nav .header{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}}nav .header .container{max-width:1440px;padding:0 15px;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;height:100%;}@media (max-width: 1024px){nav .header .container{padding:0 15px;}}nav .header .navbar{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;min-height:70px;padding:8px 0 7px;width:100%;}nav .header .logo{z-index:911;position:relative;margin-right:10px;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}nav .header .logo a{overflow:hidden;display:inline-block;}nav .header .logo img{max-width:100%;max-height:52px;vertical-align:top;object-fit:contain;}@media (max-width: 1024px){nav .header .logo img{max-height:50px;}}nav .header .logo img.dark{display:none;}@media(max-width: 1024px){nav .header .logo img.dark{display:none!important;}}nav .header .logo img.light{display:block;}@media(max-width: 1024px){nav .header .logo img.light{display:inline-block!important;}}nav .header .logo__link{-webkit-animation-duration:1s;animation-duration:1s;overflow:hidden;}nav .header .logo__img.light{display:block;}nav .header .logo__img.dark{display:none;}nav .header .navigation{margin-left:auto;color:inherit;}@media (max-width: 1024px){nav .header .navigation{display:none;}}nav .header .navigation ul{position:relative;list-style-type:none;padding-left:0;margin-bottom:0;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;}nav .header .navigation ul li a span,nav .header .navigation ul li button span{position:relative;white-space:nowrap;}nav .header .navigation ul li a span:after,nav .header .navigation ul li button span:after{content:'';position:absolute;display:block;height:1px;background-color:#c6c6c6;width:0;bottom:0;left:0;-webkit-transition:all .2s ease;transition:all .2s ease;}nav .header .navigation ul li a:hover span:after,nav .header .navigation ul li button:hover span:after{width:100%;-webkit-transition:all .2s ease;transition:all .2s ease;}nav .header .navigation__item{padding:0;margin:0;}nav .header .navigation__link{display:block;padding:12px 13px;color:inherit;position:relative;font-size:13px;line-height:1.08;font-weight:700;letter-spacing:1.5px;background-color:transparent;border:none;cursor:pointer;text-align:left;text-transform:uppercase;}@media (max-width: 1280px){nav .header .navigation__link{padding:19px 10px;font-size:11.5px;}}nav .header .navigation__link .sub-nav-container .navigation__link:hover{background:#000000;}nav .header .navigation .sub-nav{position:absolute;bottom:0;padding:0;opacity:0;visibility:hidden;-webkit-transition:all .2s ease;transition:all .2s ease;-webkit-transform:translate(0, calc(100% + -10px));-moz-transform:translate(0, calc(100% + -10px));-ms-transform:translate(0, calc(100% + -10px));transform:translate(0, calc(100% + -10px));}nav .header .navigation .sub-nav ul{margin:0;padding:12px 0;display:block;background-color:rgba(26, 26, 26, .75);max-width:300px;}nav .header .navigation .sub-nav__item{position:relative;display:block;margin:0;text-align:left;}nav .header .navigation .sub-nav__item:last-child{border-bottom-color:transparent;}nav .header .navigation .sub-nav__link{display:block;max-width:300px;color:#ffffff;margin:0;line-height:1;letter-spacing:1.5px;padding:19px 13px;-webkit-transition:all .2s ease;transition:all .2s ease;}nav .header .navigation .sub-nav.visible{opacity:1;visibility:visible;-webkit-transform:translate(0, 100%);-moz-transform:translate(0, 100%);-ms-transform:translate(0, 100%);transform:translate(0, 100%);}nav .header .navigation .sub-nav.visible+.navigation__link{background:#000000;}nav .header .hamburger{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;border:none;padding:28px 13px;background-color:transparent;color:inherit;vertical-align:middle;cursor:pointer;outline:none;z-index:915;opacity:1;}nav .header .hamburger__bars{position:relative;display:block;width:26px;height:2px;background-color:currentColor;-webkit-transition:0.2s -webkit-transform ease;transition:0.2s transform ease;}nav .header .hamburger__bars:before,nav .header .hamburger__bars:after{content:'';display:block;width:26px;height:2px;background-color:currentColor;position:absolute;
34left:0;top:0;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:0.2s -webkit-transform ease;transition:0.2s transform ease;}nav .header .hamburger__bars:before{-webkit-transform:translateY(-9px);-moz-transform:translateY(-9px);-ms-transform:translateY(-9px);transform:translateY(-9px);}nav .header .hamburger__bars:after{-webkit-transform:translateY(9px);-moz-transform:translateY(9px);-ms-transform:translateY(9px);transform:translateY(9px);}nav .header .hamburger:hover{text-shadow:.5px 0 0,-.5px 0 0;}nav .header .hamburger:hover .hamburger__bars:before{-webkit-transform:translateY(-7px);-moz-transform:translateY(-7px);-ms-transform:translateY(-7px);transform:translateY(-7px);}nav .header .hamburger:hover .hamburger__bars:after{-webkit-transform:translateY(7px);-moz-transform:translateY(7px);-ms-transform:translateY(7px);transform:translateY(7px);}nav .header .hamburger.active .hamburger__bars{-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);opacity:0;}nav .header .hamburger.active .hamburger__bars:before{display:none;}nav .header .hamburger.active .hamburger__bars:after{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);}nav .content-container{-webkit-transition:0.2s all ease;transition:0.2s all ease;}nav.scroll .content-container,nav .scroll .content-container{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}nav.scroll .content-container .navigation__link,nav .scroll .content-container .navigation__link{visibility:visible!important;}nav.scroll .content-container .navigation .sub-nav,nav .scroll .content-container .navigation .sub-nav{-webkit-transform:translate(0, calc(100% + -10px));-moz-transform:translate(0, calc(100% + -10px));-ms-transform:translate(0, calc(100% + -10px));transform:translate(0, calc(100% + -10px));}nav.scroll .content-container .navigation .sub-nav ul,nav .scroll .content-container .navigation .sub-nav ul{padding:0;}nav.scroll .content-container .navigation .sub-nav.visible,nav .scroll .content-container .navigation .sub-nav.visible{opacity:1;visibility:visible;-webkit-transform:translate(0, calc(100% + 23px));-moz-transform:translate(0, calc(100% + 23px));-ms-transform:translate(0, calc(100% + 23px));transform:translate(0, calc(100% + 23px));}nav .dark-opening{background-color:rgb(26, 26, 26)!important;}nav nav.dark-opening .header{margin-top:0;}nav #ctaShowButton,nav #ctaMessage{display:none!important;}nav #ctaShowButton{display:none;opacity:0;pointer-events:none;}nav .search{cursor:pointer;}nav .search svg{display:block;}nav .buttons-wrapper{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;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}body>div.sidemenu{background-color:#fff;color:#000;--fontColor:#000;--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;}body>div.sidemenu{width:auto!important;left:auto!important;right:0!important;top:0;background-color:transparent;}body>div.sidemenu.visible .sidebar{-webkit-animation:slideIn .3s forwards;animation:slideIn .3s forwards;}body>div.sidemenu.is-hiding{display:block;}body>div.sidemenu.is-hiding .sidebar{-webkit-animation:slideOut .3s forwards;animation:slideOut .3s forwards;}body>div.sidemenu .sidebar{position:relative;width:400px;height:100vh;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-top:40px;padding-bottom:100px;background-color:var(--bgColor, #fff);color:var(--fontColor, #000);font-family:var(--global-primary-font-family);font-size:21px;line-height:1.333333;letter-spacing:.5px;-webkit-transition:all .3s ease-in;transition:all .3s ease-in;}@media (max-width: 767px){body>div.sidemenu .sidebar{width:270px;font-size:18px;}}body>div.sidemenu .sidebar__content{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;width:100%;padding-left:40px;padding-right:40px;text-align:center;overflow-y:auto;}@media (max-width: 767px){body>div.sidemenu .sidebar__content{-webkit-box-pack:start;-ms-flex-pack:start;
34-webkit-justify-content:flex-start;justify-content:flex-start;padding-left:20px;padding-right:20px;}}body>div.sidemenu .sidebar__close{position:absolute;right:30px;top:30px;display:inline-block;width:38px;height:38px;padding:10px;border:none;border-radius:0;background:transparent;color:inherit;z-index:1;cursor:pointer;}body>div.sidemenu .sidebar__close:before,body>div.sidemenu .sidebar__close:after{content:'';display:block;width:22px;height:2px;background-color:currentColor;position:absolute;left:50%;top:50%;}body>div.sidemenu .sidebar__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);}body>div.sidemenu .sidebar__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);}@media (max-width: 767px){body>div.sidemenu .sidebar__close{right:10px;top:10px;}}body>div.sidemenu .sidebar__close:focus{outline:none;}body>div.sidemenu .sidebar__nav{list-style:none;padding:0;margin:auto 0;}body>div.sidemenu .sidebar__nav-item{margin:0;padding-top:4px;padding-bottom:4px;border-bottom:1px solid hsla( 35 var(--bgColor_H, 0), 36 var(--bgColor_S, 0%), 37 calc(50% + (var(--bgColor_L, 100%) - 50%) * 0.9), 38 var(--bgColor_A, 1) 39 );}body>div.sidemenu .sidebar__nav-link{display:inline-block;padding:10px;border:none;border-radius:0;background:transparent;text-transform:none;-webkit-transition:all .25s;transition:all .25s;cursor:pointer;color:inherit;}body>div.sidemenu .sidebar__nav-link:focus{outline:none;}body>div.sidemenu .sidebar__subnav{list-style:none;padding:4px 0 10px;margin:0;font-size:17px;}@media (max-width: 767px){body>div.sidemenu .sidebar__subnav{font-size:14px;letter-spacing:.3px;}}body>div.sidemenu .sidebar__subnav-item{margin-bottom:10px;}body>div.sidemenu .sidebar__subnav-item:last-child{margin-bottom:0;}body>div.sidemenu .sidebar__subnav-link{display:inline-block;padding:0;border:none;border-radius:0;background:transparent;text-transform:none;opacity:.7;-webkit-transition:all .25s;transition:all .25s;cursor:pointer;color:inherit;}body>div.sidemenu .sidebar__subnav-link:focus{outline:none;}body>div.sidemenu .sub-nav{visibility:hidden;opacity:0;max-height:0;-webkit-transition:all .3s;transition:all .3s;}body>div.sidemenu .sub-nav.visible{display:block;visibility:visible;opacity:1;max-height:100vh;}@-webkit-keyframes slideIn{0%{-webkit-transform:translateX(100%);-moz-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);}}@keyframes slideIn{0%{-webkit-transform:translateX(100%);-moz-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);}100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);}}@-webkit-keyframes slideOut{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);}100%{-webkit-transform:translateX(100%);-moz-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);}}@keyframes slideOut{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);}100%{-webkit-transform:translateX(100%);-moz-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);}}body>div.sidemenu #main-section .sidebar{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);}footer{background-color:#fff;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;--greyColor:hsla( 40var(--fontColor_H), 41var(--fontColor_S), 42calc(var(--fontColor_L) + (50% - var(--fontColor_L)) * 0.445), 43var(--fontColor_A));}footer .redesign .inp--dark-bg input{color:var(--fontColor);border-color:hsla( 44 var(--fontColor_H), 45 var(--fontColor_S), 46 calc(var(--fontColor_L) + (50% - var(--fontColor_L)) * 0.445), 47 var(--fontColor_A));}footer .redesign .inp--dark-bg input:hover{border-color:var(--fontColor);}footer .redesign .inp+.inp{margin-top:24px;}footer .redesign .btn--primary-light{border-color:var(--fontColor);color:var(--fontColor);}footer .redesign .btn--primary-light:hover{background-color:var(--fontColor);color:var(--bgColor);}footer.is-background-color-light .redesign .btn--primary-light{border-width:1px;}footer .redesign .socials--grey{-webkit-box-pack:end;-ms-flex-pack:end;
47-webkit-justify-content:flex-end;justify-content:flex-end;}footer .redesign .socials--grey .socials__link{background-color:hsla( 48 var(--bgColor_H), 49 var(--bgColor_S), 50 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.15), 51 var(--bgColor_A));color:var(--greyColor);}footer .redesign .socials--grey .socials__link svg{fill:var(--greyColor);}footer .redesign .socials--grey .socials__link:hover{background-color:hsla( 52 var(--bgColor_H), 53 var(--bgColor_S), 54 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.4), 55 var(--bgColor_A));color:var(--fontColor);}footer .redesign .socials--grey .socials__link:hover svg{fill:var(--fontColor);}footer .redesign.footer .grey-text{color:var(--fontColor);}footer .footer{position:relative;padding-top:60px;padding-bottom:30px;}@media (max-width: 560px){footer .footer{padding-top:10px;}}@media (max-width: 500px){footer .footer{padding-bottom:70px;}}footer .footer .text_content_wrap p{margin-bottom:15px;}footer .footer .text_content_wrap p:last-of-type{margin-bottom:0;}footer .footer .container{max-width:1440px;}@media (max-width: 768px){footer .footer .container{padding-left:25px;padding-right:25px;}}@media (max-width: 560px){footer .footer .container{padding-left:20px;padding-right:20px;}}footer .footer h3{margin:0 0 15px 0;}footer .footer h5{text-transform:capitalize;}footer .footer .info-wrap{margin-bottom:40px;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;}footer .footer .info-wrap .agent_box{width:70%;}@media (max-width: 1280px){footer .footer .info-wrap .agent_box{width:50%;}}@media (max-width: 768px){footer .footer .info-wrap .agent_box{width:100%;}}footer .footer .info-wrap .newsletter_box{width:30%;}@media (max-width: 1280px){footer .footer .info-wrap .newsletter_box{width:50%;}}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box{width:100%;}}footer .footer .info-wrap .newsletter_box--padding{padding-top:44px;}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box--padding{padding-top:0;}}footer .footer .info-wrap .newsletter_box .contact_title{margin-bottom:13px;line-height:1.6;}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box .info-wrap-contact_cell{margin-bottom:0;padding-left:0;}}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box .icon_text{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;margin-bottom:22px;position:relative;}footer .footer .info-wrap .newsletter_box .icon_text i{position:relative;width:30px;margin-right:20px;}footer .footer .info-wrap .newsletter_box .icon_text .contact_title{margin-bottom:0;}}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box .info-wrap-contact_zone{margin-bottom:0;}}footer .footer .info-wrap-contact{position:relative;}footer .footer .info-wrap-contact_zone{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-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-bottom:39px;}@media (max-width: 768px){footer .footer .info-wrap-contact_zone{margin-bottom:21px;}footer .footer .info-wrap-contact_zone:last-child{margin-bottom:51px;}}footer .footer .info-wrap-contact_zone i{position:absolute;left:0;display:block;}footer .footer .info-wrap-contact_zone i svg path{fill:currentColor;}footer .footer .info-wrap-contact_zone h4{margin:0 0 13px 0;width:100%;}footer .footer .info-wrap-contact_cell{position:relative;padding-left:50px;width:400px;font-size:14px;text-transform:uppercase;font-weight:bold;letter-spacing:1.5px;}@media (max-width: 1280px){footer .footer .info-wrap-contact_cell:first-of-type{margin-bottom:21px;}}footer .footer .info-wrap-contact_cell .contact_title{line-height:1;margin-bottom:5px;}footer .footer .info-wrap-contact_link{color:var(--greyColor);position:relative;}@media (max-width: 560px){footer .footer .info-wrap-contact_link{letter-spacing:0;}}footer .footer .hvr_animation{position:relative;-webkit-text-decoration:none!important;text-decoration:none!important;}footer .footer .hvr_animation:after{content:'';position:absolute;
55left:0;bottom:0;width:0%;height:1px;background:var(--greyColor);-webkit-transition:.3s linear;transition:.3s linear;}footer .footer .hvr_animation:hover:after{width:100%;}footer .footer .hvr_animation.underlined:after{width:100%;}footer .footer .hvr_animation.underlined:hover:after{width:0%;}footer .footer .form-content{padding:0!important;}footer .footer .form-content label{color:var(--fontColor);text-transform:none;letter-spacing:1;}footer .footer .form-content input{padding:2px 24px 2px 0;}footer .footer .form-content .subscribe_btn{margin-top:20px;position:relative;}footer .footer .form-content .subscribe_btn i{font-size:18px;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);opacity:0;}footer .footer .form-content.success i{opacity:1;}footer .footer .form-content.success .subscribe_btn span{opacity:0;}footer .footer .form-content.success .hide{opacity:0;}footer .footer .form-content.success .hide +span{opacity:1;}footer .footer .text_footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;margin-bottom:39px;}@media (max-width: 1280px){footer .footer .text_footer{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}@media (max-width: 560px){footer .footer .text_footer{text-align:center;}}footer .footer .text_footer p{white-space:normal;}footer .footer .text_footer .images_box{max-width:186px;width:100%;margin-right:43px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}@media (max-width: 560px){footer .footer .text_footer .images_box{margin:0 auto 20px auto;}}@media (max-width: 1280px){footer .footer .text_footer .img_size{margin-bottom:20px;}}@media (max-width: 560px){footer .footer .text_footer .img_size{margin-bottom:0;}}footer .footer .text_footer .img_size img{width:100%;height:100%;object-fit:contain;}footer .footer .first_text_footer .img_size{width:100%;height:63px;}footer .footer .first_text_footer .img_size img{width:100%;height:100%;object-fit:contain;}@media (max-width: 768px){footer .footer .first_text_footer{margin-bottom:51px;}}footer .footer .second_text_footer .first_img_size{width:45px;height:45px;margin-right:15px;}footer .footer .second_text_footer .second_img_size{width:100px;height:45px;}@media (max-width: 560px){footer .footer .second_text_footer{margin-bottom:21px;}}footer .footer .info-privacy{padding-top:45px;padding-bottom:30px;border-top:1px solid hsla( 56 var(--bgColor_H), 57 var(--bgColor_S), 58 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.55), 59 var(--bgColor_A));}@media (max-width: 768px){footer .footer .info-privacy{padding-top:0;border-top:none;}}footer .footer .info-privacy__row{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}footer .footer .info-privacy .copy_zone{font-size:18px;}@media (min-width: 1350px){footer .footer .info-privacy .copy_zone{text-align:center;}}@media (min-width: 1281px){footer .footer .info-privacy .copy_zone{padding-top:8px;padding-bottom:8px;}}@media (max-width: 768px){footer .footer .info-privacy .copy_zone{text-align:center;margin-bottom:10px;padding-top:45px;border-top:1px solid hsla( 60 var(--bgColor_H), 61 var(--bgColor_S), 62 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.55), 63 var(--bgColor_A));}}footer .footer .info-privacy .copy_zone a{color:var(--greyColor);}footer .footer .info-privacy .powered_zone{font-size:18px;}@media (min-width: 1281px){footer .footer .info-privacy .powered_zone{padding-top:8px;padding-bottom:8px;}}@media (max-width: 1280px){footer .footer .info-privacy .powered_zone{text-align:center;}}@media (max-width: 768px){footer .footer .info-privacy .powered_zone{text-align:center;margin-bottom:24px;}}footer .footer .info-privacy .powered_zone a{color:var(--greyColor);}@media (min-width: 1281px){footer .footer .info-privacy .socials_zone{-webkit-box-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}@media (max-width: 1280px){footer .footer .info-privacy .socials_zone{width:100%;margin-top:20px;-webkit-box-pack:start;-ms-flex-pack:start;
63-webkit-justify-content:flex-start;justify-content:flex-start;}}@media (max-width: 768px){footer .footer .info-privacy .socials_zone{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin-top:0;margin-bottom:20px;}footer .footer .info-privacy .socials_zone li{padding:0 7px 10px 7px;}}footer .footer.one_contact .type_user{margin-bottom:73px;}@media (max-width: 768px){footer .footer.one_contact .type_user{margin-bottom:51px;}}footer .footer.no_newsletter h3{margin-bottom:46px;}footer .footer.no_newsletter .newsletter_box{display:none;}footer .footer.no_newsletter .info-wrap-contact{width:calc(70% + 230px);width:100%;padding-left:230px;}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact{padding-left:0;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact{width:100%;}}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact_cell{width:50%;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact_cell{width:100%;}}footer .footer.no_newsletter .info-wrap-contact h4{position:absolute;margin-top:-8px;left:0;max-width:200px;}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact h4{position:relative;left:auto;max-width:100%;width:100%;margin-bottom:20px;margin-top:0;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact h4{position:relative;left:auto;max-width:100%;}}footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:71px;}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:39px;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:51px;}}footer .footer.no_newsletter .info-wrap-contact_zone:last-child{margin-bottom:0;}footer .footer.no_icon .info-wrap-contact_cell{padding-left:0;}footer .footer.no_icon .info-wrap-contact_cell i{display:none;}footer .footer.no-names .info-wrap-contact{padding-left:0;}footer .form-row{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: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;margin-left:-15px;margin-right:-15px;}@media (min-width: 1281px){footer .form-row{-webkit-box-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}@media (max-width: 900px){footer .form-row{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}footer .form-col{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-left:15px;padding-right:15px;}@media (min-width: 768px){footer .form-col{-webkit-flex:1 1 0;-ms-flex:1 1 0;flex:1 1 0;}}@media (min-width: 768px){footer .form-col--socials{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;}}@media (min-width: 1281px){footer .form-col--socials{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;}}@media (max-width: 768px){footer .form-col--socials{-webkit-order:-1;-ms-flex-order:-1;order:-1;}}@media (min-width: 1281px){footer .form-col--xl-auto{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;}}footer .additional-links-separator{display:block;width:100%;height:0;overflow:hidden;}@media (min-width: 768px){footer .additional-links-separator{display:inline;width:auto;height:auto;}footer .additional-links-separator:before{content:"|";}}footer .h-pot{height:0;width:0;overflow:hidden;visibility:hidden;}footer .img-wrap{max-width:100px;width:100%;display:block;margin-right:20px;}@media (max-width: 900px){footer .img-wrap{margin-right:0;margin-bottom:10px;}}footer .img-wrap img{width:100%;object-fit:cover;}footer .powered-box{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-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;}@media (max-width: 900px){footer .powered-box{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}footer .form-col--copyright{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;margin:10px 0;}footer .luxury-link{white-space:nowrap;}footer .footer__disclaimers{padding-top:24px;padding-bottom:24px;}@media (max-width: 900px){footer .footer__disclaimers{text-align:center;}}body>div.mobile-contact-wrapper .mobile-contact{display:none;position:fixed;right:30px;bottom:25px;z-index:91;}body>div.mobile-contact-wrapper .mobile-contact a{-webkit-text-decoration:none;text-decoration:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;
63-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:55px;height:55px;margin-bottom:15px;background-color:#fff;font-size:22px;border:2px solid hsla(0,0%,49.8%,.3);border-radius:90px;margin-left:1px;}body>div.mobile-contact-wrapper .mobile-contact a i{color:#000;}body>div.mobile-contact-wrapper .mobile-contact .buttons-holder{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}body>div.mobile-contact-wrapper .mobile-contact.dark a{background-color:#000;}body>div.mobile-contact-wrapper .mobile-contact.dark a i{color:#fff;}@media (max-width: 560px){body>div.mobile-contact-wrapper .mobile-contact{display:block;}} 64 </style> 65 <style id="custom-style-css">.hyperlink-style-1{color:rgba(0, 0, 0, 1)!important;}.hyperlink-style-1:hover{color:rgba(26, 26, 26, 1)!important;}.button-style-1{color:rgba(0,0,0,1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(0,0,0,1)!important;}.button-style-1:hover{color:rgba(255,255,255,1)!important;background-color:rgba(0,0,0,1)!important;border-color:rgba(0, 0, 0, 1)!important;}.social_icons-style-1 a{border-color:rgba(0, 0, 0, 1)!important;background-color:rgba(0, 0, 0, 0)!important;color:rgba(0, 0, 0, 1)!important;}.social_icons-style-1 a:hover{border-color:rgba(0, 0, 0, 1)!important;background-color:rgba(0, 0, 0, 1)!important;color:rgba(255,255,255,1)!important;}.social_icons-style-1 a i{color:inherit!important;}
65.social_icons-style-1 a svg,.social_icons-style-1 a svg path{fill:currentColor!important;}.pagination-style-1 li a{color:rgba(26, 26, 26, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(0, 0, 0, 0)!important;}.pagination-style-1 li a:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(26, 26, 26, 1)!important;border-color:rgba(26, 26, 26, 1)!important;}.pagination-style-1 li.active a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(26, 26, 26, 1)!important;border-color:rgba(26, 26, 26, 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(0, 0, 0, 0)!important;}.pagination-style-2 li a:hover{color:rgba(0, 0, 0, 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(0, 0, 0, 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(255, 255, 255, 0.7)!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(0, 0, 0, 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(0, 0, 0, 1)!important;}.social_icons-style-2 a i{color:inherit!important;}
65.social_icons-style-2 a svg,.social_icons-style-2 a svg path{fill:currentColor!important;}.button-style-3{color:rgba(94, 94, 94, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(94, 94, 94, 1)!important;}.button-style-3:hover{color:rgba(255,255,255,1)!important;background-color:rgba(94, 94, 94, 1)!important;border-color:rgba(94, 94, 94, 1)!important;}.button-style-4{color:rgba(192, 192, 192, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(192, 192, 192, 1)!important;}.button-style-4:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(192, 192, 192, 1)!important;border-color:rgba(192, 192, 192, 1)!important;}.button-style-5{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 35, 73, 1)!important;border-color:rgba(0, 35, 73, 1)!important;}.button-style-5:hover{color:rgba(0, 35, 73, 1)!important;background-color:rgba(0, 0, 0, 0.01)!important;border-color:rgba(0, 35, 73, 1)!important;}.button-style-6{color:#000000!important;background-color:#FFFFFF!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-6:hover{color:#FFFFFF!important;background-color:rgba(0, 0, 0, 0)!important;border-color:#FFFFFF!important;}</style> 66 <!-- LP Consent bootstrap: blocking; resolves consent state, pushes Consent Mode 67 defaults, and dynamically loads the locale + main (and banner if needed). --> 68
68<script src="https://cdn.luxurypresence.com/scripts/lp-consent/latest/lp-consent-boot.js" data-website-id="96b2125f-da36-451f-8701-3e7494eee5ae"></script>
68 69 70 71
71<script> 72 (function utmParse() { 73 const url = new URL(window.location.href); 74 if (url.search) { 75 const utm = url.search.split(/\?|&/g).reduce((acc, current) => { 76 const matched = current.match(/utm_(content|campaign|medium|source|term|id)|gclid/g); 77 if (matched) { 78 acc[matched[0]] = current.replace(`${matched[0]}=`, ''); 79 } 80 return acc; 81 }, {}); 82 if (Object.keys(utm).length) { 83 window.localStorage.setItem('utm_vars', JSON.stringify(utm)); 84 } else { 85 // Remove old utm vars 86 window.localStorage.removeItem('utm_vars'); 87 } 88 } 89 // Set referrer in local storage 90 // This is meant to be stored once to avoid self-referrals and to have the first referrer only. 91 if (!window.localStorage.getItem('referrer')) { 92 // Capture the Referrer URL 93 const referrer = document.referrer; 94 if (referrer) { 95 // Only store the referrer if it comes from outside the current domain (to avoid self-referrals) 96 const currentDomain = window.location.hostname; 97 const referrerDomain = new URL(referrer).hostname; 98 99 if (referrerDomain !== currentDomain) { 100 // Store it in localStorage 101 localStorage.setItem('referrer', referrer); 102 } 103 } 104 } 105 })(); 106 </script>
106 107 108 <!-- GOOGLE TRANSLATE STYLES are moved to external CSS --> 109</head> 110<body> 111 <div id="google_translate_element" style="display: none"></div> 112 113 <nav id="global-navbar" data-el-id="43e7a874-fb1e-4cdd-91fe-eb6bf5b9179b"> 114 <div class="redesign"> 115 <div class="content-container header"> 116 <div class="container header__container"> 117 <div class="navbar"> 118 <div class="logo"> 119 <a href="/" class="logo__link"> 120 <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/mwnfylmwjjlrzdlzv2or" 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/mwnfylmwjjlrzdlzv2or 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/mwnfylmwjjlrzdlzv2or 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/mwnfylmwjjlrzdlzv2or 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/mwnfylmwjjlrzdlzv2or 1918w" class="logo__img light" alt=""> 121 <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/pbqelaa7gwbbxxtvqgmp" 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/pbqelaa7gwbbxxtvqgmp 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/pbqelaa7gwbbxxtvqgmp 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/pbqelaa7gwbbxxtvqgmp 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/pbqelaa7gwbbxxtvqgmp 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=2560/https://media-production.lp-cdn.com/media/pbqelaa7gwbbxxtvqgmp 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/pbqelaa7gwbbxxtvqgmp 3456w" class="logo__img dark" alt=""> 122 </a> 123 </div> 124 <div class="navigation"> 125 <ul> 126 <li class="navigation__item"> 127 <a href="/properties" class="navigation__link wow fadeInUp" data-wow-delay="2.0"><span>Portfolio</span></a> 128 </li> 129 <li class="navigation__item"> 130 <a href="/home-search/listings?search_type=envelope&south=37.77581722264004&west=-122.2829185307129&north=37.87805176810842&east=-122.13563306928712&property_type%5B%5D=Co-op&property_type%5B%5D=Condo&property_type%5B%5D=Commercial&property_type%5B%5D=Land&property_type%5B%5D=Multi-family&property_type%5B%5D=Manufactured&property_type%5B%5D=Residential&property_type%5B%5D=Townhouse&property_type%5B%5D=Other&property_type%5B%5D=Co-op&property_type%5B%5D=Condo&property_type%5B%5D=Commercial&property_type%5B%5D=Land&property_type%5B%5D=Multi-family&property_type%5B%5D=Manufactured&property_type%5B%5D=Residential&property_type%5B%5D=Townhouse&property_type%5B%5D=Other&status%5B%5D=Active&status_days%5BActive%5D=36500&status_days%5BUnder+Contract%5D=36500&status_days%5BPending%5D=36500&status_days%5BSold%5D=180&mailer_schedule=instant&order=status_modified_at%3Adesc&page=1" class="navigation__link wow fadeInUp" data-wow-delay="2.1"><span>Home Search</span></a> 131 </li> 132 <li class="navigation__item"> 133 <a data-type="CONTACT_US" class="navigation__link wow fadeInUp"><span>Contact Us</span></a> 134 </li> 135 <li class="navigation__item"> 136 <a href="tel:4153429950" class="navigation__link wow fadeInUp" data-wow-delay="2.3"><span>(415) 342-9950</span></a> 137 </li> 138 </ul> 139 </div> 140 <div class="buttons-wrapper"> 141 <button type="button" class="hamburger-component hamburger">
142 <span class="hamburger__bars"></span> 143 </button> 144 </div> 145 </div> 146 </div> 147 </div> 148</div> 149 150 </nav> 151 <div id="global-sidemenu" class="sidemenu" data-el-id="285d4c89-6ed5-4dac-8cef-5b61ac8aadad"> 152 <div class="sidebar"> 153 154 <button class="toggle sidebar__close close"></button> 155 <div class="sidebar__content"> 156 157 <ul class="sidebar__nav"> 158 <li class="sidebar__nav-item"> 159 <a href="/" class="sidebar__nav-link">Home</a> 160 </li> 161 <li class="sidebar__nav-item"> 162 <a href="/team" class="sidebar__nav-link">Meet the Team</a> 163 </li> 164 <li class="sidebar__nav-item"> 165 <a href="/properties" class="sidebar__nav-link">Portfolio</a> 166 </li> 167 <li class="sidebar__nav-item"> 168 <a href="/home-search/listings?search_type=envelope&south=37.77581722264004&west=-122.2829185307129&north=37.87805176810842&east=-122.13563306928712&property_type%5B%5D=Co-op&property_type%5B%5D=Condo&property_type%5B%5D=Commercial&property_type%5B%5D=Land&property_type%5B%5D=Multi-family&property_type%5B%5D=Manufactured&property_type%5B%5D=Residential&property_type%5B%5D=Townhouse&property_type%5B%5D=Other&property_type%5B%5D=Co-op&property_type%5B%5D=Condo&property_type%5B%5D=Commercial&property_type%5B%5D=Land&property_type%5B%5D=Multi-family&property_type%5B%5D=Manufactured&property_type%5B%5D=Residential&property_type%5B%5D=Townhouse&property_type%5B%5D=Other&status%5B%5D=Active&status_days%5BActive%5D=36500&status_days%5BUnder+Contract%5D=36500&status_days%5BPending%5D=36500&status_days%5BSold%5D=180&mailer_schedule=instant&order=status_modified_at%3Adesc&page=1" class="sidebar__nav-link">Home Search</a> 169 </li> 170 <li class="sidebar__nav-item"> 171 <a href="/home-valuation" class="sidebar__nav-link">Home Valuation</a> 172 </li> 173 <li class="sidebar__nav-item"> 174 <a href="/neighborhoods" class="sidebar__nav-link">Neighborhoods</a> 175 </li> 176 <li class="sidebar__nav-item"> 177 <a href="/testimonials" class="sidebar__nav-link">Testimonials</a> 178 </li> 179 <li class="sidebar__nav-item"> 180 <a href="/concierge" class="sidebar__nav-link">Compass Concierge</a> 181 </li> 182 <li class="sidebar__nav-item"> 183 <a href="/bridge-loan" class="sidebar__nav-link">Compass Bridge Loan</a> 184 </li> 185 <li class="sidebar__nav-item"> 186 <a href="/renovations" class="sidebar__nav-link">Renovations</a> 187 </li> 188 <li class="sidebar__nav-item"> 189 <a href="/open-house" class="sidebar__nav-link">Weekly Open House / Broker Tour Update</a> 190 </li> 191 <li class="sidebar__nav-item"> 192 <a href="/market-update" class="sidebar__nav-link">Market Update</a> 193 </li> 194 <li class="sidebar__nav-item"> 195 <a href="/blog" class="sidebar__nav-link">Blog</a> 196 </li> 197 <li class="sidebar__nav-item"> 198 <button data-type="CONTACT_US" class="sidebar__nav-link">Contact Us</button> 199 </li> 200 <li class="sidebar__nav-item"> 201 <a href="/home-search/account" class="sidebar__nav-link">My Search Portal</a> 202 </li> 203 </ul> 204 </div> 205</div> 206 </div> 207 <div id="global-mobile-contact" class="mobile-contact-wrapper" data-el-id="ca33406a-b24a-4100-b315-87fd53d5adc2"> 208 <div class="mobile-contact dark"> 209 <div class="buttons-holder"> 210 <a href="/cdn-cgi/l/email-protection#30515e544255471e4059445142425570535f5d405143431e535f5d"> 211 <i class="lp-i lp-i--envelope"></i> 212 </a> 213 <a href="tel:4153429950"> 214 <i class="lp-i lp-i--phone"></i> 215 </a> 216 </div> 217</div> 218 219 </div> 220 <section class="image-section is-font-color-light is-background-color-light" id="section-eda32161-87c2-43c6-ac2a-1503a8905a4c" data-el-id="e6c6941b-dd32-4d6b-b4aa-56593f2d58bb"> 221 <div class="redesign custom-intro"> 222 <div class="container"> 223 <h1 class="custom-intro__title">Meet the Team</h1> 224 225 </div> 226</div> 227 228</section> 229<section id="section-109ad32a-04ff-4f2e-9203-cb2104dad1b9" class="solid-section is-font-color-dark is-background-color-light" data-el-id="4fd88bff-4528-4094-a238-bc747e38f1f6">
vendor: 109 bytes, lines 229-230
229 230<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
230<script type="text/x-handlebars-template" class="gridItem pagination-script"><div class="team-member__container"> 231 <a class="team-member__link" href="/agent/{{slug}}"> 232 <div class="team-member__image-wrap"> 233 <div class="team-member__image"> 234 {{{mediaImage avatar alt=(concat firstName " " lastName) sizes="(max-width: 768px) 100vw, (max-width: 1000px) 50vw, 33vw"}}} 235 </div> 236 <div class="team-member__hover"> 237 <span class="btn btn--primary-dark team-member__btn button-style-1">LEARN MORE</span> 238 </div> 239 </div> 240 <div class="team-member__info"> 241 <span class="team-member__name">{{firstName}} {{lastName}}</span> 242 <span class="team-member__role">{{position}}</span> 243 </div> 244 </a> 245</div> 246</script>
246<div class="team-grid redesign"> 247 <div class="lp-container"> 248 249 <div class="js-sync-flag" style="display: none;"></div> 250 251 252 253 254 <div class="team-grid__wrapper two-col data-container"> 255 <div class="team-member__container"> 256 <a class="team-member__link" href="/agent/andrew-pitarre"> 257 <div class="team-member__image-wrap"> 258 <div class="team-member__image"> 259 <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/t1xoczsorigqmjvmyecu" 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/t1xoczsorigqmjvmyecu 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/t1xoczsorigqmjvmyecu 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/t1xoczsorigqmjvmyecu 1600w" sizes="(max-width: 768px) 100vw, (max-width: 1000px) 50vw, 33vw" alt="ANDREW PITARRE" class="portrait" loading="lazy"> 260 </div> 261 <div class="team-member__hover"> 262 <span class="btn btn--primary-dark team-member__btn button-style-1">LEARN MORE</span> 263 </div> 264 </div> 265 <div class="team-member__info"> 266 <span class="team-member__name">ANDREW PITARRE</span> 267 <span class="team-member__role">Founder</span> 268 </div> 269 </a> 270 </div> 271 <div class="team-member__container"> 272 <a class="team-member__link" href="/agent/britnee-underwood"> 273 <div class="team-member__image-wrap"> 274 <div class="team-member__image"> 275 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/mpydxixha0rogdx34yb8" alt="BRITNEE UNDERWOOD" class="portrait" loading="lazy"> 276 </div> 277 <div class="team-member__hover"> 278 <span class="btn btn--primary-dark team-member__btn button-style-1">LEARN MORE</span> 279 </div> 280 </div> 281 <div class="team-member__info"> 282 <span class="team-member__name">BRITNEE UNDERWOOD</span> 283 <span class="team-member__role">Realtor®</span> 284 </div> 285 </a> 286 </div> 287 <div class="team-member__container"> 288 <a class="team-member__link" href="/agent/ali-blesse"> 289 <div class="team-member__image-wrap"> 290 <div class="team-member__image"> 291 <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/vpaezdzbpkt7jd4zoxob" 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/vpaezdzbpkt7jd4zoxob 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/vpaezdzbpkt7jd4zoxob 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/vpaezdzbpkt7jd4zoxob 1300w" sizes="(max-width: 768px) 100vw, (max-width: 1000px) 50vw, 33vw" alt="ALI BLESSE" class="portrait" loading="lazy"> 292 </div> 293 <div class="team-member__hover"> 294 <span class="btn btn--primary-dark team-member__btn button-style-1">LEARN MORE</span> 295 </div> 296 </div> 297 <div class="team-member__info"> 298 <span class="team-member__name">ALI BLESSE</span> 299 <span class="team-member__role">Realtor®</span> 300 </div> 301 </a> 302 </div> 303 <div class="team-member__container"> 304 <a class="team-member__link" href="/agent/maricela-yee"> 305 <div class="team-member__image-wrap"> 306 <div class="team-member__image"> 307 <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/ejy1mnwehkuffntddl9a" 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/ejy1mnwehkuffntddl9a 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/ejy1mnwehkuffntddl9a 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/ejy1mnwehkuffntddl9a 1300w" sizes="(max-width: 768px) 100vw, (max-width: 1000px) 50vw, 33vw" alt="MARICELA YEE" class="portrait" loading="lazy"> 308 </div> 309 <div class="team-member__hover">
310 <span class="btn btn--primary-dark team-member__btn button-style-1">LEARN MORE</span> 311 </div> 312 </div> 313 <div class="team-member__info"> 314 <span class="team-member__name">MARICELA YEE</span> 315 <span class="team-member__role">Realtor®</span> 316 </div> 317 </a> 318 </div> 319 <div class="team-member__container"> 320 <a class="team-member__link" href="/agent/nicole-pitarre"> 321 <div class="team-member__image-wrap"> 322 <div class="team-member__image"> 323 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/mgtwwmchztfwkejwrbms" alt="Nicole Pitarre" class="portrait" loading="lazy"> 324 </div> 325 <div class="team-member__hover"> 326 <span class="btn btn--primary-dark team-member__btn button-style-1">LEARN MORE</span> 327 </div> 328 </div> 329 <div class="team-member__info"> 330 <span class="team-member__name">Nicole Pitarre</span> 331 <span class="team-member__role">Lead Design / Brand Manager</span> 332 </div> 333 </a> 334 </div> 335 </div> 336 <div class="lp-pagination pagination-container pagination-style-1"></div> 337 338 339 <div class="empty-message js-empty-message"> 340 <h3 class="header2 empty-title">No result found</h3> 341 </div> 342 </div> 343</div> 344</section> 345<section class="image-section is-font-color-light is-background-color-light" id="section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7" data-el-id="3194d39b-ac2d-42a7-9973-4b279eaa51e6"> 346
346<script> 347 (function(){ 348 const sectionId = 'section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7' 349 const section = document.querySelector(`#${sectionId}`); 350 var sectionBg = window.getComputedStyle(section, null).getPropertyValue('background-image'); 351 352 if('false' === 'true') { 353 section.classList.add('parallax-enabled'); 354 section.style.setProperty('--sectionBackground', sectionBg); 355 section.style.setProperty('background', 'none'); 356 } 357 })() 358</script>
358 359<div class="redesign featured-testimonials "> 360 <div class="container"> 361 <div class="featured-testimonials__left"> 362 <h2 class="serif">Testimonials</h2> 363 364 <ul class="slick-links-nav"> 365 <li><span class="link feature prev hyperlink-style-2">previous</span></li> 366 <li><span class="separator hyperlink-style-2"></span></li> 367 <li><span class="link feature next hyperlink-style-2">next</span></li> 368 </ul> 369 </div> 370 <div class="featured-testimonials__right"> 371 <ul class="featured-testimonials__slider js-slider" data-autoscroll=false data-autoscroll-interval=6> 372 <li> 373 <blockquote>Britnee was an absolute joy to work with and I would recommend her to anyone looking to buy or sell their home. She was extremely reliable and responsive throughout our search for our first home in Oakland.</blockquote> 374 — <cite>BUYER</cite> 375 </li> 376 <li> 377 <blockquote>Ali is very helpful and a wonderful support in this crazy market! She was very responsive to me and organized to get my house prepped and ready for sale. She also showed me a ton of properties in my process of buying a house. She's willing to go the extra mile with a friendly point of view.</blockquote> 378 — <cite>SELLER</cite> 379 </li> 380 <li> 381 <blockquote>Very caring, personable, and professional. Helped us to buy out a long-term tenant via a negotiator, and remodel our rental home extremely tastefully at an affordable price. Then he was able to attract, attract, attract buyers to our rental home. Got top dollar smoothly and comfortably. He is the G.O.A.T. real estate agent. The "Tom Brady" of real estate.</blockquote> 382 — <cite>SELLER</cite> 383 </li> 384 </ul> 385 <a 386 href="/testimonials" 387 388 class="btn btn--primary-dark button-style-2" 389 390 391 392 393 394 > 395 VIEW ALL 396 </a> 397 </div> 398 </div> 399</div> 400 401</section> 402<section id="section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c" class="solid-section is-font-color-dark is-background-color-light" data-el-id="21c5a117-61cb-4f43-8635-2da86e3ae7dd"> 403 404<div class="boxed-text lp-vertical-paddings redesign"> 405 <div class="lp-container"> 406 407 <div class="boxed-text__description"><p style="text-align: center;"><span style="font-weight: 400;"><img src="https://media-production.lp-cdn.com/media/21c06241-4222-48a2-b42c-e2911defa4cb" alt width="581" height="327"></span></p> 408<p style="text-align: center;"><span style="font-weight: 400;">We take it personally, realizing that the real estate transaction represents something different for each client and that such a large transaction usually leads to a transition in lifestyle for many. Whether selling the long time residence leading into retirement, developing / enhancing the real estate to highest and best use upon sale, completing a 1031 exchange to grow a real estate portfolio, purchasing that very first home, or right sizing the home to meet current your lifestyle needs, we are there to draw upon our extensive experience to help that transition be the best it can possibly be. In addition to unwavering sage advice, when needed we have assembled a dedicated Construction Team and constellation of Consultants and Agents to help each client through their transaction / transition and maximize the potential of their real estate investments.</span></p> 409<p><br style="font-weight: 400;"><br style="font-weight: 400;"></p></div> 410 </div> 411</div> 412</section> 413<section class="image-section is-font-color-light is-background-color-light" id="section-64de7b13-9930-4519-a89c-b80f37d851fa" data-el-id="e7db0aa2-a33d-4b1c-bd9f-41337c1c9384"> 414 <div class="lp-vertical-paddings redesign"> 415 <div class="lp-container cta-block cta-block--Center-aligned"> 416 <div class="text-block"> 417 <h2 class="lp-h2"><p>Find Your Dream Home</p></h2> 418 </div> 419 420 <a 421 href="/home-search/listings?search_type=envelope&south=37.77581722264004&west=-122.2829185307129&north=37.87805176810842&east=-122.13563306928712&property_type%5B%5D=Co-op&property_type%5B%5D=Condo&property_type%5B%5D=Commercial&property_type%5B%5D=Land&property_type%5B%5D=Multi-family&property_type%5B%5D=Manufactured&property_type%5B%5D=Residential&property_type%5B%5D=Townhouse&property_type%5B%5D=Other&property_type%5B%5D=Co-op&property_type%5B%5D=Condo&property_type%5B%5D=Commercial&property_type%5B%5D=Land&property_type%5B%5D=Multi-family&property_type%5B%5D=Manufactured&property_type%5B%5D=Residential&property_type%5B%5D=Townhouse&property_type%5B%5D=Other&status%5B%5D=Active&status_days%5BActive%5D=36500&status_days%5BUnder+Contract%5D=36500&status_days%5BPending%5D=36500&status_days%5BSold%5D=180&mailer_schedule=instant&order=status_modified_at%3Adesc&page=1" 422 423 class="lp-btn lp-btn--dark lp-btn--big lp-btn--outline lp-btn--mob-full-width button-style-2" 424 425 426 427 428 429 > 430 Browse Homes 431 </a> 432 </div> 433</div> 434</section> 435<section id="section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a" class="solid-section is-font-color-dark is-background-color-light" data-el-id="e6b1ae9f-5b8d-4ac5-a23f-bfb55ef91c3c"> 436
436<script> 437 (function(){ 438 const sectionId = 'section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a' 439 const section = document.querySelector(`#${sectionId}`); 440 var sectionBg = window.getComputedStyle(section, null).getPropertyValue('background-image'); 441 442 if('false' === 'true') { 443 section.classList.add('parallax-enabled'); 444 section.style.setProperty('--sectionBackground', sectionBg); 445 section.style.setProperty('background', 'none'); 446 } 447 })() 448</script>
448 449<div class="redesign work-with-us "> 450 <div class="container"> 451 <h2 class="serif">Work With Us</h2> 452 <div class="description">We pride ourselves in providing personalized solutions that bring our clients closer to their dream properties and enhance their long-term wealth. Contact us today to find out how we can be of assistance to you!</div> 453 <div class="btn-container"> 454 <a 455 role="button" 456 data-type="CONTACT_US" 457 class="btn btn--primary-light button-style-1" 458 459 460 461 462 463 > 464 Contact Us 465 </a> 466 </div> 467 </div> 468</div> 469</section> 470<section id="section-91779466-3754-443e-816b-903fe9150afb" class="solid-section is-font-color-dark is-background-color-light" data-el-id="09e98f83-51e3-4837-80a0-019e211aba4b"> 471<div class="redesign featured-properties-section " data-auto-scroll=false data-autoplay-speed=3000> 472 <div class="container"> 473 <div class="featured-properties-header"> 474 <h2 class="serif">Notable Transactions</h2> 475 476 <ul class="slick-links-nav"> 477 <li><span class="link link--white feature prev">previous</span></li> 478 <li><span class="link link--white feature next">next</span> <span class="spacer"></span></li> 479 </ul> 480 </div> 481 <ul class="featured-properties carousel-container"> 482 <li class="featured-properties__item-cover"> 483 <div class="featured-properties__item feature"> 484 <a class="featured-properties__item-info" href="/properties/345-51st-st-oakland-ca-94609-41025648"> 485 <div class="featured-properties__img"> 486 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/8853c562-273b-4c58-a71b-9ef5b2c3920c/41025648/-1880079800324666080.jpg" alt="" loading="lazy"> 487 </div> 488 <span class="featured-properties__label">Inactive</span> 489 490 <div class="featured-properties__text"> 491 <h4 class="serif">345 51st St</h4> 492 <p> 493 345 51st St, Oakland, CA 94609 494 </p> 495 496 <p> 497 498 0.32 Acres 499 </p> 500 501 <h5> 502 $2,695,000 503 </h5> 504 </div> 505 </a> 506 <div class="featured-properties__hover"> 507 <a href="/properties/345-51st-st-oakland-ca-94609-41025648"></a> 508 <div class="featured-properties__buttons"> 509 <a href="/properties/345-51st-st-oakland-ca-94609-41025648" class="btn btn--primary-dark button-style-1">VIEW PROPERTY</a> 510 </div> 511 </div> 512 </div> 513 </li> 514 <li class="featured-properties__item-cover"> 515 <div class="featured-properties__item feature"> 516 <a class="featured-properties__item-info" href="/properties/4523-howe-st-oakland-ca-94611-40981906"> 517 <div class="featured-properties__img"> 518 <img src="https://dq1niho2427i9.cloudfront.net/8853c562-273b-4c58-a71b-9ef5b2c3920c/-2061294815.jpg" alt="" loading="lazy"> 519 </div> 520 <span class="featured-properties__label">Inactive</span> 521 522 <div class="featured-properties__text"> 523 <h4 class="serif">4523 Howe St</h4> 524 <p> 525 4523 Howe St, Oakland, CA 94611 526 </p> 527 528 <p> 529 4 BD | 530 3.5 BA 531 | 3,226 Sq.Ft. 532 </p> 533 534 <h5> 535 $2,675,000 536 </h5> 537 </div> 538 </a> 539 <div class="featured-properties__hover"> 540 <a href="/properties/4523-howe-st-oakland-ca-94611-40981906"></a> 541 <div class="featured-properties__buttons"> 542 <a href="/properties/4523-howe-st-oakland-ca-94611-40981906" class="btn btn--primary-dark button-style-1">VIEW PROPERTY</a> 543 </div> 544 </div> 545 </div> 546 </li> 547 <li class="featured-properties__item-cover"> 548 <div class="featured-properties__item feature"> 549 <a class="featured-properties__item-info" href="/properties/1720-carleton-street-berkeley-ca-94703-41065984"> 550 <div class="featured-properties__img"> 551 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/8853c562-273b-4c58-a71b-9ef5b2c3920c/41065984/6756626086972888150.jpg" alt="" loading="lazy"> 552 </div> 553 <span class="featured-properties__label">Sold</span> 554 555 <div class="featured-properties__text"> 556 <h4 class="serif">1720 Carleton Street</h4> 557 <p> 558 1720 Carleton Street, Berkeley, CA 94703 559 </p> 560 561 <p> 562 4 BD | 563 3 BA 564 | 2,343 Sq.Ft. 565 </p> 566 567 <h5> 568 $2,400,000 569 </h5> 570 </div> 571 </a> 572 <div class="featured-properties__hover">
573 <a href="/properties/1720-carleton-street-berkeley-ca-94703-41065984"></a> 574 <div class="featured-properties__buttons"> 575 <a href="/properties/1720-carleton-street-berkeley-ca-94703-41065984" class="btn btn--primary-dark button-style-1">VIEW PROPERTY</a> 576 </div> 577 </div> 578 </div> 579 </li> 580 <li class="featured-properties__item-cover"> 581 <div class="featured-properties__item feature"> 582 <a class="featured-properties__item-info" href="/properties/8210-skyline-blvd-oakland-ca-94611-41127304"> 583 <div class="featured-properties__img"> 584 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/8853c562-273b-4c58-a71b-9ef5b2c3920c/41127304/4545268907407013756.jpg" alt="" loading="lazy"> 585 </div> 586 <span class="featured-properties__label">Sold</span> 587 588 <div class="featured-properties__text"> 589 <h4 class="serif">8210 Skyline Blvd</h4> 590 <p> 591 8210 Skyline Blvd, Oakland, CA 94611 592 </p> 593 594 <p> 595 4 BD | 596 3 BA 597 | 2,690 Sq.Ft. 598 </p> 599 600 <h5> 601 $2,305,000 602 </h5> 603 </div> 604 </a> 605 <div class="featured-properties__hover"> 606 <a href="/properties/8210-skyline-blvd-oakland-ca-94611-41127304"></a> 607 <div class="featured-properties__buttons"> 608 <a href="/properties/8210-skyline-blvd-oakland-ca-94611-41127304" class="btn btn--primary-dark button-style-1">VIEW PROPERTY</a> 609 </div> 610 </div> 611 </div> 612 </li> 613 </ul> 614 <div class="featured-properties-button-holder"> <a 615 href="/properties" 616 617 class="btn btn--primary-light button-style-1" 618 619 620 621 622 623 > 624 VIEW ALL 625 </a> 626</div> 627 </div> 628</div> 629 630</section> 631 632 <div id="modals" class="modals"></div> 633 <footer id="global-footer" class="is-font-color-dark is-background-color-light" data-el-id="874a9373-949d-4275-b72f-04c2a6ec373b"> 634 <div class="footer redesign no_newsletter "> 635 <div class="container"> 636 <h3>East Bay Home Transitions</h3> 637 <div class="info-wrap"> 638 <div class="info-wrap-contact agent_box"> 639 <div class="info-wrap-contact_zone type_user"> 640 <h4 class="serif">GET IN TOUCH</h4> 641 <div class="info-wrap-contact_cell"> 642 <i> 643 <svg width="30" height="19" viewBox="0 0 30 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 644 <path d="M2 0C0.903517 0 0 0.903517 0 2V16.6667C0 17.7631 0.903517 18.6667 2 18.6667H28C29.0965 18.6667 30 17.7631 30 16.6667V2C30 0.903517 29.0965 0 28 0H2ZM2.4375 1.33333H27.5625L15.6458 11.4896C15.3389 11.7512 14.6612 11.7512 14.3542 11.4896L2.4375 1.33333ZM1.33333 2.13542L10.1979 9.6979L1.33333 16.5729V2.13542ZM28.6667 2.13542V16.5729L19.8021 9.6979L28.6667 2.13542ZM11.2396 10.5833L13.4896 12.5C14.3543 13.2369 15.6457 13.2369 16.5104 12.5L18.7604 10.5833L27.4687 17.3333H2.53125L11.2396 10.5833Z" fill="#1A1A1A" /> 645 </svg> 646 </i> 647 <p class="contact_title">Email</p> 648 <a href="/cdn-cgi/l/email-protection#cfaea1abbdaab8e1bfa6bbaebdbdaa8faca0a2bfaebcbce1aca0a2" class="lp-link info-wrap-contact_link grey-text hyperlink-style-1"><span class="__cf_email__" data-cfemail="d5b4bbb1a7b0a2fba5bca1b4a7a7b095b6bab8a5b4a6a6fbb6bab8">[email protected]</span></a> 649 </div> 650 <div class="info-wrap-contact_cell"> 651 <i><svg width="30" height="25" viewBox="0 0 30 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 652 <path fill-rule="evenodd" clip-rule="evenodd" d="M10.7964 8.1207H19.2036V8.7279C19.2036 10.8195 20.9082 12.5259 23.001 12.5259H24.741L25.2852 20.7051C25.3776 22.1235 24.2868 23.2719 22.8822 23.2719H7.0032C5.5944 23.2719 4.5084 22.1085 4.6002 20.7039C4.782 17.9895 4.9152 15.2313 5.154 12.5265H6.9996C9.0918 12.5265 10.797 10.8207 10.797 8.7285V8.1207H10.7964ZM11.46 16.5807C11.46 14.6565 13.0188 13.0977 14.943 13.0977C16.8666 13.0977 18.4254 14.6571 18.4254 16.5807C18.4254 18.5055 16.8678 20.0631 14.943 20.0631C13.02 20.0637 11.46 18.5043 11.46 16.5807ZM14.943 12.0381C12.4344 12.0381 10.4004 14.0721 10.4004 16.5807C10.4004 19.0887 12.435 21.1233 14.943 21.1233C17.4486 21.1233 19.485 19.0869 19.485 16.5807C19.485 14.0727 17.451 12.0381 14.943 12.0381ZM9.0846 4.8363C8.22 4.8363 7.512 5.5443 7.512 6.4089V8.7285C7.512 9.0093 7.2804 9.2415 6.999 9.2415H1.5726C1.2906 9.2415 1.0596 9.0111 1.0596 8.7285V6.9285C1.0596 6.4797 1.1628 6.0945 1.3902 5.7069C1.896 4.8465 2.7294 4.1013 3.795 3.4749C9.279 0.2517 20.7192 0.2523 26.2044 3.4749C27.2706 4.1013 28.104 4.8465 28.6098 5.7069C28.8354 6.0921 28.9398 6.48
65215 28.9398 6.9285V8.7285C28.9398 9.0111 28.71 9.2415 28.4268 9.2415H23.0004C22.719 9.2415 22.4874 9.0093 22.4874 8.7285V6.4089C22.4874 5.5425 21.7806 4.8363 20.9148 4.8363H9.0846ZM8.571 6.4089C8.571 6.1263 8.8026 5.8965 9.0846 5.8965H20.9154C21.1968 5.8965 21.429 6.1275 21.429 6.4089V8.7285C21.429 9.5943 22.1352 10.3017 23.001 10.3017H28.4274C29.292 10.3017 30 9.5931 30 8.7285V6.9285C30 6.2835 29.8464 5.7291 29.5206 5.1729C28.9188 4.1493 27.9564 3.2799 26.7384 2.5641C20.9214 -0.8547 9.0798 -0.8547 3.2622 2.5641C2.0436 3.2799 1.0812 4.1487 0.48 5.1729C0.153 5.7291 0 6.2835 0 6.9279V8.7279C0 9.5925 0.7092 10.3011 1.5726 10.3011H6.999C7.8648 10.3011 8.571 9.5937 8.571 8.7279V6.4089ZM9.7368 7.5915V8.7285C9.7368 10.2387 8.5092 11.4669 6.999 11.4669H4.6686C4.3914 11.4669 4.164 11.6799 4.1412 11.9511C3.8892 14.8347 3.7386 17.7435 3.5448 20.6331C3.4116 22.6425 4.989 24.3315 7.0032 24.3315H22.8822C24.882 24.3315 26.475 22.6575 26.3406 20.6343L25.7622 11.9607C25.7436 11.6811 25.5102 11.4675 25.2342 11.4675L23.001 11.4663C21.4902 11.4663 20.2632 10.2375 20.2632 8.7279V7.5909C20.2632 7.2981 20.0262 7.0611 19.7334 7.0611H10.2666C9.9738 7.0611 9.7368 7.2987 9.7368 7.5915Z" fill="#1A1A1A" /> 653 </svg></i> 654 <p class="contact_title">Phone Number</p> 655 <a href="tel:4153429950" class="lp-link info-wrap-contact_link grey-text hyperlink-style-1">(415) 342-9950</a> 656 </div> 657 </div> 658 <div class="info-wrap-contact_zone"> 659 <div class="info-wrap-contact_cell"> 660 <i> 661 <svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg"> 662 <path d="M29.9821 6.49489C29.7931 6.35756 29.679 6.32046 29.4572 6.39228L20.298 9.41368L16.1952 8.03558L15.8172 9.41525L19.7644 10.7038V28.1462L9.89831 25.7069V22.1034H8.71438V25.7515L1.21616 28.2532V15.3945H0.0322266V29.2729C0.0322266 29.5077 0.130098 29.7279 0.321106 29.8645C0.445418 29.9541 0.585911 29.9999 0.735086 29.9999C0.814804 29.9999 0.890971 29.9868 0.967926 29.96L9.48433 27.029L20.1792 29.7887C20.3224 29.8254 20.4751 29.8171 20.6152 29.7654L29.8104 26.2235C30.0942 26.1177 30.0251 25.8466 30.0251 25.5431V7.08291C30.0251 6.85086 30.17 6.63144 29.9821 6.49489ZM28.8412 25.0388L20.9483 28.0361V10.7065L28.8412 8.08649V25.0388Z" fill="#1A1A1A" /> 663 <path d="M6.57515 19.1142C6.6671 19.422 6.95006 19.6323 7.2713 19.6323C7.59215 19.6323 7.87511 19.422 7.96746 19.1142C8.67742 16.7514 10.0393 15.2447 11.3559 13.788C12.9944 11.9747 14.5422 10.2615 14.5422 7.2717C14.5422 3.39788 11.1451 0 7.2713 0C3.39827 0 0 3.39748 0 7.2717C0 10.2615 1.54819 11.9747 3.18674 13.788C4.50328 15.2447 5.86479 16.7514 6.57515 19.1142ZM7.2713 1.45426C10.316 1.45426 13.0883 4.22663 13.0883 7.2717C13.0883 9.70191 11.7852 11.1435 10.2769 12.8121C9.2461 13.9534 8.10992 15.2096 7.2713 16.9199C6.43229 15.2096 5.29651 13.953 4.2657 12.8121C2.75698 11.1432 1.45426 9.70191 1.45426 7.2717C1.45426 4.22663 4.22663 1.45426 7.2713 1.45426Z" fill="#1A1A1A" /> 664 <path d="M7.26193 10.1616C8.8705 10.1616 10.1795 8.86084 10.1795 7.26175C10.1795 5.66305 8.87089 4.3623 7.26193 4.3623C5.65297 4.3623 4.34473 5.66305 4.34473 7.26175C4.34512 8.86084 5.65336 10.1616 7.26193 10.1616ZM7.26193 5.81657C8.06898 5.81657 8.72527 6.46536 8.72527 7.26175C8.72527 8.05932 8.06898 8.70733 7.26193 8.70733C6.45528 8.70733 5.79899 8.05893 5.79899 7.26175C5.79899 6.46536 6.45528 5.81657 7.26193 5.81657Z" fill="#1A1A1A" /> 665 </svg> 666 </i> 667 <p class="info-wrap-contact_title">Address</p> 668 <p class="info-wrap-contact_link grey-text"><p>1900 Mountain Blvd<br />Oakland, CA, 94611</p></p> 669 </div> 670 </div> 671 </div> 672 </div> 673 <div class="text_footer first_text_footer"> 674 <div class="images_box"> 675 <div class="img_size"> 676 <img src="https://media-production.lp-cdn.com/media/e0551e3b-ebd4-452b-8623-bebd3e7c336a" alt="Footer Image"> 677 </div> 678 </div> 679 <div class="luxury-text"> 680 <p style="font-size: 14px;">Andrew Pitarre | CA DRE# 01867911</p> 681<p> </p> 682<p style="font-size: 12px;">East Bay Home Transitions is a team of real estate agents licensed by the state of California affiliated with Compass. <a class="link" style="font-weight: 400;" href="http://compass.com" target="_blank" rel="noopener">Compass</a> is a licensed real estate broker licensed by the state of California and abides by equal housing opportunity laws. All material presented herein
682is 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.<br><img style="margin-top: 20px; width: 100px; height: auto;" src="https://media-production.lp-cdn.com/media/17e255b0-0bb8-4e44-ba24-7ee57e64e284"></p> 683 </div> 684 </div> 685 <div class="text_footer second_text_footer"> 686 <div class="text_content_wrap"> 687 <div> 688 <div> </div> 689<style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style> 690 </div> 691 </div> 692 </div> 693 <div class="info-privacy"> 694 <div class="form-row info-privacy__row"> 695 696 <div class="form-col form-col--powered powered-box"> 697 <div class="powered_zone"> 698 Powered by <a href="https://www.luxurypresence.com/" target="_blank" class="lp-link grey-text luxury-link underlined hyperlink-style-1">Luxury Presence</a> 699 </div> 700 </div> 701 702 <div class="form-col form-col--copyright"> 703 <div class="copy_zone"> 704 <span class="copy_words">Copyright ©</span> <span class="auto-year-update">2026</span> 705 | <a href="/terms-and-conditions" class="lp-link grey-text hyperlink-style-1">Privacy Policy</a> 706 707 </div> 708 </div> 709 710 <div class="form-col form-col--socials"> 711 <ul class="lp-socials social_icons-style-1 socials socials--grey socials_zone"> 712 713 <li> 714 <a 715 href="https://www.facebook.com/EBHomeTransitions" 716 class="lp-socials__link socials__item socials__link wow fadeInUp" 717 data-wow-delay="0s" 718 target="_blank" 719 aria-label="FACEBOOK" 720 > 721 <span class="lp-i lp-i--facebook" aria-hidden="true"></span> 722 </a> 723 </li> 724 <li> 725 <a 726 href="https://www.instagram.com/EB_hometransitions/" 727 class="lp-socials__link socials__item socials__link wow fadeInUp" 728 data-wow-delay="0.1s" 729 target="_blank" 730 aria-label="INSTAGRAM" 731 > 732 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 733 </a> 734 </li> 735 <li> 736 <a 737 href="https://www.twitter.com/EBhometransit10" 738 class="lp-socials__link socials__item socials__link wow fadeInUp" 739 data-wow-delay="0.2s" 740 target="_blank" 741 aria-label="TWITTER" 742 > 743 <span class="lp-i lp-i--twitter" aria-hidden="true"></span> 744 </a> 745 </li> 746 <li> 747 <a 748 href="https://www.compass.com/agents/andrew-pitarre/" 749 class="lp-socials__link socials__item socials__link wow fadeInUp" 750 data-wow-delay="0.3s" 751 target="_blank" 752 aria-label="BROKERAGE" 753 > 754 <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> 755 </a> 756 </li> 757 <li> 758 <a 759 href="https://www.linkedin.com/in/andrew-pitarre-a4099a69/" 760 class="lp-socials__link socials__item socials__link wow fadeInUp" 761 data-wow-delay="0.4s" 762 target="_blank" 763 aria-label="LINKEDIN" 764 >
765 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 766 </a> 767 </li> 768 <li> 769 <a 770 href="https://www.yelp.com/biz/andrew-pitarre-compass-oakland-2" 771 class="lp-socials__link socials__item socials__link wow fadeInUp" 772 data-wow-delay="0.5s" 773 target="_blank" 774 aria-label="YELP" 775 > 776 <span class="lp-i lp-i--yelp" aria-hidden="true"></span> 777 </a> 778 </li> 779 <li> 780 <a 781 href="https://www.realtor.com/realestateagents/568035527e54f701001eec69" 782 class="lp-socials__link socials__item socials__link wow fadeInUp" 783 data-wow-delay="0.6s" 784 target="_blank" 785 aria-label="PODCAST" 786 > 787 <span class="lp-i lp-i--podcast" aria-hidden="true"></span> 788 </a> 789 </li> 790 </ul> </div> 791 </div> 792 </div> 793 </div> 794</div> 795 796 </footer> 797 798 <div id="modal-global-contact-us" class="modal " 799 data-el-id="" 800 style="background-color: ;" 801 > 802 <div class="modal-content"> 803 <div class="contact-form redesign " style="background-image: url('https://media-production.lp-cdn.com/media/ba3e8444-3db7-4ff2-8398-eabc6e8f4f59')"> 804 <div class="container"> 805 <div class="section-details" style="--colorTxt: #ffffff"> 806 <h2>Contact Details</h2> 807 808 <div class="info-zone"> 809 810 <div class="info-zone_contact type_user"> 811 <h4 class="serif"> </h4> 812 <div class="info-zone_contact_cell"> 813 <i> 814 <svg width="30" height="25" viewBox="0 0 30 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 815 <path fill-rule="evenodd" clip-rule="evenodd" d="M10.7964 8.1207H19.2036V8.7279C19.2036 10.8195 20.9082 12.5259 23.001 12.5259H24.741L25.2852 20.7051C25.3776 22.1235 24.2868 23.2719 22.8822 23.2719H7.0032C5.5944 23.2719 4.5084 22.1085 4.6002 20.7039C4.782 17.9895 4.9152 15.2313 5.154 12.5265H6.9996C9.0918 12.5265 10.797 10.8207 10.797 8.7285V8.1207H10.7964ZM11.46 16.5807C11.46 14.6565 13.0188 13.0977 14.943 13.0977C16.8666 13.0977 18.4254 14.6571 18.4254 16.5807C18.4254 18.5055 16.8678 20.0631 14.943 20.0631C13.02 20.0637 11.46 18.5043 11.46 16.5807ZM14.943 12.0381C12.4344 12.0381 10.4004 14.0721 10.4004 16.5807C10.4004 19.0887 12.435 21.1233 14.943 21.1233C17.4486 21.1233 19.485 19.0869 19.485 16.5807C19.485 14.0727 17.451 12.0381 14.943 12.0381ZM9.0846 4.8363C8.22 4.8363 7.512 5.5443 7.512 6.4089V8.7285C7.512 9.0093 7.2804 9.2415 6.999 9.2415H1.5726C1.2906 9.2415 1.0596 9.0111 1.0596 8.7285V6.9285C1.0596 6.4797 1.1628 6.0945 1.3902 5.7069C1.896 4.8465 2.7294 4.1013 3.795 3.4749C9.279 0.2517 20.7192 0.2523 26.2044 3.4749C27.2706 4.1013 28.104 4.8465 28.6098 5.7069C28.8354 6.0921 28.9398 6.4815 28.9398 6.9285V8.7285C28.9398 9.0111 28.71 9.2415 28.4268 9.2415H23.0004C22.719 9.2415 22.4874 9.0093 22.4874 8.7285V6.4089C22.4874 5.5425 21.7806 4.8363 20.9148 4.8363H9.0846ZM8.571 6.4089C8.571 6.1263 8.8026 5.8965 9.0846 5.8965H20.9154C21.1968 5.8965 21.429 6.1275 21.429 6.4089V8.7285C21.429 9.5943 22.1352 10.3017 23.001 10.3017H28.4274C29.292 10.3017 30 9.5931 30 8.7285V6.9285C30 6.2835 29.8464 5.7291 29.5206 5.1729C28.9188 4.1493 27.9564 3.2799 26.7384 2.5641C20.9214 -0.8547 9.0798 -0.8547 3.2622 2.5641C2.0436 3.2799 1.0812 4.1487 0.48 5.1729C0.153 5.7291 0 6.2835 0 6.9279V8.7279C0 9.5925 0.7092 10.3011 1.5726 10.3011H6.999C7.8648 10.3011 8.571 9.5937 8.571 8.7279V6.4089ZM9.7368 7.5915V8.7285C9.7368 10.2387 8.5092 11.4669 6.999 11.4669H4.6686C4.3914 11.4669 4.164 11.6799 4.1412 11.9511C3.8892 14.8347 3.7386 17.7435 3.5448 20.6331C3.4116 22.6425 4.989 24.3315 7.0032 24.3315H22.8822C24.882 24.3315 26.475 22.6575 26.3406 20.6343L25.7622 11.9607C25.7436 11.6811 25.5102 11.4675 25.2342 11.4675L23.001 11.4663C21.4902 11.4663 20.2632 10.2375 20.2632 8.7279V7.5909C20.2632 7.2981 20.0262 7.0611 19.7334 7.0611H10.2666C9.9738 7.0611 9.7368 7.2987 9.7368 7.5915Z" fill="#1A1A1A"/> 816 </svg> 817 </i> 818 <p class="contact_title">Phone</p> 819 <a href="tel:(415) 342-9950" class="lp-link info-zone_contact_link link hyperlink-style-2">(415) 342-9950</a> 820 </div> 821 <div class="info-zone_contact_cell"> 822 <i> 823 <svg width="30" height="19" viewBox="0 0 30 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 824 <path d="M2 0C0.903517 0 0 0.903517 0 2V16.6667C0 17.7631 0.903517 18.6667 2 18.6667H28C29.0965 18.6667 30 17.7631 30 16.6667V2C30 0.903517 29.0965 0 28 0H2ZM2.4375 1.33333H27.5625L15.6458 11.4896C15.3389 11.7512 14.6612 11.7512 14.3542 11.4896L2.4375 1.33333ZM1.33333 2.13542L10.1979 9.6979L1.33333 16.5729V2.13542ZM28.6667 2.13542V16.5729L19.8021 9.6979L28.6667 2.13542ZM11.2396 10.5833L13.4896 12.5C14.3543 13.2369 15.6457 13.2369 16.5104 12.5L18.7604 10.5833L27.4687 17.3333H2.53125L11.2396 10.5833Z" fill="#1A1A1A"/> 825 </svg> 826 </i> 827 <p class="contact_title">Email</p> 828 <a href="/cdn-cgi/l/email-protection#99f8f7fdebfceeb7e9f0edf8ebebfcd9faf6f4e9f8eaeab7faf6f4" class="lp-link info-zone_contact_link link hyperlink-style-2"><span class="__cf_email__" data-cfemail="71101f150314065f0118051003031431121e1c011002025f121e1c">[email protected]</span></a> 829 </div> 830 </div> 831 <div class="info-zone_contact"> 832 <div class="info-zone_contact_cell"> 833 <i> 834 <svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg"> 835 <path d="M29.9821 6.49489C29.7931 6.35756 29.679 6.32046 29.4572 6.39228L20.298 9.41368L16.1952 8.03558L15.8172 9.41525L19.7644 10.7038V28.1462L9.89831 25.7069V22.1034H8.71438V25.7515L1.21616 28.2532V15.3945H0.0322266V29.2729C0.0322266 29.5077 0.130098 29.7279 0.321106 29.8645C0.445418 29.9541 0.585911 29.9999 0.735086 29.9999C0.814804 29.9999 0.890971 29.9868 0.967926 29.96L9.48433 27.029L20.1792 29.7887C20.3224 29.8254 20.4751 29.8171 20.6152 29.7654L29.8104 26.2235C30.0942 26.1177 3
8350.0251 25.8466 30.0251 25.5431V7.08291C30.0251 6.85086 30.17 6.63144 29.9821 6.49489ZM28.8412 25.0388L20.9483 28.0361V10.7065L28.8412 8.08649V25.0388Z" fill="#1A1A1A"/> 836 <path d="M6.57515 19.1142C6.6671 19.422 6.95006 19.6323 7.2713 19.6323C7.59215 19.6323 7.87511 19.422 7.96746 19.1142C8.67742 16.7514 10.0393 15.2447 11.3559 13.788C12.9944 11.9747 14.5422 10.2615 14.5422 7.2717C14.5422 3.39788 11.1451 0 7.2713 0C3.39827 0 0 3.39748 0 7.2717C0 10.2615 1.54819 11.9747 3.18674 13.788C4.50328 15.2447 5.86479 16.7514 6.57515 19.1142ZM7.2713 1.45426C10.316 1.45426 13.0883 4.22663 13.0883 7.2717C13.0883 9.70191 11.7852 11.1435 10.2769 12.8121C9.2461 13.9534 8.10992 15.2096 7.2713 16.9199C6.43229 15.2096 5.29651 13.953 4.2657 12.8121C2.75698 11.1432 1.45426 9.70191 1.45426 7.2717C1.45426 4.22663 4.22663 1.45426 7.2713 1.45426Z" fill="#1A1A1A"/> 837 <path d="M7.26193 10.1616C8.8705 10.1616 10.1795 8.86084 10.1795 7.26175C10.1795 5.66305 8.87089 4.3623 7.26193 4.3623C5.65297 4.3623 4.34473 5.66305 4.34473 7.26175C4.34512 8.86084 5.65336 10.1616 7.26193 10.1616ZM7.26193 5.81657C8.06898 5.81657 8.72527 6.46536 8.72527 7.26175C8.72527 8.05932 8.06898 8.70733 7.26193 8.70733C6.45528 8.70733 5.79899 8.05893 5.79899 7.26175C5.79899 6.46536 6.45528 5.81657 7.26193 5.81657Z" fill="#1A1A1A"/> 838 </svg> 839 </i> 840 <p class="info-wrap-contact_title">Address</p> 841 <p class="info-zone_contact_link pre-line">1900 Mountain Blvd 842 Oakland, CA, 94611 843 844 Andrew Pitarre | CA DRE# 01867911</p> 845 </div> 846 </div> 847 <div class="info-zone_contact"> 848 <div class="info-zone_contact_cell"> 849 <p class="pre-line"><div></div><style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style></p> 850 </div> 851 </div> 852 <ul class="lp-socials social_icons-style-2 socials socials--grey socials_zone footer__contact-column"> 853 854 <li> 855 <a 856 href="https://www.facebook.com/EBHomeTransitions" 857 class="lp-socials__link socials__item wow fadeInUp socials__link" 858 data-wow-delay="0s" 859 target="_blank" 860 aria-label="FACEBOOK" 861 > 862 <span class="lp-i lp-i--facebook" aria-hidden="true"></span> 863 </a> 864 </li> 865 <li> 866 <a 867 href="https://www.instagram.com/EB_hometransitions/" 868 class="lp-socials__link socials__item wow fadeInUp socials__link" 869 data-wow-delay="0.1s" 870 target="_blank" 871 aria-label="INSTAGRAM" 872 > 873 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 874 </a> 875 </li> 876 <li> 877 <a 878 href="https://twitter.com/EBhometransit10" 879 class="lp-socials__link socials__item wow fadeInUp socials__link" 880 data-wow-delay="0.2s" 881 target="_blank" 882 aria-label="TWITTER" 883 >
884 <span class="lp-i lp-i--twitter" aria-hidden="true"></span> 885 </a> 886 </li> 887 <li> 888 <a 889 href="https://www.compass.com/agents/andrew-pitarre/" 890 class="lp-socials__link socials__item wow fadeInUp socials__link" 891 data-wow-delay="0.3s" 892 target="_blank" 893 aria-label="BROKERAGE" 894 > 895 <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> 896 </a> 897 </li> 898 <li> 899 <a 900 href="https://www.linkedin.com/in/andrew-pitarre-a4099a69/" 901 class="lp-socials__link socials__item wow fadeInUp socials__link" 902 data-wow-delay="0.4s" 903 target="_blank" 904 aria-label="LINKEDIN" 905 > 906 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 907 </a> 908 </li> 909 <li> 910 <a 911 href="https://www.yelp.com/biz/andrew-pitarre-compass-oakland-2" 912 class="lp-socials__link socials__item wow fadeInUp socials__link" 913 data-wow-delay="0.5s" 914 target="_blank" 915 aria-label="YELP" 916 > 917 <span class="lp-i lp-i--yelp" aria-hidden="true"></span> 918 </a> 919 </li> 920 <li> 921 <a 922 href="https://www.realtor.com/realestateagents/568035527e54f701001eec69" 923 class="lp-socials__link socials__item wow fadeInUp socials__link" 924 data-wow-delay="0.6s" 925 target="_blank" 926 aria-label="PODCAST" 927 > 928 <span class="lp-i lp-i--podcast" aria-hidden="true"></span> 929 </a> 930 </li> 931 </ul> </div> 932 </div> 933 <div class="section-message"> 934 <form data-type="contact-form"> 935 <h2>Submit a Message</h2> 936 <div class="h-pot"> 937 <label for="-middleName">Middle Name</label> 938 <input id="-middleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 939 </div> 940 941 942 <div class="lp-input-group"> 943 <label for="prod-name" class="lp-label">Name</label> 944 <input id="prod-name" name="name" value="" required="" class="lp-input lp-input--light"> 945 </div> 946 <div class="lp-input-group"> 947 <label for="prod-email" class="lp-label">Email</label> 948 <input id="prod-email" type="email" name="email" value="" required="" class="lp-input lp-input--light"> 949 </div> 950 <div class="lp-input-group"> 951 <label for="prod-phone" class="lp-label">Phone</label> 952 <input id="prod-phone" type="tel" name="phoneNumber" value="" required="" class="lp-in
952put lp-input--light"> 953 </div> 954 <div class="lp-input-group m16"> 955 <label for="prod-message" class="lp-label">Message</label> 956 <textarea id="prod-message" name="message" value="" required="" class="lp-input"></textarea> 957 </div> 958 959 <div class="lp-disclaimer"> <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label> 960 <label class='lp-tcr-content'> 961 <span class='lp-tcr-checkbox'> 962 <input 963 type='checkbox' 964 id='-termsAccepted' 965 name='termsAccepted' 966 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 967 oninput="this.setCustomValidity('')" 968 required 969 /></span> 970 <span class='lp-tcr-message'> 971 972 I agree to be contacted by 973 Andrew Pitarre 974 via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 975 You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. 976 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. 977 </span> 978 </label> 979 980 </div> 981 982 <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" /> 983 984 985 <button type="submit" class="submitButton lp-btn button-style-2"> 986 <span class="label-initial">Submit</span> 987 <span class="label-loading">Submitting</span> 988 <span class="label-success">Submitted</span> 989 <span class="submit-icon lp-i lp-i--circle-notch lp-i--spin"></span> 990 </button> 991 <p class="success-message success hide"> 992 Message sent successfully! 993 </p> 994 </form> 995 996 997 </div> 998 </div> 999 </div> 1000 1001 </div> 1002 <button class="close lp-close" type="button" aria-label="close modal"> 1003 <span class="lp-close-icon" aria-hidden="true"></span> 1004 </button> 1005 </div> 1006 <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;"> 1007 <style> 1008 #qualifying-questions-modal .custom-select-toggle { 1009 border: 1px solid #848484; 1010 border-radius: 8px; 1011 padding: 12px 16px; 1012 } 1013 1014 #qualifying-questions-modal .custom-select-toggle.is-placeholder { 1015 color: #848484; 1016 } 1017 1018 #qualifying-questions-modal #qualifying-questions-modal-phoneNumber::placeholder { 1019 color: #848484; 1020 opacity: 1; 1021 } 1022 1023 #qualifying-questions-modal .disclaimer-more { 1024 display: none; 1025 } 1026 1027 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-more { 1028 display: inline; 1029 } 1030 1031 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-ellipsis { 1032 display: none; 1033 } 1034 </style>
vendor: 119 bytes, lines 1034-1035
1034 1035 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
1035<script> 1036 function toggleDisclaimerQualifyingQuestionsModal() { 1037 const disclaimerText = document.getElementById('qualifying-questions-modal-disclaimer-text'); 1038 const toggleButton = document.getElementById('qualifying-questions-modal-toggle-disclaimer'); 1039 1040 if (disclaimerText.classList.contains('collapsed')) { 1041 disclaimerText.classList.remove('collapsed'); 1042 toggleButton.textContent = 'Read less'; 1043 toggleButton.setAttribute('aria-expanded', 'true'); 1044 } else { 1045 disclaimerText.classList.add('collapsed'); 1046 toggleButton.textContent = 'Read more'; 1047 toggleButton.setAttribute('aria-expanded', 'false'); 1048 } 1049 } 1050 </script>
1050 1051 <div style="max-width: 400px; width: 95%; margin: 0 auto;"> 1052 <div style="background: #fff; border: none; border-radius: 16px; color: black; box-shadow: none; position: relative;"> 1053 <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;"> 1054 <span aria-hidden="true">×</span> 1055 </button> 1056 <div style="padding: 40px 30px 32px;"> 1057 <div style="text-align: left; margin-bottom: 32px;"> 1058 <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;"> 1059 Thanks, please provide more information to help serve you 1060 </h2> 1061 </div> 1062 <form id="qualifying-questions-modal-form" data-type="contact-form"> 1063 <input type="hidden" name="source" value="PROFILE_UPDATE" /> 1064 <input type="hidden" name="email" value="" id="qualifying-questions-modal-email" /> 1065 <input type="hidden" name="triggerSource" id="qualifying-questions-modal-triggerSource" value="" /> 1066 <label for="qualifying-questions-modal-email" style="display:none;"> 1067 Email 1068 </label> 1069 <label for="qualifying-questions-modal-triggerSource" style="display:none;"> 1070 Trigger Source 1071 </label> 1072 1073 <div style="margin-bottom: 20px;"> 1074 <label for="qualifying-questions-modal-phoneNumber" style="display:none;"> 1075 Phone Number 1076 </label> 1077 <input 1078 type="tel" 1079 id="qualifying-questions-modal-phoneNumber" 1080 name="phoneNumber" 1081 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;" 1082 pattern="^\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}$" 1083 required 1084 placeholder="Phone" 1085 aria-label="Phone Number" 1086 inputmode="tel" 1087 autocomplete="tel" 1088 onfocus="this.style.borderColor='black';" 1089 onblur="this.style.borderColor='#848484';" 1090 /> 1091 </div> 1092 1093 <div style="margin-bottom: 20px;"> 1094 <label for="qualifying-questions-modal-interest" style="display:none;"> 1095 Interest 1096 </label> 1097 <select 1098 id="qualifying-questions-modal-interest" 1099 name="interest" 1100 required 1101 data-label="Interest" 1102 aria-label="Interest" 1103 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;" 1104 onfocus="this.style.borderColor='black'; this.style.color='black';" 1105 onblur="this.style.borderColor='#848484'; if(this.value === '') this.style.color='#848484'; else this.style.color='black';" 1106 > 1107 <option value="" style="background: #fff; color: #848484;" disabled selected>Interested in...</option> 1108 <option value="Selling & Buying" style="background: #fff; color: black;">Selling & Buying</option> 1109 <option value="Selling" style="background: #fff; color: black;">Selling</option> 1110 <option value="Buying" style="background: #fff; color: black;">Buying</option> 1111 <option value="Renting" style="background: #fff; color: black;">Renting</option> 1112 <option value="Other" style="background: #fff; color: black;">Other</option> 1113 </select> 1114 </div> 1115 1116 <div style="margin-bottom: 32px; font-size: 12px; line-height: 1.2;"> 1117 <label style='display: none;' for='qualifying-questions-modal-qualifying-questions-termsAccepted'>Opt In/Disclaimer Consent:</label> 1118 <label class='lp-tcr-content'>
1119 <span class='lp-tcr-checkbox'> 1120 <input 1121 type='checkbox' 1122 id='qualifying-questions-modal-qualifying-questions-termsAccepted' 1123 name='termsAccepted' 1124 aria-describedby='qualifying-questions-modal-disclaimer-text' 1125 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 1126 oninput="this.setCustomValidity('')" 1127 required 1128 /></span> 1129 <span class='lp-tcr-message'> 1130 <div id="qualifying-questions-modal-disclaimer-text" class="collapsed" style="color: #848484;"> 1131 1132 I agree to be contacted by 1133 <strong>Andrew Pitarre</strong> 1134 via call, email, and text <span class="disclaimer-more">for real estate services. 1135 To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 1136 You can also click the unsubscribe link in the emails. 1137 Message and data rates may apply. Message frequency may vary.</span> 1138 <span class="disclaimer-ellipsis">...</span> 1139 <a href='/terms-and-conditions' target='_blank' rel='noopener noreferrer' style='text-decoration: underline;'>Privacy Policy</a>. 1140 </div> 1141 <button 1142 id="qualifying-questions-modal-toggle-disclaimer" 1143 type="button" 1144 style="background: none; border: none; color: #848484; font-size: inherit; font-weight: bold; padding: 0; margin-top: 4px; cursor: pointer;" 1145 aria-expanded="false" 1146 onclick="toggleDisclaimerQualifyingQuestionsModal()" 1147 > 1148 Read more 1149 </button> 1150 </span> 1151 </label> 1152 </div> 1153 1154 <div> 1155 <button 1156 type="submit" 1157 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;" 1158 onmouseover="this.style.background='transparent'; this.style.color='black';" 1159 onmouseout="this.style.background='black'; this.style.color='white';" 1160 > 1161 Submit 1162 </button> 1163 </div> 1164 </form> 1165 </div> 1166 </div> 1167 </div> 1168 </div> 1169 1170
1170<script> 1171 (function() { 1172 var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy")); 1173 1174 if ("IntersectionObserver" in window && lazyVideos.length > 0) { 1175 var lazyVideoObserver = new IntersectionObserver(function(entries, observer) { 1176 entries.forEach(function(video) { 1177 if (video.isIntersecting) { 1178 for (var source in video.target.children) { 1179 var videoSource = video.target.children[source]; 1180 if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") { 1181 videoSource.src = videoSource.dataset.src; 1182 } 1183 } 1184 1185 video.target.load(); 1186 video.target.classList.remove("lazy"); 1187 lazyVideoObserver.unobserve(video.target); 1188 } 1189 }); 1190 }); 1191 1192 lazyVideos.forEach(function(lazyVideo) { 1193 lazyVideoObserver.observe(lazyVideo); 1194 }); 1195 } 1196 })(); 1197 </script>
1197 1198 1199 <!-- Global site tag (gtag.js) - Google Analytics --> 1200
1200<script defer src="https://www.googletagmanager.com/gtag/js"></script>
1200 1201 1202 <!-- Google Tag Manager --> 1203
1203<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 1204 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 1205 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.async=false;j.src= 1206 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 1207 })(window,document,'script','dataLayer','GTM-T9SFQGHZ');</script>
1207 1208 <!-- End Google Tag Manager --> 1209 1210 1211 <!-- LP Tracker (divolte.js) - LP Divolte --> 1212
1212<script>window.divolteLp=window.divolteLp||function(){(divolteLp.q=divolteLp.q||[]).push(arguments)}</script>
1212 1213 <!-- LP Tracker (eventBus) - LP EventBus --> 1214
1214<script>window.eventBusLp=window.eventBusLp||function(){(eventBusLp.q=eventBusLp.q||[]).push(arguments)}</script>
1214 1215 1216
1216<script> 1217 window.dataLayer = window.dataLayer || []; 1218 document.sendGoogleTagManagerEvent = function() { 1219 /* Honor GPC-enabled browsers and prevent GTM event if GPC is enabled. More details: https://global-privacy-control.glitch.me/ */ 1220 if (window.navigator.globalPrivacyControl) { 1221 return; 1222 } 1223 1224 dataLayer.push(arguments); 1225 } 1226 1227 document.sendGoogleTagManagerEvent('js', new Date()); 1228 document.sendGoogleTagManagerEvent('config', 'UA-244166381-22', { page: location.pathname, location: location.href }); 1229 document.sendGoogleTagManagerEvent('config', 'G-PKK5YXDC1W', { page: location.pathname, location: location.href }); 1230 document.sendGoogleAnalyticsEvent = function(googleEvent) { 1231 document.sendGoogleTagManagerEvent('event', googleEvent.eventAction || googleEvent.hitType, { 1232 event_category: googleEvent.eventCategory, 1233 event_label: googleEvent.eventLabel, 1234 value: googleEvent.eventValue, 1235 page: googleEvent.page, 1236 location: googleEvent.location 1237 }) 1238 }; 1239 1240 document.addEventListener("DOMContentLoaded", function() { 1241 (function() { 1242 //If the page has an element with ID of auto-year-update the element will be populated with the current year. 1243 var date = new Date(); 1244 var elements = document.getElementsByClassName('auto-year-update'); 1245 var i; 1246 for (i = 0; i < elements.length; i++) { 1247 elements[i].innerText = date.getFullYear(); 1248 } 1249 })(); 1250 if (window.divolteLp) { 1251 window.divolteLp('sendLpPageView', {}); 1252 } 1253 if (window.eventBusLp) { 1254 window.eventBusLp('sendLpPageView', {}); 1255 } 1256 }); 1257 </script>
1257 1258 1259 1260
1260<script> 1261 // Function to dynamically load a script 1262 function loadScript(url, callback) { 1263 var script = document.createElement('script'); 1264 script.type = 'text/javascript'; 1265 script.src = url; 1266 script.defer = true; 1267 script.async = true; 1268 script.onload = callback; 1269 document.head.appendChild(script); 1270 } 1271 1272 // Function to dynamically load CSS file 1273 function loadCSS(url) { 1274 var link = document.createElement("link"); 1275 link.rel = "stylesheet"; 1276 link.href = url; 1277 document.head.appendChild(link); 1278 } 1279 1280 // Global methods / variables that can be accessed by element js 1281 window.luxuryPresence = { 1282 libs: { 1283 loadJs: loadScript, 1284 loadCss: loadCSS, 1285 jsLibsMap: { 1286 paroller: { 1287 jsSrc: 'https://d1e1jt2fj4r8r.cloudfront.net/javascript/jquery.paroller.min.js', 1288 isLoaded: false, 1289 }, 1290 ionRangeSlider: { 1291 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js', 1292 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css', 1293 isLoaded: false, 1294 requires: ['jquery'], 1295 }, 1296 splide: { 1297 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/js/splide.min.js', 1298 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/css/splide-core.min.css', 1299 isLoaded: false, 1300 }, 1301 wow: { 1302 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js', 1303 isLoaded: false, 1304 }, 1305 jquery: { 1306 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js', 1307 isLoaded: false, 1308 }, 1309 slick: { 1310 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js', 1311 isLoaded: false, 1312 requires: ['jquery'], 1313 }, 1314 libphonenumber: { 1315 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.11.8/libphonenumber-js.min.js', 1316 isLoaded: false, 1317 }, 1318 }, 1319 }, 1320 }; 1321 </script>
1321 1322
1322<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>
1322 1323
1323<script defer src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.8/handlebars.min.js"></script>
1323 1324
1324<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/handlebars-intl.min.js"></script>
1324 1325
1325<script defer src="https://cdnjs.cloudflare.com/ajax/libs/superagent/4.1.0/superagent.min.js"></script>
1325 1326
1326<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>
1326 1327
1327<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>
1327 1328
1328<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>
1328 1329 1330 <!-- GOOGLE TRANSLATE SCRIPT --> 1331
1331<script> 1332 function googleTranslateElementInit() { 1333 // list of languages can be overridden by setting window.customLanguages in the head JS. example `window.customLanguages = 'en,de,fr,ro,sk,pl'` 1334 // Language codes can be taken from here https://cloud.google.com/translate/docs/languages 1335 const DEFAULT_LANGUAGES = 'en,es,zh-CN,zh-TW,tl,vi,ar,ko,ru,de,fr,hi,pt'; 1336 document.querySelectorAll('[data-type="TRANSLATE"]').forEach(function(translate){ 1337 translate.innerText = ''; 1338 new google.translate.TranslateElement({ 1339 pageLanguage: 'en', 1340 layout: google.translate.TranslateElement.InlineLayout.SIMPLE, 1341 includedLanguages: window.customLanguages || DEFAULT_LANGUAGES, 1342 }, translate); 1343 }); 1344 } 1345 </script>
1345 1346
1346<script defer src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
1346 1347
1347<script defer src="https://accounts.google.com/gsi/intermediate"></script>
1347 1348 1349 <!-- GOOGLE TRANSLATE SCRIPT END--> 1350
1350<script> 1351 1352 // UI helpers 1353 (function () { 1354 1355 function getSideMenu () { 1356 return document.querySelector('body > div.sidemenu'); 1357 } 1358 1359 function sideMenuHide (instant) { 1360 var sideMenu = getSideMenu(); 1361 if (!sideMenu || !sideMenu.classList.contains('visible')) { 1362 return; 1363 } 1364 sideMenu.classList.remove('visible'); 1365 sideMenu.dispatchEvent(new CustomEvent('lpui-hide', { detail: { instant: !!instant } })); 1366 window.dispatchEvent(new CustomEvent('lpui-sidemenu-hide', { detail: {instant: !!instant} })); 1367 } 1368 1369 function sideMenuShow () { 1370 var sideMenu = getSideMenu(); 1371 if (!sideMenu || sideMenu.classList.contains('visible')) { 1372 return; 1373 } 1374 sideMenu.classList.add('visible'); 1375 sideMenu.dispatchEvent(new Event('lpui-show')); 1376 window.dispatchEvent(new Event('lpui-sidemenu-show')); 1377 } 1378 1379 function sideMenuToggle () { 1380 var sideMenu = getSideMenu(); 1381 if (!sideMenu) { 1382 return; 1383 } 1384 var isSideMenuVisible = sideMenu.classList.contains('visible'); 1385 if (isSideMenuVisible) { 1386 sideMenuHide(); 1387 } else { 1388 sideMenuShow(); 1389 } 1390 } 1391 1392 var scrollLockRequests = {}; 1393 window.__debug_scrollLockRequests = scrollLockRequests; 1394 var hideScrollStyles = ''+ 1395 'body {'+ 1396 'overflow: hidden;' + 1397 '}'; 1398 var hideScrollId = 'hide-body-scroll-style'; 1399 1400 function scrollLock () { 1401 var style = document.createElement('style'); 1402 style.id = hideScrollId; 1403 style.textContent = hideScrollStyles; 1404 document.head.appendChild(style); 1405 window.dispatchEvent(new Event('lpui-scroll-locked')); 1406 } 1407 1408 function scrollUnlock () { 1409 document.getElementById(hideScrollId)?.remove(); 1410 window.dispatchEvent(new Event('lpui-scroll-unlocked')); 1411 } 1412 1413 function requestScrollLock (lockId) { 1414 var wasLocked = Object.keys(scrollLockRequests).length > 0; 1415 scrollLockRequests[lockId || '__anonymous_lock'] = true; 1416 if (!wasLocked) { 1417 scrollLock(); 1418 } 1419 } 1420 1421 function releaseScrollLock (lockId) { 1422 if (lockId) { 1423 delete scrollLockRequests[lockId]; 1424 if (!Object.keys(scrollLockRequests).length) { 1425 scrollUnlock(); 1426 } 1427 } else { 1428 scrollLockRequests = {}; 1429 window.__debug_scrollLockRequests = scrollLockRequests; 1430 scrollUnlock(); 1431 } 1432 } 1433 1434 function showModal (modalId, options) { 1435 var modal = document.getElementById(modalId); 1436 if (!modal) { 1437 return; 1438 } 1439 1440 if (!modal.classList.contains('visible')) { 1441 modal.classList.add('visible'); 1442 if (options && options.scrollLock) { 1443 window.lpUI.requestScrollLock(modalId); 1444 } 1445 modal.dispatchEvent(new Event('lpui-show')); 1446 window.dispatchEvent(new CustomEvent('lpui-modal-show', { detail: { id: modalId } })); 1447 } 1448 1449 const visibleModals = document.querySelectorAll('.modal.visible'); 1450 1451 if (visibleModals.length > 1) { 1452 1453 const maxZIndex = Array.from(visibleModals).reduce((maxZIndex, modal) => { 1454 const zIndex = window.getComputedStyle(modal).zIndex; 1455 const parsedZIndex = zIndex !== 'auto' ? parseInt(zIndex) : 0; 1456 return Math.max(maxZIndex, parsedZIndex); 1457 }, 0); 1458 1459 modal.style.zIndex = maxZIndex + 1; 1460 } 1461 1462 } 1463 1464 function _hideModal (modalEl) { 1465 if (!modalEl) { 1466 return; 1467 } 1468 if (!modalEl.classList.contains('visible')) { 1469 return; 1470 } 1471 modalEl.classList.remove('visible'); 1472 modalEl.style.zIndex = '';
1473 modalEl.dispatchEvent(new Event('lpui-hide')); 1474 var modalId = modalEl.getAttribute('id'); 1475 if (modalId) { 1476 window.lpUI.releaseScrollLock(modalId); 1477 window.dispatchEvent(new CustomEvent('lpui-modal-hide', { detail: { id: modalId } })); 1478 } 1479 } 1480 1481 function hideModal (modalId) { 1482 _hideModal(document.getElementById(modalId)); 1483 } 1484 1485 function hideClosestModal (el) { 1486 const modal = el?.closest('.modal'); 1487 if (!modal) { 1488 return; 1489 } 1490 if (modal.classList) { 1491 _hideModal(modal); 1492 return; 1493 } 1494 if (modal.length && modal[0].classList) { 1495 _hideModal(modal[0]); 1496 } 1497 } 1498 1499 window.lpUI = { 1500 sideMenuHide: sideMenuHide, 1501 sideMenuShow: sideMenuShow, 1502 sideMenuToggle: sideMenuToggle, 1503 requestScrollLock: requestScrollLock, 1504 releaseScrollLock: releaseScrollLock, 1505 showModal: showModal, 1506 hideModal: hideModal, 1507 hideClosestModal: hideClosestModal 1508 } 1509 })(); 1510 1511 var stringifyPrimitive = function(v) { 1512 switch (typeof v) { 1513 case 'string': 1514 return v; 1515 1516 case 'boolean': 1517 return v ? 'true' : 'false'; 1518 1519 case 'number': 1520 return isFinite(v) ? v : ''; 1521 1522 default: 1523 return ''; 1524 } 1525 }; 1526 1527 function objectToQuerystring(obj, sep, eq, name) { 1528 // https://github.com/Gozala/querystring/blob/master/encode.js 1529 sep = sep || '&'; 1530 eq = eq || '='; 1531 if (obj === null) { 1532 obj = undefined; 1533 } 1534 1535 if (typeof obj === 'object') { 1536 return Object.keys(obj).map(function(k) { 1537 var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; 1538 if (Array.isArray(obj[k])) { 1539 return obj[k].map(function(v) { 1540 return ks + encodeURIComponent(stringifyPrimitive(v)); 1541 }).join(sep); 1542 } else { 1543 return ks + encodeURIComponent(stringifyPrimitive(obj[k])); 1544 } 1545 }).filter(Boolean).join(sep); 1546 1547 } 1548 1549 if (!name) return ''; 1550 return encodeURIComponent(stringifyPrimitive(name)) + eq + 1551 encodeURIComponent(stringifyPrimitive(obj)); 1552 } 1553 1554 function getPath(url, options) { 1555 var parser = document.createElement('a'); 1556 parser.href = url || ''; 1557 var path = parser.pathname || ''; 1558 if (path[0] !== '/') { 1559 // IE does not return path starting with a slash 1560 path = '/' + path; 1561 } 1562 1563 if (options && options.queryString) { 1564 path += parser.search; 1565 } 1566 1567 return path; 1568 } 1569 1570 function getMLSAutocomplete(keyword) { 1571 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 1572 var query = { 1573 kind: 'listings', 1574 query: keyword 1575 }; 1576 1577 return superagent 1578 .get(searchURL) 1579 .query(query) 1580 .then(function(res) { 1581 var data = res.body || []; 1582 /* 1583 Of the format: 1584 [{ 1585 "_index": "listing_auto_completes_production_20190723232720775", 1586 "_type": "listing_auto_complete", 1587 "_id": "235875624", 1588 "_score": 0, 1589 "status_modified_at": 1553250708, 1590 "city": "Jupiter", 1591 "price": 1335743, 1592 "display_address": "10088 Calabrese Trail Unit: 9 Jupiter FL 33478", 1593 "sold_price": null, 1594 "id": 235875624, 1595 "state": "FL", 1596 "photo_urls": [ 1597 "http://cdn.photos.sparkplatform.com/fl/20190322153144208228000000-o.jpg" 1598 ], 1599 "status": "Pending" 1600 }, ...] 1601 */ 1602 1603 return data; 1604 }); 1605 } 1606 1607 function getMLSAutocompleteWithFilters(keyword, filters = {}) { 1608 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 1609 1610 return superagent 1611 .get(searchURL) 1612 .query({ kind: 'listings', query: keyword, ...filters }) 1613 .then(function(res) { 1614 /* 1615 Of the format: 1616 [{ 1617 "_index": "listing_auto_completes_production_20190723232720775", 1618 "_type": "listing_auto_complete", 1619 "_id": "235875624", 1620 "_score": 0, 1621 "status_modified_at": 1553250708, 1622 "city": "Jupiter", 1623 "price": 1335743, 1624 "display_address": "10088 Calabrese Trail Unit: 9 Jupiter FL 33478", 1625 "sold_price": null, 1626 "id": 235875624, 1627 "state": "FL", 1628 "photo_urls": [ 1629 "http://cdn.photos.sparkplatform.com/fl/20190322153144208228000000-o.jpg" 1630 ], 1631 "status": "Pending" 1632 }, ...] 1633 */ 1634 return res.body || []; 1635 }); 1636 } 1637 1638 function makeMlsLink(data) { 1639 // Code Dupe from utils/googlePlace 1640 // mapping of google data type to mls data type 1641 var mapping = { 1642 neighborhood: 'neighborhood', 1643 locality: 'place', 1644 administrative_area_level_2: 'county', 1645 administrative_area_level_1: 'state', 1646 postal_code: 'postalcode', 1647 }; 1648 1649 function _filterTypes(types) { 1650 return types.filter(function(type) { return type !== 'political' }); 1651 } 1652 1653 if (!data || !Object.keys(data).length) { 1654 return '/home-search/listings'; 1655 } 1656 1657 var newData = {};
1658 _filterTypes(data.types).forEach(function(type) { 1659 if (mapping[type]) { 1660 newData.search_type = mapping[type]; 1661 } 1662 }); 1663 newData.omnibox = data.formatted_address; 1664 data.address_components.forEach(function(component) { 1665 _filterTypes(component.types).forEach(function(type) { 1666 if (mapping[type]) { 1667 newData[mapping[type]] = component.long_name; 1668 } 1669 }); 1670 }); 1671 var bounds = data.geometry.bounds; 1672 var convertedData = Object.assign(bounds, newData); 1673 1674 return '/home-search/listings?' + objectToQuerystring(convertedData); 1675 } 1676 1677 function debounce(func, wait) { 1678 let timeout; 1679 return function(...args) { 1680 const context = this; 1681 clearTimeout(timeout); 1682 timeout = setTimeout(() => func.apply(context, args), wait) 1683 } 1684 } 1685 1686 // Global methods / variables that can be accessed by element js 1687 window.luxuryPresence = { 1688 ...window.luxuryPresence, 1689 defaults: { 1690 companyId: '8853c562-273b-4c58-a71b-9ef5b2c3920c', 1691 apiGatewayUrl: '/api-gw', 1692 routerUrl: '/api-nv', 1693 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\
1693n }\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 $pressReleaseId: ID\n $companyId: String\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirectionEnum\n $search: String\n $categories: [String!]\n $propertyId: [String!]\n $developmentId: [String!]\n $agentId: [String!]\n $teamId: [String!]\n $year: [Int!]\n ) {\n pressReleases (\n pressReleaseId: $pressReleaseId\n companyId: $companyId\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 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 }\n publishedAt\n categories\n }\n pressReleasesCount(\n companyId: $companyId\n search: $search\n categories: $categories\n propertyId: $propertyId\n developmentId: $developmentId\n agentId: $agentId\n teamId: $teamId\n year: $year\n ) {\n count\n }\n }\n","posts":"\n query Posts (\n $postId: ID\n $companyId: String\n $offset: Int\n $limit: Int\n $order: String\n $sortDir: SortDirectionEnum\n $search: String\n $featured: Boolean\n $categoryId: String\n $categoryIds: [String!]\n $neighborhoodId: [String!]\n ) {\n posts (\n postId: $postId\n companyId: $companyId\n offset: $offset\n limit: $limit\n order: $order\n sortDir: $sortDir\n search: $search\n featured: $featured\n postStatusId: \"5f528253-abb7-484e-95c3-330269ac1102\"\n categoryId: $categoryId\n categoryIds: $categoryIds\n neighborhoodId: $neighborhoodId\n ) {\n id\n title\n subtitle\n description\n status\n featured\n slug\n categories {\n id\n name\n }\n createdAt\n publishedAt\n scheduledAt\n createdBy {\n firstName\n lastName\n }\n customAuthor\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n }\n seoTitle\n seoDescription\n slug\n }\n postsCount(\n companyId: $companyId\n search: $search\n featured: $featured\n postStatusId: \"5f528253-
1693abb7-484e-95c3-330269ac1102\"\n categoryId: $categoryId\n categoryIds: $categoryIds\n neighborhoodId: $neighborhoodId\n ) {\n count\n }\n }\n","testimonials":"\n query Testimonials (\n $companyId: String\n $agentId: ID\n $teamId: ID\n $testimonialIds: [ID!]\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: String\n $search: String\n ) {\n testimonials (\n companyId: $companyId\n agentId: $agentId\n teamId: $teamId\n testimonialIds: $testimonialIds\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n ) {\n items {\n id\n testimonialId\n body\n author\n position\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n seoTitle\n seoDescription\n agents {\n slug\n email\n firstName\n lastName\n avatar {\n smallUrl\n height\n width\n }\n }\n }\n total\n }\n }\n","neighborhoods":"\n query Neighborhoods (\n $neighborhoodId: ID\n $companyId: String\n $search: String\n $tag: String\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirectionEnum\n ) {\n neighborhoods (\n neighborhoodId: $neighborhoodId\n companyId: $companyId\n search: $search\n tag: $tag\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n ) {\n id\n name\n description\n descriptionShort\n slug\n tags\n googlePlaceData\n mlsLink\n createdAt\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n }\n seoTitle\n seoDescription\n }\n neighborhoodsCount(\n companyId: $companyId\n search: $search\n tag: $tag\n ) {\n count\n }\n }\n","developments":"\n query Developments (\n $developmentId: ID\n $companyId: String\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirectionEnum\n $search: String\n $tag: [String!]\n $agentId: [ID!]\n $neighborhoodId: ID\n $neighborhoodIds: [ID!]\n ) {\n developments (\n developmentId: $developmentId\n companyId: $companyId\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n tag: $tag\n agentId: $agentId\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n ) {\n id\n name\n description\n descriptionShort\n slug\n createdAt\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n }\n googlePlaceData\n seoTitle\n seoDescription\n tags\n }\n developmentsCount(\n companyId: $companyId\n search: $search\n tag: $tag\n agentId: $agentId\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n ) {\n count\n }\n }\n","pois":"\n query PointsOfInterest (\n $regionId: UUID!\n $radius: Int\n $offset: Int\n $limit: Int\n $categories: [AreasOfInterestCategories!]\n $sortBy: AreasOfInterestSorting\n ) {\n pois: areasOfInterest (\n input: {\n regionId: $regi
1693onId\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"}, 1694 propertyPlaceholderImage: {"id":"caa92427-6f94-44e5-a10a-6d4ecd75812e","alt":null,"bytes":22773,"width":1920,"format":"jpg","height":1200,"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/jbksvtb5exwvkulw69iw","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/jbksvtb5exwvkulw69iw","authorUrl":null,"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/jbksvtb5exwvkulw69iw","sourceUrl":null,"xLargeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/jbksvtb5exwvkulw69iw","__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/jbksvtb5exwvkulw69iw","description":null,"displayName":"property-placeholder-dotted","originalUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/jbksvtb5exwvkulw69iw","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/jbksvtb5exwvkulw69iw","originalFileName":"Property Placeholder - dotted"} 1695 }, 1696 objectToQuerystring: objectToQuerystring, 1697 getPath: getPath, 1698 getMLSAutocomplete: getMLSAutocomplete, 1699 getMLSAutocompleteWithFilters: getMLSAutocompleteWithFilters, 1700 makeMlsLink: makeMlsLink, 1701 debounce: debounce, 1702 }; 1703 1704 var wowOffset = 100; 1705 </script>
1705 1706
1706<script> 1707 (()=>{var e={},t={};t={getVideoFirstFrame(e){let t="https://res.cloudinary.com/";if(!e||!e.startsWith(t))return null;let i=e.replace(t,"").replace("f_auto:video","f_auto").split("/");if(-1===i[1].toLowerCase().indexOf("video"))return null;let s=i[i.length-1];s.lastIndexOf(".")>-1?s=`${s.slice(0,s.lastIndexOf("."))}.jpg`:s+=".jpg",i[i.length-1]=s;let r=3;"videos"===i[1].toLowerCase()&&""!==i[2]&&(r=2);let a=/^(?:[a-z]{1,3}|\$\w+)_\S+$/;for(;r<i.length-1&&a.test(i[r]);)r++;return i.splice(r,0,"so_0,eo_0"),t+i.join("/")}},e=function(e,{isEqual:i}){let s=[{field:"thumbnailUrl",w:320},{field:"smallUrl",w:960},{field:"mediumUrl",w:1280},{field:"largeUrl",w:1920},{field:"xLargeUrl",w:2560},{field:"xxLargeUrl",w:3456}],r=function(e,t,i){let s="en-US";if(!e)return"";if("string"==typeof e){let t=e.trim();if(/[^+\-0-9.]/.test(t))return e;if(!(e=parseFloat(t)))return""}let r="number"==typeof i?i:0,a=Number.isInteger(e)?0:r,o={minimumFractionDigits:a,maximumFractionDigits:a};return"USD"===t?`$${e.toLocaleString(s,o)}`:"CAD"===t?`$${e.toLocaleString(s,o)} CAD`:"EUR"===t?`\u{20AC}${e.toLocaleString(s,o)}`:"GBP"===t?`\xa3${e.toLocaleString(s,o)}`:"PERCENT"===t?`${e}%`:"number"==typeof i&&i>-1?e.toLocaleString(s,{maximumFractionDigits:i}):e.toLocaleString(s)},a=function(e){switch(e){case"DAY":return"daily";case"MONTH":return"monthly";case"WEEK":return"weekly";case"YEAR":return"yearly";case"QUARTER":return"quarterly";case"HALF_YEAR":return"semi-annually";case"NIGHTLY":return"nightly";case"SEASONAL":return"seasonally";default:return""}},o=function(e){switch(e){case"DAY":return"day";case"WEEK":return"wk";case"MONTH":return"mo";case"YEAR":return"yr";case"QUARTER":return"3 mos";case"HALF_YEAR":return"6 mos";case"NIGHTLY":return"night";case"SEASONAL":return"season";default:return""}},n=function(e){switch(e){case"DAY":return"day";case"WEEK":return"week";case"MONTH":return"month";case"YEAR":return"year";case"QUARTER":return"quarter";case"HALF_YEAR":return"6 months";case"NIGHTLY":return"night";case"SEASONAL":return"season";default:return""}},l=function(e,t){let i,s,r=t||{};switch(r.mode){case"short":i=o(e),s=r.frequencySeparator||"/";break;case"standard":case"std":i=n(e),s=r.frequencySeparator||"/";break;default:i=a(e),s=r.frequencySeparator||" "}return i?r.frequencyTag||r.frequencyClass?`${s}<${r.frequencyTag||"span"}${r.frequencyClass?` class="${r.frequencyClass}"`:""}>${i}</${r.frequencyTag||"span"}>`:s+i:""};return{isEmpty(e,t){let i=!e||"string"==typeof e&&!e.trim()||!Object.keys(e).length;return t.fn?i?t.fn(this):t.inverse(this):i},ifEquals(e,t,s){return i(e,t)?s.fn(this):s.inverse(this)},"raw-helper":function(e){return e.fn()},striptags:e=>e?(e=(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,"")).replace(/ /g," ")).replace(/<\/?("[^"]*"|'[^']*'|[^>])*(>|$)/g,""):"",striptagsLineBreaks:e=>e?(e=(e=(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,"")).replace(/(<br\s*\/?>)|(<\/p\s*>)(?=.*(<\/p\s*>|<br\s*\/?>))/g," ")).replace(/ /g," ")).replace(/<\/?("[^"]*"|'[^']*'|[^>])*(>|$)/g,""):"",truncate:(e,t,i)=>e?e.length>t?"string"==typeof i?e.slice(0,t-i.length)+i:e.slice(0,t):e:"",setSubArray(e=[],t,i,s,r){r.data.root[s]=e.slice(t,i)},formatAreaUnit(e){switch(e){case"ACRE":return"Acres";case"SQUARE_METER":return"Sq.M.";case"SQUARE_YARD":return"Sq.Yd.";default:return"Sq.Ft."}},formatFrequency:a,formatFrequencyShort:o,lpFormatFrequency:(e,t)=>l(e,t&&t.hash),subArray(e,t,i,s){return e>=t&&e<i?s.fn(this):s.inverse(this)},formatPropertyStatus(e,t,i){let s="";switch(e){case"SOLD":s="Sold";break;case"FOR_SALE":s="For Sale";break;case"COMING_SOON":s="Coming Soon";break;case"INACTIVE":s="Inactive";break;case"POCKET_LISTING":s="Pocket Listing";break;case"PENDING":s="Pending";break;case"UNDER_CONTRACT":s="Under Contract";break;case"ACTIVE_UNDER_CONTRACT":s="Active Under Contract";break;default:s=e}return("Sold"===s||"Leased"===s)&&t&&"string"==typeof i&&i&&(s+=` on ${i}`),s},formatGrade(e){switch(e){case"UNDERGRADUATE_COURSES":return"Undergrad";case"PRE_KINDERGARTEN":return"PreK";case"KINDERGARTEN":return"K";case"FIRST_GRADE":return"1st";case"SECOND_GRADE":return"2nd";case"THIRD_GRADE":return"3rd";case"FOURTH_GRADE":return"4th";case"FIFTH_GRADE":return"5th";case"SIXTH_GRADE":return"6th";case"SEVENTH_GRADE":return"7th";case"EIGHTH_GRADE":return"8th";case"NINTH_GRADE":return"9th";case"TENTH_GRADE":return"10th";case"ELEVENTH_GRADE":return"11th";case"TWELFTH_GRADE":return"12th";default:return""}},encodeURI:e=>encodeURI(e),encodeURIComponent:e=>encodeURIComponent(e),hbFormatDate(e,t){if(!e)return"";let i="current"===e?new Date:new Date(e);if(Number.isNaN(i.getTime()))return"";if("YYYY"===t||"year"===t)return`${i.getFullYear()}`;if("MM/DD/YY"===t){let e=i.getMonth()+1;return e<10&&(e=`0${e.toString()}`),`${e}/${i.getDate()}/${i.getFullYear().toString().substr(-2)}`}return`${["January","February","March","April","May","June","July","August","September","October","November","December"][i.getMonth()]} ${i.getDate()}, ${i.getFullYear()}`},openHousesFormat(e,t,i){if(!e||!t)return"";let s=e=>{let t=e.getHours();t>12&&(t-=12);let i=`${t}:${e.getMinutes()>9?e.getMinutes():"0"+e.getMinutes()}`;return e.getHours()>11?i+="PM":i+="AM",i},r="",a=e,o=t;
1707i&&(a=new Date(e).toLocaleString("en-US",{timeZone:i}),o=new Date(t).toLocaleString("en-US",{timeZone:i}),[,,,r]=new Date(t).toLocaleString("en-US",{timeZone:i,timeZoneName:"short"}).split(" "));let n=new Date(a),l=n.toLocaleDateString("en-US"),d=s(n),c=s(new Date(o));return`${l} ${d} - ${c} ${r}`},math:(e,t,i)=>(e=parseFloat(e),({"+":e+(i=parseFloat(i)),"-":e-i,"*":e*i,"/":e/i,"%":e%i})[t]),findByKey(e,t,i,s){let r=(e||[]).find(e=>e[t]===i);return s.fn(r)},capitalize(e,t,i){let s;return"string"==typeof e&&e.length&&(s=e.toLowerCase().split(t).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ").toString()),s},and:(...e)=>Array.prototype.slice.call(e).every(Boolean),or:(...e)=>Array.prototype.slice.call(e,0,-1).some(Boolean),not:e=>!e,orderByIds(t,i,s){let r="",a=null;s.data&&(a=e.createFrame(s.data));let o=(i||[]).filter(Boolean);if(o&&o.length){let e=0;r=o.reduce((i,r,o)=>{let n=(t||[]).find(e=>e.id===r);return n?(a&&(a.index=o-e),i+s.fn(n,{data:a})):(e+=1,i)},"")}else for(let e=0,i=(t||[]).length;e<i;e++)a&&(a.index=e),r+=s.fn(t[e],{data:a});return r},ifIn(e,t,i){return t&&t.indexOf(e)>-1?i.fn(this):i.inverse(this)},partial:(t,i)=>(e.registerPartial(t,e.compile(i.fn())),`
1707<script type="text/x-handlebars-template" class="${t} pagination-script">${i.fn()}<\/script>`),numCompare(e,t,i,s){return({"==":function(e,t){return e==t},"===":function(e,t){return e===t},"!=":function(e,t){return e!=t},"<":function(e,t){return e<t},">":function(e,t){return e>t},"<=":function(e,t){return e<=t},">=":function(e,t){return e>=t}})[i](e,t)?!s.fn||s.fn(this):!!s.fn&&s.inverse(this)},lpFormatNumber:r,arrayToHtmlList:(e,t)=>e.reduce((e,t)=>{try{if("object"==typeof t||null===t)return e;return e+=`<li>${t}</li>`}catch(e){}},""),join:(e,t,i)=>e&&e.join?e.join("string"==typeof t?t:", "):"",dedupe(t,i,s){let r=null,a=0,o=new Set;return s.data&&(r=e.createFrame(s.data)),(t||[]).reduce((e,t,n)=>{let l=i?t[i]:t;return!o.has(l)||i&&void 0===l?(o.add(l),r&&(r.index=n-a),e+s.fn(t,{data:r})):(a+=1,e)},"")},JSONstringify:(e,t)=>JSON.stringify(e),formatPropertyPrice(...t){let i=t[t.length-1].hash,s=t.length>1?t[0]:i.property,a=i.precision||0;t.length>2&&(i.mode=t[1]),i.mode||(i.mode="short");let o=t.length>3?t[2]:i.separator;if("string"!=typeof o&&(o=" | "),s.isPasswordProtected)return"Exclusive Listing";let n=t.length>4?t[3]:i.priceUponRequestText;if("string"!=typeof n&&(n="Price Upon Request"),s.priceUponRequest)return n;let d=s.salesPrice,c=null;"SOLD"!==s.status&&"Leased"!==s.status&&s.reducedPrice&&(i.reducedClass?c=s.reducedPrice:d=s.reducedPrice);let u="";c&&(u+=`<${i.reducedTag||"span"} class="${i.reducedClass}">${r(c,s.currency,a)}</${i.reducedTag||"span"}>`),d&&(d=r(d,s.currency,a),i.priceTag||i.priceClass?u+=`<${i.priceTag||"span"}${i.priceClass?` class="${i.priceClass}"`:""}>${d}</${i.priceTag||"span"}>`:u+=d);let h=s.leasePrice&&r(s.leasePrice,s.currency,a);if(h){u&&(u+=o);let e=`${h}${l(s.leasePeriod,i)}`;i.leaseTag||i.leaseClass?u+=`<${i.leaseTag||"span"}${i.leaseClass?` class="${i.leaseClass}"`:""}>${e}</${i.leaseTag||"span"}>`:u+=e}
1707return new e.SafeString(u)},mediaImage(t,i={}){if(!t)return;let{lazy:r,...a}=i.hash,o="",n="";if("string"==typeof t)o=t;else{let e={},{height:r,width:l,altTagText:d}=t;s.forEach(i=>{t[i.field]&&!e[t[i.field]]&&(e[t[i.field]]=i.w)});let c=Object.keys(e);if(!c.length)return;if(d&&(a.alt=d),r&&l&&(r>=l&&(a.class?a.class+=" portrait":a.class="portrait"),"setDims"in i.hash&&(a.width=l,a.height=r)),c.length>1&&l&&l<e[c[c.length-1]]){let t=c.findIndex(t=>e[t]>=l);c.splice(t+1),e[c[c.length-1]]=l}c.length>1&&(n=c.map(t=>`${t} ${e[t]}w`).join(", "),c.sort((t,i)=>Math.abs(e[t]-1280)-Math.abs(e[i]-1280))),o=c[0]}delete a.setDims,n||delete a.sizes,"alt"in a||(a.alt=""),!("loading"in a)&&(i?.data?.root?.sectionIndex>1||r)&&(a.loading="lazy");let l=Object.keys(a).map(t=>`${e.escapeExpression(t)}="${e.escapeExpression(a[t])}"`).join(" ");return new e.SafeString(`<img src="${o}"${n?` srcset="${n}"`:""}${l?` ${l}`:""}>`)},bgImage:e=>e?"string"==typeof e?e:e.largeUrl||e.url||"":"",concat(...e){let t="";for(let i in e)null!==e[i]&&void 0!==e[i]&&"object"!=typeof e[i]&&(t+=e[i]);return t},setVideoExtension(e,t){if(!e||!t)return"";let i=new URL(e);if("res.cloudinary.com"!==i.host)return i.pathname.endsWith(`.${t}`)?e:"";let s=i.pathname.lastIndexOf("."),r=i.pathname;return -1!==s&&(r=i.pathname.substr(0,s)),i.pathname=`${r}.${t}`,i.toString()},addVideoSources(e){if(!e)return"";if(!e.includes("res.cloudinary.com"))return`<source data-src="${e}">`;let t=e.replace(/\.(?:3gp|mpeg|mp4|m4v|m4p|ogv|ogg|mov|webm)$/,"");return[{format:"webm",codec:"vp9",htmlCodecs:";codecs=vp9"},{format:"mp4",codec:"h265",htmlCodecs:";codecs=hvc1"},{format:"mp4",codec:"h264",htmlCodecs:""}].map(e=>{let i=`${t.replace(/f_auto(?::video)?(?:,q_auto(?::\w+)?)?/,`f_${e.format},vc_${e.codec},q_auto:best,w_1920,c_limit`)}.${e.format}`;return`<source data-src="${i}" type="video/${e.format}${e.htmlCodecs}">`}).join("\n")},cloudinaryVideoFirstFrame:t.getVideoFirstFrame,initials(e,t){if(!e)return"";t?.hash?.endChar&&(e=e.split(t.hash.endChar)[0]);let i=+t?.hash?.maxChars||2,s=e.match(/\b\w/g)?.slice(0,i);return s?(t?.hash?.addText&&(s=s.map(e=>e+t.hash.addText)),s.join(t?.hash?.joinWith||"").toUpperCase()):""},normalizePhone(e){if(!e)return"";let t=String(e).trim();return(t.startsWith("+")?"+":"")+t.replace(/\D/g,"")}}};class i{constructor(e,t,i){if(this.config=e,this.window=t,this.document=i,!this.destroy)throw Error("Controllers must implement a deconstructor")}}let s="lp_lead_form_conversion_fired";function r(e,t){if(e&&t&&"function"==typeof t.sendGoogleTagManagerEvent&&!function(e){try{return"true"===e.sessionStorage.getItem(s)}catch{return!1}}(e))try{t.sendGoogleTagManagerEvent("event","generate_lead");try{e.sessionStorage.setItem(s,"true")}catch{}}catch{}}function a(e){return!!e&&(!!e.expired||Date.now()>=e.expiresAt)}let o="/api/v1/home-valuation";class n extends i{destroy(){}_cleanAddressString(e){if(!e||"string"!=typeof e)return"";let t=e.trim();if(t.includes("User entered address:")){let e=t.match(/User entered address:\s*\n?\s*([^\n]+)/);e&&e[1]&&(t=e[1].trim())}let i=t.indexOf(", call time frame:");return -1!==i&&(t=t.substring(0,i).trim()),t}_transformAddressComponents(e){let t=t=>(e.find(e=>e.componentType===t)||{}).componentName?.text,i={},s=t("street_number"),r=t("route"),a=t("administrative_area_level_1"),o=t("postal_code"),n=t("subpremise"),l=t("locality")||t("sublocality_level_1")||t("neighborhood");return s&&(i.streetNumber=s),r&&(i.streetName=r),l&&(i.city=l),a&&(i.state=a),o&&(i.zipcode=o),n&&(i.addressLine2=n),i}_extractAddressAndCoordinates(e){let t=null,i=null;if(e?.result){let{result:s}=e;s.address?.addressComponents&&(t=this._transformAddressComponents(s.address.addressComponents)),s.geocode?.location&&(i={latitude:s.geocode.location.latitude,longitude:s.geocode.location.longitude})}return{structuredAddress:t,coordinates:i}}_filterEmptyStrings(e){let t={};for(let[i,s]of Object.entries(e))""!==s&&null!=s&&(t[i]=s);return t}_getRawAddress(e){let t=e.activity.content||{},i=e.activity.comments_attributes?.[0]?.text;return[t.address,t["property-address"],t.property_address,t.Property_Address,i,t.message,t.homeValuationAddress,t.propertyAddress].map(e=>e&&this._cleanAddressString(e)).find(Boolean)||""}_logLeadEvent(e,t,i=null){let s={event:e,companyId:this.config.companyId,websiteId:this.config.websiteId,timestamp:new Date().toISOString(),hasEmail:!!t.activity?.author_email,hasAddress:!!this._getRawAddress(t)};if(i&&(s.errorMessage=i.userMessage||(i.status?`Request failed with status ${i.status}`:"An error occurred"),s.errorName=i.name,s.errorStatus=i.status),console.error(`[HomeValuation] ${e}`,JSON.stringify(s)),this.window.posthog)try{this.window.posthog.capture(e,s)}catch(e){console.error("[HomeValuation] PostHog capture failed:",e)}}_getUserFriendlyErrorMessage(e){return"AbortError"===e.name||e.message?.includes("timeout")?"Connection timed out. Please try again.":"TypeError"===e.name&&e.message?.includes("fetch")?"Unable to connect. Please check your internet connection and try again.":503===e.status||502===e.status||504===e.status?"Service temporarily unavailable. Please try again in a moment.":400===e.status?"Please check your information and try again.":"Something went wrong. Please try again or c
1707ontact us directly."}_formatStructuredAddress(e){if(!e||0===Object.keys(e).length)return"";let t=[];return t.push([e.streetNumber,e.streetName,e.addressLine2].filter(Boolean).join(" ")),t.push([[e.city,e.state].filter(Boolean).join(", "),e.zipcode].filter(Boolean).join(" ")),t.filter(Boolean).join(", ")}_buildHomeValuationData(e,t,i,s){let r=this._formatStructuredAddress(i)||this._getRawAddress(e);if(!r)throw Error("Unable to extract home valuation address from form data");let a={companyId:e.companyId,homeValuationAddress:r,homeValuationEstimate:t?new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0,minimumFractionDigits:0}).format(t):null,websiteId:e.page.websiteId,sourceUrl:e.activity.source_url},o={leadEmailAddress:e.activity.author_email,leadFullName:e.activity.author_name,leadFirstName:e.activity.firstName,leadLastName:e.activity.lastName,leadPhoneNumber:e.activity.author_phone,parcelId:e.activity.content?.parcelId,resourceId:e.page.pageMeta?.resourceId,pageId:e.page.pageId,sourceResource:e.page.pageMeta?.s
1707ourceResource,pageElementId:e.page.pageMeta?.pageElementId,formId:e.page.pageMeta?.formId,utmSource:e.activity.content?.utm_source,utmMedium:e.activity.content?.utm_medium,utmCampaign:e.activity.content?.utm_campaign,utmTerm:e.activity.content?.utm_term,utmContent:e.activity.content?.utm_content,utmId:e.activity.content?.utm_id,timeToSell:e.activity.content?.timeToSell,lookingToBuy:e.activity.content?.lookingToBuy,consented:!!e.activity.content?.termsAccepted,referrer:e.referrer,content:e.activity.content||{},fields:e.fields||{}},n=this._filterEmptyStrings(o);return{...a,...n,...i&&{address:i},...s&&{coordinates:s}}}async _validateAddressSafely(e){if(!e)return console.error("Home valuation: No address found in form data"),null;try{return await this._validateAddressWithGoogleMaps(e)}catch(e){throw console.error("Error validating address with Google Maps:",e),e.userMessage=this._getUserFriendlyErrorMessage(e),e}}async _getHomeValuationEstimateSafely(e){try{return await this._getHomeValuationEstimate(e)}catch(e){throw console.error("Error getting home valuation estimate:",e),e.userMessage=this._getUserFriendlyErrorMessage(e),e}}_isSafeRedirectUrl(e){try{let{protocol:t}=new URL(e,this.window.location.href);return"https:"===t||"http:"===t}catch{return!1}}_parseResponsePayload(e){try{return e?JSON.parse(e):{}}catch{return{raw:e}}}_createResponseError(e,t){let i=Error(e&&"object"==typeof e&&Object.keys(e).length?e.message||JSON.stringify(e):"Request failed");return e&&"object"==typeof e&&Object.keys(e).length&&Object.assign(i,e),i.status=t,i}_resolveValuationApiBase(){let{config:e}=this;if(void 0!==e.valuationApiBase&&null!==e.valuationApiBase&&(""!==e.valuationApiBase||!e.isBuilder))return e.valuationApiBase;if(e.websiteApiGatewayUrl)return e.websiteApiGatewayUrl;throw Error("websiteApiGatewayUrl/valuationApiBase not configured for home valuation")}async _submitLead(e,t,i){let s=new AbortController,r=setTimeout(()=>s.abort(),1e4);try{let o=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),signal:s.signal});clearTimeout(r);let n=await o.text(),l=this._parseResponsePayload(n);if(!o.ok)throw this._createResponseError(l,o.status);if(l&&"success"===l.status&&l.redirectUrl){if(a(i))return l;if(!this._isSafeRedirectUrl(l.redirectUrl))return console.error("Home valuation: refusing redirect to unsupported protocol"),l;return this.window.location.href=l.redirectUrl,{redirected:!0,url:l.redirectUrl}}return l}catch(e){throw clearTimeout(r),e}}async _submitHomeValuationRequest(e){let t=this._resolveValuationApiBase();this._logLeadEvent("home_valuation_submission_started",e);try{let i=this._getRawAddress(e),s=null;try{s=await this._validateAddressSafely(i)}catch(t){throw this._logLeadEvent("home_valuation_address_validation_failed",e,t),t}let r=null;try{r=await this._getHomeValuationEstimateSafely(s)}catch(t){this._logLeadEvent("home_valuation_estimate_failed",e,t),r=null}let{structuredAddress:a,coordinates:n}=this._extractAddressAndCoordinates(s),l=`${t}${o}`,d=this._buildHomeValuationData(e,r,a,n),c=await this._submitLead(l,d,e.deadline);return this._logLeadEvent("home_valuation_submission_success",e),c}catch(t){throw t.userMessage||(t.userMessage=this._getUserFriendlyErrorMessage(t)),this._logLeadEvent("home_valuation_submission_failed",e,t),t}}async _validateAddressWithGoogleMaps(e){let{config:t,window:i}=this,s=t.googleMapsAPIKey;if(!s&&i.luxuryPresence?.mapApiLoader&&(s=await i.luxuryPresence.mapApiLoader.getMapApiKey()),!s)throw Error("Google Maps API key not configured");let r=new AbortController,a=setTimeout(()=>r.abort(),1e4);try{let t=await fetch(`https://addressvalidation.googleapis.com/v1:validateAddress?key=${s}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({address:{addressLines:[e]},enableUspsCass:!1}),signal:r.signal});if(clearTimeout(a),!t.ok){let e=Error(`Address validation failed: ${t.status}`);throw e.status=t.status,e}return t.json()}catch(e){throw clearTimeout(a),e}}_hasMandatoryAddressFields(e){return!!(e.streetNumber&&e.streetName&&e.city&&e.state&&e.zipcode)}_logMissingAddressFields(e){let t=[];e.streetNumber||t.push("streetNumber"),e.streetName||t.push("streetName"),e.city||t.push("city"),e.state||t.push("state"),e.zipcode||t.push("zipcode"),console.log("Home valuation estimate skipped - missing required fields:",t.join(", "),"Available fields:",Object.keys(e).join(", "))}_buildAddressQueryString(e){return Object.entries(e).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&")}async _getHomeValuationEstimate(e=null){let t=`${this._resolveValuationApiBase()}${o}`;if(!e?.result?.address?.addressComponents)return null;let i=this._transformAddressComponents(e.result.address.addressComponents);if(!this._hasMandatoryAddressFields(i))return this._logMissingAddressFields(i),null;let s=this._buildAddressQueryString(i),r=`${t}?${s}`,a=new AbortController,n=setTimeout(()=>a.abort(),1e4);try{let e=await fetch(r,{headers:{Accept:"application/json"},signal:a.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 l="middleName",d="redirect-pending",c=["name","firstName","lastName",l,"email","phone","phoneNumber","source","message","mlsId","sourceUrl"],u="lp_map_key_failed",h="oauthSuccess",p={cookieyes:{eventName:"cookieyes_consent_update",hasAnalyticsConsent:e=>(function(e){let t=e.cookie.match(/cookieyes-consent=([^;
1707]+)/);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 m(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function g(e,t){t.forEach(t=>{let i=e[t];Array.isArray(i)&&0===i.length&&delete e[t]})}function y(e,t,i,s){let r=t.map(t=>(function e(t){return Array.isArray(t)?t.flatMap(t=>e(t)):"string"==typeof t?t.split(/\s+/).filter(Boolean):null==t?[]:[t]})(e[t])),a=s?.merge?r.flat():r.find(e=>e.length>0)??[];t.forEach(t=>{delete e[t]}),a.length>0&&(e[i]=[...new Set(a)])}function f(e){let t={...e};if(t.urlWebsite||(t.urlWebsite=null),t.urlYoutube=null,t.urlFacebook=null,t.urlInstagram=null,t.urlLinkedin=null,t.urlPodcast=null,t.urlTwitter=null,Array.isArray(e.socialLinks)){let i=[...e.socialLinks].sort((e,t)=>{let i=e.type?.toLowerCase()||"",s=t.type?.toLowerCase()||"";return i.localeCompare(s)});t.socialLinks=i;let s={youtube:"urlYoutube",facebook:"urlFacebook",instagram:"urlInstagram",linkedin:"urlLinkedin",podcast:"urlPodcast",twitter:"urlTwitter"};i.forEach(e=>{let i=s[e.type?.toLowerCase()??""];i&&(t[i]=e.link)})}return t}function w(e){return e&&Array.isArray(e)?e.map(e=>f(e)):e}function v(e){let{region:t}=e;if(!m(t))return e;let{schools:i,pois:s,...r}=t,a={...r,schools:m(i)?i.data??[]:[],...Array.isArray(s)?{pois:s.map(e=>({...e,category:"string"==typeof e.category?e.category.toUpperCase():e.category}))}:{}};return{...e,region:a}}function b(e){return e&&Array.isArray(e)?e.map(e=>v(e)):e}function S(e){let t=e.featuresAndAmenities;if(!Array.isArray(t))return e;let i=t.map(e=>({featureIds:e.featureIds??[],features:e.features??[],description:e.description}));return{...e,featuresAndAmenities:i}}function _(e){return e&&Array.isArray(e)?e.map(e=>S(e)):e}function E(e,t){return m(e)?t(e):e}function I(e,t){return Array.isArray(e)?t(e):e}let A=new class{constructor(e){this.isBuilder=!1,this.companyId=null,this.websiteId=null,this.pageId=null,this.shareId=null,this.pageMeta=null,this.websiteApiGatewayUrl=null,this.buyerSellerServiceUrl=null,this.leadIngesterUrl=null,this.divolteServiceUrl=null,this.eventBus=null,this.templateId=null,this.myhomeDashboardEnabled=!1,this.mlsEnabled=!1,this.hstValuationRedirectEnabled=!1,this.hvStepTwoCaptureEnabled=!1,this.googleMapsAPIKey=null}get valuationApiBase(){return this.isBuilder?this.websiteApiGatewayUrl:""}destroy(){}setPage(e,t={}){this.pageId=e,this.shareId=t.shareId||null,this.pageMeta={sourceResource:t.sourceResource,pageElementId:t.pageElementId,pageQueryVariables:t.pageQueryVariables||{}}}setIsBuilder(e){this.isBuilder=e}setCompany(e,t={}){this.companyId=e}setWebsite(e,t={}){this.websiteId=e,t.myhomeDashboardEnabled&&(this.myhomeDashboardEnabled=t.myhomeDashboardEnabled),t.mlsEnabled&&(this.mlsEnabled=t.mlsEnabled),t.hstValuationRedirectEnabled&&(this.hstValuationRedirectEnabled=t.hstValuationRedirectEnabled),t.hvStepTwoCaptureEnabled&&(this.hvStepTwoCaptureEnabled=t.hvStepTwoCaptureEnabled)}setWebsiteApiGatewayUrl(e,t={}){this.websiteApiGatewayUrl=e}setBuyerSellerServiceUrl(e,t={}){this.buyerSellerServiceUrl=e}setDivolteServiceUrl(e,t={}){this.divolteServiceUrl=e}setEventBusUrl(e,t={}){this.eventBusUrl=e}setTemplateId(e,t={}){this.templateId=e}setLeadIngesterUrl(e,t={}){this.leadIngesterUrl=e}setGoogleMapsAPIKey(e,t={}){this.googleMapsAPIKey=e}setEventBus({enabled:e,apiKey:t,url:i}){this.eventBus={enabled:e,apiKey:t,url:i}}}({}),L=new class extends i{constructor(e,t,i){super(e,t,i),this.setLoginState=this.setLoginState.bind(this),this.pageId=null,this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}initialize(e){try{let{config:t,document:i}=this;this.pageId=t.pageId,this.modals=i.querySelectorAll("body > #modals >
1707 .modal"),e.modals.forEach(e=>{this._attachModalHandler(e)})}catch(e){console.log(e)}}destroy(){let{document:e}=this;this.exitModalEventListeners.forEach(t=>{e.removeEventListener("mouseout",t)}),this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}setModalWithExpiry(e){let{window:t}=this,i=new Date().getTime()+864e5,s=`modal-controller-${e}`;try{t.localStorage.setItem(s,JSON.stringify(i))}catch(e){}}setLoginState(){let{window:e}=this;try{e.localStorage.setItem("isSignedUp","true")}catch(e){}}getModalWithExpiry(e){let{window:t}=this,i=t.localStorage,s=i.getItem(`modal-controller-${e}`);if(!s)return!1;let r=JSON.parse(s);return!(new Date().getTime()>r)||(i.removeItem(`modal-controller-${e}`),!1)}show(e,t={}){let{window:i}=this,s=this.getModalWithExpiry(e);(e&&!s||!0===t.forced)&&(i.lpUI.showModal(`modal-${e}`,t),this.setModalWithExpiry(e))}_attachModalHandler(e){let{pageId:t}=this,{trigger:i,pageSpecific:s}=e;(!s||e.pages.map(e=>e.pageId).includes(t))&&("EXIT"===i?this._exitModalHandler(e):"TIMER"===i?this._timerModalHandler(e):"FORCED"===i&&this._forcedModalHandler(e))}_exitModalHandler(e){let t=this,{document:i,exitModalTriggered:s}=this,{modalId:r}=e;function a(e){!s[r]&&(e.toElement||e.relatedTarget||(t.show(r),s[r]=!0))}i.addEventListener("mouseout",a),this.exitModalEventListeners.push(a)}_timerModalHandler(e){let{modalId:t,timerDelay:i}=e;setTimeout(()=>{this.show(t)},i)}_forcedModalHandler(e){let{modalId:t}=e,{window:i,document:s}=this;if("true"!==i.localStorage.getItem("isSignedUp")){let e=s.querySelector(`#modal-${t}`),r=e?.querySelector("form"),a=r?.dataset.delay||2e3;r.addEventListener("formsubmitted",()=>{this.setLoginState()}),i.addEventListener("oauthSuccess",()=>{this.setLoginState(),r.classList.add("success"),setTimeout(()=>{i.lpUI.hideModal(`modal-${t}`),r.reset(),r.classList.remove("success")},a)}),this.show(t,{forced:!0})}}}(A,window,document),$=new class extends i{constructor(e,t,i){super(e,t,i),this._boundClickHandler=this._buttonClickHandler.bind(this)}initialize(e={}){try{let{document:e}=this;e.body.removeEventListener("click",this._boundClickHandler),e.body.addEventListener("click",this._boundClickHandler)}catch(e){console.error(e)}}destroy(){let{document:e}=this;e.body.removeEventListener("click",this._boundClickHandler)}_buttonClickHandler(e){this._handleButtonClick(e).catch(e=>console.error(e))}async _handleButtonClick(e){let{window:t,document:i}=this,s=e.target.closest("button, a");if(!s)return;let r=s.dataset.type||"",a=s.href||s.dataset.href||"",o=s.target||"",{submit:n}=s.dataset;if(n){try{await this._handleSubmit(s)}catch(e){console.error(e)}((e,t=!1)=>{if(e){if(t)return window.open(e);window.location.assign(e)}})(a,"_blank"===o)}if(this._trackConversion(s),"VIDEO"===r)return void this._handleVideoButton(s);if("CONTACT_US"===r)return void this._handleContactUsButton(s);if("SUBSCRIBE"===r)return void t.lpUI.showModal("modal-global-subscribe");if("MY_ACCOUNT"===r)return void t.lpUI.showModal("modal-global-my-account");if("SHARE_POPUP"===r){let t=s.querySelector(".share-popup");t&&(t.style.display="flex"),e.stopPropagation();return}if("MODAL_"===r.substring(0,6)){let e=r.substring(6);t.lpUI.showModal(`modal-${e}`);return}if(a?.startsWith("mailto:")){let e=a.substring(7);i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Email",eventValue:e})}else if(a?.startsWith("tel:")){let e=a.substring(4);i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Phone",eventValue:e})}}async _handleSubmit(e){let t=e.closest("form"),{window:i}=this;return t?await i.luxuryPresence.contactForms.submitForm(t):null}_getVimeoSrc(e){if(!e||!e.includes("vimeo.com")||e.length>2e3)return null;let t=e.match(/(?:(?:www\.)?vimeo\.com\/(?:showcase\/\d+(?:\/video\/|\?video[=/])|channels\/(?:\w+\/)?|groups\/(?:[^/]*)\/videos\/|)|player\.vimeo\.com\/video\/)(\d+)(?:(?:\?.*&*h=|\/)+([\d,a-f]+))?/);if(!t)return null;let[,i,s]=t,r=`https://player.vimeo.com/video/${i}?`;return s&&(r+=`h=${s}&`),r+="autoplay=1"}_handleVideoButton(e){let{document:t}=this,i=e.closest("section"),{src:s}=e.dataset,r="";if(s&&(s.includes("youtube.com")||s.includes("youtu.be"))&&!s.includes("youtube.com/embed")){let e=s.match(/(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v=)
1707)|youtu.be\/)([a-zA-Z0-9_-]{6,11})/);e&&(r=e[1])}let a=this._getVimeoSrc(s);if(r?s=`https://youtube.com/embed/${r}?autoplay=1&controls=0`:a&&(s=a),!s||!i)return;let o=s.endsWith(".mp4")||s.endsWith(".webm")||s.includes("cloudinary.com"),n=` 1708 <div id="modal-${i.id}" class="modal visible"> 1709 <div class="modal-content"> 1710 <div class="lightbox-video"> 1711 <div class="video-player"> 1712 <div class="embed-container"> 1713 ${o?`<video controls autoplay src="${s}"></video>`:`<iframe frameborder="0" allowfullscreen="1" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" width="100%" height="100%" src="${s}"></iframe>`} 1714 </div> 1715 </div> 1716 </div> 1717 </div> 1718 <button class="close lp-close" type="button" aria-label="close modal"><span class="lp-close-icon" aria-hidden="true"></span></button> 1719 </div> 1720 `;t.body.insertAdjacentHTML("beforeend",n);let l=t.getElementById(`modal-${i.id}`);l.querySelector(".close").addEventListener("click",()=>{l.remove()})}_handleContactUsButton(e){let{window:t,document:i}=this;i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"contact"}),t.lpUI.showModal("modal-global-contact-us",{scrollLock:!0})}_trackConversion(e){let{window:t,document:i}=this,{gtagConversionId:s,gtagConversionLabel:r,fbEventName:a}=e.dataset;if(s&&r){t.dataLayer&&t.dataLayer.length&&(t.dataLayer.some(e=>e.length&&"config"===e[0]&&e[1]===s)||i.sendGoogleTagManagerEvent("config",s));let e=`${s}/${r}`;i.sendGoogleTagManagerEvent("event","conversion",{send_to:e})}t.fbq&&a&&t.fbq("track",a,{})}}(A,window,document),x=new class extends i{constructor(e,t,i){super(e,t,i),this.validatedForms=[]}initialize(e={}){try{let{window:t,document:i}=this,{selector:s}=e,r=[];if(r=s?i.querySelectorAll(`${s} form[data-type="contact-form"]`):i.querySelectorAll('form[data-type="contact-form"]'),i.querySelectorAll('input[type="tel"]').length&&!t.libphonenumber&&t?.luxuryPresence?.libs){let{loadJs:e,jsLibsMap:i}=t.luxuryPresence.libs,{libphonenumber:s}=i;e(s.jsSrc,this.attachValidation.bind(this,r))}else this.attachValidation(r);this.validatedForms=this.validatedForms.concat(r)}catch(e){console.log(e)}}destroy(){this.validatedForms=[]}attachValidation(e){e.forEach(e=>{e.querySelectorAll("input, select, textarea").forEach(e=>{this.applyFieldValidation(e)})})}applyFieldValidation(e){"tel"===e.getAttribute("type")&&this._applyPhoneValidation(e)}_applyPhoneValidation(e){let{window:t}=this;if(t.libphonenumber){let i=t.libphonenumber.isValidPhoneNumber;e.addEventListener("keyup",function(){if(this.hasAttribute("required")||this.value.replace(/\s/g,"").length)try{let e=this.value;i(e,"US")?this.setCustomValidity(""):this.setCustomValidity("Please enter a valid phone number.")}catch(e){this.setCustomValidity("Please enter a valid phone number.")}else this.setCustomValidity("")})}}}(A,window,document),T=new class extends i{constructor(e,t,i){super(e,t,i),this.forms=[],this.homeValuationService=new n(e,t,i)}initialize(e={}){try{let{document:t}=this,{selector:i}=e,s=[];(s=i?t.querySelectorAll(`${i} form[data-type="contact-form"]`):t.querySelectorAll('form[data-type="contact-form"]')).forEach(e=>{this._attachSubmitHandler(e)}),this.forms=this.forms.concat(s)}catch(e){console.log(e)}}destroy(){this.forms=[]}submitForm(e){this._handleSubmit(null,e).catch(e=>console.error(e))}_attachValidation(e){let{window:t}=this;e.querySelectorAll("input, select, textarea").forEach(e=>{t.luxuryPresence.validation.applyFieldValidation(e)})}_attachSubmitHandler(e){e.addEventListener("submit",t=>this._handleSubmit(t,e))}_extractFormValues(e){let t=new FormData(e),i={},s=[],r=/^name(?:-\d+)?$/;return t.forEach((e,t)=>{if("string"==typeof e){let a=e.trim();r.test(t)&&a&&s.push(a);let o=i[t];i[t]=o?`${o} ${a}`:a}else i[t]=e}),s.length?i.name=s.join(" ").trim():!i.name&&i.firstName&&(i.name=i.firstName,i.lastName&&(i.name+=` ${i.lastName}`)),this._deriveNameParts(i)}_deriveNameParts(e){if(e.firstName||!e.name)return e;let t=e.name.indexOf(" ");return -1===t?{...e,firstName:e.name}:{...e,firstName:e.name.slice(0,t),lastName:e.lastName||e.name.slice(t+1).trim()}}_buildSubmissionData(e,t,i){let{window:s,config:r}=this,a=Object.keys(e).filter(e=>!c.includes(e)).reduce((t,i)=>(t[i]=e[i],t),{}),{pageId:o,companyId:n,websiteId:l,pageMeta:d}=r,u=s.localStorage.getItem("utm_vars")||"{}",h=s.localStorage.getItem("referrer")||"",p=this._getFormId(i);return{activity:{author_email:e.email,author_name:e.name,firstName:e.firstName||void 0,lastName:e.lastName||void 0,author_phone:e.phone||e.phoneNumber,activity_source:e.source||"CONTACT_INQUIRY",comments_attributes:[{text:e.message||void 0}],source_url:s.location.href,content:{...a,...JSON.parse(u)}},page:{pageId:o,companyId:n,websiteId:l,pageMeta:{...d,formId:p}},companyId:n,referrer:h,fields:t}}_handleSubmissionSuccess(e){let{window:t}=this,i=e.dataset.delay||2e3;e.classList.remove("loading"),e.classList.remove("error"),e.classList.add("success"),e.querySelectorAll(".success").forEach(e
1720=>e.classList.remove("hide")),e.dispatchEvent(new Event("formsubmitted")),setTimeout(()=>{t.lpUI.hideClosestModal(e),e.reset(),t.lpUI.sideMenuHide(),e.querySelectorAll(".success").forEach(e=>e.classList.add("hide")),e.classList.remove("success")},i)}async _handleSubmit(e,t){if(e&&e.preventDefault(),!t.classList.contains("loading")){this._hideSubmissionError(t),t.classList.remove("error"),t.classList.add("loading");try{let e=this._extractFormValues(t);if(e.middleName)return void t.classList.remove("loading");let i=this._getFields(t),s=this._buildSubmissionData(e,i,t);r(this.window,this.document);let a=await this._waitForLeadSubmit(e=>this._submitLeadRequest(s,e));if(this._sendGAEvent(s),a?.redirected)return void this._showRedirectPending(t);this._handleSubmissionSuccess(t)}catch(e){console.error("Form submission failed:",e),t.dispatchEvent(new Event("formsubmiterror")),t.classList.remove("loading"),t.classList.add("error"),e.userMessage?this._showSubmissionError(t,e.userMessage):this._showSubmissionError(t,"Something went wrong. Please try again.")}}}async _waitForLeadSubmit(e){let t,i={expired:!1,expiresAt:Date.now()+6e3},s=new Promise(e=>{t=setTimeout(()=>{i.expired=!0,e(null)},6e3)}),r=e(i).catch(e=>{if(a(i))return null;throw e});try{return await Promise.race([r,s])}finally{clearTimeout(t)}}_showRedirectPending(e){if(e.classList.add(d),e.querySelector(`.${d}__indicator`))return;let t=this.document.createElement("div");t.className=`${d}__indicator`,t.setAttribute("role","status"),t.setAttribute("aria-label","Loading"),t.innerHTML='<span class="lp-i lp-i--spinner lp-i--pulse" aria-hidden="true"></span>',e.appendChild(t)}_aliasUserWithEventBus(e){try{if(!this.window.eventBusProvider?.alias||!this.window.eventBusProvider?.isIdentified||!this.window.eventBusProvider?.getDistinctId||!this.window.LuxuryPresenceEventBus?.generateUUIDv5FromCompanyEmail)return;if(this.window.eventBusProvider.isIdentified())return void console.log("[EventBus] User already identified, skipping alias");let t=e.activity?.author_email,{companyId:i}=this.config;if(!t||!i)return void console.warn("[EventBus] Missing required data for user alias");let s=this.window.eventBusProvider.getDistinctId();if(!s)return void console.warn("[EventBus] No anonymous ID available for alias");let r=this.window.LuxuryPresenceEventBus.generateUUIDv5FromCompanyEmail(i,t);this.window.eventBusProvider.alias({anonId:s,canonicalId:r}),console.log("[EventBus] User aliased with canonical ID")}catch(e){console.error("[EventBus] User alias failed:",e)}}async _submitLeadRequest(e,t){let{config:i}=this;return(this._aliasUserWithEventBus(e),i.myhomeDashboardEnabled&&(e.activity?.activity_source==="HOME_VALUATION"||e.activity?.activity_source==="HOME_VALUE"))?this.homeValuationService._submitHomeValuationRequest({...e,deadline:t}):fetch(`${i.leadIngesterUrl}/api/v1/leads`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).then(e=>e.ok?e.json():e.json().then(e=>{throw e}))}_sendGAEvent(e){let{document:t}=this,i={hitType:"event",eventCategory:"button",eventAction:"click"};switch(e.activity.activity_source){case"NEWSLETTER_SIGNUP":i.eventLabel="Newsletter",t.sendGoogleTagManagerEvent("event","newsletter_signup");break;case"HOME_SEARCH":i.eventLabel="HomeSearch",t.sendGoogleTagManagerEvent("event","home_search");break;case"HOME_VALUE":case"HOME_VALUATION":i.eventLabel="HomeValue",t.sendGoogleTagManagerEvent("event","home_valuation");break;case"EBOOK":i.eventLabel="Ebook",t.sendGoogleTagManagerEvent("event","ebook_download");break;default:i={hitType:"pageview",page:"/thank-you"},t.sendGoogleTagManagerEvent("event","contact_inquiry")}t.sendGoogleAnalyticsEvent(i)}_getFields(e){let t=e.querySelectorAll("input, select, textarea"),i={};return t.forEach(t=>{let{id:s,name:r,type:a}=t;if(r===l)return!0;let o="";if(s){let i=e.querySelector(`label[for='${s}']`);i?o=i.textContent.trim():t.placeholder&&(o=t.placeholder.trim())}i[r]={label:o,type:t.tagName,inputType:"INPUT"===t.tagName?a:"text"}}),i}_getFormId(e){let t=e.closest("section[id^='section-'], footer[id], .modal[id^='modal-']");return t?.id?this._cleanFormId(t.id):""}_cleanFormId(e){for(let t of["section-","modal-"])if(e.startsWith(t))return e.substring(t.length);return e}_showSubmissionError(e,t){let i=e.querySelector(".submission-error-message");i||((i=this.document.createElement("div")).className="submission-error-message",i.setAttribute("role","alert"),e.appendChild(i)),i.textContent=t||"Something went wrong. Please try again.",i.style.display="block"}_hideSubmissionError(e){let t=e.querySelector(".submission-error-message");t&&(t.style.display="none")}}(A,window,document),k=new class extends i{constructor(e,t,i){super(e,t,i),this.retries=3,this.callbacks=[],this.id=`__googleMapsScriptId${Date.now()}`,this._apiKey="",this.reset()}set apiKey(e){this._apiKey=e,this.config.setGoogleMapsAPIKey(e)}get apiKey(){return this._apiKey}reset(){this.deleteScript(),this.done=!1,this.loading=!1,this.failed=!1,this.errors=[],this.onerrorEvent=null}destroy(){this.reset()}async getMapApiKey(){if(this.apiKey)return this.apiKey;let e=this._hadPreviousFailure(),t=!1;for(let i=1;i<=3;i+=1){let s=e&&!t;try{let e=await fetch(this._getMapKeyUrl(i,s));if(t=t||s,this._setFailureFlag(!1),!e.ok)throw Error(`Failed to fetch API key: ${e.status}`);let r=await e.text();if(!r)return"";return this.apiKey=r,this.apiKey}catch(e){console.error(e),i<3&&await this._delay(300*2**(i-1))}}return this._setFailureFlag(!0),""}_getMapKeyUrl(e,t){let i=[];e>1&&i.push(`attempt=${e}`),t&&i.push("recovered_after_failure=1");let s=i.length?`?${i.join("&")}`:"";return`${this._getBaseUrl()}/api/v1/map${s}`}_hadPreviousFailure(){try{return"1"===this.window.sessionStorage.getItem(u)}catch(e){return!1}}_setFailureFlag(e){try{e?this.window.sessionStorage.setItem(u,"1"):this.window.sessionStorage.removeItem(u)}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");
1720let t="https://maps.googleapis.com/maps/api/js";return t+`?callback=__googleMapsCallback&key=${e}&libraries=places`}async setScript(){let e;if(this.document.getElementById(this.id))return void this.callback();try{e=await this.createUrl()}catch(e){console.error(e),this.failed=!0,this.loading=!1,this.onerrorEvent=e,this.callback();return}let t=this.document.createElement("script");t.id=this.id,t.type="text/javascript",t.src=e,t.onerror=this.loadErrorCallback.bind(this),t.defer=!0,t.async=!0,this.document.head.appendChild(t)}loadErrorCallback(e){if(this.errors.push(e),this.errors.length<=this.retries){let e=this.errors.length*2**this.errors.length;console.log(`Failed to load Google Maps script, retrying in ${e} ms.`),setTimeout(()=>{this.deleteScript(),this.setScript().catch(e=>console.error(e))},e)}else this.failed=!0,this.onerrorEvent=e,this.callback()}deleteScript(){let e=this.document.getElementById(this.id);e&&e.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((e,t)=>{this.loadCallback(i=>{i?t(i):e()})})}loadCallback(e){this.callbacks.push(e),this.execute()}setCallback(){this.window.__googleMapsCallback=this.callback.bind(this)}resetIfRetryingFailed(){this.failed&&this.reset()}callback(){this.done=!0,this.loading=!1,this.callbacks.forEach(e=>{e(this.onerrorEvent)}),this.callbacks=[]}execute(){this.window.google&&this.window.google.maps&&this.window.google.maps.version&&this.callback(),this.resetIfRetryingFailed(),this.done?this.callback():this.loading||(this.loading=!0,this.setCallback(),this.setScript().catch(e=>console.error(e)))}_getBaseUrl(){let{isBuilder:e,websiteApiGatewayUrl:t}=this.config;return e?t:""}resizeStaticMapDimensions(e,t){if(e<=1024&&t<=1024)return{width:e,height:t};let i=Math.min(1024/e,1024/t);return{width:parseInt(e*i),height:parseInt(t*i)}}convertThemeToStaticApiUrl(e){return e.map(e=>{let t=e.stylers.reduce((e,t)=>{let i=t.visibility?`visibility:${t.visibility}`:"",s=t.color?`color:${t.color.replace("#","0x")}`:"",r=t.lightness?`lightness:${t.lightness}`:"";return`${e}|${i}${s}${r}`},""),i=e.elementType?`|element:${e.elementType}`:"";return`feature:${e.featureType}${i}${t}`})}async getMapApiSignedUrl(e){try{let t=await fetch(`${this._getBaseUrl()}/api/v1/map/signature?${e}`);if(!t.ok)throw Error("Failed to fetch signed URL");let{url:i}=await t.json();return i}catch(e){return console.error(e),""}}generateStaticMapUrl(e,t,i,s,r,a){let{width:o,height:n}=this.resizeStaticMapDimensions(r,a),l={center:`${e},${t}`,zoom:i,scale:2,size:`${o}x${n}`,key:this.apiKey};s&&(l.style=this.convertThemeToStaticApiUrl(s));let d=new URLSearchParams;return Object.entries(l).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>d.append(e,t.toString())):d.append(e,t.toString())}),`https://maps.googleapis.com/maps/api/staticmap?${d.toString()}`}async generateDigitallySignedStaticMapUrl({srcWidth:e,srcHeight:t,theme:i,...s}){let{width:r,height:a}=this.resizeStaticMapDimensions(e,t),o={...s,size:`${r}x${a}`};i&&(o.style=this.convertThemeToStaticApiUrl(i));let n=new URLSearchParams;Object.entries(o).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.append(e,t.toString())):n.append(e,t.toString())});let l=n.toString();try{return await this.getMapApiSignedUrl(l)}catch(e){return console.error(e),""}}}(A,window,document),C=new class extends i{destroy(){}updateQueryString(e,t,i){i||(i=this.window.location.href);let s=RegExp(`([?&])${e}=.*?(&|#|$)`,"i"),r="";null!=t&&(Array.isArray(t)?t.length&&(r=this.serializeArray(e,t)):"object"==typeof t?(s=RegExp(`([?&])${e}\\[[^=]*\\]=.*?(&|#|$)`,"i"),r=this.serializeObj(t,"",e)):r=`${e}=${encodeURIComponent(t)}`);let a=i.split("#"),o=a[0];if(s.test(i)){let e=o;for(r=r?`$1${r}$2`:"$1";s.test(e);)o=e.replace(s,r),e=e.replace(s,"$1");o=o.replace(/(&|\?)$/,"")}else if(r){let e=-1!==o.indexOf("?")?"&":"?";o+=`${e}${r}`}return void 0!==a[1]&&null!==a[1]&&(o+=`#${a[1]}`),o}getParameterByName(e,t){t||(t=this.window.location.href),e=e.replace(/[[\]]/g,"\\$&");let i=RegExp(`[?&]${e}(=([^&#]*)|&|#|$)`),s=Array.from(RegExp.prototype[Symbol.matchAll].call(i,t)).flat();if(!s.length){let i=RegExp(`[?&]${e}(\\[.*?\\])=(.*?)(?=&|#|$)`,"g");return s=Array.from(RegExp.prototype[Symbol.matchAll].call(i,t)).flat(),this._parseParamToObject(s,"advancedFilters"===e)}return s.length>3?s.reduce((e,t,i)=>((i+1)%3==0&&e.push(decodeURIComponent(t.replace(/\+/g," "))),e),[]):s[2]?decode
1720URIComponent(s[2].replace(/\+/g," ")):""}makePageKey(e){return e.replace("section-","").replace(/-/g,"")}makeParamKey(e,t){return e.global?e.urlKey:`${t}-${e.urlKey}`}deserializeParams(e,t){let i={},s=this.makePageKey(t),r=this.getParameterByName(s);return r&&(i.page=parseInt(r)),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,s),r=this.getParameterByName(t);if("int"===e.type)isFinite(r=parseInt(r))||(r=null);else if("bool"===e.type||"boolean"===e.type)r="true"===r||"false"!==r&&null;else if("json"===e.type)try{r=JSON.parse(r)}catch(e){}i[e.formKey||e.param]=r}),i}serializeParams(e,t,i){let s=this.window.location.href,r=this.makePageKey(t);return s=this.updateQueryString(r,i.page,s),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,r),a=i[e.formKey||e.param];"json"===e.type&&null!=a&&(a=JSON.stringify(a)),s=this.updateQueryString(t,a,s)}),s}formatSliderAtom(e,t=""){return t+(Number.isInteger(e)?e:e.toFixed(2))}formatSliderValue(e,t="",i=""){return e<1e3?this.formatSliderAtom(e,t):e<1e6?`${this.formatSliderAtom(e/1e3,t)}${i}K`:`${this.formatSliderAtom(e/1e6,t)}${i}M`}formatSliderPriceRange(e,t,i,s){return t.min===e&&0!==e?`${s.lowPrefix}${this.formatSliderValue(e,i," ")}`:t.max===e?`${this.formatSliderValue(e,i," ")}${s.highSuffix}`:`${this.formatSliderValue(e,i," ")}`}formatSliderAreaRange(e,t,i,s){return t.min===e&&0!==e?`${s.lowPrefix}${this.formatSliderValue(e)} ${i}`:t.max===e?`${this.formatSliderValue(e)}${s.highSuffix} ${i}`:`${this.formatSliderValue(e)} ${i}`}getSearchFormValues(e){let{queryElement:t,priceSliderElement:i,areaSliderElement:s,neighborhoodSelect:r}=e,a={};if(t&&(a.search=t.value||null),i){let e=i.value.split(";"),t=parseInt(i.dataset.min),s=parseInt(i.dataset.max),r=parseInt(e[0]),o=parseInt(e[1]);a.priceMin=r!==t?r:null,a.priceMax=o!==s?o:null}if(s){let e=s.value.split(";"),t=parseInt(s.dataset.min),i=parseInt(s.dataset.max),r=parseInt(e[0]),o=parseInt(e[1]);a.areaMin=r!==t?r:null,a.areaMax=o!==i?o:null}return r&&(a.neighborhoodId=r.value||null),a}serializeObj(e,t="",i=""){let s=[];for(let r in e)if(e.hasOwnProperty(r)){let a,o=e[r];if(i){let e=t?`[${t}][${r}]`:`[${r}]`;a=`${i}${e}`}else a=t?`${t}[${r}]`:r;null!==o&&Array.isArray(o)?o.length&&s.push(this.serializeArray(a,o)):null!==o&&"object"==typeof o?s.push(this.serializeObj(o,a)):s.push(`${a}=${encodeURIComponent(o)}`)}return s.join("&")}serializeArray(e,t,i=""){let s=[];return t.forEach(t=>{let r=i?`${i}${e}`:e;s.push(`${r}=${encodeURIComponent(t)}`)}),s.join("&")}_parseParamToObject(e,t=!1){if(!e.length)return null;let i={};for(let s=0;s<e.length;s++)if((s+1)%3==0){let r=decodeURIComponent(e[s].replace(/\+/g," ")),a=e[s-1];Object.assign(i,this._setObjectPath(a,r,i,t))}return i}_setObjectPath(e,t,i,s=!1){let r=e.split(/[\[\]]/).filter(Boolean),a=["in","nin","btw","ciin","cinin"],o={},n=o,l=((e,t,i)=>{if(!t)return;let s=(Array.isArray(t)?t:t.match(/([^[.\]])+/g)).reduce((e,t)=>e&&e[t],e);return void 0===s?i:s})(i,r.join("."));return r.forEach((e,o)=>{o===r.length-1?l?n[e]=Array.isArray(l)?[...l,t]:[l,t]:n[e]=s&&a.includes(e)?[t]:t:(n[e]=i[e]?i[e]:{},n=n[e])}),o}}(A,window,document),M=new class extends i{constructor(e,t,i){super(e,t,i),this._createLightbox=this._createLightbox.bind(this),this.expandSliders=[]}initialize(e={}){try{let{document:e}=this,t=e.querySelectorAll(".has-mobile-expand");t.forEach(e=>{this._addExpandButton(e)}),this.expandSliders=this.expandSliders.concat(t)}catch(e){console.log(e)}}destroy(){let{document:e}=this;e.querySelectorAll(".lp-expand-btn, .lp-expand-btn-wrapper").forEach(e=>e.remove()),this.expandSliders=[]}_addExpandButton(e){let{document:t}=this,i=e.closest("section[id]"),s=e.dataset.append,r=i.querySelector(".lp-expand-btn");if(!r)if((r=t.createElement("button")).className="lp-expand-btn",r.setAttribute("aria-label","Open a lightbox"),r.innerHTML='<span class="lp-i lp-i--expand-alt" aria-hidden="true"></span>',s){let e=i.querySelector(s);e&&e.appendChild(r)}else{let i=t.createElement("div");i.className="lp-expand-btn-wrapper",i.style.position="relative",i.appendChild(r),e.parentNode.insertBefore(i,e.nextSibling)}r.addEventListener("click",()=>{this._createLightbox({slider:e,section:i})})}_createLightbox({slider:e,section:t,initialIndex:i}){let{window:s,document:r}=this,a=`lightbox-for-${t?.id}`,o=s.$&&s.$.fn.slick,n=o&&e.slick,l="function"==typeof s.Splide,d=e.classList.contains("is-initialized")&&e.classList.contains("splide");function c(){let t=r.createElement("div");t.id=a,t.className="lp-lightbox",t.setAttribute("tabindex","-1"),t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.innerHTML=` 1721 <button class="lp-lightbox__close" aria-label="close modal"></button> 1722 <div class="lp-lightbox__content"> 1723 <div class="lp-lightbox__carousel splide" role="group" aria-label="Image Gallery"> 1724 <div class="splide__arrows"> 1725 <button class="splide__arrow splide__arrow--prev lp-lightbox-arrow lp-lightbox-arrow--prev"></button> 1726 <button class="splide__arrow splide__arrow--next lp-lightbox-arrow lp-lightbox-arrow--next"></button> 1727 </div> 1728 <div class="splide__track"> 1729 <ul class="splide__list"></ul> 1730 </div> 1731 </div> 1732 </div> 1733 `,"function"==typeof s.lpUI.requestScrollLock?s.lpUI.requestScrollLock(a):r.body.style.overflow="hidden",r.body.appendChild(t);let o=t.querySelector(".lp-lightbox__carousel"),n=o.querySelector(".splide__list");t.classList.add("show"),(d?e.querySelectorAll(".splide__slide:not(.splide__slide--clone) img"):e.querySelectorAll("img")).forEac
1733h(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let i=r.createElement("li");i.className="lp-lightbox__slide splide__slide",i.appendChild(t),n.appendChild(i)});let l=new s.Splide(o,{rewind:!0,arrows:!0,arrowPath:"",type:"loop",clones:1,pagination:!1,perPage:1,perMove:1});l.mount(),void 0!==i&&i>=0&&l.go(i),setTimeout(()=>{t.focus()},100);let c=e=>{if(!t.classList.contains("show"))return;let i=t.querySelector(".splide__arrow--prev"),s=t.querySelector(".splide__arrow--next"),r=t.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&i?(e.preventDefault(),i.click()):"ArrowRight"===e.key&&s?(e.preventDefault(),s.click()):"Escape"===e.key&&r&&(e.preventDefault(),r.click())};r.addEventListener("keydown",c),t.querySelector(".lp-lightbox__close").addEventListener("click",()=>{r.removeEventListener("keydown",c),t.classList.remove("show"),l&&l.destroy(),"function"==typeof s.lpUI.releaseScrollLock?s.lpUI.releaseScrollLock(a):r.body.style.overflow="",t.remove()})}if("function"==typeof s.lpUI.requestScrollLock?s.lpUI.requestScrollLock(a):r.body.style.overflow="hidden",o&&!d){let t,i,o,l,d;i={arrows:!0,dots:!1,infinite:!0,draggable:!0,prevArrow:'<button type="button" class="lp-lightbox-arrow--prev lp-lightbox-arrow" aria-label="Previous"></button>',nextArrow:'<button type="button" class="lp-lightbox-arrow--next lp-lightbox-arrow" aria-label="Next"></button>'},(o=r.createElement("div")).id=a,o.className="lp-lightbox",o.setAttribute("tabindex","-1"),o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.innerHTML=` 1734 <button class="lp-lightbox__close" aria-label="close modal"></button> 1735 <div class="lp-lightbox__content"> 1736 <div class="lp-lightbox__carousel"></div> 1737 </div> 1738 `,r.body.appendChild(o),l=o.querySelector(".lp-lightbox__carousel"),o.classList.add("show"),n?(t=e.slick.$slides.find("img"),i.initialSlide=e.slick?.currentSlide||0,t.each(function(){s.$(".lp-lightbox__carousel").append(s.$(this).clone(!1).removeAttr("style").wrap('<div class="lp-lightbox__slide"></div>').parent())})):(t=e.querySelectorAll("img")).forEach(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let i=r.createElement("div");i.className="lp-lightbox__slide",i.appendChild(t),l.appendChild(i)}),s.$(l).slick(i),setTimeout(()=>{o.focus()},100),d=e=>{if(!o.classList.contains("show"))return;let t=o.querySelector(".lp-lightbox-arrow--prev"),i=o.querySelector(".lp-lightbox-arrow--next"),s=o.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&t?(e.preventDefault(),t.click()):"ArrowRight"===e.key&&i?(e.preventDefault(),i.click()):"Escape"===e.key&&s&&(e.preventDefault(),s.click())},r.addEventListener("keydown",d),o.querySelector(".lp-lightbox__close").addEventListener("click",()=>{r.removeEventListener("keydown",d),o.classList.remove("show");let t=l?.slick?s.$(l).slick("slickCurrentSlide"):0;l?.slick&&s.$(l).slick("unslick"),n&&s.$(e).slick("slickGoTo",t),"function"==typeof s.lpUI.releaseScrollLock?s.lpUI.releaseScrollLock(a):r.body.style.overflow="",o.remove()})}else l?c():(s.luxuryPresence.libs.loadCss(s.luxuryPresence.libs.jsLibsMap.splide.cssSrc),s.luxuryPresence.libs.loadJs(s.luxuryPresence.libs.jsLibsMap.splide.jsSrc,()=>{c(),s.luxuryPresence.libs.jsLibsMap.splide.isLoaded=!0}))}}(A,window,document),P=new class extends i{destroy(){this.window.divolte||(this.window.divolteLp=function(){(this.window.divolteLp.q=this.window.divolteLp.q||[]).push(arguments)})}initialize(e={}){let{divolteServiceUrl:t}=this.config;t&&!this.window.divolte&&this.loadScript()}loadScript(){let{divolteServiceUrl:e}=this.config,t=this.document.createElement("script");t.id="divolte-script",t.type="text/javascript",t.defer=!0,t.async=!0,t.src=`${e}/divolte.js`,this.document.head.appendChild(t),t.addEventListener("load",this.executeQueue.bind(this))}executeQueue(){(this.window.divolteLp.q||[]).forEach(([e,t])=>{this[e](t)}),this.window.divolteLp=this.divolteLp.bind(this)}divolteLp(e,t){try{this[e](t)}catch(e){console.log(e)}}sendLpEvent(e,t){if(!e.includes("pageView"))return void console.log(`${e} IS NOT SUPPORTED`);let{companyId:i,templateId:s,websiteId:r,pageId:a,shareId:o,pageMeta:n}=this.config;this.window.divolte.signal(e,Object.assign({companyId:i,templateId:s,websiteId:r,pageId:a,shareId:o,pageMeta:n},t))}sendLpPageView(){this.sendLpEvent("pageView",{})}}(A,window,document),U=new class extends i{constructor(e,t,i){super(e,t,i)}initialize(e={}){(void 0!==e.enabled?e.enabled:this.config.eventBus?.enabled)&&this.config.eventBus?.apiKey&&this.config.eventBus?.url&&this.loadScript()}loadScript(){let{eventBusUrl:e}=this.config,t=this.document.createElement("script");t.id="posthog-script",t.type="text/javascript",t.defer=!0,t.async=!0,t.src=`${e}/v2.8.0/event-bus-js.js`,this.document.head.appendChild(t),t.addEventListener("load",this.executeQueue.bind(this))}executeQueue(){this.window.LuxuryPresenceEventBus&&(this.window.eventBusProvider=this.window.LuxuryPresenceEventBus.createEventBusProvider({apiKey:this.config.eventBus.apiKey,host:this.config.eventBus.url,defaultSource:"frontend://website-render-engine"}
1738)),(this.window.eventBusLp.q||[]).forEach(([e,t])=>{this[e](t)}),this.window.eventBusLp=this.eventBusLp.bind(this)}destroy(){if(!this.window.eventBusProvider){this.window.eventBusLp=function(){(this.window.eventBusLp.q=this.window.eventBusLp.q||[]).push(arguments)};return}this.window.eventBusProvider.shutdown()}sendLpEvent(e,t){if("user.activity.page.viewed"!==e)return void console.log(`${e} IS NOT SUPPORTED`);if(!this.window.eventBusProvider)return;let{companyId:i}=this.config;try{this.window.eventBusProvider.capture(e,{company:i,data:{}})}catch(e){console.log("EventBus capture error:",e)}}eventBusLp(e,t){try{this[e](t)}catch(e){console.log(e)}}sendLpPageView(){this.sendLpEvent("user.activity.page.viewed",{})}}(A,window,document),N=new class extends i{constructor(e,t,i){super(e,t,i),this.successListeners=[],this._listenToMessages=this._listenToMessages.bind(this),this._listenToOneTapMessage=this._listenToOneTapMessage.bind(this)}initialize(e={}){try{e.googleSignOnEnabled&&!e.iframe&&this._renderGoogleOneTap(),this.document.querySelectorAll('div[data-signin-type="google-sign-in"]').forEach(e=>this._convertGoogleSignIn(e)),this.document.querySelectorAll('div[data-signin-type="facebook-sign-in"]').forEach(e=>this._convertFacebookSignIn(e))}catch(e){console.log(e)}}destroy(){this.successListeners.forEach(e=>{this.window.removeEventListener("message",this._listenToMessages),this.window.removeEventListener("message",this._listenToOneTapMessage),this.window.removeEventListener(h,this.window[e])})}_renderGoogleOneTap(){if(!this._isGoogleOneTapOnCooldown()){let e=this.document.createElement("div");google.accounts.id.initializeIntermediate({src:this._buildUrlAndCopyAttributes(e,e,"googleOneTap")}),this.window.localStorage.removeItem("googleOneTapExpiration"),this.window.addEventListener("message",this._listenToOneTapMessage)}}_listenToOneTapMessage(e){let t="show_intermediate_iframe",{buyerSellerServiceUrl:i}=this.config,{data:s,origin:r}=e,{type:a,height:o,event:n,source:l,token:d}=s;if(a===t||"hide_intermediate_iframe"===a){let e=this.document.getElementById("onetap_google_intermediate_iframe");e&&(e.style.height=o,e.style.display=a===t?"unset":"none")}r===i&&"GOOGLE_SIGN_ON"===l&&("success"===n?(this._setExpirationLsItem(864e5),this._handleQualifyingQuestionsModal(d)):"cancel"===n&&this._setExpirationLsItem(72e5))}_setExpirationLsItem(e){let t=new Date().getTime()+e;this.window.localStorage.setItem("googleOneTapExpiration",t)}_isGoogleOneTapOnCooldown(){return Number(this.window.localStorage.getItem("googleOneTapExpiration"))>new Date().getTime()}_convertGoogleSignIn(e){this._replaceWithIframe("googleSignIn",e)}_convertFacebookSignIn(e){this._replaceWithIframe("facebookSignIn",e)}_replaceWithIframe(e,t){this._attachSuccessCallback(t);let i=this.document.createElement("iframe");i.src=this._buildUrlAndCopyAttributes(t,i,e),i.dataset.isSocialOauthButton=!0,t.replaceWith(i)}_listenToMessages(e){let{buyerSellerServiceUrl:t}=this.config;if(e.origin===t&&"success"===e.data.event){let e=new Event(h);this.window.dispatchEvent(e),r(this.window,this.document),this.successListeners.forEach(t=>{this.window[t]?this.window[t](e):console.error(`Callback function ${t} not found on window object`)}),this.document.documentElement.classList.add("is-login-success")}}_attachSuccessCallback(e){this.window.addEventListener("message",this._listenToMessages);let t=e.dataset.onSuccessFunctionName;t&&this.successListeners.push(t)}_buildUrlAndCopyAttributes(e,t,i){let{buyerSellerServiceUrl:s,companyId:r,websiteId:a,pageId:o,pageMeta:n}=this.config,{location:l}=this.window,d=l.origin+l.pathname,c=new URL(`${s}/buttons/${i}`),u=this.window.localStorage.getItem("utm_vars"),h=this.window.localStorage.getItem("referrer");c.searchParams.append("companyId",r),c.searchParams.append("websiteId",a),c.searchParams.append("pageId",o),c.searchParams.append("sourceUrl",d),c.searchParams.append("pageMeta",JSON.stringify(n)),u&&c.searchParams.append("utm",u),h&&c.searchParams.append("referrer",h);let p=["data-size","data-width","data-text","data-button-type","data-shape","data-layout","data-max-rows","data-use-continue-as","data-type","data-theme","data-logo_alignment","data-locale"];
1738return Array.from(e.attributes).forEach(e=>{p.includes(e.nodeName)?c.searchParams.append(e.nodeName,e.nodeValue):t.setAttribute("id"===e.nodeName?"data-id":e.nodeName,e.nodeValue)}),c.toString()}_decodeToken(e){try{let t=e.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),i=4-t.length%4,s=4===i?t:t+"=".repeat(i);return JSON.parse(atob(s))}catch(e){return null}}_handleQualifyingQuestionsModal(e){if(e&&this.window.luxuryPresence&&this.window.luxuryPresence.qualifyingQuestionsModal){let t=this._decodeToken(e);t&&t.email&&this.window.luxuryPresence.qualifyingQuestionsModal.showModal(t.email,"Google Sign On")}}}(A,window,document),R=new class extends i{constructor(e,t,i){super(e,t,i),this.showModal=this.showModal.bind(this),this.hasModalBeenSubmitted=this.hasModalBeenSubmitted.bind(this),this.modalId="qualifying-questions-modal",this.cookieKey="qualifyingQuestionsModalSubmitted",this.qualifyingQuestionsModalEnabled=!0,this.eventListeners=[],this.timeouts=[]}initialize(e={}){this.qualifyingQuestionsModalEnabled=e.qualifyingQuestionsModalEnabled??this.qualifyingQuestionsModalEnabled,this.qualifyingQuestionsModalEnabled&&this.attachModalCloseListeners()}destroy(){this.eventListeners.forEach(({element:e,event:t,handler:i})=>{e&&e.removeEventListener&&e.removeEventListener(t,i)}),this.timeouts.forEach(e=>{clearTimeout(e)}),this.restoreBodyScroll(),this.eventListeners=[],this.timeouts=[]}hasModalBeenSubmitted(){return"true"===this.getCookie(this.cookieKey)}setModalSubmittedCookie(){this.setCookie(this.cookieKey,"true",365)}showModal(e,t){!this.qualifyingQuestionsModalEnabled||this.hasModalBeenSubmitted()||(this.updateEmailValue(e),this.updateTriggerSourceValue(t),this.showModalElement())}getModalElement(){let e=this.document.getElementById(this.modalId);return e||console.error("Modal element not found:",this.modalId),e}updateEmailValue(e){let t=this.getModalElement();if(!t)return;let i=t.querySelector('input[name="email"]');i&&"string"==typeof e&&(i.value=e)}updateTriggerSourceValue(e){let t=this.getModalElement();if(!t)return;let i=t.querySelector(`#${this.modalId}-triggerSource`);i&&"string"==typeof e&&(i.value=e)}showModalElement(){let e=this.getModalElement();e&&(e.style.display="flex",this.blockBodyScroll())}getCookie(e){let t=`; ${this.document.cookie}`.split(`; ${e}=`);return 2===t.length?decodeURIComponent(t.pop().split(";").shift()):null}setCookie(e,t,i){let s="";if(i){let e=new Date;e.setTime(e.getTime()+864e5*i),s=`; expires=${e.toUTCString()}`}let r="; path=/; SameSite=Lax";this.window&&this.window.location&&"https:"===this.window.location.protocol&&(r+="; Secure"),this.document.cookie=`${e}=${encodeURIComponent(t||"")}${s}${r}`}blockBodyScroll(){this._prevOverflow=this.document.body.style.overflow,this.document.body.style.overflow="hidden"}restoreBodyScroll(){this.document.body.style.overflow=this._prevOverflow||"",this._prevOverflow=null}attachModalCloseListeners(){let e=this.getModalElement();if(!e)return;let t=this.document.getElementById(`${this.modalId}-form`);if(t){let i=()=>{this.setModalSubmittedCookie();let t=setTimeout(()=>{e.style.display="none",this.restoreBodyScroll()},100);this.timeouts.push(t)};t.addEventListener("formsubmitted",i),this.eventListeners.push({element:t,event:"formsubmitted",handler:i})}let i=e.querySelector('[data-dismiss="modal"]');if(i){let t=()=>{e.style.display="none",this.restoreBodyScroll()};i.addEventListener("click",t),this.eventListeners.push({element:i,event:"click",handler:t})}let s=t=>{(t.target===e||t.target.id===this.modalId)&&(e.style.display="none",this.restoreBodyScroll())};e.addEventListener("click",s),this.eventListeners.push({element:e,event:"click",handler:s})}}(A,window,document),B=new class extends i{constructor(e,t,i){super(e,t,i),this.isValidating=!1,this.lastValidationResult=null,this.lastValidationTime=null,this.validationCacheDuration=3e5}destroy(){this.isValidating=!1,this.lastValidationResult=null,this.lastValidationTime=null}async validateSession(e={}){let{useCache:t=!0}=e;if(t&&null!==this.lastValidationResult&&this.lastValidationTime&&Date.now()-this.lastValidationTime<this.validationCacheDuration)return this.lastValidationResult;if(this.isValidating)return null!==this.lastValidationResult&&this.lastValidationResult;this.isValidating=!0;let i=` 1739 query { 1740 validSession { 1741 success 1742 } 1743 } 1744 `;try{let e=await this.window.fetch("/graphql",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({query:i})});if(!e.ok)return console.error("SessionController: HTTP error during session validation",e.status),this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1;let t=await e.json();if(t.errors)return this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1;let s=t.data?.validSession?.success===!0;return this.lastValidationResult=s,this.lastValidationTime=Date.now(),s}catch(e){return console.error("SessionController: Error validating session",e),this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1}finally{this.isValidating=!1}}clearCache(){this.lastValidationResult=null,this.lastValidationTime=null}}(A,window,document),O=new class extends i{constructor(e,t,i){super(e,t,i),this.consentListener=null,this.eventName=null}destroy(){this.consentListener&&this.eventName&&(this.document.removeEventListener(this.eventName,this.consentListener),this.consentListener=null)}loadScript(){this.document.getElementById("posthog-script")||this.window.luxuryPresence.eventBus.initialize({enabled:this.config.eventBus?.enabled}),this.document.getElementById("divolte-script")||this.window.luxuryPresence.divolte.initialize({})}removeScripts(){this.window.luxuryPresence?.eventBus?.destroy?.(),this.window.luxuryPresence?.divolte?.destroy?.(),this.document.getElementById("posthog-script")?.remove(),this.document.getElementById("divolte-script")?.remove()}async initialize(e={}){let t=p[e.provider];if(!t)return;this.eventName=t.eventName;let i=await this.window.luxuryPresence.session.validateSession();(t.hasAnalyticsConsent(this.document,this.window)||i)&&this.loadScript(),this.consentListener||(this.consentListener=e=>{t.isAnalyticsAccepted(e.detail)?this.loadScript():this.removeScripts()},this.document.addEventListener(t.eventName,this.consentListener))}}(A,window,document),V=new class extends i{destroy(){}transformVariables(e,t){let i;return g(i={...t},["testimonialId"]),y(i,["testimonialId"],"testimonialIds"),0===i.limit&&delete i.limit,(void 0===i.limit||null===i.limit)&&(("testimonials"===e||"testimonialsCount"===e)&&(i.limit=50),("agents"===e||"agentsCount"===e||"neighborhoods"===e||"neighborhoodsCount"===e||"posts"===e||"postsCount"===e||"pressReleases"===e||"pressReleasesCount"===e)&&(i.limit=100)),!function(e){let{sortDir:t}=e;"string"==typeof t&&t.includes("_")&&(e.sortDir=t.replace(/_/g," "))}(i),!function(e,t){switch(t){case"agent":break;case"testimonials":case"testimonialsCount":g(e,["testimonialIds"]);break;case"agents":case"agentsCount":g(e,["officeId","teamId","developmentId","agentIds","tags"]),y(e,["officeId"],"officeIds"),y(e,["teamId"],"teamIds"),y(e,["developmentId"],"developmentIds");break;case"neighborhoods":case"neighborhoodsCount":g(e,["neighborhoodIds","neighborhoodId"]),y(e,["neighborhoodIds","neighborhoodId"],"neighborhoodId");break;case"developments":case"developmentsCount":g(e,["agentId","neighborhoodIds","neighborhoodId","developmentIds","tag"]),e.agentId&&Array.isArray(e.agentId)&&([e.agentId]=e.agentId),y(e,["neighborhoodIds","neighborhoodId"],"neighborhoodIds");break;case"properties":case"propertiesCount":g(e,["statusIds","statusId","propertyTypeIds","propertyTypeId","propertyId","networkId","propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","
1744spaceTypeIds","addressState","addressCity","backfillProviders","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"]),["propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","spaceTypeIds","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"].forEach(t=>y(e,[t],t)),y(e,["statusIds","statusId"],"propertyStatusId"),e.excludeStatusId&&(e.excludePropertyStatusId=e.excludeStatusId,delete e.excludeStatusId),y(e,["propertyTypeIds","propertyTypeId"],"propertyTypeId"),y(e,["networkId"],"networkId"),y(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":g(e,["categoryIds","categoryId","neighborhoodId"]),void 0!==e.order&&(e.sort=e.order,delete e.order),y(e,["categoryIds","categoryId"],"categoryId");break;case"postCategories":g(e,["categoryId","categoryIds"]),void 0!==e.order&&(e.sort=e.order,delete e.order),y(e,["categoryIds","categoryId"],"categoryId");break;case"pressReleases":case"pressReleasesCount":g(e,["pressReleaseId","categories","propertyId","developmentId","agentId","teamId"]),y(e,["pressReleaseId"],"pressReleaseIds");break;case"offices":case"officesCount":g(e,["officeId","officeIds","tags"]),y(e,["officeId"],"officeIds");break;case"teams":case"teamsCount":g(e,["teamId","teamIds"]),y(e,["teamId"],"teamIds");break;case"pois":g(e,["categories"]),Array.isArray(e.categories)&&(e.categories=e.categories.map(e=>e.toLowerCase())),"string"==typeof e.sortBy&&(e.sortBy=e.sortBy.toLowerCase())}}(i,e),i}transformResponse(e,t){return"agent"===e?E(t,f):"agents"===e||"agentsCount"===e?I(t,w):"neighborhood"===e?E(t,v):"neighborhoods"===e||"neighborhoodsCount"===e?I(t,b):"development"===e?E(t,S):"developments"===e||"developmentsCount"===e?I(t,_):t}transformPage(e){return{items:e&&e.items||[],count:e&&e.total||0}}}(A,window,document);function D(e,t){if(window.luxuryPresence[e])try{window.luxuryPresence[e].destroy()}catch(e){console.log(e)}window.luxuryPresence[e]=t}D("config",A),D("modals",L),D("buttons",$),D("validation",x),D("contactForms",T),D("mapApiLoader",k),D("pagination",C),D("expandSliders",M),D("divolte",P),D("eventBus",U),D("oauth",N),D("qualifyingQuestionsModal",R),D("session",B),D("consent",O),D("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(){}}),D("routerApi",V),window.luxuryPresence.formatSliderPriceRange=C.formatSliderPriceRange.bind(C),window.luxuryPresence.formatSliderAreaRange=C.formatSliderAreaRange.bind(C),window.luxuryPresence.getSearchFormValues=C.getSearchFormValues.bind(C),window.luxuryPresence.handlebarsHelpersFactory=function(t){var i;return((i=e)&&i.__esModule?i.default:i)(t,{isEqual:(e,t)=>e==t})}})(); 1745//# sourceMappingURL=lp-sdk.js.map 1746 1747 </script>
1747 1748 1749
1749<script> 1750 var lpGlobalInitialized = false; 1751 1752 function lpGlobalInit () { 1753 if (lpGlobalInitialized) { 1754 return; 1755 } 1756 lpGlobalInitialized = true; 1757 // Initialize wow animation plugin only according to turbolinks 1758 var wow; 1759 if (window.WOW) { 1760 wow = new WOW({ 1761 animateClass: 'animated', 1762 offset: wowOffset, 1763 live: false, 1764 callback: function(box) {} 1765 }); 1766 } 1767 // Initialize handlebar helpers only once 1768 function handlebarsInit() { 1769 if (!window.Handlebars) { 1770 return; 1771 } 1772 HandlebarsIntl.registerWith(Handlebars); 1773 Handlebars.registerHelper(window.luxuryPresence.handlebarsHelpersFactory(Handlebars)); 1774 } 1775 1776 handlebarsInit(); 1777 1778 /* Initialize Luxury Presence SDK */ 1779 try { 1780 window.luxuryPresence.config.setCompany("8853c562-273b-4c58-a71b-9ef5b2c3920c", {}); 1781 window.luxuryPresence.config.setWebsite("96b2125f-da36-451f-8701-3e7494eee5ae", { 1782 myhomeDashboardEnabled: true, 1783 mlsEnabled: true, 1784 hstValuationRedirectEnabled: true, 1785 hvStepTwoCaptureEnabled: false 1786 }); 1787 const url = new URL(window.location.href); 1788 const shareId = url.searchParams.get('shareId'); 1789 window.luxuryPresence.config.setPage("b06ec637-ebf2-4f1e-87e3-91f9e0ad625b", { 1790 sourceResource: "", 1791 pageElementId: "", 1792 pageQueryVariables: {}, 1793 shareId: "", 1794 }); 1795 window.luxuryPresence.config.setWebsiteApiGatewayUrl("https://wgw.luxurypresence.com", {}); 1796 window.luxuryPresence.config.setBuyerSellerServiceUrl("https://bss.luxurypresence.com", {}); 1797 window.luxuryPresence.config.setDivolteServiceUrl("https://t.luxurypresence.com", {}); 1798 window.luxuryPresence.config.setEventBusUrl("https://cdn.luxurypresence.com/scripts/event-bus-js", {}); 1799 window.luxuryPresence.config.setEventBus({ 1800 enabled: true, 1801 apiKey: "phc_PMYT31xlmXBaTCwpIRx1v6RrpLVZIuP47N3mOT6KLnr", 1802 url: "https://p.luxurypresence.com", 1803 }); 1804 window.luxuryPresence.config.setTemplateId("dbfbedc7-c7e2-4812-86ee-0ee198862c21", {}); 1805 window.luxuryPresence.config.setLeadIngesterUrl("https://leads.luxurypresence.com", {}); 1806 window.luxuryPresence.buttons.initialize({}); 1807 window.luxuryPresence.consent.initialize({ provider: 'lp-consent' }); 1808 window.luxuryPresence.contactForms.initialize({}); 1809 window.luxuryPresence.validation.initialize({}); 1810 window.luxuryPresence.expandSliders.initialize({}); 1811 window.luxuryPresence.oauth.initialize({ googleSignOnEnabled: true, iframe: false }); 1812 window.luxuryPresence.qualifyingQuestionsModal.initialize({ qualifyingQuestionsModalEnabled: true }); 1813 } catch (e) { 1814 console.log(e); 1815 } 1816 1817 /* Inject Section Specific Javascript */ 1818 try { 1819(function init(sectionDomId) { 1820 const disclaimerLabel = document.querySelector('#' + sectionDomId + ' .lp-tcr-content'); 1821 if (disclaimerLabel) { 1822 const input = disclaimerLabel.querySelector('input'); 1823 if (input) { 1824 input.setAttribute('id', `${sectionDomId}-termsAccepted`); 1825 input.value = 'true'; 1826 const label = document.createElement('label'); 1827 label.setAttribute('for', `${sectionDomId}-termsAccepted`); 1828 label.classList.add('lp-visually-hidden'); 1829 label.textContent = 'Opt in/Disclaimer Consent:'; 1830 disclaimerLabel.prepend(label); 1831 } 1832 } 1833 function setHttp(link) { 1834 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 1835 link = 'https://' + link; 1836 } 1837 return link; 1838 } 1839 const socialLinks = document.querySelectorAll('#' + sectionDomId + ' .socials__link, #' + sectionDomId + ' .lp-socials__link'); 1840 socialLinks.forEach(linkElement => { 1841 const href = linkElement.getAttribute('href'); 1842 if (href) { 1843 linkElement.setAttribute('href', setHttp(href)); 1844 } 1845 }); 1846 const redirectLink = $('#' + sectionDomId + ' .redirect-link'); 1847 if (redirectLink.length) { 1848 const rawHref = setHttp(redirectLink.attr('href')); 1849 let formEvent; 1850 if (rawHref) { 1851 formEvent = redirectLink.data('redirect') ? 'formsubmitted' : 'reset'; 1852 $('#' + sectionDomId + ' .contact-form').find('form').on(formEvent, function () { 1853 redirectLink.attr('href', rawHref); 1854 redirectLink[0].click(); 1855 }); 1856 } 1857 } 1858})('modal-global-contact-us'); 1859} catch(e) { 1860console.log(e); 1861} 1862 1863 try { 1864(function init(sectionDomId) { 1865 const $section = $('#' + sectionDomId); 1866 const $hamburger = $section.find('.hamburger-component'); 1867 function onSideMenuShow() { 1868 if (!$hamburger.hasClass('active')) { 1869 $hamburger.addClass('active'); 1870 } 1871 } 1872 function onSideMenuHide() { 1873 $hamburger.removeClass('active'); 1874 } 1875 const $window = $(window); 1876 $window.on('lpui-sidemenu-show.lpui-auto-clean', onSideMenuShow); 1877 $window.on('lpui-sidemenu-hide.lpui-auto-clean', onSideMenuHide); 1878 const $subContainers = $section.find('.navigation__item.sub-nav-container'); 1879 $subContainers.hover(function () { 1880 $(this).find('.sub-nav').addClass('visible'); 1881 }, function () { 1882 $(this).find('.sub-nav').removeClass('visible'); 1883 }); 1884 $window.on('click.lpui-auto-clean', function () { 1885 $('.sub-nav-container.visible-dropdown').removeClass('visible-dropdown'); 1886 }); 1887 let fixedWidth = 0; 1888 const rightPad = 20; 1889 function fixSubsPosition() { 1890 const wWidth = window.innerWidth; 1891 if (innerWidth === fixedWidth) { 1892 return; 1893 } 1894 fixedWidth = wWidth; 1895 $subContainers.each(function () { 1896 const $sub = $(this).find('.sub-nav'); 1897 $sub[0].style.right = '';
1898 const sRect = $sub[0].getBoundingClientRect(); 1899 const sRight = sRect.left + sRect.width; 1900 if (sRight > wWidth - rightPad) { 1901 const parentRect = $sub[0].offsetParent.getBoundingClientRect(); 1902 const parentRight = parentRect.left + parentRect.width; 1903 $sub[0].style.right = `${parentRight - wWidth + rightPad}px`; 1904 } 1905 }); 1906 } 1907 var debouncer; 1908 $window.on('resize.lpui-auto-clean', function () { 1909 clearTimeout(debouncer); 1910 debouncer = setTimeout(fixSubsPosition, 500); 1911 }); 1912 fixSubsPosition(); 1913 if ($('.property-intro').length || $('.property-intro-2').length) { 1914 $('nav').addClass('dark-opening'); 1915 $("#global-navbar").css({ 1916 "background-color": "rgb(26, 26, 26)", 1917 "color": "rgb(255, 255, 255)" 1918 }); 1919 } 1920 function initAutoTruncateMenu() { 1921 const $navbar = $section.find('.navbar'); 1922 const $navList = $section.find('.navigation > ul'); 1923 if (!$navbar.length || !$navList.length) { 1924 return; 1925 } 1926 const $logo = $section.find('.logo'); 1927 const $buttonsWrapper = $section.find('.buttons-wrapper'); 1928 const $allItems = $navList.children('.navigation__item'); 1929 const $phoneItem = $allItems.filter(function () { 1930 return $(this).find('a[href^="tel:"]').length > 0; 1931 }); 1932 const $menuItems = $allItems.not($phoneItem); 1933 if (!$menuItems.length) { 1934 return; 1935 } 1936 const buffer = 8; 1937 function measureFixedWidth() { 1938 let width = buffer; 1939 if ($logo.length) { 1940 width += $logo.outerWidth(true) || 0; 1941 } 1942 if ($buttonsWrapper.length) { 1943 width += $buttonsWrapper.outerWidth(true) || 0; 1944 } 1945 if ($phoneItem.length) { 1946 width += $phoneItem.outerWidth(true) || 0; 1947 } 1948 return width; 1949 } 1950 function truncateMenu() { 1951 if (!$navList.is(':visible')) { 1952 return; 1953 } 1954 $menuItems.css('display', ''); 1955 const availableWidth = $navbar[0].getBoundingClientRect().width - measureFixedWidth(); 1956 let widthSoFar = 0; 1957 let overflowed = false; 1958 $menuItems.each(function () { 1959 const $item = $(this); 1960 if (overflowed) { 1961 $item.css('display', 'none'); 1962 return; 1963 } 1964 widthSoFar += $item.outerWidth(true); 1965 if (widthSoFar > availableWidth) { 1966 $item.css('display', 'none'); 1967 overflowed = true; 1968 } 1969 }); 1970 } 1971 let truncateFrame; 1972 function scheduleTruncate() { 1973 if (truncateFrame) { 1974 return; 1975 } 1976 truncateFrame = window.requestAnimationFrame(function () { 1977 truncateFrame = null; 1978 truncateMenu(); 1979 }); 1980 } 1981 scheduleTruncate(); 1982 if (window.ResizeObserver) { 1983 const resizeObserver = new ResizeObserver(scheduleTruncate); 1984 resizeObserver.observe($navbar[0]); 1985 } else { 1986 $(window).on('resize.lpui-auto-truncate', scheduleTruncate); 1987 } 1988 $section.find('img').on('load.lpui-auto-truncate', scheduleTruncate); 1989 $(window).on('load.lpui-auto-truncate', scheduleTruncate); 1990 if (document.fonts && document.fonts.ready) { 1991 document.fonts.ready.then(scheduleTruncate); 1992 } 1993 } 1994 initAutoTruncateMenu(); 1995})('global-navbar'); 1996} catch(e) { 1997console.log(e); 1998} 1999 try { 2000(function init(sectionDomId, options) { 2001 var elementSelector = options.elementSelector || 'nav'; 2002 var element = document.querySelector(elementSelector); 2003 var sections = document.querySelectorAll('body > section'); 2004 var subNavContainers = element.querySelectorAll('.sub-nav'); 2005 var initialBackgroundColor = options.initialBackgroundColor || element.style.backgroundColor; 2006 var backgroundColorScroll = options.backgroundColorScroll || '#191919'; 2007 var fontColor = options.fontColor || '#fff'; 2008 var fontColorScroll = options.fontColorScroll || '#000'; 2009 var didScroll = false; 2010 var lastScrollTop = 0; 2011 var delta = 5; 2012 2013 // eslint-disable-next-line sonarjs/no-collapsible-if 2014 if (wow) { 2015 // Wowjs might not trigger for position fixed elements 2016 if (window.scrollY > 0) { 2017 element.querySelectorAll('.wow').forEach(el => wow.show(el)); 2018 } 2019 } 2020 function adjustNavPinState() { 2021 // Remove 'visible' class from all subNavContainers 2022 for (let i = 0; i < subNavContainers.length; i++) { 2023 subNavContainers[i].classList.remove('visible'); 2024 } 2025 if (window.scrollY > 0) { 2026 element.style.backgroundColor = backgroundColorScroll; 2027 element.style.color = fontColorScroll; 2028 element.classList.add('scroll'); 2029 } else {
2030 element.style.backgroundColor = initialBackgroundColor; 2031 element.style.color = fontColor; 2032 element.classList.remove('scroll'); 2033 } 2034 } 2035 adjustNavPinState(); 2036 function onScroll() { 2037 didScroll = true; 2038 } 2039 window.addEventListener('scroll', onScroll); 2040 2041 // eslint-disable-next-line 2042 var debounceInterval = setInterval(() => { 2043 if (didScroll) { 2044 // eslint-disable-next-line 2045 hasScrolled(); 2046 didScroll = false; 2047 } 2048 }, 250); 2049 function hasScrolled() { 2050 adjustNavPinState(); 2051 // eslint-disable-next-line 2052 var navbarHeight = element.offsetHeight; 2053 // eslint-disable-next-line 2054 var st = window.scrollY; 2055 2056 // Make sure they scroll more than delta 2057 if (Math.abs(lastScrollTop - st) <= delta) { 2058 return; 2059 } 2060 if (st > lastScrollTop && st > navbarHeight) { 2061 // Scroll Down 2062 element.style.transform = `translateY(-${navbarHeight}px) scaleY(0)`; 2063 document.documentElement.style.setProperty('--global-header-height', '0px'); 2064 2065 // Some sections "follow" the navbar with class sticky (i.e. Producer search) 2066 sections.forEach(section => { 2067 if (section.classList.contains('sticky')) { 2068 section.style.top = '0px'; 2069 } 2070 }); 2071 } else { 2072 // Scroll Up 2073 // eslint-disable-next-line 2074 if (st + window.innerHeight < document.documentElement.scrollHeight) { 2075 element.style.transform = `translateY(0) scaleY(1)`; 2076 document.documentElement.style.setProperty('--global-header-height', `${navbarHeight}px`); 2077 sections.forEach(section => { 2078 if (section.classList.contains('sticky')) { 2079 section.style.top = `${navbarHeight}px`; 2080 } 2081 }); 2082 } 2083 } 2084 lastScrollTop = st; 2085 } 2086})('NAVBAR', JSON.parse("{\"fontColor\":\"#fff\",\"elementSelector\":\"nav\",\"fontColorScroll\":\"#fff\",\"initialFontColor\":\"#fff\",\"backgroundColorScroll\":\"#1a1a1a\",\"initialBackgroundColor\":\"rgba(0,0,0,0)\"}")); 2087} catch(e) { 2088console.log(e); 2089} 2090 try { 2091(function init(sectionDomId) { 2092 var $sidemenu = $('#' + sectionDomId); 2093 var shown = false; 2094 function onShow() { 2095 if (shown) { 2096 return; 2097 } 2098 shown = true; 2099 window.lpUI.requestScrollLock(sectionDomId); 2100 } 2101 function onHide(ev, opts) { 2102 if (!shown) { 2103 return; 2104 } 2105 shown = false; 2106 window.lpUI.releaseScrollLock(sectionDomId); 2107 $('body').removeClass('locked'); 2108 opts = ev.detail || opts; 2109 if (!opts || !opts.instant) { 2110 $sidemenu.addClass("is-hiding"); 2111 setTimeout(function () { 2112 $sidemenu.removeClass("is-hiding"); 2113 }, 300); 2114 } 2115 } 2116 $sidemenu.on('lpui-show', onShow); 2117 $(window).on('lpui-sidemenu-hide.lpui-auto-clean', onHide); 2118 $sidemenu.removeClass("is-hiding"); 2119})('global-sidemenu'); 2120} catch(e) { 2121console.log(e); 2122} 2123 2124 try { 2125(function init(footerId) { 2126 var textContent = $(".text_content_wrap p").text().trim().length; 2127 const socialLinks = $(`#${footerId} .lp-socials__link`); 2128 if (textContent < 1) { 2129 $(".text_content_wrap").remove(); 2130 $(".second_text_footer").css({ 2131 'margin-bottom': 0 2132 }); 2133 } 2134 if (socialLinks.length > 0) { 2135 socialLinks.attr('data-wow-offset', '10'); 2136 } 2137 if ($(window).width() > 1280) { 2138 let footer = document.querySelector("#" + footerId); 2139 let copyrightElem = footer.querySelector(".copy_zone"); 2140 if (copyrightElem) { 2141 copyrightElem.style.whiteSpace = "nowrap"; 2142 let nowrapElemWidth = copyrightElem.clientWidth; 2143 copyrightElem.style.whiteSpace = ""; 2144 let normalElemWidth = copyrightElem.clientWidth; 2145 if (nowrapElemWidth > normalElemWidth) { 2146 footer.querySelector(".form-col--socials").classList.add("form-col--xl-auto"); 2147 } 2148 } 2149 } 2150 const form = $("#" + footerId).find("form"); 2151 const redirectLink = $('#' + footerId + ' .redirect-link'); 2152 form.on("reset", function () { 2153 redirectPage(redirectLink); 2154 }); 2155 function redirectPage(link) { 2156 if (link.length) { 2157 const rawHref = link.attr('href'); 2158 link.attr('href', setHttp(rawHref)); 2159 link[0].click(); 2160 } 2161 } 2162 function setHttp(link) { 2163 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 2164 link = 'http://' + link; 2165 } 2166 return link; 2167 } 2168})('global-footer'); 2169} catch(e) { 2170console.log(e); 2171} 2172 2173 try { 2174(function init(options) {})('global-mobile-contact'); 2175} catch(e) { 2176console.log(e); 2177} 2178 2179 try { 2180(function init(sectionDomId, options) { 2181 let section = null; 2182 switch (sectionDomId) { 2183 case 'NAVBAR': 2184 section = document.querySelector('body > nav, #global-navbar'); 2185 break; 2186 case 'FOOTER': 2187 section = document.querySelector('body > footer, #global-footer'); 2188 break; 2189 case 'SIDEMENU': 2190 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 2191 break; 2192 case 'CONTACT':
2193 section = document.querySelector('#modal-global-contact-us'); 2194 break; 2195 case 'MOBILE_CONTACT': 2196 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 2197 break; 2198 case 'SUBSCRIBE': 2199 // Subscribe Not Implemented 2200 section = null; 2201 break; 2202 case 'ACCOUNT': 2203 // Account Not Implemented 2204 section = null; 2205 break; 2206 default: 2207 section = document.querySelector('#' + sectionDomId); 2208 } 2209 if (!section) { 2210 return; 2211 } 2212 2213 // Where content / items are rendered 2214 const dataContainer = section.querySelector('.data-container'); 2215 if (!dataContainer) { 2216 // no place to render items = no need to query server or do anything else 2217 return; 2218 } 2219 let variables = options.variables || {}; 2220 2221 // Some variables in options may not have been injected - remove 2222 Object.keys(variables).forEach(function (variableName) { 2223 if (typeof variables[variableName] === 'string' && variables[variableName].match(/^{{.*}}$/)) { 2224 delete variables[variableName]; 2225 } 2226 }); 2227 2228 // Merge page query variables 2229 if (options.usePageResource) { 2230 variables = { 2231 ...variables, 2232 ...window.luxuryPresence.config.pageMeta.pageQueryVariables[options.resource] 2233 }; 2234 } 2235 2236 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Callers 2237 // resolve the flag — fetchData reads the section stamp, aux fetches read 2238 // their own resource's stamp (auxUsesRouter). 2239 function apiUrl(useRouter) { 2240 return options.url || (useRouter ? window.luxuryPresence.defaults.routerUrl : window.luxuryPresence.defaults.apiGatewayUrl); 2241 } 2242 2243 // ROUTER-CLEANUP: aux resources roll out on their own flag, not the section's 2244 // (options.routerApiAux is stamped per aux resource server-side). 2245 function auxUsesRouter(resource) { 2246 return !!(options.routerApiAux && options.routerApiAux[resource]); 2247 } 2248 2249 // Pagination Executes on a Numbered Pagination Container 2250 // Or via a load more button 2251 let mode = 'BUTTONLESS_PAGINATION'; 2252 const container = section.querySelector('.pagination-container');
2253 const loadMoreButton = section.querySelector(options?.loadMoreSelector); 2254 if (container) { 2255 mode = 'NUMBERED_PAGINATION'; 2256 } 2257 if (loadMoreButton) { 2258 mode = 'LOAD_MORE_BUTTON'; 2259 } 2260 let searchContainer = section.querySelector('.search-container'); 2261 const hidePaginationOnFirstPage = options.hidePaginationOnFirstPage || false; 2262 const eventPrefix = '__pagination-'; 2263 const searchFormParams = options.searchFormParams || (options.resource === 'properties' ? [{ 2264 param: 'neighborhoodId', 2265 urlKey: 'neighborhood' 2266 }, { 2267 param: 'search', 2268 urlKey: 'search' 2269 }, { 2270 param: 'salesPriceGTE', 2271 urlKey: 'pricemin', 2272 formKey: 'priceMin', 2273 type: 'int' 2274 }, { 2275 param: 'salesPriceLTE', 2276 urlKey: 'pricemax', 2277 formKey: 'priceMax', 2278 type: 'int' 2279 }, { 2280 param: 'livingSpaceSizeGTE', 2281 urlKey: 'areamin', 2282 formKey: 'areaMin', 2283 type: 'int' 2284 }, { 2285 param: 'livingSpaceSizeLTE', 2286 urlKey: 'areamax', 2287 formKey: 'areaMax', 2288 type: 'int' 2289 }] : []); 2290 2291 // Total entries - initialized in first render 2292 let totalNumber = 0; 2293 const DefaultSearchParams = { 2294 page: 1 2295 }; 2296 searchFormParams.forEach(function (formParam) { 2297 DefaultSearchParams[formParam.formKey || formParam.param] = null; 2298 }); 2299 let searchParams = { 2300 ...DefaultSearchParams 2301 }; 2302 const offset = options.variables?.offset || 0; 2303 let scrollTarget = options.scrollTargetSelector ? section.querySelector(options.scrollTargetSelector) || section : section; 2304 let scrollOffset = (parseInt(options.scrollOffset, 10) || 0) ?? 100; 2305 2306 // entries of per page 2307 // when query variables for a given section would't be filled options.pageSize can store 2308 // template string, ex: "{{variables.limit}}", below code handles that case and set 9 as a default value 2309 let pageSize = parseInt(options.pageSize, 10) || 9; 2310 2311 // Adding mobile pageRange support 2312 var NARROW_BREAKPOINT = 600; 2313 var mobileBreakpoint = options.mobileBreakpoint > 0 ? options.mobileBreakpoint : NARROW_BREAKPOINT; 2314 var paginationMql = window.matchMedia(`(max-width: ${mobileBreakpoint}px)`); 2315 2316 // Page range (pages on both sides of the current page) 2317 var mobilePageRange = options.mobilePageRange > 0 ? options.mobilePageRange : 0; 2318 var desktopPageRange = options.pageRange >= 0 ? options.pageRange : 2; 2319 var pageRange = paginationMql.matches ? mobilePageRange : desktopPageRange; 2320 2321 // Whether to display the 'Previous' button 2322 var showPrevious = true; 2323 2324 // Whether to display the 'Next' button 2325 var showNext = true; 2326 2327 // Whether to display the page buttons 2328 var showPageNumbers = true; 2329 2330 // 'Previous' text 2331 var prevText = options.prevText || '«'; 2332 2333 // 'Next' text 2334 var nextText = options.nextText || '»'; 2335 2336 // Ellipsis text 2337 var ellipsisText = '…'; 2338 var classPrefix = 'paginationjs'; 2339 2340 // Default active class 2341 var activeClassName = 'active'; 2342 2343 // Default disable class 2344 var disableClassName = 'disabled'; 2345 2346 // Pagination element's position in the container 2347 var position = 'bottom'; 2348 2349 // Whether to trigger pagination at initialization 2350 var triggerPagingOnInit = !options.skipInitialLoad; 2351 var showFirstOnEllipsisShow = true; 2352 var showLastOnEllipsisShow = true; 2353 2354 // Instantiated in init() 2355 var el = null; 2356 2357 // Controls scrollTop logic 2358 var firstRender = true; 2359 var renderBySearch = false; 2360 var disabled = false; 2361 2362 // Pagination script class selector 2363 var paginationScriptSelector = options.paginationPartialName ? `.${options.paginationPartialName}` : '.pagination-script'; 2364 2365 // Property Specific Image Override if No Image 2366 var propertyPlaceholderImage = window.luxuryPresence.defaults.propertyPlaceholderImage; 2367 2368 // Construct template 2369 var templateHTML = section.querySelector(`script${paginationScriptSelector}`)?.innerHTML || ''; 2370 var template = Handlebars.compile(templateHTML); 2371 2372 // Initialize 2373 init(); 2374 function init() { 2375 Object.assign(searchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 2376 2377 // Append/prepend pagination element to the pagination container 2378 if (mode === 'NUMBERED_PAGINATION') { 2379 el = document.createElement('div'); 2380 el.className = 'paginationjs';
2381 container[position === 'bottom' ? 'append' : 'prepend'](el); 2382 } 2383 if (searchContainer) { 2384 initSearchContainer({ 2385 fetchNeighborhoods: searchContainer.dataset.fetchNeighborhoods === 'true', 2386 fetchPostCategories: searchContainer.dataset.fetchPostCategories === 'true', 2387 fetchOffices: searchContainer.dataset.fetchOffices === 'true', 2388 fetchRentalRates: searchContainer.dataset.fetchRentalRates === 'true' 2389 }, function () { 2390 syncSearchFormState(searchParams); 2391 }); 2392 } 2393 2394 // Bind events 2395 observer(); 2396 } 2397 function syncSearchFormState(params) { 2398 searchContainer.dispatchEvent(new CustomEvent('sync', { 2399 detail: params 2400 })); 2401 } 2402 function initSearchContainer(options, done) { 2403 var promises = []; 2404 if (options.fetchNeighborhoods) { 2405 promises.push(fetchAllNeighborhoods(function (neighborhoods) { 2406 searchContainer.dispatchEvent(new CustomEvent('neighborhoods-data', { 2407 detail: { 2408 data: neighborhoods.map(function (item) { 2409 return { 2410 value: item.id, 2411 label: item.name 2412 }; 2413 }) 2414 } 2415 })); 2416 })); 2417 } 2418 if (options.fetchPostCategories) { 2419 promises.push(fetchPostCategories(function (categories) { 2420 searchContainer.dispatchEvent(new CustomEvent('post-categories-data', { 2421 detail: { 2422 data: categories 2423 } 2424 })); 2425 })); 2426 } 2427 if (options.fetchOffices) { 2428 promises.push(fetchOffices(function (offices) { 2429 searchContainer.dispatchEvent(new CustomEvent('offices-data', { 2430 detail: { 2431 data: offices 2432 } 2433 })); 2434 })); 2435 } 2436 if (options.fetchRentalRates) { 2437 promises.push(fetchAllRentalRates(function (rentalRates) { 2438 searchContainer.dispatchEvent(new CustomEvent('rental-rates-data', { 2439 detail: { 2440 data: rentalRates 2441 } 2442 })); 2443 })); 2444 } 2445 if (promises.length > 0) { 2446 Promise.all(promises).then(function () { 2447 done(); 2448 }); 2449 } else { 2450 // element's custom code is not executed yet, so we're scheduling callback to after element's code 2451 setTimeout(done); 2452 } 2453 } 2454 function fetchAllNeighborhoods(done) { 2455 var useRouter = auxUsesRouter('neighborhoods'); 2456 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Same 2457 // args on both APIs (the federated neighborhoods field accepts 2458 // withProperties/withBlogPosts); only the selection set differs. 2459 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') + '}}'; 2460 var payload = {}; 2461 payload.offset = 0; 2462 payload.limit = 100; 2463 payload.companyId = variables.companyId; 2464 if (options.resource === 'properties') { 2465 payload.withProperties = { 2466 active: true 2467 }; 2468 ['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) { 2469 if (variables[field] !== undefined && variables[field] !== null) { 2470 payload.withProperties[field] = variables[field]; 2471 } 2472 }); 2473 } 2474 if (options.resource === 'posts') { 2475 payload.withBlogPosts = { 2476 active: true 2477 }; 2478 ['search', 'postStatusId', 'featured', 'categoryId', 'categoryIds', 'neighborhoodId', 'slug'].forEach(function (field) { 2479 if (variables[field] !== undefined && variables[field] !== null) { 2480 payload.withBlogPosts[field] = variables[field]; 2481 } 2482 }); 2483 } 2484 2485 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2486 if (useRouter) { 2487 payload = window.luxuryPresence.routerApi.transformVariables('neighborhoods', payload); 2488 } 2489 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2490 query: gqlQuery, 2491 variables: payload 2492 }).then(function (res) { 2493 var value = res.body.data && res.body.data.neighborhoods || {}; 2494 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2495 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2496 done(items, items.length); 2497 }); 2498 } 2499 function fetchPostCategories(done) { 2500 var featured = options.resource === 'posts' && !!variables.featured; 2501 var useRouter = auxUsesRouter('postCategories'); 2502 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 2503 // selection set differs ({ items {...} } on the router). 2504 var selection = 'id, name, publishedCount, featuredPublishedCount'; 2505 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) + '}}'; 2506 var payload = {}; 2507 payload.offset = 0; 2508 payload.limit = 100; 2509 payload.companyId = variables.companyId; 2510 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2511 query: gqlQuery, 2512 variables: payload 2513 }).then(function (res) { 2514 var value = res.body.data && res.body.data.postCategories || {}; 2515 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2516 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2517 done(items.map(function (item) { 2518 item.count = featured ? item.featuredPublishedCount : item.publishedCount; 2519 return item; 2520 }), items.length); 2521 }); 2522 } 2523 function fetchOffices(done) { 2524 var useRouter = auxUsesRouter('offices'); 2525 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 2526 // selection set differs ({ items {...} } on the router). 2527 var selection = 'id, name, tags'; 2528 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. The two 2529 // APIs differ in more than the items wrapper: federated offices takes 2530 // companyId: ID! (legacy gateway: String), so each branch builds its whole doc. 2531 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 + '}}'; 2532 var payload = { 2533 offset: 0, 2534 limit: 100, 2535 companyId: variables.companyId 2536 }; 2537 2538 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2539 if (useRouter) { 2540 payload = window.luxuryPresence.routerApi.transformVariables('office
2540s', payload); 2541 } 2542 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2543 query: gqlQuery, 2544 variables: payload 2545 }).then(function (res) { 2546 var value = res.body.data && res.body.data.offices || {}; 2547 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2548 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2549 done(items, items.length); 2550 }); 2551 } 2552 2553 // ROUTER-CLEANUP: no rentalRates field on the federated router — legacy only. 2554 function fetchAllRentalRates(done) { 2555 var url = options.url || window.luxuryPresence.defaults.apiGatewayUrl; 2556 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'rentalRates (companyId: $companyId, offset: $offset, limit: $limit) {rentalRateId, label}}'; 2557 var payload = { 2558 offset: 0, 2559 limit: 100, 2560 companyId: variables.companyId 2561 }; 2562 superagent.post(url + '/graphql').withCredentials().send({ 2563 query: gqlQuery, 2564 variables: payload 2565 }).then(function (res) { 2566 var items = res.body.data && res.body.data.rentalRates || []; 2567 done(items, items.length); 2568 }).catch(function (err) { 2569 console.error('Error fetching rental rates:', err); 2570 done([], 0); 2571 }); 2572 } 2573 function fetchData(params, done) { 2574 var resource = options.resource; 2575 var gqlQuery = options.query || window.luxuryPresence.defaults.gql[resource]; 2576 var payload = {}; 2577 try { 2578 payload = JSON.parse(JSON.stringify(variables)); 2579 } catch (e) { 2580 Object.keys(variables).forEach(function (variableName) { 2581 payload[variableName] = variables[variableName]; 2582 }); 2583 } 2584 payload.offset = (params.page - 1) * pageSize + offset; 2585 payload.limit = pageSize; 2586 payload.companyId = options.companyId; 2587 searchFormParams.forEach(function (formParam) { 2588 var val = params[formParam.formKey || formParam.param]; 2589 if (val !== null && val !== undefined) { 2590 objSet(payload, formParam.param, val); 2591 } 2592 }); 2593 2594 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2595 if (options.useRouterApi) { 2596 payload = window.luxuryPresence.routerApi.transformVariables(resource, payload); 2597 } 2598 2599 // TODO: Disabled loading due to jarring effect 2600 // dataContainer.html('Loading...'); 2601 superagent.post(apiUrl(options.useRouterApi) + '/graphql').withCredentials().send({ 2602 query: gqlQuery, 2603 variables: payload 2604 }).then(function (res) { 2605 if (res.body.errors) { 2606 done(res.body.errors); 2607 return; 2608 } 2609 var data = res.body.data || {}; 2610 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2611 var resources; 2612 var resourceCount; 2613 if (options.useRouterApi) { 2614 var page = window.luxuryPresence.routerApi.transformPage(data[resource]); 2615 resources = window.luxuryPresence.routerApi.transformResponse(resource, page.items); 2616 resourceCount = page.count; 2617 } else { 2618 resources = data[resource] || []; 2619 resourceCount = data[resource + 'Count'] && data[resource + 'Count'].count ? data[resource + 'Count'].count : 0; 2620 } 2621 if (resource === 'properties' && propertyPlaceholderImage?.id) { 2622 resources = resources.map(resource => { 2623 if (resource.media?.length === 0) { 2624 return Object.assign(resource, { 2625 media: [propertyPlaceholderImage] 2626 }); 2627 } 2628 return resource; 2629 }); 2630 } 2631 done(null, resources, resourceCount); 2632 }); 2633 } 2634 function getTotalPage() { 2635 return Math.ceil(totalNumber / pageSize); 2636 } 2637 function renderPaginationList() { 2638 var totalPages = getTotalPage(); 2639 var rangeStart = searchParams.page - pageRange; 2640 var rangeEnd = searchParams.page + pageRange; 2641 if (rangeEnd > totalPages) { 2642 rangeEnd = totalPages; 2643 rangeStart = totalPages - pageRange * 2; 2644 rangeStart = rangeStart < 1 ? 1 : rangeStart; 2645 } 2646 if (rangeStart <= 1) { 2647 rangeStart = 1; 2648 rangeEnd = Math.min(pageRange * 2 + 1, totalPages); 2649 } 2650 2651 // Making sure that 1 more page button is shown in edge positions 2652 if (pageRange === 0) { 2653 if (searchParams.page === totalPages) { 2654 rangeStart = totalPages <= 1 ? 1 : totalPages - 1; 2655 } 2656 if (searchParams.page === 1) { 2657 rangeEnd = Math.min(2, totalPages); 2658 } 2659 } 2660 2661 // Render pagination list 2662 if (mode === 'NUMBERED_PAGINATION') { 2663 el.innerHTML = generateHTML({ 2664 currentPage: searchParams.page, 2665 pageRange: pageRange, 2666 rangeStart: rangeStart, 2667 rangeEnd: rangeEnd 2668 }); 2669 if (totalPages < 2 && hidePaginationOnFirstPage) { 2670 container.style.display = 'none'; 2671 } else { 2672 container.style.display = ''; 2673 } 2674 } else if (mode === 'LOAD_MORE_BUTTON') { 2675 if (searchParams.page >= totalPages) {
2676 loadMoreButton.style.display = 'none'; 2677 } else { 2678 loadMoreButton.style.display = ''; 2679 } 2680 } 2681 } 2682 function render(data) { 2683 renderPaginationList(); 2684 2685 // Render new content with handlebars 2686 var html = ''; 2687 if (mode === 'LOAD_MORE_BUTTON' && searchParams.page > 1) { 2688 // If using load more, append search results to existing results 2689 html = dataContainer.innerHTML; 2690 } 2691 for (var i = 0; i < data.length; i++) { 2692 var itemData = recursivelyParse(data[i]); 2693 itemData.sectionIndex = options.sectionIndex; 2694 itemData.renderOptions = options.renderOptions; 2695 html += template(itemData); 2696 } 2697 dataContainer.innerHTML = html; 2698 2699 // Scroll Top 2700 if (!firstRender && mode === 'NUMBERED_PAGINATION' && (!renderBySearch || !options.skipScrollOnSearch)) { 2701 // Only animate to the top if we replace dataContainer (numbered pagination) 2702 setTimeout(() => { 2703 const scrollTargetOffsetTop = scrollTarget.getBoundingClientRect().top + window.scrollY - scrollOffset; 2704 window.scrollTo({ 2705 top: scrollTargetOffsetTop, 2706 behavior: 'smooth' 2707 }); 2708 }, 250); 2709 } 2710 return true; 2711 } 2712 function generateHTML(args) { 2713 const totalPages = getTotalPage(); 2714 const { 2715 rangeStart, 2716 rangeEnd 2717 } = args; 2718 const makeLnk = page => window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 2719 ...searchParams, 2720 page 2721 }); 2722 let html = ''; 2723 if (showPrevious || showPageNumbers || showNext) { 2724 html += '<div class="paginationjs-pages"><ul>'; 2725 2726 // Previous button 2727 if (showPrevious) { 2728 if (searchParams.page <= 1) { 2729 html += `<li class="${classPrefix}-prev ${disableClassName}"><a>${prevText}</a></li>`; 2730 } else { 2731 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>`; 2732 } 2733 } 2734 2735 // Pages 2736 if (showPageNumbers) { 2737 if (rangeStart <= 3) { 2738 for (let i = 1; i < rangeStart; i++) { 2739 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>`; 2740 } 2741 } else { 2742 if (showFirstOnEllipsisShow) { 2743 html += `<li class="${classPrefix}-page ${classPrefix}-first J-paginationjs-page" data-num="1"><a href="${makeLnk(1)}">1</a></li>`; 2744 } 2745 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 2746 } 2747 for (let i = rangeStart; i <= rangeEnd; i++) { 2748 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>`; 2749 } 2750 if (rangeEnd < totalPages - 2) { 2751 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 2752 if (showLastOnEllipsisShow) { 2753 html += `<li class="${classPrefix}-page ${classPrefix}-last J-paginationjs-page" data-num="${totalPages}"><a href="${makeLnk(totalPages)}">${totalPages}</a></li>`; 2754 } 2755 } else { 2756 for (let i = rangeEnd + 1; i <= totalPages; i++) { 2757 html += `<li class="${classPrefix}-page J-paginationjs-page" data-num="${i}"><a href="${makeLnk(i)}">${i}</a></li>`; 2758 } 2759 } 2760 } 2761 2762 // Next button 2763 if (showNext) { 2764 if (searchParams.page >= totalPages) { 2765 html += `<li class="${classPrefix}-next ${disableClassName}"><a>${nextText}</a></li>`; 2766 } else { 2767 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>`; 2768 } 2769 } 2770 html += '</ul></div>'; 2771 } 2772 return html; 2773 } 2774 function go(newSearchParams, callback, restorationVisit) { 2775 if (disabled) return; 2776 var goToPageNumber = newSearchParams.page; 2777 2778 // Page number is out of bounds 2779 if (!goToPageNumber || goToPageNumber < 1) return; 2780 var totalPage = getTotalPage(); 2781 2782 // Page number is out of bounds 2783 if (!restorationVisit && totalNumber > 0) { 2784 if (goToPageNumber > totalPage) return; 2785 } 2786 if (!options.skipSerialization && (mode === 'NUMBERED_PAGINATION' || searchContainer)) {
2787 var newURL = window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 2788 ...newSearchParams, 2789 page: goToPageNumber !== 1 && mode === 'NUMBERED_PAGINATION' ? newSearchParams.page : null 2790 }); 2791 if (!areQueryParamsEqual(newSearchParams, searchParams) && !restorationVisit) { 2792 window.history.pushState({}, '', window.luxuryPresence.getPath(newURL, { 2793 queryString: true 2794 })); 2795 } 2796 } 2797 2798 // Fetch and update page 2799 fetchData(newSearchParams, renderWithData); 2800 disabled = true; 2801 function renderWithData(err, data, count) { 2802 if (err) { 2803 dataContainer.dispatchEvent(new Event('error')); 2804 } else { 2805 searchParams = { 2806 ...newSearchParams 2807 }; 2808 totalNumber = count - offset; 2809 if (data.length === 0) { 2810 dataContainer.dispatchEvent(new Event('no-data')); 2811 } else { 2812 dataContainer.dispatchEvent(new Event('data')); 2813 } 2814 render(data); 2815 firstRender = false; 2816 } 2817 disabled = false; 2818 renderBySearch = false; 2819 } 2820 } 2821 function areQueryParamsEqual(first, second) { 2822 var differ = Object.keys(first).find(function (key) { 2823 return first[key] !== undefined && first[key] !== null && first[key] !== second[key]; 2824 }); 2825 if (differ) { 2826 return false; 2827 } 2828 differ = Object.keys(second).find(function (key) { 2829 return second[key] !== undefined && second[key] !== null && second[key] !== first[key]; 2830 }); 2831 return !differ; 2832 } 2833 function next(callback) { 2834 go({ 2835 ...searchParams, 2836 page: searchParams.page + 1 2837 }, callback); 2838 } 2839 function previous(callback) { 2840 go({ 2841 ...searchParams, 2842 page: searchParams.page - 1 2843 }, callback); 2844 } 2845 function refresh(callback) { 2846 go(searchParams, callback); 2847 } 2848 function update(params, callback) { 2849 renderBySearch = true; 2850 go(params, callback); 2851 } 2852 function observer() { 2853 if (searchContainer) { 2854 searchContainer.addEventListener('search', function (event, newSearchParams) { 2855 newSearchParams = event.detail || newSearchParams; 2856 update({ 2857 ...searchParams, 2858 ...newSearchParams, 2859 page: 1 2860 }); 2861 }); 2862 searchContainer.addEventListener('clear-search', function () { 2863 const defaultSearchParams = { 2864 ...DefaultSearchParams 2865 }; 2866 const isCurrentSearchFormStateDefault = areQueryParamsEqual({ 2867 ...defaultSearchParams, 2868 page: null 2869 }, { 2870 ...searchParams, 2871 page: null 2872 }); 2873 2874 // if mode is LOAD_MORE_BUTTON we should't make anything on clear 2875 // when search form have default state 2876 if (isCurrentSearchFormStateDefault && mode !== 'NUMBERED_PAGINATION') { 2877 return; 2878 } 2879 2880 // if someone initially go to some page and click 'Clear' on search from 2881 // we should't navigate to first page. We should preserve page value 2882 if (isCurrentSearchFormStateDefault) { 2883 defaultSearchParams.page = searchParams.page; 2884 } 2885 syncSearchFormState(defaultSearchParams); 2886 update(defaultSearchParams); 2887 }); 2888 } 2889 if (mode === 'LOAD_MORE_BUTTON') { 2890 loadMoreButton.addEventListener('click', function (event) { 2891 go({ 2892 ...searchParams, 2893 page: searchParams.page + 1 2894 }); 2895 return false; 2896 }); 2897 } 2898 if (mode === 'LOAD_MORE_BUTTON' || mode === 'BUTTONLESS_PAGINATION') { 2899 // Do initial render 2900 go(Object.assign({}, searchParams, { 2901 page: 1 2902 })); 2903 return; 2904 } 2905 if (mode === 'NUMBERED_PAGINATION') { 2906 // Go to specified page number 2907 container.addEventListener(eventPrefix + 'go', function (event) { 2908 let { 2909 pageNumber, 2910 done 2911 } = event.detail || {}; 2912 pageNumber = parseInt(pageNumber, 10); 2913 if (!pageNumber) { 2914 return; 2915 } 2916 go({ 2917 ...searchParams, 2918 page: pageNumber 2919 }, done); 2920 }); 2921 2922 // Page number button click 2923 el.addEventListener('click', function (event) { 2924 let clickTarget = event.target; 2925 let current = clickTarget.closest('.J-paginationjs-page, .J-paginationjs-previous, .J-paginationjs-next'); 2926 let pageNumber = current?.getAttribute('data-num'); 2927 if (!pageNumber || current.classList.contains(disableClassName) || current.classList.contains(activeClassName)) { 2928 return; 2929 } else { 2930 go({ 2931 ...searchParams, 2932 page: parseInt(pageNumber, 10) 2933 }); 2934 } 2935 event.preventDefault(); 2936 }); 2937 2938 // Whether to load the default page 2939 var defaultPageNumber = searchParams.page; 2940 if (triggerPagingOnInit) {
2941 container.dispatchEvent(new CustomEvent(eventPrefix + 'go', { 2942 detail: { 2943 pageNumber: defaultPageNumber 2944 } 2945 })); 2946 } 2947 } 2948 window.addEventListener('popstate', function (event) { 2949 var newParams = Object.assign({}, DefaultSearchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 2950 if (!areQueryParamsEqual(newParams, searchParams)) { 2951 go(newParams, null, true); 2952 if (searchContainer) { 2953 syncSearchFormState(newParams); 2954 } 2955 } 2956 }); 2957 } 2958 function replaceVariables(template, variables) { 2959 var formattedString; 2960 for (var key in variables) { 2961 var value = variables[key]; 2962 var regexp = new RegExp('<%=\\s*' + key + '\\s*%>', 'img'); 2963 formattedString = (formattedString || template).replace(regexp, value); 2964 } 2965 return formattedString; 2966 } 2967 function isTextEditorValue(obj) { 2968 return 'raw' in obj || 'gjs' in obj; 2969 } 2970 function getTextEditorValue(obj) { 2971 if (!obj.html) { 2972 return ''; 2973 } 2974 var data = obj.html; 2975 var css = (obj.raw || obj.gjs || {}).css; 2976 if (css) { 2977 data = data + '<style>' + css + '</style>'; 2978 } 2979 return data; 2980 } 2981 2982 /** 2983 * check rendered resources for html and raw properties that could indicate if resource is from an advanced text editor. 2984 * strips out raw proprties and returns only HTML if it exists. 2985 * @param {Object} resources a collection retrieved from the database 2986 * @return {Object} the newly modified object. 2987 */ 2988 function recursivelyParse(resources) { 2989 forEach(resources, function (value, key) { 2990 if (!value) { 2991 return; 2992 } 2993 if (value instanceof Object) { 2994 if (isTextEditorValue(value)) { 2995 resources[key] = getTextEditorValue(value); 2996 return; 2997 } else { 2998 return recursivelyParse(value); 2999 } 3000 } 3001 try { 3002 var parsedData = JSON.parse(value); 3003 if (isTextEditorValue(parsedData)) { 3004 resources[key] = getTextEditorValue(parsedData); 3005 } 3006 } catch (e) { 3007 // do nothing if we failed to parse value as JSON 3008 } 3009 }); 3010 return resources; 3011 } 3012 function forEach(collection, iteratee) { 3013 var func = Array.isArray(collection) ? arrayEach : baseFor; 3014 return func(collection, iteratee); 3015 } 3016 function baseFor(object, iteratee) { 3017 if (!object) { 3018 return; 3019 } 3020 var iterable = Object(object); 3021 var props = Object.keys(object); 3022 var length = props.length; 3023 var index = -1; 3024 while (length--) { 3025 var key = props[++index]; 3026 if (iteratee(iterable[key], key, iterable) === false) { 3027 break; 3028 } 3029 } 3030 return object; 3031 } 3032 function objSet(obj, path, value) { 3033 const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g); 3034 pathArray.reduce((acc, key, i) => { 3035 if (acc[key] === undefined) acc[key] = {}; 3036 if (i === pathArray.length - 1) acc[key] = value; 3037 return acc[key]; 3038 }, obj); 3039 } 3040 function arrayEach(array, iteratee) { 3041 var index = -1; 3042 var length = array.length; 3043 while (++index < length) { 3044 if (iteratee(array[index], index, array) === false) { 3045 break; 3046 } 3047 } 3048 return array; 3049 } 3050 function selectPageRangeMode(e) { 3051 pageRange = e.matches ? mobilePageRange : desktopPageRange; 3052 renderPaginationList(); 3053 } 3054 paginationMql.addEventListener('change', selectPageRangeMode); 3055})('section-109ad32a-04ff-4f2e-9203-cb2104dad1b9', JSON.parse("{\"pageSize\":\"6\",\"resource\":\"agents\",\"pageRange\":0,\"variables\":{\"limit\":6,\"offset\":0,\"companyId\":\"8853c562-273b-4c58-a71b-9ef5b2c3920c\",\"categoryId\":\"{{pageElement.categoryId}}\"},\"searchFormParams\":[{\"param\":\"search\",\"urlKey\":\"search\"},{\"param\":\"officeId\",\"global\":true,\"urlKey\":\"officeId\"},{\"param\":\"tags\",\"global\":true,\"urlKey\":\"area\"}],\"skipScrollOnSearch\":false,\"scrollTargetSelector\":\".search-form\",\"hidePaginationOnFirstPage\":true,\"companyId\":\"8853c562-273b-4c58-a71b-9ef5b2c3920c\",\"usePageResource\":false,\"sectionIndex\":2,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":false,\"pressReleases\":false,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":false}}")); 3056} catch(e) { 3057console.log(e); 3058} 3059 try { 3060(function init(sectionDomId) { 3061 const $section = $("#" + sectionDomId); 3062 const $searchContainer = $section.find(".search-container"); 3063 const $officeSelect = $section.find('.js-office-input'); 3064 const $tagSelect = $section.find('.js-tag-input'); 3065 const $searchInput = $section.find('.js-search-input'); 3066 const $emptyMsg = $section.find('.js-empty-message'); 3067 const $dataContainer = $section.find('.data-container'); 3068 const $containter = $section.find('.js-container'); 3069 const officeFilter = $searchContainer.data('fetchOffices'); 3070 const $resetSearchInput = $searchContainer.find('.lp-input-reset'); 3071 convertSelectToDropdown($tagSelect); 3072 $resetSearchInput.on('click', function (event) { 3073 event.preventDefault(); 3074 $searchInput.val(''); 3075 onSearch(); 3076 }); 3077 $dataContainer.on("data", function () { 3078 $emptyMsg.removeClass("visible"); 3079 $containter.removeClass('no-data'); 3080 }); 3081 $dataContainer.on("no-data", function () { 3082 $emptyMsg.addClass("visible"); 3083 $containter.addClass('no-data'); 3084 }); 3085 $searchInput.on('input', window.luxuryPresence.debounce(onSearch, 1000)); 3086 function onSearch() { 3087 const params = {}; 3088 if (officeFilter) params.officeId = $officeSelect.val() === '' ? null : [$officeSelect.val()]; 3089 if ($tagSelect.length > 0) params.tags = $tagSelect.val() === '' ? null : [$tagSelect.val()]; 3090 params.search = $searchInput.val() || null; 3091 $searchContainer[0]?.dispatchEvent(new CustomEvent('search', { 3092 detail: params 3093 })); 3094 } 3095 if (!officeFilter && $tagSelect.length === 0) return; 3096 var previousOption = '';
3097 $searchContainer.on('offices-data', function (evt) { 3098 let { 3099 data 3100 } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 3101 data = evt.detail?.data || data; 3102 $officeSelect.append(data.map(office => `<option value="${office.id}">${office.name}</option>`).join("\n")); 3103 convertSelectToDropdown($officeSelect); 3104 }); 3105 function updateDropdown(select, value) { 3106 let $dropdown = $(select).next(); 3107 let $dropdownToggle = $dropdown.find(".custom-select-toggle"); 3108 let $dropdownContent = $dropdown.find(".custom-select-content"); 3109 let $selectedOption = $dropdownContent.find(`button[value="${value}"]`); 3110 function unselectOption() { 3111 $linkedOption = $originalSelect.find("option").eq(0); 3112 $linkedOption.prop("selected", true); 3113 $dropdownToggle.html($linkedOption.html()); 3114 $dropdownContent.find(".custom-select-item").removeClass("is-selected"); 3115 $originalSelect.change(); 3116 previousOption = ""; 3117 } 3118 if (!$selectedOption) return; 3119 if ($selectedOption.hasClass("is-disabled")) return; 3120 let elementNumber = $selectedOption.index(); 3121 let $originalSelect = $selectedOption.closest(".custom-select").siblings("select"); 3122 let $linkedOption = $originalSelect.find("option").eq(elementNumber); 3123 if (previousOption === value) { 3124 unselectOption(); 3125 return; 3126 } 3127 if (!$linkedOption.prop("selected")) { 3128 $linkedOption.prop("selected", true); 3129 previousOption = value; 3130 $originalSelect.change(); 3131 $selectedOption.addClass("is-selected").siblings(".custom-select-item").removeClass("is-selected"); 3132 closeSelectMenu($selectedOption.closest(".custom-select-menu")); 3133 $dropdownToggle.html($linkedOption.html()); 3134 if ($linkedOption.val()) { 3135 $dropdownToggle.removeClass("is-placeholder"); 3136 $dropdown[$linkedOption.val() !== "" ? "addClass" : "removeClass"]("has-selection"); 3137 } else { 3138 $dropdown.removeClass("has-selection"); 3139 $dropdownToggle.addClass("is-placeholder"); 3140 } 3141 } 3142 } 3143 function convertSelectToDropdown(selectItem) { 3144 let customDropdown = ` 3145 <div class="custom-select" role="presentation"> 3146 <button class="custom-select-toggle" type="button" aria-haspopup="true" aria-expanded="false"></button> 3147 <div class="custom-select-menu"> 3148 <div class="custom-select-content"> 3149 </div> 3150 </div> 3151 </div>`; 3152 $(customDropdown).insertAfter(selectItem); 3153 let $dropdown = $(selectItem).next(); 3154 let $dropdownToggle = $dropdown.find(".custom-select-toggle"); 3155 let $dropdownMenu = $dropdown.find(".custom-select-menu"); 3156 let $dropdownContent = $dropdown.find(".custom-select-content"); 3157 $dropdownToggle.addClass($(selectItem).attr("class")).removeClass("dropdown-select"); 3158 $dropdownToggle.attr("id", $(selectItem).attr("id") + "custom"); 3159 $dropdownToggle.attr("data-name", $(selectItem).attr("name")); 3160 $dropdownMenu.attr("aria-labelledby", $dropdownToggle.attr("id")); 3161 appendOptionButtons(selectItem, $dropdownContent); 3162 $(selectItem).removeClass().addClass("sr-only"); 3163 $(selectItem).on("focus", function () { 3164 showSelectMenu($dropdownMenu[0]); 3165 $dropdownToggle.focus(); 3166 }); 3167 var toggleText = $(selectItem).find(":selected").first().text() || $(selectItem).children().first().text(); 3168 $dropdownToggle.addClass("is-placeholder").html(toggleText); 3169 $dropdown.on("click", ".custom-select-item", function (e) { 3170 updateDropdown($(this).closest(".lp-input-group").find("select"), $(this).attr("value")); 3171 }); 3172 function convertOptionToButton(option) { 3173 var optionText = $(option).text(); 3174 var optionValue = $(option).attr("value") || $(option).text(); 3175 var optionIsDisabled = $(option).prop("disabled"); 3176 var outputButton = `<button value="${optionValue}" class="custom-select-item lp-icon" type="button" ${optionIsDisabled ? "disabled" : ""}>${optionText}</button>`; 3177 return outputButton; 3178 } 3179 function appendOptionButtons(selectItem, appendTarget) { 3180 $(selectItem).find("option").each(function () { 3181 let currentButton = convertOptionToButton(this); 3182 $(appendTarget).append(currentButton); 3183 }); 3184 } 3185 function showSelectMenu(selectMenu) { 3186 var customSelect = $(selectMenu).closest(".custom-select")[0]; 3187 customSelect.classList.add('open'); 3188 $(selectMenu).slideDown(); 3189 } 3190 $dropdown.on("click", ".custom-select-toggle", function (e) { 3191 var $customSelect = $(this).closest(".custom-select"); 3192 var selectMenu = $customSelect.find(".custom-select-menu")[0]; 3193 if ($customSelect.hasClass("open")) { 3194 closeSelectMenu(selectMenu); 3195 } else { 3196 showSelectMenu(selectMenu); 3197 } 3198 }); 3199 $(document.body).on("click", function (e) { 3200 if (!$(e.target).closest(`#${sectionDomId} .js-select-input`).length) { 3201 $(`#${sectionDomId} .custom-select.open`).each(function () { 3202 const selectMenu = $(this).find(".custom-select-menu")[0]; 3203 closeSelectMenu(selectMenu); 3204 }); 3205 } 3206 }); 3207 } 3208 function closeSelectMenu(selectMenu) { 3209 var customSelect = $(selectMenu).closest(".custom-select")[0]; 3210 $(customSelect).removeClass("open"); 3211 $(selectMenu).slideUp(); 3212 } 3213 $officeSelect.change(onSearch); 3214 $tagSelect.change(onSearch); 3215})('section-109ad32a-04ff-4f2e-9203-cb2104dad1b9', JSON.parse("{\"resource\":\"agents\",\"useRouterApi\":false,\"companyId\":\"8853c562-273b-4c58-a71b-9ef5b2c3920c\",\"usePageResource\":false,\"sectionIndex\":2,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":false,\"pressReleases\":false,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":false}}")); 3216} catch(e) { 3217console.log(e); 3218} 3219 try { 3220(function init(sectionDomId) { 3221 const $section = $('#' + sectionDomId); 3222 if ($section.find('.parallax').length) $section.addClass('parallax-enabled'); 3223 if ($section.find('.video-wrapper').length) $section.addClass('video'); 3224 slider = $section.find('.js-slider'); 3225 var autoscroll = slider.attr('data-autoscroll') === 'true'; 3226 var autoscrollInterval = parseInt(slider.attr('data-autoscroll-interval'), 10) || 6; 3227 if (slider.length > 0) { 3228 slider.slick({ 3229 dots: false, 3230 fade: true, 3231 speed: 300, 3232 arrows: true, 3233 infinite: true, 3234 nextArrow: ".featured-testimonials .slick-links-nav .next", 3235 prevArrow: ".featured-testimonials .slick-links-nav .prev", 3236 slidesToShow: 1, 3237 adaptiveHeight: true, 3238 slidesToScroll: 1, 3239 autoplay: autoscroll, 3240 autoplaySpeed: autoscrollInterval * 1000 3241 }); 3242 } 3243})('section-dbb2776b-e19b-40a0-a0af-b31c4ddeb0c7', JSON.parse("{\"resource\":\"testimonials\",\"useRouterApi\":true,\"companyId\":\"8853c562-273b-4c58-a71b-9ef5b2c3920c\",\"usePageResource\":false,\"sectionIndex\":3,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":false,\"pressReleases\":false,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":false}}")); 3244} catch(e) { 3245console.log(e); 3246} 3247 try { 3248(function init(sectionDomId) {}
3248)('section-7aeb65df-1f13-4442-bb32-a5d5f0c41b2c', 'undefined'); 3249} catch(e) { 3250console.log(e); 3251} 3252 try { 3253(function init(sectionDomId) {})('section-64de7b13-9930-4519-a89c-b80f37d851fa', 'undefined'); 3254} catch(e) { 3255console.log(e); 3256} 3257 try { 3258(function init(sectionDomId) { 3259 const $section = $('#' + sectionDomId); 3260 if ($section.find('.parallax').length) $section.addClass('parallax-enabled'); 3261 if ($section.find('.video-wrapper').length) $section.addClass('video'); 3262})('section-7bbb2227-eef0-4a9e-b081-dc9a86d6f82a', 'undefined'); 3263} catch(e) { 3264console.log(e); 3265} 3266 try { 3267(function init(sectionDomId) { 3268 const $section = $(`#${sectionDomId}`); 3269 const $container = $section.find('.featured-properties-section'); 3270 const $slider = $section.find('.featured-properties'); 3271 const threeSlides = $container.hasClass('three-slides'); 3272 const autoScroll = $container[0].dataset['autoScroll'] === 'true'; 3273 const autoplaySpeed = parseInt($container[0].dataset['autoplaySpeed']) || 3000; 3274 const sliderOptions = { 3275 "arrows": true, 3276 "infinite": false, 3277 autoplay: autoScroll, 3278 autoplaySpeed: autoplaySpeed, 3279 "nextArrow": $section.find('.slick-links-nav .next'), 3280 "prevArrow": $section.find('.slick-links-nav .prev'), 3281 "slidesToShow": 2, 3282 "slidesToScroll": 2, 3283 "responsive": [{ 3284 "settings": { 3285 "slidesToShow": 1, 3286 "slidesToScroll": 1 3287 }, 3288 "breakpoint": 769 3289 }] 3290 }; 3291 if (threeSlides) { 3292 sliderOptions.slidesToShow = 3; 3293 sliderOptions.slidesToScroll = 3; 3294 sliderOptions.responsive.unshift({ 3295 "settings": { 3296 "slidesToShow": 2, 3297 "slidesToScroll": 2 3298 }, 3299 "breakpoint": 1100 3300 }); 3301 } 3302 if (!$slider.hasClass('.slick-initialized')) { 3303 $slider.slick(sliderOptions); 3304 } 3305 $slider.on('beforeChange', function () { 3306 $slider.find('.featured-properties__share.featured-properties__share--opened').removeClass('featured-properties__share--opened'); 3307 }); 3308 $slider.find('.featured-properties__share .btn').on('click', function () { 3309 $parent = $(this).parent(); 3310 if ($parent.hasClass('featured-properties__share--opened')) { 3311 $parent.removeClass('featured-properties__share--opened'); 3312 } else { 3313 $slider.find('.featured-properties__share.featured-properties__share--opened').removeClass('featured-properties__share--opened'); 3314 $parent.addClass('featured-properties__share--opened'); 3315 } 3316 }); 3317})('section-91779466-3754-443e-816b-903fe9150afb', JSON.parse("{\"resource\":\"properties\",\"useRouterApi\":false,\"companyId\":\"8853c562-273b-4c58-a71b-9ef5b2c3920c\",\"usePageResource\":false,\"sectionIndex\":7,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":false,\"pressReleases\":false,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":false}}")); 3318} catch(e) { 3319console.log(e); 3320} 3321 3322 var { body } = document; 3323 var globalNav = body.querySelector(':scope > nav'); 3324 var globalSideMenu = body.querySelector(':scope > div.sidemenu'); 3325 3326 document.querySelectorAll('body > .modal .close').forEach(modalCloseBtn => { 3327 modalCloseBtn.addEventListener('click', function() { 3328 window.lpUI.hideClosestModal(modalCloseBtn); 3329 }); 3330 }); 3331 3332 window.addEventListener('click', function() { 3333 document.querySelectorAll('.share-popup').forEach(sharedPopup => { 3334 sharedPopup.style.display = 'none' ; 3335 }); 3336 }); 3337 3338 /* Misc Partials / Addons */ 3339 function initWOW() { 3340 if (wow) { 3341 wow.init(); 3342 wow.scrollHandler(); 3343 setTimeout(function () { 3344 const wowHideStyle = document.getElementById('wow-hide-elements'); 3345 if(wowHideStyle) { 3346 wowHideStyle.disabled = true; 3347 } 3348 }, 1); 3349 } 3350 } 3351 3352 const wowHideElements = document.getElementById('wow-hide-elements'); 3353 if (wowHideElements) { 3354 wowHideElements.disabled = false;
3355 } 3356 3357 initWOW(); 3358 3359 /* Generic Navbar Handling */ 3360 globalNav?.querySelectorAll('.hamburger-component').forEach(hamburgerComponent => { 3361 hamburgerComponent.addEventListener('click', function() { 3362 window.lpUI.sideMenuToggle(); 3363 }); 3364 }); 3365 globalSideMenu?.querySelectorAll('.toggle').forEach(toggleEl => { 3366 toggleEl.addEventListener('click', function() { 3367 window.lpUI.sideMenuToggle(); 3368 }); 3369 }); 3370 3371 document.querySelectorAll('body > nav .sub-nav-container > a, body > div.sidemenu .sub-nav-container > a').forEach(linkEl => { 3372 linkEl.addEventListener('click', function(e) { 3373 e.preventDefault(); 3374 e.stopPropagation(); 3375 var subNav = linkEl.parentElement.querySelector(':scope > .sub-nav'); 3376 if (subNav && subNav.classList.contains('visible')){ 3377 subNav.classList.remove('visible'); 3378 } else { 3379 globalNav?.querySelectorAll('.sub-nav-container .sub-nav').forEach(globalSubNav => { 3380 globalSubNav.classList.remove('visible'); 3381 }); 3382 globalSideMenu?.querySelectorAll('.sub-nav').forEach(sideMenuSubNav => { 3383 sideMenuSubNav.classList.remove('visible'); 3384 }); 3385 subNav?.classList.add('visible'); 3386 } 3387 }); 3388 }); 3389 window.addEventListener('click', function() { 3390 document.querySelectorAll('nav .sub-nav.visible, .sidemenu .sub-nav.visible').forEach(subNavEl => { 3391 subNavEl.classList.remove('visible'); 3392 }); 3393 }); 3394 3395 } 3396 3397 document.addEventListener('DOMContentLoaded', lpGlobalInit); 3398 3399 </script>
3399 3400 3401
3401<script type="module"> 3402 function selectorExists(selector) { 3403 return document.querySelector(selector) !== null; 3404 } 3405 3406 // Function to initialize the third-party library 3407 function initParoller(selector = '.my-paroller') { 3408 var $parollerElements = $(selector); 3409 if ($parollerElements.length > 0 && typeof $parollerElements.paroller === 'function') { 3410 $parollerElements.paroller(); 3411 } 3412 } 3413 3414 const parollerSelector = '.my-paroller'; 3415 3416 if (selectorExists(parollerSelector)) { 3417 window.luxuryPresence.libs.loadJs(window.luxuryPresence.libs.jsLibsMap.paroller.jsSrc, function() { 3418 initParoller(parollerSelector); 3419 window.luxuryPresence.libs.jsLibsMap.paroller.isLoaded = true; 3420 }); 3421 } 3422 </script>
3422 3423 3424 <!-- Google Tag Manager (noscript) -->
vendor: 80 bytes, lines 3424-3425
3424 3425 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
3425GTM-T9SFQGHZ
vendor: 107 bytes, lines 3425-3427
3425" 3426 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 3427
3427<!-- End Google Tag Manager --> 3428 3429
3429<script 3430 src="https://cdn.luxurypresence.com/scripts/a11y-widget/latest/widget.js" 3431 data-website-id="96b2125f-da36-451f-8701-3e7494eee5ae" 3432 3433 defer></script>
vendor: 1 bytes, line 3433
3433
3434<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"d2a8f4b3d65944edb8fcd6ffce49ee5e","spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 3434
3434
3435<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:'a4024c2aaada37be',t:'MTc5MDI1ODIzOQ=='};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>
3435</body> 3436</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.