style>div> style>
/* —————- FCPE TOKENS —————- */ #fcpe-estimate-gateway { –fcpe-gold: #D4AF37; –fcpe-gold-soft: rgba(212, 175, 55, 0.14); –fcpe-gold-hairline: rgba(212, 175, 55, 0.28); –fcpe-ink: #0E0E10; –fcpe-cream: #F5F1E8; –fcpe-stone: #D9D2C2; –fcpe-charcoal: #1B1C1E; –fcpe-mist: #E8E4D8; –fcpe-muted: #6F6B5E; –fcpe-error: #8C2A2A; –fcpe-success: #2A6F3F; } /* —————- FONTS (font-display: swap for LCP) —————- */ @font-face { font-family: “Coldiac”; src: url(“https://firstcoastpropertyexperts.com/wp-content/uploads/2026/03/Coldiac-1.woff2”) format(“woff2”); font-weight: 400; font-style: normal; font-display: swap; } /* —————- RESET (scoped) —————- */ #fcpe-estimate-gateway, #fcpe-estimate-gateway *, #fcpe-estimate-gateway *::before, #fcpe-estimate-gateway *::after { box-sizing: border-box; } /* —————- SHELL (FULL-WIDTH) —————- */ #fcpe-estimate-gateway { background: var(–fcpe-cream); color: var(–fcpe-ink); font-family: “Coldiac”, “Cormorant Garamond”, “EB Garamond”, Georgia, serif; font-size: 17px; line-height: 1.55; letter-spacing: 0.005em; padding: 0; margin: 0; width: 100%; overflow-x: hidden; } /* —————- SKIP LINK —————- */ #fcpe-estimate-gateway .fcpe-skip { position: absolute; left: -9999px; top: 0; background: var(–fcpe-ink); color: var(–fcpe-gold); padding: 12px 18px; font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; letter-spacing: 0.18em; text-transform: uppercase; font-size: 12px; z-index: 100; text-decoration: none; } #fcpe-estimate-gateway .fcpe-skip:focus { left: 16px; top: 16px; } /* —————- PROOF STRIP —————- */ #fcpe-estimate-gateway .fcpe-proof { background: var(–fcpe-ink); color: var(–fcpe-mist); text-align: center; padding: 11px 20px; font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 11.5px; letter-spacing: 0.22em; text-transform: uppercase; font-weight: 500; border-bottom: 1px solid var(–fcpe-gold-hairline); } #fcpe-estimate-gateway .fcpe-proof .dot { color: var(–fcpe-gold); margin: 0 10px; font-weight: 700; } /* —————- HERO —————- */ #fcpe-estimate-gateway .fcpe-hero { text-align: center; padding: 72px 24px 48px; background: linear-gradient(180deg, var(–fcpe-cream) 0%, var(–fcpe-mist) 100%); border-bottom: 1px solid var(–fcpe-gold-hairline); } #fcpe-estimate-gateway .fcpe-hero h1 { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: clamp(34px, 5.5vw, 58px); letter-spacing: 0.08em; text-transform: uppercase; color: var(–fcpe-ink); margin: 0 0 18px; font-weight: 600; line-height: 1.05; } #fcpe-estimate-gateway .fcpe-hero .sub { font-family: “Paris Signature”, “Great Vibes”, cursive; font-size: clamp(22px, 3vw, 32px); color: var(–fcpe-gold); font-weight: 400; letter-spacing: 0.01em; margin: 0 auto; max-width: 640px; line-height: 1.3; } #fcpe-estimate-gateway .fcpe-hero .rule { width: 64px; height: 1px; background: var(–fcpe-gold); margin: 28px auto 0; opacity: 0.7; } /* —————- PROGRESS —————- */ #fcpe-estimate-gateway .fcpe-progress-wrap { background: var(–fcpe-cream); padding: 28px 24px 0; max-width: 960px; margin: 0 auto; } #fcpe-estimate-gateway .fcpe-progress-track { width: 100%; height: 2px; background: var(–fcpe-stone); border-radius: 2px; overflow: hidden; position: relative; } #fcpe-estimate-gateway .fcpe-progress-fill { position: absolute; left: 0; top: 0; bottom: 0; width: 14.28%; background: var(–fcpe-gold); transition: width 550ms cubic-bezier(0.22, 1, 0.36, 1); } #fcpe-estimate-gateway .fcpe-progress-meta { display: flex; justify-content: space-between; align-items: center; margin-top: 14px; font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 10.5px; letter-spacing: 0.24em; text-transform: uppercase; color: var(–fcpe-muted); } #fcpe-estimate-gateway .fcpe-progress-meta strong { color: var(–fcpe-ink); font-weight: 600; } /* —————- FORM CONTAINER —————- */ #fcpe-estimate-gateway .fcpe-form-wrap { max-width: 960px; margin: 0 auto; padding: 48px 24px 96px; position: relative; } #fcpe-estimate-gateway .fcpe-step { display: none; opacity: 0; transition: opacity 400ms ease-out; } #fcpe-estimate-gateway .fcpe-step.is-active { display: block; opacity: 1; } #fcpe-estimate-gateway .fcpe-step fieldset { border: 0; padding: 0; margin: 0; } #fcpe-estimate-gateway .fcpe-step legend { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: clamp(22px, 3vw, 30px); letter-spacing: 0.06em; text-transform: uppercase; color: var(–fcpe-ink); margin: 0 0 10px; font-weight: 600; display: block; line-height: 1.15; } #fcpe-estimate-gateway .fcpe-step .fcpe-step-sub { color: var(–fcpe-muted); margin: 0 0 32px; font-size: 16px; line-height: 1.5; max-width: 680px; } /* —————- SERVICE CARDS —————- */ #fcpe-estimate-gateway .fcpe-service-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; } @media (min-width: 1024px) { #fcpe-estimate-gateway .fcpe-service-grid { grid-template-columns: repeat(4, 1fr); } } @media (max-width: 640px) { #fcpe-estimate-gateway .fcpe-service-grid { grid-template-columns: 1fr; } } #fcpe-estimate-gateway .fcpe-service-card { position: relative; background: #fff; border: 1px solid var(–fcpe-stone); border-radius: 6px; padding: 28px 22px; cursor: pointer; transition: border-color 280ms ease, transform 280ms ease, box-shadow 280ms ease; min-height: 160px; display: flex; flex-direction: column; gap: 10px; text-align: left; } #fcpe-estimate-gateway .fcpe-service-card input { position: absolute; opacity: 0; pointer-events: none; } #fcpe-estimate-gateway .fcpe-service-card:hover { border-color: var(–fcpe-gold-hairline); transform: translateY(-1px); } #fcpe-estimate-gateway .fcpe-service-card.is-selected { border-color: var(–fcpe-gold); box-shadow: 0 0 0 1px var(–fcpe-gold), 0 8px 28px rgba(14, 14, 16, 0.06); background: linear-gradient(180deg, #fff 0%, var(–fcpe-gold-soft) 100%); } #fcpe-estimate-gateway .fcpe-service-card .icon { width: 28px; height: 28px; color: var(–fcpe-gold); } #fcpe-estimate-gateway .fcpe-service-card .title { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 14px; letter-spacing: 0.16em; text-transform: uppercase; color: var(–fcpe-ink); font-weight: 600; margin: 4px 0 0; } #fcpe-estimate-gateway .fcpe-service-card .desc { color: var(–fcpe-muted); font-size: 15px; line-height: 1.45; margin: 0; } #fcpe-estimate-gateway .fcpe-service-card .check { position: absolute; top: 16px; right: 16px; width: 20px; height: 20px; border-radius: 50%; border: 1px solid var(–fcpe-stone); background: #fff; transition: all 220ms ease; } #fcpe-estimate-gateway .fcpe-service-card.is-selected .check { background: var(–fcpe-gold); border-color: var(–fcpe-gold); box-shadow: inset 0 0 0 4px #fff, 0 0 0 1px var(–fcpe-gold); } /* —————- LABEL + INPUTS —————- */ #fcpe-estimate-gateway .fcpe-field { margin-bottom: 22px; } #fcpe-estimate-gateway .fcpe-field label, #fcpe-estimate-gateway .fcpe-field .fcpe-label { display: block; font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 10.5px; letter-spacing: 0.24em; text-transform: uppercase; color: var(–fcpe-ink); margin-bottom: 8px; font-weight: 600; } #fcpe-estimate-gateway .fcpe-field .optional { color: var(–fcpe-muted); font-weight: 400; margin-left: 6px; letter-spacing: 0.18em; text-transform: none; font-size: 11px; } #fcpe-estimate-gateway .fcpe-field-hint { display: block; color: var(–fcpe-muted); font-size: 13px; margin-top: 6px; line-height: 1.4; } #fcpe-estimate-gateway input[type=”text”], #fcpe-estimate-gateway input[type=”email”], #fcpe-estimate-gateway input[type=”tel”], #fcpe-estimate-gateway input[type=”number”], #fcpe-estimate-gateway input[type=”date”], #fcpe-estimate-gateway select, #fcpe-estimate-gateway textarea { width: 100%; max-width: 640px; font-family: “Coldiac”, “Cormorant Garamond”, Georgia, serif; font-size: 17px; color: var(–fcpe-ink); background: #fff; border: 1px solid var(–fcpe-stone); border-radius: 4px; padding: 14px 16px; min-height: 48px; transition: border-color 200ms ease, box-shadow 200ms ease; -webkit-appearance: none; appearance: none; } #fcpe-estimate-gateway select { background-image: url(“data:image/svg+xml;utf8,”); background-repeat: no-repeat; background-position: right 18px center; padding-right: 44px; } #fcpe-estimate-gateway textarea { resize: vertical; min-height: 112px; line-height: 1.5; } #fcpe-estimate-gateway input:focus, #fcpe-estimate-gateway select:focus, #fcpe-estimate-gateway textarea:focus { outline: none; border-color: var(–fcpe-gold); box-shadow: 0 0 0 3px var(–fcpe-gold-soft); } #fcpe-estimate-gateway .is-invalid input, #fcpe-estimate-gateway .is-invalid select, #fcpe-estimate-gateway .is-invalid textarea { border-color: var(–fcpe-error); box-shadow: 0 0 0 3px rgba(140, 42, 42, 0.12); } #fcpe-estimate-gateway .fcpe-err { display: none; color: var(–fcpe-error); font-size: 13px; margin-top: 6px; font-family: “Coldiac”, Georgia, serif; } #fcpe-estimate-gateway .is-invalid .fcpe-err, #fcpe-estimate-gateway .fcpe-err.is-visible { display: block; } /* —————- GRID FIELDS —————- */ #fcpe-estimate-gateway .fcpe-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } #fcpe-estimate-gateway .fcpe-grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } @media (max-width: 768px) { #fcpe-estimate-gateway .fcpe-grid-2, #fcpe-estimate-gateway .fcpe-grid-3 { grid-template-columns: 1fr; gap: 0; } } /* —————- CHECKBOX PILLS —————- */ #fcpe-estimate-gateway .fcpe-pill-group { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 10px; } #fcpe-estimate-gateway .fcpe-pill { position: relative; display: inline-flex; align-items: center; padding: 12px 18px; min-height: 44px; border: 1px solid var(–fcpe-stone); border-radius: 999px; background: #fff; cursor: pointer; font-family: “Coldiac”, Georgia, serif; font-size: 15.5px; color: var(–fcpe-ink); transition: all 220ms ease; } #fcpe-estimate-gateway .fcpe-pill input { position: absolute; opacity: 0; pointer-events: none; } #fcpe-estimate-gateway .fcpe-pill:hover { border-color: var(–fcpe-gold-hairline); } #fcpe-estimate-gateway .fcpe-pill.is-selected { background: var(–fcpe-ink); color: var(–fcpe-cream); border-color: var(–fcpe-ink); } #fcpe-estimate-gateway .fcpe-pill.is-selected::before { content: “”; display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(–fcpe-gold); margin-right: 10px; } /* —————- SPECIFICS SECTION —————- */ #fcpe-estimate-gateway .fcpe-specifics-block { border-top: 1px solid var(–fcpe-gold-hairline); padding-top: 28px; margin-top: 28px; } #fcpe-estimate-gateway .fcpe-specifics-block:first-child { border-top: 0; padding-top: 0; margin-top: 0; } #fcpe-estimate-gateway .fcpe-specifics-block h3 { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 12px; letter-spacing: 0.22em; text-transform: uppercase; color: var(–fcpe-gold); margin: 0 0 18px; font-weight: 600; } #fcpe-estimate-gateway .fcpe-specifics-block .block-sub { color: var(–fcpe-muted); font-size: 14px; margin: -14px 0 18px; } /* —————- CUSTOM CHECKBOX ROW —————- */ #fcpe-estimate-gateway .fcpe-check { display: flex; align-items: flex-start; gap: 12px; padding: 16px; background: #fff; border: 1px solid var(–fcpe-stone); border-radius: 4px; cursor: pointer; transition: border-color 200ms ease; margin-bottom: 10px; position: relative; } #fcpe-estimate-gateway .fcpe-check:hover { border-color: var(–fcpe-gold-hairline); } #fcpe-estimate-gateway .fcpe-check input { position: absolute; opacity: 0; pointer-events: none; } #fcpe-estimate-gateway .fcpe-check .box { width: 20px; height: 20px; min-width: 20px; border: 1px solid var(–fcpe-stone); border-radius: 3px; background: #fff; display: inline-flex; align-items: center; justify-content: center; transition: all 200ms ease; margin-top: 2px; position: relative; } #fcpe-estimate-gateway .fcpe-check .box::after { content: “”; width: 10px; height: 6px; border-left: 2px solid #fff; border-bottom: 2px solid #fff; transform: rotate(-45deg) translate(1px, -1px); opacity: 0; transition: opacity 180ms ease; position: absolute; top: 5px; left: 4px; } #fcpe-estimate-gateway .fcpe-check.is-selected .box { background: var(–fcpe-gold); border-color: var(–fcpe-gold); } #fcpe-estimate-gateway .fcpe-check.is-selected .box::after { opacity: 1; } #fcpe-estimate-gateway .fcpe-check .label-text { font-size: 15px; line-height: 1.45; color: var(–fcpe-ink); flex: 1; } #fcpe-estimate-gateway .fcpe-check .label-text .hint { color: var(–fcpe-muted); font-size: 13px; display: block; margin-top: 2px; } #fcpe-estimate-gateway .fcpe-check .price { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 12px; letter-spacing: 0.14em; color: var(–fcpe-gold); font-weight: 600; white-space: nowrap; } /* —————- BUNDLE CARDS —————- */ #fcpe-estimate-gateway .fcpe-bundle-grid { display: grid; grid-template-columns: 1fr; gap: 16px; margin-bottom: 32px; } @media (min-width: 768px) { #fcpe-estimate-gateway .fcpe-bundle-grid { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 1024px) { #fcpe-estimate-gateway .fcpe-bundle-grid.has-three { grid-template-columns: repeat(3, 1fr); } } #fcpe-estimate-gateway .fcpe-bundle-card { position: relative; background: #fff; border: 1px solid var(–fcpe-stone); border-top: 3px solid var(–fcpe-gold); border-radius: 6px; padding: 28px 24px; cursor: pointer; transition: all 280ms ease; } #fcpe-estimate-gateway .fcpe-bundle-card input { position: absolute; opacity: 0; pointer-events: none; } #fcpe-estimate-gateway .fcpe-bundle-card:hover { border-color: var(–fcpe-gold-hairline); transform: translateY(-1px); box-shadow: 0 8px 28px rgba(14, 14, 16, 0.06); } #fcpe-estimate-gateway .fcpe-bundle-card.is-selected { border-color: var(–fcpe-gold); box-shadow: 0 0 0 1px var(–fcpe-gold), 0 12px 32px rgba(212, 175, 55, 0.14); background: linear-gradient(180deg, #fff 0%, var(–fcpe-gold-soft) 100%); } #fcpe-estimate-gateway .fcpe-bundle-card .badge { display: inline-block; font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 10px; letter-spacing: 0.22em; text-transform: uppercase; color: var(–fcpe-gold); background: var(–fcpe-gold-soft); padding: 4px 10px; border-radius: 2px; margin-bottom: 12px; font-weight: 600; } #fcpe-estimate-gateway .fcpe-bundle-card h4 { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 16px; letter-spacing: 0.08em; text-transform: uppercase; color: var(–fcpe-ink); margin: 0 0 10px; font-weight: 600; line-height: 1.2; } #fcpe-estimate-gateway .fcpe-bundle-card .desc { color: var(–fcpe-muted); font-size: 14.5px; line-height: 1.5; margin: 0 0 12px; } #fcpe-estimate-gateway .fcpe-bundle-card .save { font-family: “Paris Signature”, “Great Vibes”, cursive; color: var(–fcpe-gold); font-size: 20px; line-height: 1; margin: 0; } #fcpe-estimate-gateway .fcpe-bundle-card .tick { position: absolute; top: 16px; right: 16px; width: 22px; height: 22px; border-radius: 50%; border: 1px solid var(–fcpe-stone); background: #fff; transition: all 220ms ease; } #fcpe-estimate-gateway .fcpe-bundle-card.is-selected .tick { background: var(–fcpe-gold); border-color: var(–fcpe-gold); box-shadow: inset 0 0 0 5px #fff, 0 0 0 1px var(–fcpe-gold); } /* —————- PLAN SECTION HEADS —————- */ #fcpe-estimate-gateway .fcpe-plan-head { margin-top: 24px; } #fcpe-estimate-gateway .fcpe-section-rubric { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 11px; letter-spacing: 0.24em; text-transform: uppercase; color: var(–fcpe-gold); margin: 0 0 6px; font-weight: 600; } #fcpe-estimate-gateway .fcpe-section-title { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 18px; letter-spacing: 0.08em; text-transform: uppercase; color: var(–fcpe-ink); margin: 0 0 10px; font-weight: 600; } #fcpe-estimate-gateway .fcpe-section-sub { color: var(–fcpe-muted); font-size: 15px; margin: 0 0 20px; max-width: 640px; line-height: 1.5; } /* —————- NAV BUTTONS —————- */ #fcpe-estimate-gateway .fcpe-nav { display: flex; justify-content: space-between; align-items: center; margin-top: 40px; gap: 16px; flex-wrap: wrap; } #fcpe-estimate-gateway .fcpe-btn { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 12.5px; letter-spacing: 0.22em; text-transform: uppercase; font-weight: 600; padding: 16px 28px; min-height: 48px; border-radius: 2px; border: 1px solid transparent; cursor: pointer; transition: all 260ms cubic-bezier(0.22, 1, 0.36, 1); background: transparent; color: var(–fcpe-ink); text-decoration: none; display: inline-flex; align-items: center; justify-content: center; } #fcpe-estimate-gateway .fcpe-btn:focus-visible { outline: 2px solid var(–fcpe-gold); outline-offset: 3px; } #fcpe-estimate-gateway .fcpe-btn–ghost { border-color: transparent; color: var(–fcpe-muted); } #fcpe-estimate-gateway .fcpe-btn–ghost:hover { color: var(–fcpe-ink); } #fcpe-estimate-gateway .fcpe-btn–primary { background: var(–fcpe-ink); color: var(–fcpe-cream); border-color: var(–fcpe-ink); position: relative; overflow: hidden; } #fcpe-estimate-gateway .fcpe-btn–primary::after { content: “”; position: absolute; inset: 0; background: var(–fcpe-gold); transform: translateY(101%); transition: transform 360ms cubic-bezier(0.22, 1, 0.36, 1); z-index: 0; } #fcpe-estimate-gateway .fcpe-btn–primary > span { position: relative; z-index: 1; } #fcpe-estimate-gateway .fcpe-btn–primary:hover::after { transform: translateY(0); } #fcpe-estimate-gateway .fcpe-btn–primary:hover { color: var(–fcpe-ink); } #fcpe-estimate-gateway .fcpe-btn–primary:disabled { opacity: 0.45; cursor: not-allowed; } #fcpe-estimate-gateway .fcpe-btn–primary:disabled::after { transform: translateY(101%); } /* —————- PRIVACY MICRO —————- */ #fcpe-estimate-gateway .fcpe-micro { font-size: 13px; color: var(–fcpe-muted); text-align: left; margin-top: 18px; line-height: 1.5; max-width: 640px; } /* —————- REVIEW / SUMMARY —————- */ #fcpe-estimate-gateway .fcpe-review { background: #fff; border: 1px solid var(–fcpe-stone); border-radius: 6px; padding: 28px; margin-bottom: 24px; } #fcpe-estimate-gateway .fcpe-review-section { border-top: 1px solid var(–fcpe-mist); padding: 18px 0; } #fcpe-estimate-gateway .fcpe-review-section:first-child { border-top: 0; padding-top: 0; } #fcpe-estimate-gateway .fcpe-review-head { display: flex; justify-content: space-between; align-items: baseline; gap: 14px; margin-bottom: 8px; } #fcpe-estimate-gateway .fcpe-review-head h4 { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(–fcpe-ink); margin: 0; font-weight: 600; } #fcpe-estimate-gateway .fcpe-review-edit { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 10.5px; letter-spacing: 0.2em; text-transform: uppercase; color: var(–fcpe-gold); background: transparent; border: 0; cursor: pointer; padding: 4px 6px; font-weight: 600; text-decoration: underline; text-underline-offset: 3px; } #fcpe-estimate-gateway .fcpe-review-edit:hover { color: var(–fcpe-ink); } #fcpe-estimate-gateway .fcpe-review-body { color: var(–fcpe-ink); font-size: 15.5px; line-height: 1.55; } #fcpe-estimate-gateway .fcpe-review-body .muted { color: var(–fcpe-muted); font-size: 14px; } #fcpe-estimate-gateway .fcpe-review-body ul { margin: 6px 0 0; padding-left: 18px; } #fcpe-estimate-gateway .fcpe-review-body li { margin-bottom: 2px; } #fcpe-estimate-gateway .fcpe-review-body .spec-block { margin-top: 10px; } #fcpe-estimate-gateway .fcpe-review-body .spec-block strong { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(–fcpe-gold); font-weight: 600; } /* —————- SUCCESS SCREEN —————- */ #fcpe-estimate-gateway .fcpe-success { display: none; text-align: center; padding: 72px 24px; max-width: 860px; margin: 0 auto; } #fcpe-estimate-gateway .fcpe-success.is-active { display: block; } #fcpe-estimate-gateway .fcpe-success h2 { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: clamp(30px, 4.5vw, 46px); letter-spacing: 0.07em; text-transform: uppercase; color: var(–fcpe-ink); margin: 0 0 20px; font-weight: 600; } #fcpe-estimate-gateway .fcpe-success p { font-size: 17px; color: var(–fcpe-ink); margin: 0 auto 12px; max-width: 560px; line-height: 1.6; } #fcpe-estimate-gateway .fcpe-next-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin: 44px 0; text-align: left; } @media (max-width: 768px) { #fcpe-estimate-gateway .fcpe-next-steps { grid-template-columns: 1fr; } } #fcpe-estimate-gateway .fcpe-next-step { padding: 22px; background: #fff; border: 1px solid var(–fcpe-stone); border-radius: 4px; border-top: 2px solid var(–fcpe-gold); } #fcpe-estimate-gateway .fcpe-next-step .num { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 11px; letter-spacing: 0.22em; color: var(–fcpe-gold); font-weight: 600; margin-bottom: 8px; } #fcpe-estimate-gateway .fcpe-next-step .heading { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 13px; letter-spacing: 0.14em; text-transform: uppercase; color: var(–fcpe-ink); font-weight: 600; margin-bottom: 6px; } #fcpe-estimate-gateway .fcpe-next-step p { font-size: 14.5px; color: var(–fcpe-muted); margin: 0; line-height: 1.5; } #fcpe-estimate-gateway .fcpe-success-cta { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; margin-top: 24px; } /* —————- TAGLINE FOOTER —————- */ #fcpe-estimate-gateway .fcpe-tagline { text-align: center; padding: 40px 20px 56px; background: var(–fcpe-mist); border-top: 1px solid var(–fcpe-gold-hairline); } #fcpe-estimate-gateway .fcpe-tagline .mark { font-family: “Paris Signature”, “Great Vibes”, cursive; font-size: clamp(24px, 3.5vw, 36px); color: var(–fcpe-gold); margin: 0; line-height: 1.2; } #fcpe-estimate-gateway .fcpe-tagline .bbb { font-family: “Nord”, “Helvetica Neue”, Arial, sans-serif; font-size: 10.5px; letter-spacing: 0.26em; text-transform: uppercase; color: var(–fcpe-muted); margin-top: 14px; } /* —————- SR-ONLY —————- */ #fcpe-estimate-gateway .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } /* —————- HONEYPOT —————- */ #fcpe-estimate-gateway .fcpe-hp { position: absolute !important; left: -9999px !important; top: -9999px !important; width: 1px; height: 1px; opacity: 0; pointer-events: none; } /* —————- SPINNER —————- */ #fcpe-estimate-gateway .fcpe-spinner { display: inline-block; width: 14px; height: 14px; border: 2px solid rgba(245, 241, 232, 0.3); border-top-color: var(–fcpe-cream); border-radius: 50%; animation: fcpe-spin 720ms linear infinite; vertical-align: -2px; margin-right: 8px; } @keyframes fcpe-spin { to { transform: rotate(360deg); } } /* —————- REDUCED MOTION —————- */ @media (prefers-reduced-motion: reduce) { #fcpe-estimate-gateway *, #fcpe-estimate-gateway *::before, #fcpe-estimate-gateway *::after { transition: none !important; animation: none !important; } } /* —————- MOBILE TUNING —————- */ @media (max-width: 768px) { #fcpe-estimate-gateway .fcpe-hero { padding: 56px 20px 36px; } #fcpe-estimate-gateway .fcpe-form-wrap { padding: 32px 18px 72px; } #fcpe-estimate-gateway .fcpe-nav .fcpe-btn { padding: 14px 22px; font-size: 12px; } }
Skip to proposal form
Trusted by 300+ Northeast Florida homes · BBB A Rating · More than a century of combined expertise

REQUEST YOUR PROPOSAL.

A quiet, considered conversation about your property.

Step 1 of 7 What you need
What do you need?

Choose one or more. We’ll tailor the proposal to fit.

Your property.

Rough numbers are fine — we confirm on the walk-through.

We serve St. Johns, Duval, and Nassau counties — all of Northeast Florida. An address helps us route the right crew.
Property type
Pick the option that fits best.
Home size
Approximate square footage helps us quote accurately.
Select… 1 2 3 4 5 6+
Select… 1 2 3 4 5+
Stories
Service specifics.

A few details so our scope matches your property exactly.

Bundle & save.

Pair services and you lock in a better rate — no commitment required to see the numbers.

Recommended bundles

Pick any that fit — or skip. Your proposal shows both a la carte and bundled pricing.

Membership plans

A plan that fits your rhythm.

Plan members get priority scheduling, same-team guarantee, and exclusive rates. Pick any that catches your eye.

Optional add-ons

Bolt-on services the crew can include on the same visit.

Timing.

When would you like this handled? We’ll work backwards from your target.

When do you need this?
A rough target helps us route the right crew.
Preferred day
Preferred time window
One-time or recurring?
Recurring clients get priority booking and our best pricing — we’ll confirm the cadence during your walk-through.
How we’ll reach you.

An owner reads every request personally and replies within the hour during business hours.

First name, please.
Last name, please.
A valid email helps us send your proposal.
A 10-digit phone number, please.
Best way to reach you
You are…

We never share your info. Expect a reply within the hour during business hours (Mon–Sat 7 AM – 6 PM ET). Call us anytime at (904) 466-1622.

Review & submit.

Confirm your details. Edit anything before sending.

By submitting, you agree to receive a proposal from First Coast Property Experts. No contract until you approve one. View our privacy policy.

Thank You.

Your request is in our hands. We’ll respond within the hour with a walk-through time and initial brackets.

Watch for an email from us with your portal access link.

01
We Review

An owner reads your request personally and pulls the relevant brackets.

02
Concierge Call or Site Visit

A brief conversation — or a walk-through when the property calls for it.

03
Written Proposal in Your Portal

Clean numbers, clear scope, your approval in one click.

The Gold Standard, Every Time.

BBB A Rating · St. Johns · Duval · Nassau

Request a proposal

JavaScript is disabled in your browser. To request a proposal, please reach us directly — we’ll respond within the hour during business hours.

Email: info@firstcoastpropertyexperts.com

Call or text: (904) 466-1622

Serving St. Johns, Duval, and Nassau counties. BBB A Rating. More than a century of combined expertise.

(function () { “use strict”; var root = document.getElementById(“fcpe-estimate-gateway”); if (!root) return; var form = root.querySelector(“#fcpe-form”); var steps = root.querySelectorAll(“.fcpe-step”); var TOTAL_STEPS = 7; var current = 1; var STORAGE_KEY = “fcpe_estimate_v4_state”; var stepLabels = { 1: “What you need”, 2: “Your property”, 3: “Service specifics”, 4: “Bundle & save”, 5: “Timing”, 6: “Contact”, 7: “Review & submit” }; // ———- STATE ———- var state = { services: [], address: “”, property_type: “”, home_size: “”, bedrooms: “”, bathrooms: “”, year_built: “”, stories: “”, roof_material: “”, driveway_material: “”, window_count: “”, last_exterior: “”, needs_gutters: false, has_solar: false, interior_frequency: “”, pets: “”, interior_focus: “”, interior_concerns: [], seal_surface: “”, seal_sqft: “”, last_sealed: “”, joint_sand: “”, commercial_type: “”, commercial_sqft: “”, visits_per_week: “”, commercial_current: “”, bundles: [], plans: [], addons: [], timing: “”, day_pref: “”, time_pref: “”, cadence: “”, first_name: “”, last_name: “”, email: “”, phone: “”, contact_pref: “”, requestor_role: “”, notes: “”, client_portal: true, company_url: “” }; // Hydrate from sessionStorage if available var hydratedStep = 0; try { var raw = sessionStorage.getItem(STORAGE_KEY); if (raw) { var parsed = JSON.parse(raw); if (parsed && typeof parsed === “object”) { Object.keys(parsed).forEach(function (k) { if (k in state) state[k] = parsed[k]; }); if (typeof parsed.__step === “number” && parsed.__step >= 1 && parsed.__step <= TOTAL_STEPS) { hydratedStep = parsed.__step; } } } } catch (e) { /* ignore */ } function persist() { try { var snapshot = {}; Object.keys(state).forEach(function (k) { snapshot[k] = state[k]; }); snapshot.__step = current; sessionStorage.setItem(STORAGE_KEY, JSON.stringify(snapshot)); } catch (e) { /* quota, private mode */ } } function clearChildren(node) { while (node && node.firstChild) node.removeChild(node.firstChild); } // ———- ELEMENTS ———- var progressFill = root.querySelector("#fcpe-progress-fill"); var stepNumEl = root.querySelector("#fcpe-step-num"); var stepLabelEl = root.querySelector("#fcpe-step-label"); var progressBar = root.querySelector(".fcpe-progress-track"); // ———- STEP NAV ———- function goToStep(n) { if (n TOTAL_STEPS) return; if (n === 3) updateSpecificsVisibility(); if (n === 4) buildBundles(); if (n === 7) buildReview(); steps.forEach(function (s) { s.classList.remove(“is-active”); }); var next = root.querySelector(‘.fcpe-step[data-step=”‘ + n + ‘”]’); if (!next) return; next.style.opacity = “0”; next.classList.add(“is-active”); requestAnimationFrame(function () { next.style.opacity = “1”; }); current = n; var pct = (n / TOTAL_STEPS) * 100; progressFill.style.width = pct + “%”; progressBar.setAttribute(“aria-valuenow”, String(n)); stepNumEl.textContent = String(n); stepLabelEl.textContent = stepLabels[n] || “”; var legend = next.querySelector(“legend”); if (legend) { legend.setAttribute(“tabindex”, “-1”); try { legend.focus({ preventScroll: true }); } catch (e) { legend.focus(); } } var wrap = root.querySelector(“.fcpe-progress-wrap”); if (wrap && window.innerWidth 0; continueBtnS1.disabled = !ok; var errEl = root.querySelector(“#err-services”); if (errEl && ok) errEl.style.display = “none”; persist(); } // ———- PILL GROUPS (single + multi) ———- function bindPillGroup(group) { var single = group.getAttribute(“data-single”); var multi = group.getAttribute(“data-multi”); var pills = group.querySelectorAll(“.fcpe-pill”); // hydrate pills.forEach(function (pill) { var inp = pill.querySelector(“input”); if (!inp) return; if (single && state[single] === inp.value) { inp.checked = true; pill.classList.add(“is-selected”); } if (multi && Array.isArray(state[multi]) && state[multi].indexOf(inp.value) !== -1) { inp.checked = true; pill.classList.add(“is-selected”); } }); pills.forEach(function (pill) { var inp = pill.querySelector(“input”); if (!inp) return; pill.addEventListener(“click”, function (e) { if (e.target !== inp) { e.preventDefault(); if (single) { inp.checked = true; } else { inp.checked = !inp.checked; } } if (single) { group.querySelectorAll(“.fcpe-pill”).forEach(function (p) { p.classList.remove(“is-selected”); }); pill.classList.add(“is-selected”); state[single] = inp.value; } else if (multi) { pill.classList.toggle(“is-selected”, inp.checked); var cur = Array.isArray(state[multi]) ? state[multi].slice() : []; var idx = cur.indexOf(inp.value); if (inp.checked && idx === -1) cur.push(inp.value); if (!inp.checked && idx !== -1) cur.splice(idx, 1); state[multi] = cur; } persist(); }); }); } root.querySelectorAll(“.fcpe-pill-group[data-single], .fcpe-pill-group[data-multi]”).forEach(bindPillGroup); // ———- CHECK ROWS (gutters, solar, portal, addons) ———- function bindCheck(row, key, isMulti) { var inp = row.querySelector(“input”); if (!inp) return; if (isMulti) { if (Array.isArray(state[key]) && state[key].indexOf(inp.value) !== -1) { inp.checked = true; row.classList.add(“is-selected”); } } else { if (state[key]) { inp.checked = true; row.classList.add(“is-selected”); } } row.addEventListener(“click”, function (e) { if (e.target !== inp) { e.preventDefault(); inp.checked = !inp.checked; } row.classList.toggle(“is-selected”, inp.checked); if (isMulti) { var cur = Array.isArray(state[key]) ? state[key].slice() : []; var idx = cur.indexOf(inp.value); if (inp.checked && idx === -1) cur.push(inp.value); if (!inp.checked && idx !== -1) cur.splice(idx, 1); state[key] = cur; } else { state[key] = !!inp.checked; } persist(); }); } var gutterRow = root.querySelector(‘[data-toggle=”gutters”]’); if (gutterRow) bindCheck(gutterRow, “needs_gutters”, false); var solarRow = root.querySelector(‘[data-toggle=”solar”]’); if (solarRow) bindCheck(solarRow, “has_solar”, false); root.querySelectorAll(“[data-addon]”).forEach(function (row) { bindCheck(row, “addons”, true); }); var portalCheck = root.querySelector(“#fcpe-portal-check”); if (portalCheck) { var portalInput = portalCheck.querySelector(“input”); if (typeof state.client_portal === “undefined”) state.client_portal = true; portalInput.checked = !!state.client_portal; portalCheck.classList.toggle(“is-selected”, portalInput.checked); portalCheck.addEventListener(“click”, function (e) { if (e.target !== portalInput) { e.preventDefault(); portalInput.checked = !portalInput.checked; } portalCheck.classList.toggle(“is-selected”, portalInput.checked); state.client_portal = !!portalInput.checked; persist(); }); } // ———- TEXT / SELECT INPUTS (generic bind) ———- var simpleBindings = [ “fcpe-address:address”, “fcpe-bedrooms:bedrooms”, “fcpe-bathrooms:bathrooms”, “fcpe-year-built:year_built”, “fcpe-windows:window_count”, “fcpe-seal-sqft:seal_sqft”, “fcpe-commercial-sqft:commercial_sqft”, “fcpe-visits:visits_per_week”, “fcpe-first:first_name”, “fcpe-last:last_name”, “fcpe-email:email”, “fcpe-phone:phone”, “fcpe-notes:notes” ]; simpleBindings.forEach(function (map) { var parts = map.split(“:”); var el = document.getElementById(parts[0]); var key = parts[1]; if (!el) return; if (state[key]) el.value = state[key]; el.addEventListener(“input”, function () { state[key] = el.value; persist(); }); el.addEventListener(“change”, function () { state[key] = el.value; persist(); }); }); // ———- PHONE AUTO-FORMAT ———- var phoneEl = document.getElementById(“fcpe-phone”); if (phoneEl) { phoneEl.addEventListener(“input”, function () { var raw = phoneEl.value.replace(/D/g, “”).slice(0, 10); var out = raw; if (raw.length > 6) out = “(” + raw.slice(0, 3) + “) ” + raw.slice(3, 6) + “-” + raw.slice(6); else if (raw.length > 3) out = “(” + raw.slice(0, 3) + “) ” + raw.slice(3); else if (raw.length > 0) out = “(” + raw; phoneEl.value = out; state.phone = out; persist(); }); } // ———- SPECIFICS VISIBILITY (step 3) ———- function updateSpecificsVisibility() { var blocks = root.querySelectorAll(“[data-svc-block]”); var anyShown = false; blocks.forEach(function (block) { var svc = block.getAttribute(“data-svc-block”); var show = state.services.indexOf(svc) !== -1; block.style.display = show ? “block” : “none”; if (show) anyShown = true; }); var errEl = root.querySelector(“#err-specifics”); if (errEl) errEl.style.display = anyShown ? “none” : “block”; } // ———- BUNDLE + PLAN CATALOGS ———- function bundleCatalog() { var svc = state.services; var hasInt = svc.indexOf(“interior”) !== -1; var hasExt = svc.indexOf(“exterior”) !== -1; var hasSeal = svc.indexOf(“sealing”) !== -1; var bundles = []; if (hasInt && hasExt) { bundles.push({ id: “full_property”, badge: “Save 8%”, title: “Full Property Care Bundle”, desc: “Interior housekeeping plus exterior soft-wash on one unified schedule. Our highest-value pairing.”, save: “Save 8% on combined visits.” }); } if (hasExt && hasSeal) { bundles.push({ id: “outdoor_complete”, badge: “Save 6%”, title: “Outdoor Complete”, desc: “Exterior soft-wash paired with sanding and sealing — one crew, one visit window, one invoice.”, save: “Save 6% when booked together.” }); } if (hasInt && !hasExt && !hasSeal) { bundles.push({ id: “window_interior_add”, badge: “Save 12%”, title: “Add Interior Window Cleaning”, desc: “Pair with any recurring housekeeping visit. Streak-free, pane by pane.”, save: “Save 12% on window cleaning.” }); } if (hasExt && !hasInt && !hasSeal) { bundles.push({ id: “gutter_whitening_bundle”, badge: “Save 15%”, title: “Add Gutter Whitening”, desc: “Bolt-on to any soft-wash visit. Gutter faces restored to bright white.”, save: “15% off when bundled with soft-wash.” }); } if (hasSeal && !hasInt && !hasExt) { bundles.push({ id: “walkway_patio_seal”, badge: “Estate Coverage”, title: “Add Walkway + Patio Sealing”, desc: “Extend your sealing scope to walkways and patio surfaces for a complete hardscape package.”, save: “Estate-level coverage — one trip, full yard.” }); } if (bundles.length === 0) { bundles.push({ id: “custom_scope”, badge: “Custom”, title: “Custom Scope Proposal”, desc: “We’ll build a tailored scope around your property — no forced bundles, no fluff.”, save: “Priced to your exact needs.” }); } return bundles.slice(0, 3); } function planCatalog() { var svc = state.services; var hasInt = svc.indexOf(“interior”) !== -1; var hasExt = svc.indexOf(“exterior”) !== -1; var hasSeal = svc.indexOf(“sealing”) !== -1; var plans = []; if (hasInt) { plans.push({ id: “crystal_clear”, badge: “Interior”, title: “Crystal Clear”, desc: “Biweekly interior housekeeping, same team every visit. Priority scheduling and 5% off any exterior service.”, save: “Starts at $340/mo for a 2,000 sqft home.” }); } if (hasInt && hasExt) { plans.push({ id: “gold_standard”, badge: “Flagship”, title: “Gold Standard Plan”, desc: “Monthly interior visits plus quarterly exterior care. Our flagship membership — includes a free Gold Standard Deep Clean.”, save: “Save 8% on combined visits.” }); } if (hasExt) { plans.push({ id: “solar_shine”, badge: “Exterior”, title: “Solar Shine”, desc: “Quarterly exterior soft-wash plus solar panel cleaning. Keeps your panels producing and your paint lasting.”, save: “Year-round protection on a custom schedule.” }); } if (hasSeal) { plans.push({ id: “hardscape”, badge: “Sealing”, title: “Hardscape Plan”, desc: “Annual sanding and sealing with joint angular sand. Travertine, paver, and stone — priced to protect.”, save: “Custom-priced to your surface type and size.” }); } if (hasInt) { plans.push({ id: “estate_interior”, badge: “Premium”, title: “Estate Interior”, desc: “Weekly interior housekeeping, dedicated concierge, same-team guarantee. Built for estates and entertainers.”, save: “Priority booking, 48-hour response.” }); } if (hasExt) { plans.push({ id: “estate_exterior”, badge: “Premium”, title: “Estate Exterior”, desc: “Monthly exterior touch-ups with seasonal deep resets. The most thorough exterior care we offer.”, save: “Includes gutter whitening and screen clean.” }); } if (plans.length === 0) { plans.push({ id: “custom_plan”, badge: “Custom”, title: “Custom Plan Proposal”, desc: “We’ll recommend the plan structure that fits your property on the walk-through.”, save: “No commitment until you see the numbers.” }); } return plans.slice(0, 4); } function buildBundles() { var bundleHost = root.querySelector(“#fcpe-bundle-host”); clearChildren(bundleHost); var bundles = bundleCatalog(); bundleHost.classList.toggle(“has-three”, bundles.length >= 3); bundles.forEach(function (cfg) { bundleHost.appendChild(renderSelectCard(cfg, “bundles”)); }); var planHost = root.querySelector(“#fcpe-plan-host”); clearChildren(planHost); var plans = planCatalog(); planHost.classList.toggle(“has-three”, plans.length >= 3); plans.forEach(function (cfg) { planHost.appendChild(renderSelectCard(cfg, “plans”)); }); } function renderSelectCard(cfg, stateKey) { var label = document.createElement(“label”); label.className = “fcpe-bundle-card”; label.setAttribute(“data-bundle-id”, cfg.id); var inp = document.createElement(“input”); inp.type = “checkbox”; inp.name = stateKey; inp.value = cfg.id; if (Array.isArray(state[stateKey]) && state[stateKey].indexOf(cfg.id) !== -1) { inp.checked = true; label.classList.add(“is-selected”); } label.appendChild(inp); var tick = document.createElement(“span”); tick.className = “tick”; tick.setAttribute(“aria-hidden”, “true”); label.appendChild(tick); var badge = document.createElement(“span”); badge.className = “badge”; badge.textContent = cfg.badge; label.appendChild(badge); var h4 = document.createElement(“h4”); h4.textContent = cfg.title; label.appendChild(h4); var desc = document.createElement(“p”); desc.className = “desc”; desc.textContent = cfg.desc; label.appendChild(desc); var save = document.createElement(“p”); save.className = “save”; save.textContent = cfg.save; label.appendChild(save); label.addEventListener(“click”, function (e) { if (e.target !== inp) { e.preventDefault(); inp.checked = !inp.checked; } label.classList.toggle(“is-selected”, inp.checked); var cur = Array.isArray(state[stateKey]) ? state[stateKey].slice() : []; var idx = cur.indexOf(cfg.id); if (inp.checked && idx === -1) cur.push(cfg.id); if (!inp.checked && idx !== -1) cur.splice(idx, 1); state[stateKey] = cur; persist(); }); label.tabIndex = 0; label.setAttribute(“role”, “checkbox”); label.setAttribute(“aria-checked”, inp.checked ? “true” : “false”); label.addEventListener(“keydown”, function (e) { if (e.key === ” ” || e.key === “Enter”) { e.preventDefault(); inp.checked = !inp.checked; label.classList.toggle(“is-selected”, inp.checked); label.setAttribute(“aria-checked”, inp.checked ? “true” : “false”); var cur = Array.isArray(state[stateKey]) ? state[stateKey].slice() : []; var idx = cur.indexOf(cfg.id); if (inp.checked && idx === -1) cur.push(cfg.id); if (!inp.checked && idx !== -1) cur.splice(idx, 1); state[stateKey] = cur; persist(); } }); return label; } // ———- REVIEW LABELS ———- var LABELS = { services: { exterior: “Exterior care”, interior: “Interior housekeeping”, sealing: “Sanding & sealing”, commercial: “Commercial” }, property_type: { single_family: “Single-family”, townhome: “Townhome”, condo: “Condo”, estate: “Estate”, commercial: “Commercial” }, home_size: { under_1500: “Under 1,500 sqft”, “1500_2500”: “1,500–2,500 sqft”, “2500_4000”: “2,500–4,000 sqft”, “4000_6000”: “4,000–6,000 sqft”, “6000_plus”: “6,000+ sqft” }, stories: { “1”: “1 story”, “2”: “2 stories”, “3_plus”: “3+ stories” }, roof_material: { shingle: “Asphalt shingle”, tile: “Tile”, metal: “Metal”, other: “Other” }, driveway_material: { concrete: “Concrete”, paver: “Paver”, travertine: “Travertine”, stamped: “Stamped”, other: “Other” }, window_count: { under_10: “Under 10”, “10_20”: “10–20”, “20_35”: “20–35”, “35_plus”: “35+” }, last_exterior: { never: “Never”, over_1yr: “Over 1 year”, under_1yr: “Under 1 year” }, interior_frequency: { weekly: “Weekly”, biweekly: “Biweekly”, monthly: “Monthly”, one_time: “One-time”, never: “No prior service” }, pets: { none: “None”, “1”: “1 pet”, “2”: “2 pets”, “3_plus”: “3+ pets” }, interior_focus: { deep_clean: “Deep clean”, maintenance: “Maintenance”, move_in_out: “Move-in/out”, rental_turn: “Vacation rental turn” }, interior_concerns: { baseboards: “Baseboards”, inside_oven: “Inside oven”, inside_fridge: “Inside fridge”, windows_interior: “Interior windows”, blinds: “Blinds”, cabinets: “Cabinets” }, seal_surface: { travertine: “Travertine”, paver: “Paver”, concrete: “Concrete”, natural_stone: “Natural stone”, other: “Other” }, last_sealed: { never: “Never”, over_3yr: “Over 3 years”, “1_3yr”: “1–3 years”, under_1yr: “Under 1 year” }, joint_sand: { intact: “Intact”, loose: “Loose”, missing: “Missing”, unsure: “Unsure” }, commercial_type: { office: “Office”, hoa: “HOA”, restaurant: “Restaurant”, storefront: “Storefront”, medical: “Medical”, industrial: “Industrial” }, visits_per_week: { “1”: “1x / week”, “2”: “2x / week”, “3”: “3x / week”, “5”: “5x / week”, “7”: “Daily”, as_needed: “As needed” }, commercial_current: { yes: “Yes — considering a change”, no: “No — first time hiring” }, timing: { asap: “ASAP”, “2_weeks”: “Within 2 weeks”, this_month: “This month”, “1_3_months”: “1–3 months”, planning: “Just planning” }, day_pref: { weekday: “Weekday”, weekend: “Weekend”, either: “Either” }, time_pref: { am: “AM”, pm: “PM”, either: “Either” }, cadence: { one_time: “One-time”, recurring: “Recurring (plan)”, undecided: “Undecided” }, contact_pref: { call: “Call”, text: “Text”, email: “Email” }, requestor_role: { owner: “Property owner”, property_manager: “Property manager”, realtor: “Realtor”, other: “Other” }, addons: { gutter_cleaning: “Gutter cleaning (from $125)”, gutter_whitening: “Gutter whitening (from $100/side)”, flatwork: “Driveway & sidewalk wash (from $175)”, pool_deck: “Pool deck cleaning (from $225)”, outdoor_kitchen: “Outdoor kitchen & lanai (from $125)”, carpet_cleaning: “Carpet cleaning HWE (from $165)”, screen_cleaning: “Screen cleaning (from $125)”, solar_panel: “Solar panel cleaning (from $185)” } }; function lookupLabel(key, val) { if (!val) return “—”; if (LABELS[key] && LABELS[key][val]) return LABELS[key][val]; return val; } function lookupList(key, vals) { if (!Array.isArray(vals) || !vals.length) return “—”; return vals.map(function (v) { return lookupLabel(key, v); }).join(“, “); } function buildReview() { var host = root.querySelector(“#fcpe-review-host”); clearChildren(host); var sections = []; sections.push({ step: 1, title: “What you need”, body: lookupList(“services”, state.services) }); var propBits = []; if (state.address) propBits.push(state.address); if (state.property_type) propBits.push(lookupLabel(“property_type”, state.property_type)); if (state.home_size) propBits.push(lookupLabel(“home_size”, state.home_size)); if (state.bedrooms) propBits.push(state.bedrooms + ” bed”); if (state.bathrooms) propBits.push(state.bathrooms + ” bath”); if (state.stories) propBits.push(lookupLabel(“stories”, state.stories)); if (state.year_built) propBits.push(“Built ” + state.year_built); sections.push({ step: 2, title: “Your property”, body: propBits.length ? propBits.join(” · “) : “—” }); var specificsItems = []; if (state.services.indexOf(“exterior”) !== -1) { var ext = []; if (state.roof_material) ext.push(“Roof: ” + lookupLabel(“roof_material”, state.roof_material)); if (state.driveway_material) ext.push(“Driveway: ” + lookupLabel(“driveway_material”, state.driveway_material)); if (state.window_count) ext.push(“Windows: ” + lookupLabel(“window_count”, state.window_count)); if (state.last_exterior) ext.push(“Last clean: ” + lookupLabel(“last_exterior”, state.last_exterior)); if (state.needs_gutters) ext.push(“Gutter cleaning: yes”); if (state.has_solar) ext.push(“Solar panels: yes”); if (ext.length) specificsItems.push({ h: “Exterior”, lines: ext }); } if (state.services.indexOf(“interior”) !== -1) { var intArr = []; if (state.interior_frequency) intArr.push(“Frequency: ” + lookupLabel(“interior_frequency”, state.interior_frequency)); if (state.pets) intArr.push(“Pets: ” + lookupLabel(“pets”, state.pets)); if (state.interior_focus) intArr.push(“Focus: ” + lookupLabel(“interior_focus”, state.interior_focus)); if (state.interior_concerns && state.interior_concerns.length) intArr.push(“Concerns: ” + lookupList(“interior_concerns”, state.interior_concerns)); if (intArr.length) specificsItems.push({ h: “Interior”, lines: intArr }); } if (state.services.indexOf(“sealing”) !== -1) { var sArr = []; if (state.seal_surface) sArr.push(“Surface: ” + lookupLabel(“seal_surface”, state.seal_surface)); if (state.seal_sqft) sArr.push(“Approx sqft: ” + state.seal_sqft); if (state.last_sealed) sArr.push(“Last sealed: ” + lookupLabel(“last_sealed”, state.last_sealed)); if (state.joint_sand) sArr.push(“Joint sand: ” + lookupLabel(“joint_sand”, state.joint_sand)); if (sArr.length) specificsItems.push({ h: “Sanding & sealing”, lines: sArr }); } if (state.services.indexOf(“commercial”) !== -1) { var cArr = []; if (state.commercial_type) cArr.push(“Type: ” + lookupLabel(“commercial_type”, state.commercial_type)); if (state.commercial_sqft) cArr.push(“Sqft: ” + state.commercial_sqft); if (state.visits_per_week) cArr.push(“Visits: ” + lookupLabel(“visits_per_week”, state.visits_per_week)); if (state.commercial_current) cArr.push(“Current provider: ” + lookupLabel(“commercial_current”, state.commercial_current)); if (cArr.length) specificsItems.push({ h: “Commercial”, lines: cArr }); } sections.push({ step: 3, title: “Service specifics”, specificsItems: specificsItems }); var b4 = []; if (state.bundles && state.bundles.length) b4.push(“Bundles: ” + state.bundles.join(“, “)); if (state.plans && state.plans.length) b4.push(“Plans: ” + lookupList(“plans”, state.plans)); if (state.addons && state.addons.length) b4.push(“Add-ons: ” + lookupList(“addons”, state.addons)); sections.push({ step: 4, title: “Bundles, plans & add-ons”, body: b4.length ? b4.join(” · “) : “None selected — we’ll propose options.” }); var tBits = []; if (state.timing) tBits.push(lookupLabel(“timing”, state.timing)); if (state.day_pref) tBits.push(lookupLabel(“day_pref”, state.day_pref)); if (state.time_pref) tBits.push(lookupLabel(“time_pref”, state.time_pref)); if (state.cadence) tBits.push(lookupLabel(“cadence”, state.cadence)); sections.push({ step: 5, title: “Timing”, body: tBits.length ? tBits.join(” · “) : “—” }); var contactNode = document.createElement(“span”); contactNode.className = “fcpe-review-contact-line”; var hasContactBits = false; function appendContactBit(text, options) { if (!text) return; if (hasContactBits) { var sep = document.createElement(“span”); sep.className = “fcpe-review-sep”; sep.textContent = ” u00b7 “; contactNode.appendChild(sep); } var span = document.createElement(“span”); if (options && options.noSwap) { span.className = “nsnc”; span.setAttribute(“data-callrail-preserve”, “true”); span.setAttribute(“translate”, “no”); } span.textContent = text; contactNode.appendChild(span); hasContactBits = true; } var fullName = [state.first_name, state.last_name].filter(Boolean).join(” “); appendContactBit(fullName); appendContactBit(state.email); if (state.phone) appendContactBit(state.phone, { noSwap: true }); if (state.contact_pref) appendContactBit(“Prefers: ” + lookupLabel(“contact_pref”, state.contact_pref)); if (state.requestor_role) appendContactBit(“Role: ” + lookupLabel(“requestor_role”, state.requestor_role)); if (state.client_portal) appendContactBit(“Portal: yes”); if (state.notes) appendContactBit(“Notes: ” + state.notes); sections.push({ step: 6, title: “Contact”, customNode: hasContactBits ? contactNode : null }); sections.forEach(function (sec) { var wrap = document.createElement(“div”); wrap.className = “fcpe-review-section”; var head = document.createElement(“div”); head.className = “fcpe-review-head”; var h = document.createElement(“h4”); h.textContent = sec.title; head.appendChild(h); var editBtn = document.createElement(“button”); editBtn.type = “button”; editBtn.className = “fcpe-review-edit”; editBtn.textContent = “Edit”; editBtn.setAttribute(“aria-label”, “Edit ” + sec.title); editBtn.addEventListener(“click”, function () { goToStep(sec.step); }); head.appendChild(editBtn); wrap.appendChild(head); var body = document.createElement(“div”); body.className = “fcpe-review-body”; if (sec.customNode) { body.appendChild(sec.customNode); wrap.appendChild(body); host.appendChild(wrap); return; } if (sec.specificsItems && sec.specificsItems.length) { sec.specificsItems.forEach(function (item) { var sh = document.createElement(“div”); sh.className = “spec-block”; var strong = document.createElement(“strong”); strong.textContent = item.h; sh.appendChild(strong); var ul = document.createElement(“ul”); item.lines.forEach(function (line) { var li = document.createElement(“li”); li.textContent = line; ul.appendChild(li); }); sh.appendChild(ul); body.appendChild(sh); }); } else if (sec.specificsItems) { var mtd = document.createElement(“span”); mtd.className = “muted”; mtd.textContent = “—”; body.appendChild(mtd); } else { body.textContent = sec.body || “—”; } wrap.appendChild(body); host.appendChild(wrap); }); } // ———- VALIDATION ———- var EMAIL_RE = /^[^s@]+@[^s@]+.[^s@]+$/; var PHONE_RE = /^(d{3})sd{3}-d{4}$/; function showErr(el, show) { if (!el) return; var field = el.closest(“.fcpe-field”) || el.closest(“fieldset”); if (field) field.classList.toggle(“is-invalid”, !!show); var err = field ? field.querySelector(“.fcpe-err”) : null; if (err) err.classList.toggle(“is-visible”, !!show); } function showErrForField(fieldEl, show) { if (!fieldEl) return; fieldEl.classList.toggle(“is-invalid”, !!show); var err = fieldEl.querySelector(“.fcpe-err”); if (err) err.classList.toggle(“is-visible”, !!show); } function validateStep(n) { if (n === 1) { var ok1 = state.services.length > 0; var err1 = root.querySelector(“#err-services”); if (err1) err1.style.display = ok1 ? “none” : “block”; return ok1; } if (n === 2) { var addrEl = document.getElementById(“fcpe-address”); var addrOk = state.address.trim().length >= 5; showErr(addrEl, !addrOk); var ptGroup = root.querySelector(‘[data-single=”property_type”]’).closest(“.fcpe-field”); var ptOk = !!state.property_type; showErrForField(ptGroup, !ptOk); var hsGroup = root.querySelector(‘[data-single=”home_size”]’).closest(“.fcpe-field”); var hsOk = !!state.home_size; showErrForField(hsGroup, !hsOk); return addrOk && ptOk && hsOk; } if (n === 3) { var err3 = root.querySelector(“#err-specifics”); var ok3 = state.services.length > 0; if (err3) err3.style.display = ok3 ? “none” : “block”; return ok3; } if (n === 4) { return true; } if (n === 5) { var tGroup = root.querySelector(‘[data-single=”timing”]’).closest(“.fcpe-field”); var tOk = !!state.timing; showErrForField(tGroup, !tOk); return tOk; } if (n === 6) { var fn = document.getElementById(“fcpe-first”); var ln = document.getElementById(“fcpe-last”); var em = document.getElementById(“fcpe-email”); var ph = document.getElementById(“fcpe-phone”); var fnOk = state.first_name.trim().length > 0; var lnOk = state.last_name.trim().length > 0; var emOk = EMAIL_RE.test(state.email.trim()); var phOk = PHONE_RE.test(state.phone.trim()) || state.phone.replace(/D/g, “”).length === 10; showErr(fn, !fnOk); showErr(ln, !lnOk); showErr(em, !emOk); showErr(ph, !phOk); return fnOk && lnOk && emOk && phOk; } if (n === 7) { return validateStep(6); } return true; } // ———- NAV BUTTON HANDLERS ———- root.querySelectorAll(“[data-action]”).forEach(function (btn) { btn.addEventListener(“click”, function () { var action = btn.getAttribute(“data-action”); if (action === “next”) { if (!validateStep(current)) return; goToStep(current + 1); } else if (action === “back”) { goToStep(current – 1); } }); }); // ———- SUBMIT ———- function setBtnSending(btn) { var labelEl = btn.querySelector(“#fcpe-submit-label”); if (!labelEl) return; clearChildren(labelEl); var spin = document.createElement(“span”); spin.className = “fcpe-spinner”; spin.setAttribute(“aria-hidden”, “true”); labelEl.appendChild(spin); labelEl.appendChild(document.createTextNode(“Sending…”)); } function setBtnLabel(btn, text) { var labelEl = btn.querySelector(“#fcpe-submit-label”); if (!labelEl) return; clearChildren(labelEl); labelEl.appendChild(document.createTextNode(text)); } function collectPayload() { var hp = document.getElementById(“company_url”); state.company_url = hp ? hp.value : “”; var payload = {}; Object.keys(state).forEach(function (k) { payload[k] = state[k]; }); payload.submitted_at = new Date().toISOString(); payload.source = “estimate_gateway_v4”; payload.referrer = document.referrer || “”; payload.user_agent = navigator.userAgent; return payload; } form.addEventListener(“submit”, function (e) { e.preventDefault(); if (!validateStep(7)) return; var payload = collectPayload(); // Honeypot trip = silently succeed (don’t reveal) if (payload.company_url && payload.company_url.length > 0) { showSuccess(payload.first_name || “friend”); return; } var submitBtn = root.querySelector(“#fcpe-submit”); submitBtn.disabled = true; setBtnSending(submitBtn); var endpoint = “/wp-admin/admin-ajax.php?action=fcpe_estimate_submit”; fetch(endpoint, { method: “POST”, headers: { “Content-Type”: “application/json”, “Accept”: “application/json” }, body: JSON.stringify(payload), credentials: “same-origin” }).then(function (res) { if (!res.ok && res.status >= 500) throw new Error(“Server error ” + res.status); return res.text().then(function () { return { ok: true }; }); }).then(function () { try { sessionStorage.removeItem(STORAGE_KEY); } catch (e) { /* ignore */ } if (window.dataLayer) { window.dataLayer.push({ event: “fcpe_estimate_submitted”, services: payload.services, bundles: payload.bundles, plans: payload.plans, timing: payload.timing, cadence: payload.cadence }); } showSuccess(payload.first_name || “friend”); }).catch(function (err) { submitBtn.disabled = false; setBtnLabel(submitBtn, “Request My Proposal”); if (window.console && console.error) console.error(“[FCPE estimate submit error]”, err); alert(“Something interrupted the send. Please try again or call (904) 466-1622.”); }); }); function showSuccess(firstName) { form.style.display = “none”; var progWrap = root.querySelector(“.fcpe-progress-wrap”); if (progWrap) progWrap.style.display = “none”; var success = root.querySelector(“#fcpe-success”); var heading = root.querySelector(“#fcpe-success-heading”); heading.textContent = “Thank You, ” + firstName + “.”; success.classList.add(“is-active”); success.scrollIntoView({ behavior: “smooth”, block: “start” }); } // ———- INIT ———- syncServices(); goToStep(hydratedStep || 1); try { window.__fcpeEstimateState = state; } catch (e) { /* ignore */ } })();
(function(){var s=document.createElement('style');s.id='fcpe-pf-css';s.textContent='.elementor-location-footer{display:none!important}\n#fcpe-pf{background:#080C10;color:#E8E2D9;font-family:inherit;position:relative;overflow:hidden}\n#fcpe-pf *{box-sizing:border-box;margin:0;padding:0}\n#fcpe-pf a{text-decoration:none}\n#fcpe-pf ul{list-style:none}\n.fcpe-pf-goldbar{height:2px;background:linear-gradient(90deg,transparent 0%,#8B6F14 10%,#D4AF37 30%,#F5D76E 50%,#D4AF37 70%,#8B6F14 90%,transparent 100%)}\n.fcpe-pf-main{position:relative;z-index:1;max-width:1360px;margin:0 auto;padding:72px 48px 56px;display:grid;grid-template-columns:2fr 1fr 1.5fr 1fr 1.3fr;gap:0 40px}\n.fcpe-pf-brand{}\n.fcpe-pf-wordmark{font-family:\'Coldiac\',Georgia,serif;font-size:17px;font-weight:700;letter-spacing:0.06em;color:#fff;text-transform:uppercase;line-height:1.25;margin-bottom:3px}\n.fcpe-pf-wordmark span{color:#D4AF37}\n.fcpe-pf-tagline{font-family:\'Coldiac\',Georgia,serif;font-style:italic;font-size:12.5px;color:#D4AF37;letter-spacing:0.04em;margin-bottom:22px}\n.fcpe-pf-rule{width:36px;height:1px;background:linear-gradient(90deg,#D4AF37,transparent);margin-bottom:20px}\n.fcpe-pf-desc{font-size:13px;line-height:1.75;color:#6A6A5A;margin-bottom:24px;max-width:240px}\n.fcpe-pf-contacts{margin-bottom:26px}\n.fcpe-pf-contacts li{font-size:13px;color:#9A9A8A;margin-bottom:11px;display:flex;align-items:flex-start;gap:9px;line-height:1.45}\n.fcpe-pf-contacts li svg{flex-shrink:0;margin-top:1px;color:#D4AF37;opacity:.75}\n.fcpe-pf-contacts a{color:#9A9A8A;transition:color .2s}\n.fcpe-pf-contacts a:hover{color:#D4AF37}\n.fcpe-pf-btn{display:inline-block;background:#D4AF37;color:#080C10;font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;padding:12px 26px;transition:background .2s,transform .15s}\n.fcpe-pf-btn:hover{background:#F5D76E;transform:translateY(-2px);color:#080C10}\n.fcpe-pf-col{padding-left:36px;border-left:1px solid rgba(255,255,255,0.05)}\n.fcpe-pf-col-hdr{font-family:\'Coldiac\',Georgia,serif;font-size:10.5px;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:#D4AF37;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid rgba(212,170,55,.18)}\n.fcpe-pf-sub{font-size:9.5px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#4A4A3A;margin:20px 0 9px}\n.fcpe-pf-sub:first-of-type{margin-top:0}\n.fcpe-pf-links li{margin-bottom:8px}\n.fcpe-pf-links a{font-size:13px;color:#7A7A6A;display:flex;align-items:center;transition:all .2s;position:relative}\n.fcpe-pf-links a::before{content:\'\';display:inline-block;width:0;height:1px;background:#D4AF37;margin-right:0;transition:width .2s,margin-right .2s;flex-shrink:0}\n.fcpe-pf-links a:hover{color:#E8E2D9;padding-left:2px}\n.fcpe-pf-links a:hover::before{width:12px;margin-right:8px}\n.fcpe-pf-areas-all{display:inline-block;font-size:10.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#D4AF37;border-bottom:1px solid rgba(212,170,55,.3);margin-top:16px;padding-bottom:2px;transition:border-color .2s}\n.fcpe-pf-areas-all:hover{border-color:#D4AF37;color:#D4AF37}\n.fcpe-pf-social{display:flex;gap:10px;margin-bottom:26px}\n.fcpe-pf-social a{width:36px;height:36px;border:1px solid rgba(212,170,55,.2);display:flex;align-items:center;justify-content:center;color:#6A6A5A;transition:all .2s}\n.fcpe-pf-social a:hover{border-color:#D4AF37;color:#D4AF37;background:rgba(212,170,55,.06)}\n.fcpe-pf-nl-text{font-size:12.5px;color:#6A6A5A;line-height:1.65;margin-bottom:14px}\n.fcpe-pf-email-wrap{display:flex;flex-direction:column;gap:7px}\n.fcpe-pf-email-wrap input{background:rgba(255,255,255,.04);border:1px solid rgba(212,170,55,.18);color:#E8E2D9;font-size:13px;padding:10px 13px;outline:none;width:100%;transition:border-color .2s;font-family:inherit}\n.fcpe-pf-email-wrap input::placeholder{color:#4A4A3A}\n.fcpe-pf-email-wrap input:focus{border-color:#D4AF37}\n.fcpe-pf-email-wrap button{background:transparent;border:1px solid rgba(212,170,55,.5);color:#D4AF37;font-size:10px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;padding:10px;cursor:pointer;transition:all .2s;font-family:inherit}\n.fcpe-pf-email-wrap button:hover{background:#D4AF37;color:#080C10;border-color:#D4AF37}\n.fcpe-pf-trust-wrap{border-top:1px solid rgba(255,255,255,.04);position:relative;z-index:1}\n.fcpe-pf-trust{max-width:1360px;margin:0 auto;padding:26px 48px;display:flex;justify-content:center;align-items:center;flex-wrap:wrap}\n.fcpe-pf-badge{display:flex;align-items:center;gap:10px;color:#5A5A4A;font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;padding:0 28px}\n.fcpe-pf-badge svg{color:#D4AF37;opacity:.8}\n.fcpe-pf-badge-div{width:1px;height:20px;background:rgba(255,255,255,.07)}\n.fcpe-pf-bottom-wrap{border-top:1px solid rgba(255,255,255,.04);position:relative;z-index:1}\n.fcpe-pf-bottom{max-width:1360px;margin:0 auto;padding:22px 48px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:14px}\n.fcpe-pf-copy{font-size:11.5px;color:#3A3A2A;letter-spacing:.02em}\n.fcpe-pf-legal{display:flex;gap:20px}\n.fcpe-pf-legal a{font-size:11.5px;color:#3A3A2A;transition:color .2s}\n.fcpe-pf-legal a:hover{color:#7A7A6A}\n.fcpe-pf-seal{font-family:\'Coldiac\',Georgia,serif;font-style:italic;font-size:10.5px;color:rgba(212,170,55,.28);letter-spacing:.04em}\n@media(max-width:1100px){.fcpe-pf-main{grid-template-columns:1.8fr 1fr 1.5fr 1fr;padding:56px 32px 48px;gap:0 32px}.fcpe-pf-main>:last-child{grid-column:1/-1;padding-left:0;border-left:none;border-top:1px solid rgba(255,255,255,.05);padding-top:32px;margin-top:32px;display:grid;grid-template-columns:1fr 1fr;gap:0 32px;align-items:start}}\n@media(max-width:768px){.fcpe-pf-main{grid-template-columns:1fr 1fr;padding:44px 24px 36px;gap:0 24px}.fcpe-pf-brand{grid-column:1/-1;padding-bottom:32px;margin-bottom:32px;border-bottom:1px solid rgba(255,255,255,.05)}.fcpe-pf-col{padding-left:0;border-left:none}.fcpe-pf-trust{padding:20px 24px}.fcpe-pf-badge{padding:8px 12px}.fcpe-pf-badge-div{display:none}.fcpe-pf-bottom{padding:18px 24px;flex-direction:column;align-items:flex-start;gap:10px}.fcpe-pf-seal{display:none}.fcpe-pf-main>:last-child{grid-column:1/-1;padding-left:0;border-left:none;border-top:1px solid rgba(255,255,255,.05);padding-top:28px;margin-top:0}}\n@media(max-width:480px){.fcpe-pf-main{grid-template-columns:1fr}.fcpe-pf-col{margin-top:28px;padding-top:28px;border-top:1px solid rgba(255,255,255,.05)}}\n.fcpe-employee-footer{display:none!important;visibility:hidden!important}';document.head.appendChild(s);})();

First Coast
Property Experts

The Gold Standard, Every Time.

Premium interior and exterior property care for the most discerning homeowners in Northeast Florida.

Get a Free Estimate

Connect

Stay ahead of the seasons. Tips, exclusive offers, and care reminders delivered to your inbox.

Google Verified
BBB A Rating
Licensed & Insured
Locally Owned & Operated
5-Star Rated
© 2026 First Coast Property Experts LLC — All Rights Reserved. The Gold Standard, Every Time.
function fcpePfSubscribe(btn){var input=document.getElementById('fcpe-pf-email');var email=(input?input.value:'').trim();if(!email||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)){if(input){input.style.borderColor='#8B3A2A';setTimeout(function(){input.style.borderColor='rgba(212,170,55,.18)';},2000);} return;} btn.textContent='Subscribed ✓';btn.style.borderColor='#3C7251';btn.style.color='#3C7251';btn.disabled=true;if(input)input.value='';}
HOA-Ready Service. HOA-conscious scheduling and arrival protocols are standard practice in the communities we serve. We coordinate around community access requirements, contractor parking rules, and arrival windows before the first visit. Communicate your community’s specific requirements at booking and we will confirm them before we arrive.