Ocean City Boardwalk Redevelopment Report Remains on Hold

Ocean City Council votes 4-3 to delay action on the 600 Boardwalk report. Read about legal considerations and impacts on local real estate.

Ocean City’s debate over the future of the Boardwalk took another turn when City Council voted 4–3 to table two resolutions connected to the Boardwalk Subcommittee’s redevelopment recommendations.

At the center of the discussion is 600 Boardwalk, the former Gillian’s Wonderland Pier property. The decision does not resolve what ultimately happens at the site. Instead, it delays formal action on recommendations intended to help guide redevelopment of one of Ocean City’s most visible commercial properties.

For homeowners, business owners, and anyone following Ocean City development, the important distinction is that the redevelopment discussion itself has not disappeared. The process has simply reached another pause.

What Ocean City Council tabled

The two resolutions would have formally accepted the Boardwalk Subcommittee’s final report and forwarded its recommendations to the Ocean City Planning Board for consideration as part of the city’s planning process.

Council members Crowley, Polcini, Levchuck, and Winslow voted to table the resolutions. Council members Hartzell, Kelly, and Barnes opposed the delay.

According to the reported discussion, legal considerations surrounding active litigation contributed to the decision to postpone action.

That leaves the recommendations in an unusual position: substantial work has already gone into examining the Boardwalk’s future, but the next formal planning step has not yet occurred.

Why 600 Boardwalk remains the key property

Much of the attention continues to center on the former Wonderland Pier site at 600 Boardwalk.

The property represents more than an individual redevelopment parcel. Its location places it directly within Ocean City’s Boardwalk commercial district, where decisions involving building scale, commercial uses, entertainment, and redevelopment can have broader implications for the character of the surrounding area.

That is why the discussion has attracted attention well beyond the property itself.

The Boardwalk Subcommittee’s work was intended to establish recommendations that could help guide future planning rather than allow one project to define the conversation by itself.

What the 4–3 vote actually means

A vote to table is different from rejecting the recommendations.

The Council did not vote to permanently abandon the Boardwalk Subcommittee report. Instead, the majority chose not to move the two resolutions forward at this stage.

The immediate result is that the recommendations have not yet been formally transmitted to the Planning Board for potential integration into the city’s planning framework.

For residents following Ocean City Boardwalk redevelopment, that distinction matters. The future of the former Wonderland Pier property remains unsettled, and the broader planning conversation remains active.

The larger Ocean City development question

The debate highlights a recurring challenge in mature shore communities: how to accommodate investment and redevelopment without unintentionally changing the character that made an area valuable in the first place.

On the Ocean City Boardwalk, those considerations can include:

  • The scale and density of future development

  • The balance between entertainment, retail, and other commercial uses

  • The physical character of the Boardwalk

  • How redevelopment fits into Ocean City’s existing planning framework

Those questions become especially significant when a large or highly visible property becomes available for redevelopment.

The former Wonderland Pier site is exactly that type of property.

Why this matters for Ocean City real estate

Major redevelopment decisions can matter to property owners even when their homes are nowhere near the project itself.

Ocean City’s Boardwalk is one of the defining features of the community and a major part of how second-homeowners, visitors, investors, and full-time residents experience the island.

That does not mean a specific redevelopment proposal will automatically increase or decrease property values. There is not enough information in the current record to make that prediction.

What can be said is that decisions involving prominent commercial parcels can influence neighborhood character, traffic patterns, commercial activity, and how different sections of Ocean City evolve over time.

That makes the planning process worth following rather than focusing only on the final project.

What happens next?

The immediate question is when Ocean City Council will revisit the two tabled resolutions.

Until additional action occurs, the Boardwalk Subcommittee recommendations remain delayed rather than formally advanced through the planning process.

For property owners watching the former Wonderland Pier site, the key milestones will be future Council action, potential Planning Board involvement, and whatever redevelopment proposals ultimately move through the municipal approval process.

The 4–3 vote may have delayed the next step, but it certainly did not end the larger discussion over the future of 600 Boardwalk.

Curious how major redevelopment or zoning changes could affect an Ocean City property? Click here to contact us → https://www.lexyrealtygroup.com/contact

Sources: Patch



(function () { function findPropertyForm() { const forms = [ ...document.querySelectorAll('form.react-form-contents') ]; return forms.find(function (form) { const address = form.querySelector('fieldset.fields.address'); const phone = form.querySelector('input[name="fullPhone"]'); const email = form.querySelector('input[type="email"]'); const values = [ ...form.querySelectorAll('input[type="radio"]') ].map(function (radio) { return radio.value; }); return (!!address && !!phone && !!email && values.includes('Morning') && values.includes('Afternoon') && values.includes('Evening')); }); } function initCompetitiveBuilderForm() { const form = findPropertyForm(); if (!form) { return; } if (form.dataset.cbScopedOverlayReady === 'yes') { return; } const submit = form.querySelector('button[type="submit"], input[type="submit"]'); const firstName = form.querySelector('input[name="fname"]'); const lastName = form.querySelector('input[name="lname"]'); const phone = form.querySelector('input[name="fullPhone"]'); const email = form.querySelector('input[type="email"]'); const radios = [ ...form.querySelectorAll('input[type="radio"]') ]; const textarea = form.querySelector('textarea'); const addressGroup = form.querySelector('fieldset.fields.address'); if (!submit || !firstName || !lastName || !phone || !email || !addressGroup) { return; } const country = addressGroup.querySelector('select'); const addressInputs = [ ...addressGroup.querySelectorAll('input[type="text"]') ]; const street = addressInputs[0]; const address2 = addressInputs[1]; const city = addressInputs[2]; const state = addressInputs[3]; const zip = addressInputs[4]; if (!country || !street || !city || !state || !zip) { return; } const CBP_LEAD_WEBHOOK = 'https://script.google.com/macros/s/AKfycbwNzAJRH9ul7Q-XLRO1CJ8fF-Foyg394V2PI_tRNUHNCtWWFPNtw8JtxLyEGzOzZ1_TVA/exec'; let cbpLeadId = null; let cbpAddressFingerprint = ''; let cbpStartedSent = false; let cbpCompletedSent = false; let cbpStartPromise = Promise.resolve(); function cbpSendEvent(payload) { return fetch(CBP_LEAD_WEBHOOK, { method: 'POST', mode: 'no-cors', keepalive: true, headers: { 'Content-Type': 'text/plain;charset=utf-8' }, body: JSON.stringify(payload) }).catch(function (error) { console.warn('CBP lead tracking request failed:', error); }); } function cbpTrackStep1() { const values = { street: street.value.trim(), city: city.value.trim(), state: state.value.trim(), zip: zip.value.trim() }; const fingerprint = JSON.stringify(values).toLowerCase(); if (cbpAddressFingerprint !== fingerprint) { cbpLeadId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cbp-' + Date.now() + '-' + Math.random().toString(36).slice(2); cbpAddressFingerprint = fingerprint; cbpStartedSent = false; cbpCompletedSent = false; } if (cbpStartedSent) return; cbpStartedSent = true; cbpStartPromise = cbpSendEvent({ action: 'started', submissionId: cbpLeadId, street: values.street, city: values.city, state: values.state, zip: values.zip }); } function cbpTrackCompleted() { if (!cbpLeadId || !cbpStartedSent || cbpCompletedSent) return; cbpCompletedSent = true; const completedId = cbpLeadId; Promise.resolve(cbpStartPromise).then(function () { return cbpSendEvent({ action: 'completed', submissionId: completedId }); }); } const cbpNativeFormWrapper = form.closest('.form-wrapper') || form.parentElement; function cbpHasNativeSuccess() { if (!cbpNativeFormWrapper) return false; const confirmation = cbpNativeFormWrapper.querySelector('.form-submission-text, .form-submission-html, ' + '.form-submission-message, [data-form-success], .form-success'); if (!confirmation) return false; const style = window.getComputedStyle(confirmation); return style.display !== 'none' && style.visibility !== 'hidden' && confirmation.getClientRects().length > 0 && (confirmation.textContent || '').trim().length > 0; } let cbpCompletionWatch = null; let cbpCompletionTimeout = null; function cbpBeginCompletionWatch() { if (!cbpStartedSent || cbpCompletedSent || !cbpNativeFormWrapper) return; if (cbpCompletionWatch) cbpCompletionWatch.disconnect(); if (cbpCompletionTimeout) clearTimeout(cbpCompletionTimeout); function check() { if (!cbpHasNativeSuccess()) return; cbpTrackCompleted(); if (cbpCompletionWatch) { cbpCompletionWatch.disconnect(); cbpCompletionWatch = null; } if (cbpCompletionTimeout) { clearTimeout(cbpCompletionTimeout); cbpCompletionTimeout = null; } } cbpCompletionWatch = new MutationObserver(check); cbpCompletionWatch.observe(cbpNativeFormWrapper, { childList: true, subtree: true, characterData: true, attributes: true, attributeFilter: ['class', 'style'] }); cbpCompletionTimeout = setTimeout(function () { if (cbpCompletionWatch) cbpCompletionWatch.disconnect(); cbpCompletionWatch = null; cbpCompletionTimeout = null; }, 60000); check(); } function fieldWrapper(input) { if (!input) { return null; } return (input.closest('.field') || input.closest('.form-item') || input.closest('fieldset') || input.parentElement); } const countryWrap = fieldWrapper(country); const streetWrap = fieldWrapper(street); const address2Wrap = address2 ? fieldWrapper(address2) : null; const nameGroup = firstName.closest('fieldset'); const phoneGroup = phone.closest('fieldset'); const emailWrap = email.closest('.form-item'); const radioGroup = radios[0].closest('fieldset'); const textareaWrap = textarea ? textarea.closest('.form-item') : null; const submitWrap = submit.closest('.form-button-wrapper'); if (!nameGroup || !phoneGroup || !emailWrap || !radioGroup || !submitWrap) { return; } nameGroup.classList.add('cb-modal-name'); phoneGroup.classList.add('cb-modal-phone'); emailWrap.classList.add('cb-modal-email'); radioGroup.classList.add('cb-modal-radio'); function hide(el) { if (!el) return; el.style.setProperty('display', 'none', 'important'); } function showBlock(el) { if (!el) return; el.style.setProperty('display', 'block', 'important'); } function showFlex(el) { if (!el) return; el.style.setProperty('display', 'flex', 'important'); } function restoreDisplay(el) { if (!el) return; el.style.removeProperty('display'); } function setInvalid(input, invalid) { input.classList.toggle('cb-address-invalid', invalid); } street.required = true; city.required = true; state.required = true; zip.required = false; firstName.required = true; lastName.required = true; phone.required = true; email.required = true; phone.setAttribute('inputmode', 'tel'); phone.setAttribute('autocomplete', 'tel'); email.setAttribute('inputmode', 'email'); email.setAttribute('autocomplete', 'email'); const usa = [...country.options] .find(function (option) { return (option.value === 'US' || option.textContent .toLowerCase() .includes('united states')); }); if (usa) { country.value = usa.value; country.dispatchEvent(new Event('change', { bubbles: true })); } if (!state.value.trim()) { state.value = 'NJ'; state.dispatchEvent(new Event('input', { bubbles: true })); state.dispatchEvent(new Event('change', { bubbles: true })); } if (streetWrap) { const label = streetWrap.querySelector('label, .caption, .title'); if (label && label.textContent .toLowerCase() .includes('address line 1')) { label.textContent = 'Street Address'; } } const CB_GOOGLE_PLACES_API_KEY = 'AIzaSyDU-eV69AYKpwXMn_WDXE9-XgbcHRhHw_M'; function setNativeInputValue(input, value) { if (!input) return; const prototype = Object.getPrototypeOf(input); const descriptor = Object.getOwnPropertyDescriptor(prototype, 'value') || Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value'); if (descriptor && descriptor.set) { descriptor.set.call(input, value || ''); } else { input.value = value || ''; } input.dispatchEvent(new Event('input', { bubbles: true })); input.dispatchEvent(new Event('change', { bubbles: true })); } function newGoogleSessionToken() { if (window.crypto && typeof window.crypto.randomUUID === 'function') { return window.crypto.randomUUID(); } return (Date.now().toString(36) + Math.random() .toString(36) .slice(2)).slice(0, 36); } function initGoogleAddressAutocomplete() { if (street.dataset.cbGoogleAutocompleteReady === 'yes') { return; } street.dataset.cbGoogleAutocompleteReady = 'yes'; if (!streetWrap) { return; } streetWrap.classList.add('cb-google-autocomplete-wrap'); form.querySelector('#cb-google-address-suggestions')?.remove(); const suggestionsBox = document.createElement('div'); suggestionsBox.id = 'cb-google-address-suggestions'; suggestionsBox.setAttribute('role', 'listbox'); streetWrap.appendChild(suggestionsBox); street.setAttribute('autocomplete', 'off'); let debounceTimer = null; let requestController = null; let latestRequest = 0; let sessionToken = null; let activeIndex = -1; let suggestions = []; let selectingSuggestion = false; function hideSuggestions() { suggestionsBox.classList.remove('cb-show'); suggestionsBox.replaceChildren(); suggestions = []; activeIndex = -1; } function updateActiveOption() { const options = [ ...suggestionsBox.querySelectorAll('.cb-google-address-option') ]; options.forEach(function (option, index) { option.classList.toggle('cb-active', index === activeIndex); }); } function componentByType(components, type) { return components.find(function (component) { return (Array.isArray(component.types) && component.types.includes(type)); }); } async function selectSuggestion(suggestion) { if (!suggestion || !suggestion.placeId) { return; } const selectedToken = sessionToken; selectingSuggestion = true; clearTimeout(debounceTimer); debounceTimer = null; if (requestController) { requestController.abort(); requestController = null; } latestRequest++; hideSuggestions(); try { let detailsUrl = 'https://places.googleapis.com/v1/places/' + encodeURIComponent(suggestion.placeId) + '?languageCode=en' + '®ionCode=us'; if (selectedToken) { detailsUrl += '&sessionToken=' + encodeURIComponent(selectedToken); } const response = await fetch(detailsUrl, { method: 'GET', headers: { 'X-Goog-Api-Key': CB_GOOGLE_PLACES_API_KEY, 'X-Goog-FieldMask': 'addressComponents' } }); if (!response.ok) { const errorText = await response.text(); throw new Error('Place Details failed (' + response.status + '): ' + errorText); } const place = await response.json(); const components = place.addressComponents || []; const streetNumber = componentByType(components, 'street_number'); const route = componentByType(components, 'route'); const premise = componentByType(components, 'premise'); const locality = componentByType(components, 'locality'); const postalTown = componentByType(components, 'postal_town'); const sublocality = componentByType(components, 'sublocality_level_1'); const county = componentByType(components, 'administrative_area_level_2'); const adminArea = componentByType(components, 'administrative_area_level_1'); const postalCode = componentByType(components, 'postal_code'); const postalSuffix = componentByType(components, 'postal_code_suffix'); const streetValue = [ streetNumber ? streetNumber.longText : '', route ? route.longText : '' ] .filter(Boolean) .join(' ') || (premise ? premise.longText : ''); const cityComponent = locality || postalTown || sublocality || county; const cityValue = cityComponent ? cityComponent.longText : ''; const stateValue = adminArea ? (adminArea.shortText || adminArea.longText || '') : ''; let zipValue = postalCode ? postalCode.longText : ''; if (zipValue && postalSuffix && postalSuffix.longText) { zipValue += '-' + postalSuffix.longText; } if (streetValue) { setNativeInputValue(street, streetValue); } if (cityValue) { setNativeInputValue(city, cityValue); } if (stateValue) { setNativeInputValue(state, stateValue); } if (zipValue) { setNativeInputValue(zip, zipValue); } [ street, city, state, zip ].forEach(function (input) { setInvalid(input, false); }); const step1Error = form.querySelector('#cb-real-step1-error'); if (step1Error) { step1Error.classList.remove('cb-show'); } sessionToken = null; console.log('Google address selected and native form fields filled ✓'); } catch (error) { console.error('Google address details error:', error); } finally { hideSuggestions(); selectingSuggestion = false; } } function renderSuggestions(rows) { suggestionsBox.replaceChildren(); suggestions = rows.slice(0, 5); activeIndex = -1; suggestions.forEach(function (suggestion, index) { const button = document.createElement('button'); button.type = 'button'; button.className = 'cb-google-address-option'; button.setAttribute('role', 'option'); const main = document.createElement('span'); main.className = 'cb-google-address-main'; main.textContent = suggestion.mainText || suggestion.fullText || ''; button.appendChild(main); if (suggestion.secondaryText) { const secondary = document.createElement('span'); secondary.className = 'cb-google-address-secondary'; secondary.textContent = suggestion.secondaryText; button.appendChild(secondary); } button.addEventListener('mousedown', function (event) { event.preventDefault(); }); button.addEventListener('click', function () { selectSuggestion(suggestions[index]); }); suggestionsBox.appendChild(button); }); if (suggestions.length) { const powered = document.createElement('div'); powered.className = 'cb-google-powered'; powered.textContent = 'Powered by Google'; suggestionsBox.appendChild(powered); suggestionsBox.classList.add('cb-show'); } else { hideSuggestions(); } } async function fetchSuggestions() { if (selectingSuggestion) { hideSuggestions(); return; } const query = street.value.trim(); if (query.length < 3) { hideSuggestions(); return; } if (!sessionToken) { sessionToken = newGoogleSessionToken(); } if (requestController) { requestController.abort(); } requestController = new AbortController(); const requestNumber = ++latestRequest; try { const response = await fetch('https://places.googleapis.com/v1/places:autocomplete', { method: 'POST', signal: requestController.signal, headers: { 'Content-Type': 'application/json', 'X-Goog-Api-Key': CB_GOOGLE_PLACES_API_KEY, 'X-Goog-FieldMask': 'suggestions.placePrediction.placeId,' + 'suggestions.placePrediction.text,' + 'suggestions.placePrediction.structuredFormat' }, body: JSON.stringify({ input: query, includedRegionCodes: [ 'us' ], languageCode: 'en', regionCode: 'us', sessionToken: sessionToken }) }); if (requestNumber !== latestRequest) { return; } if (!response.ok) { const errorText = await response.text(); throw new Error('Autocomplete failed (' + response.status + '): ' + errorText); } const data = await response.json(); const rows = (data.suggestions || []) .map(function (item) { const prediction = item.placePrediction; if (!prediction) { return null; } const structured = prediction.structuredFormat || {}; return { placeId: prediction.placeId, fullText: prediction.text && prediction.text.text ? prediction.text.text : '', mainText: structured.mainText && structured.mainText.text ? structured.mainText.text : (prediction.text && prediction.text.text ? prediction.text.text : ''), secondaryText: structured.secondaryText && structured.secondaryText.text ? structured.secondaryText.text : '' }; }) .filter(Boolean); renderSuggestions(rows); } catch (error) { if (error && error.name === 'AbortError') { return; } hideSuggestions(); console.error('Google address autocomplete error:', error); } } street.addEventListener('input', function () { clearTimeout(debounceTimer); if (selectingSuggestion) { debounceTimer = null; hideSuggestions(); return; } debounceTimer = setTimeout(fetchSuggestions, 250); }); street.addEventListener('keydown', function (event) { if (!suggestionsBox.classList.contains('cb-show')) { return; } if (event.key === 'ArrowDown') { event.preventDefault(); activeIndex = Math.min(activeIndex + 1, suggestions.length - 1); updateActiveOption(); } else if (event.key === 'ArrowUp') { event.preventDefault(); activeIndex = Math.max(activeIndex - 1, 0); updateActiveOption(); } else if (event.key === 'Enter' && activeIndex >= 0) { event.preventDefault(); selectSuggestion(suggestions[activeIndex]); } else if (event.key === 'Escape') { hideSuggestions(); } }); document.addEventListener('click', function (event) { if (!streetWrap.contains(event.target)) { hideSuggestions(); } }); console.log('Google Places address autocomplete initialized ✓'); } initGoogleAddressAutocomplete(); form.querySelector('#cb-real-heading')?.remove(); form.querySelector('#cb-real-next-wrap')?.remove(); form.querySelector('#cb-real-final-note')?.remove(); form.querySelector('#cb-step2-close')?.remove(); document.querySelector('#cb-step2-backdrop')?.remove(); const heading = document.createElement('div'); heading.id = 'cb-real-heading'; heading.innerHTML = `

SEE WHAT BUILDERS WILL PAY FOR YOUR PROPERTY

STEP 2 OF 2

ONE LAST STEP

WHAT'S YOUR PROPERTY ADDRESS?

`; const fieldList = form.querySelector('.field-list'); fieldList.insertBefore(heading, fieldList.firstChild); const nextWrap = document.createElement('div'); nextWrap.id = 'cb-real-next-wrap'; nextWrap.innerHTML = `
No pressure. No obligation.
Please enter your Street Address, City and State.
`; addressGroup .insertAdjacentElement('afterend', nextWrap); const nextButton = form.querySelector('#cb-real-next'); const nativeSubmitColor = window.getComputedStyle(submit).backgroundColor; if (nativeSubmitColor && nativeSubmitColor !== 'rgba(0, 0, 0, 0)') { nextButton.style.setProperty('background-color', nativeSubmitColor, 'important'); } const finalNote = document.createElement('div'); finalNote.id = 'cb-real-final-note'; finalNote.innerHTML = ` No pressure. No obligation. `; submitWrap.insertAdjacentElement('afterend', finalNote); const backdrop = document.createElement('div'); backdrop.id = 'cb-step2-backdrop'; backdrop.setAttribute('aria-hidden', 'true'); document.body.appendChild(backdrop); backdrop.addEventListener('click', function (e) { e.preventDefault(); }); const close = document.createElement('div'); close.id = 'cb-step2-close'; close.innerHTML = '×'; close.setAttribute('role', 'button'); close.setAttribute('tabindex', '0'); close.setAttribute('aria-label', 'Return to property address'); form.insertBefore(close, form.firstChild); if (submit.tagName === 'INPUT') { submit.value = 'SUBMIT'; } else { submit.textContent = 'SUBMIT'; } function applyModalSizing() { const vw = window.innerWidth; let cardWidth; let cardPadding; if (vw <= 600) { cardWidth = Math.max(300, vw - 18); cardPadding = '20px 16px 22px'; [phoneGroup, emailWrap] .forEach(function (el) { el.style.setProperty('width', '100%', 'important'); el.style.setProperty('max-width', '100%', 'important'); el.style.setProperty('flex', '0 0 100%', 'important'); }); nameGroup.style.setProperty('display', 'block', 'important'); submit.style.setProperty('width', Math.min(245, Math.max(210, vw - 100)) + 'px', 'important'); submit.style.setProperty('min-width', '0', 'important'); } else if (vw <= 900) { cardWidth = Math.min(640, vw - 30); cardPadding = '28px 30px 30px'; [phoneGroup, emailWrap] .forEach(function (el) { el.style.setProperty('width', 'calc(50% - 7px)', 'important'); el.style.setProperty('max-width', 'calc(50% - 7px)', 'important'); el.style.setProperty('flex', '0 0 calc(50% - 7px)', 'important'); }); nameGroup.style.setProperty('display', 'flex', 'important'); submit.style.setProperty('width', '290px', 'important'); submit.style.setProperty('min-width', '0', 'important'); } else { cardWidth = Math.min(780, vw - 48); cardPadding = '30px 42px 34px'; [phoneGroup, emailWrap] .forEach(function (el) { el.style.setProperty('width', 'calc(50% - 7px)', 'important'); el.style.setProperty('max-width', 'calc(50% - 7px)', 'important'); el.style.setProperty('flex', '0 0 calc(50% - 7px)', 'important'); }); nameGroup.style.setProperty('display', 'flex', 'important'); submit.style.setProperty('width', '320px', 'important'); submit.style.setProperty('min-width', '0', 'important'); } form.style.setProperty('width', cardWidth + 'px', 'important'); form.style.setProperty('max-width', cardWidth + 'px', 'important'); form.style.setProperty('padding', cardPadding, 'important'); form.style.setProperty('max-height', 'calc(100dvh - 20px)', 'important'); submitWrap.style.setProperty('display', 'block', 'important'); submitWrap.style.setProperty('width', '100%', 'important'); submitWrap.style.setProperty('max-width', '100%', 'important'); submitWrap.style.setProperty('margin', vw <= 600 ? '18px auto 0' : '23px auto 0', 'important'); submitWrap.style.setProperty('padding', '0', 'important'); submitWrap.style.setProperty('text-align', 'center', 'important'); submit.style.setProperty('display', 'inline-flex', 'important'); submit.style.setProperty('align-items', 'center', 'important'); submit.style.setProperty('justify-content', 'center', 'important'); submit.style.setProperty('height', vw <= 600 ? '42px' : '46px', 'important'); submit.style.setProperty('margin', '0 auto', 'important'); submit.style.setProperty('font-weight', '800', 'important'); submit.style.setProperty('font-size', vw <= 600 ? '11.5px' : '13px', 'important'); submit.style.setProperty('letter-spacing', '.75px', 'important'); finalNote.style.setProperty('display', 'flex', 'important'); finalNote.style.setProperty('margin', window.innerWidth <= 600 ? '9px auto 0' : '10px auto 0', 'important'); } function removeModalShell() { document.documentElement .classList.remove('cb-step2-modal-open'); document.body .classList.remove('cb-step2-modal-open'); form.classList.remove('cb-step2-modal'); backdrop.setAttribute('aria-hidden', 'true'); form.removeAttribute('role'); form.removeAttribute('aria-modal'); form.removeAttribute('tabindex'); form.style.removeProperty('width'); form.style.removeProperty('max-width'); form.style.removeProperty('max-height'); form.style.removeProperty('padding'); document.documentElement.style .removeProperty('overflow'); document.body.style .removeProperty('overflow'); } function showStep1() { removeModalShell(); restoreDisplay(addressGroup); hide(countryWrap); hide(address2Wrap); hide(nameGroup); hide(phoneGroup); hide(emailWrap); hide(radioGroup); hide(textareaWrap); hide(submitWrap); hide(finalNote); showBlock(nextWrap); const mainTitle = form.querySelector('#cb-real-main-title'); mainTitle.style.display = 'block'; form.querySelector('#cb-real-heading-title').textContent = "WHAT'S YOUR PROPERTY ADDRESS?"; const subtitle = form.querySelector('#cb-real-heading-subtitle'); subtitle.textContent = ''; subtitle.style.display = 'none'; } function showStep2() { hide(addressGroup); hide(nextWrap); if (window.innerWidth <= 600) { showBlock(nameGroup); } else { showFlex(nameGroup); } showBlock(phoneGroup); showBlock(emailWrap); showBlock(radioGroup); hide(textareaWrap); showBlock(submitWrap); showFlex(finalNote); form.classList.add('cb-step2-modal'); document.documentElement .classList.add('cb-step2-modal-open'); document.body .classList.add('cb-step2-modal-open'); backdrop.setAttribute('aria-hidden', 'false'); form.setAttribute('role', 'dialog'); form.setAttribute('aria-modal', 'true'); applyModalSizing(); form.setAttribute('tabindex', '-1'); requestAnimationFrame(function () { try { form.focus({ preventScroll: true }); } catch (e) { form.focus(); } }); } function validateStep1() { const required = [ street, city, state ]; let valid = true; let firstBad = null; [ street, city, state, zip ].forEach(function (input) { input.dispatchEvent(new Event('change', { bubbles: true })); input.dispatchEvent(new Event('blur', { bubbles: true })); }); required.forEach(function (input) { setInvalid(input, false); if (!input.value.trim() || !input.checkValidity()) { valid = false; setInvalid(input, true); if (!firstBad) { firstBad = input; } } }); setInvalid(zip, false); if (zip.value.trim() && !zip.checkValidity()) { valid = false; setInvalid(zip, true); if (!firstBad) { firstBad = zip; } } const error = form.querySelector('#cb-real-step1-error'); error.classList.toggle('cb-show', !valid); if (!valid && firstBad) { firstBad .reportValidity(); firstBad .focus(); } return valid; } let submissionStarted = false; let successWatcher = null; let successPoll = null; function submissionSucceeded() { if (!document.body.contains(form)) { return true; } const formStyle = window.getComputedStyle(form); if (formStyle.display === 'none' || formStyle.visibility === 'hidden') { return true; } const wrapper = form.closest('.form-wrapper') || form.parentElement; if (!wrapper) { return false; } const explicitSuccess = wrapper.querySelector('.form-submission-text,' + '.form-submission-html,' + '.form-submission-message,' + '[data-form-success],' + '.form-success'); if (explicitSuccess && window.getComputedStyle(explicitSuccess).display !== 'none') { return true; } const wrapperText = (wrapper.innerText || wrapper.textContent || '') .replace(/\s+/g, ' ') .trim() .toLowerCase(); if (wrapperText.includes('thank you')) { return true; } return false; } function finishSuccessfulSubmission() { if (!submissionStarted) { return; } if (!submissionSucceeded()) { return; } submissionStarted = false; removeModalShell(); backdrop.style.setProperty('opacity', '0', 'important'); backdrop.style.setProperty('visibility', 'hidden', 'important'); backdrop.style.setProperty('pointer-events', 'none', 'important'); if (successPoll) { clearInterval(successPoll); successPoll = null; } if (successWatcher) { successWatcher .disconnect(); successWatcher = null; } console.log('Form submitted — overlay cleared ✓'); } function beginSuccessWatch() { submissionStarted = true; const watchTarget = form.closest('.form-wrapper') || form.parentElement || document.body; successWatcher = new MutationObserver(function () { finishSuccessfulSubmission(); }); successWatcher.observe(watchTarget, { childList: true, subtree: true, attributes: true, attributeFilter: [ 'class', 'style' ] }); successPoll = setInterval(finishSuccessfulSubmission, 150); setTimeout(function () { if (successPoll) { clearInterval(successPoll); successPoll = null; } if (successWatcher) { successWatcher .disconnect(); successWatcher = null; } }, 30000); } nextButton.addEventListener('click', function () { if (!validateStep1()) { return; } cbpTrackStep1(); showStep2(); }); close.addEventListener('click', showStep1); close.addEventListener('keydown', function (event) { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); showStep1(); } }); document.addEventListener('keydown', function (event) { if (event.key === 'Escape' && form.classList.contains('cb-step2-modal')) { showStep1(); } }); window.addEventListener('resize', function () { if (form.classList.contains('cb-step2-modal')) { applyModalSizing(); } }); form.addEventListener('submit', function () { beginSuccessWatch(); cbpBeginCompletionWatch(); }); [ street, city, state, zip ].forEach(function (input) { input.addEventListener('input', function () { setInvalid(input, false); }); }); showStep1(); form.dataset.cbScopedOverlayReady = 'yes'; console.log('Competitive Builder final form initialized ✓', form); } let cbBootFramePending = false; function tryInitialize() { try { initCompetitiveBuilderForm(); } catch (error) { console.error('CBP form initialization error:', error); } } function startBoot() { if (!document.body) { document.addEventListener('DOMContentLoaded', startBoot, { once: true }); return; } tryInitialize(); [100, 300, 700, 1400, 3000, 6000].forEach(function (delay) { window.setTimeout(tryInitialize, delay); }); const bootObserver = new MutationObserver(function () { if (cbBootFramePending) return; cbBootFramePending = true; requestAnimationFrame(function () { cbBootFramePending = false; tryInitialize(); }); }); bootObserver.observe(document.body, { childList: true, subtree: true }); } if (document.body) { startBoot(); } else { document.addEventListener('DOMContentLoaded', startBoot, { once: true }); } })();