1<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="Snitcher turns anonymous website visitors into actionable leads. Identify in-market companies, see buyer intent, and trigger workflows across your stack."><meta name="author" content="Snitcher"><meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"><!-- Canonical URL --><link rel="canonical" href="https://www.snitcher.com/"><!-- Open Graph --><meta property="og:title" content="Snitcher â Uncover your hidden website visitors"><meta property="og:description" content="Snitcher turns anonymous website visitors into actionable leads. Identify in-market companies, see buyer intent, and trigger workflows across your stack."><meta property="og:type" content="website"><meta property="og:url" content="https://www.snitcher.com/"><meta property="og:site_name" content="Snitcher"><meta property="og:locale" content="en_US"><meta property="og:image" content="https://www.snitcher.com/og-image.png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="Snitcher â Uncover your hidden website visitors"><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Snitcher â Uncover your hidden website visitors"><meta name="twitter:description" content="Snitcher turns anonymous website visitors into actionable leads. Identify in-market companies, see buyer intent, and trigger workflows across your stack."><meta name="twitter:image" content="https://www.snitcher.com/og-image.png"><meta name="twitter:image:alt" content="Snitcher â Uncover your hidden website visitors"><!-- Favicon --><link rel="icon" type="image/png" href="/favicon.png"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><!-- Web App Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><!-- LLM-readable content reference --><link rel="alternate" type="text/plain" href="/llms.txt" title="LLM-readable site description"><!-- Font preloads --><link rel="preload" href="/fonts/AtypText-Semibold.otf" as="font" type="font/opentype" crossorigin><link rel="preload" href="/fonts/PlusJakartaSans-Regular.woff2" as="font" crossorigin><!-- Preconnects for performance --><link rel="dns-prefetch" href="https://app.snitcher.com"><title>Snitcher â Uncover your hidden website visitors | Snitcher</title><!-- Structured Data -->
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Snitcher","url":"https://www.snitcher.com","logo":"https://www.snitcher.com/logo.png","sameAs":["https://linkedin.com/company/snitcher"],"description":"Uncover your hidden website visitors. Snitcher turns anonymous intent into predictable revenue."}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"Snitcher","url":"https://www.snitcher.com","description":"Uncover your hidden website visitors. Snitcher turns anonymous intent into predictable revenue."}</script>
1<!-- Personalisation URL capture â MUST run before HeadScripts so the 2 inline capture beats the Radar tracker's URL strip. Always-on (the 3 capture itself is just an indexOf + window assignment); the actual 4 personalisation UI is opted in per page via <PersonalizationProvider />. --><!-- Restore H1 visibility for JS-disabled / crawler agents. Lives next to 5 the capture (not the Provider) because JS-off visitors should always 6 see the original copy regardless of which page they land on. --><noscript><style>[data-personalize-template]{visibility:visible!important}</style></noscript>
6<script> 7 (function () { 8 // Stash the raw URL search on `window` â sessionStorage at this stage 9 // can be wiped by Cookiebot (or other CMP/tracker init) before our 10 // bundled script reads it. `window` survives. 11 var search = window.location.search || ''; 12 if ( 13 search && 14 (search.indexOf('sn_email=') !== -1 || search.indexOf('sn_eid=') !== -1) 15 ) { 16 window.__snitcherPersonalizationRawSearch = search; 17 } 18 })(); 19</script>
19<!-- Analytics & Tracking --><!-- Preconnects for analytics services --><link rel="preconnect" href="https://cdn.snitcher.com"><link rel="preconnect" href="https://radar.snitcher.com"><link rel="preconnect" href="https://touch.snitcher.com"><link rel="dns-prefetch" href="https://www.googletagmanager.com"><link rel="dns-prefetch" href="https://consent.cookiebot.com"><link rel="dns-prefetch" href="https://connect.facebook.net"><!-- Snitcher Radar -->
19<script> 20!function(e){"use strict";var t=e&&e.namespace;if(t&&e.profileId&&e.cdn){var i=window[t];if(i&&Array.isArray(i)||(i=window[t]=[]),!i.initialized&&!i._loaded)if(i._loaded)console&&console.warn("[Radar] Duplicate initialization attempted");else{i._loaded=!0;["track","page","identify","group","alias","ready","debug","on","off","once","trackClick","trackSubmit","trackLink","trackForm","pageview","screen","reset","register","setAnonymousId","addSourceMiddleware","addIntegrationMiddleware","addDestinationMiddleware","giveCookieConsent"].forEach((function(e){var a;i[e]=(a=e,function(){var e=window[t];if(e.initialized)return e[a].apply(e,arguments);var i=[].slice.call(arguments);return i.unshift(a),e.push(i),e})})),-1===e.apiEndpoint.indexOf("http")&&(e.apiEndpoint="https://"+e.apiEndpoint),i.bootstrap=function(){var t,i=document.createElement("script");i.async=!0,i.type="text/javascript",i.id="__radar__",i.setAttribute("data-settings",JSON.stringify(e)),i.src=[-1!==(t=e.cdn).indexOf("http")?"":"https://",t,"/releases/latest/radar.min.js"].join("");var a=document.scripts[0];a.parentNode.insertBefore(i,a)},i.bootstrap()}}else"undefined"!=typeof console&&console.error("[Radar] Configuration incomplete")}({ 21 apiEndpoint: "radar.snitcher.com", 22 cdn: "cdn.snitcher.com", 23 namespace: "Snitcher", 24 profileId: "8395164", 25 features: { 26 formTracking: true, 27 downloadTracking: true, 28 }, 29}); 30</script>
30<!-- Shared dual-emit tracking helper: Snitcher Radar + GTM dataLayer. 31 Module scripts use the identical `track()` from src/lib/track.ts; 32 this global exists so `is:inline` scripts can emit the same way. -->
32<script> 33window.snitcherTrack = function (event, properties) { 34 var props = properties || {}; 35 // Product-stream pages tag events with a product_stream property 36 // (explicit properties win). Keep in sync with src/lib/track.ts. 37 try { 38 var streams = { 'partners': 'partners', 'radar': 'radar', 'platform': 'platform', 'ip-to-company-api': 'ip2c' }; 39 var firstSegment = window.location.pathname.split('/').filter(Boolean)[0] || ''; 40 if (streams[firstSegment] && !('product_stream' in props)) { 41 var tagged = { product_stream: streams[firstSegment] }; 42 for (var pk in props) { 43 if (Object.prototype.hasOwnProperty.call(props, pk)) tagged[pk] = props[pk]; 44 } 45 props = tagged; 46 } 47 } catch (e) { /* fall through untagged */ } 48 try { 49 if (window.Snitcher && typeof window.Snitcher.track === 'function') { 50 // Radar names are namespaced so marketing-site events stay separable 51 // from app-emitted events; the dataLayer name below stays bare for 52 // GTM triggers. 53 window.Snitcher.track('website.' + event, props); 54 } 55 } catch (e) { /* analytics must never break the page */ } 56 try { 57 window.dataLayer = window.dataLayer || []; 58 var entry = { event: event }; 59 for (var key in props) { 60 if (Object.prototype.hasOwnProperty.call(props, key)) entry[key] = props[key]; 61 } 62 window.dataLayer.push(entry); 63 } catch (e) { /* ignore */ } 64}; 65</script>
65<!-- Google Tag Manager (consent-gated, then lazy loaded) -->
65<script> 66/* 67 * GTM is injected as a DOM-created
67<script>. Cookiebot's `data-blockingmode="auto"` 68 * rewrites tags it can see in the markup, so it never intercepts this one â which is 69 * why the container, and the GA, Google Ads, Reddit and Clarity tags inside it, used 70 * to load before the visitor had answered the banner. Consent is therefore checked 71 * here explicitly; the static tags further down stay covered by auto-blocking. 72 */ 73function gtmConsentGranted() { 74 var consent = window.Cookiebot && window.Cookiebot.consent; 75 return Boolean(consent && (consent.statistics || consent.marketing)); 76} 77function initGTM() { 78 if (window.gtmDidInit || !gtmConsentGranted()) { 79 return false; 80 } 81 window.gtmDidInit = true; 82 const script = document.createElement('script'); 83 script.type = 'text/javascript'; 84 script.async = true; 85 script.onload = () => { 86 window.dataLayer = window.dataLayer || []; 87 window.dataLayer.push({ event: 'gtm.js', 'gtm.start': new Date().getTime(), 'gtm.uniqueEventId': 0 }); 88 }; 89 script.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-THP98M8'; 90 document.head.appendChild(script); 91 return true; 92} 93function initGTMOnEvent(event) { 94 // Only spend the listener once the container actually loaded â before consent 95 // initGTM() is a no-op, and dropping the listener there would lose the trigger. 96 if (initGTM()) { 97 event.currentTarget.removeEventListener(event.type, initGTMOnEvent); 98 } 99} 100document.addEventListener('DOMContentLoaded', () => { 101 setTimeout(initGTM, 500); 102}); 103document.addEventListener('scroll', initGTMOnEvent); 104document.addEventListener('mousemove', initGTMOnEvent); 105document.addEventListener('touchstart', initGTMOnEvent); 106// Consent usually lands after the lazy triggers have already run and no-opped, so 107// load on Cookiebot's own events too. 108window.addEventListener('CookiebotOnAccept', initGTM); 109window.addEventListener('CookiebotOnConsentReady', initGTM); 110</script>
110<!-- Google Consent Mode v2 defaults â MUST run before Cookiebot and any Google tag. 111 Without these Google's tags assume consent, which is what Cookiebot's scan reports 112 as "GCM consent parameters set as Default: At risk". Cookiebot updates the signal 113 once the visitor answers; until then everything non-essential stays denied. -->
113<script> 114window.dataLayer = window.dataLayer || []; 115function gtag() { window.dataLayer.push(arguments); } 116gtag('consent', 'default', { 117 ad_storage: 'denied', 118 ad_user_data: 'denied', 119 ad_personalization: 'denied', 120 analytics_storage: 'denied', 121 functionality_storage: 'denied', 122 personalization_storage: 'denied', 123 security_storage: 'granted', 124 wait_for_update: 500, 125}); 126gtag('set', 'ads_data_redaction', true); 127gtag('set', 'url_passthrough', true); 128</script>
128<!-- Cookiebot CMP (Cookie Consent) -->
128<script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="61d78ce6-ca00-4e9d-9b95-3dd373e04e20" data-blockingmode="auto" type="text/javascript"></script>
128<!-- Segment Analytics -->
128<script> 129!function(){var i="analytics",analytics=window[i]=window[i]||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","screen","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"];analytics.factory=function(e){return function(){if(window[i].initialized)return window[i][e].apply(window[i],arguments);var n=Array.prototype.slice.call(arguments);if(["track","screen","alias","group","page","identify"].indexOf(e)>-1){var c=document.querySelector("link[rel='canonical']");n.push({__t:"bpc",c:c&&c.getAttribute("href")||void 0,p:location.pathname,u:location.href,s:location.search,t:document.title,r:document.referrer})}n.unshift(e);analytics.push(n);return analytics}};for(var n=0;n<analytics.methods.length;n++){var key=analytics.methods[n];analytics[key]=analytics.factory(key)}analytics.load=function(key,n){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.setAttribute("data-global-segment-analytics-key",i);t.src="https://touch.snitcher.com/analytics.js/v1/" + key + "/analytics.min.js";var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(t,r);analytics._loadOptions=n};analytics._writeKey="fS7MHBg3XdVWDj1Gf6mi7xqpGDv6atOV";;analytics.SNIPPET_VERSION="5.2.0"; 130analytics.load("fS7MHBg3XdVWDj1Gf6mi7xqpGDv6atOV"); 131analytics.page(); 132}}(); 133</script>
133<!-- Meta Pixel -->
133<script>
vendor: 399 bytes, lines 133-142
133 134!function(f,b,e,v,n,t,s) 135{if(f.fbq)return;n=f.fbq=function(){n.callMethod? 136n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 137if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 138n.queue=[];t=b.createElement(e);t.async=!0; 139t.src=v;s=b.getElementsByTagName(e)[0]; 140s.parentNode.insertBefore(t,s)}(window, document,'script', 141'https://connect.facebook.net/en_US/fbevents.js'); 142fbq('init', '
1421377135903938422
vendor: 30 bytes, lines 142-143
142'); 143fbq('track', 'PageView');
144</script>
144<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1377135903938422&ev=PageView&noscript=1"></noscript><link rel="stylesheet" href="/_astro/about.D_2VM18I.css"> 145<style>.referral-offer-banner[data-astro-cid-nahiwob6].hidden{display:none}.referral-offer-banner[data-astro-cid-nahiwob6].is-visible{display:block}.referral-offer-banner[data-astro-cid-nahiwob6].is-dismissing{transition:opacity .2s ease-out,max-height .2s ease-out,padding .2s ease-out;opacity:0;max-height:0;padding-top:0;padding-bottom:0}#hero .section-container{-o-border-image:linear-gradient(to bottom,transparent,rgba(228,228,231,.5)) 1;border-image:linear-gradient(to bottom,transparent,rgba(228,228,231,.5)) 1}#hero .section-container:before,#hero .section-container:after{-webkit-mask-image:linear-gradient(to bottom,transparent,black);mask-image:linear-gradient(to bottom,transparent,black)} 146:root{--color-palatinate-50: #efefff;--color-palatinate-100: #dadaff;--color-palatinate-200: #b4b4ff;--color-palatinate-300: #8e8eff;--color-palatinate-400: #6a6aff;--color-palatinate-500: #4c4cff;--color-palatinate-600: #3e3ee6;--color-palatinate-700: #3131c2;--color-palatinate-800: #26269e;--color-palatinate-900: #1d1d7a;--color-palatinate-950: #171761;--color-lavender-50: #efefff;--color-lavender-100: #e9e8ff;--color-lavender-200: #d5d4ff;--color-lavender-300: #b8b1ff;--color-lavender-400: #9485ff;--color-lavender-500: #7153ff;--color-lavender-600: #5f30f7;--color-lavender-700: #511ee3;--color-lavender-800: #4318bf;--color-lavender-900: #38169c;--color-lavender-950: #210b6a;--color-jade-50: #ecfdf3;--color-jade-100: #d1fae1;--color-jade-200: #a7f3c9;--color-jade-300: #6de8ab;--color-jade-400: #33d489;--color-jade-500: #0ead69;--color-jade-600: #04975b;--color-jade-700: #03794c;--color-jade-800: #05603d;--color-jade-900: #064e34;--color-jade-950: #022c1e;--color-coral-50: #fef8f7;--color-coral-100: #fdedea;--color-coral-200: #fbd4cc;--color-coral-300: #fabaab;--color-coral-400: #f8a087;--color-coral-500: #f78154;--color-coral-600: #d0602a;--color-coral-700: #a1491f;--color-coral-800: #753313;--color-coral-900: #491d08;--color-coral-950: #351404;--color-honey-50: #feedd1;--color-honey-100: #fde4ba;--color-honey-200: #fcd38d;--color-honey-300: #fbc261;--color-honey-400: #fab034;--color-honey-500: #f99f07;--color-honey-600: #cd8305;--color-honey-700: #a06604;--color-honey-800: #744a03;--color-honey-900: #472d02;--color-honey-950: #301f01;--color-lava-50: #fef2f3;--color-lava-100: #fde3e5;--color-lava-200: #fcccd0;--color-lava-300: #f9a8ae;--color-lava-400: #f3767f;--color-lava-500: #e63946;--color-lava-600: #d52d3a;--color-lava-700: #b3222d;--color-lava-800: #942029;--color-lava-900: #7b2128;--color-lava-950: #430c10;--color-zinc-600: #52525b;--alpha-border: rgba(0, 0, 0, .08)}.dark{--alpha-border: rgba(255, 255, 255, .1)} 147.hero-logo-scatter[data-astro-cid-s4rxgulo]{position:absolute;inset:0;z-index:0;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:0}.hero-logo-scatter[data-astro-cid-s4rxgulo][data-ready=true]{opacity:1}.hero-logo-scatter__logo[data-astro-cid-s4rxgulo]{position:absolute;width:48px;height:48px;-o-object-fit:contain;object-fit:contain;background:#fff;border-radius:12px;padding:6px;box-shadow:0 1px 2px #0000000a,0 6px 16px #0000000f}.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="0"]{top:6%;left:4%;width:56px;height:56px;transform:rotate(-8deg);opacity:.6}.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="1"]{top:22%;left:11%;width:44px;height:44px;transform:rotate(6deg);opacity:.75}.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="2"]{top:54%;left:3%;width:48px;height:48px;transform:rotate(-12deg);opacity:.6}.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="3"]{top:78%;left:13%;width:40px;height:40px;transform:rotate(9deg);opacity:.5}.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="4"]{top:8%;right:5%;width:52px;height:52px;transform:rotate(7deg);opacity:.6}.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="5"]{top:26%;right:12%;width:44px;height:44px;transform:rotate(-5deg);opacity:.75}.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="6"]{top:56%;right:4%;width:48px;height:48px;transform:rotate(10deg);opacity:.6}.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="7"]{top:80%;right:14%;width:40px;height:40px;transform:rotate(-8deg);opacity:.5}.hero-logo-scatter[data-astro-cid-s4rxgulo][data-align=right] .hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="0"],.hero-logo-scatter[data-astro-cid-s4rxgulo][data-align=right] .hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="1"],.hero-logo-scatter[data-astro-cid-s4rxgulo][data-align=right] .hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="2"],.hero-logo-scatter[data-astro-cid-s4rxgulo][data-align=right] .hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="3"]{display:none}@media (max-width: 1024px){.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="1"],.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="5"]{display:none}}@media (max-width: 640px){.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="2"],.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="3"],.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="6"],.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="7"]{display:none}.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="0"],.hero-logo-scatter__logo[data-astro-cid-s4rxgulo][data-logo-slot="4"]{width:40px;height:40px}} 148</style> 149<link rel="stylesheet" href="/_astro/demo.SKPlMlYs.css"> 150<style>.personalized-modal[data-astro-cid-y42wqjr7]{position:fixed;inset:0;z-index:9998;display:flex;align-items:center;justify-content:center;padding:1.5rem;opacity:0;visibility:hidden;transition:opacity .2s ease-out,visibility 0s linear .2s}.personalized-modal[data-astro-cid-y42wqjr7][data-open=true]{opacity:1;visibility:visible;transition:opacity .2s ease-out,visibility 0s linear 0s}.personalized-modal__backdrop[data-astro-cid-y42wqjr7]{position:absolute;inset:0;background:#09090b99;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.personalized-modal__card[data-astro-cid-y42wqjr7]{position:relative;z-index:1;width:100%;max-width:460px;max-height:calc(100vh - 3rem);overflow-y:auto;background:#fff;border-radius:1.25rem;padding:2.5rem 2rem 2rem;text-align:center;box-shadow:0 20px 60px -20px #0000004d,0 8px 24px -8px #0000001a;transform:scale(.96);transition:transform .2s ease-out}.personalized-modal[data-astro-cid-y42wqjr7][data-open=true] .personalized-modal__card[data-astro-cid-y42wqjr7]{transform:scale(1)}.personalized-modal__close[data-astro-cid-y42wqjr7]{position:absolute;top:.875rem;right:.875rem;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:999px;background:transparent;color:#71717a;cursor:pointer;transition:background .15s ease-out,color .15s ease-out}.personalized-modal__close[data-astro-cid-y42wqjr7]:hover{background:#f4f4f5;color:#18181b}.personalized-modal__close[data-astro-cid-y42wqjr7]:focus-visible{outline:none;box-shadow:0 0 0 2px var(--color-palatinate-500)}.personalized-modal__lockup[data-astro-cid-y42wqjr7]{display:flex;align-items:center;justify-content:center;gap:.75rem;margin-bottom:1.5rem}.personalized-modal__logo-tile[data-astro-cid-y42wqjr7]{display:inline-flex;align-items:center;justify-content:center;width:64px;
150height:64px;border-radius:14px;background:#fff;padding:10px;box-shadow:0 1px 2px #0000000a,0 6px 20px #00000014}.personalized-modal__logo-tile--snitcher[data-astro-cid-y42wqjr7]{background:#f5f5ff}.personalized-modal__logo-tile[data-astro-cid-y42wqjr7] img[data-astro-cid-y42wqjr7]{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.personalized-modal__logo-tile--company[data-astro-cid-y42wqjr7]{display:none}.personalized-modal[data-astro-cid-y42wqjr7][data-has-company-logo=true] .personalized-modal__logo-tile--company[data-astro-cid-y42wqjr7]{display:inline-flex}.personalized-modal[data-astro-cid-y42wqjr7][data-has-company-logo=true] .personalized-modal__lockup-glue[data-astro-cid-y42wqjr7]{display:inline}.personalized-modal__lockup-glue[data-astro-cid-y42wqjr7]{display:none;font-size:1.5rem;font-weight:600;color:#a1a1aa;line-height:1}.personalized-modal__heading[data-astro-cid-y42wqjr7]{font-size:1.5rem;line-height:1.2;font-weight:700;color:#18181b;margin:0 0 .75rem}.personalized-modal__body[data-astro-cid-y42wqjr7]{font-size:.9375rem;line-height:1.55;color:#52525b;margin:0 0 1.75rem}.personalized-modal__actions[data-astro-cid-y42wqjr7]{display:flex;flex-direction:column;align-items:stretch;gap:.5rem}.personalized-modal__cta[data-astro-cid-y42wqjr7]{justify-content:center;width:100%}.personalized-modal__dismiss[data-astro-cid-y42wqjr7]{display:inline-flex;align-items:center;justify-content:center;padding:.5rem .75rem;border:0;background:transparent;color:#71717a;font-size:.875rem;cursor:pointer;border-radius:.375rem;transition:color .15s ease-out}.personalized-modal__dismiss[data-astro-cid-y42wqjr7]:hover{color:#18181b}.personalized-modal__dismiss[data-astro-cid-y42wqjr7]:focus-visible{outline:none;box-shadow:0 0 0 2px var(--color-palatinate-500)}@media (prefers-reduced-motion: reduce){.personalized-modal[data-astro-cid-y42wqjr7],.personalized-modal__card[data-astro-cid-y42wqjr7]{transition:none}} 151.underline-animated[data-astro-cid-drt2y2q3].ready .underline-path[data-astro-cid-drt2y2q3]{animation:drawStroke .3s ease-out forwards}@keyframes drawStroke{to{stroke-dashoffset:0}} 152.arrow-btn-icon-wrap{position:relative;width:16px;height:16px;overflow:hidden;display:flex;align-items:center;justify-content:center}.arrow-btn-icon{will-change:transform}.arrow-btn-icon.slide-in-right{animation:arrow-btn-slide-in-right .2s ease-in-out forwards}.arrow-btn-icon.slide-out-right{animation:arrow-btn-slide-out-right .2s ease-in-out forwards}.arrow-btn-icon.slide-in-left{animation:arrow-btn-slide-in-left .2s ease-in-out forwards}.arrow-btn-icon.slide-out-left{animation:arrow-btn-slide-out-left .2s ease-in-out forwards}.arrow-btn-icon.slide-in{animation:arrow-btn-slide-in-right .2s ease-in-out forwards}.arrow-btn-icon.slide-out{animation:arrow-btn-slide-out-right .2s ease-in-out forwards}@keyframes arrow-btn-slide-in-right{0%{transform:translate(0);opacity:1}50%{transform:translate(100%);opacity:0}50.01%{transform:translate(-100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes arrow-btn-slide-out-right{0%{transform:translate(0);opacity:1}50%{transform:translate(-100%);opacity:0}50.01%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes arrow-btn-slide-in-left{0%{transform:translate(0);opacity:1}50%{transform:translate(-100%);opacity:0}50.01%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes arrow-btn-slide-out-left{0%{transform:translate(0);opacity:1}50%{transform:translate(100%);opacity:0}50.01%{transform:translate(-100%);opacity:0}to{transform:translate(0);opacity:1}} 153.feature-card[href]{color:inherit;text-decoration:none}.feature-card[href]:hover{text-decoration:none} 154.scrollbar-hide[data-astro-cid-27qgd3zz]{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide[data-astro-cid-27qgd3zz]::-webkit-scrollbar{display:none} 155.pixel-reveal[data-astro-cid-kt72rz56]{display:inline-block;position:relative;white-space:nowrap}.pixel-reveal-text[data-astro-cid-kt72rz56]{display:inline-block;position:relative}.pixel-reveal-decorative[data-astro-cid-kt72rz56]{position:absolute;top:0;left:0;opacity:0;pointer-events:none;display:inline-block;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;letter-spacing:inherit;text-transform:inherit;white-space:inherit;color:inherit}.pixel-word[data-astro-cid-kt72rz56]{display:inline;white-space:nowrap}.pixel-char[data-astro-cid-kt72rz56]{display:inline-block;position:relative;line-height:1em;vertical-align:baseline}.pixel-reveal-decorative[data-astro-cid-kt72rz56] .pixel-char[data-astro-cid-kt72rz56]{color:var(--pixel-color);overflow:visible}.pixel-dots[data-astro-cid-kt72rz56]{position:absolute;inset:-4px;pointer-events:none;opacity:0;z-index:-1}.pixel-dot[data-astro-cid-kt72rz56]{position:absolute;width:3px;height:3px;background:var(--brand-color, #4C4CFF);opacity:0;will-change:transform,opacity}.pixel-char-current[data-astro-cid-kt72rz56]{display:inline-block;position:relative;transition:transform .06s ease-out}.pixel-char[data-astro-cid-kt72rz56].scrambling .pixel-char-current[data-astro-cid-kt72rz56]{color:var(--brand-color, #4C4CFF);animation:pixel-scramble .06s ease-out}.pixel-char[data-astro-cid-kt72rz56].scrambling .pixel-dots[data-astro-cid-kt72rz56]{opacity:1}@keyframes pixel-scramble{0%{transform:translateY(-20%);opacity:.7}to{transform:translateY(0);opacity:1}}.pixel-char[data-astro-cid-kt72rz56].sparkle .pixel-char-current[data-astro-cid-kt72rz56]{animation:pixel-sparkle .15s ease-out}@keyframes pixel-sparkle{0%{filter:brightness(1)}30%{filter:brightness(1.8)}to{filter:brightness(1)}}.pixel-char[data-astro-cid-kt72rz56].revealed .pixel-char-current[data-astro-cid-kt72rz56]{color:inherit;animation:pixel-settle .25s cubic-bezier(.34,1.56,.64,1)}.pixel-char[data-astro-cid-kt72rz56].revealed .pixel-dots[data-astro-cid-kt72rz56]{animation:dots-scatter .4s ease-out forwards}@keyframes pixel-settle{0%{transform:translateY(-15%) scale(1.05);filter:brightness(1.3)}50%{transform:translateY(3%)}to{transform:translateY(0) scale(1);filter:brightness(1)}}@keyframes dots-scatter{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.5)}}@media (prefers-reduced-motion: reduce){.pixel-reveal-decorative[data-astro-cid-kt72rz56]{display:none}.pixel-char-current[data-astro-cid-kt72rz56],.pixel-dots[data-astro-cid-kt72rz56],.pixel-dot[data-astro-cid-kt72rz56]{animation:none!important;transition:none!important}}.pixel-reveal[data-astro-cid-kt72rz56][data-animated=true] .pixel-reveal-text[data-astro-cid-kt72rz56]{opacity:0}
155.pixel-reveal[data-astro-cid-kt72rz56][data-animated=true] .pixel-reveal-decorative[data-astro-cid-kt72rz56],.pixel-reveal[data-astro-cid-kt72rz56][data-animated=true][data-complete=true] .pixel-reveal-text[data-astro-cid-kt72rz56]{opacity:1}.pixel-reveal[data-astro-cid-kt72rz56][data-animated=true][data-complete=true] .pixel-reveal-decorative[data-astro-cid-kt72rz56]{opacity:0} 156</style> 157<link rel="stylesheet" href="/_astro/FlipCountdown_astro_astro_type_style_index_0_lang.C_FS9Ten.css"> 158<link rel="stylesheet" href="/_astro/PageSection_astro_astro_type_style_index_0_lang.BD2u2Sx1.css"> 159<style>.divider-band[data-astro-cid-bj7qugvw]{margin-inline:calc(var(--section-px, 0px) * -1)}.divider-dots[data-astro-cid-bj7qugvw],.divider-lines[data-astro-cid-bj7qugvw]{position:relative}.divider-dots[data-astro-cid-bj7qugvw]:after,.divider-lines[data-astro-cid-bj7qugvw]:after{content:"";position:absolute;inset:0}.divider-dots[data-astro-cid-bj7qugvw]:after{background-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24'><g opacity='0.4'><rect x='10.75' y='10.75' width='1.5' height='1.5' fill='%234c4cff'/></g></svg>");background-size:24px 24px;background-position:50% 50%}.divider-lines[data-astro-cid-bj7qugvw]:after{background-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='6'><rect width='1' height='3' fill='%23e4e4e7'/></svg>");background-size:24px 6px;background-position:50% 0}[data-astro-cid-bj7qugvw][data-fade=bottom]:after{mask-image:linear-gradient(to bottom,black,transparent);-webkit-mask-image:linear-gradient(to bottom,black,transparent)}[data-astro-cid-bj7qugvw][data-fade=top]:after{mask-image:linear-gradient(to bottom,transparent,black);-webkit-mask-image:linear-gradient(to bottom,transparent,black)}[data-astro-cid-bj7qugvw][data-fade=both]:after{mask-image:linear-gradient(to bottom,transparent,black 35%,black 65%,transparent);-webkit-mask-image:linear-gradient(to bottom,transparent,black 35%,black 65%,transparent)}.divider-lines[data-astro-cid-bj7qugvw][data-fade=top]:after{background-position:50% 100%} 160.carousel-visual[data-astro-cid-bjcxd7r3]{transition:opacity .3s ease-out} 161.carousel-progress-wrapper[data-astro-cid-algf2pu2]{opacity:0;transition:opacity .15s ease-out}.carousel-progress-visible[data-astro-cid-algf2pu2]{opacity:1}.carousel-progress[data-astro-cid-algf2pu2]{width:20px;height:20px;transform:rotate(-90deg)}.carousel-progress-track[data-astro-cid-algf2pu2]{fill:none;stroke:#e4e4e7;stroke-width:2}.carousel-progress-fill[data-astro-cid-algf2pu2]{fill:none;stroke:var(--color-palatinate-500);stroke-width:2;stroke-linecap:round;stroke-dasharray:50.265482;stroke-dashoffset:50.265482}.carousel-progress-active[data-astro-cid-algf2pu2]{animation:carousel-progress-fill var(--animation-duration, 10s) linear forwards}.carousel-progress-paused[data-astro-cid-algf2pu2]{animation-play-state:paused}@keyframes carousel-progress-fill{0%{stroke-dashoffset:50.265482}to{stroke-dashoffset:0}} 162</style> 163<link rel="stylesheet" href="/_astro/index_astro_astro_type_style_index_0_lang.BBVdYB7R.css"> 164<style>.footer-nav-link[data-astro-cid-fqw42ge2]{font-size:1rem;line-height:1.6;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.footer-nav-link[data-astro-cid-fqw42ge2]:hover{--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.footer-bottom-link[data-astro-cid-fqw42ge2]{font-size:.875rem;line-height:1.25;--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.footer-bottom-link[data-astro-cid-fqw42ge2]:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.fingerprint-canvas[data-astro-cid-fqw42ge2]{display:block}.partner-arrow[data-astro-cid-fqw42ge2]{animation:partner-arrow-bob 3.2s ease-in-out infinite;transform-origin:80% 30%}@keyframes partner-arrow-bob{0%,to{transform:translate(0) rotate(0)}50%{transform:translate(-2px,1px) rotate(-5deg)}}@media (prefers-reduced-motion: reduce){.partner-arrow[data-astro-cid-fqw42ge2]{animation:none}} 165.blob-card-blob[data-astro-cid-gijzu423]{position:absolute;border-radius:50%;filter:blur(40px);will-change:transform;pointer-events:none;animation-play-state:paused}.blob-card-blob-1[data-astro-cid-gijzu423]{width:750px;height:650px;background:#00000040;top:-450px;left:-450px;animation:blob-card-drift-1 18s ease-in-out infinite;filter:blur(40px)}.blob-card-blob-2[data-astro-cid-gijzu423]{width:650px;height:650px;background:#0000004d;top:-300px;right:-400px;animation:blob-card-drift-2 22s ease-in-out infinite;filter:blur(40px)}.blob-card-blob-3[data-astro-cid-gijzu423]{width:700px;height:550px;background:#00000038;bottom:-400px;left:-350px;animation:blob-card-drift-3 26s ease-in-out infinite;filter:blur(40px)}.blob-card-blob-4[data-astro-cid-gijzu423]{width:550px;height:480px;background:#ffffff0a;top:-350px;right:-320px;animation:blob-card-drift-4 24s ease-in-out infinite;filter:blur(35px)}.blob-card-blob-5[data-astro-cid-gijzu423]{width:600px;height:550px;background:#0000000d;bottom:-380px;right:-400px;animation:blob-card-drift-5 30s ease-in-out infinite;filter:blur(35px)}.blob-card-noise[data-astro-cid-gijzu423]{position:absolute;inset:0;z-index:2;opacity:.35;mix-blend-mode:overlay;pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px}@keyframes blob-card-drift-1{0%,to{transform:translate(0) scale(1)}25%{transform:translate(30px,40px) scale(1.1)}50%{transform:translate(60px,20px) scale(.95)}75%{transform:translate(20px,50px) scale(1.05)}}@keyframes blob-card-drift-2{0%,to{transform:translate(0) scale(1)}33%{transform:translate(-40px,30px) scale(1.15)}66%{transform:translate(-20px,-20px) scale(.9)}}@keyframes blob-card-drift-3{0%,to{transform:translate(0) scale(1)}20%{transform:translate(40px,-30px) scale(1.1)}
16540%{transform:translate(20px,40px) scale(.95)}60%{transform:translate(-30px,20px) scale(1.05)}80%{transform:translate(-20px,-40px) scale(1)}}@keyframes blob-card-drift-4{0%,to{transform:translate(0) scale(1)}30%{transform:translate(-50px,30px) scale(1.08)}60%{transform:translate(30px,-40px) scale(.92)}85%{transform:translate(-20px,15px) scale(1.05)}}@keyframes blob-card-drift-5{0%,to{transform:translate(0) scale(1)}25%{transform:translate(35px,25px) scale(.95)}50%{transform:translate(-25px,-35px) scale(1.12)}75%{transform:translate(15px,-20px) scale(1)}}@media (prefers-reduced-motion: reduce){.blob-card-blob[data-astro-cid-gijzu423]{animation:none}} 166@keyframes pop-in{0%{opacity:0;transform:scale(.3)}50%{opacity:1;transform:scale(1.05)}70%{transform:scale(.95)}to{opacity:1;transform:scale(1)}}.integration-bento[data-astro-cid-7rb7ltoj][data-animate=true] .integration-logo[data-astro-cid-7rb7ltoj]{opacity:0;transform:scale(.3)}.integration-bento[data-astro-cid-7rb7ltoj][data-animate=true].animate-in .integration-logo[data-astro-cid-7rb7ltoj]{animation:pop-in .5s cubic-bezier(.34,1.56,.64,1) forwards;animation-delay:var(--delay, 0ms)}@media (prefers-reduced-motion: reduce){.integration-bento[data-astro-cid-7rb7ltoj][data-animate=true] .integration-logo[data-astro-cid-7rb7ltoj]{opacity:1;transform:scale(1)}.integration-bento[data-astro-cid-7rb7ltoj][data-animate=true].animate-in .integration-logo[data-astro-cid-7rb7ltoj]{animation:none;opacity:1;transform:scale(1)}} 167.testimonial-section__dot{width:8px;height:8px;border-radius:9999px;background-color:var(--ts-dot-inactive, rgba(63, 63, 70, .25));transition:background-color .2s ease,width .2s ease;cursor:pointer;border:0;padding:0}.testimonial-section__dot:hover{background-color:var(--ts-dot-inactive-hover, rgba(63, 63, 70, .5))}.testimonial-section__dot.is-active{background-color:var(--ts-dot-active, var(--color-palatinate-600, #3e3ee6));width:24px}.testimonial-section__dot:focus-visible{outline:2px solid var(--ts-dot-focus, var(--color-palatinate-500, #4c4cff));outline-offset:2px}@media (prefers-reduced-motion: reduce){.testimonial-section__dot{transition:none}} 168.testimonial-section__slide[data-astro-cid-7ajslof7]{grid-area:1 / 1;width:100%;height:100%;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .7s ease;pointer-events:none}.testimonial-section__slide[data-astro-cid-7ajslof7].is-active{opacity:1;pointer-events:auto}@media (prefers-reduced-motion: reduce){.testimonial-section__slide[data-astro-cid-7ajslof7]{transition:none}} 169.page-section:has([data-testimonial-section])>.section-container{padding:0}.page-section:has([data-testimonial-section][data-variant=light]),.page-section:has([data-testimonial-section][data-variant=particles]){background-color:var(--color-lavender-50, #eef0ff)}[data-testimonial-section][data-variant=light],[data-testimonial-section][data-variant=particles]{background-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='48' height='48'><g opacity='0.4'><path d='M24 23H23V24H24V23Z' fill='%234c4cff'/></g></svg>");background-size:48px 48px;background-position:50% 0}[data-testimonial-section][data-variant=grid]:before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background-image:radial-gradient(ellipse 34% 52% at 50% 50%,#ffffffeb,#ffffff8c 45%,#fff0 75%),linear-gradient(to right,rgba(0,0,0,.06) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.06) 1px,transparent 1px);background-size:100% 100%,25px 25px,25px 25px;background-position:center,50% 50%,50% 50%;mask-image:radial-gradient(ellipse 46% 58% at 50% 50%,#000 0%,rgba(0,0,0,.85) 45%,transparent 100%);-webkit-mask-image:radial-gradient(ellipse 46% 58% at 50% 50%,#000 0%,rgba(0,0,0,.85) 45%,transparent 100%)}[data-testimonial-section][data-variant=grid]>*{position:relative;z-index:1}.page-section:has([data-testimonial-section][data-variant=dark]){background-color:#09090b}[data-testimonial-section][data-variant=dark]{background-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='48' height='48'><g opacity='0.3'><path d='M24 23H23V24H24V23Z' fill='%23fafafa'/></g></svg>");background-size:48px 48px;background-position:50% 0} 170.tab-active-shadow[data-astro-cid-twm5uxey]{box-shadow:0 0 0 1px var(--alpha-border),0 1px 3px #0000001a}.badge-dark-inactive[data-astro-cid-twm5uxey]{background-color:#0003} 171</style> 172<link rel="stylesheet" href="/_astro/Navbar_astro_astro_type_style_index_0_lang.CnosfN-w.css"> 173<style>.g2-badge-wall__grid[data-astro-cid-ukhf4yhl]{margin-inline:calc(var(--section-px) * -1)}.g2-badge-wall__grid[data-astro-cid-ukhf4yhl]>*{border-radius:0;border-inline:0;box-shadow:none}@media (min-width: 1024px){.g2-badge-wall[data-astro-cid-ukhf4yhl]{margin-top:-4rem}.g2-badge-wall__grid[data-astro-cid-ukhf4yhl]>*{border-top:0}} 174.accordion[data-astro-cid-u4rtwtdm]:not(.accordion-dark) .accordion-trigger[data-astro-cid-u4rtwtdm]:hover{background-color:#f4f4f580}.accordion[data-astro-cid-u4rtwtdm].accordion-dark{transition:border-color .2s ease}.accordion[data-astro-cid-u4rtwtdm].accordion-dark:hover{border-color:#fff3!important}.accordion[data-astro-cid-u4rtwtdm]:not(.accordion-dark) .accordion-trigger[data-astro-cid-u4rtwtdm]{border-radius:1rem} 175.faq-answer a{color:inherit;text-decoration:underline;text-underline-offset:3px}.faq-answer a:hover{text-decoration:none} 176.hero-dot-grid[data-astro-cid-wlyiyr5g]{top:24px;left:50%;transform:translate(-50%);width:1050px;z-index:-30}.hero-dot-grid[data-astro-cid-wlyiyr5g] canvas[data-astro-cid-wlyiyr5g]{width:100%;height:auto;display:block;opacity:.75}@media (max-width: 1100px){.hero-dot-grid[data-astro-cid-wlyiyr5g]{width:900px}}@media (max-width: 768px){.hero-dot-grid[data-astro-cid-wlyiyr5g]{top:0;width:700px}.hero-dot-grid[data-astro-cid-wlyiyr5g] canvas[data-astro-cid-wlyiyr5g]{opacity:.6}}@media (max-width: 480px){.hero-dot-grid[data-astro-cid-wlyiyr5g]{width:600px}} 177.marquee-track[data-astro-cid-kijovlsi]{animation:marquee 60s linear infinite;animation-play-state:paused}@keyframes marquee{0%{transform:translate(0)}to{transform:translate(calc(var(--card-set-width) * -1))}}.marquee-track[data-astro-cid-kijovlsi] p[data-astro-cid-kijovlsi]{margin-bottom:0}@media (prefers-reduced-motion: reduce){.marquee-track[data-astro-cid-kijovlsi]{animation:none}} 178.measure-visual[data-astro-cid-a6yjhbsd] p[data-astro-cid-a6yjhbsd]{margin:0}.measure-source-pill[data-astro-cid-a6yjhbsd]{display:flex;align-items:center;gap:6px;background:#fff;padding:7px 14px;white-space:nowrap;opacity:0;transform:translateY(6px);transition:opacity .4s cubic-bezier(.22,1,.36,1),transform .4s cubic-bezier(.22,1,.36,1),box-shadow .3s ease}.measure-source-pill[data-astro-cid-a6yjhbsd].visible{opacity:1;transform:translateY(0)}.measure-source-pill[data-astro-cid-a6yjhbsd].-rotate-2.visible{transform:translateY(0) rotate(-2deg)}.measure-source-pill[data-astro-cid-a6yjhbsd].rotate-1.visible{transform:translateY(0) rotate(1deg)}.measure-visual[data-astro-cid-a6yjhbsd][data-hovering] .measure-source-pill[data-astro-cid-a6yjhbsd][data-pill-delay="0"].visible{transform:translate(-8px) translateY(-4px) rotate(-3deg)}.measure-visual[data-astro-cid-a6yjhbsd][data-hovering] .measure-source-pill[data-astro-cid-a6yjhbsd][data-pill-delay="1"].visible{transform:translate(8px) translateY(-4px) rotate(2deg)}.measure-visual[data-astro-cid-a6yjhbsd][data-hovering] .measure-source-pill[data-astro-cid-a6yjhbsd][data-pill-delay="2"].visible{transform:translateY(4px) rotate(1deg)}.measure-pill-label[data-astro-cid-a6yjhbsd]{font-size:12px;font-weight:600;color:#3f3f46;flex-shrink:0}.measure-pill-sep[data-astro-cid-a6yjhbsd]{font-size:12px;color:#d4d4d8;flex-shrink:0}.measure-pill-sub[data-astro-cid-a6yjhbsd]{font-size:12px;color:#a1a1aa;overflow:hidden;text-overflow:ellipsis;min-width:0}.measure-source-pill[data-astro-cid-a6yjhbsd] svg{width:16px;height:16px}@media (prefers-reduced-motion: reduce){.measure-source-pill[data-astro-cid-a6yjhbsd]{transition:none!important;opacity:1!important;transform:none!important}} 179.signal-card[data-astro-cid-l3ae6lyb]{transition:transform .3s cubic-bezier(.22,1,.36,1),box-shadow .3s cubic-bezier(.22,1,.36,1)}.feature-card:hover .signal-card[data-astro-cid-l3ae6lyb]{transform:scale(1.02) rotate(-2deg);box-shadow:0 0 0 1px var(--alpha-border),0 4px 12px #0000001a,0 2px 4px -1px #0000001a}.signal-visual[data-astro-cid-l3ae6lyb] p[data-astro-cid-l3ae6lyb]{margin:2px 0 0}.signal-timeline-item[data-astro-cid-l3ae6lyb]{opacity:0;transform:translateY(8px);transition:opacity .4s cubic-bezier(.22,1,.36,1),transform .4s cubic-bezier(.22,1,.36,1)}.signal-timeline-item[data-astro-cid-l3ae6lyb].visible{opacity:1;transform:translateY(0)}.signal-hover-event[data-astro-cid-l3ae6lyb]{display:grid;grid-template-rows:0fr;transition:grid-template-rows .4s cubic-bezier(.22,1,.36,1)}.signal-hover-event[data-astro-cid-l3ae6lyb]>div[data-astro-cid-l3ae6lyb]{overflow:hidden}.signal-hover-event[data-astro-cid-l3ae6lyb].visible{grid-template-rows:1fr}.signal-hover-content[data-astro-cid-l3ae6lyb]{opacity:0;transform:translateY(-8px);transition:opacity .3s cubic-bezier(.22,1,.36,1),transform .3s cubic-bezier(.22,1,.36,1)}.signal-hover-event[data-astro-cid-l3ae6lyb].visible .signal-hover-content[data-astro-cid-l3ae6lyb]{opacity:1;transform:translateY(0)}@media (prefers-reduced-motion: reduce){.signal-timeline-item[data-astro-cid-l3ae6lyb],.signal-hover-event[data-astro-cid-l3ae6lyb],.signal-hover-content[data-astro-cid-l3ae6lyb]{opacity:1!important;transform:none!important;transition:none!important}} 180.engage-visual[data-astro-cid-ybnukg4e] p[data-astro-cid-ybnukg4e]{margin:0}.engage-flip-container[data-astro-cid-ybnukg4e]{perspective:800px}.engage-flip-inner[data-astro-cid-ybnukg4e]{position:relative;transition:transform .5s cubic-bezier(.22,1,.36,1);transform-style:preserve-3d}.engage-face[data-astro-cid-ybnukg4e]{backface-visibility:hidden;-webkit-backface-visibility:hidden}.engage-front[data-astro-cid-ybnukg4e]{position:relative}.engage-back[data-astro-cid-ybnukg4e]{position:absolute;inset:0;transform:rotateY(180deg)}.feature-card:hover .engage-flip-inner[data-astro-cid-ybnukg4e]{transform:rotateY(180deg)}@media (prefers-reduced-motion: reduce){.engage-flip-inner[data-astro-cid-ybnukg4e]{transition:none!important}} 181.snv-card[data-astro-cid-fjxicinn]{position:absolute;
181left:0;right:0;top:50%;opacity:0;transform:translateY(-50%) translate(0) scale(.85);transition:transform .5s cubic-bezier(.22,1,.36,1),opacity .35s ease;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border-radius:16px}.snv-body[data-astro-cid-fjxicinn]{background:#ffffffb8;border-radius:16px;padding:10px 14px;box-shadow:0 0 0 .5px #0000000f,0 1px 2px #0000000a,0 4px 12px #0000000f,0 12px 32px #0000000a}.snv-icon-wrap[data-astro-cid-fjxicinn]{width:22px;height:22px;border-radius:5px;background:#fff;box-shadow:0 0 0 .5px #00000014,0 1px 2px #0000000f;display:flex;align-items:center;justify-content:center;flex-shrink:0}.snv-card[data-astro-cid-fjxicinn].s-top{opacity:1;transform:translateY(-50%) translate(0) scale(1)}.snv-card[data-astro-cid-fjxicinn].s-mid{opacity:1;transform:translateY(calc(-50% + 12px)) translate(0) scale(.96)}.snv-card[data-astro-cid-fjxicinn].s-bot{opacity:1;transform:translateY(calc(-50% + 22px)) translate(0) scale(.92)}.snv-card[data-astro-cid-fjxicinn].s-mid .snv-body[data-astro-cid-fjxicinn]{opacity:.92}.snv-card[data-astro-cid-fjxicinn].s-bot .snv-body[data-astro-cid-fjxicinn]{opacity:.82}.snv-group[data-astro-cid-fjxicinn].ready.hovered .snv-card[data-astro-cid-fjxicinn]{transition:transform .4s cubic-bezier(.22,1,.36,1),opacity .3s ease}.snv-group[data-astro-cid-fjxicinn].ready.hovered .snv-card[data-astro-cid-fjxicinn].s-top{transform:translateY(calc(-50% - 93px)) translate(0) scale(1)}.snv-group[data-astro-cid-fjxicinn].ready.hovered .snv-card[data-astro-cid-fjxicinn].s-mid{transform:translateY(-50%) translate(0) scale(1)}.snv-group[data-astro-cid-fjxicinn].ready.hovered .snv-card[data-astro-cid-fjxicinn].s-bot{transform:translateY(calc(-50% + 93px)) translate(0) scale(1)}.snv-group[data-astro-cid-fjxicinn].ready.hovered .snv-card[data-astro-cid-fjxicinn] .snv-body[data-astro-cid-fjxicinn]{opacity:1;transition:opacity .3s ease}@media (prefers-reduced-motion: reduce){.snv-card[data-astro-cid-fjxicinn]{transition:none!important;opacity:1!important}.snv-card[data-astro-cid-fjxicinn]:nth-child(1){transform:translateY(calc(-50% + 93px)) translate(0) scale(1)!important}.snv-card[data-astro-cid-fjxicinn]:nth-child(2){transform:translateY(-50%) translate(0) scale(1)!important}.snv-card[data-astro-cid-fjxicinn]:nth-child(3){transform:translateY(calc(-50% - 93px)) translate(0) scale(1)!important}.snv-body[data-astro-cid-fjxicinn]{opacity:1!important}} 182@media (prefers-reduced-motion: reduce){.feedback-face[data-astro-cid-kububvzn]{transition:none!important}.feedback-face[data-astro-cid-kububvzn]:hover{transform:none!important}} 183.scrollbar-hide[data-astro-cid-iyzr5htm]{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide[data-astro-cid-iyzr5htm]::-webkit-scrollbar{display:none}.carousel-fade[data-astro-cid-iyzr5htm]{position:absolute;top:0;bottom:0;width:var(--fade-width);pointer-events:none;z-index:10;opacity:0;transition:opacity .3s ease-out}.carousel-fade-left[data-astro-cid-iyzr5htm]{left:0;background:linear-gradient(to right,var(--carousel-bg, rgb(250, 250, 250)),transparent)}.carousel-fade-right[data-astro-cid-iyzr5htm]{right:0;background:linear-gradient(to left,var(--carousel-bg, rgb(250, 250, 250)),transparent)}.carousel-fade[data-astro-cid-iyzr5htm][data-visible=true]{opacity:1} 184.tier-medal[data-astro-cid-7evo3er2]{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--medal-size);height:var(--medal-size);border-radius:calc(var(--medal-size) / 7);border:1px solid var(--alpha-border);background-image:var(--medal-field)}.tier-medal__mark[data-astro-cid-7evo3er2]{display:block;width:72%;height:72%} 185.integration-gallery[data-astro-cid-lmzdgq7c]{margin:1.5rem 0 2rem}.gallery-item[data-astro-cid-lmzdgq7c]{padding:.5rem}.gallery-thumbnail[data-astro-cid-lmzdgq7c]{display:block} 186.lightbox-trigger[data-astro-cid-fcyb6yui]{cursor:zoom-in}.lightbox-overlay[data-astro-cid-fcyb6yui]{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;padding:2rem;opacity:0;visibility:hidden;transition:opacity .2s ease-out,visibility .2s ease-out}.lightbox-overlay[data-astro-cid-fcyb6yui][data-open=true]{opacity:1;visibility:visible}.lightbox-backdrop[data-astro-cid-fcyb6yui]{position:absolute;inset:0;background:#000000d9;backdrop-filter:blur(4px)}.lightbox-close[data-astro-cid-fcyb6yui]{position:absolute;top:1.5rem;right:1.5rem;z-index:10;display:flex;align-items:center;justify-content:center;width:48px;height:48px;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);border-radius:50%;color:#fff;cursor:pointer;transition:background .15s ease-out,transform .15s ease-out}.lightbox-close[data-astro-cid-fcyb6yui]:hover{background:#fff3;transform:scale(1.05)}.lightbox-close[data-astro-cid-fcyb6yui]:focus{outline:none;box-shadow:0 0 0 2px #ffffff80}.lightbox-nav[data-astro-cid-fcyb6yui]{position:absolute;top:50%;transform:translateY(-50%);z-index:10;display:flex;align-items:center;justify-content:center;width:48px;height:48px;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);border-radius:50%;color:#fff;cursor:pointer;transition:background .15s ease-out,transform .15s ease-out,opacity .15s ease-out;opacity:0;pointer-events:none}.lightbox-overlay[data-astro-cid-fcyb6yui][data-open=true] .lightbox-nav[data-astro-cid-fcyb6yui][data-visible=true]{opacity:1;pointer-events:auto}.lightbox-nav[data-astro-cid-fcyb6yui]:hover{background:#fff3}.lightbox-nav[data-astro-cid-fcyb6yui]:focus{outline:none;box-shadow:0 0 0 2px #ffffff80}.lightbox-nav-prev[data-astro-cid-fcyb6yui]{left:1.5rem}.lightbox-nav-next[data-astro-cid-fcyb6yui]{right:1.5rem}.lightbox-content[data-astro-cid-fcyb6yui]{position:relative;z-index:1;max-width:90vw;display:flex;flex-direction:column;align-items:center;transform:scale(.95);transition:transform .2s ease-out}.lightbox-overlay[data-astro-cid-fcyb6yui][data-open=true] .lightbox-content[data-astro-cid-fcyb6yui]{transform:scale(1)}.lightbox-image[data-astro-cid-fcyb6yui]{display:block;max-width:100%;max-height:80vh;width:auto;height:auto;border-radius:.75rem;box-shadow:0 25px 50px -12px #00000080}.lightbox-caption[data-astro-cid-fcyb6yui]{color:#fffc;font-size:.875rem;line-height:1.5;text-align:center;margin-top:1rem;max-width:36rem;margin-left:auto;margin-right:auto} 187.code-block-content pre{margin:0;padding:1rem;background:transparent!important;font-size:.875rem;line-height:1.7}@media (min-width: 768px){.code-block-content pre{padding:1.5rem}}.code-block-content code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.code-block-content.show-line-numbers pre{counter-reset:line}.code-block-content.show-line-numbers .line:before{counter-increment:line;content:counter(line);display:inline-block;width:2rem;margin-right:1rem;text-align:right;color:#71717a} 188.bg-warning-banner{background-color:color-mix(in srgb,var(--color-honey-50) 60%,transparent)}.banner-content p,.banner-content strong,.banner-content em,.banner-content a,.banner-content span,.banner-content code{color:inherit!important;font-size:inherit!important}.banner-content p:last-of-type{margin-bottom:0!important}.prose .banner-content p,.prose .banner-content strong,.prose .banner-content em,.prose .banner-content a,.prose .banner-content span,.prose .banner-content code{color:inherit!important;font-size:inherit!important}.prose .banner-content p:last-of-type{margin-bottom:0!important} 189.campaign-offer-banner[data-astro-cid-ukinoyt4].hidden{display:none}.campaign-offer-banner[data-astro-cid-ukinoyt4].is-visible{display:block}
189.campaign-offer-banner[data-astro-cid-ukinoyt4].is-dismissing{transition:opacity .2s ease-out,max-height .2s ease-out,padding .2s ease-out;opacity:0;max-height:0;padding-top:0;padding-bottom:0} 190.btn-arrow-wrap{position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}.btn-arrow-icon{will-change:transform}.btn-arrow-icon.slide-in{animation:btn-arrow-slide-in .2s ease-in-out forwards}.btn-arrow-icon.slide-out{animation:btn-arrow-slide-out .2s ease-in-out forwards}@keyframes btn-arrow-slide-in{0%{transform:translate(0);opacity:1}50%{transform:translate(100%);opacity:0}50.01%{transform:translate(-100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes btn-arrow-slide-out{0%{transform:translate(0);opacity:1}50%{transform:translate(-100%);opacity:0}50.01%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}} 191</style>
191<script type="module" src="/_astro/hoisted.BaopxmOR.js"></script>
vendor: 1 bytes, line 191
191
192<script type="module" src="/_astro/page.SrI4KvC9.js"></script>
192</head> <body class="bg-white overscroll-y-none font-sans w-full overflow-x-clip"> <!-- Google Tag Manager (noscript) -->
vendor: 67 bytes, line 192
192<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
192GTM-THP98M8
vendor: 83 bytes, line 192
192" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
192<aside id="referral-offer-banner" class="referral-offer-banner hidden relative z-[60] w-full overflow-hidden border-b border-white/10 bg-[var(--color-lavender-600)] text-white" role="region" aria-label="Referral offer" hidden data-astro-cid-nahiwob6> <div class="pointer-events-none absolute inset-0 opacity-90" aria-hidden="true" style="background-image: linear-gradient(120deg, var(--color-lavender-600) 0%, var(--color-palatinate-500) 50%, var(--color-lavender-500) 100%);" data-astro-cid-nahiwob6></div> <div class="pointer-events-none absolute inset-0 opacity-50 mix-blend-overlay" aria-hidden="true" style="background-image: radial-gradient(circle at 15% 50%, rgba(255,255,255,0.35) 0, transparent 35%), radial-gradient(circle at 85% 50%, rgba(255,255,255,0.25) 0, transparent 40%);" data-astro-cid-nahiwob6></div> <div class="relative px-4 sm:px-6 lg:px-16" data-astro-cid-nahiwob6> <div class="mx-auto flex max-w-7xl items-center gap-3 py-2.5 sm:gap-4 sm:py-3" data-astro-cid-nahiwob6> <span class="hidden h-9 w-9 shrink-0 items-center justify-center rounded-full bg-white/15 ring-1 ring-inset ring-white/25 backdrop-blur-sm sm:inline-flex" aria-hidden="true" data-astro-cid-nahiwob6> <svg width="20" height="20" class="text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M6.25 4.41667C6.25 3.08198 7.33198 2 8.66667 2C10.043 2 11.2603 2.68092 12 3.72427C12.7397 2.68092 13.957 2 15.3333 2C16.668 2 17.75 3.08198 17.75 4.41667C17.75 5.39677 17.4047 6.29622 16.8291 7H18.875C20.0486 7 21 7.9514 21 9.125C21 10.2986 20.0486 11.25 18.875 11.25H12.75V7H13.6667C15.0934 7 16.25 5.8434 16.25 4.41667C16.25 3.91041 15.8396 3.5 15.3333 3.5C13.9066 3.5 12.75 4.6566 12.75 6.08333V7H11.25V6.08333C11.25 4.6566 10.0934 3.5 8.66667 3.5C8.16041 3.5 7.75 3.91041 7.75 4.41667C7.75 5.8434 8.9066 7 10.3333 7H11.25V11.25H5.125C3.95139 11.25 3 10.2986 3 9.125C3 7.9514 3.95139 7 5.125 7H7.1709C6.5953 6.29622 6.25 5.39677 6.25 4.41667Z" fill="currentColor"/><path d="M12.75 12.75H20V18.25C20 19.7688 18.7688 21 17.25 21H12.75V12.75Z" fill="currentColor"/><path d="M11.25 12.75H4V18.25C4 19.7688 5.23122 21 6.75 21H11.25V12.75Z" fill="currentColor"/></svg> 193 </span> <div class="flex flex-1 flex-wrap items-center gap-x-2 gap-y-0.5 text-sm sm:text-base" data-astro-cid-nahiwob6> <span class="inline-flex sm:hidden" aria-hidden="true" data-astro-cid-nahiwob6> <svg width="18" height="18" class="text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M6.25 4.41667C6.25 3.08198 7.33198 2 8.66667 2C10.043 2 11.2603 2.68092 12 3.72427C12.7397 2.68092 13.957 2 15.3333 2C16.668 2 17.75 3.08198 17.75 4.41667C17.75 5.39677 17.4047 6.29622 16.8291 7H18.875C20.0486 7 21 7.9514 21 9.125C21 10.2986 20.0486 11.25 18.875 11.25H12.75V7H13.6667C15.0934 7 16.25 5.8434 16.25 4.41667C16.25 3.91041 15.8396 3.5 15.3333 3.5C13.9066 3.5 12.75 4.6566 12.75 6.08333V7H11.25V6.08333C11.25 4.6566 10.0934 3.5 8.66667 3.5C8.16041 3.5 7.75 3.91041 7.75 4.41667C7.75 5.8434 8.9066 7 10.3333 7H11.25V11.25H5.125C3.95139 11.25 3 10.2986 3 9.125C3 7.9514 3.95139 7 5.125 7H7.1709C6.5953 6.29622 6.25 5.39677 6.25 4.41667Z" fill="currentColor"/><path d="M12.75 12.75H20V18.25C20 19.7688 18.7688 21 17.25 21H12.75V12.75Z" fill="currentColor"/><path d="M11.25 12.75H4V18.25C4 19.7688 5.23122 21 6.75 21H11.25V12.75Z" fill="currentColor"/></svg> 194 </span> <span class="font-semibold tracking-tight" data-astro-cid-nahiwob6> 195You've been referred â enjoy <span class="whitespace-nowrap" data-astro-cid-nahiwob6>15% off</span> your first purchase 196</span> <span class="hidden text-white/80 sm:inline" data-astro-cid-nahiwob6> 197Applied automatically when you subscribe. 198</span> </div> <a href="https://app.snitcher.com/register" class="hidden shrink-0 items-center gap-1.5 rounded-full bg-white px-4 py-1.5 text-sm font-semibold text-lavender-700 shadow-sm transition-colors hover:bg-zinc-100 sm:inline-flex" data-referral-cta data-astro-cid-nahiwob6> 199Start free 200<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" width="14" height="14" aria-hidden="true" data-astro-cid-nahiwob6> <path d="M5 12h14M13 6l6 6-6 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-nahiwob6></path> </svg> </a> <button type="button" class="referral-offer-dismiss group shrink-0 rounded-full p-1.5 text-white/80 transition-colors hover:bg-white/15 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60" aria-label="Dismiss referral offer" data-astro-cid-nahiwob6> <svg width="18" height="18" class="text-current" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M17.2197 5.71967C17.5126 5.42678 17.9873 5.42678 18.2802 5.71967C18.5731 6.01256 18.5731 6.48732 18.2802 6.78022L13.0605 11.9999L18.2802 17.2197C18.5731 17.5126 18.5731 17.9873 18.2802 18.2802C17.9873 18.5731 17.5126 18.5731 17.2197 18.2802L11.9999 13.0605L6.78022 18.2802C6.48732 18.5731 6.01256 18.5731 5.71967 18.2802C5.42678 17.9873 5.42678 17.5126 5.71967 17.2197L10.9394 11.9999L5.71967 6.78022C5.42678 6.48732 5.42678 6.01256 5.71967 5.71967C6.01256 5.42678 6.48732 5.42678 6.78022 5.71967L11.9999 10.9394L17.2197 5.71967Z" fill="currentColor"/></svg> 201 </button> </div> </div> </aside> <aside id="campaign-offer-banner" class="campaign-offer-banner hidden relative z-[60] w-full overflow-hidden border-b border-white/10 bg-[var(--color-lavender-600)] text-white" role="region" aria-label="Campaign offer" hidden data-astro-cid-ukinoyt4> <div class="pointer-events-none absolute inset-0 opacity-90" aria-hidden="true" style="background-image: linear-gradient(120deg, var(--color-lavender-600) 0%, var(--color-palatinate-500) 50%, var(--color-lavender-500) 100%);" data-astro-cid-ukinoyt4></div> <div class="pointer-events-none absolute inset-0 opacity-50 mix-blend-overlay" aria-hidden="true" style="background-image: radial-gradient(circle at 15% 50%, rgba(255,255,255,0.35) 0, transparent 35%), radial-gradient(circle at 85% 50%, rgba(255,255,255,0.25) 0, transparent 40%);" data-astro-cid-ukinoyt4></div> <div class="relative px-4 sm:px-6 lg:px-16" data-astro-cid-ukinoyt4> <div class="mx-auto flex max-w-7xl items-center gap-3 py-2.5 sm:gap-4 sm:py-3" data-astro-cid-ukinoyt4> <span class="hidden h-9 w-9 shrink-0 items-center justify-center rounded-full bg-white/15 ring-1 ring-inset ring-white/25 backdrop-blur-sm sm:inline-flex" aria-hidden="true" data-astro-cid-ukinoyt4> <svg width="20" height="20" class="text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M6.25 4.41667C6.25 3.08198 7.33198 2 8.66667 2C10.043 2 11.2603 2.68092 12 3.72427C12.7397 2.68092 13.957 2 15.3333 2C16.668 2 17.75 3.08198 17.75 4.41667C17.75 5.39677 17.4047 6.29622 16.8291 7H18.875C20.0486 7 21 7.9514 21 9.125C21 10.2986 20.0486 11.25 18.875 11.25H12.75V7H13.6667C1
2015.0934 7 16.25 5.8434 16.25 4.41667C16.25 3.91041 15.8396 3.5 15.3333 3.5C13.9066 3.5 12.75 4.6566 12.75 6.08333V7H11.25V6.08333C11.25 4.6566 10.0934 3.5 8.66667 3.5C8.16041 3.5 7.75 3.91041 7.75 4.41667C7.75 5.8434 8.9066 7 10.3333 7H11.25V11.25H5.125C3.95139 11.25 3 10.2986 3 9.125C3 7.9514 3.95139 7 5.125 7H7.1709C6.5953 6.29622 6.25 5.39677 6.25 4.41667Z" fill="currentColor"/><path d="M12.75 12.75H20V18.25C20 19.7688 18.7688 21 17.25 21H12.75V12.75Z" fill="currentColor"/><path d="M11.25 12.75H4V18.25C4 19.7688 5.23122 21 6.75 21H11.25V12.75Z" fill="currentColor"/></svg> 202 </span> <div class="flex flex-1 flex-wrap items-center gap-x-2 gap-y-0.5 text-sm sm:text-base" data-astro-cid-ukinoyt4> <span class="inline-flex sm:hidden" aria-hidden="true" data-astro-cid-ukinoyt4> <svg width="18" height="18" class="text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M6.25 4.41667C6.25 3.08198 7.33198 2 8.66667 2C10.043 2 11.2603 2.68092 12 3.72427C12.7397 2.68092 13.957 2 15.3333 2C16.668 2 17.75 3.08198 17.75 4.41667C17.75 5.39677 17.4047 6.29622 16.8291 7H18.875C20.0486 7 21 7.9514 21 9.125C21 10.2986 20.0486 11.25 18.875 11.25H12.75V7H13.6667C15.0934 7 16.25 5.8434 16.25 4.41667C16.25 3.91041 15.8396 3.5 15.3333 3.5C13.9066 3.5 12.75 4.6566 12.75 6.08333V7H11.25V6.08333C11.25 4.6566 10.0934 3.5 8.66667 3.5C8.16041 3.5 7.75 3.91041 7.75 4.41667C7.75 5.8434 8.9066 7 10.3333 7H11.25V11.25H5.125C3.95139 11.25 3 10.2986 3 9.125C3 7.9514 3.95139 7 5.125 7H7.1709C6.5953 6.29622 6.25 5.39677 6.25 4.41667Z" fill="currentColor"/><path d="M12.75 12.75H20V18.25C20 19.7688 18.7688 21 17.25 21H12.75V12.75Z" fill="currentColor"/><path d="M11.25 12.75H4V18.25C4 19.7688 5.23122 21 6.75 21H11.25V12.75Z" fill="currentColor"/></svg> 203 </span> <a href="#" class="font-semibold tracking-tight hover:underline" data-campaign-headline data-astro-cid-ukinoyt4></a> <span class="hidden text-white sm:inline" data-campaign-detail data-astro-cid-ukinoyt4></span> <span class="whitespace-nowrap font-semibold text-white" data-campaign-countdown data-astro-cid-ukinoyt4></span> </div> <a href="#" class="hidden shrink-0 items-center gap-1.5 rounded-full bg-white px-4 py-1.5 text-sm font-semibold text-lavender-700 shadow-sm transition-colors hover:bg-zinc-100 sm:inline-flex" data-campaign-cta data-astro-cid-ukinoyt4> <span data-campaign-cta-label data-astro-cid-ukinoyt4>Claim offer</span> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" width="14" height="14" aria-hidden="true" data-astro-cid-ukinoyt4> <path d="M5 12h14M13 6l6 6-6 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-ukinoyt4></path> </svg> </a> <button type="button" class="campaign-offer-dismiss group shrink-0 rounded-full p-1.5 text-white/80 transition-colors hover:bg-white/15 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60" aria-label="Dismiss campaign offer" data-astro-cid-ukinoyt4> <svg width="18" height="18" class="text-current" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M17.2197 5.71967C17.5126 5.42678 17.9873 5.42678 18.2802 5.71967C18.5731 6.01256 18.5731 6.48732 18.2802 6.78022L13.0605 11.9999L18.2802 17.2197C18.5731 17.5126 18.5731 17.9873 18.2802 18.2802C17.9873 18.5731 17.5126 18.5731 17.2197 18.2802L11.9999 13.0605L6.78022 18.2802C6.48732 18.5731 6.01256 18.5731 5.71967 18.2802C5.42678 17.9873 5.42678 17.5126 5.71967 17.2197L10.9394 11.9999L5.71967 6.78022C5.42678 6.48732 5.42678 6.01256 5.71967 5.71967C6.01256 5.42678 6.48732 5.42678 6.78022 5.71967L11.9999 10.9394L17.2197 5.71967Z" fill="currentColor"/></svg> 204 </button> </div> </div> </aside>
204<script type="application/json" id="campaign-offer-data">{"close":{"agency":{"path":"/lp/offer/close-crm/agencies","claimEndDate":"2026-09-30T23:59:59+02:00","signupUrl":"https://app.snitcher.com/register?utm_source=close&utm_medium=referral&utm_campaign=close-2026q3-offer-agency","ctaLabel":"Claim 1,200 leads per client","bannerHeadline":"Close agency offer: 1,200 free leads for every client you onboard","bannerDetail":"Plus 50% off Snitcher for life for your agency."},"end-user":{"path":"/lp/offer/close-crm","claimEndDate":"2026-09-30T23:59:59+02:00","signupUrl":"https://app.snitcher.com/register?utm_source=close&utm_medium=referral&utm_campaign=close-2026q3-offer-enduser","ctaLabel":"Claim 1,200 free leads","bannerHeadline":"Close customer offer: 1,200 free leads on any Snitcher plan","bannerDetail":"100 extra leads a month, for a year, on us."}}}</script>
204 <nav class="sticky top-0 z-50 w-full border-b transition-[border-color,box-shadow] duration-200" id="navbar" data-astro-cid-voiollt5> <!-- Background overlay --> <div id="navbar-bg" class="pointer-events-none absolute inset-0 z-0 opacity-0 transition-opacity duration-200 bg-white" data-astro-cid-voiollt5></div> <!-- Main navbar content --> <div class="relative z-10 w-full pt-4 pb-4" data-astro-cid-voiollt5> <div class="px-4 sm:px-6 lg:px-16" data-astro-cid-voiollt5> <div class="max-w-7xl mx-auto" data-astro-cid-voiollt5> <div class="relative flex items-center justify-between" data-astro-cid-voiollt5> <!-- Logo --> <div class="flex flex-1 items-center pointer-events-none" data-astro-cid-voiollt5> <a href="/" class="relative z-10 flex items-center gap-2.5 pointer-events-auto" data-astro-cid-voiollt5> <img src="/logo-symbol.svg" alt="Snitcher symbol" class="h-8 w-8 shrink-0 object-contain" loading="lazy" decoding="auto" data-astro-cid-voiollt5> <img src="/logo-wordmark.svg" alt="Snitcher" class="h-6 w-32 shrink-0 object-contain" loading="lazy" decoding="auto" data-astro-cid-voiollt5> </a> </div> <div class="absolute inset-0 hidden items-center lg:flex" data-astro-cid-voiollt5> <!-- Left nav group --> <div class="flex flex-1 items-center justify-end gap-1 xl:gap-2" data-astro-cid-voiollt5> <!-- Product Dropdown --> <div class="nav-dropdown-wrapper" data-dropdown="product" data-astro-cid-voiollt5> <button type="button" class="nav-link nav-link-dropdown" data-astro-cid-voiollt5> 205Product 206<span class="chevron-icon" data-astro-cid-voiollt5></span> </button> <div class="nav-dropdown-panel nav-dropdown-panel-wide bg-white" data-astro-cid-voiollt5> <div class="grid grid-cols-[320px_320px_192px] gap-x-6 px-6" data-astro-cid-voiollt5> <!-- Products Column --> <div class="flex flex-col gap-5 py-6" data-astro-cid-voiollt5> <div data-astro-cid-voiollt5> <span class="mb-3 block px-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>GTM Platform</span> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <a href="/platform" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-primary-500 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M3 5.75C3 4.23122 4.23122 3 5.75 3H8.25C8.66421 3 9 3.33579 9 3.75C9 4.16421 8.66421 4.5 8.25 4.5H5.75C5.05964 4.5 4.5 5.05964 4.5 5.75V8.25C4.5 8.66421 4.16421 9 3.75 9C3.33579 9 3 8.66421 3 8.25V5.75ZM15 3.75C15 3.33579 15.3358 3 15.75 3H18.25C19.7688 3 21 4.23122 21 5.75V8.25C21 8.66421 20.6642 9 20.25 9C19.8358 9 19.5 8.66421 19.5 8.25V5.75C19.5 5.05964 18.9404 4.5 18.25 4.5H15.75C15.3358 4.5 15 4.16421 15 3.75ZM7.75 8C8.16421 8 8.5 8.33579 8.5 8.75V10.25C8.5 10.6642 8.16421 11 7.75 11C7.33579 11 7 10.6642 7 10.25V8.75C7 8.33579 7.33579 8 7.75 8ZM12.25 8C12.6642 8 13 8.33579 13 8.75V11C13 12.4029 11.9501 13.5595 10.5928 13.7288C10.1818 13.78 9.80702 13.4884 9.75576 13.0773C9.70451 12.6663 9.99616 12.2915 10.4072 12.2403C11.023 12.1635 11.5 11.6369 11.5 11V8.75C11.5 8.33579 11.8358 8 12.25 8ZM16.25 8C16.6642 8 17 8.33579 17 8.75V10.25C17 10.6642 16.6642 11 16.25 11C15.8358 11 15.5 10.6642 15.5 10.25V8.75C15.5 8.33579 15.8358 8 16.25 8ZM8.3508 15.3218C8.5582 14.9632 9.017 14.8407 9.37554 15.0481C10.147 15.4944 11.0425 15.75 12 15.75C12.9575 15.75 13.853 15.4944 14.6245 15.0481C14.983 14.8407 15.4418 14.9632 15.6492 15.3218C15.8566 15.6803 15.7341 16.1391 15.3755 16.3465C14.3819 16.9213 13.2282 17.25 12 17.25C10.7718 17.25 9.61805 16.9213 8.62446 16.3465C8.26591 16.1391 8.14339 15.6803 8.3508 15.3218ZM3.75 15C4.16421 15 4.5 15.3358 4.5 15.75V18.25C4.5 18.9404 5.05964 19.5 5.75 19.5H8.25C8.66421 19.5 9 19.8358 9 20.25C9 20.6642 8.66421 21 8.25 21H5.75C4.23122 21 3 19.7688 3 18.25V15.75C3 15.3358 3.33579 15 3.75 15ZM20.25 15C20.6642 15 21 15.3358 21 15.75V18.25C21 19.7688 19.7688 21 18.25 21H15.75C15.3358 21 15 20.6642 15 20.25C15 19.8358 15.3358 19.5 15.75 19.5H18.25C18.9404 19.5 19.5 18.9404 19.5 18.25V15.75C19.5 15.3358 19.8358 15 20.25 15Z" fill="currentColor"/></svg> 207 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Platform </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Turn anonymous traffic into pipeline</span> </div> </a> </div> </div> <div data-astro-cid-voiollt5> <span class="mb-3 block px-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Powered by Snitcher</span> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <a href="/radar" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.30523 9.50117C3.86611 9.76669 3.33777 10 2.75 10C2.33579 10 2 9.66421 2 9.25C2 8.83579 2.33579 8.5 2.75 8.5C2.94339 8.5 3.19298 8.42081 3.52907 8.21758C3.86431 8.01487 4.20974 7.73714 4.6035 7.41762C4.61402 7.40908 4.62458 7.40051 4.63519 7.3919C5.00222 7.09399 5.41507 6.7589 5.8368 6.50087C6.26916 6.23634 6.79252 6 7.375 6C7.96055 6 8.4868 6.23456 8.9231 6.49968C9.35333 6.76112 9.77246 7.10128 10.1437 7.40254L10.1623 7.41763C10.5569 7.73789 10.9012 8.01573 11.2347 8.21876C11.5694 8.42254 11.814 8.5 12 8.5C12.1825 8.5 12.4248 8.42337 12.7589 8.21931C13.0916 8.01613 13.4353 7.73823 13.8304 7.41763L13.8429 7.40749C14.216 7.10467 14.6381 6.76215 15.0723 6.49914C15.5104 6.23375 16.038 6 16.625 6C17.2062 6 17.7284 6.23708 18.1592 6.50135C18.5775 6.75799 18.9878 7.09104 19.3531 7.38759L19.3901 7.41761C19.7835 7.73684 20.1294 8.01452 20.4654 8.21711C20.8021 8.42013 21.0537 8.5 21.25 8.5C21.6642 8.5 22 8.83579 22 9.25C22 9.66421 21.6642 10 21.25 10C20.661 10 20.1315 9.76737 19.6908 9.50164C19.2509 9.23638 18.8247 8.89051 18.4488 8.58549L18.445 8.58239C18.0493 8.26129 17.7063 7.98331 17.3747 7.7799C17.0415 7.57542 16.8025 7.5 16.625 7.5C16.4335 7.5 16.1852 7.57875 15.8495 7.78211C15.5147 7.98491 15.1695 8.26266 14.7756 8.58237L14.7473 8.60535C14.3791 8.90413 13.9647 9.24053 13.5408 9.49944C13.1074 9.76413 12.5833 10 12 10C11.4153 10 10.8898 9.76496 10.4546 9.49999C10.0267 9.23949 9.60936 8.90074 9.2393 8.6004L9.21708 8.58237C8.82269 8.26232 8.47811 7.9845 8.14415 7.78157C7.80905 7.57794 7.56305 7.5 7.375 7.5C7.19444 7.5 6.95344 7.57616 6.61965 7.78038C6.28742 7.98365 5.94399 8.26158 5.54867 8.58238L5.53954 8.58978C5.16532 8.89346 4.74163 9.23728 4.3
2070523 9.50117ZM4.30523 17.5012C3.86611 17.7667 3.33777 18 2.75 18C2.33579 18 2 17.6642 2 17.25C2 16.8358 2.33579 16.5 2.75 16.5C2.94339 16.5 3.19298 16.4208 3.52907 16.2176C3.86431 16.0149 4.20974 15.7371 4.6035 15.4176L4.6352 15.3919C5.00223 15.094 5.41507 14.7589 5.8368 14.5009C6.26916 14.2363 6.79252 14 7.375 14C7.96055 14 8.4868 14.2346 8.9231 14.4997C9.35334 14.7611 9.77247 15.1013 10.1437 15.4025L10.1623 15.4176C10.5569 15.7379 10.9012 16.0157 11.2347 16.2188C11.5694 16.4225 11.814 16.5 12 16.5C12.1825 16.5 12.4248 16.4234 12.7589 16.2193C13.0916 16.0161 13.4353 15.7382 13.8304 15.4176L13.8429 15.4075C14.216 15.1047 14.6381 14.7622 15.0723 14.4991C15.5104 14.2337 16.038 14 16.625 14C17.2062 14 17.7284 14.2371 18.1592 14.5014C18.5775 14.758 18.9878 15.091 19.3531 15.3876C19.3655 15.3976 19.3778 15.4076 19.3901 15.4176C19.7835 15.7368 20.1294 16.0145 20.4654 16.2171C20.8021 16.4201 21.0537 16.5 21.25 16.5C21.6642 16.5 22 16.8358 22 17.25C22 17.6642 21.6642 18 21.25 18C20.661 18 20.1315 17.7674 19.6908 17.5016C19.2509 17.2364 18.8247 16.8905 18.4488 16.5855L18.445 16.5824C18.0493 16.2613 17.7063 15.9833 17.3747 15.7799C17.0415 15.5754 16.8025 15.5 16.625 15.5C16.4335 15.5 16.1852 15.5788 15.8495 15.7821C15.5147 15.9849 15.1695 16.2627 14.7756 16.5824L14.7472 16.6054C14.3791 16.9041 13.9647 17.2405 13.5408 17.4994C13.1074 17.7641 12.5833 18 12 18C11.4153 18 10.8898 17.765 10.4546 17.5C10.0267 17.2395 9.60936 16.9007 9.2393 16.6004L9.21708 16.5824C8.82269 16.2623 8.47811 15.9845 8.14415 15.7816C7.80905 15.5779 7.56305 15.5 7.375 15.5C7.19444 15.5 6.95344 15.5762 6.61965 15.7804C6.28742 15.9837 5.94399 16.2616 5.54867 16.5824L5.53955 16.5898C5.16533 16.8935 4.74164 17.2373 4.30523 17.5012Z" fill="currentColor"/></svg> 208 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Radar </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Embed visitor intelligence in product</span> </div> </a><a href="/ip-to-company-api" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12ZM14.5565 8.36774C15.2096 8.18959 15.809 8.78895 15.6309 9.44213L14.5114 13.5467C14.3833 14.0164 14.0164 14.3833 13.5467 14.5114L9.44213 15.6309C8.78894 15.809 8.18959 15.2096 8.36774 14.5565L9.48716 10.4519C9.61526 9.98221 9.98221 9.61526 10.4519 9.48715L14.5565 8.36774Z" fill="currentColor"/></svg> 209 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> IP to Company </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Resolve any IP to a company via API</span> </div> </a> </div> </div> </div> <!-- How It Works Column --> <div class="flex flex-col py-6" data-astro-cid-voiollt5> <span class="mb-3 px-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>How It Works</span> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <a href="/identify" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.75 3C4.23122 3 3 4.23122 3 5.75V18.25C3 19.7688 4.23122 21 5.75 21H13.5833C13.568 20.9851 13.5528 20.9701 13.5377 20.955C11.4874 18.9047 11.4874 15.5806 13.5377 13.5303C15.5879 11.4801 18.9121 11.4801 20.9623 13.5303C20.975 13.543 20.9875 13.5557 21 13.5684V5.75C21 4.23122 19.7688 3 18.25 3H5.75ZM10.9896 7.15224C11.321 7.40077 11.3881 7.87087 11.1396 8.20224L9.26797 10.6978C9.02914 11.0162 8.58314 11.0926 8.25194 10.8718L7.12694 10.1218C6.7823 9.89203 6.68917 9.42637 6.91893 9.08173C7.1487 8.73708 7.61435 8.64395 7.95899 8.87372L8.49366 9.23016L9.9396 7.30224C10.1881 6.97087 10.6582 6.90371 10.9896 7.15224ZM13.058 9C13.058 8.58579 13.3937 8.25 13.808 8.25H16.308C16.7222 8.25 17.058 8.58579 17.058 9C17.058 9.41421 16.7222 9.75 16.308 9.75H13.808C13.3937 9.75 13.058 9.41421 13.058 9ZM10.9896 13.1534C11.321 13.4019 11.3881 13.872 11.1396 14.2034L9.26797 16.6989C9.02914 17.0173 8.58314 17.0937 8.25194 16.8729L7.12694 16.1229C6.7823 15.8932 6.68917 15.4275 6.91893 15.0829C7.14869 14.7382 7.61435 14.6451 7.95899 14.8748L8.49366 15.2313L9.9396 13.3034C10.1881 12.972 10.6582 12.9048 10.9896 13.1534Z" fill="currentColor"/><path fill-rule="evenodd" clip-rule="evenodd" d="M18.841 15.6517C17.9623 14.773 16.5377 14.773 15.659 15.6517C14.7803 16.5303 14.7803 17.955 15.659 18.8336C16.5377 19.7123 17.9623 19.7123 18.841 18.8336C19.7197 17.955 19.7197 16.5303 18.841 15.6517ZM14.5983 14.591C16.0628 13.1265 18.4372 13.1265 19.9016 14.591C21.1845 15.8738 21.3436 17.8549 20.3789 19.3109L21.7803 20.7123C22.0732 21.0052 22.0732 21.4801 21.7803 21.773C21.4874 22.0659 21.0126 22.0659 20.7197 21.773L19.3183 20.3716C17.8623 21.3362 15.8812 21.1771 14.5983 19.8943C13.1339 18.4298 13.1339 16.0555 14.5983 14.591Z" fill="currentColor"/></svg> 210 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Identify </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>See who visits your site</span> </div> </a><a href="/signal" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M11.5455 15.7345C9.45546 15.1509 7.58124 14.7024 5.5 15.5655V21.2496C5.5 21.6638 5.16421 21.9996 4.75 21.9996C4.33579 21.9996 4 21.6638 4 21.2496V4.39872C4 3.74584 4.37163 3.093 5.04245 2.82695C7.52875 1.84088 9.76493 2.37886 11.7734 2.93538C11.9051 2.97188 12.0357 3.00836 12.1653 3.04455C14.0634 3.57485 15.7401 4.04331 17.5642 3.60129C18.6368 3.34137 20 4.04343 20 5.38675V14.4616C20 15.1144 19.6284 15.7673
21018.9576 16.0333C16.3236 17.078 13.9537 16.4115 11.8464 15.8189C11.7455 15.7906 11.6452 15.7623 11.5455 15.7345Z" fill="currentColor"/></svg> 211 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Signal </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Spot intent as it happens</span> </div> </a><a href="/automate" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M9.32916 2C8.70285 2 8.12428 2.33472 7.81208 2.87768L3.21208 10.8777C2.54125 12.0443 3.38339 13.5 4.72916 13.5H7.67252C7.83072 13.5 7.94915 13.6451 7.91745 13.8001L6.68268 19.8386C6.33503 21.5388 8.40755 22.6537 9.63464 21.4267L20.5739 10.4874C21.6763 9.385 20.8955 7.5 19.3364 7.5H16.8687C16.6828 7.5 16.562 7.30442 16.6451 7.1382L17.9479 4.53262C18.5296 3.36905 17.6835 2 16.3826 2H9.32916Z" fill="currentColor"/></svg> 212 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Automate </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Trigger workflows instantly</span> </div> </a><a href="/engage" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M1.46783 6.05797C0.265136 4.9889 1.02132 3 2.63047 3H21.2788C22.6218 3 23.4643 4.45027 22.799 5.61691L13.6528 21.6554C12.8643 23.038 10.7893 22.7356 10.4282 21.1855L8.36566 12.3316L14.9744 8.65542C15.3364 8.45407 15.4666 7.9974 15.2653 7.63542C15.0639 7.27344 14.6072 7.14322 14.2453 7.34458L7.27632 11.2211L1.46783 6.05797Z" fill="currentColor"/></svg> 213 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Engage </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Reach accounts at the right time</span> </div> </a><a href="/measure" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.75 3C4.16421 3 4.5 3.33579 4.5 3.75V15.3456L7.60248 12.2431C8.60731 11.2383 10.2364 11.2383 11.2413 12.2431C11.6603 12.6621 12.3397 12.6621 12.7587 12.2431L15.2117 9.79013C16.2856 8.71619 18.0269 8.71619 19.1008 9.79013L19.7491 10.4384C20.042 10.7313 20.042 11.2062 19.7491 11.4991C19.4562 11.792 18.9813 11.792 18.6884 11.4991L18.0401 10.8508C17.552 10.3626 16.7605 10.3626 16.2724 10.8508L13.8194 13.3038C12.8146 14.3086 11.1854 14.3086 10.1806 13.3038C9.76157 12.8847 9.08218 12.8847 8.66314 13.3038L4.5 17.4669V18.25C4.5 18.9404 5.05964 19.5 5.75 19.5H20.25C20.6642 19.5 21 19.8358 21 20.25C21 20.6642 20.6642 21 20.25 21H5.75C4.23122 21 3 19.7688 3 18.25V3.75C3 3.33579 3.33579 3 3.75 3Z" fill="currentColor"/></svg> 214 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Measure </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Prove & scale what works best</span> </div> </a> </div> </div> <!-- Explore Column --> <div class="flex flex-col border-l pl-6 py-6 border-zinc-200" data-astro-cid-voiollt5> <span class="mb-3 px-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Explore</span> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <a href="/changelog" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Changelog </span> </a><a href="/integrations" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Integrations </span> </a><a href="https://trust.snitcher.com" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" target="_blank" rel="noopener noreferrer" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Trust centre <svg width="14" height="14" class="text-zinc-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M18.25 15.25V5.75M18.25 5.75H8.75M18.25 5.75L6 18" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg> 215 </span> </a><a href="/demo" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Talk to sales </span> </a> </div> </div> </div> </div> </div> <!-- Solutions Dropdown --> <div class="nav-dropdown-wrapper" data-dropdown="solutions" data-astro-cid-voiollt5> <button type="button" class="nav-link nav-link-dropdown" data-astro-cid-voiollt5> 216Solutions 217<span class="chevron-icon" data-astro-cid-voiollt5></span> </button> <div class="nav-dropdown-panel bg-white" data-astro-cid-voiollt5> <div class="grid grid-cols-[320px_240px] gap-x-6 px-6" data-astro-cid-voiollt5> <!-- Teams Column --> <div class="flex flex-col py-6" data-astro-cid-voiollt5> <span class="mb-3 px-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Teams</span> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <a href="/solutions/sales" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M14.5634 13.5799C14.6 13.2593 14.4292 12.9316 14.1078 12.9024C14.102 12.9019 14.0961 12.9014 14.0903 12.9009L9.19669 12.5131C8.65686 12.4704 8.11351 12.5323 7.5996 12.6952L3.69783 13.932C3.28233 14.0637 3 14.4494 3 14.8852V20.0199C3 20.5721 3.44772 21.0199 4 21.0199H4.83831L4.85056 21.0237C4.95989 21.0574 5.11685 21.1047 5.31199 21.1604C5.70161 21.2716 6.24688 21.4174 6.87145 21.5561C8.09069 21.8267 9.72522 22.0966 11.0994 21.9661C12.5697 21.8264 14.3876 21.1358 15.958 20.4236C17.5608 19.6966 19.0337 18.8864 19.8515 18.4189C20.5815 18.0016 21 17.2562 21 16.472C21 14.9261 19.557 14.5558 18 15L15.5 15.75C14.5 17 13.9507 17.3157 12.3751 17.6528L11.1171 17.922C10.7369 18.0033 10.3614 17.7659 10.2718 17.3875C10.1795 16.9975 10.426 16.6078 10.8179 16.5239L12.0458 16.2612C13.4015 15.9711 14.4132 14.8936 14.5634 13.5799Z" fill="currentColor"/><path d="M18 7.5C18 9.433 16.433 11 14.5 11C12.567 11 11 9.433 11 7.5C11 5.567 12.567 4 14.5 4C16.433 4 18 5.567 18 7.5Z" fill="currentColor"/><path d="M12.0731 3.12743C10.5384 3.98106 9.5 5.61927 9.5 7.5C9.5 8.01995 9.57937 8.52136 9.72664 8.99278C9.65171 8.99757 9.57614 9 9.5 9C7.567 9 6 7.433 6 5.5C6 3.567 7.567 2 9.5 2C10.5175 2 11.4336 2.4342 12.0731 3.12743Z" fill="currentColor"/></svg> 218 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Sales </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Find & close warm accounts</span> </div> </a><a href="/solutions/marketing" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.4348 2.83302C17.2037 2.28685 18.9961 3.60929 18.9961 5.46062V7.32497C20.7078 7.67242 21.9961 9.18574 21.9961 11C21.9961 12.8142 20.7078 14.327
2185 18.9961 14.6749V16.5393C18.9961 18.3906 17.2037 19.7131 15.4348 19.1669L13.2817 18.5021C12.7667 19.9564 11.3792 21 9.74609 21C7.67503 21 5.99609 19.321 5.99609 17.25V16.2526L3.93481 15.6162C2.78222 15.2603 1.99609 14.1949 1.99609 12.9886V9.01131C1.99609 7.80504 2.78222 6.73958 3.93481 6.38371L6.51034 5.5885C6.5212 5.58487 6.53218 5.58148 6.54326 5.57833L15.4348 2.83302ZM7.49609 16.7158V17.25C7.49609 18.4926 8.50345 19.5 9.74609 19.5C10.7025 19.5 11.5212 18.9029 11.8465 18.059L7.49609 16.7158ZM20.4961 11C20.4961 11.9796 19.87 12.813 18.9961 13.1219V8.87798C19.87 9.18686 20.4961 10.0203 20.4961 11ZM5.99829 7.31647V14.6834L4.37733 14.183C3.85342 14.0212 3.49609 13.5369 3.49609 12.9886V9.01131C3.49609 8.46301 3.85342 7.97871 4.37733 7.81695L5.99829 7.31647Z" fill="currentColor"/></svg> 219 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Marketing </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Turn traffic into pipeline</span> </div> </a><a href="/solutions/revops" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M6.64125 9.29847C8.49624 7.44348 11.5038 7.44348 13.3588 9.29847L13.7019 9.64161C14.4775 10.4172 14.9295 11.3963 15.0562 12.4071C15.1076 12.8181 14.8162 13.1931 14.4052 13.2445C13.9942 13.296 13.6193 13.0046 13.5678 12.5936C13.4811 11.9019 13.1729 11.2339 12.6413 10.7023L12.2981 10.3591C11.0289 9.08993 8.97111 9.08992 7.70191 10.3591L4.35876 13.7023C3.08956 14.9715 3.08956 17.0293 4.35876 18.2985L4.70191 18.6416C5.97111 19.9108 8.02888 19.9108 9.29809 18.6416L9.46965 18.4701C9.76253 18.1772 10.2374 18.1771 10.5303 18.47C10.8232 18.7629 10.8232 19.2378 10.5303 19.5307L10.3588 19.7023C8.50379 21.5572 5.49624 21.5573 3.64125 19.7023L3.2981 19.3591C1.44311 17.5041 1.44311 14.4966 3.2981 12.6416L6.64125 9.29847Z" fill="currentColor"/><path fill-rule="evenodd" clip-rule="evenodd" d="M13.6412 5.29847C15.4962 3.44348 18.5037 3.44348 20.3587 5.29847L20.7019 5.64161C22.5568 7.4966 22.5568 10.5041 20.7019 12.3591L17.3587 15.7023C15.5037 17.5573 12.4962 17.5573 10.6412 15.7023L10.298 15.3591C9.52244 14.5835 9.07043 13.6044 8.9438 12.5936C8.89232 12.1826 9.18376 11.8077 9.59476 11.7562C10.0058 11.7047 10.3807 11.9961 10.4322 12.4071C10.5188 13.0988 10.8271 13.7668 11.3587 14.2985L11.7019 14.6416C12.9711 15.9108 15.0288 15.9108 16.298 14.6416L19.6412 11.2985C20.9104 10.0293 20.9104 7.97148 19.6412 6.70228L19.298 6.35913C18.0288 5.08993 15.9711 5.08993 14.7019 6.35913L14.5304 6.53063C14.2375 6.82356 13.7627 6.82362 13.4697 6.53077C13.1768 6.23791 13.1767 5.76304 13.4696 5.47011L13.6412 5.29847Z" fill="currentColor"/></svg> 220 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> RevOps </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Unify your revenue data</span> </div> </a><a href="/solutions/agency" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M3.75 3C3.33579 3 3 3.33579 3 3.75V5C3 9.28021 6.46979 12.75 10.75 12.75H11.25V20.25C11.25 20.6642 11.5858 21 12 21C12.4142 21 12.75 20.6642 12.75 20.25V16H13.25C17.5302 16 21 12.5302 21 8.25V6.75C21 6.33579 20.6642 6 20.25 6H19C16.3562 6 14.0216 7.32382 12.6229 9.34475C11.9618 5.73541 8.80036 3 5 3H3.75Z" fill="currentColor"/></svg> 221 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Agency </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Prove ROI for every client</span> </div> </a> </div> </div> <!-- Use Cases Column --> <div class="flex flex-col border-l pl-6 py-6 border-zinc-200" data-astro-cid-voiollt5> <span class="mb-3 px-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Use Cases</span> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <a href="/use-cases/account-scoring" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> Account scoring </a><a href="/use-cases/contact-reveal" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> Contact reveal </a><a href="/use-cases/enrich-ga4" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> GA4 enrichment </a><a href="/use-cases/lead-generation" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> Lead generation </a><a href="/use-cases/marketing-attribution" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> Marketing attribution </a><a href="/use-cases/visitor-identification" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> Visitor identification </a> </div> </div> </div> </div> </div> </div> <!-- Center nav item (Resources) --> <div class="flex items-center shrink-0" data-astro-cid-voiollt5> <!-- Resources Dropdown --> <div class="nav-dropdown-wrapper" data-dropdown="resources" data-astro-cid-voiollt5> <button type="button" class="nav-link nav-link-dropdown" data-astro-cid-voiollt5> 222Resources 223<span class="chevron-icon" data-astro-cid-voiollt5></span> </button> <div class="nav-dropdown-panel bg-white" data-astro-cid-voiollt5> <div class="grid grid-cols-[320px_192px] gap-x-6 px-6" data-astro-cid-voiollt5> <!-- Left Column: Learn, Support, Partners --> <div class="flex flex-col gap-5 py-6" data-astro-cid-voiollt5> <div data-astro-cid-voiollt5> <span class="mb-3 block px-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Learn</span> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <a href="/blog" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M11.25 5.37706L5.34848 4.06118C3.63055 3.67813 2 4.98515 2 6.74526V17.0845C2 18.3727 2.89421 19.4883 4.15152 19.7686L11.25 21.3514V5.37706Z" fill="currentColor"/><path d="M12.75 5.37706V21.3514L19.8485 19.7686C21.1058 19.4883 22 18.3727 22 17.0845V6.74526C22 4.98515 20.3694 3.67813 18.6515 4.06118L12.75 5.37706Z" fill="currentColor"/></svg> 224 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="flex items-center gap-2" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Blog </span> </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Read playbooks & updates</span> </div> </a> </div> </div> <div data-astro-cid-voiollt5> <span class="mb-3 block px-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Support</span> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <a href="https://docs.snitcher.com" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" target="_blank" rel="noopener noreferrer" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 7.25C12 8.76878 13.2312 10 14.75 10H20V19.25C20 20.7688 18.7688 22 17.25 22H6.75C5.23122 22 4 20.7688 4 19.25V4.75C4 3.23122 5.23122 2 6.75 2H12V7.25ZM8.75 17.5C8.33579 17.5 8 17.8358 8 18.25C8 18.6642 8.33579 19 8.75 19H15.25C15.6642 19 16 18.6642 16 18.25C16 17.8358 15.6642 17.5 15.25 17.5H8.75ZM8.75 13.5C8.33579 13.5 8 13.8358 8 14.25C8 14.6642 8.33579 15 8.75 15H12.25C12.6642 15 13 14.6642 13 14.25C13 13.8358 12.6642 13.5 12.25 13.5H8.75Z" fill="currentColor"/><path d="M13.5732 2.5127L19.4873 8.42676C19.5111 8.45056 19.5344 8.475 19.5566 8.5H14.75C14.0597 8.5 13.5 7.94032 13.5 7.25V2.44336C13.525 2.46564 13.5494 2.48889 13.5732 2.5127Z" fill="currentColor"/></svg> 225 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="flex items-center gap-2" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Documentation </span> <svg width="14" height="14" class="text-zinc-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M18.25 15.25V5.75M18.25 5.75H8.75M18.25 5.75L6 18" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg> 226 </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Set up & integrate Snitcher</span> </div> </a><a href="https://help.snitcher.com" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" target="_blank" rel="noopener noreferrer" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-zinc-100 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-zinc-700" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.2324 8.35396C13.966 7.4249 14.5031 6.45579 15.4322 6.18939L16.8741 5.77593C17.8032 5.50953 18.7723 6.04672 19.0387 6.97577L22.2085 18.0303C22.4749 18.9593 21.9377 19.9285 21.0087 20.1949L19.5668 20.6083C18.6377 20.8747 17.6686 20.3375 17.4022 19.4085L14.2324 8.35396Z" fill="currentColor"/><path fill-rule="evenodd" clip-rule="evenodd" d="M8.75 3C7.7835 3 7 3.7835 7 4.75V19.25C7 20.2165 7.7835 21 8.75 21H12.25C13.2165 21 14 20.2165 14 19.25V4.75C14 3.7835 13.2165 3 12.25 3H8.75ZM8.5 7.75C8.5 7.33579 8.83579 7 9.25 7H11.75C12.1642 7 12.5 7.33579 12.5 7.75C12.5 8.16421 12.1642 8.5 11.75 8.5H9.25C8.83579 8.5 8.5 8.16421 8.5 7.75ZM12.5 16.25C12.5 15.8358 12.1642 15.5 11.75 15.5H9.25C8.83579 15.5 8.5 15.8358 8.5 16.25C8.5 16.6642 8.83579 17 9.25 17H11.75C12.1642 17 12.5 16.6642 12.5 16.25Z" fill="currentColor"/><path d="M3.75 5C2.7835 5 2 5.7835 2 6.75V19.25C2 20.2165 2.7835 21 3.75 21H4.25C5.2165 21 6 20.2165 6 19.25V6.75C6 5.7835 5.2165 5 4.25 5H3.75Z" fill="currentColor"/></svg> 227 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="flex items-center gap-2" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Help center </span> <svg width="14" height="14" class="text-zinc-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M18.25 15.25V5.75M18.25 5.75H8.75M18.25 5.75L6 18" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg> 228 </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Read our knowledge base</span> </div> </a> </div> </div> <div data-astro-cid-voiollt5> <span class="mb-3 block px-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Partners</span> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <a href="/partners" class="group flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-zinc-50" data-astro-cid-voiollt5> <div class="flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-jade
228-500 h-11 w-11 rounded-xl"> <div class="h-5 w-5"> <svg width="20" height="20" class="text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M9.5 4V3.5C9.5 2.11929 10.6193 1 12 1C13.3807 1 14.5 2.11929 14.5 3.5V4H18.25C19.7688 4 21 5.23122 21 6.75V9C21 9.27614 20.7761 9.5 20.5 9.5C19.1193 9.5 18 10.6193 18 12C18 13.3807 19.1193 14.5 20.5 14.5C20.7761 14.5 21 14.7239 21 15V17.25C21 18.7688 19.7688 20 18.25 20H5.75C4.23122 20 3 18.7688 3 17.25V6.75C3 5.23122 4.23122 4 5.75 4H9.5Z" fill="currentColor"/></svg> 229 </div> </div> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <span class="text-sm font-semibold transition-colors group-hover:text-primary-500 text-zinc-800" data-astro-cid-voiollt5> Partner Program </span> <span class="text-sm leading-5 text-zinc-700" data-astro-cid-voiollt5>Agency, Expert & Creator programs</span> </div> </a> </div> </div> </div> <!-- Right Column: Company, Contact --> <div class="flex flex-col gap-5 border-l pl-6 py-6 border-zinc-200" data-astro-cid-voiollt5> <div data-astro-cid-voiollt5> <span class="mb-3 block px-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Company</span> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <a href="/about" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> About us </a><a href="/careers" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> Careers </a> </div> </div> <div data-astro-cid-voiollt5> <span class="mb-3 block px-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Contact</span> <div class="flex flex-col gap-1" data-astro-cid-voiollt5> <button type="button" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 cursor-pointer text-left text-zinc-800 hover:bg-zinc-50" data-intercom-action="showNewMessage" data-astro-cid-voiollt5>
229 Chat to support </button><a href="/demo" class="group rounded-xl px-3 py-3 text-sm font-semibold no-underline transition-colors hover:text-primary-500 text-zinc-800 hover:bg-zinc-50" data-astro-cid-voiollt5> Talk to sales </a> </div> </div> </div> </div> </div> </div> </div> <!-- Right nav group --> <div class="flex flex-1 items-center gap-1 xl:gap-2" data-astro-cid-voiollt5> <a href="/customers" class="nav-link" data-astro-cid-voiollt5> 230Customers 231</a> <a href="/pricing" class="nav-link" data-astro-cid-voiollt5> 232Pricing 233</a> </div> </div> <!-- Action Buttons --> <div class="relative z-10 flex flex-1 items-center justify-end gap-2 pointer-events-none [&>*]:pointer-events-auto" data-astro-cid-voiollt5> <button id="mobile-menu-toggle" type="button" class="relative inline-flex h-10 items-center justify-center gap-2 rounded-full border border-[var(--alpha-border)] px-4 text-base font-semibold shadow transition-colors lg:hidden bg-white text-zinc-700 hover:bg-zinc-50" aria-expanded="false" aria-controls="mobile-menu" data-astro-cid-voiollt5> <span class="relative flex h-6 w-6 items-center justify-center" data-astro-cid-voiollt5> <svg id="hamburger-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" class="absolute h-6 w-6 transition-opacity duration-200" data-astro-cid-voiollt5> <path d="M2.75 12H21.25M2.75 5.75H21.25M2.75 18.25H21.25" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-voiollt5></path> </svg> <svg id="close-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" class="absolute h-5 w-5 opacity-0 transition-opacity duration-200" data-astro-cid-voiollt5> <path d="M18 6L6 18M6 6L18 18" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-voiollt5></path> </svg> </span> <span class="relative" data-astro-cid-voiollt5> <span id="menu-label" data-astro-cid-voiollt5>Menu</span> <span id="close-label" class="absolute left-0 opacity-0 transition-opacity duration-200" data-astro-cid-voiollt5>Close</span> </span> </button> <a href="https://app.snitcher.com/login" class="inline-flex items-center justify-center gap-2 px-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-white ring-1 ring-[var(--alpha-border)] !text-zinc-700 hover:bg-zinc-50 hidden lg:inline-flex" data-astro-cid-voiollt5>Log in</a>
233<script> 234 (function() { 235 function initButtonArrows() { 236 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 237 if (button.dataset.btnArrowInit) return; 238 button.dataset.btnArrowInit = 'true'; 239 240 var icon = button.querySelector('.btn-arrow-icon'); 241 if (!icon) return; 242 243 button.addEventListener('mouseenter', function() { 244 icon.classList.remove('slide-out'); 245 icon.classList.add('slide-in'); 246 }); 247 248 button.addEventListener('mouseleave', function() { 249 icon.classList.remove('slide-in'); 250 icon.classList.add('slide-out'); 251 }); 252 }); 253 } 254 255 if (document.readyState === 'loading') { 256 document.addEventListener('DOMContentLoaded', initButtonArrows); 257 } else { 258 initButtonArrows(); 259 } 260 261 document.addEventListener('astro:page-load', initButtonArrows); 262 })(); 263</script>
263 <a href="https://app.snitcher.com/register" class="inline-flex items-center justify-center gap-2 px-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-primary-500 !text-white hover:bg-primary-600 !pl-3 hidden lg:inline-flex"> <svg width="20" height="20" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0" aria-hidden="true"> <path d="M211.265 148.37C187.598 224.219 123.858 249.286 104.886 255.161C89.5631 259.93 84.2516 243.014 99.6384 238.244C116.524 233.017 173.258 210.709 194.355 143.094C205.691 106.783 186.837 68.5577 152.325 57.79C117.074 46.7923 80.2423 68.8045 69.2412 104.054C67.5848 109.361 63.152 113.363 58.9333 113.363C52.8997 113.363 50.3043 105.281 52.3341 98.7783C66.1181 54.6057 112.724 26.8804 157.601 40.8841C202.129 54.7776 225.257 103.517 211.265 148.37ZM168.681 5.37712C102.536 -15.2639 36.1026 25.9353 16.8302 87.6986C7.05086 119.034 28.0846 150.559 58.9017 150.559C79.3873 150.559 98.2403 135.991 104.747 115.134C109.855 98.7636 126.062 88.5621 141.246 93.2947C156.164 97.95 164.06 115.32 158.854 132.015C145.032 176.301 103.905 207.232 58.8369 207.236H58.8306C53.1805 207.236 47.4893 206.748 41.9193 205.783C26.0231 203.042 23.0907 220.506 38.9072 223.237C45.4654 224.373 52.1665 224.95 58.822 224.95C111.569 224.95 159.656 188.902 175.758 137.291C183.809 111.494 170.991 84.021 146.522 76.39C121.831 68.6852 95.7658 84.4535 87.8419 109.858C83.6147 123.396 71.7306 132.852 58.9427 132.852C40.047 132.852 27.4971 112.952 33.7365 92.9742C51.7151 35.4079 111.149 5.98231 163.405 22.2851C217.821 39.2652 247.198 98.6229 229.863 154.174C220.278 184.887 202.64 212.731 179.141 234.367C167.297 245.262 179.436 258.135 191.286 247.224C217.073 223.484 236.259 193.132 246.77 159.45C267.275 93.7541 231.625 25.0164 168.681 5.37712ZM58.6439 187.8C95.3789 187.8 128.937 162.473 140.255 126.211C142.694 118.381 139.514 113.349 135.392 112.062C131.306 110.787 125.784 113.124 123.348 120.937C114.327 149.843 87.7136 170.032 58.6287 170.032C44.0506 170.032 30.2484 164.946 18.717 155.324C6.35199 145.002 -4.98893 158.544 7.38454 168.884C22.2568 181.257 39.9787 187.797 58.6349 187.8H58.6439Z" fill="currentColor"></path> </svg> <span>Start for free</span> </a>
263<script> 264 (function() { 265 function initButtonArrows() { 266 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 267 if (button.dataset.btnArrowInit) return; 268 button.dataset.btnArrowInit = 'true'; 269 270 var icon = button.querySelector('.btn-arrow-icon'); 271 if (!icon) return; 272 273 button.addEventListener('mouseenter', function() { 274 icon.classList.remove('slide-out'); 275 icon.classList.add('slide-in'); 276 }); 277 278 button.addEventListener('mouseleave', function() { 279 icon.classList.remove('slide-in'); 280 icon.classList.add('slide-out'); 281 }); 282 }); 283 } 284 285 if (document.readyState === 'loading') { 286 document.addEventListener('DOMContentLoaded', initButtonArrows); 287 } else { 288 initButtonArrows(); 289 } 290 291 document.addEventListener('astro:page-load', initButtonArrows); 292 })(); 293</script>
293 </div> </div> </div> </div> <div id="mobile-menu" class="absolute left-0 right-0 top-full z-40 max-h-[calc(100dvh-64px)] overflow-hidden rounded-b-2xl shadow-lg transition-[height] duration-300 ease-out lg:hidden bg-white" style="height: 0;" data-astro-cid-voiollt5> <div class="mobile-menu-scroll h-full px-6 pb-6 pt-4" data-astro-cid-voiollt5> <nav class="mb-6 space-y-2" data-astro-cid-voiollt5> <!-- Product dropdown --> <div class="mobile-dropdown" data-astro-cid-voiollt5> <button type="button" class="mobile-nav-link mobile-dropdown-toggle" aria-expanded="false" data-astro-cid-voiollt5> 294Product 295<span class="mobile-chevron" data-astro-cid-voiollt5></span> </button> <div class="mobile-submenu" data-astro-cid-voiollt5> <span class="block px-4 py-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>GTM Platform</span> <a href="/platform" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Platform </a> <span class="block px-4 pb-1 pt-3 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Powered by Snitcher</span> <a href="/radar" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Radar </a><a href="/ip-to-company-api" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> IP to Company </a> <span class="block px-4 pb-1 pt-3 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>How It Works</span> <a href="/identify" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Identify </a><a href="/signal" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Signal </a><a href="/automate" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Automate </a><a href="/engage" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Engage </a><a href="/measure" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Measure </a> <span class="block px-4 pb-1 pt-3 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Explore</span> <a href="/changelog" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Changelog </span> </a><a href="/integrations" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Integrations </span> </a><a href="https://trust.snitcher.com" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" target="_blank" rel="noopener noreferrer" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Trust centre <svg width="16" height="16" class="text-zinc-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M18.25 15.25V5.75M18.25 5.75H8.75M18.25 5.75L6 18" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg> 296 </span> </a><a href="/demo" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Talk to sales </span> </a> </div> </div> <!-- Solutions dropdown --> <div class="mobile-dropdown" data-astro-cid-voiollt5> <button type="button" class="mobile-nav-link mobile-dropdown-toggle" aria-expanded="false" data-astro-cid-voiollt5> 297Solutions 298<span class="mobile-chevron" data-astro-cid-voiollt5></span> </button> <div class="mobile-submenu" data-astro-cid-voiollt5> <span class="block px-4 py-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Teams</span> <a href="/solutions/sales" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Sales </a><a href="/solutions/marketing" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Marketing </a><a href="/solutions/revops" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> RevOps </a><a href="/solutions/agency" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Agency </a> <span class="block px-4 pb-1 pt-3 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Use Cases</span> <a href="/use-cases/account-scoring" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Account scoring </a><a href="/use-cases/contact-reveal" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Contact reveal </a><a href="/use-cases/enrich-ga4" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> GA4 enrichment </a><a href="/use-cases/lead-generation" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Lead generation </a><a href="/use-cases/marketing-attribution" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Marketing attribution </a><a href="/use-cases/visitor-identification" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Visitor identification </a> </div> </div> <!-- Resources dropdown --> <div class="mobile-dropdown" data-astro-cid-voiollt5> <button type="button" class="mobile-nav-link mobile-dropdown-toggle" aria-expanded="false" data-astro-cid-voiollt5> 299Resources 300<span class="mobile-chevron" data-astro-cid-voiollt5></span> </button> <div class="mobile-submenu" data-astro-cid-voiollt5> <span class="block px-4 py-1 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Learn</span> <a href="/blog" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Blog </span> </a> <span class="block px-4 pb-1 pt-3 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Support</span> <a href="https://docs.snitcher.com" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" target="_blank" rel="noopener noreferrer" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Documentation <svg width="16" height="16" class="text-zinc-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M18.25 15.25V5.75M18.25 5.75H8.75M18.25 5.75L6 18" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg> 301 </span> </a><a href="https://help.snitcher.com" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" target="_blank" rel="noopener noreferrer" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Help center <svg width="16" height="16" class="text-zinc-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M18.25 15.25V5.75M18.25 5.75H8.75M18.25 5.75L6 18" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg> 302 </span> </a> <span class="block px-4 pb-1 pt-3 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Partners</span> <a href="/partners" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> <span class="inline-flex items-center gap-1.5" data-astro-cid-voiollt5> Partner Program </span> </a> <span class="block px-4 pb-1 pt-3 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Company</span> <a href="/about" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> About us </a><a href="/careers" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Careers </a> <span class="block px-4 pb-1 pt-3 eyebrow text-xs text-zinc-400" data-astro-cid-voiollt5>Contact</span> <button type="button" class="block rounded-lg px-4 py-2.5 text-base min-h-8 w-full text-left cursor-pointer hover:bg-zinc-50" data-intercom-action="showNewMessage" data-astro-cid-voiollt5>
302 Chat to support </button><a href="/demo" class="block rounded-lg px-4 py-2.5 text-base min-h-8 hover:bg-zinc-50" data-astro-cid-voiollt5> Talk to sales </a> </div> </div> <!-- Direct links --> <a href="/customers" class="mobile-nav-link" data-astro-cid-voiollt5> 303Customers 304</a> <a href="/pricing" class="mobile-nav-link" data-astro-cid-voiollt5> 305Pricing 306</a> </nav> <div class="flex flex-col gap-2" data-astro-cid-voiollt5> <a href="https://app.snitcher.com/login" class="inline-flex items-center justify-center gap-2 px-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-white ring-1 ring-[var(--alpha-border)] !text-zinc-700 hover:bg-zinc-50 w-full justify-center" data-astro-cid-voiollt5>Log in</a>
306<script> 307 (function() { 308 function initButtonArrows() { 309 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 310 if (button.dataset.btnArrowInit) return; 311 button.dataset.btnArrowInit = 'true'; 312 313 var icon = button.querySelector('.btn-arrow-icon'); 314 if (!icon) return; 315 316 button.addEventListener('mouseenter', function() { 317 icon.classList.remove('slide-out'); 318 icon.classList.add('slide-in'); 319 }); 320 321 button.addEventListener('mouseleave', function() { 322 icon.classList.remove('slide-in'); 323 icon.classList.add('slide-out'); 324 }); 325 }); 326 } 327 328 if (document.readyState === 'loading') { 329 document.addEventListener('DOMContentLoaded', initButtonArrows); 330 } else { 331 initButtonArrows(); 332 } 333 334 document.addEventListener('astro:page-load', initButtonArrows); 335 })(); 336</script>
336 <a href="https://app.snitcher.com/register" class="inline-flex items-center justify-center gap-2 px-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-primary-500 !text-white hover:bg-primary-600 !pl-3 w-full justify-center"> <svg width="20" height="20" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0" aria-hidden="true"> <path d="M211.265 148.37C187.598 224.219 123.858 249.286 104.886 255.161C89.5631 259.93 84.2516 243.014 99.6384 238.244C116.524 233.017 173.258 210.709 194.355 143.094C205.691 106.783 186.837 68.5577 152.325 57.79C117.074 46.7923 80.2423 68.8045 69.2412 104.054C67.5848 109.361 63.152 113.363 58.9333 113.363C52.8997 113.363 50.3043 105.281 52.3341 98.7783C66.1181 54.6057 112.724 26.8804 157.601 40.8841C202.129 54.7776 225.257 103.517 211.265 148.37ZM168.681 5.37712C102.536 -15.2639 36.1026 25.9353 16.8302 87.6986C7.05086 119.034 28.0846 150.559 58.9017 150.559C79.3873 150.559 98.2403 135.991 104.747 115.134C109.855 98.7636 126.062 88.5621 141.246 93.2947C156.164 97.95 164.06 115.32 158.854 132.015C145.032 176.301 103.905 207.232 58.8369 207.236H58.8306C53.1805 207.236 47.4893 206.748 41.9193 205.783C26.0231 203.042 23.0907 220.506 38.9072 223.237C45.4654 224.373 52.1665 224.95 58.822 224.95C111.569 224.95 159.656 188.902 175.758 137.291C183.809 111.494 170.991 84.021 146.522 76.39C121.831 68.6852 95.7658 84.4535 87.8419 109.858C83.6147 123.396 71.7306 132.852 58.9427 132.852C40.047 132.852 27.4971 112.952 33.7365 92.9742C51.7151 35.4079 111.149 5.98231 163.405 22.2851C217.821 39.2652 247.198 98.6229 229.863 154.174C220.278 184.887 202.64 212.731 179.141 234.367C167.297 245.262 179.436 258.135 191.286 247.224C217.073 223.484 236.259 193.132 246.77 159.45C267.275 93.7541 231.625 25.0164 168.681 5.37712ZM58.6439 187.8C95.3789 187.8 128.937 162.473 140.255 126.211C142.694 118.381 139.514 113.349 135.392 112.062C131.306 110.787 125.784 113.124 123.348 120.937C114.327 149.843 87.7136 170.032 58.6287 170.032C44.0506 170.032 30.2484 164.946 18.717 155.324C6.35199 145.002 -4.98893 158.544 7.38454 168.884C22.2568 181.257 39.9787 187.797 58.6349 187.8H58.6439Z" fill="currentColor"></path> </svg> <span>Start for free</span> </a>
336<script> 337 (function() { 338 function initButtonArrows() { 339 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 340 if (button.dataset.btnArrowInit) return; 341 button.dataset.btnArrowInit = 'true'; 342 343 var icon = button.querySelector('.btn-arrow-icon'); 344 if (!icon) return; 345 346 button.addEventListener('mouseenter', function() { 347 icon.classList.remove('slide-out'); 348 icon.classList.add('slide-in'); 349 }); 350 351 button.addEventListener('mouseleave', function() { 352 icon.classList.remove('slide-in'); 353 icon.classList.add('slide-out'); 354 }); 355 }); 356 } 357 358 if (document.readyState === 'loading') { 359 document.addEventListener('DOMContentLoaded', initButtonArrows); 360 } else { 361 initButtonArrows(); 362 } 363 364 document.addEventListener('astro:page-load', initButtonArrows); 365 })(); 366</script>
366 </div> </div> </div> </div> </nav> <!-- Backdrop blur overlay (visible when dropdown is open) --> <div id="navbar-backdrop" class="pointer-events-none fixed inset-0 z-40 opacity-0 backdrop-blur-sm transition-opacity duration-200 bg-white/60" data-astro-cid-voiollt5></div> <main class="w-full"> <section class="page-section" data-variant="light" id="hero" data-astro-cid-dnku4hyr> <div class="section-container" data-astro-cid-dnku4hyr> <!-- Corner decorations --> <!-- Content --> <section class="w-full relative isolate overflow-x-clip" data-astro-cid-eaz7zv6b> <!-- Animated Dot Grid Background --> 367 <div class="hero-dot-grid absolute -z-30 pointer-events-none" aria-hidden="true" data-astro-cid-wlyiyr5g> <canvas id="hero-dot-canvas" width="960" height="880" data-astro-cid-wlyiyr5g></canvas> </div>
367<script>(function(){const fingerprintPath = "M479.105 123.715C508.165 123.715 537.121 127.711 565.171 135.593H565.172C723.388 180.032 810.209 336.775 758.861 484.95C672.839 733.133 441.175 815.165 372.169 834.403H372.168C366.003 836.13 360.107 837 354.642 837C336.377 837 326.758 827.516 324.962 818.309L324.883 817.87C323.209 807.91 329.776 793.276 355.402 786.121C417.687 768.769 627.121 694.667 705.011 469.948C725.42 411.091 720.361 348.893 690.761 294.827C661.139 240.726 610.544 201.314 548.32 183.835C525.75 177.497 502.431 174.283 479.011 174.283C371.227 174.283 272.458 241.933 238.85 338.877C233.287 354.919 218.695 366.846 205.139 366.846C197.37 366.846 192.438 362.809 189.639 359.385C182.575 350.738 180.643 336.461 185.006 323.875C225.841 206.064 346.768 123.715 479.105 123.715ZM478.957 1C521.618 1.00001 564.274 6.90814 605.741 18.5576C716.526 49.6745 807.083 118.96 860.766 213.628C914.723 308.784 924.703 418.105 888.864 521.47C850.909 630.962 781.867 729.724 689.108 807.245L686.913 809.072C674.246 819.571 663.235 821.729 656.295 821.729C645.632 821.729 636.927 816.576 633.413 808.462C628.742 797.678 633.925 784.249 648.096 772.514H648.097C735.016 700.475 799.655 608.478 835.02 506.468C866.145 416.68 857.829 321.486 811.604 238.445C765.548 155.708 687.314 95.0634 591.164 67.4512L588.89 66.8057C553.722 56.9306 517.085 51.9238 479.998 51.9238C310.011 51.9239 160.83 152.525 108.854 302.354C96.7623 337.202 102.92 374.427 125.368 401.906C144.581 425.426 173.675 438.9 205.174 438.9C253.822 438.9 298.979 406.62 315.014 360.395V360.394C338.279 293.254 405.65 246.323 478.859 246.323C494.333 246.323 509.728 248.445 524.608 252.625C566.639 264.424 600.584 291.382 620.213 328.518C639.767 365.513 642.843 408.092 628.859 448.432C570.466 616.91 396.076 734.653 204.729 734.653C180.618 734.653 156.325 732.773 132.521 729.062H132.52C106.527 725.021 96.6245 711.156 97.7158 699.718C98.7049 689.31 109.097 678.338 130.959 678.338C134.503 678.338 138.264 678.642 142.138 679.243C162.762 682.456 183.832 684.085 204.76 684.085H204.761C370.933 684.071 522.658 581.841 574.417 435.154L575.021 433.426C594.797 376.342 564.645 316.848 507.754 300.864H507.753C498.292 298.212 488.494 296.864 478.629 296.864C430.011 296.864 384.88 329.156 368.849 375.396V375.396C345.592 442.527 278.225 489.448 205.022 489.448C155.516 489.448 109.979 468.431 80.0645 431.818C47.034 391.388 37.6623 337.388 55.0059 287.355C113.434 118.797 287.749 1 478.957 1ZM477.126 369.297C479.15 369.297 481.136 369.531 483.041 369.995L483.853 370.208C490.288 372.016 496.057 376.531 499.22 383.507C502.381 390.481 502.979 400.016 498.863 411.912C457.99 529.799 336.787 612.2 204.079 612.2H204.047C137.242 612.195 73.7533 591.267 20.3223 551.662L19.0625 550.723C3.84284 539.273 -2.02901 525.738 2.49023 514.525C5.87123 506.138 14.6726 500.811 25.6582 500.811C35.1161 500.811 45.338 504.677 55.2158 512.099C98.2043 544.388 149.664 561.455 204.021 561.455C312.304 561.455 411.42 493.831 445.02 396.916V396.915C452.117 376.42 466.351 369.297 477.126 369.297Z"; 368const dark = false; 369 370 // Base dimensions - expanded to include full fingerprint with padding 371 const BASE_WIDTH = 960; 372 const BASE_HEIGHT = 880; 373 374 // Offset to center the fingerprint (original was 911x838, path extends to ~925) 375 const OFFSET_X = 20; 376 const OFFSET_Y = 20; 377 378 // Vertical fade configuration - fade to background at bottom 379 const FADE_START = 0.45; // Start fading at 45% down 380 const FADE_END = 0.95; // Fully faded at 95% down 381 382 // Center fade configuration - reduce opacity in center for text readability 383 const CENTER_X = 0.5; // Center of the canvas (normalized) 384 const CENTER_Y = 0.35; // Slightly above center where text sits 385 const CENTER_FADE_RADIUS = 1; // Radius of the fade area 386 const CENTER_MIN_OPACITY = 0; // Minimum opacity multiplier at center 387 388 // Mobile detection 389 const isMobile = window.innerWidth < 768; 390 391 // Configuration - adjusted for mobile performance 392 const CONFIG = { 393 cellSize: isMobile ? 10 : 7, // Larger cells = fewer dots on mobile 394 dotSize: 3, 395 fillRate: isMobile ? 0.7 : 1, // Sparser on mobile 396 animationSpeed: 0.003, 397 minOpacity: 0.01, 398 maxChannel: 220, 399 frameThrottle: isMobile ? 50 : 33, // ~20fps on mobile, ~30fps on desktop 400 }; 401 402 // Gradient anchor points - different for light and dark modes 403 // Light mode: zinc-500 to zinc-300
404 // Dark mode: zinc-600 to zinc-800 (inverted for dark background) 405 const gradientPoints = dark ? [ 406 // Dark mode colors (zinc-600 to zinc-800) 407 // zinc-600: #52525b = RGB(82, 82, 91) 408 // zinc-700: #3f3f46 = RGB(63, 63, 70) 409 // zinc-800: #27272a = RGB(39, 39, 42) 410 { x: 0.0, y: 0.0, color: [82, 82, 91] }, // zinc-600 (top) 411 { x: 1.0, y: 0.0, color: [82, 82, 91] }, // zinc-600 (top) 412 { x: 0.5, y: 0.5, color: [63, 63, 70] }, // zinc-700 (mid) 413 { x: 0.0, y: 1.0, color: [39, 39, 42] }, // zinc-800 (bottom) 414 { x: 1.0, y: 1.0, color: [39, 39, 42] }, // zinc-800 (bottom) 415 ] : [ 416 // Light mode colors (zinc-500 to zinc-300) 417 // zinc-500: #71717a = RGB(113, 113, 122) 418 // zinc-300: #d4d4d8 = RGB(212, 212, 216) 419 { x: 0.0, y: 0.0, color: [113, 113, 122] }, // zinc-500 (top) 420 { x: 1.0, y: 0.0, color: [113, 113, 122] }, // zinc-500 (top) 421 { x: 0.5, y: 0.5, color: [162, 162, 169] }, // mid blend 422 { x: 0.0, y: 1.0, color: [212, 212, 216] }, // zinc-300 (bottom) 423 { x: 1.0, y: 1.0, color: [212, 212, 216] }, // zinc-300 (bottom) 424 ]; 425 426 // Mouse hover color effect configuration 427 const BRAND_COLOR = { r: 76, g: 76, b: 255 }; // #4C4CFF - Snitcher brand color 428 const COLOR_RADIUS = 120; // Radius of the color effect in pixels 429 const COLOR_FALLOFF = 2; // Falloff exponent for smooth blending 430 const MOUSE_LERP = 0.12; // Smoothing factor for color effect position 431 432 // Seeded random for consistency 433 function seededRandom(seed) { 434 const x = Math.sin(seed * 12.9898 + seed * 78.233) * 43758.5453; 435 return x - Math.floor(x); 436 } 437 438 // Calculate blended color 439 function getBlendedColor(normalizedX, normalizedY) { 440 let totalWeight = 0; 441 let r = 0, g = 0, b = 0; 442 443 for (const point of gradientPoints) { 444 const dx = normalizedX - point.x; 445 const dy = normalizedY - point.y; 446 const distance = Math.sqrt(dx * dx + dy * dy); 447 const weight = 1 / Math.pow(distance + 0.12, 3); 448 totalWeight += weight; 449 r += point.color[0] * weight; 450 g += point.color[1] * weight; 451 b += point.color[2] * weight; 452 } 453 454 r = Math.min(Math.round(r / totalWeight), CONFIG.maxChannel); 455 g = Math.min(Math.round(g / totalWeight), CONFIG.maxChannel); 456 b = Math.min(Math.round(b / totalWeight), CONFIG.maxChannel); 457 458 return { r, g, b }; 459 } 460 461 // Store cleanup function for page transitions 462 let cleanupHeroDotGrid = null; 463 464 function initHeroDotGrid() { 465 // Clean up any existing instance first 466 if (cleanupHeroDotGrid) { 467 cleanupHeroDotGrid(); 468 cleanupHeroDotGrid = null; 469 } 470 471 const canvas = document.getElementById('hero-dot-canvas'); 472 if (!canvas) return; 473 const ctx = canvas.getContext('2d', { willReadFrequently: false }); 474 475 // Handle high-DPI/retina displays 476 const dpr = window.devicePixelRatio || 1; 477 478 // Set canvas size accounting for pixel ratio 479 canvas.width = BASE_WIDTH * dpr; 480 canvas.height = BASE_HEIGHT * dpr; 481 482 // Scale context to match 483 ctx.scale(dpr, dpr); 484 485 // Use base dimensions for all calculations 486 const width = BASE_WIDTH; 487 const height = BASE_HEIGHT; 488 489 // Create fingerprint mask at base resolution 490 const maskCanvas = document.createElement('canvas'); 491 maskCanvas.width = width; 492 maskCanvas.height = height; 493 const maskCtx = maskCanvas.getContext('2d'); 494 495 // Draw fingerprint path to mask with offset for padding 496 maskCtx.translate(OFFSET_X, OFFSET_Y); 497 const path = new Path2D(fingerprintPath); 498 maskCtx.fillStyle = 'white'; 499 maskCtx.fill(path); 500 maskCtx.lineWidth = 20; 501 maskCtx.strokeStyle = 'white'; 502 maskCtx.stroke(path); 503 maskCtx.translate(-OFFSET_X, -OFFSET_Y); 504 505 // Get mask data 506 const maskData = maskCtx.getImageData(0, 0, width, height).data; 507 508 // Check if point is inside fingerprint 509 function getMaskValue(x, y) { 510 const px = Math.floor(x); 511 const py = Math.floor(y); 512 if (px < 0 || px >= width || py < 0 || py >= height) return 0; 513 const idx = (py * width + px) * 4; 514 return maskData[idx]; 515 } 516 517 function isInsideFingerprint(x, y) { 518 return getMaskValue(x, y) > 128; 519 } 520 521 // Check if point is near the edge of the fingerprint 522 function getEdgeDistance(x, y, checkRadius) { 523 const inside = isInsideFingerprint(x, y); 524 let minDist = checkRadius; 525 526 // Sample points in a circle to find edge 527 for (let angle = 0; angle < Math.PI * 2; angle += Math.PI / 4) { 528 for (let r = 1; r <= checkRadius; r += 2) {
529 const sx = x + Math.cos(angle) * r; 530 const sy = y + Math.sin(angle) * r; 531 const sampleInside = isInsideFingerprint(sx, sy); 532 if (sampleInside !== inside) { 533 minDist = Math.min(minDist, r); 534 break; 535 } 536 } 537 } 538 return { inside, distToEdge: minDist }; 539 } 540 541 // Generate dots 542 const gridCols = Math.ceil(width / CONFIG.cellSize); 543 const gridRows = Math.ceil(height / CONFIG.cellSize); 544 const dots = []; 545 const SCATTER_RADIUS = 25; // How far to scatter dots from edge 546 547 for (let row = 0; row < gridRows; row++) { 548 for (let col = 0; col < gridCols; col++) { 549 const seed = row * gridCols + col; 550 const random = seededRandom(seed); 551 552 if (random > CONFIG.fillRate) continue; 553 554 const x = col * CONFIG.cellSize; 555 const y = row * CONFIG.cellSize; 556 557 const { inside, distToEdge } = getEdgeDistance(x, y, SCATTER_RADIUS); 558 559 // Determine if dot should be shown based on edge proximity 560 let showDot = false; 561 if (inside) { 562 // Inside the shape - always show unless near edge with random chance 563 if (distToEdge > SCATTER_RADIUS * 0.4) { 564 showDot = true; // Far from edge, always show 565 } else { 566 // Near edge - small random chance to hide (creates scattered inner edge) 567 const hideChance = (1 - distToEdge / (SCATTER_RADIUS * 0.4)) * 0.25; 568 showDot = seededRandom(seed + 7000) > hideChance; 569 } 570 } else { 571 // Outside the shape - show with decreasing probability near edge (more dense) 572 if (distToEdge < SCATTER_RADIUS) { 573 const showChance = Math.pow(1 - distToEdge / SCATTER_RADIUS, 1.5) * 0.75; 574 showDot = seededRandom(seed + 8000) < showChance; 575 } 576 } 577 578 if (!showDot) continue; 579 580 const normalizedX = col / gridCols; 581 const normalizedY = row / gridRows; 582 const color = getBlendedColor(normalizedX, normalizedY); 583 const baseOpacity = 0.5 + seededRandom(seed + 3000) * 0.45; 584 const phase = seededRandom(seed + 4000) * Math.PI * 2; 585 586 // Calculate edge fade - dots near/outside edges are always lighter 587 let edgeFade = 1; 588 if (!inside) { 589 // Outside dots are always very light (20-40% opacity) 590 edgeFade = 0.2 + (1 - distToEdge / SCATTER_RADIUS) * 0.2; 591 } else if (distToEdge < SCATTER_RADIUS * 0.6) { 592 // Inside but near edge - fade based on distance 593 edgeFade = 0.4 + (distToEdge / (SCATTER_RADIUS * 0.6)) * 0.6; 594 } 595 596 // Calculate vertical fade factor (1 at top, 0 at bottom) 597 let verticalFade = 1; 598 if (normalizedY > FADE_START) { 599 verticalFade = 1 - Math.min(1, (normalizedY - FADE_START) / (FADE_END - FADE_START)); 600 // Apply easing for smoother fade 601 verticalFade = verticalFade * verticalFade; 602 } 603 604 // Calculate center fade factor (reduce opacity near center for text readability) 605 const dx = normalizedX - CENTER_X; 606 const dy = normalizedY - CENTER_Y; 607 const distFromCenter = Math.sqrt(dx * dx + dy * dy); 608 let centerFade = 1; 609 if (distFromCenter < CENTER_FADE_RADIUS) { 610 // Smooth falloff from edge to center 611 const t = 1 - (distFromCenter / CENTER_FADE_RADIUS); 612 centerFade = CENTER_MIN_OPACITY + (1 - CENTER_MIN_OPACITY) * (1 - t * t); 613 } 614 615 // Combined fade factor 616 const fadeFactor = verticalFade * centerFade * edgeFade; 617 618 // Individual animation speed variation (0.7x to 1.3x base speed) 619 const speedMult = 0.7 + seededRandom(seed + 5000) * 0.6; 620 621 // Secondary wave phase for more complex movement 622 const phase2 = seededRandom(seed + 6000) * Math.PI * 2; 623 624 dots.push({ 625 x, y, 626 // Current offset from original position (for mouse repulsion) 627 offsetX: 0, 628 offsetY: 0, 629 color, baseOpacity, phase, phase2, speedMult, fadeFactor, seed 630 }); 631 } 632 } 633 634 // Check for reduced motion preference 635 const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 636 637 // Mouse interaction configuration 638 const MOUSE_RADIUS = 80; // Radius of mouse influence 639 const REPULSION_STRENGTH = 50; // How far dots move away 640 const RETURN_SPEED = 0.15; // How fast dots return (0-1, higher = faster) 641 642 // Mouse position tracking (in canvas coordinates) 643 let mouseX = -1000; 644 let mouseY = -1000; 645 let mouseActive = false;
646 647 // Smooth mouse position for color effect (lerped) 648 let smoothMouseX = -1000; 649 let smoothMouseY = -1000; 650 let targetMouseX = -1000; 651 let targetMouseY = -1000; 652 653 // Get canvas bounding rect for coordinate conversion 654 function getCanvasCoords(clientX, clientY) { 655 const rect = canvas.getBoundingClientRect(); 656 const scaleX = width / rect.width; 657 const scaleY = height / rect.height; 658 return { 659 x: (clientX - rect.left) * scaleX, 660 y: (clientY - rect.top) * scaleY 661 }; 662 } 663 664 // Check if coordinates are within canvas bounds (with padding for edge effect) 665 function isNearCanvas(canvasX, canvasY) { 666 const padding = COLOR_RADIUS; 667 return canvasX >= -padding && canvasX <= width + padding && 668 canvasY >= -padding && canvasY <= height + padding; 669 } 670 671 // Track mouse at window level for color effect (works even when canvas is behind other elements) 672 const windowMouseMoveHandler = (e) => { 673 const coords = getCanvasCoords(e.clientX, e.clientY); 674 if (isNearCanvas(coords.x, coords.y)) { 675 targetMouseX = coords.x; 676 targetMouseY = coords.y; 677 } else { 678 targetMouseX = -1000; 679 targetMouseY = -1000; 680 } 681 }; 682 window.addEventListener('mousemove', windowMouseMoveHandler); 683 684 const documentMouseLeaveHandler = () => { 685 targetMouseX = -1000; 686 targetMouseY = -1000; 687 }; 688 document.addEventListener('mouseleave', documentMouseLeaveHandler); 689 690 // Canvas-level mouse tracking for repulsion (needs pointer-events) 691 const canvasMouseMoveHandler = (e) => { 692 const coords = getCanvasCoords(e.clientX, e.clientY); 693 mouseX = coords.x; 694 mouseY = coords.y; 695 mouseActive = true; 696 }; 697 canvas.addEventListener('mousemove', canvasMouseMoveHandler); 698 699 const canvasMouseLeaveHandler = () => { 700 mouseActive = false; 701 }; 702 canvas.addEventListener('mouseleave', canvasMouseLeaveHandler); 703 704 // Touch support for mobile 705 const touchStartHandler = (e) => { 706 const touch = e.touches[0]; 707 const coords = getCanvasCoords(touch.clientX, touch.clientY); 708 if (isNearCanvas(coords.x, coords.y)) { 709 targetMouseX = coords.x; 710 targetMouseY = coords.y; 711 smoothMouseX = targetMouseX; 712 smoothMouseY = targetMouseY; 713 } 714 }; 715 window.addEventListener('touchstart', touchStartHandler, { passive: true }); 716 717 const touchMoveHandler = (e) => { 718 const touch = e.touches[0]; 719 const coords = getCanvasCoords(touch.clientX, touch.clientY); 720 if (isNearCanvas(coords.x, coords.y)) { 721 targetMouseX = coords.x; 722 targetMouseY = coords.y; 723 } else { 724 targetMouseX = -1000; 725 targetMouseY = -1000; 726 } 727 }; 728 window.addEventListener('touchmove', touchMoveHandler, { passive: true }); 729 730 const touchEndHandler = () => { 731 targetMouseX = -1000; 732 targetMouseY = -1000; 733 }; 734 window.addEventListener('touchend', touchEndHandler); 735 736 // Animation loop 737 let animationId; 738 let lastTime = 0; 739 740 function animate(time) { 741 // Throttle framerate for performance (lower on mobile) 742 if (time - lastTime < CONFIG.frameThrottle) { 743 animationId = requestAnimationFrame(animate); 744 return; 745 } 746 lastTime = time; 747 748 // Smoothly interpolate mouse position for color effect 749 smoothMouseX += (targetMouseX - smoothMouseX) * MOUSE_LERP; 750 smoothMouseY += (targetMouseY - smoothMouseY) * MOUSE_LERP; 751 752 ctx.clearRect(0, 0, width, height); 753 754 const halfDot = CONFIG.dotSize / 2; 755 756 for (const dot of dots) { 757 // Calculate mouse repulsion 758 if (!prefersReducedMotion) { 759 const dx = dot.x - mouseX; 760 const dy = dot.y - mouseY; 761 const distance = Math.sqrt(dx * dx + dy * dy); 762 763 if (mouseActive && distance < MOUSE_RADIUS) { 764 // Calculate repulsion force (stronger when closer) 765 const force = (1 - distance / MOUSE_RADIUS) * REPULSION_STRENGTH; 766 const angle = Math.atan2(dy, dx); 767 768 // Target offset based on repulsion 769 const targetOffsetX = Math.cos(angle) * force; 770 const targetOffsetY = Math.sin(angle) * force; 771 772 // Smoothly move toward target offset 773 dot.offsetX += (targetOffsetX - dot.offsetX) * 0.3; 774 dot.offsetY += (targetOffsetY - dot.offsetY) * 0.3; 775 } else { 776 // Return to original position with spring effect 777 dot.offsetX *= (1 - RETURN_SPEED); 778 dot.offsetY *= (1 - RETURN_SPEED); 779 } 780 } 781 782 let opacity; 783 if (prefersReducedMotion) { 784 opacity = dot.baseOpacity; 785 } else { 786 // Primary wave with individual speed 787 const wave1 = Math.sin(time * CONFIG.animationSpeed * dot.speedMult + dot.phase); 788
789 // Secondary wave at different frequency for complexity 790 const wave2 = Math.sin(time * CONFIG.animationSpeed * 0.7 + dot.phase2); 791 792 // Combine waves (primary dominates, secondary adds variation) 793 const combinedWave = wave1 * 0.7 + wave2 * 0.3; 794 795 // Sharpen the wave for more "pop" (power curve) 796 const normalizedWave = (combinedWave + 1) / 2; // 0 to 1 797 const sharpenedWave = Math.pow(normalizedWave, 1.5); 798 799 // Occasional sparkle effect - random bright flash 800 const sparkleChance = Math.sin(time * 0.001 + dot.seed) * 0.5 + 0.5; 801 const sparkle = sparkleChance > 0.97 ? 1.5 : 1; 802 803 const minOp = Math.max(CONFIG.minOpacity, dot.baseOpacity * 0.08); 804 opacity = (minOp + (dot.baseOpacity - minOp) * sharpenedWave) * sparkle; 805 opacity = Math.min(opacity, 1); // Clamp to 1 806 } 807 808 // Apply vertical fade 809 const finalOpacity = opacity * dot.fadeFactor; 810 811 // Calculate color based on distance to mouse (brand color glow effect) 812 const colorDx = dot.x - smoothMouseX; 813 const colorDy = dot.y - smoothMouseY; 814 const colorDistance = Math.sqrt(colorDx * colorDx + colorDy * colorDy); 815 816 let finalR = dot.color.r; 817 let finalG = dot.color.g; 818 let finalB = dot.color.b; 819 let opacityBoost = 1; 820 821 if (colorDistance < COLOR_RADIUS) { 822 // Calculate blend factor with smooth falloff 823 const normalizedDist = colorDistance / COLOR_RADIUS; 824 const blendFactor = Math.pow(1 - normalizedDist, COLOR_FALLOFF); 825 826 // Lerp colors toward brand color 827 finalR = Math.round(dot.color.r + (BRAND_COLOR.r - dot.color.r) * blendFactor); 828 finalG = Math.round(dot.color.g + (BRAND_COLOR.g - dot.color.g) * blendFactor); 829 finalB = Math.round(dot.color.b + (BRAND_COLOR.b - dot.color.b) * blendFactor); 830 831 // Boost opacity slightly for dots near cursor (creates glow effect) 832 opacityBoost = 1 + blendFactor * 0.6; 833 } 834 835 const effectiveOpacity = Math.min(finalOpacity * opacityBoost, 1); 836 837 // Render dot with offset 838 const renderX = dot.x + dot.offsetX; 839 const renderY = dot.y + dot.offsetY; 840 841 ctx.fillStyle = `rgba(${finalR}, ${finalG}, ${finalB}, ${effectiveOpacity})`; 842 ctx.fillRect( 843 renderX - halfDot, 844 renderY - halfDot, 845 CONFIG.dotSize, 846 CONFIG.dotSize 847 ); 848 } 849 850 animationId = requestAnimationFrame(animate); 851 } 852 853 // Only start animation when visible (IntersectionObserver fires immediately on observe) 854 const observer = new IntersectionObserver((entries) => { 855 entries.forEach(entry => { 856 if (entry.isIntersecting) { 857 if (!animationId) { 858 lastTime = 0; // Reset timing 859 animationId = requestAnimationFrame(animate); 860 } 861 } else { 862 if (animationId) { 863 cancelAnimationFrame(animationId); 864 animationId = null; 865 } 866 } 867 }); 868 }, { threshold: 0 }); 869 870 // Start observing - animation will only begin if canvas is visible 871 observer.observe(canvas); 872 873 // Store cleanup function 874 cleanupHeroDotGrid = () => { 875 if (animationId) { 876 cancelAnimationFrame(animationId); 877 animationId = null; 878 } 879 observer.disconnect(); 880 window.removeEventListener('mousemove', windowMouseMoveHandler); 881 document.removeEventListener('mouseleave', documentMouseLeaveHandler); 882 canvas.removeEventListener('mousemove', canvasMouseMoveHandler); 883 canvas.removeEventListener('mouseleave', canvasMouseLeaveHandler); 884 window.removeEventListener('touchstart', touchStartHandler); 885 window.removeEventListener('touchmove', touchMoveHandler); 886 window.removeEventListener('touchend', touchEndHandler); 887 }; 888 } 889 890 // Run on page load 891 if (document.readyState === 'loading') { 892 document.addEventListener('DOMContentLoaded', initHeroDotGrid); 893 } else { 894 initHeroDotGrid(); 895 } 896 897 // Re-run on Astro page transitions 898 document.addEventListener('astro:page-load', initHeroDotGrid); 899 900 // Cleanup on page navigation 901 document.addEventListener('astro:before-swap', () => { 902 if (cleanupHeroDotGrid) { 903 cleanupHeroDotGrid(); 904 cleanupHeroDotGrid = null; 905 } 906 }); 907})();</script>
907 <div class="px-6 md:px-16" data-astro-cid-eaz7zv6b> <div class="max-w-3xl mx-auto" data-astro-cid-eaz7zv6b> <div class="flex flex-col gap-8 items-center w-full relative z-10" data-astro-cid-eaz7zv6b> <!-- Badge --> <a href="/blog/introducing-the-new-snitcher-inbox" class="inline-flex items-center gap-1.5 h-8 px-4 py-3 bg-white border border-[var(--alpha-border)] rounded-full shadow text-sm font-medium hover:bg-zinc-50 transition-colors">New on our blog: ð¥ Snitcher Inbox 2.0<svg width="16" height="16" class="-mr-1.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.1161 5.36612C13.6043 4.87796 14.3957 4.87796 14.8839 5.36612L20.6339 11.1161C20.8683 11.3505 21 11.6685 21 12C21 12.3315 20.8683 12.6494 20.6339 12.8839L14.8839 18.6339C14.3957 19.122 13.6043 19.122 13.1161 18.6339C12.628 18.1457 12.628 17.3543 13.1161 16.8661L16.7322 13.25H4.25C3.55964 13.25 3 12.6903 3 12C3 11.3096 3.55964 10.75 4.25 10.75H16.7322L13.1161 7.13388C12.628 6.64573 12.628 5.85427 13.1161 5.36612Z" fill="currentColor"/></svg> 908</a><style is:global> 909 .mask-logo { 910 mask-image: url('/logo-symbol.svg'); 911 mask-size: contain; 912 mask-repeat: no-repeat; 913 mask-position: center; 914 -webkit-mask-image: url('/logo-symbol.svg'); 915 -webkit-mask-size: contain; 916 -webkit-mask-repeat: no-repeat; 917 -webkit-mask-position: center; 918 } 919 </style> <!-- Heading and Description --> <div class="flex flex-col gap-3 items-center text-center [&_p:not([class*=max-w-])]:max-w-2xl w-full [&_h1]:text-balance" data-astro-cid-eaz7zv6b> <h1> 920Uncover your <span class="pixel-reveal " id="pixel-reveal-nffox9sg9" data-total-chars="6" data-autoplay="true" data-astro-cid-kt72rz56><span class="pixel-reveal-text" data-astro-cid-kt72rz56><span class="pixel-word" data-astro-cid-kt72rz56><span class="pixel-char" data-char="h" data-index="0" data-astro-cid-kt72rz56>h</span><span class="pixel-char" data-char="i" data-index="1" data-astro-cid-kt72rz56>i</span><span class="pixel-char" data-char="d" data-index="2" data-astro-cid-kt72rz56>d</span><span class="pixel-char" data-char="d" data-index="3" data-astro-cid-kt72rz56>d</span><span class="pixel-char" data-char="e" data-index="4" data-astro-cid-kt72rz56>e</span><span class="pixel-char" data-char="n" data-index="5" data-astro-cid-kt72rz56>n</span></span></span><span class="pixel-reveal-decorative" aria-hidden="true" data-astro-cid-kt72rz56><span class="pixel-word" data-astro-cid-kt72rz56><span class="pixel-char" data-char="h" data-index="0" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>h</span></span><span class="pixel-char" data-char="i" data-index="1" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>i</span></span><span class="pixel-char" data-char="d" data-index="2" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>d</span></span><span class="pixel-char" data-char="d" data-index="3" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>d</span></span><span class="pixel-char" data-char="e" data-index="4" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>e</span></span><span class="pixel-char" data-char="n" data-index="5" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>n</span></span></span></span></span>
920<script>(function(){const componentId = "pixel-reveal-nffox9sg9"; 921const decodeCharsStr = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9"; 922const cycles = 11; 923 924 (function() { 925 const container = document.getElementById(componentId); 926 if (!container) return; 927 if (container.hasAttribute('data-initialized')) return; 928 container.setAttribute('data-initialized', 'true'); 929 930 const decorativeElement = container.querySelector('.pixel-reveal-decorative'); 931 if (!decorativeElement) return; 932 933 const isAutoplay = container.getAttribute('data-autoplay') !== 'false'; 934 const decodeChars = decodeCharsStr.split(','); 935 936 // Brand color for pixel effects 937 const BRAND_COLOR = '#4C4CFF'; 938 939 // Animation configuration 940 const SCRAMBLE_INTERVAL = 45; 941 const SCRAMBLE_DURATION = cycles * SCRAMBLE_INTERVAL; 942 const STAGGER_DELAY = 50; 943 const REVEAL_STAGGER = 70; 944 const SPARKLE_CHANCE = 0.3; 945 946 // Pixel dot configuration 947 const DOTS_PER_CHAR = 6; 948 const DOT_SIZE = 3; 949 950 // Track active timeouts/intervals for cleanup on hover mode 951 let activeTimers = []; 952 let activeIntervals = []; 953 954 // Seeded random for consistent results 955 function seededRandom(seed) { 956 const x = Math.sin(seed * 12.9898 + seed * 78.233) * 43758.5453; 957 return x - Math.floor(x); 958 } 959 960 // Create pixel dots for a character 961 function createPixelDots(dotsContainer, charIndex) { 962 dotsContainer.innerHTML = ''; 963 964 for (let i = 0; i < DOTS_PER_CHAR; i++) { 965 const dot = document.createElement('span'); 966 dot.className = 'pixel-dot'; 967 968 // Random position within character bounds 969 const seed = charIndex * 100 + i; 970 const x = seededRandom(seed) * 100; 971 const y = seededRandom(seed + 1000) * 100; 972 973 // Random animation phase for pulsing 974 const phase = seededRandom(seed + 2000) * Math.PI * 2; 975 const speed = 0.5 + seededRandom(seed + 3000) * 0.5; 976 977 dot.style.cssText = ` 978 left: ${x}%; 979 top: ${y}%; 980 width: ${DOT_SIZE}px; 981 height: ${DOT_SIZE}px; 982 --phase: ${phase}; 983 --speed: ${speed}; 984 `; 985 986 dot.dataset.phase = String(phase); 987 dot.dataset.speed = String(speed); 988 989 dotsContainer.appendChild(dot); 990 } 991 } 992 993 // Animate pixel dots with pulsing opacity (like hero dot grid) 994 let dotsAnimationId = null; 995 const allDots = []; 996 997 function animateDots(time) { 998 for (const { dot, phase, speed } of allDots) { 999 // Dual sine wave for complex pulsing (matching hero dot grid) 1000 const wave1 = Math.sin(time * 0.003 * speed + phase); 1001 const wave2 = Math.sin(time * 0.003 * 0.7 + phase * 1.3); 1002 const combinedWave = wave1 * 0.7 + wave2 * 0.3; 1003 1004 // Normalize and sharpen 1005 const normalizedWave = (combinedWave + 1) / 2; 1006 const sharpenedWave = Math.pow(normalizedWave, 1.5); 1007 1008 // Occasional sparkle 1009 const sparkleChance = Math.sin(time * 0.001 + parseFloat(dot.dataset.phase || '0')) * 0.5 + 0.5; 1010 const sparkle = sparkleChance > 0.95 ? 1.5 : 1; 1011 1012 const opacity = Math.min((0.2 + sharpenedWave * 0.8) * sparkle, 1); 1013 dot.style.opacity = String(opacity); 1014 } 1015 1016 dotsAnimationId = requestAnimationFrame(animateDots); 1017 } 1018 1019 function startDotsAnimation() { 1020 if (!dotsAnimationId) { 1021 dotsAnimationId = requestAnimationFrame(animateDots); 1022 } 1023 } 1024 1025 function stopDotsAnimation() { 1026 if (dotsAnimationId) { 1027 cancelAnimationFrame(dotsAnimationId); 1028 dotsAnimationId = null; 1029 } 1030 } 1031 1032 function clearAllTimers() { 1033 activeTimers.forEach(t => clearTimeout(t)); 1034 activeIntervals.forEach(i => clearInterval(i)); 1035 activeTimers = []; 1036 activeIntervals = []; 1037 } 1038 1039 function resetAnimation() { 1040 clearAllTimers(); 1041 stopDotsAnimation(); 1042 allDots.length = 0; 1043 1044 // Reset state attributes 1045 container.removeAttribute('data-animated'); 1046 container.removeAttribute('data-complete'); 1047 1048 // Reset all decorative chars to their original state 1049 const chars = decorativeElement.querySelectorAll('.pixel-char');
1050 chars.forEach((charEl) => { 1051 charEl.classList.remove('scrambling', 'revealed', 'sparkle'); 1052 const currentDisplay = charEl.querySelector('.pixel-char-current'); 1053 const finalChar = charEl.getAttribute('data-char') || ''; 1054 if (currentDisplay) currentDisplay.textContent = finalChar; 1055 const dotsContainer = charEl.querySelector('.pixel-dots'); 1056 if (dotsContainer) dotsContainer.innerHTML = ''; 1057 }); 1058 } 1059 1060 function startPixelAnimation() { 1061 // If already animating in hover mode, reset first 1062 if (!isAutoplay) { 1063 resetAnimation(); 1064 } 1065 1066 const chars = decorativeElement.querySelectorAll('.pixel-char'); 1067 const totalChars = chars.length; 1068 1069 // Set brand color CSS variable 1070 container.style.setProperty('--brand-color', BRAND_COLOR); 1071 1072 // Read computed text color for final state 1073 const rootColor = getComputedStyle(container).color; 1074 container.style.setProperty('--pixel-color', rootColor); 1075 1076 // Mark as animated 1077 container.setAttribute('data-animated', 'true'); 1078 1079 // Initialize pixel dots for each character 1080 chars.forEach((charEl, index) => { 1081 const dotsContainer = charEl.querySelector('.pixel-dots'); 1082 if (dotsContainer) { 1083 createPixelDots(dotsContainer, index); 1084 1085 // Register dots for animation 1086 const dots = dotsContainer.querySelectorAll('.pixel-dot'); 1087 dots.forEach(dot => { 1088 allDots.push({ 1089 dot, 1090 phase: parseFloat(dot.dataset.phase || '0'), 1091 speed: parseFloat(dot.dataset.speed || '1') 1092 }); 1093 }); 1094 } 1095 }); 1096 1097 // Start dots pulsing animation 1098 startDotsAnimation(); 1099 1100 // Process each character 1101 chars.forEach((charEl, index) => { 1102 const currentDisplay = charEl.querySelector('.pixel-char-current'); 1103 const finalChar = charEl.getAttribute('data-char') || ''; 1104 1105 const startDelay = index * STAGGER_DELAY; 1106 const revealTime = startDelay + SCRAMBLE_DURATION + (index * REVEAL_STAGGER); 1107 1108 // Start scrambling after stagger delay 1109 const t = setTimeout(() => { 1110 charEl.classList.add('scrambling'); 1111 1112 // Scramble at intervals with occasional sparkle 1113 let scrambleCount = 0; 1114 const scrambleInterval = setInterval(() => { 1115 const randomChar = decodeChars[Math.floor(Math.random() * decodeChars.length)]; 1116 currentDisplay.textContent = randomChar; 1117 1118 // Random sparkle during scramble 1119 if (Math.random() < SPARKLE_CHANCE) { 1120 charEl.classList.add('sparkle'); 1121 const st = setTimeout(() => charEl.classList.remove('sparkle'), 150); 1122 activeTimers.push(st); 1123 } 1124 1125 scrambleCount++; 1126 }, SCRAMBLE_INTERVAL); 1127 activeIntervals.push(scrambleInterval); 1128 1129 // Stop scrambling and reveal final character 1130 const rt = setTimeout(() => { 1131 clearInterval(scrambleInterval); 1132 charEl.classList.remove('scrambling'); 1133 charEl.classList.add('revealed'); 1134 currentDisplay.textContent = finalChar; 1135 }, revealTime - startDelay); 1136 activeTimers.push(rt); 1137 1138 }, startDelay); 1139 activeTimers.push(t); 1140 }); 1141 1142 // Calculate total animation duration 1143 const lastCharIndex = totalChars - 1; 1144 const totalDuration = (lastCharIndex * STAGGER_DELAY) + SCRAMBLE_DURATION + (lastCharIndex * REVEAL_STAGGER) + 400; 1145 1146 // Mark complete and cleanup 1147 const completeTimer = setTimeout(() => { 1148 container.setAttribute('data-complete', 'true'); 1149 stopDotsAnimation(); 1150 }, totalDuration); 1151 activeTimers.push(completeTimer); 1152 } 1153 1154 if (isAutoplay) { 1155 // Autoplay mode: trigger on scroll into view (original behavior) 1156 if (container.hasAttribute('data-animated')) return; 1157 1158 const observer = new IntersectionObserver( 1159 (entries) => {
1160 entries.forEach((entry) => { 1161 if (entry.isIntersecting) { 1162 startPixelAnimation(); 1163 observer.disconnect(); 1164 } 1165 }); 1166 }, 1167 { threshold: 0.1, rootMargin: '0px' } 1168 ); 1169 observer.observe(container); 1170 } else { 1171 // Hover mode: trigger on mouseenter, reset on mouseleave 1172 container.addEventListener('mouseenter', () => { 1173 startPixelAnimation(); 1174 }); 1175 1176 container.addEventListener('mouseleave', () => { 1177 resetAnimation(); 1178 }); 1179 } 1180 })(); 1181})();</script>
1181 website visitors 1182</h1> <p class="text-lg"> 1183Snitcher turns <span class="pixel-reveal " id="pixel-reveal-9loegdlsh" data-total-chars="9" data-autoplay="true" data-astro-cid-kt72rz56><span class="pixel-reveal-text" data-astro-cid-kt72rz56><span class="pixel-word" data-astro-cid-kt72rz56><span class="pixel-char" data-char="a" data-index="0" data-astro-cid-kt72rz56>a</span><span class="pixel-char" data-char="n" data-index="1" data-astro-cid-kt72rz56>n</span><span class="pixel-char" data-char="o" data-index="2" data-astro-cid-kt72rz56>o</span><span class="pixel-char" data-char="n" data-index="3" data-astro-cid-kt72rz56>n</span><span class="pixel-char" data-char="y" data-index="4" data-astro-cid-kt72rz56>y</span><span class="pixel-char" data-char="m" data-index="5" data-astro-cid-kt72rz56>m</span><span class="pixel-char" data-char="o" data-index="6" data-astro-cid-kt72rz56>o</span><span class="pixel-char" data-char="u" data-index="7" data-astro-cid-kt72rz56>u</span><span class="pixel-char" data-char="s" data-index="8" data-astro-cid-kt72rz56>s</span></span></span><span class="pixel-reveal-decorative" aria-hidden="true" data-astro-cid-kt72rz56><span class="pixel-word" data-astro-cid-kt72rz56><span class="pixel-char" data-char="a" data-index="0" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>a</span></span><span class="pixel-char" data-char="n" data-index="1" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>n</span></span><span class="pixel-char" data-char="o" data-index="2" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>o</span></span><span class="pixel-char" data-char="n" data-index="3" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>n</span></span><span class="pixel-char" data-char="y" data-index="4" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>y</span></span><span class="pixel-char" data-char="m" data-index="5" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>m</span></span><span class="pixel-char" data-char="o" data-index="6" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>o</span></span><span class="pixel-char" data-char="u" data-index="7" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>u</span></span><span class="pixel-char" data-char="s" data-index="8" data-astro-cid-kt72rz56><span class="pixel-dots" data-astro-cid-kt72rz56></span><span class="pixel-char-current" data-astro-cid-kt72rz56>s</span></span></span></span></span>
1183<script>(function(){const componentId = "pixel-reveal-9loegdlsh"; 1184const decodeCharsStr = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9"; 1185const cycles = 11; 1186 1187 (function() { 1188 const container = document.getElementById(componentId); 1189 if (!container) return; 1190 if (container.hasAttribute('data-initialized')) return; 1191 container.setAttribute('data-initialized', 'true'); 1192 1193 const decorativeElement = container.querySelector('.pixel-reveal-decorative'); 1194 if (!decorativeElement) return; 1195 1196 const isAutoplay = container.getAttribute('data-autoplay') !== 'false'; 1197 const decodeChars = decodeCharsStr.split(','); 1198 1199 // Brand color for pixel effects 1200 const BRAND_COLOR = '#4C4CFF'; 1201 1202 // Animation configuration 1203 const SCRAMBLE_INTERVAL = 45; 1204 const SCRAMBLE_DURATION = cycles * SCRAMBLE_INTERVAL; 1205 const STAGGER_DELAY = 50; 1206 const REVEAL_STAGGER = 70; 1207 const SPARKLE_CHANCE = 0.3; 1208 1209 // Pixel dot configuration 1210 const DOTS_PER_CHAR = 6; 1211 const DOT_SIZE = 3; 1212 1213 // Track active timeouts/intervals for cleanup on hover mode 1214 let activeTimers = []; 1215 let activeIntervals = []; 1216 1217 // Seeded random for consistent results 1218 function seededRandom(seed) { 1219 const x = Math.sin(seed * 12.9898 + seed * 78.233) * 43758.5453; 1220 return x - Math.floor(x); 1221 } 1222 1223 // Create pixel dots for a character 1224 function createPixelDots(dotsContainer, charIndex) { 1225 dotsContainer.innerHTML = ''; 1226 1227 for (let i = 0; i < DOTS_PER_CHAR; i++) { 1228 const dot = document.createElement('span'); 1229 dot.className = 'pixel-dot'; 1230 1231 // Random position within character bounds 1232 const seed = charIndex * 100 + i; 1233 const x = seededRandom(seed) * 100; 1234 const y = seededRandom(seed + 1000) * 100; 1235 1236 // Random animation phase for pulsing 1237 const phase = seededRandom(seed + 2000) * Math.PI * 2; 1238 const speed = 0.5 + seededRandom(seed + 3000) * 0.5; 1239 1240 dot.style.cssText = ` 1241 left: ${x}%; 1242 top: ${y}%; 1243 width: ${DOT_SIZE}px; 1244 height: ${DOT_SIZE}px; 1245 --phase: ${phase}; 1246 --speed: ${speed}; 1247 `; 1248 1249 dot.dataset.phase = String(phase); 1250 dot.dataset.speed = String(speed); 1251 1252 dotsContainer.appendChild(dot); 1253 } 1254 } 1255 1256 // Animate pixel dots with pulsing opacity (like hero dot grid) 1257 let dotsAnimationId = null; 1258 const allDots = []; 1259 1260 function animateDots(time) { 1261 for (const { dot, phase, speed } of allDots) { 1262 // Dual sine wave for complex pulsing (matching hero dot grid) 1263 const wave1 = Math.sin(time * 0.003 * speed + phase); 1264 const wave2 = Math.sin(time * 0.003 * 0.7 + phase * 1.3); 1265 const combinedWave = wave1 * 0.7 + wave2 * 0.3; 1266 1267 // Normalize and sharpen 1268 const normalizedWave = (combinedWave + 1) / 2; 1269 const sharpenedWave = Math.pow(normalizedWave, 1.5); 1270 1271 // Occasional sparkle 1272 const sparkleChance = Math.sin(time * 0.001 + parseFloat(dot.dataset.phase || '0')) * 0.5 + 0.5; 1273 const sparkle = sparkleChance > 0.95 ? 1.5 : 1; 1274 1275 const opacity = Math.min((0.2 + sharpenedWave * 0.8) * sparkle, 1); 1276 dot.style.opacity = String(opacity); 1277 } 1278 1279 dotsAnimationId = requestAnimationFrame(animateDots); 1280 } 1281 1282 function startDotsAnimation() { 1283 if (!dotsAnimationId) { 1284 dotsAnimationId = requestAnimationFrame(animateDots); 1285 } 1286 } 1287 1288 function stopDotsAnimation() { 1289 if (dotsAnimationId) { 1290 cancelAnimationFrame(dotsAnimationId); 1291 dotsAnimationId = null; 1292 } 1293 } 1294 1295 function clearAllTimers() { 1296 activeTimers.forEach(t => clearTimeout(t)); 1297 activeIntervals.forEach(i => clearInterval(i)); 1298 activeTimers = []; 1299 activeIntervals = []; 1300 } 1301 1302 function resetAnimation() { 1303 clearAllTimers(); 1304 stopDotsAnimation(); 1305 allDots.length = 0; 1306 1307 // Reset state attributes 1308 container.removeAttribute('data-animated'); 1309 container.removeAttribute('data-complete'); 1310 1311 // Reset all decorative chars to their original state 1312 const chars = decorativeElement.querySelectorAll('.pixel-char');
1313 chars.forEach((charEl) => { 1314 charEl.classList.remove('scrambling', 'revealed', 'sparkle'); 1315 const currentDisplay = charEl.querySelector('.pixel-char-current'); 1316 const finalChar = charEl.getAttribute('data-char') || ''; 1317 if (currentDisplay) currentDisplay.textContent = finalChar; 1318 const dotsContainer = charEl.querySelector('.pixel-dots'); 1319 if (dotsContainer) dotsContainer.innerHTML = ''; 1320 }); 1321 } 1322 1323 function startPixelAnimation() { 1324 // If already animating in hover mode, reset first 1325 if (!isAutoplay) { 1326 resetAnimation(); 1327 } 1328 1329 const chars = decorativeElement.querySelectorAll('.pixel-char'); 1330 const totalChars = chars.length; 1331 1332 // Set brand color CSS variable 1333 container.style.setProperty('--brand-color', BRAND_COLOR); 1334 1335 // Read computed text color for final state 1336 const rootColor = getComputedStyle(container).color; 1337 container.style.setProperty('--pixel-color', rootColor); 1338 1339 // Mark as animated 1340 container.setAttribute('data-animated', 'true'); 1341 1342 // Initialize pixel dots for each character 1343 chars.forEach((charEl, index) => { 1344 const dotsContainer = charEl.querySelector('.pixel-dots'); 1345 if (dotsContainer) { 1346 createPixelDots(dotsContainer, index); 1347 1348 // Register dots for animation 1349 const dots = dotsContainer.querySelectorAll('.pixel-dot'); 1350 dots.forEach(dot => { 1351 allDots.push({ 1352 dot, 1353 phase: parseFloat(dot.dataset.phase || '0'), 1354 speed: parseFloat(dot.dataset.speed || '1') 1355 }); 1356 }); 1357 } 1358 }); 1359 1360 // Start dots pulsing animation 1361 startDotsAnimation(); 1362 1363 // Process each character 1364 chars.forEach((charEl, index) => { 1365 const currentDisplay = charEl.querySelector('.pixel-char-current'); 1366 const finalChar = charEl.getAttribute('data-char') || ''; 1367 1368 const startDelay = index * STAGGER_DELAY; 1369 const revealTime = startDelay + SCRAMBLE_DURATION + (index * REVEAL_STAGGER); 1370 1371 // Start scrambling after stagger delay 1372 const t = setTimeout(() => { 1373 charEl.classList.add('scrambling'); 1374 1375 // Scramble at intervals with occasional sparkle 1376 let scrambleCount = 0; 1377 const scrambleInterval = setInterval(() => { 1378 const randomChar = decodeChars[Math.floor(Math.random() * decodeChars.length)]; 1379 currentDisplay.textContent = randomChar; 1380 1381 // Random sparkle during scramble 1382 if (Math.random() < SPARKLE_CHANCE) { 1383 charEl.classList.add('sparkle'); 1384 const st = setTimeout(() => charEl.classList.remove('sparkle'), 150); 1385 activeTimers.push(st); 1386 } 1387 1388 scrambleCount++; 1389 }, SCRAMBLE_INTERVAL); 1390 activeIntervals.push(scrambleInterval); 1391 1392 // Stop scrambling and reveal final character 1393 const rt = setTimeout(() => { 1394 clearInterval(scrambleInterval); 1395 charEl.classList.remove('scrambling'); 1396 charEl.classList.add('revealed'); 1397 currentDisplay.textContent = finalChar; 1398 }, revealTime - startDelay); 1399 activeTimers.push(rt); 1400 1401 }, startDelay); 1402 activeTimers.push(t); 1403 }); 1404 1405 // Calculate total animation duration 1406 const lastCharIndex = totalChars - 1; 1407 const totalDuration = (lastCharIndex * STAGGER_DELAY) + SCRAMBLE_DURATION + (lastCharIndex * REVEAL_STAGGER) + 400; 1408 1409 // Mark complete and cleanup 1410 const completeTimer = setTimeout(() => { 1411 container.setAttribute('data-complete', 'true'); 1412 stopDotsAnimation(); 1413 }, totalDuration); 1414 activeTimers.push(completeTimer); 1415 } 1416 1417 if (isAutoplay) { 1418 // Autoplay mode: trigger on scroll into view (original behavior) 1419 if (container.hasAttribute('data-animated')) return; 1420 1421 const observer = new IntersectionObserver( 1422 (entries) => {
1423 entries.forEach((entry) => { 1424 if (entry.isIntersecting) { 1425 startPixelAnimation(); 1426 observer.disconnect(); 1427 } 1428 }); 1429 }, 1430 { threshold: 0.1, rootMargin: '0px' } 1431 ); 1432 observer.observe(container); 1433 } else { 1434 // Hover mode: trigger on mouseenter, reset on mouseleave 1435 container.addEventListener('mouseenter', () => { 1436 startPixelAnimation(); 1437 }); 1438 1439 container.addEventListener('mouseleave', () => { 1440 resetAnimation(); 1441 }); 1442 } 1443 })(); 1444})();</script>
1444 intent into predictable revenue. Identify in-market companies, see what they want and trigger action across your stack. 1445</p> </div> <!-- Actions --> <div class="flex flex-col gap-8 items-center" data-astro-cid-eaz7zv6b> <div class="flex flex-col sm:flex-row gap-2 items-stretch sm:items-start w-full sm:w-auto"> <a href="/demo" class="inline-flex items-center justify-center gap-2 pl-1 pr-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-white ring-1 ring-[var(--alpha-border)] !text-zinc-700 hover:bg-zinc-50 w-full sm:w-auto justify-center"><span class="flex items-center -space-x-1.5 isolate"> <span class="w-8 h-8 bg-jade-500 rounded-full border-2 border-white flex items-center justify-center z-30"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" class="w-5 h-5"> <path fill-rule="evenodd" clip-rule="evenodd" d="M9.0017 14C9.0017 10.134 12.1357 6.99999 16.0017 6.99999C19.8677 6.99999 23.0017 10.134 23.0017 14C23.0017 17.866 19.8677 21 16.0017 21C12.1357 21 9.0017 17.866 9.0017 14ZM16.0017 11C16.554 11 17.0017 11.4477 17.0017 12V13.5858L18.3755 14.9595C18.766 15.3501 18.766 15.9832 18.3755 16.3738C17.9849 16.7643 17.3518 16.7643 16.9613 16.3738L15.2946 14.7071C15.1071 14.5196 15.0017 14.2652 15.0017 14V12C15.0017 11.4477 15.4494 11 16.0017 11Z" fill="white"></path> <path d="M1.59659 9.34793C1.21298 7.17236 2.66566 5.09772 4.84123 4.71411L11.7349 3.49857C13.2569 3.23019 14.7296 3.86059 15.6083 5.00852C13.1074 5.11659 10.871 6.24533 9.30541 7.98866L1.59659 9.34793Z" fill="white"></path> <path d="M7.80399 10.2843L1.94389 11.3175L2.63848 15.2568C3.0221 17.4324 5.09673 18.885 7.27231 18.5014L8.12348 18.3513C7.40983 17.0617 7.00356 15.5783 7.00356 14C7.00356 12.675 7.28987 11.417 7.80399 10.2843Z" fill="white"></path> </svg> </span> <img src="/_astro/leon.c0wmlxiL_Z2wsuca.webp" alt="" class="w-8 h-8 border-2 border-white rounded-full object-cover z-20" loading="lazy" decoding="auto" width="600" height="600"><img src="/_astro/dean.7I-5NM-k_Z114K5E.webp" alt="" class="w-8 h-8 border-2 border-white rounded-full object-cover z-10" loading="lazy" decoding="auto" width="600" height="600"> </span><span>Talk to sales</span></a>
1445<script> 1446 (function() { 1447 function initButtonArrows() { 1448 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 1449 if (button.dataset.btnArrowInit) return; 1450 button.dataset.btnArrowInit = 'true'; 1451 1452 var icon = button.querySelector('.btn-arrow-icon'); 1453 if (!icon) return; 1454 1455 button.addEventListener('mouseenter', function() { 1456 icon.classList.remove('slide-out'); 1457 icon.classList.add('slide-in'); 1458 }); 1459 1460 button.addEventListener('mouseleave', function() { 1461 icon.classList.remove('slide-in'); 1462 icon.classList.add('slide-out'); 1463 }); 1464 }); 1465 } 1466 1467 if (document.readyState === 'loading') { 1468 document.addEventListener('DOMContentLoaded', initButtonArrows); 1469 } else { 1470 initButtonArrows(); 1471 } 1472 1473 document.addEventListener('astro:page-load', initButtonArrows); 1474 })(); 1475</script>
1475 <a href="https://app.snitcher.com/register" class="inline-flex items-center justify-center gap-2 px-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-primary-500 !text-white hover:bg-primary-600 !pl-3 w-full sm:w-auto justify-center"> <svg width="20" height="20" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0" aria-hidden="true"> <path d="M211.265 148.37C187.598 224.219 123.858 249.286 104.886 255.161C89.5631 259.93 84.2516 243.014 99.6384 238.244C116.524 233.017 173.258 210.709 194.355 143.094C205.691 106.783 186.837 68.5577 152.325 57.79C117.074 46.7923 80.2423 68.8045 69.2412 104.054C67.5848 109.361 63.152 113.363 58.9333 113.363C52.8997 113.363 50.3043 105.281 52.3341 98.7783C66.1181 54.6057 112.724 26.8804 157.601 40.8841C202.129 54.7776 225.257 103.517 211.265 148.37ZM168.681 5.37712C102.536 -15.2639 36.1026 25.9353 16.8302 87.6986C7.05086 119.034 28.0846 150.559 58.9017 150.559C79.3873 150.559 98.2403 135.991 104.747 115.134C109.855 98.7636 126.062 88.5621 141.246 93.2947C156.164 97.95 164.06 115.32 158.854 132.015C145.032 176.301 103.905 207.232 58.8369 207.236H58.8306C53.1805 207.236 47.4893 206.748 41.9193 205.783C26.0231 203.042 23.0907 220.506 38.9072 223.237C45.4654 224.373 52.1665 224.95 58.822 224.95C111.569 224.95 159.656 188.902 175.758 137.291C183.809 111.494 170.991 84.021 146.522 76.39C121.831 68.6852 95.7658 84.4535 87.8419 109.858C83.6147 123.396 71.7306 132.852 58.9427 132.852C40.047 132.852 27.4971 112.952 33.7365 92.9742C51.7151 35.4079 111.149 5.98231 163.405 22.2851C217.821 39.2652 247.198 98.6229 229.863 154.174C220.278 184.887 202.64 212.731 179.141 234.367C167.297 245.262 179.436 258.135 191.286 247.224C217.073 223.484 236.259 193.132 246.77 159.45C267.275 93.7541 231.625 25.0164 168.681 5.37712ZM58.6439 187.8C95.3789 187.8 128.937 162.473 140.255 126.211C142.694 118.381 139.514 113.349 135.392 112.062C131.306 110.787 125.784 113.124 123.348 120.937C114.327 149.843 87.7136 170.032 58.6287 170.032C44.0506 170.032 30.2484 164.946 18.717 155.324C6.35199 145.002 -4.98893 158.544 7.38454 168.884C22.2568 181.257 39.9787 187.797 58.6349 187.8H58.6439Z" fill="currentColor"></path> </svg> <span>Start for free</span> </a>
1475<script> 1476 (function() { 1477 function initButtonArrows() { 1478 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 1479 if (button.dataset.btnArrowInit) return; 1480 button.dataset.btnArrowInit = 'true'; 1481 1482 var icon = button.querySelector('.btn-arrow-icon'); 1483 if (!icon) return; 1484 1485 button.addEventListener('mouseenter', function() { 1486 icon.classList.remove('slide-out'); 1487 icon.classList.add('slide-in'); 1488 }); 1489 1490 button.addEventListener('mouseleave', function() { 1491 icon.classList.remove('slide-in'); 1492 icon.classList.add('slide-out'); 1493 }); 1494 }); 1495 } 1496 1497 if (document.readyState === 'loading') { 1498 document.addEventListener('DOMContentLoaded', initButtonArrows); 1499 } else { 1500 initButtonArrows(); 1501 } 1502 1503 document.addEventListener('astro:page-load', initButtonArrows); 1504 })(); 1505</script>
1505 </div> <!-- Features --> <div class="flex flex-wrap gap-x-4 gap-y-1.5 items-start justify-center" data-astro-cid-eaz7zv6b> <div class="flex gap-1.5 items-center justify-center" data-astro-cid-eaz7zv6b> <svg width="16" height="16" class="text-zinc-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M2 6.75293C2 5.23415 3.23122 4.00293 4.75 4.00293H19.248C20.7633 4.00293 21.9945 5.22932 21.9957 6.74653C21.9963 7.51306 21.9962 8.27968 21.9961 9.04593L21.9961 17.2461C21.9961 18.7649 20.7649 19.9961 19.2461 19.9961L4.75 19.9961C3.23122 19.9961 2 18.7649 2 17.2461V10.5H21.9961V9H2V6.75293Z" fill="currentColor"/></svg> 1506 <p class="eyebrow text-xs text-zinc-500" data-astro-cid-eaz7zv6b>No credit card required</p> </div> <div class="flex gap-1.5 items-center justify-center" hidden data-eu-trust="nl" data-astro-cid-eaz7zv6b> <span class="text-sm leading-none" aria-hidden="true" data-astro-cid-eaz7zv6b>ð³ð±</span> <p class="eyebrow text-xs text-zinc-500" data-astro-cid-eaz7zv6b>Built in the Netherlands</p> </div> <div class="flex gap-1.5 items-center justify-center" hidden data-eu-trust="eu" data-astro-cid-eaz7zv6b> <span class="text-sm leading-none" aria-hidden="true" data-astro-cid-eaz7zv6b>ðªðº</span> <p class="eyebrow text-xs text-zinc-500" data-astro-cid-eaz7zv6b>Built in Europe</p> </div> <div class="flex gap-1.5 items-center justify-center" data-astro-cid-eaz7zv6b> <svg width="16" height="16" class="text-zinc-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2ZM15.667 8.12695C15.3228 7.89661 14.8574 7.98889 14.627 8.33301L10.4482 14.5723L8.28125 12.3945C7.98911 12.1009 7.51434 12.0995 7.2207 12.3916C6.92733 12.6838 6.9267 13.1586 7.21875 13.4521L10.0312 16.2793C10.1897 16.4384 10.4112 16.5177 10.6348 16.4961C10.8584 16.4744 11.0605 16.3537 11.1855 16.167L15.873 9.16699C16.1034 8.82283 16.0111 8.35739 15.667 8.12695Z" fill="currentColor"/></svg> 1507 <p class="eyebrow text-xs text-zinc-500" data-eu-text="GDPR-native" data-astro-cid-eaz7zv6b>GDPR compliant</p> </div> </div> </div> </div> </div> </div> </section> </div> </section> <section class="page-section" data-variant="light" data-astro-cid-dnku4hyr> <div class="section-container" data-astro-cid-dnku4hyr> <!-- Corner decorations --> <!-- Content --> <div class="w-full grid justify-center grid-cols-[repeat(3,minmax(0,160px))] min-[768px]:grid-cols-[repeat(4,minmax(0,160px))] min-[992px]:grid-cols-[repeat(8,minmax(0,160px))] [--lh-scale:0.8] min-[768px]:[--lh-scale:0.95] min-[992px]:[--lh-scale:0.8] min-[1280px]:[--lh-scale:1]" data-regionalize="" data-logo-sizes="{"/logos/main/tacto.svg":[27,0],"/logos/main/entain.svg":[22,0],"/logos/main/clay.svg":[24,0],"/logos/main/unify.svg":[27,0],"/logos/main/lemlist.svg":[23,0],"/logos/main/plain.svg":[20,0],"/logos/main/folk.svg":[24,0],"/logos/main/hockeystack.svg":[20,0],"/logos/main/nats.svg":[20,0],"/logos/main/chatbase.svg":[22,0],"/logos/main/rudderstack.svg":[20,0],"/logos/main/alma.svg":[21,0],"/logos/main/aikido.svg":[22,0],"/logos/main/peopleai.svg":[22,0],"/logos/main/bekaert.svg":[23,0],"/logos/main/factorsai.svg":[23,0],"/logos/main/syncfusion.svg":[23,0],"/logos/main/coram.svg":[22,0],"/logos/main/monaco.svg":[14,0],"/logos/main/moonpig.svg":[22,0],"/logos/main/talentdesk.svg":[21,0],"/logos/main/hicx.svg":[28,0],"/logos/main/hived.svg":[20,0],"/logos/main/sokin.svg":[20,0],"/logos/regional/cambridge.svg":[22,0],"/logos/main/movingimage.svg":[22,0],"/logos/main/klar.svg":[27,0],"/logos/main/usersnap.svg":[21,0],"/logos/main/dartfish.svg":[20,0],"/logos/main/soda.svg":[21,0],"/logos/main/sortlist.svg":[22,0],"/logos/main/waylay.svg":[22,0],"/logos/main/bizzy.svg":[24,0],"/logos/main/mapiq.svg":[22,0],"/logos/regional/studytube.svg":[16,0],"/logos/regional/hydraloop.svg":[16,0],"/logos/regional/contentoo.svg":[24,2],"/logos/regional/seenons.svg":[23,0],"/logos/main/rillion.svg":[22,0],"/logos/regional/atlar.svg":[21,0],"/logos/main/dixa.svg":[27,0],"/logos/regional/onomondo.svg":[16,0],"/logos/main/kindly.svg":[23,0],"/logos/main/modjo.svg":[23,0],"/logos/main/hyperline.svg":[24,0],"/logos/main/landbot.svg":[21,0],"/logos/main/euvic.svg":[20,0],"/logos/regional/jshamilton.svg":[22,0],"/logos/regional/trask.svg":[22,0],"/logos/main/adacta.svg":[21,0],"/logos/main/sidlee.svg":[23,0],"/logos/main/aviso.svg":[24,0],"/logos/main/csl.svg":[28,0],"/logos/main/gadget.svg":[23,0],"/logos/regional/samsaraeco.svg":[18,0],"/logos/regional/tecala.svg":[23,0],"/logos/regional/endua.png":[24,0],"/logos/regional/endace.svg":[24,0]}"><div data-logo-cell="0" data-logo-name="tacto"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/tacto.svg" alt="Tacto" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:27px"></div></div></div><div data-logo-cell="1" data-logo-name="entain"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/entain.svg" alt="Entain" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:22px"></div></div></div><div data-logo-cell="2" data-logo-name="clay"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/clay.svg" alt="Clay" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:24px"></div></div></div><div data-logo-cell="3" data-logo-name="unify"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/unify.svg" alt="Unify" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:27px"></div></div></div><div data-logo-cell="4" data-logo-name="lemlist"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/lemlist.svg" alt="Lemlist" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:23px"></div></div></div><div data-logo-cell="5" data-logo-name="plain"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/plain.svg" alt="Plain" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:20px"></div></div></div><div data-logo-cell="6" data-logo-name="folk"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/folk.svg" alt="Folk" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:24px"></div></div></div><div data-logo-cell="7" data-logo-name="hockeystack"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/hockeystack.svg" alt="HockeyStack" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:20px"></div></div></div><div data-logo-cell="8" data-logo-name="nats"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/nats.svg" alt="NATS" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:20px"></div></div></div><div data-logo-cell="9" data-logo-name="chatbase"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/chatbase.svg" alt="Chatbase" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:22px"></div></div></div><div data-logo-cell="10" data-logo-name="rudderstack"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/rudderstack.svg" alt="RudderStack" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:20px"></div></div></div><div data-logo-cell="11" data-logo-name="alma"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/alma.svg" alt="Alma" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:21px"></div></div></div><div data-logo-cell="12" data-logo-name="aikido"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/aikido.svg" alt="Aikido" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:22px"></div></div></div><div data-logo-cell="13" data-logo-name="peopleai"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/peopleai.svg" alt="People.ai" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:22px"></div></div></div><div data-logo-cell="14" data-logo-name="bekaert"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/bekaert.svg" alt="Bekaert" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:23px"></div></div></div><div class="hidden min-[768px]:block" data-logo-cell="15" data-logo-name="factorsai"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/factorsai.svg" alt="Factors.ai" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:23px"></div></div></div><div class="hidden" data-logo-cell="16" data-logo-name="syncfusion"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/syncfusion.svg" alt="Syncfusion" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:23px"></div></div></div><div class="hidden" data-logo-cell="17" data-logo-name="coram"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/coram.svg" alt="Coram" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:22px"></div></div></div><div class="hidden" data-logo-cell="18" data-logo-name="monaco"><div class="flex flex-col items-center justify-center gap-1 px-3 py-3 sm:px-5 sm:py-5 min-[992px]:px-2"><div class="flex items-center justify-center min-h-[2.75rem] sm:min-h-[3rem] w-full"><img src="/logos/main/monaco.svg" alt="Monaco" class="h-[calc(var(--lh)*var(--lh-scale,1))] w-auto max-w-full object-contain" loading="lazy" decoding="auto" style="--lh:14px"></div></div></div></div> <div class="px-6 md:px-16"> <div class="max-w-7xl mx-auto "> <div class="mt-4 flex justify-center"> <a href="https://www.g2.com/products/snitcher/reviews" target="_blank" rel="noopener noreferrer" class="flex gap-3 items-center justify-center hover:opacity-80 transition-opacity"> <!-- G2 Logo and Stars --> <div class="flex gap-1.5 items-center h-5"> <!-- G2 Logo --> <img src="/g2-logo-large.svg" alt="G2" class="w-5 h-5 shrink-0" loading="lazy" decoding="auto"> <!-- Stars --> <img src="/g2-stars.svg" alt="5 stars" class="w-20 h-3.5 shrink-0" loading="lazy" decoding="auto"> </div> <div class="flex gap-2 items-center h-5"> <span class="font-semibold text-sm leading-none">4.8/5</span> <span class="text-sm leading-none text-zinc-400">200+ reviews</span> </div> </a> </div> </div> </div> </div> </section> <section class="page-section bg-zinc-50" data-variant="light" id="carousel" data-astro-cid-dnku4hyr> <div class="section-container bg-white" data-astro-cid-dnku4hyr> <!-- Corner decorations --> <!-- Content --> <h2 class="mb-8 md:mb-12"> 1508The system that powers 1509<br> <span class="relative inline-block " data-astro-cid-drt2y2q3> <span class="bg-gradient-to-b from-primary-500 to-primary-600 bg-clip-text text-transparent"> every </span> <svg class="hidden md:block absolute left-0.5 top-12 w-[100px] h-2.5 underline-animated" viewB
1509ox="0 0 87 11" preserveAspectRatio="none" fill="none" xmlns="http://www.w3.org/2000/svg" data-astro-cid-drt2y2q3> <path class="underline-path" d="M2.00049 8.11929C31.0005 -0.380738 61.0005 1.52391 85.0005 4.61931" stroke="url(#paint0_linear_4906_4005)" stroke-width="4" stroke-linecap="round" data-astro-cid-drt2y2q3></path> <defs data-astro-cid-drt2y2q3> <linearGradient id="paint0_linear_4906_4005" x1="43.5005" y1="2.00006" x2="43.5005" y2="8.11929" gradientUnits="userSpaceOnUse" data-astro-cid-drt2y2q3> <stop stop-color="#4C4CFF" data-astro-cid-drt2y2q3></stop> <stop offset="1" stop-color="#3E3EE6" data-astro-cid-drt2y2q3></stop> </linearGradient> </defs> </svg> </span> <span> revenue moment</span> </h2> <section class="relative" id="usecase-carousel-section" data-auto-cycle="false" data-astro-cid-bjcxd7r3><div class="flex flex-col lg:flex-row lg:gap-10" data-astro-cid-bjcxd7r3><div class="w-full lg:w-1/3 flex flex-col gap-2" id="carousel-container" data-items="[{"id":"sellers","title":"Sellers","iconName":"money-hand","heading":"Pipeline that moves itself","features":[{"title":"Act on real intent","description":"See which companies are visiting, what they care about, and who's behind each account so reps can strike when buyers are ready."},{"title":"Work smarter, not colder","description":"Spend time on deals that will close, not ones that might. Snitcher feeds verified contacts and live intent straight into your CRM."}],"buttonText":"Explore sales solutions","image":"/_astro/hero-sales.B__UDoft_Z2dssqk.webp","link":"/solutions/sales"},{"id":"marketers","title":"Marketers","iconName":"megaphone","heading":"Turn visitors into customers","features":[{"title":"Know your audience","description":"Identify which companies are researching your solutions and understand their buying journey with real-time intent signals and company insights."},{"title":"Personalize at scale","description":"Create targeted campaigns based on actual visitor behavior. Deliver the right message to the right account at the perfect moment."}],"buttonText":"Explore marketing solutions","image":"/_astro/hero-marketing.CZjVIeuJ_8GKop.webp","link":"/solutions/marketing"},{"id":"revops","title":"RevOps","iconName":"chain-link-4","heading":"Revenue operations that scale","features":[{"title":"Unified revenue data","description":"Connect marketing, sales, and customer success with a single source of truth. Track accounts from first visit to closed deal."},{"title":"Automate workflows","description":"Streamline operations with automated lead routing, account scoring, and CRM enrichment. Reduce manual work and increase efficiency."}],"buttonText":"Explore RevOps solutions","image":"/_astro/hero-revops.BTdwb5GX_Z2dJVus.webp","link":"/solutions/revops"},{"id":"agencies","title":"Agencies","iconName":"growth","heading":"Deliver results that matter","features":[{"title":"Prove your impact","description":"Show clients exactly which campaigns drive real business outcomes. Track visitor-to-customer journeys across all touchpoints."},{"title":"Scale client success","description":"
1509Manage multiple accounts efficiently with automated reporting and insights. Focus on strategy while Snitcher handles the data."}],"buttonText":"Explore agency solutions","image":"/_astro/hero-agency.C2ETV-hX_Z2mQBW2.webp","link":"/solutions/agency"}]" data-astro-cid-bjcxd7r3><div class="bg-zinc-50 overflow-hidden rounded-2xl flex flex-col gap-4 items-start px-6 py-5 cursor-pointer transition-colors duration-200" data-item-id="sellers" data-item-index="0" data-active> <div class="flex items-center justify-between gap-2 w-full"> <div class="flex gap-2 items-center"> <svg width="24" height="24" class="carousel-icon shrink-0 transition-colors text-primary-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M14.5634 13.5799C14.6 13.2593 14.4292 12.9316 14.1078 12.9024C14.102 12.9019 14.0961 12.9014 14.0903 12.9009L9.19669 12.5131C8.65686 12.4704 8.11351 12.5323 7.5996 12.6952L3.69783 13.932C3.28233 14.0637 3 14.4494 3 14.8852V20.0199C3 20.5721 3.44772 21.0199 4 21.0199H4.83831L4.85056 21.0237C4.95989 21.0574 5.11685 21.1047 5.31199 21.1604C5.70161 21.2716 6.24688 21.4174 6.87145 21.5561C8.09069 21.8267 9.72522 22.0966 11.0994 21.9661C12.5697 21.8264 14.3876 21.1358 15.958 20.4236C17.5608 19.6966 19.0337 18.8864 19.8515 18.4189C20.5815 18.0016 21 17.2562 21 16.472C21 14.9261 19.557 14.5558 18 15L15.5 15.75C14.5 17 13.9507 17.3157 12.3751 17.6528L11.1171 17.922C10.7369 18.0033 10.3614 17.7659 10.2718 17.3875C10.1795 16.9975 10.426 16.6078 10.8179 16.5239L12.0458 16.2612C13.4015 15.9711 14.4132 14.8936 14.5634 13.5799Z" fill="currentColor"/><path d="M18 7.5C18 9.433 16.433 11 14.5 11C12.567 11 11 9.433 11 7.5C11 5.567 12.567 4 14.5 4C16.433 4 18 5.567 18 7.5Z" fill="currentColor"/><path d="M12.0731 3.12743C10.5384 3.98106 9.5 5.61927 9.5 7.5C9.5 8.01995 9.57937 8.52136 9.72664 8.99278C9.65171 8.99757 9.57614 9 9.5 9C7.567 9 6 7.433 6 5.5C6 3.567 7.567 2 9.5 2C10.5175 2 11.4336 2.4342 12.0731 3.12743Z" fill="currentColor"/></svg> 1510 <p class="eyebrow text-sm text-primary-500"> Sellers </p> </div> </div> <div class="carousel-content flex flex-col gap-4 items-start"> <div class="carousel-inline-image lg:hidden"> <img src="/_astro/hero-sales.B__UDoft_Z2dssqk.webp" alt="Sellers" class="w-full rounded-lg" loading="lazy" decoding="auto" width="1928" height="1236"> </div> <div class="flex flex-col gap-1"> <p class="text-base font-semibold text-zinc-900"> Act on real intent </p> <p> See which companies are visiting, what they care about, and who's behind each account so reps can strike when buyers are ready. </p> </div><div class="flex flex-col gap-1"> <p class="text-base font-semibold text-zinc-900"> Work smarter, not colder </p> <p> Spend time on deals that will close, not ones that might. Snitcher feeds verified contacts and live intent straight into your CRM. </p> </div> <a href="/solutions/sales" class="inline-flex items-center justify-center gap-2 font-semibold text-base transition-colors group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 !text-primary-500 hover:!text-primary-600 btn-with-arrow"> 1511Learn more 1512<span class="btn-arrow-wrap"><svg width="20" height="20" class="btn-arrow-icon !text-primary-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.1161 5.36612C13.6043 4.87796 14.3957 4.87796 14.8839 5.36612L20.6339 11.1161C20.8683 11.3505 21 11.6685 21 12C21 12.3315 20.8683 12.6494 20.6339 12.8839L14.8839 18.6339C14.3957 19.122 13.6043 19.122 13.1161 18.6339C12.628 18.1457 12.628 17.3543 13.1161 16.8661L16.7322 13.25H4.25C3.55964 13.25 3 12.6903 3 12C3 11.3096 3.55964 10.75 4.25 10.75H16.7322L13.1161 7.13388C12.628 6.64573 12.628 5.85427 13.1161 5.36612Z" fill="currentColor"/></svg> 1513</span></a>
1513<script> 1514 (function() { 1515 function initButtonArrows() { 1516 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 1517 if (button.dataset.btnArrowInit) return; 1518 button.dataset.btnArrowInit = 'true'; 1519 1520 var icon = button.querySelector('.btn-arrow-icon'); 1521 if (!icon) return; 1522 1523 button.addEventListener('mouseenter', function() { 1524 icon.classList.remove('slide-out'); 1525 icon.classList.add('slide-in'); 1526 }); 1527 1528 button.addEventListener('mouseleave', function() { 1529 icon.classList.remove('slide-in'); 1530 icon.classList.add('slide-out'); 1531 }); 1532 }); 1533 } 1534 1535 if (document.readyState === 'loading') { 1536 document.addEventListener('DOMContentLoaded', initButtonArrows); 1537 } else { 1538 initButtonArrows(); 1539 } 1540 1541 document.addEventListener('astro:page-load', initButtonArrows); 1542 })(); 1543</script>
1543 </div> </div> <div class="bg-zinc-50 overflow-hidden rounded-2xl flex flex-col gap-4 items-start px-6 py-5 cursor-pointer transition-colors duration-200 group hover:bg-zinc-100" data-item-id="marketers" data-item-index="1"> <div class="flex items-center justify-between gap-2 w-full"> <div class="flex gap-2 items-center"> <svg width="24" height="24" class="carousel-icon shrink-0 transition-colors group-hover:text-primary-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.4348 2.83302C17.2037 2.28685 18.9961 3.60929 18.9961 5.46062V7.32497C20.7078 7.67242 21.9961 9.18574 21.9961 11C21.9961 12.8142 20.7078 14.3275 18.9961 14.6749V16.5393C18.9961 18.3906 17.2037 19.7131 15.4348 19.1669L13.2817 18.5021C12.7667 19.9564 11.3792 21 9.74609 21C7.67503 21 5.99609 19.321 5.99609 17.25V16.2526L3.93481 15.6162C2.78222 15.2603 1.99609 14.1949 1.99609 12.9886V9.01131C1.99609 7.80504 2.78222 6.73958 3.93481 6.38371L6.51034 5.5885C6.5212 5.58487 6.53218 5.58148 6.54326 5.57833L15.4348 2.83302ZM7.49609 16.7158V17.25C7.49609 18.4926 8.50345 19.5 9.74609 19.5C10.7025 19.5 11.5212 18.9029 11.8465 18.059L7.49609 16.7158ZM20.4961 11C20.4961 11.9796 19.87 12.813 18.9961 13.1219V8.87798C19.87 9.18686 20.4961 10.0203 20.4961 11ZM5.99829 7.31647V14.6834L4.37733 14.183C3.85342 14.0212 3.49609 13.5369 3.49609 12.9886V9.01131C3.49609 8.46301 3.85342 7.97871 4.37733 7.81695L5.99829 7.31647Z" fill="currentColor"/></svg> 1544 <p class="eyebrow text-sm group-hover:text-primary-500"> Marketers </p> </div> </div> </div> <div class="bg-zinc-50 overflow-hidden rounded-2xl flex flex-col gap-4 items-start px-6 py-5 cursor-pointer transition-colors duration-200 group hover:bg-zinc-100" data-item-id="revops" data-item-index="2"> <div class="flex items-center justify-between gap-2 w-full"> <div class="flex gap-2 items-center"> <svg width="24" height="24" class="carousel-icon shrink-0 transition-colors group-hover:text-primary-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M6.64125 9.29847C8.49624 7.44348 11.5038 7.44348 13.3588 9.29847L13.7019 9.64161C14.4775 10.4172 14.9295 11.3963 15.0562 12.4071C15.1076 12.8181 14.8162 13.1931 14.4052 13.2445C13.9942 13.296 13.6193 13.0046 13.5678 12.5936C13.4811 11.9019 13.1729 11.2339 12.6413 10.7023L12.2981 10.3591C11.0289 9.08993 8.97111 9.08992 7.70191 10.3591L4.35876 13.7023C3.08956 14.9715 3.08956 17.0293 4.35876 18.2985L4.70191 18.6416C5.97111 19.9108 8.02888 19.9108 9.29809 18.6416L9.46965 18.4701C9.76253 18.1772 10.2374 18.1771 10.5303 18.47C10.8232 18.7629 10.8232 19.2378 10.5303 19.5307L10.3588 19.7023C8.50379 21.5572 5.49624 21.5573 3.64125 19.7023L3.2981 19.3591C1.44311 17.5041 1.44311 14.4966 3.2981 12.6416L6.64125 9.29847Z" fill="currentColor"/><path fill-rule="evenodd" clip-rule="evenodd" d="M13.6412 5.29847C15.4962 3.44348 18.5037 3.44348 20.3587 5.29847L20.7019 5.64161C22.5568 7.4966 22.5568 10.5041 20.7019 12.3591L17.3587 15.7023C15.5037 17.5573 12.4962 17.5573 10.6412 15.7023L10.298 15.3591C9.52244 14.5835 9.07043 13.6044 8.9438 12.5936C8.89232 12.1826 9.18376 11.8077 9.59476 11.7562C10.0058 11.7047 10.3807 11.9961 10.4322 12.4071C10.5188 13.0988 10.8271 13.7668 11.3587 14.2985L11.7019 14.6416C12.9711 15.9108 15.0288 15.9108 16.298 14.6416L19.6412 11.2985C20.9104 10.0293 20.9104 7.97148 19.6412 6.70228L19.298 6.35913C18.0288 5.08993 15.9711 5.08993 14.7019 6.35913L14.5304 6.53063C14.2375 6.82356 13.7627 6.82362 13.4697 6.53077C13.1768 6.23791 13.1767 5.76304 13.4696 5.47011L13.6412 5.29847Z" fill="currentColor"/></svg> 1545 <p class="eyebrow text-sm group-hover:text-primary-500"> RevOps </p> </div> </div> </div> <div class="bg-zinc-50 overflow-hidden rounded-2xl flex flex-col gap-4 items-start px-6 py-5 cursor-pointer transition-colors duration-200 group hover:bg-zinc-100" data-item-id="agencies" data-item-index="3"> <div class="flex items-center justify-between gap-2 w-full"> <div class="flex gap-2 items-center"> <svg width="24" height="24" class="carousel-icon shrink-0 transition-colors group-hover:text-primary-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M3.75 3C3.33579 3 3 3.33579 3 3.75V5C3 9.28021 6.46979 12.75 10.75 12.75H11.25V20.25C11.25 20.6642 11.5858 21 12 21C12.4142 21 12.75 20.6642 12.75 20.25V16H13.25C17.5302 16 21 12.5302 21 8.25V6.75C21 6.33579 20.6642 6 20.25 6H19C16.3562 6 14.0216 7.32382 12.6229 9.34475C11.9618 5.73541 8.80036 3 5 3H3.75Z" fill="currentColor"/></svg> 1546 <p class="eyebrow text-sm group-hover:text-primary-500"> Agencies </p> </div> </div> </div> </div><div class="hidden lg:block lg:w-2/3 relative overflow-hidden rounded-xl" id="carousel-visual-container" data-first-item-id="sellers" data-astro-cid-bjcxd7r3><div class="carousel-visual absolute inset-0" data-visual-id="sellers" style="opacity: 1; visibility: visible;" data-astro-cid-bjcxd7r3><img src="/_astro/hero-sales.B__UDoft_Z2dssqk.webp" alt="Sellers" class="w-full h-auto rounded-xl" loading="lazy" decoding="auto" data-astro-cid-bjcxd7r3 width="1928" height="1236"></div><div class="carousel-visual absolute inset-0" data-visual-id="marketers" style="opacity: 0; visibility: hidden;" data-astro-cid-bjcxd7r3><img src="/_astro/hero-marketing.CZjVIeuJ_8GKop.webp" alt="Marketers" class="w-full h-auto rounded-xl" loading="lazy" decoding="auto" data-astro-cid-bjcxd7r3 width="1928" height="1236"></div><div class="carousel-visual absolute inset-0" data-visual-id="revops" style="opacity: 0; visibility: hidden;" data-astro-cid-bjcxd7r3><img src="/_astro/hero-revops.BTdwb5GX_Z2dJVus.webp" alt="RevOps" class="w-full h-auto rounded-xl" loading="lazy" decoding="auto" data-astro-cid-bjcxd7r3 width="1928" height="1236"></div><div class="carousel-visual absolute inset-0" data-visual-id="agencies" style="opacity: 0; visibility: hidden;" data-astro-cid-bjcxd7r3><img src="/_astro/hero-agency.C2ETV-hX_Z2mQBW2.webp" alt="Agencies" class="w-full h-auto rounded-xl" loading="lazy" decoding="auto" data-astro-cid-bjcxd7r3 width="1928" height="1236"></div></div></div></section> </div> </section> <section class="page-section" data-variant="light" id="features" data-astro-cid-dnku4hyr> <div class="section-container" data-astro-cid-dnku4hyr> <!-- Corner decorations --> <!-- Content --> <div class="text-center mb-16"> <h2 class="mb-4 max-w-3xl text-balance mx-auto"> 1547Own every stage from anonymous visit to closed deal 1548 </h2> <p class="text-lg text-pretty max-w-2xl mx-auto"> Snitcher connects the entire journey so your teams identify the right accounts, act at the right time and prove what's actually driving revenue. </p> </div> <div class="grid grid-cols-1 lg:grid-cols-2 gap-6"> <!-- Card 1: Identify --> <a class="bg-white border border-zinc-200 shadow overflow-hidden rounded-2xl feature-card p-0 overflow-hidden h-full flex flex-col transition-shadow duration-200 group/card hover:shadow-md cursor-pointer" href="/identify" data-astro-cid-rq7a7mhf> <div class="relative aspect-[4/3] shrink-0 overflow-hidden bg-gradient-to-b from-zinc-100 to-white" data-astro-cid-rq7a7mhf> <!-- Hover gradient overlay (behind visual content) --> <div class="absolute inset-0 opacity-0 group-hover/card:opacity-100 transition-opacity duration-300 z-0 bg-gradient-to-b from-primary-50 to-white" data-astro-cid-rq7a7mhf></div> <div class="absolute inset-0 z-[1] transition-opacity duration-300 group-hover/card:opacity-90" data-astro-cid-rq7a7mhf> <div class="relative w-full h-full overflow-hidden absolute inset-0" data-astro-cid-kijovlsi> <!-- Company cards container with marquee animation --> <div class="absolute inset-0 flex items-center overflow-hidden" data-astro-cid-kijovlsi> <div class="-rotate-2 -ml-20" data-astro-cid-kijovlsi> <div class="marquee-track flex items-start gap-4" data-animate-on-hover style="--card-set-width: 816px" data-astro-cid-kijovlsi> <div class="w-64 shrink-0 bg-white p-3 relative overflow-hidden" style="border-radius: 12px; box-shadow: 0 0 0 1px var(--alpha-border), 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);" data-astro-cid-kijovlsi> <div class="flex items-start gap-3" data-astro-cid-kijovlsi> <img src="/_astro/avatar-perplexity.BLxgyAM2_Z17gBhI.webp" alt="" class="w-8 h-8 rounded-md object-cover bg-zinc-100 shrink-0" loading="lazy" decoding="auto" data-astro-cid-kijovlsi width="128" height="128"> <div class="flex-1 min-w-0" data-astro-cid-kijovlsi> <p class="text-[13px] font-semibold text-zinc-900 truncate leading-5 pr-14" data-astro-cid-kijovlsi>Perplexity AI</p> <span class="text-sm text-primary-500 truncate block leading-5" data-astro-cid-kijovlsi>https://perplexity.ai</span> </div> </div> <p class="text-xs text-zinc-900 leading-5" data-astro-cid-kijovlsi>
1548A SF based startup founded in 2022 that's building an AI-powered "answer engine" which gives you direct, conversational responses to your queriesâwith linked sources.</p> <div class="flex flex-col gap-2" data-astro-cid-kijovlsi> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> 201-500 employees </span> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> Artificial intelligence </span> </div> </div><div class="w-64 shrink-0 bg-white p-3 relative overflow-hidden" style="border-radius: 12px; box-shadow: 0 0 0 1px var(--alpha-border), 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);" data-astro-cid-kijovlsi> <div class="absolute top-3 right-3 flex items-center gap-2 px-2 py-0.5 rounded-full border border-lava-500/20" style="background: linear-gradient(112deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.6) 100%), var(--color-lava-50);" data-astro-cid-kijovlsi> <span class="w-2 h-2 rounded-full bg-lava-500 shrink-0" data-astro-cid-kijovlsi></span> <span class="text-xs font-semibold text-lava-500 whitespace-nowrap" data-astro-cid-kijovlsi>Live</span> </div> <div class="flex items-start gap-3" data-astro-cid-kijovlsi> <img src="/_astro/avatar-incident.IBx6Q6pe_Z1euug6.webp" alt="" class="w-8 h-8 rounded-md object-cover bg-zinc-100 shrink-0" loading="lazy" decoding="auto" data-astro-cid-kijovlsi width="128" height="128"> <div class="flex-1 min-w-0" data-astro-cid-kijovlsi> <p class="text-[13px] font-semibold text-zinc-900 truncate leading-5 pr-14" data-astro-cid-kijovlsi>Incident.io</p> <span class="text-sm text-primary-500 truncate block leading-5" data-astro-cid-kijovlsi>https://incident.io</span> </div> </div> <p class="text-xs text-zinc-900 leading-5" data-astro-cid-kijovlsi>incident.io centralizes communication, automates workflows, and turns chaos into clarity â making incident response smoother, faster, and more collaborative across the board.</p> <div class="flex flex-col gap-2" data-astro-cid-kijovlsi> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> 101-250 employees </span> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> Information technology </span> </div> </div><div class="w-64 shrink-0 bg-white p-3 relative overflow-hidden" style="border-radius: 12px; box-shadow: 0 0 0 1px var(--alpha-border), 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);" data-astro-cid-kijovlsi> <div class="flex items-start gap-3" data-astro-cid-kijovlsi> <img src="/_astro/avatar-loom.C_V0-JKh_1oT88P.webp" alt="" class="w-8 h-8 rounded-md object-cover bg-zinc-100 shrink-0" loading="lazy" decoding="auto" data-astro-cid-kijovlsi width="128" height="128"> <div class="flex-1 min-w-0" data-astro-cid-kijovlsi> <p class="text-[13px] font-semibold text-zinc-900 truncate leading-5 pr-14" data-astro-cid-kijovlsi>Loom</p> <span class="text-sm text-primary-500 truncate block leading-5" data-astro-cid-kijovlsi>https://loom.com</span> </div> </div> <p class="text-xs text-zinc-900 leading-5" data-astro-cid-kijovlsi>Loom, Inc. is a work-communication platform that enables teams to record, share and edit video messages (including screen + camera) for asynchronous collaboration.</p> <div class="flex flex-col gap-2" data-astro-cid-kijovlsi> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> 51-200 employees </span> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> Productivity </span> </div> </div><div class="w-64 shrink-0 bg-white p-3 relative overflow-hidden" style="border-radius: 12px; box-shadow: 0 0 0 1px var(--alpha-border), 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);" data-astro-cid-kijovlsi> <div class="flex items-start gap-3" data-astro-cid-kijovlsi> <img src="/_astro/avatar-perplexity.BLxgyAM2_Z17gBhI.webp" alt="" class="w-8 h-8 rounded-md object-cover bg-zinc-100 shrink-0" loading="lazy" decoding="auto" data-astro-cid-kijovlsi width="128" height="128"> <div class="flex-1 min-w-0" data-astro-cid-kijovlsi> <p class="text-[13px] font-semibold text-zinc-900 truncate leading-5 pr-14" data-astro-cid-kijovlsi>Perplexity AI</p> <span class="text-sm text-primary-500 truncate block leading-5" data-astro-cid-kijovlsi>https://perplexity.ai</span> </div> </div> <p class="text-xs text-zinc-900 leading-5" data-astro-cid-kijovlsi>
1548A SF based startup founded in 2022 that's building an AI-powered "answer engine" which gives you direct, conversational responses to your queriesâwith linked sources.</p> <div class="flex flex-col gap-2" data-astro-cid-kijovlsi> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> 201-500 employees </span> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> Artificial intelligence </span> </div> </div><div class="w-64 shrink-0 bg-white p-3 relative overflow-hidden" style="border-radius: 12px; box-shadow: 0 0 0 1px var(--alpha-border), 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);" data-astro-cid-kijovlsi> <div class="absolute top-3 right-3 flex items-center gap-2 px-2 py-0.5 rounded-full border border-lava-500/20" style="background: linear-gradient(112deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.6) 100%), var(--color-lava-50);" data-astro-cid-kijovlsi> <span class="w-2 h-2 rounded-full bg-lava-500 shrink-0" data-astro-cid-kijovlsi></span> <span class="text-xs font-semibold text-lava-500 whitespace-nowrap" data-astro-cid-kijovlsi>Live</span> </div> <div class="flex items-start gap-3" data-astro-cid-kijovlsi> <img src="/_astro/avatar-incident.IBx6Q6pe_Z1euug6.webp" alt="" class="w-8 h-8 rounded-md object-cover bg-zinc-100 shrink-0" loading="lazy" decoding="auto" data-astro-cid-kijovlsi width="128" height="128"> <div class="flex-1 min-w-0" data-astro-cid-kijovlsi> <p class="text-[13px] font-semibold text-zinc-900 truncate leading-5 pr-14" data-astro-cid-kijovlsi>Incident.io</p> <span class="text-sm text-primary-500 truncate block leading-5" data-astro-cid-kijovlsi>https://incident.io</span> </div> </div> <p class="text-xs text-zinc-900 leading-5" data-astro-cid-kijovlsi>incident.io centralizes communication, automates workflows, and turns chaos into clarity â making incident response smoother, faster, and more collaborative across the board.</p> <div class="flex flex-col gap-2" data-astro-cid-kijovlsi> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> 101-250 employees </span> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> Information technology </span> </div> </div><div class="w-64 shrink-0 bg-white p-3 relative overflow-hidden" style="border-radius: 12px; box-shadow: 0 0 0 1px var(--alpha-border), 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);" data-astro-cid-kijovlsi> <div class="flex items-start gap-3" data-astro-cid-kijovlsi> <img src="/_astro/avatar-loom.C_V0-JKh_1oT88P.webp" alt="" class="w-8 h-8 rounded-md object-cover bg-zinc-100 shrink-0" loading="lazy" decoding="auto" data-astro-cid-kijovlsi width="128" height="128"> <div class="flex-1 min-w-0" data-astro-cid-kijovlsi> <p class="text-[13px] font-semibold text-zinc-900 truncate leading-5 pr-14" data-astro-cid-kijovlsi>Loom</p> <span class="text-sm text-primary-500 truncate block leading-5" data-astro-cid-kijovlsi>https://loom.com</span> </div> </div> <p class="text-xs text-zinc-900 leading-5" data-astro-cid-kijovlsi>Loom, Inc. is a work-communication platform that enables teams to record, share and edit video messages (including screen + camera) for asynchronous collaboration.</p> <div class="flex flex-col gap-2" data-astro-cid-kijovlsi> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> 51-200 employees </span> <span class="inline-flex w-fit items-center px-2 py-0.5 rounded-lg bg-zinc-100 text-xs font-medium text-zinc-600 leading-5" data-astro-cid-kijovlsi> Productivity </span> </div> </div> </div> </div> </div> <!-- Bottom fade overlay --> <div class="absolute bottom-0 left-0 right-0 h-32 bg-gradient-to-t from-white to-transparent pointer-events-none z-10" data-astro-cid-kijovlsi></div> </div> </div> </div> <div class="flex gap-4 p-4 md:p-6 flex-1" data-astro-cid-rq7a7mhf> <!-- Left: Icon, Title, Description --> <div class="flex flex-col gap-4 flex-1" data-astro-cid-rq7a7mhf> <div class="flex items-center gap-2" data-astro-cid-rq7a7mhf> <svg width="24" height="24" class="shrink-0 text-primary-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.75 3C4.23122 3 3 4.23122 3 5.75V18.25C3 19.7688 4.23122 21 5.75 21H13.5833C13.568 20.9851 13.5528 20.9701 13.5377 20.955C11.4874 18.9047 11.4874 15.5806 13.5377 13.5303C15.5879 11.4801 18.9121 11.4801 20.9623 13.5303C20.975 13.543 20.9875 13.5557 21 13.5684V5.75C21 4.23122 19.7688 3 18.25 3H5.75ZM10.9896 7.15224C11.321 7.40077 11.3881 7.87087 11.1396 8.20224L9.26797 10.6978C9.02914 11.0162 8.58314 11.0926 8.25194 10.8718L7.12694 10.1218C6.7823 9.89203 6.68917 9.42637 6.91893 9.08173C7.1487 8.73708 7.61435 8.64395 7.95899 8.87372L8.49366 9.23016L9.9396 7.30224C10.1881 6.97087 10.6582 6.90371 10.9896 7.15224ZM13.058 9C13.058 8.58579 13.3937 8.25 13.808 8.25H16.308C16.7222 8.25 17.058 8.58579 17.058 9C17.058 9.41421 16.7222 9.75 16.308 9.75H13.808C13.3937 9.75 13.058 9.41421 13.058 9ZM10.9896 13.1534C11.321 13.4019 11.3881 13.872 11.1396 14.2034L9.26797 16.6989C9.02914 17.0173 8.58314 17.0937 8.25194 16.8729L7.12694 16.1229C6.7823 15.8932 6.68917 15.4275 6.91893 15.0829C7.14869 14.7382 7.61435 14.6451 7.95899 14.8748L8.49366 15.2313L9.9396 13.3034C10.1881 12.972 10.6582 12.9048 10.9896 13.1534Z" fill="currentColor"/><path fill-rule="evenodd" clip-rule="evenodd" d="M18.841 15.6517C17.9623 14.773 16.5377 14.773 15.659 15.6517C14.7803 16.5303 14.7803 17.955 15.659 18.8336C16.5377 19.7123 17.9623 19.7123 18.841 18.8336C19.7197 17.955 19.7197 16.5303 18.841 15.6517ZM14.5983 14.591C16.0628 13.1265 18.4372 13.1265 19.9016 14.591C21.1845 15.8738 21.3436 17.8549 20.3789 19.3109L21.7803 20.7123C22.0732 21.0052 22.0732 21.4801 21.7803 21.773C21.4874 22.0659 21.0126 22.0659 20.7197 21.773L19.3183 20.3716C17.8623 21.3362 15.8812 21.1771 14.5983 19.8943C13.1339 18.4298 13.1339 16.0555 14.5983 14.591Z" fill="currentColor"/></svg> 1549 <span class="eyebrow text-sm text-primary-500" data-astro-cid-rq7a7mhf>Identify</span> </div> <h4 data-astro-cid-rq7a7mhf>Find the revenue hiding in your traffic</h4> <p data-astro-cid-rq7a7mhf>Snitcher shows which companies are on your site, what caught their eye and how often they come back.</p> </div> <!-- Right: Arrow button aligned to bottom --> <div class="flex items-end shrink-0" data-astro-cid-rq7a7mhf> <span aria-label="Explore feature" data-arrow-direction="right" class="arrow-btn inline-flex items-center justify-center border border-zinc-200 bg-white text-zinc-700 shadow overflow-hidden font-semibold text-sm transition-colors duration-200 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 hover:bg-primary-500 hover:border-primary-500 hover:text-white w-8 h-8 md:w-10 md:h-10 rounded-full pointer-events-none group-hover/card:bg-primary-500 group-hover/card:border-primary-500 group-hover/card:text-white"><span class="arrow-btn-icon-wrap"> <svg width="16" height="16" class="arrow-btn-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.1161 5.36612C13.6043 4.87796 14.3957 4.87796 14.8839 5.36612L20.6339 11.1161C20.8683 11.3505 21 11.6685 21 12C21 12.3315 20.8683 12.6494 20.6339 12.8839L14.8839 18.6339C14.3957 19.122 13.6043 19.122 13.1161 18.6339C12.628 18.1457 12.628 17.3543 13.1161 16.8661L16.7322 13.25H4.25C3.55964 13.25 3 12.6903 3 12C3 11.3096 3.55964 10.75 4.25 10.75H16.7322L13.1161 7.13388C12.628 6.64573 12.628 5.85427 13.1161 5.36612Z" fill="currentColor"/></svg> 1550 </span> </span>
1550<script> 1551 (function() { 1552 function initArrowButtons() { 1553 document.querySelectorAll('.arrow-btn').forEach(function(button) { 1554 // Skip if already initialized 1555 if (button.dataset.arrowInit) return; 1556 button.dataset.arrowInit = 'true'; 1557 1558 var icon = button.querySelector('.arrow-btn-icon'); 1559 if (!icon) return; 1560 1561 var dir = button.dataset.arrowDirection || 'right'; 1562 var slideIn = 'slide-in-' + dir; 1563 var slideOut = 'slide-out-' + dir; 1564 1565 button.addEventListener('mouseenter', function() { 1566 icon.classList.remove(slideOut, 'slide-out'); 1567 icon.classList.add(slideIn); 1568 }); 1569 1570 button.addEventListener('mouseleave', function() { 1571 icon.classList.remove(slideIn, 'slide-in'); 1572 icon.classList.add(slideOut); 1573 }); 1574 }); 1575 } 1576 1577 // Initialize on DOM ready 1578 if (document.readyState === 'loading') { 1579 document.addEventListener('DOMContentLoaded', initArrowButtons); 1580 } else { 1581 initArrowButtons(); 1582 } 1583 1584 // Re-initialize on Astro page transitions 1585 document.addEventListener('astro:page-load', initArrowButtons); 1586 })(); 1587</script>
1587 </div> </div> </a>
1587<script> 1588 (function() { 1589 function initFeatureCards() { 1590 document.querySelectorAll('.feature-card[href]').forEach(function(card) { 1591 if (card.dataset.featureCardInit) return; 1592 card.dataset.featureCardInit = 'true'; 1593 1594 var arrowBtn = card.querySelector('.arrow-btn'); 1595 if (!arrowBtn) return; 1596 1597 var icon = arrowBtn.querySelector('.arrow-btn-icon'); 1598 if (!icon) return; 1599 1600 card.addEventListener('mouseenter', function() { 1601 icon.classList.remove('slide-out'); 1602 icon.classList.add('slide-in'); 1603 // Play any visual animations inside this card 1604 card.querySelectorAll('[data-animate-on-hover]').forEach(function(el) { 1605 el.style.animationPlayState = 'running'; 1606 }); 1607 }); 1608 1609 card.addEventListener('mouseleave', function() { 1610 icon.classList.remove('slide-in'); 1611 icon.classList.add('slide-out'); 1612 // Pause any visual animations inside this card 1613 card.querySelectorAll('[data-animate-on-hover]').forEach(function(el) { 1614 el.style.animationPlayState = 'paused'; 1615 }); 1616 }); 1617 }); 1618 } 1619 1620 if (document.readyState === 'loading') { 1621 document.addEventListener('DOMContentLoaded', initFeatureCards); 1622 } else { 1623 initFeatureCards(); 1624 } 1625 1626 document.addEventListener('astro:page-load', initFeatureCards); 1627 })(); 1628</script>
1628 <!-- Card 2: Signal --> <a class="bg-white border border-zinc-200 shadow overflow-hidden rounded-2xl feature-card p-0 overflow-hidden h-full flex flex-col transition-shadow duration-200 group/card hover:shadow-md cursor-pointer" href="/signal" data-astro-cid-rq7a7mhf> <div class="relative aspect-[4/3] shrink-0 overflow-hidden bg-gradient-to-b from-zinc-100 to-white" data-astro-cid-rq7a7mhf> <!-- Hover gradient overlay (behind visual content) --> <div class="absolute inset-0 opacity-0 group-hover/card:opacity-100 transition-opacity duration-300 z-0 bg-gradient-to-b from-jade-50 to-white" data-astro-cid-rq7a7mhf></div> <div class="absolute inset-0 z-[1] transition-opacity duration-300 group-hover/card:opacity-90" data-astro-cid-rq7a7mhf> <div class="signal-visual relative w-full h-full overflow-hidden absolute inset-0" data-signal-visual data-astro-cid-l3ae6lyb> <div class="absolute inset-0 flex items-start md:items-center justify-center p-3" data-astro-cid-l3ae6lyb> <div class="signal-card w-full max-w-[360px] -rotate-1 bg-white shadow overflow-hidden" style="border-radius: 12px; box-shadow: 0 0 0 1px var(--alpha-border), 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);" data-astro-cid-l3ae6lyb> <!-- Session header --> <div class="flex gap-3 p-3.5" data-astro-cid-l3ae6lyb> <img src="/_astro/avatar-frederique.C2iYolEq_Z1I4Cli.webp" alt="" class="h-8 w-8 shrink-0 rounded-full object-cover border border-zinc-200" loading="lazy" decoding="auto" data-astro-cid-l3ae6lyb width="96" height="96"> <div class="flex-1 min-w-0" data-astro-cid-l3ae6lyb> <div class="flex items-start justify-between gap-2" data-astro-cid-l3ae6lyb> <span class="text-[11px] font-semibold text-zinc-900 truncate" data-astro-cid-l3ae6lyb>Frederique Janssen</span> <span class="text-[10px] text-zinc-400 shrink-0" data-astro-cid-l3ae6lyb>10:44 AM</span> </div> <p class="text-[10px] text-zinc-400 mt-0.5 flex items-center gap-1" data-astro-cid-l3ae6lyb> <span class="shrink-0 text-[10px] leading-none" data-astro-cid-l3ae6lyb>ð³ð±</span> 1629Hilversum, Netherlands 1630</p> </div> </div> <!-- Session stats --> <div class="grid grid-cols-2 gap-2 px-3.5 py-2" data-astro-cid-l3ae6lyb> <div class="bg-zinc-50 rounded-lg px-3 py-2" data-astro-cid-l3ae6lyb> <p class="text-[9px] text-zinc-400 mb-0.5" data-astro-cid-l3ae6lyb>Session length</p> <p class="text-[11px] font-medium text-zinc-900" data-astro-cid-l3ae6lyb>1h 50s</p> </div> <div class="bg-zinc-50 rounded-lg px-3 py-2 min-w-0" data-astro-cid-l3ae6lyb> <p class="text-[9px] text-zinc-400 mb-0.5" data-astro-cid-l3ae6lyb>Source</p> <p class="text-[11px] font-medium text-zinc-900" data-astro-cid-l3ae6lyb>Direct</p> </div> </div> <!-- Activity timeline --> <div class="relative px-3.5 pt-2 pb-1 overflow-hidden" data-signal-timeline data-astro-cid-l3ae6lyb> <ul class="space-y-2.5" data-astro-cid-l3ae6lyb> <li class="signal-hover-event" data-signal-hover-event data-astro-cid-l3ae6lyb> <div data-astro-cid-l3ae6lyb> <div class="signal-hover-content relative flex gap-3" data-astro-cid-l3ae6lyb> <div class="relative shrink-0 flex items-center justify-center h-6 w-6 rounded-full bg-zinc-100" data-astro-cid-l3ae6lyb> <svg class="shrink-0 h-3 w-3" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M6.66667 10C7.03486 10 7.33333 10.2985 7.33333 10.6667V12.6667C7.33333 13.0349 7.03486 13.3333 6.66667 13.3333C6.29848 13.3333 6 13.0349 6 12.6667V10.6667C6 10.2985 6.29848 10 6.66667 10Z" fill="currentColor"/><path d="M1.95247 1.95247C2.2128 1.69216 2.63483 1.69221 2.89518 1.95247L7.13802 6.19531C7.14031 6.1976 7.14229 6.20017 7.14453 6.20247C7.15502 6.21328 7.16539 6.22418 7.17513 6.23568C7.17984 6.24122 7.1843 6.24694 7.1888 6.2526C7.1973 6.26332 7.20505 6.27457 7.21289 6.28581C7.21791 6.29299 7.22316 6.29996 7.22786 6.30729C7.23307 6.3154 7.23798 6.32368 7.24284 6.33203C7.24813 6.34114 7.25364 6.35008 7.25846 6.35938C7.26562 6.37313 7.27179 6.38739 7.278 6.40169C7.28917 6.4275 7.29888 6.45371 7.30664 6.48047C7.32381 6.5396 7.33333 6.60201 7.33333 6.66667C7.33333 6.71032 7.32897 6.75296 7.32096 6.79427C7.31189 6.84102 7.29714 6.88668 7.278 6.93099C7.2718 6.9453 7.26561 6.95954 7.25846 6.97331C7.25654 6.97701 7.2546 6.9807 7.2526 6.98438C7.22316 7.03859 7.18595 7.08769 7.
163014323 7.13151C7.1413 7.13349 7.13998 7.13606 7.13802 7.13802L2.89518 11.3809C2.63481 11.6409 2.21272 11.6411 1.95247 11.3809C1.69224 11.1206 1.69244 10.6985 1.95247 10.4382L5.05729 7.33333H0.666667C0.298477 7.33333 0 7.03486 0 6.66667C0 6.29848 0.298477 6 0.666667 6H5.05729L1.95247 2.89518C1.69227 2.63488 1.69232 2.21281 1.95247 1.95247Z" fill="currentColor"/><path d="M9.02344 9.02344C9.28379 8.76309 9.70645 8.76309 9.9668 9.02344L11.3809 10.4375C11.6411 10.6978 11.641 11.1199 11.3809 11.3802C11.1205 11.6406 10.6985 11.6405 10.4382 11.3802L9.02344 9.96615C8.7633 9.70584 8.7633 9.28375 9.02344 9.02344Z" fill="currentColor"/><path d="M12.6667 6C13.0349 6 13.3333 6.29848 13.3333 6.66667C13.3333 7.03486 13.0349 7.33333 12.6667 7.33333H10.6667C10.2985 7.33333 10 7.03486 10 6.66667C10 6.29848 10.2985 6 10.6667 6H12.6667Z" fill="currentColor"/><path d="M10.4382 1.95247C10.6985 1.69221 11.1205 1.69215 11.3809 1.95247C11.6411 2.2128 11.6411 2.63485 11.3809 2.89518L9.9668 4.30925C9.70645 4.56959 9.28379 4.56959 9.02344 4.30925C8.76336 4.04891 8.76326 3.62681 9.02344 3.36654L10.4382 1.95247Z" fill="currentColor"/><path d="M6.66667 0C7.03486 0 7.33333 0.298477 7.33333 0.666667V2.66667C7.33333 3.03486 7.03486 3.33333 6.66667 3.33333C6.29848 3.33333 6 3.03486 6 2.66667V0.666667C6 0.298477 6.29848 0 6.66667 0Z" fill="currentColor"/></svg> </div> <div class="flex-1 min-w-0" data-astro-cid-l3ae6lyb> <p class="text-[11px] text-zinc-900 font-semibold truncate" data-astro-cid-l3ae6lyb>Hovered signal card</p> <p class="text-[10px] text-zinc-400 flex items-center gap-1.5" data-astro-cid-l3ae6lyb> <span data-astro-cid-l3ae6lyb>just now</span> </p> </div> </div> </div> </li> <li class="signal-timeline-item relative flex gap-3" data-signal-item data-astro-cid-l3ae6lyb> <div class="relative shrink-0 flex items-center justify-center h-6 w-6 rounded-full bg-zinc-100" data-astro-cid-l3ae6lyb> <svg class="shrink-0 h-3 w-3" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 4C15.9517 3.99997 19.7906 6.27233 22.3567 10.5831C22.8762 11.4558 22.8762 12.5441 22.3567 13.4168C19.7906 17.7276 15.9517 20 12 20C8.04829 20 4.20943 17.7277 1.64329 13.4169C1.12379 12.5442 1.12379 11.4559 1.64329 10.5832C4.20943 6.27243 8.04828 4.00003 12 4ZM8.5 12C8.5 10.067 10.067 8.5 12 8.5C13.933 8.5 15.5 10.067 15.5 12C15.5 13.933 13.933 15.5 12 15.5C10.067 15.5 8.5 13.933 8.5 12Z" fill="currentColor"/></svg> </div> <div class="flex-1 min-w-0" data-astro-cid-l3ae6lyb> <p class="text-[11px] text-zinc-900 font-semibold truncate" data-astro-cid-l3ae6lyb>Pricing</p> <p class="text-[10px] text-zinc-400 flex items-center gap-1.5" data-astro-cid-l3ae6lyb> <span data-astro-cid-l3ae6lyb>7m 23s</span> <span data-astro-cid-l3ae6lyb>10:44 AM</span> </p> </div> </li><li class="signal-timeline-item relative flex gap-3" data-signal-item data-astro-cid-l3ae6lyb> <div class="relative shrink-0 flex items-center justify-center h-6 w-6 rounded-full bg-zinc-100" data-astro-cid-l3ae6lyb> <svg class="shrink-0 h-3 w-3" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M11 2C11.5523 2 12 2.44772 12 3V4.5C12 5.05228 11.5523 5.5 11 5.5C10.4477 5.5 10 5.05228 10 4.5V3C10 2.44772 10.4477 2 11 2Z" fill="currentColor"/><path d="M17.3634 4.63582C17.7539 5.02634 17.7539 5.65951 17.3634 6.05003L16.3027 7.11069C15.9122 7.50122 15.279 7.50122 14.8885 7.11069C14.498 6.72017 14.498 6.087 14.8885 5.69648L15.9491 4.63582C16.3397 4.24529 16.9728 4.24529 17.3634 4.63582Z" fill="currentColor"/><path d="M7.1114 16.303C7.50193 15.9124 7.50193 15.2793 7.1114 14.8887C6.72088 14.4982 6.08771 14.4982 5.69719 14.8887L4.63653 15.9494C4.24601 16.3399 4.24601 16.9731 4.63653 17.3636C5.02705 17.7541 5.66022 17.7541 6.05074 17.3636L7.1114 16.303Z" fill="currentColor"/><path d="M5.5 11C5.5 11.5523 5.05228 12 4.5 12H3C2.44772 12 2 11.5523 2 11C2 10.4477 2.44772 10 3 10H4.5C5.05228 10 5.5 10.4477 5.5 11Z" fill="currentColor"/><path d="M5.69704 7.1114C6.08756 7.50193 6.72073 7.50193 7.11125 7.1114C7.50178 6.72088 7.50178 6.08771 7.11125 5.69719L6.05059 4.63653C5.66007 4.24601 5.0269 4.24601 4.63638 4.63653C4.24585 5.02705 4.24585 5.66022 4.63638 6.05074L5.69704 7.1114Z" fill="currentColor"/><path d="M11.4033 9.46701C10.1914 9.00289 9.00191 10.1924 9.46604 11.4043L13.2017 21.1585C13.647 22.3212 15.2332 22.4666 15.8824 21.4042L17.9765 17.9775L21.4032 15.8834C22.4656 15.2341 22.3202 13.648 21.1575 13.2027L11.4033 9.46701Z" fill="currentColor"/></svg> </div> <div class="flex-1 min-w-0" data-astro-cid-l3ae6lyb> <p class="text-[11px] text-zinc-900 font-semibold truncate" data-astro-cid-l3ae6lyb>Button click on /pricing</p> <div class="mt-1.5 bg-zinc-50 rounded-lg px-2.5 py-2" data-astro-cid-l3ae6lyb> <p class="text-[9px] text-zinc-400 mb-0.5" data-astro-cid-l3ae6lyb>Button value</p> <p class="text-[11px] font-medium text-zinc-900" data-astro-cid-l3ae6lyb>Request a Demo</p> </div> <p class="text-[10px] text-zinc-400 flex items-center gap-1.5 mt-1.5" data-astro-cid-l3ae6lyb> <span data-astro-cid-l3ae6lyb>2m 15s</span> <span class="text-zinc-300" data-astro-cid-l3ae6lyb>|</span> <span data-astro-cid-l3ae6lyb>10:41 AM</span> </p> </div> </li><li class="signal-timeline-item relative flex gap-3" data-signal-item data-astro-cid-l3ae6lyb> <div class="relative shrink-0 flex items-center justify-center h-6 w-6 rounded-full bg-zinc-100" data-astro-cid-l3ae6lyb> <svg class="shrink-0 h-3 w-3" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 4C15.9517 3.99997 19.7906 6.27233 22.3567 10.5831C22.8762 11.4558 22.8762 12.5441 22.3567 13.4168C19.7906 17.7276 15.9517 20 12 20C8.04829 20 4.20943 17.7277 1.64329 13.4169C1.12379 12.5442 1.12379 11.4559 1.64329 10.5832C4.20943 6.27243 8.04828 4.00003 12 4ZM8.5 12C8.5 10.067 10.067 8.5 12 8.5C13.933 8.5 15.5 10.067 15.5 12C15.5 13.933 13.933 15.5 12 15.5C10.067 15.5 8.5 13.933 8.5 12Z" fill="currentColor"/></svg> </div> <div class="flex-1 min-w-0" data-astro-cid-l3ae6lyb> <p class="text-[11px] text-zinc-900 font-semibold truncate" data-astro-cid-l3ae6lyb>Case Studies â Acme</p> <p class="text-[10px] text-zinc-400 flex items-center gap-1.5" data-astro-cid-l3ae6lyb> <span data-astro-cid-l3ae6lyb>4m 12s</span> <span data-astro-cid-l3ae6lyb>10:37 AM</span> </p> </div> </li><li class="signal-timeline-item relative flex gap-3" data-signal-item data-astro-cid-l3ae6lyb> <div class="relative shrink-0 flex items-center justify-center h-6 w-6 rounded-full bg-zinc-100" data-astro-cid-l3ae6lyb> <svg class="shrink-0 h-3 w-3" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 4C15.9517 3.99997 19.7906 6.27233 22.3567 10.5831C22.8762 11.4558 22.8762 12.5441 22.3567 13.4168C19.7906 17.7276 15.9517 20 12 20C8.04829 20 4.20943 17.7277 1.64329 13.4169C1.12379 12.5442 1.12379 11.4559 1.64329 10.5832C4.20943 6.27243 8.04828 4.00003 12 4ZM8.5 12C8.5 10.067 10.067 8.5 12 8.5C13.933 8.5 15.5 10.067 15.5 12C15.5 13.933 13.933 15.5 12 15.5C10.067 15.5 8.5 13.933 8.5 12Z" fill="currentColor"/></svg> </div> <div class="flex-1 min-w-0" data-astro-cid-l3ae6lyb> <p class="text-[11px] text-zinc-900 font-semibold truncate" data-astro-cid-l3ae6lyb>Integrations â Salesforce</p> <p class="text-[10px] text-zinc-400 flex items-center gap-1.5" data-astro-cid-l3ae6lyb> <span data-astro-cid-l3ae6lyb>3m 45s</span> <span data-astro-cid-l3ae6lyb>10:17 AM</span> </p> </div> </li><li class="signal-timeline-item relative flex gap-3" data-signal-item data-astro-cid-l3ae6lyb> <div class="relative shrink-0 flex items-center justify-center h-6 w-6 rounded-full bg-zinc-100" data-astro-cid-l3ae6lyb> <svg class="shrink-0 h-3 w-3" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 4C15.9517 3.99997 19.7906 6.27233 22.3567 10.5831C22.8762 11.4558 22.8762 12.5441 22.3567 13.4168C19.7906 17.7276 15.9517 20 12 20C8.04829 20 4.20943 17.7277 1.64329 13.4169C1.12379 12.5442 1.12379 11.4559 1.64329 10.5832C4.20943 6.27243 8.04828 4.00003 12 4ZM8.5 12C8.5 10.067 10.067 8.5 12 8.5C13.933 8.5 15.5 10.067 15.5 12C15.5 13.933 13.933 15.5 12 15.5C10.067 15.5 8.5 13.933 8.5 12Z" fill="currentColor"/></svg> </div> <div class="flex-1 min-w-0" data-astro-cid-l3ae6lyb> <p class="text-[11px] text-zinc-900 font-semibold truncate" data-astro-cid-l3ae6lyb>Homepage</p> <p class="text-[10px] text-zinc-400 flex items-center gap-1.5" data-astro-cid-l3ae6lyb> <span data-astro-cid-l3ae6lyb>2m 31s</span> <span data-astro-cid-l3ae6lyb>10:12 AM</span> </p> </div> </li> </ul> <!-- Bottom fade --> <div class="absolute bottom-0 left-0 right-0 h-10 bg-gradient-to-t from-white to-transparent pointer-events-none z-10" data-astro-cid-l3ae6lyb></div> </div> </div> </div> </div>
1630<script> 1631 (function() { 1632 var timeouts = []; 1633 var observer = null; 1634 1635 var hoverEnterHandler = null; 1636 var hoverLeaveHandler = null; 1637 var featureCard = null; 1638 1639 function init() { 1640 var visual = document.querySelector('[data-signal-visual]'); 1641 if (!visual || visual.dataset.signalInit) return; 1642 visual.dataset.signalInit = 'true'; 1643 1644 var items = visual.querySelectorAll('[data-signal-item]'); 1645 if (!items.length) return; 1646 1647 observer = new IntersectionObserver(function(entries) { 1648 entries.forEach(function(entry) { 1649 if (!entry.isIntersecting) return; 1650 1651 items.forEach(function(item, i) { 1652 var delay = 300 + i * 400; 1653 timeouts.push(setTimeout(function() { 1654 item.classList.add('visible'); 1655 }, delay)); 1656 }); 1657 1658 observer.unobserve(entry.target); 1659 }); 1660 }, { threshold: 0.3 }); 1661 1662 observer.observe(visual); 1663 1664 // Hover custom event â show on enter, hide on leave 1665 featureCard = visual.closest('.feature-card'); 1666 var hoverEvent = visual.querySelector('[data-signal-hover-event]'); 1667 var timeline = visual.querySelector('[data-signal-timeline]'); 1668 if (featureCard && hoverEvent && timeline) { 1669 // Lock timeline height so the card doesn't grow 1670 timeline.style.height = timeline.offsetHeight + 'px'; 1671 1672 hoverEnterHandler = function() { 1673 hoverEvent.classList.add('visible'); 1674 }; 1675 1676 hoverLeaveHandler = function() { 1677 hoverEvent.classList.remove('visible'); 1678 }; 1679 1680 featureCard.addEventListener('mouseenter', hoverEnterHandler); 1681 featureCard.addEventListener('mouseleave', hoverLeaveHandler); 1682 } 1683 } 1684 1685 function cleanup() { 1686 timeouts.forEach(clearTimeout); 1687 timeouts = []; 1688 if (observer) { 1689 observer.disconnect(); 1690 observer = null; 1691 } 1692 if (featureCard) { 1693 if (hoverEnterHandler) featureCard.removeEventListener('mouseenter', hoverEnterHandler); 1694 if (hoverLeaveHandler) featureCard.removeEventListener('mouseleave', hoverLeaveHandler); 1695 hoverEnterHandler = null; 1696 hoverLeaveHandler = null; 1697 featureCard = null; 1698 } 1699 var visual = document.querySelector('[data-signal-visual]'); 1700 if (visual) delete visual.dataset.signalInit; 1701 var items = document.querySelectorAll('[data-signal-item]'); 1702 items.forEach(function(item) { 1703 item.classList.remove('visible'); 1704 }); 1705 var hoverEvent = document.querySelector('[data-signal-hover-event]'); 1706 if (hoverEvent) { 1707 hoverEvent.classList.remove('visible'); 1708 } 1709 var timeline = document.querySelector('[data-signal-timeline]'); 1710 if (timeline) timeline.style.height = ''; 1711 } 1712 1713 if (document.readyState === 'loading') { 1714 document.addEventListener('DOMContentLoaded', init); 1715 } else { 1716 init(); 1717 } 1718 1719 })(); 1720</script>
1720 </div> </div> <div class="flex gap-4 p-4 md:p-6 flex-1" data-astro-cid-rq7a7mhf> <!-- Left: Icon, Title, Description --> <div class="flex flex-col gap-4 flex-1" data-astro-cid-rq7a7mhf> <div class="flex items-center gap-2" data-astro-cid-rq7a7mhf> <svg width="24" height="24" class="shrink-0 text-jade-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M11.5455 15.7345C9.45546 15.1509 7.58124 14.7024 5.5 15.5655V21.2496C5.5 21.6638 5.16421 21.9996 4.75 21.9996C4.33579 21.9996 4 21.6638 4 21.2496V4.39872C4 3.74584 4.37163 3.093 5.04245 2.82695C7.52875 1.84088 9.76493 2.37886 11.7734 2.93538C11.9051 2.97188 12.0357 3.00836 12.1653 3.04455C14.0634 3.57485 15.7401 4.04331 17.5642 3.60129C18.6368 3.34137 20 4.04343 20 5.38675V14.4616C20 15.1144 19.6284 15.7673 18.9576 16.0333C16.3236 17.078 13.9537 16.4115 11.8464 15.8189C11.7455 15.7906 11.6452 15.7623 11.5455 15.7345Z" fill="currentColor"/></svg> 1721 <span class="eyebrow text-sm text-jade-500" data-astro-cid-rq7a7mhf>Signal</span> </div> <h4 data-astro-cid-rq7a7mhf>Know who's ready before anyone else</h4> <p data-astro-cid-rq7a7mhf>Snitcher tracks live intent across your site and campaigns, revealing which accounts are heating up so your team can act.</p> </div> <!-- Right: Arrow button aligned to bottom --> <div class="flex items-end shrink-0" data-astro-cid-rq7a7mhf> <span aria-label="Explore feature" data-arrow-direction="right" class="arrow-btn inline-flex items-center justify-center border border-zinc-200 bg-white text-zinc-700 shadow overflow-hidden font-semibold text-sm transition-colors duration-200 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 hover:bg-jade-500 hover:border-jade-500 hover:text-white w-8 h-8 md:w-10 md:h-10 rounded-full pointer-events-none group-hover/card:bg-jade-500 group-hover/card:border-jade-500 group-hover/card:text-white"><span class="arrow-btn-icon-wrap"> <svg width="16" height="16" class="arrow-btn-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.1161 5.36612C13.6043 4.87796 14.3957 4.87796 14.8839 5.36612L20.6339 11.1161C20.8683 11.3505 21 11.6685 21 12C21 12.3315 20.8683 12.6494 20.6339 12.8839L14.8839 18.6339C14.3957 19.122 13.6043 19.122 13.1161 18.6339C12.628 18.1457 12.628 17.3543 13.1161 16.8661L16.7322 13.25H4.25C3.55964 13.25 3 12.6903 3 12C3 11.3096 3.55964 10.75 4.25 10.75H16.7322L13.1161 7.13388C12.628 6.64573 12.628 5.85427 13.1161 5.36612Z" fill="currentColor"/></svg> 1722 </span> </span>
1722<script> 1723 (function() { 1724 function initArrowButtons() { 1725 document.querySelectorAll('.arrow-btn').forEach(function(button) { 1726 // Skip if already initialized 1727 if (button.dataset.arrowInit) return; 1728 button.dataset.arrowInit = 'true'; 1729 1730 var icon = button.querySelector('.arrow-btn-icon'); 1731 if (!icon) return; 1732 1733 var dir = button.dataset.arrowDirection || 'right'; 1734 var slideIn = 'slide-in-' + dir; 1735 var slideOut = 'slide-out-' + dir; 1736 1737 button.addEventListener('mouseenter', function() { 1738 icon.classList.remove(slideOut, 'slide-out'); 1739 icon.classList.add(slideIn); 1740 }); 1741 1742 button.addEventListener('mouseleave', function() { 1743 icon.classList.remove(slideIn, 'slide-in'); 1744 icon.classList.add(slideOut); 1745 }); 1746 }); 1747 } 1748 1749 // Initialize on DOM ready 1750 if (document.readyState === 'loading') { 1751 document.addEventListener('DOMContentLoaded', initArrowButtons); 1752 } else { 1753 initArrowButtons(); 1754 } 1755 1756 // Re-initialize on Astro page transitions 1757 document.addEventListener('astro:page-load', initArrowButtons); 1758 })(); 1759</script>
1759 </div> </div> </a>
1759<script> 1760 (function() { 1761 function initFeatureCards() { 1762 document.querySelectorAll('.feature-card[href]').forEach(function(card) { 1763 if (card.dataset.featureCardInit) return; 1764 card.dataset.featureCardInit = 'true'; 1765 1766 var arrowBtn = card.querySelector('.arrow-btn'); 1767 if (!arrowBtn) return; 1768 1769 var icon = arrowBtn.querySelector('.arrow-btn-icon'); 1770 if (!icon) return; 1771 1772 card.addEventListener('mouseenter', function() { 1773 icon.classList.remove('slide-out'); 1774 icon.classList.add('slide-in'); 1775 // Play any visual animations inside this card 1776 card.querySelectorAll('[data-animate-on-hover]').forEach(function(el) { 1777 el.style.animationPlayState = 'running'; 1778 }); 1779 }); 1780 1781 card.addEventListener('mouseleave', function() { 1782 icon.classList.remove('slide-in'); 1783 icon.classList.add('slide-out'); 1784 // Pause any visual animations inside this card 1785 card.querySelectorAll('[data-animate-on-hover]').forEach(function(el) { 1786 el.style.animationPlayState = 'paused'; 1787 }); 1788 }); 1789 }); 1790 } 1791 1792 if (document.readyState === 'loading') { 1793 document.addEventListener('DOMContentLoaded', initFeatureCards); 1794 } else { 1795 initFeatureCards(); 1796 } 1797 1798 document.addEventListener('astro:page-load', initFeatureCards); 1799 })(); 1800</script>
1800 </div> <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mt-6"> <!-- Card 3: Automate --> <a class="bg-white border border-zinc-200 shadow overflow-hidden rounded-2xl feature-card p-0 overflow-hidden h-full flex flex-col transition-shadow duration-200 group/card hover:shadow-md cursor-pointer" href="/automate" data-astro-cid-rq7a7mhf> <div class="relative aspect-[4/3] shrink-0 overflow-hidden bg-gradient-to-b from-zinc-100 to-white" data-astro-cid-rq7a7mhf> <!-- Hover gradient overlay (behind visual content) --> <div class="absolute inset-0 opacity-0 group-hover/card:opacity-100 transition-opacity duration-300 z-0 bg-gradient-to-b from-honey-50 to-white" data-astro-cid-rq7a7mhf></div> <div class="absolute inset-0 z-[1] transition-opacity duration-300 group-hover/card:opacity-90" data-astro-cid-rq7a7mhf> <div class="snv relative w-full h-full overflow-hidden select-none" data-snv data-astro-cid-fjxicinn> <!-- Notification stack --> <div class="absolute inset-0 flex items-center justify-center px-5" data-astro-cid-fjxicinn> <div class="snv-group relative w-full max-w-[280px]" style="height: 260px;" data-snv-group data-astro-cid-fjxicinn> <div class="snv-card" data-astro-cid-fjxicinn> <div class="snv-body" data-astro-cid-fjxicinn> <div class="flex items-center gap-2" data-astro-cid-fjxicinn> <div class="snv-icon-wrap" data-astro-cid-fjxicinn> <svg class="w-3.5 h-3.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313z" fill="#E01E5A"/><path d="M8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312z" fill="#36C5F0"/><path d="M18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.27 0a2.528 2.528 0 0 1-2.522 2.521 2.528 2.528 0 0 1-2.52-2.521V2.522A2.528 2.528 0 0 1 15.165 0a2.528 2.528 0 0 1 2.521 2.522v6.312z" fill="#2EB67D"/><path d="M15.165 18.956a2.528 2.528 0 0 1 2.521 2.522A2.528 2.528 0 0 1 15.165 24a2.528 2.528 0 0 1-2.521-2.522v-2.522h2.521zm0-1.27a2.528 2.528 0 0 1-2.521-2.522 2.528 2.528 0 0 1 2.521-2.52h6.313A2.528 2.528 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.521h-6.313z" fill="#ECB22E"/></svg> </div> <span class="font-semibold text-[13px] leading-none text-zinc-900 flex-1" data-astro-cid-fjxicinn>Slack</span> <span class="text-[11px] leading-none text-zinc-400 tabular-nums" data-astro-cid-fjxicinn>5m ago</span> </div> <p class="text-[11px] font-medium text-zinc-500 mt-1.5 mb-0 leading-none" data-astro-cid-fjxicinn>#hot-leads</p> <p class="text-[13px] text-zinc-700 mt-1 mb-0" data-astro-cid-fjxicinn> <span class="inline-block align-text-bottom mr-0.5" data-astro-cid-fjxicinn>🔥</span> <span class="font-semibold text-zinc-900" data-astro-cid-fjxicinn>Vercel</span> just visited Pricing </p> </div> </div><div class="snv-card" data-astro-cid-fjxicinn> <div class="snv-body" data-astro-cid-fjxicinn> <div class="flex items-center gap-2" data-astro-cid-fjxicinn> <div class="snv-icon-wrap" data-astro-cid-fjxicinn> <svg class="w-3.5 h-3.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313z" fill="#E01E5A"/><path d="M8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312z" fill="#36C5F0"/><path d="M18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.27 0a2.528 2.528 0 0 1-2.522 2.521 2.528 2.528 0 0 1-2.52-2.521V2.522A2.528 2.528 0 0 1 15.165 0a2.528 2.528 0 0 1 2.521 2.522v6.312z" fill="#2EB67D"/><path d="M15.165 18.956a2.528 2.528 0 0 1 2.521 2.522A2.528 2.528 0 0 1 15.165 24a2.528 2.528 0 0 1-2.521-2.522v-2.522h2.521zm0-1.27a2.528 2.528 0 0 1-2.521-2.522 2.528 2.528 0 0 1 2.521-2.52h6.313A2.528 2.528 0 0 1 24 15.165
1800a2.528 2.528 0 0 1-2.522 2.521h-6.313z" fill="#ECB22E"/></svg> </div> <span class="font-semibold text-[13px] leading-none text-zinc-900 flex-1" data-astro-cid-fjxicinn>Slack</span> <span class="text-[11px] leading-none text-zinc-400 tabular-nums" data-astro-cid-fjxicinn>2m ago</span> </div> <p class="text-[11px] font-medium text-zinc-500 mt-1.5 mb-0 leading-none" data-astro-cid-fjxicinn>#hot-leads</p> <p class="text-[13px] text-zinc-700 mt-1 mb-0" data-astro-cid-fjxicinn> <span class="inline-block align-text-bottom mr-0.5" data-astro-cid-fjxicinn>🔥</span> <span class="font-semibold text-zinc-900" data-astro-cid-fjxicinn>Incident.io</span> just visited Integrations </p> </div> </div><div class="snv-card" data-astro-cid-fjxicinn> <div class="snv-body" data-astro-cid-fjxicinn> <div class="flex items-center gap-2" data-astro-cid-fjxicinn> <div class="snv-icon-wrap" data-astro-cid-fjxicinn> <svg class="w-3.5 h-3.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313z" fill="#E01E5A"/><path d="M8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312z" fill="#36C5F0"/><path d="M18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.27 0a2.528 2.528 0 0 1-2.522 2.521 2.528 2.528 0 0 1-2.52-2.521V2.522A2.528 2.528 0 0 1 15.165 0a2.528 2.528 0 0 1 2.521 2.522v6.312z" fill="#2EB67D"/><path d="M15.165 18.956a2.528 2.528 0 0 1 2.521 2.522A2.528 2.528 0 0 1 15.165 24a2.528 2.528 0 0 1-2.521-2.522v-2.522h2.521zm0-1.27a2.528 2.528 0 0 1-2.521-2.522 2.528 2.528 0 0 1 2.521-2.52h6.313A2.528 2.528 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.521h-6.313z" fill="#ECB22E"/></svg> </div> <span class="font-semibold text-[13px] leading-none text-zinc-900 flex-1" data-astro-cid-fjxicinn>Slack</span> <span class="text-[11px] leading-none text-zinc-400 tabular-nums" data-astro-cid-fjxicinn>now</span> </div> <p class="text-[11px] font-medium text-zinc-500 mt-1.5 mb-0 leading-none" data-astro-cid-fjxicinn>#hot-leads</p> <p class="text-[13px] text-zinc-700 mt-1 mb-0" data-astro-cid-fjxicinn> <span class="inline-block align-text-bottom mr-0.5" data-astro-cid-fjxicinn>🔥</span> <span class="font-semibold text-zinc-900" data-astro-cid-fjxicinn>Anthropic</span> just visited API Docs </p> </div> </div> </div> </div> </div>
1800<script> 1801 (function() { 1802 var timeouts = []; 1803 var observer = null; 1804 1805 function init() { 1806 var visual = document.querySelector('[data-snv]'); 1807 if (!visual || visual.dataset.snvInit) return; 1808 visual.dataset.snvInit = 'true'; 1809 1810 var cards = visual.querySelectorAll('.snv-card'); 1811 var group = visual.querySelector('[data-snv-group]'); 1812 if (cards.length < 3 || !group) return; 1813 1814 observer = new IntersectionObserver(function(entries) { 1815 entries.forEach(function(entry) { 1816 if (!entry.isIntersecting) return; 1817 1818 // Card 0 = Vercel (z-10), Card 1 = Incident.io (z-20), Card 2 = Anthropic (z-30) 1819 // Animation: each card enters at stack-top, pushing previous cards down 1820 1821 // t=300ms: Vercel slides in at the top position 1822 timeouts.push(setTimeout(function() { 1823 cards[0].classList.add('s-top'); 1824 }, 300)); 1825 1826 // t=1000ms: Incident.io slides in at top, Vercel shifts to mid 1827 timeouts.push(setTimeout(function() { 1828 cards[1].classList.add('s-top'); 1829 cards[0].classList.remove('s-top'); 1830 cards[0].classList.add('s-mid'); 1831 }, 1000)); 1832 1833 // t=1700ms: Anthropic slides in at top, Incidentâmid, Vercelâbot 1834 timeouts.push(setTimeout(function() { 1835 cards[2].classList.add('s-top'); 1836 cards[1].classList.remove('s-top'); 1837 cards[1].classList.add('s-mid'); 1838 cards[0].classList.remove('s-mid'); 1839 cards[0].classList.add('s-bot'); 1840 }, 1700)); 1841 1842 // t=2200ms: Enable hover expansion 1843 timeouts.push(setTimeout(function() { 1844 group.classList.add('ready'); 1845 1846 // Listen for hover on the parent feature card 1847 var card = visual.closest('.feature-card'); 1848 if (card) { 1849 card.addEventListener('mouseenter', function() { 1850 group.classList.add('hovered'); 1851 }); 1852 card.addEventListener('mouseleave', function() { 1853 group.classList.remove('hovered'); 1854 }); 1855 } 1856 }, 2200)); 1857 1858 observer.unobserve(entry.target); 1859 }); 1860 }, { threshold: 0.3 }); 1861 1862 observer.observe(visual); 1863 } 1864 1865 function cleanup() { 1866 timeouts.forEach(clearTimeout); 1867 timeouts = []; 1868 if (observer) { 1869 observer.disconnect(); 1870 observer = null; 1871 } 1872 var visual = document.querySelector('[data-snv]'); 1873 if (visual) delete visual.dataset.snvInit; 1874 } 1875 1876 if (document.readyState === 'loading') { 1877 document.addEventListener('DOMContentLoaded', init); 1878 } else { 1879 init(); 1880 } 1881 1882 document.addEventListener('astro:before-swap', cleanup); 1883 document.addEventListener('astro:page-load', init); 1884 })(); 1885</script>
1885 </div> </div> <div class="flex gap-4 p-4 md:p-6 flex-1" data-astro-cid-rq7a7mhf> <!-- Left: Icon, Title, Description --> <div class="flex flex-col gap-4 flex-1" data-astro-cid-rq7a7mhf> <div class="flex items-center gap-2" data-astro-cid-rq7a7mhf> <svg width="24" height="24" class="shrink-0 text-amber-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M9.32916 2C8.70285 2 8.12428 2.33472 7.81208 2.87768L3.21208 10.8777C2.54125 12.0443 3.38339 13.5 4.72916 13.5H7.67252C7.83072 13.5 7.94915 13.6451 7.91745 13.8001L6.68268 19.8386C6.33503 21.5388 8.40755 22.6537 9.63464 21.4267L20.5739 10.4874C21.6763 9.385 20.8955 7.5 19.3364 7.5H16.8687C16.6828 7.5 16.562 7.30442 16.6451 7.1382L17.9479 4.53262C18.5296 3.36905 17.6835 2 16.3826 2H9.32916Z" fill="currentColor"/></svg> 1886 <span class="eyebrow text-sm text-amber-500" data-astro-cid-rq7a7mhf>Automate</span> </div> <h4 data-astro-cid-rq7a7mhf>Stay fast while everyone else slows down</h4> <p data-astro-cid-rq7a7mhf>Snitcher routes leads, syncs data and fires workflows automatically so your GTM keeps running while others chase fixes.</p> </div> <!-- Right: Arrow button aligned to bottom --> <div class="flex items-end shrink-0" data-astro-cid-rq7a7mhf> <span aria-label="Explore feature" data-arrow-direction="right" class="arrow-btn inline-flex items-center justify-center border border-zinc-200 bg-white text-zinc-700 shadow overflow-hidden font-semibold text-sm transition-colors duration-200 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 hover:bg-amber-500 hover:border-amber-500 hover:text-white w-8 h-8 md:w-10 md:h-10 rounded-full pointer-events-none group-hover/card:bg-amber-500 group-hover/card:border-amber-500 group-hover/card:text-white"><span class="arrow-btn-icon-wrap"> <svg width="16" height="16" class="arrow-btn-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.1161 5.36612C13.6043 4.87796 14.3957 4.87796 14.8839 5.36612L20.6339 11.1161C20.8683 11.3505 21 11.6685 21 12C21 12.3315 20.8683 12.6494 20.6339 12.8839L14.8839 18.6339C14.3957 19.122 13.6043 19.122 13.1161 18.6339C12.628 18.1457 12.628 17.3543 13.1161 16.8661L16.7322 13.25H4.25C3.55964 13.25 3 12.6903 3 12C3 11.3096 3.55964 10.75 4.25 10.75H16.7322L13.1161 7.13388C12.628 6.64573 12.628 5.85427 13.1161 5.36612Z" fill="currentColor"/></svg> 1887 </span> </span>
1887<script> 1888 (function() { 1889 function initArrowButtons() { 1890 document.querySelectorAll('.arrow-btn').forEach(function(button) { 1891 // Skip if already initialized 1892 if (button.dataset.arrowInit) return; 1893 button.dataset.arrowInit = 'true'; 1894 1895 var icon = button.querySelector('.arrow-btn-icon'); 1896 if (!icon) return; 1897 1898 var dir = button.dataset.arrowDirection || 'right'; 1899 var slideIn = 'slide-in-' + dir; 1900 var slideOut = 'slide-out-' + dir; 1901 1902 button.addEventListener('mouseenter', function() { 1903 icon.classList.remove(slideOut, 'slide-out'); 1904 icon.classList.add(slideIn); 1905 }); 1906 1907 button.addEventListener('mouseleave', function() { 1908 icon.classList.remove(slideIn, 'slide-in'); 1909 icon.classList.add(slideOut); 1910 }); 1911 }); 1912 } 1913 1914 // Initialize on DOM ready 1915 if (document.readyState === 'loading') { 1916 document.addEventListener('DOMContentLoaded', initArrowButtons); 1917 } else { 1918 initArrowButtons(); 1919 } 1920 1921 // Re-initialize on Astro page transitions 1922 document.addEventListener('astro:page-load', initArrowButtons); 1923 })(); 1924</script>
1924 </div> </div> </a>
1924<script> 1925 (function() { 1926 function initFeatureCards() { 1927 document.querySelectorAll('.feature-card[href]').forEach(function(card) { 1928 if (card.dataset.featureCardInit) return; 1929 card.dataset.featureCardInit = 'true'; 1930 1931 var arrowBtn = card.querySelector('.arrow-btn'); 1932 if (!arrowBtn) return; 1933 1934 var icon = arrowBtn.querySelector('.arrow-btn-icon'); 1935 if (!icon) return; 1936 1937 card.addEventListener('mouseenter', function() { 1938 icon.classList.remove('slide-out'); 1939 icon.classList.add('slide-in'); 1940 // Play any visual animations inside this card 1941 card.querySelectorAll('[data-animate-on-hover]').forEach(function(el) { 1942 el.style.animationPlayState = 'running'; 1943 }); 1944 }); 1945 1946 card.addEventListener('mouseleave', function() { 1947 icon.classList.remove('slide-in'); 1948 icon.classList.add('slide-out'); 1949 // Pause any visual animations inside this card 1950 card.querySelectorAll('[data-animate-on-hover]').forEach(function(el) { 1951 el.style.animationPlayState = 'paused'; 1952 }); 1953 }); 1954 }); 1955 } 1956 1957 if (document.readyState === 'loading') { 1958 document.addEventListener('DOMContentLoaded', initFeatureCards); 1959 } else { 1960 initFeatureCards(); 1961 } 1962 1963 document.addEventListener('astro:page-load', initFeatureCards); 1964 })(); 1965</script>
1965 <!-- Card 4: Engage --> <a class="bg-white border border-zinc-200 shadow overflow-hidden rounded-2xl feature-card p-0 overflow-hidden h-full flex flex-col transition-shadow duration-200 group/card hover:shadow-md cursor-pointer" href="/engage" data-astro-cid-rq7a7mhf> <div class="relative aspect-[4/3] shrink-0 overflow-hidden bg-gradient-to-b from-zinc-100 to-white" data-astro-cid-rq7a7mhf> <!-- Hover gradient overlay (behind visual content) --> <div class="absolute inset-0 opacity-0 group-hover/card:opacity-100 transition-opacity duration-300 z-0 bg-gradient-to-b from-lavender-50 to-white" data-astro-cid-rq7a7mhf></div> <div class="absolute inset-0 z-[1] transition-opacity duration-300 group-hover/card:opacity-90" data-astro-cid-rq7a7mhf> <div class="engage-visual relative w-full h-full overflow-hidden absolute inset-0" data-engage-visual data-astro-cid-ybnukg4e> <div class="absolute inset-0 flex items-center justify-center px-5" data-astro-cid-ybnukg4e> <div class="engage-flip-container w-full max-w-[280px]" data-astro-cid-ybnukg4e> <div class="engage-flip-inner" data-astro-cid-ybnukg4e> <div class="engage-face engage-front" data-astro-cid-ybnukg4e> <div class="bg-white rounded-xl overflow-hidden" style="box-shadow: 0 0 0 1px var(--alpha-border, rgba(0,0,0,0.06)), 0 1px 3px 0 rgb(0 0 0 / 0.08), 0 4px 12px -2px rgb(0 0 0 / 0.06);" data-astro-cid-ybnukg4e> <div class="px-5 pt-5 pb-4 flex flex-col items-center text-center" data-astro-cid-ybnukg4e> <div class="relative mb-3" data-astro-cid-ybnukg4e> <img src="https://images.unsplash.com/photo-1539125530496-3ca408f9c2d9?w=112&h=112&fit=crop&crop=face" alt="" role="presentation" class="w-14 h-14 rounded-full object-cover" data-astro-cid-ybnukg4e> <div class="absolute -bottom-0.5 -right-0.5" data-astro-cid-ybnukg4e> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" width="20" height="20"><path d="M12 3.75C13.1409 3.75 14.1497 4.2487 14.8916 5.01855C15.9602 4.99891 17.0265 5.35953 17.834 6.16699C18.6404 6.97339 19.0009 8.03951 18.9814 9.1084C19.7508 9.85026 20.25 10.8589 20.25 12C20.25 13.1409 19.7505 14.1488 18.9814 14.8906C19.0011 15.9599 18.6411 17.0267 17.835 17.834L17.834 17.835C17.0267 18.6411 15.9599 19.0011 14.8906 18.9814C14.1488 19.7505 13.1409 20.25 12 20.25C10.8589 20.25 9.85026 19.7508 9.1084 18.9814C8.03945 19.0009 6.97303 18.6408 6.16602 17.835L6.16504 17.834C5.35894 17.0267 4.99788 15.9599 5.01758 14.8906C4.24877 14.1489 3.75 13.1406 3.75 12C3.75 10.8591 4.24849 9.85021 5.01758 9.1084C4.99854 8.04027 5.35911 6.97389 6.16602 6.16699C6.97323 5.35978 8.03918 4.99915 9.10742 5.01855C9.84935 4.24842 10.8589 3.75 12 3.75Z" fill="#34A852" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M9.75 12.75L11.25 14.25C12 11.5 14.25 9.75 14.25 9.75" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg> </div> </div> <p class="text-[15px] font-semibold text-zinc-900" data-astro-cid-ybnukg4e>Marcus Klein</p> <p class="text-[12px] text-zinc-500 mt-0.5" data-astro-cid-ybnukg4e>VP of Sales</p> </div> <div class="border-t border-zinc-100 px-5 py-3 flex flex-col gap-2" data-astro-cid-ybnukg4e> <div class="flex items-center gap-2.5" data-astro-cid-ybnukg4e> <svg width="14" height="14" class="text-zinc-400 shrink-0" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M4 10C4 5.58172 7.58172 2 12 2C16.4183 2 20 5.58172 20 10C20 12.4952 18.8883 14.8173 17.5726 16.7017C16.251 18.5946 14.6734 20.1174 13.6287 21.0297C12.6885 21.8509 11.3115 21.8509 10.3713 21.0297C9.32656 20.1174 7.749 18.5946 6.4274 16.7017C5.11171 14.8173 4 12.4952 4 10ZM8.875 10C8.875 8.27411 10.2741 6.875 12 6.875C13.7259 6.875 15.125 8.27411 15.125 10C15.125 11.7259 13.7259 13.125 12 13.125C10.2741 13.125 8.875 11.7259 8.875 10Z" fill="currentColor"/></svg> 1966 <span class="text-[12px] text-zinc-600" data-astro-cid-ybnukg4e>San Francisco, CA</span> </div> <div class="flex items-center gap-2.5" data-astro-cid-ybnukg4e> <svg width="14" height="14" class="text-zinc-400 shrink-0" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22ZM12.75 7.75C12.75 7.33579 12.4142 7 12 7C11.5858 7 11.25 7.33579 11.25 7.75V12C11.25 12.1989 11.329 12.3897 11.4697 12.5303L14.2197 15.2803C14.5126 15.5732 14.9874 15.5732 15.2803 15.2803C15.5732 14.9874 15.5732 14.5126 15.2803 14.2197L12.75 11.6893V7.75Z" fill="currentColor"/></svg> 1967 <span class="text-[12px] text-zinc-600" data-astro-cid-ybnukg4e>Last seen 12 min ago</span> </div> </div> </div> </div> <div class="engage-face engage-back" data-astro-cid-ybnukg4e> <div class="bg-white rounded-xl overflow-hidden" style="box-shadow: 0 0 0 1px var(--alpha-border, rgba(0,0,0,0.06)), 0 1px 3px 0 rgb(0 0 0 / 0.08), 0 4px 12px -2px rgb(0 0 0 / 0.06);" data-astro-cid-ybnukg4e> <div class="px-5 pt-4 pb-3 flex flex-col gap-0" data-astro-cid-ybnukg4e> <div class="flex items-center gap-2 py-2 border-b border-zinc-100" data-astro-cid-ybnukg4e> <span class="text-[11px] font-medium text-zinc-400 w-8 shrink-0" data-astro-cid-ybnukg4e>From</span> <span class="text-[12px] text-zinc-700" data-astro-cid-ybnukg4e>[email protected]</span> </div> <div class="flex items-center gap-2 py-2 border-b border-zinc-100" data-astro-cid-ybnukg4e> <span class="text-[11px] font-medium text-zinc-400 w-8 shrink-0" data-astro-cid-ybnukg4e>To</span> <span class="text-[12px] text-zinc-700" data-astro-cid-ybnukg4e>[email protected]</span> </div> <div class="flex items-center gap-2 py-2 border-b border-zinc-100" data-astro-cid-ybnukg4e> <span class="text-[11px] font-medium text-zinc-400 w-8 shrink-0" data-astro-cid-ybnukg4e>Subj</span> <span class="text-[12px] text-zinc-900 font-medium" data-astro-cid-ybnukg4e>Quick question about your eval</span> </div> <div class="flex flex-col gap-0 pt-3 pb-1" data-astro-cid-ybnukg4e> <p class="text-[12px] text-zinc-600 pb-4" data-astro-cid-ybnukg4e>Hi Marcus,</p> <p class="text-[12px] text-zinc-600" data-astro-cid-ybnukg4e>Noticed you've been exploring our pricing page. Happy to walk you through how teams like yours typically get started.</p> <p class="text-[12px] text-zinc-600 pt-2" data-astro-cid-ybnukg4e>Worth a quick chat?</p> <p class="text-[12px] text-zinc-600 pt-5" data-astro-cid-ybnukg4e>Thanks,<br data-astro-cid-ybnukg4e>Davey</p> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div class="flex gap-4 p-4 md:p-6 flex-1" data-astro-cid-rq7a7mhf> <!-- Left: Icon, Title, Description --> <div class="flex flex-col gap-4 flex-1" data-astro-cid-rq7a7mhf> <div class="flex items-center gap-2" data-astro-cid-rq7a7mhf> <svg width="24" height="24" class="shrink-0 text-violet-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M1.46783 6.05797C0.265136 4.9889 1.02132 3 2.63047 3H21.2788C22.6218 3 23.4643 4.45027 22.799 5.61691L13.6528 21.6554C12.8643 23.038 10.7893 22.7356 10.4282 21.1855L8.36566 12.3316L14.9744 8.65542C15.3364 8.45407 15.4666 7.9974 15.2653 7.63542C15.0639 7.27344 14.6072 7.14322 14.2453 7.34458
1967L7.27632 11.2211L1.46783 6.05797Z" fill="currentColor"/></svg> 1968 <span class="eyebrow text-sm text-violet-500" data-astro-cid-rq7a7mhf>Engage</span> </div> <h4 data-astro-cid-rq7a7mhf>Catch buyers while they're still deciding</h4> <p data-astro-cid-rq7a7mhf>Snitcher finds verified contacts behind every visit and feeds them straight into your sequences for perfectly timed outreach.</p> </div> <!-- Right: Arrow button aligned to bottom --> <div class="flex items-end shrink-0" data-astro-cid-rq7a7mhf> <span aria-label="Explore feature" data-arrow-direction="right" class="arrow-btn inline-flex items-center justify-center border border-zinc-200 bg-white text-zinc-700 shadow overflow-hidden font-semibold text-sm transition-colors duration-200 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 hover:bg-violet-500 hover:border-violet-500 hover:text-white w-8 h-8 md:w-10 md:h-10 rounded-full pointer-events-none group-hover/card:bg-violet-500 group-hover/card:border-violet-500 group-hover/card:text-white"><span class="arrow-btn-icon-wrap"> <svg width="16" height="16" class="arrow-btn-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.1161 5.36612C13.6043 4.87796 14.3957 4.87796 14.8839 5.36612L20.6339 11.1161C20.8683 11.3505 21 11.6685 21 12C21 12.3315 20.8683 12.6494 20.6339 12.8839L14.8839 18.6339C14.3957 19.122 13.6043 19.122 13.1161 18.6339C12.628 18.1457 12.628 17.3543 13.1161 16.8661L16.7322 13.25H4.25C3.55964 13.25 3 12.6903 3 12C3 11.3096 3.55964 10.75 4.25 10.75H16.7322L13.1161 7.13388C12.628 6.64573 12.628 5.85427 13.1161 5.36612Z" fill="currentColor"/></svg> 1969 </span> </span>
1969<script> 1970 (function() { 1971 function initArrowButtons() { 1972 document.querySelectorAll('.arrow-btn').forEach(function(button) { 1973 // Skip if already initialized 1974 if (button.dataset.arrowInit) return; 1975 button.dataset.arrowInit = 'true'; 1976 1977 var icon = button.querySelector('.arrow-btn-icon'); 1978 if (!icon) return; 1979 1980 var dir = button.dataset.arrowDirection || 'right'; 1981 var slideIn = 'slide-in-' + dir; 1982 var slideOut = 'slide-out-' + dir; 1983 1984 button.addEventListener('mouseenter', function() { 1985 icon.classList.remove(slideOut, 'slide-out'); 1986 icon.classList.add(slideIn); 1987 }); 1988 1989 button.addEventListener('mouseleave', function() { 1990 icon.classList.remove(slideIn, 'slide-in'); 1991 icon.classList.add(slideOut); 1992 }); 1993 }); 1994 } 1995 1996 // Initialize on DOM ready 1997 if (document.readyState === 'loading') { 1998 document.addEventListener('DOMContentLoaded', initArrowButtons); 1999 } else { 2000 initArrowButtons(); 2001 } 2002 2003 // Re-initialize on Astro page transitions 2004 document.addEventListener('astro:page-load', initArrowButtons); 2005 })(); 2006</script>
2006 </div> </div> </a>
2006<script> 2007 (function() { 2008 function initFeatureCards() { 2009 document.querySelectorAll('.feature-card[href]').forEach(function(card) { 2010 if (card.dataset.featureCardInit) return; 2011 card.dataset.featureCardInit = 'true'; 2012 2013 var arrowBtn = card.querySelector('.arrow-btn'); 2014 if (!arrowBtn) return; 2015 2016 var icon = arrowBtn.querySelector('.arrow-btn-icon'); 2017 if (!icon) return; 2018 2019 card.addEventListener('mouseenter', function() { 2020 icon.classList.remove('slide-out'); 2021 icon.classList.add('slide-in'); 2022 // Play any visual animations inside this card 2023 card.querySelectorAll('[data-animate-on-hover]').forEach(function(el) { 2024 el.style.animationPlayState = 'running'; 2025 }); 2026 }); 2027 2028 card.addEventListener('mouseleave', function() { 2029 icon.classList.remove('slide-in'); 2030 icon.classList.add('slide-out'); 2031 // Pause any visual animations inside this card 2032 card.querySelectorAll('[data-animate-on-hover]').forEach(function(el) { 2033 el.style.animationPlayState = 'paused'; 2034 }); 2035 }); 2036 }); 2037 } 2038 2039 if (document.readyState === 'loading') { 2040 document.addEventListener('DOMContentLoaded', initFeatureCards); 2041 } else { 2042 initFeatureCards(); 2043 } 2044 2045 document.addEventListener('astro:page-load', initFeatureCards); 2046 })(); 2047</script>
2047 <!-- Card 5: Measure --> <a class="bg-white border border-zinc-200 shadow overflow-hidden rounded-2xl feature-card p-0 overflow-hidden h-full flex flex-col transition-shadow duration-200 group/card hover:shadow-md cursor-pointer" href="/measure" data-astro-cid-rq7a7mhf> <div class="relative aspect-[4/3] shrink-0 overflow-hidden bg-gradient-to-b from-zinc-100 to-white" data-astro-cid-rq7a7mhf> <!-- Hover gradient overlay (behind visual content) --> <div class="absolute inset-0 opacity-0 group-hover/card:opacity-100 transition-opacity duration-300 z-0 bg-gradient-to-b from-coral-50 to-white" data-astro-cid-rq7a7mhf></div> <div class="absolute inset-0 z-[1] transition-opacity duration-300 group-hover/card:opacity-90" data-astro-cid-rq7a7mhf> <div class="measure-visual relative w-full h-full overflow-hidden absolute inset-0" data-measure-visual data-astro-cid-a6yjhbsd> <!-- Source pills in flex layout (prevents overlap) --> <div class="absolute inset-x-0 top-0 h-[42%] z-10 flex flex-col items-center justify-center gap-1.5 px-4" data-pills-zone data-astro-cid-a6yjhbsd> <!-- Row 1: Two pills side by side --> <div class="flex w-full justify-between gap-3" data-astro-cid-a6yjhbsd> <div class="measure-source-pill -rotate-2 min-w-0" data-measure-pill data-pill-delay="0" style="border-radius: 10px; box-shadow: 0 0 0 1px var(--alpha-border), 0 1px 3px 0 rgb(0 0 0 / 0.1);" data-astro-cid-a6yjhbsd> <svg class="shrink-0" width="12" height="12" viewBox="0 -13 256 256" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M5.888,166.405 L90.88,20.9 C101.676,27.256 156.116,57.384 164.908,63.114 L79.916,208.627 C70.621,220.907 -5.888,185.04 5.888,166.396 L5.888,166.405 Z" fill="#FBBC04"/><path d="M250.084,166.402 L165.092,20.906 C153.21,1.132 127.619,-6.054 106.601,5.625 C85.582,17.304 79.182,42.462 91.064,63.119 L176.056,208.633 C187.938,228.398 213.529,235.584 234.548,223.905 C254.648,212.226 261.966,186.176 250.084,166.419 L250.084,166.402 Z" fill="#4285F4"/><ellipse fill="#34A853" cx="42.664" cy="187.924" rx="42.664" ry="41.604"/></svg> <span class="measure-pill-label" data-astro-cid-a6yjhbsd>Brand Campaign</span> </div> <div class="measure-source-pill rotate-1 min-w-0" data-measure-pill data-pill-delay="1" style="border-radius: 10px; box-shadow: 0 0 0 1px var(--alpha-border), 0 1px 3px 0 rgb(0 0 0 / 0.1);" data-astro-cid-a6yjhbsd> <svg class="shrink-0" width="12" height="12" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" fill="#0A66C2"/></svg> <span class="measure-pill-label" data-astro-cid-a6yjhbsd>ABM Audience</span> </div> </div> <div class="measure-source-pill rotate-1" data-measure-pill data-pill-delay="2" style="border-radius: 10px; box-shadow: 0 0 0 1px var(--alpha-border), 0 1px 3px 0 rgb(0 0 0 / 0.1);" data-astro-cid-a6yjhbsd> <svg class="shrink-0" width="12" height="12" viewBox="0 -13 256 256" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M5.888,166.405 L90.88,20.9 C101.676,27.256 156.116,57.384 164.908,63.114 L79.916,208.627 C70.621,220.907 -5.888,185.04 5.888,166.396 L5.888,166.405 Z" fill="#FBBC04"/><path d="M250.084,166.402 L165.092,20.906 C153.21,1.132 127.619,-6.054 106.601,5.625 C85.582,17.304 79.182,42.462 91.064,63.119 L176.056,208.633 C187.938,228.398 213.529,235.584 234.548,223.905 C254.648,212.226 261.966,186.176 250.084,166.419 L250.084,166.402 Z" fill="#4285F4"/><ellipse fill="#34A853" cx="42.664" cy="187.924" rx="42.664" ry="41.604"/></svg> <span class="measure-pill-label" data-astro-cid-a6yjhbsd>Competitor ads</span> </div> </div> <!-- SVG connector lines (drawn dynamically by JS) --> <svg class="absolute inset-0 w-full h-full z-[5] pointer-events-none" data-connector-svg aria-hidden="true" data-astro-cid-a6yjhbsd></svg> <!-- Engagement card (bottom 58%) --> <div class="absolute inset-x-0 bottom-0 h-[58%] flex items-start justify-center px-3 pt-1" data-astro-cid-a6yjhbsd>
2047 <div class="measure-card w-full max-w-[320px] rotate-1 bg-white overflow-hidden" style="border-radius: 12px; box-shadow: 0 0 0 1px var(--alpha-border), 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);" data-astro-cid-a6yjhbsd> <!-- Identified companies label + count --> <div class="px-4 pt-3 pb-0.5" data-astro-cid-a6yjhbsd> <p class="text-[10px] font-medium text-zinc-400 mb-0" data-astro-cid-a6yjhbsd>Identified companies visited</p> <p class="text-[13px] font-semibold text-zinc-900" data-counter data-astro-cid-a6yjhbsd>2,433 companies</p> </div> <!-- SVG Area chart --> <div class="relative px-4 pt-0.5 pb-0" data-chart-area data-astro-cid-a6yjhbsd> <svg viewBox="0 0 260 72" class="w-full" preserveAspectRatio="none" style="height: 72px;" data-astro-cid-a6yjhbsd> <defs data-astro-cid-a6yjhbsd> <linearGradient id="measure-fill" x1="0" x2="0" y1="0" y2="1" data-astro-cid-a6yjhbsd> <stop offset="0%" stop-color="rgb(99, 102, 241)" stop-opacity="0.18" data-astro-cid-a6yjhbsd></stop> <stop offset="100%" stop-color="rgb(99, 102, 241)" stop-opacity="0.01" data-astro-cid-a6yjhbsd></stop> </linearGradient> </defs> <path d="M0,30.365758754863815 C7.222222222222221,32.878728923476004 28.888888888888886,42.04604409857328 43.33333333333333,45.44357976653696 C57.77777777777777,48.841115434500644 72.22222222222221,55.45525291828794 86.66666666666666,50.750972762645915 C101.1111111111111,46.04669260700389 115.55555555555556,22.163424124513618 130,17.217898832684824 C144.44444444444446,12.27237354085603 158.88888888888886,22.00259403372244 173.33333333333331,21.07782101167315 C187.77777777777777,20.153047989623865 202.22222222222223,14.182230869001298 216.66666666666669,11.669260700389106 C231.11111111111114,9.156290531776914 252.77777777777777,6.944876783398184 260,6 L260,72 L0,72 Z" fill="url(#measure-fill)" data-astro-cid-a6yjhbsd></path> <path d="M0,30.365758754863815 C7.222222222222221,32.878728923476004 28.888888888888886,42.04604409857328 43.33333333333333,45.44357976653696 C57.77777777777777,48.841115434500644 72.22222222222221,55.45525291828794 86.66666666666666,50.750972762645915 C101.1111111111111,46.04669260700389 115.55555555555556,22.163424124513618 130,17.217898832684824 C144.44444444444446,12.27237354085603 158.88888888888886,22.00259403372244 173.33333333333331,21.07782101167315 C187.77777777777777,20.153047989623865 202.22222222222223,14.182230869001298 216.66666666666669,11.669260700389106 C231.11111111111114,9.156290531776914 252.77777777777777,6.944876783398184 260,6" fill="none" stroke="rgb(99, 102, 241)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-a6yjhbsd></path> </svg> <!-- X-axis labels --> <div class="flex justify-between mt-0.5 pb-2" data-astro-cid-a6yjhbsd> <span class="text-[8px] text-zinc-400 font-medium" data-astro-cid-a6yjhbsd>Fri</span><span class="text-[8px] text-zinc-400 font-medium" data-astro-cid-a6yjhbsd>Sat</span><span class="text-[8px] text-zinc-400 font-medium" data-astro-cid-a6yjhbsd>Sun</span><span class="text-[8px] text-zinc-400 font-medium" data-astro-cid-a6yjhbsd>Mon</span><span class="text-[8px] text-zinc-400 font-medium" data-astro-cid-a6yjhbsd>Tue</span><span class="text-[8px] text-zinc-400 font-medium" data-astro-cid-a6yjhbsd>Wed</span><span class="text-[8px] text-zinc-400 font-medium" data-astro-cid-a6yjhbsd>Yesterday</span> </div> </div> </div> </div> </div>
2047<script> 2048 (function() { 2049 var PALATINATE = '#4c4cff'; 2050 var ZINC = '#d4d4d8'; 2051 2052 function init() { 2053 var visual = document.querySelector('[data-measure-visual]'); 2054 if (!visual || visual.dataset.measureInit) return; 2055 visual.dataset.measureInit = 'true'; 2056 2057 var pills = visual.querySelectorAll('[data-measure-pill]'); 2058 var svg = visual.querySelector('[data-connector-svg]'); 2059 var card = visual.querySelector('.measure-card'); 2060 var counterEl = visual.querySelector('[data-counter]'); 2061 var featureCard = visual.closest('.feature-card'); 2062 var timeouts = []; 2063 var connectorData = []; 2064 var state = 'idle'; // 'idle' | 'hovering' | 'returning' 2065 var returnStart = 0; 2066 var baseCount = 0; 2067 var additionalCount = 0; 2068 2069 // Parse base count from DOM 2070 if (counterEl) { 2071 baseCount = parseInt(counterEl.textContent.replace(/[^\d]/g, ''), 10) || 0; 2072 } 2073 2074 // Compute a cubic Bézier path d from a pill to the card top-center 2075 function buildPathD(pill) { 2076 var vRect = visual.getBoundingClientRect(); 2077 var cRect = card.getBoundingClientRect(); 2078 var tx = cRect.left + cRect.width / 2 - vRect.left; 2079 var ty = cRect.top - vRect.top; 2080 var pRect = pill.getBoundingClientRect(); 2081 var px = pRect.left + pRect.width / 2 - vRect.left; 2082 var py = pRect.bottom - vRect.top + 2; 2083 var midY = (py + ty) / 2; 2084 return 'M' + px.toFixed(1) + ',' + py.toFixed(1) + 2085 ' C' + px.toFixed(1) + ',' + midY.toFixed(1) + 2086 ' ' + tx.toFixed(1) + ',' + midY.toFixed(1) + 2087 ' ' + tx.toFixed(1) + ',' + ty.toFixed(1); 2088 } 2089 2090 function drawConnectors() { 2091 if (!svg || !card || !pills.length) return; 2092 var vRect = visual.getBoundingClientRect(); 2093 svg.setAttribute('viewBox', '0 0 ' + vRect.width + ' ' + vRect.height); 2094 2095 while (svg.firstChild) svg.removeChild(svg.firstChild); 2096 connectorData = []; 2097 2098 pills.forEach(function(pill) { 2099 var d = buildPathD(pill); 2100 2101 // Connector line â dashed zinc by default 2102 var path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); 2103 path.setAttribute('d', d); 2104 path.setAttribute('fill', 'none'); 2105 path.setAttribute('stroke-width', '1.5'); 2106 path.setAttribute('stroke-linecap', 'round'); 2107 path.style.stroke = ZINC; 2108 path.style.strokeDasharray = '4 4'; 2109 path.style.opacity = '0'; 2110 path.style.transition = 'opacity 0.5s ease, stroke 0.3s ease'; 2111 svg.appendChild(path); 2112 2113 // Traveling dot (hidden until hover) 2114 var dot = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); 2115 dot.setAttribute('r', '3.5'); 2116 dot.setAttribute('fill', PALATINATE); 2117 dot.style.opacity = '0'; 2118 svg.appendChild(dot); 2119 2120 connectorData.push({ path: path, dot: dot, pill: pill, startTime: null, prevCycle: 0 }); 2121 }); 2122 2123 // Fade in 2124 requestAnimationFrame(function() { 2125 requestAnimationFrame(function() { 2126 connectorData.forEach(function(c) { c.path.style.opacity = '1'; }); 2127 }); 2128 }); 2129 } 2130 2131 function updateCounter() { 2132 if (!counterEl) return; 2133 var total = baseCount + additionalCount; 2134 counterEl.textContent = total.toLocaleString('en-US') + ' companies'; 2135 } 2136 2137 // Unified animation loop for hover + return 2138 function loop(timestamp) { 2139 if (state === 'idle') return; 2140 2141 var vRect = visual.getBoundingClientRect(); 2142 svg.setAttribute('viewBox', '0 0 ' + vRect.width + ' ' + vRect.height); 2143 2144 // Always recalculate paths to follow pill movement 2145 connectorData.forEach(function(c, i) { 2146 c.path.setAttribute('d', buildPathD(c.pill)); 2147 2148 if (state === 'hovering') { 2149 // Animate dot along path 2150 if (!c.startTime) c.startTime = timestamp; 2151 var elapsed = timestamp - c.startTime; 2152 var duration = 1400 + i * 200; 2153 var currentCycle = Math.floor(elapsed / duration); 2154 var progress = (elapsed % duration) / duration; 2155 2156 var length = c.path.getTotalLength(); 2157 var point = c.path.getPointAtLength(progress * length); 2158 c.dot.setAttribute('cx', point.x.toFixed(1)); 2159 c.dot.setAttribute('cy', point.y.toFixed(1)); 2160 2161 // Fade in at start, fade out at end 2162 var fade = 0.12; 2163 var dotOpacity = progress < fade ? progress / fade 2164 : progress > 1 - fade ? (1 - progress) / fade 2165 : 1; 2166 c.dot.style.opacity = dotOpacity.toFixed(2); 2167 2168 // Counter increment on each dot arrival 2169 if (currentCycle > c.prevCycle) { 2170 c.prevCycle = currentCycle; 2171 additionalCount++; 2172 updateCounter(); 2173 } 2174 } 2175 }); 2176 2177 // Stop returning after pill transition completes (~400ms) 2178 if (state === 'returning' && timestamp - returnStart > 450) { 2179 state = 'idle'; 2180 return; 2181 } 2182 2183 requestAnimationFrame(loop); 2184 } 2185 2186 function startHover() { 2187 visual.setAttribute('data-hovering', ''); 2188 2189 // Switch lines: dashed zinc â solid palatinate 2190 connectorData.forEach(function(c) { 2191 c.path.style.stroke = PALATINATE; 2192 c.path.style.strokeDasharray = 'none'; 2193 c.startTime = null; 2194 c.prevCycle = 0; 2195 }); 2196 2197 additionalCount = 0; 2198 updateCounter(); 2199 state = 'hovering'; 2200 requestAnimationFrame(loop); 2201 } 2202 2203 function stopHover() { 2204 visual.removeAttribute('data-hovering'); 2205 2206 // Switch lines back: solid palatinate â dashed zinc 2207 connectorData.forEach(function(c) { 2208 c.dot.style.opacity = '0'; 2209 c.path.style.stroke = ZINC; 2210 c.path.style.strokeDasharray = '4 4'; 2211 c.startTime = null; 2212 c.prevCycle = 0; 2213 }); 2214 2215 additionalCount = 0; 2216 updateCounter(); 2217 2218 // Keep updating paths while pills transition back 2219 state = 'returning'; 2220 returnStart = performance.now(); 2221 requestAnimationFrame(loop); 2222 } 2223 2224 if (featureCard) { 2225 featureCard.addEventListener('mouseenter', startHover); 2226 featureCard.addEventListener('mouseleave', stopHover); 2227 } 2228 2229 var observer = new IntersectionObserver(function(entries) {
2230 entries.forEach(function(entry) { 2231 if (!entry.isIntersecting) return; 2232 2233 pills.forEach(function(pill) { 2234 var delay = parseInt(pill.dataset.pillDelay || '0', 10); 2235 timeouts.push(setTimeout(function() { 2236 pill.classList.add('visible'); 2237 }, 200 + delay * 200)); 2238 }); 2239 2240 timeouts.push(setTimeout(drawConnectors, 1100)); 2241 observer.unobserve(entry.target); 2242 }); 2243 }, { threshold: 0.3 }); 2244 2245 observer.observe(visual); 2246 } 2247 2248 function cleanup() { 2249 var visual = document.querySelector('[data-measure-visual]'); 2250 if (visual) delete visual.dataset.measureInit; 2251 } 2252 2253 if (document.readyState === 'loading') { 2254 document.addEventListener('DOMContentLoaded', init); 2255 } else { 2256 init(); 2257 } 2258 2259 document.addEventListener('astro:before-swap', cleanup); 2260 document.addEventListener('astro:page-load', init); 2261 })(); 2262</script>
2262 </div> </div> <div class="flex gap-4 p-4 md:p-6 flex-1" data-astro-cid-rq7a7mhf> <!-- Left: Icon, Title, Description --> <div class="flex flex-col gap-4 flex-1" data-astro-cid-rq7a7mhf> <div class="flex items-center gap-2" data-astro-cid-rq7a7mhf> <svg width="24" height="24" class="shrink-0 text-coral-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.75 3C4.16421 3 4.5 3.33579 4.5 3.75V15.3456L7.60248 12.2431C8.60731 11.2383 10.2364 11.2383 11.2413 12.2431C11.6603 12.6621 12.3397 12.6621 12.7587 12.2431L15.2117 9.79013C16.2856 8.71619 18.0269 8.71619 19.1008 9.79013L19.7491 10.4384C20.042 10.7313 20.042 11.2062 19.7491 11.4991C19.4562 11.792 18.9813 11.792 18.6884 11.4991L18.0401 10.8508C17.552 10.3626 16.7605 10.3626 16.2724 10.8508L13.8194 13.3038C12.8146 14.3086 11.1854 14.3086 10.1806 13.3038C9.76157 12.8847 9.08218 12.8847 8.66314 13.3038L4.5 17.4669V18.25C4.5 18.9404 5.05964 19.5 5.75 19.5H20.25C20.6642 19.5 21 19.8358 21 20.25C21 20.6642 20.6642 21 20.25 21H5.75C4.23122 21 3 19.7688 3 18.25V3.75C3 3.33579 3.33579 3 3.75 3Z" fill="currentColor"/></svg> 2263 <span class="eyebrow text-sm text-coral-500" data-astro-cid-rq7a7mhf>Measure</span> </div> <h4 data-astro-cid-rq7a7mhf>See what's working before it's too late</h4> <p data-astro-cid-rq7a7mhf>Snitcher ties every visit, signal and play to outcomes so you can prove what's working and double down with data, not hunches.</p> </div> <!-- Right: Arrow button aligned to bottom --> <div class="flex items-end shrink-0" data-astro-cid-rq7a7mhf> <span aria-label="Explore feature" data-arrow-direction="right" class="arrow-btn inline-flex items-center justify-center border border-zinc-200 bg-white text-zinc-700 shadow overflow-hidden font-semibold text-sm transition-colors duration-200 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 hover:bg-coral-500 hover:border-coral-500 hover:text-white w-8 h-8 md:w-10 md:h-10 rounded-full pointer-events-none group-hover/card:bg-coral-500 group-hover/card:border-coral-500 group-hover/card:text-white"><span class="arrow-btn-icon-wrap"> <svg width="16" height="16" class="arrow-btn-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.1161 5.36612C13.6043 4.87796 14.3957 4.87796 14.8839 5.36612L20.6339 11.1161C20.8683 11.3505 21 11.6685 21 12C21 12.3315 20.8683 12.6494 20.6339 12.8839L14.8839 18.6339C14.3957 19.122 13.6043 19.122 13.1161 18.6339C12.628 18.1457 12.628 17.3543 13.1161 16.8661L16.7322 13.25H4.25C3.55964 13.25 3 12.6903 3 12C3 11.3096 3.55964 10.75 4.25 10.75H16.7322L13.1161 7.13388C12.628 6.64573 12.628 5.85427 13.1161 5.36612Z" fill="currentColor"/></svg> 2264 </span> </span>
2264<script> 2265 (function() { 2266 function initArrowButtons() { 2267 document.querySelectorAll('.arrow-btn').forEach(function(button) { 2268 // Skip if already initialized 2269 if (button.dataset.arrowInit) return; 2270 button.dataset.arrowInit = 'true'; 2271 2272 var icon = button.querySelector('.arrow-btn-icon'); 2273 if (!icon) return; 2274 2275 var dir = button.dataset.arrowDirection || 'right'; 2276 var slideIn = 'slide-in-' + dir; 2277 var slideOut = 'slide-out-' + dir; 2278 2279 button.addEventListener('mouseenter', function() { 2280 icon.classList.remove(slideOut, 'slide-out'); 2281 icon.classList.add(slideIn); 2282 }); 2283 2284 button.addEventListener('mouseleave', function() { 2285 icon.classList.remove(slideIn, 'slide-in'); 2286 icon.classList.add(slideOut); 2287 }); 2288 }); 2289 } 2290 2291 // Initialize on DOM ready 2292 if (document.readyState === 'loading') { 2293 document.addEventListener('DOMContentLoaded', initArrowButtons); 2294 } else { 2295 initArrowButtons(); 2296 } 2297 2298 // Re-initialize on Astro page transitions 2299 document.addEventListener('astro:page-load', initArrowButtons); 2300 })(); 2301</script>
2301 </div> </div> </a>
2301<script> 2302 (function() { 2303 function initFeatureCards() { 2304 document.querySelectorAll('.feature-card[href]').forEach(function(card) { 2305 if (card.dataset.featureCardInit) return; 2306 card.dataset.featureCardInit = 'true'; 2307 2308 var arrowBtn = card.querySelector('.arrow-btn'); 2309 if (!arrowBtn) return; 2310 2311 var icon = arrowBtn.querySelector('.arrow-btn-icon'); 2312 if (!icon) return; 2313 2314 card.addEventListener('mouseenter', function() { 2315 icon.classList.remove('slide-out'); 2316 icon.classList.add('slide-in'); 2317 // Play any visual animations inside this card 2318 card.querySelectorAll('[data-animate-on-hover]').forEach(function(el) { 2319 el.style.animationPlayState = 'running'; 2320 }); 2321 }); 2322 2323 card.addEventListener('mouseleave', function() { 2324 icon.classList.remove('slide-in'); 2325 icon.classList.add('slide-out'); 2326 // Pause any visual animations inside this card 2327 card.querySelectorAll('[data-animate-on-hover]').forEach(function(el) { 2328 el.style.animationPlayState = 'paused'; 2329 }); 2330 }); 2331 }); 2332 } 2333 2334 if (document.readyState === 'loading') { 2335 document.addEventListener('DOMContentLoaded', initFeatureCards); 2336 } else { 2337 initFeatureCards(); 2338 } 2339 2340 document.addEventListener('astro:page-load', initFeatureCards); 2341 })(); 2342</script>
2342 </div> </div> </section> <section class="page-section bg-zinc-50" data-variant="light" id="testimonial" data-astro-cid-dnku4hyr> <div class="section-container bg-white !p-0" data-astro-cid-dnku4hyr> <!-- Corner decorations --> <!-- Content --> <section class="testimonial-section relative overflow-hidden flex items-center justify-center px-6 sm:px-10 py-8 md:py-10 bg-palatinate-100" data-testimonial-section data-variant="light" data-carousel="true" data-interval="6000" id="testimonial-section-7bg0ibq" style="--ts-dot-inactive:rgba(63,63,70,0.25);--ts-dot-inactive-hover:rgba(63,63,70,0.5);--ts-dot-active:var(--color-palatinate-600, #3e3ee6);--ts-dot-focus:var(--color-palatinate-500, #4c4cff);" data-astro-cid-7ajslof7> <!-- Wavy lines decorative background --> <!-- Bordered card (border applied via variant; particles is borderless) --> <div class="relative w-full max-w-[1340px] bg-transparent md:min-h-[496px]" data-astro-cid-7ajslof7> <div class="relative overflow-hidden flex flex-col items-center justify-center h-full px-6 sm:px-10 md:px-20 py-12 md:py-16 md:min-h-[496px]" data-astro-cid-7ajslof7> <!-- Soft radial glow behind quote --> <div class="pointer-events-none absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-[120%] max-w-[1400px] aspect-[1200/449]" aria-hidden="true" style="background: radial-gradient(ellipse at center, rgba(255,255,255,0.85) 0%, rgba(255,255,255,0.5) 35%, rgba(255,255,255,0) 70%);" data-astro-cid-7ajslof7></div> <!-- Slides (grid stack so the container sizes to the tallest) --> <div class="testimonial-section__slides relative grid w-full place-items-center" role="region" aria-roledescription="carousel" aria-label="Customer testimonials" data-astro-cid-7ajslof7> <article class="testimonial-section__slide is-active" data-slide-index="0" role="group" aria-roledescription="slide" aria-label="1 of 4" data-astro-cid-7ajslof7> <div class="flex flex-col items-center justify-center gap-4 text-center h-full" data-astro-cid-7ajslof7> <div class="size-12 rounded-xl overflow-hidden bg-palatinate-100" data-astro-cid-7ajslof7> <img src="/_astro/hs-charles-tenot.DRPQ8ha-_6c6i2.webp" alt="Charles Tenot" class="size-12 rounded-xl object-cover" loading="lazy" decoding="auto" data-astro-cid-7ajslof7 width="200" height="200"> </div> <div class="flex flex-col items-center gap-8 max-w-[1080px]" data-astro-cid-7ajslof7> <h2 class="font-display font-semibold text-3xl md:text-5xl leading-[1.15] tracking-tight text-balance text-zinc-800" data-astro-cid-7ajslof7> 2343“Snitcher is simply the best company-level website visitor identification provider on the market.” 2344</h2> <div class="flex flex-wrap items-center justify-center gap-4" data-astro-cid-7ajslof7> <div class="flex h-6 items-center pr-4 border-r border-zinc-200" data-astro-cid-7ajslof7> <img src="/logos/main/lemlist.svg" alt="lemlist logo" class="h-full w-auto object-contain" loading="lazy" decoding="auto" data-astro-cid-7ajslof7> </div> <div class="flex items-center gap-1" data-astro-cid-7ajslof7> <span class="text-sm font-semibold leading-none text-zinc-800" data-astro-cid-7ajslof7>Charles Tenot</span> <span class="text-xs leading-4 text-zinc-500/50" aria-hidden="true" data-astro-cid-7ajslof7>â</span> <span class="text-sm leading-4 text-zinc-500" data-astro-cid-7ajslof7>Chief Operating Officer</span> </div> </div> </div> </div> </article><article class="testimonial-section__slide" data-slide-index="1" role="group" aria-roledescription="slide" aria-label="2 of 4" aria-hidden="true" data-astro-cid-7ajslof7> <div class="flex flex-col items-center justify-center gap-4 text-center h-full" data-astro-cid-7ajslof7> <div class="size-12 rounded-xl overflow-hidden bg-lavender-100" data-astro-cid-7ajslof7> <img src="/_astro/hs-praveen-das.DecM-5nI_ZFFo9l.webp" alt="Praveen Das" class="size-12 rounded-xl object-cover" loading="lazy" decoding="auto" data-astro-cid-7ajslof7 width="200" height="200"> </div> <div class="flex flex-col items-center gap-8 max-w-[1080px]" data-astro-cid-7ajslof7> <h2 class="font-display font-semibold text-3xl md:text-5xl leading-[1.15] tracking-tight text-balance text-zinc-800" data-astro-cid-7ajslof7> 2345“We tested multiple providers and none of them came close to Snitcher's identification rates.” 2346</h2> <div class="flex flex-wrap items-center justify-center gap-4" data-astro-cid-7ajslof7> <div class="flex h-6 items-center pr-4 border-r border-zinc-200" data-astro-cid-7ajslof7> <img src="/logos/main/factorsai.svg" alt="Factors.ai logo" class="h-full w-auto object-contain" loading="lazy" decoding="auto" data-astro-cid-7ajslof7> </div> <div class="flex items-center gap-1" data-astro-cid-7ajslof7> <span class="text-sm font-semibold leading-none text-zinc-800" data-astro-cid-7ajslof7>Praveen Das</span> <span class="text-xs leading-4 text-zinc-500/50" aria-hidden="true" data-astro-cid-7ajslof7>â</span> <span class="text-sm leading-4 text-zinc-500" data-astro-cid-7ajslof7>Co-founder</span> </div> </div> </div> </div> </article>
2346<article class="testimonial-section__slide" data-slide-index="2" role="group" aria-roledescription="slide" aria-label="3 of 4" aria-hidden="true" data-astro-cid-7ajslof7> <div class="flex flex-col items-center justify-center gap-4 text-center h-full" data-astro-cid-7ajslof7> <div class="size-12 rounded-xl overflow-hidden bg-jade-100" data-astro-cid-7ajslof7> <img src="/_astro/hs-wouter-van-hofwegen.BzJoLhj1_ZblwQI.webp" alt="Wouter van Hofwegen" class="size-12 rounded-xl object-cover" loading="lazy" decoding="auto" data-astro-cid-7ajslof7 width="200" height="200"> </div> <div class="flex flex-col items-center gap-8 max-w-[1080px]" data-astro-cid-7ajslof7> <h2 class="font-display font-semibold text-3xl md:text-5xl leading-[1.15] tracking-tight text-balance text-zinc-800" data-astro-cid-7ajslof7> 2347“We chose Snitcher because better data up front means better results downstream.” 2348</h2> <div class="flex flex-wrap items-center justify-center gap-4" data-astro-cid-7ajslof7> <div class="flex h-6 items-center pr-4 border-r border-zinc-200" data-astro-cid-7ajslof7> <img src="/logos/main/mapiq.svg" alt="Mapiq logo" class="h-full w-auto object-contain" loading="lazy" decoding="auto" data-astro-cid-7ajslof7> </div> <div class="flex items-center gap-1" data-astro-cid-7ajslof7> <span class="text-sm font-semibold leading-none text-zinc-800" data-astro-cid-7ajslof7>Wouter van Hofwegen</span> <span class="text-xs leading-4 text-zinc-500/50" aria-hidden="true" data-astro-cid-7ajslof7>â</span> <span class="text-sm leading-4 text-zinc-500" data-astro-cid-7ajslof7>Head of Global Sales</span> </div> </div> </div> </div> </article><article class="testimonial-section__slide" data-slide-index="3" role="group" aria-roledescription="slide" aria-label="4 of 4" aria-hidden="true" data-astro-cid-7ajslof7> <div class="flex flex-col items-center justify-center gap-4 text-center h-full" data-astro-cid-7ajslof7> <div class="size-12 rounded-xl overflow-hidden bg-palatinate-100" data-astro-cid-7ajslof7> <img src="/_astro/hs-rhea-sanger.D95Msm8E_pJmOn.webp" alt="Rhea Sanger" class="size-12 rounded-xl object-cover" loading="lazy" decoding="auto" data-astro-cid-7ajslof7 width="200" height="200"> </div> <div class="flex flex-col items-center gap-8 max-w-[1080px]" data-astro-cid-7ajslof7> <h2 class="font-display font-semibold text-3xl md:text-5xl leading-[1.15] tracking-tight text-balance text-zinc-800" data-astro-cid-7ajslof7> 2349“Snitcher improved our website visitor match rate, enabling us to be a market leader in website intent.” 2350</h2> <div class="flex flex-wrap items-center justify-center gap-4" data-astro-cid-7ajslof7> <div class="flex h-6 items-center pr-4 border-r border-zinc-200" data-astro-cid-7ajslof7> <img src="/logos/main/unify.svg" alt="Unify logo" class="h-full w-auto object-contain" loading="lazy" decoding="auto" data-astro-cid-7ajslof7> </div> <div class="flex items-center gap-1" data-astro-cid-7ajslof7> <span class="text-sm font-semibold leading-none text-zinc-800" data-astro-cid-7ajslof7>Rhea Sanger</span> <span class="text-xs leading-4 text-zinc-500/50" aria-hidden="true" data-astro-cid-7ajslof7>â</span> <span class="text-sm leading-4 text-zinc-500" data-astro-cid-7ajslof7>Growth Lead</span> </div> </div> </div> </div> </article> </div> <!-- Dots --> <div class="testimonial-section__dots relative z-10 mt-8 flex items-center justify-center gap-2" role="tablist" aria-label="Select testimonial" data-astro-cid-7ajslof7> <button type="button" class="testimonial-section__dot is-active" data-dot-index="0" role="tab" tabindex="0" aria-selected="true" aria-label="Show testimonial 1: Charles Tenot" data-astro-cid-7ajslof7></button><button type="button" class="testimonial-section__dot" data-dot-index="1" role="tab" tabindex="-1" aria-selected="false" aria-label="Show testimonial 2: Praveen Das" data-astro-cid-7ajslof7></button><button type="button" class="testimonial-section__dot" data-dot-index="2" role="tab" tabindex="-1" aria-selected="false" aria-label="Show testimonial 3: Wouter van Hofwegen" data-astro-cid-7ajslof7></button><button type="button" class="testimonial-section__dot" data-dot-index="3" role="tab" tabindex="-1" aria-selected="false" aria-label="Show testimonial 4: Rhea Sanger" data-astro-cid-7ajslof7></button> </div> <!-- Optional slot for extra content below the testimonial (e.g. CTA) --> </div> </div> </section> <!-- Global rules: the TestimonialSection sits CONTAINED inside the standard 2351 PageSection box (side borders + corner pseudos stay visible â same 2352 visual language as every other section on the page). We: 2353 - zero the section-container's vertical padding so the testimonial's 2354 own padding governs spacing (no double-padding); horizontal padding 2355 is preserved so the side borders + corner pseudos keep their gutter 2356 - paint the page-section bg (the bleed) with the variant's colour so 2357 purple content isn't surrounded by grey --> <!-- Dot styles are GLOBAL so other components (e.g. the careers photo carousel) 2358 can reuse the exact same selectors + active state without redefining. The 2359 --ts-dot-* variables are inherited from any ancestor [data-testimonial-section] 2360 so colour palette follows the variant automatically. --> </div> </section> <section class="page-section" data-variant="light" id="trusted" data-astro-cid-dnku4hyr> <div class="section-container" data-astro-cid-dnku4hyr> <!-- Corner decorations --> <!-- Content --> <div class="w-full"> <div class="mb-12 text-center"> <h2 class="mb-4 max-w-3xl mx-auto text-balance">Trusted by GTM teams everywhere</h2> <p class="text-lg max-w-2xl mx-auto">
2361From early-stage to enterprise, Snitcher powers the infrastructure behind teams that 2362 act on intent in real time. 2363</p> </div> <div class="bg-white border border-zinc-200 shadow overflow-hidden rounded-2xl p-0 shadow-md overflow-hidden border-zinc-200"> <div class="flex flex-col gap-px bg-zinc-200"> <div class="grid gap-px grid-cols-2 md:grid-cols-4 bg-zinc-200"> <div class="bg-white flex items-center justify-center aspect-video md:aspect-auto"> <div class="flex flex-col items-center justify-center gap-1 px-5 py-5"><img src="/logos/main/clay.svg" alt="Clay" class="block h-6 w-20" loading="lazy" decoding="auto"></div> </div> <div class="bg-white flex items-center justify-center aspect-video md:aspect-auto"> <div class="flex flex-col items-center justify-center gap-1 px-5 py-5"><img src="/logos/main/unify.svg" alt="Unify" class="block h-[var(--lh)] w-auto" loading="lazy" decoding="auto" style="--lh:27px"></div> </div> <div class="bg-white col-span-2"> <figure class="not-prose h-full rounded-2xl p-6 flex flex-col bg-white border-0 shadow-none rounded-none"> <!-- Testimonial Text --> <div class="text-lg"> We tested multiple providers and none of them came close to Snitcher's identification rates. </div> <!-- Bottom Section: Logo and Author Info --> <div class="flex items-center justify-between gap-4 mt-auto pt-6"> <!-- Company Logo (left) --> <div class="flex items-center"> <img src="/logos/main/factorsai.svg" alt="" class="h-6 w-auto object-contain" loading="lazy" decoding="auto"> </div> <!-- Author Info (right) --> <div class="flex items-center gap-3 ml-auto"> <div class="flex flex-col items-end"> <span class="font-semibold text-base text-zinc-900"> Praveen Das </span> <span class="text-sm"> Co-founder </span> </div> <img src="/_astro/praveen-das.DvAJcfXj_Z1RvHSY.webp" alt="Praveen Das" class="w-12 h-12 rounded-full object-cover flex-shrink-0" loading="lazy" decoding="auto" width="96" height="96"> </div> </div> </figure> </div> </div> <div class="grid gap-px grid-cols-2 md:grid-cols-4 bg-zinc-200"> <div class="bg-white h-full"> <div class="bg-zinc-50 p-6 stat-block h-full"> <!-- Stat --> <div class="font-display font-semibold text-h3 text-zinc-900 mb-2 stat-value" data-stat="9x"> 9x </div> <!-- Metric --> <div class="font-medium text-base"> ROI on signals </div> <!-- Logo section (optional) --> <div class="flex items-center gap-2 mt-6"> <img src="/logos/main/gadget.svg" alt="" class="h-5 w-auto object-contain" loading="lazy" decoding="auto"> </div> </div> </div> <div class="bg-white h-full"> <div class="bg-zinc-50 p-6 stat-block h-full"> <!-- Stat --> <div class="font-display font-semibold text-h3 text-zinc-900 mb-2 stat-value" data-stat="12h"> 12h </div> <!-- Metric --> <div class="font-medium text-base"> saved per week </div> <!-- Logo section (optional) --> <div class="flex items-center gap-2 mt-6"> <img src="/logos/main/seam.svg" alt="" class="h-5 w-auto object-contain" loading="lazy" decoding="auto"> </div> </div> </div> <div class="bg-white h-full"> <div class="bg-zinc-50 p-6 stat-block h-full"> <!-- Stat --> <div class="font-display font-semibold text-h3 text-zinc-900 mb-2 stat-value" data-stat="+35%"> +35% </div> <!-- Metric --> <div class="font-medium text-base"> marketing ROI </div> <!-- Logo section (optional) --> <div class="flex items-center gap-2 mt-6"> <img src="/logos/main/hyperline.svg" alt="" class="h-5 w-auto object-contain" loading="lazy" decoding="auto"> </div> </div> </div> <div class="bg-white h-full"> <div class="bg-zinc-50 p-6 stat-block h-full"> <!-- Stat --> <div class="font-display font-semibold text-h3 text-zinc-900 mb-2 stat-value" data-stat="+78%"> +78% </div> <!-- Metric --> <div class="font-medium text-base"> coverage </div> <!-- Logo section (optional) --> <div class="flex items-center gap-2 mt-6"> <img src="/logos/main/allium.png" alt="" class="h-5 w-auto object-contain" loading="lazy" decoding="auto"> </div> </div> </div> </div> <div class="grid gap-px grid-cols-2 md:grid-cols-4 bg-zinc-200"> <div class="bg-white col-span-2"> <figure class="not-prose h-full rounded-2xl p-6 flex flex-col bg-white border-0 shadow-none rounded-none"> <!-- Testimonial Text --> <div class="text-lg"> We chose Snitcher because better data up front means better results downstream. </div> <!-- Bottom Section: Logo and Author Info --> <div class="flex items-center justify-between gap-4 mt-auto pt-6"> <!-- Company Logo (left) --> <div class="flex items-center"> <img src="/logos/main/mapiq.svg" alt="" class="h-6 w-auto object-contain" loading="lazy" decoding="auto"> </div> <!-- Author Info (right) --> <div class="flex items-center gap-3 ml-auto"> <div class="flex flex-col items-end"> <span class="font-semibold text-base text-zinc-900"> Wouter van Hofwegen </span> <span class="text-sm"> Head of Global Sales </span> </div> <img src="/_astro/[email protected]_5A6HF.webp" alt="Wouter van Hofwegen" class="w-12 h-12 rounded-full object-cover flex-shrink-0" loading="lazy" decoding="auto" width="96" height="96"> </div> </div> </figure> </div> <div class="bg-white flex items-center justify-center aspect-video md:aspect-auto"> <div class="flex flex-col items-center justify-center gap-1 px-5 py-5"><img src="/logos/main/lemlist.svg" alt="Lemlist" class="block h-[var(--lh)] w-auto" loading="lazy" decoding="auto" style="--lh:23px"></div> </div> <div class="bg-white flex items-center justify-center aspect-video md:aspect-auto"> <div class="flex flex-col items-center justify-center gap-1 px-5 py-5"><img src="/logos/main/customeros.png" alt="CustomerOS" class="block h-[var(--lh)] w-auto" loading="lazy" decoding="auto" style="--lh:24px"></div> </div> </div> </div> </div> </div> </div> </section> <section class="page-section bg-zinc-50" data-variant="light" data-astro-cid-dnku4hyr> <div class="section-container bg-white" data-astro-cid-dnku4hyr> <!-- Corner decorations --> <!-- Content --> <div class="-mx-4 -my-8 sm:-mx-6 sm:-my-12 lg:-mx-16 lg:-my-16"> <div class="grid lg:grid-cols-2 lg:grid-rows-3 gap-px bg-zinc-200/50"> <!-- Left: Title + Description spanning all 3 rows --> <div class="bg-white p-8 lg:px-12 lg:py-24 lg:row-span-3 flex flex-col justify-center"> <h2 class="mb-6 text-balance"> 2364Grow your business with Snitcher 2365</h2> <p class="text-lg text-zinc-900"> 2366Manage client accounts, deliver implementations or make introductions while earning commission on every client you refer. 2367</p> <div class="flex flex-col sm:flex-row gap-3 mt-8"> <a href="/partners" class="inline-flex items-center justify-center gap-2 px-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-white ring-1 ring-[var(--alpha-border)] !text-zinc-700 hover:bg-zinc-50">Explore program</a>
2367<script> 2368 (function() { 2369 function initButtonArrows() { 2370 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 2371 if (button.dataset.btnArrowInit) return; 2372 button.dataset.btnArrowInit = 'true'; 2373 2374 var icon = button.querySelector('.btn-arrow-icon'); 2375 if (!icon) return; 2376 2377 button.addEventListener('mouseenter', function() { 2378 icon.classList.remove('slide-out'); 2379 icon.classList.add('slide-in'); 2380 }); 2381 2382 button.addEventListener('mouseleave', function() { 2383 icon.classList.remove('slide-in'); 2384 icon.classList.add('slide-out'); 2385 }); 2386 }); 2387 } 2388 2389 if (document.readyState === 'loading') { 2390 document.addEventListener('DOMContentLoaded', initButtonArrows); 2391 } else { 2392 initButtonArrows(); 2393 } 2394 2395 document.addEventListener('astro:page-load', initButtonArrows); 2396 })(); 2397</script>
2397 <a href="/partners" class="inline-flex items-center justify-center gap-2 px-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-zinc-900 !text-white hover:bg-zinc-700 btn-with-arrow">Become a partner<span class="btn-arrow-wrap"><svg width="20" height="20" class="btn-arrow-icon !text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.1161 5.36612C13.6043 4.87796 14.3957 4.87796 14.8839 5.36612L20.6339 11.1161C20.8683 11.3505 21 11.6685 21 12C21 12.3315 20.8683 12.6494 20.6339 12.8839L14.8839 18.6339C14.3957 19.122 13.6043 19.122 13.1161 18.6339C12.628 18.1457 12.628 17.3543 13.1161 16.8661L16.7322 13.25H4.25C3.55964 13.25 3 12.6903 3 12C3 11.3096 3.55964 10.75 4.25 10.75H16.7322L13.1161 7.13388C12.628 6.64573 12.628 5.85427 13.1161 5.36612Z" fill="currentColor"/></svg> 2398</span></a>
2398<script> 2399 (function() { 2400 function initButtonArrows() { 2401 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 2402 if (button.dataset.btnArrowInit) return; 2403 button.dataset.btnArrowInit = 'true'; 2404 2405 var icon = button.querySelector('.btn-arrow-icon'); 2406 if (!icon) return; 2407 2408 button.addEventListener('mouseenter', function() { 2409 icon.classList.remove('slide-out'); 2410 icon.classList.add('slide-in'); 2411 }); 2412 2413 button.addEventListener('mouseleave', function() { 2414 icon.classList.remove('slide-in'); 2415 icon.classList.add('slide-out'); 2416 }); 2417 }); 2418 } 2419 2420 if (document.readyState === 'loading') { 2421 document.addEventListener('DOMContentLoaded', initButtonArrows); 2422 } else { 2423 initButtonArrows(); 2424 } 2425 2426 document.addEventListener('astro:page-load', initButtonArrows); 2427 })(); 2428</script>
2428 </div> </div> <!-- Right: Block 1 --> <div class="bg-white p-6 lg:p-8 flex flex-col justify-center"> <div class="flex items-start gap-4"> <div class="w-10 h-10 rounded-lg bg-zinc-100 flex items-center justify-center shrink-0"> <svg class="w-5 h-5 text-zinc-500" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M10.868 2.884c-.321-.772-1.415-.772-1.736 0l-1.83 4.401-4.753.381c-.833.067-1.171 1.107-.536 1.651l3.62 3.102-1.106 4.637c-.194.813.691 1.456 1.405 1.02L10 15.591l4.069 2.485c.713.436 1.598-.207 1.404-1.02l-1.106-4.637 3.62-3.102c.635-.544.297-1.584-.536-1.65l-4.752-.382-1.831-4.401z" clip-rule="evenodd"></path></svg> </div> <div> <h4 class="mb-1">Give clients an edge</h4> <p>Show up to every call with the insights they actually need. You become the partner they recommend, not the one they review.</p> </div> </div> </div> <!-- Right: Block 2 --> <div class="bg-white p-6 lg:p-8 flex flex-col justify-center"> <div class="flex items-start gap-4"> <div class="w-10 h-10 rounded-lg bg-zinc-100 flex items-center justify-center shrink-0"> <svg class="w-5 h-5 text-zinc-500" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm.75-13a.75.75 0 00-1.5 0v5c0 .414.336.75.75.75h4a.75.75 0 000-1.5h-3.25V5z" clip-rule="evenodd"></path></svg> </div> <div> <h4 class="mb-1">Onboard clients in seconds</h4> <p>Everything you need to sell, set up, and deliver is already built. Your clients see an expert â not someone figuring it out.</p> </div> </div> </div> <!-- Right: Block 3 --> <div class="bg-white p-6 lg:p-8 flex flex-col justify-center"> <div class="flex items-start gap-4"> <div class="w-10 h-10 rounded-lg bg-zinc-100 flex items-center justify-center shrink-0"> <svg class="w-5 h-5 text-zinc-500" viewBox="0 0 20 20" fill="currentColor"><path d="M10 9a3 3 0 100-6 3 3 0 000 6zM6 8a2 2 0 11-4 0 2 2 0 014 0zM1.49 15.326a.78.78 0 01-.358-.442 3 3 0 014.308-3.516 6.484 6.484 0 00-1.905 3.959c-.023.222-.014.442.025.654a4.97 4.97 0 01-2.07-.655zM16.44 15.98a4.97 4.97 0 002.07-.654.78.78 0 00.357-.442 3 3 0 00-4.308-3.517 6.484 6.484 0 011.907 3.96 2.32 2.32 0 01-.026.654zM18 8a2 2 0 11-4 0 2 2 0 014 0zM5.304 16.19a.844.844 0 01-.277-.71 5 5 0 019.947 0 .843.843 0 01-.277.71A6.975 6.975 0 0110 18a6.974 6.974 0 01-4.696-1.81z"></path></svg> </div> <div> <h4 class="mb-1">Work with GTM experts</h4> <p>Access partner support and ready-made resources that keep delivery tight as your roster grows. More clients, same standard.</p> </div> </div> </div> </div> </div> </div> </section> <section class="page-section" data-variant="light" id="integrations" data-astro-cid-dnku4hyr> <div class="section-container" data-astro-cid-dnku4hyr> <!-- Corner decorations --> <!-- Content --> <div class="mx-auto max-w-6xl" data-astro-cid-dnku4hyr> <div class="flex flex-col md:flex-row items-center gap-8 md:gap-12"> <!-- Bento Grid (4Ã4 small variant with diagonal pop-in animation) --> <div class="w-full md:flex-1"> <div class="integration-bento grid grid-cols-4 overflow-hidden rounded-2xl border border-zinc-200" data-animate="true" data-astro-cid-7rb7ltoj><a href="/integrations/google-analytics" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r border-b" style="--delay: 0ms" data-astro-cid-7rb7ltoj><img src="/integrations/google-analytics.svg" alt="Google Analytics" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/hubspot" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r border-b" style="--delay: 80ms" data-astro-cid-7rb7ltoj><img src="/integrations/hubspot.svg" alt="HubSpot" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/salesforce" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r border-b" style="--delay: 160ms" data-astro-cid-7rb7ltoj><img src="/integrations/salesforce.svg" alt="Salesforce" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/slack" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-b" style="--delay: 240ms" data-astro-cid-7rb7ltoj><img src="/integrations/slack.svg" alt="Slack" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/zapier" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r border-b" style="--delay: 80ms" data-astro-cid-7rb7ltoj><img src="/integrations/zapier.svg" alt="Zapier" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/apollo" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r border-b" style="--delay: 160ms" data-astro-cid-7rb7ltoj><img src="/integrations/apollo.jpg" alt="Apollo" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/pipedrive" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r border-b" style="--delay: 240ms" data-astro-cid-7rb7ltoj><img src="/integrations/pipedrive.svg" alt="Pipedrive" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/attio" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-b" style="--delay: 320ms" data-astro-cid-7rb7ltoj><img src="/integrations/attio.svg" alt="Attio" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/mcp" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r border-b" style="--delay: 160ms" data-astro-cid-7rb7ltoj><img src="/integrations/mcp.png" alt="MCP" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/close" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r border-b" style="--delay: 240ms" data-astro-cid-7rb7ltoj><img src="/integrations/close.svg" alt="Close" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/google-ads" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r border-b" style="--delay: 320ms" data-astro-cid-7rb7ltoj><img src="/integrations/google-ads.svg" alt="Google Ads" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/lemlist" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-b" style="--delay: 400ms" data-astro-cid-7rb7ltoj><img src="/integrations/lemlist.svg" alt="Lemlist" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/dynamics" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r" style="--delay: 240ms" data-astro-cid-7rb7ltoj><img src="/integrations/ms-dynamics.png" alt="Microsoft Dynamics" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/microsoft-teams" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r" style="--delay: 320ms" data-astro-cid-7rb7ltoj><img src="/integrations/microsoft-teams.svg" alt="Microsoft Teams" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations/smartlead" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 border-r" style="--delay: 400ms" data-astro-cid-7rb7ltoj><img src="/integrations/smartlead.png" alt="Smartlead" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a><a href="/integrations" class="flex aspect-square items-center justify-center border-zinc-200 bg-white transition-colors hover:bg-zinc-50 !bg-transparent" style="--delay: 480ms" data-astro-cid-7rb7ltoj><img src="/integrations/plus.svg" alt="More integrations" class="integration-logo h-8 w-8 object-contain opacity-0" loading="lazy" decoding="auto" data-astro-cid-7rb7ltoj></a></div> </div> <!-- Content --> <div class="w-full md:flex-1 text-left"> <h2 class="text-balance"> 2429Seamlessly integrate with your entire stack 2430</h2> <p class="mt-4 max-w-xl text-lg"> 2431Snitcher plugs into your tools so data, signals and workflows move seamlessly between every system you use. 2432</p> <div class="mt-6"> <a href="/integrations" class="inline-flex items-center justify-center gap-2 px-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-white ring-1 ring-[var(--alpha-border)] !text-zinc-700 hover:bg-zinc-50"> 2433Explore integrations 2434</a>
2434<script> 2435 (function() { 2436 function initButtonArrows() { 2437 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 2438 if (button.dataset.btnArrowInit) return; 2439 button.dataset.btnArrowInit = 'true'; 2440 2441 var icon = button.querySelector('.btn-arrow-icon'); 2442 if (!icon) return; 2443 2444 button.addEventListener('mouseenter', function() { 2445 icon.classList.remove('slide-out'); 2446 icon.classList.add('slide-in'); 2447 }); 2448 2449 button.addEventListener('mouseleave', function() { 2450 icon.classList.remove('slide-in'); 2451 icon.classList.add('slide-out'); 2452 }); 2453 }); 2454 } 2455 2456 if (document.readyState === 'loading') { 2457 document.addEventListener('DOMContentLoaded', initButtonArrows); 2458 } else { 2459 initButtonArrows(); 2460 } 2461 2462 document.addEventListener('astro:page-load', initButtonArrows); 2463 })(); 2464</script>
2464 </div> </div> </div> </div> </div> </section> <section class="page-section" data-variant="light" data-astro-cid-dnku4hyr> <div class="section-container" data-astro-cid-dnku4hyr> <!-- Corner decorations --> <!-- Content --> <div class="blob-card rounded-2xl overflow-hidden relative p-8 md:p-10" data-astro-cid-gijzu423> <!-- Gradient background with animated blobs --> <div class="absolute inset-0 rounded-2xl overflow-hidden bg-primary-500" data-astro-cid-gijzu423> <!-- Animated blobs --> <div class="blob-card-blob blob-card-blob-1" data-astro-cid-gijzu423></div> <div class="blob-card-blob blob-card-blob-2" data-astro-cid-gijzu423></div> <div class="blob-card-blob blob-card-blob-3" data-astro-cid-gijzu423></div> <div class="blob-card-blob blob-card-blob-4" data-astro-cid-gijzu423></div> <div class="blob-card-blob blob-card-blob-5" data-astro-cid-gijzu423></div> <!-- Noise overlay to reduce gradient banding --> <div class="blob-card-noise" data-astro-cid-gijzu423></div> </div> <!-- Content slot --> <div class="relative z-10 h-full" data-astro-cid-gijzu423> <div class="flex flex-col gap-6 lg:flex-row lg:justify-between lg:items-end"><div class="flex flex-col gap-4 lg:max-w-[50%]"><h2 class="tracking-tight text-white text-balance">Install in minutes</h2><p class="text-white text-balance">The last thing your team needs is another tool that requires training, so we made one that doesn't.</p></div><div class="flex flex-col sm:flex-row gap-2 items-stretch sm:items-start w-full sm:w-auto lg:shrink-0"><a href="https://app.snitcher.com/register" class="inline-flex items-center justify-center gap-2 px-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-white !text-zinc-950 hover:bg-zinc-100 !pl-3 w-full sm:w-auto justify-center"> <svg width="20" height="20" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0" aria-hidden="true"> <path d="M211.265 148.37C187.598 224.219 123.858 249.286 104.886 255.161C89.5631 259.93 84.2516 243.014 99.6384 238.244C116.524 233.017 173.258 210.709 194.355 143.094C205.691 106.783 186.837 68.5577 152.325 57.79C117.074 46.7923 80.2423 68.8045 69.2412 104.054C67.5848 109.361 63.152 113.363 58.9333 113.363C52.8997 113.363 50.3043 105.281 52.3341 98.7783C66.1181 54.6057 112.724 26.8804 157.601 40.8841C202.129 54.7776 225.257 103.517 211.265 148.37ZM168.681 5.37712C102.536 -15.2639 36.1026 25.9353 16.8302 87.6986C7.05086 119.034 28.0846 150.559 58.9017 150.559C79.3873 150.559 98.2403 135.991 104.747 115.134C109.855 98.7636 126.062 88.5621 141.246 93.2947C156.164 97.95 164.06 115.32 158.854 132.015C145.032 176.301 103.905 207.232 58.8369 207.236H58.8306C53.1805 207.236 47.4893 206.748 41.9193 205.783C26.0231 203.042 23.0907 220.506 38.9072 223.237C45.4654 224.373 52.1665 224.95 58.822 224.95C111.569 224.95 159.656 188.902 175.758 137.291C183.809 111.494 170.991 84.021 146.522 76.39C121.831 68.6852 95.7658 84.4535 87.8419 109.858C83.6147 123.396 71.7306 132.852 58.9427 132.852C40.047 132.852 27.4971 112.952 33.7365 92.9742C51.7151 35.4079 111.149 5.98231 163.405 22.2851C217.821 39.2652 247.198 98.6229 229.863 154.174C220.278 184.887 202.64 212.731 179.141 234.367C167.297 245.262 179.436 258.135 191.286 247.224C217.073 223.484 236.259 193.132 246.77 159.45C267.275 93.7541 231.625 25.0164 168.681 5.37712ZM58.6439 187.8C95.3789 187.8 128.937 162.473 140.255 126.211C142.694 118.381 139.514 113.349 135.392 112.062C131.306 110.787 125.784 113.124 123.348 120.937C114.327 149.843 87.7136 170.032 58.6287 170.032C44.0506 170.032 30.2484 164.946 18.717 155.324C6.35199 145.002 -4.98893 158.544 7.38454 168.884C22.2568 181.257 39.9787 187.797 58.6349 187.8H58.6439Z" fill="currentColor"></path> </svg> <span>Start for free</span> </a>
2464<script> 2465 (function() { 2466 function initButtonArrows() { 2467 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 2468 if (button.dataset.btnArrowInit) return; 2469 button.dataset.btnArrowInit = 'true'; 2470 2471 var icon = button.querySelector('.btn-arrow-icon'); 2472 if (!icon) return; 2473 2474 button.addEventListener('mouseenter', function() { 2475 icon.classList.remove('slide-out'); 2476 icon.classList.add('slide-in'); 2477 }); 2478 2479 button.addEventListener('mouseleave', function() { 2480 icon.classList.remove('slide-in'); 2481 icon.classList.add('slide-out'); 2482 }); 2483 }); 2484 } 2485 2486 if (document.readyState === 'loading') { 2487 document.addEventListener('DOMContentLoaded', initButtonArrows); 2488 } else { 2489 initButtonArrows(); 2490 } 2491 2492 document.addEventListener('astro:page-load', initButtonArrows); 2493 })(); 2494</script>
2494</div></div> </div> </div>
2494<script> 2495 (function() { 2496 var tabVisible = true; 2497 var cardObservers = new Map(); 2498 2499 function setCardAnimationState(card, isVisible) { 2500 var shouldPlay = isVisible && tabVisible; 2501 var state = shouldPlay ? 'running' : 'paused'; 2502 var blobs = card.querySelectorAll('.blob-card-blob'); 2503 blobs.forEach(function(blob) { 2504 blob.style.animationPlayState = state; 2505 blob.style.willChange = shouldPlay ? 'transform' : 'auto'; 2506 }); 2507 } 2508 2509 // Randomize blob animation delays for more organic movement 2510 function initBlobCardAnimations() { 2511 var cards = document.querySelectorAll('.blob-card'); 2512 2513 cards.forEach(function(card) { 2514 var blobs = card.querySelectorAll('.blob-card-blob'); 2515 blobs.forEach(function(blob) { 2516 // Random delay between 0 and the animation duration 2517 var randomDelay = -(Math.random() * 15); // negative delay to start mid-animation 2518 blob.style.animationDelay = randomDelay + 's'; 2519 }); 2520 2521 // Set up IntersectionObserver to pause animations when off-screen 2522 if ('IntersectionObserver' in window) { 2523 var observer = new IntersectionObserver(function(entries) { 2524 entries.forEach(function(entry) { 2525 setCardAnimationState(entry.target, entry.isIntersecting); 2526 }); 2527 }, { threshold: 0 }); 2528 observer.observe(card); 2529 cardObservers.set(card, observer); 2530 } else { 2531 // Fallback: assume visible 2532 setCardAnimationState(card, true); 2533 } 2534 }); 2535 } 2536 2537 // Page Visibility API - pause animations when tab is hidden 2538 function initVisibilityHandler() { 2539 document.addEventListener('visibilitychange', function() { 2540 tabVisible = !document.hidden; 2541 var cards = document.querySelectorAll('.blob-card'); 2542 cards.forEach(function(card) { 2543 // Check if this card's observer has detected visibility 2544 var observer = cardObservers.get(card); 2545 // We need to re-evaluate visibility, but for simplicity just update all 2546 var blobs = card.querySelectorAll('.blob-card-blob'); 2547 blobs.forEach(function(blob) { 2548 if (!tabVisible) { 2549 blob.style.animationPlayState = 'paused'; 2550 } 2551 // When tab becomes visible, IntersectionObserver will handle it 2552 }); 2553 }); 2554 }); 2555 } 2556 2557 function cleanup() { 2558 cardObservers.forEach(function(observer) { 2559 observer.disconnect(); 2560 }); 2561 cardObservers.clear(); 2562 } 2563 2564 function init() { 2565 cleanup(); 2566 initBlobCardAnimations(); 2567 } 2568 2569 // Initialize visibility handler once 2570 initVisibilityHandler(); 2571 2572 if (document.readyState === 'loading') { 2573 document.addEventListener('DOMContentLoaded', init); 2574 } else { 2575 init(); 2576 } 2577 2578 // Re-init on Astro page transitions 2579 document.addEventListener('astro:page-load', init); 2580 document.addEventListener('astro:before-swap', cleanup); 2581 })(); 2582</script>
2582 </div> </section> </main> <footer class="w-full relative z-0" data-astro-cid-fqw42ge2> <!-- Footer CTA Section --> 2583 <section class="w-full bg-zinc-950 relative overflow-hidden" data-astro-cid-fqw42ge2> <!-- Fingerprint SVG Background with Solar Flare Animation --> <div class="absolute" style="top: -55.24%; left: 50%; transform: translateX(-50%); bottom: -58.45%; width: 1280px; height: 725px;" data-astro-cid-fqw42ge2> <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="725" viewBox="0 0 911 516" fill="none" style="width: 100%; height: 100%; display: block;" class="fingerprint-svg" data-astro-cid-fqw42ge2> <defs data-astro-cid-fqw42ge2> <!-- Fade mask for bottom of fingerprint --> <mask id="footer-fingerprint-fade" data-astro-cid-fqw42ge2> <rect width="911" height="516" fill="white" data-astro-cid-fqw42ge2></rect> <rect x="0" y="376" width="911" height="140" fill="url(#footer-fade-gradient)" data-astro-cid-fqw42ge2></rect> </mask> <linearGradient id="footer-fade-gradient" x1="0" y1="0" x2="0" y2="1" gradientUnits="objectBoundingBox" data-astro-cid-fqw42ge2> <stop offset="0" stop-color="white" data-astro-cid-fqw42ge2></stop> <stop offset="1" stop-color="black" data-astro-cid-fqw42ge2></stop> </linearGradient> </defs> <!-- Base fingerprint path --> <path d="M479.105 123.715C508.165 123.715 537.121 127.711 565.171 135.593H565.172C723.388 180.032 810.209 336.775 758.861 484.95C672.839 733.133 441.175 815.165 372.169 834.403H372.168C366.003 836.13 360.107 837 354.642 837C336.377 837 326.758 827.516 324.962 818.309L324.883 817.87C323.209 807.91 329.776 793.276 355.402 786.121C417.687 768.769 627.121 694.667 705.011 469.948C725.42 411.091 720.361 348.893 690.761 294.827C661.139 240.726 610.544 201.314 548.32 183.835C525.75 177.497 502.431 174.283 479.011 174.283C371.227 174.283 272.458 241.933 238.85 338.877C233.287 354.919 218.695 366.846 205.139 366.846C197.37 366.846 192.438 362.809 189.639 359.385C182.575 350.738 180.643 336.461 185.006 323.875C225.841 206.064 346.768 123.715 479.105 123.715ZM478.957 1C521.618 1.00001 564.274 6.90814 605.741 18.5576C716.526 49.6745 807.083 118.96 860.766 213.628C914.723 308.784 924.703 418.105 888.864 521.47C850.909 630.962 781.867 729.724 689.108 807.245L686.913 809.072C674.246 819.571 663.235 821.729 656.295 821.729C645.632 821.729 636.927 816.576 633.413 808.462C628.742 797.678 633.925 784.249 648.096 772.514H648.097C735.016 700.475 799.655 608.478 835.02 506.468C866.145 416.68 857.829 321.486 811.604 238.445C765.548 155.708 687.314 95.0634 591.164 67.4512L588.89 66.8057C553.722 56.9306 517.085 51.9238 479.998 51.9238C310.011 51.9239 160.83 152.525 108.854 302.354C96.7623 337.202 102.92 374.427 125.368 401.906C144.581 425.426 173.675 438.9 205.174 438.9C253.822 438.9 298.979 406.62 315.014 360.395V360.394C338.279 293.254 405.65 246.323 478.859 246.323C494.333 246.323 509.728 248.445 524.608 252.625C566.639 264.424 600.584 291.382 620.213 328.518C639.767 365.513 642.843 408.092 628.859 448.432C570.466 616.91 396.076 734.653 204.729 734.653C180.618 734.653 156.325 732.773 132.521 729.062H132.52C106.527 725.021 96.6245 711.156 97.7158 699.718C98.7049 689.31 109.097 678.338 130.959 678.338C134.503 678.338 138.264 678.642 142.138 679.243C162.762 682.456 183.832 684.085 204.76 684.085H204.761C370.933 684.071 522.658 581.841 574.417 435.154L575.021 433.426C594.797 376.342 564.645 316.848 507.754 300.864H507.753C498.292 298.212 488.494 296.864 478.629 296.864C430.011 296.864 384.88 329.156 368.849 375.396V375.396C345.592 442.527 278.225 489.448 205.022 489.448C155.516 489.448 109.979 468.431 80.0645 431.818C47.034 391.388 37.6623 337.388 55.0059 287.355C113.434 118.797 287.749 1 478.957 1ZM477.126 369.297C479.15 369.297 481.136 369.531 483.041 369.995L483.853 370.208C490.288 372.016 496.057 376.531 499.22 383.507C502.381 390.481 502.979 400.016 498.863 411.912C457.99 529.799 336.787 612.2 204.079 612.2H204.047C137.242 612.195 73.7533 591.267 20.3223 551.662L19.0625 550.723C3.84284 539.273 -2.02901 525.738 2.49023 514.525C5.87123 506.138 14.6726 500.811 25.6582 500.811C35.1161 500.811 45.338 504.677 55.2158 512.099C98.2043 544.388 149.664 561.455 204.021 561.455C312.304 561.455 411.42 493.831 445.02 396.916V396.915C452.117 376.42 466.351 369.297 477.126 369.297Z" stroke="white" stroke-opacity="0.1" stroke-width="2" mask="url(#footer-fingerprint-fade)" data-astro-cid-fqw42ge2></path> </svg> <!-- Canvas overlay for GPU-accelerated flare animation --> <canvas class="fingerprint-canvas" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none;" aria-hidden="true" data-astro-cid-fqw42ge2></canvas> </div> <!-- Gradient fade at bottom --> <div class="absolute bottom-0 left-1/2 -translate-x-1/2 w-full max-w-screen-2xl h-60 bg-gradient-to-b from-transparent via-zinc-950/50 to-zinc-950 pointer-events-none" data-astro-cid-fqw42ge2></div> <!-- Content Container --> <div class="relative z-10 py-20 md:py-40 px-6 md:px-16" data-astro-cid-fqw42ge2> <div class="max-w-7xl mx-auto" data-astro-cid-fqw42ge2> <div class="flex flex-col gap-8 items-center justify-center px-0 rounded-t-3xl" data-astro-cid-fqw42ge2> <div class="flex flex-col gap-2 items-center max-w-xl w-full" data-astro-cid-fqw42ge2> <!-- Heading --> <h2 class="text-center text-white" data-astro-cid-fqw42ge2> 2584Own every revenue moment 2585</h2> <!-- Subheading --> <p class="text-lg text-center text-white" data-astro-cid-fqw42ge2> 2586Spot real buyers, take action and win more deals with Snitcher. 2587</p> </div> <!-- Action Buttons --> <div class="flex flex-col md:flex-row gap-2 items-stretch md:items-start w-full md:w-auto" data-astro-cid-fqw42ge2> <a href="/demo" class="inline-flex items-center justify-center gap-2 px-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-white/10 border border-white/10 !text-zinc-100 hover:bg-white/20 backdrop-blur-sm w-full md:w-auto justify-center">Talk to sales</a>
2587<script> 2588 (function() { 2589 function initButtonArrows() { 2590 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 2591 if (button.dataset.btnArrowInit) return; 2592 button.dataset.btnArrowInit = 'true'; 2593 2594 var icon = button.querySelector('.btn-arrow-icon'); 2595 if (!icon) return; 2596 2597 button.addEventListener('mouseenter', function() { 2598 icon.classList.remove('slide-out'); 2599 icon.classList.add('slide-in'); 2600 }); 2601 2602 button.addEventListener('mouseleave', function() { 2603 icon.classList.remove('slide-in'); 2604 icon.classList.add('slide-out'); 2605 }); 2606 }); 2607 } 2608 2609 if (document.readyState === 'loading') { 2610 document.addEventListener('DOMContentLoaded', initButtonArrows); 2611 } else { 2612 initButtonArrows(); 2613 } 2614 2615 document.addEventListener('astro:page-load', initButtonArrows); 2616 })(); 2617</script>
2617 <a href="https://app.snitcher.com/register" class="inline-flex items-center justify-center gap-2 px-4 h-10 rounded-full font-semibold text-base transition-colors shadow group !no-underline cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 bg-white !text-zinc-950 hover:bg-zinc-100 !pl-3 w-full md:w-auto justify-center"> <svg width="20" height="20" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0" aria-hidden="true"> <path d="M211.265 148.37C187.598 224.219 123.858 249.286 104.886 255.161C89.5631 259.93 84.2516 243.014 99.6384 238.244C116.524 233.017 173.258 210.709 194.355 143.094C205.691 106.783 186.837 68.5577 152.325 57.79C117.074 46.7923 80.2423 68.8045 69.2412 104.054C67.5848 109.361 63.152 113.363 58.9333 113.363C52.8997 113.363 50.3043 105.281 52.3341 98.7783C66.1181 54.6057 112.724 26.8804 157.601 40.8841C202.129 54.7776 225.257 103.517 211.265 148.37ZM168.681 5.37712C102.536 -15.2639 36.1026 25.9353 16.8302 87.6986C7.05086 119.034 28.0846 150.559 58.9017 150.559C79.3873 150.559 98.2403 135.991 104.747 115.134C109.855 98.7636 126.062 88.5621 141.246 93.2947C156.164 97.95 164.06 115.32 158.854 132.015C145.032 176.301 103.905 207.232 58.8369 207.236H58.8306C53.1805 207.236 47.4893 206.748 41.9193 205.783C26.0231 203.042 23.0907 220.506 38.9072 223.237C45.4654 224.373 52.1665 224.95 58.822 224.95C111.569 224.95 159.656 188.902 175.758 137.291C183.809 111.494 170.991 84.021 146.522 76.39C121.831 68.6852 95.7658 84.4535 87.8419 109.858C83.6147 123.396 71.7306 132.852 58.9427 132.852C40.047 132.852 27.4971 112.952 33.7365 92.9742C51.7151 35.4079 111.149 5.98231 163.405 22.2851C217.821 39.2652 247.198 98.6229 229.863 154.174C220.278 184.887 202.64 212.731 179.141 234.367C167.297 245.262 179.436 258.135 191.286 247.224C217.073 223.484 236.259 193.132 246.77 159.45C267.275 93.7541 231.625 25.0164 168.681 5.37712ZM58.6439 187.8C95.3789 187.8 128.937 162.473 140.255 126.211C142.694 118.381 139.514 113.349 135.392 112.062C131.306 110.787 125.784 113.124 123.348 120.937C114.327 149.843 87.7136 170.032 58.6287 170.032C44.0506 170.032 30.2484 164.946 18.717 155.324C6.35199 145.002 -4.98893 158.544 7.38454 168.884C22.2568 181.257 39.9787 187.797 58.6349 187.8H58.6439Z" fill="currentColor"></path> </svg> <span>Start for free</span> </a>
2617<script> 2618 (function() { 2619 function initButtonArrows() { 2620 document.querySelectorAll('.btn-with-arrow').forEach(function(button) { 2621 if (button.dataset.btnArrowInit) return; 2622 button.dataset.btnArrowInit = 'true'; 2623 2624 var icon = button.querySelector('.btn-arrow-icon'); 2625 if (!icon) return; 2626 2627 button.addEventListener('mouseenter', function() { 2628 icon.classList.remove('slide-out'); 2629 icon.classList.add('slide-in'); 2630 }); 2631 2632 button.addEventListener('mouseleave', function() { 2633 icon.classList.remove('slide-in'); 2634 icon.classList.add('slide-out'); 2635 }); 2636 }); 2637 } 2638 2639 if (document.readyState === 'loading') { 2640 document.addEventListener('DOMContentLoaded', initButtonArrows); 2641 } else { 2642 initButtonArrows(); 2643 } 2644 2645 document.addEventListener('astro:page-load', initButtonArrows); 2646 })(); 2647</script>
2647 </div> </div> </div> </div> </section> <!-- Main Footer Content. Normally `pt-0` â the callout above supplies the top 2648 space. Without it the link columns would jam against the page. --> <div class="w-full bg-zinc-950 px-6 md:px-16 pb-8 pt-0" data-astro-cid-fqw42ge2> <div class="max-w-7xl mx-auto" data-astro-cid-fqw42ge2> <!-- Main Content: Logo and Navigation --> <div class="flex flex-col md:flex-row gap-24 items-start mb-16 md:mb-24 pt-0" data-astro-cid-fqw42ge2> <!-- Left Column: Logo, Tagline, Badges --> <div class="flex flex-col gap-8 w-full md:w-1/2" data-astro-cid-fqw42ge2> <!-- Logo --> <a href="/" class="flex items-center gap-2.5 w-64 h-14" data-astro-cid-fqw42ge2> <img src="/logo-symbol.svg" alt="Snitcher symbol" class="w-12 h-12 object-contain brightness-0 invert" loading="lazy" decoding="auto" data-astro-cid-fqw42ge2> <img src="/logo-wordmark.svg" alt="Snitcher" class="w-48 h-9 object-contain brightness-0 invert" loading="lazy" decoding="auto" data-astro-cid-fqw42ge2> </a> <!-- Tagline --> <p class="text-lg text-white" data-astro-cid-fqw42ge2> 2649Uncover your hidden website visitors. 2650</p> <!-- G2 Badges â the current release, straight off src/data/g2-badges.ts --> <a href="https://www.g2.com/products/snitcher/reviews" target="_blank" rel="noopener noreferrer" class="flex gap-2 items-center flex-wrap hover:opacity-80 transition-opacity"> <img src="/_astro/g2-summer-2026-leader.DXAU52y-.svg" alt="G2 Summer 2026 Leader" class="w-20 object-contain" loading="lazy" decoding="auto"><img src="/_astro/g2-summer-2026-best-results.DpsubBts.svg" alt="G2 Summer 2026 Best Results" class="w-20 object-contain" loading="lazy" decoding="auto"><img src="/_astro/g2-summer-2026-best-usability-smb.DbiWjGVi.svg" alt="G2 Summer 2026 Best Usability Small Business" class="w-20 object-contain" loading="lazy" decoding="auto"><img src="/_astro/g2-summer-2026-most-implementable.XtG3_GLc.svg" alt="G2 Summer 2026 Most Implementable" class="w-20 object-contain" loading="lazy" decoding="auto"><img src="/_astro/g2-summer-2026-best-estimated-roi-mid-market.CYMbXl6r.svg" alt="G2 Summer 2026 Best Estimated ROI Mid-Market" class="w-20 object-contain" loading="lazy" decoding="auto"><img src="/_astro/g2-summer-2026-best-relationship-smb.D5l7xB20.svg" alt="G2 Summer 2026 Best Relationship Small Business" class="w-20 object-contain" loading="lazy" decoding="auto"> </a> <!-- Compliance Badges --> <a href="https://trust.snitcher.com" target="_blank" rel="noopener noreferrer" class="flex gap-4 items-center hover:opacity-80 transition-opacity" data-astro-cid-fqw42ge2> <!-- GDPR Badge --> <img src="/footer-badges/gdpr-compliant.svg" alt="GDPR Compliant" class="w-16 object-contain" loading="lazy" decoding="auto" data-astro-cid-fqw42ge2> <!-- ISO 27001 Badge --> <img src="/footer-badges/iso-27001.svg" alt="ISO 27001 In Progress" class="w-16 object-contain" loading="lazy" decoding="auto" data-astro-cid-fqw42ge2> </a> <!-- Partner Program Callout --> <div class="partner-callout flex items-center gap-2.5 pt-2" data-astro-cid-fqw42ge2> <!-- Partner badge â links to the agency partner program explainer --> <a href="/partners/agency-program" class="partner-badge-link inline-flex shrink-0 rounded-xl transition-transform duration-200 hover:-translate-y-0.5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-lavender-400 focus-visible:ring-offset-2 focus-visible:ring-offset-zinc-950" aria-label="Join the Snitcher agency partner program" data-astro-cid-fqw42ge2> <img src="/footer-badges/snitcher-partner.svg" alt="Snitcher Certified Partner" class="w-32 object-contain" loading="lazy" decoding="auto" data-astro-cid-fqw42ge2> </a> <!-- Doodle arrow pointing left at the badge --> <svg class="fill-current w-8 h-8 shrink-0 rotate-180 text-lavender-300" viewBox="0 -66.5 220 220" fill="none" xmlns="http://www.w3.org/2000/svg" data-astro-cid-fqw42ge2> <path d="M3.17247 25.8421C5.28745 28.1788 7.82542 30.0907 9.7289 32.6399C26.0142 55.3699 49.279 66.6287 75.0817 72.7892C83.9646 74.9135 94.1165 74.7011 103.211 72.7892C129.225 67.6909 152.913 56.8569 173.428 39.8625C179.35 34.9766 184.426 28.8161 188.656 21.8059C186.33 22.6556 183.792 23.5054 181.465 24.5675C174.697 27.5415 167.929 30.728 160.95 33.2772C157.989 34.3393 154.393 34.3393 151.009 34.1269C149.74 34.1269 147.837 32.215 147.625 30.9404C147.414 29.6658 148.683 27.3291 149.74 27.1167C167.718 21.5935 183.369 10.972 199.654 1.83746C205.364 -1.34899 208.96 -0.49927 211.498 5.23635C217.631 19.4692 220.381 34.5517 219.958 50.0592C219.958 50.484 219.112 51.1213 217.843 52.3959C205.364 47.7224 209.171 34.1269 203.038 23.2929C201.557 25.8421 200.5 27.9664 199.231 29.6658C172.582 62.5926 137.262 80.0118 96.2315 86.3848C90.0981 87.4469 83.3301 87.022 76.9852 85.9599C53.7205 81.9237 32.9937 72.1519 15.8623 55.7948C10.3634 50.484 6.34493 43.4738 2.32647 36.8885C0.634492 34.3393 0.634494 30.728 0 27.754C1.05749 27.1167 2.11498 26.4794 3.17247 25.8421Z" data-astro-cid-fqw42ge2></path> </svg> <!-- Hand-written note --> <span class="font-hand text-2xl leading-[1.05] text-lavender-300 -rotate-2" data-astro-cid-fqw42ge2> 2651Run an agency?<br data-astro-cid-fqw42ge2>Join our partner programme 2652</span> </div> </div> <!-- Right Column: Navigation Links --> <div class="w-full md:w-1/2" data-astro-cid-fqw42ge2> <div class="grid grid-cols-2 md:grid-cols-3 gap-x-4 gap-y-8" data-astro-cid-fqw42ge2> <div class="flex flex-col gap-4" data-astro-cid-fqw42ge2> <h5 class="text-white" data-astro-cid-fqw42ge2>Product</h5> <a href="/platform" class="footer-nav-link" data-astro-cid-fqw42ge2> Platform </a><a href="/radar" class="footer-nav-link" data-astro-cid-fqw42ge2> Radar </a><a href="/ip-to-company-api" class="footer-nav-link" data-astro-cid-fqw42ge2> IP to Company </a><a href="/integrations" class="footer-nav-link" data-astro-cid-fqw42ge2> Integrations </a><a href="/changelog" class="footer-nav-link" data-astro-cid-fqw42ge2> Changelog </a> </div><div class="flex flex-col gap-4" data-astro-cid-fqw42ge2> <h5 class="text-white" data-astro-cid-fqw42ge2>Journey</h5> <a href="/identify" class="footer-nav-link" data-astro-cid-fqw42ge2> Identify </a><a href="/signal" class="footer-nav-link" data-astro-cid-fqw42ge2> Signal </a><a href="/automate" class="footer-nav-link" data-astro-cid-fqw42ge2> Automate </a><a href="/engage" class="footer-nav-link" data-astro-cid-fqw42ge2> Engage </a><a href="/measure" class="footer-nav-link" data-astro-cid-fqw42ge2> Measure </a> </div><div class="flex flex-col gap-4" data-astro-cid-fqw42ge2> <h5 class="text-white" data-astro-cid-fqw42ge2>Teams</h5> <a href="/solutions/sales" class="footer-nav-link" data-astro-cid-fqw42ge2> Sales </a><a href="/solutions/marketing" class="footer-nav-link" data-astro-cid-fqw42ge2> Marketing </a><a href="/solutions/revops" class="footer-nav-link" data-astro-cid-fqw42ge2> RevOps </a><a href="/solutions/agency" class="footer-nav-link" data-astro-cid-fqw42ge2> Agency </a> </div><div class="flex flex-col gap-4" data-astro-cid-fqw42ge2> <h5 class="text-white" data-astro-cid-fqw42ge2>Use Cases</h5> <a href="/use-cases/account-scoring" class="footer-nav-link" data-astro-cid-fqw42ge2> Account scoring </a><a href="/use-cases/contact-reveal" class="footer-nav-link" data-astro-cid-fqw42ge2> Contact reveal </a><a href="/use-cases/enrich-ga4" class="footer-nav-link" data-astro-cid-fqw42ge2> GA4 enrichment </a><a href="/use-cases/lead-generation" class="footer-nav-link" data-astro-cid-fqw42ge2> Lead generation </a><a href="/use-cases/marketing-attribution" class="footer-nav-link" data-astro-cid-fqw42ge2> Marketing attribution </a><a href="/use-cases/visitor-identification" class="footer-nav-link" data-astro-cid-fqw42ge2> Visitor identification </a> </div><div class="flex flex-col gap-4" data-astro-cid-fqw42ge2> <h5 class="text-white" data-astro-cid-fqw42ge2>Resources</h5> <a href="/blog" class="footer-nav-link" data-astro-cid-fqw42ge2> Blog </a><a href="https://docs.snitcher.com" class="footer-nav-link" target="_blank" rel="noopener noreferrer" data-astro-cid-fqw42ge2> Documentation </a><a href="https://help.snitcher.com" class="footer-nav-link" target="_blank" rel="noopener noreferrer" data-astro-cid-fqw42ge2> Help center </a><a href="/partners" class="footer-nav-link" data-astro-cid-fqw42ge2> Partner Program </a><a href="/refer" class="footer-nav-link" data-astro-cid-fqw42ge2> Refer a friend </a> </div><div class="flex flex-col gap-4" data-astro-cid-fqw42ge2> <h5 class="text-white" data-astro-cid-fqw42ge2>Company</h5> <a href="/about" class="footer-nav-link" data-astro-cid-fqw42ge2> About us </a><a href="/careers" class="footer-nav-link" data-astro-cid-fqw42ge2> Careers </a><a href="#" class="footer-nav-link" data-astro-cid-fqw42ge2> Contact </a><a href="/customers" class="footer-nav-link" data-astro-cid-fqw42ge2> Customers </a><a href="https://trust.snitcher.com" class="footer-nav-link" target="_blank" rel="noopener noreferrer" data-astro-cid-fqw42ge2> Trust centre </a> </div> </div> </div> </div> <!-- Bottom Row: Copyright and Links --> <div class="flex items-center justify-between pt-0" data-astro-cid-fqw42ge2> <p class="text-sm text-zinc-400" data-astro-cid-fqw42ge2> 2653© 2026 Snitcher. All rights reserved. 2654</p> <div class="flex gap-4 items-center" data-astro-cid-fqw42ge2> <a href="/privacy-policy" class="footer-bottom-link" data-astro-cid-fqw42ge2>Privacy Policy</a><a href="/terms-conditions" class="footer-bottom-link" data-astro-cid-fqw42ge2>Terms & Conditions</a><a href="/cookie-policy" class="footer-bottom-link" data-astro-cid-fqw42ge2>Cookie Policy</a> </div> </div> </div> </div> </footer> <!-- Footer Scripts --> <!-- Showdown (Markdown converter - may be needed for dynamic content) -->
2654<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/2.1.0/showdown.min.js" async></script>
2654 <!-- 2655 UTM Parameter Persistence is now handled by the AttributionProvider component. 2656 See: src/components/components/AttributionProvider.astro 2657 See: src/lib/attribution.ts 2658 2659 The AttributionProvider captures UTM params, stores them, and updates 2660 all app.snitcher.com links automatically. 2661--><!-- Intercom Chat Triggers (event delegation â survives View Transitions) -->
2661<script> 2662if (!window.__intercomChatTriggersAdded) { 2663 window.__intercomChatTriggersAdded = true; 2664 document.addEventListener('click', function(e) { 2665 var target = e.target.closest('#start-chat, #start-whitelabel-chat'); 2666 if (!target) return; 2667 if (typeof Intercom === 'undefined') return; 2668 2669 if (target.id === 'start-chat') { 2670 Intercom('showNewMessage'); 2671 } else if (target.id === 'start-whitelabel-chat') { 2672 Intercom('showNewMessage', 'Can you tell me more about your whitelabel programme?'); 2673 } 2674 }); 2675} 2676</script>
2676 <!-- 2677 Currency Localization is now handled by the CurrencyProvider component. 2678 See: src/components/components/CurrencyProvider.astro 2679 2680 The CurrencyProvider also maintains backward compatibility with 2681 .swap-currency and .swap-currency-2 classes for legacy elements. 2682--> <!-- Attribution & Currency --> <!-- Event Tracking -->
2682<script> 2683(function() { 2684 window.dataLayer = window.dataLayer || []; 2685 2686 // --- Page metadata --- 2687 function pushPageMetadata() { 2688 var path = window.location.pathname; 2689 var pageType = 'page'; 2690 if (path === '/') pageType = 'homepage'; 2691 else if (path.startsWith('/blog')) pageType = 'blog'; 2692 else if (path.startsWith('/customers')) pageType = 'case-study'; 2693 else if (path.startsWith('/partners')) pageType = 'partner'; 2694 else if (path.startsWith('/solutions')) pageType = 'solution'; 2695 else if (path.startsWith('/features')) pageType = 'feature'; 2696 else if (path.startsWith('/use-cases')) pageType = 'use-case'; 2697 else if (path.startsWith('/pricing')) pageType = 'pricing'; 2698 else if (path.startsWith('/demo')) pageType = 'demo'; 2699 else if (path.startsWith('/integrations')) pageType = 'integration'; 2700 else if (path.startsWith('/privacy') || path.startsWith('/terms') || path.startsWith('/legal')) pageType = 'legal'; 2701 2702 // dataLayer-only: Radar's native pageview already covers page context. 2703 window.dataLayer.push({ 2704 event: 'page_context', 2705 page_type: pageType, 2706 page_path: path, 2707 page_title: document.title 2708 }); 2709 } 2710 2711 // --- CTA click tracking --- 2712 function trackCTAClicks() { 2713 document.addEventListener('click', function(e) { 2714 var link = e.target.closest('a[href]'); 2715 if (!link) return; 2716 2717 var href = link.getAttribute('href') || ''; 2718 var text = (link.textContent || '').trim().substring(0, 100); 2719 var classes = link.className || ''; 2720 2721 // Track clicks to app.snitcher.com (signup/login CTAs) 2722 if (href.indexOf('app.snitcher.com') !== -1) { 2723 window.snitcherTrack('cta_clicked', { 2724 cta_text: text, 2725 cta_url: href, 2726 cta_location: getLinkLocation(link), 2727 cta_type: 'app_link' 2728 }); 2729 return; 2730 } 2731 2732 // Track clicks on button-styled elements (primary CTAs) 2733 if (classes.indexOf('btn') !== -1 || classes.indexOf('button') !== -1 || 2734 link.querySelector('button') || link.getAttribute('role') === 'button') { 2735 window.snitcherTrack('cta_clicked', { 2736 cta_text: text, 2737 cta_url: href, 2738 cta_location: getLinkLocation(link), 2739 cta_type: 'button' 2740 }); 2741 return; 2742 } 2743 2744 // Track demo page links 2745 if (href.indexOf('/demo') !== -1) { 2746 window.snitcherTrack('cta_clicked', { 2747 cta_text: text, 2748 cta_url: href, 2749 cta_location: getLinkLocation(link), 2750 cta_type: 'demo_request' 2751 }); 2752 } 2753 }); 2754 } 2755 2756 // --- Intercom chat tracking --- 2757 function trackIntercomOpens() { 2758 var chatButtons = document.querySelectorAll('#start-chat, #start-whitelabel-chat'); 2759 chatButtons.forEach(function(btn) { 2760 if (btn.hasAttribute('data-track-bound')) return; 2761 btn.setAttribute('data-track-bound', 'true'); 2762 btn.addEventListener('click', function() { 2763 window.snitcherTrack('intercom_chat_opened', { 2764 chat_trigger: btn.id 2765 }); 2766 }); 2767 }); 2768 } 2769 2770 // --- HubSpot form submission tracking (iframe embeds) --- 2771 // Radar's native formTracking can't see inside HubSpot iframes; this 2772 // postMessage hook is the only signal for those, and the submitted email 2773 // de-anonymizes the visitor's whole session via identify(). 2774 function trackHubSpotForms() { 2775 window.addEventListener('message', function(event) { 2776 if (event.data && event.data.type === 'hsFormCallback' && event.data.eventName === 'onFormSubmitted') { 2777 window.snitcherTrack('hubspot_form_submitted', { 2778 form_id: event.data.id || 'unknown' 2779 }); 2780 2781 try { 2782 var values = event.data.data && event.data.data.submissionValues; 2783 var email = values && values.email; 2784 if (email && email.indexOf('@') !== -1 && 2785 window.Snitcher && typeof window.Snitcher.identify === 'function') { 2786 window.Snitcher.identify(email); 2787 } 2788 } catch (err) { /* ignore */ } 2789 } 2790 }); 2791 } 2792 2793 // --- Identify visitors we already know by email (personalized links) --- 2794 // PersonalizationCapture stores the email from outbound-campaign URLs; 2795 // pass it to Radar once per session so the whole visit is de-anonymized. 2796 function identifyFromPersonalization() { 2797 try { 2798 var api = window.SnitcherPersonalization; 2799 var data = api && api.get && api.get(); 2800 var email = data && data.email; 2801 if (!email || email.indexOf('@') === -1) return; 2802 2803 var key = 'snitcher_identified_' + email.toLowerCase(); 2804 if (sessionStorage.getItem(key)) return; 2805 if (window.Snitcher && typeof window.Snitcher.identify === 'function') { 2806 window.Snitcher.identify(email); 2807 sessionStorage.setItem(key, '1'); 2808 } 2809 } catch (err) { /* ignore */ } 2810 } 2811 2812 // --- Persist attribution + geo as Radar visitor traits --- 2813 // Radar has no client-side UTM breakout; register() stores traits on the 2814 // visitor without emitting an event, so every later event carries them. 2815 function registerVisitorTraits() { 2816 function pushAttributionTraits(attribution) {
2817 try { 2818 if (attribution && Object.keys(attribution).length > 0 && 2819 window.Snitcher && typeof window.Snitcher.register === 'function') { 2820 window.Snitcher.register(attribution); 2821 } 2822 } catch (err) { /* ignore */ } 2823 } 2824 2825 // AttributionProvider may have dispatched attributionReady before this 2826 // inline script's init ran â read the current state directly, then keep 2827 // listening for later captures (view-transition navigations). 2828 try { 2829 var api = window.SnitcherAttribution; 2830 if (api && typeof api.get === 'function') { 2831 pushAttributionTraits(api.get()); 2832 } 2833 } catch (err) { /* ignore */ } 2834 2835 window.addEventListener('attributionReady', function(e) { 2836 pushAttributionTraits(e.detail || {}); 2837 }); 2838 2839 try { 2840 var currency = window.SnitcherCurrency; 2841 if (currency && typeof currency.onCountryReady === 'function') { 2842 currency.onCountryReady(function(geo) { 2843 try { 2844 if (geo && window.Snitcher && typeof window.Snitcher.register === 'function') { 2845 window.Snitcher.register({ 2846 country_code: geo.countryCode || null, 2847 region: geo.region || null, 2848 is_eu: Boolean(geo.isEu) 2849 }); 2850 } 2851 } catch (err) { /* ignore */ } 2852 }); 2853 } 2854 } catch (err) { /* ignore */ } 2855 } 2856 2857 // --- Tab / filter interactions (Tabs.astro dispatches bubbling 'tabchange') --- 2858 function trackTabChanges() { 2859 document.addEventListener('tabchange', function(e) { 2860 var el = e.target; 2861 var elId = (el && el.id) || ''; 2862 // PricingSection emits its own richer pricing_billing_toggled event. 2863 if (elId === 'billing-tabs') return; 2864 window.snitcherTrack('tab_filter_changed', { 2865 tab_id: (e.detail && e.detail.tabId) || '', 2866 tabs_element: elId, 2867 page_path: window.location.pathname 2868 }); 2869 }); 2870 } 2871 2872 // --- Integration detail views --- 2873 // The detail page stamps [data-track-integration] with name/category/status 2874 // so coming-soon and beta interest is measurable per integration. 2875 function trackIntegrationView() { 2876 var el = document.querySelector('[data-track-integration]'); 2877 if (!el) return; 2878 window.snitcherTrack('integration_viewed', { 2879 integration: el.getAttribute('data-integration-name') || '', 2880 category: el.getAttribute('data-integration-category') || '', 2881 status: el.getAttribute('data-integration-status') || 'stable', 2882 page_path: window.location.pathname 2883 }); 2884 } 2885 2886 // --- Journey story pages: which sections actually get seen --- 2887 // Active time on page is native to Radar, but where the scroll story 2888 // loses people isn't. Fires once per section per pageview when the 2889 // section crosses the middle band of the viewport. 2890 var JOURNEY_PATHS = ['/identify', '/measure', '/engage', '/signal', '/automate']; 2891 2892 function trackJourneySections() { 2893 var path = window.location.pathname.replace(/\/$/, ''); 2894 if (JOURNEY_PATHS.indexOf(path) === -1) return; 2895 if (!('IntersectionObserver' in window)) return; 2896 2897 var sections = document.querySelectorAll('section.page-section'); 2898 if (!sections.length) return; 2899 2900 var observer = new IntersectionObserver(function(entries) { 2901 entries.forEach(function(entry) { 2902 if (!entry.isIntersecting) return; 2903 var el = entry.target; 2904 observer.unobserve(el); 2905 var heading = el.querySelector('h1, h2, h3'); 2906 window.snitcherTrack('journey_section_viewed', { 2907 page_path: path, 2908 section_index: parseInt(el.getAttribute('data-journey-index') || '0', 10), 2909 section_title: heading ? (heading.textContent || '').trim().substring(0, 80) : '' 2910 }); 2911 }); 2912 }, { rootMargin: '-30% 0px -30% 0px', threshold: 0 }); 2913 2914 sections.forEach(function(el, i) { 2915 el.setAttribute('data-journey-index', String(i)); 2916 observer.observe(el); 2917 }); 2918 } 2919 2920 // --- Article read depth (blog posts + customer stories) --- 2921 // Radar has no scroll-depth signal; active time alone can't tell 2922 // "finished the article" from "left the tab open". 2923 var articleRead = { path: null, article: null, fired: {} };
2924 var ARTICLE_MILESTONES = [50, 90]; 2925 2926 function resetArticleRead() { 2927 articleRead.path = window.location.pathname; 2928 articleRead.fired = {}; 2929 articleRead.article = null; 2930 var path = articleRead.path; 2931 if (/^\/(blog|customers)\/.+/.test(path)) { 2932 articleRead.article = document.querySelector('article.editorial-prose'); 2933 } 2934 } 2935 2936 function trackArticleReadDepth() { 2937 var rafPending = false; 2938 window.addEventListener('scroll', function() { 2939 if (!articleRead.article || rafPending) return; 2940 rafPending = true; 2941 requestAnimationFrame(function() { 2942 rafPending = false; 2943 var article = articleRead.article; 2944 if (!article || !document.contains(article)) return; 2945 var rect = article.getBoundingClientRect(); 2946 var articleTop = rect.top + window.scrollY; 2947 var readPx = window.scrollY + window.innerHeight - articleTop; 2948 var progress = Math.min(100, Math.round((readPx / article.offsetHeight) * 100)); 2949 2950 ARTICLE_MILESTONES.forEach(function(milestone) { 2951 if (progress >= milestone && !articleRead.fired[milestone]) { 2952 articleRead.fired[milestone] = true; 2953 window.snitcherTrack('article_read', { 2954 milestone: milestone, 2955 page_path: articleRead.path 2956 }); 2957 } 2958 }); 2959 }); 2960 }, { passive: true }); 2961 } 2962 2963 // --- Helper: determine link location on page --- 2964 function getLinkLocation(el) { 2965 var nav = el.closest('nav, [role="navigation"]'); 2966 if (nav) return 'navbar'; 2967 var footer = el.closest('footer'); 2968 if (footer) return 'footer'; 2969 var hero = el.closest('[class*="hero"], section:first-of-type'); 2970 if (hero) return 'hero'; 2971 return 'body'; 2972 } 2973 2974 // Initialize on DOMContentLoaded 2975 if (document.readyState === 'loading') { 2976 document.addEventListener('DOMContentLoaded', init); 2977 } else { 2978 init(); 2979 } 2980 2981 function init() { 2982 pushPageMetadata(); 2983 trackCTAClicks(); 2984 trackIntercomOpens(); 2985 trackHubSpotForms(); 2986 trackTabChanges(); 2987 trackArticleReadDepth(); 2988 registerVisitorTraits(); 2989 // Per-page trackers (re-run on view transitions below) 2990 identifyFromPersonalization(); 2991 trackIntegrationView(); 2992 trackJourneySections(); 2993 resetArticleRead(); 2994 } 2995 2996 // --- Re-init on Astro View Transitions (client-side navigation) --- 2997 // `astro:page-load` fires on both initial load AND subsequent navigations. 2998 // We skip the first fire to avoid double-tracking (inline scripts already ran). 2999 var isInitialLoad = true; 3000 3001 document.addEventListener('astro:page-load', function() { 3002 if (isInitialLoad) { 3003 isInitialLoad = false; 3004 return; 3005 } 3006 3007 // Re-push page metadata to dataLayer 3008 pushPageMetadata(); 3009 trackIntercomOpens(); 3010 3011 // Per-page trackers for the newly swapped-in page 3012 identifyFromPersonalization(); 3013 trackIntegrationView(); 3014 trackJourneySections(); 3015 resetArticleRead(); 3016 3017 // Push virtual pageview for GTM (triggers GTM tags including Intercom) 3018 window.dataLayer.push({ 3019 event: 'virtualPageview', 3020 page_path: window.location.pathname, 3021 page_title: document.title 3022 }); 3023 3024 // Re-trigger Segment page tracking 3025 if (window.analytics && typeof window.analytics.page === 'function') { 3026 window.analytics.page(); 3027 } 3028 3029 // Re-trigger Meta Pixel pageview 3030 if (typeof window.fbq === 'function') { 3031 window.fbq('track', 'PageView'); 3032 } 3033 3034 // Re-trigger Snitcher Radar page tracking 3035 if (window.Snitcher && typeof window.Snitcher.page === 'function') { 3036 window.Snitcher.page(); 3037 } 3038 3039 // Re-render Intercom widget (its DOM is destroyed by the body swap, 3040 // but the JS singleton on window survives â 'update' triggers a fresh render) 3041 if (typeof window.Intercom === 'function') { 3042 window.Intercom('update'); 3043 } 3044 }); 3045})(); 3046</script>
3046 </body></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.