<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Velly | Digital Marketing Consultancy</title>

<!-- ── FAVICON ── -->
<link rel="icon" type="image/png" href="https://assets.cdn.filesafe.space/f9lSy5daGSbvYUIA7TGc/media/69b346ad74ad4b9ded309aee.png">
<link rel="apple-touch-icon" href="https://assets.cdn.filesafe.space/f9lSy5daGSbvYUIA7TGc/media/69b346ad74ad4b9ded309aee.png">

<!-- ── SEO: PRIMARY META ── -->
<meta name="description" content="Velly is a digital marketing consultancy based in West Palm Beach, FL. We specialize in Google Ads, paid social, lead generation, CRM automation, and reputation management for established businesses. 90-day money-back guarantee.">
<meta name="keywords" content="digital marketing consultancy West Palm Beach, digital marketing agency West Palm Beach, Google Ads West Palm Beach, paid ads Florida, lead generation West Palm Beach, CRM setup Florida, reputation management West Palm Beach, marketing consultant Palm Beach County, paid media agency South Florida, Google Ads management Florida, Meta Ads West Palm Beach, local marketing agency West Palm Beach, marketing agency Boca Raton, marketing agency Palm Beach Gardens, digital marketing consultant Florida">
<meta name="author" content="Velly LLC">
<meta name="robots" content="index, follow">
<meta name="theme-color" content="#0C1520">
<link rel="canonical" href="https://velly.io/">

<!-- ── SEO: OPEN GRAPH (Facebook / LinkedIn) ── -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://velly.io/">
<meta property="og:title" content="Velly | Digital Marketing Consultancy">
<meta property="og:description" content="We find the real problem in your business, build the exact fix, and show you the revenue before and after. Google Ads, paid social, lead generation, and more. Based in West Palm Beach — serving clients nationally.">
<meta property="og:image" content="https://assets.cdn.filesafe.space/f9lSy5daGSbvYUIA7TGc/media/69b346ad74ad4b9ded309aee.png">
<meta property="og:site_name" content="Velly">
<meta property="og:locale" content="en_US">

<!-- ── SEO: TWITTER CARD ── -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Velly | Digital Marketing Consultancy">
<meta name="twitter:description" content="Google Ads, paid social, lead generation, and CRM automation for established businesses. 90-day money-back guarantee. Based in West Palm Beach, FL.">
<meta name="twitter:image" content="https://assets.cdn.filesafe.space/f9lSy5daGSbvYUIA7TGc/media/69b346ad74ad4b9ded309aee.png">

<!-- ── SEO: LOCAL BUSINESS SCHEMA ── -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "name": "Velly LLC",
  "url": "https://velly.io",
  "logo": "https://assets.cdn.filesafe.space/f9lSy5daGSbvYUIA7TGc/media/6a0e6a77d3dfb498edc6633d.svg",
  "image": "https://assets.cdn.filesafe.space/f9lSy5daGSbvYUIA7TGc/media/69b346ad74ad4b9ded309aee.png",
  "description": "Digital marketing consultancy based in West Palm Beach, FL. Specializing in Google Ads, paid social, lead generation, CRM automation, and reputation management for established businesses.",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "West Palm Beach",
    "addressRegion": "FL",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 26.7153,
    "longitude": -80.0534
  },
  "areaServed": [
    { "@type": "City", "name": "West Palm Beach" },
    { "@type": "City", "name": "Boca Raton" },
    { "@type": "City", "name": "Delray Beach" },
    { "@type": "City", "name": "Palm Beach Gardens" },
    { "@type": "City", "name": "Jupiter" },
    { "@type": "State", "name": "Florida" },
    { "@type": "Country", "name": "United States" }
  ],
  "serviceType": [
    "Digital Marketing",
    "Google Ads Management",
    "Meta Ads Management",
    "Lead Generation",
    "CRM Setup and Automation",
    "Reputation Management",
    "Paid Media",
    "Marketing Consulting",
    "Revenue Recovery",
    "Custom Software Development"
  ],
  "priceRange": "$$",
  "sameAs": [
    "https://velly.io"
  ],
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "Digital Marketing Services",
    "itemListElement": [
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Google Ads Management" } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Meta Ads Management" } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "CRM Setup & Automation" } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Lead Generation" } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Reputation Management" } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Marketing Consulting" } }
    ]
  }
}
</script>

<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,600;1,300;1,400;1,600&family=Outfit:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
/* ── RESET ── */
*, *::before, *::after { margin:0; padding:0; box-sizing:border-box; }
html { scroll-behavior:smooth; }

:root {
  --ink:   #0C1520;
  --ink2:  #111e30;
  --paper: #F4F1EB;
  --p2:    #EDE9E1;
  --p3:    #E2DED4;
  --dim:   #8A8478;
  --rule:  #DDD9D0;
  --gold:  #C9A84C;
  --gold2: rgba(201,168,76,0.10);
  --green: #0C7A52;
  --grn2:  rgba(12,122,82,0.08);
  --red:   #B83232;
  --white: #FFFFFF;
}

body {
  font-family: 'Outfit', sans-serif;
  background: var(--paper);
  color: var(--ink);
  font-size: 16px;
  line-height: 1.6;
}

/* ── NAV ── */
nav {
  position: fixed;
  top: 20px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 999;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  padding: 10px 16px 10px 20px;
  background: rgba(244,241,235,0.92);
  backdrop-filter: blur(24px);
  -webkit-backdrop-filter: blur(24px);
  border: 1px solid rgba(201,168,76,0.22);
  border-radius: 50px;
  box-shadow: 0 4px 32px rgba(12,21,32,0.12), 0 0 0 1px rgba(255,255,255,0.5) inset;
  transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
  white-space: nowrap;
  max-width: calc(100vw - 48px);
}
nav.scrolled {
  background: rgba(244,241,235,0.97);
  box-shadow: 0 8px 48px rgba(12,21,32,0.18), 0 0 0 1px rgba(255,255,255,0.6) inset;
  border-color: rgba(201,168,76,0.35);
  top: 14px;
}
.nav-logo img { height: 34px; display: block; }
.nav-links {
  display: flex;
  align-items: center;
  gap: 24px;
  list-style: none;
}
.nav-links a {
  font-size: 13px;
  color: var(--ink);
  text-decoration: none;
  font-weight: 500;
  opacity: 0.65;
  transition: opacity 0.2s;
}
.nav-links a:hover { opacity: 1; }
.nav-book {
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.3px;
  text-decoration: none;
  padding: 9px 20px;
  background: linear-gradient(135deg, #C9A84C 0%, #e8c96a 100%);
  color: var(--ink);
  border-radius: 50px;
  box-shadow: 0 2px 16px rgba(201,168,76,0.45);
  transition: all 0.2s;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.nav-book::after { content: '→'; font-size: 11px; }
.nav-book:hover { box-shadow: 0 4px 24px rgba(201,168,76,0.65); transform: translateY(-1px); }

/* ── HERO ── */
.hero {
  min-height: 100vh;
  background: var(--ink);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 140px 52px 100px;
  position: relative;
  overflow: hidden;
  text-align: center;
}
.hero::before {
  content: '';
  position: absolute;
  top: 15%; left: 50%;
  transform: translateX(-50%);
  width: 800px; height: 400px;
  background: radial-gradient(ellipse, rgba(201,168,76,0.10) 0%, rgba(60,100,220,0.05) 40%, transparent 70%);
  pointer-events: none;
  animation: glowPulse 6s ease-in-out infinite;
}
.hero::after {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 0;
  background: radial-gradient(ellipse 100% 60% at 50% 0%, rgba(255,255,255,0.02) 0%, transparent 60%);
  pointer-events: none;
}
@keyframes glowPulse {
  0%, 100% { opacity: 1; transform: translateX(-50%) scale(1); }
  50%       { opacity: 0.7; transform: translateX(-50%) scale(1.05); }
}
.hero-content {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: center;
  max-width: 760px;
}
.hero-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: rgba(255,255,255,0.70);
  margin-bottom: 36px;
  animation: fadeUp 0.8s ease 0.1s both;
}
.hero-h1 {
  font-family: 'Cormorant Garamond', serif;
  font-size: clamp(64px, 9.5vw, 120px);
  font-weight: 300;
  line-height: 0.95;
  letter-spacing: -2.5px;
  color: var(--white);
  margin-bottom: 32px;
  animation: fadeUp 0.8s ease 0.2s both;
}
.hero-h1 em { font-style: italic; font-weight: 300; color: rgba(255,255,255,0.55); }
.hero-h1 .g { color: var(--gold); font-style: normal; }
.hero-sub {
  font-size: 17px;
  color: rgba(255,255,255,0.85);
  line-height: 1.75;
  font-weight: 300;
  max-width: 500px;
  margin-bottom: 40px;
  animation: fadeUp 0.8s ease 0.3s both;
}
.hero-cta-group {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;
  margin-bottom: 72px;
  animation: fadeUp 0.8s ease 0.4s both;
}
.hero-btn {
  background: linear-gradient(135deg, #C9A84C 0%, #e8c96a 60%, #C9A84C 100%);
  background-size: 200% 100%;
  color: var(--ink);
  font-size: 15px;
  font-weight: 700;
  letter-spacing: 0.3px;
  text-decoration: none;
  padding: 16px 44px;
  border-radius: 50px;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  box-shadow: 0 4px 40px rgba(201,168,76,0.55), 0 0 0 1px rgba(201,168,76,0.3) inset;
  transition: all 0.25s ease;
}
.hero-btn::after { content: '→'; font-size: 16px; transition: transform 0.2s; }
.hero-btn:hover {
  box-shadow: 0 8px 60px rgba(201,168,76,0.75), 0 0 0 1px rgba(201,168,76,0.4) inset;
  transform: translateY(-2px);
}
.hero-btn:hover::after { transform: translateX(5px); }
.hero-guarantee-badge {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 10px 22px;
  background: rgba(201,168,76,0.12);
  border: 1px solid rgba(201,168,76,0.40);
  border-radius: 50px;
  font-size: 13px;
  font-weight: 600;
  color: rgba(255,255,255,0.95);
  letter-spacing: 0.3px;
}
.hero-guarantee-badge .badge-icon {
  font-size: 15px;
  color: var(--gold);
}

/* ── DIAGNOSTIC CARD ── */
.diag-card {
  width: 100%;
  max-width: 580px;
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: 20px;
  box-shadow: 0 40px 100px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.04), inset 0 1px 0 rgba(255,255,255,0.06);
  overflow: hidden;
  animation: fadeUp 0.9s ease 0.55s both;
  position: relative;
  z-index: 2;
}
.diag-header {
  background: rgba(255,255,255,0.04);
  border-bottom: 1px solid rgba(255,255,255,0.07);
  padding: 12px 20px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.diag-dots { display: flex; gap: 6px; }
.diag-dot { width: 9px; height: 9px; border-radius: 50%; background: rgba(255,255,255,0.1); }
.diag-title-bar {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: rgba(255,255,255,0.25);
}
.diag-body { padding: 0; }
.diag-row {
  display: grid;
  grid-template-columns: 28px 1fr auto;
  gap: 0 16px;
  padding: 16px 20px;
  border-bottom: 1px solid rgba(255,255,255,0.05);
  align-items: start;
  opacity: 0;
  animation: fadeUp 0.5s ease forwards;
}
.diag-row:last-child { border-bottom: none; }
.diag-row:nth-child(1) { animation-delay: 0.8s; }
.diag-row:nth-child(2) { animation-delay: 1.0s; }
.diag-row:nth-child(3) { animation-delay: 1.2s; }
.diag-row:nth-child(4) { animation-delay: 1.4s; }
.diag-n { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: rgba(255,255,255,0.18); padding-top: 2px; }
.diag-row-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 8.5px; letter-spacing: 1.5px; text-transform: uppercase;
  color: rgba(255,255,255,0.25); margin-bottom: 4px;
}
.diag-row-val { font-size: 13px; color: rgba(255,255,255,0.88); line-height: 1.5; font-weight: 300; }
.diag-tag {
  font-family: 'JetBrains Mono', monospace;
  font-size: 8px; letter-spacing: 1px; text-transform: uppercase;
  padding: 3px 8px; border-radius: 2px; white-space: nowrap; margin-top: 2px; align-self: start;
}
.tag-assumed  { background: rgba(255,255,255,0.06); color: rgba(255,255,255,0.3); }
.tag-cause    { background: rgba(201,168,76,0.15); color: var(--gold); }
.tag-fixed    { background: rgba(12,138,90,0.15); color: #2ed8a0; }
.tag-measured { background: rgba(60,120,220,0.15); color: #7eb8ff; }
.diag-footer {
  background: rgba(255,255,255,0.02);
  border-top: 1px solid rgba(255,255,255,0.06);
  padding: 10px 20px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.diag-footer-l { font-family: 'JetBrains Mono', monospace; font-size: 8px; letter-spacing: 1.5px; text-transform: uppercase; color: rgba(255,255,255,0.15); }
.diag-footer-r { font-size: 12px; color: rgba(255,255,255,0.2); font-weight: 300; }

/* ── MAIN SECTIONS ── */
.section { max-width: 1100px; margin: 0 auto; padding: 96px 56px; }
.divider { height: 1px; background: var(--rule); margin: 0 56px; }
.mono {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px; letter-spacing: 2.5px; text-transform: uppercase;
  color: var(--dim); margin-bottom: 20px;
}
.display {
  font-family: 'Cormorant Garamond', serif;
  font-size: clamp(40px, 5vw, 64px);
  font-weight: 400; line-height: 1.05;
  letter-spacing: -0.5px; color: var(--ink);
}
.display em { font-style: italic; color: var(--dim); }

/* ── ABOUT ── */
.about-grid {
  display: grid; grid-template-columns: 1fr 1fr;
  gap: 80px; margin-top: 56px; align-items: start;
}
.about-text p {
  font-size: 16px; color: #2A2825;
  line-height: 1.85; margin-bottom: 20px; font-weight: 300;
}
.about-text p:last-child { margin-bottom: 0; }
.pull-quote {
  font-family: 'Cormorant Garamond', serif;
  font-size: 26px; font-weight: 400; font-style: italic;
  line-height: 1.45; color: var(--ink);
  border-left: 2px solid var(--gold);
  padding-left: 28px; margin-bottom: 36px;
}
.about-items { display: flex; flex-direction: column; }
.about-item {
  display: flex; justify-content: space-between; align-items: baseline;
  padding: 14px 0; border-bottom: 1px solid var(--rule); font-size: 14px;
}
.about-item:first-child { border-top: 1px solid var(--rule); }
.about-item-label { color: var(--ink); font-weight: 500; }
.about-item-value { color: var(--dim); font-size: 13px; }

/* team strip */
.team-strip {
  display: flex;
  gap: 0;
  margin-top: 56px;
  border: 1px solid var(--rule);
  background: var(--white);
  overflow: hidden;
}
.team-member {
  flex: 1;
  padding: 32px 36px;
  border-right: 1px solid var(--rule);
  position: relative;
}
.team-member:last-child { border-right: none; }
.team-member-eyebrow {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px; letter-spacing: 2px; text-transform: uppercase;
  color: var(--dim); margin-bottom: 10px;
}
.team-member-name {
  font-family: 'Cormorant Garamond', serif;
  font-size: 28px; font-weight: 400; color: var(--ink);
  margin-bottom: 6px; letter-spacing: -0.3px;
}
.team-member-role {
  font-size: 12px; color: var(--dim); margin-bottom: 16px; font-weight: 400;
}
.team-member-bio {
  font-size: 13.5px; color: #2A2825; line-height: 1.75; font-weight: 300;
}
.team-location {
  display: flex; align-items: center; gap: 6px;
  margin-top: 16px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px; letter-spacing: 1.5px; text-transform: uppercase;
  color: var(--dim);
}
.team-location::before { content: '◎'; font-size: 10px; color: var(--gold); }

/* ── PROCESS ── */
.process-dark { background: var(--ink); }
.process-inner { max-width: 1100px; margin: 0 auto; padding: 96px 56px; }
.process-inner .mono   { color: rgba(255,255,255,0.65); }
.process-inner .display{ color: var(--white); }
.process-inner .display em { color: rgba(255,255,255,0.55); }
.steps {
  display: grid; grid-template-columns: 1fr 1fr 1fr;
  gap: 16px; margin-top: 64px;
}
.step {
  padding: 40px 36px;
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: 0 24px 0 24px;
  background: rgba(255,255,255,0.02);
}
.step:last-child { border-right: none; }
.step:nth-child(2) { border-radius: 24px 0 24px 0; }
.step-num {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px; letter-spacing: 2px; color: var(--gold);
  margin-bottom: 20px; text-transform: uppercase;
}
.step-title {
  font-family: 'Cormorant Garamond', serif;
  font-size: 32px; font-weight: 400; color: var(--white);
  line-height: 1.15; margin-bottom: 16px; letter-spacing: -0.3px;
}
.step-body { font-size: 14px; color: rgba(255,255,255,0.78); line-height: 1.8; font-weight: 300; }

/* ── PROOF ── */
.proof-grid {
  display: grid; grid-template-columns: 1fr 1fr;
  gap: 16px; margin-top: 56px;
}
.proof-card {
  background: var(--white);
  padding: 44px 40px;
  border-radius: 24px 6px 24px 6px;
  box-shadow: 0 2px 20px rgba(12,21,32,0.06);
}
.proof-q {
  font-family: 'Cormorant Garamond', serif;
  font-size: 22px; font-style: italic; font-weight: 400;
  color: var(--ink); line-height: 1.55; margin-bottom: 32px;
}
.proof-by { padding-top: 24px; border-top: 1px solid var(--rule); }
.proof-name { font-size: 14px; font-weight: 600; color: var(--ink); margin-bottom: 2px; }
.proof-role { font-size: 13px; color: var(--dim); margin-bottom: 8px; }
.proof-link {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px; letter-spacing: 1px; color: var(--gold); text-decoration: none;
}

/* ── GUARANTEE ── */
.guarantee {
  background: var(--paper);
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
  position: relative;
  overflow: hidden;
}
.guarantee-inner {
  max-width: 1100px; margin: 0 auto; padding: 96px 56px;
  display: grid; grid-template-columns: 1.2fr 1fr; gap: 96px; align-items: center;
  position: relative; z-index: 2;
}
.guarantee-inner .mono   { color: var(--dim); font-size: 11px; letter-spacing: 2.5px; }
.guarantee-inner .display{ color: var(--ink); margin-bottom: 24px; font-size: clamp(44px,5.5vw,70px); }
.guarantee-inner .display em { color: var(--gold); font-style: italic; }
.guarantee-text p { font-size: 17px; color: #4a4640; line-height: 1.85; font-weight: 300; }
.g-list {
  display: flex; flex-direction: column;
  border: 1px solid rgba(201,168,76,0.30);
  border-radius: 20px;
  overflow: hidden;
  background: var(--white);
  box-shadow: 0 4px 32px rgba(12,21,32,0.06);
}
.g-list-item {
  display: flex; gap: 16px; padding: 20px 24px;
  border-bottom: 1px solid var(--rule);
  font-size: 15px; color: var(--ink);
  line-height: 1.5; font-weight: 400; align-items: flex-start;
}
.g-list-item:last-child { border-bottom: none; }
.g-check { color: var(--gold); flex-shrink: 0; font-size: 16px; font-weight: 700; }

/* ── PLAN BUILDER BREAK SECTION ── */
.pb-break {
  background: #07101C;
  position: relative;
  overflow: hidden;
}
/* dot grid */
.pb-break::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image: radial-gradient(rgba(201,168,76,0.12) 1px, transparent 1px);
  background-size: 32px 32px;
  pointer-events: none;
}
/* gold top edge */
.pb-break::after {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  background: linear-gradient(90deg, transparent, var(--gold) 25%, var(--gold) 75%, transparent);
}
.pb-break-header {
  position: relative;
  z-index: 2;
  text-align: center;
  padding: 88px 56px 56px;
  max-width: 1320px;
  margin: 0 auto;
}
.pb-break-eyebrow {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px; letter-spacing: 3px; text-transform: uppercase;
  color: var(--gold); margin-bottom: 20px;
}
.pb-break-title {
  font-family: 'Cormorant Garamond', serif;
  font-size: clamp(44px, 6vw, 80px);
  font-weight: 300; color: var(--white);
  line-height: 1.0; letter-spacing: -1.5px;
  margin-bottom: 20px;
}
.pb-break-title em { font-style: italic; color: rgba(255,255,255,0.55); }
.pb-break-sub {
  font-size: 16px; color: rgba(255,255,255,0.78);
  line-height: 1.75; max-width: 560px; margin: 0 auto 20px;
  font-weight: 300;
}
.pb-zero-banner {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(255,255,255,0.18);
  padding: 11px 24px;
  border-radius: 50px;
  font-size: 14px;
  color: rgba(255,255,255,0.85);
  font-weight: 300;
}
.pb-zero-banner strong { color: var(--white); font-weight: 700; }
.pb-zero-icon { font-size: 14px; }

/* ── PLAN BUILDER CSS (scoped within .pb-break) ── */
.pb-layout {
  position: relative;
  z-index: 2;
  max-width: 1320px;
  margin: 0 auto;
  padding: 0 60px 80px;
  display: grid;
  grid-template-columns: 1fr 360px;
  gap: 44px;
  align-items: start;
}
/* step intro */
.step-intro {
  background: rgba(255,255,255,0.03);
  border-left: 3px solid var(--gold);
  padding: 20px 24px;
  margin-bottom: 36px;
}
.step-intro-title {
  font-family: 'Cormorant Garamond', serif;
  font-size: 21px; font-weight: 400; color: var(--white); margin-bottom: 6px;
}
.step-intro-body { font-size: 14px; color: rgba(255,255,255,0.75); line-height: 1.65; font-weight: 300; }
/* consult card */
.consult-card {
  background: rgba(255,255,255,0.03);
  border: 2px solid var(--gold);
  border-radius: 20px 4px 20px 4px;
  padding: 24px 28px; margin-bottom: 40px;
  display: flex; align-items: center; justify-content: space-between;
  gap: 24px; position: relative; overflow: hidden;
}
.consult-card::before {
  content: ''; position: absolute; top:-40px; right:-40px;
  width: 200px; height: 200px;
  background: radial-gradient(circle, rgba(201,168,76,0.08) 0%, transparent 65%);
  pointer-events: none;
}
.consult-eyebrow {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px; letter-spacing: 2px; text-transform: uppercase;
  color: var(--gold); margin-bottom: 8px; font-weight: 600;
}
.consult-title {
  font-family: 'Cormorant Garamond', serif;
  font-size: 27px; font-weight: 400; color: var(--white);
  margin-bottom: 6px; line-height: 1.1;
}
.consult-desc { font-size: 14px; color: rgba(255,255,255,0.78); line-height: 1.65; font-weight: 300; max-width: 480px; }
.consult-right { text-align: right; flex-shrink: 0; }
.consult-price {
  font-family: 'Cormorant Garamond', serif;
  font-size: 44px; font-weight: 600; color: var(--gold); line-height: 1; margin-bottom: 4px;
}
.consult-price-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px; letter-spacing: 2px; text-transform: uppercase; color: rgba(255,255,255,0.28);
}
.consult-tag { display: flex; align-items: center; gap: 6px; margin-top: 10px; justify-content: flex-end; }
.consult-check {
  width: 16px; height: 16px; background: var(--gold);
  display: flex; align-items: center; justify-content: center;
  font-size: 9px; color: var(--ink); font-weight: 700; flex-shrink: 0;
}
.consult-tag-text { font-size: 11px; color: rgba(255,255,255,0.38); }
/* category */
.pb-category { margin-bottom: 40px; }
.cat-header {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 16px; padding-bottom: 14px;
  border-bottom: 1.5px solid rgba(255,255,255,0.15);
  margin-bottom: 16px;
}
.cat-left { display: flex; align-items: baseline; gap: 12px; }
.cat-num {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px; letter-spacing: 2px; color: rgba(255,255,255,0.55);
  text-transform: uppercase; flex-shrink: 0;
}
.cat-title {
  font-family: 'Cormorant Garamond', serif;
  font-size: 24px; font-weight: 600; color: var(--white);
  line-height: 1; letter-spacing: -0.3px;
}
.cat-why { font-size: 12px; color: rgba(255,255,255,0.60); font-weight: 300; font-style: italic; text-align: right; max-width: 260px; line-height: 1.4; }
/* grid */
.svc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.svc-grid.single { grid-template-columns: 1fr; }
/* card */
.svc-card {
  border: 1.5px dashed rgba(255,255,255,0.12);
  background: rgba(255,255,255,0.03);
  border-radius: 14px;
  padding: 20px 22px 18px;
  cursor: pointer;
  transition: border-color .18s, box-shadow .18s, transform .18s, background .18s;
  position: relative; user-select: none;
  display: flex; flex-direction: column;
}
.svc-card:hover {
  border-color: rgba(255,255,255,0.35);
  border-style: solid;
  background: rgba(255,255,255,0.06);
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(0,0,0,0.3);
}
.svc-card.selected {
  border-style: solid;
  border-color: var(--gold);
  background: rgba(201,168,76,0.08);
  transform: translateY(-2px);
  box-shadow: 0 8px 28px rgba(201,168,76,0.15);
}
.svc-card.free-card { border-color: rgba(12,122,82,0.4); }
.svc-card.free-card.selected { border-color: var(--green); }
.svc-card.custom-card { background: rgba(255,255,255,0.02); cursor: pointer; }
.svc-card.custom-card:hover { border-color: rgba(201,168,76,0.5); background: rgba(201,168,76,0.05); }
.svc-card.custom-card.selected { border-color: var(--gold); border-style: solid; background: rgba(201,168,76,0.08); }
/* badge */
.svc-badge {
  position: absolute; top: -1px; left: 16px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px; letter-spacing: 1.5px; text-transform: uppercase;
  padding: 4px 11px; transform: translateY(-50%); z-index: 2; font-weight: 400;
}
.b-pop  { background: var(--green); color: #fff; }
.b-roi  { background: rgba(0,0,0,0.6); color: var(--gold); border: 1.5px solid var(--gold); }
.b-min  { background: var(--red); color: #fff; }
.b-free { background: var(--green); color: #fff; }
.b-cond { background: rgba(12,122,82,0.35); color: #4ecca8; border: 1.5px dashed rgba(12,122,82,0.4); }
.b-cust { background: var(--gold); color: var(--ink); }
/* check */
.svc-check {
  position: absolute; top: 16px; right: 16px;
  width: 20px; height: 20px;
  border: 1.5px solid rgba(255,255,255,0.15);
  display: flex; align-items: center; justify-content: center;
  transition: all .15s; background: transparent; border-radius: 2px;
}
.svc-card.selected .svc-check { background: var(--gold); border-color: var(--gold); }
.svc-cm { font-size: 11px; color: var(--ink); opacity: 0; font-weight: 700; transition: opacity .15s; }
.svc-card.selected .svc-cm { opacity: 1; }
/* text */
.svc-name {
  font-size: 16px; font-weight: 700; color: var(--white);
  padding-right: 30px; margin-bottom: 7px; line-height: 1.3; transition: color .15s;
}
.svc-card.selected .svc-name { color: var(--white); }
.svc-desc {
  font-size: 13.5px; color: rgba(255,255,255,0.72); line-height: 1.65;
  margin-bottom: 14px; font-weight: 300; flex: 1; transition: color .15s;
}
.svc-card.selected .svc-desc { color: rgba(255,255,255,0.85); }
.svc-pricing {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px;
  padding-top: 12px; border-top: 1px solid rgba(255,255,255,0.08);
}
.sp { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: rgba(255,255,255,0.55); letter-spacing: .3px; }
.sp-mo { color: #4ecca8; }
.svc-card.selected .sp-mo { color: #4ecca8; }
.sp-free { color: #4ecca8; font-weight: 600; }
.sp-sep { font-size: 10px; color: rgba(255,255,255,0.15); }
.sp-note { font-size: 11px; color: rgba(255,255,255,0.25); }
.cond-note { font-size: 12px; color: #4ecca8; font-style: italic; margin-top: 4px; }
/* ad spend slider */
.spend-expander { display: none; margin-top: 14px; padding-top: 14px; border-top: 1px solid rgba(255,255,255,0.1); }
.svc-card.selected .spend-expander { display: block; }
.spend-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 8.5px; letter-spacing: 2px; text-transform: uppercase;
  color: rgba(255,255,255,0.3); margin-bottom: 10px;
}
.spend-display { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 12px; }
.spend-amount { font-family: 'Cormorant Garamond', serif; font-size: 28px; font-weight: 600; color: var(--white); line-height: 1; }
.spend-amount span { font-size: 16px; font-weight: 300; opacity: .5; margin-left: 4px; }
.spend-fee-display { text-align: right; }
.spend-fee-val { font-family: 'JetBrains Mono', monospace; font-size: 14px; color: var(--gold); }
.spend-fee-label { font-family: 'JetBrains Mono', monospace; font-size: 8px; letter-spacing: 1.5px; text-transform: uppercase; color: rgba(255,255,255,0.25); margin-top: 2px; }
.spend-pct { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 1px; color: rgba(255,255,255,0.3); margin-top: 2px; text-align: right; }
input[type=range].spend-slider {
  -webkit-appearance: none; width: 100%; height: 3px;
  background: rgba(255,255,255,0.12); outline: none; border-radius: 0; cursor: pointer;
}
input[type=range].spend-slider::-webkit-slider-thumb {
  -webkit-appearance: none; width: 16px; height: 16px;
  background: var(--gold); border-radius: 50%; cursor: pointer; transition: transform .15s;
}
input[type=range].spend-slider::-webkit-slider-thumb:hover { transform: scale(1.2); }
input[type=range].spend-slider::-moz-range-thumb {
  width: 16px; height: 16px; background: var(--gold); border: none; border-radius: 50%; cursor: pointer;
}
.spend-range-labels { display: flex; justify-content: space-between; margin-top: 6px; }
.spend-range-label { font-family: 'JetBrains Mono', monospace; font-size: 8.5px; letter-spacing: .5px; color: rgba(255,255,255,0.2); }
/* custom expand */
.custom-expand { display: none; margin-top: 12px; padding-top: 12px; border-top: 1px solid rgba(255,255,255,0.08); }
.svc-card.selected .custom-expand { display: block; }
.custom-expand-label { font-family: 'JetBrains Mono', monospace; font-size: 8.5px; letter-spacing: 2px; text-transform: uppercase; color: rgba(255,255,255,0.28); margin-bottom: 8px; }
textarea.custom-ta {
  width: 100%; background: rgba(255,255,255,0.05);
  border: 1px solid rgba(255,255,255,0.12);
  color: var(--white); font-family: 'Outfit', sans-serif;
  font-size: 12px; font-weight: 300; line-height: 1.6;
  padding: 10px 12px; resize: vertical; min-height: 80px;
  outline: none; transition: border-color .2s;
}
textarea.custom-ta::placeholder { color: rgba(255,255,255,0.22); }
textarea.custom-ta:focus { border-color: var(--gold); }
/* ── SUMMARY PANEL ── */
.pb-summary {
  position: static; /* desktop: overridden by media query below */
}

/* Desktop: fixed slide-in cart, clamped to section bounds by JS */
@media(min-width: 981px) {
  .pb-summary {
    position: fixed;
    right: -420px;
    top: 100px;
    width: 380px;
    z-index: 90;
    max-height: calc(100vh - 120px);
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: rgba(201,168,76,0.3) transparent;
    transition: right 0.55s cubic-bezier(0.34, 1.56, 0.64, 1);
    padding-bottom: 16px;
  }
  .pb-summary::-webkit-scrollbar { width: 4px; }
  .pb-summary::-webkit-scrollbar-thumb { background: rgba(201,168,76,0.3); border-radius: 4px; }
  .pb-summary.cart-active {
    right: 24px;
  }
}

.sum-card {
  background: rgba(255,255,255,0.04);
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 4px 32px rgba(0,0,0,0.3);
}

/* Mobile cart toggle button */
.cart-toggle {
  display: none;
  background: none;
  border: none;
  cursor: pointer;
  align-items: center;
  gap: 6px;
  padding: 4px 8px;
  border-radius: 8px;
  transition: background .15s;
}
.cart-toggle:hover { background: rgba(255,255,255,0.06); }
.cart-toggle-label {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px; letter-spacing: 1.5px; text-transform: uppercase;
  color: rgba(255,255,255,0.45);
}
.cart-toggle-icon {
  font-size: 10px;
  color: var(--gold);
  transition: transform 0.3s ease;
  display: inline-block;
}
.cart-toggle.open .cart-toggle-icon { transform: rotate(180deg); }

/* Mobile collapsible body */
.sum-card-body {
  /* desktop: always visible, no transition needed */
}
.sum-head {
  background: rgba(255,255,255,0.06);
  padding: 16px 22px;
  display: flex; justify-content: space-between; align-items: center;
  border-bottom: 1px solid rgba(255,255,255,0.08);
}
.sum-head-title {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px; letter-spacing: 2.5px; text-transform: uppercase; color: rgba(255,255,255,0.35);
}
.sum-head-count { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--gold); }
.sum-zero {
  background: rgba(12,122,82,0.1);
  border-bottom: 1px solid rgba(12,122,82,0.2);
  padding: 10px 22px; display: flex; align-items: center; gap: 8px;
}
.sum-zero-icon { font-size: 13px; flex-shrink: 0; }
.sum-zero-text { font-size: 13px; color: #4ecca8; font-weight: 400; line-height: 1.4; }
.sum-zero-text strong { font-weight: 700; }
.sum-consult {
  display: flex; justify-content: space-between; align-items: center;
  padding: 11px 22px; background: rgba(201,168,76,0.08);
  border-bottom: 1px solid rgba(201,168,76,0.15);
}
.sum-consult-name { font-size: 13px; font-weight: 600; color: var(--white); display: flex; align-items: center; gap: 7px; }
.sum-c-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--gold); flex-shrink: 0; }
.sum-consult-price { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: #4ecca8; font-weight: 500; }
.sum-empty { padding: 36px 22px; text-align: center; border-bottom: 1px solid rgba(255,255,255,0.06); }
.sum-empty-icon { font-size: 22px; margin-bottom: 10px; opacity: .2; }
.sum-empty-text { font-size: 14px; color: rgba(255,255,255,0.3); line-height: 1.6; font-weight: 300; }
.sum-items { max-height: 280px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: rgba(255,255,255,0.1) transparent; }
.sum-item {
  display: flex; align-items: flex-start; justify-content: space-between;
  padding: 10px 22px; border-bottom: 1px solid rgba(255,255,255,0.06); gap: 10px;
  animation: slideIn .2s ease both;
}
@keyframes slideIn { from{opacity:0;transform:translateX(6px)} to{opacity:1;transform:translateX(0)} }
.si-name { font-size: 13px; font-weight: 500; color: var(--white); flex: 1; line-height: 1.35; }
.si-price { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: rgba(255,255,255,0.4); text-align: right; flex-shrink: 0; line-height: 1.8; white-space: pre; }
.si-rm { cursor: pointer; color: rgba(255,255,255,0.15); font-size: 16px; line-height: 1; transition: color .15s; flex-shrink: 0; padding: 1px 2px; }
.si-rm:hover { color: var(--red); }
.sum-bundle { display: none; padding: 13px 22px; background: rgba(201,168,76,0.08); border-bottom: 1px solid rgba(201,168,76,0.15); animation: slideIn .25s ease both; }
.sum-bundle.on { display: block; }
.sum-bundle-ey { font-family: 'JetBrains Mono', monospace; font-size: 8px; letter-spacing: 2px; text-transform: uppercase; color: var(--gold); margin-bottom: 3px; }
.sum-bundle-name { font-size: 14px; font-weight: 700; color: var(--white); margin-bottom: 2px; }
.sum-bundle-save { font-size: 13px; color: #4ecca8; font-weight: 500; }
.sum-recos { display: none; padding: 14px 22px; border-bottom: 1px solid rgba(255,255,255,0.06); }
.sum-recos.on { display: block; }
.sum-recos-label { font-family: 'JetBrains Mono', monospace; font-size: 8.5px; letter-spacing: 2px; text-transform: uppercase; color: rgba(255,255,255,0.3); margin-bottom: 9px; }
.reco-chip { display: flex; align-items: center; justify-content: space-between; padding: 8px 12px; background: rgba(255,255,255,0.03); border: 1px dashed rgba(255,255,255,0.12); margin-bottom: 6px; cursor: pointer; transition: all .15s; gap: 8px; }
.reco-chip:last-child { margin-bottom: 0; }
.reco-chip:hover { border-color: var(--gold); background: rgba(201,168,76,0.08); }
.reco-chip-name { font-size: 13px; font-weight: 500; color: var(--white); flex: 1; }
.reco-chip-add { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 1px; color: var(--gold); text-transform: uppercase; white-space: nowrap; flex-shrink: 0; }
.sum-totals { padding: 16px 22px; border-top: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.02); }
.tot-row { display: flex; justify-content: space-between; align-items: baseline; padding: 4px 0; }
.tot-lbl { font-size: 13.5px; color: rgba(255,255,255,0.70); font-weight: 300; }
.tot-val { font-family: 'JetBrains Mono', monospace; font-size: 12.5px; color: var(--white); }
.tot-div { height: 1px; background: rgba(255,255,255,0.08); margin: 8px 0; }
.tot-main { display: flex; justify-content: space-between; align-items: baseline; padding-top: 6px; }
.tot-main-lbl { font-size: 13px; font-weight: 700; color: var(--white); }
.tot-main-val { font-family: 'Cormorant Garamond', serif; font-size: 34px; font-weight: 600; color: var(--white); line-height: 1; }
.tot-mo { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: rgba(255,255,255,0.3); margin-left: 3px; }
.sum-lock { display: none; padding: 10px 22px; background: rgba(255,255,255,0.02); border-top: 1px solid rgba(255,255,255,0.06); align-items: center; gap: 8px; }
.sum-lock.on { display: flex; }
.lock-icon { font-size: 12px; flex-shrink: 0; }
.lock-txt { font-family: 'JetBrains Mono', monospace; font-size: 9.5px; letter-spacing: 1px; text-transform: uppercase; color: rgba(255,255,255,0.3); line-height: 1.6; }
.lock-time { color: var(--white); font-weight: 500; }
.sum-form { padding: 16px 22px; border-top: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.02); display: none; }
.sum-form.on { display: block; }
.form-row { margin-bottom: 10px; }
.form-row:last-child { margin-bottom: 0; }
.form-lbl { font-family: 'JetBrains Mono', monospace; font-size: 9.5px; letter-spacing: 1.5px; text-transform: uppercase; color: rgba(255,255,255,0.35); display: block; margin-bottom: 5px; }
.form-input {
  width: 100%; background: rgba(255,255,255,0.05);
  border: 1px solid rgba(255,255,255,0.12);
  color: var(--white); font-family: 'Outfit', sans-serif;
  font-size: 14px; font-weight: 400;
  padding: 10px 13px; outline: none; transition: border-color .2s;
  -webkit-appearance: none; border-radius: 0;
}
.form-input:focus { border-color: var(--gold); }
.form-input::placeholder { color: rgba(255,255,255,0.18); }
.form-row-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.sum-cta { padding: 0 22px 16px; background: rgba(255,255,255,0.02); }
.cta-btn {
  display: block; width: 100%;
  background: linear-gradient(135deg, #C9A84C 0%, #e8c96a 60%, #C9A84C 100%);
  background-size: 200% 100%;
  color: var(--ink);
  font-size: 14px; font-weight: 700; letter-spacing: .3px;
  padding: 16px; text-align: center; border: none; cursor: pointer;
  border-radius: 50px;
  box-shadow: 0 4px 24px rgba(201,168,76,0.50);
  transition: all .2s; font-family: 'Outfit', sans-serif;
}
.cta-btn:hover { box-shadow: 0 6px 36px rgba(201,168,76,0.70); transform: translateY(-1px); }
.cta-fine { font-family: 'JetBrains Mono', monospace; font-size: 9.5px; letter-spacing: 1.5px; text-transform: uppercase; color: rgba(255,255,255,0.60); text-align: center; margin-top: 9px; }
.sum-guar { display: none; margin: 14px 0 0; padding: 13px 16px; background: rgba(12,122,82,0.1); border: 1px dashed rgba(12,122,82,0.25); gap: 10px; align-items: flex-start; }
.sum-guar.on { display: flex; }
.g-guar-icon { font-size: 14px; flex-shrink: 0; margin-top: 1px; }
.g-guar-txt { font-size: 13px; color: #4ecca8; line-height: 1.55; }
.g-guar-txt strong { font-weight: 700; }
.sum-caveat { display: none; margin: 10px 0 0; padding: 11px 14px; background: rgba(184,50,50,0.08); border: 1px dashed rgba(184,50,50,0.25); font-size: 12.5px; color: #e07070; line-height: 1.6; font-weight: 300; }
.sum-caveat.on { display: block; }
.reset-btn { display: block; width: 100%; background: none; border: none; border-top: 1px solid rgba(255,255,255,0.06); padding: 11px 22px; font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 2px; text-transform: uppercase; color: rgba(255,255,255,0.25); cursor: pointer; text-align: center; transition: color .2s, background .2s; }
.reset-btn:hover { color: var(--red); background: rgba(184,50,50,0.06); }

/* Consent checkbox */
.consent-label {
  display: flex;
  gap: 11px;
  align-items: flex-start;
  cursor: pointer;
  padding: 12px 22px 10px;
  border-top: 1px solid rgba(255,255,255,0.07);
}
.consent-cb {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
  pointer-events: none;
}
.consent-box {
  flex-shrink: 0;
  margin-top: 2px;
  width: 16px;
  height: 16px;
  border: 1.5px solid rgba(255,255,255,0.22);
  border-radius: 3px;
  background: transparent;
  transition: background .15s, border-color .15s;
  display: flex;
  align-items: center;
  justify-content: center;
}
.consent-cb:checked + .consent-box {
  background: var(--gold);
  border-color: var(--gold);
}
.consent-cb:checked + .consent-box::after {
  content: '✓';
  font-size: 10px;
  font-weight: 700;
  color: var(--ink);
  line-height: 1;
}
.consent-text {
  font-size: 11px;
  color: rgba(255,255,255,0.38);
  line-height: 1.6;
  font-weight: 300;
}
.consent-text strong {
  display: block;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  color: rgba(255,255,255,0.28);
  margin-bottom: 4px;
  font-weight: 400;
}
.cta-btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
  transform: none !important;
  box-shadow: none !important;
}

/* Build summary row — off-screen so GHL tracking reads it but users don't see it */
#build-summary-row {
  position: absolute !important;
  left: -9999px !important;
  width: 1px !important;
  height: 1px !important;
  overflow: hidden !important;
  opacity: 0 !important;
  pointer-events: none !important;
  display: block !important; /* never display:none — GHL must be able to read it */
}
.build-summary-ta {
  width: 1px;
  height: 1px;
  resize: none;
  border: none;
  outline: none;
}

/* ── SUCCESS OVERLAY ── */
.pb-success { display: none; position: fixed; inset: 0; background: rgba(7,16,28,0.92); z-index: 9999; align-items: center; justify-content: center; padding: 24px; }
.pb-success.on { display: flex; }
.success-box { background: var(--paper); max-width: 560px; width: 100%; overflow: hidden; box-shadow: 0 40px 100px rgba(0,0,0,0.5); animation: fadeUp .4s ease both; }
@keyframes fadeUp { from{opacity:0;transform:translateY(20px)} to{opacity:1;transform:translateY(0)} }
.suc-head { background: var(--ink); padding: 28px 32px; }
.suc-ey { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 3px; text-transform: uppercase; color: var(--gold); margin-bottom: 10px; }
.suc-title { font-family: 'Cormorant Garamond', serif; font-size: 36px; font-weight: 300; color: var(--white); line-height: 1.1; }
.suc-title em { font-style: italic; color: rgba(255,255,255,0.32); }
.suc-body { padding: 28px 32px; }
.suc-sum-title { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 2px; text-transform: uppercase; color: var(--dim); margin-bottom: 12px; }
.suc-items { margin-bottom: 20px; }
.suc-item { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid var(--rule); font-size: 13px; gap: 12px; }
.suc-item:last-child { border-bottom: none; }
.suc-item-name { color: var(--ink); font-weight: 500; flex: 1; }
.suc-item-price { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--dim); text-align: right; white-space: pre; }
.suc-lock { background: var(--p2); padding: 14px 16px; display: flex; align-items: center; gap: 10px; margin-bottom: 20px; }
.suc-lock-txt { font-size: 13px; color: var(--ink); line-height: 1.5; }
.suc-lock-txt strong { font-weight: 700; }
.suc-zero { background: var(--grn2); border: 1px dashed rgba(12,122,82,0.25); padding: 12px 16px; margin-bottom: 20px; font-size: 13px; color: var(--green); line-height: 1.5; }
.suc-zero strong { font-weight: 700; }
.suc-close { display: block; width: 100%; background: var(--ink); color: var(--white); font-family: 'Outfit', sans-serif; font-size: 13px; font-weight: 700; padding: 13px; text-align: center; border: none; cursor: pointer; transition: background .2s; }
.suc-close:hover { background: var(--ink2); }

/* ── FINAL CTA ── */
.final-cta { text-align: center; padding: 120px 56px; max-width: 1100px; margin: 0 auto; }
.final-p { font-size: 17px; color: #2A2825; line-height: 1.8; max-width: 480px; margin: 20px auto 44px; font-weight: 300; }
.final-actions { display: flex; flex-direction: column; align-items: center; gap: 16px; }
.btn-dark {
  background: linear-gradient(135deg, #C9A84C 0%, #e8c96a 60%, #C9A84C 100%);
  background-size: 200% 100%;
  color: var(--ink);
  font-size: 15px; font-weight: 700; letter-spacing: .3px;
  text-decoration: none;
  padding: 17px 52px;
  border-radius: 50px;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  box-shadow: 0 4px 36px rgba(201,168,76,0.50);
  transition: all .25s;
}
.btn-dark::after { content: '→'; font-size: 16px; transition: transform .2s; }
.btn-dark:hover { box-shadow: 0 8px 52px rgba(201,168,76,0.72); transform: translateY(-2px); }
.btn-dark:hover::after { transform: translateX(5px); }
.final-fine { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 1.5px; text-transform: uppercase; color: #4A4740; }

/* ── FOOTER ── */
footer { background: var(--ink); border-top: 1px solid rgba(255,255,255,0.06); }
.footer-inner { max-width: 1100px; margin: 0 auto; padding: 44px 56px; display: flex; justify-content: space-between; align-items: center; }
.footer-logo img { height: 26px; filter: brightness(0) invert(1); opacity: 0.4; }
.footer-tagline { font-family: 'Cormorant Garamond', serif; font-size: 16px; font-style: italic; color: rgba(255,255,255,0.55); }
.footer-right { display: flex; gap: 28px; align-items: center; }
.footer-right a { font-size: 12px; color: rgba(255,255,255,0.25); text-decoration: none; transition: color .2s; }
.footer-right a:hover { color: rgba(255,255,255,0.6); }

/* ── ANIMATIONS ── */
.reveal { opacity: 0; transform: translateY(20px); transition: opacity 0.7s ease, transform 0.7s ease; }
.reveal.in { opacity: 1; transform: none; }

/* ── MOBILE ── */
@media(max-width: 980px) {
  /* Nav */
  nav {
    top: 12px;
    padding: 8px 12px 8px 16px;
    gap: 16px;
    max-width: calc(100vw - 24px);
  }
  .nav-links { display: none; }

  /* Hero */
  .hero { padding: 120px 24px 80px; min-height: 100svh; }
  .hero-h1 { letter-spacing: -1.5px; font-size: clamp(44px, 12vw, 80px); }
  .hero-label { white-space: normal; font-size: 9px; letter-spacing: 2px; text-align: center; }
  .hero-sub { font-size: 15px; }
  .hero-btn { width: 100%; justify-content: center; padding: 16px 28px; }
  .hero-guarantee-badge { flex-wrap: wrap; justify-content: center; font-size: 12px; padding: 9px 16px; }

  /* Diagnostic card */
  .diag-row {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    gap: 0;
    padding: 14px 16px;
  }
  .diag-n { width: 22px; flex-shrink: 0; font-size: 9px; padding-top: 3px; }
  .diag-row-inner { flex: 1; min-width: 0; }
  .diag-tag { flex-basis: 100%; margin-left: 34px; margin-top: 6px; font-size: 7.5px; }
  .diag-row-val { font-size: 12px; }

  /* Main sections */
  .section { padding: 64px 24px; }
  .divider { margin: 0 24px; }
  .about-grid { grid-template-columns: 1fr; gap: 48px; }
  .team-strip { flex-direction: column; }
  .team-member { border-right: none; border-bottom: 1px solid var(--rule); }
  .team-member:last-child { border-bottom: none; }

  /* Process */
  .process-inner { padding: 64px 24px; }
  .steps { grid-template-columns: 1fr; border-top: none; }
  .step { border-right: none; border-top: 1px solid rgba(255,255,255,0.08); padding: 36px 28px !important; }

  /* Proof */
  .proof-grid { grid-template-columns: 1fr; }

  /* Guarantee */
  .guarantee-inner { grid-template-columns: 1fr; padding: 64px 24px; gap: 48px; }

  /* Plan builder header */
  .pb-break-header { padding: 64px 24px 40px; }
  .pb-break-title { font-size: clamp(36px, 10vw, 56px); letter-spacing: -1px; }
  .pb-zero-banner {
    flex-wrap: wrap;
    justify-content: center;
    text-align: center;
    padding: 12px 20px;
    font-size: 13px;
    gap: 6px;
  }

  /* Plan builder layout — extra bottom padding for sticky bar */
  .pb-layout { grid-template-columns: 1fr; padding: 0 24px 84px; gap: 32px; }

  /* Service card badge clearance */
  .svc-card { margin-top: 14px; }

  /* Consult card */
  .consult-card { flex-direction: column; align-items: flex-start; gap: 16px; }
  .consult-right { text-align: left; }
  .consult-price { font-size: 32px; }

  /* Category hint text */
  .cat-why { display: none; }

  /* Service grids */
  .svc-grid { grid-template-columns: 1fr; }

  /* ── STICKY BOTTOM SUMMARY BAR ── */
  .pb-summary {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    top: auto;
    width: 100%;
    z-index: 200;
    max-height: 88vh;
    overflow: hidden;
    border-top: 2px solid var(--gold);
    background: #07101C;
    box-shadow: 0 -6px 40px rgba(0,0,0,0.55);
    /* Hidden below screen by default; JS adds pb-bar-visible */
    transform: translateY(100%);
    transition: transform 0.45s cubic-bezier(0.4, 0, 0.2, 1);
  }
  /* Peek: show just the header strip (56px) */
  .pb-summary.pb-bar-visible {
    transform: translateY(calc(100% - 56px));
  }
  /* Fully expanded */
  .pb-summary.cart-open {
    transform: translateY(0);
  }
  /* Show toggle button */
  .cart-toggle { display: flex; }
  /* Sum-head acts as drag handle — fixed height */
  .sum-head { cursor: pointer; min-height: 56px; padding: 10px 16px; flex-wrap: nowrap; gap: 8px; }
  /* Card body: scrollable when open */
  .sum-card-body {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
  }
  .sum-card{
    border-radius: 0px !important;
  }
  .pb-summary.cart-open .sum-card-body {
    max-height: calc(88vh - 56px);
    overflow-y: auto;
  }
  /* Guarantee / caveat blocks inside summary */
  .sum-guar, .sum-caveat { margin: 0; }

  /* Totals — keep readable in compact panel */
  .tot-main-val { font-size: 26px; }

  /* Final CTA & footer */
  .final-cta { padding: 80px 24px; }
  .footer-inner { flex-direction: column; gap: 20px; text-align: center; padding: 36px 24px; }
  .footer-right { flex-direction: column; gap: 10px; }

  /* ── TAP TARGETS ── */
  .si-rm { min-width: 44px; min-height: 44px; display: inline-flex; align-items: center; justify-content: center; }
  .reco-chip { min-height: 44px; }
  .reset-btn { min-height: 44px; }
  .cta-btn { min-height: 52px; font-size: 15px; }
  .nav-book { min-height: 40px; }
  .svc-check { width: 24px; height: 24px; }
}

/* ── EXTRA SMALL SCREENS (< 480px) ── */
@media(max-width: 480px) {
  .form-row-2 { grid-template-columns: 1fr; }
  .hero-sub { font-size: 14px; }
  .pull-quote { font-size: 21px; }
  .diag-card { border-radius: 14px; }
  .pb-break-title { font-size: clamp(34px, 9vw, 48px); }
  .step-title { font-size: 26px; }
  .display { font-size: clamp(34px, 9vw, 56px); }
  .consult-title { font-size: 22px; }
  .proof-card { padding: 32px 24px; }
}

/* ── BUNDLE GRID ── */
.bundle-label-row {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 16px; margin-bottom: 20px; flex-wrap: wrap;
}
.bundle-label-text {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px; letter-spacing: 2.5px; text-transform: uppercase;
  color: var(--gold);
}
.bundle-label-sub {
  font-size: 12px; color: rgba(255,255,255,0.35); font-weight: 300;
}
.bundle-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-bottom: 32px;
}
.bcard {
  border: 1.5px solid rgba(255,255,255,0.10);
  border-radius: 16px;
  background: rgba(255,255,255,0.03);
  padding: 22px 22px 18px;
  cursor: pointer;
  transition: border-color .18s, background .18s, transform .18s, box-shadow .18s;
  position: relative;
  user-select: none;
}
.bcard:hover {
  border-color: rgba(201,168,76,0.55);
  background: rgba(201,168,76,0.05);
  transform: translateY(-2px);
  box-shadow: 0 8px 28px rgba(0,0,0,0.3);
}
.bcard.selected {
  border-color: var(--gold);
  border-style: solid;
  background: rgba(201,168,76,0.10);
  transform: translateY(-2px);
  box-shadow: 0 8px 32px rgba(201,168,76,0.18);
}
.bcard-check {
  position: absolute; top: 16px; right: 16px;
  width: 20px; height: 20px;
  border: 1.5px solid rgba(255,255,255,0.15);
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  transition: all .15s; background: transparent;
}
.bcard.selected .bcard-check { background: var(--gold); border-color: var(--gold); }
.bcard-cm { font-size: 10px; color: var(--ink); opacity: 0; font-weight: 700; transition: opacity .15s; }
.bcard.selected .bcard-cm { opacity: 1; }
.bcard-icon { font-size: 22px; margin-bottom: 10px; line-height: 1; }
.bcard-problem {
  font-size: 12px; color: rgba(255,255,255,0.45); font-weight: 300;
  margin-bottom: 4px; font-style: italic;
}
.bcard-name {
  font-family: 'Cormorant Garamond', serif;
  font-size: 20px; font-weight: 600; color: var(--white);
  margin-bottom: 12px; line-height: 1.15;
}
.bcard-pills {
  display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 14px;
}
.bcard-pill {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px; letter-spacing: 0.5px;
  color: rgba(255,255,255,0.45);
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(255,255,255,0.08);
  padding: 3px 8px; border-radius: 2px;
}
.bcard.selected .bcard-pill {
  color: var(--gold);
  background: rgba(201,168,76,0.10);
  border-color: rgba(201,168,76,0.25);
}
.bcard-cta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9.5px; letter-spacing: 1.5px; text-transform: uppercase;
  color: rgba(255,255,255,0.25); transition: color .15s;
}
.bcard:hover .bcard-cta { color: var(--gold); }
.bcard.selected .bcard-cta { color: rgba(201,168,76,0.6); }

/* ── À LA CARTE TOGGLE ── */
.alacarte-toggle {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 20px;
  border: 1px dashed rgba(255,255,255,0.12);
  border-radius: 10px;
  cursor: pointer;
  margin-bottom: 0;
  transition: border-color .2s, background .2s;
}
.alacarte-toggle:hover { border-color: rgba(255,255,255,0.28); background: rgba(255,255,255,0.03); }
.alacarte-toggle-text {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12.5px; letter-spacing: 2px; text-transform: uppercase;
  color: rgba(255,255,255,0.85);
}
.alacarte-toggle-icon {
  font-size: 10px; color: rgba(255,255,255,0.25);
  transition: transform .3s ease; display: inline-block;
}
.alacarte-toggle.open .alacarte-toggle-icon { transform: rotate(180deg); }
.alacarte-body {
  display: none;
  margin-top: 24px;
}
.alacarte-body.open { display: block; }
</style>
</head>
<body>

<!-- SUCCESS OVERLAY -->
<div class="pb-success" id="pb-success">
  <div class="success-box">
    <div class="suc-head">
      <div class="suc-ey">Velly · Submission Received</div>
      <h2 class="suc-title">We'll be in<br><em>touch soon.</em></h2>
    </div>
    <div class="suc-body">
      <div class="suc-zero"><strong>0 USD due today.</strong> This submission schedules your free discovery call. Nothing is charged or committed until we agree on scope together.</div>
      <div class="suc-sum-title">Your Build Summary</div>
      <div class="suc-items" id="suc-items"></div>
      <div class="suc-lock">
        <span style="font-size:18px;">🔒</span>
        <div class="suc-lock-txt">
          <strong>Prices locked for 72 hours.</strong><br>
          Your estimate is valid until <span id="lock-expiry" style="color:var(--gold);font-weight:700;"></span>
        </div>
      </div>
      <button class="suc-close" onclick="closeSuccess()">Back to Plan Builder</button>
    </div>
  </div>
</div>

<!-- NAV -->
<nav id="nav">
  <a href="#">
    <img src="https://assets.cdn.filesafe.space/f9lSy5daGSbvYUIA7TGc/media/6a0e6a77d3dfb498edc6633d.svg" alt="Velly" style="height:42px;display:block;">
  </a>
  <ul class="nav-links">
    <li><a href="#about">What We Do</a></li>
    <li><a href="#process">Process</a></li>
    <li><a href="#proof">Results</a></li>
    <li><a href="#plan-builder">Build Your Plan</a></li>
  </ul>
  <a href="https://go.velly.io/widget/booking/1FXvSVzUIBvxOv2QuzMv" class="nav-book" target="_blank">Book Free Consultation</a>
</nav>

<!-- HERO -->
<section class="hero" id="hero">
  <div class="hero-content">
    <div class="hero-label">Digital Growth Consultancy · West Palm Beach & Remote</div>
    <h1 class="hero-h1">
      We find<br>
      the <span class="g">real</span><br>
      <em>problem.</em>
    </h1>
    <p class="hero-sub">
      Most businesses aren't losing because of bad marketing. There's a leak. We diagnose it, build the fix, and track every dollar.
    </p>
    <div class="hero-cta-group">
      <a href="#plan-builder" class="hero-btn">Build Your Plan</a>
      <span class="hero-guarantee-badge"><span class="badge-icon">✦</span>90-Day Money-Back Guarantee</span>
    </div>
    <div class="diag-card">
      <div class="diag-header">
        <div class="diag-dots">
          <div class="diag-dot"></div>
          <div class="diag-dot"></div>
          <div class="diag-dot"></div>
        </div>
        <div class="diag-title-bar">Velly · Diagnostic Report</div>
        <div style="width:52px;"></div>
      </div>
      <div class="diag-body">
        <div class="diag-row">
          <div class="diag-n">01</div>
          <div class="diag-row-inner">
            <div class="diag-row-label">Symptom Reported</div>
            <div class="diag-row-val">"Our Google Ads aren't converting."</div>
          </div>
          <span class="diag-tag tag-assumed">Assumed</span>
        </div>
        <div class="diag-row">
          <div class="diag-n">02</div>
          <div class="diag-row-inner">
            <div class="diag-row-label">Actual Finding</div>
            <div class="diag-row-val">Ads converting at 4.2%. Calls going unanswered: 80% never leave a voicemail.</div>
          </div>
          <span class="diag-tag tag-cause">Root Cause</span>
        </div>
        <div class="diag-row">
          <div class="diag-n">03</div>
          <div class="diag-row-inner">
            <div class="diag-row-label">Action Taken</div>
            <div class="diag-row-val">AI voice agent deployed. Every call answered in under 3 seconds.</div>
          </div>
          <span class="diag-tag tag-fixed">Resolved</span>
        </div>
        <div class="diag-row">
          <div class="diag-n">04</div>
          <div class="diag-row-inner">
            <div class="diag-row-label">Week 1 Result</div>
            <div class="diag-row-val">15,000 USD recovered from calls that would have been missed.</div>
          </div>
          <span class="diag-tag tag-measured">Measured</span>
        </div>
      </div>
      <div class="diag-footer">
        <span class="diag-footer-l">All metrics tracked · Confidential</span>
        <span class="diag-footer-r">Velly · 2026</span>
      </div>
    </div>
  </div>
</section>

<!-- GUARANTEE -->
<div class="guarantee reveal">
  <div class="guarantee-inner">
    <div class="guarantee-text">
      <div class="mono">The Guarantee</div>
      <h2 class="display">We pay for ourselves.<br><em>Or you don't pay.</em></h2>
      <p>We only take on engagements where we genuinely believe we can move the needle. That conviction is backed by a real guarantee, not a marketing line. 90 days. Measurable return. Or every dollar comes back.</p>
    </div>
    <div>
      <div class="g-list">
        <div class="g-list-item"><span class="g-check">✓</span>We diagnose before scoping any work</div>
        <div class="g-list-item"><span class="g-check">✓</span>Every deliverable tied to a measurable outcome</div>
        <div class="g-list-item"><span class="g-check">✓</span>Clear ROI reporting: revenue, not impressions</div>
        <div class="g-list-item"><span class="g-check">✓</span>Full refund if we don't pay for ourselves in 90 days</div>
        <div class="g-list-item"><span class="g-check">✓</span>We work with established businesses only</div>
      </div>
    </div>
  </div>
</div>

<!-- ABOUT -->
<div class="divider"></div>
<div class="section reveal" id="about">
  <div class="mono">What We Are</div>
  <h2 class="display">Not an agency.<br><em>A consultancy.</em></h2>
  <div class="about-grid">
    <div class="about-text">
      <p>Most agencies sell you a service and leave you to figure out if it's working. We do something different: we look at your business as a whole before we touch anything. The problem is rarely what it looks like on the surface.</p>
      <p>We build custom systems, deploy AI, run paid media, and create tools that don't exist off the shelf. But the platform is never the product. The result is. Every engagement starts with a free discovery call where we tell you exactly what we'd build, before you spend a dollar.</p>
      <p>We work with established businesses that are already generating revenue. Not startups searching for product-market fit. People who have a system and need someone to find what's quietly costing them inside of it.</p>
    </div>
    <div class="about-right">
      <p class="pull-quote">"The issue is rarely what you think it is. We don't build until we know what's broken."</p>
      <div class="about-items">
        <div class="about-item"><span class="about-item-label">Lead Generation</span><span class="about-item-value">Paid media, capture, booking flows</span></div>
        <div class="about-item"><span class="about-item-label">Automation & AI</span><span class="about-item-value">Voice agents, CRM, workflows</span></div>
        <div class="about-item"><span class="about-item-label">Revenue Recovery</span><span class="about-item-value">Missed calls, dormant leads, carts</span></div>
        <div class="about-item"><span class="about-item-label">Custom Software</span><span class="about-item-value">Built when nothing else fits</span></div>
        <div class="about-item"><span class="about-item-label">Analytics & Tracking</span><span class="about-item-value">Every decision backed by numbers</span></div>
      </div>
    </div>
  </div>

  <!-- TEAM -->
  <div class="team-strip">
    <div class="team-member">
      <div class="team-member-eyebrow">Co-Founder</div>
      <div class="team-member-name">Aidan</div>
      <div class="team-member-role">Sales, Strategy, Client Relationships & Systems</div>
      <div class="team-member-bio">Based in West Palm Beach. Works directly with clients to diagnose the real problem before anything gets built. The one in the room asking the questions nobody else is asking.</div>
      <div class="team-location">West Palm Beach, FL</div>
    </div>
    <div class="team-member">
      <div class="team-member-eyebrow">Co-Founder</div>
      <div class="team-member-name">Brian</div>
      <div class="team-member-role">Sales, Engineering, Automation & Custom Builds</div>
      <div class="team-member-bio">Works his region across California and Idaho. Like Aidan, he's in the field with clients and building the systems. Turns the diagnosis into the actual solution: automation logic, AI agents, custom tools, and integrations built to last. The reason we can say we build things others can't.</div>
      <div class="team-location">California & Idaho</div>
    </div>
    <div class="team-member" style="flex:0.6;background:var(--p2);display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:32px 28px;">
      <div style="font-family:'Cormorant Garamond',serif;font-size:52px;font-weight:300;color:var(--ink);line-height:1;margin-bottom:8px;">2</div>
      <div style="font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--dim);">Founders</div>
      <div style="height:1px;background:var(--rule);width:40px;margin:16px auto;"></div>
      <div style="font-size:12px;color:var(--dim);font-weight:300;line-height:1.6;">One team.<br>One standard.</div>
    </div>
  </div>
</div>

<!-- PROCESS -->
<div class="process-dark reveal" id="process">
  <div class="process-inner">
    <div class="mono">How We Work</div>
    <h2 class="display">We diagnose before<br><em>we prescribe.</em></h2>
    <div class="steps">
      <div class="step">
        <div class="step-num">01 · Diagnose</div>
        <div class="step-title">Find the<br>real problem.</div>
        <p class="step-body">Before writing a single line of code or running a single ad, we map your entire lead flow. The issue is almost never where you think it is.</p>
      </div>
      <div class="step">
        <div class="step-num">02 · Build</div>
        <div class="step-title">Build the<br>exact fix.</div>
        <p class="step-body">No packages. No templates. We scope what your situation actually requires, and we're honest when that's less than you expected to spend.</p>
      </div>
      <div class="step">
        <div class="step-num">03 · Prove</div>
        <div class="step-title">Show you<br>it's working.</div>
        <p class="step-body">Everything we build is tracked. You see the numbers before and after. We don't declare success; we show you the revenue and you decide.</p>
      </div>
    </div>
  </div>
</div>


<!-- PROOF -->
<div class="divider"></div>
<div class="section reveal" id="proof">
  <div class="mono">Client Results</div>
  <h2 class="display">What they said<br><em>after.</em></h2>
  <div class="proof-grid">
    <div class="proof-card">
      <p class="proof-q">"Working with Aidan has been an absolute game-changer. He captured my brand perfectly and has been an integral part of taking my business to the next level. I like to think of him as my personal genius."</p>
      <div class="proof-by">
        <div class="proof-name">Alyssa Pinkerton</div>
        <div class="proof-role">The Pinkerton Agency</div>
        <a href="https://thepinkertonagency.com" class="proof-link" target="_blank">thepinkertonagency.com ↗</a>
      </div>
    </div>
    <div class="proof-card">
      <p class="proof-q">"Once upon a time we were a self-made Jotform. Aidan gave us the site we needed, gave us our time back, and made it all very uniquely ours. Working with Aidan and Velly was a standout positive experience."</p>
      <div class="proof-by">
        <div class="proof-name">Leeanne</div>
        <div class="proof-role">Strong Pollo</div>
        <a href="https://strongpollo.com" class="proof-link" target="_blank">strongpollo.com ↗</a>
      </div>
    </div>
  </div>
</div>

<!-- ══ PLAN BUILDER SECTION ══ -->
<div class="pb-break reveal" id="plan-builder">

  <div class="pb-break-header">
    <div class="pb-break-eyebrow">Velly · Plan Builder</div>
    <h2 class="pb-break-title">What's it<br><em>costing you?</em></h2>
    <p class="pb-break-sub">Pick the problem that fits. We'll pre-select the right services, build your estimate, and get on a call to confirm it makes sense.</p>
    <div class="pb-zero-banner">
      <span class="pb-zero-icon">✦</span>
      <span><strong>0 USD due today.</strong> Free discovery call follows every submission.</span>
    </div>
  </div>

  <div class="pb-layout">
  <div id="pb-menu">

    <!-- ALWAYS INCLUDED -->
    <div class="consult-card">
      <div>
        <div class="consult-eyebrow">Always Included · No Exceptions</div>
        <div class="consult-title">Free Discovery Consultation</div>
        <div class="consult-desc">We look at your business, find where revenue is leaking, and tell you what we'd build. If we're not the right fit, we'll say so. 0 USD due today, no commitment required.</div>
      </div>
      <div class="consult-right">
        <div class="consult-price">0 USD</div>
        <div class="consult-price-label">Always free</div>
        <div class="consult-tag">
          <div class="consult-check">✓</div>
          <span class="consult-tag-text">Included with every build</span>
        </div>
      </div>
    </div>

    <!-- ── BUNDLE GRID ── -->
    <div class="bundle-label-row">
      <span class="bundle-label-text">Pick your problem</span>
      <span class="bundle-label-sub">Select one or more — services add to your estimate automatically</span>
    </div>

    <div class="bundle-grid">

      <div class="bcard" data-bids="missed-call,inbound-ai,a2p" onclick="selectBundle(this)">
        <div class="bcard-check"><span class="bcard-cm">✓</span></div>
        <div class="bcard-icon">📞</div>
        <div class="bcard-problem">Calls are going unanswered</div>
        <div class="bcard-name">Missed Call Bundle</div>
        <div class="bcard-pills">
          <span class="bcard-pill">Missed Call Text-Back</span>
          <span class="bcard-pill">AI Receptionist</span>
          <span class="bcard-pill">A2P Registration</span>
        </div>
        <div class="bcard-cta">Add this bundle →</div>
      </div>

      <div class="bcard" data-bids="google-ads,landing-page,sms-followup,outbound-ai" onclick="selectBundle(this)">
        <div class="bcard-check"><span class="bcard-cm">✓</span></div>
        <div class="bcard-icon">📈</div>
        <div class="bcard-problem">Not enough leads coming in</div>
        <div class="bcard-name">Lead Machine Bundle</div>
        <div class="bcard-pills">
          <span class="bcard-pill">Google Ads</span>
          <span class="bcard-pill">Landing Page</span>
          <span class="bcard-pill">Follow-Up Sequences</span>
          <span class="bcard-pill">AI Lead Warmup</span>
        </div>
        <div class="bcard-cta">Add this bundle →</div>
      </div>

      <div class="bcard" data-bids="crm-setup,pipeline,sms-followup,dormant-leads" onclick="selectBundle(this)">
        <div class="bcard-check"><span class="bcard-cm">✓</span></div>
        <div class="bcard-icon">🔁</div>
        <div class="bcard-problem">Leads aren't turning into clients</div>
        <div class="bcard-name">Pipeline & Follow-Up Bundle</div>
        <div class="bcard-pills">
          <span class="bcard-pill">CRM Cleanup</span>
          <span class="bcard-pill">Pipeline Automation</span>
          <span class="bcard-pill">Follow-Up Sequences</span>
          <span class="bcard-pill">Dormant Lead Reactivation</span>
        </div>
        <div class="bcard-cta">Add this bundle →</div>
      </div>

      <div class="bcard" data-bids="review-automation,gbp,ai-reviews" onclick="selectBundle(this)">
        <div class="bcard-check"><span class="bcard-cm">✓</span></div>
        <div class="bcard-icon">⭐</div>
        <div class="bcard-problem">Our reputation isn't working for us</div>
        <div class="bcard-name">Reputation Stack</div>
        <div class="bcard-pills">
          <span class="bcard-pill">Automated Reviews</span>
          <span class="bcard-pill">Google Business Profile</span>
          <span class="bcard-pill">AI Review Responses</span>
        </div>
        <div class="bcard-cta">Add this bundle →</div>
      </div>

      <div class="bcard" data-bids="content-retainer,filming,gbp" onclick="selectBundle(this)">
        <div class="bcard-check"><span class="bcard-cm">✓</span></div>
        <div class="bcard-icon">🎬</div>
        <div class="bcard-problem">No consistent content or online presence</div>
        <div class="bcard-name">Content & Visibility Bundle</div>
        <div class="bcard-pills">
          <span class="bcard-pill">Full-Service Content</span>
          <span class="bcard-pill">Filming Day</span>
          <span class="bcard-pill">GBP Optimization</span>
        </div>
        <div class="bcard-cta">Add this bundle →</div>
      </div>

      <div class="bcard" data-bids="custom-build" onclick="selectBundle(this)">
        <div class="bcard-check"><span class="bcard-cm">✓</span></div>
        <div class="bcard-icon">⚙️</div>
        <div class="bcard-problem">I need something built that doesn't exist yet</div>
        <div class="bcard-name">Custom Build</div>
        <div class="bcard-pills">
          <span class="bcard-pill">Chrome Extensions</span>
          <span class="bcard-pill">API Integrations</span>
          <span class="bcard-pill">Internal Tools</span>
          <span class="bcard-pill">Automation Flows</span>
        </div>
        <div class="bcard-cta">Add this bundle →</div>
      </div>

    </div><!-- /bundle-grid -->

    <!-- ── À LA CARTE ── -->
    <div class="alacarte-toggle" onclick="toggleAlacarte(this)">
      <span class="alacarte-toggle-text">Fine-tune with individual services</span>
      <span class="alacarte-toggle-icon">▼</span>
    </div>

    <div class="alacarte-body" id="alacarte-body">

      <!-- A1 -->
      <div class="pb-category">
        <div class="cat-header">
          <div class="cat-left"><span class="cat-num">A</span><span class="cat-title">Foundation & Messaging</span></div>
        </div>
        <div class="svc-grid">
          <div class="svc-card" data-id="a2p" data-setup="53" data-monthly="0" data-name="A2P 10DLC SMS Registration" data-rec="sms-followup,missed-call,sms-ai" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">A2P SMS Registration</div>
            <div class="svc-desc">Required by the FCC before sending automated texts. Without it, your messages get blocked. This is the key that turns your automation on.</div>
            <div class="svc-pricing"><span class="sp">53 USD setup</span><span class="sp-sep">+</span><span class="sp">usage fees</span></div>
          </div>
          <div class="svc-card" data-id="imessage" data-setup="1000" data-monthly="500" data-name="iMessage Business Messaging" data-rec="" onclick="toggleSvc(this)">
            <div class="svc-badge b-min">3-mo minimum</div>
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">iMessage Business Messaging</div>
            <div class="svc-desc">Bypass carrier filters entirely. Higher open rates, richer content, no spam folder. Best for high-ticket businesses.</div>
            <div class="svc-pricing"><span class="sp">1,000 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">500 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="crm-setup" data-setup="647" data-monthly="197" data-name="CRM Setup, Cleanup & Deduplication" data-rec="pipeline,sms-followup,reporting" onclick="toggleSvc(this)">
            <div class="svc-badge b-pop">Start here</div>
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">CRM Setup & Cleanup</div>
            <div class="svc-desc">Rebuild your CRM properly: deduplication, custom fields, tags, smart lists. Managed ongoing so it never becomes a disaster again.</div>
            <div class="svc-pricing"><span class="sp">647 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">197 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="pipeline" data-setup="347" data-monthly="147" data-name="Pipeline Design & Sales Automation" data-rec="crm-setup,sms-followup,appt-reminders" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Pipeline & Sales Automation</div>
            <div class="svc-desc">Stages built around how deals actually move in your business. New lead: sequence fires. Deal closes: onboarding begins. No manual steps.</div>
            <div class="svc-pricing"><span class="sp">347 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">147 USD/mo</span></div>
          </div>
        </div>
      </div>

      <!-- A2 -->
      <div class="pb-category">
        <div class="cat-header">
          <div class="cat-left"><span class="cat-num">B</span><span class="cat-title">Follow-Up & Revenue Recovery</span></div>
        </div>
        <div class="svc-grid">
          <div class="svc-card" data-id="sms-followup" data-setup="373" data-monthly="147" data-name="Automated Follow-Up Sequences" data-rec="a2p,crm-setup,pipeline" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Automated Follow-Up Sequences</div>
            <div class="svc-desc">Multi-step email and SMS sequences that fire based on behavior. Day 2, Day 5, Week 2 — follows up until they convert or opt out.</div>
            <div class="svc-pricing"><span class="sp">373 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">147 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="missed-call" data-setup="163" data-monthly="73" data-name="Missed Call Text-Back" data-rec="a2p,inbound-ai" onclick="toggleSvc(this)">
            <div class="svc-badge b-roi">Fast ROI</div>
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Missed Call Text-Back</div>
            <div class="svc-desc">When a call goes unanswered, an automatic text fires within seconds. One of the highest-ROI automations we install.</div>
            <div class="svc-pricing"><span class="sp">163 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">73 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="dormant-leads" data-setup="263" data-monthly="97" data-name="Dormant Lead Reactivation" data-rec="crm-setup,a2p,sms-followup" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Dormant Lead Reactivation</div>
            <div class="svc-desc">Long-term drip for "not yet" leads already in your CRM. Some of your best clients are in there waiting to be asked again.</div>
            <div class="svc-pricing"><span class="sp">263 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">97 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="appt-reminders" data-setup="163" data-monthly="73" data-name="Appointment Reminder Sequences" data-rec="booking-flow,pipeline" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Appointment Reminders</div>
            <div class="svc-desc">Automated SMS and email reminders 24 hrs and 2 hrs before every appointment. No-shows cost real money.</div>
            <div class="svc-pricing"><span class="sp">163 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">73 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="abandoned-cart" data-setup="213" data-monthly="97" data-name="Abandoned Cart Recovery" data-rec="sms-followup,a2p" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Abandoned Cart Recovery</div>
            <div class="svc-desc">Automated SMS and email sequences that go back after people who browsed, added to cart, and left.</div>
            <div class="svc-pricing"><span class="sp">213 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">97 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="post-purchase" data-setup="213" data-monthly="97" data-name="Post-Purchase Follow-Up" data-rec="review-automation,payment-setup" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Post-Purchase Follow-Up</div>
            <div class="svc-desc">Onboarding, upsells, review requests, referral asks — all triggered at the right moment automatically.</div>
            <div class="svc-pricing"><span class="sp">213 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">97 USD/mo</span></div>
          </div>
        </div>
      </div>

      <!-- A3 -->
      <div class="pb-category">
        <div class="cat-header">
          <div class="cat-left"><span class="cat-num">C</span><span class="cat-title">AI Agents</span></div>
        </div>
        <div class="svc-grid">
          <div class="svc-card" data-id="inbound-ai" data-setup="847" data-monthly="397" data-name="Inbound AI Receptionist" data-rec="missed-call,crm-setup,call-tracking" onclick="toggleSvc(this)">
            <div class="svc-badge b-roi">Highest ROI</div>
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Inbound AI Receptionist</div>
            <div class="svc-desc">Answers every call in under 3 seconds, qualifies leads, routes real opportunities. Every call transcribed and logged.</div>
            <div class="svc-pricing"><span class="sp">847 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">397 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="outbound-ai" data-setup="623" data-monthly="297" data-name="Outbound AI Lead Warmup" data-rec="inbound-ai,sms-followup,crm-setup" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Outbound AI Lead Warmup</div>
            <div class="svc-desc">Calls new leads within minutes of a form submission, qualifies them, and primes them before your team picks up the phone.</div>
            <div class="svc-pricing"><span class="sp">623 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">297 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="sms-ai" data-setup="523" data-monthly="247" data-name="SMS & Chat AI Agent" data-rec="a2p,crm-setup" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">SMS & Chat AI Agent</div>
            <div class="svc-desc">Handles inbound messages 24/7, books appointments, answers FAQs, hands off to a human when it matters.</div>
            <div class="svc-pricing"><span class="sp">523 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">247 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="ai-reviews" data-setup="213" data-monthly="97" data-name="AI Review Response Automation" data-rec="review-automation,gbp" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">AI Review Responses</div>
            <div class="svc-desc">Responds to every Google review in your brand voice. Negative reviews routed to you before anything goes out.</div>
            <div class="svc-pricing"><span class="sp">213 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">97 USD/mo</span></div>
          </div>
        </div>
      </div>

      <!-- A4 -->
      <div class="pb-category">
        <div class="cat-header">
          <div class="cat-left"><span class="cat-num">D</span><span class="cat-title">Lead Generation & Paid Ads</span></div>
        </div>
        <div class="svc-grid">
          <div class="svc-card" data-id="landing-page" data-setup="747" data-monthly="97" data-name="High-Converting Landing Page" data-rec="booking-flow,google-ads,meta-ads,call-tracking" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Landing Page</div>
            <div class="svc-desc">Purpose-built for your offer. Integrated with your CRM, booking, and tracking from day one. Hosting and updates included.</div>
            <div class="svc-pricing"><span class="sp">747 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">97 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="booking-flow" data-setup="263" data-monthly="97" data-name="Self-Book Calendar & Booking Flow" data-rec="appt-reminders,sms-followup,landing-page" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Self-Book Calendar</div>
            <div class="svc-desc">Leads book their own slot at the point of highest interest. Show rates go up. Close rates follow.</div>
            <div class="svc-pricing"><span class="sp">263 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">97 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="google-ads" data-setup="523" data-monthly="500" data-is-spend="true" data-name="Google Ads Management" data-rec="landing-page,call-tracking,crm-setup" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Google Ads Management</div>
            <div class="svc-desc">Reach people actively searching for what you offer. Campaign setup, copy, targeting, and ongoing optimization included.</div>
            <div class="svc-pricing" id="gads-pricing"><span class="sp">523 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo" id="gads-fee-display">500 USD/mo</span><span class="sp-sep">·</span><span class="sp sp-note">ad spend billed separately</span></div>
            <div class="spend-expander" id="gads-expander">
              <div class="spend-label">Monthly Ad Spend Budget</div>
              <div class="spend-display">
                <div class="spend-amount" id="gads-spend-display">1,000 <span>USD ad spend</span></div>
                <div class="spend-fee-display">
                  <div class="spend-fee-val" id="gads-fee-val">500 USD/mo</div>
                  <div class="spend-fee-label">Management fee</div>
                  <div class="spend-pct" id="gads-pct">50.0% of spend</div>
                </div>
              </div>
              <div class="spend-slider-wrap">
                <input type="range" class="spend-slider" id="gads-slider" min="1000" max="50000" step="500" value="1000" onclick="event.stopPropagation()" oninput="updateSpend('google-ads', this.value)">
              </div>
              <div class="spend-range-labels">
                <span class="spend-range-label">1,000 USD/mo</span>
                <span class="spend-range-label">50,000 USD/mo</span>
              </div>
            </div>
          </div>
          <div class="svc-card" data-id="meta-ads" data-setup="523" data-monthly="500" data-is-spend="true" data-name="Meta Ads Management" data-rec="landing-page,crm-setup,sms-followup" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Meta Ads Management</div>
            <div class="svc-desc">Facebook and Instagram campaigns built around your ideal customer profile. Creative strategy, targeting, retargeting, and optimization.</div>
            <div class="svc-pricing" id="mads-pricing"><span class="sp">523 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo" id="mads-fee-display">500 USD/mo</span><span class="sp-sep">·</span><span class="sp sp-note">ad spend billed separately</span></div>
            <div class="spend-expander" id="mads-expander">
              <div class="spend-label">Monthly Ad Spend Budget</div>
              <div class="spend-display">
                <div class="spend-amount" id="mads-spend-display">1,000 <span>USD ad spend</span></div>
                <div class="spend-fee-display">
                  <div class="spend-fee-val" id="mads-fee-val">500 USD/mo</div>
                  <div class="spend-fee-label">Management fee</div>
                  <div class="spend-pct" id="mads-pct">50.0% of spend</div>
                </div>
              </div>
              <div class="spend-slider-wrap">
                <input type="range" class="spend-slider" id="mads-slider" min="1000" max="50000" step="500" value="1000" onclick="event.stopPropagation()" oninput="updateSpend('meta-ads', this.value)">
              </div>
              <div class="spend-range-labels">
                <span class="spend-range-label">1,000 USD/mo</span>
                <span class="spend-range-label">50,000 USD/mo</span>
              </div>
            </div>
          </div>
        </div>
      </div>

      <!-- A5 -->
      <div class="pb-category">
        <div class="cat-header">
          <div class="cat-left"><span class="cat-num">E</span><span class="cat-title">Reputation, Content & Payments</span></div>
        </div>
        <div class="svc-grid">
          <div class="svc-card" data-id="review-automation" data-setup="213" data-monthly="97" data-name="Automated Review Generation" data-rec="gbp,ai-reviews,post-purchase" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Automated Review Generation</div>
            <div class="svc-desc">Post-purchase sequences after every job. Satisfied customers get a Google link. Unhappy ones get routed to you first.</div>
            <div class="svc-pricing"><span class="sp">213 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">97 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="gbp" data-setup="317" data-monthly="147" data-name="Google Business Profile Optimization" data-rec="review-automation,ai-reviews" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Google Business Profile</div>
            <div class="svc-desc">Full GBP optimization: categories, service areas, posts, Q&A, photos, and ongoing updates for better local placement.</div>
            <div class="svc-pricing"><span class="sp">317 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">147 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="content-retainer" data-setup="0" data-monthly="2700" data-name="Full-Service Content Management" data-rec="filming,gbp,review-automation" onclick="toggleSvc(this)">
            <div class="svc-badge b-pop">Full service</div>
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Content Management</div>
            <div class="svc-desc">We edit every clip, write every caption, schedule across platforms, respond to comments. Filming billed separately.</div>
            <div class="svc-pricing"><span class="sp sp-mo">2,700 USD/mo</span><span class="sp-sep">·</span><span class="sp sp-note">3-mo minimum recommended</span></div>
          </div>
          <div class="svc-card" data-id="filming" data-setup="0" data-monthly="0" data-per-day="573" data-name="On-Location Filming Day" data-rec="content-retainer" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">On-Location Filming Day</div>
            <div class="svc-desc">Full shoot day, no hourly cap, within 60 miles of West Palm Beach. 48-hour advance notice required.</div>
            <div class="svc-pricing"><span class="sp">573 USD/day</span><span class="sp-sep">·</span><span class="sp sp-note">2 USD/mi beyond 60mi</span></div>
          </div>
          <div class="svc-card free-card" data-id="payment-setup" data-setup="0" data-monthly="0" data-name="Payment Processing Setup & Integration" data-rec="text-to-pay,crm-setup" onclick="toggleSvc(this)">
            <div class="svc-badge b-free">Free setup</div>
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Payment Processing Setup</div>
            <div class="svc-desc">Direct processor partnership. Flat 2.7% + 0.30 USD per transaction. High volume businesses may qualify for custom rates.</div>
            <div class="svc-pricing"><span class="sp sp-free">Free setup</span><span class="sp-sep">·</span><span class="sp">2.7% + 0.30 USD/txn</span></div>
          </div>
          <div class="svc-card" data-id="text-to-pay" data-setup="0" data-monthly="0" data-name="Invoice & Text-to-Pay Setup" data-rec="payment-setup,crm-setup" onclick="toggleSvc(this)">
            <div class="svc-badge b-cond" id="ttp-badge">Free w/ CRM + Messaging</div>
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Invoice & Text-to-Pay</div>
            <div class="svc-desc">Send invoices via SMS. Clients pay from their phone — no portal, no login, no friction. Faster collection, less chasing.</div>
            <div class="svc-pricing"><span class="sp sp-free" id="ttp-price-txt">Free with CRM + Messaging</span></div>
          </div>
          <div class="svc-card free-card" data-id="reporting" data-setup="0" data-monthly="0" data-name="Custom Reporting Dashboard" data-rec="call-tracking,crm-setup" onclick="toggleSvc(this)">
            <div class="svc-badge b-free">Free with any active service</div>
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Reporting Dashboard</div>
            <div class="svc-desc">Revenue, leads, calls, ad performance in one dashboard. Free when we're already running services for you.</div>
            <div class="svc-pricing"><span class="sp sp-free">Free with any active service</span></div>
          </div>
          <div class="svc-card" data-id="call-tracking" data-setup="313" data-monthly="97" data-name="Call Tracking & Attribution" data-rec="reporting,google-ads,meta-ads" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Call Tracking & Attribution</div>
            <div class="svc-desc">Unique numbers per campaign so you know exactly which ad drove which call. Removes all guesswork from your ad spend.</div>
            <div class="svc-pricing"><span class="sp">313 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">97 USD/mo</span></div>
          </div>
        </div>
      </div>

      <!-- A6 -->
      <div class="pb-category">
        <div class="cat-header">
          <div class="cat-left"><span class="cat-num">F</span><span class="cat-title">Platform & Community</span></div>
        </div>
        <div class="svc-grid">
          <div class="svc-card" data-id="membership" data-setup="1547" data-monthly="297" data-name="Membership Portal Setup" data-rec="lms,mobile-app" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Membership Portal</div>
            <div class="svc-desc">Gated content, tiered levels, community feeds — all on your brand. Pairs with LMS for the full experience.</div>
            <div class="svc-pricing"><span class="sp">1,547 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">297 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="lms" data-setup="2073" data-monthly="297" data-name="Course & Training Platform" data-rec="membership,mobile-app" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Course & Training Platform</div>
            <div class="svc-desc">Full LMS: video hosting, drip scheduling, quizzes, certifications. Customers who know more buy more and churn less.</div>
            <div class="svc-pricing"><span class="sp">2,073 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">297 USD/mo</span></div>
          </div>
          <div class="svc-card" data-id="mobile-app" data-setup="3173" data-monthly="497" data-name="White-Labeled Mobile App" data-rec="membership,lms" onclick="toggleSvc(this)">
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">White-Labeled Mobile App</div>
            <div class="svc-desc">A branded app combining community, courses, and messaging. Lives on your clients' phones with your logo.</div>
            <div class="svc-pricing"><span class="sp">3,173 USD setup</span><span class="sp-sep">+</span><span class="sp sp-mo">497 USD/mo</span></div>
          </div>
          <div class="svc-card custom-card" data-id="custom-build" data-setup="0" data-monthly="0" data-name="Custom Software Build" data-rec="" onclick="toggleSvc(this)">
            <div class="svc-badge b-cust">Quote only</div>
            <div class="svc-check"><span class="svc-cm">✓</span></div>
            <div class="svc-name">Custom Software & Integrations</div>
            <div class="svc-desc">Chrome extensions, internal tools, API integrations, automation flows that don't exist off the shelf. Scoped individually at discovery.</div>
            <div class="custom-expand">
              <div class="custom-expand-label">Describe what you need built</div>
              <textarea class="custom-ta" id="custom-build-text" placeholder="What problem are you trying to solve? What does the tool need to do?" onclick="event.stopPropagation()"></textarea>
            </div>
            <div class="svc-pricing" style="margin-top:12px;"><span class="sp">Scoped & quoted at discovery</span></div>
          </div>
        </div>
      </div>

    </div><!-- /alacarte-body -->

  </div><!-- /pb-menu -->

  <!-- SUMMARY PANEL -->
  <div class="pb-summary" id="pb-summary">
    <div class="sum-card">
      <div class="sum-head" onclick="toggleCart(event)">
        <span class="sum-head-title">Your Build</span>
        <div style="display:flex;align-items:center;gap:10px;">
          <span class="sum-head-count" id="item-count">0 services</span>
          <button class="cart-toggle" id="cart-toggle-btn" aria-label="Toggle cart details" onclick="toggleCart(event)">
            <span class="cart-toggle-label">Details</span>
            <span class="cart-toggle-icon">▼</span>
          </button>
        </div>
      </div>
      <div class="sum-card-body" id="sum-card-body">
      <div class="sum-zero">
        <span class="sum-zero-icon">✦</span>
        <span class="sum-zero-text"><strong>0 USD due today.</strong> Submit to schedule your free discovery call.</span>
      </div>
      <div class="sum-consult">
        <span class="sum-consult-name"><span class="sum-c-dot"></span>Free Discovery Consultation</span>
        <span class="sum-consult-price">Always included</span>
      </div>
      <div class="sum-empty" id="sum-empty">
        <div class="sum-empty-icon">◎</div>
        <div class="sum-empty-text">Pick a problem above to start building your plan.</div>
      </div>
      <div class="sum-items" id="sum-items" style="display:none;"></div>
      <div class="sum-bundle" id="sum-bundle">
        <div class="sum-bundle-ey">Bundle Active</div>
        <div class="sum-bundle-name" id="bundle-name"></div>
        <div class="sum-bundle-save" id="bundle-save"></div>
      </div>
      <div class="sum-recos" id="sum-recos">
        <div class="sum-recos-label">Recommended to pair with your build</div>
        <div id="reco-list"></div>
      </div>
      <div class="sum-totals" id="sum-totals" style="display:none;">
        <div class="tot-row"><span class="tot-lbl">One-time setup</span><span class="tot-val" id="tot-setup">0 USD</span></div>
        <div class="tot-div"></div>
        <div class="tot-main">
          <span class="tot-main-lbl">Est. monthly</span>
          <div><span class="tot-main-val" id="tot-monthly">0</span><span class="tot-mo">USD/mo</span></div>
        </div>
      </div>
      <div class="sum-lock" id="sum-lock">
        <span class="lock-icon">🔒</span>
        <span class="lock-txt">Prices locked <span class="lock-time">72 hrs from submission</span></span>
      </div>
      <!-- action="javascript:void(0)" prevents page navigation while still firing the native submit event that GHL's tracking script hooks into -->
      <form class="sum-form" id="sum-form" name="Velly Plan Builder" action="javascript:void(0)">
        <div class="form-row-2">
          <div class="form-row"><label class="form-lbl">First Name</label><input class="form-input" type="text" id="f-fname" name="first_name" placeholder="First" required></div>
          <div class="form-row"><label class="form-lbl">Last Name</label><input class="form-input" type="text" id="f-lname" name="last_name" placeholder="Last"></div>
        </div>
        <div class="form-row"><label class="form-lbl">Company Name</label><input class="form-input" type="text" id="f-biz" name="company_name" placeholder="Your Business"></div>
        <div class="form-row"><label class="form-lbl">Email</label><input class="form-input" type="email" id="f-email" name="email" placeholder="you@yourbusiness.com" required></div>
        <div class="form-row"><label class="form-lbl">Phone</label><input class="form-input" type="tel" id="f-phone" name="phone" placeholder="(000) 000-0000"></div>
        <!-- Build summary — off-screen but DOM-visible so GHL tracking script captures it; updated by updateBuildSummary() inside render() -->
        <div id="build-summary-row">
          <label class="form-lbl">Build Summary</label>
          <textarea class="build-summary-ta" id="build-summary" name="build_summary" readonly rows="5"></textarea>
        </div>
      </form>
      <div class="sum-cta" id="sum-cta" style="display:none;">
        <label class="consent-label">
          <input type="checkbox" class="consent-cb" id="consent-cb" name="sms_consent" value="agreed">
          <span class="consent-box"></span>
          <span class="consent-text">
            <strong>Communications Consent</strong><br>
            By submitting, you agree to receive phone calls and texts from Velly LLC, including automated, pre-recorded, or AI-voice messages about our services. Reply STOP to opt out. Consent is not a condition of purchase.
          </span>
        </label>
        <button class="cta-btn" type="submit" form="sum-form" id="cta-submit-btn" disabled>Submit My Build · 0 USD Due Today</button>
        <div class="cta-fine">Prices locked 72hrs · Free discovery call follows · No commitment</div>
      </div>
      <button class="reset-btn" id="reset-btn" style="display:none;" onclick="resetAll()">Clear selection</button>
      <div class="sum-guar" id="sum-guar">
        <span class="g-guar-icon">✦</span>
        <div class="g-guar-txt"><strong>90-day money-back guarantee</strong> on applicable services. We'll be clear about what applies before anything is signed.</div>
      </div>
      <div class="sum-caveat" id="sum-caveat">
        <strong>Custom build note:</strong> Custom projects are quoted separately, operate under their own contract, and are not covered by the standard 90-day guarantee. Everything scoped in full at discovery before anything starts.
      </div>
      </div><!-- /sum-card-body -->
    </div>
  </div>

  </div><!-- /pb-layout -->
</div><!-- /pb-break -->

<!-- FINAL CTA -->
<div class="divider"></div>
<div class="final-cta reveal" id="contact">
  <div class="mono" style="text-align:center;">Get Started</div>
  <h2 class="display" style="text-align:center;">Start with a<br><em>discovery call.</em></h2>
  <p class="final-p">We'll look at your setup, tell you exactly where we think you're losing revenue, and show you what we'd build. No pitch deck. No obligation.</p>
  <div class="final-actions">
    <a href="https://go.velly.io/widget/booking/1FXvSVzUIBvxOv2QuzMv" class="btn-dark" target="_blank">Book a Discovery Call</a>
    <span class="final-fine">No commitment · 90-day guarantee · Established businesses only</span>
  </div>
</div>

<!-- FOOTER -->
<footer>
  <div class="footer-inner">
    <a href="#"><img src="https://assets.cdn.filesafe.space/f9lSy5daGSbvYUIA7TGc/media/6a0e6a77d3dfb498edc6633d.svg" alt="Velly" style="height:26px;filter:brightness(0) invert(1);opacity:0.4;"></a>
    <span class="footer-tagline">Success isn't luck. It's a result.</span>
    <div class="footer-right">
      <a href="https://velly.io/privacy-tos-page">Privacy & Terms</a>
      <span style="color:rgba(255,255,255,0.12);font-size:11px;">© 2026 Velly LLC</span>
    </div>
  </div>
</footer>

<script>
// ── NAV SCROLL ──
window.addEventListener('scroll', () => {
  document.getElementById('nav').classList.toggle('scrolled', window.scrollY > 10);
});

// ── REVEAL ON SCROLL ──
const io = new IntersectionObserver(
  entries => entries.forEach(e => { if(e.isIntersecting) e.target.classList.add('in'); }),
  { threshold: 0.06 }
);
document.querySelectorAll('.reveal').forEach(el => io.observe(el));

// ── FLOATING CART — elevator-shaft clamping ──
(function() {
  const summary     = document.getElementById('pb-summary');
  const pbMenu      = document.getElementById('pb-menu');
  const planBuilder = document.getElementById('plan-builder');
  if (!summary || !pbMenu || !planBuilder) return;

  const DESIRED_TOP  = 100; // px from viewport top (top of "shaft")
  const BOTTOM_PAD   = 24;  // px gap between panel bottom and section bottom

  function updateCart() {
    if (window.innerWidth < 981) return;

    const menuRect    = pbMenu.getBoundingClientRect();
    const sectionRect = planBuilder.getBoundingClientRect();
    const vh          = window.innerHeight;

    // Slide in when scrolled into view, slide out when section leaves
    const shouldShow = menuRect.top < vh * 0.30 && sectionRect.bottom > vh * 0.10;
    summary.classList.toggle('cart-active', shouldShow);

    // Elevator shaft: clamp panel so it never exits section bottom
    const panelH      = summary.offsetHeight;
    const shaftTop    = DESIRED_TOP;                                     // top of shaft (px from viewport top)
    const shaftBottom = sectionRect.bottom - panelH - BOTTOM_PAD;       // max top before panel exits section
    const clampedTop  = Math.min(shaftTop, Math.max(shaftBottom, sectionRect.top + BOTTOM_PAD));

    summary.style.top = clampedTop + 'px';
  }

  window.addEventListener('scroll', updateCart, { passive: true });
  window.addEventListener('resize', updateCart, { passive: true });
  updateCart();
})();

// ── MOBILE CART TOGGLE ──
let cartOpen = false;
(function() {
  const summary     = document.getElementById('pb-summary');
  const planBuilder = document.getElementById('plan-builder');
  if (!summary || !planBuilder) return;
  function updateMobileBar() {
    if (window.innerWidth >= 981) return;
    const rect = planBuilder.getBoundingClientRect();
    const vh   = window.innerHeight;
    const inView = rect.top < vh && rect.bottom > 0;
    summary.classList.toggle('pb-bar-visible', inView);
    if (!inView) {
      summary.classList.remove('cart-open');
      const btn = document.getElementById('cart-toggle-btn');
      if (btn) btn.classList.remove('open');
      cartOpen = false;
    }
  }
  window.addEventListener('scroll', updateMobileBar, { passive: true });
  window.addEventListener('resize', updateMobileBar, { passive: true });
  updateMobileBar();
})();

function toggleCart(e) {
  if (e) e.stopPropagation();
  if (window.innerWidth >= 981) return;
  cartOpen = !cartOpen;
  const summary = document.getElementById('pb-summary');
  const btn     = document.getElementById('cart-toggle-btn');
  if (summary) summary.classList.toggle('cart-open', cartOpen);
  if (btn)     btn.classList.toggle('open', cartOpen);
}

// ── À LA CARTE TOGGLE ──
function toggleAlacarte(el) {
  el.classList.toggle('open');
  const body = document.getElementById('alacarte-body');
  if (body) body.classList.toggle('open');
}

// ── PLAN BUILDER ──
function calcAdFee(spend) {
  return Math.round(500 * Math.pow(spend / 1000, 0.76));
}
const adSpend = { 'google-ads': 1000, 'meta-ads': 1000 };

// Registry
const svcs = {};
document.querySelectorAll('.svc-card').forEach(c => {
  if (!c.dataset.id) return;
  svcs[c.dataset.id] = {
    id:      c.dataset.id,
    name:    c.dataset.name,
    setup:   parseInt(c.dataset.setup)   || 0,
    monthly: parseInt(c.dataset.monthly) || 0,
    perDay:  parseInt(c.dataset.perDay)  || 0,
    isSpend: c.dataset.isSpend === 'true',
    rec:     c.dataset.rec ? c.dataset.rec.split(',').filter(Boolean) : [],
    el:      c
  };
});

let selected = new Set();

// ── SELECT BUNDLE ── adds all services in bundle, opens à la carte panel
function selectBundle(card) {
  const ids = card.dataset.bids ? card.dataset.bids.split(',').filter(Boolean) : [];
  const allSelected = ids.every(id => selected.has(id));

  if (allSelected) {
    // deselect bundle
    ids.forEach(id => {
      selected.delete(id);
      if (svcs[id]) svcs[id].el.classList.remove('selected');
    });
    card.classList.remove('selected');
  } else {
    // select bundle — open à la carte so user sees what was added
    ids.forEach(id => {
      selected.add(id);
      if (svcs[id]) svcs[id].el.classList.add('selected');
    });
    card.classList.add('selected');
    // auto-open à la carte so user can fine-tune
    const toggle = document.querySelector('.alacarte-toggle');
    const body   = document.getElementById('alacarte-body');
    if (toggle && body && !body.classList.contains('open')) {
      toggle.classList.add('open');
      body.classList.add('open');
    }
  }
  updateConditionals();
  render();
}

function updateSpend(id, val) {
  val = parseInt(val);
  adSpend[id] = val;
  const fee    = calcAdFee(val);
  const pct    = ((fee / val) * 100).toFixed(1);
  const prefix = id === 'google-ads' ? 'gads' : 'mads';
  const sd = document.getElementById(`${prefix}-spend-display`);
  const fv = document.getElementById(`${prefix}-fee-val`);
  const pe = document.getElementById(`${prefix}-pct`);
  const fd = document.getElementById(`${prefix}-fee-display`);
  if (sd) sd.innerHTML = `${val.toLocaleString()} <span>USD ad spend</span>`;
  if (fv) fv.textContent = `${fee.toLocaleString()} USD/mo`;
  if (pe) pe.textContent = `${pct}% of spend`;
  if (fd) fd.textContent = `${fee.toLocaleString()} USD/mo`;
  if (svcs[id]) svcs[id].monthly = fee;
  if (selected.size > 0) render();
}
updateSpend('google-ads', 1000);
updateSpend('meta-ads',   1000);

function toggleSvc(card) {
  const id = card.dataset.id;
  if (!id || !svcs[id]) return;
  if (selected.has(id)) { selected.delete(id); card.classList.remove('selected'); }
  else                  { selected.add(id);    card.classList.add('selected'); }
  // sync bundle card highlight state
  syncBundleCards();
  updateConditionals();
  render();
}

function syncBundleCards() {
  document.querySelectorAll('.bcard').forEach(bc => {
    const ids = bc.dataset.bids ? bc.dataset.bids.split(',').filter(Boolean) : [];
    bc.classList.toggle('selected', ids.length > 0 && ids.every(id => selected.has(id)));
  });
}

function updateConditionals() {
  const ttpFree  = selected.has('crm-setup') && (selected.has('a2p') || selected.has('imessage'));
  const badge    = document.getElementById('ttp-badge');
  const priceTxt = document.getElementById('ttp-price-txt');
  if (!badge || !priceTxt) return;
  if (ttpFree) {
    badge.textContent = 'Free · Conditions Met'; badge.className = 'svc-badge b-free';
    priceTxt.textContent = 'Free · conditions met'; priceTxt.className = 'sp sp-free';
  } else {
    badge.textContent = 'Free w/ CRM + Messaging'; badge.className = 'svc-badge b-cond';
    priceTxt.textContent = 'Free with CRM + Messaging'; priceTxt.className = 'sp sp-free';
  }
}

function render() {
  const sel   = [...selected];
  const count = sel.length;
  const empty = count === 0;

  const ic = document.getElementById('item-count');
  if (ic) ic.textContent = count === 0 ? '0 services' : count === 1 ? '1 service' : `${count} services`;

  ['sum-empty','sum-items','sum-totals','sum-cta','reset-btn','sum-lock','sum-guar','sum-caveat'].forEach(id => {
    const el = document.getElementById(id);
    if (!el) return;
    if (id === 'sum-empty') el.style.display = empty ? '' : 'none';
    else if (['sum-items','sum-totals','sum-cta','reset-btn'].includes(id)) el.style.display = empty ? 'none' : '';
    else if (['sum-lock','sum-guar'].includes(id)) el.classList.toggle('on', !empty);
    else if (id === 'sum-caveat') el.classList.toggle('on', selected.has('custom-build') && !empty);
  });

  const sf = document.getElementById('sum-form');
  if (sf) sf.classList.toggle('on', !empty);

  const itemsEl = document.getElementById('sum-items');
  if (!itemsEl) return;
  itemsEl.innerHTML = '';
  let totalSetup = 0, totalMonthly = 0;

  sel.forEach(id => {
    const s       = svcs[id]; if (!s) return;
    const ttpFree = id === 'text-to-pay' && selected.has('crm-setup') && (selected.has('a2p') || selected.has('imessage'));
    const repFree = id === 'reporting'   && count > 1;
    const payFree = id === 'payment-setup';
    const free    = payFree || ttpFree || repFree;
    if (!free) { totalSetup += s.setup; totalMonthly += s.monthly; }

    let lines = [];
    if (payFree)                   lines.push('Free setup');
    else if (free)                 lines.push('Free');
    else if (id === 'custom-build') lines.push('Quote at discovery');
    else if (id === 'filming')     lines.push('573 USD/day');
    else {
      if (s.setup   > 0) lines.push(`${s.setup.toLocaleString()} USD setup`);
      if (s.monthly > 0) lines.push(`${s.monthly.toLocaleString()} USD/mo`);
      if (!s.setup && !s.monthly) lines.push('Usage fees');
    }
    const div = document.createElement('div');
    div.className = 'sum-item';
    div.innerHTML = `<span class="si-name">${s.name}</span><span class="si-price">${lines.join('\n')}</span><span class="si-rm" onclick="removeSvc('${id}')">×</span>`;
    itemsEl.appendChild(div);
  });

  const ts = document.getElementById('tot-setup');
  const tm = document.getElementById('tot-monthly');
  if (ts) ts.textContent = `${totalSetup.toLocaleString()} USD`;
  if (tm) tm.textContent = `${totalMonthly.toLocaleString()}`;

  renderRecos();
  updateBuildSummary();
}

function renderRecos() {
  const rs = document.getElementById('sum-recos');
  const rl = document.getElementById('reco-list');
  if (!rs || !rl) return;
  if (selected.size === 0) { rs.classList.remove('on'); return; }
  const ids = new Set();
  selected.forEach(id => { if (svcs[id]) svcs[id].rec.forEach(r => { if (!selected.has(r) && svcs[r]) ids.add(r); }); });
  if (ids.size === 0) { rs.classList.remove('on'); return; }
  rs.classList.add('on');
  rl.innerHTML = '';
  [...ids].slice(0,3).forEach(id => {
    const s = svcs[id]; if (!s) return;
    const chip = document.createElement('div');
    chip.className = 'reco-chip';
    chip.onclick = () => { selected.add(id); s.el.classList.add('selected'); syncBundleCards(); updateConditionals(); render(); };
    chip.innerHTML = `<span class="reco-chip-name">${s.name}</span><span class="reco-chip-add">+ Add</span>`;
    rl.appendChild(chip);
  });
}

function removeSvc(id) {
  selected.delete(id);
  if (svcs[id]) svcs[id].el.classList.remove('selected');
  syncBundleCards();
  updateConditionals();
  render();
}

function resetAll() {
  selected.clear();
  document.querySelectorAll('.svc-card.selected').forEach(c => c.classList.remove('selected'));
  document.querySelectorAll('.bcard.selected').forEach(c => c.classList.remove('selected'));
  updateConditionals();
  render();
}

// ── UPDATE BUILD SUMMARY — called by render() so data is always current ──
// GHL tracking script only captures visible fields; this textarea holds all build data.
function updateBuildSummary() {
  const ta = document.getElementById('build-summary');
  if (!ta) return;

  if (selected.size === 0) {
    ta.value = '';
    return;
  }

  // Service names
  const serviceNames = [...selected].map(id => svcs[id] ? svcs[id].name : null).filter(Boolean);

  // Totals
  let totalSetup = 0, totalMonthly = 0;
  [...selected].forEach(id => {
    const s = svcs[id]; if (!s) return;
    const ttpFree = id === 'text-to-pay' && selected.has('crm-setup') && (selected.has('a2p') || selected.has('imessage'));
    const repFree = id === 'reporting' && selected.size > 1;
    const payFree = id === 'payment-setup';
    if (!ttpFree && !repFree && !payFree) { totalSetup += s.setup; totalMonthly += s.monthly; }
  });

  const lines = [];
  lines.push('Services: ' + (serviceNames.join(', ') || 'None'));
  lines.push('Setup: ' + totalSetup.toLocaleString() + ' USD');
  lines.push('Monthly: ' + totalMonthly.toLocaleString() + ' USD/mo');
  if (selected.has('google-ads')) lines.push('Google Ads Budget: ' + adSpend['google-ads'].toLocaleString() + ' USD/mo');
  if (selected.has('meta-ads'))   lines.push('Meta Ads Budget: '   + adSpend['meta-ads'].toLocaleString()   + ' USD/mo');
  if (selected.has('custom-build')) {
    const cb = document.getElementById('custom-build-text');
    lines.push('Custom Build: ' + ((cb && cb.value.trim()) ? cb.value.trim() : 'Not specified'));
  }

  ta.value = lines.join('\n');
}

// ── FORM SUBMIT — action="javascript:void(0)" prevents navigation; GHL tracking script hooks into this submit event ──
document.getElementById('sum-form').addEventListener('submit', function() {
  // No preventDefault — let GHL's tracking script see the event and capture all fields
  const expiry    = new Date(Date.now() + 72 * 60 * 60 * 1000);
  const expiryStr = expiry.toLocaleDateString('en-US',{weekday:'long',month:'long',day:'numeric'}) + ' at ' + expiry.toLocaleTimeString('en-US',{hour:'numeric',minute:'2-digit'});
  const le = document.getElementById('lock-expiry');
  if (le) le.textContent = expiryStr;

  const si = document.getElementById('suc-items');
  if (si) {
    si.innerHTML = '';
    const cr = document.createElement('div');
    cr.className = 'suc-item';
    cr.innerHTML = `<span class="suc-item-name">Free Discovery Consultation</span><span class="suc-item-price">Included</span>`;
    si.appendChild(cr);
    [...selected].forEach(id => {
      const s = svcs[id]; if (!s) return;
      let p = id==='custom-build' ? 'Quote at discovery' : id==='filming' ? '573 USD/day' : id==='payment-setup' ? 'Free setup'
        : [s.setup>0?`${s.setup.toLocaleString()} USD setup`:'', s.monthly>0?`${s.monthly.toLocaleString()} USD/mo`:''].filter(Boolean).join('\n') || 'Usage fees';
      const row = document.createElement('div');
      row.className = 'suc-item';
      row.innerHTML = `<span class="suc-item-name">${s.name}</span><span class="suc-item-price" style="white-space:pre">${p}</span>`;
      si.appendChild(row);
    });
  }

  const ov = document.getElementById('pb-success');
  if (ov) { ov.classList.add('on'); document.body.style.overflow='hidden'; }
});

function handleSubmit() {}

// ── CONSENT CHECKBOX — enables/disables submit button ──
document.addEventListener('change', function(e) {
  if (e.target && e.target.id === 'consent-cb') {
    const btn = document.getElementById('cta-submit-btn');
    if (btn) btn.disabled = !e.target.checked;
  }
});

function closeSuccess() {
  const ov = document.getElementById('pb-success');
  if (ov) { ov.classList.remove('on'); document.body.style.overflow=''; }
}
</script>
<script 
  src="https://go.velly.io/js/external-tracking.js"
  data-tracking-id="tk_35093faa29cf4d5a85a7d9d2b5e81b14">
</script>

<script async id="netlify-rum-container" src="/.netlify/scripts/rum" data-netlify-rum-site-id="642b7f2a-4522-4161-88c1-78a6a2291e25" data-netlify-deploy-branch="" data-netlify-deploy-context="production" data-netlify-cwv-token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlX2lkIjoiNjQyYjdmMmEtNDUyMi00MTYxLTg4YzEtNzhhNmEyMjkxZTI1IiwiYWNjb3VudF9pZCI6IjY4M2EzZWU3NWJmN2UyYWRlMWIzMjZhNSIsImRlcGxveV9pZCI6IjZhNTkyNmYyZWUyMGMyY2Y2MGU1OTgyNCIsImlzc3VlciI6Im5mc2VydmVyIn0.-IMKUfml26VRUVme-Sva4cACY9zOFLPBxoIQah0r2n8"></script>
</body>
</html>
