1<!DOCTYPE html><html lang="en"> <head><!-- ÐвÑо-ÑзÑк: на пеÑвом визиÑе опÑеделÑем ÑзÑк по бÑаÑзеÑÑ Ð¸ Ñводим на 2 локализованнÑÑ Ð²ÐµÑÑÐ¸Ñ (/ru, /de, â¦); далее Ñважаем ÑвнÑй вÑÐ±Ð¾Ñ Ð¸Ð· 3 пеÑеклÑÑаÑÐµÐ»Ñ (cookie ticketon_lang). ТолÑко Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·ÑемÑÑ ÑÑÑÐ°Ð½Ð¸Ñ â 4 ÑÑ-ÑÑÑаниÑÑ Ð¸ пÑоÑее не ÑÑогаем, ÑÑÐ¾Ð±Ñ Ð½Ðµ ÑловиÑÑ 404. ÐÑполнÑеÑÑÑ Ð´Ð¾ 5 ÑендеÑа â без миганиÑ. -->
5<script> 6 (function () { 7 var S = ['en', 'ru', 'uk', 'es', 'de', 'fr', 'pt'], D = 'en'; 8 var LOC = { '/': 1, '/pricing': 1, '/teyra': 1, '/contact': 1 }; 9 var parts = location.pathname.split('/'); 10 var hasPrefix = S.indexOf(parts[1]) >= 0; 11 var cur = hasPrefix ? parts[1] : D; 12 var bp = (hasPrefix ? '/' + parts.slice(2).join('/') : location.pathname).replace(/\/+$/, '') || '/'; 13 function ck(n) { var m = document.cookie.match('(^|; )' + n + '=([^;]+)'); return m ? m[2] : null; } 14 function setck(v) { document.cookie = 'ticketon_lang=' + v + '; path=/; max-age=31536000; samesite=lax'; } 15 var target = ck('ticketon_lang'); 16 if (!target) { 17 var nav = (navigator.language || '').slice(0, 2).toLowerCase(); 18 target = S.indexOf(nav) >= 0 ? nav : D; 19 setck(target); 20 } 21 if (!LOC[bp] || !target || target === cur) return; 22 var dest = target === D ? bp : '/' + target + (bp === '/' ? '' : bp); 23 if (dest !== location.pathname) location.replace(dest + location.search + location.hash); 24 })(); 25 </script>
25<script>document.documentElement.classList.add('js');</script>
25<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><meta name="theme-color" content="#5D87FF"><meta name="generator" content="Astro v5.18.2"><title>TicketON â One inbox for Telegram, Shopify & website chat</title><meta name="description" content="TicketON is the omnichannel support platform that unifies Telegram, your Shopify store and website live chat in one inbox â with an AI agent that drafts replies, automations that route every ticket, and analytics that show what works."><link rel="canonical" href="https://ticketon.io/"><meta name="robots" content="index, follow"><link rel="alternate" hreflang="en" href="https://ticketon.io/"><link rel="alternate" hreflang="ru" href="https://ticketon.io/ru"><link rel="alternate" hreflang="uk" href="https://ticketon.io/uk"><link rel="alternate" hreflang="es" href="https://ticketon.io/es"><link rel="alternate" hreflang="de" href="https://ticketon.io/de"><link rel="alternate" hreflang="fr" href="https://ticketon.io/fr"><link rel="alternate" hreflang="pt" href="https://ticketon.io/pt"><link rel="alternate" hreflang="x-default" href="https://ticketon.io/"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:site_name" content="TicketON"><meta property="og:title" content="TicketON â One inbox for Telegram, Shopify & website chat"><meta property="og:description" content="TicketON is the omnichannel support platform that unifies Telegram, your Shopify store and website live chat in one inbox â with an AI agent that drafts replies, automations that route every ticket, and analytics that show what works."><meta property="og:url" content="https://ticketon.io/"><meta property="og:image" content="https://ticketon.io/og.png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="TicketON â One inbox for Telegram, Shopify & website chat"><meta property="og:locale" content="en_US"><meta property="og:locale:alternate" content="ru_RU"><meta property="og:locale:alternate" content="uk_UA"><meta property="og:locale:alternate" content="es_ES"><meta property="og:locale:alternate" content="de_DE"><meta property="og:locale:alternate" content="fr_FR"><meta property="og:locale:alternate" content="pt_BR"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="TicketON â One inbox for Telegram, Shopify & website chat"><meta name="twitter:description" content="TicketON is the omnichannel support platform that unifies Telegram, your Shopify store and website live chat in one inbox â with an AI agent that drafts replies, automations that route every ticket, and analytics that show what works."><meta name="twitter:image" content="https://ticketon.io/og.png"><meta name="twitter:image:alt" content="TicketON â One inbox for Telegram, Shopify & website chat">
25<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://ticketon.io/#org","name":"TicketON","url":"https://ticketon.io","logo":"https://ticketon.io/favicon.svg"},{"@type":"SoftwareApplication","name":"TicketON","applicationCategory":"BusinessApplication","operatingSystem":"Web","description":"TicketON is the omnichannel support platform that unifies Telegram, your Shopify store and website live chat in one inbox â with an AI agent that drafts replies, automations that route every ticket, and analytics that show what works.","offers":{"@type":"Offer","price":"0","priceCurrency":"USD","description":"Free plan available"},"publisher":{"@id":"https://ticketon.io/#org"}}]}</script>
25<link rel="stylesheet" href="/_astro/a.n4-N1tQo.css"> 26<style>.cookie-consent[data-astro-cid-garwan2p][hidden]{display:none}.cookie-consent[data-astro-cid-garwan2p]{position:fixed;left:1rem;right:1rem;bottom:1rem;z-index:60;max-width:28rem;margin-inline:auto;display:flex;flex-direction:column;gap:.75rem;padding:1rem 1.1rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--card);color:var(--foreground);box-shadow:var(--shadow-pop);font-size:.9rem}@media(min-width:640px){.cookie-consent[data-astro-cid-garwan2p]{left:1.25rem;right:auto;margin-inline:0}}.cookie-consent[data-astro-cid-garwan2p] .cc-text[data-astro-cid-garwan2p]{margin:0;line-height:1.55;color:var(--muted-foreground)}.cookie-consent[data-astro-cid-garwan2p] a[data-astro-cid-garwan2p]{color:var(--primary);text-decoration:underline;text-underline-offset:2px}.cc-actions[data-astro-cid-garwan2p]{display:flex;gap:.5rem;justify-content:flex-end}.cc-btn[data-astro-cid-garwan2p]{border-radius:var(--radius-md);padding:.45rem .95rem;font-size:.85rem;font-weight:600;cursor:pointer;border:1px solid transparent}.cc-btn-ghost[data-astro-cid-garwan2p]{background:transparent;border-color:var(--border);color:var(--foreground)}.cc-btn-primary[data-astro-cid-garwan2p]{background:var(--primary);color:var(--primary-foreground)}.lang-switcher[data-astro-cid-a2mxz4y6]>summary[data-astro-cid-a2mxz4y6]::-webkit-details-marker{display:none}.lang-switcher[data-astro-cid-a2mxz4y6][open] .lang-chevron[data-astro-cid-a2mxz4y6]{transform:rotate(180deg)} 27.sc-text[data-astro-cid-bnxxdwxg]{opacity:0;transform:translateY(-16px);transition:opacity .5s ease,transform .55s cubic-bezier(.22,1,.36,1)}.sc-text[data-astro-cid-bnxxdwxg].is-active{opacity:1;transform:translateY(0)}.sc-card[data-astro-cid-bnxxdwxg]{opacity:0;transform-origin:top center;will-change:transform,opacity,filter}.sc-card[data-astro-cid-bnxxdwxg].is-active{opacity:1}@media(prefers-reduced-motion:reduce){.sc-text[data-astro-cid-bnxxdwxg]{transition:opacity .3s ease;transform:none}}.marquee[data-astro-cid-7s7xinkd]{overflow:hidden}.marquee-track[data-astro-cid-7s7xinkd]{animation:hl-marquee var(--dur, 42s) linear infinite}.marquee[data-astro-cid-7s7xinkd]:hover .marquee-track[data-astro-cid-7s7xinkd]{animation-play-state:paused}@keyframes hl-marquee{to{transform:translate(-50%)}}@media(prefers-reduced-motion:reduce){.marquee-track[data-astro-cid-7s7xinkd]{animation:none}} 28</style></head> <body> <header class="fixed inset-x-0 top-0 z-50"> <div class="wrap pt-3 sm:pt-4"> <div class="relative flex h-14 items-center justify-between gap-3 rounded-2xl border border-border/70 bg-white/80 pl-2.5 pr-2.5 shadow-[0_10px_30px_-14px_rgba(16,24,40,0.22)] backdrop-blur-md"> <a href="/" class="flex items-center gap-2 rounded-lg px-1.5 py-1.5 transition-colors hover:bg-secondary/60" aria-label="TicketON"> <svg viewBox="0 0 504 334" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="size-[22px] text-primary" aria-hidden="true"> <path d="M0 166.951C0 188.875 4.34544 210.585 12.7882 230.84C21.231 251.095 33.6058 269.5 49.206 285.002C64.8062 300.505 83.3264 312.803 103.709 321.193C124.092 329.583 145.938 333.901 168 333.901L168 242.079C158.072 242.079 148.241 240.135 139.069 236.36C129.897 232.584 121.563 227.05 114.543 220.074C107.522 213.098 101.954 204.816 98.1546 195.701C94.3553 186.586 92.3999 176.817 92.3999 166.951H0Z"></path> <path d="M504 166.951C504 188.875 499.655 210.585 491.212 230.84C482.769 251.095 470.395 269.5 454.794 285.002C439.194 300.505 420.674 312.803 400.291 321.193C379.909 329.583 358.063 333.901 336.001 333.901V242.079C345.929 242.079 355.759 240.135 364.931 236.36C374.104 232.584 382.438 227.05 389.458 220.074C396.478 213.098 402.047 204.816 405.846 195.701C409.645 186.586 411.601 176.817 411.601 166.951H504Z"></path> <path d="M504 166.951C504 145.027 499.655 123.316 491.212 103.061C482.769 82.8056 470.395 64.4012 454.794 48.8985C439.194 33.3957 420.674 21.0983 400.291 12.7083C379.909 4.31828 358.063 -9.58336e-07 336.001 0V91.8224C345.929 91.8224 355.759 93.7656 364.931 97.5411C374.104 101.317 382.438 106.85 389.458 113.827C396.478 120.803 402.047 129.085 405.846 138.2C409.645 147.315 411.601 157.085 411.601 166.951H504Z"></path> <path d="M168 166.95C168 145.026 172.346 123.316 180.789 103.061C189.231 82.8056 201.606 64.4012 217.206 48.8985C232.807 33.3957 251.327 21.0983 271.709 12.7083C292.092 4.31828 313.939 -9.58336e-07 336.001 0V91.8224C326.073 91.8224 316.242 93.7656 307.069 97.5411C297.897 101.317 289.563 106.85 282.543 113.827C275.523 120.803 269.954 129.085 266.155 138.2C262.356 147.315 260.4 157.084 260.4 166.95H168Z"></path> <path d="M336 242.081H168V333.903H336V242.081Z"></path> <path d="M92.4034 0.00133011H0.00352479V166.951H92.4034V0.00133011Z"></path> </svg> <span class="text-[16px] font-bold tracking-tight text-foreground">TicketON</span> </a> <nav class="hidden flex-1 items-center justify-center gap-1 md:flex"> <a href="/teyra" class="rounded-lg px-3 py-1.5 text-[13.5px] font-medium text-muted-foreground transition-colors hover:text-foreground">Teyra AI</a><a href="/pricing" class="rounded-lg px-3 py-1.5 text-[13.5px] font-medium text-muted-foreground transition-colors hover:text-foreground">Pricing</a><a href="/help" class="rounded-lg px-3 py-1.5 text-[13.5px] font-medium text-muted-foreground transition-colors hover:text-foreground">Help Center</a> </nav> <div class="flex items-center gap-1.5"> <!-- Logged-out (default for first-time visitors). The script below swaps 29 to "Go to dashboard" when a session-flag cookie is present on this 30 domain (set by the app on the app.* subdomain). --> <div data-auth-out class="flex items-center gap-1.5"> <a href="https://app.ticketon.io/login" class="hidden rounded-md px-3.5 py-2 text-sm font-semibold text-foreground transition-colors hover:bg-secondary sm:inline-flex">Log in</a> <a class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md font-semibold outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/45 focus-visible:ring-offset-2 whitespace-nowrap h-10 px-4 text-sm bg-primary text-primary-foreground hover:bg-primary/90 " href="https://app.ticketon.io/register"> Start free </a> </div> <div data-auth-in class="hidden items-center gap-1.5"> <a class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md font-semibold outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/45 focus-visible:ring-offset-2 whitespace-nowrap h-10 px-4 text-sm bg-primary text-primary-foreground hover:bg-primary/90 " href="https://app.ticketon.io"> Go to dashboard </a> </div> </div> </div> </div> </header>
30<script> 31 (function () { 32 // The app sets a non-httpOnly "ticketon_auth" flag cookie on the parent 33 // domain while a session exists. If it's here, this browser is logged in â 34 // show "Go to dashboard" instead of "Log in / Start free". 35 function loggedIn(name) { 36 return document.cookie.split('; ').some(function (c) { 37 return c.indexOf(name + '=') === 0 && c.length > name.length + 1; 38 }); 39 } 40 if (loggedIn('ticketon_auth')) { 41 var out = document.querySelector('[data-auth-out]'); 42 var inn = document.querySelector('[data-auth-in]'); 43 if (out) out.style.display = 'none'; 44 if (inn) { inn.classList.remove('hidden'); inn.classList.add('flex'); } 45 } 46 })(); 47</script>
47 <main> <section class="relative isolate overflow-hidden border-b border-border"> <!-- soft colorful mesh (Filo-style), in our brand tones --> <div class="pointer-events-none absolute inset-x-0 top-0 -z-10 h-[940px]" style="background: radial-gradient(40% 50% at 15% 8%, rgba(93,135,255,0.55), transparent 60%), radial-gradient(42% 52% at 85% 3%, rgba(139,118,255,0.5), transparent 60%), radial-gradient(46% 44% at 58% 27%, rgba(96,196,255,0.4), transparent 60%), radial-gradient(38% 42% at 99% 38%, rgba(120,145,255,0.45), transparent 60%), radial-gradient(36% 40% at 1% 32%, rgba(150,130,255,0.4), transparent 60%); -webkit-mask-image: linear-gradient(to bottom, #000 48%, transparent); mask-image: linear-gradient(to bottom, #000 48%, transparent);"></div> <div class="wrap relative pt-32 pb-12 text-center sm:pt-40"> <span class="mb-7 inline-flex items-center gap-2.5 rounded-full border border-border bg-card/80 px-2.5 py-1.5 shadow-soft backdrop-blur-sm"> <span class="flex -space-x-1.5"> <span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full ring-2 ring-card size-5"><img src="/channels/telegram.svg" alt="" class="size-full object-cover" loading="lazy"></span> <span class="inline-flex size-5 items-center justify-center rounded-full bg-[#eef2ff] text-primary ring-2 ring-card"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" /> <rect x="2" y="4" width="20" height="16" rx="2" /></svg></span> <span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full ring-2 ring-card size-5 bg-white"><img src="/channels/shopify.svg" alt="" class="size-[76%] object-contain" loading="lazy"></span> <span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full ring-2 ring-card size-5"><img src="/channels/web-widget.svg" alt="" class="size-full object-cover" loading="lazy"></span> </span> <span class="text-[13px] font-medium text-foreground">One inbox for every channel</span> </span> <h1 class="mx-auto max-w-4xl text-balance text-[2.7rem] font-bold leading-[1.03] tracking-[-0.035em] text-foreground sm:text-[4.4rem]"> One workspace for every<br class="hidden sm:block"> <span class="text-primary">customer conversation</span> </h1> <p class="mx-auto mt-6 max-w-xl text-pretty text-lg text-muted-foreground"> Bring Telegram, Email, Shopify and your website into one inbox â and let AI resolve the repetitive half so your team can focus on the rest. </p> <div class="mt-8 flex flex-col items-center justify-center gap-3 sm:flex-row"> <a class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md font-semibold outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/45 focus-visible:ring-offset-2 whitespace-nowrap h-11 px-5 text-[0.95rem] bg-primary text-primary-foreground hover:bg-primary/90 " href="https://app.ticketon.io/register"> Start for free </a> <a class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md font-semibold outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/45 focus-visible:ring-offset-2 whitespace-nowrap h-11 px-5 text-[0.95rem] border border-border bg-card text-foreground hover:bg-secondary " href="https://app.ticketon.io/register"> Book a demo </a> </div> <p class="mt-5 text-sm text-muted-foreground">Free plan · No credit card · Live in minutes</p> </div> <div class="relative mx-auto max-w-[1180px] px-5 pb-20 sm:px-8"> <div class="hero-3d-scene"> <div class="hero-3d-card overflow-hidden rounded-2xl border border-border bg-card shadow-card" data-hero-3d> <!-- СкÑинÑÐ¾Ñ ÑабоÑего пÑоÑÑÑанÑÑва (HERO). Ðоложи ÑиÑокий деÑкÑоп-ÑкÑин 48 в public/screens/hero-workspace.png â каÑÑоÑка Ñама даÑÑ ÑамкÑ/ÑенÑ/ 49 3D-наклон. ЧÑÐ¾Ð±Ñ Ð²ÐµÑнÑÑÑ ÐºÐ¾Ð´Ð¾Ð²Ñй мок â <AppPreview /> в иÑÑоÑии git. --> <img src="/screens/hero-workspace.png" alt="Ticketon â one workspace for every customer conversation" class="block h-auto w-full"> </div> </div> <div class="mt-9 flex flex-wrap items-center justify-center gap-x-8 gap-y-3 text-sm text-muted-foreground"> <span class="font-medium">Works with</span> <span class="flex items-center gap-2"><span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full size-5"><img src="/channels/telegram.svg" alt="" class="size-full object-cover" loading="lazy"></span> Telegram</span> <span class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-5 text-primary" aria-hidden="true"><path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" /> <rect x="2" y="4" width="20" height="16" rx="2" /></svg> Email</span> <span class="flex items-center gap-2"><span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full size-5 bg-white"><img src="/channels/shopify.svg" alt="" class="size-[76%] object-contain" loading="lazy"></span> Shopify</span> <span class="flex items-center gap-2"><span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full size-5"><img src="/channels/web-widget.svg" alt="" class="size-full object-cover" loading="lazy"></span> Website widget</span> </div> </div> </section>
49<script> 50 /* Hero 3D parallax scroll-reveal: the app preview lies back in 3D and stands 51 up to face you as you scroll. Pure scrollY â rAF, so it's smooth and works 52 in every browser (no scroll-timeline dependency). */ 53 (() => { 54 const card = document.querySelector('[data-hero-3d]'); 55 if (!card) return; 56 if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; 57 58 const MAX_ROT = 10; // degrees of tilt at rest (top of page) â kept subtle 59 let ticking = false; 60 61 const apply = () => { 62 ticking = false; 63 const flatAt = Math.max(420, window.innerHeight * 0.82); // scroll px to stand fully up 64 const y = window.scrollY || window.pageYOffset || 0; 65 const p = Math.min(1, Math.max(0, y / flatAt)); 66 const e = 1 - (1 - p) * (1 - p); // easeOutQuad 67 const rot = (1 - e) * MAX_ROT; 68 const scale = 0.975 + 0.025 * e; 69 card.style.transform = 'rotateX(' + rot.toFixed(2) + 'deg) scale(' + scale.toFixed(3) + ')'; 70 }; 71 const onScroll = () => { 72 if (!ticking) { ticking = true; requestAnimationFrame(apply); } 73 }; 74 75 apply(); 76 window.addEventListener('scroll', onScroll, { passive: true }); 77 window.addEventListener('resize', onScroll, { passive: true }); 78 })(); 79</script>
79 <!-- scroll-fill statement: words darken in reading order as you scroll --> <section class="bg-background py-28 sm:py-40"> <div class="wrap"> <p data-scroll-fill class="mx-auto max-w-4xl text-center text-[1.7rem] font-semibold leading-[1.34] tracking-tight sm:text-[2.6rem] sm:leading-[1.32]"> <span class="scroll-fill-word">Every</span> <span class="scroll-fill-word">conversation</span> <span class="scroll-fill-word">answered.</span> <span class="scroll-fill-word">Every</span> <span class="scroll-fill-word">order</span> <span class="scroll-fill-word">handled.</span> <span class="scroll-fill-word">While</span> <span class="scroll-fill-word">your</span> <span class="scroll-fill-word">team</span> <span class="scroll-fill-word">sleeps</span> <span class="scroll-fill-word">or</span> <span class="scroll-fill-word">ships</span> <span class="scroll-fill-word">the</span> <span class="scroll-fill-word">next</span> <span class="scroll-fill-word">big</span> <span class="scroll-fill-word">thing,</span> <span class="scroll-fill-word">Teyra</span> <span class="scroll-fill-word">keeps</span> <span class="scroll-fill-word">the</span> <span class="scroll-fill-word">inbox</span> <span class="scroll-fill-word">moving.</span> </p> </div> </section>
79<script> 80 /* Word-by-word scroll fill: a single scroll-progress scalar for the paragraph 81 drives a fill index, so words darken in reading order (even within a line) 82 as it crosses the screen, and lighten again on scroll-up. scrollY â rAF, 83 so it's smooth and works in every browser (no scroll-timeline needed). */ 84 (() => { 85 const root = document.querySelector('[data-scroll-fill]'); 86 if (!root) return; 87 if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; 88 89 const words = Array.from(root.querySelectorAll('.scroll-fill-word')); 90 const N = words.length; 91 const FEATHER = 4; // how many words sit mid-transition at once (soft edge) 92 let ticking = false; 93 94 const apply = () => { 95 ticking = false; 96 const vh = window.innerHeight || 1; 97 const r = root.getBoundingClientRect(); 98 const center = r.top + r.height / 2; 99 // q: 0 when the paragraph centre is low on screen (80%), 1 when high (20%) 100 let q = (vh * 0.8 - center) / (vh * 0.6); 101 q = q < 0 ? 0 : q > 1 ? 1 : q; 102 const f = q * (N + FEATHER); 103 for (let i = 0; i < N; i++) { 104 let p = (f - i) / FEATHER; 105 p = p < 0 ? 0 : p > 1 ? 1 : p; 106 const pct = (24 + 76 * p).toFixed(1); // 24% faint â 100% foreground 107 words[i].style.color = 'color-mix(in srgb, var(--foreground) ' + pct + '%, var(--background))'; 108 } 109 }; 110 const onScroll = () => { if (!ticking) { ticking = true; requestAnimationFrame(apply); } }; 111 112 apply(); 113 window.addEventListener('scroll', onScroll, { passive: true }); 114 window.addEventListener('resize', onScroll, { passive: true }); 115 })(); 116</script>
116 <!-- the four pillars, each a real mini-interface (bento) --> <section class="bg-surface py-20 sm:py-24"> <div class="wrap"> <div class="reveal mx-auto max-w-2xl text-center"> <p class="eyebrow justify-center">The platform</p> <h2 class="mt-4 text-[2rem] font-bold leading-[1.08] tracking-tight text-foreground sm:text-[2.7rem]">Everything support needs, in one place</h2> <p class="mt-4 text-lg text-muted-foreground">Not a feature list â the actual screens. Inbox, AI, copilot, triggers and analytics, all on the same data.</p> </div> <div class="stagger-grid mt-12 grid grid-cols-1 gap-4 lg:grid-cols-6"> <!-- top row: two hero tiles --> <article class="group flex flex-col overflow-hidden rounded-2xl border border-border bg-card shadow-soft transition-colors hover:border-primary/30 hover:shadow-card lg:col-span-3"> <div class="flex flex-1 items-center justify-center overflow-hidden bg-surface p-6 sm:p-10 min-h-[300px] sm:min-h-[340px]"><div class="w-full rounded-xl border border-border bg-card shadow-soft max-w-[470px]"> <div class="flex items-center gap-2 border-b border-border px-4 py-3"> <h3 class="flex-1 text-sm font-semibold text-foreground">All chats</h3> <span class="rounded-full bg-secondary px-2 py-0.5 text-xs font-semibold text-muted-foreground">26</span> </div> <div> <div class="flex items-center gap-3 px-4 py-2.5 bg-accent"> <div class="relative shrink-0"> <span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-10 text-[13px]" style="background-color:#2563eb">S</span> <span class="absolute -bottom-0.5 -right-0.5"><span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full ring-2 ring-card size-[17px] bg-white"><img src="/channels/shopify.svg" alt="" class="size-[76%] object-contain" loading="lazy"></span></span> </div> <div class="min-w-0 flex-1"> <div class="flex items-center justify-between gap-2"> <span class="truncate text-[13.5px] font-semibold text-foreground">Sophie Müller</span> <span class="shrink-0 text-[11px] text-muted-foreground tabular-nums">14:04</span> </div> <div class="mt-0.5 flex items-center gap-1.5"> <span class="flex min-w-0 flex-1 items-center gap-1.5 text-[12.5px] text-muted-foreground/80" aria-label="typingâ¦"> <span class="inline-flex shrink-0 items-center gap-1 align-middle"> <span class="inline-block size-1.5 animate-typing-dot rounded-full bg-muted-foreground/80" style="animation-delay:0ms"></span> <span class="inline-block size-1.5 animate-typing-dot rounded-full bg-muted-foreground/80" style="animation-delay:150ms"></span> <span class="inline-block size-1.5 animate-typing-dot rounded-full bg-muted-foreground/80" style="animation-delay:300ms"></span> </span> <span class="lt-type min-w-0 truncate">Can I change the shipping address?</span> </span> <img src="/status/new.svg" alt="" class="size-5 shrink-0"> </div> </div> </div><div class="flex items-center gap-3 px-4 py-2.5"> <div class="relative shrink-0"> <span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-10 text-[13px]" style="background-color:#4f46e5">E</span> <span class="absolute -bottom-0.5 -right-0.5"><span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full ring-2 ring-card size-[17px]"><img src="/channels/web-widget.svg" alt="" class="size-full object-cover" loading="lazy"></span></span> </div> <div class="min-w-0 flex-1"> <div class="flex items-center justify-between gap-2"> <span class="truncate text-[13.5px] font-semibold text-foreground">Emma Carter</span> <span class="shrink-0 text-[11px] text-muted-foreground tabular-nums">13:46</span> </div> <div class="mt-0.5 flex items-center gap-1.5"> <span class="min-w-0 flex-1 truncate text-[12.5px] font-medium text-foreground/90">Is the Aurora jacket back in size M?</span> <img src="/status/awaiting-client.svg" alt="" class="size-5 shrink-0"> </div> </div> </div><div class="flex items-center gap-3 px-4 py-2.5"> <div class="relative shrink-0"> <span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-10 text-[13px]" style="background-color:#0d9488">L</span> <span class="absolute -bottom-0.5 -right-0.5"><span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full ring-2 ring-card size-[17px]"><img src="/channels/telegram.svg" alt="" class="size-full object-cover" loading="lazy"></span></span> </div> <div class="min-w-0 flex-1"> <div class="flex items-center justify-between gap-2"> <span class="truncate text-[13.5px] font-semibold text-foreground">Liam Novak</span> <span class="shrink-0 text-[11px] text-muted-foreground tabular-nums">13:58</span> </div> <div class="mt-0.5 flex items-center gap-1.5"> <span class="min-w-0 flex-1 truncate text-[12.5px] text-muted-foreground">Thanks for the quick help!</span> <img src="/status/closed.svg" alt="" class="size-5 shrink-0"> </div> </div> </div><div class="flex items-center gap-3 px-4 py-2.5"> <div class="relative shrink-0"> <span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-10 text-[13px]" style="background-color:#db2777">J</span> <span class="absolute -bottom-0.5 -right-0.5"><span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full ring-2 ring-card size-[17px] bg-white"><img src="/channels/shopify.svg" alt="" class="size-[76%] object-contain" loading="lazy"></span></span> </div> <div class="min-w-0 flex-1"> <div class="flex items-center justify-between gap-2"> <span class="truncate text-[13.5px] font-semibold text-foreground">James Wong</span> <span class="shrink-0 text-[11px] text-muted-foreground tabular-nums">11:20</span> </div> <div class="mt-0.5 flex items-center gap-1.5"> <span class="min-w-0 flex-1 truncate text-[12.5px] text-muted-foreground">Where is my refund for #1031?</span> <img src="/status/awaiting-client.svg" alt="" class="size-5 shrink-0"> </div> </div> </div> </div> </div>
116<script> 117 (function () { 118 var el = document.querySelector('.lt-type'); 119 if (!el) return; 120 var msg = 'Can I change the shipping address?'; 121 if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) { 122 el.textContent = msg; 123 return; 124 } 125 var i = 0, dir = 1; 126 function tick() { 127 el.textContent = msg.slice(0, i); 128 if (dir > 0) { 129 if (i < msg.length) { i++; setTimeout(tick, 65 + Math.random() * 55); } 130 else { dir = -1; setTimeout(tick, 1500); } 131 } else { 132 if (i > 0) { i--; setTimeout(tick, 26); } 133 else { dir = 1; setTimeout(tick, 650); } 134 } 135 } 136 tick(); 137 })(); 138</script>
138</div> <div class="border-t border-border p-6 min-h-[7rem]"><h3 class="text-[1.15rem] font-semibold tracking-tight text-foreground">Shared inbox</h3><p class="mt-1.5 text-[14.5px] leading-relaxed text-muted-foreground">Every channel as one thread per customer â with full history and status.</p></div> </article> <article class="group flex flex-col overflow-hidden rounded-2xl border border-border bg-card shadow-soft transition-colors hover:border-primary/30 hover:shadow-card lg:col-span-3"> <div class="flex flex-1 items-center justify-center overflow-hidden bg-surface p-6 sm:p-10 min-h-[300px] sm:min-h-[340px]"><div class="w-full max-w-[490px] rounded-xl border border-border bg-card p-5 shadow-soft"><div class="grid grid-cols-3 gap-3"><div><p class="truncate text-[11px] font-medium text-muted-foreground">First response</p><p class="mt-1 text-xl font-bold tabular-nums text-foreground">1m 12s</p><p class="mt-0.5 inline-flex items-center gap-1 text-[11px] font-medium text-success">â 18%</p></div><div><p class="truncate text-[11px] font-medium text-muted-foreground">SLA ⤠5 min</p><p class="mt-1 text-xl font-bold tabular-nums text-foreground">94%</p><p class="mt-0.5 inline-flex items-center gap-1 text-[11px] font-medium text-success">â 6%</p></div><div><p class="truncate text-[11px] font-medium text-muted-foreground">CSAT</p><p class="mt-1 text-xl font-bold tabular-nums text-foreground">96%</p><p class="mt-0.5 inline-flex items-center gap-1 text-[11px] font-medium text-success">â 2%</p></div></div><div class="mt-5 border-t border-border pt-4"><div class="mb-2 flex items-center justify-between"><span class="text-[13px] font-medium text-foreground">Dialogs over the period</span><div class="flex items-center gap-3 text-[10.5px] text-muted-foreground"><span class="inline-flex items-center gap-1"><span class="size-1.5 rounded-full bg-primary"></span> Created</span><span class="inline-flex items-center gap-1"><span class="size-1.5 rounded-full bg-success"></span> Closed</span></div></div><svg viewBox="0 0 320 92" preserveAspectRatio="none" class="h-24 w-full overflow-visible"><line x1="6" x2="314" y1="26" y2="26" class="text-border" stroke="currentColor" stroke-width="1" vector-effect="non-scaling-stroke" stroke-dasharray="3 4"></line><line x1="6" x2="314" y1="46" y2="46" class="text-border" stroke="currentColor" stroke-width="1" vector-effect="non-scaling-stroke" stroke-dasharray="3 4"></line><line x1="6" x2="314" y1="66" y2="66" class="text-border" stroke="currentColor" stroke-width="1" vector-effect="non-scaling-stroke" stroke-dasharray="3 4"></line><g class="bento-wipe"><polygon points="6,86 6.0,45.4 57.3,33.9 108.7,37.7 160.0,20.0 211.3,26.3 262.7,6.0 314.0,12.3 314,86" class="text-primary" fill="currentColor" fill-opacity="0.08" stroke="none"></polygon><polyline points="6.0,45.4 57.3,33.9 108.7,37.7 160.0,20.0 211.3,26.3 262.7,6.0 314.0,12.3" class="text-primary" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" vector-effect="non-scaling-stroke"></polyline><polyline points="6.0,50.4 57.3,41.6 108.7,42.8 160.0,28.9 211.3,31.4 262.7,14.9 314.0,16.2" class="text-success" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" vector-effect="non-scaling-stroke"></polyline></g></svg><div class="mt-1 flex justify-between px-0.5 text-[10px] text-muted-foreground"><span>M</span><span>T</span><span>W</span><span>T</span><span>F</span><span>S</span><span>S</span></div></div></div></div> <div class="border-t border-border p-6 min-h-[7rem]"><h3 class="text-[1.15rem] font-semibold tracking-tight text-foreground">Analytics</h3><p class="mt-1.5 text-[14.5px] leading-relaxed text-muted-foreground">Response times, volume and CSAT â by channel, team and agent.</p></div> </article> <!-- bottom row: three supporting tiles --> <article class="group flex flex-col overflow-hidden rounded-2xl border border-border bg-card shadow-soft transition-colors hover:border-primary/30 hover:shadow-card lg:col-span-2"> <div class="flex flex-1 items-center justify-center overflow-hidden bg-surface p-5 sm:p-6 min-h-[200px]"><div class="w-full max-w-[330px]" data-teyra><div data-teyra-scroll class="h-[188px] space-y-2 overflow-hidden [scroll-behavior:smooth]"><div data-id="c1" class="teyra-step flex justify-start"><div class="max-w-[86%] rounded-2xl rounded-tl-md border border-border bg-card px-3 py-1.5 text-[12px] leading-snug text-foreground shadow-sm">Hi! Iâve changed my mind about #1042 â can you cancel it and refund me? ð</div></div><div data-id="ty1" class="teyra-step flex justify-end"><div class="rounded-2xl rounded-br-md bg-secondary px-3 py-2"><span class="inline-flex items-center gap-1 align-middle"><span class="inline-block size-1.5 animate-typing-dot rounded-full bg-muted-foreground
138/80" style="animation-delay:0ms"></span><span class="inline-block size-1.5 animate-typing-dot rounded-full bg-muted-foreground/80" style="animation-delay:150ms"></span><span class="inline-block size-1.5 animate-typing-dot rounded-full bg-muted-foreground/80" style="animation-delay:300ms"></span></span></div></div><div data-id="t1" class="teyra-step flex justify-end"><div class="max-w-[84%] rounded-2xl rounded-br-md border border-violet-400/30 bg-gradient-to-br from-violet-500/[0.13] to-indigo-500/[0.07] px-3 py-1.5 text-[12px] leading-snug text-foreground shadow-[0_8px_22px_-16px_rgba(124,108,255,0.35)]">Of course â let me pull up your order and sort it out right now.</div></div><div data-id="think" class="teyra-step flex justify-center"><span class="shimmer-think inline-block w-[210px] text-center text-[11.5px]" data-think>Looking up order #1042â¦</span></div><div data-id="t2" class="teyra-step flex justify-end"><div class="max-w-[84%] rounded-2xl rounded-br-md border border-violet-400/30 bg-gradient-to-br from-violet-500/[0.13] to-indigo-500/[0.07] px-3 py-1.5 text-[12px] leading-snug text-foreground shadow-[0_8px_22px_-16px_rgba(124,108,255,0.35)]">All done â your $56 refund is on its way! ð</div></div><div data-id="t3" class="teyra-step flex justify-center"><span class="inline-flex items-center gap-1.5 rounded-full bg-secondary px-3 py-1 text-[10.5px] font-medium text-muted-foreground"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3 text-emerald-600" aria-hidden="true"><path d="M18 6 7 17l-5-5" /> <path d="m22 10-7.5 7.5L13 16" /></svg> Order #1042 cancelled · $56 refunded · Shopify</span></div></div></div> 139 140
140<script> 141 (function () { 142 var root = document.querySelector('[data-teyra]'); 143 if (!root) return; 144 var scroll = root.querySelector('[data-teyra-scroll]'); 145 var get = function (id) { return root.querySelector('[data-id="' + id + '"]'); }; 146 var thinkEl = root.querySelector('[data-think]'); 147 var order = ['c1', 'ty1', 't1', 'think', 't2', 't3']; 148 var thoughts = ['Looking up order #1042â¦', 'Checking refund eligibilityâ¦', 'Cancelling the order in Shopifyâ¦', 'Issuing the $56 refundâ¦']; 149 function show(id) { var el = get(id); if (!el) return; el.style.display = 'flex'; void el.offsetWidth; el.classList.add('is-in'); } 150 function hide(id) { var el = get(id); if (!el) return; el.classList.remove('is-in'); el.style.display = 'none'; } 151 var timers = []; 152 function at(ms, fn) { timers.push(setTimeout(fn, ms)); } 153 function reset() { timers.forEach(clearTimeout); timers = []; order.forEach(hide); if (thinkEl) thinkEl.textContent = thoughts[0]; if (scroll) scroll.scrollTop = 0; } 154 function cycle() { 155 reset(); 156 at(250, function () { show('c1'); }); 157 at(1150, function () { show('ty1'); }); 158 at(2350, function () { hide('ty1'); show('t1'); }); 159 at(3250, function () { show('think'); }); 160 at(4150, function () { if (thinkEl) thinkEl.textContent = thoughts[1]; }); 161 at(5050, function () { if (thinkEl) thinkEl.textContent = thoughts[2]; }); 162 at(5950, function () { if (thinkEl) thinkEl.textContent = thoughts[3]; }); 163 at(7050, function () { hide('think'); show('t2'); }); 164 at(8050, function () { show('t3'); }); 165 at(11000, cycle); 166 } 167 function staticAll() { ['c1', 't1', 't2', 't3'].forEach(show); } 168 function begin() { 169 if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) { staticAll(); return; } 170 cycle(); 171 } 172 if ('IntersectionObserver' in window) { 173 var io = new IntersectionObserver(function (es) { es.forEach(function (e) { if (e.isIntersecting) { begin(); io.unobserve(e.target); } }); }, { threshold: 0.4 }); 174 io.observe(root); 175 } else { begin(); } 176 })(); 177 </script>
177</div> <div class="border-t border-border p-5 h-[7.5rem] shrink-0"><h3 class="text-[1.1rem] font-semibold tracking-tight text-foreground">Teyra AI</h3><p class="mt-1.5 text-[14px] leading-relaxed text-muted-foreground">Answers from your docs, cites the source â and acts on Shopify.</p></div> </article> <article class="group flex flex-col overflow-hidden rounded-2xl border border-border bg-card shadow-soft transition-colors hover:border-primary/30 hover:shadow-card lg:col-span-2"> <div class="flex flex-1 items-center justify-center overflow-hidden bg-surface p-5 sm:p-6 min-h-[200px]"><div class="w-full max-w-[316px]" data-feed><div class="mb-2.5 flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4 text-primary" aria-hidden="true"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z" /></svg><span class="text-sm font-semibold text-foreground">Triggers</span></div><div data-feed-list class="h-[178px] space-y-1.5 overflow-hidden"></div><!-- event templates (hidden), cloned by the script --><div hidden><div data-tpl="0" class="feed-row flex items-center gap-2.5 rounded-xl border border-border bg-card px-2.5 py-2 shadow-soft"><span class="grid size-7 shrink-0 place-items-center rounded-lg bg-accent text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><circle cx="8" cy="21" r="1" /> <circle cx="19" cy="21" r="1" /> <path d="M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12" /></svg></span><div class="min-w-0 flex-1"><div class="truncate text-[12px] font-medium text-foreground">Abandoned cart â 10% code</div><div class="feed-age text-[10px] text-muted-foreground">now</div></div><span class="feed-rev shrink-0 rounded-full bg-emerald-500/15 px-1.5 py-0.5 text-[10px] font-semibold tabular-nums text-emerald-600">+$32</span></div><div data-tpl="1" class="feed-row flex items-center gap-2.5 rounded-xl border border-border bg-card px-2.5 py-2 shadow-soft"><span class="grid size-7 shrink-0 place-items-center rounded-lg bg-accent text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" /> <path d="M20 2v4" /> <path d="M22 4h-4" /> <circle cx="4" cy="20" r="2" /></svg></span><div class="min-w-0 flex-1"><div class="truncate text-[12px] font-medium text-foreground">New visitor â welcome sent</div><div class="feed-age text-[10px] text-muted-foreground">now</div></div></div><div data-tpl="2" class="feed-row flex items-center gap-2.5 rounded-xl border border-border bg-card px-2.5 py-2 shadow-soft"><span class="grid size-7 shrink-0 place-items-center rounded-lg bg-accent text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M7 7h10v10" /> <path d="M7 17 17 7" /></svg></span><div class="min-w-0 flex-1"><div class="truncate text-[12px] font-medium text-foreground">Exit intent â discount shown</div><div class="feed-age text-[10px] text-muted-foreground">now</div></div><span class="feed-rev shrink-0 rounded-full bg-emerald-500/15 px-1.5 py-0.5 text-[10px] font-semibold tabular-nums text-emerald-600">+$24</span></div><div data-tpl="3" class="feed-row flex items-center gap-2.5 rounded-xl border border-border bg-card px-2.5 py-2 shadow-soft"><span class="grid size-7 shrink-0 place-items-center rounded-lg bg-accent text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z" /></svg></span><div class="min-w-0 flex-1"><div class="truncate text-[12px] font-medium text-foreground">VIP cart â escalated</div><div class="feed-age text-[10px] text-muted-foreground">now</div></div></div><div data-tpl="4" class="feed-row flex items-center gap-2.5 rounded-xl border border-border bg-card px-2.5 py-2 shadow-soft"><span class="grid size-7 shrink-0 place-items-center rounded-lg bg-accent text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><circle cx="12" cy="8" r="5" /> <path d="M20 21a8 8 0 0 0-16 0" /></svg></span><div class="min-w-0 flex-1"><div class="truncate text-[12px] font-medium text-foreground">Returning customer â greeted</div><div class="feed-age text-[10px] text-muted-foreground">now</div></div></div></div></div> 178 179
179<script> 180 (function () { 181 var root = document.querySelector('[data-feed]'); 182 if (!root) return; 183 var list = root.querySelector('[data-feed-list]'); 184 var tpls = [].slice.call(root.querySelectorAll('[data-tpl]')); 185 if (!list || !tpls.length) return; 186 var TICK = 2200, STEP = 3, ei = 0; 187 function ageText(s) { return s <= 0 ? 'now' : (s < 60 ? s + 's ago' : Math.floor(s / 60) + 'm ago'); } 188 function add(animate) { 189 var tpl = tpls[ei % tpls.length]; ei++; 190 var row = tpl.cloneNode(true); 191 row.removeAttribute('data-tpl'); row.removeAttribute('hidden'); 192 row._age = 0; 193 var a = row.querySelector('.feed-age'); if (a) a.textContent = 'now'; 194 list.insertBefore(row, list.firstChild); 195 if (animate) { row.classList.add('feed-enter'); setTimeout(function () { row.classList.remove('feed-enter'); }, 440); } 196 while (list.children.length > 5) list.removeChild(list.lastChild); 197 } 198 function bump() { 199 [].forEach.call(list.children, function (row) { 200 row._age = (row._age || 0) + STEP; 201 var a = row.querySelector('.feed-age'); if (a) a.textContent = ageText(row._age); 202 }); 203 } 204 function seed() { for (var k = 0; k < 4; k++) { add(false); bump(); } } 205 function tick() { bump(); add(true); } 206 var timer; 207 function begin() { 208 seed(); 209 if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; 210 timer = setInterval(tick, TICK); 211 } 212 if ('IntersectionObserver' in window) { 213 var io = new IntersectionObserver(function (es) { es.forEach(function (e) { if (e.isIntersecting) { begin(); io.unobserve(e.target); } }); }, { threshold: 0.4 }); 214 io.observe(root); 215 } else { begin(); } 216 })(); 217 </script>
217</div> <div class="border-t border-border p-5 h-[7.5rem] shrink-0"><h3 class="text-[1.1rem] font-semibold tracking-tight text-foreground">Triggers</h3><p class="mt-1.5 text-[14px] leading-relaxed text-muted-foreground">Watch behaviour and act â fire a discount or a nudge. No code.</p></div> </article> <article class="group flex flex-col overflow-hidden rounded-2xl border border-border bg-card shadow-soft transition-colors hover:border-primary/30 hover:shadow-card lg:col-span-2"> <div class="flex flex-1 items-center justify-center overflow-hidden bg-surface p-5 sm:p-6 min-h-[200px]"><div class="w-full max-w-[346px]" data-copilot> <p class="mb-2 flex items-center gap-1.5 px-0.5 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3 text-violet-500" aria-hidden="true"><path d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" /> <path d="M20 2v4" /> <path d="M22 4h-4" /> <circle cx="4" cy="20" r="2" /></svg> AI copilot for operators 218<span class="cp-langnow ml-auto inline-flex items-center gap-1 rounded-md border border-primary/30 bg-primary/[0.07] px-1.5 py-0.5 text-[10px] font-semibold normal-case tracking-normal text-primary" style="opacity:0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="m5 8 6 6" /> <path d="m4 14 6-6 2-3" /> <path d="M2 5h12" /> <path d="M7 2h1" /> <path d="m22 22-5-10-5 10" /> <path d="M14 18h6" /></svg> <span data-langnow>Español</span></span> </p> <!-- draft surface: the reply streams in word by word --> <div class="h-[3.75rem] overflow-hidden rounded-2xl rounded-tl-md border border-border bg-card px-3.5 py-2 text-[12px] leading-snug text-foreground shadow-sm"> <p class="cp-text"></p> </div> <!-- the copilot menu --> <div class="mt-2.5 flex flex-wrap gap-1.5"> <span data-act="draft" class="cp-btn inline-flex items-center gap-1.5 rounded-md bg-gradient-to-r from-primary to-violet-500 px-2.5 py-1 text-[12px] font-semibold text-white shadow-[0_4px_12px_-7px_rgba(93,135,255,0.6)]"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3.5" aria-hidden="true"><path d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" /> <path d="M20 2v4" /> <path d="M22 4h-4" /> <circle cx="4" cy="20" r="2" /></svg> Draft reply</span> <span data-act="improve" class="cp-btn inline-flex items-center gap-1.5 rounded-md border border-border bg-card px-2.5 py-1 text-[12px] font-medium text-foreground"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3.5" aria-hidden="true"><path d="m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72" /> <path d="m14 7 3 3" /> <path d="M5 6v4" /> <path d="M19 14v4" /> <path d="M10 2v2" /> <path d="M7 8H3" /> <path d="M21 16h-4" /> <path d="M11 3H9" /></svg> Improve</span><span data-act="translate" class="cp-btn inline-flex items-center gap-1.5 rounded-md border border-border bg-card px-2.5 py-1 text-[12px] font-medium text-foreground"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3.5" aria-hidden="true"><path d="m5 8 6 6" /> <path d="m4 14 6-6 2-3" /> <path d="M2 5h12" /> <path d="M7 2h1" /> <path d="m22 22-5-10-5 10" /> <path d="M14 18h6" /></svg> Translate</span><span class="cp-btn inline-flex items-center gap-1.5 rounded-md border border-border bg-card px-2.5 py-1 text-[12px] font-medium text-foreground"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3.5" aria-hidden="true"><path d="M15 12h-5" /> <path d="M15 8h-5" /> <path d="M19 17V5a2 2 0 0 0-2-2H4" /> <path d="M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3" /></svg> Summarize</span><span class="cp-btn inline-flex items-center gap-1.5 rounded-md border border-border bg-card px-2.5 py-1 text-[12px] font-medium text-foreground"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3.5" aria-hidden="true">
218<path d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z" /> <circle cx="7.5" cy="7.5" r=".5" fill="currentColor" /></svg> Suggest tags</span> </div> </div>
218<script> 219 (function () { 220 var root = document.querySelector('[data-copilot]'); 221 if (!root) return; 222 var text = root.querySelector('.cp-text'); 223 var langNow = root.querySelector('.cp-langnow'); 224 var langLabel = root.querySelector('[data-langnow]'); 225 var btns = { 226 draft: root.querySelector('[data-act="draft"]'), 227 improve: root.querySelector('[data-act="improve"]'), 228 translate: root.querySelector('[data-act="translate"]'), 229 }; 230 var T = { 231 draft: "Hi Olivia â you're within the 30-day window, so I've refunded $56 to your card.", 232 improve: "Hi Olivia ð You're well within our 30-day window â $56 is already on its way back to your card.", 233 es: "¡Hola Olivia! ð Estás dentro de los 30 dÃas â he reembolsado $56 a tu tarjeta.", 234 fr: "Bonjour Olivia ð Vous êtes dans les 30 jours â j'ai remboursé $56 sur votre carte.", 235 de: "Hallo Olivia ð Du bist innerhalb der 30 Tage â $56 sind auf deine Karte erstattet.", 236 }; 237 var L = { es: 'Español', fr: 'Français', de: 'Deutsch' }; 238 var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; 239 var timers = [], wt = []; 240 function at(ms, fn) { timers.push(setTimeout(fn, ms)); } 241 function stream(s) { 242 wt.forEach(clearTimeout); wt = []; 243 if (!text) return; 244 text.innerHTML = ''; 245 var words = s.split(' '); 246 words.forEach(function (w, idx) { 247 var sp = document.createElement('span'); 248 sp.className = 'cp-word'; 249 sp.textContent = w; 250 text.appendChild(sp); 251 if (idx < words.length - 1) text.appendChild(document.createTextNode(' ')); 252 wt.push(setTimeout(function () { sp.classList.add('in'); }, idx * 48)); 253 }); 254 } 255 function press(act) { 256 Object.keys(btns).forEach(function (k) { if (btns[k]) btns[k].classList.toggle('is-on', k === act); }); 257 var b = btns[act]; 258 if (b) { b.classList.add('is-press'); setTimeout(function () { b.classList.remove('is-press'); }, 260); } 259 } 260 function setLang(code) { 261 if (langLabel) langLabel.textContent = L[code] || code; 262 if (langNow) langNow.style.opacity = '1'; 263 } 264 function reset() { 265 timers.forEach(clearTimeout); timers = []; wt.forEach(clearTimeout); wt = []; 266 if (text) text.innerHTML = ''; 267 if (langNow) langNow.style.opacity = '0'; 268 Object.keys(btns).forEach(function (k) { if (btns[k]) btns[k].classList.remove('is-on'); }); 269 } 270 function cycle() { 271 reset(); 272 at(450, function () { press('draft'); }); 273 at(720, function () { stream(T.draft); }); 274 at(2700, function () { press('improve'); }); 275 at(2970, function () { stream(T.improve); }); 276 at(5100, function () { press('translate'); setLang('es'); }); 277 at(5420, function () { stream(T.es); }); 278 at(7150, function () { setLang('fr'); }); 279 at(7400, function () { stream(T.fr); }); 280 at(9100, function () { setLang('de'); }); 281 at(9350, function () { stream(T.de); }); 282 at(11700, cycle); 283 } 284 function begin() { 285 if (reduce) { if (text) text.textContent = T.improve; return; } 286 cycle(); 287 } 288 if ('IntersectionObserver' in window) { 289 var io = new IntersectionObserver(function (es) { es.forEach(function (e) { if (e.isIntersecting) { begin(); io.unobserve(e.target); } }); }, { threshold: 0.4 }); 290 io.observe(root); 291 } else { begin(); } 292 })(); 293</script>
293</div> <div class="border-t border-border p-5 h-[7.5rem] shrink-0"><h3 class="text-[1.1rem] font-semibold tracking-tight text-foreground">AI copilot</h3><p class="mt-1.5 text-[14px] leading-relaxed text-muted-foreground">Draft, improve, translate and summarise replies in one click.</p></div> </article> </div> </div> </section>
293<script> 294 /* Scroll-driven Stagger Grid Reveal: each tile rises, scales up and sharpens 295 (blur â 0) as it crosses up into the viewport. Progress is scrubbed from the 296 tile's own position, with a small leftâright offset per column, so the 297 cascade plays exactly when you reach it â and rewinds when you scroll back. 298 scrollY â rAF, so it's smooth and works in every browser. */ 299 (() => { 300 const grid = document.querySelector('.stagger-grid'); 301 if (!grid) return; 302 if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; 303 304 const tiles = Array.from(grid.children); 305 // intra-row leftâright offsets: [Inbox, Analytics | Teyra, Triggers, Copilot] 306 const colOffset = [0, 0.14, 0, 0.1, 0.2]; 307 const START = 0.9; // begin revealing when the tile top is at 90% of the viewport 308 const SPAN = 0.36; // â¦fully revealed after it rises a further 36% of the viewport 309 let ticking = false; 310 311 const apply = () => { 312 ticking = false; 313 const vh = window.innerHeight || 1; 314 for (let i = 0; i < tiles.length; i++) { 315 const el = tiles[i]; 316 const top = el.getBoundingClientRect().top; 317 let p = (START - top / vh) / SPAN - (colOffset[i] || 0); 318 p = p < 0 ? 0 : p > 1 ? 1 : p; 319 const e = 1 - Math.pow(1 - p, 3); // easeOutCubic 320 el.style.opacity = e.toFixed(3); 321 el.style.transform = 'translateY(' + ((1 - e) * 26).toFixed(2) + 'px) scale(' + (0.965 + 0.035 * e).toFixed(3) + ')'; 322 const blur = (1 - e) * 7; 323 el.style.filter = blur > 0.06 ? 'blur(' + blur.toFixed(2) + 'px)' : 'none'; 324 } 325 }; 326 const onScroll = () => { if (!ticking) { ticking = true; requestAnimationFrame(apply); } }; 327 328 apply(); 329 window.addEventListener('scroll', onScroll, { passive: true }); 330 window.addEventListener('resize', onScroll, { passive: true }); 331 })(); 332</script>
332 <!-- the whole product, on a dark band (Filo) --> <section id="showcase" class="relative bg-surface" style="height: 215vh" data-astro-cid-bnxxdwxg> <div id="sc-sticky" class="sticky top-0 flex h-screen items-center justify-center px-5 sm:px-10 lg:px-14" data-astro-cid-bnxxdwxg> <div class="relative flex min-h-[88vh] w-full max-w-[2500px] flex-col justify-center overflow-hidden rounded-[36px] bg-[#080a12] px-6 py-9 shadow-[0_60px_140px_-50px_rgba(0,0,0,0.75)] ring-1 ring-white/5 sm:px-10" data-astro-cid-bnxxdwxg> <!-- big brand glow (scales with the card) + faint grid --> <div class="pointer-events-none absolute inset-0 [background:radial-gradient(ellipse_60%_66%_at_50%_40%,rgba(124,108,255,0.42),rgba(96,110,240,0.17)_46%,transparent_74%)]" data-astro-cid-bnxxdwxg></div> <div class="pointer-events-none absolute inset-0 [background-image:linear-gradient(rgba(255,255,255,0.04)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.04)_1px,transparent_1px)] [background-size:54px_54px] [mask-image:radial-gradient(ellipse_72%_64%_at_50%_38%,#000,transparent_80%)]" data-astro-cid-bnxxdwxg></div> <div class="pointer-events-none absolute inset-x-0 top-0 h-px bg-gradient-to-r from-transparent via-white/15 to-transparent" data-astro-cid-bnxxdwxg></div> <div class="relative z-10 flex w-full flex-col items-center text-center" data-astro-cid-bnxxdwxg> <!-- heading (changes per slide) --> <div class="relative h-[112px] w-full max-w-3xl sm:h-[122px]" data-astro-cid-bnxxdwxg> <div class="sc-text absolute inset-x-0 top-0 flex flex-col items-center is-active" data-astro-cid-bnxxdwxg> <p class="text-[12.5px] font-semibold uppercase tracking-[0.2em] text-[#9db4ff]" data-astro-cid-bnxxdwxg>Command center</p> <h2 class="mt-3 max-w-2xl text-balance text-[1.8rem] font-bold leading-[1.08] tracking-tight text-white sm:text-[2.4rem]" data-astro-cid-bnxxdwxg>Your whole operation, at a glance</h2> </div><div class="sc-text absolute inset-x-0 top-0 flex flex-col items-center" data-astro-cid-bnxxdwxg> <p class="text-[12.5px] font-semibold uppercase tracking-[0.2em] text-[#9db4ff]" data-astro-cid-bnxxdwxg>AI assistant</p> <h2 class="mt-3 max-w-2xl text-balance text-[1.8rem] font-bold leading-[1.08] tracking-tight text-white sm:text-[2.4rem]" data-astro-cid-bnxxdwxg>See exactly how your AI performs</h2> </div><div class="sc-text absolute inset-x-0 top-0 flex flex-col items-center" data-astro-cid-bnxxdwxg> <p class="text-[12.5px] font-semibold uppercase tracking-[0.2em] text-[#9db4ff]" data-astro-cid-bnxxdwxg>Sales & revenue</p> <h2 class="mt-3 max-w-2xl text-balance text-[1.8rem] font-bold leading-[1.08] tracking-tight text-white sm:text-[2.4rem]" data-astro-cid-bnxxdwxg>The revenue your chat drives</h2> </div> </div> <!-- the deck â every screen is a real card in one stack; the blurred 333 ones behind physically rise to the front as you scroll --> <div class="relative mt-9 aspect-[61/30] h-[min(620px,calc(100vh_-_440px))] max-w-full" data-astro-cid-bnxxdwxg> <div class="sc-card absolute inset-0 overflow-hidden rounded-2xl bg-card shadow-[0_30px_80px_-22px_rgba(0,0,0,0.85)] ring-1 ring-black/20 is-active" data-astro-cid-bnxxdwxg> <img src="/screens/dashboard.png" alt="Your whole operation, at a glance" decoding="async" class="h-full w-full object-contain" data-astro-cid-bnxxdwxg> <div class="sc-veil pointer-events-none absolute inset-0 bg-[#070912]" style="opacity:0" data-astro-cid-bnxxdwxg></div> </div><div class="sc-card absolute inset-0 overflow-hidden rounded-2xl bg-card shadow-[0_30px_80px_-22px_rgba(0,0,0,0.85)] ring-1 ring-black/20" data-astro-cid-bnxxdwxg> <img src="/screens/inbox.png" alt="See exactly how your AI performs" decoding="async" class="h-full w-full object-contain" data-astro-cid-bnxxdwxg> <div class="sc-veil pointer-events-none absolute inset-0 bg-[#070912]" style="opacity:0" data-astro-cid-bnxxdwxg></div> </div><div class="sc-card absolute inset-0 overflow-hidden rounded-2xl bg-card shadow-[0_30px_80px_-22px_rgba(0,0,0,0.85)] ring-1 ring-black/20" data-astro-cid-bnxxdwxg> <img src="/screens/managers.png" alt="The revenue your chat drives" decoding="async" class="h-full w-full object-contain" data-astro-cid-bnxxdwxg> <div class="sc-veil pointer-events-none absolute inset-0 bg-[#070912]" style="opacity:0" data-astro-cid-bnxxdwxg></div> </div> </div> </div> </div> </div> </section>
333<script> 334 (function () { 335 var section = document.getElementById('showcase'); 336 if (!section) return; 337 var cards = section.querySelectorAll('.sc-card'); 338 var texts = section.querySelectorAll('.sc-text'); 339 var n = cards.length; 340 if (!n) return; 341 var veils = []; 342 for (var v = 0; v < n; v++) veils[v] = cards[v].querySelector('.sc-veil'); 343 var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; 344 for (var z = 0; z < n; z++) cards[z].classList.remove('is-active'); 345 var active = -1; 346 347 function clamp(v, a, b) { return v < a ? a : v > b ? b : v; } 348 function smooth(t) { return t * t * (3 - 2 * t); } 349 function posFromP(p) { 350 var seg = [[0, 0.22, 0], [0.22, 0.44, 0, 1], [0.44, 0.56, 1], [0.56, 0.78, 1, 2], [0.78, 2, 2]]; 351 for (var s = 0; s < seg.length; s++) { 352 var g = seg[s]; 353 if (p < g[1]) { if (g.length === 3) return g[2]; return g[2] + smooth((p - g[0]) / (g[1] - g[0])) * (g[3] - g[2]); } 354 } 355 return n - 1; 356 } 357 function styleFor(o) { 358 // One live deck. Cards behind (o > 0) are smaller, blurred, dimmed and 359 // peek out at the top â like the original stack. As you scroll each one 360 // physically rises to the front: it de-blurs, scales up to full and the 361 // old front slides down and out. o = index - position. 362 if (o >= 0) { 363 return { 364 ty: -o * 1.6, scale: 1 - o * 0.085, blur: o * 2.6, 365 op: clamp(1 - o * 0.06, 0, 1), z: Math.round(40 - o * 10), 366 veil: Math.min(o * 0.14, 0.34) 367 }; 368 } 369 var e = -o; 370 return { 371 ty: e * 55, scale: 1 - e * 0.03, blur: 0, 372 op: clamp(1 - e / 0.5, 0, 1), z: 50, veil: 0 373 }; 374 } 375 function setActive(i) { 376 if (i === active) return; 377 active = i; 378 for (var k = 0; k < n; k++) if (texts[k]) texts[k].classList.toggle('is-active', k === i); 379 } 380 function update() { 381 var rect = section.getBoundingClientRect(); 382 var total = section.offsetHeight - window.innerHeight; 383 var scrolled = clamp(-rect.top, 0, Math.max(total, 1)); 384 var p = total > 0 ? scrolled / total : 0; 385 var t = posFromP(p); 386 for (var k = 0; k < n; k++) { 387 var cs = cards[k].style; 388 if (reduce) { 389 cs.zIndex = 10 + k; 390 cs.opacity = Math.round(t) === k ? '1' : '0'; 391 cs.transform = 'none'; 392 cs.filter = 'none'; 393 if (veils[k]) veils[k].style.opacity = '0'; 394 continue; 395 } 396 var st = styleFor(k - t); 397 cs.opacity = st.op.toFixed(3); 398 cs.transform = 'translateY(' + st.ty.toFixed(2) + '%) scale(' + st.scale.toFixed(4) + ')'; 399 cs.filter = st.blur > 0.1 ? 'blur(' + st.blur.toFixed(2) + 'px)' : 'none'; 400 cs.zIndex = st.z; 401 if (veils[k]) veils[k].style.opacity = st.veil.toFixed(3); 402 } 403 setActive(Math.round(t)); 404 } 405 var ticking = false; 406 function onScroll() { if (!ticking) { ticking = true; requestAnimationFrame(function () { update(); ticking = false; }); } } 407 window.addEventListener('scroll', onScroll, { passive: true }); 408 window.addEventListener('resize', onScroll, { passive: true }); 409 update(); 410 })(); 411</script>
411 <!-- channels & integrations grid (AIwork) --> <section id="channels" class="scroll-mt-20 py-20 sm:py-24"> <div class="wrap"> <div class="reveal mx-auto max-w-2xl text-center"> <p class="eyebrow justify-center">Channels & integrations</p> <h2 class="mt-4 text-[2rem] font-bold leading-[1.08] tracking-tight text-foreground sm:text-[2.7rem]">Every channel into one inbox</h2> <p class="mt-4 text-lg text-muted-foreground">Telegram, email, your website and Shopify all land in a single shared thread per customer â plus the tools you already run on.</p> </div> <div class="reveal mt-8 sm:mt-10"> <div class="relative mx-auto h-[420px] w-full max-w-[900px] sm:h-[480px]"> <!-- faint grid backdrop, faded at the edges --> <div class="bg-grid absolute inset-0 opacity-60 [mask-image:radial-gradient(ellipse_74%_72%_at_50%_50%,#000_30%,transparent_100%)]"></div> <!-- connecting lines + flowing dots --> <svg viewBox="0 0 760 380" preserveAspectRatio="none" class="absolute inset-0 h-full w-full" aria-hidden="true"> <defs> <linearGradient id="orbit-line" x1="0" y1="0" x2="1" y2="0"> <stop offset="0" stop-color="#5d87ff" stop-opacity="0.7"></stop> <stop offset="1" stop-color="#5d87ff" stop-opacity="0.1"></stop> </linearGradient> </defs> <line x1="380" y1="190" x2="106" y2="76" stroke="url(#orbit-line)" stroke-width="2"></line><line x1="380" y1="190" x2="106" y2="289" stroke="url(#orbit-line)" stroke-width="2"></line><line x1="380" y1="190" x2="654" y2="76" stroke="url(#orbit-line)" stroke-width="2"></line><line x1="380" y1="190" x2="654" y2="289" stroke="url(#orbit-line)" stroke-width="2"></line> <circle r="4.5" fill="#5d87ff"> <animateMotion dur="2.6s" begin="0s" repeatCount="indefinite" path="M106,76 L380,190"></animateMotion> </circle><circle r="4.5" fill="#5d87ff"> <animateMotion dur="2.6s" begin="0.65s" repeatCount="indefinite" path="M106,289 L380,190"></animateMotion> </circle><circle r="4.5" fill="#5d87ff"> <animateMotion dur="2.6s" begin="1.3s" repeatCount="indefinite" path="M654,76 L380,190"></animateMotion> </circle><circle r="4.5" fill="#5d87ff"> <animateMotion dur="2.6s" begin="1.9500000000000002s" repeatCount="indefinite" path="M654,289 L380,190"></animateMotion> </circle> </svg> <!-- satellites --> <div class="absolute -translate-x-1/2 -translate-y-1/2" style="left:14%;top:20%"> <div class="relative grid size-[76px] place-items-center rounded-full bg-white shadow-[0_14px_34px_-12px_rgba(16,24,40,0.26)] ring-1 ring-border"> <span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full size-11"><img src="/channels/telegram.svg" alt="" class="size-full object-cover" loading="lazy"></span> </div> <span class="absolute left-1/2 top-full mt-2.5 -translate-x-1/2 whitespace-nowrap text-[13.5px] font-medium text-foreground/70">Telegram</span> </div><div class="absolute -translate-x-1/2 -translate-y-1/2" style="left:14%;top:76%"> <div class="relative grid size-[76px] place-items-center rounded-full bg-white shadow-[0_14px_34px_-12px_rgba(16,24,40,0.26)] ring-1 ring-border"> <span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full size-11 bg-white"><img src="/channels/shopify.svg" alt="" class="size-[76%] object-contain" loading="lazy"></span> </div> <span class="absolute left-1/2 top-full mt-2.5 -translate-x-1/2 whitespace-nowrap text-[13.5px] font-medium text-foreground/70">Shopify</span> </div><div class="absolute -translate-x-1/2 -translate-y-1/2" style="left:86%;top:20%"> <div class="relative grid size-[76px] place-items-center rounded-full bg-white shadow-[0_14px_34px_-12px_rgba(16,24,40,0.26)] ring-1 ring-border"> <span class="grid size-11 place-items-center rounded-full bg-slate-500 text-white"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-6" aria-hidden="true"><path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" /> <rect x="2" y="4" width="20" height="16" rx="2" /></svg></span> </div> <span class="absolute left-1/2 top-full mt-2.5 -translate-x-1/2 whitespace-nowrap text-[13.5px] font-medium text-foreground
411/70">Email</span> </div><div class="absolute -translate-x-1/2 -translate-y-1/2" style="left:86%;top:76%"> <div class="relative grid size-[76px] place-items-center rounded-full bg-white shadow-[0_14px_34px_-12px_rgba(16,24,40,0.26)] ring-1 ring-border"> <span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full size-11"><img src="/channels/web-widget.svg" alt="" class="size-full object-cover" loading="lazy"></span> </div> <span class="absolute left-1/2 top-full mt-2.5 -translate-x-1/2 whitespace-nowrap text-[13.5px] font-medium text-foreground/70">Website</span> </div> <!-- incoming message cards, sitting between each channel and the inbox --> <div class="absolute hidden w-[174px] -translate-x-1/2 -translate-y-1/2 lg:block" style="left:30%;top:33%"> <div class="rounded-xl border border-border bg-white p-2.5 shadow-[0_14px_30px_-16px_rgba(16,24,40,0.28)]"> <div class="flex items-center gap-1.5"> <span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-5 text-[9px]" style="background-color:#0d9488">L</span> <span class="truncate text-[11px] font-semibold text-foreground">Liam Novak</span> </div> <p class="mt-1 truncate text-[11px] text-muted-foreground">Thanks for the quick help!</p> </div> </div><div class="absolute hidden w-[174px] -translate-x-1/2 -translate-y-1/2 lg:block" style="left:30%;top:67%"> <div class="rounded-xl border border-border bg-white p-2.5 shadow-[0_14px_30px_-16px_rgba(16,24,40,0.28)]"> <div class="flex items-center gap-1.5"> <span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-5 text-[9px]" style="background-color:#2563eb">S</span> <span class="truncate text-[11px] font-semibold text-foreground">Sophie Müller</span> </div> <p class="mt-1 truncate text-[11px] text-muted-foreground">Can I change the address?</p> </div> </div><div class="absolute hidden w-[174px] -translate-x-1/2 -translate-y-1/2 lg:block" style="left:70%;top:33%"> <div class="rounded-xl border border-border bg-white p-2.5 shadow-[0_14px_30px_-16px_rgba(16,24,40,0.28)]"> <div class="flex items-center gap-1.5"> <span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-5 text-[9px]" style="background-color:#db2777">J</span> <span class="truncate text-[11px] font-semibold text-foreground">James Wong</span> </div> <p class="mt-1 truncate text-[11px] text-muted-foreground">Where is my refund?</p> </div> </div><div class="absolute hidden w-[174px] -translate-x-1/2 -translate-y-1/2 lg:block" style="left:70%;top:67%"> <div class="rounded-xl border border-border bg-white p-2.5 shadow-[0_14px_30px_-16px_rgba(16,24,40,0.28)]"> <div class="flex items-center gap-1.5"> <span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-5 text-[9px]" style="background-color:#4f46e5">E</span> <span class="truncate text-[11px] font-semibold text-foreground">Emma Carter</span> </div> <p class="mt-1 truncate text-[11px] text-muted-foreground">Is the jacket back in M?</p> </div> </div> <!-- hub --> <div class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2"> <div class="grid size-[128px] place-items-center rounded-full bg-white text-primary shadow-[0_22px_54px_-14px_rgba(69,112,234,0.45)] ring-1 ring-primary/25"> <svg viewBox="0 0 504 334" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="size-14" aria-hidden="true"> <path d="M0 166.951C0 188.875 4.34544 210.585 12.7882 230.84C21.231 251.095 33.6058 269.5 49.206 285.002C64.8062 300.505 83.3264 312.803 103.709 321.193C124.092 329.583 145.938 333.901 168 333.901L168 242.079C158.072 242.079 148.241 240.135 139.069 236.36C129.897 232.584 121.563 227.05 114.543 220.074C107.522 213.098 101.954 204.816 98.1546 195.701C94.3553 186.586 92.3999 176.817 92.3999 166.951H0Z"></path> <path d="M504 166.951C504 188.875 499.655 210.585 491.212 230.84C482.769 251.095 470.395 269.5 454.794 285.002C439.194 300.505 420.674 312.8
41103 400.291 321.193C379.909 329.583 358.063 333.901 336.001 333.901V242.079C345.929 242.079 355.759 240.135 364.931 236.36C374.104 232.584 382.438 227.05 389.458 220.074C396.478 213.098 402.047 204.816 405.846 195.701C409.645 186.586 411.601 176.817 411.601 166.951H504Z"></path> <path d="M504 166.951C504 145.027 499.655 123.316 491.212 103.061C482.769 82.8056 470.395 64.4012 454.794 48.8985C439.194 33.3957 420.674 21.0983 400.291 12.7083C379.909 4.31828 358.063 -9.58336e-07 336.001 0V91.8224C345.929 91.8224 355.759 93.7656 364.931 97.5411C374.104 101.317 382.438 106.85 389.458 113.827C396.478 120.803 402.047 129.085 405.846 138.2C409.645 147.315 411.601 157.085 411.601 166.951H504Z"></path> <path d="M168 166.95C168 145.026 172.346 123.316 180.789 103.061C189.231 82.8056 201.606 64.4012 217.206 48.8985C232.807 33.3957 251.327 21.0983 271.709 12.7083C292.092 4.31828 313.939 -9.58336e-07 336.001 0V91.8224C326.073 91.8224 316.242 93.7656 307.069 97.5411C297.897 101.317 289.563 106.85 282.543 113.827C275.523 120.803 269.954 129.085 266.155 138.2C262.356 147.315 260.4 157.084 260.4 166.95H168Z"></path> <path d="M336 242.081H168V333.903H336V242.081Z"></path> <path d="M92.4034 0.00133011H0.00352479V166.951H92.4034V0.00133011Z"></path> </svg> </div> <span class="absolute left-1/2 top-full mt-3 -translate-x-1/2 whitespace-nowrap text-sm font-semibold text-primary">One inbox</span> </div> </div> </div> <div class="reveal-group mx-auto mt-6 flex max-w-2xl flex-wrap items-center justify-center gap-2.5"> <span class="text-[13.5px] font-medium text-muted-foreground">Plus integrations:</span> <span class="inline-flex items-center gap-2 rounded-full border border-border bg-card px-3 py-1.5 text-[13.5px] font-medium text-foreground shadow-soft"> <span class="grid size-5 place-items-center rounded-md bg-emerald-500/12 text-emerald-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="M16 10a4 4 0 0 1-8 0" /> <path d="M3.103 6.034h17.794" /> <path d="M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z" /></svg></span> Shopify </span><span class="inline-flex items-center gap-2 rounded-full border border-border bg-card px-3 py-1.5 text-[13.5px] font-medium text-foreground shadow-soft"> <span class="grid size-5 place-items-center rounded-md bg-violet-500/12 text-violet-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z" /></svg></span> Klaviyo </span><span class="inline-flex items-center gap-2 rounded-full border border-border bg-card px-3 py-1.5 text-[13.5px] font-medium text-foreground shadow-soft"> <span class="grid size-5 place-items-center rounded-md bg-blue-500/12 text-blue-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="M12 22v-5" /> <path d="M15 8V2" /> <path d="M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z" /> <path d="M9 8V2" /></svg></span> Developer API </span> </div> </div> </section> <!-- how it works â getting started in three steps (saasai / Myniq) --> <section class="bg-surface py-20 sm:py-28"> <div class="wrap"> <div class="reveal mx-auto max-w-2xl text-center"> <p class="eyebrow justify-center">How it works</p> <h2 class="mt-4 text-[2rem] font-bold leading-[1.08] tracking-tight text-foreground sm:text-[2.7rem]">Live in an afternoon</h2> <p class="mt-4 text-lg text-muted-foreground">Connect a channel, invite your team, and start handling requests â the same day.</p> </div> <div class="mt-12 rounded-3xl border border-border bg-card p-6 shadow-soft sm:p-10"> <div class="grid gap-8 sm:grid-cols-3" data-gs> <!-- 1 · connect channels --> <div class="gs-reveal flex flex-col"> <div class="flex min-h-[9.5rem] flex-col rounded-xl border border-border bg-card p-3 text-left shadow-soft"> <div class="mb-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground">Channels</div> <ul class="space-y-1.5"> <li class="flex items-center gap-2"><span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full size-5"><img src="/channels/telegram.svg" alt="" class="size-full object-cover" loading="lazy"></span><span class="text-[12.5px] font-medium text-foreground">Telegram</span><span class="ml-auto inline-flex items-center gap-1 text-[10.5px] font-semibold text-emerald-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="M20 6 9 17l-5-5" /></svg> Connected</span></li> <li class="flex items-center gap-2"><span class="grid size-5 place-items-center rounded-full bg-blue-500/10 text-blue-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" /> <rect x="2" y="4" width="20" height="16" rx="2" /></svg></span><span class="text-[12.5px] font-medium text-foreground">Email</span><span class="ml-auto inline-flex items-center gap-1 text-[10.5px] font-semibold text-emerald-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="M20 6 9 17l-5-5" /></svg> Connected</span></li> <li class="flex items-center gap-2"><span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full size-5"><img src="/channels/web-widget.svg" alt="" class="size-full object-cover" loading="lazy"></span><span class="text-[12.5px] font-medium text-foreground">Website</span><span class="ml-auto inline-flex items-center gap-1 text-[10.5px] font-semibold text-emerald-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="M20 6 9 17l-5-5" /></svg> Connected</span></li> <li class="flex items-center gap-2"><span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full size-5 bg-white"><img src="/channels/shopify.svg" alt="" class="size-[76%] object-contain" loading="lazy"></span><span class="text-[12.5px] font-medium text-foreground">Shopify</span><span class="ml-auto inline-flex items-center gap-1 rounded-md bg-primary/10 px-1.5 py-0.5 text-[10.5px] font-semibold text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="M5 12h14" /> <path d="M12 5v14" /></svg> Connect</span></li> </ul> </div> <div class="mt-4"> <div class="flex items-baseline gap-2"><span class="text-[13px] font-bold text-primary">01</span><span class="text-[12px] font-bold uppercase tracking-wide text-primary">Connect</span></div> <h3 class="mt-1.5 text-[1.15rem] font-semibold tracking-tight text-foreground">Connect a channel</h3> <p class="mt-1.5 text-[13.5px] leading-relaxed text-muted-foreground">Telegram, email, your website or Shopify â linked in a couple of clicks.</p> </div> </div> <!-- 2 · invite team --> <div class="gs-reveal flex flex-col"> <div class="flex min-h-[9.5rem] flex-col rounded-xl border border-border bg-card p-3 text-left shadow-soft"> <div class="mb-2 flex items-center justify-between"> <span class="text-[11px] font-semibold uppercase tracking-wide text-muted-foreground">Team</span> <span class="inline-flex items-center gap-1 rounded-md bg-primary px-1.5 py-0.5 text-[10px] font-semibold text-white"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="M5 12h14" /> <path d="M12 5v14" /></svg> Invite</span> </div> <ul class="space-y-1.5"> <li class="flex items-center gap-2"><span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-6 text-[10px]" style="background-color:#2563eb">D</span><span class="text-[12.5px] font-medium text-foreground">Daniel K.</span><span class="ml-auto rounded bg-secondary px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">Admin</span></li> <li class="flex items-center gap-2"><span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-6 text-[10px]" style="background-color:#e11d48">M</span><span class="text-[12.5px] font-medium text-foreground">Mia S.</span><span class="ml-auto rounded bg-secondary px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">Operator</span></li> <li class="flex items-center gap-2"><span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-6 text-[10px]" style="background-color:#0d9488">L</span><span class="text-[12.5px] font-medium text-foreground">Liam N.</span><span class="ml-auto rounded bg-secondary px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">Operator</span></li> </ul> </div> <div class="mt-4"> <div class="flex items-baseline gap-2"><span class="text-[13px] font-bold text-violet-600">02</span><span class="text-[12px] font-bold uppercase tracking-wide text-violet-600">Invite</span></div> <h3 class="mt-1.5 text-[1.15rem] font-semibold tracking-tight text-foreground">Invite your team</h3> <p class="mt-1.5 text-[13.5px] leading-relaxed text-muted-foreground">
411Bring in your operators and teammates, with roles and smart routing.</p> </div> </div> <!-- 3 · handle requests --> <div class="gs-reveal flex flex-col"> <div class="flex min-h-[9.5rem] flex-col rounded-xl border border-border bg-card p-3 text-left shadow-soft"> <div class="mb-2 flex items-center gap-2"><span class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold uppercase text-white rounded-full size-6 text-[10px]" style="background-color:#9333ea">S</span><span class="text-[12px] font-semibold text-foreground">Sophie M.</span><span class="ml-auto inline-flex items-center gap-1 text-[10px] text-muted-foreground"><span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full size-3.5 bg-white"><img src="/channels/shopify.svg" alt="" class="size-[76%] object-contain" loading="lazy"></span> Shopify</span></div> <div class="space-y-1.5"> <div class="w-fit max-w-[90%] rounded-lg rounded-bl-sm bg-secondary px-2.5 py-1 text-[11.5px] text-foreground">Whereâs my order #1042?</div> <div class="ml-auto w-fit max-w-[92%] rounded-lg rounded-br-sm bg-primary px-2.5 py-1 text-[11.5px] text-white">Shipped today â trackingâs on the way â</div> <div class="flex justify-end"><span class="inline-flex items-center gap-1 text-[10px] font-medium text-violet-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3" aria-hidden="true"><path d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" /> <path d="M20 2v4" /> <path d="M22 4h-4" /> <circle cx="4" cy="20" r="2" /></svg> Drafted by Teyra</span></div> </div> </div> <div class="mt-4"> <div class="flex items-baseline gap-2"><span class="text-[13px] font-bold text-emerald-600">03</span><span class="text-[12px] font-bold uppercase tracking-wide text-emerald-600">Handle</span></div> <h3 class="mt-1.5 text-[1.15rem] font-semibold tracking-tight text-foreground">Handle customer requests</h3> <p class="mt-1.5 text-[13.5px] leading-relaxed text-muted-foreground">Reply across every channel from one inbox â Teyra drafts the easy ones.</p> </div> </div> </div> <div class="mt-10 flex flex-wrap items-center justify-between gap-4 border-t border-border pt-7"> <p class="max-w-md text-[1.15rem] font-semibold tracking-tight text-foreground">
411No migration, no engineers â connect and go.</p> <a href="https://app.ticketon.io/register" class="inline-flex shrink-0 items-center gap-1.5 rounded-full bg-primary px-5 py-2.5 text-sm font-semibold text-white shadow-[0_10px_24px_-12px_rgba(93,135,255,0.9)] transition hover:brightness-105">Start for free <span aria-hidden>â</span></a> </div> </div> </div> </section>
411<script> 412 /* Scroll-driven step reveal: each step panel rises, sharpens (blur â 0) and 413 fades in as it crosses up into the viewport, with a leftâright stagger â and 414 rewinds on scroll-up. Scrubbed from each panel's own position (scrollY â rAF), 415 so it plays exactly as you reach it, in every browser. */ 416 (() => { 417 const grid = document.querySelector('[data-gs]'); 418 if (!grid) return; 419 if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; 420 421 const steps = Array.from(grid.querySelectorAll('.gs-reveal')); 422 const colOffset = [0, 0.12, 0.24]; // left â right cascade 423 const START = 0.9, SPAN = 0.34; 424 let ticking = false; 425 426 const apply = () => { 427 ticking = false; 428 const vh = window.innerHeight || 1; 429 for (let i = 0; i < steps.length; i++) { 430 const el = steps[i]; 431 const top = el.getBoundingClientRect().top; 432 let p = (START - top / vh) / SPAN - (colOffset[i] || 0); 433 p = p < 0 ? 0 : p > 1 ? 1 : p; 434 const e = 1 - Math.pow(1 - p, 3); // easeOutCubic 435 el.style.opacity = e.toFixed(3); 436 el.style.transform = 'translateY(' + ((1 - e) * 26).toFixed(2) + 'px) scale(' + (0.98 + 0.02 * e).toFixed(3) + ')'; 437 const blur = (1 - e) * 6; 438 el.style.filter = blur > 0.06 ? 'blur(' + blur.toFixed(2) + 'px)' : 'none'; 439 } 440 }; 441 const onScroll = () => { if (!ticking) { ticking = true; requestAnimationFrame(apply); } }; 442 443 apply(); 444 window.addEventListener('scroll', onScroll, { passive: true }); 445 window.addEventListener('resize', onScroll, { passive: true }); 446 })(); 447</script>
447 <!-- the long tail --> <section id="highlights" class="py-20 sm:py-24" data-astro-cid-7s7xinkd> <div class="reveal wrap" data-astro-cid-7s7xinkd> <div class="relative isolate overflow-hidden rounded-[1.75rem] border border-border bg-gradient-to-b from-[#eaf2ff] via-card to-card px-2 py-14 shadow-[0_34px_80px_-46px_rgba(16,24,40,0.3)] sm:px-4 sm:py-16" data-astro-cid-7s7xinkd> <!-- structured faded grid (clean, no glow) --> <div class="pointer-events-none absolute inset-0 -z-10 [background-image:linear-gradient(rgba(93,135,255,0.055)_1px,transparent_1px),linear-gradient(90deg,rgba(93,135,255,0.055)_1px,transparent_1px)] [background-size:40px_40px] [mask-image:radial-gradient(ellipse_76%_66%_at_50%_2%,#000,transparent_78%)]" data-astro-cid-7s7xinkd></div> <div class="relative mx-auto mb-10 max-w-2xl px-4 text-center" data-astro-cid-7s7xinkd> <span class="inline-flex items-center gap-1.5 rounded-full border border-border bg-card px-3 py-1 text-[13px] font-medium text-foreground shadow-soft" data-astro-cid-7s7xinkd> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3.5 text-primary" aria-hidden="true"><path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z" /> <path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12" /> <path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17" /></svg> Also included </span> <h2 class="mt-5 text-[2.15rem] font-semibold tracking-tight text-foreground sm:text-[3.25rem] sm:leading-[1.07]" data-astro-cid-7s7xinkd>Everything else youâd expect</h2> </div> <div class="relative space-y-3.5" data-astro-cid-7s7xinkd> <div class="marquee [mask-image:linear-gradient(to_right,transparent,#000_8%,#000_92%,transparent)]" data-astro-cid-7s7xinkd> <div class="marquee-track flex w-max" style="--dur:72s; animation-direction:normal" data-astro-cid-7s7xinkd> <span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Quick replies</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z" /> <path d="M15 3v5a1 1 0 0 0 1 1h5" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Internal notes</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true">
447<path d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z" /> <circle cx="7.5" cy="7.5" r=".5" fill="currentColor" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Tags</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Topics</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>CSAT ratings</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><circle cx="12" cy="12" r="10" /> <path d="M8 14s1.5 2 4 2 4-2 4-2" /> <line x1="9" x2="9.01" y1="9" y2="9" /> <line x1="15" x2="15.01" y1="9" y2="9" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Reactions</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M10.268 21a2 2 0 0 0 3.464 0" /> <path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Reminders</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Files & attachments</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><circle cx="12" cy="8" r="5" /> <path d="M20 21a8 8 0 0 0-16 0" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Contacts</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Blacklist</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Quick replies</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z" /> <path d="M15 3v5a1 1 0 0 0 1 1h5" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Internal notes</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true">
447<path d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z" /> <circle cx="7.5" cy="7.5" r=".5" fill="currentColor" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Tags</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Topics</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>CSAT ratings</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><circle cx="12" cy="12" r="10" /> <path d="M8 14s1.5 2 4 2 4-2 4-2" /> <line x1="9" x2="9.01" y1="9" y2="9" /> <line x1="15" x2="15.01" y1="9" y2="9" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Reactions</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M10.268 21a2 2 0 0 0 3.464 0" /> <path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Reminders</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Files & attachments</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><circle cx="12" cy="8" r="5" /> <path d="M20 21a8 8 0 0 0-16 0" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Contacts</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Blacklist</span> </span> </div> </div><div class="marquee [mask-image:linear-gradient(to_right,transparent,#000_8%,#000_92%,transparent)]" data-astro-cid-7s7xinkd> <div class="marquee-track flex w-max" style="--dur:83s; animation-direction:reverse" data-astro-cid-7s7xinkd> <span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M12 8V4H8" /> <rect width="16" height="12" x="4" y="8" rx="2" /> <path d="M2 14h2" /> <path d="M20 14h2" /> <path d="M15 13v2" /> <path d="M9 13v2" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>AI agent</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><rect width="8" height="8" x="3" y="3" rx="2" /> <path d="M7 11v4a2 2 0 0 0 2 2h4" /> <rect width="8" height="8" x="13" y="13" rx="2" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Triggers</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="m21 21-4.34-4.34" /> <circle cx="11" cy="11" r="8" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>AI knowledge gaps</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M12 7v14" /> <path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Knowledge base</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><line x1="12" x2="12" y1="2" y2="22" /> <path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Sales analytics</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z" /> <path d="m9 12 2 2 4-4" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Quality analytics</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M3 3v16a2 2 0 0 0 2 2h16" /> <rect x="15" y="5" width="4" height="12" rx="1" /> <rect x="7" y="8" width="4" height="9" rx="1" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Team analytics</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="m12 14 4-4" /> <path d="M3.34 19a10 10 0 1 1 17.32 0" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Operator stats</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" /> <path d="M16 3.128a4 4 0 0 1 0 7.744" /> <path d="M22 21v-2a4 4 0 0 0-3-3.87" /> <circle cx="9" cy="7" r="4" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Managers</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" /> <path d="m9 12 2 2 4-4" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Roles & permissions</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M12 8V4H8" /> <rect width="16" height="12" x="4" y="8" rx="2" /> <path d="M2 14h2" /> <path d="M20 14h2" /> <path d="M15 13v2" /> <path d="M9 13v2" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>AI agent</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><rect width="8" height="8" x="3" y="3" rx="2" /> <path d="M7 11v4a2 2 0 0 0 2 2h4" /> <rect width="8" height="8" x="13" y="13" rx="2" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Triggers</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="m21 21-4.34-4.34" /> <circle cx="11" cy="11" r="8" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>AI knowledge gaps</span> </span><span class="m
447r-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M12 7v14" /> <path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Knowledge base</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><line x1="12" x2="12" y1="2" y2="22" /> <path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Sales analytics</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z" /> <path d="m9 12 2 2 4-4" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Quality analytics</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M3 3v16a2 2 0 0 0 2 2h16" /> <rect x="15" y="5" width="4" height="12" rx="1" /> <rect x="7" y="8" width="4" height="9" rx="1" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Team analytics</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="m12 14 4-4" /> <path d="M3.34 19a10 10 0 1 1 17.32 0" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Operator stats</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" /> <path d="M16 3.128a4 4 0 0 1 0 7.744" /> <path d="M22 21v-2a4 4 0 0 0-3-3.87" /> <circle cx="9" cy="7" r="4" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Managers</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" /> <path d="m9 12 2 2 4-4" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Roles & permissions</span> </span> </div> </div><div class="marquee [mask-image:linear-gradient(to_right,transparent,#000_8%,#000_92%,transparent)]" data-astro-cid-7s7xinkd> <div class="marquee-track flex w-max" style="--dur:68s; animation-direction:normal" data-astro-cid-7s7xinkd> <span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z" /> <path d="m21.854 2.147-10.94 10.939" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Telegram</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M16 10a4 4 0 0 1-8 0" /> <path d="M3.103 6.034h17.794" /> <path d="M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7
447a2 2 0 0 0-1.6.8z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Shopify</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" /> <rect x="2" y="4" width="20" height="16" rx="2" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Email</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><rect width="20" height="14" x="2" y="3" rx="2" /> <line x1="8" x2="16" y1="21" y2="21" /> <line x1="12" x2="12" y1="17" y2="21" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Web widget</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M10 5H3" /> <path d="M12 19H3" /> <path d="M14 3v4" /> <path d="M16 17v4" /> <path d="M21 12h-9" /> <path d="M21 19h-5" /> <path d="M21 5h-7" /> <path d="M8 10v4" /> <path d="M8 12H3" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Widget customization</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><line x1="19" x2="5" y1="5" y2="19" /> <circle cx="6.5" cy="6.5" r="2.5" /> <circle cx="17.5" cy="17.5" r="2.5" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Discount codes</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><circle cx="8" cy="21" r="1" /> <circle cx="19" cy="21" r="1" /> <path d="M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Product cards</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z" /> <path d="M12 22V12" /> <polyline points="3.29 7 12 12 20.71 7" /> <path d="m7.5 4.27 9 5.15" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Order lookup</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><rect width="18" height="11" x="3" y="11" rx="2" ry="2" /> <path d="M7 11V7a5 5 0 0 1 10 0v4" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Audit log</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z" /> <path d="m21.854 2.147-10.94 10.939" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Telegram</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M16 10a4 4 0 0 1-8 0" /> <path d="M3.103 6.034h17.794" /> <path d="M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7
447a2 2 0 0 0-1.6.8z" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Shopify</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" /> <rect x="2" y="4" width="20" height="16" rx="2" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Email</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><rect width="20" height="14" x="2" y="3" rx="2" /> <line x1="8" x2="16" y1="21" y2="21" /> <line x1="12" x2="12" y1="17" y2="21" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Web widget</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M10 5H3" /> <path d="M12 19H3" /> <path d="M14 3v4" /> <path d="M16 17v4" /> <path d="M21 12h-9" /> <path d="M21 19h-5" /> <path d="M21 5h-7" /> <path d="M8 10v4" /> <path d="M8 12H3" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Widget customization</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><line x1="19" x2="5" y1="5" y2="19" /> <circle cx="6.5" cy="6.5" r="2.5" /> <circle cx="17.5" cy="17.5" r="2.5" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Discount codes</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><circle cx="8" cy="21" r="1" /> <circle cx="19" cy="21" r="1" /> <path d="M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Product cards</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><path d="M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z" /> <path d="M12 22V12" /> <polyline points="3.29 7 12 12 20.71 7" /> <path d="m7.5 4.27 9 5.15" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Order lookup</span> </span><span class="mr-3 inline-flex shrink-0 items-center gap-2.5 rounded-full border border-border bg-card/90 px-4 py-2.5 shadow-[0_10px_22px_-14px_rgba(16,24,40,0.3)] backdrop-blur-sm" data-astro-cid-7s7xinkd> <span class="grid size-7 place-items-center rounded-lg bg-accent text-primary" data-astro-cid-7s7xinkd><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><rect width="18" height="11" x="3" y="11" rx="2" ry="2" /> <path d="M7 11V7a5 5 0 0 1 10 0v4" /></svg></span> <span class="whitespace-nowrap text-[14.5px] font-medium text-foreground" data-astro-cid-7s7xinkd>Audit log</span> </span> </div> </div> </div> </div> </div> </section> <section id="apps" class="scroll-mt-20 bg-surface py-20 sm:py-24"> <div class="reveal wrap grid items-center gap-12 lg:grid-cols-2 lg:gap-16"> <!-- left --> <div> <span class="inline-flex items-center gap-1.5 rounded-full border border-border bg-card px-3 py-1 text-[13px] font-medium text-foreground shadow-soft"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3.5 text-primary" aria-hidden="true"><path d="M12 15V3" /> <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" /> <path d="m7 10 5 5 5-5" /></svg> Download app </span> <h2 class="mt-5 text-[2.15rem] font-semibold tracking-tight text-foreground sm:text-[3.25rem] sm:leading-[1.07]">Your inbox, in your pocket</h2> <p class="mt-4 max-w-md text-lg text-muted-foreground"> Native apps for iPhone and Android â reply to customers, get push notifications and never miss a conversation, wherever you are. </p> <div class="mt-7 flex flex-wrap gap-2.5"> <span class="inline-flex items-center gap-2 rounded-full border border-border bg-card px-3.5 py-2 text-[13.5px] font-medium text-foreground shadow-soft"> <span class="grid size-6 place-items-center rounded-md bg-accent text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3.5" aria-hidden="true"><path d="M10.268 21a2 2 0 0 0 3.464 0" /> <path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" /></svg></span>
447 Push notifications </span><span class="inline-flex items-center gap-2 rounded-full border border-border bg-card px-3.5 py-2 text-[13.5px] font-medium text-foreground shadow-soft"> <span class="grid size-6 place-items-center rounded-md bg-accent text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3.5" aria-hidden="true"><path d="M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z" /> <path d="M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1" /></svg></span> Full inbox on the go </span><span class="inline-flex items-center gap-2 rounded-full border border-border bg-card px-3.5 py-2 text-[13.5px] font-medium text-foreground shadow-soft"> <span class="grid size-6 place-items-center rounded-md bg-accent text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-3.5" aria-hidden="true"><path d="M12 19v3" /> <path d="M19 10v2a7 7 0 0 1-14 0v-2" /> <rect x="9" y="2" width="6" height="13" rx="3" /></svg></span> Voice & photos </span> </div> <div class="mt-8 flex flex-wrap gap-3"> <a href="https://apps.apple.com/us/app/ticketon-ai-helpdesk/id6768856151" target="_blank" rel="noreferrer" class="inline-flex h-12 items-center gap-2.5 rounded-xl bg-ink px-4 text-white transition-opacity hover:opacity-90"> <svg viewBox="0 0 24 24" fill="currentColor" class="size-6"><path d="M17.05 12.04c-.03-2.6 2.13-3.85 2.22-3.91-1.21-1.77-3.1-2.01-3.77-2.04-1.6-.16-3.13.94-3.94.94-.81 0-2.07-.92-3.4-.9-1.75.03-3.36 1.02-4.26 2.58-1.82 3.16-.47 7.84 1.31 10.41.86 1.26 1.89 2.67 3.25 2.62 1.3-.05 1.8-.84 3.37-.84 1.58 0 2.02.84 3.4.82 1.4-.03 2.29-1.28 3.15-2.55.99-1.47 1.4-2.89 1.42-2.96-.03-.01-2.72-1.05-2.75-4.14zM14.6 4.5c.72-.87 1.2-2.08 1.07-3.28-1.03.04-2.28.69-3.02 1.55-.66.77-1.24 2-1.09 3.18 1.15.09 2.33-.58 3.04-1.45z"></path></svg> <span class="text-left leading-none"><span class="block text-[10px] opacity-80">Download on the</span><span class="mt-0.5 block text-[15px] font-semibold">App Store</span></span> </a> <!-- Google Play вÑеменно ÑкÑÑÑ (2026-07-10): пÑиложение еÑÑ Ð² закÑÑÑом 448 ÑеÑÑиÑовании (12 ÑеÑÑеÑов / 14 дней). ÐеÑнÑÑÑ Ð¿Ð¾Ñле пÑбликаÑии â 449 ÑаÑкомменÑиÑоваÑÑ Ð¸ подÑÑавиÑÑ ÑÑÑÐ»ÐºÑ play.google.com. 450 <a href="#" class="inline-flex h-12 items-center gap-2.5 rounded-xl bg-ink px-4 text-white transition-opacity hover:opacity-90"> 451 <svg viewBox="0 0 24 24" class="size-6"><path fill="#00C3FF" d="M3.3 2.6c-.2.2-.3.5-.3.9v17c0 .4.1.7.3.9l9.3-9.4z"/><path fill="#00F076" d="m3.3 2.6 13.2 7.6-2.7 2.7z"/><path fill="#FFCE00" d="m16.5 10.2 3.7 2.1c.6.4.6 1.2 0 1.6l-3.7 2.1-2.9-2.9z"/><path fill="#FF3A44" d="m13.6 13.1 2.9 2.9-13.2 7.6z"/></svg> 452 <span class="text-left leading-none"><span class="block text-[10px] opacity-80">{t('mobileApps.googlePlayLabel')}</span><span class="mt-0.5 block text-[15px] font-semibold">Google Play</span></span> 453 </a> 454 --> </div> </div> <!-- right · brand panel with the real app screenshots. 455 ÐаÑÑинки кладÑм в public/screens/ (Ñм. инÑÑÑÑкÑиÑ). ТелеÑÐ¾Ð½Ñ Ð½Ð° Ð½Ð¸Ñ Ñже 456 Ñ Ñамкой â поÑÑÐ¾Ð¼Ñ Ð¿ÑоÑÑо позиÑиониÑÑем <img>, без CSS-Ñамки. 457 app-chat.png â ÑÐ°Ñ (пÑÑмой), ÑпеÑеди/главнÑй; 458 app-home.png â домаÑний ÑкÑан (Ñже 3D-render под Ñглом), позади. --> <div class="relative isolate overflow-hidden rounded-3xl bg-[linear-gradient(140deg,#6f93ff_0%,#5d87ff_46%,#4360df_100%)] shadow-card"> <div class="pointer-events-none absolute inset-0 opacity-[0.12] [background-image:radial-gradient(#fff_1px,transparent_1px)] [background-size:22px_22px] [mask-image:radial-gradient(ellipse_75%_75%_at_50%_35%,#000,transparent)]"></div> <div class="relative mx-auto h-[500px] w-full max-w-[500px]"> <!-- back phone · home & projects. 3D-ÑÐµÐ½Ð´ÐµÑ Ð½Ð° поÑÑи ÐÐÐÐÐ ÐТÐÐÐ Ñ Ð¾Ð»ÑÑе 459 (3016Ã2817) Ñ Ð±Ð¾Ð»ÑÑими полÑми â даÑм ÐЧÐÐЬ болÑÑÑÑ ÑиÑинÑ, инаÑе 460 Ñгловой ÑелеÑон вÑглÑÐ´Ð¸Ñ Ð¼ÐµÐ»ÐºÐ¸Ð¼ ÑÑдом Ñ Ð²ÑÑоким пÑÑмÑм ÑаÑом. --> <img src="/screens/app-home.png" alt="Ticketon mobile app â home & projects" loading="lazy" class="absolute left-[-9%] top-1/2 z-0 w-[490px] -translate-y-1/2 drop-shadow-[0_25px_50px_rgba(16,24,40,0.35)]"> <!-- front phone · live conversation (пÑÑмой ÑкÑинÑÐ¾Ñ 1047Ã2134) â геÑой --> <img src="/screens/app-chat.png" alt="Ticketon mobile app â live chat with AI" loading="lazy" class="absolute right-[1%] top-1/2 z-10 w-[230px] -translate-y-1/2 drop-shadow-[0_40px_72px_rgba(16,24,40,0.5)]"> </div> </div> </div> </section> <section class="py-20 sm:py-24"> <div class="reveal wrap"> <div class="relative isolate overflow-hidden rounded-3xl bg-[linear-gradient(135deg,#6b91ff_0%,#5d87ff_46%,#4564e2_100%)] px-6 py-20 text-center sm:px-12 sm:py-24"> <!-- dot texture, fading at the edges (flat, no glow) --> <div class="pointer-events-none absolute inset-0 -z-10 opacity-[0.12] [background-image:radial-gradient(#fff_1.1px,transparent_1.1px)] [background-size:22px_22px] [mask-image:radial-gradient(ellipse_72%_78%_at_50%_50%,#000,transparent)]"></div> <!-- oversized brand motif, very faint --> <svg viewBox="0 0 504 334" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="pointer-events-none absolute -right-12 -top-14 -z-10 size-64 rotate-12 text-white/[0.07]" aria-hidden="true"> <path d="M0 166.951C0 188.875 4.34544 210.585 12.7882 230.84C21.231 251.095 33.6058 269.5 49.206 285.002C64.8062 300.505 83.3264 312.8
46003 103.709 321.193C124.092 329.583 145.938 333.901 168 333.901L168 242.079C158.072 242.079 148.241 240.135 139.069 236.36C129.897 232.584 121.563 227.05 114.543 220.074C107.522 213.098 101.954 204.816 98.1546 195.701C94.3553 186.586 92.3999 176.817 92.3999 166.951H0Z"></path> <path d="M504 166.951C504 188.875 499.655 210.585 491.212 230.84C482.769 251.095 470.395 269.5 454.794 285.002C439.194 300.505 420.674 312.803 400.291 321.193C379.909 329.583 358.063 333.901 336.001 333.901V242.079C345.929 242.079 355.759 240.135 364.931 236.36C374.104 232.584 382.438 227.05 389.458 220.074C396.478 213.098 402.047 204.816 405.846 195.701C409.645 186.586 411.601 176.817 411.601 166.951H504Z"></path> <path d="M504 166.951C504 145.027 499.655 123.316 491.212 103.061C482.769 82.8056 470.395 64.4012 454.794 48.8985C439.194 33.3957 420.674 21.0983 400.291 12.7083C379.909 4.31828 358.063 -9.58336e-07 336.001 0V91.8224C345.929 91.8224 355.759 93.7656 364.931 97.5411C374.104 101.317 382.438 106.85 389.458 113.827C396.478 120.803 402.047 129.085 405.846 138.2C409.645 147.315 411.601 157.085 411.601 166.951H504Z"></path> <path d="M168 166.95C168 145.026 172.346 123.316 180.789 103.061C189.231 82.8056 201.606 64.4012 217.206 48.8985C232.807 33.3957 251.327 21.0983 271.709 12.7083C292.092 4.31828 313.939 -9.58336e-07 336.001 0V91.8224C326.073 91.8224 316.242 93.7656 307.069 97.5411C297.897 101.317 289.563 106.85 282.543 113.827C275.523 120.803 269.954 129.085 266.155 138.2C262.356 147.315 260.4 157.084 260.4 166.95H168Z"></path> <path d="M336 242.081H168V333.903H336V242.081Z"></path> <path d="M92.4034 0.00133011H0.00352479V166.951H92.4034V0.00133011Z"></path> </svg> <svg viewBox="0 0 504 334" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="pointer-events-none absolute -bottom-16 -left-12 -z-10 size-52 -rotate-12 text-white/[0.06]" aria-hidden="true"> <path d="M0 166.951C0 188.875 4.34544 210.585 12.7882 230.84C21.231 251.095 33.6058 269.5 49.206 285.002C64.8062 300.505 83.3264 312.803 103.709 321.193C124.092 329.583 145.938 333.901 168 333.901L168 242.079C158.072 242.079 148.241 240.135 139.069 236.36C129.897 232.584 121.563 227.05 114.543 220.074C107.522 213.098 101.954 204.816 98.1546 195.701C94.3553 186.586 92.3999 176.817 92.3999 166.951H0Z"></path> <path d="M504 166.951C504 188.875 499.655 210.585 491.212 230.84C482.769 251.095 470.395 269.5 454.794 285.002C439.194 300.505 420.674 312.803 400.291 321.193C379.909 329.583 358.063 333.901 336.001 333.901V242.079C345.929 242.079 355.759 240.135 364.931 236.36C374.104 232.584 382.438 227.05 389.458 220.074C396.478 213.098 402.047 204.816 405.846 195.701C409.645 186.586 411.601 176.817 411.601 166.951H504Z"></path> <path d="M504 166.951C504 145.027 499.655 123.316 491.212 103.061C482.769 82.8056 470.395 64.4012 454.794 48.8985C439.194 33.3957 420.674 21.0983 400.291 12.7083C379.909 4.31828 358.063 -9.58336e-07 336.001 0V91.8224C345.929 91.8224 355.759 93.7656 364.931 97.5411C374.104 101.317 382.438 106.85 389.458 113.827C396.478 120.803 402.047 129.085 405.846 138.2C409.645 147.315 411.601 157.085 411.601 166.951H504Z"></path> <path d="M168 166.95C168 145.026 172.346 123.316 180.789 103.061C189.231 82.8056 201.606 64.4012 217.206 48.8985C232.807 33.3957 251.327 21.0983 271.709 12.7083C292.092 4.31828 313.939 -9.58336e-07 336.001 0V91.8224C326.073 91.8224 316.242 93.7656 307.069 97.5411C297.897 101.317 289.563 106.85 282.543 113.827C275.523 120.803 269.954 129.085 266.155 138.2C262.356 147.315 260.4 157.084 260.4 166.95H168Z"></path> <path d="M336 242.081H168V333.903H336V242.081Z"></path> <path d="M92.4034 0.00133011H0.00352479V166.951H92.4034V0.00133011Z"></path> </svg> <h2 class="mx-auto max-w-2xl text-balance text-[2.15rem] font-semibold tracking-tight text-white sm:text-[3.3rem] sm:leading-[1.07]"> Ready to bring every conversation into one workspace? </h2> <p class="mx-auto mt-5 max-w-xl text-pretty text-lg text-white/85"> Connect Telegram, Email, Shopify and your website in minutes. Free to start â no credit card required. </p> <div class="mt-9 flex flex-col items-center justify-center gap-3 sm:flex-row"> <a href="https://app.ticketon.io/register" class="inline-flex h-11 items-center justify-center rounded-md bg-white px-6 text-[0.95rem] font-semibold text-primary transition-colors hover:bg-white/90"> Start for free </a> <a href="https://app.ticketon.io/register" class="inline-flex h-11 items-center justify-center rounded-md border border-white/40 px-6 text-[0.95rem] font-semibold text-white transition-colors hover:bg-white/10"> Book a demo </a> </div> <p class="mt-6 text-sm text-white/70">Free plan · No credit card · Live in minutes</p> </div> </div> </section> </main> <footer class="border-t border-border bg-surface"> <div class="wrap grid grid-cols-2 gap-10 py-14 md:grid-cols-5"> <div class="col-span-2"> <a href="/" class="flex items-center gap-2" aria-label="TicketON"> <svg viewBox="0 0 504 334" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="size-6 text-primary" aria-hidden="true"> <path d="M0 166.951C0 188.875 4.34544 210.585 12.7882 230.84C21.231 251.095 33.6058 269.5 49.206 285.002C64.8062 300.505 83.3264 312.8
46003 103.709 321.193C124.092 329.583 145.938 333.901 168 333.901L168 242.079C158.072 242.079 148.241 240.135 139.069 236.36C129.897 232.584 121.563 227.05 114.543 220.074C107.522 213.098 101.954 204.816 98.1546 195.701C94.3553 186.586 92.3999 176.817 92.3999 166.951H0Z"></path> <path d="M504 166.951C504 188.875 499.655 210.585 491.212 230.84C482.769 251.095 470.395 269.5 454.794 285.002C439.194 300.505 420.674 312.803 400.291 321.193C379.909 329.583 358.063 333.901 336.001 333.901V242.079C345.929 242.079 355.759 240.135 364.931 236.36C374.104 232.584 382.438 227.05 389.458 220.074C396.478 213.098 402.047 204.816 405.846 195.701C409.645 186.586 411.601 176.817 411.601 166.951H504Z"></path> <path d="M504 166.951C504 145.027 499.655 123.316 491.212 103.061C482.769 82.8056 470.395 64.4012 454.794 48.8985C439.194 33.3957 420.674 21.0983 400.291 12.7083C379.909 4.31828 358.063 -9.58336e-07 336.001 0V91.8224C345.929 91.8224 355.759 93.7656 364.931 97.5411C374.104 101.317 382.438 106.85 389.458 113.827C396.478 120.803 402.047 129.085 405.846 138.2C409.645 147.315 411.601 157.085 411.601 166.951H504Z"></path> <path d="M168 166.95C168 145.026 172.346 123.316 180.789 103.061C189.231 82.8056 201.606 64.4012 217.206 48.8985C232.807 33.3957 251.327 21.0983 271.709 12.7083C292.092 4.31828 313.939 -9.58336e-07 336.001 0V91.8224C326.073 91.8224 316.242 93.7656 307.069 97.5411C297.897 101.317 289.563 106.85 282.543 113.827C275.523 120.803 269.954 129.085 266.155 138.2C262.356 147.315 260.4 157.084 260.4 166.95H168Z"></path> <path d="M336 242.081H168V333.903H336V242.081Z"></path> <path d="M92.4034 0.00133011H0.00352479V166.951H92.4034V0.00133011Z"></path> </svg> <span class="text-[17px] font-bold tracking-tight text-foreground">TicketON</span> </a> <p class="mt-4 max-w-xs text-sm text-muted-foreground"> The omnichannel support platform for modern e-commerce and product teams. </p> <div class="mt-5"> <details class="lang-switcher relative inline-block" data-astro-cid-a2mxz4y6> <summary class="inline-flex cursor-pointer list-none items-center gap-2 rounded-lg border border-border bg-card px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground" aria-label="Language" data-astro-cid-a2mxz4y6> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="size-4" aria-hidden="true"><circle cx="12" cy="12" r="10" /> <path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" /> <path d="M2 12h20" /></svg> <span data-astro-cid-a2mxz4y6>English</span> <svg class="lang-chevron size-3.5 transition-transform" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-a2mxz4y6> <path d="m6 9 6 6 6-6" data-astro-cid-a2mxz4y6></path> </svg> </summary> <!-- ÐÑкÑÑваеÑÑÑ ÐÐÐРХ (ÑÑÑÐµÑ Ñ Ð½Ð¸Ð¶Ð½ÐµÐ³Ð¾ кÑÐ°Ñ ÑÑÑаниÑÑ) --> <ul class="absolute bottom-full left-0 z-50 mb-2 min-w-[11rem] overflow-hidden rounded-xl border border-border bg-white p-1.5 shadow-[0_18px_40px_-18px_rgba(16,24,40,0.35)]" data-astro-cid-a2mxz4y6> <li data-astro-cid-a2mxz4y6> <a href="/" hreflang="en" data-lang="en" class="flex items-center justify-between rounded-lg px-2.5 py-2 text-sm font-medium transition-colors hover:bg-secondary text-foreground" data-astro-cid-a2mxz4y6> <span data-astro-cid-a2mxz4y6>English</span> <svg class="size-4 text-primary" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-a2mxz4y6> <path d="M20 6 9 17l-5-5" data-astro-cid-a2mxz4y6></path> </svg> </a> </li><li data-astro-cid-a2mxz4y6> <a href="/ru" hreflang="ru" data-lang="ru" class="flex items-center justify-between rounded-lg px-2.5 py-2 text-sm font-medium transition-colors hover:bg-secondary text-muted-foreground" data-astro-cid-a2mxz4y6> <span data-astro-cid-a2mxz4y6>Ð ÑÑÑкий</span> </a> </li><li data-astro-cid-a2mxz4y6> <a href="/uk" hreflang="uk" data-lang="uk" class="flex items-center justify-between rounded-lg px-2.5 py-2 text-sm font-medium transition-colors hover:bg-secondary text-muted-foreground" data-astro-cid-a2mxz4y6> <span data-astro-cid-a2mxz4y6>УкÑаÑнÑÑка</span> </a> </li><li data-astro-cid-a2mxz4y6> <a href="/es" hreflang="es" data-lang="es" class="flex items-center justify-between rounded-lg px-2.5 py-2 text-sm font-medium transition-colors hover:bg-secondary text-muted-foreground" data-astro-cid-a2mxz4y6> <span data-astro-cid-a2mxz4y6>Español</span> </a> </li><li data-astro-cid-a2mxz4y6> <a href="/de" hreflang="de" data-lang="de" class="flex items-center justify-between rounded-lg px-2.5 py-2 text-sm font-medium transition-colors hover:bg-secondary text-muted-foreground" data-astro-cid-a2mxz4y6> <span data-astro-cid-a2mxz4y6>Deutsch</span> </a> </li><li data-astro-cid-a2mxz4y6> <a href="/fr" hreflang="fr" data-lang="fr" class="flex items-center justify-between rounded-lg px-2.5 py-2 text-sm font-medium transition-colors hover:bg-secondary text-muted-foreground" data-astro-cid-a2mxz4y6> <span data-astro-cid-a2mxz4y6>Français</span> </a> </li><li data-astro-cid-a2mxz4y6> <a href="/pt" hreflang="pt" data-lang="pt" class="flex items-center justify-between rounded-lg px-2.5 py-2 text-sm font-medium transition-colors hover:bg-secondary text-muted-foreground" data-astro-cid-a2mxz4y6> <span data-astro-cid-a2mxz4y6>Português</span> </a> </li> </ul> </details>
460<script> 461 (function () { 462 // ÐакÑÑваÑÑ Ð´ÑопдаÑн пÑи клике вне его. 463 document.addEventListener('click', function (e) { 464 document.querySelectorAll('details.lang-switcher[open]').forEach(function (d) { 465 if (!d.contains(e.target)) d.removeAttribute('open'); 466 }); 467 }); 468 // ЯвнÑй вÑÐ±Ð¾Ñ ÑзÑка â запомниÑÑ Ð² cookie, ÑÑÐ¾Ð±Ñ Ð°Ð²Ñо-деÑÐµÐºÑ ÐµÐ³Ð¾ Ñважал. 469 document.querySelectorAll('details.lang-switcher a[data-lang]').forEach(function (a) { 470 a.addEventListener('click', function () { 471 document.cookie = 472 'ticketon_lang=' + a.getAttribute('data-lang') + 473 '; path=/; max-age=31536000; samesite=lax'; 474 }); 475 }); 476 })(); 477</script>
477 </div> </div> <div> <h4 class="text-sm font-semibold text-foreground">Product</h4> <ul class="mt-4 space-y-2.5"> <li> <a href="/teyra" class="text-sm text-muted-foreground transition-colors hover:text-foreground">Teyra AI</a> </li><li> <a href="/pricing" class="text-sm text-muted-foreground transition-colors hover:text-foreground">Pricing</a> </li> </ul> </div><div> <h4 class="text-sm font-semibold text-foreground">Resources</h4> <ul class="mt-4 space-y-2.5"> <li> <a href="/help" class="text-sm text-muted-foreground transition-colors hover:text-foreground">Help Center</a> </li><li> <a href="/contact" class="text-sm text-muted-foreground transition-colors hover:text-foreground">Contact</a> </li> </ul> </div><div> <h4 class="text-sm font-semibold text-foreground">Legal</h4> <ul class="mt-4 space-y-2.5"> <li> <a href="/privacy" class="text-sm text-muted-foreground transition-colors hover:text-foreground">Privacy Policy</a> </li><li> <a href="/terms" class="text-sm text-muted-foreground transition-colors hover:text-foreground">Terms of Service</a> </li><li> <a href="/dpa" class="text-sm text-muted-foreground transition-colors hover:text-foreground">DPA (GDPR)</a> </li> </ul> </div> </div> <div class="border-t border-border"> <div class="wrap flex flex-col items-center justify-between gap-3 py-6 text-sm text-muted-foreground sm:flex-row"> <span class="flex items-center gap-3"> 478© 2026 TicketON. All rights reserved. <button type="button" data-cookie-settings class="underline underline-offset-2 transition-colors hover:text-foreground">Cookie settings</button> </span> <span class="flex items-center gap-1.5"> <span class="size-2 rounded-full bg-success"></span> All systems operational </span> </div> </div> <!-- oversized wordmark closer, grounded at the very bottom (SaaS AI / Myniq) --> <div aria-hidden="true" class="overflow-hidden pt-4"> <div class="wrap"> <div class="-mb-[0.11em] select-none bg-gradient-to-b from-foreground
478/[0.2] to-foreground/[0.02] bg-clip-text text-center font-display font-bold leading-[0.78] tracking-tighter text-transparent" style="font-size: clamp(4rem, 18.5vw, 16.5rem)"> 479TicketON 480</div> </div> </div> </footer> <div id="cookie-consent" hidden role="dialog" aria-label="Cookie consent" class="cookie-consent" data-astro-cid-garwan2p> <p class="cc-text" data-astro-cid-garwan2p> 481We use necessary cookies to run TicketON and, with your consent, analytics 482 cookies to improve it. See our <a href="/privacy" data-astro-cid-garwan2p>Privacy Policy</a>. 483</p> <div class="cc-actions" data-astro-cid-garwan2p> <button type="button" id="cc-reject" class="cc-btn cc-btn-ghost" data-astro-cid-garwan2p>Reject</button> <button type="button" id="cc-accept" class="cc-btn cc-btn-primary" data-astro-cid-garwan2p>Accept</button> </div> </div>
483<script>(function(){const gaId = ""; 484const clarityId = ""; 485 486 (function () { 487 var KEY = 'ticketon_cookie_consent'; 488 var banner = document.getElementById('cookie-consent'); 489 var hasAnalytics = !!(gaId || clarityId); 490 491 function loadAnalytics() { 492 if (gaId) { 493 var s = document.createElement('script'); 494 s.async = true; 495 s.src = 'https://www.googletagmanager.com/gtag/js?id=' + gaId; 496 document.head.appendChild(s); 497 window.dataLayer = window.dataLayer || []; 498 window.gtag = function () { window.dataLayer.push(arguments); }; 499 window.gtag('js', new Date()); 500 window.gtag('config', gaId, { anonymize_ip: true }); 501 } 502 if (clarityId) { 503 (function (c, l, a, r, i) { 504 c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); }; 505 var t = l.createElement(r); t.async = 1; t.src = 'https://www.clarity.ms/tag/' + i; 506 var y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); 507 })(window, document, 'clarity', 'script', clarityId); 508 } 509 } 510 function hide() { if (banner) banner.hidden = true; } 511 function show() { if (banner) banner.hidden = false; } 512 function set(v) { try { localStorage.setItem(KEY, v); } catch (e) {} hide(); if (v === 'granted') loadAnalytics(); } 513 514 // Wire buttons (always, so "Cookie settings" works even before consent). 515 var a = document.getElementById('cc-accept'); 516 var r = document.getElementById('cc-reject'); 517 if (a) a.addEventListener('click', function () { set('granted'); }); 518 if (r) r.addEventListener('click', function () { set('denied'); }); 519 document.querySelectorAll('[data-cookie-settings]').forEach(function (el) { 520 el.addEventListener('click', function (e) { e.preventDefault(); show(); }); 521 }); 522 523 // Auto behaviour on load. 524 if (!hasAnalytics) { hide(); return; } // nothing non-essential to consent to yet 525 var choice = null; 526 try { choice = localStorage.getItem(KEY); } catch (e) {} 527 if (choice === 'granted') { loadAnalytics(); hide(); } 528 else if (choice === 'denied') { hide(); } 529 else { show(); } 530 })(); 531})();</script>
531
531<script> 532 /* App links follow the host you're on: app.<current-domain>. The HTML 533 ships the production app URL (works without JS / correct on prod); here 534 we point it at the app subdomain of whatever domain actually served the 535 page (e.g. app.ticketon-dev-test.online on the test env). */ 536 (function () { 537 var PROD = 'https://app.ticketon.io'; 538 var host = location.hostname.replace(/^www\./, ''); 539 if (!host || host === 'localhost' || /^\d+\./.test(host) || host === 'ticketon.io') return; 540 var appOrigin = 'https://app.' + host; 541 var links = document.querySelectorAll('a[href^="' + PROD + '"]'); 542 for (var i = 0; i < links.length; i++) { 543 links[i].href = appOrigin + links[i].getAttribute('href').slice(PROD.length); 544 } 545 })(); 546 </script>
546
546<script> 547 (function () { 548 var els = document.querySelectorAll('.reveal, .reveal-group, .stagger-grid'); 549 if (!('IntersectionObserver' in window)) { 550 els.forEach(function (e) { e.classList.add('in'); }); 551 return; 552 } 553 var io = new IntersectionObserver(function (entries) { 554 entries.forEach(function (e) { 555 if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } 556 }); 557 }, { threshold: 0.1, rootMargin: '0px 0px -7% 0px' }); 558 els.forEach(function (el) { io.observe(el); }); 559 })(); 560 </script>
560 <!-- Ticketon live chat widget. is:inline â оÑдаÑм Ñег как еÑÑÑ, без бандлинга 561 Astro. embed.js гÑÑзиÑÑÑ Ð»ÐµÐ½Ð¸Ð²Ð¾ (async + on-interaction), ÑÐºÐ¾Ñ Ð½Ðµ ÑонÑеÑ. -->
561<script src="https://app.ticketon.io/widget/embed.js" data-widget-key="wk_ac73323ac4bd42b0a0e3f43016d9080a" async></script>
561
561<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"421b8cc030694278a0c4e790204a9ede","r":1,"spa":2}' crossorigin="anonymous"></script>
561 562</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.