PageSourceSearch

https://z2-homepage.pages.dev/contact

html z2-homepage.pages.dev collected 2026-10-03 06:01:43 UTC 98,974 bytes, 686 lines download raw bytes

1<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="theme-color" content="#8CC04F"><title>Contact Us | Z2Data</title><meta name="description" content="Get in touch with the Z2 team. Call 1-866-923-2821 or send us a message about sales, support, or general questions on supply chain risk management."><link rel="canonical" href="https://www.z2data.com/contact/"><link rel="alternate" hreflang="en" href="https://www.z2data.com/contact/"><link rel="alternate" hreflang="ja" href="https://www.z2data.com/ja/contact/"><link rel="alternate" hreflang="de" href="https://www.z2data.com/de/contact/"><link rel="alternate" hreflang="it" href="https://www.z2data.com/it/contact/"><link rel="alternate" hreflang="pl" href="https://www.z2data.com/pl/contact/"><link rel="alternate" hreflang="fr" href="https://www.z2data.com/fr/contact/"><link rel="alternate" hreflang="ko" href="https://www.z2data.com/ko/contact/"><link rel="alternate" hreflang="es" href="https://www.z2data.com/es/contact/"><link rel="alternate" hreflang="pt" href="https://www.z2data.com/pt/contact/"><link rel="alternate" hreflang="pt-BR" href="https://www.z2data.com/pt-br/contact/"><link rel="alternate" hreflang="tr" href="https://www.z2data.com/tr/contact/"><link rel="alternate" hreflang="th" href="https://www.z2data.com/th/contact/"><link rel="alternate" hreflang="nl" href="https://www.z2data.com/nl/contact/"><link rel="alternate" hreflang="vi" href="https://www.z2data.com/vi/contact/"><link rel="alternate" hreflang="x-default" href="https://www.z2data.com/contact/"><meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"><meta property="og:type" content="website"><meta property="og:url" content="https://www.z2data.com/contact/"><meta property="og:title" content="Contact Us | Z2Data"><meta property="og:description" content="Get in touch with the Z2 team. Call 1-866-923-2821 or send us a message about sales, support, or general questions on supply chain risk management."><meta property="og:image" content="https://z2-homepage.pages.dev/og/card.png?title=Talk+to+our+supply%0Achain+experts&art=%2Fog%2Fassets%2Fpeople-mosaic.png&artw=507&arth=380&artright=56&frame=bracket&textw=470&v=2"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:site_name" content="Z2Data"><meta property="og:locale" content="en_US"><meta property="og:locale:alternate" content="ja_JP"><meta property="og:locale:alternate" content="de_DE"><meta property="og:locale:alternate" content="it_IT"><meta property="og:locale:alternate" content="pl_PL"><meta property="og:locale:alternate" content="fr_FR"><meta property="og:locale:alternate" content="ko_KR"><meta property="og:locale:alternate" content="es_ES"><meta property="og:locale:alternate" content="pt_PT"><meta property="og:locale:alternate" content="pt_BR"><meta property="og:locale:alternate" content="tr_TR"><meta property="og:locale:alternate" content="th_TH"><meta property="og:locale:alternate" content="nl_NL"><meta property="og:locale:alternate" content="vi_VN"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content="@z2data"><meta name="twitter:title" content="Contact Us | Z2Data"><meta name="twitter:description" content="Get in touch with the Z2 team. Call 1-866-923-2821 or send us a message about sales, support, or general questions on supply chain risk management."><meta name="twitter:image" content="https://z2-homepage.pages.dev/og/card.png?title=Talk+to+our+supply%0Achain+experts&art=%2Fog%2Fassets%2Fpeople-mosaic.png&artw=507&arth=380&artright=56&frame=bracket&textw=470&v=2">
1<script type="application/ld+json">[{"@context":"https://schema.org","@type":"Organization","@id":"https://www.z2data.com/#organization","name":"Z2Data","legalName":"Z2Data, Inc.","alternateName":"Z2","url":"https://www.z2data.com","logo":{"@type":"ImageObject","url":"https://www.z2data.com/brand/01-Logos/02-Digital/Positive/Z2_Logo_POS_RGB.svg"},"description":"Supply chain risk management and component intelligence platform for electronics manufacturers.","foundingDate":"2016","numberOfEmployees":{"@type":"QuantitativeValue","value":50},"knowsAbout":["Supply chain risk management","Electronic component intelligence","Component obsolescence and lifecycle management","Regulatory compliance (RoHS, REACH, PFAS, conflict minerals)","Geopolitical supply chain risk","Sub-tier supplier intelligence"],"sameAs":["https://www.linkedin.com/company/z2data","https://twitter.com/z2data","https://www.youtube.com/@z2data","https://www.crunchbase.com/organization/z2data","https://www.g2.com/products/z2data/reviews"],"contactPoint":[{"@type":"ContactPoint","contactType":"sales","email":"[email protected]","telephone":"+1-866-923-2821","url":"https://www.z2data.com/contact","areaServed":"Worldwide","availableLanguage":"English"},{"@type":"ContactPoint","contactType":"customer support","email":"[email protected]","url":"https://www.z2data.com/contact"}],"address":{"@type":"PostalAddress","streetAddress":"3080 Olcott Street, Suite A115","addressLocality":"Santa Clara","addressRegion":"CA","postalCode":"95054","addressCountry":"US"}},{"@context":"https://schema.org","@type":"WebSite","@id":"https://www.z2data.com/#website","url":"https://www.z2data.com","name":"Z2Data","inLanguage":"en","publisher":{"@id":"https://www.z2data.com/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.z2data.com/search?q={search_term_string}"},"query-input":"required name=search_term_string"}},{"@context":"https://schema.org","@type":"ContactPage","@id":"https://www.z2data.com/contact/#webpage","url":"https://www.z2data.com/contact/","name":"Contact Us","description":"Get in touch with the Z2 team. Call 1-866-923-2821 or send us a message about sales, support, or general questions on supply chain risk management.","isPartOf":{"@id":"https://www.z2data.com/#website"},"about":{"@id":"https://www.z2data.com/#organization"},"mainEntity":{"@id":"https://www.z2data.com/#organization"},"breadcrumb":{"@id":"https://www.z2data.com/contact/#breadcrumb"}},{"@context":"https://schema.org","@type":"BreadcrumbList","@id":"https://www.z2data.com/contact/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.z2data.com/"},{"@type":"ListItem","position":2,"name":"Contact","item":"https://www.z2data.com/contact/"}]}]</script>
1<link rel="preload" href="/fonts/geist-latin.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="/fonts/GT-Alpina-Standard-Regular.woff2" as="font" type="font/woff2" crossorigin><link rel="stylesheet" href="/fonts/z2icons.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="/fonts/z2icons.css"></noscript><link rel="preconnect" href="https://a.storyblok.com"><link rel="icon" type="image/png" sizes="32x32" href="/brand/05-Favicon/32x32/Z2_Favicon_32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/brand/05-Favicon/16x16/Z2_Favicon_16x16.png"><link rel="apple-touch-icon" sizes="180x180" href="/brand/05-Favicon/180x180/Z2_Favicon_180x180.png"><link rel="manifest" href="/site.webmanifest">
1<script type="module" src="/_astro/BaseLayout.astro_astro_type_script_index_0_lang.C8ApF7f2.js"></script>
1<link rel="stylesheet" href="/_astro/_slug_.XaEZdCIz.css">
2<style>.iph-wrap{position:relative}.iph-wrap--own{display:block}.iph-btn{position:absolute;left:2px;top:2px;bottom:2px;display:flex;align-items:center;gap:.45rem;padding:0 .7rem 0 .85rem;background:transparent;border:0;border-right:1px solid var(--color-sand-300);border-radius:.6rem 0 0 .6rem;cursor:pointer;font:inherit;color:var(--color-sand-900)}.iph-btn:hover{background:var(--color-sand-100)}.iph-btn:focus-visible{outline:2px solid var(--color-primary-deep);outline-offset:-2px}.iph-flag{flex:none;width:20px;height:15px;background-image:url(/images/flags/sprite.webp);background-size:320px auto;background-repeat:no-repeat;border-radius:2px;box-shadow:inset 0 0 0 1px #231c131f}.iph-dial{font-size:1.05rem;color:var(--color-sand-800);font-variant-numeric:tabular-nums;white-space:nowrap}.iph-caret{flex:none;width:.42rem;height:.42rem;border-right:1.5px solid var(--color-sand-600);border-bottom:1.5px solid var(--color-sand-600);transform:rotate(45deg) translateY(-20%)}.iph-panel{position:absolute;z-index:60;top:calc(100% + .4rem);left:0;width:-moz-max-content;width:max-content;min-width:100%;max-width:min(21rem,calc(100vw - 2rem));background:#fff;border:1.5px solid var(--color-sand-900);border-radius:.75rem;box-shadow:0 10px 30px #0d201b2e;overflow:hidden}.iph-search{width:100%;border:0;border-bottom:1px solid var(--color-sand-300);padding:.65rem .9rem;font:inherit;font-size:.95rem;color:var(--color-sand-900);background:#fff;border-radius:0}.iph-search:focus{outline:none}.iph-list{list-style:none;margin:0;padding:.3rem 0;max-height:15rem;overflow-y:auto;overscroll-behavior:contain}.iph-item{display:flex;align-items:center;gap:.55rem;width:100%;padding:.42rem .9rem;background:none;border:0;font:inherit;font-size:.95rem;color:var(--color-sand-900);cursor:pointer;text-align:left}.iph-item:hover,.iph-item.is-hi{background:var(--color-sand-200)}.iph-item[aria-selected=true] .iph-name{font-weight:600}.iph-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.iph-item .iph-dial{font-size:.85rem;color:var(--color-sand-600)}.iph-empty{margin:0;padding:.6rem .9rem;font-size:.9rem;color:var(--color-sand-600)}
3</style>
4<link rel="stylesheet" href="/_astro/contact.C-4J0TZO.css">
5<link rel="stylesheet" href="/_astro/_slug_.CaTaghe6.css">
5<script type="module" src="/_astro/page.DZZVrAzF.js"></script>
5</head> <body>  
5<script>(function(){const LOCALES = ["en","ja","de","it","pl","fr","ko","es","pt","pt-br","tr","th","nl","vi"];
6const NON_DEFAULT = ["ja","de","it","pl","fr","ko","es","pt","pt-br","tr","th","nl","vi"];
7const DEFAULT_LOCALE = "en";
8const AVAILABLE = ["ja","de","it","pl","fr","ko","es","pt","pt-br","tr","th","nl","vi"];
9const COPY = {"ja":{"prompt":"このページを次の言語で表示","view":"表示","dismiss":"閉じる","label":"日本語"},"de":{"prompt":"Diese Seite anzeigen auf","view":"Anzeigen","dismiss":"Schließen","label":"Deutsch"},"it":{"prompt":"Visualizza questa pagina in","view":"Visualizza","dismiss":"Chiudi","label":"Italiano"},"pl":{"prompt":"Wyświetl tę stronę w","view":"Wyświetl","dismiss":"Zamknij","label":"Polski"},"fr":{"prompt":"Afficher cette page en","view":"Afficher","dismiss":"Fermer","label":"Français"},"ko":{"prompt":"이 페이지를 다음 언어로 보기","view":"보기","dismiss":"닫기","label":"한국어"},"es":{"prompt":"Ver esta página en","view":"Ver","dismiss":"Descartar","label":"Español"},"pt":{"prompt":"Ver esta página em","view":"Ver","dismiss":"Dispensar","label":"Português (Portugal)"},"pt-br":{"prompt":"Veja esta página em","view":"Ver","dismiss":"Fechar","label":"Português (Brasil)"},"tr":{"prompt":"Bu sayfayı görüntüleyin","view":"Görüntüle","dismiss":"Kapat","label":"Türkçe"},"th":{"prompt":"ดูหน้านี้ใน","view":"ดู","dismiss":"ปิด","label":"ไทย"},"nl":{"prompt":"Bekijk deze pagina in","view":"Bekijken","dismiss":"Sluiten","label":"Nederlands"},"vi":{"prompt":"Xem trang này bằng","view":"Xem","dismiss":"Đóng","label":"Tiếng Việt"}};
10
11  (function () {
12    try {
13      // Never act for automation/crawlers we can detect.
14      if (navigator.webdriver) return;
15      var langs = navigator.languages && navigator.languages.length ? navigator.languages : [navigator.language];
16      if (!langs || !langs.length) return;
17
18      function readCookie(n) {
19        var m = document.cookie.match('(^|;)\\s*' + n + '\\s*=\\s*([^;]+)');
20        return m ? m[2] : null;
21      }
22      function setCookie(n, v) {
23        document.cookie = n + '=' + v + ';path=/;max-age=31536000;samesite=lax';
24      }
25
26      // Match the full tag first, then fall back to the base language — a bare
27      // slice(0,2) breaks region-qualified locales in both directions.
28      var current = (document.documentElement.lang || 'en').toLowerCase();
29      if (LOCALES.indexOf(current) < 0) current = current.split('-')[0];
30      var path = location.pathname;
31      var hasPrefix = NON_DEFAULT.some(function (l) {
32        return path === '/' + l || path.indexOf('/' + l + '/') === 0;
33      });
34
35      // First supported locale among the browser's ordered preferences. Prefer an
36      // exact region match (pt-BR → pt-br) over the base language (pt-BR → pt).
37      var preferred = null;
38      for (var i = 0; i < langs.length; i++) {
39        var full = (langs[i] || '').toLowerCase();
40        if (LOCALES.indexOf(full) >= 0) { preferred = full; break; }
41        var base = full.split('-')[0];
42        if (LOCALES.indexOf(base) >= 0) { preferred = base; break; }
43      }
44
45      var cookie = readCookie('pref_lang');
46      var chosen = cookie && LOCALES.indexOf(cookie) >= 0 ? cookie : null;
47      var desired = chosen || preferred;
48      if (!desired) return;
49
50      if (!hasPrefix) {
51        // On an English URL: redirect to the desired locale only if THIS page is
52        // actually translated into it (else the /ja/ URL is just English anyway).
53        if (desired !== DEFAULT_LOCALE && AVAILABLE.indexOf(desired) >= 0) {
54          if (!chosen) setCookie('pref_lang', desired);
55          location.replace('/' + desired + path + location.search + location.hash);
56          return;
57        }
58        return;
59      }
60
61      // On a localized URL: if the browser prefers a DIFFERENT language that this
62      // page is genuinely translated into, and the user hasn't settled on the
63      // current one, offer a banner.
64      if (preferred && preferred !== current && chosen !== current && AVAILABLE.indexOf(preferred) >= 0) {
65        showBanner(preferred);
66      }
67
68      function showBanner(loc) {
69        if (document.getElementById('z2-lang-banner')) return;
70        var c = COPY[loc];
71        if (!c) return;
72        var rest = path.replace(new RegExp('^/' + current + '(?=/|$)'), '') || '/';
73        var href = '/' + loc + (rest === '/' ? '' : rest) + location.search + location.hash;
74
75        var bar = document.createElement('div');
76        bar.id = 'z2-lang-banner';
77        bar.setAttribute('role', 'region');
78        bar.setAttribute('aria-label', c.label);
79        bar.style.cssText =
80          'position:fixed;left:50%;transform:translateX(-50%);bottom:16px;z-index:9998;' +
81          'background:#231C13;color:#fff;border-radius:9999px;padding:10px 16px;display:flex;' +
82          'align-items:center;gap:14px;font:14px/1.2 system-ui,-apple-system,sans-serif;' +
83          'box-shadow:0 8px 24px rgba(0,0,0,.25);max-width:92vw';
84
85        var span = document.createElement('span');
86        span.textContent = c.prompt + ' ' + c.label + '?';
87
88        var view = document.createElement('a');
89        view.href = href;
90        view.textContent = c.view;
91        view.style.cssText =
92          'color:#231C13;background:#8CC04F;border-radius:9999px;padding:6px 14px;' +
93          'text-decoration:none;font-weight:600;white-space:nowrap';
94        view.addEventListener('click', function () { setCookie('pref_lang', loc); });
95
96        var x = document.createElement('button');
97        x.type = 'button';
98        x.setAttribute('aria-label', c.dismiss);
99        x.textContent = '✕';
100        x.style.cssText = 'background:none;border:0;color:rgba(255,255,255,.6);cursor:pointer;font-size:14px;line-height:1';
101        x.addEventListener('click', function () { setCookie('pref_lang', current); bar.remove(); });
102
103        bar.appendChild(span);
104        bar.appendChild(view);
105        bar.appendChild(x);
106        document.body.appendChild(bar);
107      }
108    } catch (e) {}
109  })();
110})();</script>
110  
110<script>(function(){const NDL = ["ja","de","it","pl","fr","ko","es","pt","pt-br","tr","th","nl","vi"];
111
112    (function () {
113      var seg = location.pathname.split('/')[1];
114      if (NDL.indexOf(seg) === -1) return;
115      var p = '/' + seg;
116      function hasLocalePrefix(h) {
117        for (var k = 0; k < NDL.length; k++) {
118          var q = '/' + NDL[k];
119          if (h === q || h.indexOf(q + '/') === 0) return true;
120        }
121        return false;
122      }
123      function fix(root) {
124        var links = (root || document).querySelectorAll('a[href^="/"]');
125        for (var i = 0; i < links.length; i++) {
126          var a = links[i], h = a.getAttribute('href');
127          if (!h || h.charAt(0) !== '/' || h.indexOf('//') === 0) continue;
128          if (hasLocalePrefix(h)) continue;                              // already localized
129          if (h.indexOf('/api/') === 0 || h.indexOf('/og/') === 0) continue;
130          if (a.hasAttribute('hreflang') || a.hasAttribute('data-no-localize')) continue;
131          a.setAttribute('href', p + h);
132        }
133      }
134      function run() { fix(document); }
135      if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run);
136      else run();
137      // Re-run if components inject links after load (mega-menus, carousels).
138      try { new MutationObserver(function (m) { for (var i = 0; i < m.length; i++) for (var j = 0; j < m[i].addedNodes.length; j++) { var n = m[i].addedNodes[j]; if (n.nodeType === 1) fix(n.querySelectorAll ? n : document); } }).observe(document.body, { childList: true, subtree: true }); } catch (e) {}
139    })();
140  })();</script>
vendor: 70 bytes, line 140
140  <noscript> <iframe src="https://www.googletagmanager.com/ns.html?id=
140GTM-TFT483R
vendor: 85 bytes, line 140
140" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript>  
140<style>iframe[src*="hs-web-interactive"],iframe[src*="hs-sites.com"]{display:none!important}</style> 
140<script>
141    (function () {
142      function overlayOf(ifr) {
143        // Walk up to the outermost positioned container HubSpot injects (its
144        // backdrop), staying inside HubSpot's own appended subtree, and drop it
145        // so no ghost overlay blocks clicks. Falls back to the iframe itself.
146        var el = ifr, top = ifr;
147        for (var i = 0; i < 6 && el && el !== document.body; i++) {
148          var pos = getComputedStyle(el).position;
149          if (pos === 'fixed' || pos === 'absolute') top = el;
150          el = el.parentElement;
151        }
152        return top || ifr;
153      }
154      function sweep(node) {
155        if (!(node instanceof HTMLElement)) return;
156        var sel = 'iframe[src*="hs-web-interactive"],iframe[src*="hs-sites.com"]';
157        var ifr = node.matches && node.matches(sel) ? node : (node.querySelector && node.querySelector(sel));
158        if (ifr) overlayOf(ifr).remove();
159      }
160      // Belt-and-suspenders: also close via HubSpot's supported CTA SDK.
161      window.hsCallsToActionReady = window.hsCallsToActionReady || [];
162      window.hsCallsToActionReady.push(function () {
163        try { window.HubSpotCallsToActions.closeAll(); } catch (e) {}
164      });
165      new MutationObserver(function (muts) {
166        for (var m = 0; m < muts.length; m++) {
167          for (var n = 0; n < muts[m].addedNodes.length; n++) sweep(muts[m].addedNodes[n]);
168        }
169      }).observe(document.documentElement, { childList: true, subtree: true });
170    })();
171  </script>
171   <header id="site-header" class="z-50 bg-sand-100 transition-colors duration-200 relative" data-astro-cid-hnhh3bfe> <div class="container relative" data-astro-cid-hnhh3bfe> <div id="header-inner" class="flex items-center justify-between h-20 relative z-[2]" data-astro-cid-hnhh3bfe>  <div class="flex items-center gap-8" data-astro-cid-hnhh3bfe>  <a href="/" id="header-logo" class="flex items-center flex-shrink-0" aria-label="Z2 home" data-astro-cid-hnhh3bfe> <img src="/brand/01-Logos/02-Digital/Positive/Z2_Logo_POS_RGB_trimmed.svg" alt="Z2" width="80" height="32" class="h-8 w-auto" data-astro-cid-hnhh3bfe> </a>      <nav id="main-nav" class="hidden lg:flex items-center gap-1" aria-label="Main navigation" data-astro-cid-hnhh3bfe>  <button id="btn-products" aria-expanded="false" aria-controls="mega-products" class="mega-trigger flex items-center gap-1.5 whitespace-nowrap px-4 py-2 text-base font-medium text-sand-800 hover:text-sand-900 transition-colors duration-150" data-menu="products" data-astro-cid-hnhh3bfe> Products <svg id="chevron-products" class="w-3.5 h-3.5 opacity-50 transition-transform duration-200" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5" data-astro-cid-hnhh3bfe> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7" data-astro-cid-hnhh3bfe></path> </svg> </button>  <button id="btn-solutions" aria-expanded="false" aria-controls="mega-solutions" class="mega-trigger flex items-center gap-1.5 whitespace-nowrap px-4 py-2 text-base font-medium text-sand-800 hover:text-sand-900 transition-colors duration-150" data-menu="solutions" data-astro-cid-hnhh3bfe> Solutions for <svg id="chevron-solutions" class="w-3.5 h-3.5 opacity-50 transition-transform duration-200" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5" data-astro-cid-hnhh3bfe> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7" data-astro-cid-hnhh3bfe></path> </svg> </button>  <a href="/our-data" class="nav-flat-link px-4 py-2 text-base font-medium transition-colors duration-150 text-sand-800 hover:text-sand-900" data-astro-cid-hnhh3bfe> Our Data </a><a href="/our-ai" class="nav-flat-link px-4 py-2 text-base font-medium transition-colors duration-150 text-sand-800 hover:text-sand-900" data-astro-cid-hnhh3bfe> Our AI </a> </nav>   </div>  <div class="hidden lg:flex items-center gap-5" data-astro-cid-hnhh3bfe>  <div class="z2-langsw z2-langsw--header" data-langsw data-astro-cid-fhi4yxem> <button type="button" class="z2-langsw__btn" aria-haspopup="true" aria-expanded="false" aria-label="Choose your language" data-langsw-btn data-astro-cid-fhi4yxem> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="20" height="20" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" data-astro-cid-fhi4yxem="true" class="lucide lucide-globe z2-langsw__globe">  <circle cx="12" cy="12" r="10"></circle> <path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path> <path d="M2 12h20"></path>  </svg>  <span class="sr-only" data-astro-cid-fhi4yxem>English</span>  </button> <ul class="z2-langsw__panel" role="menu" data-langsw-panel data-astro-cid-fhi4yxem> <li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="en" data-locale="en" href="/contact/" class="z2-langsw__opt is-active" aria-current="true" data-astro-cid-fhi4yxem> English </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="ja" data-locale="ja" href="/ja/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> 日本語 </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="de" data-locale="de" href="/de/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Deutsch </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="it" data-locale="it" href="/it/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Italiano </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="pl" data-locale="pl" href="/pl/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Polski </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="fr" data-locale="fr" href="/fr/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Français </a> </li><li role="none" data-astro-cid-fhi4yxem>
171 <a role="menuitem" hreflang="ko" data-locale="ko" href="/ko/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> 한국어 </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="es" data-locale="es" href="/es/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Español </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="pt" data-locale="pt" href="/pt/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Português (Portugal) </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="pt-BR" data-locale="pt-br" href="/pt-br/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Português (Brasil) </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="tr" data-locale="tr" href="/tr/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Türkçe </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="th" data-locale="th" href="/th/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> ไทย </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="nl" data-locale="nl" href="/nl/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Nederlands </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="vi" data-locale="vi" href="/vi/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Tiếng Việt </a> </li> </ul> </div>  
171<script type="module">(()=>{if(window.__z2LangSwInit)return;window.__z2LangSwInit=!0;const i=a=>{document.querySelectorAll("[data-langsw].is-open").forEach(n=>{n!==a&&(n.classList.remove("is-open"),n.querySelector("[data-langsw-btn]")?.setAttribute("aria-expanded","false"))})},l=a=>{if(!a.classList.contains("z2-langsw--footer"))return;const n=a.querySelector("[data-langsw-btn]"),t=a.querySelector("[data-langsw-panel]");if(!n||!t)return;const o=n.getBoundingClientRect();if(t.style.top="auto",t.style.bottom=`${Math.round(window.innerHeight-o.top+8)}px`,t.style.maxHeight="",window.innerWidth<640){t.style.left="0px",t.style.right="0px";const g=Math.round(o.top-8-12);t.style.maxHeight=`${Math.max(160,g)}px`;return}const e=8,s=t.offsetWidth||256,c=Math.max(e,window.innerWidth-s-e),d=Math.min(Math.max(Math.round(o.left),e),c);t.style.left=`${d}px`,t.style.right="auto"},r=()=>{document.querySelectorAll("[data-langsw].z2-langsw--footer.is-open").forEach(l)};window.addEventListener("resize",r),window.addEventListener("scroll",r,{passive:!0}),document.addEventListener("click",a=>{const n=a.target,t=n.closest("[data-langsw] .z2-langsw__opt");if(t){const e=t.getAttribute("data-locale");e&&(document.cookie=`pref_lang=${e};path=/;max-age=31536000;samesite=lax`);return}const o=n.closest("[data-langsw-btn]");if(o){const e=o.closest("[data-langsw]"),s=!e.classList.contains("is-open");i(s?e:null),s&&l(e),e.classList.toggle("is-open",s),o.setAttribute("aria-expanded",String(s));return}n.closest("[data-langsw]")||i()}),document.addEventListener("keydown",a=>{a.key==="Escape"&&i()})})();</script>
171 <a href="/demo" class="inline-flex items-center gap-1.5 rounded-full bg-signal-400 hover:bg-primary-deep border-2 border-primary-deep text-sand-900 hover:text-sand-100 text-sm font-medium px-5 py-2 transition-colors" data-astro-cid-hnhh3bfe> See a Demo </a> </div>  <div class="flex items-center gap-0.5 lg:hidden" data-astro-cid-hnhh3bfe>  <button id="mobile-lang-btn" class="p-2 rounded-md text-sand-800 hover:text-sand-900 hover:bg-sand-200 transition-colors" aria-label="Choose your language" aria-expanded="false" aria-controls="mobile-lang-menu" data-astro-cid-hnhh3bfe> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" data-astro-cid-hnhh3bfe="true" class="lucide lucide-globe w-6 h-6">  <circle cx="12" cy="12" r="10"></circle> <path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path> <path d="M2 12h20"></path>  </svg> </button>  <button id="mobile-menu-btn" class="p-2 rounded-md text-sand-800 hover:text-sand-900 hover:bg-sand-200 transition-colors" aria-label="Open menu" aria-expanded="false" aria-controls="mobile-menu" data-astro-cid-hnhh3bfe> <svg id="menu-icon-open" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" data-astro-cid-hnhh3bfe> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" data-astro-cid-hnhh3bfe></path> </svg> <svg id="menu-icon-close" class="w-6 h-6 hidden" fill="none" viewBox="0 0 24 24" stroke="currentColor" data-astro-cid-hnhh3bfe> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-astro-cid-hnhh3bfe></path> </svg> </button> </div> </div>  <div id="mega-stack" class="mega-stack hidden lg:block absolute left-0 top-full" style="width: 100%;" data-astro-cid-hnhh3bfe> <div id="mega-clip" class="mega-clip" data-astro-cid-hnhh3bfe>  <div id="mega-products" role="region" aria-label="Products menu" class="mega-panel bg-white" data-astro-cid-hnhh3bfe> <div class="flex items-stretch" data-astro-cid-hnhh3bfe>  <div class="nav-product-frame flex-shrink-0 flex flex-col" data-astro-cid-hnhh3bfe>  <span class="nav-corner nav-corner--tl" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span class="nav-corner nav-corner--tr" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span class="nav-corner nav-corner--bl" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span class="nav-corner nav-corner--br" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <ul class="divide-y divide-sand-600 border-t border-sand-600 flex-1 flex flex-col" data-astro-cid-hnhh3bfe> <li class="flex-1 flex" data-astro-cid-hnhh3bfe> <a href="/products/part-risk-manager" class="group flex flex-1 items-start gap-5 py-4 px-5 transition-colors duration-150 hover:bg-sand-100" data-astro-cid-hnhh3bfe>  <img src="/brand/06-Product-Icons/Part-Risk-Manager/Z2_Product_Icons_Part-Risk-Manager.svg" alt="Part Risk Manager" class="flex-shrink-0 w-8 h-8 object-contain mt-0.5" aria-hidden="true" data-astro-cid-hnhh3bfe>  <div class="flex-1 min-w-0" data-astro-cid-hnhh3bfe> <p class="text-xl font-semibold text-sand-900 mb-1" data-astro-cid-hnhh3bfe>Part Risk Manager</p> <p class="text-sm text-sand-500 leading-snug" data-astro-cid-hnhh3bfe>Component intelligence across 1B+ electronic parts.</p> </div> </a> </li><li class="flex-1 flex" data-astro-cid-hnhh3bfe> <a href="/products/compliance-manager" class="group flex flex-1 items-start gap-5 py-4 px-5 transition-colors duration-150 hover:bg-sand-100" data-astro-cid-hnhh3bfe>  <img src="/brand/06-Product-Icons/Compliance-Manager/Z2_Product_Icons_Compliance-Manager.svg" alt="Compliance Manager" class="flex-shrink-0 w-8 h-8 object-contain mt-0.5" aria-hidden="true" data-astro-cid-hnhh3bfe>  <div class="flex-1 min-w-0" data-astro-cid-hnhh3bfe> <p class="text-xl font-semibold text-sand-900 mb-1" data-astro-cid-hnhh3bfe>Compliance Manager</p> <p class="text-sm text-sand-500 leading-snug" data-astro-cid-hnhh3bfe>Assess parts against 270+ global regulations.</p> </div> </a> </li><li class="flex-1 flex" data-astro-cid-hnhh3bfe> <a href="/products/supply-chain-watch" class="group flex flex-1 items-start gap-5 py-4 px-5 transition-colors duration-150 hover:bg-sand-100" data-astro-cid-hnhh3bfe>  <img src="/brand/06-Product-Icons/Supply-Chain-Watch/Z2_Product_Icons_Supply-Chain-Watch.svg" alt="Supply Chain Watch" class="flex-shrink-0 w-8 h-8 object-contain mt-0.5" aria-hidden="true" data-astro-cid-hnhh3bfe>  <div class="flex-1 min-w-0" data-astro-cid-hnhh3bfe> <p class="text-xl font-semibold text-sand-900 mb-1" data-astro-cid-hnhh3bfe>Supply Chain Watch</p> <p class="text-sm text-sand-500 leading-snug" data-astro-cid-hnhh3bfe>Map and monitor your manufacturing supply chain.</p> </div> </a> </li><li class="flex-1 flex" data-astro-cid-hnhh3bfe> <a href="/products/supplier-insights" class="group flex flex-1 items-start gap-5 py-4 px-5 transition-colors duration-150 hover:bg-sand-100" data-astro-cid-hnhh3bfe>  <img src="/brand/06-Product-Icons/Supplier-Insights/Z2_Product_Icons_Supplier-Insights.svg" alt="Supplier Insights" class="flex-shrink-0 w-8 h-8 object-contain mt-0.5" aria-hidden="true" data-astro-cid-hnhh3bfe>  <div class="flex-1 min-w-0" data-astro-cid-hnhh3bfe> <p class="text-xl font-semibold text-sand-900 mb-1" data-astro-cid-hnhh3bfe>Supplier Insights</p> <p class="text-sm text-sand-500 leading-snug" data-astro-cid-hnhh3bfe>Risk profiles for 1M+ suppliers worldwide.</p> </div> </a> </li> </ul> </div>  <div class="nav-mega-sidebar flex-1 flex flex-col" data-astro-cid-hnhh3bfe>  <a href="/products/enterprise-hub" class="nav-sidebar-hub group relative flex flex-col p-7 overflow-hidden" aria-label="Z2 Enterprise Hub" data-astro-cid-hnhh3bfe>  <img src="/images/z2-logo-pixels.svg" alt="" aria-hidden="true" class="nav-sidebar-deco" loading="lazy" decoding="async" width="800" height="800" data-astro-cid-hnhh3bfe>  <div class="relative z-10" data-astro-cid-hnhh3bfe> <h3 class="nav-sidebar-hub-title" data-astro-cid-hnhh3bfe>Z2 Enterprise Hub</h3> <p class="nav-sidebar-hub-desc" data-astro-cid-hnhh3bfe> Unified risk visibility across parts, suppliers, compliance, and minerals: one integration, one workflow. </p> </div> </a>  <a href="/our-ai" class="nav-sidebar-ai group relative flex flex-col p-6 overflow-hidden" aria-label="AI for Supply Chain" data-astro-cid-hnhh3bfe>  <span class="nav-ai-grid" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <div class="relative z-10" data-astro-cid-hnhh3bfe> <h3 class="nav-sidebar-ai-title" data-astro-cid-hnhh3bfe>AI for Supply Chain</h3> <p class="nav-sidebar-ai-desc" data-astro-cid-hnhh3bfe>Autonomous agents surface risks before they become disruptions.</p> </div> </a>  <a href="/professional-services" class="nav-sidebar-svc group relative flex flex-col p-6 overflow-hidden" aria-label="Professional Services" data-astro-cid-hnhh3bfe> <div data-astro-cid-hnhh3bfe> <h3 class="nav-sidebar-svc-title" data-astro-cid-hnhh3bfe>Professional Services</h3> <p class="nav-sidebar-svc-desc" data-astro-cid-hnhh3bfe>We fill your data gaps so your program runs clean.</p> </div> </a> </div> </div> </div>  <div id="mega-solutions" role="region" aria-label="Solutions menu" class="mega-panel bg-white" data-astro-cid-hnhh3bfe> <div class="nav-sol-grid" data-astro-cid-hnhh3bfe>  <div class="nav-sol-col" data-astro-cid-hnhh3bfe> <p class="nav-sol-col-header" data-astro-cid-hnhh3bfe>Topics</p> <ul data-astro-cid-hnhh3bfe> <li data-astro-cid-hnhh3bfe> <a href="/solutions/supply-chain-risk-management" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-Risk-Score" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Supply Chain Risk Management</span> </a> </li><li data-astro-cid-hnhh3bfe> <a href="/solutions/compliance-and-sustainability" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-growth-grow-leafs" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Compliance &amp; Sustainability</span> </a> </li><li data-astro-cid-hnhh3bfe> <a href="/solutions/electronic-supply-chain" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-processor-chip" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Electronics Supply Chain</span> </a> </li> </ul> </div>  <div class="nav-sol-col" data-astro-cid-hnhh3bfe> <p class="nav-sol-col-header" data-astro-cid-hnhh3bfe>Teams</p> <ul data-astro-cid-hnhh3bfe> <li data-astro-cid-hnhh3bfe> <a href="/solutions/engineering" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-Gear-Icon" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Engineering</span> </a> </li><li data-astro-cid-hnhh3bfe>
171 <a href="/solutions/procurement" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-shoppingcart" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Procurement</span> </a> </li><li data-astro-cid-hnhh3bfe> <a href="/solutions/supply-chain" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-Supply-Chain" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Supply Chain</span> </a> </li><li data-astro-cid-hnhh3bfe> <a href="/solutions/compliance" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-Supplier-Compliance" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Compliance</span> </a> </li><li data-astro-cid-hnhh3bfe> <a href="/solutions/leadership" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-Dashboard" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Leadership</span> </a> </li> </ul> </div>  <div class="nav-sol-col" data-astro-cid-hnhh3bfe> <p class="nav-sol-col-header" data-astro-cid-hnhh3bfe>Industries</p> <ul data-astro-cid-hnhh3bfe> <li data-astro-cid-hnhh3bfe> <a href="/industries/aerospace-defense" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-Aviation" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Aerospace &amp; Defense</span> </a> </li><li data-astro-cid-hnhh3bfe> <a href="/industries/automotive" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-Automotive2" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Automotive</span> </a> </li><li data-astro-cid-hnhh3bfe> <a href="/industries/consumer-electronics" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-Computer-and-Office-Products" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Consumer Electronics</span> </a> </li><li data-astro-cid-hnhh3bfe> <a href="/industries/medical-devices" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-Health-Disease" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Medical Devices</span> </a> </li><li data-astro-cid-hnhh3bfe> <a href="/industries/telecommunications" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-RF" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Telecommunications</span> </a> </li><li data-astro-cid-hnhh3bfe> <a href="/industries/industrial" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-factory-industrial" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Industrial</span> </a> </li><li data-astro-cid-hnhh3bfe> <a href="/industries/robotics" class="nav-sol-link" data-astro-cid-hnhh3bfe> <span class="nav-sol-ico icon-Sensors" aria-hidden="true" data-astro-cid-hnhh3bfe></span> <span data-astro-cid-hnhh3bfe>Robotics</span> </a> </li> </ul> </div> </div> </div> </div> </div> </div>  <div id="mobile-menu" class="hidden lg:hidden border-t border-sand-600 bg-sand-100" data-astro-cid-hnhh3bfe> <div class="container py-2" data-astro-cid-hnhh3bfe>  <details class="group border-b border-sand-600" data-astro-cid-hnhh3bfe> <summary class="flex items-center justify-between px-3 py-3.5 text-sm font-semibold text-sand-800 cursor-pointer select-none list-none" data-astro-cid-hnhh3bfe> Products <svg class="w-4 h-4 text-sand-500 flex-shrink-0 transition-transform duration-200 group-open:rotate-180" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" data-astro-cid-hnhh3bfe> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7" data-astro-cid-hnhh3bfe></path> </svg> </summary> <div class="pb-3 space-y-1" data-astro-cid-hnhh3bfe> <a href="/products/part-risk-manager" class="block px-3 py-2 rounded-md hover:bg-sand-200 transition-colors" data-astro-cid-hnhh3bfe> <span class="block text-sm font-semibold text-sand-800 hover:text-sand-900" data-astro-cid-hnhh3bfe>Part Risk Manager</span> <span class="block text-xs text-sand-500 mt-0.5" data-astro-cid-hnhh3bfe>
171Component intelligence across 1B+ electronic parts.</span> </a><a href="/products/compliance-manager" class="block px-3 py-2 rounded-md hover:bg-sand-200 transition-colors" data-astro-cid-hnhh3bfe> <span class="block text-sm font-semibold text-sand-800 hover:text-sand-900" data-astro-cid-hnhh3bfe>Compliance Manager</span> <span class="block text-xs text-sand-500 mt-0.5" data-astro-cid-hnhh3bfe>Assess parts against 270+ global regulations.</span> </a><a href="/products/supply-chain-watch" class="block px-3 py-2 rounded-md hover:bg-sand-200 transition-colors" data-astro-cid-hnhh3bfe> <span class="block text-sm font-semibold text-sand-800 hover:text-sand-900" data-astro-cid-hnhh3bfe>Supply Chain Watch</span> <span class="block text-xs text-sand-500 mt-0.5" data-astro-cid-hnhh3bfe>Map and monitor your manufacturing supply chain.</span> </a><a href="/products/supplier-insights" class="block px-3 py-2 rounded-md hover:bg-sand-200 transition-colors" data-astro-cid-hnhh3bfe> <span class="block text-sm font-semibold text-sand-800 hover:text-sand-900" data-astro-cid-hnhh3bfe>Supplier Insights</span> <span class="block text-xs text-sand-500 mt-0.5" data-astro-cid-hnhh3bfe>Risk profiles for 1M+ suppliers worldwide.</span> </a>  <div class="mt-2 pt-2 border-t border-sand-600 space-y-1" data-astro-cid-hnhh3bfe> <a href="/products/enterprise-hub" class="block px-3 py-2 rounded-md hover:bg-sand-200 transition-colors" data-astro-cid-hnhh3bfe> <span class="block text-sm font-semibold text-sand-800 hover:text-sand-900" data-astro-cid-hnhh3bfe>Z2 Enterprise Hub</span> <span class="block text-xs text-sand-500 mt-0.5" data-astro-cid-hnhh3bfe>Unified risk visibility across parts, suppliers, compliance, and minerals: one integration, one workflow.</span> </a> <a href="/professional-services" class="block px-3 py-2 rounded-md hover:bg-sand-200 transition-colors" data-astro-cid-hnhh3bfe> <span class="block text-sm font-semibold text-sand-800 hover:text-sand-900" data-astro-cid-hnhh3bfe>Professional Services</span> <span class="block text-xs text-sand-500 mt-0.5" data-astro-cid-hnhh3bfe>We fill your data gaps so your program runs clean.</span> </a> </div> </div> </details>  <details class="group border-b border-sand-600" data-astro-cid-hnhh3bfe> <summary class="flex items-center justify-between px-3 py-3.5 text-sm font-semibold text-sand-800 cursor-pointer select-none list-none" data-astro-cid-hnhh3bfe> Solutions <svg class="w-4 h-4 text-sand-500 flex-shrink-0 transition-transform duration-200 group-open:rotate-180" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" data-astro-cid-hnhh3bfe> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7" data-astro-cid-hnhh3bfe></path> </svg> </summary> <div class="pb-3" data-astro-cid-hnhh3bfe> <p class="px-3 pt-2 pb-1.5 text-[10px] font-semibold uppercase tracking-widest text-sand-500" data-astro-cid-hnhh3bfe>Teams</p> <div class="space-y-0.5" data-astro-cid-hnhh3bfe> <a href="/solutions/engineering" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Engineering </a><a href="/solutions/procurement" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Procurement </a><a href="/solutions/supply-chain" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Supply Chain </a><a href="/solutions/compliance" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Compliance </a><a href="/solutions/leadership" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Leadership </a> </div> <p class="px-3 pt-3 pb-1.5 text-[10px] font-semibold uppercase tracking-widest text-sand-500" data-astro-cid-hnhh3bfe>Industries</p> <div class="space-y-0.5" data-astro-cid-hnhh3bfe> <a href="/industries/aerospace-defense" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Aerospace &amp; Defense </a><a href="/industries/automotive" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Automotive </a><a href="/industries/consumer-electronics" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Consumer Electronics </a><a href="/industries/medical-devices" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Medical Devices </a><a href="/industries/telecommunications" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Telecommunications </a><a href="/industries/industrial" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Industrial </a><a href="/industries/robotics" class="block px-3 py-2.5 text-sm text-sand-700 hover:text-sand-900 hover:bg-sand-200 rounded-md transition-colors" data-astro-cid-hnhh3bfe> Robotics </a> </div> </div> </details>  <div class="border-b border-sand-600" data-astro-cid-hnhh3bfe> <a href="/our-data" class="block px-3 py-3.5 text-sm font-medium text-sand-800 hover:text-sand-900 hover:bg-sand-200 transition-colors" data-astro-cid-hnhh3bfe>Our Data</a> <a href="/our-ai" class="block px-3 py-3.5 text-sm font-medium text-sand-800 hover:text-sand-900 hover:bg-sand-200 transition-colors" data-astro-cid-hnhh3bfe>Our AI</a> </div>  <div class="pt-4 pb-5 flex flex-col gap-3" data-astro-cid-hnhh3bfe> <a href="/demo" class="inline-flex items-center justify-center gap-1.5 rounded-full bg-signal-400 hover:bg-primary-deep border-2 border-primary-deep text-sand-900 hover:text-sand-100 text-sm font-medium px-5 py-2.5 transition-colors" data-astro-cid-hnhh3bfe> See a Demo </a> </div> </div> </div>  <div id="mobile-lang-menu" class="hidden lg:hidden border-t border-sand-600 bg-sand-100" data-astro-cid-hnhh3bfe> <div class="container py-4" data-astro-cid-hnhh3bfe> <div class="flex items-center gap-2 mb-3 text-[10px] font-semibold uppercase tracking-widest text-sand-500" data-astro-cid-hnhh3bfe> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="14" height="14" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" data-astro-cid-hnhh3bfe="true" class="lucide lucide-globe text-sand-700">  <circle cx="12" cy="12" r="10"></circle> <path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path> <path d="M2 12h20"></path>  </svg> <span data-astro-cid-hnhh3bfe>Language</span> </div> <ul class="grid grid-cols-2 min-[420px]:grid-cols-3 gap-x-2 gap-y-1" data-astro-cid-hnhh3bfe> <li data-astro-cid-hnhh3bfe> <a href="/contact/" hreflang="en" data-locale="en" aria-current="true" class="block px-3 py-2.5 rounded-md text-sm transition-colors bg-sand-900 text-white font-medium" data-astro-cid-hnhh3bfe> English </a> </li><li data-astro-cid-hnhh3bfe> <a href="/ja/contact/" hreflang="ja" data-locale="ja" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> 日本語 </a> </li><li data-astro-cid-hnhh3bfe> <a href="/de/contact/" hreflang="de" data-locale="de" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> Deutsch </a> </li><li data-astro-cid-hnhh3bfe> <a href="/it/contact/" hreflang="it" data-locale="it" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> Italiano </a> </li><li data-astro-cid-hnhh3bfe> <a href="/pl/contact/" hreflang="pl" data-locale="pl" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> Polski </a> </li><li data-astro-cid-hnhh3bfe> <a href="/fr/contact/" hreflang="fr" data-locale="fr" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> Français </a> </li><li data-astro-cid-hnhh3bfe>
171 <a href="/ko/contact/" hreflang="ko" data-locale="ko" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> 한국어 </a> </li><li data-astro-cid-hnhh3bfe> <a href="/es/contact/" hreflang="es" data-locale="es" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> Español </a> </li><li data-astro-cid-hnhh3bfe> <a href="/pt/contact/" hreflang="pt" data-locale="pt" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> Português (Portugal) </a> </li><li data-astro-cid-hnhh3bfe> <a href="/pt-br/contact/" hreflang="pt-BR" data-locale="pt-br" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> Português (Brasil) </a> </li><li data-astro-cid-hnhh3bfe> <a href="/tr/contact/" hreflang="tr" data-locale="tr" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> Türkçe </a> </li><li data-astro-cid-hnhh3bfe> <a href="/th/contact/" hreflang="th" data-locale="th" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> ไทย </a> </li><li data-astro-cid-hnhh3bfe> <a href="/nl/contact/" hreflang="nl" data-locale="nl" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> Nederlands </a> </li><li data-astro-cid-hnhh3bfe> <a href="/vi/contact/" hreflang="vi" data-locale="vi" class="block px-3 py-2.5 rounded-md text-sm transition-colors text-sand-800 hover:bg-sand-200" data-astro-cid-hnhh3bfe> Tiếng Việt </a> </li> </ul> </div> </div> </header>  <div id="header-logo-ctx" role="menu" aria-label="Logo options" class="fixed z-[9999] hidden" data-astro-cid-hnhh3bfe> <div class="bg-white border border-sand-600 rounded shadow-md overflow-hidden min-w-[190px] font-sans" data-astro-cid-hnhh3bfe>  <button data-logo-action="newtab" role="menuitem" class="flex items-center gap-2.5 w-full px-3.5 py-2.5 text-sm font-medium text-sand-800 hover:bg-sand-100 transition-colors text-left" data-astro-cid-hnhh3bfe> <svg class="w-4 h-4 text-sand-500 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.75" aria-hidden="true" data-astro-cid-hnhh3bfe> <path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" data-astro-cid-hnhh3bfe></path> </svg> Open in new tab </button> <div class="h-px bg-sand-300" data-astro-cid-hnhh3bfe></div>  <a href="/brand/" role="menuitem" class="flex items-center gap-2.5 w-full px-3.5 py-2.5 text-sm font-medium text-sand-800 hover:bg-sand-100 transition-colors text-left no-underline" data-astro-cid-hnhh3bfe> <svg class="w-4 h-4 text-sand-500 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.75" aria-hidden="true" data-astro-cid-hnhh3bfe> <path stroke-linecap="round" stroke-linejoin="round" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" data-astro-cid-hnhh3bfe></path> </svg> Download Z2 Logo </a> </div> </div>   <div id="nav-backdrop" class="fixed inset-0 pointer-events-none" style="z-index: 40; opacity: 0; transition: opacity 200ms ease-out; background: #F9F8F0;" aria-hidden="true" data-astro-cid-hnhh3bfe></div> 
171<script>
172  // ── Mega menu: hover + click-sticky ───────────────────────────
173  let closeTimer  = null;
174  let stickyMenu  = null; // id of the menu that was clicked open
175
176  const backdrop = document.getElementById('nav-backdrop');
177
178  function showBackdrop() {
179    if (!backdrop) return;
180    backdrop.style.opacity = '1';
181    backdrop.classList.remove('pointer-events-none');
182    backdrop.classList.add('pointer-events-auto');
183  }
184
185  function hideBackdrop() {
186    if (!backdrop) return;
187    backdrop.style.opacity = '0';
188    backdrop.classList.add('pointer-events-none');
189    backdrop.classList.remove('pointer-events-auto');
190  }
191
192  const megaStack = document.getElementById('mega-stack');
193  const megaClip  = document.getElementById('mega-clip');
194
195  // Sets the shared frame height. `animate` is false on the first open,
196  // so the panel appears at full size instead of unrolling.
197  function setClipHeight(panel, animate) {
198    if (!megaClip || !panel) return;
199    if (!animate) megaClip.classList.add('no-anim');
200    megaClip.style.height = panel.offsetHeight + 'px';
201    if (!animate) {
202      void megaClip.offsetHeight; // flush the un-animated height
203      megaClip.classList.remove('no-anim');
204    }
205  }
206
207  function openMega(id) {
208    clearTimeout(closeTimer);
209
210    const panel   = document.getElementById('mega-' + id);
211    const btn     = document.getElementById('btn-' + id);
212    const chevron = document.getElementById('chevron-' + id);
213    if (!panel || !btn) return;
214
215    // Frame already up? Then this is a switch: keep the frame in place and
216    // just ease its height while the panels crossfade.
217    const wasOpen = !!megaStack?.classList.contains('is-open');
218
219    ['products', 'solutions'].filter(x => x !== id).forEach(id2 => {
220      // don't force-close a sticky sibling via hover; close it visually only if not sticky
221      if (stickyMenu !== id2) closeMega(id2);
222    });
223
224    setClipHeight(panel, wasOpen);
225    megaStack?.classList.add('is-open');
226    panel.classList.add('is-open');
227    btn.setAttribute('aria-expanded', 'true');
228    btn.classList.add('is-nav-active');
229    if (chevron) chevron.style.transform = 'rotate(180deg)';
230    showBackdrop();
231  }
232
233  function closeMega(id) {
234    const panel   = document.getElementById('mega-' + id);
235    const btn     = document.getElementById('btn-' + id);
236    const chevron = document.getElementById('chevron-' + id);
237    if (!panel) return;
238
239    panel.classList.remove('is-open');
240    if (btn) { btn.setAttribute('aria-expanded', 'false'); btn.classList.remove('is-nav-active'); }
241    if (chevron) chevron.style.transform = '';
242
243    const anyOpen = ['products', 'solutions'].some(
244      x => x !== id && document.getElementById('btn-' + x)?.getAttribute('aria-expanded') === 'true'
245    );
246    if (!anyOpen) {
247      megaStack?.classList.remove('is-open');
248      hideBackdrop();
249    }
250  }
251
252  function scheduleClose() {
253    // Never auto-close if a menu is sticky
254    if (stickyMenu) return;
255    closeTimer = setTimeout(() => {
256      ['products', 'solutions'].forEach(closeMega);
257    }, 120);
258  }
259
260  function cancelClose() {
261    clearTimeout(closeTimer);
262  }
263
264  function clearSticky() {
265    stickyMenu = null;
266    ['products', 'solutions'].forEach(closeMega);
267  }
268
269  // Hover on trigger buttons (only when no sticky menu active)
270  document.querySelectorAll('.mega-trigger').forEach((btn) => {
271    const id = btn.getAttribute('data-menu');
272
273    btn.addEventListener('mouseenter', () => {
274      if (stickyMenu && stickyMenu !== id) {
275        // hovering a different trigger while one is sticky: close old, open new
276        const prev = stickyMenu;
277        stickyMenu = null;
278        closeMega(prev);
279      }
280      openMega(id);
281    });
282
283    btn.addEventListener('mouseleave', scheduleClose);
284
285    // Click toggles sticky
286    btn.addEventListener('click', (e) => {
287      e.stopPropagation();
288      if (stickyMenu === id) {
289        // already sticky: unstick and close
290        stickyMenu = null;
291        closeMega(id);
292      } else {
293        // make this one sticky (close any previous sticky first)
294        if (stickyMenu) closeMega(stickyMenu);
295        stickyMenu = id;
296        openMega(id);
297      }
298    });
299  });
300
301  // Keep open while hovering the frame (unless sticky, in which case it's always open).
302  // Bound to the shared stack, so the pointer never falls into a dead gap mid-morph.
303  if (megaStack) {
304    megaStack.addEventListener('mouseenter', cancelClose);
305    megaStack.addEventListener('mouseleave', scheduleClose);
306  }
307
308  // Close on Escape
309  document.addEventListener('keydown', (e) => {
310    if (e.key === 'Escape') clearSticky();
311  });
312
313  // Backdrop click closes sticky
314  backdrop?.addEventListener('click', clearSticky);
315
316  // Click anywhere outside the header clears sticky
317  document.addEventListener('click', (e) => {
318    const header = document.getElementById('site-header');
319    if (header && !header.contains(e.target)) clearSticky();
320  });
321
322  // ── Header logo right-click context menu ─────────────────────
323  (function () {
324    const logoLink  = document.getElementById('header-logo');
325    const ctxMenu   = document.getElementById('header-logo-ctx');
326    if (!logoLink || !ctxMenu) return;
327
328    function hideCtx() { ctxMenu.classList.add('hidden'); }
329
330    function showCtx(x, y) {
331      ctxMenu.classList.remove('hidden');
332      const margin = 8;
333      const rect = ctxMenu.getBoundingClientRect();
334      const w = ctxMenu.offsetWidth || 200;
335      const h = ctxMenu.offsetHeight || 160;
336      const left = Math.min(x, window.innerWidth  - w - margin);
337      const top  = Math.min(y, window.innerHeight - h - margin);
338      ctxMenu.style.left = left + 'px';
339      ctxMenu.style.top  = top  + 'px';
340    }
341
342    logoLink.addEventListener('contextmenu', function (e) {
343      e.preventDefault();
344      showCtx(e.clientX, e.clientY);
345    });
346
347    ctxMenu.querySelector('[data-logo-action="newtab"]')?.addEventListener('click', function () {
348      window.open('/', '_blank', 'noopener,noreferrer');
349      hideCtx();
350    });
351
352    document.addEventListener('click', hideCtx);
353    document.addEventListener('keydown', function (e) { if (e.key === 'Escape') hideCtx(); });
354    document.addEventListener('contextmenu', function (e) {
355      if (!logoLink.contains(e.target)) hideCtx();
356    });
357  })();
358
359  // ── Mobile menu + language panel ──────────────────────────────
360  // Two full-width panels drop below the header on mobile: the hamburger nav
361  // and the globe language switcher. Only one is open at a time — opening one
362  // closes the other; Escape closes both.
363  const mobileBtn  = document.getElementById('mobile-menu-btn');
364  const mobileMenu = document.getElementById('mobile-menu');
365  const iconOpen   = document.getElementById('menu-icon-open');
366  const iconClose  = document.getElementById('menu-icon-close');
367  const langBtn    = document.getElementById('mobile-lang-btn');
368  const langMenu   = document.getElementById('mobile-lang-menu');
369
370  function closeMobileNav() {
371    mobileMenu?.classList.add('hidden');
372    iconOpen?.classList.remove('hidden');
373    iconClose?.classList.add('hidden');
374    mobileBtn?.setAttribute('aria-expanded', 'false');
375  }
376
377  function closeMobileLang() {
378    langMenu?.classList.add('hidden');
379    langBtn?.setAttribute('aria-expanded', 'false');
380  }
381
382  mobileBtn?.addEventListener('click', () => {
383    const willOpen = mobileMenu?.classList.contains('hidden');
384    closeMobileLang();
385    mobileMenu?.classList.toggle('hidden', !willOpen);
386    iconOpen?.classList.toggle('hidden', !!willOpen);
387    iconClose?.classList.toggle('hidden', !willOpen);
388    mobileBtn.setAttribute('aria-expanded', String(!!willOpen));
389  });
390
391  langBtn?.addEventListener('click', () => {
392    const willOpen = langMenu?.classList.contains('hidden');
393    closeMobileNav();
394    langMenu?.classList.toggle('hidden', !willOpen);
395    langBtn.setAttribute('aria-expanded', String(!!willOpen));
396  });
397
398  // Persist the explicit language choice so the auto-detect redirect honors it
399  // (mirrors the desktop LangSwitcher behavior). Read data-locale, NOT hreflang:
400  // hreflang carries BCP-47 casing (pt-BR) but LocaleAutoDetect matches the
401  // cookie against LOCALES, which holds the lowercase code (pt-br).
402  langMenu?.querySelectorAll('a[data-locale]').forEach((a) => {
403    a.addEventListener('click', () => {
404      const code = a.getAttribute('data-locale');
405      if (code) document.cookie = `pref_lang=${code};path=/;max-age=31536000;samesite=lax`;
406    });
407  });
408
409  document.addEventListener('keydown', (e) => {
410    if (e.key === 'Escape') { closeMobileNav(); closeMobileLang(); }
411  });
412
413  // ── Product page sticky header ────────────────────────────────
414  (function () {
415    const header        = document.getElementById('site-header');
416    const defaultLogo   = document.getElementById('header-logo');
417    const productLogo   = document.getElementById('header-product-logo');
418    const solutionLabel = document.getElementById('header-solution-label');
419    const mainNav       = document.querySelector('#site-header #main-nav');
420    const productNav    = document.getElementById('header-product-nav');
421    const ctaBtn        = document.getElementById('header-product-cta-btn');
422    const ctaForm       = document.getElementById('header-demo-capture');
423
424    // Activate on product pages (product logo present) and solution pages (solution label present)
425    if (!header || (!productLogo && !solutionLabel)) return;
426
427    let active = false;
428
429    function apply(sticky) {
430      if (sticky === active) return;
431      active = sticky;
432
433      if (sticky) {
434        header.classList.add('is-product-sticky');
435        // Product pages: swap Z2 logo → product icon + name
436        if (productLogo) {
437          defaultLogo?.classList.add('hidden');
438          productLogo.classList.remove('hidden');
439          productLogo.classList.add('flex');
440        }
441        // Solution pages: keep Z2 logo, reveal solution name beside it
442        if (solutionLabel) {
443          solutionLabel.classList.remove('hidden');
444          solutionLabel.classList.add('flex');
445        }
446        // Always hide main nav: sticky bar shows only the brand/name + CTA
447        mainNav?.classList.add('!hidden');
448        // Swap CTA button → email-capture pill
449        ctaBtn?.classList.add('!hidden');
450        ctaForm?.classList.remove('hidden');
451        ctaForm?.classList.add('flex');
452      } else {
453        header.classList.remove('is-product-sticky');
454        // Restore product logo state
455        if (productLogo) {
456          defaultLogo?.classList.remove('hidden');
457          productLogo.classList.add('hidden');
458          productLogo.classList.remove('flex');
459        }
460        // Hide solution name
461        if (solutionLabel) {
462          solutionLabel.classList.add('hidden');
463          solutionLabel.classList.remove('flex');
464        }
465        // Restore main nav
466        mainNav?.classList.remove('!hidden');
467        // Restore CTA button
468        ctaBtn?.classList.remove('!hidden');
469        ctaForm?.classList.add('hidden');
470        ctaForm?.classList.remove('flex');
471      }
472    }
473
474    window.addEventListener('scroll', function () { apply(window.scrollY > 20); }, { passive: true });
475    apply(window.scrollY > 20);
476  })();
477</script>
477  <main class="contact-page bg-sand-100" data-astro-cid-uw5kdbxl> <section class="contact-split" data-astro-cid-uw5kdbxl> <div class="contact-split-inner" data-astro-cid-uw5kdbxl>  <div class="corner-frame" data-astro-cid-uw5kdbxl> <span class="corner-sq corner-sq--tl bg-sand-900" aria-hidden="true" data-astro-cid-uw5kdbxl></span> <span class="corner-sq corner-sq--tr bg-sand-900" aria-hidden="true" data-astro-cid-uw5kdbxl></span> <span class="corner-sq corner-sq--bl bg-sand-900" aria-hidden="true" data-astro-cid-uw5kdbxl></span> <span class="corner-sq corner-sq--br bg-sand-900" aria-hidden="true" data-astro-cid-uw5kdbxl></span> <div class="contact-box" data-astro-cid-uw5kdbxl>  <div class="card-inner-grid" data-astro-cid-uw5kdbxl>  <div class="form-col" data-astro-cid-uw5kdbxl> <h1 class="contact-page-h1 text-sand-900" data-astro-cid-uw5kdbxl>Contact Z2</h1> <form id="z2-contact-form" class="z2-form" novalidate data-astro-cid-uw5kdbxl> <div class="field-row" data-astro-cid-uw5kdbxl> <div class="field" data-astro-cid-uw5kdbxl> <label for="cf-first" class="field-label text-sand-900" data-astro-cid-uw5kdbxl>First Name<span class="req" data-astro-cid-uw5kdbxl>*</span></label> <input id="cf-first" name="firstname" type="text" autocomplete="given-name" required class="field-input" data-astro-cid-uw5kdbxl> </div> <div class="field" data-astro-cid-uw5kdbxl> <label for="cf-last" class="field-label text-sand-900" data-astro-cid-uw5kdbxl>Last Name<span class="req" data-astro-cid-uw5kdbxl>*</span></label> <input id="cf-last" name="lastname" type="text" autocomplete="family-name" required class="field-input" data-astro-cid-uw5kdbxl> </div> </div> <div class="field" data-astro-cid-uw5kdbxl> <label for="cf-phone" class="field-label text-sand-900" data-astro-cid-uw5kdbxl>Phone Number<span class="req" data-astro-cid-uw5kdbxl>*</span></label> <input id="cf-phone" name="mobilephone" type="tel" autocomplete="tel" required class="field-input" data-astro-cid-uw5kdbxl> </div> <div class="field" data-astro-cid-uw5kdbxl> <label for="cf-email" class="field-label text-sand-900" data-astro-cid-uw5kdbxl>Company Email<span class="req" data-astro-cid-uw5kdbxl>*</span></label> <input id="cf-email" name="email" type="email" autocomplete="email" required class="field-input" data-astro-cid-uw5kdbxl> </div> <fieldset class="field reason-set" data-astro-cid-uw5kdbxl> <legend class="field-label text-sand-900" data-astro-cid-uw5kdbxl>Contact Reason<span class="req" data-astro-cid-uw5kdbxl>*</span></legend> <div class="reason-grid" data-astro-cid-uw5kdbxl> <label class="reason-chip border-sand-600" data-astro-cid-uw5kdbxl> <input type="checkbox" name="contact_reason" value="Schedule Demo" class="reason-box" data-astro-cid-uw5kdbxl> <span class="text-sand-800" data-astro-cid-uw5kdbxl>Schedule a Demo</span> </label> <label class="reason-chip border-sand-600" data-astro-cid-uw5kdbxl> <input type="checkbox" name="contact_reason" value="Pricing" class="reason-box" data-astro-cid-uw5kdbxl> <span class="text-sand-800" data-astro-cid-uw5kdbxl>Get Pricing</span> </label> <label class="reason-chip border-sand-600" data-astro-cid-uw5kdbxl> <input type="checkbox" name="contact_reason" value="Support" class="reason-box" data-astro-cid-uw5kdbxl> <span class="text-sand-800" data-astro-cid-uw5kdbxl>Contact Support</span> </label> <label class="reason-chip border-sand-600" data-astro-cid-uw5kdbxl> <input type="checkbox" name="contact_reason" value="Other" class="reason-box" data-astro-cid-uw5kdbxl> <span class="text-sand-800" data-astro-cid-uw5kdbxl>Other</span> </label> </div> </fieldset> <div class="field" data-astro-cid-uw5kdbxl> <label for="cf-help" class="field-label text-sand-900" data-astro-cid-uw5kdbxl>How can we help?</label> <textarea id="cf-help" name="how_can_we_help" rows="3" class="field-input field-textarea" data-astro-cid-uw5kdbxl></textarea> </div> <p id="cf-error" class="form-error" role="alert" hidden data-astro-cid-uw5kdbxl></p> <button type="submit" id="cf-submit" class="form-submit bg-signal-400 text-sand-900" data-astro-cid-uw5kdbxl> Submit </button> </form> <span id="iph-i18n" hidden data-country="Phone country code" data-search="Search countries" data-noresults="No matches"></span> 
477<script type="module" src="/_astro/IntlPhone.astro_astro_type_script_index_0_lang.CZB8O0ci.js"></script>
477  <div id="z2-contact-success" class="form-success bg-signal-100" hidden data-astro-cid-uw5kdbxl> <h3 class="success-title text-sand-900" data-astro-cid-uw5kdbxl>Thanks, we&#39;ve got your message.</h3> <p class="success-body text-sand-800" data-astro-cid-uw5kdbxl> A member of the Z2 team will be in touch within one business day. Feel free to also email <a href="#" data-eu="sales" data-ed="z2data.com" class="email-obf text-primary-dark" data-astro-cid-uw5kdbxl>sales <span data-astro-cid-uw5kdbxl>at</span> z2data <span data-astro-cid-uw5kdbxl>dot</span> com</a>. </p> </div> </div>  <div class="image-col" aria-hidden="true" data-astro-cid-uw5kdbxl> <img src="/images/contact/wafer-chip-thin-02.png" alt="" class="image-col-img" width="512" height="512" loading="eager" data-astro-cid-uw5kdbxl> </div> </div>  <div class="info-cards-grid" data-astro-cid-uw5kdbxl> <div class="info-card" data-astro-cid-uw5kdbxl> <p class="info-label" data-astro-cid-uw5kdbxl>Headquarters</p> <p class="info-value text-sand-700" data-astro-cid-uw5kdbxl>
4783080 Olcott Street, Suite A115<br data-astro-cid-uw5kdbxl>
479Santa Clara, CA 95054, USA
480</p> </div> <div class="info-card" data-astro-cid-uw5kdbxl> <p class="info-label" data-astro-cid-uw5kdbxl>Phone</p> <a href="tel:+18669232821" class="info-value info-link text-primary-dark" data-astro-cid-uw5kdbxl>+1 (866) 923-2821</a> </div> <div class="info-card" data-astro-cid-uw5kdbxl> <p class="info-label" data-astro-cid-uw5kdbxl>Sales</p> <a href="#" data-eu="sales" data-ed="z2data.com" class="email-obf info-value info-link text-primary-dark" data-astro-cid-uw5kdbxl>sales <span data-astro-cid-uw5kdbxl>at</span> z2data <span data-astro-cid-uw5kdbxl>dot</span> com</a> </div> <div class="info-card" data-astro-cid-uw5kdbxl> <p class="info-label" data-astro-cid-uw5kdbxl>General Inquiries</p> <a href="#" data-eu="info" data-ed="z2data.com" class="email-obf info-value info-link text-primary-dark" data-astro-cid-uw5kdbxl>info <span data-astro-cid-uw5kdbxl>at</span> z2data <span data-astro-cid-uw5kdbxl>dot</span> com</a> </div> <div class="info-card" data-astro-cid-uw5kdbxl> <p class="info-label" data-astro-cid-uw5kdbxl>Careers</p> <a href="#" data-eu="careers" data-ed="z2data.com" class="email-obf info-value info-link text-primary-dark" data-astro-cid-uw5kdbxl>careers <span data-astro-cid-uw5kdbxl>at</span> z2data <span data-astro-cid-uw5kdbxl>dot</span> com</a> </div> <div class="info-card" data-astro-cid-uw5kdbxl> <p class="info-label" data-astro-cid-uw5kdbxl>Support</p> <a href="https://login.z2data.com/Account/Login" class="info-value info-link text-primary-dark" data-astro-cid-uw5kdbxl>Sign in to open a ticket</a> </div> </div> </div> </div> </div> </section> </main> 
480<script type="module">document.querySelectorAll("a.email-obf").forEach(n=>{const t=n,e=t.dataset.eu,a=t.dataset.ed;if(!e||!a)return;const o=e+"@"+a;t.textContent=o,t.setAttribute("href","mailto:"+o)});</script>
480 
480<script type="module" src="/_astro/contact.astro_astro_type_script_index_1_lang.BEcobWop.js"></script>
480  <footer class="bg-sand-900 relative overflow-hidden">  <div class="absolute inset-0 pointer-events-none" style="mask-image:linear-gradient(to bottom,transparent 0%,transparent 45%,rgba(0,0,0,0.35) 65%,black 82%);-webkit-mask-image:linear-gradient(to bottom,transparent 0%,transparent 45%,rgba(0,0,0,0.35) 65%,black 82%);"> <canvas id="footer-terrain" class="w-full h-full" aria-hidden="true"></canvas> </div>  <div class="container pt-10 pb-10 lg:pt-14 lg:pb-12 relative z-10"> <div class="flex items-start gap-8 xl:gap-12">  <div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-x-6 gap-y-10 flex-1 sm:gap-x-8 xl:gap-x-10">  <div> <div class="min-h-8 flex items-end mb-6"> <h3 class="type-eyebrow text-white text-[10px]">Products</h3> </div> <ul class="space-y-1"> <li> <a href="/products/supply-chain-watch" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Supply Chain Watch </a> </li><li> <a href="/products/compliance-manager" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Compliance Manager </a> </li><li> <a href="/products/part-risk-manager" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Part Risk Manager </a> </li><li> <a href="/products/supplier-insights" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Supplier Insights </a> </li> <li class="!mt-3 !mb-2"> <hr class="border-white/15 w-8"> </li> <li> <a href="/our-ai" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> AI for Supply Chain </a> </li><li> <a href="/products/enterprise-hub" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Z2 Enterprise Hub </a> </li><li> <a href="/professional-services" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Professional Services </a> </li> </ul> </div>  <div> <div class="min-h-8 flex items-end mb-6"> <h3 class="type-eyebrow text-white text-[10px]">Solutions</h3> </div> <ul class="space-y-1"> <li> <a href="/solutions/supply-chain-risk-management" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Supply Chain Risk Management </a> </li><li> <a href="/solutions/compliance-and-sustainability" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Compliance &amp; Sustainability </a> </li><li> <a href="/solutions/electronic-supply-chain" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Electronics Supply Chain </a> </li> </ul> </div>  <div> <div class="min-h-8 flex items-end mb-6"> <h3 class="type-eyebrow text-white text-[10px]">For Industry</h3> </div> <ul class="space-y-1"> <li> <a href="/industries/consumer-electronics" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Consumer Electronics </a> </li><li> <a href="/industries/aerospace-defense" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Aerospace &amp; Defense </a> </li><li> <a href="/industries/medical-devices" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Medical Devices </a> </li><li> <a href="/industries/automotive" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Automotive </a> </li><li> <a href="/industries/telecommunications" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Telecommunications </a> </li><li> <a href="/industries/industrial" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Industrial </a> </li><li> <a href="/industries/robotics" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Robotics </a> </li> </ul> </div>  <div> <div class="min-h-8 flex items-end mb-6"> <h3 class="type-eyebrow text-white text-[10px]">Resources</h3> </div> <ul class="space-y-1"> <li> <a href="/insights" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Blog </a> </li><li> <a href="/newsletter" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Newsletter </a> </li><li> <a href="/case-studies" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Case Studies </a> </li><li> <a href="/guides" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Guides </a> </li> </ul> </div>  <div> <div class="min-h-8 flex items-end mb-6"> <h3 class="type-eyebrow text-white text-[10px]">Company</h3> </div> <ul class="space-y-1"> <li> <a href="/about" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> About Us </a> </li><li> <a href="/contact" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Contact Us </a> </li><li> <a href="/our-data" class="text-sm text-white/70 hover:text-white transition-colors duration-150 leading-normal"> Our Data </a> </li> </ul>  <a href="https://www.linkedin.com/company/z2data" target="_blank" rel="noopener noreferrer" aria-label="Z2 on LinkedIn" class="inline-flex items-center opacity-70 hover:opacity-100 transition-opacity duration-150 mt-6"> <svg class="h-6 w-6 text-white" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"> <path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.225 0z"></path> </svg> </a> </div> </div> </div> </div>  <div id="footer-bottom" class="relative overflow-hidden z-10" style="height:140px">  <div class="container relative h-full pointer-events-none">  <div class="absolute bottom-4 left-0 z-10 flex flex-wrap items-center gap-x-3 gap-y-1.5 pl-4 sm:pl-6 lg:pl-8 pointer-events-auto"> <p class="type-footer-legal text-white/45 leading-snug m-0">
481&copy;2026 Z2Data. All rights reserved.&ensp;
482<a href="/privacy-policy" class="underline underline-offset-2 hover:text-white/50 transition-colors">Privacy Policy</a> </p>  <span class="hidden sm:inline text-white/20" aria-hidden="true">·</span>  <div class="z2-langsw z2-langsw--footer" data-langsw data-astro-cid-fhi4yxem> <button type="button" class="z2-langsw__btn" aria-haspopup="true" aria-expanded="false" aria-label="Cho
482ose your language" data-langsw-btn data-astro-cid-fhi4yxem>  <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="14" height="14" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" data-astro-cid-fhi4yxem="true" class="lucide lucide-globe z2-langsw__globe z2-langsw__globe--footer">  <circle cx="12" cy="12" r="10"></circle> <path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path> <path d="M2 12h20"></path>  </svg> <span class="z2-langsw__current" data-astro-cid-fhi4yxem>English</span> <svg class="z2-langsw__caret" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" data-astro-cid-fhi4yxem> <path stroke-linecap="round" stroke-linejoin="round" d="M6 15l6-6 6 6" data-astro-cid-fhi4yxem></path> </svg> </button> <ul class="z2-langsw__panel" role="menu" data-langsw-panel data-astro-cid-fhi4yxem> <li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="en" data-locale="en" href="/contact/" class="z2-langsw__opt is-active" aria-current="true" data-astro-cid-fhi4yxem> English </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="ja" data-locale="ja" href="/ja/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> 日本語 </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="de" data-locale="de" href="/de/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Deutsch </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="it" data-locale="it" href="/it/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Italiano </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="pl" data-locale="pl" href="/pl/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Polski </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="fr" data-locale="fr" href="/fr/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Français </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="ko" data-locale="ko" href="/ko/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> 한국어 </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="es" data-locale="es" href="/es/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Español </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="pt" data-locale="pt" href="/pt/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Português (Portugal) </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="pt-BR" data-locale="pt-br" href="/pt-br/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Português (Brasil) </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="tr" data-locale="tr" href="/tr/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Türkçe </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="th" data-locale="th" href="/th/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> ไทย </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="nl" data-locale="nl" href="/nl/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Nederlands </a> </li><li role="none" data-astro-cid-fhi4yxem> <a role="menuitem" hreflang="vi" data-locale="vi" href="/vi/contact/" class="z2-langsw__opt" data-astro-cid-fhi4yxem> Tiếng Việt </a> </li> </ul> </div>   </div>  <a href="/" id="footer-logo" aria-label="Z2 home" class="absolute top-0 right-0 pointer-events-auto"> <div aria-hidden="true" style="height:260px;width:372px;background-color:#231C13;-webkit-mask:url('/brand/01-Logos/02-Digital/Negative/Z2_Logo_NEG_RGB_trimmed.svg') no-repeat center/contain;mask:url('/brand/01-Logos/02-Digital/Negative/Z2_Logo_NEG_RGB_trimmed.svg') no-repeat center/contain;"></div> </a> </div> </div> </footer>  <div id="footer-logo-ctx" role="menu" aria-label="Logo options" class="fixed z-[9999] hidden"> <div class="bg-white border border-sand-600 rounded shadow-md overflow-hidden min-w-[190px] font-sans">  <button data-logo-action="newtab" role="menuitem" class="flex items-center gap-2.5 w-full px-3.5 py-2.5 text-sm font-medium text-sand-800 hover:bg-sand-100 transition-colors text-left"> <svg class="w-4 h-4 text-sand-500 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.75" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path> </svg> Open in new tab </button> <div class="h-px bg-sand-300"></div>  <div class="flex items-center gap-2.5 px-3.5 py-2.5 cursor-default select-none"> <svg class="w-4 h-4 text-sand-500 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.75" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"></path> </svg> <span class="text-sm font-medium text-sand-800">Download Z2 Logo</span> </div>  <button data-logo-dl="svg" role="menuitem" class="flex items-center gap-2.5 w-full px-3.5 py-2 text-xs font-medium text-sand-700 hover:bg-sand-100 transition-colors text-left"> <svg class="w-4 h-4 text-sand-400 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.75" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M7 8l-4 4 4 4M17 8l4 4-4 4M14 4l-4 16"></path> </svg>
483SVG
484</button>  <button data-logo-dl="png" role="menuitem" class="flex items-center gap-2.5 w-full px-3.5 py-2 text-xs font-medium text-sand-700 hover:bg-sand-100 transition-colors text-left"> <svg class="w-4 h-4 text-sand-400 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.75" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"></path> </svg>
485PNG
486</button>  <button data-logo-dl="jpg" role="menuitem" class="flex items-center gap-2.5 w-full px-3.5 py-2 mb-1 text-xs font-medium text-sand-700 hover:bg-sand-100 transition-colors text-left"> <svg class="w-4 h-4 text-sand-400 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.75" aria-hidden="true"> <rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect> <circle cx="8.5" cy="8.5" r="1.5"></circle> <path stroke-linecap="round" stroke-linejoin="round" d="M21 15l-5-5L5 21"></path> </svg>
487JPG
488</button> </div> </div> 
488<script>
489  /* ── Logo context menu ──────────────────────────────────────── */
490  (function () {
491    const logoLink = document.getElementById('footer-logo');
492    const ctxMenu  = document.getElementById('footer-logo-ctx');
493    if (!logoLink || !ctxMenu) return;
494
495    const logoFiles = {
496      svg: { url: '/brand/01-Logos/02-Digital/Negative/Z2_Logo_NEG_RGB.svg', name: 'Z2_Logo_White.svg' },
497      png: { url: '/brand/01-Logos/02-Digital/Negative/Z2_Logo_NEG_RGB.png', name: 'Z2_Logo_White.png' },
498      jpg: { url: '/brand/01-Logos/02-Digital/Negative/Z2_Logo_NEG_RGB.jpg', name: 'Z2_Logo_White.jpg' },
499    };
500
501    function hideCtx() { ctxMenu.classList.add('hidden'); }
502
503    function showCtx(x, y) {
504      ctxMenu.classList.remove('hidden');
505      var margin = 8;
506      var w = ctxMenu.offsetWidth || 200;
507      var h = ctxMenu.offsetHeight || 160;
508      var left = Math.min(x, window.innerWidth  - w - margin);
509      var top  = Math.min(y, window.innerHeight - h - margin);
510      ctxMenu.style.left = left + 'px';
511      ctxMenu.style.top  = top  + 'px';
512    }
513
514    logoLink.addEventListener('contextmenu', function (e) {
515      e.preventDefault();
516      showCtx(e.clientX, e.clientY);
517    });
518
519    ctxMenu.querySelector('[data-logo-action="newtab"]') && ctxMenu.querySelector('[data-logo-action="newtab"]').addEventListener('click', function () {
520      window.open('/', '_blank', 'noopener,noreferrer');
521      hideCtx();
522    });
523
524    ctxMenu.querySelectorAll('[data-logo-dl]').forEach(function (btn) {
525      btn.addEventListener('click', function () {
526        var fmt  = btn.getAttribute('data-logo-dl');
527        var file = logoFiles[fmt];
528        if (!file) return;
529        var a = document.createElement('a');
530        a.href = file.url;
531        a.download = file.name;
532        document.body.appendChild(a);
533        a.click();
534        document.body.removeChild(a);
535        hideCtx();
536      });
537    });
538
539    document.addEventListener('click', hideCtx);
540    document.addEventListener('keydown', function (e) { if (e.key === 'Escape') hideCtx(); });
541    document.addEventListener('contextmenu', function (e) {
542      if (!logoLink.contains(e.target)) hideCtx();
543    });
544  })();
545
546  /* ── Mosaic terrain animation ───────────────────────────────── */
547  (function () {
548    var canvas = document.getElementById('footer-terrain');
549    var wrap   = canvas && canvas.closest('footer');
550    if (!canvas || !canvas.getContext || !wrap) return;
551
552    var ctx = canvas.getContext('2d');
553    var CELL = 5;
554    var MOUSE_R = 320;   /* px — wide diffuse glow */
555    var W, H, cols, rows, t = 0, raf = null;
556    var mxRaw = -9999, myRaw = -9999; /* mouse in page coords */
557
558    function resize() {
559      W = canvas.width  = canvas.offsetWidth;
560      H = canvas.height = canvas.offsetHeight;
561      cols = Math.ceil(W / CELL) + 1;
562      rows = Math.ceil(H / CELL) + 1;
563    }
564
565    /* 4 sine waves — slow rolling hills */
566    function fieldVal(c, r) {
567      var x = c / Math.max(cols - 1, 1);
568      var y = r / Math.max(rows - 1, 1);
569      return (
570        Math.sin(x * 3.1  + t * 0.22)              * 0.38 +
571        Math.sin(x * 6.8  + y * 1.4 + t * 0.30)    * 0.26 +
572        Math.sin((x - y)  * 4.5 + t * 0.18)         * 0.20 +
573        Math.sin(y * 5.2  - t * 0.14)               * 0.16
574      );
575    }
576
577    function draw() {
578      ctx.clearRect(0, 0, W, H);
579
580      /* mouse position relative to canvas */
581      var rect = canvas.getBoundingClientRect();
582      var mx = mxRaw - rect.left;
583      var my = myRaw - rect.top;
584      var hasMouse = mxRaw > -9000;
585
586      for (var r = 0; r < rows; r++) {
587        for (var c = 0; c < cols; c++) {
588          var v = (fieldVal(c, r) + 1) * 0.5; /* → [0,1] */
589
590          /* edge vignette — fade left/right/bottom edges */
591          var ex = c / Math.max(cols - 1, 1);
592          var ey = r / Math.max(rows - 1, 1);
593          var edgeX = Math.min(ex / 0.18, (1 - ex) / 0.18, 1);
594          var edgeY = Math.min(ey / 0.12, 1);
595          var edge  = edgeX * edgeY;
596
597          /* constant dim base so grid never disappears */
598          var a = 0.028 * edge;
599
600          /* height contribution — ramps up on peaks */
601          if (v > 0.44) {
602            a += Math.pow((v - 0.44) / 0.56, 1.5) * 0.24 * edge;
603          }
604
605          /* subtle mouse proximity glow */
606          if (hasMouse) {
607            var cx = c * CELL + CELL * 0.5;
608            var cy = r * CELL + CELL * 0.5;
609            var dx = cx - mx, dy = cy - my;
610            var d2 = dx * dx + dy * dy;
611            if (d2 < MOUSE_R * MOUSE_R) {
612              var falloff = 1 - Math.sqrt(d2) / MOUSE_R;
613              a += falloff * 0.06;
614            }
615          }
616
617          ctx.fillStyle = 'rgba(255,255,255,' + Math.min(a, 0.46).toFixed(3) + ')';
618          ctx.fillRect(c * CELL, r * CELL, CELL - 1, CELL - 1);
619        }
620      }
621
622      t += 0.006;
623      raf = requestAnimationFrame(draw);
624    }
625
626    /* Track mouse on the wrap div (canvas has pointer-events:none) */
627    wrap.addEventListener('mousemove', function (e) {
628      mxRaw = e.clientX;
629      myRaw = e.clientY;
630    });
631    wrap.addEventListener('mouseleave', function () {
632      mxRaw = -9999;
633      myRaw = -9999;
634    });
635
636    /* Pause when footer scrolls off-screen */
637    if (typeof IntersectionObserver !== 'undefined') {
638      var io = new IntersectionObserver(function (entries) {
639        entries.forEach(function (e) {
640          if (e.isIntersecting) {
641            resize();
642            if (!raf) draw();
643          } else {
644            if (raf) { cancelAnimationFrame(raf); raf = null; }
645          }
646        });
647      }, { threshold: 0 });
648      io.observe(canvas);
649    } else {
650      resize();
651      draw();
652    }
653
654    var resizeTimer;
655    window.addEventListener('resize', function () {
656      clearTimeout(resizeTimer);
657      resizeTimer = setTimeout(resize, 120);
658    });
659  })();
660</script>
660 <div id="z2-exit-popup" class="z2ep-overlay fixed inset-0 z-[9998] flex items-center justify-center p-4 backdrop-blur-sm sm:p-6" data-cooldown-days="7" data-popup-id="default" hidden data-astro-cid-iottuixs> <div role="dialog" aria-modal="true" aria-labelledby="z2ep-headline" aria-describedby="z2ep-desc z2ep-bullets" tabindex="-1" class="z2ep-card relative max-h-[92vh] w-full border border-sand-300 bg-sand-100 shadow-2xl outline-none focus:outline-none focus-visible:outline-none max-w-4xl sm:grid sm:grid-cols-[1.15fr_0.85fr]" data-astro-cid-iottuixs> <button type="button" class="z2ep-close absolute right-4 top-4 z-10 inline-flex h-9 w-9 items-center justify-center rounded-full bg-white/90 text-sand-700 shadow-sm transition-colors hover:bg-white hover:text-sand-900" aria-label="Close" data-astro-cid-iottuixs> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" data-astro-cid-iottuixs="true" class="lucide lucide-x h-5 w-5">  <path d="M18 6 6 18"></path> <path d="m6 6 12 12"></path>  </svg> </button>  <div class="z2ep-media overflow-hidden bg-sand-200 h-48 sm:order-2 sm:h-auto" data-astro-cid-iottuixs> <img src="/images/exit-popups/supply-chain-watch.webp" alt class="h-full w-full object-cover" loading="lazy" data-astro-cid-iottuixs> </div>  <div class="relative p-6 sm:order-1 sm:p-10" data-astro-cid-iottuixs> <h2 id="z2ep-headline" class="type-header text-3xl leading-[1.08] text-sand-900 sm:text-4xl" data-astro-cid-iottuixs> <span class="block" data-astro-cid-iottuixs>Start your free trial.</span> <span class="block" data-astro-cid-iottuixs>Surface hidden supply-chain risk.</span> </h2>  <ul id="z2ep-bullets" class="mt-5 space-y-3" data-astro-cid-iottuixs> <li class="flex items-start gap-3 text-left" data-astro-cid-iottuixs> <span aria-hidden="true" class="mt-[10px] h-1.5 w-1.5 shrink-0 bg-sand-900" data-astro-cid-iottuixs></span> <span class="type-body text-sand-800" data-astro-cid-iottuixs>Part &amp; sub-tier risk</span> </li><li class="flex items-start gap-3 text-left" data-astro-cid-iottuixs> <span aria-hidden="true" class="mt-[10px] h-1.5 w-1.5 shrink-0 bg-sand-900" data-astro-cid-iottuixs></span> <span class="type-body text-sand-800" data-astro-cid-iottuixs>Compliance, PCN &amp; shortage</span> </li><li class="flex items-start gap-3 text-left" data-astro-cid-iottuixs> <span aria-hidden="true" class="mt-[10px] h-1.5 w-1.5 shrink-0 bg-sand-900" data-astro-cid-iottuixs></span> <span class="type-body text-sand-800" data-astro-cid-iottuixs>Alerts routed to your team</span> </li> </ul>  <form id="exit-popup-capture" action="/free-trial" method="GET" novalidate class="z2ep-form mt-7" data-astro-cid-iottuixs> <div class="flex flex-col gap-2 rounded-[28px] border-2 border-primary-deep bg-white p-2 sm:flex-row sm:items-center sm:gap-0 sm:rounded-full" data-astro-cid-iottuixs> <input type="email" placeholder="Your work email" aria-label="Work email address" class="z2ep-email w-full min-w-0 bg-transparent px-5 py-3 text-base text-sand-900 placeholder-sand-800 outline-none focus:outline-none focus-visible:outline-none focus:ring-0 sm:w-auto sm:flex-1" data-astro-cid-iottuixs> <button type="submit" class="z2ep-cta inline-flex w-full flex-shrink-0 items-center justify-center gap-1.5 rounded-full border-2 border-primary-deep bg-signal-400 px-6 py-3 text-sm font-medium text-sand-900 transition-colors hover:bg-primary-deep hover:text-sand-100 sm:w-auto sm:text-base" data-astro-cid-iottuixs> Start free trial <svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" aria-hidden="true" data-astro-cid-iottuixs> <path stroke-linecap="round" stroke-linejoin="round" d="M17 8l4 4m0 0l-4 4m4-4H3" data-astro-cid-iottuixs></path> </svg> </button> </div> <p class="z2-form-err z2ep-err" role="alert" aria-live="polite" data-astro-cid-iottuixs></p> </form> </div> </div> </div>  
660<script type="module">const t=document.getElementById("z2-exit-popup");if(t){let d=function(){try{const e=JSON.parse(localStorage.getItem(m)||"{}");return e&&e.day===y()&&Number(e.count)||0}catch{return 0}},h=function(){return f?!1:d()>=k},E=function(){try{localStorage.setItem(m,JSON.stringify({day:y(),count:d()+1}))}catch{}},S=function(e){if(e.key!=="Tab")return;const n=p.querySelectorAll('a[href],button:not([disabled]),input,[tabindex]:not([tabindex="-1"])');if(!n.length)return;const _=n[0],g=n[n.length-1];e.shiftKey&&document.activeElement===_?(e.preventDefault(),g.focus()):!e.shiftKey&&document.activeElement===g&&(e.preventDefault(),_.focus())},l=function(e){e.key==="Escape"?s("dismiss"):S(e)},u=function(){w||h()||(w=!0,E(),i=document.activeElement,t.hidden=!1,requestAnimationFrame(()=>t.classList.add("is-open")),document.body.style.overflow="hidden",p.focus(),document.addEventListener("keydown",l),o("z2_exit_popup_view"))},s=function(e){t.classList.remove("is-open"),document.body.style.overflow="",document.removeEventListener("keydown",l),window.setTimeout(()=>{t.hidden=!0},200),i&&i.focus(),e==="dismiss"&&o("z2_exit_popup_dismiss")};const p=t.querySelector('[role="dialog"]'),L=t.querySelector(".z2ep-close"),b=t.querySelector(".z2ep-form"),z=t.getAttribute("data-popup-id")||"exit-popup",m="z2_exit_popup_seen",k=2,f=/^(localhost|127\.0\.0\.1|0\.0\.0\.0)$/.test(location.hostname),o=e=>(window.dataLayer=window.dataLayer||[]).push({event:e,popup_id:z}),y=()=>new Date().toDateString();let i=null,w=!1;L.addEventListener("click",()=>s("dismiss")),t.addEventListener("click",e=>{e.target===t&&s("dismiss")}),b?.addEventListener("submit",()=>o("z2_exit_popup_click")),t.querySelector("a.z2ep-cta")?.addEventListener("click",()=>o("z2_exit_popup_click"));let c=f;const r=()=>{c=!0};let a=1;try{a=(parseInt(sessionStorage.getItem("z2_pageviews")||"0",10)||0)+1,sessionStorage.setItem("z2_pageviews",String(a))}catch{}a>=2&&r(),window.setTimeout(r,3e4),document.documentElement.addEventListener("mouseleave",e=>{c&&e.clientY<=0&&u()});let v=window.scrollY;window.addEventListener("scroll",()=>{const e=window.scrollY;(e+window.innerHeight)/document.documentElement.scrollHeight>=.5&&r(),c&&e<150&&v-e>60&&u(),v=e},{passive:!0})}</script>
660     
660<script type="application/json" id="z2-form-err-strings">{"empty":"Please enter your work email.","invalid":"Please enter a valid email address.","free":"Please use your work email address, not a personal one.","disposable":"Please use a valid work email address.","generic":"Please use your work email address.","phoneRequired":"Enter your phone number.","phoneInvalid":"Enter a valid phone number.","firstNameRequired":"Enter your first name.","lastNameRequired":"Enter your last name.","companyRequired":"Enter your company name.","fieldRequired":"This field is required.","nameRequired":"Please enter your first and last name.","companyEnter":"Please enter your company.","contactReason":"Please choose at least one contact reason.","submitError":"Something went wrong. Please try again or email [email protected].","contactSubmitError":"Something went wrong. Please email [email protected] and we'll get right back to you.","webinarSubmitError":"Something went wrong. Email [email protected] and we'll register you.","gatedSubmitError":"Something went wrong. Email [email protected] and we'll help.","newsletterNotLive":"Signup isn't live here yet. Email [email protected] and we'll add you to the brief.","newsletterError":"Something went wrong. Email [email protected] and we'll add you to the brief.","sending":"Sending…","preparing":"Preparing…"}</script>
660 
660<script type="module">window.dataLayer=window.dataLayer||[];(function(e,n,r,t,m){e[t]=e[t]||[],e[t].push({"gtm.start":new Date().getTime(),event:"gtm.js"});var g=n.getElementsByTagName(r)[0],a=n.createElement(r),o="";a.async=!0,a.src="https://www.googletagmanager.com/gtm.js?id="+m+o,g.parentNode.insertBefore(a,g)})(window,document,"script","dataLayer","GTM-TFT483R");</script>
660  
660<script>
661    (function () {
662      function payload() {
663        return JSON.stringify({
664          landing: location.href,
665          referrer: document.referrer || '',
666          path: location.pathname,
667        });
668      }
669      function send() {
670        try {
671          fetch('/api/track', {
672            method: 'POST',
673            keepalive: true,
674            headers: { 'Content-Type': 'application/json' },
675            body: payload(),
676          });
677        } catch (e) {}
678      }
679      send();
680      // EU: if they accept analytics after load, fire again so the server can
681      // mint + record first-touch immediately (server is idempotent on vid).
682      try {
683        document.addEventListener('cookieyes_consent_update', function () { send(); }, { once: true });
684      } catch (e) {}
685    })();
686  </script>
686 </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.