Full Free Step by Step Window Cleaning Service Plans Guide
Getting Started · 5 min read read · By daniilsells
Learn how to sell window cleaning service plans door to door and from ads, price them right, sign customers up with card on file, and build a recurring revenue business.
Window Cleaning Service Plans — Blueworks Learning Center
:root {
--bg: #f4f6fb;
--surface: #ffffff;
--surface2: #eef1f8;
--brand: #1a56db;
--brand-light: #dce9ff;
--accent2: #10b981;
--accent3: #f59e0b;
--text: #0f172a;
--text-2: #334155;
--text-3: #64748b;
--border: #e2e8f0;
--shadow: 0 2px 16px rgba(26,86,219,0.07);
--radius: 14px;
--radius-sm: 9px;
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: 'Inter', sans-serif;
background: var(--bg);
color: var(--text);
font-size: 15px;
line-height: 1.7;
}
/* ── HERO ── */
.hero {
background: linear-gradient(135deg, #1a56db 0%, #1e40af 60%, #0ea5e9 100%);
padding: 4.5rem 2rem 3.5rem;
text-align: center;
position: relative;
overflow: hidden;
}
.hero::before {
content: '';
position: absolute;
inset: 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'%3E%3Ccircle cx='30' cy='30' r='2' fill='%23ffffff' fill-opacity='0.04'/%3E%3C/g%3E%3C/svg%3E");
pointer-events: none;
}
.hero-badge {
display: inline-block;
background: rgba(255,255,255,0.15);
border: 1px solid rgba(255,255,255,0.25);
color: #bfdbfe;
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
padding: 0.3rem 0.9rem;
border-radius: 100px;
margin-bottom: 1.1rem;
}
.hero h1 {
font-size: clamp(1.8rem, 4.5vw, 2.9rem);
font-weight: 800;
color: #fff;
line-height: 1.15;
max-width: 640px;
margin: 0 auto 0.9rem;
letter-spacing: -0.03em;
}
.hero p {
color: rgba(255,255,255,0.8);
max-width: 520px;
margin: 0 auto 2rem;
font-size: 1rem;
}
.hero-actions { display: flex; gap: 0.85rem; justify-content: center; flex-wrap: wrap; }
.btn-primary {
background: #fff;
color: var(--brand);
font-weight: 700;
font-size: 0.9rem;
padding: 0.7rem 1.6rem;
border-radius: 9px;
text-decoration: none;
box-shadow: 0 4px 14px rgba(0,0,0,0.12);
transition: transform 0.15s, box-shadow 0.15s;
}
.btn-primary:hover { transform: translateY(-1px); box-shadow: 0 7px 20px rgba(0,0,0,0.16); }
.btn-outline {
background: transparent;
color: #fff;
font-weight: 600;
font-size: 0.9rem;
padding: 0.7rem 1.6rem;
border-radius: 9px;
text-decoration: none;
border: 2px solid rgba(255,255,255,0.38);
transition: background 0.2s;
}
.btn-outline:hover { background: rgba(255,255,255,0.1); }
/* ── LAYOUT ── */
.container {
max-width: 860px;
margin: 0 auto;
padding: 0 1.25rem;
}
/* ── TOC ── */
.toc-card {
background: var(--surface);
border-radius: var(--radius);
box-shadow: var(--shadow);
padding: 1.8rem;
margin: 2rem auto;
}
.toc-card h2 {
font-size: 0.72rem;
font-weight: 700;
color: var(--brand);
text-transform: uppercase;
letter-spacing: 0.09em;
margin-bottom: 0.9rem;
}
.toc-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 0.35rem;
}
.toc-grid a {
color: var(--text-2);
text-decoration: none;
font-size: 0.875rem;
padding: 0.4rem 0.65rem;
border-radius: 7px;
display: flex;
align-items: center;
gap: 0.45rem;
transition: background 0.15s, color 0.15s;
}
.toc-grid a::before { content: '→'; color: var(--brand); font-size: 0.82rem; flex-shrink: 0; }
.toc-grid a:hover { background: var(--brand-light); color: var(--brand); }
/* ── SECTIONS ── */
.section {
background: var(--surface);
border-radius: var(--radius);
box-shadow: var(--shadow);
padding: 2.2rem;
margin-bottom: 1.5rem;
scroll-margin-top: 24px;
}
.section-tag {
display: inline-flex;
align-items: center;
background: var(--brand-light);
color: var(--brand);
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.07em;
text-transform: uppercase;
padding: 0.28rem 0.7rem;
border-radius: 100px;
margin-bottom: 0.75rem;
}
h2.section-title {
font-size: 1.4rem;
font-weight: 700;
color: var(--text);
letter-spacing: -0.02em;
margin-bottom: 0.9rem;
line-height: 1.25;
}
h3.sub-title {
font-size: 1rem;
font-weight: 700;
color: var(--text);
margin: 1.6rem 0 0.5rem;
}
p { color: var(--text-2); margin-bottom: 0.85rem; }
p:last-child { margin-bottom: 0; }
/* ── BENEFIT GRID ── */
.benefit-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
gap: 0.85rem;
margin: 1.3rem 0;
}
.benefit-card {
background: var(--bg);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
padding: 1rem 1.1rem;
}
.benefit-card .icon { font-size: 1.3rem; margin-bottom: 0.35rem; }
.benefit-card strong { font-size: 0.9rem; font-weight: 700; color: var(--text); display: block; margin-bottom: 0.2rem; }
.benefit-card p { font-size: 0.82rem; margin: 0; color: var(--text-3); }
/* ── COMPARE TABLE ── */
.compare-table {
width: 100%;
border-collapse: collapse;
margin: 1.3rem 0;
border-radius: 10px;
overflow: hidden;
font-size: 0.9rem;
}
.compare-table th {
padding: 0.9rem 1.1rem;
font-weight: 700;
font-size: 0.87rem;
text-align: left;
}
.compare-table th:first-child { background: var(--surface2); color: var(--text-2); border-right: 2px solid var(--border); }
.compare-table th:last-child { background: var(--brand); color: #fff; }
.compare-table td { padding: 0.9rem 1.1rem; vertical-align: top; border-top: 1px solid var(--border); }
.compare-table td:first-child { background: var(--surface2); border-right: 2px solid var(--border); color: var(--text-2); }
.compare-table td:last-child { background: #f0f7ff; }
.profit {
display: inline-block;
background: var(--brand);
color: #fff;
font-weight: 700;
padding: 0.18rem 0.55rem;
border-radius: 5px;
font-size: 0.82rem;
margin-top: 0.25rem;
}
.profit.green { background: var(--accent2); }
/* ── PRICING TABLE ── */
.pricing-table {
width: 100%;
border-collapse: collapse;
margin: 1.3rem 0;
font-size: 0.875rem;
border-radius: 10px;
overflow: hidden;
}
.pricing-table th {
background: var(--brand);
color: #fff;
font-weight: 700;
padding: 0.75rem 1rem;
text-align: left;
font-size: 0.85rem;
}
.pricing-table td {
padding: 0.65rem 1rem;
border-bottom: 1px solid var(--border);
color: var(--text-2);
}
.pricing-table tr:last-child td { border-bottom: none; }
.pricing-table tr:nth-child(even) td { background: var(--bg); }
.plan-badge {
display: inline-block;
font-size: 0.74rem;
font-weight: 600;
padding: 0.12rem 0.45rem;
border-radius: 5px;
margin-left: 0.25rem;
}
.quarterly { background: #dbeafe; color: var(--brand); }
.biannual { background: #d1fae5; color: #065f46; }
/* ── QUOTE CALLOUT ── */
.quote-callout {
background: linear-gradient(135deg, #1a56db 0%, #1e40af 100%);
border-radius: var(--radius);
padding: 1.8rem 2rem;
color: #fff;
position: relative;
overflow: hidden;
margin: 1.8rem 0;
}
.quote-callout::before {
content: '"';
position: absolute;
top: -1rem;
left: 1rem;
font-size: 7rem;
color: rgba(255,255,255,0.07);
font-family: Georgia, serif;
line-height: 1;
pointer-events: none;
}
.quote-callout p {
color: rgba(255,255,255,0.9);
font-size: 0.95rem;
font-style: italic;
margin-bottom: 0.65rem;
position: relative;
}
.quote-callout .attribution {
font-size: 0.8rem;
color: #93c5fd;
font-style: normal;
font-weight: 600;
margin-top: 0.4rem;
display: flex;
align-items: center;
gap: 0.35rem;
}
.quote-callout .attribution::before { content: '⚡'; }
/* ── BLUEWORKS TIP ── */
.bw-tip {
background: #f0f7ff;
border: 1.5px solid #bfdbfe;
border-left: 4px solid var(--brand);
border-radius: var(--radius-sm);
padding: 1rem 1.2rem;
margin: 1.1rem 0;
display: flex;
gap: 0.75rem;
align-items: flex-start;
}
.bw-tip .tip-icon { font-size: 1.1rem; flex-shrink: 0; margin-top: 0.1rem; }
.bw-tip .tip-body strong {
display: block;
font-size: 0.78rem;
font-weight: 700;
color: var(--brand);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 0.22rem;
}
.bw-tip .tip-body p { font-size: 0.875rem; margin: 0; color: var(--text-2); }
/* ── SCRIPT BOX ── */
.script-box {
background: #0f172a;
border-radius: var(--radius-sm);
padding: 1.3rem 1.6rem;
margin: 1rem 0;
}
.script-box .label {
font-size: 0.7rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
color: #475569;
margin-bottom: 0.5rem;
}
.script-box p {
color: #e2e8f0;
font-size: 0.92rem;
font-style: italic;
margin: 0;
line-height: 1.65;
}
.script-box p + p { margin-top: 0.5rem; }
/* ── STEP LIST ── */
.step-list { list-style: none; margin: 0.9rem 0; display: flex; flex-direction: column; gap: 0.5rem; }
.step-list li {
display: flex;
align-items: flex-start;
gap: 0.75rem;
padding: 0.65rem 0.9rem;
background: var(--bg);
border-radius: var(--radius-sm);
border: 1px solid var(--border);
color: var(--text-2);
font-size: 0.9rem;
}
.step-list li .num {
background: var(--brand);
color: #fff;
font-weight: 700;
font-size: 0.74rem;
width: 20px;
height: 20px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
margin-top: 0.1rem;
}
/* ── CHECK LIST ── */
.check-list { list-style: none; margin: 0.75rem 0; display: flex; flex-direction: column; gap: 0.4rem; }
.check-list li {
display: flex;
align-items: flex-start;
gap: 0.55rem;
color: var(--text-2);
font-size: 0.9rem;
}
.check-list li::before { content: '✓'; color: var(--accent2); font-weight: 700; flex-shrink: 0; margin-top: 0.05rem; }
/* ── OBJECTION BOX ── */
.objection-box {
border: 1.5px solid var(--accent3);
border-radius: var(--radius-sm);
overflow: hidden;
margin: 1.1rem 0;
}
.objection-box .obj-header {
background: #fffbeb;
padding: 0.65rem 1.1rem;
display: flex;
align-items: center;
gap: 0.45rem;
font-size: 0.82rem;
font-weight: 700;
color: #92400e;
}
.objection-box .obj-body { padding: 0.9rem 1.1rem; font-size: 0.9rem; color: var(--text-2); }
/* ── KPI CARDS ── */
.kpi-row {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
gap: 0.85rem;
margin: 1.1rem 0;
}
.kpi-card {
background: var(--bg);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
padding: 1rem;
text-align: center;
}
.kpi-card .kpi-icon { font-size: 1.5rem; margin-bottom: 0.35rem; }
.kpi-card .kpi-label { font-size: 0.82rem; font-weight: 700; color: var(--text); }
.kpi-card .kpi-desc { font-size: 0.77rem; color: var(--text-3); margin-top: 0.15rem; }
/* ── HIGHLIGHT BOX ── */
.highlight-box {
background: linear-gradient(135deg, #f0fdf4, #dcfce7);
border: 1.5px solid #86efac;
border-radius: var(--radius-sm);
padding: 1.1rem 1.3rem;
margin: 1.1rem 0;
}
.highlight-box p { color: #166534; font-size: 0.9rem; margin: 0; }
.highlight-box strong { color: #14532d; }
/* ── CTA BANNER ── */
.cta-banner {
background: linear-gradient(135deg, var(--brand) 0%, #1e40af 100%);
border-radius: var(--radius);
padding: 2.8rem 2rem;
text-align: center;
margin-bottom: 2.5rem;
}
.cta-banner h2 {…