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>Noble Black | Premier New York Real Estate Agents</title> 10 <meta property="og:title" content="Noble Black | Premier New York Real Estate Agents"> 11 <meta name="twitter:title" content="Noble Black | Premier New York Real Estate Agents"> 12 <meta name="description" content="Meet a collaborative real estate team providing expert guidance, market knowledge, and responsive service through every stage of the property process."> 13 <meta property="og:description" content="Meet a collaborative real estate team providing expert guidance, market knowledge, and responsive service through every stage of the property process."> 14 <meta name="twitter:description" content="Meet a collaborative real estate team providing expert guidance, market knowledge, and responsive service through every stage of the property process."> 15 <meta property="og:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d280cc8b-cd69-4f97-9671-0e399bf687da"> 16 <meta name="twitter:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d280cc8b-cd69-4f97-9671-0e399bf687da"> 17 <meta property="og:url" content="https://nobleblackandpartners.com/team"> 18 <link rel="canonical" href="https://nobleblackandpartners.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=Playfair%20Display:400,500,600,700,800,900,400i,500i,600i,700i,800i,900i"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins: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:'Playfair Display',serif;--global-primary-font-family-short:Playfair Display;--global-secondary-font-family:Poppins,sans-serif;--global-secondary-font-family-short:Poppins;--global-body-padding:0px;--global-background-color:#fff;--global-body-font-size:13px;--global-h1-font-size:70px;--global-h2-font-size:40px;--global-h3-font-size:24px;--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:Poppins,sans-serif;font-size:13px;}@media (min-width: 768px){body{padding:0px 0px 0px 0px;}}h1,h2,h3,h4,h5,h6,button{font-family:'Playfair Display',serif;}h1{font-size:70px;}h2{font-size:40px;}h3{font-size:24px;}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">@font-face{font-family:'Didonesque Roman';src:url('https://d1e1jt2fj4r8r.cloudfront.net/fonts/1764941036886-y7xir4gl/Didonesque-Italic.woff2') format('woff2'),url('https://d1e1jt2fj4r8r.cloudfront.net/fonts/1764941036886-y7xir4gl/Didonesque-Italic.woff') format('woff');font-weight:400;font-style:italic;font-display:swap;}@font-face{font-family:'Didonesque Roman';src:url('https://d1e1jt2fj4r8r.cloudfront.net/fonts/1764941036886-y7xir4gl/Didonesque-Roman.woff2') format('woff2'),url('https://d1e1jt2fj4r8r.cloudfront.net/fonts/1764941036886-y7xir4gl/Didonesque-Roman.woff') format('woff');font-weight:400;font-style:normal;font-display:swap;}@font-face{font-family:'Didonesque Display';src:url('https://d1e1jt2fj4r8r.cloudfront.net/fonts/1764941036886-y7xir4gl/Didonesque-Display.woff2') format('woff2'),url('https://d1e1jt2fj4r8r.cloudfront.net/fonts/1764941036886-y7xir4gl/Didonesque-Display.woff') format('woff');font-weight:400;font-style:normal;font-display:swap;}@font-face{font-family:'Futura PT';src:url('https://d1e1jt2fj4r8r.cloudfront.net/fonts/1764941036886-y7xir4gl/futura-pt-book.woff2') format('woff2'),url('https://d1e1jt2fj4r8r.cloudfront.net/fonts/1764941036886-y7xir4gl/futura-pt-book.woff') format('woff');font-weight:400;font-style:normal;font-display:swap;}:root{--global-primary-font-family:'Didonesque Display',serif;--global-primary-font-family-short:'Didonesque Display';--global-secondary-font-family:'Futura PT',serif;--global-secondary-font-family-short:'Futura PT';}:root{--custom-black:#000;--custom-black-op:rgba(0, 0, 0, .3);--custom-white:#FFF;--custom-grey:#575757;--custom-light-grey:#EBEBEB;--custom-letter-sp:0;--btn-weight:500;--custom-padding:64px;--info-icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 640'%3E%3C!--!Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--%3E%3Cpath d='M272 112C272 85.5 293.5 64 320 64
31C346.5 64 368 85.5 368 112C368 138.5 346.5 160 320 160C293.5 160 272 138.5 272 112zM224 256C224 238.3 238.3 224 256 224L320 224C337.7 224 352 238.3 352 256L352 512L384 512C401.7 512 416 526.3 416 544C416 561.7 401.7 576 384 576L256 576C238.3 576 224 561.7 224 544C224 526.3 238.3 512 256 512L288 512L288 288L256 288C238.3 288 224 273.7 224 256z'/%3E%3C/svg%3E");}@media(max-width:769px){:root{--custom-padding:25px;}}:root{--nav-offset:120px;}[id]{scroll-snap-margin-top:var(--nav-offset);scroll-margin-top:var(--nav-offset);}h1,h2,h3,h4,h5,h6{letter-spacing:var(--custom-letter-sp);font-weight:500!important;}.italic{font-style:italic;}.redesign{font-size:13px;}.btn,.lp-btn{font-weight:var(--btn-weight)!important;letter-spacing:1px!important;border-width:1px!important;padding:22px 32px!important;}.lp-arrow::before{width:8px!important;height:8px!important;border-bottom-width:2px;border-left-width:2px;}.custom-link{position:relative;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:0 auto;}.custom-link::before,.custom-link::after{content:'';display:block;position:absolute;bottom:0;left:0;width:100%;height:1px;-webkit-transition:.3s;transition:.3s;}.custom-link::after{width:0;}.custom-link:hover::after{width:100%;}.custom-link.dark{color:var(--custom-black);}.custom-link.dark:hover{color:var(--custom-grey);}.custom-link.dark::before{background:rgba(0, 0, 0, .2);}.custom-link.dark::after{background:var(--custom-black);}.custom-link.light{color:var(--custom-white);}.custom-link.light::before{background:rgba(255, 255, 255, .5);}.custom-link.light::after{background:var(--custom-white);}.lp-tcr-message{opacity:.9;font-weight:normal;}.page-contact nav#global-navbar a[data-type="CONTACT_US"]{display:none!important;}nav#global-navbar{padding-top:10px;}nav#global-navbar .header{-webkit-transform:unset;-moz-transform:unset;-ms-transform:unset;transform:unset;}@media(max-width:560px){nav#global-navbar .header{height:85px;}}@media(max-width:1024px){nav#global-navbar .header .container .navbar{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:end;justify-content:end;}}nav#global-navbar .header .container .navbar .logo{margin:0;position:absolute;left:50%;-webkit-transform:translatex(-50%);-moz-transform:translatex(-50%);-ms-transform:translatex(-50%);transform:translatex(-50%);}nav#global-navbar .header .container .navbar .logo .logo__img{max-height:65px;}@media(max-width:560px){nav#global-navbar .header .container .navbar .logo .logo__img{max-height:50px;}}nav#global-navbar .header .container .navbar .navigation__item{line-height:1;}nav#global-navbar .header .container .navbar .navigation__item .navigation__link{font-weight:var(--btn-weight);color:var(--custom-white);}nav#global-navbar .header .container .navbar .navigation__item .navigation__link[data-type="CONTACT_US"]{border:0;padding:0;min-height:unset;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;margin-right:25px;-webkit-transition:0.3s;transition:0.3s;}nav#global-navbar .header .container .navbar .navigation__item .navigation__link[data-type="CONTACT_US"] span::after{background:rgba(255, 255, 255, .5);}nav#global-navbar .header .container .navbar .buttons-wrapper .hamburger-component:hover .hamburger__bars::after{width:100%;}nav#global-navbar .header .container .navbar .buttons-wrapper .hamburger-component .hamburger__bars{height:1.5px;}nav#global-navbar .header .container .navbar .buttons-wrapper .hamburger-component .hamburger__bars::before{-webkit-transform:translateY(-7px);-moz-transform:translateY(-7px);-ms-transform:translateY(-7px);transform:translateY(-7px);height:1.5px;}nav#global-navbar .header .container .navbar .buttons-wrapper .hamburger-component .hamburger__bars::after{-webkit-transform:translateY(7px);-moz-transform:translateY(7px);-ms-transform:translateY(7px);transform:translateY(7px);width:75%;-webkit-transition:0.3s;transition:0.3s;height:1.5px;}nav#global-navbar.scroll{background:var(--custom-white)!important;padding-top:0;}nav#global-navbar.scroll .container .navbar .logo .logo__img.light{display:none!important;}nav#global-navbar.scroll .container .navbar .logo .logo__img.dark{display:block!important;}nav#global-navbar.scroll .container .navbar .navigation__item .navigation__link{color:var(--custom-black);}nav#global-navbar.scroll .container .navbar .navigation__item .navigation__link[data-type="CONTACT_US"] span::after{background:rgba(0,0,0,0.65);}nav#global-navbar.scroll .container .navbar .buttons-wrapper .hamburger-component{color:var(--custom-black);}footer#global-footer .form-row.info-privacy__row .copy_zone,footer#global-footer .form-row.info-privacy__row .powered_zone{font-size:13px!important;}footer#global-footer div.footer.redesign{padding-top:96px;}@media(max-width:769px){footer#global-footer div.footer.redesign{padding-top:64px;}}footer#global-footer div.footer.redesign .container{--space-above:40px;}footer#global-footer div.footer.redesign .container .info-wrap{margin:0;}footer#global-footer div.footer.redesign .container .info-wrap .info-wrap-contact_cell{padding:0;margin:0;width:100%;}footer#global-footer div.footer.redesign .container .info-wrap .info-wrap-contact_cell>i,footer#global-footer div.footer.redesign .container .info-wrap .info-wrap-contact_cell .info-wrap-contact_title{display:none;}footer#global-footer div.footer.redesign .container .info-wrap .custom-footer .top{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;
31-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}footer#global-footer div.footer.redesign .container .info-wrap .custom-footer .top .logo{width:100%;max-width:180px;}footer#global-footer div.footer.redesign .container .info-wrap .custom-footer .lp-socials{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin-top:var(--space-above);}footer#global-footer div.footer.redesign .container .info-wrap .custom-footer .info{display:-ms-grid;display:grid;-ms-grid-columns:repeat(2, 1fr);grid-template-columns:repeat(2, 1fr);text-align:center;max-width:500px;margin:var(--space-above) auto 0;font-weight:normal;text-transform:none;}footer#global-footer div.footer.redesign .container .info-wrap .custom-footer .info .cols{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}footer#global-footer div.footer.redesign .container .info-wrap .custom-footer .info .cols .title{color:var(--custom-grey);font-weight:500;margin-bottom:10px;text-transform:uppercase;}footer#global-footer div.footer.redesign .container .info-wrap .custom-footer .info .cols .custom-link{text-transform:uppercase;margin-bottom:5px;}footer#global-footer div.footer.redesign .container .text_footer{border-top:1px solid rgba(0, 0, 0, .1);margin-top:var(--space-above);padding-top:var(--space-above);margin-bottom:var(--space-above);}footer#global-footer div.footer.redesign .container .text_footer .luxury-text{text-align:center;}footer#global-footer div.footer.redesign .container .text_footer .luxury-text .broker-logo{width:100%;max-width:160px;margin-bottom:20px;-webkit-transition:.3s;transition:.3s;}footer#global-footer div.footer.redesign .container .text_footer .luxury-text .broker-logo:hover{opacity:.6;cursor:pointer;}footer#global-footer div.footer.redesign .container .text_footer .luxury-text .grey{color:var(--custom-grey);}footer#global-footer div.footer.redesign .container .text_footer .luxury-text .disclimer-links{margin-top:10px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}@media(max-width:769px){footer#global-footer div.footer.redesign .container .text_footer .luxury-text .disclimer-links{-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;gap:6px;}footer#global-footer div.footer.redesign .container .text_footer .luxury-text .disclimer-links p{display:none;}}footer#global-footer div.footer.redesign .container .text_footer .luxury-text .disclimer-links .custom-link{margin:unset;}footer#global-footer div.footer.redesign .container .text_footer .luxury-text .disclimer-links p{margin:0 10px;}footer#global-footer div.footer.redesign .container .text_footer .luxury-text p:not(:first-child){opacity:0.6;}footer#global-footer div.footer.redesign .container .second_text_footer{display:none;}footer#global-footer div.footer.redesign .container .info-privacy{border:0;padding-top:0;padding-bottom:0;}footer#global-footer div.footer.redesign .container .info-privacy a{font-weight:500;}footer#global-footer div.footer.redesign .container .info-privacy .info-privacy__row{-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}footer#global-footer div.footer.redesign .container .info-privacy .info-privacy__row .form-col--socials{display:none;}footer#global-footer div.footer.redesign .container .info-privacy .info-privacy__row .form-col--powered{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;
31-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0;}@media(max-width:900px){footer#global-footer div.footer.redesign .container .info-privacy .info-privacy__row .form-col--powered{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}footer#global-footer div.footer.redesign .container .info-privacy .info-privacy__row .form-col--powered .powered_zone{padding:0;}@media(min-width:901px){footer#global-footer div.footer.redesign .container .info-privacy .info-privacy__row .form-col--powered .powered_zone{margin-right:10px;padding-right:10px;border-right:1px solid var(--custom-black);}}@media(max-width:769px){footer#global-footer div.footer.redesign .container .info-privacy .info-privacy__row .form-col--powered .powered_zone{margin:0;}}footer#global-footer div.footer.redesign .container .info-privacy .info-privacy__row .form-col--copyright{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;-webkit-flex:unset;-ms-flex:unset;flex:unset;padding:0;}@media(max-width:769px){footer#global-footer div.footer.redesign .container .info-privacy .info-privacy__row .form-col--copyright .copy_zone{padding:0;border:0;margin:0;}}div#global-sidemenu .sidebar__close{-webkit-transition:0.3s;transition:0.3s;}div#global-sidemenu .sidebar__close:hover{opacity:0.6;cursor:pointer;}div#global-sidemenu .sidebar{width:480px;}@media(max-width:620px){div#global-sidemenu .sidebar{width:100vw;}}div#global-sidemenu .sidebar .sidebar__nav-item{text-align:left;-webkit-transition:0.3s;transition:0.3s;border:0;font-size:var(--global-h3-font-size);}div#global-sidemenu .sidebar .sidebar__nav-item:hover:not(.sub-nav-container){border:0;}@media(min-width:620px){div#global-sidemenu .sidebar .sidebar__nav-item:hover:not(.sub-nav-container){padding-left:20px;}}div#global-sidemenu .sidebar .sidebar__subnav{padding-left:10px!important;}div#modal-global-contact-us .contact-form:after{background:#000;opacity:.5;}@media(max-width:769px){div#modal-global-contact-us .close{top:30px;right:30px;}}div#modal-global-contact-us .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}div#modal-global-contact-us .container .section-details{width:100%;text-align:center;margin-bottom:40px;-webkit-order:-1!important;-ms-flex-order:-1!important;order:-1!important;}div#modal-global-contact-us .container .section-details .info-zone{display:-ms-grid;display:grid;-ms-grid-columns:repeat(2, 1fr);grid-template-columns:repeat(2, 1fr);max-width:650px;margin:30px auto 0 auto;}div#modal-global-contact-us .container .section-details .info-zone div.info-zone_contact.type_user>div:nth-child(2)>p{font-size:0;}div#modal-global-contact-us .container .section-details .info-zone div.info-zone_contact.type_user>div:nth-child(2)>p::after{content:'Noble Black';font-size:14px;text-transform:none;}div#modal-global-contact-us .container .section-details .info-zone div.info-zone_contact.type_user>div:nth-child(3)>p{display:none;}div#modal-global-contact-us .container .section-details .info-zone .info-zone_contact_cell{padding:0;width:100%;margin:0 auto;font-weight:normal;}div#modal-global-contact-us .container .section-details .info-zone .info-zone_contact_cell i{display:none;}div#modal-global-contact-us .container .section-details .info-zone .info-zone_contact_cell a{font-weight:normal;}div#modal-global-contact-us .container .section-details .info-zone .info-zone_contact_cell .lp-link::after{background:var(--custom-white);}div#modal-global-contact-us .container .section-details .info-zone .serif,div#modal-global-contact-us .container .section-details .info-zone .info-wrap-contact_title{font-family:var(--global-secondary-font-family);font-weight:500;font-size:16px;text-transform:uppercase;margin-bottom:8px;}
31div#modal-global-contact-us .container .section-details>div>div:nth-child(3){display:none;}div#modal-global-contact-us .container .section-details .lp-socials{grid-column:span 2;padding:0;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}div#modal-global-contact-us .container .section-message{width:100%;max-width:900px;}div#modal-global-contact-us .container .section-message::after{display:none;}div#modal-global-contact-us .container .section-message form{max-width:unset;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;}div#modal-global-contact-us .container .section-message form h2{text-align:center;display:block;width:100%;}div#modal-global-contact-us .container .section-message form .h-pot{display:none;}div#modal-global-contact-us .container .section-message form .lp-input-group{margin-right:20px;max-width:calc(100% / 3 - 20px);}div#modal-global-contact-us .container .section-message form .lp-input-group:has(textarea){max-width:100%;}@media(max-width:769px){div#modal-global-contact-us .container .section-message form .lp-input-group{max-width:100%;margin-right:0;}}div#modal-global-contact-us .container .section-message form .lp-label{font-weight:500;letter-spacing:2px;}div#modal-global-contact-us .container .section-message .submitButton{margin:0 auto;}div#global-mobile-contact .buttons-holder a{background:var(--custom-black);border:0;-webkit-transition:.3s;transition:.3s;}div#global-mobile-contact .buttons-holder a i{color:var(--custom-white);}div#global-mobile-contact .buttons-holder a:hover{opacity:.6;}@media(min-width:1024px){section:has(.custom-intro){background-attachment:fixed;-webkit-background-position:bottom!important;background-position:bottom!important;}}section:has(.custom-intro) div.redesign.custom-intro{height:100vh!important;}section:has(.custom-intro) div.redesign.custom-intro .custom-intro__title{font-size:40px;}@media(max-width:560px){section:has(.custom-intro) div.redesign.custom-intro .custom-intro__title{font-size:30px;}}section:has(.custom-intro) div.redesign.custom-intro .custom-intro__title::after{content:"";font-style:italic;}section:has(.custom-intro) div.redesign.custom-intro .custom-intro__subtitle{text-align:center;font-family:var(--global-secondary-font-family);font-weight:500;font-size:14px!important;letter-spacing:var(--custom-letter-sp);}.scroll-next-btn{position:absolute;bottom:50px;left:50%;-webkit-transform:translatex(-50%);-moz-transform:translatex(-50%);-ms-transform:translatex(-50%);transform:translatex(-50%);border:1px solid #fff;border-radius:50%!important;width:55px;height:55px;font-size:0!important;background:transparent;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;-webkit-transition:.3s;transition:.3s;}.scroll-next-btn::before{content:'';display:block;width:9px;height:9px;border-bottom:2px solid #fff;border-right:2px solid #fff;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);position:relative;top:-2px;}.scroll-next-btn:hover{background:rgba(255, 255, 255, 0.53);cursor:pointer;}.scroll-next-btn:hover::before{border-color:var(--custom-white);}.lp-lightbox-arrow{border-radius:50%;border:1px solid rgba(255, 255, 255, .5);height:55px;width:55px;}.page-properties:not(:has(.property-agent-cta)) .redesign.features-amenities{padding-top:0;}body>div.mobile-contact-wrapper .mobile-contact.with-search div.buttons-holder{bottom:150px;}@media only screen and (max-width: 768px){iframe[name='widgetCta']{bottom:55px!important;right:15px!important;}}iframe[name="widgetCta"]{bottom:70px!important;right:15px!important;}body>div.mobile-contact-wrapper .connect-btn{border:2px solid #333!important;}body>div.mobile-contact-wrapper{z-index:9999!important;}body>div.mobile-contact-wrapper .mobile-contact{z-index:9999!important;}.lp-btn,.redesign .lp-btn,.redesign .btn{padding:20px 46px;}.lp-btn,.redesign .lp-btn,.redesign .btn{text-overflow:initial;}#modal-global-contact-us .contact-form .section-message form .submitButton{padding:14px 20px;}#global-mobile-contact .mobile-contact{z-index:9999;}
31input[type="checkbox"][name="termsAccepted"]{cursor:pointer!important;}@media (max-width: 1024px){div.calendar__item{margin-bottom:10px!important;}}html body .uwy:not(.uon){z-index:99999!important;}#global-mobile-contact .mobile-contact .buttons-holder a{border:2px solid #333;}body>div.sidemenu .sidebar{box-shadow:0 0 10px rgba(0, 0, 0, 0.2);}</style> 32 <style id="wow-hide-elements">.wow{visibility:hidden!important}</style> 33 <style id="page-css"> 34 #section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21{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.4));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/d280cc8b-cd69-4f97-9671-0e399bf687da');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21{-webkit-background-position:top!important;background-position:top!important;}#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21 .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-8f1f5c8d-8a03-4477-9806-d2c1c545bc21 .custom-intro .container{z-index:1;text-align:center;max-width:900px;}#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21 .custom-intro__title{margin-bottom:0px;font-weight:400;margin-bottom:24px;}@media (max-width: 768px){#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21 .custom-intro__title{font-size:32px;}}@media (max-width: 360px){#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21 .custom-intro__title{font-size:22px;}}#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21 .custom-intro__subtitle{font-weight:400;white-space:pre-line;font-size:21px;line-height:1.57;}@media (max-width: 768px){#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21 .custom-intro__subtitle{font-size:18px;}}#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21 .description{margin-bottom:15px;}@media (min-width: 960px) and (orientation: landscape){#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21{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/d280cc8b-cd69-4f97-9671-0e399bf687da');}}@media (min-width: 1280px) and (orientation: landscape){#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21{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/d280cc8b-cd69-4f97-9671-0e399bf687da');}}@media (min-width: 1920px) and (orientation: landscape){#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21{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/d280cc8b-cd69-4f97-9671-0e399bf687da');}}@media (min-width: 2560px) and (orientation: landscape){#section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21{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/d280cc8b-cd69-4f97-9671-0e399bf687da');}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07{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(4 / 4 * var(--global-section-padding));background-color:#ffffff;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.lp-container{max-width:100%;}@media (min-width: 992px) and (max-width: 1480px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__link[href="/agent/jennifer-kaufman-stillman"]:hover .team-member__info{-webkit-transform:translatey(-342px)!important;-moz-transform:translatey(-342px)!important;-ms-transform:translatey(-342px)!important;transform:translatey(-342px)!important;}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid__wrapper.data-container{display:-ms-gri
34d;display:grid;-ms-grid-columns:repeat(4, 1fr);grid-template-columns:repeat(4, 1fr);gap:40px;margin:0;margin-bottom:40px;}@media(max-width:1024px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid__wrapper.data-container{-ms-grid-columns:repeat(3, 1fr);grid-template-columns:repeat(3, 1fr);}}@media(max-width:992px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid__wrapper.data-container{-ms-grid-columns:repeat(2, 1fr);grid-template-columns:repeat(2, 1fr);}}@media(max-width:620px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid__wrapper.data-container{-ms-grid-columns:repeat(1, 1fr);grid-template-columns:repeat(1, 1fr);}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid__wrapper.data-container .team-member__container{width:100%;max-width:100%;margin:0;padding:0;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container:hover .team-member__info::after{opacity:.6;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__info::after{content:'';-webkit-transition:.4s;transition:.4s;opacity:0;position:absolute;width:100%;left:0;bottom:-10px;}@media(max-width:560px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__info::after{position:relative;bottom:0;opacity:.7;}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/noble-black"] .team-member__info::after{content:"Licence #: NY 10301211307";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/jamie-gagliano"] .team-member__info::after{content:"Licence #: NY 10401257389";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/justin-figari"] .team-member__info::after{content:"Licence #: NY 10301210879";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/jennifer-kaufman-stillman"] .team-member__info::after{content:"Licence #: NY 10301209805";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/corinne-cory-cahlon"] .team-member__info::after{content:"Licence #: NY 10301216552";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/matthew-mackay"] .team-member__info::after{content:"Licence #: NY 30MA0875774";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/jesse-feldman"] .team-member__info::after{content:"Licence #: NY 10301210406";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/connor-cuccinelli"] .team-member__info::after{content:"Licence #: NY 10401363560";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/david-dubin"] .team-member__info::after{content:"Licence #: NY 30DU1000717";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/david-eskander"] .team-member__info::after{content:"Licence #: NY 10301223460";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/jeffrey-gageby"] .team-member__info::after{content:"Licence #: NY 10401375526";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/douglas-brown"] .team-member__info::after{content:"Licence #: NY 10401282427";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/hannah-morris"] .team-member__info::after{content:"Licence #: NY 10401331591";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/dana-romita"] .team-member__info::after{content:"Licence #: NY 10301221682";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/ryan-mcerlean"] .team-member__info::after{content:"Licence #: NY 10401382396";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/sophia-goldstein"] .team-member__info::after{content:"Licence #: NY 10401382870";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/candice-koch-postel"] .team-member__info::after{content:"Licence #: NY 10401361288";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/james-averitt-buttry"] .team-member__info::after{content:"Licence #: NY 10301207041";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/jon-vaccari"] .team-member__info::after{content:"Licence #: NY 10401314631";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/william-schumann"] .team-member__info::after{content:"Licence #: NY 10401270397";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/shawn-egan"] .team-member__info::after{content:"Licence #: NY 10401316864";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/sheridan-wright"] .team-member__info::after{content:"Licence #: NY 10401316453";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/neil-wali"] .team-member__info::after{content:"Licence #: NY 10301224143";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/theresa-thornton"] .team-member__info::after{content:"Licence #: NY 10401337853";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container .team-member__link[href="/agent/ali-winter"] .team-member__info::after{content:"Licence #: NY 10401304540";}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .lp-container{padding-left:var(--custom-padding);padding-right:var(--custom-padding);}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .lp-title-group{margin-bottom:55px;}@media(max-width:769px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .lp-title-group{margin-bottom:35px;}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .lp-title-group .lp-h2:not(.custom-h2){dis
34play:none;}@media(min-width:560px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .team-member__link:hover .team-member__info{-webkit-transform:translatey(-380px);-moz-transform:translatey(-380px);-ms-transform:translatey(-380px);transform:translatey(-380px);}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .team-member__link .team-member__image-wrap .team-member__image{padding:0;min-height:480px;-webkit-filter:grayscale(100%);filter:grayscale(100%);}@media(max-width:560px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .team-member__link .team-member__image-wrap .team-member__image img{object-position:50% 30%!important;}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .team-member__link .team-member__image-wrap .team-member__image::before{content:'';display:block;position:absolute;bottom:0;left:0;width:100%;height:50%;background:linear-gradient(to top, #000, transparent);z-index:1;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .team-member__link .team-member__image-wrap .team-member__hover{-webkit-transform:unset;-moz-transform:unset;-ms-transform:unset;transform:unset;border:0;background:#000;-webkit-transition:.4s;transition:.4s;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .team-member__link .team-member__image-wrap .team-member__hover .team-member__btn{padding:0!important;padding-bottom:2px!important;border:0;border-bottom:1px solid rgba(255,255,255,0.54)!important;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .team-member__link .team-member__image-wrap .team-member__hover .team-member__btn:hover{border-color:#fff!important;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .team-member__link .team-member__info{position:absolute;bottom:0;left:0;width:100%;text-align:center;color:#fff;padding-bottom:20px;-webkit-transition:.6s;transition:.6s;z-index:2;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .team-member__link .team-member__info .team-member__name{font-size:var(--global-h3-font-size);margin-bottom:0px;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .team-member__link .team-member__info .team-member__role{font-weight:500;margin:0;color:#fff;opacity:0.8;font-size:14px;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .paginationjs-pages .paginationjs-prev a,#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .paginationjs-pages .paginationjs-next a{border-radius:50%;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .paginationjs-pages .paginationjs-prev a::before,#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .paginationjs-pages .paginationjs-next a::before{width:8px;height:8px;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .paginationjs-pages .paginationjs-page a{font-weight:500;border-radius:50%;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .paginationjs-pages .paginationjs-page.active a,#section-9246491e-d5f8-41a8-a437-7e55d6487d07 div.team-grid.redesign .paginationjs-pages .paginationjs-page:hover a{border-radius:50%;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .J-paginationjs-page a{margin:0 5px;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .button-style-2:hover{background:none!important;color:#fff!important;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-grid{padding:140px 0 90px;}@media (max-width: 768px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-grid{padding:40px 0;}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-grid__title{text-align:center;margin-bottom:50px;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-grid .lp-input{width:100%;height:35px;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-grid__wrapper.two-col{max-width:750px;width:100%;margin:0 auto;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-grid__wrapper.two-col .team-member__container{width:50%;}}@media(max-width: 1000px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-grid__wrapper{max-width:1000px;}}@media (max-width: 768px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container{width:33.333%;padding-left:25px;padding-right:25px;margin-bottom:50px;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container:first-child{margin-left:auto;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container:last-child{margin-right:auto;}@media(max-width: 1000px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container{width:50%;}}@media (max-width: 768px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container{width:100%;}}@media (hover: hover) and (pointer: fine){@media (min-width: 769px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container:hover .team-member__image{opacity:.5;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container:hover .team-member__hover{opacity:1;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container:hover .team-member__hover::before,#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container:hover .team-member__hover::after{width:100%;height:100%;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__container.filtered-out{display:none;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__link{position:relative;display:block;height:100%;cursor:pointer;color:inherit;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__image{position:relative;width:100%;padding-top:130%;background-color:#cccccc;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__image img{position:absolute;object-fit:cover;width:100%;height:100%;top:0;left:0;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__image-wrap{position:relative;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__hover:before,#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__hover:after{content:' ';position:absolute;border:2px solid transparent;width:0;height:0;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__hover:before{top:0;left:0;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__hover:after{bottom:0;right:0;}@media (hover:none) and (pointer: coarse){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__hover{display:none;}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__name{font-size:18px;line-height:29px;letter-spacing:0.75px;}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__license{font-size:13px;text-transform:uppercase;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__info{text-align:center;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .team-member__btn{margin-bottom:60px;position:relative;z-index:1;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .form-container{padding-bottom:48px;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .input-group{-webkit-flex:1;-ms-flex:1;flex:1;max-width:unset;margin:8px 0;}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .search-icon{position:absolute;top:50%;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);right:0;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .search-input{padding-right:65px;}@media (max-width: 569px){#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .search-input{padding-bottom:5px;}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .c-select-clear{display:none;}}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .c-select-dropdown.opened{z-index:999;position:fixed;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .c-select-dropdown-wrapper{width:100%;overflow:hidden auto;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .c-select-optgroup{width:100%;padding:11px 20px;color:#b2b2b2;cursor:default;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .c-select-option:hover{background-color:#b2b2b2;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .c-select.is-empty .c-select-toggle{color:#b2b2b2;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .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-9246491e-d5f8-41a8-a437-7e55d6487d07 .empty-message{padding:160px 0;text-align:center;display:none;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .empty-message.visible{display:block;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07 .visually-hidden{position:absolute;overflow:hidden;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;border:0;}#section-9246491e-d5f8-41a8-a437-7e55d6487d07>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75{color:#ffffff;--fontColor:#ffffff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#fff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#fff;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.4));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/ceepyjczcdsbgxrcrkj1');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75{background-attachment:fixed;}@media(max-width:992px){#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75{-webkit-background-position:right bottom;background-position:right bottom;background-attachment:unset;}}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 div.redesign.work-with-us .container{max-width:unset;padding-left:var(--custom-padding);padding-right:var(--custom-padding);-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center;min-height:90vh;}@media(max-width:769px){#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 div.redesign.work-with-us .container{min-height:unset;text-align:center;-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-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 div.redesign.work-with-us .container .serif{padding:0;margin-bottom:1.6rem;}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 div.redesign.work-with-us .container .serif::after{display:none;}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 div.redesign.work-with-us .container p{max-width:600px;}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 div.redesign.work-with-us .container .btn-container{margin:0;}@media (max-width: 560px){#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 .btn-container{width:100%;}}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75.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-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75.parallax-enabled>div.video-wrapper{position:fixed;left:0;top:0;width:100vw;height:100vh;z-index:-9999;}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75.parallax-enabled .work-with-us:before{display:block;content:'';left:0;top:0;width:100%;background:var(--sectionBackground) center no-repeat;-webkit-background-size:cover;background-size:cover;position:fixed;z-index:-1;height:100%;}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 .redesign.work-with-us{position:relative;color:var(--fontColor, #ffffff);}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 .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-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 .redesign.work-with-us .container{min-height:auto;padding-top:100px;padding-bottom:100px;}}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 .redesign.work-with-us h2{position:relative;padding-bottom:28px;margin:0 0 30px;}@media(max-width: 768px){#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 .redesign.work-with-us h2{padding-bottom:40px;}}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 .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-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 .redesign.work-with-us .description{margin:0 0 30px;}@media(max-width: 768px){#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 .redesign.work-with-us .description{margin-bottom:40px;}}#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 .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-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75 .redesign.work-with-us .btn-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:10px;}}@media (min-width: 960px) and (orientation: landscape){#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75{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/ceepyjczcdsbgxrcrkj1');}}@media (min-width: 1280px) and (orientation: landscape){#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75{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/ceepyjczcdsbgxrcrkj1');}}@media (min-width: 1920px) and (orientation: landscape){#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=2560/https://media-production.lp-cdn.com/media/ceepyjczcdsbgxrcrkj1');}}@media (min-width: 2560px) and (orientation: landscape){#section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75{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/ceepyjczcdsbgxrcrkj1');}}#section-840698fa-42be-4d74-b5a0-781c1f3985f0{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;background-color:#ffffff;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign{padding-top:96px;padding-bottom:0;margin:0;}@media(max-width:769px){#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign{padding-top:64px;}}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign .lp-container{max-width:unset;padding-left:var(--custom-padding);padding-right:var(--custom-padding);}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign .lp-container .pre-title{display:none;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign .lp-container .instagram-username{margin-top:0;margin-bottom:40px;font-size:40px;}@media(max-width:560px){#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign .lp-container .instagram-username{font-size:32px;}}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign .lp-container .feed__content{gap:32px;
34display:-ms-grid;display:grid;-ms-grid-columns:repeat(5, 1fr)!important;grid-template-columns:repeat(5, 1fr)!important;}@media(max-width:1024px){#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign .lp-container .feed__content{-ms-grid-columns:repeat(2, 1fr)!important;grid-template-columns:repeat(2, 1fr)!important;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign .lp-container .feed__content .feed__content__item:last-child{display:none;}}@media(max-width:620px){#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign .lp-container .feed__content{-ms-grid-columns:repeat(1, 1fr);grid-template-columns:repeat(1, 1fr);}}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign .lp-container .feed__content__item{padding:0;aspect-ratio:240/296;overflow:hidden;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign .lp-container .feed__content__item .feed__content__item__img{-webkit-transition:.4s;transition:.4s;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 div.feed.redesign .lp-container .feed__content__item .feed__content__item__img__icon{display:none;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content{margin-bottom:60px;}@media(max-width:769px){#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content{margin-bottom:40px;}}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .lp-follow-btn{background:transparent;border:1px solid var(--custom-black);color:var(--custom-black);cursor:pointer;display:inline-block;font-family:var(--global-secondary-font-family);font-size:14px;font-weight:500;letter-spacing:1.5px;line-height:1;padding:20px 46px;text-align:center;text-transform:uppercase;display:block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin-left:auto;margin-right:auto;-webkit-transition:.3s;transition:.3s;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .lp-follow-btn:hover{background:var(--custom-black);color:var(--custom-white);}@media (max-width: 560px){#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .lp-follow-btn{width:100%!important;}}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed{display:none;margin:50px 0 100px;}@media (max-width: 768px){#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed{margin:30px 0 60px;}}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed .pre-title{display:block;margin-bottom:20px;text-align:center;margin-bottom:2px;color:hsla( 35 var(--fontColor_H), 36 var(--fontColor_S), 37 calc(50% + (var(--fontColor_L) - 50%) * 0.7), 38 var(--fontColor_A) 39 );}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed h2,#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed h3{text-align:center;margin:20px 0 60px;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;padding-bottom:25%;position:relative;z-index:1;}@media (max-width: 768px){#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content__item{-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;padding-bottom:62.5%;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content__item:nth-child(n+5){display:none;}}@media (max-width: 520px){#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content__item{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-bottom:125%;}}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content__item:hover{z-index:2;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content__item:nth-child(n+6){display:none;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content__item__img{bottom:0;position:absolute;height:100%;width:100%;background-color:lightgray;-webkit-background-size:cover;background-size:cover;-webkit-background-position:center center;background-position:center center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;
39-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:all linear 0.2s;transition:all linear 0.2s;transform-origin:bottom;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content__item__img svg{display:none;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content__item__img:hover{position:absolute;background-image:linear-gradient(rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0.45));height:108%;width:104%;margin-left:-2%;}@media (max-width: 768px){#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content__item__img:hover{height:104%;width:104%;margin-left:-2%;}}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .feed__content__item__img:hover svg{display:block;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .instagram-link{display:block;overflow:hidden;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .instagram-link,#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .instagram-link:hover,#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .instagram-link:visited{color:inherit;-webkit-text-decoration:none;text-decoration:none;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .instagram-username{overflow-wrap:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .media-type-icon{position:absolute;top:10px;right:10px;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0 .has-data .feed{display:block;}#section-840698fa-42be-4d74-b5a0-781c1f3985f0.has-data .feed,#section-840698fa-42be-4d74-b5a0-781c1f3985f0#section-temp .feed{display:block;}#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;}#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;}}
39@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-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;
39left: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;-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;max-width:300px;}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;}}
39nav .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;left: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;
39-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:rgba(255, 255, 255, 1);color:rgba(0, 0, 0, 1);--fontColor:rgba(0, 0, 0, 1);--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:rgba(255, 255, 255, 1);--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;}body>div.sidemenu{width:auto!important;left:auto!important;right:-100%;top:0;background-color:transparent;-webkit-transition:right .3s;transition:right .3s;display:block;}body>div.sidemenu:not(.visible){pointer-events:none;visibility:hidden;}body>div.sidemenu.visible{right:0;}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;-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( 40 var(--bgColor_H, 0), 41 var(--bgColor_S, 0%), 42 calc(50% + (var(--bgColor_L, 100%) - 50%) * 0.9), 43 var(--bgColor_A, 1) 44 );}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;}body>div.sidemenu .sub-nav.visible+.main-nav{color:#7a7a7a;}body>div.sidemenu .sub-nav.visible+.main-nav:after{margin-left:40px;border-bottom:2px solid var(--fontColor, #7a7a7a);border-right:2px solid var(--fontColor, #7a7a7a);}body>div.sidemenu .sub-nav-container{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;}body>div.sidemenu .sub-nav-container:hover .main-nav:after{border-bottom:2px solid var(--fontColor, #7a7a7a);border-right:2px solid var(--fontColor, #7a7a7a);}body>div.sidemenu .sub-nav-container .main-nav{position:relative;display:inline-block;}body>div.sidemenu .sub-nav-container .main-nav:after{content:'';display:inline-block;position:relative;width:8px;height:8px;margin-left:25px;-webkit-transform:rotate(45deg) translateX(-100%);-moz-transform:rotate(45deg) translateX(-100%);-ms-transform:rotate(45deg) translateX(-100%);transform:rotate(45deg) translateX(-100%);border-bottom:2px solid var(--fontColor, #000000);border-right:2px solid var(--fontColor, #000000);top:0;bottom:auto;left:auto;-webkit-transition:0.5s all ease;transition:0.5s all ease;background-color:transparent;}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( 45var(--fontColor_H), 46var(--fontColor_S), 47calc(var(--fontColor_L) + (50% - var(--fontColor_L)) * 0.445), 48var(--fontColor_A));}footer .redesign .inp--dark-bg input{color:var(--fontColor);border-color:hsla( 49 var(--fontColor_H), 50 var(--fontColor_S), 51 calc(var(--fontColor_L) + (50% - var(--fontColor_L)) * 0.445), 52 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;
52-webkit-justify-content:flex-end;justify-content:flex-end;}footer .redesign .socials--grey .socials__link{background-color:hsla( 53 var(--bgColor_H), 54 var(--bgColor_S), 55 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.15), 56 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( 57 var(--bgColor_H), 58 var(--bgColor_S), 59 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.4), 60 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;
60left: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( 61 var(--bgColor_H), 62 var(--bgColor_S), 63 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.55), 64 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( 65 var(--bgColor_H), 66 var(--bgColor_S), 67 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.55), 68 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;
68-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;
68-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;}} 69 </style> 70 <style id="custom-style-css">.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;}.hyperlink-style-1{color:rgba(0, 0, 0, 1)!important;}.hyperlink-style-1:hover{color:#000000!important;}.social_icons-style-1 a{border-color:rgba(0, 0, 0, 0)!important;background-color:rgba(0, 0, 0, 0)!important;color:#000000!important;}.social_icons-style-1 a:hover{border-color:rgba(0, 0, 0, 0)!important;background-color:rgba(0, 0, 0, 0)!important;color:#575757!important;}.social_icons-style-1 a i{color:inherit!important;}
70.social_icons-style-1 a svg,.social_icons-style-1 a svg path{fill:currentColor!important;}.pagination-style-1 li a{color:#000000!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(0, 0, 0, 0)!important;}.pagination-style-1 li a:hover{color:#FFFFFF!important;background-color:#000000!important;border-color:rgba(0, 0, 0, 0)!important;}.pagination-style-1 li.active a{color:#FFFFFF!important;background-color:#000000!important;border-color:rgba(0, 0, 0, 0)!important;}.hyperlink-style-2{color:rgba(255, 255, 255, 1)!important;}.hyperlink-style-2:hover{color:#FFFFFF!important;}.social_icons-style-2 a{border-color:rgba(0, 0, 0, 0)!important;background-color:rgba(0, 0, 0, 0)!important;color:#FFFFFF!important;}.social_icons-style-2 a:hover{border-color:rgba(0, 0, 0, 0)!important;background-color:rgba(0, 0, 0, 0)!important;color:#EBEBEB!important;}.social_icons-style-2 a i{color:inherit!important;}.social_icons-style-2 a svg,.social_icons-style-2 a svg path{fill:currentColor!important;}.pagination-style-2 li a{color:#FFFFFF!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(0, 0, 0, 0)!important;}.pagination-style-2 li a:hover{color:#000000!important;background-color:#FFFFFF!important;border-color:rgba(0, 0, 0, 0)!important;}.pagination-style-2 li.active a{color:#000000!important;background-color:#FFFFFF!important;border-color:rgba(0, 0, 0, 0)!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:#000000!important;background-color:#FFFFFF!important;border-color:#FFFFFF!important;}</style> 71 <!-- LP Consent bootstrap: blocking; resolves consent state, pushes Consent Mode 72 defaults, and dynamically loads the locale + main (and banner if needed). --> 73
73<script src="https://cdn.luxurypresence.com/scripts/lp-consent/latest/lp-consent-boot.js" data-website-id="3c006d45-b4eb-4033-b25f-50521cf2281b"></script>
73 74 75 76
76<script> 77 (function utmParse() { 78 const url = new URL(window.location.href); 79 if (url.search) { 80 const utm = url.search.split(/\?|&/g).reduce((acc, current) => { 81 const matched = current.match(/utm_(content|campaign|medium|source|term|id)|gclid/g); 82 if (matched) { 83 acc[matched[0]] = current.replace(`${matched[0]}=`, ''); 84 } 85 return acc; 86 }, {}); 87 if (Object.keys(utm).length) { 88 window.localStorage.setItem('utm_vars', JSON.stringify(utm)); 89 } else { 90 // Remove old utm vars 91 window.localStorage.removeItem('utm_vars'); 92 } 93 } 94 // Set referrer in local storage 95 // This is meant to be stored once to avoid self-referrals and to have the first referrer only. 96 if (!window.localStorage.getItem('referrer')) { 97 // Capture the Referrer URL 98 const referrer = document.referrer; 99 if (referrer) { 100 // Only store the referrer if it comes from outside the current domain (to avoid self-referrals) 101 const currentDomain = window.location.hostname; 102 const referrerDomain = new URL(referrer).hostname; 103 104 if (referrerDomain !== currentDomain) { 105 // Store it in localStorage 106 localStorage.setItem('referrer', referrer); 107 } 108 } 109 } 110 })(); 111 </script>
111 112 <!-- Bing Webmaster Tools Verification -->
113<script> 114 // Check if on the homepage before the body loads 115 if (window.location.pathname === '/' || window.location.pathname === '/index.html') { 116 document.write('<meta name="msvalidate.01" content="9EB600EF5454758CD5017B55EA1D40A2" />'); 117 } 118</script>
118 119
120<script type="text/javascript"> 121 // Function to inject JSON-LD schema 122 function injectSchema(schema) { 123 var script = document.createElement('script'); 124 script.type = 'application/ld+json'; 125 script.text = JSON.stringify(schema); 126 document.head.appendChild(script); 127 } 128 129 // Check if the current path is the homepage 130 if (window.location.pathname === '/') { 131 var realEstateAgentSchema = { 132 "@context": "https://schema.org", 133 "@type": "RealEstateAgent", 134 "name": "Noble Black & Partners", 135 "image": "https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/341a255e-50bd-40f3-832e-db80120c9357", 136 "@id": "https://nobleblackandpartners.com/#realEstateAgent", 137 "url": "https://nobleblackandpartners.com/", 138 "telephone": "(212)355-3550", 139 "email": "[email protected]", 140 "description": "Manhattan and Hamptons luxury real estate team at The Corcoran Group, led by top-ranked broker Noble Black, offering private residential advisory services across NYC and the Hamptons.", 141 "address": { 142 "@type": "PostalAddress", 143 "streetAddress": "590 Madison Ave", 144 "addressLocality": "New York", 145 "addressRegion": "NY", 146 "postalCode": "10022", 147 "addressCountry": "US" 148 }, 149 "geo": { 150 "@type": "GeoCoordinates", 151 "latitude": 40.762106, 152 "longitude": -73.971388 153 }, 154 "openingHoursSpecification": { 155 "@type": "OpeningHoursSpecification", 156 "dayOfWeek": [ 157 "Monday", 158 "Tuesday", 159 "Wednesday", 160 "Thursday", 161 "Friday", 162 "Saturday", 163 "Sunday" 164 ], 165 "opens": "00:00", 166 "closes": "23:59" 167 }, 168 "employee": { 169 "@type": "Person", 170 "@id": "https://nobleblackandpartners.com/#person", 171 "name": "Noble Black", 172 "jobTitle": "Licensed Associate Real Estate Broker", 173 "image": "https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/17543460-5646-49f9-ad11-e9544edc8f71", 174 "url": "https://nobleblackandpartners.com/agent/noble-black", 175 "telephone": "(212)909-8460", 176 "email": "[email protected]", 177 "worksFor": { 178 "@id": "https://nobleblackandpartners.com/#realEstateAgent" 179 }, 180 "sameAs": [ 181 "https://www.linkedin.com/in/nobleblack" 182 ] 183 }, 184 "sameAs": [ 185 "https://www.facebook.com/NobleBlackTeam", 186 "https://www.instagram.com/nobleblack1/", 187 "https://www.youtube.com/channel/UC4eJzM896qwaS9I-oRGo0-w/feed" 188 ], 189 "knowsAbout": [ 190 "Luxury Real Estate", 191 "New Development Marketing", 192 "Co-ops & Condominiums", 193 "Townhouses", 194 "Branded Residences", 195 "Prime & Super-Prime Residential Sales", 196 "Hamptons Real Estate", 197 "Client Privacy & Discretion" 198 ] 199 }; 200 injectSchema(realEstateAgentSchema); 201 } 202</script>
202 203 204 <!-- GOOGLE TRANSLATE STYLES are moved to external CSS --> 205</head> 206<body> 207 <div id="google_translate_element" style="display: none"></div> 208 209 <nav id="global-navbar" data-el-id="43e7a874-fb1e-4cdd-91fe-eb6bf5b9179b"> 210 <div class="redesign"> 211 <div class="content-container header"> 212 <div class="container header__container"> 213 <div class="navbar"> 214 <div class="logo"> 215 <a href="/" class="logo__link"> 216 <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/a49a6a3c-dc1a-4671-9b5e-fd6286da66fb" 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/a49a6a3c-dc1a-4671-9b5e-fd6286da66fb 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/a49a6a3c-dc1a-4671-9b5e-fd6286da66fb 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/a49a6a3c-dc1a-4671-9b5e-fd6286da66fb 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a49a6a3c-dc1a-4671-9b5e-fd6286da66fb 1920w" class="logo__img light" alt="Noble Black & Partners, team at the Corcoran Group"> 217 <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/341a255e-50bd-40f3-832e-db80120c9357" 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/341a255e-50bd-40f3-832e-db80120c9357 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/341a255e-50bd-40f3-832e-db80120c9357 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/341a255e-50bd-40f3-832e-db80120c9357 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/341a255e-50bd-40f3-832e-db80120c9357 1920w" class="logo__img dark" alt="Noble Black & Partners, Team at the Corcoran Group"> 218 </a> 219 </div> 220 <div class="navigation"> 221 <ul> 222 <li class="navigation__item"> 223 <a data-type="CONTACT_US" class="navigation__link wow fadeInUp"><span>Contact Us</span></a> 224 </li> 225 </ul> 226 </div> 227 <div class="buttons-wrapper"> 228 <button type="button" class="hamburger-component hamburger"> 229 <span class="hamburger__bars"></span> 230 </button> 231 </div> 232 </div> 233 </div> 234 </div> 235</div> 236 237 </nav> 238 <div id="global-sidemenu" class="sidemenu" data-el-id="11fa925d-d2dd-4213-a0fa-d46f769e2c18"> 239 <div class="sidebar"> 240 241 <button class="toggle sidebar__close close"></button> 242 <div class="sidebar__content"> 243 244 <ul class="sidebar__nav"> 245 <li class="sidebar__nav-item"> 246 <a href="/" class="sidebar__nav-link">Home</a> 247 </li> 248 <li class="sidebar__nav-item"> 249 <a href="/about" class="sidebar__nav-link">About Noble Black & Partners</a> 250 </li> 251 <li class="sidebar__nav-item"> 252 <a href="/team" class="sidebar__nav-link">Our Team</a> 253 </li> 254 <li class="sidebar__nav-item sub-nav-container"> 255 <div class="sub-nav"> 256 <ul class="sidebar__subnav"> 257 <li class="sidebar__subnav-item"><a href="/properties/sale#section-20099172-5b83-4663-b7ee-b00d12930db0" class="sidebar__subnav-link">New York City</a></li> 258 <li class="sidebar__subnav-item"><a href="/properties/sale#section-0a7da5eb-31a3-47e5-b8dc-f0a5dc8ce3ee" class="sidebar__subnav-link">The Hamptons</a></li> 259 </ul> 260 </div> 261 <a href="#" class="sidebar__nav-link link main-nav">Exclusive Listings</a> 262 </li> 263 <li class="sidebar__nav-item"> 264 <a href="/properties/sold" class="sidebar__nav-link">Notable Sales</a> 265 </li> 266 <li class="sidebar__nav-item"> 267 <a href="/properties/global" class="sidebar__nav-link">Global Listings</a> 268 </li> 269 <li class="sidebar__nav-item"> 270 <a href="/developments" class="sidebar__nav-link">New Development</a> 271 </li> 272 <li class="sidebar__nav-item"> 273 <a href="/the-watchcase" class="sidebar__nav-link">The Watchcase</a> 274 </li> 275 <li class="sidebar__nav-item sub-nav-container"> 276 <div class="sub-nav"> 277 <ul class="sidebar__subnav"> 278 <li class="sidebar__subnav-item"><a href="/press" class="sidebar__subnav-link">Press</a></li> 279 <li class="sidebar__subnav-item"><a href="/appearances" class="sidebar__subnav-link">Appearances</a></li> 280 <li class="sidebar__subnav-item"><a href="/blog" class="sidebar__subnav-link">Blog</a></li> 281 </ul> 282 </div> 283 <a href="#" class="sidebar__nav-link link main-nav">Press & Media</a> 284 </li> 285 <li class="sidebar__nav-item"> 286 <a href="/neighborhoods" class="sidebar__nav-link">Neighborhoods</a> 287 </li> 288 <li class="sidebar__nav-item"> 289 <a href="/contact" class="sidebar__nav-link">Contact Us</a> 290 </li> 291 </ul> 292 </div> 293</div> 294 </div> 295 <div id="global-mobile-contact" class="mobile-contact-wrapper" data-el-id="ca33406a-b24a-4100-b315-87fd53d5adc2"> 296 <div class="mobile-contact "> 297 <div class="buttons-holder"> 298 <a href="/cdn-cgi/l/email-protection#f39d9c919f96b3909c81909c81929ddd909c9e"> 299 <i class="lp-i lp-i--envelope"></i> 300 </a> 301 <a href="tel:2129098460"> 302 <i class="lp-i lp-i--phone"></i> 303 </a> 304 </div> 305</div> 306 307 </div> 308 <section class="image-section is-font-color-light is-background-color-light" id="section-8f1f5c8d-8a03-4477-9806-d2c1c545bc21" data-el-id="e6c6941b-dd32-4d6b-b4aa-56593f2d58bb"> 309 <div class="redesign custom-intro"> 310 <div class="container"> 311 <h1 class="custom-intro__title">Meet the Team</h1> 312 313 <p class="custom-intro__subtitle serif">Get to know our talented team.</p> 314 </div> 315</div> 316 317</section> 318<section id="section-9246491e-d5f8-41a8-a437-7e55d6487d07" class="solid-section is-font-color-dark is-background-color-light" data-el-id="4fd88bff-4528-4094-a238-bc747e38f1f6">
vendor: 109 bytes, lines 318-319
318 319<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
319<script type="text/x-handlebars-template" class="gridItem pagination-script"><div class="team-member__container"> 320 <a class="team-member__link" href="/agent/{{slug}}"> 321 <div class="team-member__image-wrap"> 322 <div class="team-member__image"> 323 {{{mediaImage avatar alt=(concat firstName " " lastName) sizes="(max-width: 768px) 100vw, (max-width: 1000px) 50vw, 33vw"}}} 324 </div> 325 <div class="team-member__hover"> 326 <span class="btn btn--primary-dark team-member__btn button-style-2">LEARN MORE</span> 327 </div> 328 </div> 329 <div class="team-member__info"> 330 <span class="team-member__name">{{firstName}} {{lastName}}</span> 331 <span class="team-member__role">{{position}}</span> 332 </div> 333 </a> 334</div> 335</script>
335<div class="team-grid redesign"> 336 <div class="lp-container"> 337 <div class="lp-title-group"> 338 339 <h2 class="lp-h2">.</h2> 340 <p class="lp-text--subtitle lp-pre-line"><h2 class="lp-h2 custom-h2">Partners in the <span class="italic">noble</span> pursuit of real estate</h2></p> 341 </div> 342 343 <div class="js-sync-flag" style="display: none;"></div> 344 345 346 347 348 <div class="team-grid__wrapper data-container"> 349 <div class="team-member__container"> 350 <a class="team-member__link" href="/agent/noble-black"> 351 <div class="team-member__image-wrap"> 352 <div class="team-member__image"> 353 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/17543460-5646-49f9-ad11-e9544edc8f71" 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/17543460-5646-49f9-ad11-e9544edc8f71 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/17543460-5646-49f9-ad11-e9544edc8f71 1053w" sizes="(max-width: 768px) 100vw, (max-width: 1000px) 50vw, 33vw" alt="Noble Black in a blue suit and patterned teal tie, standing with arms crossed." class="portrait" loading="lazy"> 354 </div> 355 <div class="team-member__hover"> 356 <span class="btn btn--primary-dark team-member__btn button-style-2">LEARN MORE</span> 357 </div> 358 </div> 359 <div class="team-member__info"> 360 <span class="team-member__name">Noble Black</span> 361 <span class="team-member__role">Licensed Associate Real Estate Broker</span> 362 </div> 363 </a> 364 </div> 365 <div class="team-member__container"> 366 <a class="team-member__link" href="/agent/justin-figari"> 367 <div class="team-member__image-wrap"> 368 <div class="team-member__image"> 369 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/41075ca5-8272-4eb1-abcb-2e5243288a0d" alt="Justin Figari wearing a dark suit and white shirt." class="portrait" loading="lazy"> 370 </div> 371 <div class="team-member__hover"> 372 <span class="btn btn--primary-dark team-member__btn button-style-2">LEARN MORE</span> 373 </div> 374 </div> 375 <div class="team-member__info"> 376 <span class="team-member__name">Justin Figari</span> 377 <span class="team-member__role">Partner | Lic. Assoc. RE Broker</span> 378 </div> 379 </a> 380 </div> 381 <div class="team-member__container"> 382 <a class="team-member__link" href="/agent/jennifer-kaufman-stillman"> 383 <div class="team-member__image-wrap"> 384 <div class="team-member__image"> 385 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/beddfc4f-392d-443d-83f8-990c1e532f18" alt="Jennifer (Kaufman) Stillman smiling in a teal jacket and white blouse." class="portrait" loading="lazy"> 386 </div> 387 <div class="team-member__hover"> 388 <span class="btn btn--primary-dark team-member__btn button-style-2">LEARN MORE</span> 389 </div> 390 </div> 391 <div class="team-member__info"> 392 <span class="team-member__name">Jennifer (Kaufman) Stillman</span> 393 <span class="team-member__role">Partner | Lic Assoc. RE Broker</span> 394 </div> 395 </a> 396 </div> 397 <div class="team-member__container"> 398 <a class="team-member__link" href="/agent/corinne-cory-cahlon"> 399 <div class="team-member__image-wrap"> 400 <div class="team-member__image"> 401 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/00d2de37-5423-4cb7-a784-6221df4bf58d" alt="Cory Cahlon in a bright green top with an embellished design." class="portrait" loading="lazy"> 402 </div> 403 <div class="team-member__hover">
404 <span class="btn btn--primary-dark team-member__btn button-style-2">LEARN MORE</span> 405 </div> 406 </div> 407 <div class="team-member__info"> 408 <span class="team-member__name">Cory Cahlon</span> 409 <span class="team-member__role">Partner | Lic. Assoc. RE Broker</span> 410 </div> 411 </a> 412 </div> 413 <div class="team-member__container"> 414 <a class="team-member__link" href="/agent/matthew-mackay"> 415 <div class="team-member__image-wrap"> 416 <div class="team-member__image"> 417 <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/8c220adc-1fc5-4c7b-bbda-9bcc72a3d48f" 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/8c220adc-1fc5-4c7b-bbda-9bcc72a3d48f 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/8c220adc-1fc5-4c7b-bbda-9bcc72a3d48f 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/8c220adc-1fc5-4c7b-bbda-9bcc72a3d48f 1920w" sizes="(max-width: 768px) 100vw, (max-width: 1000px) 50vw, 33vw" alt="Matthew Mackay smiling in dark glasses, a navy blazer, and white shirt." class="portrait" loading="lazy"> 418 </div> 419 <div class="team-member__hover"> 420 <span class="btn btn--primary-dark team-member__btn button-style-2">LEARN MORE</span> 421 </div> 422 </div> 423 <div class="team-member__info"> 424 <span class="team-member__name">Matthew Mackay</span> 425 <span class="team-member__role">Partner | Lic. Assoc. RE Broker</span> 426 </div> 427 </a> 428 </div> 429 <div class="team-member__container"> 430 <a class="team-member__link" href="/agent/jesse-feldman"> 431 <div class="team-member__image-wrap"> 432 <div class="team-member__image"> 433 <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/7d48937d-9bcd-4054-bd1b-5cd5ec1d7121" 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/7d48937d-9bcd-4054-bd1b-5cd5ec1d7121 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/7d48937d-9bcd-4054-bd1b-5cd5ec1d7121 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/7d48937d-9bcd-4054-bd1b-5cd5ec1d7121 1500w" sizes="(max-width: 768px) 100vw, (max-width: 1000px) 50vw, 33vw" alt="Jesse Feldman smiling in a navy suit and white shirt." class="portrait" loading="lazy"> 434 </div> 435 <div class="team-member__hover"> 436 <span class="btn btn--primary-dark team-member__btn button-style-2">LEARN MORE</span> 437 </div> 438 </div> 439 <div class="team-member__info"> 440 <span class="team-member__name">Jesse Feldman</span> 441 <span class="team-member__role">Licensed Associate Real Estate Broker</span> 442 </div> 443 </a> 444 </div> 445 <div class="team-member__container"> 446 <a class="team-member__link" href="/agent/connor-cuccinelli"> 447 <div class="team-member__image-wrap"> 448 <div class="team-member__image"> 449 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/86cf9901-291f-46d0-b421-f27a5f082bd8" alt="Connor Cuccinelli smiling in a navy blazer and open-collar white shirt outdoors." class="portrait" loading="lazy"> 450 </div> 451 <div class="team-member__hover">
452 <span class="btn btn--primary-dark team-member__btn button-style-2">LEARN MORE</span> 453 </div> 454 </div> 455 <div class="team-member__info"> 456 <span class="team-member__name">Connor Cuccinelli</span> 457 <span class="team-member__role">Licensed Real Estate Salesperson</span> 458 </div> 459 </a> 460 </div> 461 <div class="team-member__container"> 462 <a class="team-member__link" href="/agent/david-dubin"> 463 <div class="team-member__image-wrap"> 464 <div class="team-member__image"> 465 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/053a06fe-8f50-46c7-84e3-614230831b92" alt="David Dubin wearing amber glasses and a navy pinstripe suit with a green tie" class="portrait" loading="lazy"> 466 </div> 467 <div class="team-member__hover"> 468 <span class="btn btn--primary-dark team-member__btn button-style-2">LEARN MORE</span> 469 </div> 470 </div> 471 <div class="team-member__info"> 472 <span class="team-member__name">David Dubin</span> 473 <span class="team-member__role">Licensed Associate Real Estate Broker</span> 474 </div> 475 </a> 476 </div> 477 </div> 478 <div class="lp-pagination pagination-container pagination-style-1"></div> 479 480 481 <div class="empty-message js-empty-message"> 482 <h3 class="header2 empty-title">No result found</h3> 483 </div> 484 </div> 485</div> 486</section> 487<section class="image-section is-font-color-light is-background-color-light" id="section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75" data-el-id="e6b1ae9f-5b8d-4ac5-a23f-bfb55ef91c3c"> 488
488<script> 489 (function(){ 490 const sectionId = 'section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75' 491 const section = document.querySelector(`#${sectionId}`); 492 var sectionBg = window.getComputedStyle(section, null).getPropertyValue('background-image'); 493 494 if('false' === 'true') { 495 section.classList.add('parallax-enabled'); 496 section.style.setProperty('--sectionBackground', sectionBg); 497 section.style.setProperty('background', 'none'); 498 } 499 })() 500</script>
500 501<div class="redesign work-with-us "> 502 <div class="container"> 503 <h2 class="serif">Work with us</h2> 504 <div class="description">Noble Black has been consistently ranked among the top brokers in New York City by The Wall Street Journal and The Real Deal. 505 506We offer the highest level of expertise, service, and integrity.</div> 507 <div class="btn-container"> 508 <a 509 role="button" 510 data-type="CONTACT_US" 511 class="btn btn--primary-light button-style-2" 512 513 514 515 516 517 > 518 Contact Us 519 </a> 520 </div> 521 </div> 522</div> 523</section> 524<section id="section-840698fa-42be-4d74-b5a0-781c1f3985f0" class="solid-section is-font-color-dark is-background-color-light" data-el-id="1b5dc03a-76a1-431a-b1f1-9def4c75f9f5"> 525
525<script type="text/x-handlebars-template" class="jsIGTemplate"> 526 {{#each items}} 527 <a href="{{permalink}}" target="_blank" class="feed__content__item wow fadeInUp insta-type-{{mediaType}}" data-wow-delay="1.{{@index}}s"> 528 <div class=" feed__content__item__img" style="background-image: url('{{#ifEquals mediaType 'VIDEO'}}{{thumbnailUrl}}{{else}}{{mediaUrl}}{{/ifEquals}}');"> 529 <svg class=" feed__content__item__img__icon " xmlns=" http://www.w3.org/2000/svg " width=" 24px " height=" 24px " viewBox=" 0 0 1024 1024 " fill=" #ffffff "> 530 <path d=" M710.5 127c-51.4 2.9-99.2 20.1-140.6 50.6-12.2 9-24.6 20.5-40.9 38-8.9 9.6-16.6 17.4-17 17.4-.4 0-9-8.8-19.1-19.6-10.1-10.8-22.8-23.4-28.4-28.1-27.1-22.9-60.5-40-95-48.8-25.3-6.4-42.3-8.5-71.2-8.5-85.6 0-155.3 33.7-203.9 98.6-35.5 47.4-53 103-51.1 161.9 1.4 40.2 9.9 74 27.9 109.9 10.7 21.4 26 43.7 41.5 60.5 21.2 23.2 398.7 422.6 399.3 422.6.6 0 378.1-399.4 399.3-422.6 15.5-16.8 30.8-39.1 41.5-60.5 18-35.9 26.5-69.7 27.9-109.9 1.4-42.1-6.6-80.4-24.6-118-26.5-55.2-67.5-95.5-122.7-120.8-26.5-12.1-60.4-20.7-87.4-22.2-19.8-1.1-22.8-1.2-35.5-.5z "></path> 531 </svg> 532 </div> 533 {{#ifEquals mediaType 'VIDEO'}} 534 <div class="media-type-icon"> 535 <svg width="30px" height="30px" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="#fff" d="M19.369 6.042H2.082A2.086 2.086 0 000 8.125v13.71a2.086 2.086 0 002.083 2.083h17.285a2.086 2.086 0 002.084-2.083V8.125a2.086 2.086 0 00-2.084-2.083zM22.84 17.833l7.16 3.91V8.262l-7.16 3.908v5.662z"/></svg> 536 </div> 537 {{/ifEquals}} 538 </a> 539 {{/each}} 540</script>
540 541<div class="feed redesign"> 542 <div class="lp-container"> 543 <span class="pre-title feature wow fadeInUp">Follow Us</span> 544 <a href="#" target="_blank" class="instagram-link jsIGLink"><h3 class="lp-h3 wow fadeInUp jsIGName jsShrink instagram-username" data-wow-delay=".5s"></h3></a> 545 <div class="feed__content jsIGContainer"></div> 546 </div> 547</div> 548</section> 549 550 <div id="modals" class="modals"></div> 551 <footer id="global-footer" class="is-font-color-dark is-background-color-light" data-el-id="874a9373-949d-4275-b72f-04c2a6ec373b"> 552 <div class="footer redesign no_newsletter no-names"> 553 <div class="container"> 554 <div class="info-wrap"> 555 <div class="info-wrap-contact agent_box"> 556 <div class="info-wrap-contact_zone"> 557 <div class="info-wrap-contact_cell"> 558 <i> 559 <svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg"> 560 <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" /> 561 <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" /> 562 <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" /> 563 </svg> 564 </i> 565 <p class="info-wrap-contact_title">Address</p> 566 <p class="info-wrap-contact_link grey-text"><div class="custom-footer"> 567<div class="top"><img class="logo" src="https://media-production.lp-cdn.com/media/341a255e-50bd-40f3-832e-db80120c9357" alt="Noble Black & Partners Logo"></div> 568<ul class="lp-socials social_icons-style-1 socials socials--grey socials_zone"> 569<li><a class="lp-socials__link socials__item socials__link wow fadeInUp" style="visibility: visible; animation-delay: 0s; animation-name: fadeInUp;" href="https://www.facebook.com/NobleBlackTeam" target="_blank" rel="noopener" data-wow-delay="0s" aria-label="FACEBOOK" data-wow-offset="10"> <em class="lp-i lp-i--facebook" aria-hidden="true"> </em> </a></li> 570<li><a class="lp-socials__link socials__item socials__link wow fadeInUp" style="visibility: visible; animation-delay: 0.1s; animation-name: fadeInUp;" href="https://www.instagram.com/nobleblack1/" target="_blank" rel="noopener" data-wow-delay="0.1s" aria-label="INSTAGRAM" data-wow-offset="10"> <em class="lp-i lp-i--instagram" aria-hidden="true"> </em> </a></li> 571<li><a class="lp-socials__link socials__item socials__link wow fadeInUp" style="visibility: visible; animation-delay: 0.2s; animation-name: fadeInUp;" href="https://www.linkedin.com/in/nobleblack" target="_blank" rel="noopener" data-wow-delay="0.2s" aria-label="LINKEDIN" data-wow-offset="10"> <em class="lp-i lp-i--linkedin" aria-hidden="true"> </em> </a></li> 572<li><a class="lp-socials__link socials__item socials__link wow fadeInUp" style="visibility: visible; animation-delay: 0.3s; animation-name: fadeInUp;" href="https://www.youtube.com/channel/UC4eJzM896qwaS9I-oRGo0-w/feed" target="_blank" rel="noopener" data-wow-delay="0.3s" aria-label="YOUTUBE" data-wow-offset="10"> <em class="lp-i lp-i--youtube" aria-hidden="true"> </em> </a></li> 573</ul> 574<div class="info"> 575<div class="cols"> 576<p class="title">Contact</p> 577<p>Noble Black</p> 578<a class="custom-link dark" href="/cdn-cgi/l/email-protection#0f61606d636a4f6c607d6c607d6e61216c6062"><span class="__cf_email__" data-cfemail="d8b6b7bab4bd98bbb7aabbb7aab9b6f6bbb7b5">[email protected]</span></a> <a class="custom-link dark" href="tel:3475263308">(347) 526-3308</a></div> 579<div class="cols"> 580<p class="title">Office</p> 581<p>590 Madison Ave<br>New York, NY 10022</p> 582<a class="custom-link dark" href="tel:2123553550">(212) 355-3550</a></div> 583</div> 584</div></p> 585 </div> 586 </div> 587 </div> 588 </div> 589 <div class="text_footer first_text_footer"> 590 <div class="luxury-text"> 591 <p><a href="https://www.corcoran.com/" target="_blank" rel="noopener"><img class="broker-logo" src="https://res.cloudinary.com/luxuryp/images/f_auto,q_auto/gjfeltufvewwivvd5jq1/corcoran-logo-dark" alt="Corcora"></a></p> 592<div class="luxury-text"> 593<p class="grey" style="font-size: 14px;">Noble Black & Partners at The Corcoran Group | NY 10301211307<br>Licensed Real Estate Team</p>
594<div class="disclimer-links"><a class="custom-link dark" style="font-size: 14px; font-weight: normal;" href="https://dos.ny.gov/system/files/documents/2025/03/nys-housing-and-anti-discrimination-notice_02.2025.pdf" target="_blank" rel="noopener"> Fair Housing Notice </a> 595<p>|</p> 596<a class="custom-link dark" style="font-size: 14px; font-weight: normal;" href="https://cloud-prod.corcoranlabs.com/pdf-docs/StandardizedOperatingProcedure2022-04-04.pdf" target="_blank" rel="noopener">Corcoran Standard Operating Procedures</a> 597<p>|</p> 598<a class="custom-link dark" style="font-size: 14px; font-weight: normal;" href="https://www.ecorcoran.com/uploaded_doc/Reasonable_Modification__Accommodation_Notice_May_2022.pdf" target="_blank" rel="noopener">Reasonable Accommodations</a></div> 599<p> </p> 600<p style="font-size: 12px;">©<span class="auto-year-update">#</span> Noble Black & Partners. All rights reserved. Corcoran® and the Corcoran Logo are registered service marks owned by Corcoran Group LLC. Noble Black & Partners fully supports the principles of the Fair Housing Act and the Equal Opportunity Act. Each franchise is independently owned and operated.</p> 601<p> </p> 602<p style="font-size: 12px;">Equal Housing Opportunity. This website is not the official website of The Corcoran Group or its affiliated companies, and neither The Corcoran Group nor its affiliated companies in any way warrant the accuracy of any information contained herein. Any property or services offered for sale on this website shall not be considered an offer to sell such goods or services in any state other New York. <br><br>Prerequisites for prospective homebuyers in order to receive services from Corcoran: i. There is no general requirement to provide photo identification prior to a property showing. However, prior to entry to a Corcoran office, customers may be required to present photo identification for security or similar purposes. Also, individual property owners may require photo identification prior to a showing, and we will communicate this information to buyers or tenants in advance of such showing. ii. An exclusive buyer representation agreement is not required. iii. A pre-approval for a mortgage loan is not required to work with us, per se, however, individual property owners may require one – and if so, we will communicate that to buyers as applicable for any properties buyers may wish to view.</p> 603<p> </p> 604<p style="font-size: 12px;">Listing information for certain New York City properties provided courtesy of the Real Estate Board of New York’s Residential Listing Service (the “RLS”). The information contained in this listing has not been verified by the RLS and should be verified by the consumer. The listing information provided here is for the consumer’s personal, non-commercial use. Retransmission, redistribution or copying of this listing information is strictly prohibited except in connection with a consumer's consideration of the purchase and/or sale of an individual property. This listing information is not verified for authenticity or accuracy and is not guaranteed and may not reflect all real estate activity in the market. ©<span class="auto-year-update">#</span> The Real Estate Board of New York, Inc., all rights reserved.</p> 605<p> </p> 606<p style="font-size: 12px;">This advertisement does not suggest that the broker has a listing in this property or properties or that any property is currently available.</p> 607<p> </p> 608<p style="font-size: 12px;">This information is not verified for authenticity or accuracy and is not guaranteed and may not reflect all real estate activity in the market. ©<span class="auto-year-update">#</span> The Real Estate Board of New York, Inc., All rights reserved.</p> 609<p> </p> 610<p style="opacity: 1;"><img style="width: 100px; height: auto;" src="https://res.cloudinary.com/luxuryp/images/zbxf1j3xdplm6lhfnqo3/realtor-eho-logo-07232021-update-dark"></p> 611</div> 612 </div> 613 </div> 614 <div class="text_footer second_text_footer"> 615 <div class="text_content_wrap"> 616 <div> 617 <div> </div> 618<style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style> 619 </div> 620 </div> 621 </div> 622 <div class="info-privacy"> 623 <div class="form-row info-privacy__row"> 624 625 <div class="form-col form-col--powered powered-box"> 626 <div class="img-wrap"> 627 <img src="https://media-production.lp-cdn.com/media/e2e1c290-42bd-4c1d-b88f-37484167cb91" alt=""> 628 </div> 629 <div class="powered_zone"> 630 Powered by <a href="https://www.luxurypresence.com/real-estate-website-design/" target="_blank" class="lp-link grey-text luxury-link underlined hyperlink-style-1">Luxury Presence</a> 631 </div> 632 </div> 633 634 <div class="form-col form-col--copyright"> 635 <div class="copy_zone">
636 <span class="copy_words">Copyright ©</span> <span class="auto-year-update">2026</span> 637 | <a href="/terms-and-conditions" class="lp-link grey-text hyperlink-style-1">Privacy Policy</a> 638 639 <span class="additional-links-separator"></span> 640 <a href="/html-sitemap" class="lp-link grey-text ">HTML Sitemap</a> 641 </div> 642 </div> 643 644 <div class="form-col form-col--socials"> 645 <ul class="lp-socials social_icons-style-1 socials socials--grey socials_zone"> 646 647 </ul> </div> 648 </div> 649 </div> 650 </div> 651</div> 652 653 </footer> 654 655 <div id="modal-global-contact-us" class="modal " 656 data-el-id="" 657 style="background-color: ;" 658 > 659 <div class="modal-content"> 660 <div class="contact-form redesign " style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/5b942d38-f3a3-49da-94cb-aaa73d30a4a3')"> 661 <div class="container"> 662 <div class="section-details" style="--colorTxt: #ffffff"> 663 <h2>Noble Black & Partners</h2> 664 665 <div class="info-zone"> 666 667 <div class="info-zone_contact type_user"> 668 <h4 class="serif">Contact</h4> 669 <div class="info-zone_contact_cell"> 670 <i> 671 <svg width="30" height="25" viewBox="0 0 30 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 672 <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"/> 673 </svg> 674 </i> 675 <p class="contact_title">Phone</p> 676 <a href="tel:(347) 526-3308" class="lp-link info-zone_contact_link link hyperlink-style-2">(347) 526-3308</a> 677 </div> 678 <div class="info-zone_contact_cell"> 679 <i> 680 <svg width="30" height="19" viewBox="0 0 30 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 681 <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"/> 682 </svg> 683 </i> 684 <p class="contact_title">Email</p> 685 <a href="/cdn-cgi/l/email-protection#3f51505d535a7f5c504d5c504d5e51115c5052" class="lp-link info-zone_contact_link link hyperlink-style-2"><span class="__cf_email__" data-cfemail="8fe1e0ede3eacfece0fdece0fdeee1a1ece0e2">[email protected]</span></a> 686 </div> 687 </div> 688 <div class="info-zone_contact"> 689 <div class="info-zone_contact_cell"> 690 <i> 691 <svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg"> 692 <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
6920.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"/> 693 <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"/> 694 <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"/> 695 </svg> 696 </i> 697 <p class="info-wrap-contact_title">Address</p> 698 <p class="info-zone_contact_link pre-line">590 Madison Ave 699 New York, NY 10022</p> 700 </div> 701 </div> 702 <div class="info-zone_contact"> 703 <div class="info-zone_contact_cell"> 704 <p class="pre-line"><div></div><style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style></p> 705 </div> 706 </div> 707 <ul class="lp-socials social_icons-style-2 socials socials--grey socials_zone footer__contact-column"> 708 709 <li> 710 <a 711 href="https://www.facebook.com/NobleBlackTeam" 712 class="lp-socials__link socials__item wow fadeInUp socials__link" 713 data-wow-delay="0s" 714 target="_blank" 715 aria-label="FACEBOOK" 716 > 717 <span class="lp-i lp-i--facebook" aria-hidden="true"></span> 718 </a> 719 </li> 720 <li> 721 <a 722 href="https://www.instagram.com/nobleblack1/" 723 class="lp-socials__link socials__item wow fadeInUp socials__link" 724 data-wow-delay="0.1s" 725 target="_blank" 726 aria-label="INSTAGRAM" 727 > 728 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 729 </a> 730 </li> 731 <li> 732 <a 733 href="https://www.linkedin.com/in/nobleblack" 734 class="lp-socials__link socials__item wow fadeInUp socials__link" 735 data-wow-delay="0.2s" 736 target="_blank" 737 aria-label="LINKEDIN" 738 > 739 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 740 </a> 741 </li> 742 <li> 743 <a 744 href="https://www.youtube.com/channel/UC4eJzM896qwaS9I-oRGo0-w/feed" 745 class="lp-socials__link socials__item wow fadeInUp socials__link" 746 data-wow-delay="0.3s" 747 target="_blank" 748 aria-label="YOUTUBE" 749 >
750 <span class="lp-i lp-i--youtube" aria-hidden="true"></span> 751 </a> 752 </li> 753 </ul> </div> 754 </div> 755 <div class="section-message"> 756 <form data-type="contact-form"> 757 <h2>Submit a Message</h2> 758 <div class="h-pot"> 759 <label for="-middleName">Middle Name</label> 760 <input id="-middleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 761 </div> 762 763 764 <div class="lp-input-group"> 765 <label for="prod-name" class="lp-label">Name</label> 766 <input id="prod-name" name="name" value="" required="" class="lp-input lp-input--light"> 767 </div> 768 <div class="lp-input-group"> 769 <label for="prod-email" class="lp-label">Email</label> 770 <input id="prod-email" type="email" name="email" value="" required="" class="lp-input lp-input--light"> 771 </div> 772 <div class="lp-input-group"> 773 <label for="prod-phone" class="lp-label">Phone</label> 774 <input id="prod-phone" type="tel" name="phoneNumber" value="" required="" class="lp-input lp-input--light"> 775 </div> 776 <div class="lp-input-group m16"> 777 <label for="prod-message" class="lp-label">Message</label> 778 <textarea id="prod-message" name="message" value="" required="" class="lp-input"></textarea> 779 </div> 780 781 <div class="lp-disclaimer"> 782 <div class='lp-tcr-content' style='margin-bottom: 1em;'> 783 <span class='lp-tcr-message'> 784 By providing your contact information to Noble Black, your personal 785 information will be processed in accordance with Noble Black's 786 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. By 787 checking the box(es) below, you expressly consent to receive marketing 788 or promotional real estate communication from Noble Black in the 789 manner selected by you. For SMS text messages, message frequency varies. 790 Message and data rates may apply. Consent is not a condition of purchase 791 of any goods or services. You may opt out of receiving further 792 communications from Noble Black at any time. To opt out of receiving 793 SMS text messages, reply STOP to unsubscribe. SMS text messaging is 794 subject to our <a href='/terms-and-conditions#sms-details' target='_blank'>Terms of Use</a>. 795 </span> 796 </div> 797 <label style='display: none;' for='-termsAccepted'>Opt 798 in/Disclaimer Consent:</label> 799 <label class='lp-tcr-content' style='margin-bottom: 1em;'> 800 <span class='lp-tcr-checkbox'> 801 <input 802 type='checkbox' 803 name='termsAccepted' 804 id='-termsAccepted' 805 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 806 oninput="this.setCustomValidity('')" 807 required 808 value='Yes, I agree to receive email or phone call communications from Noble Black.' 809 /> 810 </span> 811 <span class='lp-tcr-message'> 812 Yes, I agree to receive email or phone call communications from 813 Noble Black. 814 </span> 815 </label> 816 <label style='display: none;' for='-customConsent'>Opt 817 in/Disclaimer Consent:</label> 818 <label class='lp-tcr-content'> 819 <span class='lp-tcr-checkbox'> 820 <input 821 type='checkbox' 822 name='customConsent' 823 id='-customConsent'
824 value='Yes, I agree to receive SMS text messages from Noble Black.' 825 /> 826 </span> 827 <span class='lp-tcr-message'> 828 Yes, I agree to receive SMS text messages from Noble Black. 829 </span> 830 </label> 831 832 </div> 833 834 <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" /> 835 836 837 <button type="submit" class="submitButton lp-btn button-style-2"> 838 <span class="label-initial">Submit</span> 839 <span class="label-loading">Submitting</span> 840 <span class="label-success">Submitted</span> 841 <span class="submit-icon lp-i lp-i--circle-notch lp-i--spin"></span> 842 </button> 843 <p class="success-message success hide"> 844 Message sent successfully! 845 </p> 846 </form> 847 848 849 </div> 850 </div> 851 </div> 852 853 </div> 854 <button class="close lp-close" type="button" aria-label="close modal"> 855 <span class="lp-close-icon" aria-hidden="true"></span> 856 </button> 857 </div> 858 <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;"> 859 <style> 860 #qualifying-questions-modal .custom-select-toggle { 861 border: 1px solid #848484; 862 border-radius: 8px; 863 padding: 12px 16px; 864 } 865 866 #qualifying-questions-modal .custom-select-toggle.is-placeholder { 867 color: #848484; 868 } 869 870 #qualifying-questions-modal #qualifying-questions-modal-phoneNumber::placeholder { 871 color: #848484; 872 opacity: 1; 873 } 874 875 #qualifying-questions-modal .disclaimer-more { 876 display: none; 877 } 878 879 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-more { 880 display: inline; 881 } 882 883 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-ellipsis { 884 display: none; 885 } 886 </style>
vendor: 119 bytes, lines 886-887
886 887 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
887<script> 888 function toggleDisclaimerQualifyingQuestionsModal() { 889 const disclaimerText = document.getElementById('qualifying-questions-modal-disclaimer-text'); 890 const toggleButton = document.getElementById('qualifying-questions-modal-toggle-disclaimer'); 891 892 if (disclaimerText.classList.contains('collapsed')) { 893 disclaimerText.classList.remove('collapsed'); 894 toggleButton.textContent = 'Read less'; 895 toggleButton.setAttribute('aria-expanded', 'true'); 896 } else { 897 disclaimerText.classList.add('collapsed'); 898 toggleButton.textContent = 'Read more'; 899 toggleButton.setAttribute('aria-expanded', 'false'); 900 } 901 } 902 </script>
902 903 <div style="max-width: 400px; width: 95%; margin: 0 auto;"> 904 <div style="background: #fff; border: none; border-radius: 16px; color: black; box-shadow: none; position: relative;"> 905 <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;"> 906 <span aria-hidden="true">×</span> 907 </button> 908 <div style="padding: 40px 30px 32px;"> 909 <div style="text-align: left; margin-bottom: 32px;"> 910 <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;"> 911 Thanks, please provide more information to help serve you 912 </h2> 913 </div> 914 <form id="qualifying-questions-modal-form" data-type="contact-form"> 915 <input type="hidden" name="source" value="PROFILE_UPDATE" /> 916 <input type="hidden" name="email" value="" id="qualifying-questions-modal-email" /> 917 <input type="hidden" name="triggerSource" id="qualifying-questions-modal-triggerSource" value="" /> 918 <label for="qualifying-questions-modal-email" style="display:none;"> 919 Email 920 </label> 921 <label for="qualifying-questions-modal-triggerSource" style="display:none;"> 922 Trigger Source 923 </label> 924 925 <div style="margin-bottom: 20px;"> 926 <label for="qualifying-questions-modal-phoneNumber" style="display:none;"> 927 Phone Number 928 </label> 929 <input 930 type="tel" 931 id="qualifying-questions-modal-phoneNumber" 932 name="phoneNumber" 933 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;" 934 pattern="^\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}$" 935 required 936 placeholder="Phone" 937 aria-label="Phone Number" 938 inputmode="tel" 939 autocomplete="tel" 940 onfocus="this.style.borderColor='black';" 941 onblur="this.style.borderColor='#848484';" 942 /> 943 </div> 944 945 <div style="margin-bottom: 20px;"> 946 <label for="qualifying-questions-modal-interest" style="display:none;"> 947 Interest 948 </label> 949 <select 950 id="qualifying-questions-modal-interest" 951 name="interest" 952 required 953 data-label="Interest" 954 aria-label="Interest" 955 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;" 956 onfocus="this.style.borderColor='black'; this.style.color='black';" 957 onblur="this.style.borderColor='#848484'; if(this.value === '') this.style.color='#848484'; else this.style.color='black';" 958 > 959 <option value="" style="background: #fff; color: #848484;" disabled selected>Interested in...</option> 960 <option value="Selling & Buying" style="background: #fff; color: black;">Selling & Buying</option> 961 <option value="Selling" style="background: #fff; color: black;">Selling</option> 962 <option value="Buying" style="background: #fff; color: black;">Buying</option> 963 <option value="Renting" style="background: #fff; color: black;">Renting</option> 964 <option value="Other" style="background: #fff; color: black;">Other</option> 965 </select> 966 </div> 967 968 <div style="margin-bottom: 32px; font-size: 12px; line-height: 1.2;"> 969 <label style='display: none;' for='qualifying-questions-modal-qualifying-questions-termsAccepted'>Opt In/Disclaimer Consent:</label> 970 <label class='lp-tcr-content'>
971 <span class='lp-tcr-checkbox'> 972 <input 973 type='checkbox' 974 id='qualifying-questions-modal-qualifying-questions-termsAccepted' 975 name='termsAccepted' 976 aria-describedby='qualifying-questions-modal-disclaimer-text' 977 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 978 oninput="this.setCustomValidity('')" 979 required 980 /></span> 981 <span class='lp-tcr-message'> 982 <div id="qualifying-questions-modal-disclaimer-text" class="collapsed" style="color: #848484;"> 983 984 I agree to be contacted by 985 <strong>Noble Black</strong> 986 via call, email, and text <span class="disclaimer-more">for real estate services. 987 To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 988 You can also click the unsubscribe link in the emails. 989 Message and data rates may apply. Message frequency may vary.</span> 990 <span class="disclaimer-ellipsis">...</span> 991 <a href='/terms-and-conditions' target='_blank' rel='noopener noreferrer' style='text-decoration: underline;'>Privacy Policy</a>. 992 </div> 993 <button 994 id="qualifying-questions-modal-toggle-disclaimer" 995 type="button" 996 style="background: none; border: none; color: #848484; font-size: inherit; font-weight: bold; padding: 0; margin-top: 4px; cursor: pointer;" 997 aria-expanded="false" 998 onclick="toggleDisclaimerQualifyingQuestionsModal()" 999 > 1000 Read more 1001 </button> 1002 </span> 1003 </label> 1004 </div> 1005 1006 <div> 1007 <button 1008 type="submit" 1009 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;" 1010 onmouseover="this.style.background='transparent'; this.style.color='black';" 1011 onmouseout="this.style.background='black'; this.style.color='white';" 1012 > 1013 Submit 1014 </button> 1015 </div> 1016 </form> 1017 </div> 1018 </div> 1019 </div> 1020 </div> 1021 1022
1022<script> 1023 (function() { 1024 var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy")); 1025 1026 if ("IntersectionObserver" in window && lazyVideos.length > 0) { 1027 var lazyVideoObserver = new IntersectionObserver(function(entries, observer) { 1028 entries.forEach(function(video) { 1029 if (video.isIntersecting) { 1030 for (var source in video.target.children) { 1031 var videoSource = video.target.children[source]; 1032 if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") { 1033 videoSource.src = videoSource.dataset.src; 1034 } 1035 } 1036 1037 video.target.load(); 1038 video.target.classList.remove("lazy"); 1039 lazyVideoObserver.unobserve(video.target); 1040 } 1041 }); 1042 }); 1043 1044 lazyVideos.forEach(function(lazyVideo) { 1045 lazyVideoObserver.observe(lazyVideo); 1046 }); 1047 } 1048 })(); 1049 </script>
1049 1050 1051 <!-- Global site tag (gtag.js) - Google Analytics --> 1052
1052<script defer src="https://www.googletagmanager.com/gtag/js"></script>
1052 1053 1054 <!-- Google Tag Manager --> 1055
1055<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 1056 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 1057 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.async=false;j.src= 1058 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 1059 })(window,document,'script','dataLayer','GTM-T9SFQGHZ');</script>
1059 1060 <!-- End Google Tag Manager --> 1061 1062 1063 <!-- LP Tracker (divolte.js) - LP Divolte --> 1064
1064<script>window.divolteLp=window.divolteLp||function(){(divolteLp.q=divolteLp.q||[]).push(arguments)}</script>
1064 1065 <!-- LP Tracker (eventBus) - LP EventBus --> 1066
1066<script>window.eventBusLp=window.eventBusLp||function(){(eventBusLp.q=eventBusLp.q||[]).push(arguments)}</script>
1066 1067 1068
1068<script> 1069 window.dataLayer = window.dataLayer || []; 1070 document.sendGoogleTagManagerEvent = function() { 1071 /* Honor GPC-enabled browsers and prevent GTM event if GPC is enabled. More details: https://global-privacy-control.glitch.me/ */ 1072 if (window.navigator.globalPrivacyControl) { 1073 return; 1074 } 1075 1076 dataLayer.push(arguments); 1077 } 1078 1079 document.sendGoogleTagManagerEvent('js', new Date()); 1080 document.sendGoogleTagManagerEvent('config', 'G-5CH4GQDHES', { page: location.pathname, location: location.href }); 1081 document.sendGoogleAnalyticsEvent = function(googleEvent) { 1082 document.sendGoogleTagManagerEvent('event', googleEvent.eventAction || googleEvent.hitType, { 1083 event_category: googleEvent.eventCategory, 1084 event_label: googleEvent.eventLabel, 1085 value: googleEvent.eventValue, 1086 page: googleEvent.page, 1087 location: googleEvent.location 1088 }) 1089 }; 1090 1091 document.addEventListener("DOMContentLoaded", function() { 1092 (function() { 1093 //If the page has an element with ID of auto-year-update the element will be populated with the current year. 1094 var date = new Date(); 1095 var elements = document.getElementsByClassName('auto-year-update'); 1096 var i; 1097 for (i = 0; i < elements.length; i++) { 1098 elements[i].innerText = date.getFullYear(); 1099 } 1100 })(); 1101 if (window.divolteLp) { 1102 window.divolteLp('sendLpPageView', {}); 1103 } 1104 if (window.eventBusLp) { 1105 window.eventBusLp('sendLpPageView', {}); 1106 } 1107 }); 1108 </script>
1108 1109 1110 1111
1111<script> 1112 // Function to dynamically load a script 1113 function loadScript(url, callback) { 1114 var script = document.createElement('script'); 1115 script.type = 'text/javascript'; 1116 script.src = url; 1117 script.defer = true; 1118 script.async = true; 1119 script.onload = callback; 1120 document.head.appendChild(script); 1121 } 1122 1123 // Function to dynamically load CSS file 1124 function loadCSS(url) { 1125 var link = document.createElement("link"); 1126 link.rel = "stylesheet"; 1127 link.href = url; 1128 document.head.appendChild(link); 1129 } 1130 1131 // Global methods / variables that can be accessed by element js 1132 window.luxuryPresence = { 1133 libs: { 1134 loadJs: loadScript, 1135 loadCss: loadCSS, 1136 jsLibsMap: { 1137 paroller: { 1138 jsSrc: 'https://d1e1jt2fj4r8r.cloudfront.net/javascript/jquery.paroller.min.js', 1139 isLoaded: false, 1140 }, 1141 ionRangeSlider: { 1142 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js', 1143 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css', 1144 isLoaded: false, 1145 requires: ['jquery'], 1146 }, 1147 splide: { 1148 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/js/splide.min.js', 1149 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/css/splide-core.min.css', 1150 isLoaded: false, 1151 }, 1152 wow: { 1153 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js', 1154 isLoaded: false, 1155 }, 1156 jquery: { 1157 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js', 1158 isLoaded: false, 1159 }, 1160 slick: { 1161 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js', 1162 isLoaded: false, 1163 requires: ['jquery'], 1164 }, 1165 libphonenumber: { 1166 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.11.8/libphonenumber-js.min.js', 1167 isLoaded: false, 1168 }, 1169 }, 1170 }, 1171 }; 1172 </script>
1172 1173
1173<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>
1173 1174
1174<script defer src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.8/handlebars.min.js"></script>
1174 1175
1175<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/handlebars-intl.min.js"></script>
1175 1176
1176<script defer src="https://cdnjs.cloudflare.com/ajax/libs/superagent/4.1.0/superagent.min.js"></script>
1176 1177
1177<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>
1177 1178
1178<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>
1178 1179
1179<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>
1179 1180 1181 <!-- GOOGLE TRANSLATE SCRIPT --> 1182
1182<script> 1183 function googleTranslateElementInit() { 1184 // list of languages can be overridden by setting window.customLanguages in the head JS. example `window.customLanguages = 'en,de,fr,ro,sk,pl'` 1185 // Language codes can be taken from here https://cloud.google.com/translate/docs/languages 1186 const DEFAULT_LANGUAGES = 'en,es,zh-CN,zh-TW,tl,vi,ar,ko,ru,de,fr,hi,pt'; 1187 document.querySelectorAll('[data-type="TRANSLATE"]').forEach(function(translate){ 1188 translate.innerText = ''; 1189 new google.translate.TranslateElement({ 1190 pageLanguage: 'en', 1191 layout: google.translate.TranslateElement.InlineLayout.SIMPLE, 1192 includedLanguages: window.customLanguages || DEFAULT_LANGUAGES, 1193 }, translate); 1194 }); 1195 } 1196 </script>
1196 1197
1197<script defer src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
1197 1198
1198<script defer src="https://accounts.google.com/gsi/intermediate"></script>
1198 1199 1200 <!-- GOOGLE TRANSLATE SCRIPT END--> 1201
1201<script> 1202 1203 // UI helpers 1204 (function () { 1205 1206 function getSideMenu () { 1207 return document.querySelector('body > div.sidemenu'); 1208 } 1209 1210 function sideMenuHide (instant) { 1211 var sideMenu = getSideMenu(); 1212 if (!sideMenu || !sideMenu.classList.contains('visible')) { 1213 return; 1214 } 1215 sideMenu.classList.remove('visible'); 1216 sideMenu.dispatchEvent(new CustomEvent('lpui-hide', { detail: { instant: !!instant } })); 1217 window.dispatchEvent(new CustomEvent('lpui-sidemenu-hide', { detail: {instant: !!instant} })); 1218 } 1219 1220 function sideMenuShow () { 1221 var sideMenu = getSideMenu(); 1222 if (!sideMenu || sideMenu.classList.contains('visible')) { 1223 return; 1224 } 1225 sideMenu.classList.add('visible'); 1226 sideMenu.dispatchEvent(new Event('lpui-show')); 1227 window.dispatchEvent(new Event('lpui-sidemenu-show')); 1228 } 1229 1230 function sideMenuToggle () { 1231 var sideMenu = getSideMenu(); 1232 if (!sideMenu) { 1233 return; 1234 } 1235 var isSideMenuVisible = sideMenu.classList.contains('visible'); 1236 if (isSideMenuVisible) { 1237 sideMenuHide(); 1238 } else { 1239 sideMenuShow(); 1240 } 1241 } 1242 1243 var scrollLockRequests = {}; 1244 window.__debug_scrollLockRequests = scrollLockRequests; 1245 var hideScrollStyles = ''+ 1246 'body {'+ 1247 'overflow: hidden;' + 1248 '}'; 1249 var hideScrollId = 'hide-body-scroll-style'; 1250 1251 function scrollLock () { 1252 var style = document.createElement('style'); 1253 style.id = hideScrollId; 1254 style.textContent = hideScrollStyles; 1255 document.head.appendChild(style); 1256 window.dispatchEvent(new Event('lpui-scroll-locked')); 1257 } 1258 1259 function scrollUnlock () { 1260 document.getElementById(hideScrollId)?.remove(); 1261 window.dispatchEvent(new Event('lpui-scroll-unlocked')); 1262 } 1263 1264 function requestScrollLock (lockId) { 1265 var wasLocked = Object.keys(scrollLockRequests).length > 0; 1266 scrollLockRequests[lockId || '__anonymous_lock'] = true; 1267 if (!wasLocked) { 1268 scrollLock(); 1269 } 1270 } 1271 1272 function releaseScrollLock (lockId) { 1273 if (lockId) { 1274 delete scrollLockRequests[lockId]; 1275 if (!Object.keys(scrollLockRequests).length) { 1276 scrollUnlock(); 1277 } 1278 } else { 1279 scrollLockRequests = {}; 1280 window.__debug_scrollLockRequests = scrollLockRequests; 1281 scrollUnlock(); 1282 } 1283 } 1284 1285 function showModal (modalId, options) { 1286 var modal = document.getElementById(modalId); 1287 if (!modal) { 1288 return; 1289 } 1290 1291 if (!modal.classList.contains('visible')) { 1292 modal.classList.add('visible'); 1293 if (options && options.scrollLock) { 1294 window.lpUI.requestScrollLock(modalId); 1295 } 1296 modal.dispatchEvent(new Event('lpui-show')); 1297 window.dispatchEvent(new CustomEvent('lpui-modal-show', { detail: { id: modalId } })); 1298 } 1299 1300 const visibleModals = document.querySelectorAll('.modal.visible'); 1301 1302 if (visibleModals.length > 1) { 1303 1304 const maxZIndex = Array.from(visibleModals).reduce((maxZIndex, modal) => { 1305 const zIndex = window.getComputedStyle(modal).zIndex; 1306 const parsedZIndex = zIndex !== 'auto' ? parseInt(zIndex) : 0; 1307 return Math.max(maxZIndex, parsedZIndex); 1308 }, 0); 1309 1310 modal.style.zIndex = maxZIndex + 1; 1311 } 1312 1313 } 1314 1315 function _hideModal (modalEl) { 1316 if (!modalEl) { 1317 return; 1318 } 1319 if (!modalEl.classList.contains('visible')) { 1320 return; 1321 } 1322 modalEl.classList.remove('visible'); 1323 modalEl.style.zIndex = '';
1324 modalEl.dispatchEvent(new Event('lpui-hide')); 1325 var modalId = modalEl.getAttribute('id'); 1326 if (modalId) { 1327 window.lpUI.releaseScrollLock(modalId); 1328 window.dispatchEvent(new CustomEvent('lpui-modal-hide', { detail: { id: modalId } })); 1329 } 1330 } 1331 1332 function hideModal (modalId) { 1333 _hideModal(document.getElementById(modalId)); 1334 } 1335 1336 function hideClosestModal (el) { 1337 const modal = el?.closest('.modal'); 1338 if (!modal) { 1339 return; 1340 } 1341 if (modal.classList) { 1342 _hideModal(modal); 1343 return; 1344 } 1345 if (modal.length && modal[0].classList) { 1346 _hideModal(modal[0]); 1347 } 1348 } 1349 1350 window.lpUI = { 1351 sideMenuHide: sideMenuHide, 1352 sideMenuShow: sideMenuShow, 1353 sideMenuToggle: sideMenuToggle, 1354 requestScrollLock: requestScrollLock, 1355 releaseScrollLock: releaseScrollLock, 1356 showModal: showModal, 1357 hideModal: hideModal, 1358 hideClosestModal: hideClosestModal 1359 } 1360 })(); 1361 1362 var stringifyPrimitive = function(v) { 1363 switch (typeof v) { 1364 case 'string': 1365 return v; 1366 1367 case 'boolean': 1368 return v ? 'true' : 'false'; 1369 1370 case 'number': 1371 return isFinite(v) ? v : ''; 1372 1373 default: 1374 return ''; 1375 } 1376 }; 1377 1378 function objectToQuerystring(obj, sep, eq, name) { 1379 // https://github.com/Gozala/querystring/blob/master/encode.js 1380 sep = sep || '&'; 1381 eq = eq || '='; 1382 if (obj === null) { 1383 obj = undefined; 1384 } 1385 1386 if (typeof obj === 'object') { 1387 return Object.keys(obj).map(function(k) { 1388 var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; 1389 if (Array.isArray(obj[k])) { 1390 return obj[k].map(function(v) { 1391 return ks + encodeURIComponent(stringifyPrimitive(v)); 1392 }).join(sep); 1393 } else { 1394 return ks + encodeURIComponent(stringifyPrimitive(obj[k])); 1395 } 1396 }).filter(Boolean).join(sep); 1397 1398 } 1399 1400 if (!name) return ''; 1401 return encodeURIComponent(stringifyPrimitive(name)) + eq + 1402 encodeURIComponent(stringifyPrimitive(obj)); 1403 } 1404 1405 function getPath(url, options) { 1406 var parser = document.createElement('a'); 1407 parser.href = url || ''; 1408 var path = parser.pathname || ''; 1409 if (path[0] !== '/') { 1410 // IE does not return path starting with a slash 1411 path = '/' + path; 1412 } 1413 1414 if (options && options.queryString) { 1415 path += parser.search; 1416 } 1417 1418 return path; 1419 } 1420 1421 function getMLSAutocomplete(keyword) { 1422 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 1423 var query = { 1424 kind: 'listings', 1425 query: keyword 1426 }; 1427 1428 return superagent 1429 .get(searchURL) 1430 .query(query) 1431 .then(function(res) { 1432 var data = res.body || []; 1433 // Array of listing_auto_complete documents: id, display_address, city, state, 1434 // price, sold_price, status, status_modified_at, photo_urls (array of URLs). 1435 1436 return data; 1437 }); 1438 } 1439 1440 function getMLSAutocompleteWithFilters(keyword, filters = {}) { 1441 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 1442 1443 return superagent 1444 .get(searchURL) 1445 .query({ kind: 'listings', query: keyword, ...filters }) 1446 .then(function(res) { 1447 // Same response shape as getMLSAutocomplete. 1448 return res.body || []; 1449 }); 1450 } 1451 1452 function makeMlsLink(data) { 1453 // Code Dupe from utils/googlePlace 1454 // mapping of google data type to mls data type 1455 var mapping = { 1456 neighborhood: 'neighborhood', 1457 locality: 'place', 1458 administrative_area_level_2: 'county', 1459 administrative_area_level_1: 'state', 1460 postal_code: 'postalcode', 1461 }; 1462 1463 function _filterTypes(types) { 1464 return types.filter(function(type) { return type !== 'political' }); 1465 } 1466 1467 if (!data || !Object.keys(data).length) { 1468 return '/home-search/listings'; 1469 } 1470 1471 var newData = {};
1472 _filterTypes(data.types).forEach(function(type) { 1473 if (mapping[type]) { 1474 newData.search_type = mapping[type]; 1475 } 1476 }); 1477 newData.omnibox = data.formatted_address; 1478 data.address_components.forEach(function(component) { 1479 _filterTypes(component.types).forEach(function(type) { 1480 if (mapping[type]) { 1481 newData[mapping[type]] = component.long_name; 1482 } 1483 }); 1484 }); 1485 var bounds = data.geometry.bounds; 1486 var convertedData = Object.assign(bounds, newData); 1487 1488 return '/home-search/listings?' + objectToQuerystring(convertedData); 1489 } 1490 1491 function debounce(func, wait) { 1492 let timeout; 1493 return function(...args) { 1494 const context = this; 1495 clearTimeout(timeout); 1496 timeout = setTimeout(() => func.apply(context, args), wait) 1497 } 1498 } 1499 1500 // Global methods / variables that can be accessed by element js 1501 window.luxuryPresence = { 1502 ...window.luxuryPresence, 1503 defaults: { 1504 companyId: '1b2e84eb-ab00-4e30-a6ec-30fa180236eb', 1505 apiGatewayUrl: '/api-gw', 1506 routerUrl: '/api-nv', 1507 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\
1507n }\n propertiesCount(\n \n agentIds: $agentIds\n teamIds: $teamIds\n propertyId: $propertyId\n propertyIds: $propertyIds\n prioritizeIds: $prioritizeIds\n companyId: $companyId\n network: $network\n networkId: $networkId\n statusId: $statusId\n statusIds: $statusIds\n excludeStatusId: $excludeStatusId\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n officeIds: $officeIds\n addressState: $addressState\n addressCity: $addressCity\n developmentId: $developmentId\n featuredListing: $featuredListing\n leaseProperty: $leaseProperty\n search: $search\n searchTermMode: $searchTermMode\n salesPriceGTE: $salesPriceGTE\n salesPriceLTE: $salesPriceLTE\n leasePriceGTE: $leasePriceGTE\n leasePriceLTE: $leasePriceLTE\n livingSpaceSizeGTE: $livingSpaceSizeGTE\n livingSpaceSizeLTE: $livingSpaceSizeLTE\n bathCountGTE: $bathCountGTE\n bathCountLTE: $bathCountLTE\n bedroomCountGTE: $bedroomCountGTE\n bedroomCountLTE: $bedroomCountLTE\n architectureStyle: $architectureStyle\n lifestyle: $lifestyle\n propertyTypeId: $propertyTypeId\n propertyTypeIds: $propertyTypeIds\n spaceTypeIds: $spaceTypeIds\n tag: $tag\n archived: $archived\n globalProperty: $globalProperty\n withGeo: $withGeo\n openHouse: $openHouse\n displayMLSListings: $displayMLSListings\n advancedFilters: $advancedFilters\n seasonalPriceId: $seasonalPriceId\n\n ) {\n count\n }\n }\n","pressReleases":"\n query PressReleases (\n $companyId: ID\n $pressReleaseIds: [ID!]\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: String\n $search: String\n $categories: [String!]\n $propertyId: [ID!]\n $developmentId: [ID!]\n $agentId: [ID!]\n $teamId: [ID!]\n $year: [Int!]\n ) {\n pressReleases (\n companyId: $companyId\n pressReleaseIds: $pressReleaseIds\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n categories: $categories\n propertyId: $propertyId\n developmentId: $developmentId\n agentId: $agentId\n teamId: $teamId\n year: $year\n ) {\n items {\n id\n title\n description\n author\n externalUrl\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n publishedAt\n categories\n }\n total\n }\n }\n","posts":"\n query Posts (\n $companyId: String\n $postId: [ID!]\n $slug: String\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: String\n $search: String\n $featured: Boolean\n $categoryId: [String!]\n $neighborhoodId: [String!]\n ) {\n posts (\n companyId: $companyId\n postId: $postId\n slug: $slug\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n featured: $featured\n postStatusId: \"5f528253-abb7-484e-95c3-330269ac1102\"\n categoryId: $categoryId\n neighborhoodId: $neighborhoodId\n ) {\n items {\n id\n postId\n title\n subtitle\n description\n status: postStatus\n featured\n slug\n categories {\n id\n name\n }\n createdAt\n publishedAt\n updatedAt\n scheduledAt\n createdBy {\n ... on Agent {\n firstName\n lastName\n }\n }\n customAuthor\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n seoTitle\n seoDescription\n }\n total\n }\n }\n","testimonials":"\n query Testimonials (\n $companyId: String\n $agentId: ID\n $teamId: ID\n $testimonialIds: [ID!]\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: String\n $search: String\n ) {\n testimonials (\n companyId: $companyId\n agentId: $agentId\n teamId: $teamId\n testimonialIds: $testimonialIds\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n ) {\n items {\n id\n testimonialId\n body\n author\n position\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n seoTitle\n seoDescription\n agents {\n slug\n email\n firstName\n lastName\n avatar {\n smallUrl\n height\n width\n }\n }\n }\n total\n }\n }\n","neighborhoods":"\n query Neighborhoods (\n $neighborhoodId: ID\n $companyId: String\n $search: String\n $tag: String\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirectionEnum\n ) {\n neighborhoods (\n neighborhoodId: $neighborhoodId\n companyId: $companyId\n search: $search\n tag: $tag\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n ) {\n id\n name\n description\n descriptionShort\n slug\n tags\n googlePlaceData\n mlsLink\n createdAt\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n }\n seoTitle\n seoDescription\n }\n neighborhoodsCount(\n companyId: $companyId\n search: $search\n tag: $tag\n ) {\n count\n }\n }\n","developments":"\n query Developments (\n $companyId: ID!\n $developmentIds: [ID!]\n $agentId: String\n $slug: String\n $search: String\n $tag: [String!]\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirection\n $neighborhoodId: ID\n $neighborhoodIds: [ID!]\n ) {\n developments (\n companyId: $companyId\n developmentIds: $developmentIds\n agentId: $agentId\n slug: $slug\n search: $search\n tag: $tag\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n ) {\n items {\n id\n name\n description\n descriptionShort\n slug\n createdAt\n updatedAt\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n logoMedia {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n websiteUrl\n videoUrl\n googlePlaceData\n coordinates\n mlsLink\n seoTitle\n seoDescription\n featuresAndAmenities {\n featureIds\n features {\n featureId\n name\n }\n description\n }\n latitude\n longitude\n addressLine1\n addressLine2\n city\n state\n zipCode\n country\n yearCompleted\n residences\n availability\n neighborhoodId\n developer\n architect\n interiorDesigner\n stories\n buildingHeight\n buildingHeightUnit\n bedMin\n bedMax\n bathMin\n bathMax\n livingSpaceMin\n livingSpaceMa
1507x\n livingSpaceUnit\n lotSizeMin\n lotSizeMax\n lotSizeUnit\n priceMin\n priceMax\n priceCurrency\n tags\n }\n total\n }\n }\n","pois":"\n query PointsOfInterest (\n $regionId: UUID!\n $radius: Int\n $offset: Int\n $limit: Int\n $categories: [AreasOfInterestCategories!]\n $sortBy: AreasOfInterestSorting\n ) {\n pois: areasOfInterest (\n input: {\n regionId: $regionId\n radius: $radius\n offset: $offset\n limit: $limit\n categories: $categories\n sortBy: $sortBy\n }\n ) {\n items {\n name\n imageUrl\n url\n reviewCount\n rating\n price\n displayPhone\n distance\n category\n location {\n address1\n address2\n address3\n city\n zipCode\n country\n state\n }\n }\n total\n }\n }\n","offices":"\n query Offices (\n $companyId: ID!\n $officeIds: [ID!]\n $officeMlsIds: [String!]\n $externalIds: [String!]\n $externalSource: String\n $agentId: ID\n $archived: Boolean\n $tags: [String!]\n $slug: String\n $search: String\n $sort: String\n $sortDir: SortDirection\n $offset: Int\n $limit: Int\n ) {\n offices (\n companyId: $companyId\n officeIds: $officeIds\n officeMlsIds: $officeMlsIds\n externalIds: $externalIds\n externalSource: $externalSource\n agentId: $agentId\n archived: $archived\n tags: $tags\n slug: $slug\n search: $search\n sort: $sort\n sortDir: $sortDir\n offset: $offset\n limit: $limit\n ) {\n items {\n id\n companyId\n name\n slug\n officeMlsId\n shortDescription\n fullDescription\n addressLine1\n addressLine2\n addressCity\n addressState\n addressPostalCode\n addressCountry\n phone\n email\n officeHours\n coordinates\n googlePlaceData\n seoTitle\n seoDescription\n fullAddress\n tags\n media {\n id\n originalUrl\n thumbnailUrl\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n }\n }\n total\n }\n }\n","teams":"\n query Teams (\n $companyId: ID\n $teamIds: [ID!]\n $agentId: ID\n $externalIds: [String!]\n $externalSource: String\n $slug: String\n $search: String\n $sort: String\n $sortDir: String\n $offset: Int\n $limit: Int\n ) {\n teams (\n companyId: $companyId\n teamIds: $teamIds\n agentId: $agentId\n externalIds: $externalIds\n externalSource: $externalSource\n slug: $slug\n search: $search\n sort: $sort\n sortDir: $sortDir\n offset: $offset\n limit: $limit\n ) {\n items {\n id\n companyId\n name\n email\n shortBio\n addressLine1\n addressLine2\n addressCity\n addressState\n addressCountry\n phoneNumber1\n phoneNumber2\n postalCode\n avatar {\n id\n thumbnailUrl\n smallUrl\n mediumUrl\n largeUrl\n }\n urlWebsite\n socialLinks\n socialLinksArray\n tags\n seoTitle\n seoDesc\n slug\n displayOrder\n }\n total\n }\n }\n"}, 1508 propertyPlaceholderImage: {} 1509 }, 1510 objectToQuerystring: objectToQuerystring, 1511 getPath: getPath, 1512 getMLSAutocomplete: getMLSAutocomplete, 1513 getMLSAutocompleteWithFilters: getMLSAutocompleteWithFilters, 1514 makeMlsLink: makeMlsLink, 1515 debounce: debounce, 1516 }; 1517 1518 var wowOffset = 100; 1519 </script>
1519 1520
1520<script> 1521 (()=>{function e(e){return e&&e.__esModule?e.default:e}var t=globalThis,r={},i={},s=t.parcelRequired4f7;null==s&&((s=function(e){if(e in r)return r[e].exports;if(e in i){var t=i[e];delete i[e];var s={id:e,exports:{}};return r[e]=s,t.call(s.exports,s,s.exports),s.exports}var o=Error("Cannot find module '"+e+"'");throw o.code="MODULE_NOT_FOUND",o}).register=function(e,t){i[e]=t},t.parcelRequired4f7=s);var o=s.register;o("ikl6F",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.formatMoney=e.exports.convertAmount=e.exports.fetchExchangeRates=e.exports.toSupportedToCurrency=e.exports.toSupportedFromCurrency=e.exports.SUPPORTED_TO_CURRENCIES=e.exports.SUPPORTED_FROM_CURRENCIES=e.exports.DISPLAY_CURRENCIES=e.exports.writeCurrencyCookie=e.exports.readValidCurrencyCookie=e.exports.readCurrencyCookie=e.exports.clearCurrencyCookie=e.exports.CURRENCY_COOKIE_SAME_SITE=e.exports.CURRENCY_COOKIE_PATH=e.exports.CURRENCY_COOKIE_NAME=e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS=void 0;var r=s("65bUu");Object.defineProperty(e.exports,"CURRENCY_COOKIE_MAX_AGE_SECONDS",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_MAX_AGE_SECONDS}}),Object.defineProperty(e.exports,"CURRENCY_COOKIE_NAME",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_NAME}}),Object.defineProperty(e.exports,"CURRENCY_COOKIE_PATH",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_PATH}}),Object.defineProperty(e.exports,"CURRENCY_COOKIE_SAME_SITE",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_SAME_SITE}}),Object.defineProperty(e.exports,"clearCurrencyCookie",{enumerable:!0,get:function(){return r.clearCurrencyCookie}}),Object.defineProperty(e.exports,"readCurrencyCookie",{enumerable:!0,get:function(){return r.readCurrencyCookie}}),Object.defineProperty(e.exports,"readValidCurrencyCookie",{enumerable:!0,get:function(){return r.readValidCurrencyCookie}}),Object.defineProperty(e.exports,"writeCurrencyCookie",{enumerable:!0,get:function(){return r.writeCurrencyCookie}});var i=s("gUuHZ");Object.defineProperty(e.exports,"DISPLAY_CURRENCIES",{enumerable:!0,get:function(){return i.DISPLAY_CURRENCIES}}),Object.defineProperty(e.exports,"SUPPORTED_FROM_CURRENCIES",{enumerable:!0,get:function(){return i.SUPPORTED_FROM_CURRENCIES}}),Object.defineProperty(e.exports,"SUPPORTED_TO_CURRENCIES",{enumerable:!0,get:function(){return i.SUPPORTED_TO_CURRENCIES}}),Object.defineProperty(e.exports,"toSupportedFromCurrency",{enumerable:!0,get:function(){return i.toSupportedFromCurrency}}),Object.defineProperty(e.exports,"toSupportedToCurrency",{enumerable:!0,get:function(){return i.toSupportedToCurrency}});var o=s("jCxYG");Object.defineProperty(e.exports,"fetchExchangeRates",{enumerable:!0,get:function(){return o.fetchExchangeRates}});var n=s("igUcG");Object.defineProperty(e.exports,"convertAmount",{enumerable:!0,get:function(){return n.convertAmount}}),Object.defineProperty(e.exports,"formatMoney",{enumerable:!0,get:function(){return n.formatMoney}})}),o("65bUu",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.readValidCurrencyCookie=e.exports.clearCurrencyCookie=e.exports.writeCurrencyCookie=e.exports.readCurrencyCookie=e.exports.CURRENCY_COOKIE_PATH=e.exports.CURRENCY_COOKIE_SAME_SITE=e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS=e.exports.CURRENCY_COOKIE_NAME=void 0;var r=s("gUuHZ");e.exports.CURRENCY_COOKIE_NAME="lp-currency",e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS=31536e3,e.exports.CURRENCY_COOKIE_SAME_SITE="Lax",e.exports.CURRENCY_COOKIE_PATH="/";let i=e=>e?.trim().toLowerCase().replace(/^\.+/,"")||void 0,o=e=>"undefined"!=typeof DOMException&&e instanceof DOMException,n=({document:t})=>{let r=`${e.exports.CURRENCY_COOKIE_NAME}=`;return t.cookie.split(";").map(e=>e.trim()).filter(e=>e.startsWith(r)).map(e=>e.slice(r.length))},a=e=>{try{return decodeURIComponent(e)}catch{return}};e.exports.readCurrencyCookie=e=>{let t=(e=>{try{return n(e)[0]}catch(e){if(!o(e))throw e;return}})(e);return void 0===t?void 0:a(t)};let l=(t,r,i,s)=>{var o;let n,a;t.document.cookie=`${e.exports.CURRENCY_COOKIE_NAME}=${r}${o=t.location,n="https:"===o.protocol?"; Secure":"",a=s?`; Domain=${s}`:"",`; Path=${e.exports.CURRENCY_COOKIE_PATH}; Max-Age=${i}; SameSite=${e.exports.CURRENCY_COOKIE_SAME_SITE}${n}${a}`}`};e.exports.writeCurrencyCookie=(t,s)=>{let a,d=(0,r.toSupportedToCurrency)(s);if(!d)return!1;let c=i(t.domain);try{if(a=n(t)[0],c&&l(t,"",0,void 0),l(t,encodeURIComponent(d),e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS,c),(0,e.exports.readCurrencyCookie)(t)===d)return!0}catch(e){if(!o(e))throw e}return c&&void 0!==a&&((t,r)=>{try{if(n(t).includes(r))return;l(t,r,e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS,void 0)}catch(e){if(!o(e))throw e}})(t,a),!1},e.exports.clearCurrencyCookie=e=>{let t=i(e.domain);try{t&&l(e,"",0,void 0),l(e,"",0,t)}catch(e){if(!o(e))throw e}},e.exports.readValidCurrencyCookie=(t,{enabled:s,enabledCurrencies:d})=>{if(!s)return;let c=(e=>{try{let t=n(e);if(!i(e.domain)||t.length<2)return t[0];return l(e,"",0,void 0),n(e)[0]}catch(e){if(!o(e))throw e;return}})(t);if(void 0===c)return;let u=new Set(d.map(r.toSupportedToCurrency).filter(e=>!!e)),h=(0,r.toSupportedToCurrency)(a(c));
1521if(h&&u.has(h))return h;(0,e.exports.clearCurrencyCookie)(t)}}),o("gUuHZ",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.toSupportedToCurrency=e.exports.SUPPORTED_TO_CURRENCIES=e.exports.DISPLAY_CURRENCIES=e.exports.toSupportedFromCurrency=e.exports.SUPPORTED_FROM_CURRENCIES=void 0,e.exports.SUPPORTED_FROM_CURRENCIES=["usd","cad","eur","gbp"];let r=(e,t)=>{if("string"!=typeof e)return;let r=e.toLowerCase();return t.includes(r)?r:void 0};e.exports.toSupportedFromCurrency=t=>r(t,e.exports.SUPPORTED_FROM_CURRENCIES),e.exports.DISPLAY_CURRENCIES=[{code:"usd",name:"US dollar"},{code:"eur",name:"Euro"},{code:"gbp",name:"Pound sterling"},{code:"cad",name:"Canadian dollar"},{code:"chf",name:"Swiss franc"},{code:"brl",name:"Brazilian real"},{code:"mxn",name:"Mexican peso"},{code:"sek",name:"Swedish krona"},{code:"nok",name:"Norwegian krone"},{code:"dkk",name:"Danish krone"},{code:"ars",name:"Argentine peso"},{code:"cop",name:"Colombian peso"},{code:"clp",name:"Chilean peso"},{code:"pen",name:"Peruvian sol"},{code:"dop",name:"Dominican peso"},{code:"gtq",name:"Guatemalan quetzal"},{code:"crc",name:"Costa Rican colón"},{code:"bob",name:"Bolivian boliviano"},{code:"pyg",name:"Paraguayan guaranÃ"},{code:"kyd",name:"Cayman Islands dollar"}],e.exports.SUPPORTED_TO_CURRENCIES=e.exports.DISPLAY_CURRENCIES.map(e=>e.code),e.exports.toSupportedToCurrency=t=>r(t,e.exports.SUPPORTED_TO_CURRENCIES)}),o("jCxYG",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.fetchExchangeRates=void 0;var r=s("gUuHZ");let i=async(e,{baseUrl:t,signal:i,fetch:s,onError:o})=>{let n=(0,r.toSupportedFromCurrency)(e);if(!n)return{};let a=`${t.replace(/\/$/,"")}/api/v1/exchange-rates?from=${encodeURIComponent(n)}`;try{let e=await (s??fetch)(a,{credentials:"omit",signal:i});if(!e.ok)throw Error(`Exchange rates HTTP ${e.status}`);var l=await e.json();let t=l?.rates;if("object"!=typeof t||null===t)return{};let o={};return Object.entries(t).forEach(([e,t])=>{let i=(0,r.toSupportedToCurrency)(e);i&&"number"==typeof t&&Number.isFinite(t)&&t>0&&(o[i]=t)}),o}catch(e){try{o?.(e)}catch(e){console.warn("fetchExchangeRates: onError callback threw",e)}return{}}};e.exports.fetchExchangeRates=i}),o("igUcG",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.formatMoney=e.exports.convertAmount=void 0;var r=s("gUuHZ");e.exports.convertAmount=(e,t)=>{if(Number.isFinite(e)&&Number.isFinite(t)&&!(t<=0))return e*t},e.exports.formatMoney=(e,t,{precision:i=0}={})=>{let s=(0,r.toSupportedToCurrency)(t);if(!s||!Number.isFinite(e))return;let o=Number.isInteger(i)?i:0,n=Number.isInteger(e)?0:Math.min(Math.max(o,0),20);return new Intl.NumberFormat("en-US",{style:"currency",currency:s.toUpperCase(),minimumFractionDigits:n,maximumFractionDigits:n}).format(e)}});var n={},a={};a={getVideoFirstFrame(e){let t="https://res.cloudinary.com/";if(!e||!e.startsWith(t))return null;let r=e.replace(t,"").replace("f_auto:video","f_auto").split("/");if(-1===r[1].toLowerCase().indexOf("video"))return null;let i=r[r.length-1];i.lastIndexOf(".")>-1?i=`${i.slice(0,i.lastIndexOf("."))}.jpg`:i+=".jpg",r[r.length-1]=i;let s=3;"videos"===r[1].toLowerCase()&&""!==r[2]&&(s=2);let o=/^(?:[a-z]{1,3}|\$\w+)_\S+$/;for(;s<r.length-1&&o.test(r[s]);)s++;return r.splice(s,0,"so_0,eo_0"),t+r.join("/")}};let l={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "},d=/&(?:amp|lt|gt|quot|apos|nbsp|#(?:[0-9]+|[xX][0-9a-fA-F]+));/y,c=/[<&]/g,u=/["'>]/g,h=/<\/p\s*>|<br\s*\/?>|[\r\n\u2028\u2029]/g;function p(e,t){let r="";for(let i=0;i<e.length;){c.lastIndex=i;let s=c.exec(e);if(!s){r+=e.slice(i);break}let o=s.index;r+=e.slice(i,o);let n="&"===e[o]?function(e,t){d.lastIndex=t;let r=d.exec(e);return{text:r?function(e){if("#"!==e[1])return l[e.slice(1,-1)];
1521let t="x"===e[2]||"X"===e[2],r=parseInt(e.slice(t?3:2,-1),t?16:10);return 0===r||r>1114111||r>=55296&&r<=57343?e:160===r?" ":String.fromCodePoint(r)}(r[0]):"&",end:r?d.lastIndex:t+1}}(e,o):function(e,t,r){let i=function(e,t){let r=null;u.lastIndex=t+1;let i=u.exec(e);for(;i;){let t=i[0];if(r)t===r&&(r=null);else if('"'===t||"'"===t)r=t;else if(">"===t)return u.lastIndex;i=u.exec(e)}return -1}(e,t);return{text:-1===i?"<":function(e,t,r,i){if(!i)return"";let s=e.slice(t,r);if(/^<br\s*\/?>$/.test(s))return" ";if(/^<\/p\s*>$/.test(s)){h.lastIndex=r;let t=h.exec(e);if(t&&"<"===t[0][0])return" "}return""}(e,t,i,r),end:-1===i?t+1:i}}(e,o,t);r+=n.text,i=n.end}return r}n=function(e,{isEqual:t}){let r=[{field:"thumbnailUrl",w:320},{field:"smallUrl",w:960},{field:"mediumUrl",w:1280},{field:"largeUrl",w:1920},{field:"xLargeUrl",w:2560},{field:"xxLargeUrl",w:3456}],i=function(e,t,r){let i="en-US";if(!e)return"";if("string"==typeof e){let t=e.trim();if(/[^+\-0-9.]/.test(t))return e;if(!(e=parseFloat(t)))return""}let s="number"==typeof r?r:0,o=Number.isInteger(e)?0:s,n={minimumFractionDigits:o,maximumFractionDigits:o};return"USD"===t?`$${e.toLocaleString(i,n)}`:"CAD"===t?`$${e.toLocaleString(i,n)} CAD`:"EUR"===t?`\u{20AC}${e.toLocaleString(i,n)}`:"GBP"===t?`\xa3${e.toLocaleString(i,n)}`:"PERCENT"===t?`${e}%`:"number"==typeof r&&r>-1?e.toLocaleString(i,{maximumFractionDigits:r}):e.toLocaleString(i)},s=function(e){switch(e){case"DAY":return"daily";case"MONTH":return"monthly";case"WEEK":return"weekly";case"YEAR":return"yearly";case"QUARTER":return"quarterly";case"HALF_YEAR":return"semi-annually";case"NIGHTLY":return"nightly";case"SEASONAL":return"seasonally";default:return""}},o=function(e){switch(e){case"DAY":return"day";case"WEEK":return"wk";case"MONTH":return"mo";case"YEAR":return"yr";case"QUARTER":return"3 mos";case"HALF_YEAR":return"6 mos";case"NIGHTLY":return"night";case"SEASONAL":return"season";default:return""}},n=function(e){switch(e){case"DAY":return"day";case"WEEK":return"week";case"MONTH":return"month";case"YEAR":return"year";case"QUARTER":return"quarter";case"HALF_YEAR":return"6 months";case"NIGHTLY":return"night";case"SEASONAL":return"season";default:return""}},l=function(e,t){let r,i,a=t||{};switch(a.mode){case"short":r=o(e),i=a.frequencySeparator||"/";break;case"standard":case"std":r=n(e),i=a.frequencySeparator||"/";break;default:r=s(e),i=a.frequencySeparator||" "}return r?a.frequencyTag||a.frequencyClass?`${i}<${a.frequencyTag||"span"}${a.frequencyClass?` class="${a.frequencyClass}"`:""}>${r}</${a.frequencyTag||"span"}>`:i+r:""};return{isEmpty(e,t){let r=!e||"string"==typeof e&&!e.trim()||!Object.keys(e).length;return t.fn?r?t.fn(this):t.inverse(this):r},ifEquals(e,r,i){return t(e,r)?i.fn(this):i.inverse(this)},"raw-helper":function(e){return e.fn()},striptags:e=>e?p(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,""),!1):"",striptagsLineBreaks:e=>e?p(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,""),!0):"",truncate:(e,t,r)=>e?e.length>t?"string"==typeof r?e.slice(0,t-r.length)+r:e.slice(0,t):e:"",setSubArray(e=[],t,r,i,s){s.data.root[i]=e.slice(t,r)},formatAreaUnit(e){switch(e){case"ACRE":return"Acres";case"SQUARE_METER":return"Sq.M.";case"SQUARE_YARD":return"Sq.Yd.";default:return"Sq.Ft."}},formatFrequency:s,formatFrequencyShort:o,lpFormatFrequency:(e,t)=>l(e,t&&t.hash),subArray(e,t,r,i){return e>=t&&e<r?i.fn(this):i.inverse(this)},formatPropertyStatus(e,t,r){let i="";switch(e){case"SOLD":i="Sold";break;case"FOR_SALE":i="For Sale";break;case"COMING_SOON":i="Coming Soon";break;case"INACTIVE":i="Inactive";break;case"POCKET_LISTING":i="Pocket Listing";break;case"PENDING":i="Pending";break;case"UNDER_CONTRACT":i="Under Contract";break;case"ACTIVE_UNDER_CONTRACT":i="Active Under Contract";break;default:i=e}return("Sold"===i||"Leased"===i)&&t&&"string"==typeof r&&r&&(i+=` on ${r}`),i},formatGrade(e){switch(e){case"UNDERGRADUATE_COURSES":return"Undergrad";case"PRE_KINDERGARTEN":return"PreK";case"KINDERGARTEN":return"K";case"FIRST_GRADE":return"1st";case"SECOND_GRADE":return"2nd";case"THIRD_GRADE":return"3rd";case"FOURTH_GRADE":return"4th";case"FIFTH_GRADE":return"5th";case"SIXTH_GRADE":return"6th";case"SEVENTH_GRADE":return"7th";case"EIGHTH_GRADE":return"8th";case"NINTH_GRADE":return"9th";case"TENTH_GRADE":return"10th";case"ELEVENTH_GRADE":return"11th";case"TWELFTH_GRADE":return"12th";default:return""}},encodeURI:e=>encodeURI(e),encodeURIComponent:e=>encodeURIComponent(e),hbFormatDate(e,t){if(!e)return"";let r="current"===e?new Date:new Date(e);if(Number.isNaN(r.getTime()))return"";if("YYYY"===t||"year"===t)return`${r.getFullYear()}`;if("MM/DD/YY"===t){let e=r.getMonth()+1;return e<10&&(e=`0${e.toString()}`),`${e}/${r.getDate()}/${r.getFullYear().toString().substr(-2)}`}return`${["January","February","March","April","May","June","July","August","September","October","November","December"][r.getMonth()]} ${r.getDate()}, ${r.getFullYear()}`},openHousesFormat(e,t,r){if(!e||!t)return"";let i=e=>{let t=e.getHours();t>12&&(t-=12);let r=`${t}:${e.getMinutes()>9?e.getMinutes():"0"+e.getMinutes()}`;return e.getHours()>11?r+="PM":r+="AM",r},s="",o=e,n=t;
1521r&&(o=new Date(e).toLocaleString("en-US",{timeZone:r}),n=new Date(t).toLocaleString("en-US",{timeZone:r}),[,,,s]=new Date(t).toLocaleString("en-US",{timeZone:r,timeZoneName:"short"}).split(" "));let a=new Date(o),l=a.toLocaleDateString("en-US"),d=i(a),c=i(new Date(n));return`${l} ${d} - ${c} ${s}`},math:(e,t,r)=>(e=parseFloat(e),({"+":e+(r=parseFloat(r)),"-":e-r,"*":e*r,"/":e/r,"%":e%r})[t]),findByKey(e,t,r,i){let s=(e||[]).find(e=>e[t]===r);return i.fn(s)},capitalize(e,t,r){let i;return"string"==typeof e&&e.length&&(i=e.toLowerCase().split(t).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ").toString()),i},and:(...e)=>Array.prototype.slice.call(e).every(Boolean),or:(...e)=>Array.prototype.slice.call(e,0,-1).some(Boolean),not:e=>!e,orderByIds(t,r,i){let s="",o=null;i.data&&(o=e.createFrame(i.data));let n=(r||[]).filter(Boolean);if(n&&n.length){let e=0;s=n.reduce((r,s,n)=>{let a=(t||[]).find(e=>e.id===s);return a?(o&&(o.index=n-e),r+i.fn(a,{data:o})):(e+=1,r)},"")}else for(let e=0,r=(t||[]).length;e<r;e++)o&&(o.index=e),s+=i.fn(t[e],{data:o});return s},ifIn(e,t,r){return t&&t.indexOf(e)>-1?r.fn(this):r.inverse(this)},partial:(t,r)=>(e.registerPartial(t,e.compile(r.fn())),`
1521<script type="text/x-handlebars-template" class="${t} pagination-script">${r.fn()}<\/script>`),numCompare(e,t,r,i){return({"==":function(e,t){return e==t},"===":function(e,t){return e===t},"!=":function(e,t){return e!=t},"<":function(e,t){return e<t},">":function(e,t){return e>t},"<=":function(e,t){return e<=t},">=":function(e,t){return e>=t}})[r](e,t)?!i.fn||i.fn(this):!!i.fn&&i.inverse(this)},lpFormatNumber:i,arrayToHtmlList:(e,t)=>e.reduce((e,t)=>{try{if("object"==typeof t||null===t)return e;return e+=`<li>${t}</li>`}catch(e){}},""),join:(e,t,r)=>e&&e.join?e.join("string"==typeof t?t:", "):"",dedupe(t,r,i){let s=null,o=0,n=new Set;return i.data&&(s=e.createFrame(i.data)),(t||[]).reduce((e,t,a)=>{let l=r?t[r]:t;return!n.has(l)||r&&void 0===l?(n.add(l),s&&(s.index=a-o),e+i.fn(t,{data:s})):(o+=1,e)},"")},JSONstringify:(e,t)=>JSON.stringify(e),formatPropertyPrice(...t){let r=t[t.length-1].hash,s=t.length>1?t[0]:r.property,o=r.precision||0;t.length>2&&(r.mode=t[1]),r.mode||(r.mode="short");let n=t.length>3?t[2]:r.separator;if("string"!=typeof n&&(n=" | "),s.isPasswordProtected)return"Exclusive Listing";let a=t.length>4?t[3]:r.priceUponRequestText;if("string"!=typeof a&&(a="Price Upon Request"),s.priceUponRequest)return a;let d=s.salesPrice,c=null;"SOLD"!==s.status&&"Leased"!==s.status&&s.reducedPrice&&(r.reducedClass?c=s.reducedPrice:d=s.reducedPrice);let u="";c&&(u+=`<${r.reducedTag||"span"} class="${r.reducedClass}">${i(c,s.currency,o)}</${r.reducedTag||"span"}>`),d&&(d=i(d,s.currency,o),r.priceTag||r.priceClass?u+=`<${r.priceTag||"span"}${r.priceClass?` class="${r.priceClass}"`:""}>${d}</${r.priceTag||"span"}>`:u+=d);let h=s.leasePrice&&i(s.leasePrice,s.currency,o);if(h){u&&(u+=n);let e=`${h}${l(s.leasePeriod,r)}`;r.leaseTag||r.leaseClass?u+=`<${r.leaseTag||"span"}${r.leaseClass?` class="${r.leaseClass}"`:""}>${e}</${r.leaseTag||"span"}>`:u+=e}
1521return new e.SafeString(u)},mediaImage(t,i={}){if(!t)return;let{lazy:s,...o}=i.hash,n="",a="";if("string"==typeof t)n=t;else{let e={},{height:s,width:l,altTagText:d}=t;r.forEach(r=>{t[r.field]&&!e[t[r.field]]&&(e[t[r.field]]=r.w)});let c=Object.keys(e);if(!c.length)return;if(d&&(o.alt=d),s&&l&&(s>=l&&(o.class?o.class+=" portrait":o.class="portrait"),"setDims"in i.hash&&(o.width=l,o.height=s)),c.length>1&&l&&l<e[c[c.length-1]]){let t=c.findIndex(t=>e[t]>=l);c.splice(t+1),e[c[c.length-1]]=l}c.length>1&&(a=c.map(t=>`${t} ${e[t]}w`).join(", "),c.sort((t,r)=>Math.abs(e[t]-1280)-Math.abs(e[r]-1280))),n=c[0]}delete o.setDims,a||delete o.sizes,"alt"in o||(o.alt=""),!("loading"in o)&&(i?.data?.root?.sectionIndex>1||s)&&(o.loading="lazy");let l=Object.keys(o).map(t=>`${e.escapeExpression(t)}="${e.escapeExpression(o[t])}"`).join(" ");return new e.SafeString(`<img src="${n}"${a?` srcset="${a}"`:""}${l?` ${l}`:""}>`)},bgImage:e=>e?"string"==typeof e?e:e.largeUrl||e.url||"":"",concat(...e){let t="";for(let r in e)null!==e[r]&&void 0!==e[r]&&"object"!=typeof e[r]&&(t+=e[r]);return t},setVideoExtension(e,t){if(!e||!t)return"";let r=new URL(e);if("res.cloudinary.com"!==r.host)return r.pathname.endsWith(`.${t}`)?e:"";let i=r.pathname.lastIndexOf("."),s=r.pathname;return -1!==i&&(s=r.pathname.substr(0,i)),r.pathname=`${s}.${t}`,r.toString()},addVideoSources(e){if(!e)return"";if(!e.includes("res.cloudinary.com"))return`<source data-src="${e}">`;let t=e.replace(/\.(?:3gp|mpeg|mp4|m4v|m4p|ogv|ogg|mov|webm)$/,"");return[{format:"webm",codec:"vp9",htmlCodecs:";codecs=vp9"},{format:"mp4",codec:"h265",htmlCodecs:";codecs=hvc1"},{format:"mp4",codec:"h264",htmlCodecs:""}].map(e=>{let r=`${t.replace(/f_auto(?::video)?(?:,q_auto(?::\w+)?)?/,`f_${e.format},vc_${e.codec},q_auto:best,w_1920,c_limit`)}.${e.format}`;return`<source data-src="${r}" type="video/${e.format}${e.htmlCodecs}">`}).join("\n")},cloudinaryVideoFirstFrame:a.getVideoFirstFrame,initials(e,t){if(!e)return"";t?.hash?.endChar&&(e=e.split(t.hash.endChar)[0]);let r=+t?.hash?.maxChars||2,i=e.match(/\b\w/g)?.slice(0,r);return i?(t?.hash?.addText&&(i=i.map(e=>e+t.hash.addText)),i.join(t?.hash?.joinWith||"").toUpperCase()):""},normalizePhone(e){if(!e)return"";let t=String(e).trim();return(t.startsWith("+")?"+":"")+t.replace(/\D/g,"")}}};class m{constructor(e,t,r){if(this.config=e,this.window=t,this.document=r,!this.destroy)throw Error("Controllers must implement a deconstructor")}}let g="lp_lead_form_conversion_fired";function y(e,t){if(e&&t&&"function"==typeof t.sendGoogleTagManagerEvent&&!function(e){try{return"true"===e.sessionStorage.getItem(g)}catch{return!1}}(e))try{t.sendGoogleTagManagerEvent("event","generate_lead");try{e.sessionStorage.setItem(g,"true")}catch{}}catch{}}function f(e){return!!e&&(!!e.expired||Date.now()>=e.expiresAt)}let b="/api/v1/home-valuation";class v extends m{destroy(){}_cleanAddressString(e){if(!e||"string"!=typeof e)return"";let t=e.trim();if(t.includes("User entered address:")){let e=t.match(/User entered address:\s*\n?\s*([^\n]+)/);e&&e[1]&&(t=e[1].trim())}let r=t.indexOf(", call time frame:");return -1!==r&&(t=t.substring(0,r).trim()),t}_transformAddressComponents(e){let t=t=>(e.find(e=>e.componentType===t)||{}).componentName?.text,r={},i=t("street_number"),s=t("route"),o=t("administrative_area_level_1"),n=t("postal_code"),a=t("subpremise"),l=t("locality")||t("sublocality_level_1")||t("neighborhood");return i&&(r.streetNumber=i),s&&(r.streetName=s),l&&(r.city=l),o&&(r.state=o),n&&(r.zipcode=n),a&&(r.addressLine2=a),r}_extractAddressAndCoordinates(e){let t=null,r=null;if(e?.result){let{result:i}=e;i.address?.addressComponents&&(t=this._transformAddressComponents(i.address.addressComponents)),i.geocode?.location&&(r={latitude:i.geocode.location.latitude,longitude:i.geocode.location.longitude})}return{structuredAddress:t,coordinates:r}}_filterEmptyStrings(e){let t={};for(let[r,i]of Object.entries(e))""!==i&&null!=i&&(t[r]=i);return t}_getRawAddress(e){let t=e.activity.content||{},r=e.activity.comments_attributes?.[0]?.text;return[t.address,t["property-address"],t.property_address,t.Property_Address,r,t.message,t.homeValuationAddress,t.propertyAddress].map(e=>e&&this._cleanAddressString(e)).find(Boolean)||""}_logLeadEvent(e,t,r=null){let i={event:e,companyId:this.config.companyId,websiteId:this.config.websiteId,timestamp:new Date().toISOString(),hasEmail:!!t.activity?.author_email,hasAddress:!!this._getRawAddress(t)};if(r&&(i.errorMessage=r.userMessage||(r.status?`Request failed with status ${r.status}`:"An error occurred"),i.errorName=r.name,i.errorStatus=r.status),console.error(`[HomeValuation] ${e}`,JSON.stringify(i)),this.window.posthog)try{this.window.posthog.capture(e,i)}catch(e){console.error("[HomeValuation] PostHog capture failed:",e)}}_getUserFriendlyErrorMessage(e){return"AbortError"===e.name||e.message?.includes("timeout")?"Connection timed out. Please try again.":"TypeError"===e.name&&e.message?.includes("fetch")?"Unable to connect. Please check your internet connection and try again.":503===e.status||502===e.status||504===e.status?"Service temporarily unavailable. Please try again in a moment.":400===e.status?"Please check your information and try again.":"Something went wrong. Please try again or c
1521ontact us directly."}_formatStructuredAddress(e){if(!e||0===Object.keys(e).length)return"";let t=[];return t.push([e.streetNumber,e.streetName,e.addressLine2].filter(Boolean).join(" ")),t.push([[e.city,e.state].filter(Boolean).join(", "),e.zipcode].filter(Boolean).join(" ")),t.filter(Boolean).join(", ")}_buildHomeValuationData(e,t,r,i){let s=this._formatStructuredAddress(r)||this._getRawAddress(e);if(!s)throw Error("Unable to extract home valuation address from form data");let o={companyId:e.companyId,homeValuationAddress:s,homeValuationEstimate:t?new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0,minimumFractionDigits:0}).format(t):null,websiteId:e.page.websiteId,sourceUrl:e.activity.source_url},n={leadEmailAddress:e.activity.author_email,leadFullName:e.activity.author_name,leadFirstName:e.activity.firstName,leadLastName:e.activity.lastName,leadPhoneNumber:e.activity.author_phone,parcelId:e.activity.content?.parcelId,resourceId:e.page.pageMeta?.resourceId,pageId:e.page.pageId,sourceResource:e.page.pageMeta?.s
1521ourceResource,pageElementId:e.page.pageMeta?.pageElementId,formId:e.page.pageMeta?.formId,utmSource:e.activity.content?.utm_source,utmMedium:e.activity.content?.utm_medium,utmCampaign:e.activity.content?.utm_campaign,utmTerm:e.activity.content?.utm_term,utmContent:e.activity.content?.utm_content,utmId:e.activity.content?.utm_id,timeToSell:e.activity.content?.timeToSell,lookingToBuy:e.activity.content?.lookingToBuy,consented:!!e.activity.content?.termsAccepted,referrer:e.referrer,content:e.activity.content||{},fields:e.fields||{}},a=this._filterEmptyStrings(n);return{...o,...a,...r&&{address:r},...i&&{coordinates:i}}}async _validateAddressSafely(e){if(!e)return console.error("Home valuation: No address found in form data"),null;try{return await this._validateAddressWithGoogleMaps(e)}catch(e){throw console.error("Error validating address with Google Maps:",e),e.userMessage=this._getUserFriendlyErrorMessage(e),e}}async _getHomeValuationEstimateSafely(e){try{return await this._getHomeValuationEstimate(e)}catch(e){throw console.error("Error getting home valuation estimate:",e),e.userMessage=this._getUserFriendlyErrorMessage(e),e}}_isSafeRedirectUrl(e){try{let{protocol:t}=new URL(e,this.window.location.href);return"https:"===t||"http:"===t}catch{return!1}}_parseResponsePayload(e){try{return e?JSON.parse(e):{}}catch{return{raw:e}}}_createResponseError(e,t){let r=Error(e&&"object"==typeof e&&Object.keys(e).length?e.message||JSON.stringify(e):"Request failed");return e&&"object"==typeof e&&Object.keys(e).length&&Object.assign(r,e),r.status=t,r}_resolveValuationApiBase(){let{config:e}=this;if(void 0!==e.valuationApiBase&&null!==e.valuationApiBase&&(""!==e.valuationApiBase||!e.isBuilder))return e.valuationApiBase;if(e.websiteApiGatewayUrl)return e.websiteApiGatewayUrl;throw Error("websiteApiGatewayUrl/valuationApiBase not configured for home valuation")}async _submitLead(e,t,r){let i=new AbortController,s=setTimeout(()=>i.abort(),1e4);try{let o=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),signal:i.signal});clearTimeout(s);let n=await o.text(),a=this._parseResponsePayload(n);if(!o.ok)throw this._createResponseError(a,o.status);if(a&&"success"===a.status&&a.redirectUrl){if(f(r))return a;if(!this._isSafeRedirectUrl(a.redirectUrl))return console.error("Home valuation: refusing redirect to unsupported protocol"),a;return this.window.location.href=a.redirectUrl,{redirected:!0,url:a.redirectUrl}}return a}catch(e){throw clearTimeout(s),e}}async _submitHomeValuationRequest(e){let t=this._resolveValuationApiBase();this._logLeadEvent("home_valuation_submission_started",e);try{let r=this._getRawAddress(e),i=null;try{i=await this._validateAddressSafely(r)}catch(t){throw this._logLeadEvent("home_valuation_address_validation_failed",e,t),t}let s=null;try{s=await this._getHomeValuationEstimateSafely(i)}catch(t){this._logLeadEvent("home_valuation_estimate_failed",e,t),s=null}let{structuredAddress:o,coordinates:n}=this._extractAddressAndCoordinates(i),a=`${t}${b}`,l=this._buildHomeValuationData(e,s,o,n),d=await this._submitLead(a,l,e.deadline);return this._logLeadEvent("home_valuation_submission_success",e),d}catch(t){throw t.userMessage||(t.userMessage=this._getUserFriendlyErrorMessage(t)),this._logLeadEvent("home_valuation_submission_failed",e,t),t}}async _validateAddressWithGoogleMaps(e){let{config:t,window:r}=this,i=t.googleMapsAPIKey;if(!i&&r.luxuryPresence?.mapApiLoader&&(i=await r.luxuryPresence.mapApiLoader.getMapApiKey()),!i)throw Error("Google Maps API key not configured");let s=new AbortController,o=setTimeout(()=>s.abort(),1e4);try{let t=await fetch(`https://addressvalidation.googleapis.com/v1:validateAddress?key=${i}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({address:{addressLines:[e]},enableUspsCass:!1}),signal:s.signal});if(clearTimeout(o),!t.ok){let e=Error(`Address validation failed: ${t.status}`);throw e.status=t.status,e}return t.json()}catch(e){throw clearTimeout(o),e}}_hasMandatoryAddressFields(e){return!!(e.streetNumber&&e.streetName&&e.city&&e.state&&e.zipcode)}_logMissingAddressFields(e){let t=[];e.streetNumber||t.push("streetNumber"),e.streetName||t.push("streetName"),e.city||t.push("city"),e.state||t.push("state"),e.zipcode||t.push("zipcode"),console.log("Home valuation estimate skipped - missing required fields:",t.join(", "),"Available fields:",Object.keys(e).join(", "))}_buildAddressQueryString(e){return Object.entries(e).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&")}async _getHomeValuationEstimate(e=null){let t=`${this._resolveValuationApiBase()}${b}`;if(!e?.result?.address?.addressComponents)return null;let r=this._transformAddressComponents(e.result.address.addressComponents);if(!this._hasMandatoryAddressFields(r))return this._logMissingAddressFields(r),null;let i=this._buildAddressQueryString(r),s=`${t}?${i}`,o=new AbortController,n=setTimeout(()=>
1521o.abort(),1e4);try{let e=await fetch(s,{headers:{Accept:"application/json"},signal:o.signal});if(clearTimeout(n),!e.ok){let t=Error(`Home valuation estimate failed: ${e.status}`);throw t.status=e.status,t}let t=await e.json();return t?.valueDollars??null}catch(e){throw clearTimeout(n),e}}}let w="middleName",E="redirect-pending",_=["name","firstName","lastName",w,"email","phone","phoneNumber","source","message","mlsId","sourceUrl"],S="lp_map_key_failed",C="oauthSuccess",I={cookieyes:{eventName:"cookieyes_consent_update",hasAnalyticsConsent:e=>(function(e){let t=e.cookie.match(/cookieyes-consent=([^;]+)/);if(!t)return!1;try{let e=decodeURIComponent(t[1]);if(e.includes(",")){let t=e.split(",").map(e=>e.trim());if(t.some(e=>e.includes(":")))return t.some(e=>"analytics:yes"===e);return t.includes("analytics")}return e.includes("analytics")}catch(e){return!1}})(e),isAnalyticsAccepted:e=>Array.isArray(e?.accepted)&&e.accepted.includes("analytics")},"lp-consent":{eventName:"lp_consent_update",hasAnalyticsConsent:(e,t)=>!!t.__lpConsent?.state?.c?.analytics,isAnalyticsAccepted:e=>!!e?.choices?.analytics}};function A(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function x(e,t){t.forEach(t=>{let r=e[t];Array.isArray(r)&&0===r.length&&delete e[t]})}function R(e,t,r,i){let s=t.map(t=>(function e(t){return Array.isArray(t)?t.flatMap(t=>e(t)):"string"==typeof t?t.split(/\s+/).filter(Boolean):null==t?[]:[t]})(e[t])),o=i?.merge?s.flat():s.find(e=>e.length>0)??[];t.forEach(t=>{delete e[t]}),o.length>0&&(e[r]=[...new Set(o)])}function T(e){let t={...e};if(t.urlWebsite||(t.urlWebsite=null),t.urlYoutube=null,t.urlFacebook=null,t.urlInstagram=null,t.urlLinkedin=null,t.urlPodcast=null,t.urlTwitter=null,Array.isArray(e.socialLinks)){let r=[...e.socialLinks].sort((e,t)=>{let r=e.type?.toLowerCase()||"",i=t.type?.toLowerCase()||"";return r.localeCompare(i)});t.socialLinks=r;let i={youtube:"urlYoutube",facebook:"urlFacebook",instagram:"urlInstagram",linkedin:"urlLinkedin",podcast:"urlPodcast",twitter:"urlTwitter"};r.forEach(e=>{let r=i[e.type?.toLowerCase()??""];r&&(t[r]=e.link)})}return t}function L(e){return e&&Array.isArray(e)?e.map(e=>T(e)):e}function k(e){let{region:t}=e;if(!A(t))return e;let{schools:r,pois:i,...s}=t,o={...s,schools:A(r)?r.data??[]:[],...Array.isArray(i)?{pois:i.map(e=>({...e,category:"string"==typeof e.category?e.category.toUpperCase():e.category}))}:{}};return{...e,region:o}}function M(e){return e&&Array.isArray(e)?e.map(e=>k(e)):e}function $(e){let t=e.featuresAndAmenities;if(!Array.isArray(t))return e;let r=t.map(e=>({featureIds:e.featureIds??[],features:e.features??[],description:e.description}));return{...e,featuresAndAmenities:r}}function U(e){return e&&Array.isArray(e)?e.map(e=>$(e)):e}function P(e,t){return A(e)?t(e):e}function O(e,t){return Array.isArray(e)?t(e):e}var N={};N=` 1522 query PropertyDisclaimers($input: PropertyDisclaimersInput!) { 1523 propertyDisclaimers(input: $input) { 1524 feedId 1525 listingId 1526 resolvedFromListing 1527 listingCardAttribution 1528 listingDetailCourtesy 1529 listingDetailFooter 1530 logo 1531 } 1532 } 1533`;let D={mlsAttribution:"listingCardAttribution",mlsLogo:"logo",listingDetailCourtesy:"listingDetailCourtesy",listingDetailFooter:"listingDetailFooter"};var F={};F=s("ikl6F");let B=new class{constructor(e){this.isBuilder=!1,this.companyId=null,this.websiteId=null,this.pageId=null,this.shareId=null,this.pageMeta=null,this.websiteApiGatewayUrl=null,this.buyerSellerServiceUrl=null,this.leadIngesterUrl=null,this.divolteServiceUrl=null,this.eventBus=null,this.templateId=null,this.myhomeDashboardEnabled=!1,this.mlsEnabled=!1,this.hstValuationRedirectEnabled=!1,this.hvStepTwoCaptureEnabled=!1,this.googleMapsAPIKey=null,this.currencyConversionEnabled=!1,this.enabledCurrencies=[]}get valuationApiBase(){return this.isBuilder?this.websiteApiGatewayUrl:""}destroy(){}setPage(e,t={}){this.pageId=e,this.shareId=t.shareId||null,this.pageMeta={sourceResource:t.sourceResource,pageElementId:t.pageElementId,pageQueryVariables:t.pageQueryVariables||{}}}setIsBuilder(e){this.isBuilder=e}setCompany(e,t={}){this.companyId=e}setWebsite(e,t={}){this.websiteId=e,t.myhomeDashboardEnabled&&(this.myhomeDashboardEnabled=t.myhomeDashboardEnabled),t.mlsEnabled&&(this.mlsEnabled=t.mlsEnabled),t.hstValuationRedirectEnabled&&(this.hstValuationRedirectEnabled=t.hstValuationRedirectEnabled),t.hvStepTwoCaptureEnabled&&(this.hvStepTwoCaptureEnabled=t.hvStepTwoCaptureEnabled)}setWebsiteApiGatewayUrl(e,t={}){this.websiteApiGatewayUrl=e}setBuyerSellerServiceUrl(e,t={}){this.buyerSellerServiceUrl=e}setDivolteServiceUrl(e,t={}){this.divolteServiceUrl=e}setEventBusUrl(e,t={}){this.eventBusUrl=e}setTemplateId(e,t={}){this.templateId=e}setLeadIngesterUrl(e,t={}){this.leadIngesterUrl=e}setGoogleMapsAPIKey(e,t={}){this.googleMapsAPIKey=e}setCurrencyConversion({enabled:e,enabledCurrencies:t}={}){this.currencyConversionEnabled=!0===e,this.enabledCurrencies=Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}setEventBus({enabled:e,apiKey:t,url:r}){this.eventBus={enabled:e,apiKey:t,url:r}}}({}),q=new class extends m{constructor(e,t,r){super(e,t,r),this.setLoginState=this.setLoginState.bind(this),this.pageId=null,this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}initialize(e){try{let{config:t,document:r}=this;this.pageId=t.pageId,this.modals=r.querySelectorAll("body > #modals >
1533 .modal"),e.modals.forEach(e=>{this._attachModalHandler(e)})}catch(e){console.log(e)}}destroy(){let{document:e}=this;this.exitModalEventListeners.forEach(t=>{e.removeEventListener("mouseout",t)}),this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}setModalWithExpiry(e){let{window:t}=this,r=new Date().getTime()+864e5,i=`modal-controller-${e}`;try{t.localStorage.setItem(i,JSON.stringify(r))}catch(e){}}setLoginState(){let{window:e}=this;try{e.localStorage.setItem("isSignedUp","true")}catch(e){}}getModalWithExpiry(e){let{window:t}=this,r=t.localStorage,i=r.getItem(`modal-controller-${e}`);if(!i)return!1;let s=JSON.parse(i);return!(new Date().getTime()>s)||(r.removeItem(`modal-controller-${e}`),!1)}show(e,t={}){let{window:r}=this,i=this.getModalWithExpiry(e);(e&&!i||!0===t.forced)&&(r.lpUI.showModal(`modal-${e}`,t),this.setModalWithExpiry(e))}_attachModalHandler(e){let{pageId:t}=this,{trigger:r,pageSpecific:i}=e;(!i||e.pages.map(e=>e.pageId).includes(t))&&("EXIT"===r?this._exitModalHandler(e):"TIMER"===r?this._timerModalHandler(e):"FORCED"===r&&this._forcedModalHandler(e))}_exitModalHandler(e){let t=this,{document:r,exitModalTriggered:i}=this,{modalId:s}=e;function o(e){!i[s]&&(e.toElement||e.relatedTarget||(t.show(s),i[s]=!0))}r.addEventListener("mouseout",o),this.exitModalEventListeners.push(o)}_timerModalHandler(e){let{modalId:t,timerDelay:r}=e;setTimeout(()=>{this.show(t)},r)}_forcedModalHandler(e){let{modalId:t}=e,{window:r,document:i}=this;if("true"!==r.localStorage.getItem("isSignedUp")){let e=i.querySelector(`#modal-${t}`),s=e?.querySelector("form"),o=s?.dataset.delay||2e3;s.addEventListener("formsubmitted",()=>{this.setLoginState()}),r.addEventListener("oauthSuccess",()=>{this.setLoginState(),s.classList.add("success"),setTimeout(()=>{r.lpUI.hideModal(`modal-${t}`),s.reset(),s.classList.remove("success")},o)}),this.show(t,{forced:!0})}}}(B,window,document),V=new class extends m{constructor(e,t,r){super(e,t,r),this._boundClickHandler=this._buttonClickHandler.bind(this)}initialize(e={}){try{let{document:e}=this;e.body.removeEventListener("click",this._boundClickHandler),e.body.addEventListener("click",this._boundClickHandler)}catch(e){console.error(e)}}destroy(){let{document:e}=this;e.body.removeEventListener("click",this._boundClickHandler)}_buttonClickHandler(e){this._handleButtonClick(e).catch(e=>console.error(e))}async _handleButtonClick(e){let{window:t,document:r}=this,i=e.target.closest("button, a");if(!i)return;let s=i.dataset.type||"",o=i.href||i.dataset.href||"",n=i.target||"",{submit:a}=i.dataset;if(a){try{await this._handleSubmit(i)}catch(e){console.error(e)}((e,t=!1)=>{if(e){if(t)return window.open(e);window.location.assign(e)}})(o,"_blank"===n)}if(this._trackConversion(i),"VIDEO"===s)return void this._handleVideoButton(i);if("CONTACT_US"===s)return void this._handleContactUsButton(i);if("SUBSCRIBE"===s)return void t.lpUI.showModal("modal-global-subscribe");if("MY_ACCOUNT"===s)return void t.lpUI.showModal("modal-global-my-account");if("SHARE_POPUP"===s){let t=i.querySelector(".share-popup");t&&(t.style.display="flex"),e.stopPropagation();return}if("MODAL_"===s.substring(0,6)){let e=s.substring(6);t.lpUI.showModal(`modal-${e}`);return}if(o?.startsWith("mailto:")){let e=o.substring(7);r.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Email",eventValue:e})}else if(o?.startsWith("tel:")){let e=o.substring(4);r.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Phone",eventValue:e})}}async _handleSubmit(e){let t=e.closest("form"),{window:r}=this;return t?await r.luxuryPresence.contactForms.submitForm(t):null}_getVimeoSrc(e){if(!e||!e.includes("vimeo.com")||e.length>2e3)return null;let t=e.match(/(?:(?:www\.)?vimeo\.com\/(?:showcase\/\d+(?:\/video\/|\?video[=/])|channels\/(?:\w+\/)?|groups\/(?:[^/]*)\/videos\/|)|player\.vimeo\.com\/video\/)(\d+)(?:(?:\?.*&*h=|\/)+([\d,a-f]+))?/);if(!t)return null;let[,r,i]=t,s=`https://player.vimeo.com/video/${r}?`;return i&&(s+=`h=${i}&`),s+="autoplay=1"}_handleVideoButton(e){let{document:t}=this,r=e.closest("section"),{src:i}=e.dataset,s="";if(i&&(i.includes("youtube.com")||i.includes("youtu.be"))&&!i.includes("youtube.com/embed")){let e=i.match(/(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v=)
1533)|youtu.be\/)([a-zA-Z0-9_-]{6,11})/);e&&(s=e[1])}let o=this._getVimeoSrc(i);if(s?i=`https://youtube.com/embed/${s}?autoplay=1&controls=0`:o&&(i=o),!i||!r)return;let n=i.endsWith(".mp4")||i.endsWith(".webm")||i.includes("cloudinary.com"),a=` 1534 <div id="modal-${r.id}" class="modal visible"> 1535 <div class="modal-content"> 1536 <div class="lightbox-video"> 1537 <div class="video-player"> 1538 <div class="embed-container"> 1539 ${n?`<video controls autoplay src="${i}"></video>`:`<iframe frameborder="0" allowfullscreen="1" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" width="100%" height="100%" src="${i}"></iframe>`} 1540 </div> 1541 </div> 1542 </div> 1543 </div> 1544 <button class="close lp-close" type="button" aria-label="close modal"><span class="lp-close-icon" aria-hidden="true"></span></button> 1545 </div> 1546 `;t.body.insertAdjacentHTML("beforeend",a);let l=t.getElementById(`modal-${r.id}`);l.querySelector(".close").addEventListener("click",()=>{l.remove()})}_handleContactUsButton(e){let{window:t,document:r}=this;r.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"contact"}),t.lpUI.showModal("modal-global-contact-us",{scrollLock:!0})}_trackConversion(e){let{window:t,document:r}=this,{gtagConversionId:i,gtagConversionLabel:s,fbEventName:o}=e.dataset;if(i&&s){t.dataLayer&&t.dataLayer.length&&(t.dataLayer.some(e=>e.length&&"config"===e[0]&&e[1]===i)||r.sendGoogleTagManagerEvent("config",i));let e=`${i}/${s}`;r.sendGoogleTagManagerEvent("event","conversion",{send_to:e})}t.fbq&&o&&t.fbq("track",o,{})}}(B,window,document),j=new class extends m{constructor(e,t,r){super(e,t,r),this.validatedForms=[]}initialize(e={}){try{let{window:t,document:r}=this,{selector:i}=e,s=[];if(s=i?r.querySelectorAll(`${i} form[data-type="contact-form"]`):r.querySelectorAll('form[data-type="contact-form"]'),r.querySelectorAll('input[type="tel"]').length&&!t.libphonenumber&&t?.luxuryPresence?.libs){let{loadJs:e,jsLibsMap:r}=t.luxuryPresence.libs,{libphonenumber:i}=r;e(i.jsSrc,this.attachValidation.bind(this,s))}else this.attachValidation(s);this.validatedForms=this.validatedForms.concat(s)}catch(e){console.log(e)}}destroy(){this.validatedForms=[]}attachValidation(e){e.forEach(e=>{e.querySelectorAll("input, select, textarea").forEach(e=>{this.applyFieldValidation(e)})})}applyFieldValidation(e){"tel"===e.getAttribute("type")&&this._applyPhoneValidation(e)}_applyPhoneValidation(e){let{window:t}=this;if(t.libphonenumber){let r=t.libphonenumber.isValidPhoneNumber;e.addEventListener("keyup",function(){if(this.hasAttribute("required")||this.value.replace(/\s/g,"").length)try{let e=this.value;r(e,"US")?this.setCustomValidity(""):this.setCustomValidity("Please enter a valid phone number.")}catch(e){this.setCustomValidity("Please enter a valid phone number.")}else this.setCustomValidity("")})}}}(B,window,document),H=new class extends m{constructor(e,t,r){super(e,t,r),this.forms=[],this.homeValuationService=new v(e,t,r)}initialize(e={}){try{let{document:t}=this,{selector:r}=e,i=[];(i=r?t.querySelectorAll(`${r} form[data-type="contact-form"]`):t.querySelectorAll('form[data-type="contact-form"]')).forEach(e=>{this._attachSubmitHandler(e)}),this.forms=this.forms.concat(i)}catch(e){console.log(e)}}destroy(){this.forms=[]}submitForm(e){this._handleSubmit(null,e).catch(e=>console.error(e))}_attachValidation(e){let{window:t}=this;e.querySelectorAll("input, select, textarea").forEach(e=>{t.luxuryPresence.validation.applyFieldValidation(e)})}_attachSubmitHandler(e){e.addEventListener("submit",t=>this._handleSubmit(t,e))}_extractFormValues(e){let t=new FormData(e),r={},i=[],s=/^name(?:-\d+)?$/;return t.forEach((e,t)=>{if("string"==typeof e){let o=e.trim();s.test(t)&&o&&i.push(o);let n=r[t];r[t]=n?`${n} ${o}`:o}else r[t]=e}),i.length?r.name=i.join(" ").trim():!r.name&&r.firstName&&(r.name=r.firstName,r.lastName&&(r.name+=` ${r.lastName}`)),this._deriveNameParts(r)}_deriveNameParts(e){if(e.firstName||!e.name)return e;let t=e.name.indexOf(" ");return -1===t?{...e,firstName:e.name}:{...e,firstName:e.name.slice(0,t),lastName:e.lastName||e.name.slice(t+1).trim()}}_buildSubmissionData(e,t,r){let{window:i,config:s}=this,o=Object.keys(e).filter(e=>!_.includes(e)).reduce((t,r)=>(t[r]=e[r],t),{}),{pageId:n,companyId:a,websiteId:l,pageMeta:d}=s,c=i.localStorage.getItem("utm_vars")||"{}",u=i.localStorage.getItem("referrer")||"",h=this._getFormId(r);return{activity:{author_email:e.email,author_name:e.name,firstName:e.firstName||void 0,lastName:e.lastName||void 0,author_phone:e.phone||e.phoneNumber,activity_source:e.source||"CONTACT_INQUIRY",comments_attributes:[{text:e.message||void 0}],source_url:i.location.href,content:{...o,...JSON.parse(c)}},page:{pageId:n,companyId:a,websiteId:l,pageMeta:{...d,formId:h}},companyId:a,referrer:u,fields:t}}_handleSubmissionSuccess(e){let{window:t}=this,r=e.dataset.delay||2e3;e.classList.remove("loading"),e.classList.remove("error"),e.classList.add("success"),e.querySelectorAll(".success").forEach(e
1546=>e.classList.remove("hide")),e.dispatchEvent(new Event("formsubmitted")),setTimeout(()=>{t.lpUI.hideClosestModal(e),e.reset(),t.lpUI.sideMenuHide(),e.querySelectorAll(".success").forEach(e=>e.classList.add("hide")),e.classList.remove("success")},r)}async _handleSubmit(e,t){if(e&&e.preventDefault(),!t.classList.contains("loading")){this._hideSubmissionError(t),t.classList.remove("error"),t.classList.add("loading");try{let e=this._extractFormValues(t);if(e.middleName)return void t.classList.remove("loading");let r=this._getFields(t),i=this._buildSubmissionData(e,r,t);y(this.window,this.document);let s=await this._waitForLeadSubmit(e=>this._submitLeadRequest(i,e));if(this._sendGAEvent(i),s?.redirected)return void this._showRedirectPending(t);this._handleSubmissionSuccess(t)}catch(e){console.error("Form submission failed:",e),t.dispatchEvent(new Event("formsubmiterror")),t.classList.remove("loading"),t.classList.add("error"),e.userMessage?this._showSubmissionError(t,e.userMessage):this._showSubmissionError(t,"Something went wrong. Please try again.")}}}async _waitForLeadSubmit(e){let t,r={expired:!1,expiresAt:Date.now()+6e3},i=new Promise(e=>{t=setTimeout(()=>{r.expired=!0,e(null)},6e3)}),s=e(r).catch(e=>{if(f(r))return null;throw e});try{return await Promise.race([s,i])}finally{clearTimeout(t)}}_showRedirectPending(e){if(e.classList.add(E),e.querySelector(`.${E}__indicator`))return;let t=this.document.createElement("div");t.className=`${E}__indicator`,t.setAttribute("role","status"),t.setAttribute("aria-label","Loading"),t.innerHTML='<span class="lp-i lp-i--spinner lp-i--pulse" aria-hidden="true"></span>',e.appendChild(t)}_aliasUserWithEventBus(e){try{if(!this.window.eventBusProvider?.alias||!this.window.eventBusProvider?.isIdentified||!this.window.eventBusProvider?.getDistinctId||!this.window.LuxuryPresenceEventBus?.generateUUIDv5FromCompanyEmail)return;if(this.window.eventBusProvider.isIdentified())return void console.log("[EventBus] User already identified, skipping alias");let t=e.activity?.author_email,{companyId:r}=this.config;if(!t||!r)return void console.warn("[EventBus] Missing required data for user alias");let i=this.window.eventBusProvider.getDistinctId();if(!i)return void console.warn("[EventBus] No anonymous ID available for alias");let s=this.window.LuxuryPresenceEventBus.generateUUIDv5FromCompanyEmail(r,t);this.window.eventBusProvider.alias({anonId:i,canonicalId:s}),console.log("[EventBus] User aliased with canonical ID")}catch(e){console.error("[EventBus] User alias failed:",e)}}async _submitLeadRequest(e,t){let{config:r}=this;return(this._aliasUserWithEventBus(e),r.myhomeDashboardEnabled&&(e.activity?.activity_source==="HOME_VALUATION"||e.activity?.activity_source==="HOME_VALUE"))?this.homeValuationService._submitHomeValuationRequest({...e,deadline:t}):fetch(`${r.leadIngesterUrl}/api/v1/leads`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).then(e=>e.ok?e.json():e.json().then(e=>{throw e}))}_sendGAEvent(e){let{document:t}=this,r={hitType:"event",eventCategory:"button",eventAction:"click"};switch(e.activity.activity_source){case"NEWSLETTER_SIGNUP":r.eventLabel="Newsletter",t.sendGoogleTagManagerEvent("event","newsletter_signup");break;case"HOME_SEARCH":r.eventLabel="HomeSearch",t.sendGoogleTagManagerEvent("event","home_search");break;case"HOME_VALUE":case"HOME_VALUATION":r.eventLabel="HomeValue",t.sendGoogleTagManagerEvent("event","home_valuation");break;case"EBOOK":r.eventLabel="Ebook",t.sendGoogleTagManagerEvent("event","ebook_download");break;default:r={hitType:"pageview",page:"/thank-you"},t.sendGoogleTagManagerEvent("event","contact_inquiry")}t.sendGoogleAnalyticsEvent(r)}_getFields(e){let t=e.querySelectorAll("input, select, textarea"),r={};return t.forEach(t=>{let{id:i,name:s,type:o}=t;if(s===w)return!0;let n="";if(i){let r=e.querySelector(`label[for='${i}']`);r?n=r.textContent.trim():t.placeholder&&(n=t.placeholder.trim())}r[s]={label:n,type:t.tagName,inputType:"INPUT"===t.tagName?o:"text"}}),r}_getFormId(e){let t=e.closest("section[id^='section-'], footer[id], .modal[id^='modal-']");return t?.id?this._cleanFormId(t.id):""}_cleanFormId(e){for(let t of["section-","modal-"])if(e.startsWith(t))return e.substring(t.length);return e}_showSubmissionError(e,t){let r=e.querySelector(".submission-error-message");r||((r=this.document.createElement("div")).className="submission-error-message",r.setAttribute("role","alert"),e.appendChild(r)),r.textContent=t||"Something went wrong. Please try again.",r.style.display="block"}_hideSubmissionError(e){let t=e.querySelector(".submission-error-message");t&&(t.style.display="none")}}(B,window,document),G=new class extends m{constructor(e,t,r){super(e,t,r),this.retries=3,this.callbacks=[],this.id=`__googleMapsScriptId${Date.now()}`,this._apiKey="",this.reset()}set apiKey(e){this._apiKey=e,this.config.setGoogleMapsAPIKey(e)}get apiKey(){return this._apiKey}reset(){this.deleteScript(),this.done=!1,this.loading=!1,this.failed=!1,this.errors=[],this.onerrorEvent=null}destroy(){this.reset()}async getMapApiKey(){if(this.apiKey)return this.apiKey;let e=this._hadPreviousFailure(),t=!1;for(let r=1;r<=3;r+=1){let i=e&&!t;try{let e=await fetch(this._getMapKeyUrl(r,i));if(t=t||i,this._setFailureFlag(!1),!e.ok)throw Error(`Failed to fetch API key: ${e.status}`);let s=await e.text();if(!s)return"";return this.apiKey=s,this.apiKey}catch(e){console.error(e),r<3&&await this._delay(300*2**(r-1))}}return this._setFailureFlag(!0),""}_getMapKeyUrl(e,t){let r=[];e>1&&r.push(`attempt=${e}`),t&&r.push("recovered_after_failure=1");let i=r.length?`?${r.join("&")}`:"";return`${this._getBaseUrl()}/api/v1/map${i}`}_hadPreviousFailure(){try{return"1"===this.window.sessionStorage.getItem(S)}catch(e){return!1}}_setFailureFlag(e){try{e?this.window.sessionStorage.setItem(S,"1"):this.window.sessionStorage.removeItem(S)}catch(e){}}_delay(e){return new Promise(t=>{this.window.setTimeout(t,e)})}async createUrl(){let e=await this.getMapApiKey();if(!e)throw Error("Refusing to load Google Maps without an API key");
1546let t="https://maps.googleapis.com/maps/api/js";return t+`?callback=__googleMapsCallback&key=${e}&libraries=places`}async setScript(){let e;if(this.document.getElementById(this.id))return void this.callback();try{e=await this.createUrl()}catch(e){console.error(e),this.failed=!0,this.loading=!1,this.onerrorEvent=e,this.callback();return}let t=this.document.createElement("script");t.id=this.id,t.type="text/javascript",t.src=e,t.onerror=this.loadErrorCallback.bind(this),t.defer=!0,t.async=!0,this.document.head.appendChild(t)}loadErrorCallback(e){if(this.errors.push(e),this.errors.length<=this.retries){let e=this.errors.length*2**this.errors.length;console.log(`Failed to load Google Maps script, retrying in ${e} ms.`),setTimeout(()=>{this.deleteScript(),this.setScript().catch(e=>console.error(e))},e)}else this.failed=!0,this.onerrorEvent=e,this.callback()}deleteScript(){let e=this.document.getElementById(this.id);e&&e.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((e,t)=>{this.loadCallback(r=>{r?t(r):e()})})}loadCallback(e){this.callbacks.push(e),this.execute()}setCallback(){this.window.__googleMapsCallback=this.callback.bind(this)}resetIfRetryingFailed(){this.failed&&this.reset()}callback(){this.done=!0,this.loading=!1,this.callbacks.forEach(e=>{e(this.onerrorEvent)}),this.callbacks=[]}execute(){this.window.google&&this.window.google.maps&&this.window.google.maps.version&&this.callback(),this.resetIfRetryingFailed(),this.done?this.callback():this.loading||(this.loading=!0,this.setCallback(),this.setScript().catch(e=>console.error(e)))}_getBaseUrl(){let{isBuilder:e,websiteApiGatewayUrl:t}=this.config;return e?t:""}resizeStaticMapDimensions(e,t){if(e<=1024&&t<=1024)return{width:e,height:t};let r=Math.min(1024/e,1024/t);return{width:parseInt(e*r),height:parseInt(t*r)}}convertThemeToStaticApiUrl(e){return e.map(e=>{let t=e.stylers.reduce((e,t)=>{let r=t.visibility?`visibility:${t.visibility}`:"",i=t.color?`color:${t.color.replace("#","0x")}`:"",s=t.lightness?`lightness:${t.lightness}`:"";return`${e}|${r}${i}${s}`},""),r=e.elementType?`|element:${e.elementType}`:"";return`feature:${e.featureType}${r}${t}`})}async getMapApiSignedUrl(e){try{let t=await fetch(`${this._getBaseUrl()}/api/v1/map/signature?${e}`);if(!t.ok)throw Error("Failed to fetch signed URL");let{url:r}=await t.json();return r}catch(e){return console.error(e),""}}generateStaticMapUrl(e,t,r,i,s,o){let{width:n,height:a}=this.resizeStaticMapDimensions(s,o),l={center:`${e},${t}`,zoom:r,scale:2,size:`${n}x${a}`,key:this.apiKey};i&&(l.style=this.convertThemeToStaticApiUrl(i));let d=new URLSearchParams;return Object.entries(l).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>d.append(e,t.toString())):d.append(e,t.toString())}),`https://maps.googleapis.com/maps/api/staticmap?${d.toString()}`}async generateDigitallySignedStaticMapUrl({srcWidth:e,srcHeight:t,theme:r,...i}){let{width:s,height:o}=this.resizeStaticMapDimensions(e,t),n={...i,size:`${s}x${o}`};r&&(n.style=this.convertThemeToStaticApiUrl(r));let a=new URLSearchParams;Object.entries(n).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>a.append(e,t.toString())):a.append(e,t.toString())});let l=a.toString();try{return await this.getMapApiSignedUrl(l)}catch(e){return console.error(e),""}}}(B,window,document),K=new class extends m{destroy(){}updateQueryString(e,t,r){r||(r=this.window.location.href);let i=RegExp(`([?&])${e}=.*?(&|#|$)`,"i"),s="";null!=t&&(Array.isArray(t)?t.length&&(s=this.serializeArray(e,t)):"object"==typeof t?(i=RegExp(`([?&])${e}\\[[^=]*\\]=.*?(&|#|$)`,"i"),s=this.serializeObj(t,"",e)):s=`${e}=${encodeURIComponent(t)}`);let o=r.split("#"),n=o[0];if(i.test(r)){let e=n;for(s=s?`$1${s}$2`:"$1";i.test(e);)n=e.replace(i,s),e=e.replace(i,"$1");n=n.replace(/(&|\?)$/,"")}else if(s){let e=-1!==n.indexOf("?")?"&":"?";n+=`${e}${s}`}return void 0!==o[1]&&null!==o[1]&&(n+=`#${o[1]}`),n}getParameterByName(e,t){t||(t=this.window.location.href),e=e.replace(/[[\]]/g,"\\$&");let r=RegExp(`[?&]${e}(=([^&#]*)|&|#|$)`),i=Array.from(RegExp.prototype[Symbol.matchAll].call(r,t)).flat();if(!i.length){let r=RegExp(`[?&]${e}(\\[.*?\\])=(.*?)(?=&|#|$)`,"g");return i=Array.from(RegExp.prototype[Symbol.matchAll].call(r,t)).flat(),this._parseParamToObject(i,"advancedFilters"===e)}return i.length>3?i.reduce((e,t,r)=>((r+1)%3==0&&e.push(decodeURIComponent(t.replace(/\+/g," "))),e),[]):i[2]?decode
1546URIComponent(i[2].replace(/\+/g," ")):""}makePageKey(e){return e.replace("section-","").replace(/-/g,"")}makeParamKey(e,t){return e.global?e.urlKey:`${t}-${e.urlKey}`}deserializeParams(e,t){let r={},i=this.makePageKey(t),s=this.getParameterByName(i);return s&&(r.page=parseInt(s)),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,i),s=this.getParameterByName(t);if("int"===e.type)isFinite(s=parseInt(s))||(s=null);else if("bool"===e.type||"boolean"===e.type)s="true"===s||"false"!==s&&null;else if("json"===e.type)try{s=JSON.parse(s)}catch(e){}r[e.formKey||e.param]=s}),r}serializeParams(e,t,r){let i=this.window.location.href,s=this.makePageKey(t);return i=this.updateQueryString(s,r.page,i),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,s),o=r[e.formKey||e.param];"json"===e.type&&null!=o&&(o=JSON.stringify(o)),i=this.updateQueryString(t,o,i)}),i}formatSliderAtom(e,t=""){return t+(Number.isInteger(e)?e:e.toFixed(2))}formatSliderValue(e,t="",r=""){return e<1e3?this.formatSliderAtom(e,t):e<1e6?`${this.formatSliderAtom(e/1e3,t)}${r}K`:`${this.formatSliderAtom(e/1e6,t)}${r}M`}formatSliderPriceRange(e,t,r,i){return t.min===e&&0!==e?`${i.lowPrefix}${this.formatSliderValue(e,r," ")}`:t.max===e?`${this.formatSliderValue(e,r," ")}${i.highSuffix}`:`${this.formatSliderValue(e,r," ")}`}formatSliderAreaRange(e,t,r,i){return t.min===e&&0!==e?`${i.lowPrefix}${this.formatSliderValue(e)} ${r}`:t.max===e?`${this.formatSliderValue(e)}${i.highSuffix} ${r}`:`${this.formatSliderValue(e)} ${r}`}getSearchFormValues(e){let{queryElement:t,priceSliderElement:r,areaSliderElement:i,neighborhoodSelect:s}=e,o={};if(t&&(o.search=t.value||null),r){let e=r.value.split(";"),t=parseInt(r.dataset.min),i=parseInt(r.dataset.max),s=parseInt(e[0]),n=parseInt(e[1]);o.priceMin=s!==t?s:null,o.priceMax=n!==i?n:null}if(i){let e=i.value.split(";"),t=parseInt(i.dataset.min),r=parseInt(i.dataset.max),s=parseInt(e[0]),n=parseInt(e[1]);o.areaMin=s!==t?s:null,o.areaMax=n!==r?n:null}return s&&(o.neighborhoodId=s.value||null),o}serializeObj(e,t="",r=""){let i=[];for(let s in e)if(e.hasOwnProperty(s)){let o,n=e[s];if(r){let e=t?`[${t}][${s}]`:`[${s}]`;o=`${r}${e}`}else o=t?`${t}[${s}]`:s;null!==n&&Array.isArray(n)?n.length&&i.push(this.serializeArray(o,n)):null!==n&&"object"==typeof n?i.push(this.serializeObj(n,o)):i.push(`${o}=${encodeURIComponent(n)}`)}return i.join("&")}serializeArray(e,t,r=""){let i=[];return t.forEach(t=>{let s=r?`${r}${e}`:e;i.push(`${s}=${encodeURIComponent(t)}`)}),i.join("&")}_parseParamToObject(e,t=!1){if(!e.length)return null;let r={};for(let i=0;i<e.length;i++)if((i+1)%3==0){let s=decodeURIComponent(e[i].replace(/\+/g," ")),o=e[i-1];Object.assign(r,this._setObjectPath(o,s,r,t))}return r}_setObjectPath(e,t,r,i=!1){let s=e.split(/[\[\]]/).filter(Boolean),o=["in","nin","btw","ciin","cinin"],n={},a=n,l=((e,t,r)=>{if(!t)return;let i=(Array.isArray(t)?t:t.match(/([^[.\]])+/g)).reduce((e,t)=>e&&e[t],e);return void 0===i?r:i})(r,s.join("."));return s.forEach((e,n)=>{n===s.length-1?l?a[e]=Array.isArray(l)?[...l,t]:[l,t]:a[e]=i&&o.includes(e)?[t]:t:(a[e]=r[e]?r[e]:{},a=a[e])}),n}}(B,window,document),Y=new class extends m{constructor(e,t,r){super(e,t,r),this._createLightbox=this._createLightbox.bind(this),this.expandSliders=[]}initialize(e={}){try{let{document:e}=this,t=e.querySelectorAll(".has-mobile-expand");t.forEach(e=>{this._addExpandButton(e)}),this.expandSliders=this.expandSliders.concat(t)}catch(e){console.log(e)}}destroy(){let{document:e}=this;e.querySelectorAll(".lp-expand-btn, .lp-expand-btn-wrapper").forEach(e=>e.remove()),this.expandSliders=[]}_addExpandButton(e){let{document:t}=this,r=e.closest("section[id]"),i=e.dataset.append,s=r.querySelector(".lp-expand-btn");if(!s)if((s=t.createElement("button")).className="lp-expand-btn",s.setAttribute("aria-label","Open a lightbox"),s.innerHTML='<span class="lp-i lp-i--expand-alt" aria-hidden="true"></span>',i){let e=r.querySelector(i);e&&e.appendChild(s)}else{let r=t.createElement("div");r.className="lp-expand-btn-wrapper",r.style.position="relative",r.appendChild(s),e.parentNode.insertBefore(r,e.nextSibling)}s.addEventListener("click",()=>{this._createLightbox({slider:e,section:r})})}_createLightbox({slider:e,section:t,initialIndex:r}){let{window:i,document:s}=this,o=`lightbox-for-${t?.id}`,n=i.$&&i.$.fn.slick,a=n&&e.slick,l="function"==typeof i.Splide,d=e.classList.contains("is-initialized")&&e.classList.contains("splide");function c(){let t=s.createElement("div");t.id=o,t.className="lp-lightbox",t.setAttribute("tabindex","-1"),t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.innerHTML=` 1547 <button class="lp-lightbox__close" aria-label="close modal"></button> 1548 <div class="lp-lightbox__content"> 1549 <div class="lp-lightbox__carousel splide" role="group" aria-label="Image Gallery"> 1550 <div class="splide__arrows"> 1551 <button class="splide__arrow splide__arrow--prev lp-lightbox-arrow lp-lightbox-arrow--prev"></button> 1552 <button class="splide__arrow splide__arrow--next lp-lightbox-arrow lp-lightbox-arrow--next"></button> 1553 </div> 1554 <div class="splide__track"> 1555 <ul class="splide__list"></ul> 1556 </div> 1557 </div> 1558 </div> 1559 `,"function"==typeof i.lpUI.requestScrollLock?i.lpUI.requestScrollLock(o):s.body.style.overflow="hidden",s.body.appendChild(t);let n=t.querySelector(".lp-lightbox__carousel"),a=n.querySelector(".splide__list");t.classList.add("show"),(d?e.querySelectorAll(".splide__slide:not(.splide__slide--clone) img"):e.querySelectorAll("img")).forEac
1559h(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let r=s.createElement("li");r.className="lp-lightbox__slide splide__slide",r.appendChild(t),a.appendChild(r)});let l=new i.Splide(n,{rewind:!0,arrows:!0,arrowPath:"",type:"loop",clones:1,pagination:!1,perPage:1,perMove:1});l.mount(),void 0!==r&&r>=0&&l.go(r),setTimeout(()=>{t.focus()},100);let c=e=>{if(!t.classList.contains("show"))return;let r=t.querySelector(".splide__arrow--prev"),i=t.querySelector(".splide__arrow--next"),s=t.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&r?(e.preventDefault(),r.click()):"ArrowRight"===e.key&&i?(e.preventDefault(),i.click()):"Escape"===e.key&&s&&(e.preventDefault(),s.click())};s.addEventListener("keydown",c),t.querySelector(".lp-lightbox__close").addEventListener("click",()=>{s.removeEventListener("keydown",c),t.classList.remove("show"),l&&l.destroy(),"function"==typeof i.lpUI.releaseScrollLock?i.lpUI.releaseScrollLock(o):s.body.style.overflow="",t.remove()})}if("function"==typeof i.lpUI.requestScrollLock?i.lpUI.requestScrollLock(o):s.body.style.overflow="hidden",n&&!d){let t,r,n,l,d;r={arrows:!0,dots:!1,infinite:!0,draggable:!0,prevArrow:'<button type="button" class="lp-lightbox-arrow--prev lp-lightbox-arrow" aria-label="Previous"></button>',nextArrow:'<button type="button" class="lp-lightbox-arrow--next lp-lightbox-arrow" aria-label="Next"></button>'},(n=s.createElement("div")).id=o,n.className="lp-lightbox",n.setAttribute("tabindex","-1"),n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.innerHTML=` 1560 <button class="lp-lightbox__close" aria-label="close modal"></button> 1561 <div class="lp-lightbox__content"> 1562 <div class="lp-lightbox__carousel"></div> 1563 </div> 1564 `,s.body.appendChild(n),l=n.querySelector(".lp-lightbox__carousel"),n.classList.add("show"),a?(t=e.slick.$slides.find("img"),r.initialSlide=e.slick?.currentSlide||0,t.each(function(){i.$(".lp-lightbox__carousel").append(i.$(this).clone(!1).removeAttr("style").wrap('<div class="lp-lightbox__slide"></div>').parent())})):(t=e.querySelectorAll("img")).forEach(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let r=s.createElement("div");r.className="lp-lightbox__slide",r.appendChild(t),l.appendChild(r)}),i.$(l).slick(r),setTimeout(()=>{n.focus()},100),d=e=>{if(!n.classList.contains("show"))return;let t=n.querySelector(".lp-lightbox-arrow--prev"),r=n.querySelector(".lp-lightbox-arrow--next"),i=n.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&t?(e.preventDefault(),t.click()):"ArrowRight"===e.key&&r?(e.preventDefault(),r.click()):"Escape"===e.key&&i&&(e.preventDefault(),i.click())},s.addEventListener("keydown",d),n.querySelector(".lp-lightbox__close").addEventListener("click",()=>{s.removeEventListener("keydown",d),n.classList.remove("show");let t=l?.slick?i.$(l).slick("slickCurrentSlide"):0;l?.slick&&i.$(l).slick("unslick"),a&&i.$(e).slick("slickGoTo",t),"function"==typeof i.lpUI.releaseScrollLock?i.lpUI.releaseScrollLock(o):s.body.style.overflow="",n.remove()})}else l?c():(i.luxuryPresence.libs.loadCss(i.luxuryPresence.libs.jsLibsMap.splide.cssSrc),i.luxuryPresence.libs.loadJs(i.luxuryPresence.libs.jsLibsMap.splide.jsSrc,()=>{c(),i.luxuryPresence.libs.jsLibsMap.splide.isLoaded=!0}))}}(B,window,document),z=new class extends m{destroy(){this.window.divolte||(this.window.divolteLp=function(){(this.window.divolteLp.q=this.window.divolteLp.q||[]).push(arguments)})}initialize(e={}){let{divolteServiceUrl:t}=this.config;t&&!this.window.divolte&&this.loadScript()}loadScript(){let{divolteServiceUrl:e}=this.config,t=this.document.createElement("script");t.id="divolte-script",t.type="text/javascript",t.defer=!0,t.async=!0,t.src=`${e}/divolte.js`,this.document.head.appendChild(t),t.addEventListener("load",this.executeQueue.bind(this))}executeQueue(){(this.window.divolteLp.q||[]).forEach(([e,t])=>{this[e](t)}),this.window.divolteLp=this.divolteLp.bind(this)}divolteLp(e,t){try{this[e](t)}catch(e){console.log(e)}}sendLpEvent(e,t){if(!e.includes("pageView"))return void console.log(`${e} IS NOT SUPPORTED`);let{companyId:r,templateId:i,websiteId:s,pageId:o,shareId:n,pageMeta:a}=this.config;this.window.divolte.signal(e,Object.assign({companyId:r,templateId:i,websiteId:s,pageId:o,shareId:n,pageMeta:a},t))}sendLpPageView(){this.sendLpEvent("pageView",{})}}(B,window,document),W=new class extends m{constructor(e,t,r){super(e,t,r)}initialize(e={}){(void 0!==e.enabled?e.enabled:this.config.eventBus?.enabled)&&this.config.eventBus?.apiKey&&this.config.eventBus?.url&&this.loadScript()}loadScript(){let{eventBusUrl:e}=this.config,t=this.document.createElement("script");t.id="posthog-script",t.type="text/javascript",t.defer=!0,t.async=!0,t.src=`${e}/v2.8.0/event-bus-js.js`,this.document.head.appendChild(t),t.addEventListener("load",this.executeQueue.bind(this))}executeQueue(){this.window.LuxuryPresenceEventBus&&(this.window.eventBusProvider=this.window.LuxuryPresenceEventBus.createEventBusProvider({apiKey:this.config.eventBus.apiKey,host:this.config.eventBus.url,defaultSource:"frontend://website-render-engine"}
1564)),(this.window.eventBusLp.q||[]).forEach(([e,t])=>{this[e](t)}),this.window.eventBusLp=this.eventBusLp.bind(this)}destroy(){if(!this.window.eventBusProvider){this.window.eventBusLp=function(){(this.window.eventBusLp.q=this.window.eventBusLp.q||[]).push(arguments)};return}this.window.eventBusProvider.shutdown()}sendLpEvent(e,t){if("user.activity.page.viewed"!==e)return void console.log(`${e} IS NOT SUPPORTED`);if(!this.window.eventBusProvider)return;let{companyId:r}=this.config;try{this.window.eventBusProvider.capture(e,{company:r,data:{}})}catch(e){console.log("EventBus capture error:",e)}}eventBusLp(e,t){try{this[e](t)}catch(e){console.log(e)}}sendLpPageView(){this.sendLpEvent("user.activity.page.viewed",{})}}(B,window,document),Q=new class extends m{constructor(e,t,r){super(e,t,r),this.successListeners=[],this._listenToMessages=this._listenToMessages.bind(this),this._listenToOneTapMessage=this._listenToOneTapMessage.bind(this)}initialize(e={}){try{e.googleSignOnEnabled&&!e.iframe&&this._renderGoogleOneTap(),this.document.querySelectorAll('div[data-signin-type="google-sign-in"]').forEach(e=>this._convertGoogleSignIn(e)),this.document.querySelectorAll('div[data-signin-type="facebook-sign-in"]').forEach(e=>this._convertFacebookSignIn(e))}catch(e){console.log(e)}}destroy(){this.successListeners.forEach(e=>{this.window.removeEventListener("message",this._listenToMessages),this.window.removeEventListener("message",this._listenToOneTapMessage),this.window.removeEventListener(C,this.window[e])})}_renderGoogleOneTap(){if(!this._isGoogleOneTapOnCooldown()){let e=this.document.createElement("div");google.accounts.id.initializeIntermediate({src:this._buildUrlAndCopyAttributes(e,e,"googleOneTap")}),this.window.localStorage.removeItem("googleOneTapExpiration"),this.window.addEventListener("message",this._listenToOneTapMessage)}}_listenToOneTapMessage(e){let t="show_intermediate_iframe",{buyerSellerServiceUrl:r}=this.config,{data:i,origin:s}=e,{type:o,height:n,event:a,source:l,token:d}=i;if(o===t||"hide_intermediate_iframe"===o){let e=this.document.getElementById("onetap_google_intermediate_iframe");e&&(e.style.height=n,e.style.display=o===t?"unset":"none")}s===r&&"GOOGLE_SIGN_ON"===l&&("success"===a?(this._setExpirationLsItem(864e5),this._handleQualifyingQuestionsModal(d)):"cancel"===a&&this._setExpirationLsItem(72e5))}_setExpirationLsItem(e){let t=new Date().getTime()+e;this.window.localStorage.setItem("googleOneTapExpiration",t)}_isGoogleOneTapOnCooldown(){return Number(this.window.localStorage.getItem("googleOneTapExpiration"))>new Date().getTime()}_convertGoogleSignIn(e){this._replaceWithIframe("googleSignIn",e)}_convertFacebookSignIn(e){this._replaceWithIframe("facebookSignIn",e)}_replaceWithIframe(e,t){this._attachSuccessCallback(t);let r=this.document.createElement("iframe");r.src=this._buildUrlAndCopyAttributes(t,r,e),r.dataset.isSocialOauthButton=!0,t.replaceWith(r)}_listenToMessages(e){let{buyerSellerServiceUrl:t}=this.config;if(e.origin===t&&"success"===e.data.event){let e=new Event(C);this.window.dispatchEvent(e),y(this.window,this.document),this.successListeners.forEach(t=>{this.window[t]?this.window[t](e):console.error(`Callback function ${t} not found on window object`)}),this.document.documentElement.classList.add("is-login-success")}}_attachSuccessCallback(e){this.window.addEventListener("message",this._listenToMessages);let t=e.dataset.onSuccessFunctionName;t&&this.successListeners.push(t)}_buildUrlAndCopyAttributes(e,t,r){let{buyerSellerServiceUrl:i,companyId:s,websiteId:o,pageId:n,pageMeta:a}=this.config,{location:l}=this.window,d=l.origin+l.pathname,c=new URL(`${i}/buttons/${r}`),u=this.window.localStorage.getItem("utm_vars"),h=this.window.localStorage.getItem("referrer");c.searchParams.append("companyId",s),c.searchParams.append("websiteId",o),c.searchParams.append("pageId",n),c.searchParams.append("sourceUrl",d),c.searchParams.append("pageMeta",JSON.stringify(a)),u&&c.searchParams.append("utm",u),h&&c.searchParams.append("referrer",h);let p=["data-size","data-width","data-text","data-button-type","data-shape","data-layout","data-max-rows","data-use-continue-as","data-type","data-theme","data-logo_alignment","data-locale"];
1564return Array.from(e.attributes).forEach(e=>{p.includes(e.nodeName)?c.searchParams.append(e.nodeName,e.nodeValue):t.setAttribute("id"===e.nodeName?"data-id":e.nodeName,e.nodeValue)}),c.toString()}_decodeToken(e){try{let t=e.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),r=4-t.length%4,i=4===r?t:t+"=".repeat(r);return JSON.parse(atob(i))}catch(e){return null}}_handleQualifyingQuestionsModal(e){if(e&&this.window.luxuryPresence&&this.window.luxuryPresence.qualifyingQuestionsModal){let t=this._decodeToken(e);t&&t.email&&this.window.luxuryPresence.qualifyingQuestionsModal.showModal(t.email,"Google Sign On")}}}(B,window,document),J=new class extends m{constructor(e,t,r){super(e,t,r),this.showModal=this.showModal.bind(this),this.hasModalBeenSubmitted=this.hasModalBeenSubmitted.bind(this),this.modalId="qualifying-questions-modal",this.cookieKey="qualifyingQuestionsModalSubmitted",this.qualifyingQuestionsModalEnabled=!0,this.eventListeners=[],this.timeouts=[]}initialize(e={}){this.qualifyingQuestionsModalEnabled=e.qualifyingQuestionsModalEnabled??this.qualifyingQuestionsModalEnabled,this.qualifyingQuestionsModalEnabled&&this.attachModalCloseListeners()}destroy(){this.eventListeners.forEach(({element:e,event:t,handler:r})=>{e&&e.removeEventListener&&e.removeEventListener(t,r)}),this.timeouts.forEach(e=>{clearTimeout(e)}),this.restoreBodyScroll(),this.eventListeners=[],this.timeouts=[]}hasModalBeenSubmitted(){return"true"===this.getCookie(this.cookieKey)}setModalSubmittedCookie(){this.setCookie(this.cookieKey,"true",365)}showModal(e,t){!this.qualifyingQuestionsModalEnabled||this.hasModalBeenSubmitted()||(this.updateEmailValue(e),this.updateTriggerSourceValue(t),this.showModalElement())}getModalElement(){let e=this.document.getElementById(this.modalId);return e||console.error("Modal element not found:",this.modalId),e}updateEmailValue(e){let t=this.getModalElement();if(!t)return;let r=t.querySelector('input[name="email"]');r&&"string"==typeof e&&(r.value=e)}updateTriggerSourceValue(e){let t=this.getModalElement();if(!t)return;let r=t.querySelector(`#${this.modalId}-triggerSource`);r&&"string"==typeof e&&(r.value=e)}showModalElement(){let e=this.getModalElement();e&&(e.style.display="flex",this.blockBodyScroll())}getCookie(e){let t=`; ${this.document.cookie}`.split(`; ${e}=`);return 2===t.length?decodeURIComponent(t.pop().split(";").shift()):null}setCookie(e,t,r){let i="";if(r){let e=new Date;e.setTime(e.getTime()+864e5*r),i=`; expires=${e.toUTCString()}`}let s="; path=/; SameSite=Lax";this.window&&this.window.location&&"https:"===this.window.location.protocol&&(s+="; Secure"),this.document.cookie=`${e}=${encodeURIComponent(t||"")}${i}${s}`}blockBodyScroll(){this._prevOverflow=this.document.body.style.overflow,this.document.body.style.overflow="hidden"}restoreBodyScroll(){this.document.body.style.overflow=this._prevOverflow||"",this._prevOverflow=null}attachModalCloseListeners(){let e=this.getModalElement();if(!e)return;let t=this.document.getElementById(`${this.modalId}-form`);if(t){let r=()=>{this.setModalSubmittedCookie();let t=setTimeout(()=>{e.style.display="none",this.restoreBodyScroll()},100);this.timeouts.push(t)};t.addEventListener("formsubmitted",r),this.eventListeners.push({element:t,event:"formsubmitted",handler:r})}let r=e.querySelector('[data-dismiss="modal"]');if(r){let t=()=>{e.style.display="none",this.restoreBodyScroll()};r.addEventListener("click",t),this.eventListeners.push({element:r,event:"click",handler:t})}let i=t=>{(t.target===e||t.target.id===this.modalId)&&(e.style.display="none",this.restoreBodyScroll())};e.addEventListener("click",i),this.eventListeners.push({element:e,event:"click",handler:i})}}(B,window,document),X=new class extends m{constructor(e,t,r){super(e,t,r),this.isValidating=!1,this.lastValidationResult=null,this.lastValidationTime=null,this.validationCacheDuration=3e5}destroy(){this.isValidating=!1,this.lastValidationResult=null,this.lastValidationTime=null}async validateSession(e={}){let{useCache:t=!0}=e;if(t&&null!==this.lastValidationResult&&this.lastValidationTime&&Date.now()-this.lastValidationTime<this.validationCacheDuration)return this.lastValidationResult;if(this.isValidating)return null!==this.lastValidationResult&&this.lastValidationResult;this.isValidating=!0;let r=` 1565 query { 1566 validSession { 1567 success 1568 } 1569 } 1570 `;try{let e=await this.window.fetch("/graphql",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({query:r})});if(!e.ok)return console.error("SessionController: HTTP error during session validation",e.status),this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1;let t=await e.json();if(t.errors)return this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1;let i=t.data?.validSession?.success===!0;return this.lastValidationResult=i,this.lastValidationTime=Date.now(),i}catch(e){return console.error("SessionController: Error validating session",e),this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1}finally{this.isValidating=!1}}clearCache(){this.lastValidationResult=null,this.lastValidationTime=null}}(B,window,document),Z=new class extends m{constructor(e,t,r){super(e,t,r),this.consentListener=null,this.eventName=null}destroy(){this.consentListener&&this.eventName&&(this.document.removeEventListener(this.eventName,this.consentListener),this.consentListener=null)}loadScript(){this.document.getElementById("posthog-script")||this.window.luxuryPresence.eventBus.initialize({enabled:this.config.eventBus?.enabled}),this.document.getElementById("divolte-script")||this.window.luxuryPresence.divolte.initialize({})}removeScripts(){this.window.luxuryPresence?.eventBus?.destroy?.(),this.window.luxuryPresence?.divolte?.destroy?.(),this.document.getElementById("posthog-script")?.remove(),this.document.getElementById("divolte-script")?.remove()}async initialize(e={}){let t=I[e.provider];if(!t)return;this.eventName=t.eventName;let r=await this.window.luxuryPresence.session.validateSession();(t.hasAnalyticsConsent(this.document,this.window)||r)&&this.loadScript(),this.consentListener||(this.consentListener=e=>{t.isAnalyticsAccepted(e.detail)?this.loadScript():this.removeScripts()},this.document.addEventListener(t.eventName,this.consentListener))}}(B,window,document),ee=new class extends m{destroy(){}transformVariables(e,t){let r;return x(r={...t},["testimonialId"]),R(r,["testimonialId"],"testimonialIds"),0===r.limit&&delete r.limit,(void 0===r.limit||null===r.limit)&&(("testimonials"===e||"testimonialsCount"===e)&&(r.limit=50),("agents"===e||"agentsCount"===e||"developments"===e||"developmentsCount"===e||"neighborhoods"===e||"neighborhoodsCount"===e||"posts"===e||"postsCount"===e||"pressReleases"===e||"pressReleasesCount"===e)&&(r.limit=100)),!function(e){let{sortDir:t}=e;"string"==typeof t&&t.includes("_")&&(e.sortDir=t.replace(/_/g," "))}(r),!function(e,t){switch(t){case"agent":break;case"testimonials":case"testimonialsCount":x(e,["testimonialIds"]);break;case"agents":case"agentsCount":x(e,["officeId","teamId","developmentId","agentIds","tags"]),R(e,["officeId"],"officeIds"),R(e,["teamId"],"teamIds"),R(e,["developmentId"],"developmentIds");break;case"neighborhoods":case"neighborhoodsCount":x(e,["neighborhoodIds","neighborhoodId"]),R(e,["neighborhoodIds","neighborhoodId"],"neighborhoodId");break;case"developments":case"developmentsCount":x(e,["agentId","neighborhoodIds","neighborhoodId","developmentIds","tag"]),e.agentId&&Array.isArray(e.agentId)&&([e.agentId]=e.agentId),R(e,["neighborhoodIds","neighborhoodId"],"neighborhoodIds"),R(e,["developmentIds","developmentId"],"developmentIds");break;case"properties":case"propertiesCount":x(e,["statusIds","statusId","propertyTypeIds","propertyTypeId","propertyId","networkId","propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","
1570spaceTypeIds","addressState","addressCity","backfillProviders","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"]),["propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","spaceTypeIds","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"].forEach(t=>R(e,[t],t)),R(e,["statusIds","statusId"],"propertyStatusId"),e.excludeStatusId&&(e.excludePropertyStatusId=e.excludeStatusId,delete e.excludeStatusId),R(e,["propertyTypeIds","propertyTypeId"],"propertyTypeId"),R(e,["networkId"],"networkId"),R(e,["propertyId"],"propertyIds"),["salesPriceGTE","salesPriceLTE","leasePriceGTE","leasePriceLTE","livingSpaceSizeGTE","livingSpaceSizeLTE"].forEach(t=>{null!=e[t]&&(e[t]=Math.trunc(Number(e[t])))});break;case"posts":case"postsCount":x(e,["categoryIds","categoryId","neighborhoodId"]),void 0!==e.order&&(e.sort=e.order,delete e.order),R(e,["categoryIds","categoryId"],"categoryId");break;case"postCategories":x(e,["categoryId","categoryIds"]),void 0!==e.order&&(e.sort=e.order,delete e.order),R(e,["categoryIds","categoryId"],"categoryId");break;case"pressReleases":case"pressReleasesCount":x(e,["pressReleaseId","categories","propertyId","developmentId","agentId","teamId"]),R(e,["pressReleaseId"],"pressReleaseIds");break;case"offices":case"officesCount":x(e,["officeId","officeIds","tags"]),R(e,["officeId"],"officeIds");break;case"teams":case"teamsCount":x(e,["teamId","teamIds"]),R(e,["teamId"],"teamIds");break;case"pois":x(e,["categories"]),Array.isArray(e.categories)&&(e.categories=e.categories.map(e=>e.toLowerCase())),"string"==typeof e.sortBy&&(e.sortBy=e.sortBy.toLowerCase())}}(r,e),r}transformResponse(e,t){return"agent"===e?P(t,T):"agents"===e||"agentsCount"===e?O(t,L):"neighborhood"===e?P(t,k):"neighborhoods"===e||"neighborhoodsCount"===e?O(t,M):"development"===e?P(t,$):"developments"===e||"developmentsCount"===e?O(t,U):t}transformPage(e){return{items:e&&e.items||[],count:e&&e.total||0}}applyPropertyDisclaimers(t,r){if(!Array.isArray(t)||!t.length||!r||!r.length)return Promise.resolve(t);let i=t.filter(e=>e&&e.vendorId&&e.mlsId).map(e=>({feedId:e.vendorId,listingId:e.mlsId,officeName:e.officeName??null,agentMlsId:e.mlsAgentId??null,officeMlsId:e.mlsOfficeId??null,attributionContact:e.attributionContact??null,status:e.status??null,syncedAt:e.syncedAt??null})),s=e=>{let i={};return(e||[]).forEach(e=>{i[`${e.feedId}:${e.listingId}`]=e}),t.map(e=>{let t=e&&i[`${e.vendorId}:${e.mlsId}`],s={};return r.forEach(e=>{let r=t?t[D[e]]:void 0;s[e]=r??null}),{...e,...s}})};if(!i.length)return Promise.resolve(s([]));let{websiteId:o}=this.config;return this.window.superagent?this.window.superagent.post(`${this.window.luxuryPresence.defaults.routerUrl}/graphql`).withCredentials().send({query:e(N),variables:{input:{websiteId:"string"==typeof o?o:void 0,properties:i}}}).then(e=>s(e.body&&e.body.data&&e.body.data.propertyDisclaimers),e=>(console.warn("[RouterApiController] propertyDisclaimers lookup failed:",e),s([]))):Promise.resolve(s([]))}}(B,window,document),et=new class extends m{constructor(e,t,r){super(e,t,r),this.natives=new WeakMap,this.rates=new Map,this.pending=new Map,this.target=void 0,this.generation=0,this.initialized=!1,this.observer=null,this.abortController=null}get currentCurrency(){return this.target}get cookieOptions(){return{document:this.document,location:this.window.location}}get enabledCurrencies(){return(this.config.enabledCurrencies??[]).map(F.toSupportedToCurrency).filter(Boolean)}initialize(){return this.initialized||!this.config.currencyConversionEnabled?Promise.resolve():(this.initialized=!0,this.generation=0,this.abortController=new this.window.AbortController,this.target=(0,F.readValidCurrencyCookie)(this.cookieOptions,{enabled:!0,enabledCurrencies:this.enabledCurrencies}),this.observer=new this.window.MutationObserver(()=>this.ensureRates(this.apply())),this.observer.observe(this.document.body,{childList:!0,subtree:!0}),this.ensureRates(this.apply()))}setCurrency(e){if(!this.config.currencyConversionEnabled)return!1;let t=(0,F.toSupportedToCurrency)(e);return!!t&&!!this.enabledCurrencies.includes(t)&&(this.target=t,this.generation+=1,(0,F.writeCurrencyCookie)(this.cookieOptions,t)||console.warn("[CurrencyConversionController] could not persist currency preference:",t),this.apply(),!0)}reset(){this.config.currencyConversionEnabled&&(this.target=void 0,this.generation+=1,(0,F.clearCurrencyCookie)(this.cookieOptions),this.apply())}destroy(){this.observer?.disconnect(),this.observer=null,this.abortController?.abort(),this.abortController=null,this.pending.clear(),this.rates.clear(),this.generation=null,this.initialized=!1}apply(){let e=new Set;return this.document.querySelectorAll("[data-lp-price]").forEach(t=>{let r=this.natives.get(t);if(!r){if(!(r=(e=>{let t=e.getAttribute("data-lp-native-amount"),r=null===t||""===t.trim()?NaN:Number(t),i=(0,F.toSupportedFromCurrency)(e.getAttribute("data-lp-native-currency"));if(!Number.isFinite(r)||r<0||!i)return;let s=Number(e.getAttribute("data-lp-precision"));return{amount:r,currency:i,precision:Number.isInteger(s)&&s>=0?s:0,originalHTML:e.innerHTML}})(t)))return;this.natives.set(t,r)}this.rates.has(r.currency)||e.add(r.currency),this.render(t,r)}),[...e]}render(e,t){let r=this.convertedText(t);if(void 0===r){e.innerHTML!==t.originalHTML&&(e.innerHTML=t.originalHTML);return}e.textContent!==r&&(e.textContent=r)}convertedText(e){if(!this.target||this.target===e.currency)return;let t=this.rates.get(e.currency)?.[this.target];
1570if("number"!=typeof t||!Number.isFinite(t))return;let r=(0,F.convertAmount)(e.amount,t);if(void 0!==r)return(0,F.formatMoney)(r,this.target,{precision:e.precision})}ensureRates(e){return e.length?Promise.all(e.map(e=>this.requestRates(e))).then(()=>{null!==this.generation&&this.apply()}):Promise.resolve()}requestRates(e){let t=this.pending.get(e);if(t)return t;let r=this.abortController?.signal,i=(0,F.fetchExchangeRates)(e,{baseUrl:this.config.valuationApiBase,signal:r,onError:t=>console.warn(`[CurrencyConversionController] exchange rate fetch failed for ${e}:`,t)}).then(t=>{r?.aborted||this.rates.set(e,t??{})});return this.pending.set(e,i),i}}(B,window,document);function er(e,t){if(window.luxuryPresence[e])try{window.luxuryPresence[e].destroy()}catch(e){console.log(e)}window.luxuryPresence[e]=t}er("config",B),er("modals",q),er("buttons",V),er("validation",j),er("contactForms",H),er("mapApiLoader",G),er("pagination",K),er("expandSliders",Y),er("divolte",z),er("eventBus",W),er("oauth",Q),er("qualifyingQuestionsModal",J),er("session",X),er("consent",Z),er("redirects",{checkHstRedirect:function(e){let{config:t}=window.luxuryPresence;return!t.hvStepTwoCaptureEnabled&&!!t.hstValuationRedirectEnabled&&!!t.mlsEnabled&&!!t.myhomeDashboardEnabled&&(window.location.href=`/home-search/home-valuation?address=${encodeURIComponent(e)}`,!0)},destroy(){}}),er("routerApi",ee),er("currencyConversion",et),window.luxuryPresence.formatSliderPriceRange=K.formatSliderPriceRange.bind(K),window.luxuryPresence.formatSliderAreaRange=K.formatSliderAreaRange.bind(K),window.luxuryPresence.getSearchFormValues=K.getSearchFormValues.bind(K),window.luxuryPresence.handlebarsHelpersFactory=function(t){return e(n)(t,{isEqual:(e,t)=>e==t})}})(); 1571//# sourceMappingURL=lp-sdk.js.map 1572 1573 </script>
1573 1574 1575
1575<script> 1576 var lpGlobalInitialized = false; 1577 1578 function lpGlobalInit () { 1579 if (lpGlobalInitialized) { 1580 return; 1581 } 1582 lpGlobalInitialized = true; 1583 // Initialize wow animation plugin only according to turbolinks 1584 var wow; 1585 if (window.WOW) { 1586 wow = new WOW({ 1587 animateClass: 'animated', 1588 offset: wowOffset, 1589 live: false, 1590 callback: function(box) {} 1591 }); 1592 } 1593 // Initialize handlebar helpers only once 1594 function handlebarsInit() { 1595 if (!window.Handlebars) { 1596 return; 1597 } 1598 HandlebarsIntl.registerWith(Handlebars); 1599 Handlebars.registerHelper(window.luxuryPresence.handlebarsHelpersFactory(Handlebars)); 1600 } 1601 1602 handlebarsInit(); 1603 1604 var modalContentUrl = "/modals.html"; 1605 const modalsContainer = document.getElementById('modals'); 1606 if (modalsContainer) { 1607 fetch(modalContentUrl).then(function(res) { 1608 if (!res.ok) { 1609 throw new Error(`HTTP error! Status: ${res.status}`); 1610 } 1611 return res.text(); 1612 }).then(function(resultText) { 1613 modalsContainer.innerHTML = resultText; 1614 1615 // now we need to execute all script elements 1616 Array.from(modalsContainer.getElementsByTagName('script')).forEach(function (s) { 1617 const script = document.createElement("script"); 1618 script.text = s.innerHTML; 1619 Array.from(s.attributes).forEach(function (a) { 1620 script.setAttribute(a.name, a.value); 1621 }) 1622 s.parentNode.replaceChild(script, s); 1623 }); 1624 1625 try { 1626 window.luxuryPresence.modals.initialize(window.luxuryPresence._modalIncludes); 1627 window.luxuryPresence.contactForms.initialize({ selector: '#modals' }); 1628 window.luxuryPresence.validation.initialize({ selector: '#modals' }); 1629 window.luxuryPresence.oauth.initialize({ 1630 googleSignOnEnabled: true, 1631 iframe: false }); 1632 } catch (e) { 1633 console.log(e); 1634 } 1635 document.querySelectorAll('.modals > .modal .close').forEach(closeModalBtn => { 1636 closeModalBtn.addEventListener('click', function() { 1637 window.lpUI.hideClosestModal(closeModalBtn); 1638 }); 1639 }); 1640 }).catch((e) => console.log(e)); 1641 } 1642 /* Initialize Luxury Presence SDK */ 1643 try { 1644 window.luxuryPresence.config.setCompany("1b2e84eb-ab00-4e30-a6ec-30fa180236eb", {}); 1645 window.luxuryPresence.config.setWebsite("3c006d45-b4eb-4033-b25f-50521cf2281b", { 1646 myhomeDashboardEnabled: true, 1647 mlsEnabled: true, 1648 hstValuationRedirectEnabled: true, 1649 hvStepTwoCaptureEnabled: false 1650 }); 1651 const url = new URL(window.location.href); 1652 const shareId = url.searchParams.get('shareId'); 1653 window.luxuryPresence.config.setPage("036d2c12-8ced-4e24-8e35-c4d0f9b73d6e", { 1654 sourceResource: "", 1655 pageElementId: "", 1656 pageQueryVariables: {}, 1657 shareId: "", 1658 }); 1659 window.luxuryPresence.config.setWebsiteApiGatewayUrl("https://wgw.luxurypresence.com", {}); 1660 window.luxuryPresence.config.setBuyerSellerServiceUrl("https://bss.luxurypresence.com", {}); 1661 window.luxuryPresence.config.setDivolteServiceUrl("https://t.luxurypresence.com", {}); 1662 window.luxuryPresence.config.setEventBusUrl("https://cdn.luxurypresence.com/scripts/event-bus-js", {}); 1663 window.luxuryPresence.config.setEventBus({ 1664 enabled: true, 1665 apiKey: "phc_PMYT31xlmXBaTCwpIRx1v6RrpLVZIuP47N3mOT6KLnr", 1666 url: "https://p.luxurypresence.com", 1667 }); 1668 window.luxuryPresence.config.setTemplateId("dbfbedc7-c7e2-4812-86ee-0ee198862c21", {}); 1669 window.luxuryPresence.config.setLeadIngesterUrl("https://leads.luxurypresence.com", {}); 1670 window.luxuryPresence.buttons.initialize({}); 1671 window.luxuryPresence.consent.initialize({ provider: 'lp-consent' }); 1672 window.luxuryPresence.contactForms.initialize({}); 1673 window.luxuryPresence.validation.initialize({}); 1674 window.luxuryPresence.expandSliders.initialize({}); 1675 window.luxuryPresence.oauth.initialize({ googleSignOnEnabled: true, iframe: false }); 1676 window.luxuryPresence.qualifyingQuestionsModal.initialize({ qualifyingQuestionsModalEnabled: true }); 1677 /* Optional: cached pages / older SDKs may not carry this controller */ 1678 window.luxuryPresence.currencyConversion?.initialize(); 1679 } catch (e) { 1680 console.log(e); 1681 } 1682 1683 /* Inject Section Specific Javascript */ 1684 try { 1685(function init(sectionDomId) { 1686 const disclaimerLabel = document.querySelector('#' + sectionDomId + ' .lp-tcr-content'); 1687 if (disclaimerLabel) { 1688 const input = disclaimerLabel.querySelector('input'); 1689 if (input) { 1690 input.setAttribute('id', `${sectionDomId}-termsAccepted`); 1691 input.value = 'true'; 1692 const label = document.createElement('label'); 1693 label.setAttribute('for', `${sectionDomId}-termsAccepted`); 1694 label.classList.add('lp-visually-hidden'); 1695 label.textContent = 'Opt in/Disclaimer Consent:'; 1696 disclaimerLabel.prepend(label); 1697 } 1698 } 1699 function setHttp(link) { 1700 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 1701 link = 'https://' + link; 1702 } 1703 return link; 1704 } 1705 const socialLinks = document.querySelectorAll('#' + sectionDomId + ' .socials__link, #' + sectionDomId + ' .lp-socials__link'); 1706 socialLinks.forEach(linkElement => { 1707 const href = linkElement.getAttribute('href'); 1708 if (href) { 1709 linkElement.setAttribute('href', setHttp(href)); 1710 } 1711 }); 1712 const redirectLink = $('#' + sectionDomId + ' .redirect-link'); 1713 if (redirectLink.length) { 1714 const rawHref = setHttp(redirectLink.attr('href')); 1715 let formEvent; 1716 if (rawHref) { 1717 formEvent = redirectLink.data('redirect') ? 'formsubmitted' : 'reset'; 1718 $('#' + sectionDomId + ' .contact-form').find('form').on(formEvent, function () { 1719 redirectLink.attr('href', rawHref); 1720 redirectLink[0].click(); 1721 }); 1722 } 1723 } 1724})('modal-global-contact-us'); 1725} catch(e) { 1726console.log(e); 1727} 1728 1729 try { 1730(function init(sectionDomId) { 1731 const $section = $('#' + sectionDomId); 1732 const $hamburger = $section.find('.hamburger-component'); 1733 function onSideMenuShow() { 1734 if (!$hamburger.hasClass('active')) { 1735 $hamburger.addClass('active'); 1736 } 1737 } 1738 function onSideMenuHide() { 1739 $hamburger.removeClass('active'); 1740 } 1741 const $window = $(window); 1742 $window.on('lpui-sidemenu-show.lpui-auto-clean', onSideMenuShow); 1743 $window.on('lpui-sidemenu-hide.lpui-auto-clean', onSideMenuHide); 1744 const $subContainers = $section.find('.navigation__item.sub-nav-container'); 1745 $subContainers.hover(function () { 1746 $(this).find('.sub-nav').addClass('visible'); 1747 }, function () { 1748 $(this).find('.sub-nav').removeClass('visible'); 1749 }); 1750 $window.on('click.lpui-auto-clean', function () { 1751 $('.sub-nav-container.visible-dropdown').removeClass('visible-dropdown'); 1752 }); 1753 let fixedWidth = 0; 1754 const rightPad = 20; 1755 function fixSubsPosition() { 1756 const wWidth = window.innerWidth; 1757 if (innerWidth === fixedWidth) { 1758 return; 1759 } 1760 fixedWidth = wWidth; 1761 $subContainers.each(function () { 1762 const $sub = $(this).find('.sub-nav'); 1763 $sub[0].style.right = '';
1764 const sRect = $sub[0].getBoundingClientRect(); 1765 const sRight = sRect.left + sRect.width; 1766 if (sRight > wWidth - rightPad) { 1767 const parentRect = $sub[0].offsetParent.getBoundingClientRect(); 1768 const parentRight = parentRect.left + parentRect.width; 1769 $sub[0].style.right = `${parentRight - wWidth + rightPad}px`; 1770 } 1771 }); 1772 } 1773 var debouncer; 1774 $window.on('resize.lpui-auto-clean', function () { 1775 clearTimeout(debouncer); 1776 debouncer = setTimeout(fixSubsPosition, 500); 1777 }); 1778 fixSubsPosition(); 1779 if ($('.property-intro').length || $('.property-intro-2').length) { 1780 $('nav').addClass('dark-opening'); 1781 $("#global-navbar").css({ 1782 "background-color": "rgb(26, 26, 26)", 1783 "color": "rgb(255, 255, 255)" 1784 }); 1785 } 1786 function initAutoTruncateMenu() { 1787 const $navbar = $section.find('.navbar'); 1788 const $navList = $section.find('.navigation > ul'); 1789 if (!$navbar.length || !$navList.length) { 1790 return; 1791 } 1792 const $logo = $section.find('.logo'); 1793 const $buttonsWrapper = $section.find('.buttons-wrapper'); 1794 const $allItems = $navList.children('.navigation__item'); 1795 const $phoneItem = $allItems.filter(function () { 1796 return $(this).find('a[href^="tel:"]').length > 0; 1797 }); 1798 const $menuItems = $allItems.not($phoneItem); 1799 if (!$menuItems.length) { 1800 return; 1801 } 1802 const buffer = 8; 1803 function measureFixedWidth() { 1804 let width = buffer; 1805 if ($logo.length) { 1806 width += $logo.outerWidth(true) || 0; 1807 } 1808 if ($buttonsWrapper.length) { 1809 width += $buttonsWrapper.outerWidth(true) || 0; 1810 } 1811 if ($phoneItem.length) { 1812 width += $phoneItem.outerWidth(true) || 0; 1813 } 1814 return width; 1815 } 1816 function truncateMenu() { 1817 if (!$navList.is(':visible')) { 1818 return; 1819 } 1820 $menuItems.css('display', ''); 1821 const availableWidth = $navbar[0].getBoundingClientRect().width - measureFixedWidth(); 1822 let widthSoFar = 0; 1823 let overflowed = false; 1824 $menuItems.each(function () { 1825 const $item = $(this); 1826 if (overflowed) { 1827 $item.css('display', 'none'); 1828 return; 1829 } 1830 widthSoFar += $item.outerWidth(true); 1831 if (widthSoFar > availableWidth) { 1832 $item.css('display', 'none'); 1833 overflowed = true; 1834 } 1835 }); 1836 } 1837 let truncateFrame; 1838 function scheduleTruncate() { 1839 if (truncateFrame) { 1840 return; 1841 } 1842 truncateFrame = window.requestAnimationFrame(function () { 1843 truncateFrame = null; 1844 truncateMenu(); 1845 }); 1846 } 1847 scheduleTruncate(); 1848 if (window.ResizeObserver) { 1849 const resizeObserver = new ResizeObserver(scheduleTruncate); 1850 resizeObserver.observe($navbar[0]); 1851 } else { 1852 $(window).on('resize.lpui-auto-truncate', scheduleTruncate); 1853 } 1854 $section.find('img').on('load.lpui-auto-truncate', scheduleTruncate); 1855 $(window).on('load.lpui-auto-truncate', scheduleTruncate); 1856 if (document.fonts && document.fonts.ready) { 1857 document.fonts.ready.then(scheduleTruncate); 1858 } 1859 } 1860 initAutoTruncateMenu(); 1861})('global-navbar'); 1862} catch(e) { 1863console.log(e); 1864} 1865 try { 1866(function init(sectionDomId, options) { 1867 var elementSelector = options.elementSelector || 'nav'; 1868 var element = document.querySelector(elementSelector); 1869 var sections = document.querySelectorAll('body > section'); 1870 var subNavContainers = element.querySelectorAll('.sub-nav'); 1871 var initialBackgroundColor = options.initialBackgroundColor || element.style.backgroundColor; 1872 var backgroundColorScroll = options.backgroundColorScroll || '#191919'; 1873 var fontColor = options.fontColor || '#fff'; 1874 var fontColorScroll = options.fontColorScroll || '#000'; 1875 var didScroll = false; 1876 var lastScrollTop = 0; 1877 var delta = 5; 1878 1879 // eslint-disable-next-line sonarjs/no-collapsible-if 1880 if (wow) { 1881 // Wowjs might not trigger for position fixed elements 1882 if (window.scrollY > 0) { 1883 element.querySelectorAll('.wow').forEach(el => wow.show(el)); 1884 } 1885 } 1886 function adjustNavPinState() { 1887 // Remove 'visible' class from all subNavContainers 1888 for (let i = 0; i < subNavContainers.length; i++) { 1889 subNavContainers[i].classList.remove('visible'); 1890 } 1891 if (window.scrollY > 0) { 1892 element.style.backgroundColor = backgroundColorScroll; 1893 element.style.color = fontColorScroll; 1894 element.classList.add('scroll'); 1895 } else {
1896 element.style.backgroundColor = initialBackgroundColor; 1897 element.style.color = fontColor; 1898 element.classList.remove('scroll'); 1899 } 1900 } 1901 adjustNavPinState(); 1902 function onScroll() { 1903 didScroll = true; 1904 } 1905 window.addEventListener('scroll', onScroll); 1906 1907 // eslint-disable-next-line 1908 var debounceInterval = setInterval(() => { 1909 if (didScroll) { 1910 // eslint-disable-next-line 1911 hasScrolled(); 1912 didScroll = false; 1913 } 1914 }, 250); 1915 function hasScrolled() { 1916 adjustNavPinState(); 1917 // eslint-disable-next-line 1918 var navbarHeight = element.offsetHeight; 1919 // eslint-disable-next-line 1920 var st = window.scrollY; 1921 1922 // Make sure they scroll more than delta 1923 if (Math.abs(lastScrollTop - st) <= delta) { 1924 return; 1925 } 1926 if (st > lastScrollTop && st > navbarHeight) { 1927 // Scroll Down 1928 element.style.transform = `translateY(-${navbarHeight}px) scaleY(0)`; 1929 document.documentElement.style.setProperty('--global-header-height', '0px'); 1930 1931 // Some sections "follow" the navbar with class sticky (i.e. Producer search) 1932 sections.forEach(section => { 1933 if (section.classList.contains('sticky')) { 1934 section.style.top = '0px'; 1935 } 1936 }); 1937 } else { 1938 // Scroll Up 1939 // eslint-disable-next-line 1940 if (st + window.innerHeight < document.documentElement.scrollHeight) { 1941 element.style.transform = `translateY(0) scaleY(1)`; 1942 document.documentElement.style.setProperty('--global-header-height', `${navbarHeight}px`); 1943 sections.forEach(section => { 1944 if (section.classList.contains('sticky')) { 1945 section.style.top = `${navbarHeight}px`; 1946 } 1947 }); 1948 } 1949 } 1950 lastScrollTop = st; 1951 } 1952})('NAVBAR', JSON.parse("{\"fontColor\":\"#fff\",\"elementSelector\":\"nav\",\"fontColorScroll\":\"#fff\",\"initialFontColor\":\"#fff\",\"backgroundColorScroll\":\"#1a1a1a\",\"initialBackgroundColor\":\"rgba(0,0,0,0)\"}")); 1953} catch(e) { 1954console.log(e); 1955} 1956 try { 1957(function init(sectionDomId) { 1958 var sidemenu = $('#' + sectionDomId); 1959 sidemenu.on('lpui-sidemenu-show.lpui-auto-clean', function () { 1960 window.lpUI.requestScrollLock(sectionDomId); 1961 }); 1962 $(window).on('lpui-sidemenu-hide.lpui-auto-clean', function () { 1963 window.lpUI.releaseScrollLock(sectionDomId); 1964 }); 1965 $(window).click(function (e) { 1966 let targetContactForm = $(e.target).closest('#modal-global-contact-us').length; 1967 let targetSideMenu = $(e.target).closest('.sidemenu').length; 1968 let targetContactItem = $(e.target).closest('[data-type="CONTACT_US"]').length; 1969 let targetHamburger = $(e.target).closest('.hamburger-component').length; 1970 if (!(targetContactForm || targetSideMenu || targetContactItem || targetHamburger)) { 1971 $('body').removeClass('locked'); 1972 $('.hamburger').removeClass('active'); 1973 $('.sidemenu').removeClass('visible'); 1974 $('#modal-global-contact-us').removeClass('visible'); 1975 } 1976 }); 1977})('global-sidemenu'); 1978} catch(e) { 1979console.log(e); 1980} 1981 1982 try { 1983(function init(footerId) { 1984 var textContent = $(".text_content_wrap p").text().trim().length; 1985 const socialLinks = $(`#${footerId} .lp-socials__link`); 1986 if (textContent < 1) { 1987 $(".text_content_wrap").remove(); 1988 $(".second_text_footer").css({ 1989 'margin-bottom': 0 1990 }); 1991 } 1992 if (socialLinks.length > 0) { 1993 socialLinks.attr('data-wow-offset', '10'); 1994 } 1995 if ($(window).width() > 1280) { 1996 let footer = document.querySelector("#" + footerId); 1997 let copyrightElem = footer.querySelector(".copy_zone"); 1998 if (copyrightElem) { 1999 copyrightElem.style.whiteSpace = "nowrap"; 2000 let nowrapElemWidth = copyrightElem.clientWidth; 2001 copyrightElem.style.whiteSpace = ""; 2002 let normalElemWidth = copyrightElem.clientWidth; 2003 if (nowrapElemWidth > normalElemWidth) { 2004 footer.querySelector(".form-col--socials").classList.add("form-col--xl-auto"); 2005 } 2006 } 2007 } 2008 const form = $("#" + footerId).find("form"); 2009 const redirectLink = $('#' + footerId + ' .redirect-link'); 2010 form.on("reset", function () { 2011 redirectPage(redirectLink); 2012 }); 2013 function redirectPage(link) { 2014 if (link.length) { 2015 const rawHref = link.attr('href'); 2016 link.attr('href', setHttp(rawHref)); 2017 link[0].click(); 2018 } 2019 } 2020 function setHttp(link) { 2021 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 2022 link = 'http://' + link; 2023 } 2024 return link; 2025 } 2026})('global-footer'); 2027} catch(e) { 2028console.log(e); 2029} 2030 2031 try { 2032(function init(options) {})('global-mobile-contact'); 2033} catch(e) { 2034console.log(e); 2035} 2036 2037 try { 2038(function init(sectionDomId, options) { 2039 let section = null; 2040 switch (sectionDomId) { 2041 case 'NAVBAR': 2042 section = document.querySelector('body > nav, #global-navbar'); 2043 break; 2044 case 'FOOTER': 2045 section = document.querySelector('body > footer, #global-footer'); 2046 break; 2047 case 'SIDEMENU': 2048 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 2049 break; 2050 case 'CONTACT':
2051 section = document.querySelector('#modal-global-contact-us'); 2052 break; 2053 case 'MOBILE_CONTACT': 2054 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 2055 break; 2056 case 'SUBSCRIBE': 2057 // Subscribe Not Implemented 2058 section = null; 2059 break; 2060 case 'ACCOUNT': 2061 // Account Not Implemented 2062 section = null; 2063 break; 2064 default: 2065 section = document.querySelector('#' + sectionDomId); 2066 } 2067 if (!section) { 2068 return; 2069 } 2070 2071 // Where content / items are rendered 2072 const dataContainer = section.querySelector('.data-container'); 2073 if (!dataContainer) { 2074 // no place to render items = no need to query server or do anything else 2075 return; 2076 } 2077 let variables = options.variables || {}; 2078 2079 // Some variables in options may not have been injected - remove 2080 Object.keys(variables).forEach(function (variableName) { 2081 if (typeof variables[variableName] === 'string' && variables[variableName].match(/^{{.*}}$/)) { 2082 delete variables[variableName]; 2083 } 2084 }); 2085 2086 // Merge page query variables 2087 if (options.usePageResource) { 2088 variables = { 2089 ...variables, 2090 ...window.luxuryPresence.config.pageMeta.pageQueryVariables[options.resource] 2091 }; 2092 } 2093 2094 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Callers 2095 // resolve the flag â fetchData reads the section stamp, aux fetches read 2096 // their own resource's stamp (auxUsesRouter). 2097 function apiUrl(useRouter) { 2098 return options.url || (useRouter ? window.luxuryPresence.defaults.routerUrl : window.luxuryPresence.defaults.apiGatewayUrl); 2099 } 2100 2101 // ROUTER-CLEANUP: aux resources roll out on their own flag, not the section's 2102 // (options.routerApiAux is stamped per aux resource server-side). 2103 function auxUsesRouter(resource) { 2104 return !!(options.routerApiAux && options.routerApiAux[resource]); 2105 } 2106 2107 // Pagination Executes on a Numbered Pagination Container 2108 // Or via a load more button 2109 let mode = 'BUTTONLESS_PAGINATION'; 2110 const container = section.querySelector('.pagination-container');
2111 const loadMoreButton = section.querySelector(options?.loadMoreSelector); 2112 if (container) { 2113 mode = 'NUMBERED_PAGINATION'; 2114 } 2115 if (loadMoreButton) { 2116 mode = 'LOAD_MORE_BUTTON'; 2117 } 2118 let searchContainer = section.querySelector('.search-container'); 2119 const hidePaginationOnFirstPage = options.hidePaginationOnFirstPage || false; 2120 const eventPrefix = '__pagination-'; 2121 const searchFormParams = options.searchFormParams || (options.resource === 'properties' ? [{ 2122 param: 'neighborhoodId', 2123 urlKey: 'neighborhood' 2124 }, { 2125 param: 'search', 2126 urlKey: 'search' 2127 }, { 2128 param: 'salesPriceGTE', 2129 urlKey: 'pricemin', 2130 formKey: 'priceMin', 2131 type: 'int' 2132 }, { 2133 param: 'salesPriceLTE', 2134 urlKey: 'pricemax', 2135 formKey: 'priceMax', 2136 type: 'int' 2137 }, { 2138 param: 'livingSpaceSizeGTE', 2139 urlKey: 'areamin', 2140 formKey: 'areaMin', 2141 type: 'int' 2142 }, { 2143 param: 'livingSpaceSizeLTE', 2144 urlKey: 'areamax', 2145 formKey: 'areaMax', 2146 type: 'int' 2147 }] : []); 2148 2149 // Total entries - initialized in first render 2150 let totalNumber = 0; 2151 const DefaultSearchParams = { 2152 page: 1 2153 }; 2154 searchFormParams.forEach(function (formParam) { 2155 DefaultSearchParams[formParam.formKey || formParam.param] = null; 2156 }); 2157 let searchParams = { 2158 ...DefaultSearchParams 2159 }; 2160 const offset = options.variables?.offset || 0; 2161 let scrollTarget = options.scrollTargetSelector ? section.querySelector(options.scrollTargetSelector) || section : section; 2162 let scrollOffset = (parseInt(options.scrollOffset, 10) || 0) ?? 100; 2163 2164 // entries of per page 2165 // when query variables for a given section would't be filled options.pageSize can store 2166 // template string, ex: "{{variables.limit}}", below code handles that case and set 9 as a default value 2167 let pageSize = parseInt(options.pageSize, 10) || 9; 2168 2169 // Adding mobile pageRange support 2170 var NARROW_BREAKPOINT = 600; 2171 var mobileBreakpoint = options.mobileBreakpoint > 0 ? options.mobileBreakpoint : NARROW_BREAKPOINT; 2172 var paginationMql = window.matchMedia(`(max-width: ${mobileBreakpoint}px)`); 2173 2174 // Page range (pages on both sides of the current page) 2175 var mobilePageRange = options.mobilePageRange > 0 ? options.mobilePageRange : 0; 2176 var desktopPageRange = options.pageRange >= 0 ? options.pageRange : 2; 2177 var pageRange = paginationMql.matches ? mobilePageRange : desktopPageRange; 2178 2179 // Whether to display the 'Previous' button 2180 var showPrevious = true; 2181 2182 // Whether to display the 'Next' button 2183 var showNext = true; 2184 2185 // Whether to display the page buttons 2186 var showPageNumbers = true; 2187 2188 // 'Previous' text 2189 var prevText = options.prevText || '«'; 2190 2191 // 'Next' text 2192 var nextText = options.nextText || '»'; 2193 2194 // Ellipsis text 2195 var ellipsisText = '…'; 2196 var classPrefix = 'paginationjs'; 2197 2198 // Default active class 2199 var activeClassName = 'active'; 2200 2201 // Default disable class 2202 var disableClassName = 'disabled'; 2203 2204 // Pagination element's position in the container 2205 var position = 'bottom'; 2206 2207 // Whether to trigger pagination at initialization 2208 var triggerPagingOnInit = !options.skipInitialLoad; 2209 var showFirstOnEllipsisShow = true; 2210 var showLastOnEllipsisShow = true; 2211 2212 // Instantiated in init() 2213 var el = null; 2214 2215 // Controls scrollTop logic 2216 var firstRender = true; 2217 var renderBySearch = false; 2218 var disabled = false; 2219 2220 // Pagination script class selector 2221 var paginationScriptSelector = options.paginationPartialName ? `.${options.paginationPartialName}` : '.pagination-script'; 2222 2223 // Property Specific Image Override if No Image 2224 var propertyPlaceholderImage = window.luxuryPresence.defaults.propertyPlaceholderImage; 2225 2226 // Construct template 2227 var templateHTML = section.querySelector(`script${paginationScriptSelector}`)?.innerHTML || ''; 2228 var template = Handlebars.compile(templateHTML); 2229 2230 // Initialize 2231 init(); 2232 function init() { 2233 Object.assign(searchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 2234 2235 // Append/prepend pagination element to the pagination container 2236 if (mode === 'NUMBERED_PAGINATION') { 2237 el = document.createElement('div'); 2238 el.className = 'paginationjs';
2239 container[position === 'bottom' ? 'append' : 'prepend'](el); 2240 } 2241 if (searchContainer) { 2242 initSearchContainer({ 2243 fetchNeighborhoods: searchContainer.dataset.fetchNeighborhoods === 'true', 2244 fetchPostCategories: searchContainer.dataset.fetchPostCategories === 'true', 2245 fetchOffices: searchContainer.dataset.fetchOffices === 'true', 2246 fetchRentalRates: searchContainer.dataset.fetchRentalRates === 'true' 2247 }, function () { 2248 syncSearchFormState(searchParams); 2249 }); 2250 } 2251 2252 // Bind events 2253 observer(); 2254 } 2255 function syncSearchFormState(params) { 2256 searchContainer.dispatchEvent(new CustomEvent('sync', { 2257 detail: params 2258 })); 2259 } 2260 function initSearchContainer(options, done) { 2261 var promises = []; 2262 if (options.fetchNeighborhoods) { 2263 promises.push(fetchAllNeighborhoods(function (neighborhoods) { 2264 searchContainer.dispatchEvent(new CustomEvent('neighborhoods-data', { 2265 detail: { 2266 data: neighborhoods.map(function (item) { 2267 return { 2268 value: item.id, 2269 label: item.name 2270 }; 2271 }) 2272 } 2273 })); 2274 })); 2275 } 2276 if (options.fetchPostCategories) { 2277 promises.push(fetchPostCategories(function (categories) { 2278 searchContainer.dispatchEvent(new CustomEvent('post-categories-data', { 2279 detail: { 2280 data: categories 2281 } 2282 })); 2283 })); 2284 } 2285 if (options.fetchOffices) { 2286 promises.push(fetchOffices(function (offices) { 2287 searchContainer.dispatchEvent(new CustomEvent('offices-data', { 2288 detail: { 2289 data: offices 2290 } 2291 })); 2292 })); 2293 } 2294 if (options.fetchRentalRates) { 2295 promises.push(fetchAllRentalRates(function (rentalRates) { 2296 searchContainer.dispatchEvent(new CustomEvent('rental-rates-data', { 2297 detail: { 2298 data: rentalRates 2299 } 2300 })); 2301 })); 2302 } 2303 if (promises.length > 0) { 2304 Promise.all(promises).then(function () { 2305 done(); 2306 }); 2307 } else { 2308 // element's custom code is not executed yet, so we're scheduling callback to after element's code 2309 setTimeout(done); 2310 } 2311 } 2312 function fetchAllNeighborhoods(done) { 2313 var useRouter = auxUsesRouter('neighborhoods'); 2314 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Same 2315 // args on both APIs (the federated neighborhoods field accepts 2316 // withProperties/withBlogPosts); only the selection set differs. 2317 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') + '}}'; 2318 var payload = {}; 2319 payload.offset = 0; 2320 payload.limit = 100; 2321 payload.companyId = variables.companyId; 2322 if (options.resource === 'properties') { 2323 payload.withProperties = { 2324 active: true 2325 }; 2326 ['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) { 2327 if (variables[field] !== undefined && variables[field] !== null) { 2328 payload.withProperties[field] = variables[field]; 2329 } 2330 }); 2331 } 2332 if (options.resource === 'posts') { 2333 payload.withBlogPosts = { 2334 active: true 2335 }; 2336 ['search', 'postStatusId', 'featured', 'categoryId', 'categoryIds', 'neighborhoodId', 'slug'].forEach(function (field) { 2337 if (variables[field] !== undefined && variables[field] !== null) { 2338 payload.withBlogPosts[field] = variables[field]; 2339 } 2340 }); 2341 } 2342 2343 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2344 if (useRouter) { 2345 payload = window.luxuryPresence.routerApi.transformVariables('neighborhoods', payload); 2346 } 2347 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2348 query: gqlQuery, 2349 variables: payload 2350 }).then(function (res) { 2351 var value = res.body.data && res.body.data.neighborhoods || {}; 2352 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2353 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2354 done(items, items.length); 2355 }); 2356 } 2357 function fetchPostCategories(done) { 2358 var featured = options.resource === 'posts' && !!variables.featured; 2359 var useRouter = auxUsesRouter('postCategories'); 2360 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 2361 // selection set differs ({ items {...} } on the router). 2362 var selection = 'id, name, publishedCount, featuredPublishedCount'; 2363 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) + '}}'; 2364 var payload = {}; 2365 payload.offset = 0; 2366 payload.limit = 100; 2367 payload.companyId = variables.companyId; 2368 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2369 query: gqlQuery, 2370 variables: payload 2371 }).then(function (res) { 2372 var value = res.body.data && res.body.data.postCategories || {}; 2373 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2374 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2375 done(items.map(function (item) { 2376 item.count = featured ? item.featuredPublishedCount : item.publishedCount; 2377 return item; 2378 }), items.length); 2379 }); 2380 } 2381 function fetchOffices(done) { 2382 var useRouter = auxUsesRouter('offices'); 2383 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 2384 // selection set differs ({ items {...} } on the router). 2385 var selection = 'id, name, tags'; 2386 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. The two 2387 // APIs differ in more than the items wrapper: federated offices takes 2388 // companyId: ID! (legacy gateway: String), so each branch builds its whole doc. 2389 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 + '}}'; 2390 var payload = { 2391 offset: 0, 2392 limit: 100, 2393 companyId: variables.companyId 2394 }; 2395 2396 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2397 if (useRouter) { 2398 payload = window.luxuryPresence.routerApi.transformVariables('office
2398s', payload); 2399 } 2400 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2401 query: gqlQuery, 2402 variables: payload 2403 }).then(function (res) { 2404 var value = res.body.data && res.body.data.offices || {}; 2405 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2406 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2407 done(items, items.length); 2408 }); 2409 } 2410 2411 // ROUTER-CLEANUP: no rentalRates field on the federated router â legacy only. 2412 function fetchAllRentalRates(done) { 2413 var url = options.url || window.luxuryPresence.defaults.apiGatewayUrl; 2414 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'rentalRates (companyId: $companyId, offset: $offset, limit: $limit) {rentalRateId, label}}'; 2415 var payload = { 2416 offset: 0, 2417 limit: 100, 2418 companyId: variables.companyId 2419 }; 2420 superagent.post(url + '/graphql').withCredentials().send({ 2421 query: gqlQuery, 2422 variables: payload 2423 }).then(function (res) { 2424 var items = res.body.data && res.body.data.rentalRates || []; 2425 done(items, items.length); 2426 }).catch(function (err) { 2427 console.error('Error fetching rental rates:', err); 2428 done([], 0); 2429 }); 2430 } 2431 function fetchData(params, done) { 2432 var resource = options.resource; 2433 var gqlQuery = options.query || window.luxuryPresence.defaults.gql[resource]; 2434 var payload = {}; 2435 try { 2436 payload = JSON.parse(JSON.stringify(variables)); 2437 } catch (e) { 2438 Object.keys(variables).forEach(function (variableName) { 2439 payload[variableName] = variables[variableName]; 2440 }); 2441 } 2442 payload.offset = (params.page - 1) * pageSize + offset; 2443 payload.limit = pageSize; 2444 payload.companyId = options.companyId; 2445 searchFormParams.forEach(function (formParam) { 2446 var val = params[formParam.formKey || formParam.param]; 2447 if (val !== null && val !== undefined) { 2448 objSet(payload, formParam.param, val); 2449 } 2450 }); 2451 2452 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2453 if (options.useRouterApi) { 2454 payload = window.luxuryPresence.routerApi.transformVariables(resource, payload); 2455 } 2456 2457 // TODO: Disabled loading due to jarring effect 2458 // dataContainer.html('Loading...'); 2459 superagent.post(apiUrl(options.useRouterApi) + '/graphql').withCredentials().send({ 2460 query: gqlQuery, 2461 variables: payload 2462 }).then(function (res) { 2463 if (res.body.errors) { 2464 done(res.body.errors); 2465 return; 2466 } 2467 var data = res.body.data || {}; 2468 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2469 var resources; 2470 var resourceCount; 2471 if (options.useRouterApi) { 2472 var page = window.luxuryPresence.routerApi.transformPage(data[resource]); 2473 resources = window.luxuryPresence.routerApi.transformResponse(resource, page.items); 2474 resourceCount = page.count; 2475 } else { 2476 resources = data[resource] || []; 2477 resourceCount = data[resource + 'Count'] && data[resource + 'Count'].count ? data[resource + 'Count'].count : 0; 2478 } 2479 const finish = function (items) { 2480 if (resource === 'properties' && propertyPlaceholderImage?.id) { 2481 items = items.map(item => { 2482 if (item.media?.length === 0) { 2483 return Object.assign(item, { 2484 media: [propertyPlaceholderImage] 2485 }); 2486 } 2487 return item; 2488 }); 2489 } 2490 done(null, items, resourceCount); 2491 }; 2492 2493 // ROUTER-CLEANUP: client half of PLAT-4073 â resolve the requested 2494 // disclaimers before rendering; older SDKs skip (keys stay unset). 2495 if (options.useRouterApi && resource === 'properties' && options.routerPropertyDisclaimers && options.routerPropertyDisclaimers.length && window.luxuryPresence.routerApi && typeof window.luxuryPresence.routerApi.applyPropertyDisclaimers === 'function') { 2496 window.luxuryPresence.routerApi.applyPropertyDisclaimers(resources, options.routerPropertyDisclaimers).then(finish); 2497 return; 2498 } 2499 finish(resources); 2500 }); 2501 } 2502 function getTotalPage() { 2503 return Math.ceil(totalNumber / pageSize); 2504 } 2505 function renderPaginationList() { 2506 var totalPages = getTotalPage(); 2507 var rangeStart = searchParams.page - pageRange; 2508 var rangeEnd = searchParams.page + pageRange; 2509 if (rangeEnd > totalPages) { 2510 rangeEnd = totalPages; 2511 rangeStart = totalPages - pageRange * 2; 2512 rangeStart = rangeStart < 1 ? 1 : rangeStart; 2513 } 2514 if (rangeStart <= 1) { 2515 rangeStart = 1; 2516 rangeEnd = Math.min(pageRange * 2 + 1, totalPages); 2517 } 2518 2519 // Making sure that 1 more page button is shown in edge positions 2520 if (pageRange === 0) { 2521 if (searchParams.page === totalPages) { 2522 rangeStart = totalPages <= 1 ? 1 : totalPages - 1; 2523 } 2524 if (searchParams.page === 1) { 2525 rangeEnd = Math.min(2, totalPages); 2526 } 2527 } 2528 2529 // Render pagination list 2530 if (mode === 'NUMBERED_PAGINATION') { 2531 el.innerHTML = generateHTML({ 2532 currentPage: searchParams.page, 2533 pageRange: pageRange, 2534 rangeStart: rangeStart, 2535 rangeEnd: rangeEnd 2536 }); 2537 if (totalPages < 2 && hidePaginationOnFirstPage) { 2538 container.style.display = 'none'; 2539 } else { 2540 container.style.display = ''; 2541 } 2542 } else if (mode === 'LOAD_MORE_BUTTON') { 2543 if (searchParams.page >= totalPages) {
2544 loadMoreButton.style.display = 'none'; 2545 } else { 2546 loadMoreButton.style.display = ''; 2547 } 2548 } 2549 } 2550 function render(data) { 2551 renderPaginationList(); 2552 2553 // Render new content with handlebars 2554 var html = ''; 2555 if (mode === 'LOAD_MORE_BUTTON' && searchParams.page > 1) { 2556 // If using load more, append search results to existing results 2557 html = dataContainer.innerHTML; 2558 } 2559 for (var i = 0; i < data.length; i++) { 2560 var itemData = recursivelyParse(data[i]); 2561 itemData.sectionIndex = options.sectionIndex; 2562 itemData.renderOptions = options.renderOptions; 2563 html += template(itemData); 2564 } 2565 dataContainer.innerHTML = html; 2566 2567 // Scroll Top 2568 if (!firstRender && mode === 'NUMBERED_PAGINATION' && (!renderBySearch || !options.skipScrollOnSearch)) { 2569 // Only animate to the top if we replace dataContainer (numbered pagination) 2570 setTimeout(() => { 2571 const scrollTargetOffsetTop = scrollTarget.getBoundingClientRect().top + window.scrollY - scrollOffset; 2572 window.scrollTo({ 2573 top: scrollTargetOffsetTop, 2574 behavior: 'smooth' 2575 }); 2576 }, 250); 2577 } 2578 return true; 2579 } 2580 function generateHTML(args) { 2581 const totalPages = getTotalPage(); 2582 const { 2583 rangeStart, 2584 rangeEnd 2585 } = args; 2586 const makeLnk = page => window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 2587 ...searchParams, 2588 page 2589 }); 2590 let html = ''; 2591 if (showPrevious || showPageNumbers || showNext) { 2592 html += '<div class="paginationjs-pages"><ul>'; 2593 2594 // Previous button 2595 if (showPrevious) { 2596 if (searchParams.page <= 1) { 2597 html += `<li class="${classPrefix}-prev ${disableClassName}"><a>${prevText}</a></li>`; 2598 } else { 2599 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>`; 2600 } 2601 } 2602 2603 // Pages 2604 if (showPageNumbers) { 2605 if (rangeStart <= 3) { 2606 for (let i = 1; i < rangeStart; i++) { 2607 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>`; 2608 } 2609 } else { 2610 if (showFirstOnEllipsisShow) { 2611 html += `<li class="${classPrefix}-page ${classPrefix}-first J-paginationjs-page" data-num="1"><a href="${makeLnk(1)}">1</a></li>`; 2612 } 2613 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 2614 } 2615 for (let i = rangeStart; i <= rangeEnd; i++) { 2616 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>`; 2617 } 2618 if (rangeEnd < totalPages - 2) { 2619 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 2620 if (showLastOnEllipsisShow) { 2621 html += `<li class="${classPrefix}-page ${classPrefix}-last J-paginationjs-page" data-num="${totalPages}"><a href="${makeLnk(totalPages)}">${totalPages}</a></li>`; 2622 } 2623 } else { 2624 for (let i = rangeEnd + 1; i <= totalPages; i++) { 2625 html += `<li class="${classPrefix}-page J-paginationjs-page" data-num="${i}"><a href="${makeLnk(i)}">${i}</a></li>`; 2626 } 2627 } 2628 } 2629 2630 // Next button 2631 if (showNext) { 2632 if (searchParams.page >= totalPages) { 2633 html += `<li class="${classPrefix}-next ${disableClassName}"><a>${nextText}</a></li>`; 2634 } else { 2635 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>`; 2636 } 2637 } 2638 html += '</ul></div>'; 2639 } 2640 return html; 2641 } 2642 function go(newSearchParams, callback, restorationVisit) { 2643 if (disabled) return; 2644 var goToPageNumber = newSearchParams.page; 2645 2646 // Page number is out of bounds 2647 if (!goToPageNumber || goToPageNumber < 1) return; 2648 var totalPage = getTotalPage(); 2649 2650 // Page number is out of bounds 2651 if (!restorationVisit && totalNumber > 0) { 2652 if (goToPageNumber > totalPage) return; 2653 } 2654 if (!options.skipSerialization && (mode === 'NUMBERED_PAGINATION' || searchContainer)) {
2655 var newURL = window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 2656 ...newSearchParams, 2657 page: goToPageNumber !== 1 && mode === 'NUMBERED_PAGINATION' ? newSearchParams.page : null 2658 }); 2659 if (!areQueryParamsEqual(newSearchParams, searchParams) && !restorationVisit) { 2660 window.history.pushState({}, '', window.luxuryPresence.getPath(newURL, { 2661 queryString: true 2662 })); 2663 } 2664 } 2665 2666 // Fetch and update page 2667 fetchData(newSearchParams, renderWithData); 2668 disabled = true; 2669 function renderWithData(err, data, count) { 2670 if (err) { 2671 dataContainer.dispatchEvent(new Event('error')); 2672 } else { 2673 searchParams = { 2674 ...newSearchParams 2675 }; 2676 totalNumber = count - offset; 2677 if (data.length === 0) { 2678 dataContainer.dispatchEvent(new Event('no-data')); 2679 } else { 2680 dataContainer.dispatchEvent(new Event('data')); 2681 } 2682 render(data); 2683 firstRender = false; 2684 } 2685 disabled = false; 2686 renderBySearch = false; 2687 } 2688 } 2689 function areQueryParamsEqual(first, second) { 2690 var differ = Object.keys(first).find(function (key) { 2691 return first[key] !== undefined && first[key] !== null && first[key] !== second[key]; 2692 }); 2693 if (differ) { 2694 return false; 2695 } 2696 differ = Object.keys(second).find(function (key) { 2697 return second[key] !== undefined && second[key] !== null && second[key] !== first[key]; 2698 }); 2699 return !differ; 2700 } 2701 function next(callback) { 2702 go({ 2703 ...searchParams, 2704 page: searchParams.page + 1 2705 }, callback); 2706 } 2707 function previous(callback) { 2708 go({ 2709 ...searchParams, 2710 page: searchParams.page - 1 2711 }, callback); 2712 } 2713 function refresh(callback) { 2714 go(searchParams, callback); 2715 } 2716 function update(params, callback) { 2717 renderBySearch = true; 2718 go(params, callback); 2719 } 2720 function observer() { 2721 if (searchContainer) { 2722 searchContainer.addEventListener('search', function (event, newSearchParams) { 2723 newSearchParams = event.detail || newSearchParams; 2724 update({ 2725 ...searchParams, 2726 ...newSearchParams, 2727 page: 1 2728 }); 2729 }); 2730 searchContainer.addEventListener('clear-search', function () { 2731 const defaultSearchParams = { 2732 ...DefaultSearchParams 2733 }; 2734 const isCurrentSearchFormStateDefault = areQueryParamsEqual({ 2735 ...defaultSearchParams, 2736 page: null 2737 }, { 2738 ...searchParams, 2739 page: null 2740 }); 2741 2742 // if mode is LOAD_MORE_BUTTON we should't make anything on clear 2743 // when search form have default state 2744 if (isCurrentSearchFormStateDefault && mode !== 'NUMBERED_PAGINATION') { 2745 return; 2746 } 2747 2748 // if someone initially go to some page and click 'Clear' on search from 2749 // we should't navigate to first page. We should preserve page value 2750 if (isCurrentSearchFormStateDefault) { 2751 defaultSearchParams.page = searchParams.page; 2752 } 2753 syncSearchFormState(defaultSearchParams); 2754 update(defaultSearchParams); 2755 }); 2756 } 2757 if (mode === 'LOAD_MORE_BUTTON') { 2758 loadMoreButton.addEventListener('click', function (event) { 2759 go({ 2760 ...searchParams, 2761 page: searchParams.page + 1 2762 }); 2763 return false; 2764 }); 2765 } 2766 if (mode === 'LOAD_MORE_BUTTON' || mode === 'BUTTONLESS_PAGINATION') { 2767 // Do initial render 2768 go(Object.assign({}, searchParams, { 2769 page: 1 2770 })); 2771 return; 2772 } 2773 if (mode === 'NUMBERED_PAGINATION') { 2774 // Go to specified page number 2775 container.addEventListener(eventPrefix + 'go', function (event) { 2776 let { 2777 pageNumber, 2778 done 2779 } = event.detail || {}; 2780 pageNumber = parseInt(pageNumber, 10); 2781 if (!pageNumber) { 2782 return; 2783 } 2784 go({ 2785 ...searchParams, 2786 page: pageNumber 2787 }, done); 2788 }); 2789 2790 // Page number button click 2791 el.addEventListener('click', function (event) { 2792 let clickTarget = event.target; 2793 let current = clickTarget.closest('.J-paginationjs-page, .J-paginationjs-previous, .J-paginationjs-next'); 2794 let pageNumber = current?.getAttribute('data-num'); 2795 if (!pageNumber || current.classList.contains(disableClassName) || current.classList.contains(activeClassName)) { 2796 return; 2797 } else { 2798 go({ 2799 ...searchParams, 2800 page: parseInt(pageNumber, 10) 2801 }); 2802 } 2803 event.preventDefault(); 2804 }); 2805 2806 // Whether to load the default page 2807 var defaultPageNumber = searchParams.page; 2808 if (triggerPagingOnInit) {
2809 container.dispatchEvent(new CustomEvent(eventPrefix + 'go', { 2810 detail: { 2811 pageNumber: defaultPageNumber 2812 } 2813 })); 2814 } 2815 } 2816 window.addEventListener('popstate', function (event) { 2817 var newParams = Object.assign({}, DefaultSearchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 2818 if (!areQueryParamsEqual(newParams, searchParams)) { 2819 go(newParams, null, true); 2820 if (searchContainer) { 2821 syncSearchFormState(newParams); 2822 } 2823 } 2824 }); 2825 } 2826 function replaceVariables(template, variables) { 2827 var formattedString; 2828 for (var key in variables) { 2829 var value = variables[key]; 2830 var regexp = new RegExp('<%=\\s*' + key + '\\s*%>', 'img'); 2831 formattedString = (formattedString || template).replace(regexp, value); 2832 } 2833 return formattedString; 2834 } 2835 function isTextEditorValue(obj) { 2836 return 'raw' in obj || 'gjs' in obj; 2837 } 2838 function getTextEditorValue(obj) { 2839 if (!obj.html) { 2840 return ''; 2841 } 2842 var data = obj.html; 2843 var css = (obj.raw || obj.gjs || {}).css; 2844 if (css) { 2845 data = data + '<style>' + css + '</style>'; 2846 } 2847 return data; 2848 } 2849 2850 /** 2851 * check rendered resources for html and raw properties that could indicate if resource is from an advanced text editor. 2852 * strips out raw proprties and returns only HTML if it exists. 2853 * @param {Object} resources a collection retrieved from the database 2854 * @return {Object} the newly modified object. 2855 */ 2856 function recursivelyParse(resources) { 2857 forEach(resources, function (value, key) { 2858 if (!value) { 2859 return; 2860 } 2861 if (value instanceof Object) { 2862 if (isTextEditorValue(value)) { 2863 resources[key] = getTextEditorValue(value); 2864 return; 2865 } else { 2866 return recursivelyParse(value); 2867 } 2868 } 2869 try { 2870 var parsedData = JSON.parse(value); 2871 if (isTextEditorValue(parsedData)) { 2872 resources[key] = getTextEditorValue(parsedData); 2873 } 2874 } catch (e) { 2875 // do nothing if we failed to parse value as JSON 2876 } 2877 }); 2878 return resources; 2879 } 2880 function forEach(collection, iteratee) { 2881 var func = Array.isArray(collection) ? arrayEach : baseFor; 2882 return func(collection, iteratee); 2883 } 2884 function baseFor(object, iteratee) { 2885 if (!object) { 2886 return; 2887 } 2888 var iterable = Object(object); 2889 var props = Object.keys(object); 2890 var length = props.length; 2891 var index = -1; 2892 while (length--) { 2893 var key = props[++index]; 2894 if (iteratee(iterable[key], key, iterable) === false) { 2895 break; 2896 } 2897 } 2898 return object; 2899 } 2900 function objSet(obj, path, value) { 2901 const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g); 2902 pathArray.reduce((acc, key, i) => { 2903 if (acc[key] === undefined) acc[key] = {}; 2904 if (i === pathArray.length - 1) acc[key] = value; 2905 return acc[key]; 2906 }, obj); 2907 } 2908 function arrayEach(array, iteratee) { 2909 var index = -1; 2910 var length = array.length; 2911 while (++index < length) { 2912 if (iteratee(array[index], index, array) === false) { 2913 break; 2914 } 2915 } 2916 return array; 2917 } 2918 function selectPageRangeMode(e) { 2919 pageRange = e.matches ? mobilePageRange : desktopPageRange; 2920 renderPaginationList(); 2921 } 2922 paginationMql.addEventListener('change', selectPageRangeMode); 2923})('section-9246491e-d5f8-41a8-a437-7e55d6487d07', JSON.parse("{\"pageSize\":\"8\",\"resource\":\"agents\",\"pageRange\":0,\"variables\":{\"limit\":8,\"offset\":0,\"companyId\":\"1b2e84eb-ab00-4e30-a6ec-30fa180236eb\",\"categoryId\":\"{{pageElement.categoryId}}\",\"sort\":\"displayOrder\",\"sortDir\":\"ASC\"},\"searchFormParams\":[{\"param\":\"search\",\"urlKey\":\"search\"},{\"param\":\"officeId\",\"global\":true,\"urlKey\":\"officeId\"},{\"param\":\"tags\",\"global\":true,\"urlKey\":\"area\"},{\"param\":\"tagsMode\",\"global\":true,\"urlKey\":\"tagsMode\"}],\"skipScrollOnSearch\":false,\"scrollTargetSelector\":\".search-form\",\"hidePaginationOnFirstPage\":true,\"companyId\":\"1b2e84eb-ab00-4e30-a6ec-30fa180236eb\",\"usePageResource\":false,\"sectionIndex\":2,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 2924} catch(e) { 2925console.log(e); 2926} 2927 try { 2928(function init(sectionDomId) { 2929 const $section = $("#" + sectionDomId); 2930 const $searchContainer = $section.find(".search-container"); 2931 const $officeSelect = $section.find('.js-office-input'); 2932 const $tagSelect = $section.find('.js-tag-input'); 2933 const $searchInput = $section.find('.js-search-input'); 2934 const $emptyMsg = $section.find('.js-empty-message'); 2935 const $dataContainer = $section.find('.data-container'); 2936 const $containter = $section.find('.js-container'); 2937 const officeFilter = $searchContainer.data('fetchOffices'); 2938 const defaultTagsMode = $searchContainer.data('variables')?.tagsMode || 'ANY'; 2939 const defaultTags = $searchContainer.data('variables')?.tags || []; 2940 const $resetSearchInput = $searchContainer.find('.lp-input-reset'); 2941 convertSelectToDropdown($tagSelect); 2942 $resetSearchInput.on('click', function (event) { 2943 event.preventDefault(); 2944 $searchInput.val(''); 2945 onSearch(); 2946 }); 2947 $dataContainer.on("data", function () { 2948 $emptyMsg.removeClass("visible"); 2949 $containter.removeClass('no-data'); 2950 }); 2951 $dataContainer.on("no-data", function () { 2952 $emptyMsg.addClass("visible"); 2953 $containter.addClass('no-data'); 2954 }); 2955 $searchInput.on('input', window.luxuryPresence.debounce(onSearch, 1000)); 2956 function onSearch() { 2957 const params = {}; 2958 if (officeFilter) params.officeId = $officeSelect.val() === '' ? null : [$officeSelect.val()]; 2959 if ($tagSelect.length > 0 && $tagSelect.val() !== '') { 2960 params.tagsMode = 'ANY'; 2961 params.tags = [$tagSelect.val()]; 2962 } else { 2963 params.tagsMode = defaultTagsMode; 2964 params.tags = defaultTags; 2965 } 2966 params.search = $searchInput.val() || null; 2967 $searchContainer[0]?.dispatchEvent(new CustomEvent('search', { 2968 detail: params 2969 })); 2970 } 2971 if (!officeFilter && $tagSelect.length === 0) return; 2972 var previousOption = '';
2973 $searchContainer.on('offices-data', (evt, { 2974 data 2975 } = {}) => { 2976 data = evt.detail?.data || data; 2977 $officeSelect.append(data.map(office => `<option value="${office.id}">${office.name}</option>`).join("\n")); 2978 convertSelectToDropdown($officeSelect); 2979 }); 2980 function updateDropdown(select, value) { 2981 let $dropdown = $(select).next(); 2982 let $dropdownToggle = $dropdown.find(".custom-select-toggle"); 2983 let $dropdownContent = $dropdown.find(".custom-select-content"); 2984 let $selectedOption = $dropdownContent.find(`button[value="${value}"]`); 2985 function unselectOption() { 2986 $linkedOption = $originalSelect.find("option").eq(0); 2987 $linkedOption.prop("selected", true); 2988 $dropdownToggle.html($linkedOption.html()); 2989 $dropdownContent.find(".custom-select-item").removeClass("is-selected"); 2990 $originalSelect.change(); 2991 previousOption = ""; 2992 } 2993 if (!$selectedOption) return; 2994 if ($selectedOption.hasClass("is-disabled")) return; 2995 let elementNumber = $selectedOption.index(); 2996 let $originalSelect = $selectedOption.closest(".custom-select").siblings("select"); 2997 let $linkedOption = $originalSelect.find("option").eq(elementNumber); 2998 if (previousOption === value) { 2999 unselectOption(); 3000 return; 3001 } 3002 if (!$linkedOption.prop("selected")) { 3003 $linkedOption.prop("selected", true); 3004 previousOption = value; 3005 $originalSelect.change(); 3006 $selectedOption.addClass("is-selected").siblings(".custom-select-item").removeClass("is-selected"); 3007 closeSelectMenu($selectedOption.closest(".custom-select-menu")); 3008 $dropdownToggle.html($linkedOption.html()); 3009 if ($linkedOption.val()) { 3010 $dropdownToggle.removeClass("is-placeholder"); 3011 $dropdown[$linkedOption.val() !== "" ? "addClass" : "removeClass"]("has-selection"); 3012 } else { 3013 $dropdown.removeClass("has-selection"); 3014 $dropdownToggle.addClass("is-placeholder"); 3015 } 3016 } 3017 } 3018 function convertSelectToDropdown(selectItem) { 3019 let customDropdown = ` 3020 <div class="custom-select" role="presentation"> 3021 <button class="custom-select-toggle" type="button" aria-haspopup="true" aria-expanded="false"></button> 3022 <div class="custom-select-menu"> 3023 <div class="custom-select-content"> 3024 </div> 3025 </div> 3026 </div>`; 3027 $(customDropdown).insertAfter(selectItem); 3028 let $dropdown = $(selectItem).next(); 3029 let $dropdownToggle = $dropdown.find(".custom-select-toggle"); 3030 let $dropdownMenu = $dropdown.find(".custom-select-menu"); 3031 let $dropdownContent = $dropdown.find(".custom-select-content"); 3032 $dropdownToggle.addClass($(selectItem).attr("class")).removeClass("dropdown-select"); 3033 $dropdownToggle.attr("id", $(selectItem).attr("id") + "custom"); 3034 $dropdownToggle.attr("data-name", $(selectItem).attr("name")); 3035 $dropdownMenu.attr("aria-labelledby", $dropdownToggle.attr("id")); 3036 appendOptionButtons(selectItem, $dropdownContent); 3037 $(selectItem).removeClass().addClass("sr-only"); 3038 $(selectItem).on("focus", function () { 3039 showSelectMenu($dropdownMenu[0]); 3040 $dropdownToggle.focus(); 3041 }); 3042 var toggleText = $(selectItem).find(":selected").first().text() || $(selectItem).children().first().text(); 3043 $dropdownToggle.addClass("is-placeholder").html(toggleText); 3044 $dropdown.on("click", ".custom-select-item", function (e) { 3045 updateDropdown($(this).closest(".lp-input-group").find("select"), $(this).attr("value")); 3046 }); 3047 function convertOptionToButton(option) { 3048 var optionText = $(option).text(); 3049 var optionValue = $(option).attr("value") || $(option).text(); 3050 var optionIsDisabled = $(option).prop("disabled"); 3051 var outputButton = `<button value="${optionValue}" class="custom-select-item lp-icon" type="button" ${optionIsDisabled ? "disabled" : ""}>${optionText}</button>`; 3052 return outputButton; 3053 } 3054 function appendOptionButtons(selectItem, appendTarget) { 3055 $(selectItem).find("option").each(function () { 3056 let currentButton = convertOptionToButton(this); 3057 $(appendTarget).append(currentButton); 3058 }); 3059 } 3060 function showSelectMenu(selectMenu) { 3061 var customSelect = $(selectMenu).closest(".custom-select")[0]; 3062 customSelect.classList.add('open'); 3063 $(selectMenu).slideDown(); 3064 } 3065 $dropdown.on("click", ".custom-select-toggle", function (e) { 3066 var $customSelect = $(this).closest(".custom-select"); 3067 var selectMenu = $customSelect.find(".custom-select-menu")[0]; 3068 if ($customSelect.hasClass("open")) { 3069 closeSelectMenu(selectMenu); 3070 } else { 3071 showSelectMenu(selectMenu); 3072 } 3073 }); 3074 $(document.body).on("click", function (e) { 3075 if (!$(e.target).closest(`#${sectionDomId} .js-select-input`).length) { 3076 $(`#${sectionDomId} .custom-select.open`).each(function () { 3077 const selectMenu = $(this).find(".custom-select-menu")[0]; 3078 closeSelectMenu(selectMenu); 3079 }); 3080 } 3081 }); 3082 } 3083 function closeSelectMenu(selectMenu) { 3084 var customSelect = $(selectMenu).closest(".custom-select")[0]; 3085 $(customSelect).removeClass("open"); 3086 $(selectMenu).slideUp(); 3087 } 3088 $officeSelect.change(onSearch); 3089 $tagSelect.change(onSearch); 3090})('section-9246491e-d5f8-41a8-a437-7e55d6487d07', JSON.parse("{\"resource\":\"agents\",\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true},\"companyId\":\"1b2e84eb-ab00-4e30-a6ec-30fa180236eb\",\"usePageResource\":false,\"sectionIndex\":2}")); 3091} catch(e) { 3092console.log(e); 3093} 3094 try { 3095(function init(sectionDomId) { 3096 const $section = $('#' + sectionDomId); 3097 if ($section.find('.parallax').length) $section.addClass('parallax-enabled'); 3098 if ($section.find('.video-wrapper').length) $section.addClass('video'); 3099})('section-dadd7d75-7345-43e0-9c8b-3d30a9b2aa75', 'undefined'); 3100} catch(e) { 3101console.log(e); 3102} 3103 try { 3104(function init(sectionDomId, options) { 3105 let section = null; 3106 switch (sectionDomId) { 3107 case 'NAVBAR': 3108 section = document.querySelector('body > nav, #global-navbar'); 3109 break; 3110 case 'FOOTER': 3111 section = document.querySelector('body > footer, #global-footer'); 3112 break; 3113 case 'SIDEMENU': 3114 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 3115 break; 3116 case 'CONTACT':
3117 section = document.querySelector('#modal-global-contact-us'); 3118 break; 3119 case 'MOBILE_CONTACT': 3120 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 3121 break; 3122 case 'SUBSCRIBE': 3123 // Subscribe Not Implemented 3124 section = null; 3125 break; 3126 case 'ACCOUNT': 3127 // Account Not Implemented 3128 section = null; 3129 break; 3130 default: 3131 section = document.querySelector('#' + sectionDomId); 3132 } 3133 if (!section) { 3134 return; 3135 } 3136 var url = window.luxuryPresence.defaults.routerUrl; 3137 var companyId = window.luxuryPresence.defaults.companyId; 3138 var limit = options.limit || 8; 3139 if (typeof limit === 'string') { 3140 limit = parseInt(limit, 10) || 8; // this NaN protection also filters out 0 - this is expected 3141 } 3142 var templateSelector = options.templateSelector || '.jsIGTemplate'; 3143 var containerSelector = options.containerSelector || '.jsIGContainer'; 3144 var hasDataClass = options.hasDataClass || 'has-data'; 3145 var hideActivateMessage = options.hasDataClass || false; 3146 var payload = { 3147 companyId: companyId, 3148 limit: limit 3149 }; 3150 if (options.resourceId && typeof options.resourceId === 'string' && !options.resourceId.match(/^{{.*}}$/)) { 3151 payload.resourceId = options.resourceId; 3152 // Federated enum values are uppercase (AGENT/TEAM); element configs carry lowercase 3153 payload.resource = String(options.resource || 'agent').toUpperCase(); 3154 payload.fallbackToNoResource = options.fallbackToNoResource === 'true' || options.fallbackToNoResource === true; 3155 } 3156 var query = 'query InstagramFeed (\n' + ' $companyId: ID!\n' + ' $instagramAuthorizationId: ID\n' + ' $username: String\n' + (payload.resourceId ? '$resource: InstagramContentAuthResourceEnum\n $resourceId: ID\n $fallbackToNoResource: Boolean' : '') + ' $limit: Int\n' + ') {\n' + ' instagramContentFeed (\n' + ' companyId: $companyId\n' + ' instagramAuthorizationId: $instagramAuthorizationId\n' + ' username: $username\n' + (payload.resourceId ? 'resource: $resource\n resourceId: $resourceId\n fallbackToNoResource: $fallbackToNoResource' : '') + ' limit: $limit\n' + ' ) {\n' + ' active\n' + ' feedUrl\n' + ' username\n' + ' items {\n' + ' id\n' + ' caption\n' + ' commentsCount\n' + ' likeCount\n' + ' mediaType\n' + ' mediaUrl\n' + ' permalink\n' + ' shortcode\n' + ' thumbnailUrl\n' + ' timestamp\n' + ' username\n' + ' }\n' + ' }\n' + '}\n'; 3157 var templateHTML = section.querySelector(templateSelector)?.innerHTML || ''; 3158 var template = Handlebars.compile(templateHTML); 3159 var container = section.querySelector(containerSelector); 3160 if (options.variables) { 3161 Object.keys(options.variables).forEach(function (key) { 3162 if (options.variables.hasOwnProperty(key) && (typeof options.variables[key] !== 'string' || !options.variables[key].match(/^{{.*}}$/))) { 3163 payload[key] = options.variables[key]; 3164 } 3165 }); 3166 } 3167 function getData() { 3168 var feed = { 3169 error: true 3170 }; 3171 if (payload.companyId == null || payload.companyId === '') { 3172 // instagramContentFeed requires companyId (ID!) â nothing to fetch without it. 3173 // Checked after the options.variables merge, which may override the default. 3174 // Deferred so element listeners (attached after this template runs) still receive it. 3175 setTimeout(function () { 3176 section.dispatchEvent(new CustomEvent('ig-data', { 3177 detail: feed 3178 })); 3179 }, 0); 3180 return; 3181 } 3182 superagent.post(url + '/graphql').send({ 3183 query: query, 3184 variables: payload 3185 }).then(res => { 3186 try { 3187 if (!res.body.errors) { 3188 feed = res.body.data.instagramContentFeed; 3189 if (!feed.active) { 3190 if (!hideActivateMessage && sectionDomId === 'section-temp' && container) { 3191 if (payload.resourceId) { 3192 container.innerHTML = '<div style="text-align: center">Instagram account is not connected to selected ' + payload.resource + '.<br /> Connect it on the ' + payload.resource + ' page</div>'; 3193 } else { 3194 container.innerHTML = '<div style="text-align: center">Instagram account is not connected.<br /> Connect it on <a href="/profile">Profile page</a></div>'; 3195 } 3196 } 3197 } else { 3198 if (feed.items.length) { 3199 if (hasDataClass) { 3200 section.classList.add(hasDataClass); 3201 } 3202 const feedName = feed.username; 3203 section.querySelectorAll('.jsIGLink').forEach(link => link.setAttribute('href', feed.feedUrl)); 3204 section.querySelectorAll('.jsIGName').forEach(name => { 3205 name.textContent = '@' + feedName; 3206 name.setAttribute('title', '@' + feedName); 3207 }); 3208 if (container && template) { 3209 container.innerHTML = template(feed); 3210 } 3211 } 3212 } 3213 } 3214 } catch (e) {} 3215 section.dispatchEvent(new CustomEvent('ig-data', { 3216 detail: feed 3217 })); 3218 }).catch(e => { 3219 console.log('err', e); 3220 section.dispatchEvent(new CustomEvent('ig-data', { 3221 detail: feed 3222 })); 3223 }); 3224 } 3225 getData(); 3226})('section-840698fa-42be-4d74-b5a0-781c1f3985f0', JSON.parse("{\"limit\":5,\"resource\":\"agent\",\"resourceId\":\"\",\"fallbackToNoResource\":\"true\",\"companyId\":\"1b2e84eb-ab00-4e30-a6ec-30fa180236eb\",\"usePageResource\":false,\"sectionIndex\":4,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 3227} catch(e) { 3228console.log(e); 3229} 3230 try { 3231(function init(sectionId) { 3232 const $section = $('#' + sectionId); 3233 const $autoShrinks = $section.find('.jsShrink'); 3234 const toAdjust = []; 3235 const minFontSize = 10; 3236 $autoShrinks.each(function () { 3237 const $el = $(this); 3238 const $parent = $el.parent(); 3239 const { 3240 $cl: $sizer 3241 } = makeElementCopy($el, $parent); 3242 const { 3243 $cl: $sizerMin 3244 } = makeElementCopy($el, $parent); 3245 toAdjust.push({ 3246 $el, 3247 $parent, 3248 $sizer, 3249 $sizerMin, 3250 altered: false 3251 }); 3252 }); 3253 adjustSizes(); 3254 $section.on('ig-data', adjustSizes); 3255 $(window).on('resize.lpui-auto-clean', adjustSizes); 3256 function makeElementCopy($el, $parent) { 3257 const $cont = $('<div style="width: 0; height: 0; position: relative; overflow: hidden;"></div>');
3258 $parent.prepend($cont); 3259 const $cl = $el.clone().removeClass('wow fadeInUp jsShrink').appendTo($cont); 3260 $cl[0].removeAttribute('style'); 3261 $cl[0].removeAttribute('data-wow-delay'); 3262 $cl.css({ 3263 'position': 'absolute', 3264 'overflow-wrap': 'normal', 3265 'white-space': 'nowrap' 3266 }); 3267 return { 3268 $cont, 3269 $cl 3270 }; 3271 } 3272 function resetStyles(item) { 3273 if (item.altered) { 3274 item.$el[0].style.fontSize = ''; 3275 item.$el[0].style.letterSpacing = ''; 3276 item.altered = false; 3277 } 3278 } 3279 function setStyles($el, k, fontSize, letterSpacing) { 3280 $el.css('font-size', `${Math.floor(fontSize * k)}px`); 3281 if (letterSpacing) { 3282 $el.css('letter-spacing', `${letterSpacing * k}px`); 3283 } 3284 } 3285 function adjustSizes() { 3286 toAdjust.forEach(function (item) { 3287 const { 3288 $el, 3289 $parent, 3290 $sizer, 3291 $sizerMin 3292 } = item; 3293 try { 3294 const contW = $parent[0].getBoundingClientRect().width; 3295 const sizeW = $sizer[0].getBoundingClientRect().width; 3296 if (!sizeW || contW >= sizeW) { 3297 resetStyles(item); 3298 return; 3299 } 3300 const mf = $sizer.css('font-size').match(/([\d\.]+)px/); 3301 if (!mf) { 3302 resetStyles(item); 3303 return; 3304 } 3305 const origFontSize = parseFloat(mf[1]); 3306 if (!origFontSize || origFontSize <= minFontSize) { 3307 resetStyles(); 3308 return; 3309 } 3310 const ms = $sizer.css('letter-spacing').match(/([\d\.]+)px/); 3311 const origLetterSpacing = ms && parseFloat(ms[1]) || 0; 3312 const fontK = minFontSize / origFontSize; 3313 setStyles($sizerMin, fontK, origFontSize, origLetterSpacing); 3314 const minW = $sizerMin[0].getBoundingClientRect().width; 3315 item.altered = true; 3316 if (minW >= contW) { 3317 setStyles($el, fontK, origFontSize, origLetterSpacing); 3318 } else { 3319 setStyles($el, contW / minW * fontK, origFontSize, origLetterSpacing); 3320 } 3321 } catch (e) { 3322 console.log(e); 3323 } 3324 }); 3325 } 3326})('section-840698fa-42be-4d74-b5a0-781c1f3985f0', JSON.parse("{\"resource\":\"agent\",\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true},\"companyId\":\"1b2e84eb-ab00-4e30-a6ec-30fa180236eb\",\"usePageResource\":false,\"sectionIndex\":4}")); 3327} catch(e) { 3328console.log(e); 3329} 3330 3331 var { body } = document; 3332 var globalNav = body.querySelector(':scope > nav'); 3333 var globalSideMenu = body.querySelector(':scope > div.sidemenu'); 3334 3335 document.querySelectorAll('body > .modal .close').forEach(modalCloseBtn => { 3336 modalCloseBtn.addEventListener('click', function() { 3337 window.lpUI.hideClosestModal(modalCloseBtn); 3338 }); 3339 }); 3340 3341 window.addEventListener('click', function() { 3342 document.querySelectorAll('.share-popup').forEach(sharedPopup => { 3343 sharedPopup.style.display = 'none' ; 3344 }); 3345 }); 3346 3347 /* Misc Partials / Addons */ 3348 function initWOW() { 3349 if (wow) { 3350 wow.init(); 3351 wow.scrollHandler(); 3352 setTimeout(function () { 3353 const wowHideStyle = document.getElementById('wow-hide-elements'); 3354 if(wowHideStyle) { 3355 wowHideStyle.disabled = true; 3356 } 3357 }, 1); 3358 } 3359 } 3360 3361 const wowHideElements = document.getElementById('wow-hide-elements'); 3362 if (wowHideElements) { 3363 wowHideElements.disabled = false; 3364 } 3365 3366 initWOW(); 3367 3368 /* Generic Navbar Handling */ 3369 globalNav?.querySelectorAll('.hamburger-component').forEach(hamburgerComponent => { 3370 hamburgerComponent.addEventListener('click', function() { 3371 window.lpUI.sideMenuToggle(); 3372 }); 3373 }); 3374 globalSideMenu?.querySelectorAll('.toggle').forEach(toggleEl => { 3375 toggleEl.addEventListener('click', function() { 3376 window.lpUI.sideMenuToggle(); 3377 }); 3378 }); 3379 3380 document.querySelectorAll('body > nav .sub-nav-container > a, body > div.sidemenu .sub-nav-container > a').forEach(linkEl => { 3381 linkEl.addEventListener('click', function(e) { 3382 e.preventDefault(); 3383 e.stopPropagation();
3384 var subNav = linkEl.parentElement.querySelector(':scope > .sub-nav'); 3385 if (subNav && subNav.classList.contains('visible')){ 3386 subNav.classList.remove('visible'); 3387 } else { 3388 globalNav?.querySelectorAll('.sub-nav-container .sub-nav').forEach(globalSubNav => { 3389 globalSubNav.classList.remove('visible'); 3390 }); 3391 globalSideMenu?.querySelectorAll('.sub-nav').forEach(sideMenuSubNav => { 3392 sideMenuSubNav.classList.remove('visible'); 3393 }); 3394 subNav?.classList.add('visible'); 3395 } 3396 }); 3397 }); 3398 window.addEventListener('click', function() { 3399 document.querySelectorAll('nav .sub-nav.visible, .sidemenu .sub-nav.visible').forEach(subNavEl => { 3400 subNavEl.classList.remove('visible'); 3401 }); 3402 }); 3403 3404 } 3405 3406 document.addEventListener('DOMContentLoaded', lpGlobalInit); 3407 3408 </script>
3408 3409 3410
3410<script type="module"> 3411 function selectorExists(selector) { 3412 return document.querySelector(selector) !== null; 3413 } 3414 3415 // Function to initialize the third-party library 3416 function initParoller(selector = '.my-paroller') { 3417 var $parollerElements = $(selector); 3418 if ($parollerElements.length > 0 && typeof $parollerElements.paroller === 'function') { 3419 $parollerElements.paroller(); 3420 } 3421 } 3422 3423 const parollerSelector = '.my-paroller'; 3424 3425 if (selectorExists(parollerSelector)) { 3426 window.luxuryPresence.libs.loadJs(window.luxuryPresence.libs.jsLibsMap.paroller.jsSrc, function() { 3427 initParoller(parollerSelector); 3428 window.luxuryPresence.libs.jsLibsMap.paroller.isLoaded = true; 3429 }); 3430 } 3431 </script>
3431 3432 3433 <!-- Google Tag Manager (noscript) -->
vendor: 80 bytes, lines 3433-3434
3433 3434 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
3434GTM-T9SFQGHZ
vendor: 107 bytes, lines 3434-3436
3434" 3435 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 3436
3436<!-- End Google Tag Manager --> 3437
3437<script> 3438// adding follow up btn on ig element 3439 (function () { 3440 const sel = '.feed.redesign .lp-container'; 3441 const btnClass = 'lp-follow-btn'; 3442 const href = 'https://www.instagram.com/nobleblack1/'; 3443 3444 function makeBtn() { 3445 if (document.querySelector(`.${btnClass}`)) return null; 3446 const a = document.createElement('a'); 3447 a.className = btnClass; 3448 a.href = href; 3449 a.target = '_blank'; 3450 a.rel = 'noopener noreferrer'; 3451 a.textContent = 'Follow Us'; 3452 return a; 3453 } 3454 3455 function insert() { 3456 const container = document.querySelector(sel); 3457 if (!container) return false; 3458 const btn = makeBtn(); 3459 if (!btn) return true; 3460 const feed = container.querySelector('.feed__content'); 3461 if (feed) feed.insertAdjacentElement('afterend', btn); 3462 else container.appendChild(btn); 3463 return true; 3464 } 3465 3466 if (document.readyState === 'loading') { 3467 document.addEventListener('DOMContentLoaded', insert); 3468 } else { 3469 if (!insert()) { 3470 setTimeout(insert, 200); 3471 } 3472 } 3473})(); 3474</script>
3474 3475 3476
3477<script> 3478const nav = document.querySelector('.nav-conteiner'); 3479const placeholder = document.querySelector('.nav-placeholder'); 3480 3481let originalY = null; 3482let lastScrollY = window.scrollY; 3483const revealOffset = 100; // distancia a desplazar hacia abajo al hacer scroll up 3484 3485window.addEventListener('scroll', () => { 3486 const scrollY = window.scrollY; 3487 3488 // Capturamos la posición original en el primer scroll 3489 if (originalY === null && scrollY > 0) { 3490 originalY = nav.getBoundingClientRect().top + scrollY; 3491 } 3492 3493 if (originalY === null) return; 3494 3495 // Si todavÃa no llegó a la posición original â nav suelta 3496 if (scrollY < originalY) { 3497 nav.classList.remove('fixed', 'reveal'); 3498 placeholder.style.height = "0px"; 3499 lastScrollY = scrollY; 3500 return; 3501 } 3502 3503 // Llegó al top â nav fija 3504 nav.classList.add('fixed'); 3505 placeholder.style.height = nav.offsetHeight + "px"; 3506 3507 // Detectar dirección del scroll 3508 if (scrollY < lastScrollY) { 3509 // Scroll hacia arriba â mostrar la main nav (baja 100px) 3510 nav.classList.add('reveal'); 3511 } else { 3512 // Scroll hacia abajo â oculta (queda pegada arriba) 3513 nav.classList.remove('reveal'); 3514 } 3515 3516 lastScrollY = scrollY; 3517}); 3518</script>
3518 3519 3520
3521<script> 3522document.addEventListener("DOMContentLoaded", function () { 3523 const containers = [ 3524 document.getElementById("global-footer"), 3525 document.getElementById("modal-global-contact-us"), 3526 ]; 3527 3528 containers.forEach((container) => { 3529 if (!container) return; 3530 3531 const mobileLink = container.querySelector('a[href="tel:3475263308"]'); 3532 const officeLink = container.querySelector('a[href="tel:2123553550"]'); 3533 3534 if (mobileLink && !mobileLink.textContent.trim().startsWith("M:")) { 3535 mobileLink.textContent = "M: " + mobileLink.textContent.trim(); 3536 } 3537 3538 if (officeLink && !officeLink.textContent.trim().startsWith("O:")) { 3539 officeLink.textContent = "O: " + officeLink.textContent.trim(); 3540 } 3541 }); 3542}); 3543</script>
3543 3544 3545 3546
3546<script 3547 src="https://cdn.luxurypresence.com/scripts/a11y-widget/latest/widget.js" 3548 data-website-id="3c006d45-b4eb-4033-b25f-50521cf2281b" 3549 3550 defer></script>
vendor: 1 bytes, line 3550
3550
3551<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:'a480da7eaea4b1d6',t:'MTc5MTU4NTI3NA=='};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>
3551<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"d2a8f4b3d65944edb8fcd6ffce49ee5e","spa":2}' crossorigin="anonymous"></script>
3551 3552</body> 3553</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.