<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Biz Performance Marine Decking | South Florida Boat Decking</title>
<meta name="description" content="Custom marine decking installations for South Florida boat owners. Mobile templating, color and pattern options, CNC cuts, and dockside quotes. Call 954-708-3798." />
<meta name="keywords" content="marine decking South Florida, boat decking installation, custom boat decking, mobile marine decking, Miami-Dade marine decking, Broward marine decking, Palm Beach marine decking" />
<meta name="author" content="Biz Performance Marine Decking" />
<meta name="robots" content="index, follow, max-image-preview:large" />
<meta name="format-detection" content="telephone=yes" />
<meta name="geo.region" content="US-FL" />
<meta name="geo.placename" content="South Florida" />
<meta name="theme-color" content="#0b0b0e" />
<link rel="canonical" href="https://marineperformance.biz/" />
<link rel="image_src" href="https://marineperformance.biz/biz-og-card.png" />
<meta property="og:type" content="website" />
<meta property="og:locale" content="en_US" />
<meta property="og:site_name" content="Biz Performance Marine Decking" />
<meta property="og:url" content="https://marineperformance.biz/" />
<meta property="og:title" content="Biz Performance Marine Decking | South Florida Boat Decking" />
<meta property="og:description" content="Mobile custom marine decking installations with color options, CNC patterns, templating, and dockside quote appointments across South Florida." />
<meta property="og:image" content="https://marineperformance.biz/biz-og-card.png" />
<meta property="og:image:secure_url" content="https://marineperformance.biz/biz-og-card.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Biz Performance Marine Decking mobile installation van beside a South Florida boat dock" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Biz Performance Marine Decking | South Florida Boat Decking" />
<meta name="twitter:description" content="Custom mobile marine decking installations, color options, CNC patterns, and dockside quote appointments across South Florida." />
<meta name="twitter:image" content="https://marineperformance.biz/biz-og-card.png" />
<meta name="twitter:image:alt" content="Biz Performance Marine Decking mobile installation van beside a South Florida boat dock" />
<link rel="icon" type="image/png" href="biz-og.png" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebPage",
"@id": "https://marineperformance.biz/#webpage",
"url": "https://marineperformance.biz/",
"name": "Biz Performance Marine Decking | South Florida Boat Decking",
"description": "Custom marine decking installations for South Florida boat owners with mobile templating, color and pattern options, CNC cuts, and dockside quotes.",
"primaryImageOfPage": {
"@id": "https://marineperformance.biz/#primaryimage"
},
"about": {
"@id": "https://marineperformance.biz/#business"
}
},
{
"@type": "ImageObject",
"@id": "https://marineperformance.biz/#primaryimage",
"url": "https://marineperformance.biz/biz-og-card.png",
"width": 1200,
"height": 630,
"caption": "Biz Performance Marine Decking mobile marine decking service in South Florida"
},
{
"@type": "LocalBusiness",
"@id": "https://marineperformance.biz/#business",
"name": "Biz Performance Marine Decking",
"url": "https://marineperformance.biz/",
"description": "Mobile custom marine decking installations, templating, CNC patterns, color options, and quote appointments for boat owners across South Florida.",
"telephone": "+1-954-708-3798",
"email": "[email protected]",
"image": "https://marineperformance.biz/biz-og-card.png",
"logo": "https://marineperformance.biz/biz-logo.png",
"priceRange": "$$",
"areaServed": [
"South Florida",
"Miami-Dade County, FL",
"Broward County, FL",
"Palm Beach County, FL"
],
"sameAs": [
"https://instagram.com/Biz_PMD"
],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Marine decking services and patterns",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Custom marine decking installation",
"serviceType": "Marine decking installation"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Mobile marine decking templating",
"serviceType": "Boat decking templating"
}
},
{
"@type": "OfferCatalog",
"name": "Available marine decking patterns",
"itemListElement": [
"Classic Plank",
"Diamond Cut",
"Herringbone",
"Honeycomb",
"Racing Stripes",
"Basket Weave",
"Wave Lines",
"Full Custom"
]
}
]
}
}
]
}
</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&family=Rajdhani:wght@500;600;700&display=swap" rel="stylesheet" />
<style>
:root {
--aqua: #00d7e6;
--pink: #ff2b7f;
--lime: #b8ff4d;
--black: #0b0b0e;
--smoke: #141418;
--ash: #24242b;
--steel: #3a3a43;
--mist: #b8bbc4;
--white: #f4f5f7;
--font-display: 'Rajdhani', sans-serif;
--font-body: 'Inter', sans-serif;
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
background: var(--black);
color: var(--white);
font-family: var(--font-body);
font-size: 16px;
line-height: 1.6;
overflow-x: hidden;
}
body.modal-open { overflow: hidden; }
a { color: inherit; }
nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 100;
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 5vw;
background: rgba(10, 10, 13, 0.72);
backdrop-filter: blur(10px);
border-bottom: 1px solid transparent;
transition: height 0.25s ease, background 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease;
}
nav.is-scrolled,
nav.is-open {
height: 64px;
background: rgba(10, 10, 13, 0.94);
border-bottom-color: var(--ash);
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.48);
}
.nav-logo {
display: inline-flex;
align-items: center;
text-decoration: none;
min-width: 0;
}
.nav-logo img {
width: 245px;
max-width: 40vw;
height: auto;
display: block;
transition: width 0.25s ease;
}
nav.is-scrolled .nav-logo img,
nav.is-open .nav-logo img {
width: 165px;
}
.nav-links {
display: flex;
align-items: center;
gap: 1.1rem;
list-style: none;
}
.nav-links a {
position: relative;
font-family: var(--font-display);
font-size: 0.82rem;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--mist);
text-decoration: none;
transition: color 0.2s;
white-space: nowrap;
}
.nav-links a::after {
content: '';
position: absolute;
left: 0;
bottom: -0.45rem;
width: 28px;
height: 2px;
background: var(--aqua);
transform: scaleX(0);
transform-origin: left;
transition: transform 0.2s ease;
}
.nav-links a:hover,
.nav-links a.is-active { color: var(--aqua); }
.nav-links a:hover::after,
.nav-links a.is-active::after { transform: scaleX(1); }
.nav-actions {
display: flex;
align-items: center;
gap: 0.75rem;
}
.nav-cta {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 38px;
font-family: var(--font-display);
font-size: 0.78rem;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
background: var(--pink);
color: #fff;
padding: 0.5rem 0.95rem;
border: none;
text-decoration: none;
transition: background 0.2s, color 0.2s, border-color 0.2s;
white-space: nowrap;
}
.nav-cta:hover { background: #e51f70; }
.nav-cta-call {
background: transparent;
border: 1px solid var(--aqua);
color: var(--white);
}
.nav-cta-call:hover {
background: var(--aqua);
color: var(--black);
}
.nav-toggle {
display: none;
width: 44px;
height: 44px;
border: 1px solid var(--steel);
background: transparent;
color: var(--white);
cursor: pointer;
align-items: center;
justify-content: center;
flex-direction: column;
gap: 5px;
}
.nav-toggle span {
width: 20px;
height: 2px;
background: currentColor;
transition: transform 0.2s ease, opacity 0.2s ease;
}
.nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
.nav-toggle:focus-visible,
.image-modal-close:focus-visible,
.project-tile:focus-visible,
.nav-cta:focus-visible,
.btn-primary:focus-visible,
.btn-ghost:focus-visible {
outline: 2px solid var(--aqua);
outline-offset: 4px;
}
.hero {
position: relative;
min-height: 92vh;
display: flex;
align-items: flex-end;
padding: 10rem 5vw 8vh;
overflow: hidden;
}
.hero-bg {
position: absolute;
inset: 0;
background-image:
linear-gradient(to top, rgba(6, 6, 8, 0.9) 0%, rgba(6, 6, 8, 0.2) 58%, rgba(6, 6, 8, 0.05) 100%),
linear-gradient(to right, rgba(6, 6, 8, 0.96) 0%, rgba(6, 6, 8, 0.78) 44%, rgba(6, 6, 8, 0.18) 100%),
url('biz-hero.png'),
linear-gradient(135deg, #101018 0%, #08161c 50%, #1a0d16 100%);
background-position: center, center, center, center;
background-size: cover, cover, cover, cover;
background-repeat: no-repeat;
}
.hero-slash {
position: absolute;
top: 0;
right: -70px;
width: 190px;
height: 100%;
background: var(--pink);
transform: skewX(-8deg);
opacity: 0.11;
pointer-events: none;
}
.hero-slash::after {
content: '';
position: absolute;
top: 0;
left: -95px;
width: 58px;
height: 100%;
background: var(--aqua);
opacity: 0.55;
}
.hero-content {
position: relative;
z-index: 2;
max-width: 720px;
width: 100%;
}
.hero-eyebrow,
.section-eyebrow,
.contact-label,
.service-area-label,
.form-label,
.footer-note,
.sticky-call-label {
font-family: var(--font-display);
letter-spacing: 0.18em;
text-transform: uppercase;
}
.hero-eyebrow {
display: inline-flex;
align-items: center;
gap: 0.65rem;
color: var(--aqua);
font-size: 0.78rem;
font-weight: 700;
margin-bottom: 1rem;
}
.hero-eyebrow::before {
content: '';
width: 42px;
height: 2px;
background: var(--pink);
}
.hero-title {
font-family: var(--font-display);
font-size: clamp(3.25rem, 8.6vw, 8rem);
line-height: 0.88;
letter-spacing: 0;
font-weight: 700;
text-transform: uppercase;
margin-bottom: 1.4rem;
}
.hero-title .accent { color: var(--pink); }
.hero-title .aqua { color: var(--aqua); }
.hero-body {
color: var(--mist);
max-width: 610px;
font-size: 1.02rem;
margin-bottom: 2rem;
}
.hero-body strong {
color: var(--white);
font-weight: 600;
}
.hero-actions {
display: flex;
align-items: center;
gap: 1rem;
flex-wrap: wrap;
}
.btn-primary,
.btn-ghost {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 48px;
font-family: var(--font-display);
font-size: 0.92rem;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
padding: 0.85rem 1.65rem;
text-decoration: none;
border: 1px solid transparent;
cursor: pointer;
transition: background 0.2s, color 0.2s, border-color 0.2s, transform 0.15s;
}
.btn-primary {
background: var(--pink);
color: #fff;
}
.btn-primary:hover {
background: #e51f70;
transform: translateY(-1px);
}
.btn-ghost {
background: transparent;
border-color: var(--aqua);
color: var(--aqua);
}
.btn-ghost:hover {
background: var(--aqua);
color: var(--black);
}
.trust-bar {
display: flex;
align-items: center;
justify-content: center;
gap: 1.4rem;
flex-wrap: wrap;
padding: 1rem 5vw;
background: var(--ash);
border-top: 1px solid var(--steel);
border-bottom: 1px solid var(--steel);
}
.trust-item {
display: flex;
align-items: center;
gap: 0.55rem;
font-family: var(--font-display);
font-size: 0.82rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--mist);
white-space: nowrap;
}
.trust-item svg { color: var(--aqua); flex: 0 0 auto; }
.trust-divider { width: 1px; height: 18px; background: var(--steel); }
section {
position: relative;
padding: 7rem 5vw;
}
.section-eyebrow {
color: var(--aqua);
font-size: 0.76rem;
font-weight: 700;
margin-bottom: 0.85rem;
}
.section-title {
font-family: var(--font-display);
font-size: clamp(2.5rem, 5.6vw, 5rem);
line-height: 0.92;
letter-spacing: 0;
font-weight: 700;
text-transform: uppercase;
margin-bottom: 1.3rem;
}
.section-title .accent { color: var(--pink); }
.section-title .aqua { color: var(--aqua); }
.section-body {
color: var(--mist);
max-width: 650px;
}
.services-section {
background: var(--smoke);
}
.section-header-split,
.projects-header,
.contact-section {
display: grid;
grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
gap: 4rem;
align-items: start;
}
.services-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 1px;
margin-top: 3rem;
background: var(--steel);
border: 1px solid var(--steel);
}
.service-card {
position: relative;
min-height: 245px;
background: var(--black);
padding: 2rem;
overflow: hidden;
}
.service-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 3px;
background: linear-gradient(90deg, var(--aqua), var(--pink));
transform: scaleX(0);
transform-origin: left;
transition: transform 0.25s ease;
}
.service-card:hover::before { transform: scaleX(1); }
.service-icon {
width: 38px;
height: 38px;
color: var(--aqua);
margin-bottom: 1.4rem;
}
.service-name {
font-family: var(--font-display);
font-size: 1.45rem;
line-height: 1;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
margin-bottom: 0.85rem;
}
.service-desc {
color: var(--mist);
font-size: 0.93rem;
}
.about-section {
display: grid;
grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr);
gap: 5vw;
align-items: center;
background: var(--black);
}
.about-visual {
position: relative;
min-height: 520px;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
border: 1px solid var(--steel);
background:
linear-gradient(135deg, rgba(0, 215, 230, 0.16), transparent 45%),
linear-gradient(315deg, rgba(255, 43, 127, 0.18), transparent 52%),
var(--smoke);
}
.about-visual img {
width: min(86%, 460px);
height: auto;
display: block;
filter: drop-shadow(0 28px 48px rgba(0, 0, 0, 0.45));
}
.discount-badge {
position: absolute;
left: 1.5rem;
bottom: 1.5rem;
display: flex;
align-items: center;
gap: 0.85rem;
padding: 0.9rem 1rem;
background: rgba(11, 11, 14, 0.92);
border: 1px solid var(--steel);
box-shadow: 0 20px 48px rgba(0, 0, 0, 0.4);
}
.discount-badge svg {
width: 34px;
height: 34px;
color: var(--pink);
flex: 0 0 auto;
}
.discount-badge-text {
font-family: var(--font-display);
font-size: 0.9rem;
line-height: 1.05;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--white);
font-weight: 700;
}
.about-stat-row {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 1px;
margin-top: 2rem;
background: var(--steel);
border: 1px solid var(--steel);
}
.stat {
background: var(--smoke);
padding: 1.4rem 1rem;
text-align: center;
}
.stat-num {
display: block;
font-family: var(--font-display);
font-size: 2rem;
font-weight: 700;
line-height: 1;
color: var(--aqua);
text-transform: uppercase;
}
.stat-label {
display: block;
margin-top: 0.4rem;
color: var(--mist);
font-size: 0.76rem;
text-transform: uppercase;
letter-spacing: 0.08em;
}
.projects-section {
background: var(--smoke);
}
.projects-mosaic {
display: grid;
grid-template-columns: 1.3fr 1fr 1fr;
grid-auto-rows: minmax(210px, 24vw);
gap: 1rem;
margin-top: 3rem;
}
.project-tile {
position: relative;
display: block;
width: 100%;
height: 100%;
overflow: hidden;
border: 1px solid var(--steel);
background: var(--black);
cursor: pointer;
padding: 0;
text-align: left;
}
.project-tile.tall {
grid-row: span 2;
}
.tile-image,
.tile-pattern {
width: 100%;
height: 100%;
display: block;
}
.tile-image {
object-fit: cover;
background: #050507;
transition: transform 0.45s ease;
}
.project-tile:hover .tile-image,
.project-tile:hover .tile-pattern {
transform: scale(1.04);
}
.tile-pattern {
transition: transform 0.45s ease;
}
.pattern-plank {
background:
linear-gradient(90deg, rgba(255,255,255,0.05) 1px, transparent 1px),
repeating-linear-gradient(0deg, #222228 0 28px, #0f0f13 28px 32px);
background-size: 90px 100%, auto;
}
.pattern-diamond {
background:
linear-gradient(45deg, transparent 44%, rgba(0,215,230,0.65) 45%, rgba(0,215,230,0.65) 48%, transparent 49%),
linear-gradient(-45deg, transparent 44%, rgba(255,43,127,0.6) 45%, rgba(255,43,127,0.6) 48%, transparent 49%),
#15151b;
background-size: 56px 56px;
}
.pattern-herringbone {
background:
linear-gradient(135deg, transparent 38%, rgba(0,215,230,0.7) 39%, rgba(0,215,230,0.7) 42%, transparent 43%),
linear-gradient(45deg, transparent 38%, rgba(255,43,127,0.6) 39%, rgba(255,43,127,0.6) 42%, transparent 43%),
repeating-linear-gradient(90deg, #17171d 0 22px, #222228 22px 44px);
background-size: 64px 64px;
}
.pattern-honeycomb {
background:
linear-gradient(30deg, transparent 36%, rgba(0,215,230,0.62) 37%, rgba(0,215,230,0.62) 40%, transparent 41%),
linear-gradient(150deg, transparent 36%, rgba(255,43,127,0.58) 37%, rgba(255,43,127,0.58) 40%, transparent 41%),
linear-gradient(90deg, transparent 36%, rgba(255,255,255,0.12) 37%, rgba(255,255,255,0.12) 40%, transparent 41%),
#15151b;
background-size: 54px 32px;
}
.pattern-race {
background:
repeating-linear-gradient(90deg, #131318 0 34px, rgba(255,43,127,0.88) 34px 42px, #131318 42px 74px, rgba(0,215,230,0.82) 74px 82px);
}
.pattern-wave {
background:
radial-gradient(ellipse at 10% 50%, transparent 0 42%, rgba(0,215,230,0.75) 43% 45%, transparent 46%),
radial-gradient(ellipse at 60% 50%, transparent 0 42%, rgba(255,43,127,0.7) 43% 45%, transparent 46%),
#16161c;
background-size: 150px 80px;
}
.tile-caption {
position: absolute;
left: 1rem;
right: 1rem;
bottom: 1rem;
display: flex;
justify-content: space-between;
align-items: flex-end;
gap: 1rem;
color: var(--white);
pointer-events: none;
}
.tile-caption span {
font-family: var(--font-display);
font-size: 1rem;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
text-shadow: 0 2px 18px rgba(0,0,0,0.82);
}
.colors-section,
.patterns-section {
background: var(--black);
border-top: 1px solid rgba(255,255,255,0.04);
}
.swatch-grid {
display: grid;
grid-template-columns: repeat(6, minmax(0, 1fr));
gap: 1rem;
margin-top: 3rem;
}
.pattern-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 1rem;
margin-top: 3rem;
}
.swatch,
.pattern-card {
overflow: hidden;
border: 1px solid var(--steel);
background: var(--smoke);
}
.swatch-color {
height: 86px;
border-bottom: 1px solid var(--steel);
}
.swatch-name,
.pattern-name {
padding: 0.75rem 0.65rem;
font-family: var(--font-display);
font-size: 0.78rem;
font-weight: 700;
letter-spacing: 0.12em;
text-align: center;
text-transform: uppercase;
color: var(--mist);
}
.pattern-card .tile-pattern {
height: 110px;
border-bottom: 1px solid var(--steel);
}
.service-areas-section {
background:
linear-gradient(135deg, rgba(0, 215, 230, 0.08), transparent 38%),
linear-gradient(315deg, rgba(255, 43, 127, 0.08), transparent 40%),
var(--smoke);
}
.service-areas-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 1px;
margin-top: 3rem;
background: var(--steel);
border: 1px solid var(--steel);
}
.service-area-card {
background: rgba(11, 11, 14, 0.88);
padding: 2rem;
min-height: 210px;
}
.service-area-name {
font-family: var(--font-display);
font-size: 2rem;
font-weight: 700;
line-height: 1;
text-transform: uppercase;
color: var(--white);
margin-bottom: 0.5rem;
}
.service-area-label {
font-size: 0.72rem;
font-weight: 700;
color: var(--aqua);
margin-bottom: 1.1rem;
}
.service-area-copy {
color: var(--mist);
font-size: 0.92rem;
}
.contact-section {
background: var(--black);
}
.contact-info {
display: grid;
gap: 1.25rem;
}
.contact-row {
display: flex;
gap: 1rem;
align-items: flex-start;
}
.contact-icon {
width: 22px;
height: 22px;
color: var(--aqua);
flex: 0 0 22px;
margin-top: 0.18rem;
}
.contact-label {
color: var(--steel);
font-size: 0.76rem;
font-weight: 700;
margin-bottom: 0.12rem;
}
.contact-value {
color: var(--white);
text-decoration: none;
font-size: 1.05rem;
transition: color 0.2s;
}
.contact-value:hover { color: var(--aqua); }
.social-row {
display: flex;
flex-wrap: wrap;
gap: 0.75rem;
margin-top: 1.5rem;
}
.social-btn {
display: inline-flex;
align-items: center;
gap: 0.5rem;
min-height: 40px;
border: 1px solid var(--steel);
color: var(--mist);
text-decoration: none;
padding: 0.55rem 0.9rem;
font-family: var(--font-display);
font-size: 0.82rem;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
transition: border-color 0.2s, color 0.2s;
}
.social-btn:hover {
border-color: var(--pink);
color: var(--pink);
}
.quote-card {
display: grid;
gap: 1.2rem;
padding: 2rem;
background: var(--smoke);
border: 1px solid var(--steel);
}
.quote-card-title {
font-family: var(--font-display);
font-size: 1.8rem;
font-weight: 700;
line-height: 1;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.quote-card-copy {
color: var(--mist);
font-size: 0.95rem;
}
.quote-steps {
display: grid;
gap: 1px;
background: var(--steel);
border: 1px solid var(--steel);
}
.quote-step {
display: flex;
align-items: center;
gap: 0.9rem;
padding: 1rem;
background: var(--black);
color: var(--mist);
}
.quote-step-num {
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
flex: 0 0 28px;
background: rgba(0, 215, 230, 0.12);
color: var(--aqua);
font-family: var(--font-display);
font-weight: 700;
}
.form-label {
display: block;
color: var(--mist);
font-size: 0.72rem;
font-weight: 700;
margin-bottom: 0.45rem;
}
.form-label .req { color: var(--pink); }
.form-field { display: block; }
.form-group { margin-bottom: 1rem; }
.form-input,
.form-select,
.form-textarea {
width: 100%;
min-height: 48px;
background: var(--black);
color: var(--white);
border: 1px solid var(--steel);
border-radius: 0;
font: inherit;
padding: 0.8rem 0.9rem;
outline: none;
transition: border-color 0.2s;
}
.form-input::placeholder,
.form-textarea::placeholder { color: #686b73; }
.form-input:focus,
.form-select:focus,
.form-textarea:focus { border-color: var(--aqua); }
.form-select { appearance: auto; }
.form-textarea { resize: vertical; min-height: 120px; }
.form-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
}
.booking-modal-overlay {
position: fixed;
inset: 0;
z-index: 1000;
display: none;
align-items: center;
justify-content: center;
padding: 1.25rem;
background: rgba(0, 0, 0, 0.9);
backdrop-filter: blur(4px);
overflow-y: auto;
}
.booking-modal-overlay.is-open { display: flex; }
.booking-modal {
width: min(100%, 620px);
max-height: 90vh;
overflow-y: auto;
background: var(--smoke);
border: 1px solid var(--steel);
box-shadow: 0 24px 80px rgba(0, 0, 0, 0.5);
}
.booking-modal-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
padding: 1.6rem 1.8rem 1.2rem;
border-bottom: 1px solid var(--steel);
}
.booking-modal-head h3 {
font-family: var(--font-display);
font-size: 1.65rem;
line-height: 1;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.booking-modal-close {
display: inline-flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
flex: 0 0 40px;
border: 1px solid var(--steel);
background: var(--black);
color: var(--white);
font-size: 1.4rem;
line-height: 1;
cursor: pointer;
}
.booking-modal-close:hover {
border-color: var(--pink);
color: var(--pink);
}
.booking-modal-body { padding: 1.8rem; }
.step { display: none; }
.step.active { display: block; }
.step-indicator {
display: flex;
gap: 6px;
margin-bottom: 1.6rem;
}
.step-dot {
height: 3px;
flex: 1;
background: var(--steel);
transition: background 0.2s;
}
.step-dot.done { background: var(--aqua); }
.step-dot.active { background: var(--pink); }
.step-title {
font-family: var(--font-display);
font-size: 1.18rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
margin-bottom: 1.2rem;
}
.date-nav {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
margin-bottom: 1rem;
}
.date-nav button {
width: 36px;
height: 36px;
border: 1px solid var(--steel);
background: var(--black);
color: var(--mist);
cursor: pointer;
font-size: 1.2rem;
}
.date-nav button:hover {
border-color: var(--aqua);
color: var(--aqua);
}
.date-display {
font-family: var(--font-display);
font-size: 1rem;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.timeslots {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 0.5rem;
margin-bottom: 1.5rem;
}
.slot {
min-height: 44px;
padding: 0.7rem 0.5rem;
border: 1px solid var(--steel);
background: var(--black);
color: var(--mist);
cursor: pointer;
text-align: center;
font-family: var(--font-display);
font-size: 0.9rem;
font-weight: 700;
letter-spacing: 0.06em;
transition: border-color 0.2s, color 0.2s, background 0.2s;
}
.slot:hover {
border-color: var(--aqua);
color: var(--aqua);
background: rgba(0, 215, 230, 0.05);
}
.slot.selected {
border-color: var(--aqua);
color: var(--aqua);
background: rgba(0, 215, 230, 0.12);
}
.slot.unavailable {
opacity: 0.35;
cursor: not-allowed;
pointer-events: none;
}
.file-upload {
display: grid;
gap: 0.25rem;
padding: 1rem;
border: 1px dashed rgba(0, 215, 230, 0.42);
background: rgba(0, 215, 230, 0.04);
cursor: pointer;
}
.file-upload p {
color: var(--mist);
font-size: 0.86rem;
}
.file-upload span { color: var(--aqua); }
.photo-preview-grid {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-top: 0.75rem;
}
.photo-preview-grid img {
width: 80px;
height: 60px;
object-fit: cover;
border: 1px solid var(--steel);
}
.confirm-box {
background: var(--black);
border: 1px solid var(--steel);
padding: 1rem;
margin-bottom: 1rem;
}
.confirm-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
padding: 0.65rem 0;
border-bottom: 1px solid var(--steel);
font-size: 0.9rem;
}
.confirm-row:last-child { border-bottom: 0; }
.confirm-label {
color: var(--mist);
font-family: var(--font-display);
font-size: 0.78rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.confirm-val {
color: var(--white);
text-align: right;
overflow-wrap: anywhere;
}
.success-box {
text-align: center;
padding: 1rem 0;
}
.success-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 58px;
height: 58px;
margin-bottom: 1rem;
border: 1px solid rgba(0, 215, 230, 0.4);
color: var(--aqua);
font-family: var(--font-display);
font-size: 1.8rem;
font-weight: 700;
}
.success-box h3 {
font-family: var(--font-display);
font-size: 2rem;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--aqua);
margin-bottom: 0.6rem;
}
.success-box p {
color: var(--mist);
line-height: 1.7;
}
.modal-footer {
display: flex;
justify-content: flex-end;
gap: 0.75rem;
padding-top: 1.2rem;
margin-top: 1.4rem;
border-top: 1px solid var(--steel);
}
footer {
padding: 4rem 5vw;
text-align: center;
background: var(--smoke);
border-top: 1px solid var(--steel);
}
.footer-logo {
display: inline-flex;
justify-content: center;
margin-bottom: 1.5rem;
}
.footer-logo img {
width: 320px;
max-width: 80vw;
height: auto;
display: block;
}
.footer-note {
color: var(--mist);
font-size: 0.78rem;
font-weight: 700;
margin-top: 0.4rem;
}
.sticky-call-cta {
position: fixed;
left: 50%;
bottom: 1.25rem;
z-index: 90;
display: flex;
align-items: center;
gap: 0.75rem;
min-height: 56px;
padding: 0.65rem 1rem;
background: var(--aqua);
color: var(--black);
text-decoration: none;
box-shadow: 0 16px 40px rgba(0, 0, 0, 0.34);
transform: translate(-50%, calc(100% + 2rem));
opacity: 0;
pointer-events: none;
transition: transform 0.25s ease, opacity 0.25s ease;
}
.sticky-call-cta.is-visible {
transform: translate(-50%, 0);
opacity: 1;
pointer-events: auto;
}
.sticky-call-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
background: rgba(11, 11, 14, 0.12);
}
.sticky-call-copy { display: grid; line-height: 1.05; }
.sticky-call-label { font-size: 0.66rem; font-weight: 700; }
.sticky-call-number { font-family: var(--font-display); font-size: 1.1rem; font-weight: 700; letter-spacing: 0.06em; }
.image-modal {
position: fixed;
inset: 0;
z-index: 1000;
display: none;
align-items: center;
justify-content: center;
padding: 2rem;
background: rgba(0, 0, 0, 0.92);
}
.image-modal.is-open { display: flex; }
.image-modal img {
max-width: min(92vw, 960px);
max-height: 86vh;
object-fit: contain;
}
.image-modal-close {
position: absolute;
top: 1rem;
right: 1rem;
width: 44px;
height: 44px;
border: 1px solid var(--steel);
background: var(--smoke);
color: var(--white);
font-size: 1.75rem;
line-height: 1;
cursor: pointer;
}
@media (max-width: 1180px) {
.nav-links { gap: 1rem; }
.nav-actions { gap: 0.5rem; }
.nav-cta { padding-inline: 0.9rem; }
.services-grid,
.service-areas-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.swatch-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
@media (max-width: 980px) {
nav {
height: 80px;
padding: 0 1rem;
}
nav.is-scrolled,
nav.is-open { height: 64px; }
.nav-logo img { width: 210px; max-width: 62vw; }
nav.is-scrolled .nav-logo img,
nav.is-open .nav-logo img { width: 160px; }
.nav-toggle { display: flex; }
.nav-links {
position: fixed;
top: 64px;
left: 0;
right: 0;
display: grid;
gap: 0;
padding: 0.6rem 0;
background: rgba(10, 10, 13, 0.98);
border-bottom: 1px solid var(--steel);
transform: translateY(-130%);
opacity: 0;
pointer-events: none;
transition: transform 0.24s ease, opacity 0.24s ease;
}
nav.is-open .nav-links {
transform: translateY(0);
opacity: 1;
pointer-events: auto;
}
.nav-links a {
display: block;
padding: 0.9rem 1.5rem;
font-size: 1rem;
}
.nav-links a::after { display: none; }
.nav-actions { display: none; }
nav.is-open .nav-cta {
display: inline-flex;
margin: 0.45rem 1.5rem;
width: calc(100% - 3rem);
}
.section-header-split,
.projects-header,
.contact-section,
.about-section {
grid-template-columns: 1fr;
gap: 3rem;
}
.hero {
min-height: 92vh;
padding: 8.5rem 1.25rem 5rem;
}
.hero-bg { background-position: center; }
.hero-content { padding-top: 0; }
.trust-divider { display: none; }
section { padding: 5rem 1.25rem; }
.projects-mosaic { grid-template-columns: 1fr 1fr; }
.project-tile.tall { grid-row: span 1; }
.about-visual { min-height: 390px; }
}
@media (max-width: 680px) {
.hero-title { font-size: clamp(3rem, 17vw, 5.25rem); }
.hero-actions,
.social-row { align-items: stretch; flex-direction: column; }
.btn-primary,
.btn-ghost,
.social-btn { width: 100%; }
.services-grid,
.service-areas-grid,
.projects-mosaic,
.swatch-grid,
.pattern-grid,
.about-stat-row,
.form-row {
grid-template-columns: 1fr;
}
.projects-mosaic { grid-auto-rows: minmax(210px, 62vw); }
.quote-card,
.booking-modal-body {
padding: 1.25rem;
}
.booking-modal-head {
padding: 1.25rem;
}
.timeslots {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.modal-footer {
align-items: stretch;
flex-direction: column-reverse;
}
.modal-footer .btn-primary,
.modal-footer .btn-ghost {
width: 100%;
}
.sticky-call-cta {
left: 1rem;
right: 1rem;
bottom: 1rem;
transform: translateY(calc(100% + 1.5rem));
}
.sticky-call-cta.is-visible { transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
}
}
</style>
</head>
<body>
<nav>
<a class="nav-logo" href="#hero" aria-label="Biz Performance Marine Decking home">
<img src="biz-logo.png" alt="Biz Performance Marine Decking">
</a>
<button class="nav-toggle" type="button" aria-label="Open navigation" aria-controls="primary-navigation" aria-expanded="false">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</button>
<ul class="nav-links" id="primary-navigation">
<li><a href="#services">Services</a></li>
<li><a href="#about">About</a></li>
<li><a href="#projects">Gallery</a></li>
<li><a href="#colors">Colors</a></li>
<li><a href="#patterns">Patterns</a></li>
<li><a href="#service-areas">Areas</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
<div class="nav-actions">
<a class="nav-cta nav-cta-call" href="tel:+19547083798">Call 954-708-3798</a>
<a class="nav-cta" href="#contact" data-open-booking>Get a Quote</a>
</div>
</nav>
<section id="hero" class="hero">
<div class="hero-bg"></div>
<div class="hero-slash"></div>
<div class="hero-content">
<div class="hero-eyebrow">Mobile Marine Decking - South Florida</div>
<h1 class="hero-title">
CUSTOM <span class="aqua">MARINE</span><br><span class="accent">DECKING</span>
</h1>
<p class="hero-body">
<strong>Biz Performance Marine Decking</strong> builds custom-fit boat decking from mild to wild, with mobile installation at your dock, marina, or storage location.
</p>
<div class="hero-actions">
<a class="btn-primary" href="#contact" data-open-booking>Request a Quote</a>
<a class="btn-ghost" href="tel:+19547083798">Call Now</a>
</div>
</div>
</section>
<div class="trust-bar">
<div class="trust-item">
<svg width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M4 17h16M6 17l3-8h6l3 8M8 9l4-5 4 5"/></svg>
Mobile Installations
</div>
<div class="trust-divider"></div>
<div class="trust-item">
<svg width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M20 7l-8 10-4-4-4 4"/></svg>
Custom Patterns
</div>
<div class="trust-divider"></div>
<div class="trust-item">
<svg width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
Marine Grade
</div>
<div class="trust-divider"></div>
<div class="trust-item">
<svg width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
South Florida
</div>
<div class="trust-divider"></div>
<div class="trust-item">
<svg width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M22 12l-4 4-4-4M18 16V8a4 4 0 0 0-4-4H8"/></svg>
Free Consultation
</div>
</div>
<section id="services" class="services-section">
<div class="section-header-split">
<div>
<p class="section-eyebrow">What We Do</p>
<h2 class="section-title">DECKING BUILT<br><span class="accent">FOR BOATS</span></h2>
</div>
<p class="section-body">
We focus on custom marine decking, from clean factory-style installs to bold color work and full custom layouts. The crew comes to you with the tools, materials, and measuring process needed to fit your vessel correctly.
</p>
</div>
<div class="services-grid">
<div class="service-card">
<svg class="service-icon" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path d="M3 17h18M5 17l3-9h8l3 9M8 8l4-5 4 5"/></svg>
<div class="service-name">Marine Decking</div>
<p class="service-desc">Custom-fit decking for boats of different sizes and layouts, measured for clean lines, usable traction, and a finished look.</p>
</div>
<div class="service-card">
<svg class="service-icon" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path d="M12 20h9"/><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z"/></svg>
<div class="service-name">Custom Design</div>
<p class="service-desc">Color combinations, logos, decorative cuts, striping, and custom pattern direction for a deck that fits your boat and style.</p>
</div>
<div class="service-card">
<svg class="service-icon" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path d="M3 16V8l9-5 9 5v8l-9 5-9-5z"/><path d="M3 8l9 5 9-5M12 13v8"/></svg>
<div class="service-name">Mobile Service</div>
<p class="service-desc">We come to the dock, marina, yard, or storage location so you do not have to haul the boat around for measurements or install.</p>
</div>
<div class="service-card">
<svg class="service-icon" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path d="M2 12c3-4 7-4 10 0s7 4 10 0"/><path d="M2 17c3-4 7-4 10 0s7 4 10 0"/></svg>
<div class="service-name">Marine Materials</div>
<p class="service-desc">Decking options selected for saltwater exposure, sun, grip, cleanup, and the everyday abuse that comes with boating.</p>
</div>
<div class="service-card">
<svg class="service-icon" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path d="M12 3l2.6 5.3 5.9.9-4.2 4.1 1 5.8L12 16.3 6.7 19.1l1-5.8-4.2-4.1 5.9-.9L12 3z"/></svg>
<div class="service-name">Military & First Responder Discount</div>
<p class="service-desc">We proudly support our heroes. Active military, veterans, and first responders receive 10% off all installations. Thank you for your service.</p>
</div>
<div class="service-card">
<svg class="service-icon" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg>
<div class="service-name">Clean Finish</div>
<p class="service-desc">Templates, panel direction, edge planning, and installation details handled with a practical eye for daily boat use.</p>
</div>
</div>
</section>
<section id="about" class="about-section">
<div class="about-visual">
<img src="biz-og.png" alt="Biz Performance Marine Decking boat graphic">
<div class="discount-badge">
<svg fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path d="M12 3l2.6 5.3 5.9.9-4.2 4.1 1 5.8L12 16.3 6.7 19.1l1-5.8-4.2-4.1 5.9-.9L12 3z"/></svg>
<div class="discount-badge-text">Military &<br>First Responder<br>Discount</div>
</div>
</div>
<div>
<p class="section-eyebrow">About Biz Performance</p>
<h2 class="section-title">FROM MILD<br><span class="aqua">TO WILD</span></h2>
<p class="section-body">
Biz Performance Marine Decking is built around one job: custom decking for boats. That focus keeps the process simple for the customer and lets the install stay dialed into fit, color, pattern, and finish.
</p>
<p class="section-body" style="margin-top: 1rem;">
The mobile setup is designed for South Florida boaters. We meet you where the boat is, review the deck areas, discuss color and pattern options, and quote the work without forcing you to move the vessel first.
</p>
<div class="about-stat-row">
<div class="stat">
<span class="stat-num">100%</span>
<span class="stat-label">Mobile Service</span>
</div>
<div class="stat">
<span class="stat-num">10%</span>
<span class="stat-label">Military & First Responder Discount</span>
</div>
<div class="stat">
<span class="stat-num">SoFlo</span>
<span class="stat-label">Coverage Area</span>
</div>
</div>
</div>
</section>
<section id="projects" class="projects-section">
<div class="projects-header">
<div>
<p class="section-eyebrow">Gallery</p>
<h2 class="section-title">LOOKS THAT<br><span class="accent">FIT THE BOAT</span></h2>
</div>
<p class="section-body">
Use these examples as a starting point for color direction, layout style, and pattern feel. Send photos of your boat through the quote form and we will talk through what fits your deck.
</p>
</div>
<div class="projects-mosaic">
<button class="project-tile tall" type="button" aria-label="View Biz Performance marine decking template work">
<img class="tile-image" src="biz-1.png" alt="Marine decking template work on a cutting table">
<div class="tile-caption"><span>Template Work</span></div>
</button>
<button class="project-tile" type="button" aria-label="View digital marine decking measurement">
<img class="tile-image" src="biz-2.png" alt="Digital marine decking measurement on a Prodim machine">
<div class="tile-caption"><span>Digital Measuring</span></div>
</button>
<button class="project-tile" type="button" aria-label="View boat decking layout scan">
<img class="tile-image" src="biz-3.png" alt="Boat decking layout scan on a measuring screen">
<div class="tile-caption"><span>Layout Scan</span></div>
</button>
<button class="project-tile" type="button" aria-label="View custom cut marine decking panels">
<img class="tile-image" src="biz-4.png" alt="Custom cut marine decking panels inside the mobile service van">
<div class="tile-caption"><span>Cut Panels</span></div>
</button>
<button class="project-tile" type="button" aria-label="View Biz Performance mobile marine decking delivery">
<img class="tile-image" src="biz-5.png" alt="Biz Performance mobile van loaded with marine decking materials">
<div class="tile-caption"><span>Mobile Delivery</span></div>
</button>
</div>
</section>
<section id="colors" class="colors-section">
<p class="section-eyebrow">Colors Available</p>
<h2 class="section-title">CHOOSE YOUR<br><span class="aqua">COLOR</span></h2>
<p class="section-body">Popular marine decking tones and accents. Final availability can be confirmed during the quote.</p>
<div class="swatch-grid">
<div class="swatch"><div class="swatch-color" style="background:#111"></div><div class="swatch-name">Midnight Black</div></div>
<div class="swatch"><div class="swatch-color" style="background:#f3eee5"></div><div class="swatch-name">Pearl White</div></div>
<div class="swatch"><div class="swatch-color" style="background:#8b6f5e"></div><div class="swatch-name">Teak Sand</div></div>
<div class="swatch"><div class="swatch-color" style="background:#c8a882"></div><div class="swatch-name">Light Teak</div></div>
<div class="swatch"><div class="swatch-color" style="background:#4a3728"></div><div class="swatch-name">Dark Walnut</div></div>
<div class="swatch"><div class="swatch-color" style="background:#2d5a8e"></div><div class="swatch-name">Ocean Blue</div></div>
<div class="swatch"><div class="swatch-color" style="background:#1a3a2a"></div><div class="swatch-name">Forest Green</div></div>
<div class="swatch"><div class="swatch-color" style="background:#8b1a1a"></div><div class="swatch-name">Burgundy Red</div></div>
<div class="swatch"><div class="swatch-color" style="background:#57585c"></div><div class="swatch-name">Gunmetal Gray</div></div>
<div class="swatch"><div class="swatch-color" style="background:#d4a017"></div><div class="swatch-name">Gold Sand</div></div>
<div class="swatch"><div class="swatch-color" style="background:#ff2b7f"></div><div class="swatch-name">Hot Pink</div></div>
<div class="swatch"><div class="swatch-color" style="background:#00d7e6"></div><div class="swatch-name">Aqua Cyan</div></div>
</div>
</section>
<section id="patterns" class="patterns-section">
<p class="section-eyebrow">Patterns Available</p>
<h2 class="section-title">PICK YOUR<br><span class="accent">PATTERN</span></h2>
<p class="section-body">Decking can be kept simple or turned into a custom focal point with panel direction, logo work, contrast lines, and decorative cuts.</p>
<div class="pattern-grid">
<div class="pattern-card"><div class="tile-pattern pattern-plank"></div><div class="pattern-name">Classic Plank</div></div>
<div class="pattern-card"><div class="tile-pattern pattern-diamond"></div><div class="pattern-name">Diamond Cut</div></div>
<div class="pattern-card"><div class="tile-pattern pattern-herringbone"></div><div class="pattern-name">Herringbone</div></div>
<div class="pattern-card"><div class="tile-pattern pattern-honeycomb"></div><div class="pattern-name">Honeycomb</div></div>
<div class="pattern-card"><div class="tile-pattern pattern-race"></div><div class="pattern-name">Racing Stripes</div></div>
<div class="pattern-card"><div class="tile-pattern" style="background:linear-gradient(135deg,#202027 25%,#0f0f13 25% 50%,#202027 50% 75%,#0f0f13 75%);background-size:48px 48px"></div><div class="pattern-name">Basket Weave</div></div>
<div class="pattern-card"><div class="tile-pattern pattern-wave"></div><div class="pattern-name">Wave Lines</div></div>
<div class="pattern-card"><div class="tile-pattern" style="background:radial-gradient(circle at 50% 50%,rgba(0,215,230,.65) 0 7px,transparent 8px),#15151b;background-size:42px 42px"></div><div class="pattern-name">Full Custom</div></div>
</div>
</section>
<section id="service-areas" class="service-areas-section">
<p class="section-eyebrow">Service Areas</p>
<h2 class="section-title">SOUTH FLORIDA<br><span class="aqua">MOBILE SERVICE</span></h2>
<p class="section-body">Mobile marine decking appointments are available across South Florida. Share your location and boat details in the form and we will confirm scheduling.</p>
<div class="service-areas-grid">
<div class="service-area-card">
<div class="service-area-name">Miami-Dade</div>
<div class="service-area-label">South Coverage</div>
<p class="service-area-copy">Dockside and marina visits for boaters throughout Miami-Dade and nearby areas.</p>
</div>
<div class="service-area-card">
<div class="service-area-name">Broward</div>
<div class="service-area-label">Central Coverage</div>
<p class="service-area-copy">Mobile measurements and installs for Broward boat owners, storage yards, and marinas.</p>
</div>
<div class="service-area-card">
<div class="service-area-name">Palm Beach</div>
<div class="service-area-label">North Coverage</div>
<p class="service-area-copy">Available for qualifying marine decking projects across Palm Beach County.</p>
</div>
</div>
</section>
<section id="contact" class="contact-section">
<div>
<p class="section-eyebrow">Get In Touch</p>
<h2 class="section-title">REQUEST A<br><span class="accent">QUOTE</span></h2>
<p class="section-body" style="margin-bottom: 3rem;">
Call, text, email, or send the form with your boat details. Photos help with a faster estimate.
</p>
<div class="contact-info">
<div class="contact-row">
<svg class="contact-icon" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12 19.79 19.79 0 0 1 1.61 3.38C1.61 2.18 2.6 1 3.8 1h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L7.91 8.91a16 16 0 0 0 6.06 6.06l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>
<div>
<div class="contact-label">Phone / Text</div>
<a class="contact-value" href="tel:+19547083798">954-708-3798</a>
</div>
</div>
<div class="contact-row">
<svg class="contact-icon" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
<div>
<div class="contact-label">Email</div>
<a class="contact-value" href="mailto:[email protected]">[email protected]</a>
</div>
</div>
<div class="contact-row">
<svg class="contact-icon" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M21 10c0 7-9 13-9 13S3 17 3 10a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
<div>
<div class="contact-label">Location</div>
<span class="contact-value">South Florida</span>
</div>
</div>
<div class="social-row">
<a class="social-btn" href="https://instagram.com/Biz_PMD" target="_blank" rel="noopener">
<svg width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><rect x="2" y="2" width="20" height="20" rx="5"/><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"/><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"/></svg>
@Biz_PMD
</a>
<a class="social-btn" href="https://marineperformance.biz" target="_blank" rel="noopener">
<svg width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 0 1 0 20"/><path d="M12 2a15.3 15.3 0 0 0 0 20"/></svg>
Marineperformance.Biz
</a>
</div>
</div>
</div>
<div>
<div class="quote-card">
<div>
<div class="quote-card-title">Book a Quote Appointment</div>
<p class="quote-card-copy">Choose a day and time, add your boat details, attach optional photos, and confirm the request before it is sent.</p>
</div>
<div class="quote-steps" aria-label="Quote request steps">
<div class="quote-step"><span class="quote-step-num">1</span><span>Select a date</span></div>
<div class="quote-step"><span class="quote-step-num">2</span><span>Pick a time slot</span></div>
<div class="quote-step"><span class="quote-step-num">3</span><span>Send boat details</span></div>
<div class="quote-step"><span class="quote-step-num">4</span><span>Confirm request</span></div>
</div>
<button class="btn-primary" type="button" data-open-booking style="width:100%; font-size:0.9rem; padding: 1.05rem;">Schedule Appointment</button>
</div>
</div>
</section>
<footer>
<div class="footer-logo">
<img src="biz-logo.png" alt="Biz Performance Marine Decking">
</div>
<div class="footer-note">South Florida Mobile Marine Decking - [email protected] - 954-708-3798</div>
<div class="footer-note">© 2026 Biz Performance Marine Decking. All rights reserved.</div>
</footer>
<a class="sticky-call-cta" href="tel:+19547083798" aria-hidden="true" tabindex="-1">
<span class="sticky-call-icon" aria-hidden="true">
<svg width="20" height="20" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12 19.79 19.79 0 0 1 1.61 3.38C1.61 2.18 2.6 1 3.8 1h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L7.91 8.91a16 16 0 0 0 6.06 6.06l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>
</span>
<span class="sticky-call-copy">
<span class="sticky-call-label">Call or Text</span>
<span class="sticky-call-number">954-708-3798</span>
</span>
</a>
<div class="booking-modal-overlay" id="bookingModal" role="dialog" aria-modal="true" aria-labelledby="bookingTitle" aria-hidden="true">
<div class="booking-modal">
<div class="booking-modal-head">
<h3 id="bookingTitle">Book Appointment</h3>
<button class="booking-modal-close" type="button" aria-label="Close booking form">×</button>
</div>
<div class="booking-modal-body">
<div class="step-indicator" id="stepIndicator"></div>
<div class="step active" id="step1">
<div class="step-title">Select a Date</div>
<div class="date-nav">
<button type="button" data-week-dir="-1" aria-label="Previous week">‹</button>
<span class="date-display" id="dateDisplay"></span>
<button type="button" data-week-dir="1" aria-label="Next week">›</button>
</div>
<div class="timeslots" id="datePicker"></div>
</div>
<div class="step" id="step2">
<div class="step-title">Select a Time Slot</div>
<p class="quote-card-copy" style="margin-bottom:1rem;">All times shown in Eastern Time.</p>
<div class="timeslots" id="timePicker"></div>
</div>
<div class="step" id="step3">
<div class="step-title">Your Information</div>
<div class="form-group">
<label class="form-label" for="clientName">Name <span class="req">*</span></label>
<input type="text" class="form-input" id="clientName" placeholder="Your full name" required>
</div>
<div class="form-group">
<label class="form-label" for="clientPhone">Phone <span class="req">*</span></label>
<input type="tel" class="form-input" id="clientPhone" placeholder="(954) 000-0000" required>
</div>
<div class="form-group">
<label class="form-label" for="clientEmail">Email <span style="color:var(--mist);font-size:.65rem">(optional)</span></label>
<input type="email" class="form-input" id="clientEmail" placeholder="[email protected]">
</div>
<div class="form-group">
<label class="form-label" for="clientDesc">What do you need? <span class="req">*</span></label>
<textarea class="form-textarea" id="clientDesc" placeholder="Describe your boat, the decking you want, and any patterns or colors you are interested in." required></textarea>
</div>
<div class="form-group">
<label class="form-label" for="appointmentPhotos">Attach Photos <span style="color:var(--mist);font-size:.65rem">(optional)</span></label>
<label class="file-upload" for="appointmentPhotos">
<p>Click to upload photos of your boat or inspiration.</p>
<p><span>Browse files</span> - JPG or PNG</p>
</label>
<input type="file" id="appointmentPhotos" accept="image/*" multiple style="display:none">
<div class="photo-preview-grid" id="photoPreviewGrid"></div>
</div>
</div>
<div class="step" id="step4">
<div class="step-title">Confirm Appointment</div>
<div class="confirm-box" id="confirmDetails"></div>
<p class="quote-card-copy">By confirming, your request will be sent and the team will follow up by phone to confirm details before your appointment.</p>
</div>
<div class="step" id="step5">
<div class="success-box">
<div class="success-icon">OK</div>
<h3>You're Booked</h3>
<p>Your appointment request has been submitted. We will follow up by phone to confirm the details.</p>
<p style="margin-top:1rem;">Questions? <a href="tel:+19547083798" style="color:var(--aqua);text-decoration:none;">Call 954-708-3798</a></p>
</div>
</div>
<div class="modal-footer" id="modalFooter">
<button class="btn-ghost" id="btnBack" type="button" style="display:none;padding:10px 24px;font-size:.85rem;">Back</button>
<button class="btn-primary" id="btnNext" type="button" style="padding:10px 28px;font-size:.85rem;">Next</button>
</div>
</div>
</div>
</div>
<div class="image-modal" id="image-modal" role="dialog" aria-modal="true" aria-hidden="true">
<button class="image-modal-close" type="button" aria-label="Close full screen image">×</button>
<img id="image-modal-img" src="" alt="">
</div>
<script>
const bookingModal = document.getElementById('bookingModal');
const bookingCloseButton = document.querySelector('.booking-modal-close');
const bookingNextButton = document.getElementById('btnNext');
const bookingBackButton = document.getElementById('btnBack');
const appointmentPhotos = document.getElementById('appointmentPhotos');
const photoPreviewGrid = document.getElementById('photoPreviewGrid');
const bookingTimes = ['8:00 AM', '9:00 AM', '10:00 AM', '11:00 AM', '12:00 PM', '1:00 PM', '2:00 PM', '3:00 PM', '4:00 PM'];
const unavailableTimeIndexes = [1, 4];
let currentStep = 1;
let weekOffset = 0;
let selectedDate = '';
let selectedTime = '';
let lastBookingFocus = null;
function escapeHtml(value) {
return String(value)
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
function resetBookingFields() {
['clientName', 'clientPhone', 'clientEmail', 'clientDesc'].forEach((id) => {
const field = document.getElementById(id);
if (field) field.value = '';
});
if (appointmentPhotos) appointmentPhotos.value = '';
if (photoPreviewGrid) photoPreviewGrid.innerHTML = '';
if (bookingNextButton) {
bookingNextButton.disabled = false;
bookingNextButton.textContent = 'Next';
}
}
function openBookingModal(event) {
if (event) event.preventDefault();
lastBookingFocus = document.activeElement;
currentStep = 1;
weekOffset = 0;
selectedDate = '';
selectedTime = '';
resetBookingFields();
renderBookingStep();
renderWeek();
bookingModal.classList.add('is-open');
bookingModal.setAttribute('aria-hidden', 'false');
document.body.classList.add('modal-open');
bookingCloseButton.focus();
}
function closeBookingModal() {
bookingModal.classList.remove('is-open');
bookingModal.setAttribute('aria-hidden', 'true');
document.body.classList.remove('modal-open');
if (lastBookingFocus) {
lastBookingFocus.focus();
}
}
function renderBookingStep() {
for (let i = 1; i <= 5; i += 1) {
const step = document.getElementById(`step${i}`);
if (step) step.classList.toggle('active', i === currentStep);
}
const indicator = document.getElementById('stepIndicator');
indicator.innerHTML = '';
for (let i = 1; i <= 4; i += 1) {
const dot = document.createElement('div');
dot.className = `step-dot${i < currentStep ? ' done' : i === currentStep ? ' active' : ''}`;
indicator.appendChild(dot);
}
const footer = document.getElementById('modalFooter');
if (currentStep === 5) {
footer.style.display = 'none';
return;
}
footer.style.display = 'flex';
bookingBackButton.style.display = currentStep > 1 ? 'inline-flex' : 'none';
bookingNextButton.textContent = currentStep === 4 ? 'Confirm Booking' : 'Next';
bookingNextButton.disabled = false;
}
function renderWeek() {
const now = new Date();
now.setDate(now.getDate() + weekOffset * 7);
const datePicker = document.getElementById('datePicker');
const dateDisplay = document.getElementById('dateDisplay');
const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const startOfWeek = new Date(now);
startOfWeek.setDate(now.getDate() - now.getDay());
datePicker.innerHTML = '';
dateDisplay.textContent = `${months[startOfWeek.getMonth()]} ${startOfWeek.getFullYear()}`;
for (let i = 0; i < 7; i += 1) {
const date = new Date(startOfWeek);
date.setDate(startOfWeek.getDate() + i);
const isPast = date < new Date(new Date().setHours(0, 0, 0, 0));
const isSunday = date.getDay() === 0;
const slot = document.createElement('button');
slot.type = 'button';
slot.className = `slot${isPast || isSunday ? ' unavailable' : ''}${selectedDate === date.toDateString() ? ' selected' : ''}`;
slot.textContent = `${days[date.getDay()]} ${date.getDate()}`;
if (!isPast && !isSunday) {
slot.addEventListener('click', () => {
selectedDate = date.toDateString();
selectedTime = '';
document.querySelectorAll('#datePicker .slot').forEach((item) => item.classList.remove('selected'));
slot.classList.add('selected');
});
}
datePicker.appendChild(slot);
}
}
function changeWeek(direction) {
weekOffset += direction;
if (weekOffset < 0) weekOffset = 0;
renderWeek();
}
function renderTimePicker() {
const timePicker = document.getElementById('timePicker');
timePicker.innerHTML = '';
bookingTimes.forEach((time, index) => {
const slot = document.createElement('button');
slot.type = 'button';
slot.className = `slot${unavailableTimeIndexes.includes(index) ? ' unavailable' : ''}${selectedTime === time ? ' selected' : ''}`;
slot.textContent = time;
if (!unavailableTimeIndexes.includes(index)) {
slot.addEventListener('click', () => {
selectedTime = time;
document.querySelectorAll('#timePicker .slot').forEach((item) => item.classList.remove('selected'));
slot.classList.add('selected');
});
}
timePicker.appendChild(slot);
});
}
function renderConfirm() {
const name = document.getElementById('clientName').value.trim();
const phone = document.getElementById('clientPhone').value.trim();
const email = document.getElementById('clientEmail').value.trim();
const desc = document.getElementById('clientDesc').value.trim();
const photoCount = appointmentPhotos.files.length;
const safeDesc = desc.length > 90 ? `${desc.slice(0, 90)}...` : desc;
document.getElementById('confirmDetails').innerHTML = `
<div class="confirm-row"><span class="confirm-label">Date</span><span class="confirm-val">${escapeHtml(selectedDate)}</span></div>
<div class="confirm-row"><span class="confirm-label">Time</span><span class="confirm-val">${escapeHtml(selectedTime)} ET</span></div>
<div class="confirm-row"><span class="confirm-label">Name</span><span class="confirm-val">${escapeHtml(name)}</span></div>
<div class="confirm-row"><span class="confirm-label">Phone</span><span class="confirm-val">${escapeHtml(phone)}</span></div>
${email ? `<div class="confirm-row"><span class="confirm-label">Email</span><span class="confirm-val">${escapeHtml(email)}</span></div>` : ''}
<div class="confirm-row"><span class="confirm-label">Photos</span><span class="confirm-val">${photoCount ? `${photoCount} attached` : 'None'}</span></div>
<div class="confirm-row"><span class="confirm-label">Notes</span><span class="confirm-val">${escapeHtml(safeDesc)}</span></div>
`;
}
function stepNext() {
if (currentStep === 1) {
if (!selectedDate) {
alert('Please select a date.');
return;
}
renderTimePicker();
}
if (currentStep === 2 && !selectedTime) {
alert('Please select a time slot.');
return;
}
if (currentStep === 3) {
const name = document.getElementById('clientName').value.trim();
const phone = document.getElementById('clientPhone').value.trim();
const desc = document.getElementById('clientDesc').value.trim();
if (!name) {
alert('Please enter your name.');
return;
}
if (!phone) {
alert('Please enter your phone number.');
return;
}
if (!desc) {
alert('Please describe what you need.');
return;
}
renderConfirm();
}
if (currentStep === 4) {
submitBooking();
return;
}
currentStep += 1;
renderBookingStep();
}
function stepBack() {
if (currentStep > 1) {
currentStep -= 1;
renderBookingStep();
}
}
function submitBooking() {
const payload = {
name: document.getElementById('clientName').value.trim(),
phone: document.getElementById('clientPhone').value.trim(),
email: document.getElementById('clientEmail').value.trim() || 'Not provided',
date: selectedDate,
time: `${selectedTime} ET`,
description: document.getElementById('clientDesc').value.trim(),
photo_count: appointmentPhotos.files.length,
_subject: 'New Appointment Request - Biz Performance Marine Decking'
};
bookingNextButton.disabled = true;
bookingNextButton.textContent = 'Sending...';
fetch('https://formspree.io/f/mjgppgrp', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
body: JSON.stringify(payload)
}).finally(() => {
currentStep = 5;
renderBookingStep();
});
}
document.querySelectorAll('[data-open-booking]').forEach((control) => {
control.addEventListener('click', openBookingModal);
});
bookingCloseButton.addEventListener('click', closeBookingModal);
bookingBackButton.addEventListener('click', stepBack);
bookingNextButton.addEventListener('click', stepNext);
document.querySelectorAll('[data-week-dir]').forEach((control) => {
control.addEventListener('click', () => {
changeWeek(Number(control.getAttribute('data-week-dir')));
});
});
bookingModal.addEventListener('click', (event) => {
if (event.target === bookingModal) {
closeBookingModal();
}
});
appointmentPhotos.addEventListener('change', () => {
photoPreviewGrid.innerHTML = '';
Array.from(appointmentPhotos.files).forEach((file) => {
const image = document.createElement('img');
image.src = URL.createObjectURL(file);
image.alt = file.name;
photoPreviewGrid.appendChild(image);
});
});
const siteNav = document.querySelector('nav');
const navToggle = document.querySelector('.nav-toggle');
const primaryNavigation = document.getElementById('primary-navigation');
const heroSection = document.getElementById('hero');
const siteFooter = document.querySelector('footer');
const stickyCallCta = document.querySelector('.sticky-call-cta');
const navSectionLinks = Array.from(document.querySelectorAll('.nav-links a[href^="#"]'));
const navSections = navSectionLinks
.map((link) => ({ link, section: document.querySelector(link.getAttribute('href')) }))
.filter(({ section }) => section);
function syncMobileNavA11y() {
const isMobileNav = window.matchMedia('(max-width: 980px)').matches;
primaryNavigation.setAttribute('aria-hidden', String(isMobileNav && !siteNav.classList.contains('is-open')));
}
function setMobileNav(open) {
siteNav.classList.toggle('is-open', open);
navToggle.setAttribute('aria-expanded', String(open));
navToggle.setAttribute('aria-label', open ? 'Close navigation' : 'Open navigation');
syncMobileNavA11y();
}
function updateStickyCallCta() {
const isPastHero = heroSection.getBoundingClientRect().bottom <= 0;
const isFooterVisible = siteFooter.getBoundingClientRect().top < window.innerHeight;
const shouldShow = isPastHero && !isFooterVisible;
stickyCallCta.classList.toggle('is-visible', shouldShow);
stickyCallCta.setAttribute('aria-hidden', String(!shouldShow));
stickyCallCta.tabIndex = shouldShow ? 0 : -1;
}
function setActiveNavLink(activeId) {
navSections.forEach(({ link, section }) => {
const isActive = section.id === activeId;
link.classList.toggle('is-active', isActive);
if (isActive) {
link.setAttribute('aria-current', 'location');
} else {
link.removeAttribute('aria-current');
}
});
}
function updateActiveNavLink() {
const navOffset = siteNav.offsetHeight + 24;
const isAtPageEnd = window.innerHeight + window.scrollY >= document.documentElement.scrollHeight - 2;
let activeId = '';
navSections.forEach(({ section }) => {
if (section.getBoundingClientRect().top <= navOffset) {
activeId = section.id;
}
});
if (isAtPageEnd && navSections.length) {
activeId = navSections[navSections.length - 1].section.id;
}
setActiveNavLink(activeId);
siteNav.classList.toggle('is-scrolled', window.scrollY > 40);
updateStickyCallCta();
}
navToggle.addEventListener('click', () => {
setMobileNav(!siteNav.classList.contains('is-open'));
});
document.querySelectorAll('.nav-links a, .nav-cta').forEach((link) => {
link.addEventListener('click', () => {
const href = link.getAttribute('href') || '';
const targetId = href.startsWith('#') ? href.slice(1) : '';
if (targetId) {
setActiveNavLink(targetId);
}
setMobileNav(false);
});
});
window.addEventListener('scroll', updateActiveNavLink, { passive: true });
window.addEventListener('resize', () => {
updateActiveNavLink();
syncMobileNavA11y();
updateStickyCallCta();
});
window.addEventListener('load', updateActiveNavLink);
updateActiveNavLink();
syncMobileNavA11y();
const modal = document.getElementById('image-modal');
const modalImage = document.getElementById('image-modal-img');
const closeModalButton = modal.querySelector('.image-modal-close');
let lastFocusedElement = null;
function openImageModal(image) {
lastFocusedElement = document.activeElement;
modalImage.src = image.currentSrc || image.src;
modalImage.alt = image.alt;
modal.classList.add('is-open');
modal.setAttribute('aria-hidden', 'false');
document.body.classList.add('modal-open');
closeModalButton.focus();
}
function closeImageModal() {
modal.classList.remove('is-open');
modal.setAttribute('aria-hidden', 'true');
document.body.classList.remove('modal-open');
modalImage.removeAttribute('src');
modalImage.alt = '';
if (lastFocusedElement) {
lastFocusedElement.focus();
}
}
document.querySelectorAll('.project-tile').forEach((tile) => {
const image = tile.querySelector('.tile-image');
if (!image) {
return;
}
tile.addEventListener('click', () => {
openImageModal(image);
});
tile.addEventListener('keydown', (event) => {
if (event.key === 'Enter' || event.key === ' ') {
event.preventDefault();
openImageModal(image);
}
});
});
closeModalButton.addEventListener('click', closeImageModal);
modal.addEventListener('click', (event) => {
if (event.target === modal) {
closeImageModal();
}
});
document.addEventListener('keydown', (event) => {
if (event.key !== 'Escape') {
return;
}
if (modal.classList.contains('is-open')) {
closeImageModal();
}
if (bookingModal.classList.contains('is-open')) {
closeBookingModal();
}
if (siteNav.classList.contains('is-open')) {
setMobileNav(false);
navToggle.focus();
}
});
</script>
</body>
</html>