.cc-nav {
--cc-blush: #F4B6C2;
--cc-blush-soft: #FCE8EC;
--cc-charcoal: #2B2B2B;
--cc-charcoal-soft: #4A4A4A;
--cc-white: #FFFFFF;
--cc-cream: #F5F5F5;
--cc-border: rgba(43, 43, 43, 0.08);
--cc-font-body: 'Outfit', system-ui, sans-serif;
--cc-font-display: 'Fraunces', Georgia, serif;
position: sticky;
top: 0;
z-index: 100;
background: var(--cc-white);
border-bottom: 1px solid var(--cc-border);
font-family: var(--cc-font-body);
box-shadow: 0 1px 0 rgba(0,0,0,0.02);
}
.cc-nav__inner {
max-width: 1280px;
margin: 0 auto;
padding: 18px 32px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 32px;
}
.cc-nav__brand {
display: flex;
align-items: center;
gap: 10px;
text-decoration: none;
color: var(--cc-charcoal);
font-family: var(--cc-font-display);
font-weight: 600;
font-size: 22px;
letter-spacing: -0.01em;
}
.cc-nav__brand-mark {
width: 44px;
height: 44px;
display: block;
object-fit: contain;
flex-shrink: 0;
}
.cc-nav__links {
list-style: none;
margin: 0;
padding: 0;
display: flex;
align-items: center;
gap: 4px;
}
.cc-nav__link {
position: relative;
display: inline-block;
padding: 10px 14px;
color: var(--cc-charcoal);
text-decoration: none;
font-size: 15px;
font-weight: 500;
border-radius: 8px;
transition: background-color 0.18s ease, color 0.18s ease;
}
.cc-nav__link:hover { background: var(--cc-blush-soft); }
.cc-nav__link[aria-current="page"] {
background: var(--cc-blush-soft);
color: var(--cc-charcoal);
}
/* Services dropdown */
.cc-nav__dropdown { position: relative; }
.cc-nav__dropdown-toggle::after {
content: "";
display: inline-block;
margin-left: 6px;
width: 6px;
height: 6px;
border-right: 1.5px solid currentColor;
border-bottom: 1.5px solid currentColor;
transform: translateY(-2px) rotate(45deg);
transition: transform 0.18s ease;
}
.cc-nav__dropdown:hover .cc-nav__dropdown-toggle::after,
.cc-nav__dropdown:focus-within .cc-nav__dropdown-toggle::after {
transform: translateY(1px) rotate(225deg);
}
.cc-nav__dropdown-menu {
position: absolute;
top: calc(100% + 8px);
left: 0;
min-width: 280px;
background: var(--cc-white);
border: 1px solid var(--cc-border);
border-radius: 12px;
padding: 8px;
box-shadow: 0 12px 32px rgba(43, 43, 43, 0.10);
list-style: none;
margin: 0;
opacity: 0;
visibility: hidden;
transform: translateY(-4px);
transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s ease;
}
.cc-nav__dropdown:hover .cc-nav__dropdown-menu,
.cc-nav__dropdown:focus-within .cc-nav__dropdown-menu {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.cc-nav__dropdown-link {
display: block;
padding: 10px 12px;
border-radius: 8px;
text-decoration: none;
color: var(--cc-charcoal);
font-size: 14px;
font-weight: 500;
transition: background-color 0.15s ease;
}
.cc-nav__dropdown-link:hover { background: var(--cc-cream); }
.cc-nav__dropdown-link span {
display: block;
font-weight: 400;
font-size: 12.5px;
color: var(--cc-charcoal-soft);
margin-top: 2px;
}
/* CTA */
.cc-nav__cta {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 11px 20px;
background: var(--cc-charcoal);
color: var(--cc-white);
text-decoration: none;
font-size: 14px;
font-weight: 600;
border-radius: 999px;
transition: background-color 0.18s ease, transform 0.18s ease;
white-space: nowrap;
}
.cc-nav__cta:hover { background: #1a1a1a; transform: translateY(-1px); }
/* Mobile toggle */
.cc-nav__toggle {
display: none;
background: none;
border: 1px solid var(--cc-border);
width: 40px;
height: 40px;
border-radius: 8px;
cursor: pointer;
padding: 0;
align-items: center;
justify-content: center;
}
.cc-nav__toggle-bar,
.cc-nav__toggle-bar::before,
.cc-nav__toggle-bar::after {
display: block;
width: 18px;
height: 2px;
background: var(--cc-charcoal);
border-radius: 2px;
position: relative;
transition: transform 0.2s ease, top 0.2s ease;
}
.cc-nav__toggle-bar::before,
.cc-nav__toggle-bar::after {
content: "";
position: absolute;
left: 0;
}
.cc-nav__toggle-bar::before { top: -6px; }
.cc-nav__toggle-bar::after { top: 6px; }
/* Mobile breakpoint */
@media (max-width: 960px) {
.cc-nav__inner { padding: 14px 20px; }
.cc-nav__toggle { display: inline-flex; }
.cc-nav__links {
position: absolute;
top: 100%;
left: 0;
right: 0;
flex-direction: column;
align-items: stretch;
gap: 0;
padding: 12px 16px 20px;
background: var(--cc-white);
border-bottom: 1px solid var(--cc-border);
box-shadow: 0 12px 24px rgba(43,43,43,0.06);
max-height: 0;
overflow: hidden;
transition: max-height 0.25s ease;
}
.cc-nav[data-open="true"] .cc-nav__links { max-height: 80vh; overflow-y: auto; }
.cc-nav__link { padding: 12px 14px; border-radius: 8px; }
.cc-nav__dropdown-menu {
position: static;
box-shadow: none;
border: none;
padding: 0 0 0 12px;
opacity: 1;
visibility: visible;
transform: none;
min-width: 0;
}
.cc-nav__dropdown-toggle::after { display: none; }
.cc-nav__cta { display: none; }
.cc-nav__cta--mobile { display: inline-flex; margin-top: 8px; }
}
@media (min-width: 961px) {
.cc-nav__cta--mobile { display: none; }
}
Marketing for Contractors | Contractor Digital Marketing Services Vancouver WA
:root {
--primary: #F4B6C2;
--primary-light: #F8CDD5;
--primary-dark: #E89BAA;
--accent: #2B2B2B;
--accent-hover: #444444;
--cream: #F5F5F5;
--cream-dark: #EBEBEB;
--text-dark: #2B2B2B;
--text-muted: #666666;
--white: #FFFFFF;
--shadow-sm: 0 2px 8px rgba(43, 43, 43, 0.06);
--shadow-md: 0 8px 24px rgba(43, 43, 43, 0.10);
--shadow-lg: 0 16px 48px rgba(43, 43, 43, 0.14);
--radius-sm: 8px;
--radius-md: 16px;
--radius-lg: 24px;
--transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
font-family: 'Outfit', sans-serif;
background: var(--cream);
color: var(--text-dark);
line-height: 1.7;
overflow-x: hidden;
}
h1, h2, h3, h4 {
font-family: 'Fraunces', serif;
line-height: 1.2;
}
a {
text-decoration: none;
color: inherit;
transition: var(--transition);
}
img {
max-width: 100%;
height: auto;
}
.container {
max-width: 1280px;
margin: 0 auto;
padding: 0 24px;
}
/* Navigation */
.nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
background: rgba(253, 248, 243, 0.95);
backdrop-filter: blur(20px);
border-bottom: 1px solid rgba(27, 77, 62, 0.08);
transition: var(--transition);
}
.nav.scrolled {
box-shadow: var(--shadow-sm);
}
.nav-inner {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 24px;
max-width: 1280px;
margin: 0 auto;
}
.logo {
display: flex;
align-items: center;
gap: 12px;
font-family: 'Fraunces', serif;
font-size: 1.5rem;
font-weight: 700;
color: var(--primary);
}
.logo-icon {
width: 48px;
height: 48px;
background: var(--primary);
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
}
.nav-links {
display: flex;
align-items: center;
gap: 8px;
list-style: none;
}
.nav-links a {
padding: 10px 16px;
border-radius: var(--radius-sm);
font-weight: 500;
font-size: 0.95rem;
color: var(--text-dark);
}
.nav-links a:hover {
background: var(--primary);
color: var(--white);
}
.nav-links .dropdown {
position: relative;
}
.nav-links .dropdown-content {
position: absolute;
top: 100%;
left: 0;
background: var(--white);
border-radius: var(--radius-md);
box-shadow: var(--shadow-lg);
min-width: 260px;
opacity: 0;
visibility: hidden;
transform: translateY(10px);
transition: var(--transition);
padding: 8px;
}
.nav-links .dropdown:hover .dropdown-content {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.dropdown-content a {
display: block;
padding: 12px 16px;
border-radius: var(--radius-sm);
}
.dropdown-content a:hover {
background: var(--cream);
color: var(--primary);
}
.nav-cta {
background: var(--primary) !important;
color: var(--accent) !important;
font-weight: 600 !important;
}
.nav-cta:hover {
background: var(--primary-dark) !important;
transform: translateY(-2px);
}
.mobile-toggle {
display: none;
flex-direction: column;
gap: 5px;
cursor: pointer;
padding: 8px;
}
.mobile-toggle span {
width: 24px;
height: 2px;
background: var(--primary);
transition: var(--transition);
}
/* Hero Section */
.hero {
min-height: 100vh;
display: flex;
align-items: center;
padding: 120px 0 80px;
position: relative;
overflow: hidden;
background: linear-gradient(135deg, var(--cream) 0%, var(--white) 50%, var(--cream) 100%);
}
.hero::before {
content: '';
position: absolute;
top: -50%;
right: -20%;
width: 80%;
height: 150%;
background: radial-gradient(ellipse, rgba(244, 182, 194, 0.15) 0%, transparent 70%);
pointer-events: none;
}
.hero::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 200px;
background: linear-gradient(to top, var(--cream), transparent);
pointer-events: none;
}
.hero-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 60px;
align-items: center;
}
.hero-content {
position: relative;
z-index: 2;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 8px;
background: var(--accent);
color: var(--white);
padding: 10px 20px;
border-radius: 50px;
font-size: 0.875rem;
font-weight: 600;
margin-bottom: 24px;
animation: fadeInUp 0.6s ease;
text-transform: uppercase;
letter-spacing: 1px;
}
.hero-badge::before {
content: 'π§';
}
.hero h1 {
font-size: clamp(2.5rem, 5vw, 3.75rem);
color: var(--accent);
margin-bottom: 24px;
animation: fadeInUp 0.6s ease 0.1s both;
}
.hero h1 span {
color: var(--primary-dark);
position: relative;
}
.hero h1 span::after {
content: '';
position: absolute;
bottom: 4px;
left: 0;
right: 0;
height: 12px;
background: var(--primary-light);
z-index: -1;
transform: skewX(-3deg);
}
.hero-text {
font-size: 1.2rem;
color: var(--text-muted);
margin-bottom: 32px;
max-width: 540px;
animation: fadeInUp 0.6s ease 0.2s both;
line-height: 1.8;
}
.hero-buttons {
display: flex;
gap: 16px;
flex-wrap: wrap;
animation: fadeInUp 0.6s ease 0.3s both;
}
.btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 16px 32px;
border-radius: var(--radius-sm);
font-weight: 600;
font-size: 1rem;
cursor: pointer;
border: none;
transition: var(--transition);
}
.btn-primary {
background: var(--accent);
color: var(--white);
box-shadow: 0 4px 16px rgba(43, 43, 43, 0.2);
}
.btn-primary:hover {
background: var(--accent-hover);
transform: translateY(-3px);
box-shadow: 0 8px 24px rgba(43, 43, 43, 0.25);
}
.btn-secondary {
background: var(--white);
color: var(--primary-dark);
border: 2px solid var(--primary);
}
.btn-secondary:hover {
background: var(--primary);
color: var(--white);
}
.hero-visual {
position: relative;
animation: fadeInRight 0.8s ease 0.4s both;
}
.hero-image-wrapper {
position: relative;
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: var(--shadow-lg);
}
.hero-image-placeholder {
width: 100%;
aspect-ratio: 4/3;
background: linear-gradient(135deg, var(--accent) 0%, var(--accent-hover) 100%);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: var(--white);
font-size: 1.25rem;
font-weight: 500;
position: relative;
overflow: hidden;
}
.hero-image-placeholder::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.05'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
}
.hero-image-placeholder span {
font-size: 5rem;
margin-bottom: 16px;
position: relative;
z-index: 2;
}
.hero-image-placeholder p {
position: relative;
z-index: 2;
text-align: center;
padding: 0 24px;
}
.hero-trust {
display: flex;
align-items: center;
gap: 32px;
margin-top: 48px;
padding-top: 32px;
border-top: 1px solid rgba(43, 43, 43, 0.1);
animation: fadeInUp 0.6s ease 0.5s both;
}
.trust-item {
display: flex;
align-items: center;
gap: 12px;
}
.trust-icon {
width: 48px;
height: 48px;
background: var(--primary-light);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
}
.trust-text {
font-size: 0.9rem;
}
.trust-text strong {
display: block;
font-size: 1.25rem;
color: var(--accent);
}
/* Breadcrumbs */
.breadcrumbs {
padding: 24px 0;
background: var(--white);
border-bottom: 1px solid var(--cream-dark);
}
.breadcrumbs-list {
display: flex;
align-items: center;
gap: 8px;
list-style: none;
font-size: 0.875rem;
}
.breadcrumbs-list a {
color: var(--text-muted);
}
.breadcrumbs-list a:hover {
color: var(--primary-dark);
}
.breadcrumbs-list span {
color: var(--text-muted);
}
.breadcrumbs-list li:last-child {
color: var(--accent);
font-weight: 500;
}
/* Industry Cards Section */
.industries-section {
padding: 100px 0;
background: var(--white);
}
.section-header {
text-align: center;
margin-bottom: 64px;
}
.section-tag {
display: inline-block;
background: rgba(244, 182, 194, 0.2);
color: var(--primary-dark);
padding: 8px 20px;
border-radius: 50px;
font-size: 0.875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: 16px;
}
.section-header h2 {
font-size: clamp(2rem, 4vw, 3rem);
color: var(--accent);
margin-bottom: 16px;
}
.section-header p {
font-size: 1.15rem;
color: var(--text-muted);
max-width: 700px;
margin: 0 auto;
}
.industries-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 32px;
}
.industry-card {
background: var(--cream);
border-radius: var(--radius-lg);
overflow: hidden;
transition: var(--transition);
position: relative;
}
.industry-card:hover {
transform: translateY(-8px);
box-shadow: var(--shadow-lg);
}
.industry-card-image {
aspect-ratio: 16/10;
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: var(--white);
font-size: 4rem;
position: relative;
overflow: hidden;
}
.industry-card-image::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 50%;
background: linear-gradient(to top, rgba(0,0,0,0.2), transparent);
}
.industry-card-content {
padding: 28px;
}
.industry-card-content h3 {
font-size: 1.35rem;
color: var(--accent);
margin-bottom: 12px;
}
.industry-card-content p {
color: var(--text-muted);
margin-bottom: 16px;
font-size: 0.95rem;
line-height: 1.7;
}
.industry-card-keywords {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 20px;
}
.keyword-tag {
background: var(--primary-light);
color: var(--accent);
padding: 4px 12px;
border-radius: 50px;
font-size: 0.75rem;
font-weight: 500;
}
.industry-card-link {
display: inline-flex;
align-items: center;
gap: 8px;
color: var(--primary-dark);
font-weight: 600;
}
.industry-card-link:hover {
gap: 12px;
}
/* Why Contractors Section */
.why-contractors {
padding: 100px 0;
background: var(--cream);
}
.why-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 80px;
align-items: center;
}
.why-content h2 {
font-size: clamp(2rem, 4vw, 2.75rem);
color: var(--accent);
margin-bottom: 24px;
}
.why-content > p {
font-size: 1.1rem;
color: var(--text-muted);
margin-bottom: 40px;
line-height: 1.8;
}
.why-list {
display: flex;
flex-direction: column;
gap: 24px;
}
.why-item {
display: flex;
gap: 20px;
align-items: flex-start;
}
.why-icon {
width: 56px;
height: 56px;
background: var(--primary);
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
flex-shrink: 0;
}
.why-text h4 {
font-family: 'Outfit', sans-serif;
font-size: 1.15rem;
font-weight: 600;
color: var(--accent);
margin-bottom: 4px;
}
.why-text p {
color: var(--text-muted);
font-size: 0.95rem;
}
.why-image {
position: relative;
}
.why-image-wrapper {
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: var(--shadow-lg);
}
.why-placeholder {
width: 100%;
aspect-ratio: 4/5;
background: linear-gradient(135deg, var(--accent) 0%, var(--accent-hover) 100%);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: var(--white);
font-size: 1.25rem;
text-align: center;
padding: 40px;
position: relative;
}
.why-placeholder::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.03'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
}
.why-placeholder span {
font-size: 5rem;
margin-bottom: 24px;
position: relative;
z-index: 2;
}
.why-placeholder p {
position: relative;
z-index: 2;
}
/* Services Overview */
.services-overview {
padding: 100px 0;
background: var(--accent);
color: var(--white);
position: relative;
overflow: hidden;
}
.services-overview::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.03'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
}
.services-overview .section-header h2 {
color: var(--white);
}
.services-overview .section-header p {
color: rgba(255, 255, 255, 0.8);
}
.services-overview .section-tag {
background: rgba(255, 255, 255, 0.15);
color: var(--white);
}
.services-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 24px;
position: relative;
z-index: 2;
}
.service-item {
background: rgba(255, 255, 255, 0.08);
border-radius: var(--radius-md);
padding: 32px 24px;
text-align: center;
transition: var(--transition);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.service-item:hover {
background: rgba(255, 255, 255, 0.12);
transform: translateY(-4px);
border-color: var(--primary);
}
.service-item-icon {
width: 64px;
height: 64px;
background: var(--primary);
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
font-size: 2rem;
margin: 0 auto 20px;
}
.service-item h4 {
font-family: 'Outfit', sans-serif;
font-size: 1.1rem;
font-weight: 600;
margin-bottom: 12px;
}
.service-item p {
font-size: 0.9rem;
opacity: 0.8;
line-height: 1.6;
margin-bottom: 16px;
}
.service-item a {
color: var(--primary);
font-weight: 600;
font-size: 0.9rem;
}
.service-item a:hover {
color: var(--primary-light);
}
/* Pricing Section */
.pricing-section {
padding: 100px 0;
background: var(--white);
}
.pricing-intro {
text-align: center;
max-width: 800px;
margin: 0 auto 64px;
}
.pricing-intro h2 {
font-size: clamp(2rem, 4vw, 2.75rem);
color: var(--accent);
margin-bottom: 20px;
}
.pricing-intro p {
font-size: 1.1rem;
color: var(--text-muted);
line-height: 1.8;
}
.pricing-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 32px;
}
.pricing-card {
background: var(--cream);
border-radius: var(--radius-lg);
padding: 40px;
position: relative;
transition: var(--transition);
border: 2px solid transparent;
}
.pricing-card:hover {
border-color: var(--primary);
transform: translateY(-4px);
}
.pricing-card.featured {
background: var(--accent);
color: var(--white);
}
.pricing-card.featured .pricing-badge {
position: absolute;
top: -12px;
left: 50%;
transform: translateX(-50%);
background: var(--primary);
color: var(--accent);
padding: 6px 20px;
border-radius: 50px;
font-size: 0.75rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
}
.pricing-card h3 {
font-size: 1.5rem;
margin-bottom: 8px;
}
.pricing-card.featured h3 {
color: var(--white);
}
.pricing-card .price {
font-family: 'Fraunces', serif;
font-size: 2.5rem;
font-weight: 700;
margin-bottom: 8px;
}
.pricing-card.featured .price {
color: var(--primary);
}
.pricing-card .price-note {
font-size: 0.875rem;
color: var(--text-muted);
margin-bottom: 24px;
}
.pricing-card.featured .price-note {
color: rgba(255, 255, 255, 0.7);
}
.pricing-features {
list-style: none;
margin-bottom: 32px;
}
.pricing-features li {
padding: 12px 0;
border-bottom: 1px solid rgba(43, 43, 43, 0.1);
display: flex;
align-items: center;
gap: 12px;
font-size: 0.95rem;
}
.pricing-card.featured .pricing-features li {
border-color: rgba(255, 255, 255, 0.1);
}
.pricing-features li::before {
content: 'β';
color: var(--primary-dark);
font-weight: 700;
}
.pricing-card.featured .pricing-features li::before {
color: var(--primary);
}
.pricing-card .btn {
width: 100%;
justify-content: center;
}
.pricing-card.featured .btn-primary {
background: var(--primary);
color: var(--accent);
}
.pricing-card.featured .btn-primary:hover {
background: var(--primary-light);
}
/* Process Section */
.process-section {
padding: 100px 0;
background: var(--cream);
}
.process-timeline {
position: relative;
max-width: 900px;
margin: 0 auto;
}
.process-timeline::before {
content: '';
position: absolute;
left: 50%;
top: 0;
bottom: 0;
width: 2px;
background: var(--primary);
transform: translateX(-50%);
}
.process-step {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 60px;
margin-bottom: 60px;
position: relative;
}
.process-step:nth-child(even) .process-step-content {
order: 2;
text-align: left;
}
.process-step:nth-child(even) .process-step-visual {
order: 1;
}
.process-step-content {
text-align: right;
}
.process-step-number {
width: 56px;
height: 56px;
background: var(--primary);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-family: 'Fraunces', serif;
font-size: 1.5rem;
font-weight: 700;
color: var(--accent);
position: absolute;
left: 50%;
transform: translateX(-50%);
z-index: 2;
box-shadow: var(--shadow-md);
}
.process-step-content h3 {
font-size: 1.5rem;
color: var(--accent);
margin-bottom: 12px;
}
.process-step-content p {
color: var(--text-muted);
line-height: 1.7;
}
.process-step-visual {
display: flex;
align-items: center;
}
.process-icon-large {
width: 100%;
aspect-ratio: 16/10;
background: var(--white);
border-radius: var(--radius-md);
display: flex;
align-items: center;
justify-content: center;
font-size: 4rem;
box-shadow: var(--shadow-sm);
}
/* FAQ Section */
.faq-section {
padding: 100px 0;
background: var(--white);
}
.faq-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 48px;
}
.faq-content h2 {
font-size: clamp(2rem, 4vw, 2.75rem);
color: var(--accent);
margin-bottom: 20px;
}
.faq-content > p {
color: var(--text-muted);
font-size: 1.1rem;
margin-bottom: 32px;
line-height: 1.8;
}
.faq-cta {
background: var(--cream);
border-radius: var(--radius-md);
padding: 32px;
}
.faq-cta h4 {
font-family: 'Outfit', sans-serif;
font-size: 1.25rem;
font-weight: 600;
color: var(--accent);
margin-bottom: 12px;
}
.faq-cta p {
color: var(--text-muted);
margin-bottom: 20px;
}
.faq-list {
display: flex;
flex-direction: column;
gap: 16px;
}
.faq-item {
background: var(--cream);
border-radius: var(--radius-md);
overflow: hidden;
transition: var(--transition);
}
.faq-item.active {
box-shadow: var(--shadow-md);
}
.faq-question {
padding: 24px;
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
font-weight: 600;
color: var(--accent);
}
.faq-question:hover {
color: var(--primary-dark);
}
.faq-toggle {
width: 32px;
height: 32px;
background: var(--white);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
transition: var(--transition);
}
.faq-item.active .faq-toggle {
background: var(--primary);
transform: rotate(45deg);
}
.faq-answer {
padding: 0 24px;
max-height: 0;
overflow: hidden;
transition: all 0.3s ease;
}
.faq-item.active .faq-answer {
padding: 0 24px 24px;
max-height: 500px;
}
.faq-answer p {
color: var(--text-muted);
line-height: 1.7;
}
/* Map Section */
.map-section {
padding: 100px 0;
background: var(--cream);
}
.map-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 60px;
align-items: center;
}
.map-content h2 {
font-size: clamp(2rem, 4vw, 2.75rem);
color: var(--accent);
margin-bottom: 24px;
}
.map-content > p {
font-size: 1.1rem;
color: var(--text-muted);
margin-bottom: 32px;
line-height: 1.8;
}
.contact-info {
display: flex;
flex-direction: column;
gap: 20px;
}
.contact-item {
display: flex;
align-items: center;
gap: 16px;
}
.contact-icon {
width: 48px;
height: 48px;
background: var(--white);
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
}
.contact-text h5 {
font-family: 'Outfit', sans-serif;
font-weight: 600;
color: var(--accent);
font-size: 0.875rem;
margin-bottom: 2px;
}
.contact-text p, .contact-text a {
color: var(--text-muted);
font-size: 1rem;
}
.contact-text a:hover {
color: var(--primary-dark);
}
.map-wrapper {
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: var(--shadow-lg);
height: 450px;
}
.map-wrapper iframe {
width: 100%;
height: 100%;
border: 0;
}
/* CTA Section */
.cta {
padding: 100px 0;
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%);
text-align: center;
position: relative;
overflow: hidden;
}
.cta::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.08'%3E%3Ccircle cx='30' cy='30' r='4'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
}
.cta-content {
position: relative;
z-index: 2;
max-width: 800px;
margin: 0 auto;
}
.cta h2 {
font-size: clamp(2rem, 4vw, 3rem);
color: var(--accent);
margin-bottom: 16px;
}
.cta p {
font-size: 1.2rem;
color: var(--text-dark);
margin-bottom: 40px;
opacity: 0.9;
}
.cta .btn-primary {
background: var(--accent);
font-size: 1.1rem;
padding: 20px 40px;
}
.cta .btn-secondary {
background: transparent;
color: var(--accent);
border-color: var(--accent);
}
.cta .btn-secondary:hover {
background: var(--accent);
color: var(--white);
}
/* Related Services */
.related-services {
padding: 80px 0;
background: var(--white);
}
.related-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 24px;
}
.related-card {
background: var(--cream);
border-radius: var(--radius-md);
padding: 32px 24px;
text-align: center;
transition: var(--transition);
border: 2px solid transparent;
}
.related-card:hover {
border-color: var(--primary);
transform: translateY(-4px);
}
.related-icon {
width: 64px;
height: 64px;
background: var(--primary);
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
font-size: 2rem;
margin: 0 auto 16px;
}
.related-card h4 {
font-family: 'Outfit', sans-serif;
font-size: 1.1rem;
font-weight: 600;
color: var(--accent);
margin-bottom: 8px;
}
.related-card p {
font-size: 0.875rem;
color: var(--text-muted);
margin-bottom: 16px;
}
.related-card a {
color: var(--primary-dark);
font-weight: 600;
font-size: 0.9rem;
}
/* Footer */
.footer {
background: var(--accent);
color: var(--white);
padding: 80px 0 32px;
}
.footer-grid {
display: grid;
grid-template-columns: 2fr 1fr 1fr 1fr;
gap: 48px;
margin-bottom: 48px;
}
.footer-brand {
max-width: 320px;
}
.footer-logo {
display: flex;
align-items: center;
gap: 12px;
font-family: 'Fraunces', serif;
font-size: 1.5rem;
font-weight: 700;
margin-bottom: 20px;
}
.footer-logo .logo-icon {
background: var(--primary);
}
.footer-brand p {
color: rgba(255, 255, 255, 0.7);
margin-bottom: 24px;
line-height: 1.8;
}
.footer-social {
display: flex;
gap: 12px;
}
.social-link {
width: 44px;
height: 44px;
background: rgba(255, 255, 255, 0.1);
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
transition: var(--transition);
}
.social-link:hover {
background: var(--primary);
}
.footer-col h4 {
font-family: 'Outfit', sans-serif;
font-weight: 600;
font-size: 1.1rem;
margin-bottom: 24px;
}
.footer-col ul {
list-style: none;
}
.footer-col li {
margin-bottom: 12px;
}
.footer-col a {
color: rgba(255, 255, 255, 0.7);
transition: var(--transition);
}
.footer-col a:hover {
color: var(--primary);
padding-left: 4px;
}
.footer-bottom {
border-top: 1px solid rgba(255, 255, 255, 0.1);
padding-top: 32px;
display: flex;
justify-content: space-between;
align-items: center;
color: rgba(255, 255, 255, 0.6);
font-size: 0.875rem;
}
.footer-links {
display: flex;
gap: 24px;
}
.footer-links a {
color: rgba(255, 255, 255, 0.6);
}
.footer-links a:hover {
color: var(--white);
}
/* Animations */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeInRight {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
/* Mobile Navigation */
.mobile-nav {
display: none;
position: fixed;
top: 80px;
left: 0;
right: 0;
bottom: 0;
background: var(--cream);
z-index: 999;
padding: 24px;
overflow-y: auto;
}
.mobile-nav.active {
display: block;
}
.mobile-nav ul {
list-style: none;
}
.mobile-nav > ul > li {
border-bottom: 1px solid rgba(27, 77, 62, 0.1);
}
.mobile-nav a {
display: block;
padding: 16px 0;
font-weight: 500;
font-size: 1.1rem;
}
.mobile-nav .mobile-dropdown-content {
padding-left: 20px;
display: none;
}
.mobile-nav .mobile-dropdown-content.active {
display: block;
}
.mobile-nav .mobile-dropdown-content a {
font-size: 1rem;
padding: 12px 0;
color: var(--text-muted);
}
/* Responsive */
@media (max-width: 1024px) {
.hero-grid {
grid-template-columns: 1fr;
gap: 48px;
}
.hero-visual {
order: -1;
}
.industries-grid {
grid-template-columns: repeat(2, 1fr);
}
.why-grid {
grid-template-columns: 1fr;
gap: 48px;
}
.why-image {
order: -1;
}
.services-grid {
grid-template-columns: repeat(2, 1fr);
}
.pricing-grid {
grid-template-columns: 1fr;
}
.process-timeline::before {
left: 28px;
}
.process-step {
grid-template-columns: 1fr;
gap: 24px;
padding-left: 80px;
}
.process-step-number {
left: 28px;
transform: translateX(-50%);
}
.process-step-content,
.process-step:nth-child(even) .process-step-content {
text-align: left;
order: 1;
}
.process-step-visual,
.process-step:nth-child(even) .process-step-visual {
order: 2;
}
.faq-grid {
grid-template-columns: 1fr;
}
.map-grid {
grid-template-columns: 1fr;
gap: 48px;
}
.related-grid {
grid-template-columns: repeat(2, 1fr);
}
.footer-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 768px) {
.nav-links {
display: none;
}
.mobile-toggle {
display: flex;
}
.hero {
min-height: auto;
padding: 120px 0 60px;
}
.hero h1 {
font-size: 2.25rem;
}
.hero-trust {
flex-direction: column;
gap: 16px;
align-items: flex-start;
}
.industries-grid {
grid-template-columns: 1fr;
}
.services-grid {
grid-template-columns: 1fr;
}
.related-grid {
grid-template-columns: 1fr;
}
.footer-grid {
grid-template-columns: 1fr;
}
.footer-bottom {
flex-direction: column;
gap: 16px;
text-align: center;
}
}
Contractor Marketing Specialists
Marketing for Contractors That Generates Leads
Stop chasing leads and start attracting them. Our specialized contractor marketing services help HVAC, roofing, plumbing, electrical, and general contractors in Vancouver, WA build a consistent pipeline of high-quality jobs through proven digital marketing strategies.
π
250%
Avg. Lead Increase
β
50+
Contractors Served
π―
$5M+
Revenue Generated
π§
Hero Image PlaceholderContractor at work or marketing dashboard Dimensions: 800Γ600px
βοΈ
HVAC Marketing Agency
Generate year-round leads for your HVAC business with targeted digital marketing strategies. We help HVAC contractors dominate local search and convert more service calls into booked appointments.
HVAC SEO
AC Repair Leads
Heating Services
Get HVAC Marketing β
π
Roofing Marketing Services
Stand out in the competitive roofing market with proven digital marketing strategies. Our roofing SEO and PPC campaigns generate high-quality leads for residential and commercial roofers.
Roofing SEO
Roof Replacement
Storm Damage
Get Roofing Marketing β
π§
Plumbing Contractor Marketing
Fill your service calendar with qualified plumbing leads. Our marketing for plumbing companies focuses on emergency services, water heater installations, and recurring maintenance contracts.
Plumber SEO
Emergency Plumbing
Drain Cleaning
Get Plumbing Marketing β
β‘
Electrician Marketing Company
Attract more residential and commercial electrical jobs with targeted marketing strategies for electrical contractors. From panel upgrades to EV charger installations, we help you reach customers ready to hire.
Electrician SEO
Electrical Services
Panel Upgrade
Get Electrician Marketing β
π¨
Painting Company Marketing
Showcase your craftsmanship and win more painting projects. Our marketing for painting contractors combines stunning portfolio presentations with targeted local SEO to attract homeowners and property managers.
Painter SEO
Interior Painting
Exterior Painting
Get Painting Marketing β
π¨
Remodeling Contractor Marketing
Win bigger remodeling projects with comprehensive digital marketing. We help remodelers attract homeowners planning kitchen renovations, bathroom remodels, and whole-home transformations.
Remodeler SEO
Kitchen Remodel
Bathroom Renovation
Get Remodeling Marketing β
Why Contractors Trust Us With Their Marketing
Most marketing agencies don't understand the contractor business. They don't know that emergency calls need to be answered immediately, that seasonal demand affects lead flow, or that your reputation is built job by job. We do.
π―
Contractor-Specific Strategies
Our marketing strategies are built specifically for contractor businesses, addressing unique challenges like seasonal demand, emergency services, and local competition.
π
Lead Quality Over Quantity
We focus on generating leads that turn into paying jobs, not just website traffic. Every campaign is optimized for conversions and actual booked appointments.
π
Transparent Reporting
Know exactly where your marketing dollars go with clear monthly reports showing leads generated, cost per lead, and return on investment.
π
Proven Track Record
We've helped over 50 contractors across various trades grow their businesses with digital marketing that actually works.
π
Image PlaceholderMarketing results dashboard or contractor success story Dimensions: 600Γ750px
π
SEO for Contractors
Rank higher on Google for searches like "plumber near me" or "HVAC contractor Vancouver WA" and get found by customers ready to hire.
Learn More β
π°
PPC for Contractors
Get instant visibility with pay-per-click advertising on Google. Only pay when potential customers click on your ads.
Learn More β
π¨
Contractor Websites
Professional, mobile-friendly websites designed to convert visitors into leads with clear calls-to-action and project galleries.
Learn More β
π±
Social Media
Build trust and showcase your work on Facebook and Instagram to reach local homeowners and generate referrals.
Learn More β
Contractor Marketing Pricing
How Much Does Contractor Marketing Cost?
Transparent pricing with no hidden fees. Choose the marketing package that fits your business goals and budget. All packages include dedicated support and monthly performance reports.
Starter
$1,500
per month
Local SEO Optimization
Google Business Profile Management
5 Keywords Targeted
Monthly Performance Report
Email Support
Get Started
Most Popular
Growth
$3,000
per month
Everything in Starter
Google Ads Management
15 Keywords Targeted
Website Optimization
Bi-Weekly Strategy Calls
Review Generation Strategy
Get Started
Dominate
$5,000+
per month
Everything in Growth
Advanced PPC Campaigns
25+ Keywords Targeted
Social Media Management
Weekly Strategy Calls
Dedicated Account Manager
Get Started
1
Business Discovery & Market Analysis
We start by understanding your contractor business, target customers, service area, and competition. This deep dive helps us identify the best marketing strategies for your specific trade and location.
2
Custom Strategy Development
Based on our analysis, we create a tailored marketing strategy that combines SEO, PPC, and web optimization specifically designed for your contractor business and budget.
3
Campaign Implementation
Our team executes your marketing strategy with precision, optimizing your website, launching targeted ad campaigns, and building your online presence to attract qualified leads.
4
Monitor, Optimize & Scale
We continuously track campaign performance, optimize for better results, and scale what's working. You'll receive regular reports showing exactly how your marketing investment is performing.
Frequently Asked Questions About Contractor Marketing
Get answers to the most common questions contractors ask about digital marketing, lead generation, and growing their business online.
Have More Questions?
Schedule a free consultation to discuss your specific marketing needs and goals.
Book Free Consultation
How long does it take to see results from contractor marketing?
+
PPC advertising can generate leads within the first week. SEO typically takes 3-6 months to show significant results, but the leads are often higher quality and more cost-effective in the long run. We recommend a combined approach for the fastest and most sustainable results.
What makes contractor marketing different from regular marketing?
+
Contractor marketing focuses on local search optimization, emergency service keywords, seasonal demand patterns, and building trust through reviews and portfolio showcases. We understand that a roofing company has different needs than a retail store, and we tailor our strategies accordingly.
How do you measure the success of contractor marketing campaigns?
+
We track phone calls, form submissions, website traffic, keyword rankings, and most importantly, actual booked jobs. Our monthly reports show you exactly how many leads came from each channel and what your cost per lead is.
Do I need a new website for contractor marketing to work?
+
Not necessarily. We'll audit your current website and determine if it can be optimized or if a new site would be more effective. Many contractors see great results with strategic updates to their existing website combined with proper SEO and PPC campaigns.
What's the best advertising for contractors?
+
The best advertising for contractors is typically a combination of Google Ads for immediate leads and SEO for long-term organic growth. Google Local Services Ads are also highly effective for many contractor trades. We'll recommend the best mix based on your budget and goals.
Contractor Marketing Services in Vancouver, WA
Based in Vancouver, Washington, we specialize in helping local contractors throughout Clark County, the Portland metro area, and the Pacific Northwest grow their businesses with digital marketing. Whether you're an HVAC contractor in Camas, a roofer in Battle Ground, or a plumber in Vancouver, we understand the local market and know how to reach your ideal customers.
Schedule a Consultation β
Ready to Grow Your Contractor Business?
Get a free marketing audit and discover how our contractor marketing services can help you generate more qualified leads and grow your business.
.cc-footer {
--cc-blush: #F4B6C2;
--cc-charcoal: #2B2B2B;
--cc-white: #FFFFFF;
--cc-cream: #F5F5F5;
--cc-font-body: 'Outfit', system-ui, sans-serif;
--cc-font-display: 'Fraunces', Georgia, serif;
background: var(--cc-charcoal);
color: rgba(255,255,255,0.82);
font-family: var(--cc-font-body);
padding: 72px 32px 32px;
margin-top: 80px;
}
.cc-footer__inner {
max-width: 1280px;
margin: 0 auto;
display: grid;
grid-template-columns: 1.4fr 1fr 1fr 1.2fr;
gap: 56px;
}
.cc-footer__brand {
font-family: var(--cc-font-display);
font-weight: 600;
font-size: 26px;
color: var(--cc-white);
margin: 0 0 14px;
letter-spacing: -0.01em;
}
.cc-footer__tagline {
font-size: 15px;
line-height: 1.6;
color: rgba(255,255,255,0.65);
margin: 0 0 24px;
max-width: 320px;
}
.cc-footer__social {
display: flex;
gap: 10px;
list-style: none;
padding: 0;
margin: 0;
}
.cc-footer__social a {
display: inline-flex;
align-items: center;
justify-content: center;
width: 38px;
height: 38px;
border-radius: 50%;
background: rgba(255,255,255,0.06);
color: rgba(255,255,255,0.85);
text-decoration: none;
transition: background-color 0.2s ease, color 0.2s ease;
}
.cc-footer__social a:hover {
background: var(--cc-blush);
color: var(--cc-charcoal);
}
.cc-footer__social svg { width: 16px; height: 16px; fill: currentColor; }
.cc-footer__col-title {
font-size: 13px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--cc-blush);
margin: 0 0 18px;
}
.cc-footer__list { list-style: none; padding: 0; margin: 0; }
.cc-footer__list li { margin-bottom: 10px; }
.cc-footer__list a {
color: rgba(255,255,255,0.78);
text-decoration: none;
font-size: 15px;
transition: color 0.18s ease;
}
.cc-footer__list a:hover { color: var(--cc-white); }
.cc-footer__contact-line {
display: block;
font-size: 15px;
color: rgba(255,255,255,0.78);
margin-bottom: 10px;
text-decoration: none;
transition: color 0.18s ease;
}
.cc-footer__contact-line:hover { color: var(--cc-white); }
.cc-footer__contact-label {
display: block;
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.08em;
color: rgba(255,255,255,0.45);
margin-bottom: 2px;
}
.cc-footer__bottom {
max-width: 1280px;
margin: 56px auto 0;
padding-top: 24px;
border-top: 1px solid rgba(255,255,255,0.10);
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 16px;
font-size: 13px;
color: rgba(255,255,255,0.55);
}
.cc-footer__bottom a { color: rgba(255,255,255,0.7); text-decoration: none; }
.cc-footer__bottom a:hover { color: var(--cc-white); }
.cc-footer__legal { display: flex; gap: 20px; flex-wrap: wrap; list-style: none; padding: 0; margin: 0; }
@media (max-width: 900px) {
.cc-footer { padding: 56px 20px 28px; }
.cc-footer__inner { grid-template-columns: 1fr 1fr; gap: 40px; }
}
@media (max-width: 540px) {
.cc-footer__inner { grid-template-columns: 1fr; gap: 36px; }
.cc-footer__bottom { justify-content: flex-start; }
}