1<!DOCTYPE html><!-- Last Published: Fri Oct 02 2026 15:49:21 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="channelsight.webflow.io" data-wf-page="649afe6191f574759c2f675d" data-wf-site="64248e7ed5f30d6effe57d5d" lang="en"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>Contact ChannelSight | eCommerce Intelligence Platform</title><meta content="Have a question? Connect with the ChannelSight team. Fill out the contact us form and our team will be happy to assist you." name="description"/><meta content="Contact ChannelSight | eCommerce Intelligence Platform" property="og:title"/><meta content="Have a question? Connect with the ChannelSight team. Fill out the contact us form and our team will be happy to assist you." property="og:description"/><meta content="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/6a96d027bacbcd3d3c275716_channelsight-og-share-1200x630.png" property="og:image"/><meta content="Contact ChannelSight | eCommerce Intelligence Platform" name="twitter:title"/><meta content="Have a question? Connect with the ChannelSight team. Fill out the contact us form and our team will be happy to assist you." name="twitter:description"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><meta content="x3DDl3MUeXJSRp5sdGyJ9vWlYELUjISIcmp8I7gCZWc" name="google-site-verification"/><link href="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/css/channelsight.webflow.shared.5c0fbdbdb.min.css" rel="stylesheet" type="text/css" integrity="sha384-XA+9vbGVVSqgsm/iFMpvs+qlXuIy25oeg6uBCkuVRtkeFnF57Efuh8L47fsgl1np" crossorigin="anonymous"/><link href="https://fonts.googleapis.com" rel="preconnect"/><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"/>
1<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script>
1<script type="text/javascript">WebFont.load({ google: { families: ["Montserrat:100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic","Merriweather:300,300italic,400,400italic,700,700italic,900,900italic","Inter:300,400,500,600,700","Roboto:300,400,500,600,700"] }});</script>
1<script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
1<link href="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/647614fef48ff5a731fc74bf_Favicon_Favicon.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/64761593a2274699f5db31c0_Webclip-20.png" rel="apple-touch-icon"/><link href="https://www.channelsight.com/contact" rel="canonical"/>
1<script type="application/ld+json"> 2{ 3 "@context": "https://schema.org", 4 "@type": "ContactPage", 5 "name": "Contact ChannelSight", 6 "url": "https://www.channelsight.com/contact", 7 "description": "Sales and support contact points for ChannelSight.", 8 "publisher": { 9 "@type": "Organization", 10 "name": "ChannelSight", 11 "url": "https://www.channelsight.com/" 12 } 13} 14</script>
14<script>!function(w,d,s,u){if(w.oaiq)return;var q=function(){q.q.push(arguments)};q.q=[];w.oaiq=q;var j=d.createElement(s);j.async=1;j.src=u;var f=d.getElementsByTagName(s)[0];f.parentNode.insertBefore(j,f)}(window,document,"script","https://bzrcdn.openai.com/sdk/oaiq.min.js");oaiq("init",{pixelId:"14r9KVX92hRkkwGHphHaPf",debug:true});</script>
14 15 16<!-- Zoho Sales IQ -->
17<script>window.$zoho=window.$zoho || {};$zoho.salesiq=$zoho.salesiq||{ready:function(){}}</script>
17<script id="zsiqscript" src="https://salesiq.zohopublic.eu/widget?wc=siqea01469d82fc7f3d13c3f359bcb7ed7070b636b89f8a87b08d931d7c2b8bf6e3e6c6342383073f6587dcba98b3afc92e" defer></script>
17 18<!-- End Zoho Sales IQ --> 19
20<script>!function(key) {if (window.reb2b) return;window.reb2b = {loaded: true};var s = document.createElement("script");s.async = true;s.src = "https://ddwl4m2hdecbv.cloudfront.net/b/" + key + "/" + key + ".js.gz";document.getElementsByTagName("script")[0].parentNode.insertBefore(s, document.getElementsByTagName("script")[0]);}("VN080H35096J");</script>
20 21 22<!-- Google Tag Manager -->
22<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s);j.async=true;j.src="https://sgtm.channelsight.com/ejoptbdft.js?"+i;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','9l0=HQJZJSA9Qj4kNFcmR0VJHElUSlNSFAFXFw4FDBoVAxkdAQwWWhMABw%3D%3D');</script>
22 <!-- End Google Tag Manager --> 23 24<!-- CSS --> 25<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/lenis.css" integrity="sha384-gNKFsxEO/HxWOwNuzDJ+LC49+5LQTHKAZjdsSKgbraM36zXn2VDakftLnW9c7W3t" crossorigin="anonymous"> 26 27<!-- JS -->
28<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/lenis.min.js" integrity="sha384-FKTX0CNJ8ngN1oGMBReVu7mvjTJyjFiD5etb1NKnYxc+8eFI2O0KWnksTN+oTFcu" crossorigin="anonymous"></script>
28 29
30<script id="jetboost-script" type="text/javascript"> window.JETBOOST_SITE_ID = "clnrysef400280qya01pa9rrq"; (function(d) { var s = d.createElement("script"); s.src = "https://cdn.jetboost.io/jetboost.js"; s.async = 1; d.getElementsByTagName("head")[0].appendChild(s); })(document); </script>
30 31 32
32<script> 33 !function(key) { 34 if (window.reb2b) return; 35 window.reb2b = {loaded: true}; 36 var s = document.createElement("script"); 37 s.async = true; 38 s.src = "https://ddwl4m2hdecbv.cloudfront.net/b/" + key + "/" + key + ".js.gz"; 39 document.getElementsByTagName("script")[0].parentNode.insertBefore(s, document.getElementsByTagName("script")[0]); 40}("VN080H35096J"); 41 </script>
41 42 43<style> 44 45.button, .button-main, .button-nav { 46 background: linear-gradient(135deg, #F5AF55, #FF5D8A, #9E77ED); 47 background-size: 300% 300%; /* Increase size to allow movement */ 48 background-position: 0% 50%; 49 cursor: pointer; 50 transition: all 0.3s ease-in-out; 51 animation: gradientAnimation 4s linear infinite; 52} 53 54@keyframes gradientAnimation { 55 0% { 56 background-position: 0% 50%; 57 } 58 50% { 59 background-position: 100% 50%; 60 } 61 100% { 62 background-position: 0% 50%; 63 } 64} 65 66.gradient-button:hover { 67 opacity: 0.8; 68} 69 70.text-span-grad-purp { 71 font-size: inherit; /* Ensures the text matches surrounding content */ 72 vertical-align: baseline; /* Removes the subscript positioning */ 73} 74 75</style>
76<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/gsap.min.js" integrity="sha384-XmJ9SoHtVOHoQUcKvFAzVXwdkKo1Ie3bhmSoIAkcdsHGaIrVJIkmozyq0FJeb/Ly" crossorigin="anonymous"></script>
76<script src="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d%2F652d31f3dc22d7b4ee708e44%2F6a4e73d9c4e7aac02b02be58%2Fclarity_script-8.8.3.js" type="text/javascript"></script>
76<script src="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d%2F6920e91076f71b3b0ca97a18%2F6a7dba27f48bedef671f67fc%2Fgoogle_tag-0.0.3.js" type="text/javascript" data-gtag-id="AW-859088441"></script>
76</head><body><div class="w-embed w-iframe"><!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 76-77
76 77<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
77GTM-TPR3D35
vendor: 83 bytes, lines 77-78
77" 78height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
79<!-- End Google Tag Manager (noscript) --></div><div class="nav-components top-spacing"><a href="#main" class="skip-link">Skip to content</a><div><div class="custom-css w-embed"><style> 80 [data-menu-wrap] { 81 --nav-height: 6em; 82} 83 84.mega-nav__panel-col:last-of-type { 85 border: none; 86} 87 88/* Allow easier content editing when panel state is 'active' inside of the designer*/ 89.wf-design-mode [data-nav-content][data-panel-state="1"] { 90 opacity: 1; 91 visibility: visible; 92 pointer-events: auto; 93 position: relative; 94} 95 96.wf-design-mode [data-menu-open]:has( [data-nav-content][data-panel-state="active"]) [data-dropdown-bg] { 97 opacity: 1; 98 inset: 0; 99} 100 101.wf-design-mode [data-mobile-nav="active"] { 102 opacity: 1; 103 visibility: visible; 104} 105 106 .u-heading h1, 107 .u-heading h2, 108 .u-heading h3, 109 .u-heading h4 { 110 font-size: inherit !important; 111 } 112 113 .font-weight-light{ 114 font-weight: 300 !important; 115 } 116 117/* Case studies / blogs list - horizontal slider on mobile */ 118@media (max-width: 767px) { 119 .blogs-list-wrap { 120 flex-wrap: nowrap; 121 overflow-x: auto; 122 -webkit-overflow-scrolling: touch; 123 scroll-snap-type: x mandatory; 124 scroll-padding-left: 0.25rem; 125 scrollbar-width: none; 126 } 127 .blogs-list-wrap::-webkit-scrollbar {
128 display: none; 129 } 130 .blogs-list-wrap > .w-dyn-item { 131 flex: 0 0 80%; 132 max-width: 80%; 133 scroll-snap-align: start; 134 } 135} 136 137/* Comparison table info tooltips */ 138.cmp-info:hover .cmp-info-tip, 139.cmp-info:focus-within .cmp-info-tip { 140 display: block; 141} 142.cmp-info-tip p { 143 margin: 0; 144 font-size: 0.8125rem; 145 line-height: 1.5; 146} 147 148/* Comparison page FAQ accordion */ 149.cfaq-item[data-open="true"] .cfaq-a { 150 display: block; 151} 152.cfaq-item[data-open="true"] .cfaq-icon { 153 transform: rotate(45deg); 154} 155.cfaq-q:focus-visible { 156 outline: 2px solid #5c55a6; 157 outline-offset: 2px; 158} 159.cfaq-a p, 160.cfaq-qtext p { 161 margin: 0; 162} 163 164/* Comparison table meaning line (the 'What does it mean' text under capability names) */ 165.cmp-meaning p { 166 margin: 0; 167 font-size: 0.8125rem; 168 line-height: 1.5; 169 color: #667085; 170} 171 172/* Comparison summary reason cards */ 173.cmp-why-title h1, 174.cmp-why-title h2, 175.cmp-why-title h3, 176.cmp-why-title h4 { 177 margin: 0; 178 font-size: 1.125rem; 179 line-height: 1.4; 180} 181.cmp-why-card p { 182 margin: 0; 183 font-size: 0.9375rem; 184 line-height: 1.6; 185} 186 187/* Industry stats band: per-position metric icons (stats mode only; feature cards keep their own icon) */ 188.layout254_item.is-stats-card .cs-icon-1x1-xsmall-3 { 189 display: none; 190} 191.layout254_item.is-stats-card:nth-child(1) .fcard-stat-icon-1, 192.layout254_item.is-stats-card:nth-child(2) .fcard-stat-icon-2, 193.layout254_item.is-stats-card:nth-child(3) .fcard-stat-icon-3, 194.layout254_item.is-stats-card:nth-child(4) .fcard-stat-icon-4 { 195 display: flex; 196} 197.layout254_item.is-stats-card .cs-icon-featured-outline-large-4 { 198 margin-left: auto; 199 margin-right: auto; 200} 201 202/* Industry pages: stat tile 2 swaps the storefront for the industry glyph (keyed by page id) */ 203html[data-wf-page="6a6b415bed2bfff2ac196c80"] .layout254_item.is-stats-card:nth-child(2) .fcard-stat-icon-2, 204html[data-wf-page="6a6b41f61c1b18a7410c5a0d"] .layout254_item.is-stats-card:nth-child(2) .fcard-stat-icon-2, 205html[data-wf-page="6a6b4237d2b29a42560750ad"] .layout254_item.is-stats-card:nth-child(2) .fcard-stat-icon-2, 206html[data-wf-page="6a6b42a0d93559a1ca740815"] .layout254_item.is-stats-card:nth-child(2) .fcard-stat-icon-2, 207html[data-wf-page="6a6b42b129e6d7ffcd5cee57"] .layout254_item.is-stats-card:nth-child(2) .fcard-stat-icon-2, 208html[data-wf-page="6a6b426c77f1ae51bdad9644"] .layout254_item.is-stats-card:nth-child(2) .fcard-stat-icon-2, 209html[data-wf-page="6a6b427c29e6d7ffcd5cc554"] .layout254_item.is-stats-card:nth-child(2) .fcard-stat-icon-2, 210html[data-wf-page="6a6b425a14fa4a9bd641a221"] .layout254_item.is-stats-card:nth-child(2) .fcard-stat-icon-2 { 211 display: none; 212} 213html[data-wf-page="6a6b415bed2bfff2ac196c80"] .layout254_item.is-stats-card:nth-child(2) .fcard-ind-basket, 214html[data-wf-page="6a6b41f61c1b18a7410c5a0d"] .layout254_item.is-stats-card:nth-child(2) .fcard-ind-pill, 215html[data-wf-page="6a6b4237d2b29a42560750ad"] .layout254_item.is-stats-card:nth-child(2) .fcard-ind-plug, 216html[data-wf-page="6a6b42a0d93559a1ca740815"] .layout254_item.is-stats-card:nth-child(2) .fcard-ind-utensils, 217html[data-wf-page="6a6b42b129e6d7ffcd5cee57"] .layout254_item.is-stats-card:nth-child(2) .fcard-ind-sparkles, 218html[data-wf-page="6a6b426c77f1ae51bdad9644"] .layout254_item.is-stats-card:nth-child(2) .fcard-ind-hammer, 219html[data-wf-page="6a6b427c29e6d7ffcd5cc554"] .layout254_item.is-stats-card:nth-child(2) .fcard-ind-toybrick, 220html[data-wf-page="6a6b425a14fa4a9bd641a221"] .layout254_item.is-stats-card:nth-child(2) .fcard-ind-wrench { 221 display: flex; 222} 223</style> 224<style> 225/* MG-42 purchase-path icons and page media, 15 Sep 2026 */ 226html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_head::after{content:"";display:block;width:6rem;height:3px;margin:var(--_spacing---space--5) auto 0;background:var(--colors--cs-purblue);border-radius:3px} 227html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_row::after{content:"";position:absolute;bottom:0;left:0;right:0;height:.5rem;background:var(--colors--cs-light-purple);border-radius:0 0 1rem 1rem} 228html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item::before,html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_chip::before{content:"";display:block;flex-shrink:0;background:var(--colors--cs-dark-purblue);mask:var(--cs-icon) center/contain no-repeat;-webkit-mask:var(--cs-icon) center/contain no-repeat} 229html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item::before{width:2rem;height:2rem;margin-bottom:var(--_spacing---space--5)} 230html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_chip::before{width:1.5rem;height:1.5rem} 231html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:not(:last-child)::after{content:"";position:absolute;right:calc(-1 * var(--_spacing---space--4));top:50%;width:var(--_spacing---space--4);height:1.25rem;background:var(--colors--cs-purblue);mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 12h15m-6-6 6 6-6 6' fill='none' stroke='black' stroke-width='2'/%3E%3C/svg%3E") center/contain no-repeat} 232html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_chip:not(:last-child){border-right:1px solid var(--colors--cs-light-purple)} 233html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-content="video"]{border-radius:1rem;overflow:hidden} 234html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-content="video"] .w-youtube{aspect-ratio:16/9;height:auto!important;padding-top:0!important} 235html[data-wf-page="6a992fe4586a2d690ffacbc0"] #conversational-commerce-form{scroll-margin-top:7rem;background:var(--colors--cs-light-purple)} 236html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-content="form"]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);column-gap:var(--_spacing---space--8);align-items:start} 237html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-content="form"]>.u-heading{min-width:0;max-width:none;grid-column:1;grid-row:1;margin-top:0} 238html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-content="form"]>.u-text{min-width:0;max-width:none;grid-column:1;grid-row:2} 239html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-hubspot]{grid-column:2;grid-row:1/span 3;min-width:0;background:white;border-radius:1rem;padding:var(--_spacing---space--6)} 240html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-form-fallback]{grid-column:2;color:var(--colors--cs-dark-purblue)} 241html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-hubspot] iframe{max-width:100%;width:100%} 242@media(max-width:991px){html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:nth-child(3n)::after{display:none}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_chip{border-right:0!important}html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-content="form"]{display:block}html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-hubspot]{margin-top:var(--_spacing---space--6)}} 243@media(max-width:479px){html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item::before{margin:0;width:1.75rem;height:1.75rem}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:not(:last-child)::after{display:block;top:auto;bottom:calc(-1 * var(--_spacing---space--5));right:50%;height:var(--_spacing---space--5);transform:translateX(50%) rotate(90deg)}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_row::after{display:none}html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-hubspot]{padding:var(--_spacing---space--4)}} 244 245html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:nth-child(1){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22M16%2010a2%202%200%200%201-2%202H6.828a2%2
24502%200%200%200-1.414.586l-2.202%202.202A.71.71%200%200%201%202%2014.286V4a2%202%200%200%201%202-2h10a2%202%200%200%201%202%202z%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M20%209a2%202%200%200%201%202%202v10.286a.71.71%200%200%201-1.212.502l-2.202-2.202A2%202%200%200%200%2017.172%2019H10a2%202%200%200%201-2-2v-1%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 246html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:nth-child(2){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22M12%2018V5%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M15%2013a4.17%204.17%200%200%201-3-4%204.17%204.17%200%200%201-3%204%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M17.598%206.5A3%203%200%201%200%2012%205a3%203%200%201%200-5.598%201.5%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M17.997%205.125a4%204%200%200%201%202.526%205.77%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M18%2018a4%204%200%200%200%202-7.464%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M19.967%2017.483A4%204%200%201%201%2012%2018a4%204%200%201%201-7.967-.517%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M6%2018a4%204%200%200%201-2-7.464%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M6.003%205.125a4%204%200%200%200-2.526%205.77%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 247html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:nth-child(3){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Crect%20width%3D%228%22%20height%3D%224%22%20x%3D%228%22%20y%3D%222%22%20rx%3D%221%22%20ry%3D%221%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M16%204h2a2%202%200%200%201%202%202v14a2%202%200%200%201-2%202H6a2%202%200%200%201-2-2V6a2%202%200%200%201%202-2h2%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22m9%2014%202%202%204-4%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 248html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:nth-child(4){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cellipse%20cx%3D%2212%22%20cy%3D%225%22%20rx%3D%229%22%20ry%3D%223%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M3%205V19A9%203%200%200%200%2021%2019V5%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M3%2012A9%203%200%200%200%2021%2012%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 249html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:nth-child(5){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22M20%2013c0%205-3.5%207.5-7.66%208.95a1%201%200%200%201-.67-.01C7.5%2020.5%204%2018%204%2013V6a1%201%200%200%201%201-1c2%200%204.5-1.2%206.24-2.72a1.17%201.17%200%200%201%201.52%200C14.51%203.81%2017%205%2019%205a1%201%200%200%201%201%201z%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22m9%2012%202%202%204-4%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 250html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:nth-child(6){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22M10%2014.66V17a1%201%200%200%201-1%201%202%202%200%200%200-2%202v2%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M14%2014.66V17a1%201%200%200%200%201%201%202%202%200%200%201%202%202v2%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M17.916%2010H19.5A2.5%202.5%200%200%200%2022%207.5V5a1%201%200%200%200-1-1h-3%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M4%2022h16%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M6%209a6%206%200%200%200%2012%200V3a1%201%200%200%200-1-1H7a1%201%200%200%200-1%201z%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M6.084%2010H4.5A2.5%202.5%200%200%201%202%207.5V5a1%201%200%200%201%201-1h3%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}
251html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:nth-child(7){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22M15%2021v-5a1%201%200%200%200-1-1h-4a1%201%200%200%200-1%201v5%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M17.774%2010.31a1.12%201.12%200%200%200-1.549%200%202.5%202.5%200%200%201-3.451%200%201.12%201.12%200%200%200-1.548%200%202.5%202.5%200%200%201-3.452%200%201.12%201.12%200%200%200-1.549%200%202.5%202.5%200%200%201-3.77-3.248l2.889-4.184A2%202%200%200%201%207%202h10a2%202%200%200%201%201.653.873l2.895%204.192a2.5%202.5%200%200%201-3.774%203.244%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M4%2010.95V19a2%202%200%200%200%202%202h12a2%202%200%200%200%202-2v-8.05%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 252html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:nth-child(8){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22M22%2017a2%202%200%200%201-2%202H6.828a2%202%200%200%200-1.414.586l-2.202%202.202A.71.71%200%200%201%202%2021.286V5a2%202%200%200%201%202-2h16a2%202%200%200%201%202%202z%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M7%2011h10%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M7%2015h6%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M7%207h8%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 253html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_item:nth-child(9){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22m2.05%202.05%201.099-.028a1%201%200%200%201%201.008.815l2.69%2014.347A1%201%200%200%200%207.83%2018H18%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M4.563%205h16.435a1%201%200%200%201%20.981%201.204l-1.026%206.226A2%202%200%200%201%2018.962%2014H6.25%22%20%2F%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%2220%22%20r%3D%222%22%20%2F%3E%0A%20%20%3Ccircle%20cx%3D%228%22%20cy%3D%2220%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 254html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_chip:nth-child(1){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22M16%2010a2%202%200%200%201-2%202H6.828a2%202%200%200%200-1.414.586l-2.202%202.202A.71.71%200%200%201%202%2014.286V4a2%202%200%200%201%202-2h10a2%202%200%200%201%202%202z%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M20%209a2%202%200%200%201%202%202v10.286a.71.71%200%200%201-1.212.502l-2.202-2.202A2%202%200%200%200%2017.172%2019H10a2%202%200%200%201-2-2v-1%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 255html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_chip:nth-child(2){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22M11%2021.73a2%202%200%200%200%202%200l7-4A2%202%200%200%200%2021%2016V8a2%202%200%200%200-1-1.73l-7-4a2%202%200%200%200-2%200l-7%204A2%202%200%200%200%203%208v8a2%202%200%200%200%201%201.73z%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M12%2022V12%22%20%2F%3E%0A%20%20%3Cpolyline%20points%3D%223.29%207%2012%2012%2020.71%207%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22m7.5%204.27%209%205.15%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}
256html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_chip:nth-child(3){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22M20%2013c0%205-3.5%207.5-7.66%208.95a1%201%200%200%201-.67-.01C7.5%2020.5%204%2018%204%2013V6a1%201%200%200%201%201-1c2%200%204.5-1.2%206.24-2.72a1.17%201.17%200%200%201%201.52%200C14.51%203.81%2017%205%2019%205a1%201%200%200%201%201%201z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 257html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_chip:nth-child(4){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22M12%203v18%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22m19%208%203%208a5%205%200%200%201-6%200zV7%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M3%207h1a17%2017%200%200%200%208-2%2017%2017%200%200%200%208%202h1%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22m5%208%203%208a5%205%200%200%201-6%200zV7%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M7%2021h10%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 258html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_chip:nth-child(5){--cs-icon:url("data:image/svg+xml,%3Csvg%0A%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20width%3D%2224%22%0A%20%20height%3D%2224%22%0A%20%20viewBox%3D%220%200%2024%2024%22%0A%20%20fill%3D%22none%22%0A%20%20stroke%3D%22currentColor%22%0A%20%20stroke-width%3D%222%22%0A%20%20stroke-linecap%3D%22round%22%0A%20%20stroke-linejoin%3D%22round%22%0A%3E%0A%20%20%3Cpath%20d%3D%22M5%2021v-6%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M12%2021V9%22%20%2F%3E%0A%20%20%3Cpath%20d%3D%22M19%2021V3%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")} 259 260</style> 261<!-- CS announcement banner, 22 Sep 2026 --> 262<style> 263/* ChannelSight announcement banner. Native classes provide its layout and palette. */ 264.cs-announcement { 265 background-image: linear-gradient(110deg, 266 var(--colors--untitled-ui-orange700, #b93815) 0%, 267 var(--colors--cs-dark-purblue, #3a43c3) 100%); 268 animation: cs-announcement-enter 320ms ease-out both; 269} 270.cs-announcement[hidden] { display: none !important; } 271.cs-announcement_row { 272 position: relative; 273 min-height: 2.75rem; 274 padding-inline: 3rem; 275} 276.cs-announcement_close { 277 position: absolute; 278 top: 0; 279 right: 0; 280 display: none; 281 align-items: center; 282 justify-content: center; 283 width: 2.75rem; 284 height: 2.75rem; 285 padding: 0; 286 border: 0; 287 border-radius: .25rem; 288 background: transparent; 289 color: inherit; 290 cursor: pointer; 291 appearance: none; 292} 293.cs-announcement[data-cs-dismissible] .cs-announcement_close, 294.wf-design-mode .cs-announcement_close { display: inline-flex; } 295.cs-announcement_close::before, 296.cs-announcement_close::after { 297 content: ""; 298 position: absolute; 299 width: 1rem; 300 height: 2px; 301 background: currentColor; 302 transform: rotate(45deg); 303} 304.cs-announcement_close::after { transform: rotate(-45deg); } 305.cs-announcement_close:hover { background: rgb(255 255 255 / 12%); } 306.cs-announcement_close:focus-visible { 307 outline: 2px solid currentColor; 308 outline-offset: -4px; 309} 310.cs-announcement_copy .u-text { 311 min-width: 0; 312 max-width: none; 313 color: inherit; 314} 315.cs-announcement_action .button-main { 316 display: inline-flex; 317 align-items: center; 318 justify-content: center; 319 min-height: 2.75rem; 320 padding: 0 var(--_spacing---space--1); 321 border: 0; 322 border-radius: 0; 323 background: transparent; 324 color: inherit; 325 box-shadow: none; 326 font-size: var(--_typography---font-size--text-main); 327 text-decoration: underline; 328 text-underline-offset: .2em; 329 white-space: nowrap; 330 transform: none; 331} 332.cs-announcement_action .button-main:hover { 333 background: transparent; 334 color: inherit; 335 text-decoration-thickness: .12em; 336 transform: none; 337} 338.cs-announcement_action .button-main:focus-visible { 339 outline: 2px solid currentColor; 340 outline-offset: 2px; 341} 342.mega-nav:has(> .cs-announcement):not(.is-relative) { 343 top: 0; 344} 345.nav-components:has(> .mega-nav > .cs-announcement) { 346 padding-top: var(--cs-announcement-offset, 0px); 347} 348@media screen and (max-width: 991px) { 349 .mega-nav:has(> .cs-announcement) .mega-nav__bar-inner, 350 .mega-nav:has(> .cs-announcement) .mega-nav__dropdown-wrapper { 351 top: calc(var(--nav-height) + var(--cs-announcement-height, 0px)); 352 } 353} 354@media screen and (max-width: 767px) { 355 .cs-announcement_row { 356 flex-direction: column; 357 row-gap: 0; 358 padding-top: var(--_spacing---space--1); 359 } 360} 361@keyframes cs-announcement-enter { 362 from { transform: translateY(-100%); } 363 to { transform: translateY(0); } 364} 365@media (prefers-reduced-motion: reduce) { 366 .cs-announcement { animation: none; } 367} 368 369</style> 370<style> 371/* BEGIN ChannelSight case-study index 2026-10-02 */ 372/* ChannelSight case-study index. Scoped additions to native Webflow/Lumos styles. */ 373.cs-index-hero .u-container,.cs-index-library .u-container{max-width:80rem;width:calc(100% - clamp(2.5rem,8vw,7rem))} 374.cs-index-hero .section-spacer{padding-top:clamp(2.25rem,4.4vw,4rem)} 375.cs-index-library>.section-spacer:first-child{padding-top:var(--_spacing---space--7)} 376.cs-index-heading .eyebrow{font-size:.875rem;text-transform:uppercase;letter-spacing:.075em;color:#5837df;margin-bottom:var(--_spacing---space--4)} 377.cs-index-heading .u-heading{font-weight:600;line-height:1.07;letter-spacing:-.05em} 378.cs-index-heading h1{white-space:pre-line;color:#5837df} 379.cs-index-heading h1::first-line{color:#101039} 380.cs-index-heading .u-heading p:empty,.cs-index-library-title .u-heading p:empty{display:none} 381.cs-index-intro p{line-height:1.55} 382.cs-index-library-title .u-heading{min-width:0;width:auto;font-weight:600;letter-spacing:-.025em;white-space:nowrap} 383.cs-index-library .cs-index-filter{margin:0} 384.cs-index-library [data-cs-filter]{display:flex;align-items:center;gap:var(--_spacing---space--3)} 385.cs-index-library .cs-index-select{margin:0;max-width:100%;font-family:inherit} 386.cs-index-library .cs-index-label{margin:0;font-weight:400;white-space:nowrap} 387.cs-index-library [hidden]{display:none!important} 388.cs-index-count:empty{display:none} 389.cs-index-library .cs-index-industry>div{display:inline} 390.cs-index-card{transition:border-color .18s,box-shadow .18s,transform .18s} 391.cs-index-card:hover{border-color:#b8aaef;box-shadow:0 10px 30px #29215a0c;transform:translateY(-3px)} 392.cs-index-image{transition:transform .3s} 393.cs-index-card:hover .cs-index-image{transform:scale(1.025)} 394.cs-index-media:has(a[href*="regalo"]){object-position:70% 42%} 395.cs-index-card[href*="regalo"] .cs-index-image{object-position:70% 42%} 396.cs-index-page-numbers .cs-index-page-button{min-width:2.5rem;border-radius:6px} 397.cs-index-page-button[aria-current=page]{background:#eee9ff;color:#5837df;font-weight:600} 398.cs-index-page-button:disabled{color:#b5b2c2;cursor:default} 399.cs-index-hero a:focus-visible,.cs-index-library :is(a,button,select):focus-visible{outline:3px solid #5837df;outline-offset:4px} 400.cs-index-library{scroll-margin-top:2rem} 401@media(min-width:1600px){.cs-index-hero .u-container,.cs-index-library .u-container{max-width:90rem}} 402@media(max-width:767px){.cs-index-heading h1{font-size:clamp(2.3rem,10.9vw,3rem)}.cs-index-intro{max-width:36rem}.cs-index-library [data-cs-filter]{width:100%;justify-content:space-between}.cs-index-select{width:min(15rem,70vw)}.cs-index-library .u-container,.cs-index-hero .u-container{width:calc(100% - 2.5rem)}} 403@media(prefers-reduced-motion:reduce){.cs-index-card,.cs-index-image{transition:none}.cs-index-card:hover{transform:none}} 404.cs-index-library [data-cs-primary]:is(:empty,.w-dyn-bind-empty){display:none!important} 405.cs-index-content:has([data-cs-primary="title"]:not(:empty):not(.w-dyn-bind-empty)) [data-cs-fallback="title"], 406.cs-index-media:has([data-cs-primary="company"]:not(:empty):not(.w-dyn-bind-empty)) [data-cs-fallback="company"], 407.cs-index-industry:has([data-cs-primary="industry"]:not(:empty):not(.w-dyn-bind-empty)) [data-cs-fallback="industry"]{display:none} 408 409.cs-index-heading h1::before,.cs-index-heading h1::after{display:none} 410.cs-index-image{margin:0} 411.cs-index-heading .u-heading h1::before,.cs-index-heading .u-heading h1::after{content:none!important;display:none!important} 412html[data-wf-page="649afe6191f574759c2f675a"] .nav-components.top-spacing{padding-top:var(--cs-index-nav-height,8.125rem);margin-bottom:0} 413@media(max-width:767px){html[data-wf-page="649afe6191f574759c2f675a"] .nav-components.top-spacing{padding-top:var(--cs-index-nav-height,11rem)}} 414 415/* END ChannelSight case-study index */ 416</style> 417<style> 418/* Case study optional photo logos 2026-10-02 */ 419/* Optional brand marks over case-study photos. Empty fields retain the company name. */ 420.cs-index-logo:is(.w-dyn-bind-empty,[src=""],[data-cs-logo-failed]),.cs-index-logo:not([src]){display:none!important} 421.cs-index-media:has(.cs-index-logo[src]:not([src=""]):not(.w-dyn-bind-empty):not([data-cs-logo-failed])) .cs-index-company{display:none!important} 422.cs-index-logo{pointer-events:none} 423.cs-index-media .cs-index-company{text-shadow:0 1px 10px rgba(0,0,0,.3)} 424 425</style></div><div class="w-embed"><style> 426::before, ::after { 427 box-sizing: border-box; 428} 429.w-embed:before, .w-embed:after, 430.w-richtext:before, .w-richtext:after {
431 content: unset; 432} 433html { 434 background-color: var(--_theme---background); 435} 436button { 437 background-color: unset; 438 padding: unset; 439 text-align: inherit; 440} 441button:not(:disabled) { 442 cursor: pointer; 443} 444video { 445 width: 100%; 446 object-fit: cover; 447} 448svg { 449 max-width: 100%; 450} 451@media (prefers-color-scheme: light) { 452 option { color: black; } 453} 454/* Typography */ 455body { 456 -webkit-font-smoothing: antialiased; 457 -moz-osx-font-smoothing: grayscale; 458} 459/* Clear Defaults */ 460a:not([class]) { 461 text-decoration: underline; 462} 463label { 464 font-weight: inherit; 465 margin-bottom: 0; 466} 467select:has(option[value=""]:checked) { 468 color: color-mix(in lab, currentcolor 60%, transparent) 469} 470/* Selection Color */ 471::selection { 472 background-color: var(--_theme---selection--background); 473 color: var(--_theme---selection--text); 474} 475/* Margin Trim */ 476:is(.u-margin-trim,.w-richtext,.u-content-wrapper,[class*="u-container"],[class*="u-layout-column"]) > :not(:not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim) ~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim)), 477:is(.u-margin-trim,.w-richtext,.u-content-wrapper,[class*="u-container"],[class*="u-layout-column"]) > .u-display-contents > :not(:not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim) ~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim)) { 478 margin-top: 0; 479} 480:is(.u-margin-trim,.w-richtext,.u-content-wrapper,[class*="u-container"],[class*="u-layout-column"]) > :not(:has(~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim))), 481:is(.u-margin-trim,.w-richtext,.u-content-wrapper,[class*="u-container"],[class*="u-layout-column"]) > .u-display-contents > :not(:has(~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim))) { 482 margin-bottom: 0; 483} 484/* Line Height Trim */ 485:not(.u-text-trim-off) > :is(h1,h2,h3,h4,h5,h6,p):not(.u-text-trim-off,:has([class*="u-text-style-"]))::before, 486[class*="u-text-style-"]:not(.u-text-trim-off,:has(h1,h2,h3,h4,h5,h6,p))::before { 487 content: ""; 488 display: table; 489 margin-bottom: calc(-0.5lh + var(--_text-style---trim-top)); 490} 491:not(.u-text-trim-off) > :is(h1,h2,h3,h4,h5,h6,p):not(.u-text-trim-off,:has([class*="u-text-style-"]))::after, 492[class*="u-text-style-"]:not(.u-text-trim-off,:has(h1,h2,h3,h4,h5,h6,p))::after { 493 content: ""; 494 display: table; 495 margin-bottom: calc(-0.5lh + var(--_text-style---trim-bottom)); 496} 497/* Rich Text Links */ 498.w-richtext a { 499 position: relative; 500 z-index: 4; 501} 502/* Line Clamp */ 503[class*="u-line-clamp"]:not(.w-richtext), 504[class*="u-line-clamp"].w-richtext > * { 505 display: -webkit-box !important; 506 -webkit-line-clamp: 1; 507 -webkit-box-orient: vertical; 508 overflow: hidden; 509} 510[class*="u-line-clamp"].w-richtext > :not(:first-child) { display: none; } 511.u-line-clamp-2:not(.w-richtext), .u-line-clamp-2.w-richtext > * { -webkit-line-clamp: 2; } 512.u-line-clamp-3:not(.w-richtext), .u-line-clamp-3.w-richtext > * { -webkit-line-clamp: 3; } 513.u-line-clamp-4:not(.w-richtext), .u-line-clamp-4.w-richtext > * { -webkit-line-clamp: 4; } 514/* Text Max Width */ 515.u-heading > *, 516.u-text > * { 517 width: 100%; 518 max-width: inherit !important; 519 margin-inline: 0 !important; 520 margin-top: 0 !important; 521} 522/* Background Slot Children */ 523.u-background-slot > * { 524 position: absolute; 525 top: 0; 526 left: 0; 527 width: 100%; 528 height: 100%; 529 aspect-ratio: unset; 530} 531/* Hide If Empty CMS */ 532.u-hide-if-empty-cms:not(:has(.w-dyn-item)) { 533 display: none !important; 534} 535/* Focus State */ 536a, button, :where([tabindex]), input, select, textarea {
537 outline-offset: var(--focus--offset-outer); 538} 539a:focus-visible, 540button:focus-visible, 541[tabindex]:focus-visible, 542input:focus-visible, 543select:focus-visible, 544textarea:focus-visible { 545 outline-color: var(--_theme---text); 546 outline-width: var(--focus--width); 547 outline-style: solid; 548} 549/* Disabled */ 550[data-button]:has(button:disabled) { 551 opacity: 0.5; 552 pointer-events: none; 553} 554/* Icon */ 555.u-icon svg { 556 display: block !important; 557 width: 100% !important; 558 height: auto !important; 559} 560.u-icon path[stroke] { 561 stroke: currentColor !important; 562 stroke-width: var(--border-width--main); 563 vector-effect: non-scaling-stroke; 564} 565.u-icon :is(path:not([stroke]), rect, circle, ellipse, polygon, polyline) { 566 fill: currentColor !important; 567} 568/* Global / Clickable Component */ 569.wf-design-mode .clickable_wrap { z-index: 0; } 570/* Number Attributes */ 571[data-number="-1"]{--number: initial;}[data-number="0"]{--number: 0;}[data-number="1"]{--number:1}[data-number="2"]{--number:2}[data-number="3"]{--number:3}[data-number="4"]{--number:4}[data-number="5"]{--number:5}[data-number="6"]{--number:6}[data-number="7"]{--number:7}[data-number="8"]{--number:8}[data-number="9"]{--number:9} 572[data-number="10"]{--number:10}[data-number="11"]{--number:11}[data-number="12"]{--number:12}[data-number="13"]{--number:13}[data-number="14"]{--number:14}[data-number="15"]{--number:15}[data-number="16"]{--number:16}[data-number="17"]{--number:17}[data-number="18"]{--number:18}[data-number="19"]{--number:19} 573[data-number="20"]{--number:20}[data-number="21"]{--number:21}[data-number="22"]{--number:22}[data-number="23"]{--number:23}[data-number="24"]{--number:24}[data-number="25"]{--number:25}[data-number="26"]{--number:26}[data-number="27"]{--number:27}[data-number="28"]{--number:28}[data-number="29"]{--number:29} 574[data-number="30"]{--number:30}[data-number="31"]{--number:31}[data-number="32"]{--number:32}[data-number="33"]{--number:33}[data-number="34"]{--number:34}[data-number="35"]{--number:35}[data-number="36"]{--number:36}[data-number="37"]{--number:37}[data-number="38"]{--number:38}[data-number="39"]{--number:39} 575[data-number="40"]{--number:40}[data-number="41"]{--number:41}[data-number="42"]{--number:42}[data-number="43"]{--number:43}[data-number="44"]{--number:44}[data-number="45"]{--number:45}[data-number="46"]{--number:46}[data-number="47"]{--number:47}[data-number="48"]{--number:48}[data-number="49"]{--number:49} 576[data-number="50"]{--number:50}[data-number="51"]{--number:51}[data-number="52"]{--number:52}[data-number="53"]{--number:53}[data-number="54"]{--number:54}[data-number="55"]{--number:55}[data-number="56"]{--number:56}[data-number="57"]{--number:57}[data-number="58"]{--number:58}[data-number="59"]{--number:59} 577[data-number="60"]{--number:60}[data-number="61"]{--number:61}[data-number="62"]{--number:62}[data-number="63"]{--number:63}[data-number="64"]{--number:64}[data-number="65"]{--number:65}[data-number="66"]{--number:66}[data-number="67"]{--number:67}[data-number="68"]{--number:68}[data-number="69"]{--number:69} 578[data-number="70"]{--number:70}[data-number="71"]{--number:71}[data-number="72"]{--number:72}[data-number="73"]{--number:73}[data-number="74"]{--number:74}[data-number="75"]{--number:75}[data-number="76"]{--number:76}[data-number="77"]{--number:77}[data-number="78"]{--number:78}[data-number="79"]{--number:79} 579[data-number="80"]{--number:80}[data-number="81"]{--number:81}[data-number="82"]{--number:82}[data-number="83"]{--number:83}[data-number="84"]{--number:84}[data-number="85"]{--number:85}[data-number="86"]{--number:86}[data-number="87"]{--number:87}[data-number="88"]{--number:88}[data-number="89"]{--number:89} 580[data-number="90"]{--number:90}[data-number="91"]{--number:91}[data-number="92"]{--number:92}[data-number="93"]{--number:93}[data-number="94"]{--number:94}[data-number="95"]{--number:95}[data-number="96"]{--number:96}[data-number="97"]{--number:97}[data-number="98"]{--number:98}[data-number="99"]{--number:99}[data-number="100"]{--number:100} 581/* State Manager */ 582[data-state] { --_state---true: 1; --_state---false: 0; } 583.is-active, 584.wf-design-mode [data-preview="true"], 585.wf-design-mode [data-preview]:not(:has(> [data-w-instance-of])), 586[data-state~="checked"]:is(:checked, :has(:checked)), 587[data-state~="current"]:is(.w--current, :has(.w--current)), 588[data-state~="open"]:is(.w--open, :has(.w--open)), 589[data-state~="pressed"]:is([aria-pressed="true"], :has([aria-pressed="true"])), 590[data-state~="expanded"]:is([aria-expanded="true"], :has([aria-expanded="true"])), 591[data-state~="external"]:is([target="_blank"], :has([target="_blank"])) { 592 --_state---true: 0; --_state---false: 1; 593} 594.wf-design-mode [data-trigger~="preview"], 595[data-trigger~="focus"]:is(:focus-visible, :has(:focus-visible)), 596[data-trigger~="group"]:has([data-trigger~="focus-other"]:focus-visible, [data-trigger~="focus-other"] :focus-visible) 597[data-trigger~="focus-other"]:not(:focus-visible, :has(:focus-visible)) { 598 --_trigger---on: 0; --_trigger---off: 1; 599} 600@media (hover: hover) { 601 [data-trigger~="hover"]:hover, 602 [data-trigger~="hover-if-clickable"]:has(.clickable_wrap:not(.w-condition-invisible)):hover, 603 [data-trigger~="group"]:has([data-trigger~="hover-other"]:hover) [data-trigger~="hover-other"]:not(:hover) { 604 --_trigger---on: 0; --_trigger---off: 1; 605 } 606 [data-trigger~="hover-other"]:hover { --_trigger---on: 1 !important; --_trigger---off: 0 !important; } 607} 608@media (hover: none) { 609 [data-trigger~="mobile"] { --_trigger---on: 0; --_trigger---off: 1; } 610} 611/* Slot Styler */ 612[data-slot] > .w-dyn-list, 613[data-slot] > .w-dyn-list > *, 614[data-slot] > .w-dyn-list > * > *, 615[data-slot] > .u-display-contents > .w-dyn-list, 616[data-slot] > .u-display-contents > .w-dyn-list > *, 617[data-slot] > .u-display-contents > .w-dyn-list > * > *, 618[data-slot] > .u-display-contents > .u-display-contents > .w-dyn-list, 619[data-slot] > .u-display-contents > .u-display-contents > .w-dyn-list > *, 620[data-slot] > .u-display-contents > .u-display-contents > .w-dyn-list > * > * { 621 display: contents; 622} 623/* Layout Slot */ 624.u-layout-column-2:has(> :not(.u-image-wrapper,.u-video,.u-overlay)) { 625 aspect-ratio: auto; 626 border-radius: 0; 627 overflow: visible; 628} 629.u-layout-column-2:not(:has(> :not(.u-image-wrapper,.u-video,.u-overlay))) :is(.u-image-wrapper,.u-video,.u-overlay) { 630 position: absolute; 631 height: 100%; 632} 633/* Responsive Styles */ 634[data-large-columns="1"] { display: flex; } 635[data-large-columns="2"] { display: grid; --_column-count---value: 2; } 636[data-large-columns="3"] { display: grid; --_column-count---value: 3; } 637[data-large-columns="4"] { display: grid; --_column-count---value: 4; } 638[data-large-columns="5"] { display: grid; --_column-count---value: 5; } 639[data-large-columns="6"] { display: grid; --_column-count---value: 6; } 640[data-large-columns="7"] { display: grid; --_column-count---value: 7; } 641[data-large-columns="8"] { display: grid; --_column-count---value: 8; } 642[data-large-columns="9"] { display: grid; --_column-count---value: 9; } 643[data-large-columns="10"] { display: grid; --_column-count---value: 10; } 644[data-large-columns="11"] { display: grid; --_column-count---value: 11; } 645[data-large-columns="12"] { display: grid; --_column-count---value: 12; } 646.slider_offset { --slide-count: var(--lg); --lg: 3; --md: var(--lg); --sm: var(--md); --xs: var(--sm); } 647@container (width < 53em) { 648 * { 649 --_responsive---large: 0; 650 --_responsive---medium: 1; 651 --flex-medium: flex; 652 --none-medium: none; 653 --column-medium: column; 654 --row-medium: row; 655 --start-medium: start; 656 --center-medium: center; 657 --end-medium: end; 658 --first-medium: -1; 659 --last-medium: 1; 660 --unset-medium: unset; 661 --relative-medium: relative; 662 } 663 [data-medium-columns="1"] { display: flex; } 664 [data-medium-columns="2"] { display: grid; --_column-count---value: 2; } 665 [data-medium-columns="3"] { display: grid; --_column-count---value: 3; } 666 [data-medium-columns="4"] { display: grid; --_column-count---value: 4; } 667 [data-medium-columns="5"] { display: grid; --_column-count---value: 5; } 668 [data-medium-columns="6"] { display: grid; --_column-count---value: 6; } 669 [data-medium-columns="7"] { display: grid; --_column-count---value: 7; } 670 [data-medium-columns="8"] { display: grid; --_column-count---value: 8; } 671 [data-medium-columns="9"] { display: grid; --_column-count---value: 9; } 672 [data-medium-columns="10"] { display: grid; --_column-count---value: 10; } 673 [data-medium-columns="11"] { display: grid; --_column-count---value: 11; } 674 [data-medium-columns="12"] { display: grid; --_column-count---value: 12; } 675 .slider_offset { --slide-count: var(--md); } 676} 677@container (width < 42em) { 678 * { 679 --_responsive---medium: 0; 680 --_responsive---small: 1; 681 --flex-small: flex; 682 --none-small: none; 683 --column-small: column; 684 --row-small: row; 685 --start-small: start; 686 --center-small: center; 687 --end-small: end; 688 --first-small: -1; 689 --last-small: 1; 690 --unset-small: unset; 691 --relative-small: relative; 692 } 693 [data-small-columns="1"] { display: flex; } 694 [data-small-columns="2"] { display: grid; --_column-count---value: 2; } 695 [data-small-columns="3"] { display: grid; --_column-count---value: 3; } 696 [data-small-columns="4"] { display: grid; --_column-count---value: 4; } 697 [data-small-columns="5"] { display: grid; --_column-count---value: 5; } 698 [data-small-columns="6"] { display: grid; --_column-count---value: 6; } 699 [data-small-columns="7"] { display: grid; --_column-count---value: 7; } 700 [data-small-columns="8"] { display: grid; --_column-count---value: 8; } 701 [data-small-columns="9"] { display: grid; --_column-count---value: 9; } 702 [data-small-columns="10"] { display: grid; --_column-count---value: 10; } 703 [data-small-columns="11"] { display: grid; --_column-count---value: 11; } 704 [data-small-columns="12"] { display: grid; --_column-count---value: 12; } 705 .slider_offset { --slide-count: var(--sm); } 706} 707@container (width < 27em) { 708 * { 709 --_responsive---small: 0; 710 --_responsive---xsmall: 1; 711 --flex-xsmall: flex; 712 --none-xsmall: none; 713 --column-xsmall: column; 714 --row-xsmall: row; 715 --start-xsmall: start; 716 --center-xsmall: center; 717 --end-xsmall: end; 718 --first-xsmall: -1; 719 --last-xsmall: 1; 720 --unset-xsmall: unset; 721 --relative-xsmall: relative; 722 } 723 [data-xsmall-columns="1"] { display: flex; } 724 [data-xsmall-columns="2"] { display: grid; --_column-count---value: 2; } 725 [data-xsmall-columns="3"] { display: grid; --_column-count---value: 3; } 726 [data-xsmall-columns="4"] { display: grid; --_column-count---value: 4; } 727 [data-xsmall-columns="5"] { display: grid; --_column-count---value: 5; } 728 [data-xsmall-columns="6"] { display: grid; --_column-count---value: 6; } 729 [data-xsmall-columns="7"] { display: grid; --_column-count---value: 7; } 730 [data-xsmall-columns="8"] { display: grid; --_column-count---value: 8; } 731 [data-xsmall-columns="9"] { display: grid; --_column-count---value: 9; } 732 [data-xsmall-columns="10"] { display: grid; --_column-count---value: 10; } 733 [data-xsmall-columns="11"] { display: grid; --_column-count---value: 11; } 734 [data-xsmall-columns="12"] { display: grid; --_column-count---value: 12; } 735 .slider_offset { --slide-count: var(--xs); } 736} 737</style></div><div class="w-embed"><style> 738/* [ASA] AI Shopping Assistant page, 16 Sep 2026 */ 739html[data-wf-page="6a992fe4586a2d690ffacbc0"] .section-cell.max-h-30:has(.cs-asa-hero){max-height:none} 740/* Steps row: no lilac bar underneath (overrides the MG-42 ::after rule above) */ 741html[data-wf-page="6a992fe4586a2d690ffacbc0"] .steps_row::after{display:none} 742/* Dark variant of Section / Hero Assistant Card */ 743.w-variant-56d9bf4b-58b7-4670-27da-a61685cddbc8 .u-heading,.w-variant-56d9bf4b-58b7-4670-27da-a61685cddbc8 .u-heading *{color:#fff} 744.w-variant-56d9bf4b-58b7-4670-27da-a61685cddbc8 .u-text,.w-variant-56d9bf4b-58b7-4670-27da-a61685cddbc8 .u-text *{color:rgba(255,255,255,.82)} 745.w-variant-56d9bf4b-58b7-4670-27da-a61685cddbc8 .eyebrow,.w-variant-56d9bf4b-58b7-4670-27da-a61685cddbc8 .eyebrow *{color:#c3c7fc} 746.w-variant-56d9bf4b-58b7-4670-27da-a61685cddbc8 .cs-asa-hero{background:transparent;padding:0;border-radius:0} 747.w-variant-56d9bf4b-58b7-4670-27da-a61685cddbc8 .bg-grad{display:none} 748html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_anchor:first-child{border-left:0} 749html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_anchor:hover{background:rgba(255,255,255,.05)} 750html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_anchor_icon img{width:18px;height:18px;display:block} 751html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_cmp_icon{mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat} 752html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_cmp_icon.is-tick{mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat} 753html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_cmp_row:first-child{border-top:0} 754html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_tab.w--current{background:#fff;border-color:#e7e7f2 #e7e7f2 transparent} 755html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_tab.w--current .asa_tab_eyebrow{color:#f36a4d} 756html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_connector::before,html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_connector::after{content:"";position:absolute;top:-3px;width:8px;height:8px;border-radius:50%;background:var(--colors--cs-purblue)} 757html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_connector::before{left:0} 758html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_connector::after{right:0} 759html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_dark .u-heading,html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_dark .u-heading *{color:#fff} 760html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_dark .u-text,html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_dark .u-text *{color:rgba(255,255,255,.78)} 761html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_head .u-text{margin-left:auto;margin-right:auto} 762html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_head .u-heading{margin-left:auto;margin-right:auto} 763html[data-wf-page="6a992fe4586a2d690ffacbc0"] [data-cs-section]{scroll-margin-top:7rem} 764html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_a_avatar svg,html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_a_send svg,html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_agent_nav svg,html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_agent_app svg,html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_toolcall_label svg{width:15px;height:15px;
764display:block;flex:0 0 auto} 765html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_pane{display:none} 766html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_pane.w--tab-active{display:block} 767/* Two-routes reveal: hidden once JS runs, animated when in view, replayed whenever a pane becomes active */ 768@keyframes csAsaUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}} 769@keyframes csAsaPop{0%{opacity:0;transform:scale(.72)}62%{opacity:1;transform:scale(1.04)}100%{opacity:1;transform:scale(1)}} 770[data-cs-section="asa-routes"].asa-js .asa_pdp>*,[data-cs-section="asa-routes"].asa-js .asa_a_body>*,[data-cs-section="asa-routes"].asa-js .asa_agent_main>:not(:first-child){opacity:0} 771[data-cs-section="asa-routes"].is-inview .asa_pane.w--tab-active .asa_pdp>*,[data-cs-section="asa-routes"].is-inview .asa_pane.w--tab-active .asa_a_body>*,[data-cs-section="asa-routes"].is-inview .asa_pane.w--tab-active .asa_agent_main>:not(:first-child){animation:csAsaUp .5s cubic-bezier(.22,1,.36,1) both} 772[data-cs-section="asa-routes"].is-inview .asa_pane.w--tab-active .asa_prod,[data-cs-section="asa-routes"].is-inview .asa_pane.w--tab-active .asa_result{animation-name:csAsaPop;animation-duration:.52s} 773[data-cs-section="asa-routes"] .asa_pdp>
773:nth-child(1){animation-delay:.05s} 774[data-cs-section="asa-routes"] .asa_pdp>:nth-child(2){animation-delay:.18s} 775[data-cs-section="asa-routes"] .asa_a_body>:nth-child(1){animation-delay:.3s} 776[data-cs-section="asa-routes"] .asa_a_body>:nth-child(2){animation-delay:.45s} 777[data-cs-section="asa-routes"] .asa_a_body>:nth-child(3){animation-delay:.6s} 778[data-cs-section="asa-routes"] .asa_a_body>:nth-child(4){animation-delay:.75s} 779[data-cs-section="asa-routes"] .asa_a_body>:nth-child(5){animation-delay:.9s} 780[data-cs-section="asa-routes"] .asa_agent_main>:nth-child(2){animation-delay:.05s} 781[data-cs-section="asa-routes"] .asa_agent_main>:nth-child(3){animation-delay:.25s} 782[data-cs-section="asa-routes"] .asa_agent_main>:nth-child(4){animation-delay:.45s} 783[data-cs-section="asa-routes"] .asa_agent_main>:nth-child(5){animation-delay:.65s} 784@media(prefers-reduced-motion:reduce){[data-cs-section="asa-routes"].asa-js .asa_pdp>*,[data-cs-section="asa-routes"].asa-js .asa_a_body>*,[data-cs-section="asa-routes"].asa-js .asa_agent_main>:not(:first-child){opacity:1;animation:none!important}} 785@media(max-width:991px){html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_anchors_grid{grid-template-columns:repeat(2,minmax(0,1fr))}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_anchor:nth-child(3){border-left:0}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_infra{grid-template-columns:minmax(0,1fr);row-gap:1rem}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_connector{display:none}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .cs-asa-hero{margin-top:1rem}} 786@media(max-width:767px){html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_compare,html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_routes,html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_pdp{grid-template-columns:minmax(0,1fr)}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_agent{grid-template-columns:minmax(0,1fr)}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_agent_side{display:flex;flex-wrap:wrap;gap:.875rem;align-items:center}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_agent_tool{margin-top:0}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_pane{padding:1rem}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_assistant{margin:0 1rem 1.25rem;max-width:none}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_wedge{font-size:1.2rem}} 787@media(max-width:479px){html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_anchors_grid{grid-template-columns:minmax(0,1fr)}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_anchor{border-left:0;border-top:1px solid rgba(255,255,255,.08)}html[data-wf-page="6a992fe4586a2d690ffacbc0"] .asa_anchor:first-child{border-top:0}} 788</style></div></div><div class="w-embed w-iframe"><!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 788-789
788 789<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
789GTM-TPR3D35
vendor: 83 bytes, lines 789-790
789" 790height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
791<!-- End Google Tag Manager (noscript) --></div><nav data-menu-wrap="" data-menu-open="false" class="mega-nav"><div role="region" aria-label="Announcement" class="cs-announcement"><div class="u-container"><div class="cs-announcement_row"><div class="cs-announcement_copy"><div data-number="-1" data-wf--typography-paragraph--variant="text-main" class="u-text u-rich-text w-richtext u-mb-0 ">ChannelSight launches the world's first multi-retail AI Shopping Assistant</div></div><div class="cs-announcement_action"><a data-wf--button-main--variant="secondary" href="/blog/channelsight-launches-worlds-first-multi-retailer-ai-shopping-assistant-for-brands" class="button-main w-variant-12703881-1b33-cb8a-0510-6792e2c52b4f w-inline-block"><div>Know More</div></a></div><button type="button" aria-label="Dismiss announcement" class="cs-announcement_close"></button></div></div></div><div class="mega-nav__bar"><div class="mega-nav__container"><div class="mega-nav__bar-start"><a data-menu-logo="" href="/" class="mega-nav__bar-logo w-inline-block"><img aria-label="ChannelSight Homepage" loading="lazy" alt="ChannelSIght Logo" src="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/69ea7c296b048233da3f301c_logo-CS-ai-star.avif" class="nav-logo"/></a><div data-nav-list="" data-mobile-nav="" class="mega-nav__bar-inner"><ul class="mega-nav__bar-list"><li data-nav-list-item=""><button data-dropdown-toggle="products" aria-expanded="false" aria-haspopup="true" class="mega-nav__bar-link is--dropdown"><span class="mega-nav__bar-link-label">Products</span><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 20 20" fill="none" class="mega-nav__bar-link-icon is--dropdown"><path d="M6.6665 8.3335L9.99984 11.6668L13.3332 8.3335" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></li><li data-nav-list-item=""><button data-dropdown-toggle="industries" aria-expanded="false" aria-haspopup="true" class="mega-nav__bar-link is--dropdown"><span class="mega-nav__bar-link-label">Industries</span><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 20 20" fill="none" class="mega-nav__bar-link-icon is--dropdown"><path d="M6.6665 8.3335L9.99984 11.6668L13.3332 8.3335" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></li><div data-nav-list-item=""><button data-dropdown-toggle="partners" aria-expanded="false" aria-haspopup="true" class="mega-nav__bar-link is--dropdown"><span class="mega-nav__bar-link-label">Partners</span><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 20 20" fill="none" class="mega-nav__bar-link-icon is--dropdown"><path d="M6.6665 8.3335L9.99984 11.6668L13.3332 8.3335" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></div><li data-nav-list-item=""><button data-dropdown-toggle="resources" aria-expanded="false" aria-haspopup="true" class="mega-nav__bar-link is--dropdown"><span class="mega-nav__bar-link-label">Resources</span><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 20 20" fill="none" class="mega-nav__bar-link-icon is--dropdown"><path d="M6.6665 8.3335L9.99984 11.6668L13.3332 8.3335" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></li><li data-nav-list-item=""><button data-dropdown-toggle="company" aria-expanded="false" aria-haspopup="true" class="mega-nav__bar-link is--dropdown"><span class="mega-nav__bar-link-label">Company</span><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 20 20" fill="none" class="mega-nav__bar-link-icon is--dropdown"><path d="M6.6665 8.3335L9.99984 11.6668L13.3332 8.3335" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></li></ul><ul data-nav-list-item="" class="mega-nav__bar-list is--actions"><li class="mega-nav__bar-action"><a href="https://portal.channelsight.com/" class="cs-button-secondary-gray-19 w-inline-block">Log in</a></li><li class="mega-nav__bar-action"><a href="/book-a-demo" class="view-more button gradient-button is-nav w-inline-block">Book a Demo</a></li></ul></div><div class="mega-nav__bar-end"><button data-burger-toggle="" aria-label="toggle menu" aria-expanded="false" class="mega-nav__burger"><span data-burger-line="top" class="mega-nav__burger-line"></span><span data-burger-line="mid" class="mega-nav__burger-line"></span><span data-burger-line="bot" class="mega-nav__burger-line"></span></button></div><div data-mobile-back="" class="mega-nav__back"><button aria-label="back to menu" class="mega-nav__bar-link is--back">
791<svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 20 20" fill="none" class="mega-nav__bar-link-icon"><path d="M11.6665 6.6665L8.33317 9.99984L11.6665 13.3332" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="mega-nav__bar-link-label">Back</span></button></div></div></div></div><div data-dropdown-wrapper="" class="mega-nav__dropdown-wrapper"><div data-dropdown-container="" class="mega-nav__dropdown-container"><div data-dropdown-bg="" class="mega-nav__dropdown-bg"></div><div data-panel-state="" data-nav-content="products" role="region" aria-label="products menu" class="mega-nav__dropdown-panel"><div class="mega-nav__dropdown-inner"><div data-menu-fade="" class="mega-nav__panel-col"><span data-menu-fade="" class="mega-nav__panel-label">Where to Buy</span><ul role="list" class="mega-nav__panel-list"><li data-menu-fade=""><a href="/our-solutions/where-to-buy" class="mega-nav__panel-link">Where to Buy</a></li><li data-menu-fade=""><a href="/our-solutions/shoppable-media" class="mega-nav__panel-link">Shoppable Media</a></li><li data-menu-fade=""><a href="/our-solutions/add-to-cart" class="mega-nav__panel-link">Add to Cart</a></li><li data-menu-fade=""><a href="/our-solutions/offline-locator" class="mega-nav__panel-link">Offline Locator</a></li></ul></div><div data-menu-fade="" class="mega-nav__panel-col"><span data-menu-fade="" class="mega-nav__panel-label">AI <!-- -->&<!-- --> Agentic Commerce</span><ul role="list" class="mega-nav__panel-list"><li data-menu-fade=""><a href="/our-solutions/ai-shopping-assistant" class="mega-nav__panel-link">AI Shopping Assistant</a></li><li data-menu-fade=""><a href="/ai#radar-signals" class="mega-nav__panel-link">Radar <!-- -->&<!-- --> Signals</a></li><li data-menu-fade=""><a href="/ai#retail-360" class="mega-nav__panel-link">Retail 360</a></li><li data-menu-fade=""><a href="/ai#agentready" class="mega-nav__panel-link">AgentReady</a></li><li data-menu-fade=""><a href="/ai#mcp-server" class="mega-nav__panel-link">MCP Server</a></li><li data-menu-fade=""></li></ul></div><div data-menu-fade="" class="mega-nav__panel-col"><span data-menu-fade="" class="mega-nav__panel-label">Digital Shelf</span><ul role="list" class="mega-nav__panel-list"><li data-menu-fade=""><a href="/our-solutions/digital-shelf" class="mega-nav__panel-link">Digital Shelf</a></li><li data-menu-fade=""><a href="/our-solutions/digital-shelf#pricing-inventory" class="mega-nav__panel-link">Price <!-- -->&<!-- --> Inventory</a></li><li data-menu-fade=""><a href="/our-solutions/digital-shelf#ratings-reviews" class="mega-nav__panel-link">Ratings <!-- -->&<!-- --> Reviews</a></li><li data-menu-fade=""><a href="/our-solutions/digital-shelf#content-compliance" class="mega-nav__panel-link">Content Compliance</a></li><li data-menu-fade=""><a href="/our-solutions/digital-shelf#search-placement" class="mega-nav__panel-link">Search Placement</a></li></ul></div></div></div><div data-panel-state="" data-nav-content="resources" role="region" aria-label="resources menu" class="mega-nav__dropdown-panel"><div class="mega-nav__dropdown-inner"><div data-menu-fade="" class="mega-nav__panel-col"><span data-menu-fade="" class="mega-nav__panel-label">Learn</span><ul role="list" class="mega-nav__panel-list"><li data-menu-fade=""><a href="/blog" class="mega-nav__panel-link">Blog</a></li><li data-menu-fade=""><a href="/case-studies" class="mega-nav__panel-link">Case Studies</a></li><li data-menu-fade=""><a href="/faq" class="mega-nav__panel-link">eCommerce FAQs</a></li></ul></div><div data-menu-fade="" class="mega-nav__panel-col"><span data-menu-fade="" class="mega-nav__panel-label">Insights <!-- -->&<!-- --> Data</span><ul role="list" class="mega-nav__panel-list"><li data-menu-fade=""><a href="/resources" class="mega-nav__panel-link">Reports, eBooks & Webinars</a></li><li data-menu-fade=""></li></ul></div><div data-menu-fade="" class="mega-nav__panel-col is--colored has--card"><div class="w-dyn-list"><div role="list" class="w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/blog/market-guide" class="mega-nav__card w-inline-block"><div class="mega-nav__card-visual"><img loading="lazy" src="https://cdn.prod.website-files.com/64248e7fd5f30d79c9e57d64/6abe50cd82b5ccc1859e16f8_Blog%20Thumbnail-selection.avif" alt="" sizes="100vw" srcset="https://cdn.prod.website-files.com/64248e7fd5f30d79c9e57d64/6abe50cd82b5ccc1859e16f8_Blog%20Thumbnail-selection-
791p-500.avif 500w, https://cdn.prod.website-files.com/64248e7fd5f30d79c9e57d64/6abe50cd82b5ccc1859e16f8_Blog%20Thumbnail-selection-p-800.avif 800w, https://cdn.prod.website-files.com/64248e7fd5f30d79c9e57d64/6abe50cd82b5ccc1859e16f8_Blog%20Thumbnail-selection-p-1080.avif 1080w, https://cdn.prod.website-files.com/64248e7fd5f30d79c9e57d64/6abe50cd82b5ccc1859e16f8_Blog%20Thumbnail-selection-p-1600.avif 1600w, https://cdn.prod.website-files.com/64248e7fd5f30d79c9e57d64/6abe50cd82b5ccc1859e16f8_Blog%20Thumbnail-selection-p-2000.avif 2000w, https://cdn.prod.website-files.com/64248e7fd5f30d79c9e57d64/6abe50cd82b5ccc1859e16f8_Blog%20Thumbnail-selection.avif 2400w" class="mega-nav__card-img"/></div><div class="mega-nav__card-content"><div class="mega-nav__card-text"><span class="mega-nav__panel-link-desc">Where To Buy</span><span class="mega-nav__panel-link-text">Where to Buy and Shoppable Media Software in 2026: A Buyer's Overview of the Market</span></div><div class="mega-nav__card-cta"><span class="mega-nav__card-cta-label">Read article</span><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 20 20" fill="none" class="mega-nav__card-cta-icon"><path d="M8.3335 13.3335L11.6668 10.0002L8.3335 6.66683" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div></a></div></div></div></div></div></div><div data-panel-state="" data-nav-content="company" role="region" aria-label="company menu" class="mega-nav__dropdown-panel"><div class="mega-nav__dropdown-inner"><div data-menu-fade="" class="mega-nav__panel-col"><span data-menu-fade="" class="mega-nav__panel-label">Company</span><ul role="list" class="mega-nav__panel-list"><li data-menu-fade=""><a href="/about-us" class="mega-nav__panel-link">About Us</a></li><li data-menu-fade=""><a href="/why-channelsight" class="mega-nav__panel-link">Why ChannelSight</a></li><li data-menu-fade=""><a href="/careers" class="mega-nav__panel-link">Careers</a></li><li data-menu-fade=""><a href="/contact" aria-current="page" class="mega-nav__panel-link w--current">Contact</a></li><li data-menu-fade=""><a href="https://portal.channelsight.com/" class="mega-nav__panel-link">Log In</a></li></ul></div></div></div><div aria-label="industries menu" data-nav-content="industries" role="region" class="mega-nav__dropdown-panel"><div class="mega-nav__dropdown-inner"><div data-menu-fade="" class="mega-nav__panel-col"><span data-menu-fade="" class="mega-nav__panel-label">Industries</span><ul role="list" class="mega-nav__panel-list"><li data-menu-fade=""><a href="/industries/fmcg-cpg" class="mega-nav__panel-link">FMCG & CPG</a></li><li data-menu-fade=""><a href="/industries/beauty-personal-care" class="mega-nav__panel-link">Beauty & Personal Care</a></li><li data-menu-fade=""><a href="/industries/electronics-appliances" class="mega-nav__panel-link">Electronics & Appliances</a></li><li data-menu-fade=""><a href="/industries/food-beverage" class="mega-nav__panel-link">Food & Beverage</a></li><li data-menu-fade=""><a href="/industries/health-pharma" class="mega-nav__panel-link">Health & Pharma</a></li><li data-menu-fade=""><a href="/industries/home-diy" class="mega-nav__panel-link">Home & DIY</a></li><li data-menu-fade=""><a href="/industries/toys-family" class="mega-nav__panel-link">Toys & Family</a></li><li data-menu-fade=""><a href="/industries/tools-industrial" class="mega-nav__panel-link">Tools & Industrial</a></li></ul></div></div></div><div data-panel-state="" aria-label="partners menu" role="region" data-nav-content="partners" class="mega-nav__dropdown-panel"><div class="mega-nav__dropdown-inner"><div data-menu-fade="" class="mega-nav__panel-col"><span data-menu-fade="" class="mega-nav__panel-label">Partners</span><ul role="list" class="mega-nav__panel-list"><li data-menu-fade=""><a href="/partners" class="mega-nav__panel-link">Become a Partner</a></li><li data-menu-fade=""><a href="/retailer-network" class="mega-nav__panel-link">Retailer Network</a></li><li data-menu-fade=""><a href="/retailer-request" class="mega-nav__panel-link">Request a Retailer</a></li></ul></div></div></div></div></div><div data-menu-backdrop="" class="mega-nav__backdrop"></div></nav><div class="cs-section_banner1"><div class="cs-padding-global"><div class="cs-banner-container-large"><aside class="cs-banner1_component"><div class="cs-banner-badge"><div class="text-block-68">NEW REPORT</div></div><div class="cs-banner1_text">Direct-to-Consumer eCommerce in 2024 <a href="https://www.channelsight.com/reports/direct-to-consumer-ecommerce-in-2024" class="link">Read More</a></div></aside></div></div></div></div><div id="Retailer-Form" class="form-1 _2 _3 contact"><main id="main" class="cs---container-default-14 small contact w-container"><div class="w-layout-grid cs---grid-contact-v1 _2"><div data-w-id="98c92bb0-0b2f-7249-d99b-0d277af910e2" style="-webkit-transform:translate3d(0, 10%, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 10%, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 10%, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 10%, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0"><div class="div-block-39"><h1 class="cs---heading-h1-size-2">Contact ChannelSight</h1><div class="html-embed w-embed w-script">
791<script charset="utf-8" type="text/javascript" src="//js.hsforms.net/forms/embed/v2.js"></script>
vendor: 1 bytes, line 791
791
792<script> 793 hbspt.forms.create({ 794 region: "na1", 795 portalId: "7066574", 796 formId: "705b2944-92c3-400f-893c-15173ad04a05" 797 }); 798</script>
798</div></div></div></div></main></div><div class="tabs-3 white _1"><div class="cs-container-regular"><div class="cs-space-medium"><div data-w-id="bdada83c-207c-5045-e33f-ad5479ffcb6d" style="-webkit-transform:translate3d(0, 10%, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 10%, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 10%, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 10%, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0" data-current="Dublin" data-easing="ease" data-duration-in="300" data-duration-out="100" class="brix---tabs-wrapper-tabs-left w-tabs"><div class="brix---tabs-menu-vertical w-tab-menu"><a data-w-tab="Dublin" class="brix---tab-left-icon w-inline-block w-tab-link w--current"><div class="brix---mg-left-16px"><div class="text-block-22"><strong class="cs-tab">Dublin, Ireland</strong></div></div></a><a data-w-tab="London" class="brix---tab-left-icon w-inline-block w-tab-link"><div class="brix---mg-left-16px"><div class="cs-tab"><strong class="cs-tab">London, United Kingdom</strong><br/></div></div></a><a data-w-tab="Amsterdam" class="brix---tab-left-icon w-inline-block w-tab-link"><div class="brix---mg-left-16px"><div><strong class="cs-tab">Amsterdam, Netherlands</strong></div></div></a><a data-w-tab="New York" class="brix---tab-left-icon w-inline-block w-tab-link"><div class="brix---mg-left-16px"><div class="text-block-24"><strong class="cs-tab">New York, USA<br/></strong></div></div></a><a data-w-tab="Brasov" class="brix---tab-left-icon w-inline-block w-tab-link"><div class="text-block-58"><strong class="cs-tab-2">Brașov, Romania<br/></strong></div></a></div><div class="brix---tabs-content-card w-tab-content"><div data-w-tab="Dublin" class="w-tab-pane w--tab-active"><div><div class="brix---color-neutral-800"><h3 class="cs-tab-t1">Dublin HQ</h3></div><div class="brix---mg-bottom-48px"><div class="brix---color-neutral-801"><div class="uui-space-small"></div><div class="w-layout-grid brix---grid-1-column"><a href="https://goo.gl/maps/ge8Vn5Es9tZPTFqF6" target="_blank" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Location:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">Newcourt House, Strandville Avenue East, Clontarf, <br/>Dublin 3, Ireland, D03 F2K5</div></div></div></a><a href="mailto:[email protected]" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Email:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">[email protected]</div></div></div></a><a href="tel:(01)9022822" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Phone:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">(01) 902 2822</div></div></div></a></div></div></div></div></div><div data-w-tab="London" class="w-tab-pane"><div><div class="brix---color-neutral-800"><h3 class="cs-tab-t1">London</h3></div><div class="brix---mg-bottom-48px"><div class="brix---color-neutral-801"><div class="uui-space-small"></div><div class="w-layout-grid brix---grid-1-column"><a href="https://goo.gl/maps/ge8Vn5Es9tZPTFqF6" target="_blank" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Location:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">The Hoxton Mix, 3rd Floor,86 – 90 Paul Street London,<br/>EC2A 4NE, UK</div></div></div></a><a href="mailto:[email protected]" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Email:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">[email protected]</div></div></div></a><a href="tel:(01)9022822" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Phone:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">(01) 902 2822</div></div></div></a></div></div></div></div></div><div data-w-tab="Amsterdam" class="w-tab-pane"><div><div class="brix---color-neutral-800"><h3 class="cs-tab-t1">Amsterdam</h3></div><div class="brix---mg-bottom-48px"><div class="brix---color-neutral-801"><div class="uui-space-small"></div><div class="w-layout-grid brix---grid-1-column"><a href="https://goo.gl/maps/ge8Vn5Es9tZPTFqF6" target="_blank" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Location:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">World Trade Centre, Strawinskylaan 1351 1077 XX Amsterdam, <br/>The Netherlands</div></div></div></a><a href="mailto:[email protected]" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">
798Email:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">[email protected]</div></div></div></a><a href="tel:(01)9022822" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Phone:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">(01) 902 2822</div></div></div></a></div></div></div></div></div><div data-w-tab="New York" class="w-tab-pane"><div><div class="brix---color-neutral-800"><h3 class="cs-tab-t1">New York</h3></div><div class="brix---mg-bottom-48px"><div class="brix---color-neutral-801"><div class="uui-space-small"></div><div class="w-layout-grid brix---grid-1-column"><a href="https://goo.gl/maps/ge8Vn5Es9tZPTFqF6" target="_blank" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Location:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">56 Ludlow Street, Ground Floor, New York, NY 10002</div></div></div></a><a href="mailto:[email protected]" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Email:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">[email protected]</div></div></div></a><a href="tel:(01)9022822" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Phone:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">(01) 902 2822</div></div></div></a></div></div></div></div></div><div data-w-tab="Brasov" class="w-tab-pane"><div><div class="brix---color-neutral-800"><h3 class="cs-tab-t1"><strong class="cs-tab-2">Brașov</strong></h3></div><div class="brix---mg-bottom-48px"><div class="brix---color-neutral-801"><div class="uui-space-small"></div><div class="w-layout-grid brix---grid-1-column"><a href="https://goo.gl/maps/ge8Vn5Es9tZPTFqF6" target="_blank" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Location:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">Turnului Street no 5, building H1 , office 10, Brasov</div></div></div></a><a href="mailto:[email protected]" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Email:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">[email protected]</div></div></div></a><a href="tel:(01)9022822" class="brix---card-link-icon-wrapper w-inline-block"><div><div class="brix---mg-bottom-8px-6"><div class="brix---text-203">Phone:</div></div><div class="cs---color-accent-12"><div class="brix---text-200-bold-14">(01) 902 2822</div></div></div></a></div></div></div></div></div></div></div></div></div></div><footer class="cs-footer"><div class="u-embed-js w-embed w-script"><!-- Mega Nav - Directional Hover, with WIDTH morph + POSITION-under-toggle added. 799 Replaces your existing initMegaNavDirectionalHover() block. 800 Changes vs original marked with // ++ WIDTH and // ++ POS -->
801<script> 802function initMegaNavDirectionalHover() { 803 const DUR = { 804 bgMorph: 0.4, contentIn: 0.3, contentOut: 0.2, stagger: 0.25, 805 backdropIn: 0.3, backdropOut: 0.2, openScale: 0.35, closeScale: 0.25, 806 }; 807 const HOVER_ENTER = 120; 808 const HOVER_LEAVE = 150; 809 810 const menuWrap = document.querySelector("[data-menu-wrap]"); 811 const navList = document.querySelector("[data-nav-list]"); 812 const dropWrapper = document.querySelector("[data-dropdown-wrapper]"); 813 const dropContainer = document.querySelector("[data-dropdown-container]"); 814 const dropBg = document.querySelector("[data-dropdown-bg]"); 815 const backdrop = document.querySelector("[data-menu-backdrop]"); 816 const toggles = [...document.querySelectorAll("[data-dropdown-toggle]")]; 817 const panels = [...document.querySelectorAll("[data-nav-content]")]; 818 const burger = document.querySelector("[data-burger-toggle]"); 819 const backBtn = document.querySelector("[data-mobile-back]"); 820 const logo = document.querySelector("[data-menu-logo]"); 821 const [lineTop, lineMid, lineBot] = ["top", "mid", "bot"].map( 822 (id) => document.querySelector(`[data-burger-line='${id}']`) 823 ); 824 825 const state = { 826 isOpen: false, activePanel: null, activePanelIndex: -1, 827 isMobile: window.innerWidth <= 991, mobileMenuOpen: false, mobilePanelActive: null, 828 hoverTimer: null, leaveTimer: null, tl: null, mobileTl: null, mobilePanelTl: null, 829 }; 830 831 const getPanel = (name) => document.querySelector(`[data-nav-content="${name}"]`); 832 const getToggle = (name) => document.querySelector(`[data-dropdown-toggle="${name}"]`); 833 const getFade = (el) => el.querySelectorAll("[data-menu-fade]"); 834 const getInner = (el) => el && el.querySelector(".mega-nav__dropdown-inner"); // ++ WIDTH 835 // ++ POS: horizontal offset to slide the dropdown's left edge under its toggle (clamped inside the wrapper) 836 const panelOffset = (name, w) => { 837 const toggle = getToggle(name); 838 if (!toggle) return 0; 839 const raw = toggle.getBoundingClientRect().left - dropWrapper.getBoundingClientRect().left; 840 const maxOffset = Math.max(0, dropWrapper.getBoundingClientRect().width - w); 841 return Math.max(0, Math.min(raw, maxOffset)); 842 }; 843 const getNavItems = () => navList.querySelectorAll("[data-nav-list-item]"); 844 const getIndex = (name) => toggles.indexOf(getToggle(name)); 845 const stagger = (n) => (n <= 1 ? 0 : { amount: DUR.stagger }); 846 847 function clearTimers() { 848 clearTimeout(state.hoverTimer); clearTimeout(state.leaveTimer); 849 state.hoverTimer = state.leaveTimer = null; 850 } 851 function killTl(key) { if (state[key]) { state[key].kill(); state[key] = null; } } 852 function killDropdown() { 853 killTl("tl"); gsap.killTweensOf(dropContainer); gsap.killTweensOf(backdrop); 854 panels.forEach((p) => { gsap.killTweensOf(p); gsap.killTweensOf(getFade(p)); }); 855 } 856 function killMobile() { killTl("mobileTl"); gsap.killTweensOf([navList, lineTop, lineMid, lineBot]); } 857 function killMobilePanel() { 858 killTl("mobilePanelTl"); gsap.killTweensOf(getNavItems()); gsap.killTweensOf([backBtn, logo]); 859 panels.forEach((p) => { gsap.killTweensOf(p); gsap.killTweensOf(getFade(p)); }); 860 } 861 function resetToggles() { toggles.forEach((t) => t.setAttribute("aria-expanded", "false")); } 862 863 function resetDesktop() { 864 panels.forEach((p) => { 865 gsap.set(p, { visibility:"hidden", opacity:0, pointerEvents:"none", x:0, y:0, xPercent:0 }); 866 gsap.set(getFade(p), { autoAlpha:0, x:0, y:0, xPercent:0 }); 867 const inner = getInner(p); if (inner) gsap.set(inner, { clearProps: "width" }); // ++ WIDTH 868 }); 869 gsap.set(dropContainer, { height:0, clearProps:"transform,width" }); // ++ WIDTH (was "transform") 870 gsap.set(backdrop, { autoAlpha:0 }); 871 menuWrap.setAttribute("data-menu-open", "false"); 872 resetToggles(); 873 } 874 875 function setupMobile() { 876 panels.forEach((p) => { 877 gsap.set(p, { autoAlpha: 0, xPercent: 0, visibility: "visible", pointerEvents: "none" }); 878 gsap.set(getFade(p), { xPercent: 20, autoAlpha: 0 }); 879 const inner = getInner(p); if (inner) gsap.set(inner, { clearProps: "width" }); // ++ WIDTH 880 }); 881 gsap.set(getNavItems(), { xPercent: 0, y: 0, autoAlpha: 1 }); 882 gsap.set(navList, { autoAlpha: 0, x: 0 }); 883 gsap.set(backBtn, { autoAlpha: 0 }); 884 gsap.set(logo, { autoAlpha: 1 }); 885 gsap.set(dropContainer, { clearProps: "height,width" }); // ++ WIDTH 886 gsap.set(backdrop, { autoAlpha: 0 }); 887 } 888 889 // ++ WIDTH: now returns BOTH height and natural content width. 890 function measurePanel(name) { 891 const el = getPanel(name); 892 if (!el) return { h: 0, w: 0 }; 893 const inner = getInner(el) || el; 894 const s = el.style, is = inner.style; 895 const pv = s.visibility, po = s.opacity, pp = s.pointerEvents, pw = is.width; 896 s.visibility = "visible"; s.opacity = "0"; s.pointerEvents = "none"; 897 is.width = "max-content"; // let the inner size to its content 898 const h = el.getBoundingClientRect().height; 899 const w = inner.getBoundingClientRect().width; // natural content width 900 is.width = pw; 901 s.visibility = pv; s.opacity = po; s.pointerEvents = pp; 902 return { h, w }; 903 } 904 905 function openDropdown(panelName) { 906 if (state.isOpen && state.activePanel === panelName) return; 907 if (state.isOpen) return switchPanel(state.activePanel, panelName); 908 909 const size = measurePanel(panelName); // ++ WIDTH 910 if (!size.h) return; 911 912 killDropdown(); 913 resetDesktop(); 914 915 const el = getPanel(panelName); 916 const fade = getFade(el); 917 const toggle = getToggle(panelName); 918 const inner = getInner(el); // ++ WIDTH 919 920 state.isOpen = true; 921 state.activePanel = panelName; 922 state.activePanelIndex = getIndex(panelName); 923 menuWrap.setAttribute("data-menu-open", "true"); 924 if (toggle) toggle.setAttribute("aria-expanded", "true"); 925 926 if (inner) gsap.set(inner, { width: size.w }); // ++ WIDTH: pin inner so columns don't squish 927 const offset = panelOffset(panelName, size.w); // ++ POS 928 gsap.set(dropContainer, { height: 0, width: size.w, x: offset }); // ++ WIDTH + POS: open at correct width, under the toggle 929 930 const tl = gsap.timeline(); 931 state.tl = tl; 932 tl.to(backdrop, { autoAlpha: 1, duration: DUR.backdropIn, ease: "power2.out" }, 0); 933 tl.to(dropContainer, { height: size.h, duration: DUR.openScale, ease: "power3.out" }, 0); 934 tl.set(el, { visibility: "visible", opacity: 1, pointerEvents: "auto" }, 0.05); 935 if (fade.length) { 936 tl.fromTo(fade, { autoAlpha: 0, y: 8 }, 937 { autoAlpha: 1, y: 0, duration: DUR.contentIn, stagger: stagger(fade.length), ease: "power3.out" }, 0.1); 938 } 939 } 940 941 function closeDropdown() { 942 if (!state.isOpen) return; 943 const el = getPanel(state.activePanel); 944 const fade = el ? getFade(el) : []; 945 killDropdown(); 946 const tl = gsap.timeline({ 947 onComplete() { 948 state.isOpen = false; state.activePanel = null; state.activePanelIndex = -1; 949 state.tl = null; resetDesktop(); 950 }, 951 }); 952 state.tl = tl; 953 if (fade.length) tl.to(fade, { autoAlpha: 0, y: -4, duration: DUR.contentOut * 0.7, ease: "power2.in" }, 0); 954 tl.to(dropContainer, { height: 0, duration: DUR.closeScale, ease: "power2.in" }, 0.05); 955 tl.to(backdrop, { autoAlpha: 0, duration: DUR.backdropOut, ease: "power2.out" }, 0); 956 if (el) tl.set(el, { visibility: "hidden", opacity: 0, pointerEvents: "none" }); 957 } 958 959 function switchPanel(fromName, toName) { 960 const dir = getIndex(toName) > getIndex(fromName) ? 1 : -1; 961 const fromEl = getPanel(fromName), toEl = getPanel(toName); 962 if (!fromEl || !toEl) return; 963 964 const fromFade = getFade(fromEl), toFade = getFade(toEl); 965 const toSize = measurePanel(toName); // ++ WIDTH 966 if (!toSize.h) return; 967 968 killDropdown(); 969
970 panels.forEach((p) => { 971 gsap.set(p, { visibility: "hidden", opacity: 0, pointerEvents: "none", xPercent: 0 }); 972 gsap.set(getFade(p), { autoAlpha: 0, x: 0, y: 0 }); 973 }); 974 gsap.set(fromEl, { visibility: "visible", opacity: 1, pointerEvents: "auto", x: 0 }); 975 if (fromFade.length) gsap.set(fromFade, { autoAlpha: 1, x: 0, y: 0 }); 976 gsap.set(backdrop, { autoAlpha: 1 }); 977 978 const toInner = getInner(toEl); // ++ WIDTH 979 if (toInner) gsap.set(toInner, { width: toSize.w }); 980 const toOffset = panelOffset(toName, toSize.w); // ++ POS 981 982 const toToggle = getToggle(toName); 983 state.activePanel = toName; 984 state.activePanelIndex = getIndex(toName); 985 resetToggles(); 986 if (toToggle) toToggle.setAttribute("aria-expanded", "true"); 987 988 const xOut = dir * -30, xIn = dir * 30; 989 const tl = gsap.timeline(); 990 state.tl = tl; 991 992 if (fromFade.length) tl.to(fromFade, { autoAlpha: 0, x: xOut, duration: DUR.contentOut, ease: "power2.in" }, 0); 993 tl.set(fromEl, { visibility: "hidden", opacity: 0, pointerEvents: "none", xPercent: 0 }, DUR.contentOut); 994 if (fromFade.length) tl.set(fromFade, { x: 0 }, DUR.contentOut); 995 tl.to(dropContainer, { height: toSize.h, duration: DUR.bgMorph, ease: "power3.out" }, 0.05); 996 tl.to(dropContainer, { width: toSize.w, duration: DUR.bgMorph, ease: "power3.out" }, 0.05); // ++ WIDTH: morph width with the same easing 997 tl.to(dropContainer, { x: toOffset, duration: DUR.bgMorph, ease: "power3.out" }, 0.05); // ++ POS: slide under the new toggle 998 tl.set(toEl, { visibility: "visible", opacity: 1, pointerEvents: "auto", xPercent: 0 }, DUR.contentOut * 0.5); 999 if (toFade.length) { 1000 tl.fromTo(toFade, { autoAlpha: 0, x: xIn }, 1001 { autoAlpha: 1, x: 0, duration: DUR.contentIn, stagger: stagger(toFade.length), ease: "power3.out" }, DUR.contentOut * 0.6); 1002 } 1003 } 1004 1005 function handleToggleEnter(e) { 1006 if (state.isMobile) return; 1007 const name = e.currentTarget.getAttribute("data-dropdown-toggle"); 1008 if (!name) return; 1009 clearTimeout(state.leaveTimer); state.leaveTimer = null; 1010 clearTimeout(state.hoverTimer); 1011 state.hoverTimer = setTimeout(() => openDropdown(name), state.isOpen ? 0 : HOVER_ENTER); 1012 } 1013 function handleToggleLeave() { 1014 if (state.isMobile) return; 1015 clearTimeout(state.hoverTimer); state.hoverTimer = null; 1016 state.leaveTimer = setTimeout(closeDropdown, HOVER_LEAVE); 1017 } 1018 function handleWrapperEnter() { if (state.isMobile) return; clearTimeout(state.leaveTimer); state.leaveTimer = null; } 1019 function handleWrapperLeave() { if (state.isMobile) return; state.leaveTimer = setTimeout(closeDropdown, HOVER_LEAVE); } 1020 1021 function handleEscape(e) { 1022 if (e.key !== "Escape") return; 1023 if (state.isMobile) { state.mobilePanelActive ? closeMobilePanel() : state.mobileMenuOpen && closeMobileMenu(); return; } 1024 if (state.isOpen) { const t = getToggle(state.activePanel); closeDropdown(); if (t) t.focus(); } 1025 } 1026 function handleDocClick(e) { 1027 if (state.isMobile || !state.isOpen) return; 1028 if (!e.target.closest("[data-menu-wrap]")) closeDropdown(); 1029 } 1030 function focusFirstLink(panelName) { 1031 setTimeout(() => { 1032 const el = getPanel(panelName); if (!el) return; 1033 const link = el.querySelector("a"); if (!link) return; 1034 gsap.set(link, { visibility: "visible" }); link.focus(); 1035 }, 80); 1036 } 1037 function handleKeydownOnToggle(e) { 1038 if (state.isMobile) return; 1039 const name = e.currentTarget.getAttribute("data-dropdown-toggle"); 1040 if (e.key === "Enter" || e.key === " ") { 1041 e.preventDefault(); 1042 if (state.isOpen && state.activePanel === name) closeDropdown(); 1043 else { openDropdown(name); focusFirstLink(name); } return; 1044 } 1045 if (e.key === "ArrowDown") { e.preventDefault(); if (!state.isOpen || state.activePanel !== name) openDropdown(name); focusFirstLink(name); } 1046 if (e.key === "Tab" && !e.shiftKey && state.isOpen && state.activePanel === name) { 1047 e.preventDefault(); const link = getPanel(name)?.querySelector("a"); if (link) link.focus(); 1048 } 1049 } 1050 function handleKeydownInPanel(e) { 1051 if (state.isMobile || !state.isOpen) return; 1052 const el = getPanel(state.activePanel); if (!el) return; 1053 const links = [...el.querySelectorAll("a")]; 1054 const idx = links.indexOf(document.activeElement); 1055 if (e.key === "ArrowDown") { e.preventDefault(); links[(idx + 1) % links.length].focus(); } 1056 if (e.key === "ArrowUp") { e.preventDefault(); if (idx <= 0) { const t = getToggle(state.activePanel); if (t) t.focus(); } else links[idx - 1].focus(); } 1057 if (e.key === "Tab" && !e.shiftKey && idx === links.length - 1) { 1058 e.preventDefault(); const curIdx = toggles.indexOf(getToggle(state.activePanel)); 1059 const next = curIdx < toggles.length - 1 ? toggles[curIdx + 1] : null; closeDropdown(); if (next) next.focus(); 1060 } 1061 if (e.key === "Tab" && e.shiftKey && idx === 0) { e.preventDefault(); const t = getToggle(state.activePanel); if (t) t.focus(); } 1062 } 1063 1064 function animateBurger(toX) { 1065 const tl = gsap.timeline({ defaults: { ease: "power2.inOut" } }); 1066 if (toX) { 1067 tl.to(lineTop, { y: "0.3125em", duration: 0.15 }, 0); tl.to(lineBot, { y: "-0.3125em", duration: 0.15 }, 0); 1068 tl.to(lineMid, { autoAlpha: 0, duration: 0.1 }, 0.1); 1069 tl.to(lineTop, { rotation: 45, duration: 0.2 }, 0.15); tl.to(lineBot, { rotation: -45, duration: 0.2 }, 0.15); 1070 } else { 1071 tl.to(lineTop, { rotation: 0, duration: 0.2 }, 0); tl.to(lineBot, { rotation: 0, duration: 0.2 }, 0); 1072 tl.to(lineTop, { y: 0, duration: 0.15 }, 0.15); tl.to(lineBot, { y: 0, duration: 0.15 }, 0.15); 1073 tl.to(lineMid, { autoAlpha: 1, duration: 0.1 }, 0.15); 1074 } 1075 return tl; 1076 } 1077 function openMobileMenu() { 1078 killMobile(); state.mobileMenuOpen = true; menuWrap.setAttribute("data-menu-open", "true"); 1079 burger.setAttribute("aria-expanded", "true"); document.body.style.overflow = "hidden"; 1080 const items = getNavItems(); const tl = gsap.timeline(); state.mobileTl = tl; 1081 tl.add(animateBurger(true), 0); tl.to(navList, { autoAlpha: 1, duration: 0.3, ease: "power2.out" }, 0); 1082 if (items.length) tl.fromTo(items, { autoAlpha: 0, y: 12 }, { autoAlpha: 1, y: 0, duration: 0.3, stagger: 0.04, ease: "power3.out" }, 0.15); 1083 } 1084 function closeMobileMenu() { 1085 const hadPanel = state.mobilePanelActive; const panelEl = hadPanel ? getPanel(hadPanel) : null; 1086 killMobile(); killMobilePanel(); 1087 menuWrap.setAttribute("data-menu-open", "false"); state.mobileMenuOpen = false; state.mobilePanelActive = null; 1088 burger.setAttribute("aria-expanded", "false"); 1089 const tl = gsap.timeline({ onComplete() { document.body.style.overflow = ""; state.mobileTl = null; setupMobile(); } }); 1090 state.mobileTl = tl; tl.add(animateBurger(false), 0); 1091 if (hadPanel && panelEl) { tl.to(panelEl, { autoAlpha: 0, duration: 0.3, ease: "power2.inOut" }, 0.05); tl.to(backBtn, { autoAlpha: 0, duration: 0.2, ease: "power2.in" }, 0.05); } 1092 tl.to(navList, { autoAlpha: 0, duration: 0.3, ease: "power2.inOut" }, 0.05); 1093 } 1094 function openMobilePanel(panelName) { 1095 const el = getPanel(panelName); if (!el) return; killMobilePanel(); state.mobilePanelActive = panelName; 1096 const navItems = getNavItems(); const panelFade = getFade(el); const tl = gsap.timeline(); state.mobilePanelTl = tl; 1097 if (navItems.length) tl.to(navItems, { xPercent: -10, autoAlpha: 0, duration: 0.35, stagger: 0.03, ease: "power2.in" }, 0); 1098 tl.to(logo, { autoAlpha: 0, duration: 0.2, ease: "power2.in" }, 0); tl.to(backBtn, { autoAlpha: 1, duration: 0.25, ease: "power2.inOut" }, 0.15); 1099 tl.set(el, { autoAlpha: 1, xPercent: 0, pointerEvents: "auto" }, 0.2); 1100 if (panelFade.length) tl.fromTo(panelFade, { xPercent: 8, autoAlpha: 0 }, { xPercent: 0, autoAlpha: 1, duration: 0.3, stagger: stagger(panelFade.length), ease: "power3.out" }, 0.25); 1101 } 1102 function closeMobilePanel() { 1103 if (!state.mobilePanelActive) return; const el = getPanel(state.mobilePanelActive); if (!el) return; killMobilePanel(); 1104 const navItems = getNavItems(); const panelFade = getFade(el); 1105 const tl = gsap.timeline({ onComplete() { state.mobilePanelActive = null; state.mobilePanelTl = null; } }); state.mobilePanelTl = tl; 1106 if (panelFade.length) tl.to(el, { xPercent: 20, autoAlpha: 0, duration: 0.3, stagger: 0.02, ease: "power2.in" }, 0); 1107 tl.set(el, { autoAlpha: 0, pointerEvents: "none" }, 0.25); 1108 tl.to(backBtn, { autoAlpha: 0, duration: 0.2, ease: "power2.in" }, 0); tl.to(logo, { autoAlpha: 1, duration: 0.25, ease: "power2.out" }, 0.15); 1109 if (navItems.length) tl.fromTo(navItems, { xPercent: -20, autoAlpha: 0 }, { xPercent: 0, autoAlpha: 1, duration: 0.35, stagger: 0.03, ease: "power3.out" }, 0.25); 1110 } 1111 function handleToggleClick(e) { 1112 if (!state.isMobile || !state.mobileMenuOpen) return; 1113 const name = e.currentTarget.getAttribute("data-dropdown-toggle"); 1114 if (name) { e.preventDefault(); openMobilePanel(name); } 1115 } 1116 1117 let resizeTimer = null, lastWidth = window.innerWidth; 1118 function handleResize() { 1119 const w = window.innerWidth; if (w === lastWidth) return; lastWidth = w; 1120 clearTimeout(resizeTimer); 1121 resizeTimer = setTimeout(() => { 1122 const was = state.isMobile; state.isMobile = window.innerWidth <= 991; 1123 if (was && !state.isMobile) { 1124 killMobile(); killMobilePanel(); 1125 gsap.set(navList, { clearProps: "all" }); gsap.set(getNavItems(), { clearProps: "all" }); 1126 gsap.set(backBtn, { autoAlpha: 0 }); gsap.set(logo, { clearProps: "all" }); 1127 gsap.set([lineTop, lineMid, lineBot], { rotation: 0, y: 0, autoAlpha: 1 });
1128 panels.forEach((p) => { gsap.set(p, { clearProps: "all" }); gsap.set(getFade(p), { clearProps: "all" }); }); 1129 burger.setAttribute("aria-expanded", "false"); state.mobileMenuOpen = false; state.mobilePanelActive = null; 1130 document.body.style.overflow = ""; resetDesktop(); 1131 } 1132 if (!was && state.isMobile) { 1133 killDropdown(); state.isOpen = false; state.activePanel = null; state.activePanelIndex = -1; 1134 clearTimers(); menuWrap.setAttribute("data-menu-open", "false"); resetToggles(); setupMobile(); 1135 } 1136 }, 150); 1137 } 1138 1139 toggles.forEach((btn) => { 1140 btn.addEventListener("mouseenter", handleToggleEnter); 1141 btn.addEventListener("mouseleave", handleToggleLeave); 1142 btn.addEventListener("keydown", handleKeydownOnToggle); 1143 btn.addEventListener("click", handleToggleClick); 1144 }); 1145 dropWrapper.addEventListener("mouseenter", handleWrapperEnter); 1146 dropWrapper.addEventListener("mouseleave", handleWrapperLeave); 1147 panels.forEach((p) => p.addEventListener("keydown", handleKeydownInPanel)); 1148 backdrop.addEventListener("click", closeDropdown); 1149 document.addEventListener("keydown", handleEscape); 1150 document.addEventListener("click", handleDocClick); 1151 burger.addEventListener("click", () => state.mobileMenuOpen ? closeMobileMenu() : openMobileMenu()); 1152 backBtn.addEventListener("click", closeMobilePanel); 1153 window.addEventListener("resize", handleResize); 1154 1155 state.isMobile ? setupMobile() : resetDesktop(); 1156} 1157 1158document.addEventListener('DOMContentLoaded', function () { initMegaNavDirectionalHover(); }); 1159</script>
1159 1160</div><div class="hide"><div class="u-p-0"></div><div class="u-p-1"></div><div class="u-p-2"></div><div class="u-p-3"></div><div class="u-p-4"></div><div class="u-p-5"></div><div class="u-p-6"></div></div><div class="cs-footer2_wrap"><div data-wf--section-spacer--variant="small" class="section-spacer w-variant-b31f49ef-b5f7-e9d6-d1cd-331557c4e573"></div><div class="u-container"><div class="cs-footer2_top"><div class="cs-footer2_brand"><img src="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/6a8dd46edeba7615c0164031_Logo-CS-AI-new-white.avif" loading="lazy" sizes="100vw" srcset="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/6a8dd46edeba7615c0164031_Logo-CS-AI-new-white-p-500.avif 500w, https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/6a8dd46edeba7615c0164031_Logo-CS-AI-new-white-p-800.avif 800w, https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/6a8dd46edeba7615c0164031_Logo-CS-AI-new-white-p-1080.avif 1080w, https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/6a8dd46edeba7615c0164031_Logo-CS-AI-new-white-p-1600.avif 1600w, https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/6a8dd46edeba7615c0164031_Logo-CS-AI-new-white.avif 2301w" alt="ChannelSight" class="cs-footer2_logo"/><p class="cs-footer2_blurb">Where to Buy, Shoppable Media and Digital Shelf analytics in one platform. 5,450+ retailers connected across 100+ markets.</p><p class="cs-footer2_address">Newcourt House, Strandville Ave E, Clontarf, Dublin 3, D03 F2K5, Ireland</p><p class="cs-footer2_address">+353 1 902 2822</p><div class="cs-footer2_socials"><a href="https://www.linkedin.com/company/channelsight" class="cs-footer2_social-link w-inline-block"><div class="social-embed w-embed"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M4.98 3.5C4.98 4.88 3.87 6 2.5 6S0 4.88 0 3.5 1.12 1 2.5 1s2.48 1.12 2.48 2.5zM.24 8.31h4.52V23H.24V8.31zM8.34 8.31h4.33v2h.06c.6-1.14 2.08-2.34 4.28-2.34 4.58 0 5.42 3.01 5.42 6.93V23h-4.52v-7.19c0-1.72-.03-3.93-2.39-3.93-2.4 0-2.76 1.87-2.76 3.8V23H8.34V8.31z"/></svg></div></a><a href="https://www.youtube.com/@channelsight" class="cs-footer2_social-link w-inline-block"><div class="social-embed w-embed"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M23.5 6.19a3.02 3.02 0 0 0-2.12-2.14C19.5 3.55 12 3.55 12 3.55s-7.5 0-9.38.5A3.02 3.02 0 0 0 .5 6.19C0 8.07 0 12 0 12s0 3.93.5 5.81a3.02 3.02 0 0 0 2.12 2.14c1.88.5 9.38.5 9.38.5s7.5 0 9.38-.5a3.02 3.02 0 0 0 2.12-2.14C24 15.93 24 12 24 12s0-3.93-.5-5.81zM9.6 15.6V8.4L15.83 12 9.6 15.6z"/></svg></div></a></div></div><div class="cs-footer2_col"><p class="cs-footer2_col-title">Solutions</p><a href="/our-solutions/where-to-buy" class="cs-footer2_link">Where To Buy</a><a href="/our-solutions/shoppable-media" class="cs-footer2_link">Shoppable Media</a><a href="/our-solutions/digital-shelf" class="cs-footer2_link">Digital Shelf</a><a href="/our-solutions/add-to-cart" class="cs-footer2_link">Add to Cart</a><a href="/our-solutions/offline-locator" class="cs-footer2_link">Offline Locator</a><a href="/pim" class="cs-footer2_link">PIM</a><a href="/ai" class="cs-footer2_link">AI Solutions</a></div><div class="cs-footer2_col"><p class="cs-footer2_col-title">Company</p><a href="/about-us" class="cs-footer2_link">About Us</a><a href="/why-channelsight" class="cs-footer2_link">Why ChannelSight</a><a href="/careers" class="cs-footer2_link">Careers</a><a href="/partners" class="cs-footer2_link">Partners</a><a href="/retailer-network" class="cs-footer2_link">Retailer Network</a><a href="/contact" aria-current="page" class="cs-footer2_link w--current">Contact</a><a href="/book-a-demo" class="cs-footer2_link">Book a Demo</a></div><div class="cs-footer2_col"><p class="cs-footer2_col-title">Resources</p><a href="/blog" class="cs-footer2_link">Blog</a><a href="/resources" class="cs-footer2_link">Resource Library</a><a href="/case-studies" class="cs-footer2_link">Case Studies</a><a href="/faq" class="cs-footer2_link">E-Commerce FAQs</a><a href="https://portal.channelsight.com/" class="cs-footer2_link">Customer Portal</a></div><div class="cs-footer2_col"><p class="cs-footer2_col-title">How It Works</p><a href="/how-it-works/where-to-buy" class="cs-footer2_link">How Where to Buy Works</a><a href="/how-it-works/shoppable-media" class="cs-footer2_link">How Shoppable Media Works</a><a href="/how-it-works/digital-shelf" class="cs-footer2_link">How Digital Shelf Works</a><a href="/channelsight-market-tiering" class="cs-footer2_link">Market Tiering</a></div><div class="cs-footer2_col"><p class="cs-footer2_col-title">Industries</p><a href="/industries/fmcg-cpg" class="cs-footer2_link">FMCG & CPG</a><a href="/industries/beauty-personal-care" class="cs-footer2_link">Beauty & Personal Care</a><a href="/industries/electronics-appliances" class="cs-footer2_link">Electronics & Appliances</a><a href="/industries/food-beverage" class="cs-footer2_link">Food & Beverage</a><a href="/industries/health-pharma" class="cs-footer2_link">Health & Pharma</a><a href="/industries/home-diy" class="cs-footer2_link">Home & DIY</a><a href="/industries/toys-family" class="cs-footer2_link">Toys & Family</a><a href="/industries/tools-industrial" class="cs-footer2_link">Tools & Industrial</a></div></div><div class="cs-footer2_hairline"></div><div class="cs-footer2_band2"><div class="cs-footer2_col"><p class="cs-footer2_col-title">Comparisons</p><a href="/compare-solutions" class="cs-footer2_link">Compare Solutions</a><a href="/channelsight-vs-mikmak" class="cs-footer2_link">ChannelSight vs MikMak</a><a href="/channelsight-vs-pricespider" class="cs-footer2_link">ChannelSight vs PriceSpider -Wayvia</a></div><div class="cs-footer2_col"><p class="cs-footer2_col-title">Customer Journey</p><a href="/customer-journey" class="cs-footer2_link">
1160Customer Journey Guide</a><a href="/customer-journey/how-create-customer-journey-map" class="cs-footer2_link">Creating a Journey Map</a><a href="/customer-journey/stages-of-a-customer-journey-map" class="cs-footer2_link">Stages of a Journey Map</a><a href="/customer-journey/benefits-of-a-customer-journey-map" class="cs-footer2_link">Benefits of a Journey Map</a><a href="/customer-journey/customer-journey-analytics" class="cs-footer2_link">Customer Journey Analytics</a></div><div class="cs-footer2_col"><p class="cs-footer2_col-title">Omnichannel</p><a href="/omnichannel/omnichannel-strategy" class="cs-footer2_link">Omnichannel Strategy</a><a href="/omnichannel/omnichannel-experience" class="cs-footer2_link">Omnichannel Experience</a><a href="/omnichannel/omnichannel-examples" class="cs-footer2_link">Omnichannel Examples</a><a href="/omnichannel/omnichannel-campaign-measurement" class="cs-footer2_link">Campaign Measurement</a><a href="/omnichannel/multichannel-marketing" class="cs-footer2_link">Multichannel vs Omnichannel</a></div><div class="cs-footer2_col"><p class="cs-footer2_col-title">Retail Media</p><a href="/retail-media/retail-media-platform" class="cs-footer2_link">Retail Media Platform</a><a href="/retail-media/retail-advertising" class="cs-footer2_link">Retail Advertising</a><a href="/retail-media/retail-digital-marketing" class="cs-footer2_link">Retail Digital Marketing</a><a href="/retail-media/retail-branding" class="cs-footer2_link">Retail Branding</a><a href="/retail-media/retail-marketing-platform" class="cs-footer2_link">Retail Marketing Platform</a></div><div class="cs-footer2_col"><p class="cs-footer2_col-title">Ecommerce</p><a href="/ecommerce/ecommerce-analytics" class="cs-footer2_link">Ecommerce Analytics</a><a href="/ecommerce/ecommerce-software" class="cs-footer2_link">Analytics Software</a><a href="/ecommerce/ecommerce-dashboards" class="cs-footer2_link">Analytics Dashboards</a><a href="/ecommerce/ecommerce-growth-strategy" class="cs-footer2_link">Ecommerce Growth Strategy</a><a href="/ecommerce/b2b-ecommerce-solutions" class="cs-footer2_link">B2B Ecommerce Solutions</a><a href="/digital-shelf/digital-shelf-analytics" class="cs-footer2_link">Digital Shelf Analytics</a></div></div><div class="cs-footer2_hairline"></div><div class="cs-footer2_bottom"><p class="cs-footer2_copyright">© 2026 ChannelSight. All rights reserved.</p><div class="cs-footer2_legal"><a href="/terms" class="cs-footer2_legal-link">Terms</a><a href="/privacy-policy" class="cs-footer2_legal-link">Privacy Policy</a><a href="/cookie-policy" class="cs-footer2_legal-link">Cookie Policy</a><a href="/data-processing-agreement" class="cs-footer2_legal-link">Data Processing Agreement</a></div></div></div><div data-wf--section-spacer--variant="small" class="section-spacer w-variant-b31f49ef-b5f7-e9d6-d1cd-331557c4e573"></div></div></footer>
1160<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=64248e7ed5f30d6effe57d5d" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
1160<script src="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/js/webflow.schunk.3eae1ede90d44b90.js" type="text/javascript" integrity="sha384-govLbXEOMSmK1QpUjRhIilFBWDodj7NdEQoTpVVioX4V24lVEoHQFM37e3gM82Nc" crossorigin="anonymous"></script>
1160<script src="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/js/webflow.schunk.8f9d4cf43f276f84.js" type="text/javascript" integrity="sha384-RqGrHDdontl16Gdrhb29ITd29U3AguWHujIZX7w4FfHnc178DebZZ3RP3eXn1pO4" crossorigin="anonymous"></script>
1160<script src="https://cdn.prod.website-files.com/64248e7ed5f30d6effe57d5d/js/webflow.c0dbac2d.9661a9008d7132d0.js" type="text/javascript" integrity="sha384-UdDPPWLgqw5pyA+5//XMB5ftgaFt6KGeRcxn58YtscOdrSt5VjbTwJkNydqjknNd" crossorigin="anonymous"></script>
1160<script src="https://cdn.prod.website-files.com/gsap/3.15.0/gsap.min.js" type="text/javascript"></script>
1160<script src="https://cdn.prod.website-files.com/gsap/3.15.0/ScrollTrigger.min.js" type="text/javascript"></script>
1160<script src="https://cdn.prod.website-files.com/gsap/3.15.0/InertiaPlugin.min.js" type="text/javascript"></script>
1160<script src="https://cdn.prod.website-files.com/gsap/3.15.0/Draggable.min.js" type="text/javascript"></script>
1160<script type="text/javascript">gsap.registerPlugin(ScrollTrigger,InertiaPlugin,Draggable);</script>
1160<!-- LinkedIn Tag Manager -->
1161<script type="text/javascript"> 1162_linkedin_partner_id = "41470"; 1163window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || []; 1164window._linkedin_data_partner_ids.push(_linkedin_partner_id); 1165</script>
1165<script type="text/javascript"> 1166(function(l) { 1167if (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])}; 1168window.lintrk.q=[]} 1169var s = document.getElementsByTagName("script")[0]; 1170var b = document.createElement("script"); 1171b.type = "text/javascript";b.async = true; 1172b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; 1173s.parentNode.insertBefore(b, s);})(window.lintrk); 1174</script>
1174 1175<noscript> 1176<img height="1" width="1" style="display:none;" alt="" src="https://px.ads.linkedin.com/collect/?pid=41470&fmt=gif" /> 1177</noscript> 1178<!-- End LinkedIn Tag Manager --> 1179
1180<script> 1181document.addEventListener("DOMContentLoaded", function () { 1182 if (window.location.hash) { 1183 let target = document.querySelector(window.location.hash); 1184 if (target) { 1185 setTimeout(() => { 1186 target.scrollIntoView({ behavior: "smooth", block: "start" }); 1187 }, 100); // Small delay to allow page to load first 1188 } 1189 } 1190}); 1191</script>
1191 1192
1193<script> 1194 document.addEventListener("DOMContentLoaded", function() { 1195 document.querySelectorAll(".text-rich-text sub").forEach(subElement => { 1196 // Create a span with a custom class and insert the text inside it 1197 const spanElement = document.createElement("span"); 1198 spanElement.classList.add("text-span-grad-purp"); 1199 spanElement.textContent = subElement.textContent; 1200 1201 // Replace the <sub> element with the <span> 1202 subElement.replaceWith(spanElement); 1203 }); 1204 }); 1205</script>
vendor: 1 bytes, line 1205
1205
1206<script> 1207 document.addEventListener("DOMContentLoaded", function() { 1208 document.querySelectorAll(".text-rich-text sup").forEach(supElement => { 1209 const spanElement = document.createElement("span"); 1210 spanElement.classList.add("text-span-grad-light-purp"); 1211 spanElement.textContent = supElement.textContent; 1212 1213 supElement.replaceWith(spanElement); 1214 }); 1215 }); 1216</script>
1216 1217 1218<!-- jQuery: Webflow already loads jQuery 3.5.1 before this footer block; the duplicate 3.6.0 load was removed (Legency, 1 Sep 2026) --> 1219
1220<script> 1221 $(document).ready(function () { 1222 gsap.registerPlugin(ScrollTrigger); 1223 1224 $('.stagger-children').each(function () { 1225 const $parent = $(this); 1226 const children = $parent.children().toArray(); 1227 1228 gsap.from(children, { 1229 opacity: 0, 1230 y: '1rem', 1231 scale: 0.8, 1232 duration: 0.6, 1233 stagger: 0.08, 1234 ease: 'power2.out', 1235 scrollTrigger: { 1236 trigger: this, 1237 start: 'top 80%', 1238 toggleActions: 'play none none none' 1239 } 1240 }); 1241 }); 1242 }); 1243</script>
1243 1244
1245<script> 1246 document.addEventListener("DOMContentLoaded", function () { 1247 gsap.registerPlugin(ScrollTrigger); 1248 1249 // Target all elements with the class 'scale-up' 1250 gsap.utils.toArray(".scale-up").forEach(el => { 1251 gsap.fromTo(el, 1252 { scale: 0.8 }, 1253 { 1254 scale: 1, 1255 ease: "power2.out", 1256 scrollTrigger: { 1257 trigger: el, 1258 start: "top 100%", 1259 end: "top 50%", 1260 scrub: 1 1261 } 1262 }); 1263 }); 1264 }); 1265</script>
1265 1266 1267 1268<!-- Lenis: loaded once in the head (1.3.4, SRI-pinned); the duplicate unpkg load was removed (Legency, 1 Sep 2026) --> 1269
1270<script> 1271// Lenis 1272const lenis = new Lenis({ 1273 autoRaf: true, 1274}); 1275 1276 // FinSweet List Load Integration 1277 document.addEventListener('DOMContentLoaded', () => { 1278 // Select all buttons with the 'blog-load-more' attribute 1279 const loadMoreButtons = document.querySelectorAll('[blog-load-more]'); 1280 1281 loadMoreButtons.forEach(button => { 1282 button.addEventListener('click', () => { 1283 // --- THIS IS THE CRITICAL LINE BASED ON YOUR SCREENSHOTS --- 1284 // Find the FinSweet list wrapper using its specific attribute: fs-list-element="list" 1285 // This should target your 'blog22_list' element. 1286 const finSweetList = document.querySelector('[fs-list-element="list"]'); 1287 1288 if (finSweetList) { 1289 console.log("FinSweet load more button clicked. Observing list:", finSweetList); 1290 1291 const observer = new MutationObserver((mutationsList, observer) => { 1292 for (const mutation of mutationsList) { 1293 // We are looking for childList changes (new elements added) 1294 // and specifically checking if any nodes were added. 1295 if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { 1296 console.log("New content detected by MutationObserver."); 1297 // Immediately disconnect the observer to avoid multiple triggers for one load 1298 observer.disconnect(); 1299 1300 // Wait a short moment to allow the browser to render the new elements 1301 // before re-initializing Lenis. This delay is crucial for layout calculation. 1302 setTimeout(() => { 1303 lenis.resize(); // recalculate Lenis after the list grows (initLenis was never defined) 1304 }, 150); // Increased slightly to 150ms for robustness 1305 break; // Exit the loop after finding the relevant mutation 1306 } 1307 } 1308 }); 1309 1310 // Start observing the target FinSweet list for changes to its direct children 1311 observer.observe(finSweetList, { childList: true }); 1312 } else { 1313 // This warning should no longer appear if the selector '[fs-list-element="list"]' is correct. 1314 console.warn("FinSweet list wrapper not found for the clicked load more button. Please check the selector '[fs-list-element=\"list\"]'."); 1315 } 1316 }); 1317 }); 1318 }); 1319</script>
1319 1320
1321<script> 1322function initLoopingGSAPSlider() { 1323 document.querySelectorAll('[data-gsap-slider-init]').forEach(root => { 1324 if (root._sliderCleanup) root._sliderCleanup(); 1325 1326 const collection = root.querySelector('[data-gsap-slider-collection]'); 1327 const track = root.querySelector('[data-gsap-slider-list]'); 1328 const originals = Array.from(root.querySelectorAll('[data-gsap-slider-item]')); 1329 const controls = Array.from(root.querySelectorAll('[data-gsap-slider-control]')); 1330 if (!originals.length) return; 1331 1332 const AUTO_INTERVAL = 4000; // ms between auto-advances 1333 const STEP_DURATION = 0.6; // s, slide animation for auto/buttons 1334 const RESUME_DELAY = 1500; // ms after a drag before auto resumes 1335 1336 root.setAttribute('role','region'); 1337 root.setAttribute('aria-roledescription','carousel'); 1338 root.setAttribute('aria-label','Slider'); 1339 originals.forEach((slide,i) => { 1340 slide.setAttribute('role','group'); 1341 slide.setAttribute('aria-roledescription','Slide'); 1342 slide.setAttribute('aria-label',`Slide ${i+1} of ${originals.length}`); 1343 }); 1344 1345 const statusVar = getComputedStyle(root).getPropertyValue('--slider-status').trim(); 1346 const r0 = originals[0].getBoundingClientRect(); 1347 // first-to-second item distance covers flex gap AND margins 1348 const slideW = originals.length > 1 1349 ? originals[1].getBoundingClientRect().left - r0.left 1350 : r0.width + parseFloat(getComputedStyle(originals[0]).marginRight); 1351 const loopWidth = slideW * originals.length; 1352 const enabled = statusVar === 'on' && loopWidth > collection.clientWidth; 1353 root.setAttribute('data-gsap-slider-status', enabled ? 'active' : 'not-active'); 1354 if (!enabled) return; 1355 1356 // one extra set beyond viewport coverage - the loop runs one set shifted left 1357 // so the lead-in space before the first card is always filled 1358 const sets = Math.max(3, Math.ceil((collection.clientWidth + loopWidth) / loopWidth) + 1); 1359 const clones = []; 1360 for (let s = 1; s < sets; s++) { 1361 originals.forEach(item => { 1362 const c = item.cloneNode(true); 1363 c.setAttribute('data-gsap-slider-clone',''); 1364 track.appendChild(c); 1365 clones.push(c); 1366 }); 1367 } 1368 const allItems = originals.concat(clones); 1369 1370 // real loop distance measured from the DOM - immune to gap/margin quirks 1371 const realLoop = clones[0].getBoundingClientRect().left - r0.left; 1372 // wrap window is (-2L, -L]: always at least one full set off to the left 1373 const wrapX = v => -(((-v % realLoop) + realLoop) % realLoop) - realLoop; 1374 1375 let x = 0; 1376 let hovered = false, dragging = false, tweening = false; 1377 let currentTween = null, resumeTimer = null; 1378 1379 // statuses are shared per CONTENT (original + its clones always match), 1380 // so the loop-wrap element swap never triggers a CSS transition 1381 const n = originals.length; 1382 const rank = {'active': 2, 'inview': 1, 'not-active': 0}; 1383 function updateStatus() { 1384 const cRect = collection.getBoundingClientRect(); 1385 const best = new Array(n).fill('not-active'); 1386 allItems.forEach((slide, idx) => { 1387 const r = slide.getBoundingClientRect(); 1388 const leftEdge = r.left - cRect.left; 1389 const inView = r.right > cRect.left && r.left < cRect.right; 1390 const status = Math.abs(leftEdge) < slideW / 2 ? 'active' 1391 : inView ? 'inview' : 'not-active'; 1392 const j = idx % n; 1393 if (rank[status] > rank[best[j]]) best[j] = status; 1394 }); 1395 allItems.forEach((slide, idx) => { 1396 const status = best[idx % n]; 1397 slide.setAttribute('data-gsap-slider-item-status', status); 1398 slide.setAttribute('aria-selected', status === 'active' ? 'true' : 'false'); 1399 slide.setAttribute('aria-hidden', status === 'not-active' ? 'true' : 'false'); 1400 }); 1401 } 1402 1403 function render(v) { 1404 x = wrapX(v); 1405 gsap.set(track, {x: x}); 1406 updateStatus(); 1407 } 1408 1409 function killTween() { 1410 if (currentTween) { currentTween.kill(); currentTween = null; } 1411 tweening = false; 1412 } 1413 1414 // dir 1 = next, -1 = prev; always lands on a card-aligned position 1415 function step(dir) { 1416 killTween(); 1417 tweening = true; 1418 const state = {v: x}; 1419 currentTween = gsap.to(state, { 1420 v: (Math.round(x / slideW) - dir) * slideW, 1421 duration: STEP_DURATION, 1422 ease: 'power2.inOut', 1423 onUpdate: () => render(state.v), 1424 onComplete: () => { tweening = false; currentTween = null; } 1425 }); 1426 } 1427 1428 const autoTimer = setInterval(() => { 1429 if (!hovered && !dragging && !tweening) step(1); 1430 }, AUTO_INTERVAL); 1431 1432 root.addEventListener('mouseenter', () => { 1433 hovered = true; 1434 track.setAttribute('data-gsap-slider-list-status','grab'); 1435 }); 1436 root.addEventListener('mouseleave', () => { 1437 hovered = false;
1438 track.removeAttribute('data-gsap-slider-list-status'); 1439 }); 1440 1441 function scheduleResume() { 1442 clearTimeout(resumeTimer); 1443 resumeTimer = setTimeout(() => { dragging = false; }, RESUME_DELAY); 1444 } 1445 1446 // prev/next always enabled - no ends anymore 1447 controls.forEach(btn => { 1448 const dir = btn.getAttribute('data-gsap-slider-control') === 'next' ? 1 : -1; 1449 btn.disabled = false; 1450 btn.setAttribute('aria-label', dir === 1 ? 'Next Slide' : 'Previous Slide'); 1451 btn.setAttribute('aria-disabled','false'); 1452 btn.setAttribute('data-gsap-slider-control-status','active'); 1453 btn.onclick = () => step(dir); 1454 }); 1455 1456 // drag on a proxy so inertia can cross the wrap point; snap to card positions 1457 const proxy = document.createElement('div'); 1458 let snapOffset = 0; 1459 const drag = Draggable.create(proxy, { 1460 type: 'x', 1461 trigger: track, 1462 inertia: true, 1463 throwResistance: 2000, 1464 maxDuration: 0.8, 1465 snap: { 1466 x: v => Math.round((snapOffset + v) / slideW) * slideW - snapOffset, 1467 duration: 0.4 1468 }, 1469 onPressInit() { 1470 killTween(); 1471 dragging = true; 1472 clearTimeout(resumeTimer); 1473 snapOffset = x - this.x; // maps proxy coords to slider coords 1474 track.setAttribute('data-gsap-slider-list-status','grabbing'); 1475 }, 1476 onDrag() { render(snapOffset + this.x); }, 1477 onThrowUpdate() { render(snapOffset + this.x); }, 1478 onRelease() { 1479 track.setAttribute('data-gsap-slider-list-status','grab'); 1480 if (!this.isThrowing) scheduleResume(); 1481 }, 1482 onThrowComplete() { scheduleResume(); } 1483 })[0]; 1484 1485 root._sliderCleanup = () => { 1486 clearInterval(autoTimer); 1487 clearTimeout(resumeTimer); 1488 killTween(); 1489 drag.kill(); 1490 clones.forEach(c => c.remove()); 1491 gsap.set(track, {clearProps: 'x'}); 1492 root._sliderCleanup = null; 1493 }; 1494 1495 render(0); 1496 }); 1497} 1498 1499function debounceOnWidthChange(fn, ms) { 1500 let last = innerWidth, timer; 1501 return function(...args) { 1502 clearTimeout(timer); 1503 timer = setTimeout(() => { 1504 if (innerWidth !== last) { 1505 last = innerWidth; 1506 fn.apply(this, args); 1507 } 1508 }, ms); 1509 }; 1510} 1511 1512window.addEventListener('resize', debounceOnWidthChange(initLoopingGSAPSlider, 200)); 1513 1514window.addEventListener('load', () => { 1515 gsap.registerPlugin(Draggable, InertiaPlugin); 1516 initLoopingGSAPSlider(); 1517}); 1518</script>
1518 1519
1520<script> 1521(function () { 1522 var els = document.querySelectorAll('[data-num-anim]'); 1523 if (!els.length) return; 1524 1525 var reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 1526 1527 function animate(el) { 1528 var text = el.textContent; 1529 var m = text.match(/([\d,]*\.?\d+)/); 1530 if (!m) return; 1531 var raw = m[1]; 1532 var target = parseFloat(raw.replace(/,/g, '')); 1533 var decimals = (raw.split('.')[1] || '').length; 1534 var useCommas = raw.indexOf(',') > -1; 1535 var prefix = text.slice(0, m.index); 1536 var suffix = text.slice(m.index + raw.length); 1537 var duration = parseInt(el.getAttribute('data-num-anim'), 10) || 1800; 1538 var start = null; 1539 1540 function fmt(v) { 1541 var s = v.toFixed(decimals); 1542 if (useCommas) { 1543 var p = s.split('.'); 1544 p[0] = p[0].replace(/\B(?=(\d{3})+(?!\d))/g, ','); 1545 s = p.join('.'); 1546 } 1547 return s; 1548 } 1549 function frame(ts) { 1550 if (start === null) start = ts; 1551 var t = Math.min((ts - start) / duration, 1); 1552 var eased = 1 - Math.pow(1 - t, 3); 1553 el.textContent = prefix + fmt(target * eased) + suffix; 1554 if (t < 1) requestAnimationFrame(frame); 1555 else el.textContent = text; 1556 } 1557 requestAnimationFrame(frame); 1558 } 1559 1560 var io = new IntersectionObserver(function (entries) { 1561 entries.forEach(function (entry) { 1562 if (entry.isIntersecting) { 1563 io.unobserve(entry.target); 1564 if (reduced) return; 1565 animate(entry.target); 1566 } 1567 }); 1568 }, { threshold: 0.4 }); 1569
1570 els.forEach(function (el) { io.observe(el); }); 1571})(); 1572</script>
1572 1573 1574<!-- cs-hero-sharpen : Legency, 13 Aug 2026 ------------------------------- 1575 The industry hero embeds size themselves with transform: scale(). Their 1576 panels use perspective()/rotateY(), so they sit on composited layers, and 1577 a transform scale resamples those layers as bitmaps - which is why they 1578 render soft. The site's own .hero-embed.is-smaller{transform:scale(.75)} 1579 resampled them a second time. 1580 1581 This converts that scaling to `zoom`, which re-lays-out so text and edges 1582 rasterise at final size, and folds the .is-smaller scale in so nothing is 1583 resampled twice. Touches nothing but .cs-hero-canvas, and no-ops on any 1584 hero already built with zoom. 1585------------------------------------------------------------------------- -->
1586<script> 1587(function () { 1588 if (!(window.CSS && CSS.supports && CSS.supports('zoom', '1'))) return; 1589 1590 function hostScale(host) { 1591 var t = host && getComputedStyle(host).transform; 1592 if (!t || t === 'none') return 1; 1593 var m = t.match(/matrix\(([^,]+),/); 1594 return m ? (parseFloat(m[1]) || 1) : 1; 1595 } 1596 1597 function patch(canvas) { 1598 var wrap = canvas.closest ? canvas.closest('.cs-hero-wrap') : null; 1599 if (!wrap) return; 1600 1601 var host = wrap.parentElement; 1602 if (host && !host.getAttribute('data-cs-sharpened')) { 1603 var hs = hostScale(host); 1604 if (hs && hs !== 1) { host.style.transform = 'none'; host.setAttribute('data-cs-scale', hs); } 1605 host.setAttribute('data-cs-sharpened', '1'); 1606 } 1607 var absorbed = parseFloat((host && host.getAttribute('data-cs-scale')) || '1') || 1; 1608 1609 // Only fires when the embed's own script has just written a scale(). 1610 var m = (canvas.style.transform || '').match(/scale\(([\d.]+)\)/); 1611 if (!m) return; 1612 1613 var s = parseFloat(m[1]) * absorbed; 1614 if (!s || !isFinite(s)) return; 1615 canvas.style.transform = ''; 1616 canvas.style.zoom = s; 1617 wrap.style.width = (1920 * s) + 'px'; 1618 wrap.style.height = (1080 * s) + 'px'; 1619 } 1620 1621 function scan() { 1622 var list = document.querySelectorAll('.cs-hero-canvas'); 1623 for (var i = 0; i < list.length; i++) { 1624 var c = list[i]; 1625 if (!c.getAttribute('data-cs-watched')) { 1626 c.setAttribute('data-cs-watched', '1'); 1627 (function (el) { 1628 new MutationObserver(function () { patch(el); }) 1629 .observe(el, { attributes: true, attributeFilter: ['style'] }); 1630 })(c); 1631 } 1632 patch(c); 1633 } 1634 } 1635 1636 scan(); 1637 document.addEventListener('DOMContentLoaded', scan); 1638 window.addEventListener('load', scan); 1639 window.addEventListener('resize', scan); 1640 setTimeout(scan, 300); setTimeout(scan, 1000); setTimeout(scan, 2500); 1641})(); 1642</script>
1642 1643 1644<!-- cs-hero-mobile : Legency, 14 Aug 2026 -------------------------------- 1645 The site hides the hero graphic below 991px via .hero-embed{display:none}. 1646 That rule predates the animations, and with Graphic Type set to Animation 1647 the image alternative is off too - so the hero cell rendered completely 1648 empty on tablet and phone. Show it; the embed's own fit script scales it 1649 down to the viewport. 1650------------------------------------------------------------------------- --> 1651<style> 1652@media screen and (max-width: 991px) { .hero-embed { display: block !important; } } 1653</style> 1654 1655<!-- cs-hero-width : Legency, 14 Aug 2026 --------------------------------- 1656 The hero row is .section-content{grid-template-columns:1.25fr 1fr}, so the 1657 animation gets the SMALLER cell - 562px of a 1280px container. The artwork 1658 is ~1610px wide, so it renders at 0.29 and its 17px labels land at 5px, 1659 against the home page hero's 8.7px. That is why Adi reads them as small. 1660 1661 Flipping the ratio on industry pages only takes the animation cell to 1662 702px, so labels render ~6.2px (+24%) and the headline still sits on three 1663 lines. Scoped by URL so no other page using Section / Hero is affected. 1664 Revert = delete this block. 1665------------------------------------------------------------------------- -->
1666<script>if(/^\/industries\//.test(location.pathname))document.documentElement.classList.add('cs-industry');</script>
1666 1667<style> 1668html.cs-industry .section-content { grid-template-columns: 1fr 1.25fr !important; } 1669@media screen and (max-width: 991px) { html.cs-industry .section-content { grid-template-columns: 1fr !important; } } 1670</style> 1671 1672<!-- Start of HubSpot Embed Code -->
1673<script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/7066574.js"></script>
1673 1674<!-- End of HubSpot Embed Code --> 1675 1676<!-- cs-a11y : Legency, 1 Sep 2026 ------------------------------------------- 1677 (1) The skip link in the nav targets #main. Pages built before the 1678 landmark pass have a <main> with no id - give it one so the link works 1679 everywhere. (2) The product mockups are HTML embeds whose "Buy Now", 1680 "Add to Cart" and retailer buttons are decorative animation props, not 1681 controls; take them out of the tab order and the accessibility tree so 1682 they stop counting as sub-minimum tap targets. 1683------------------------------------------------------------------------- -->
1684<script> 1685(function(){ 1686 function run(){ 1687 if(!document.getElementById('main')){var m=document.querySelector('main');if(m&&!m.id)m.id='main';} 1688 document.querySelectorAll('.w-embed button').forEach(function(b){ 1689 if(/(__buy|__btn|__al-btn|__retailer|__locate)(\s|$)/.test(b.className)){b.setAttribute('tabindex','-1');b.setAttribute('aria-hidden','true');} 1690 }); 1691 } 1692 if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',run);}else{run();} 1693})(); 1694</script>
1694 1695 1696<!-- cs-faq-schema : Legency, 1 Sep 2026 ------------------------------------- 1697 FAQ collection pages (/faq/*) carry one question and one answer each. 1698 The template marks them with data-faqpage-q / data-faqpage-a; this builds 1699 the FAQPage JSON-LD from what is actually rendered, so the markup can never 1700 drift from the visible content. No-op on every other page. 1701------------------------------------------------------------------------- -->
1702<script> 1703(function(){ 1704 function run(){ 1705 var q=document.querySelector('[data-faqpage-q]'); 1706 var a=document.querySelector('[data-faqpage-a]'); 1707 if(!q||!a)return; 1708 var qt=q.innerText.replace(/\s+/g,' ').trim(); 1709 var at=a.innerText.replace(/\s+/g,' ').trim(); 1710 if(!qt||!at)return; 1711 var s=document.createElement('script'); 1712 s.type='application/ld+json'; 1713 s.text=JSON.stringify({"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":qt,"acceptedAnswer":{"@type":"Answer","text":at}}]}); 1714 document.head.appendChild(s); 1715 } 1716 if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',run);}else{run();} 1717})(); 1718</script>
1718 1719 1720 1721<!-- cs-hero-host : Legency, 3 Sep 2026 ---------------------------------- 1722 The hero graphic cell is .section-cell{display:flex;flex-flow:column; 1723 align-items:flex-start}, which shrink-wraps the embed to its content 1724 width. The deck-style embeds (.cs-conv, .cs-wtb and any future one) 1725 declare container-type:inline-size, so their content width is zero - 1726 the animation collapsed to nothing on /our-solutions/conversational- 1727 commerce. The industry heroes only survive because their own fit 1728 script writes the same two values inline. This makes every embed 1729 pasted into a hero cell take the cell's full width. Revert = delete. 1730------------------------------------------------------------------------- --> 1731<style> 1732.section-cell > .hero-embed { align-self: stretch; width: 100%; min-width: 0; } 1733</style> 1734 1735
1736<script> 1737/* ChannelSight native video: optional per-instance accessible title. */ 1738(() => { 1739 const selector = '[data-cs-video-title]'; 1740 const start = () => { 1741 if (!document.querySelector(selector)) return; 1742 const state = new WeakMap(); 1743 const apply = root => { 1744 const override = (root.getAttribute('data-cs-video-title') || '').trim(); 1745 root.querySelectorAll('iframe').forEach(frame => { 1746 const current = frame.getAttribute('title') || ''; 1747 const record = state.get(frame) || { nativeTitle: current || 'YouTube video', applied: null }; 1748 if (current && current !== record.applied) record.nativeTitle = current; 1749 const next = override || record.nativeTitle; 1750 record.applied = next; 1751 state.set(frame, record); 1752 if (current !== next) frame.setAttribute('title', next); 1753 }); 1754 }; 1755 document.querySelectorAll(selector).forEach(apply); 1756 new MutationObserver(records => { 1757 const roots = new Set(); 1758 records.forEach(record => { 1759 if (record.target instanceof Element) { 1760 const root = record.target.closest(selector); 1761 if (root) roots.add(root); 1762 } 1763 record.addedNodes.forEach(node => { 1764 if (!(node instanceof Element)) return; 1765 if (node.matches(selector)) roots.add(node); 1766 node.querySelectorAll(selector).forEach(root => roots.add(root)); 1767 }); 1768 }); 1769 roots.forEach(apply); 1770 }).observe(document.body, { 1771 childList: true, subtree: true, attributes: true, 1772 attributeFilter: ['data-cs-video-title', 'title'] 1773 }); 1774 }; 1775 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start, { once: true }); 1776 else start(); 1777})(); 1778</script>
1778 1779 1780<!-- CS announcement banner, 22 Sep 2026 -->
1781<script> 1782/* ChannelSight: keep the fixed navigation and mobile panels clear of the announcement. */ 1783(() => { 1784 const initialise = () => { 1785 document.querySelectorAll('.mega-nav').forEach(nav => { 1786 const banner = nav.querySelector(':scope > .cs-announcement'); 1787 if (!banner || nav.__csAnnouncementCleanup) return; 1788 const wrapper = nav.closest('.nav-components'); 1789 const storageKey = 'cs-announcement-dismissed'; 1790 const campaign = JSON.stringify([ 1791 banner.querySelector('.cs-announcement_copy')?.textContent.trim(), 1792 banner.querySelector('.cs-announcement_action a')?.getAttribute('href') 1793 ]); 1794 // Remember only this announcement for the current tab's browsing session. 1795 // A different message or destination automatically shows a new campaign. 1796 try { 1797 if (sessionStorage.getItem(storageKey) === campaign) banner.hidden = true; 1798 } catch (_) { /* Dismissal still works when browser storage is unavailable. */ } 1799 let frame = 0; 1800 const assign = (element, name, value) => { 1801 if (element && element.style.getPropertyValue(name) !== value) { 1802 element.style.setProperty(name, value); 1803 } 1804 }; 1805 const measure = () => { 1806 frame = 0; 1807 if (!nav.isConnected) { 1808 nav.__csAnnouncementCleanup(); 1809 return; 1810 } 1811 const height = Math.ceil(banner.getBoundingClientRect().height); 1812 assign(nav, '--cs-announcement-height', `${height}px`); 1813 assign(wrapper, '--cs-announcement-offset', 1814 getComputedStyle(nav).position === 'fixed' ? `${height}px` : '0px'); 1815 }; 1816 const schedule = () => { if (!frame) frame = requestAnimationFrame(measure); }; 1817 const dismiss = event => { 1818 const close = event.target.closest('.cs-announcement_close'); 1819 const cta = event.target.closest('.cs-announcement_action a[href]'); 1820 if (!close && !cta) return; 1821 if (event.type === 'auxclick' && event.button !== 1) return; 1822 const restoreFocus = !!close && banner.contains(document.activeElement); 1823 banner.hidden = true; 1824 try { sessionStorage.setItem(storageKey, campaign); } catch (_) {} 1825 schedule(); 1826 if (restoreFocus) { 1827 const next = [...nav.querySelectorAll('.mega-nav__bar a[href], .mega-nav__bar button, .mega-nav__bar [tabindex="0"]')] 1828 .find(element => !element.disabled && element.getClientRects().length && 1829 getComputedStyle(element).visibility !== 'hidden'); 1830 next?.focus({ preventScroll: true }); 1831 } 1832 }; 1833 banner.addEventListener('click', dismiss); 1834 banner.addEventListener('auxclick', dismiss); 1835 banner.setAttribute('data-cs-dismissible', ''); 1836 const resize = typeof ResizeObserver === 'function' ? new ResizeObserver(schedule) : null; 1837 resize?.observe(banner); 1838 const changes = new MutationObserver(schedule); 1839 changes.observe(nav, { 1840 attributes: true, attributeFilter: ['class', 'style', 'hidden'], 1841 childList: true, characterData: true, subtree: true 1842 }); 1843 window.addEventListener('resize', schedule, { passive: true }); 1844 nav.__csAnnouncementCleanup = () => { 1845 resize?.disconnect(); 1846 changes.disconnect(); 1847 window.removeEventListener('resize', schedule); 1848 banner.removeEventListener('click', dismiss); 1849 banner.removeEventListener('auxclick', dismiss); 1850 banner.removeAttribute('data-cs-dismissible'); 1851 cancelAnimationFrame(frame); 1852 assign(nav, '--cs-announcement-height', '0px'); 1853 assign(wrapper, '--cs-announcement-offset', '0px'); 1854 delete nav.__csAnnouncementCleanup; 1855 }; 1856 measure(); 1857 document.fonts?.ready.then(schedule); 1858 }); 1859 }; 1860 if (document.readyState === 'loading') { 1861 document.addEventListener('DOMContentLoaded', initialise, { once: true }); 1862 } else initialise(); 1863})(); 1864 1865</script>
1865</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.