1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta name="description" content="Marketlyzer scales with your team. One plan with everything included, per-seat pricing starting at $1,000/month â plus a custom enterprise package with white-label and on-premise deployment."> 7 <meta name="author" content="Marketlyzer"> 8 <meta name="robots" content="index, follow"> 9 10 <!-- Canonical URL for SEO --> 11 <link rel="canonical" href="https://marketlyzer.ai/pricing" /> 12 13 <!-- Open Graph / Facebook --> 14 <meta property="og:type" content="website"> 15 <meta property="og:url" content="https://marketlyzer.ai/pricing"> 16 <meta property="og:title" content="Pricing | Marketlyzer"> 17 <meta property="og:description" content="Marketlyzer scales with your team. One plan with everything included, per-seat pricing starting at $1,000/month â plus a custom enterprise package with white-label and on-premise deployment."> 18 <meta property="og:image" content="http://marketlyzer.ai/static/img/logo.png"> 19 <meta property="og:image:width" content="1200"> 20 <meta property="og:image:height" content="630"> 21 <meta property="og:image:type" content="image/png"> 22 <meta property="og:site_name" content="Marketlyzer"> 23 <meta property="og:locale" content="en_US"> 24 25 <!-- Twitter --> 26 <meta name="twitter:card" content="summary_large_image"> 27 <meta name="twitter:url" content="https://marketlyzer.ai/pricing"> 28 <meta name="twitter:title" content="Pricing | Marketlyzer"> 29 <meta name="twitter:description" content="Marketlyzer scales with your team. One plan with everything included, per-seat pricing starting at $1,000/month â plus a custom enterprise package with white-label and on-premise deployment."> 30 <meta name="twitter:image" content="http://marketlyzer.ai/static/img/logo.png"> 31 <meta name="twitter:image:alt" content="Marketlyzer - Location Intelligence & Foot Traffic Analysis"> 32 <meta name="twitter:creator" content="@marketlyzer"> 33 34 <title>Pricing | Marketlyzer</title> 35 36 <!-- Preconnect to external domains for performance --> 37 <link rel="preconnect" href="https://fonts.googleapis.com"> 38 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 39 <link rel="preconnect" href="https://cdn.jsdelivr.net"> 40 <link rel="preconnect" href="https://unpkg.com"> 41 <link rel="preconnect" href="https://cdnjs.cloudflare.com"> 42 43 <!-- Google Fonts - Updated for better UI --> 44 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Manrope:wght@300;400;500;600;700;800&display=swap" rel="stylesheet"> 45 46 <!-- Font Awesome --> 47 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" integrity="sha512-iecdLmaskl7CVkqkXNQ/ZH/XLlvWZOJyj7Yy7tcenmpD1ypASozpmT/E0iPtmFIB46ZmdtAc9eNBvH0H/ZpiBw==" crossorigin="anonymous" referrerpolicy="no-referrer" /> 48 49 <!-- Tailwind CSS via CDN --> 50
50<script src="https://cdn.tailwindcss.com"></script>
50 51 52 <!-- Favicon and App Icons --> 53 <link rel="icon" href="/static/img/favicon/favicon.ico" sizes="any"> 54 <link rel="icon" type="image/png" sizes="16x16" href="/static/img/favicon/favicon-16x16.png"> 55 <link rel="icon" type="image/png" sizes="32x32" href="/static/img/favicon/favicon-32x32.png"> 56 <link rel="apple-touch-icon" sizes="180x180" href="/static/img/favicon/apple-touch-icon.png"> 57 <link rel="manifest" href="/static/site.webmanifest"> 58 59 <!-- Android Chrome Icons --> 60 <link rel="icon" type="image/png" sizes="192x192" href="/static/img/favicon/android-chrome-192x192.png"> 61 <link rel="icon" type="image/png" sizes="512x512" href="/static/img/favicon/android-chrome-512x512.png"> 62 63 <!-- Theme color for mobile browsers --> 64 <meta name="theme-color" content="#3B82F6"> 65 <meta name="msapplication-TileColor" content="#3B82F6"> 66 <meta name="msapplication-TileImage" content="/static/img/favicon/android-chrome-192x192.png"> 67 68 <!-- Apple mobile web app settings --> 69 <meta name="apple-mobile-web-app-capable" content="yes"> 70 <meta name="apple-mobile-web-app-status-bar-style" content="default"> 71 <meta name="apple-mobile-web-app-title" content="Marketlyzer"> 72 73 <!-- Critical CSS Inline (would be inlined in production) --> 74 <style> 75 /* Critical rendering styles */ 76 body { 77 font-family: 'Inter', sans-serif; 78 color: #1f2937; 79 overflow-x: hidden; 80 line-height: 1.5; 81 } 82 h1, h2, h3, h4, h5, h6 { 83 font-family: 'Manrope', sans-serif; 84 font-weight: 600; 85 line-height: 1.2; 86 } 87 88 /* Remove default focus outline on click/tap */ 89 button:focus:not(:focus-visible), 90 a:focus:not(:focus-visible) { 91 outline: none; 92 } 93 94 /* Keep focus visible for keyboard navigation (accessibility) */ 95 button:focus-visible, 96 a:focus-visible { 97 outline: 2px solid rgba(99, 102, 241, 0.5); 98 outline-offset: 2px; 99 } 100 </style> 101 102 <!-- Optimized CSS Structure --> 103 <link rel="stylesheet" href="/static/css/variables.css"> 104 <link rel="stylesheet" href="/static/css/main.css"> 105 106 <!-- Landing/public navbar styles for non-authenticated users --> 107 108 <link rel="stylesheet" href="/static/css/landing.css"> 109 110 111 <!-- Conditional CSS Loading Based on Page Type --> 112 113 114 115 116 <!-- Leaflet - Only on pages that need maps --> 117 118 119 <!-- Basemap provider â loaded everywhere, since child templates pull in 120 Leaflet from their own head block. maplibre-gl is fetched lazily on 121 first map render, so pages without a map pay nothing. --> 122
122<script>window.MKT_BASEMAP_CONFIG = {"cartoApiKey": "", "provider": "openfreemap"};</script>
122 123 <!-- Not deferred: the map scripts that call it (business-explorer.js, 124 building-analysis.js, ...) are plain body scripts and would run first. --> 125
125<script src="/static/js/basemap.js?v=1791202426"></script>
125 126 127 <!-- Chart.js for visualizations - Deferred loading --> 128
128<script defer src="https://cdn.jsdelivr.net/npm/chart.js"></script>
128 129 130 <!-- Alpine.js for interactive components --> 131
131<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/cdn.min.js"></script>
131 132 133 <!-- AOS Animation Library - Deferred loading --> 134
134<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/aos.js"></script>
134 135 136 <!-- Base JavaScript --> 137
137<script defer src="/static/js/base.js"></script>
137 138 139 <!-- Schema.org structured data --> 140 141
141<script type="application/ld+json"> 142 { 143 "@context": "https://schema.org", 144 "@type": "Organization", 145 "name": "Marketlyzer", 146 "url": "https://marketlyzer.ai", 147 "logo": "https://marketlyzer.ai/static/img/logo.png", 148 "contactPoint": { 149 "@type": "ContactPoint", 150 "contactType": "customer service", 151 "availableLanguage": "English" 152 }, 153 "sameAs": [ 154 "https://twitter.com/marketlyzer", 155 "https://www.linkedin.com/company/marketlyzer-ai" 156 ], 157 "description": "Marketlyzer is a location intelligence platform that helps enterprise teams make data-driven decisions about site selection and expansion strategy.", 158 "address": { 159 "@type": "PostalAddress", 160 "addressCountry": "US" 161 } 162 } 163 </script>
163 164
164<script type="application/ld+json"> 165 { 166 "@context": "https://schema.org", 167 "@type": "WebSite", 168 "name": "Marketlyzer", 169 "url": "https://marketlyzer.ai", 170 "publisher": { 171 "@type": "Organization", 172 "name": "Marketlyzer", 173 "logo": { 174 "@type": "ImageObject", 175 "url": "https://marketlyzer.ai/static/img/logo.png" 176 } 177 } 178 } 179 </script>
179 180
180<script type="application/ld+json"> 181 { 182 "@context": "https://schema.org", 183 "@type": "ItemList", 184 "itemListElement": [ 185 { 186 "@type": "SiteNavigationElement", 187 "position": 1, 188 "name": "Home", 189 "url": "https://marketlyzer.ai/" 190 }, 191 { 192 "@type": "SiteNavigationElement", 193 "position": 2, 194 "name": "Pricing", 195 "description": "Flexible pricing plans for location intelligence", 196 "url": "https://marketlyzer.ai/pricing" 197 }, 198 { 199 "@type": "SiteNavigationElement", 200 "position": 3, 201 "name": "Schedule Demo", 202 "description": "Book a personalized demo of our platform", 203 "url": "https://marketlyzer.ai/schedule-demo" 204 }, 205 { 206 "@type": "SiteNavigationElement", 207 "position": 4, 208 "name": "Sign Up", 209 "description": "Create your Marketlyzer account", 210 "url": "https://marketlyzer.ai/sign-up" 211 }, 212 { 213 "@type": "SiteNavigationElement", 214 "position": 5, 215 "name": "Contact", 216 "description": "Get in touch with our team", 217 "url": "https://marketlyzer.ai/contact" 218 } 219 ] 220 } 221 </script>
221 222
222<script type="application/ld+json"> 223 { 224 "@context": "https://schema.org", 225 "@type": "BreadcrumbList", 226 "itemListElement": [ 227 { 228 "@type": "ListItem", 229 "position": 1, 230 "name": "Home", 231 "item": "https://marketlyzer.ai/" 232 }, 233 { 234 "@type": "ListItem", 235 "position": 2, 236 "name": "Pricing | Marketlyzer", 237 "item": "http://marketlyzer.ai/pricing" 238 } 239 ] 240 } 241 </script>
241 242 243 244 <!-- Plausible Analytics --> 245 <!-- Privacy-friendly analytics by Plausible --> 246
246<script async src="https://plausible.io/js/pa-PknVCi6GqiT9Ut6HErkBq.js"></script>
246 247
247<script> 248 window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}}; 249 plausible.init() 250 </script>
250 251 252 253 254<link rel="preconnect" href="https://fonts.googleapis.com"> 255<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 256<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet"> 257<link rel="stylesheet" href="/static/css/landing.css"> 258<link rel="stylesheet" href="/static/css/pricing.css"> 259 260</head> 261<body class="bg-gray-50 min-h-screen custom-scrollbar" x-data="{ commandPaletteOpen: false, theme: localStorage.getItem('theme') || 'light' }" x-init="$watch('theme', val => { localStorage.setItem('theme', val); document.documentElement.classList.toggle('dark', val === 'dark') })"> 262 <!-- Page Load Progress Bar --> 263 <div id="progress-bar" class="fixed top-0 left-0 h-1 bg-gradient-to-r from-primary-500 via-secondary-500 to-primary-600 z-[100] transition-all duration-300" style="width: 0%;"></div> 264 265 266 267 268 <!-- Landing page navbar for non-authenticated users --> 269 <header class="mtl-nav"> 270 <div class="mtl-nav__inner"> 271 <a href="/" class="flex items-center group"> 272 <div class="bg-gradient-to-br from-primary-500 via-primary-600 to-secondary-500 rounded-xl p-2.5 mr-3 shadow-md group-hover:shadow-lg transform group-hover:scale-105 transition-all duration-300"> 273 <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"> 274 <defs> 275 <linearGradient id="pinGradient2" x1="0%" y1="0%" x2="100%" y2="100%"> 276 <stop offset="0%" style="stop-color:currentColor;stop-opacity:0.3" /> 277 <stop offset="100%" style="stop-color:currentColor;stop-opacity:0.1" /> 278 </linearGradient> 279 <linearGradient id="coreGradient2" x1="0%" y1="0%" x2="100%" y2="100%"> 280 <stop offset="0%" style="stop-color:currentColor;stop-opacity:1" /> 281 <stop offset="100%" style="stop-color:currentColor;stop-opacity:0.8" /> 282 </linearGradient> 283 </defs> 284 <path d="M12 2C8.134 2 5 5.134 5 9c0 6.25 7 15 7 15s7-8.75 7-15c0-3.866-3.134-7-7-7z" 285 fill="url(#pinGradient2)" 286 stroke="currentColor" 287 stroke-width="1.2"/> 288 <circle cx="12" cy="9" r="3" fill="url(#coreGradient2)" stroke="currentColor" stroke-width="0.5"/> 289 </svg> 290 </div> 291 <span class="text-xl font-bold font-display bg-clip-text text-transparent bg-gradient-to-r from-primary-600 via-primary-500 to-secondary-600 group-hover:from-primary-500 group-hover:via-primary-600 group-hover:to-secondary-500 transition-all duration-300 group-hover:scale-105 transform origin-left">Marketlyzer</span> 292 </a> 293 <nav class="mtl-nav__links"> 294 <a href="/" class="nav-link group flex items-center px-3 py-2 text-sm font-medium rounded-lg text-gray-700 hover:text-purple-600 hover:bg-purple-50/50 transition-all duration-200"> 295 <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-purple-100 text-purple-600 mr-2 group-hover:bg-purple-200 transition-colors duration-200"> 296 <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg> 297 </div> 298 <span>Explore Markets</span> 299 </a> 300 <a href="https://calendly.com/marketlyzer/30min" target="_blank" rel="noopener" class="nav-link group flex items-center px-3 py-2 text-sm font-medium rounded-lg text-gray-700 hover:text-primary-600 hover:bg-primary-50/50 transition-all duration-200"> 301 <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-primary-100 text-primary-600 mr-2 group-hover:bg-primary-200 transition-colors duration-200"> 302 <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg> 303 </div>
304 <span>Schedule demo</span> 305 </a> 306 <a href="/pricing" class="nav-link group flex items-center px-3 py-2 text-sm font-medium rounded-lg text-gray-700 hover:text-secondary-600 hover:bg-secondary-50/50 transition-all duration-200"> 307 <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-secondary-100 text-secondary-600 mr-2 group-hover:bg-secondary-200 transition-colors duration-200"> 308 <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6"/></svg> 309 </div> 310 <span>Pricing</span> 311 </a> 312 <a href="/careers" class="nav-link group flex items-center px-3 py-2 text-sm font-medium rounded-lg text-gray-700 hover:text-purple-600 hover:bg-purple-50/50 transition-all duration-200"> 313 <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-purple-100 text-purple-600 mr-2 group-hover:bg-purple-200 transition-colors duration-200"> 314 <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="7" width="20" height="14" rx="2" ry="2"/><path d="M16 21V5a2 2 0 00-2-2h-4a2 2 0 00-2 2v16"/></svg> 315 </div> 316 <span>Careers</span> 317 </a> 318 <a href="/contact" class="nav-link group flex items-center px-3 py-2 text-sm font-medium rounded-lg text-gray-700 hover:text-green-600 hover:bg-green-50/50 transition-all duration-200"> 319 <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-green-100 text-green-600 mr-2 group-hover:bg-green-200 transition-colors duration-200"> 320 <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg> 321 </div> 322 <span>Contact</span> 323 </a> 324 </nav> 325 <div class="mtl-nav__actions"> 326 <a class="mtl-btn mtl-btn--ghost" href="/sign-in">Sign in</a> 327 <a class="mtl-btn mtl-btn--primary" href="/sign-up">Get started</a> 328 </div> 329 <!-- Mobile hamburger --> 330 <button class="mtl-nav__hamburger" id="mtlNavToggle" aria-label="Open menu" aria-expanded="false"> 331 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M4 6h16M4 12h16M4 18h16"/></svg> 332 </button> 333 </div> 334 <!-- Mobile drawer --> 335 <div class="mtl-nav__mobile" id="mtlNavMobile"> 336 <a href="/">Explore Markets</a> 337 <a href="https://calendly.com/marketlyzer/30min" target="_blank" rel="noopener">Schedule demo</a> 338 <a href="/pricing">Pricing</a> 339 <a href="/careers">Careers</a> 340 <a href="/contact">Contact</a> 341 <div class="mtl-nav__mobile-actions"> 342 <a class="mtl-btn mtl-btn--ghost" href="/sign-in">Sign in</a> 343 <a class="mtl-btn mtl-btn--primary" href="/sign-up">Get started</a> 344 </div> 345 </div> 346 </div> 347 </header> 348 349 350 351 <main> 352 <!-- Notification system (Fixed position) --> 353<div id="notifications-container" class="fixed top-20 inset-x-0 z-50 flex flex-col items-center space-y-3 pointer-events-none"> 354 355 356 357</div> 358 359<!-- Notification JavaScript -->
360<script> 361document.addEventListener('DOMContentLoaded', function() { 362 // Initialize notifications 363 initNotifications(); 364}); 365 366// Notifications functions 367function initNotifications() { 368 const toasts = document.querySelectorAll('.notification-toast'); 369 370 toasts.forEach((toast, index) => { 371 // Stagger the appearance of multiple notifications 372 setTimeout(() => { 373 // Show the notification with animation 374 toast.style.opacity = '1'; 375 toast.style.transform = 'translateY(0)'; 376 377 // Auto dismiss after 5 seconds (error messages stay longer) 378 const isError = toast.classList.contains('error'); 379 const dismissTime = isError ? 8000 : 5000; 380 381 setTimeout(() => { 382 dismissNotification(toast); 383 }, dismissTime); 384 }, index * 200); // Stagger by 200ms 385 }); 386} 387 388function dismissNotification(element) { 389 // Add dismiss animation 390 element.style.opacity = '0'; 391 element.style.transform = 'translateY(-4px)'; 392 393 // Remove from DOM after animation completes 394 setTimeout(() => { 395 if (element.parentNode) { 396 element.parentNode.removeChild(element); 397 } 398 }, 300); 399} 400 401// Function to create a notification programmatically 402window.showNotification = function(message, category = 'info') { 403 const container = document.getElementById('notifications-container'); 404 if (!container) return; 405 406 // Create notification element 407 const notification = document.createElement('div'); 408 notification.className = `notification-toast pointer-events-auto opacity-0 transform -translate-y-4 flex items-center max-w-md p-4 pr-8 rounded-lg shadow-lg backdrop-blur-md transition-all duration-300`; 409 410 // Add category-specific styling 411 if (category === 'error') { 412 notification.classList.add('bg-red-50/90', 'text-red-800', 'border-l-4', 'border-red-500', 'error'); 413 } else if (category === 'success') { 414 notification.classList.add('bg-green-50/90', 'text-green-800', 'border-l-4', 'border-green-500', 'success'); 415 } else { 416 notification.classList.add('bg-blue-50/90', 'text-blue-800', 'border-l-4', 'border-blue-500', 'info'); 417 } 418 419 // Icon color based on category 420 const iconColor = category === 'error' ? 'text-red-500' : 421 category === 'success' ? 'text-green-500' : 'text-blue-500'; 422 423 // Path based on category 424 let path; 425 if (category === 'error') { 426 path = 'M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z'; 427 } else if (category === 'success') { 428 path = 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z'; 429 } else { 430 path = 'M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z'; 431 } 432 433 // Create inner content 434 notification.innerHTML = ` 435 <div class="flex items-center"> 436 <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2 ${iconColor}" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 437 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="${path}" /> 438 </svg> 439 <span>${message}</span> 440 </div> 441 <button onclick="dismissNotification(this.parentElement)" class="absolute top-3 right-2 text-gray-500 hover:text-gray-700"> 442 <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 443 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" /> 444 </svg> 445 </button> 446 `; 447 448 // Add to container 449 container.appendChild(notification); 450 451 // Animate in and set auto-dismiss 452 setTimeout(() => { 453 notification.style.opacity = '1'; 454 notification.style.transform = 'translateY(0)'; 455 456 // Auto dismiss 457 const dismissTime = category === 'error' ? 8000 : 5000; 458 setTimeout(() => { 459 dismissNotification(notification); 460 }, dismissTime); 461 }, 10); 462 463 return notification; 464} 465</script>
465 466 467<div class="mtl-landing" id="pricingPage"> 468 469 <!-- Hero --> 470 <section class="mtl-pricing-hero"> 471 <div class="mtl-container"> 472 <span class="mtl-pill">Simple, transparent pricing</span> 473 <h1 class="mtl-pricing-hero__title"> 474 One plan that scales with 475 <span class="mtl-gradient-text">your team</span> 476 </h1> 477 <p class="mtl-hero__subtitle"> 478 Every feature included. Pay per seat â monthly or annual. 479 </p> 480 481 <!-- Billing toggle --> 482 <div class="mtl-pricing-toggle"> 483 <span class="mtl-pricing-toggle__label mtl-pricing-toggle__label--active" data-billing="monthly">Monthly</span> 484 <div class="mtl-pricing-toggle__track" id="billingToggle" role="switch" aria-checked="false" aria-label="Toggle annual billing"> 485 <div class="mtl-pricing-toggle__thumb"></div> 486 </div> 487 <span class="mtl-pricing-toggle__label" data-billing="annual">Annual</span> 488 <span class="mtl-pricing-toggle__save">SAVE 20%</span> 489 </div> 490 </div> 491 </section> 492 493 <!-- Plan grid --> 494 <section class="mtl-section mtl-section--plans"> 495 <div class="mtl-container"> 496 <div class="mtl-plans-grid"> 497 498 <!-- Pro Plan --> 499 <article class="mtl-pp" id="proPlan"> 500 <header class="mtl-pp__header"> 501 <span class="mtl-pp__badge mtl-pp__badge--pro"> 502 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg> 503 Pro 504 </span> 505 <h2 class="mtl-pp__name">Marketlyzer Pro</h2> 506 <p class="mtl-pp__desc">The complete Marketlyzer platform â every module and feature included, on one transparent per-seat price.</p> 507 </header> 508 509 <!-- Live price --> 510 <div class="mtl-pp__price"> 511 <span class="mtl-pp__price-label">Starts at</span> 512 <div class="mtl-pp__price-row"> 513 <span class="mtl-pp__price-currency">$</span> 514 <span class="mtl-pp__price-amount" id="priceAmount">1,000</span> 515 <span class="mtl-pp__price-period">/month</span> 516 </div> 517 <div class="mtl-pp__price-meta"> 518 <span class="mtl-pp__price-billed" id="priceBilled">Billed monthly</span> 519 </div> 520 </div> 521 522 <!-- Seat selector --> 523 <div class="mtl-seats"> 524 <div class="mtl-seats__header"> 525 <div> 526 <div class="mtl-seats__title">Team size</div> 527 <div class="mtl-seats__sub">Starting at 5 seats â scale as you grow</div> 528 </div> 529 <div class="mtl-seats__stepper"> 530 <button type="button" class="mtl-seats__step" id="seatsDown" aria-label="Decrease seats"> 531 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="5" y1="12" x2="19" y2="12"/></svg> 532 </button> 533 <div class="mtl-seats__count"> 534 <input type="number" class="mtl-seats__input" id="seatsInput" value="5" min="5" max="50" inputmode="numeric" /> 535 <span class="mtl-seats__count-label">seats</span> 536 </div> 537 <button type="button" class="mtl-seats__step" id="seatsUp" aria-label="Increase seats"> 538 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg> 539 </button> 540 </div> 541 </div> 542 <div class="mtl-seats__slider-wrap"> 543 <input type="range" class="mtl-seats__slider" id="seatsSlider" min="5" max="50" value="5" step="1" aria-label="Number of seats" /> 544 <div class="mtl-seats__ticks">
545 <span>5</span> 546 <span>15</span> 547 <span>25</span> 548 <span>35</span> 549 <span>50+</span> 550 </div> 551 </div> 552 </div> 553 554 <!-- Features --> 555 <div class="mtl-pp__features"> 556 <div class="mtl-pp__features-title">Everything included</div> 557 <ul class="mtl-pp__features-grid"> 558 <li class="mtl-pp__feature"> 559 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--primary"> 560 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polygon points="16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"/></svg> 561 </span> 562 <span>Market Explorer</span> 563 </li> 564 <li class="mtl-pp__feature"> 565 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--primary"> 566 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 4m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"/><path d="M7 21l3 -4"/><path d="M16 21l-2 -4l-3 -3l1 -6"/><path d="M6 12l2 -3l4 -1l3 3l3 1"/></svg> 567 </span> 568 <span>Foot traffic analytics</span> 569 </li> 570 <li class="mtl-pp__feature"> 571 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--teal"> 572 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg> 573 </span> 574 <span>Demographics & population</span> 575 </li> 576 <li class="mtl-pp__feature"> 577 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--pink"> 578 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></svg> 579 </span> 580 <span>Competition mapping</span> 581 </li> 582 <li class="mtl-pp__feature"> 583 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--green"> 584 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="19" r="3"/><path d="M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15"/><circle cx="18" cy="5" r="3"/></svg> 585 </span> 586 <span>Pedestrian infrastructure</span> 587 </li> 588 <li class="mtl-pp__feature"> 589 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--blue"> 590 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21h18"/><path d="M5 21V7l8-4v18"/><path d="M19 21V11l-6-4"/><path d="M9 9v.01"/><path d="M9 13v.01"/><path d="M9 17v.01"/></svg> 591 </span>
592 <span>3D building analysis</span> 593 </li> 594 <li class="mtl-pp__feature"> 595 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--indigo"> 596 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 10a7.31 7.31 0 0 0 10 10Z"/><path d="m9 15 3-3"/><path d="M17 13a6 6 0 0 0-6-6"/><path d="M21 13A10 10 0 0 0 11 3"/></svg> 597 </span> 598 <span>Satellite imagery</span> 599 </li> 600 <li class="mtl-pp__feature"> 601 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--green"> 602 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg> 603 </span> 604 <span>Cost of living data</span> 605 </li> 606 <li class="mtl-pp__feature"> 607 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--amber"> 608 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v2"/><path d="m4.93 4.93 1.41 1.41"/><path d="M20 12h2"/><path d="m19.07 4.93-1.41 1.41"/><path d="M15.947 12.65a4 4 0 0 0-5.925-4.128"/><path d="M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z"/></svg> 609 </span> 610 <span>Weather insights</span> 611 </li> 612 <li class="mtl-pp__feature"> 613 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--purple"> 614 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3l1.9 4.9L19 9.8l-4.1 3.1L16.2 18 12 15.3 7.8 18l1.3-5.1L5 9.8l5.1-1.9L12 3z"/></svg> 615 </span> 616 <span>AI Market Analyst</span> 617 </li> 618 <li class="mtl-pp__feature"> 619 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--teal"> 620 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"/></svg> 621 </span> 622 <span>Review sentiment analysis</span> 623 </li> 624 <li class="mtl-pp__feature"> 625 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--pink"> 626 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"/><line x1="7" y1="7" x2="7.01" y2="7"/></svg> 627 </span> 628 <span>Customer theme detection</span> 629 </li> 630 <li class="mtl-pp__feature"> 631 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--amber"> 632 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"/><path d="M18 14h-8"/>
632<path d="M15 18h-5"/><path d="M10 6h8v4h-8V6Z"/></svg> 633 </span> 634 <span>Brand news monitoring</span> 635 </li> 636 <li class="mtl-pp__feature"> 637 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--primary"> 638 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg> 639 </span> 640 <span>Branch discovery</span> 641 </li> 642 <li class="mtl-pp__feature"> 643 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--indigo"> 644 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="20" x2="18" y2="10"/><line x1="12" y1="20" x2="12" y2="4"/><line x1="6" y1="20" x2="6" y2="14"/></svg> 645 </span> 646 <span>Success factor modeling</span> 647 </li> 648 <li class="mtl-pp__feature"> 649 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--teal"> 650 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="17 1 21 5 17 9"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><polyline points="7 23 3 19 7 15"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg> 651 </span> 652 <span>Location comparison</span> 653 </li> 654 <li class="mtl-pp__feature"> 655 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--blue"> 656 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/></svg> 657 </span> 658 <span>Foot traffic heatmaps</span> 659 </li> 660 <li class="mtl-pp__feature"> 661 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--sky"> 662 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg> 663 </span> 664 <span>Branded PDF reports</span> 665 </li> 666 <li class="mtl-pp__feature"> 667 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--indigo"> 668 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"/><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"/></svg> 669 </span> 670 <span>Shareable web reports</span> 671 </li> 672 <li class="mtl-pp__feature"> 673 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--slate"> 674 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg> 675 </span>
676 <span>REST API access</span> 677 </li> 678 </ul> 679 </div> 680 681 <a class="mtl-btn mtl-btn--primary mtl-pp__cta" href="https://calendly.com/marketlyzer/30min" target="_blank" rel="noopener"> 682 Schedule demo 683 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 684 </a> 685 </article> 686 687 <!-- Enterprise Plan --> 688 <article class="mtl-pp mtl-pp--enterprise" id="enterprisePlan"> 689 <header class="mtl-pp__header"> 690 <span class="mtl-pp__badge mtl-pp__badge--ent"> 691 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"/><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"/></svg> 692 Enterprise 693 </span> 694 <h2 class="mtl-pp__name">Marketlyzer Enterprise</h2> 695 <p class="mtl-pp__desc">For organizations that need a fully tailored deployment â your branding, your infrastructure, your terms.</p> 696 </header> 697 698 <!-- Custom price --> 699 <div class="mtl-pp__price mtl-pp__price--enterprise"> 700 <div class="mtl-pp__price-row"> 701 <span class="mtl-pp__price-custom">Custom</span> 702 </div> 703 <div class="mtl-pp__price-meta"> 704 <span class="mtl-pp__price-billed">Tailored to your scale & deployment model</span> 705 </div> 706 </div> 707 708 <!-- Enterprise highlights --> 709 <div class="mtl-ent-highlights"> 710 <div class="mtl-ent-highlight"> 711 <div class="mtl-ent-highlight__icon mtl-ent-highlight__icon--whitelabel"> 712 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="13.5" cy="6.5" r="2.5"/><path d="M17.5 10.5a2.5 2.5 0 1 0 0-5"/><circle cx="8.5" cy="8.5" r="2.5"/><circle cx="6.5" cy="14.5" r="2.5"/><circle cx="12" cy="18" r="2.5"/><circle cx="17.5" cy="15.5" r="2.5"/></svg> 713 </div> 714 <div> 715 <strong>White-label platform</strong> 716 <p>Your brand, your domain, your customers â fully reskinned with custom theming, logos, and email.</p> 717 </div> 718 </div> 719 <div class="mtl-ent-highlight"> 720 <div class="mtl-ent-highlight__icon mtl-ent-highlight__icon--server"> 721 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="8" rx="2"/><rect x="2" y="14" width="20" height="8" rx="2"/><line x1="6" y1="6" x2="6.01" y2="6"/><line x1="6" y1="18" x2="6.01" y2="18"/></svg> 722 </div> 723 <div> 724 <strong>On-premise & private cloud</strong> 725 <p>Deploy inside your VPC, on your own servers, or air-gapped. Full data sovereignty included.</p> 726 </div> 727 </div> 728 <div class="mtl-ent-highlight"> 729 <div class="mtl-ent-highlight__icon mtl-ent-highlight__icon--security"> 730 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg> 731 </div> 732 <div> 733 <strong>SSO, SCIM & compliance</strong> 734 <p>SAML / OIDC sign-on, user provisioning, SOC 2 controls, GDPR, audit logs & custom DPAs.</p> 735 </div> 736 </div> 737 <div class="mtl-ent-highlight"> 738 <div class="mtl-ent-highlight__icon mtl-ent-highlight__icon--success"> 739 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg> 740 </div> 741 <div> 742 <strong>Dedicated success team</strong> 743 <p>Named CSM, solutions architect, and 24/7 priority engineering support backed by a 99.9% SLA.</p> 744 </div> 745 </div> 746 </div> 747 748 <!-- Enterprise features --> 749 <div class="mtl-pp__features"> 750 <div class="mtl-pp__features-title">Everything in Pro, plus</div> 751 <ul class="mtl-pp__features-list"> 752 <li class="mtl-pp__feature">
753 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--ent"><svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg></span> 754 <span>Custom data sources & ingestion pipelines</span> 755 </li> 756 <li class="mtl-pp__feature"> 757 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--ent"><svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg></span> 758 <span>Bespoke integrations (Salesforce, ERP, BI)</span> 759 </li> 760 <li class="mtl-pp__feature"> 761 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--ent">
761<svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg></span> 762 <span>Unlimited seats & usage</span> 763 </li> 764 <li class="mtl-pp__feature"> 765 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--ent"><svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg></span> 766 <span>Custom contractual & payment terms</span> 767 </li> 768 <li class="mtl-pp__feature"> 769 <span class="mtl-pp__feature-icon mtl-pp__feature-icon--ent"><svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg></span> 770 <span>Onboarding, training & change management</span> 771 </li> 772 </ul> 773 </div> 774 775 <a class="mtl-btn mtl-btn--ghost mtl-pp__cta mtl-pp__cta--ent" href="https://calendly.com/marketlyzer/30min" target="_blank" rel="noopener"> 776 Talk to sales 777 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 778 </a> 779 </article> 780 781 </div> 782 </div> 783 </section> 784 785 <!-- CTA --> 786 <section class="mtl-section"> 787 <div class="mtl-container"> 788 <div class="mtl-cta"> 789 <div class="mtl-cta__ball" aria-hidden="true"></div> 790 <div class="mtl-cta__ball mtl-cta__ball--2" aria-hidden="true"></div> 791 <h2>Not sure which fits?</h2> 792 <p class="mtl-hero__subtitle">Book a 30-minute walkthrough and we'll recommend the right deployment for your team.</p> 793 <div class="mtl-hero__actions"> 794 <a class="mtl-btn mtl-btn--cta" href="https://calendly.com/marketlyzer/30min" target="_blank" rel="noopener">Schedule a demo</a> 795 <a class="mtl-btn mtl-btn--ghost-light" href="/contact">Talk to sales</a> 796 </div> 797 </div> 798 </div> 799 </section> 800 801</div> 802
803<script> 804(function () { 805 const PER_SEAT_MONTHLY = 200; 806 const PER_SEAT_ANNUAL = 160; 807 const MIN_SEATS = 5; 808 const MAX_SEATS = 50; 809 810 const slider = document.getElementById('seatsSlider'); 811 const input = document.getElementById('seatsInput'); 812 const btnUp = document.getElementById('seatsUp'); 813 const btnDown = document.getElementById('seatsDown'); 814 const amountEl = document.getElementById('priceAmount'); 815 const billedEl = document.getElementById('priceBilled'); 816 const track = document.getElementById('billingToggle'); 817 const labels = document.querySelectorAll('.mtl-pricing-toggle__label'); 818 819 let seats = MIN_SEATS; 820 let isAnnual = false; 821 822 function clamp(v) { 823 v = parseInt(v, 10); 824 if (isNaN(v)) v = MIN_SEATS; 825 return Math.max(MIN_SEATS, Math.min(MAX_SEATS, v)); 826 } 827 828 function formatPrice(n) { 829 return n.toLocaleString('en-US'); 830 } 831 832 function syncSliderFill() { 833 const pct = ((seats - MIN_SEATS) / (MAX_SEATS - MIN_SEATS)) * 100; 834 slider.style.setProperty('--seat-pct', pct + '%'); 835 } 836 837 function render() { 838 slider.value = seats; 839 input.value = seats; 840 syncSliderFill(); 841 842 const perSeat = isAnnual ? PER_SEAT_ANNUAL : PER_SEAT_MONTHLY; 843 const total = seats * perSeat; 844 845 amountEl.textContent = formatPrice(total); 846 billedEl.textContent = isAnnual ? 'Billed annually' : 'Billed monthly'; 847 848 track.classList.toggle('is-annual', isAnnual); 849 track.setAttribute('aria-checked', isAnnual ? 'true' : 'false'); 850 labels.forEach(function (l) { 851 l.classList.toggle('mtl-pricing-toggle__label--active', (l.dataset.billing === 'annual') === isAnnual); 852 }); 853 } 854 855 function setSeats(v) { 856 seats = clamp(v); 857 render(); 858 } 859 860 slider.addEventListener('input', function () { setSeats(slider.value); }); 861 input.addEventListener('input', function () { setSeats(input.value); }); 862 input.addEventListener('blur', function () { setSeats(input.value); }); 863 btnUp.addEventListener('click', function () { setSeats(seats + 1); }); 864 btnDown.addEventListener('click', function () { setSeats(seats - 1); }); 865 866 track.addEventListener('click', function () { isAnnual = !isAnnual; render(); }); 867 labels.forEach(function (l) { 868 l.addEventListener('click', function () { isAnnual = l.dataset.billing === 'annual'; render(); }); 869 }); 870 871 render(); 872})(); 873</script>
873 874 875 </main> 876 877 878 879<footer class="mtl-footer"> 880 <div class="mtl-footer__grid"> 881 <div> 882 <div class="mtl-footer__title">Marketlyzer</div> 883 <p>AI-powered location analytics for confident expansion decisions.</p> 884 </div> 885 <div> 886 <div class="mtl-footer__title">Product</div> 887 <a class="mtl-footer__link" href="/pricing">Pricing</a> 888 <a class="mtl-footer__link" href="https://calendly.com/marketlyzer/30min" target="_blank" rel="noopener">Schedule demo</a> 889 </div> 890 <div> 891 <div class="mtl-footer__title">Company</div> 892 <a class="mtl-footer__link" href="/contact">Contact</a> 893 <a class="mtl-footer__link" href="/careers">Careers</a> 894 <a class="mtl-footer__link" href="/privacy-policy">Privacy policy</a> 895 <a class="mtl-footer__link" href="/terms-of-service">Terms of service</a> 896 </div> 897 <div> 898 <div class="mtl-footer__title">Get started</div> 899 <a class="mtl-footer__link" href="/sign-up">Create an account</a> 900 <a class="mtl-footer__link" href="/sign-in">Sign in</a> 901 </div> 902 </div> 903 <div class="mtl-footer__bottom"> 904 <span>© 2026 Marketlyzer. All rights reserved.</span> 905 <span>Built for location strategy teams.</span> 906 </div> 907</footer> 908 909 910 911 912 913 <!-- Add modal interaction script --> 914
914<script> 915 document.addEventListener('DOMContentLoaded', function() { 916 const signInModal = document.getElementById('sign-in-modal'); 917 const closeModalButton = document.getElementById('close-modal'); 918 const modalBackdrop = document.getElementById('modal-backdrop'); 919 920 // The sign-in modal is not on every page. Without this guard the 921 // handler threw on the missing element and the init calls below 922 // never ran (no flash toasts, no progress bar, no header shadow). 923 if (signInModal && closeModalButton && modalBackdrop) { 924 // Close modal functions 925 const closeModal = function() { 926 const modalContent = signInModal.querySelector('.bg-white'); 927 modalContent.style.opacity = '0'; 928 modalContent.style.transform = 'scale(0.95)'; 929 930 setTimeout(() => { 931 signInModal.classList.add('hidden'); 932 document.body.classList.remove('overflow-hidden'); 933 }, 200); 934 }; 935 936 // Close modal when close button is clicked 937 closeModalButton.addEventListener('click', closeModal); 938 939 // Close modal when clicking outside 940 modalBackdrop.addEventListener('click', function(e) { 941 if (e.target === modalBackdrop) { 942 closeModal(); 943 } 944 }); 945 946 // Close modal when ESC key is pressed 947 document.addEventListener('keydown', function(e) { 948 if (e.key === 'Escape' && !signInModal.classList.contains('hidden')) { 949 closeModal(); 950 } 951 }); 952 } 953 954 // Initialize notifications 955 initNotifications(); 956 957 // Initialize progress bar 958 initProgressBar(); 959 960 // Initialize scroll effects 961 initScrollEffects(); 962 }); 963 964 // Progress Bar 965 function initProgressBar() { 966 const progressBar = document.getElementById('progress-bar'); 967 968 // Show progress on page load 969 progressBar.style.width = '30%'; 970 971 window.addEventListener('load', () => { 972 progressBar.style.width = '100%'; 973 setTimeout(() => { 974 progressBar.style.opacity = '0'; 975 setTimeout(() => { 976 progressBar.style.width = '0%'; 977 progressBar.style.opacity = '1'; 978 }, 300); 979 }, 200); 980 }); 981 982 // Show progress on link clicks 983 document.querySelectorAll('a:not([target="_blank"]):not([href^="#"])').forEach(link => { 984 link.addEventListener('click', (e) => { 985 if (link.href && !link.href.includes('javascript:')) { 986 progressBar.style.width = '70%'; 987 } 988 }); 989 }); 990 } 991 992 // Scroll Effects 993 function initScrollEffects() { 994 const header = document.getElementById('main-header-shell'); 995 996 window.addEventListener('scroll', () => { 997 const currentScroll = window.pageYOffset; 998 999 // Add shadow on scroll 1000 if (currentScroll > 10) { 1001 header.style.boxShadow = '0 4px 20px rgba(0, 0, 0, 0.08)'; 1002 } else { 1003 header.style.boxShadow = ''; 1004 } 1005 }); 1006 } 1007 1008 // Notifications functions 1009 function initNotifications() { 1010 const toasts = document.querySelectorAll('.notification-toast'); 1011 1012 toasts.forEach((toast, index) => { 1013 // Stagger the appearance of multiple notifications 1014 setTimeout(() => { 1015 // Show the notification with animation 1016 toast.style.opacity = '1'; 1017 toast.style.transform = 'translateY(0)'; 1018 1019 // Auto dismiss after 5 seconds (error messages stay longer) 1020 const isError = toast.classList.contains('bg-red-50/90');
1021 const dismissTime = isError ? 8000 : 5000; 1022 1023 setTimeout(() => { 1024 dismissNotification(toast); 1025 }, dismissTime); 1026 }, index * 200); // Stagger by 200ms 1027 }); 1028 } 1029 1030 function dismissNotification(element) { 1031 // Add dismiss animation 1032 element.style.opacity = '0'; 1033 element.style.transform = 'translateY(4px)'; 1034 1035 // Remove from DOM after animation completes 1036 setTimeout(() => { 1037 if (element.parentNode) { 1038 element.parentNode.removeChild(element); 1039 } 1040 }, 300); 1041 } 1042 </script>
1042 1043 1044 <!-- Sign Up Modal --> 1045 <div id="sign-up-modal" class="fixed inset-0 z-50 hidden"> 1046 <div class="fixed inset-0 bg-black bg-opacity-50 transition-opacity" id="signup-modal-backdrop"></div> 1047 <div class="fixed inset-0 z-10 flex items-center justify-center"> 1048 <div class="bg-white rounded-xl shadow-elegant w-full max-w-md mx-4 transform transition-all"> 1049 <div class="relative"> 1050 <!-- Close button --> 1051 <button id="close-signup-modal" class="absolute right-4 top-4 text-gray-400 hover:text-gray-600 focus:outline-none"> 1052 <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 1053 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" /> 1054 </svg> 1055 </button> 1056 1057 <!-- Header with logo --> 1058 <div class="pt-8 px-8 pb-0 text-center"> 1059 <div class="inline-flex items-center justify-center"> 1060 <div class="bg-gradient-to-r from-primary-600 to-secondary-500 rounded-lg p-2 mr-3"> 1061 <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"> 1062 <!-- Modern AI-powered location intelligence logo --> 1063 1064 <!-- Outer location pin with gradient effect --> 1065 <defs> 1066 <linearGradient id="pinGradientSignup" x1="0%" y1="0%" x2="100%" y2="100%"> 1067 <stop offset="0%" style="stop-color:currentColor;stop-opacity:0.3" /> 1068 <stop offset="100%" style="stop-color:currentColor;stop-opacity:0.1" /> 1069 </linearGradient> 1070 <linearGradient id="coreGradientSignup" x1="0%" y1="0%" x2="100%" y2="100%"> 1071 <stop offset="0%" style="stop-color:currentColor;stop-opacity:1" /> 1072 <stop offset="100%" style="stop-color:currentColor;stop-opacity:0.8" /> 1073 </linearGradient> 1074 </defs> 1075 1076 <!-- Location pin base with modern styling --> 1077 <path d="M12 2C8.134 2 5 5.134 5 9c0 6.25 7 15 7 15s7-8.75 7-15c0-3.866-3.134-7-7-7z" 1078 fill="url(#pinGradientSignup)" 1079 stroke="currentColor" 1080 stroke-width="1.2"/> 1081 1082 <!-- AI core center with subtle pulsing effect --> 1083 <circle cx="12" cy="9" r="3" fill="url(#coreGradientSignup)" stroke="currentColor" stroke-width="0.5"/> 1084 1085 <!-- Neural network connections --> 1086 <g opacity="0.7" stroke="currentColor" stroke-width="0.8" fill="none"> 1087 <!-- Primary connections from center --> 1088 <line x1="12" y1="9" x2="9.5" y2="6.5" stroke-linecap="round"/> 1089 <line x1="12" y1="9" x2="14.5" y2="6.5" stroke-linecap="round"/> 1090 <line x1="12" y1="9" x2="9.5" y2="11.5" stroke-linecap="round"/> 1091 <line x1="12" y1="9" x2="14.5" y2="11.5" stroke-linecap="round"/> 1092 1093 <!-- Secondary network nodes --> 1094 <circle cx="9.5" cy="6.5" r="0.8" fill="currentColor" opacity="0.6"/> 1095 <circle cx="14.5" cy="6.5" r="0.8" fill="currentColor" opacity="0.6"/> 1096 <circle cx="9.5" cy="11.5" r="0.8" fill="currentColor" opacity="0.6"/> 1097 <circle cx="14.5" cy="11.5" r="0.8" fill="currentColor" opacity="0.6"/> 1098 </g> 1099 1100 <!-- Data visualization elements --> 1101 <g opacity="0.5" stroke="currentColor" stroke-width="0.6" fill="none"> 1102 <!-- Mini chart bars inside the core --> 1103 <line x1="10.5" y1="10" x2="10.5" y2="8.5" stroke-linecap="round"/> 1104 <line x1="11.2" y1="10" x2="11.2" y2="7.8" stroke-linecap="round"/> 1105 <line x1="11.9" y1="10" x2="11.9" y2="8.2" stroke-linecap="round"/> 1106 <line x1="12.6" y1="10" x2="12.6" y2="7.5" stroke-linecap="round"/> 1107 <line x1="13.3" y1="10" x2="13.3" y2="8.8" stroke-linecap="round"/> 1108 </g> 1109 1110 <!-- Intelligence indicators - small dots around the pin --> 1111 <g fill="currentColor" opacity="0.4"> 1112 <circle cx="7" cy="7" r="0.5"/> 1113 <circle cx="17" cy="7" r="0.5"/> 1114 <circle cx="8" cy="12" r="0.5"/> 1115 <circle cx="16" cy="12" r="0.5"/> 1116 </g> 1117 1118 <!-- Subtle scanning lines for tech feel --> 1119 <g opacity="0.3" stroke="currentColor" stroke-width="0.3"> 1120 <line x1="6" y1="8" x2="18" y2="8" stroke-dasharray="2,1"/> 1121 <line x1="6" y1="10" x2="18" y2="10" stroke-dasharray="2,1"/> 1122 </g> 1123 </svg> 1124 </div>
1125 <span class="text-2xl font-bold font-display bg-clip-text text-transparent bg-gradient-to-r from-primary-600 to-secondary-600">Marketlyzer</span> 1126 </div> 1127 <h2 class="mt-6 text-2xl font-semibold text-gray-900 font-display">Create your account</h2> 1128 <p class="mt-2 text-gray-600">Start finding business opportunities today</p> 1129 </div> 1130 1131 <!-- Sign-up form --> 1132 <div class="p-8"> 1133 <!-- Email Sign Up Form --> 1134 <form class="space-y-4"> 1135 <div class="grid grid-cols-2 gap-4"> 1136 <div> 1137 <label for="first-name" class="block text-sm font-medium text-gray-700 mb-1">First name</label> 1138 <input type="text" id="first-name" name="first-name" required class="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:ring-primary-500 focus:border-primary-500"> 1139 </div> 1140 <div> 1141 <label for="last-name" class="block text-sm font-medium text-gray-700 mb-1">Last name</label> 1142 <input type="text" id="last-name" name="last-name" required class="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:ring-primary-500 focus:border-primary-500"> 1143 </div> 1144 </div> 1145 <div> 1146 <label for="signup-email" class="block text-sm font-medium text-gray-700 mb-1">Email address</label> 1147 <input type="email" id="signup-email" name="email" required class="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:ring-primary-500 focus:border-primary-500"> 1148 </div> 1149 <div> 1150 <label for="signup-password" class="block text-sm font-medium text-gray-700 mb-1">Password</label> 1151 <input type="password" id="signup-password" name="password" required class="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:ring-primary-500 focus:border-primary-500"> 1152 <p class="mt-1 text-xs text-gray-500">At least 8 characters with letters, numbers and special characters</p> 1153 </div> 1154 <div class="flex items-start"> 1155 <input id="terms" name="terms" type="checkbox" class="h-4 w-4 mt-1 text-primary-600 focus:ring-primary-500 border-gray-300 rounded"> 1156 <label for="terms" class="ml-2 block text-sm text-gray-700"> 1157 I agree to the <a href="/terms-of-service" class="text-primary-600 hover:text-primary-500">Terms of Service</a> and <a href="/privacy-policy" class="text-primary-600 hover:text-primary-500">Privacy Policy</a> 1158 </label> 1159 </div> 1160 <button type="submit" class="w-full flex justify-center py-2.5 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-gradient-to-r from-primary-600 to-primary-700 hover:from-primary-700 hover:to-primary-800 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500"> 1161 Create account 1162 </button> 1163 </form> 1164 1165 <div class="mt-6 text-center text-sm"> 1166 <p class="text-gray-600"> 1167 Already have an account? 1168 <a href="/sign-in" class="text-primary-600 hover:text-primary-500 font-medium">Sign in</a> 1169 </p> 1170 </div> 1171 </div> 1172 </div> 1173 </div> 1174 </div> 1175 </div> 1176 1177 1178</body> 1179</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.