1<!DOCTYPE html><html lang="en" data-theme="dark"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><meta name="theme-color" content="#F58549"><meta name="color-scheme" content="dark light"><meta name="referrer" content="strict-origin-when-cross-origin"><meta http-equiv="content-language" content="en"><meta name="format-detection" content="telephone=no"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><meta name="apple-mobile-web-app-title" content="zopdev"><meta name="application-name" content="zopdev"><meta name="msapplication-TileColor" content="#F58549"><!-- Pre-paint theme bootstrap â keep inline + synchronous to avoid flash. 2 Verbatim from website/index.html line 6. -->
2<script>(function(){try{var t=localStorage.getItem('zop-theme');if(t==='light'||t==='dark')document.documentElement.setAttribute('data-theme',t);}catch(e){}})();</script>
2<!-- Loader gate · pre-paint, sets `loader-skip` on <html> when the loader 3 should NOT play this load. Skips on: 4 (1) `zd-loader-shown-v2` cookie set (1-day fixed window from first 5 display â survives tab close, shared across tabs in the same 6 browser profile) 7 (2) automated browsers (Lighthouse / headless Chrome) â the brand 8 intro animation otherwise tanks LCP/FCP on every audit run. 9 Real users still see the loader on first visit. 10 (3) mobile viewports (â¤768px) â on a cold, network-throttled mobile 11 load the full-screen overlay is the only thing painted for the 12 2720ms intro, so Chrome floors LCP at the loader-removal time 13 (â¥2.72s) â confirmed by SpeedVitals (which can't be UA-detected). 14 Painting the hero at opacity:1 behind the overlay does NOT save 15 it under those real conditions. On phones the brand intro is 16 skipped via a SEPARATE `no-loader-mobile` class so the hero 17 paints immediately. It is intentionally NOT `loader-skip`, which 18 doubles as the "automated audit" signal that gates recurring 19 tickers (LiveOpsStrip / pricing) â those must keep running for 20 real mobile users. Desktop is unchanged (loader still plays). 21 Cookie is the sole cadence authority: reloads, pull-to-refresh, and 22 `location.reload()` are NOT force-skipped. A reload with an expired 23 cookie plays the loader and arms a fresh 24h window. 24 Cookie is written only on first display (`!seen && !isAutomated`) so 25 the 24h timer counts from first show and is NOT refreshed on later 26 visits â daily visitors see the intro at most once per day. 27 CSS rule `html.loader-skip .zop-loader{display:none !important}` hides 28 it instantly. -->
28<script>(function(){try{var seen=/(?:^|;\s*)zd-loader-shown-v2=1(?:;|$)/.test(document.cookie||'');var ua=(navigator.userAgent||'');var isAutomated=navigator.webdriver===true||/HeadlessChrome|Lighthouse|chrome-lighthouse|Googlebot|bingbot|PageSpeed|GTmetrix|Pingdom/i.test(ua);var isMobile=false;try{isMobile=!!(window.matchMedia&&window.matchMedia('(max-width: 768px)').matches);}catch(e){}if(seen||isAutomated){document.documentElement.classList.add('loader-skip');}if(isMobile){document.documentElement.classList.add('no-loader-mobile');}if(!seen&&!isAutomated){try{document.cookie='zd-loader-shown-v2=1; max-age=86400; path=/; SameSite=Lax';}catch(e){}}}catch(e){}})();</script>
28<style>html.zdu-gated{visibility:hidden}</style>
28<script>// University login gate â a classic (non-module) script, inlined into <head> by 29// UniversityBase via `?raw` so it runs before first paint. It can't import, so 30// loggedIn()/expired() duplicate hasSession()/isTokenExpired() in 31// university-client.mjs â that module is the source of truth; keep them in step 32// (a mismatch loops: the gate sends you to login, login sends you back). 33// 34// Public: the landing page, the certifications overview, certificate verify, 35// and login (+ its OAuth callbacks). Every other /resources/university page, 36// the glossary included, needs a session. 37// 38// This is a sign-up gate, NOT access control. It runs only in the browser and 39// checks a token's `exp` without verifying its signature, while the lesson HTML 40// and the Pagefind index stay static and public: JS off, a curl, or a hand-made 41// zdu_auth all read every page. Never rely on it to protect content; anything 42// that must be private needs a server-side check. Gated pages carry `noindex` 43// (UniversityLayout, plus the pages that pass it) so search engines skip them too. 44(function () { 45 var BASE = '/resources/university'; 46 47 function expired(token) { 48 try { 49 var part = token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/'); 50 part += '='.repeat((4 - (part.length % 4)) % 4); 51 var exp = JSON.parse(atob(part)).exp; 52 return !exp || exp - 30 <= Math.floor(Date.now() / 1000); 53 } catch (e) { return true; } 54 } 55 56 function loggedIn() { 57 try { 58 var v = JSON.parse(localStorage.getItem('zdu_auth')) || {}; 59 if (typeof v.access === 'string' && !expired(v.access)) return true; 60 return typeof v.refresh === 'string' && !expired(v.refresh); 61 } catch (e) { return false; } 62 } 63 64 function isGated(pathname) { 65 var p = pathname.replace(/\/+$/, ''); 66 if (p.indexOf(BASE + '/') !== 0) return false; 67 // The certifications overview is public on its own; its tier pages aren't. 68 if (p === BASE + '/certifications') return false; 69 return ['/certifications/verify', '/login'].every(function (pub) { 70 return p !== BASE + pub && p.indexOf(BASE + pub + '/') !== 0; 71 }); 72 } 73 74 function loginUrl(url) { 75 return BASE + '/login?next=' + encodeURIComponent(url.pathname + url.search + url.hash); 76 } 77 78 // Mirrors sanitizeNextPath() in university-client.mjs (open-redirect guard). 79 function safeNext(raw) { 80 var n = String(raw || ''); 81 if (n.indexOf(BASE + '/') === 0 && n.indexOf('//') !== 0 && n.indexOf(BASE + '/login') !== 0) return n; 82 return BASE + '/account'; 83 } 84 85 // A signed-in visitor sent to login (e.g. the hero's "Continue learning") 86 // goes straight on, before the sign-in form paints, by the same rule as a 87 // fresh login (afterLoginPath in university-profile.mjs): the account page, 88 // unless `next` is a certification exam. The post-OAuth profile step 89 // (?step=profile) is the one login view a session should see. 90 function afterLogin(next) { 91 return /^\/resources\/university\/certifications\/[^\/?#]+\/exam\/?$/.test(next) ? next : BASE + '/account'; 92 } 93 function skipLogin(url) { 94 if (url.pathname.replace(/\/+$/, '') !== BASE + '/login' || !loggedIn()) return null; 95 var q = new URLSearchParams(url.search); 96 return q.get('step') === 'profile' ? null : afterLogin(safeNext(q.get('next'))); 97 } 98 99 // Hide before redirecting so the gated page never paints. Only set on the 100 // way out, so a logged-in page (or a JS error before this) is never hidden. 101 function check() { 102 var to = skipLogin(location); 103 if (!to && (!isGated(location.pathname) || loggedIn())) return; 104 document.documentElement.classList.add('zdu-gated'); 105 location.replace(to || loginUrl(location)); 106 } 107 108 check(); 109 // Back/forward restores from bfcache without re-running scripts. 110 addEventListener('pageshow', function (e) { if (e.persisted) check(); }); 111 // ClientRouter soft-navs don't re-run this (same script text is deduped), so 112 // gate them before the swap. Back/forward has already moved the URL: replace. 113 document.addEventListener('astro:before-preparation', function (e) { 114 var to = skipLogin(e.to); 115 if (!to && (!isGated(e.to.pathname) || loggedIn())) return; 116 e.preventDefault(); 117 location[e.navigationType === 'traverse' ? 'replace' : 'assign'](to || loginUrl(e.to)); 118 }); 119})(); 120</script>
120<title>zopdev. The easiest way to run your cloud.</title><meta name="description" content="Provisioning, deployment, observability, optimisation and governance in one platform. zopday ships the code, zopcloud runs it, zopnight keeps the bill down. AWS, Google Cloud and Azure."><meta name="robots" content="index, follow"><link rel="canonical" href="https://zop.dev/"><link rel="alternate" type="application/rss+xml" title="ZopDev Blog" href="https://zop.dev/resources/blogs/rss.xml"><link rel="alternate" type="text/markdown" title="Markdown source" href="https://zop.dev/index.md"><link rel="alternate" hreflang="x-default" href="https://zop.dev/"><link rel="alternate" hreflang="en" href="https://zop.dev/"><meta property="og:image" content="https://zop.dev/og/home.png"><meta property="og:type" content="website"><meta property="og:locale" content="en_US"><meta property="og:title" content="zopdev. The easiest way to run your cloud."><meta property="og:url" content="https://zop.dev/"><meta property="og:site_name" content="ZopDev"><meta property="og:description" content="Provisioning, deployment, observability, optimisation and governance in one platform. zopday ships the code, zopcloud runs it, zopnight keeps the bill down. AWS, Google Cloud and Azure."><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content="@zopdev"><meta name="twitter:image" content="https://zop.dev/og/home.png"><meta name="twitter:title" content="zopdev. The easiest way to run your cloud."><meta name="twitter:description" content="Provisioning, deployment, observability, optimisation and governance in one platform. zopday ships the code, zopcloud runs it, zopnight keeps the bill down. AWS, Google Cloud and Azure."><meta name="twitter:url" content="https://zop.dev/">
120<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","name":"zopdev. The easiest way to run your cloud.","description":"Provisioning, deployment, observability, optimisation and governance in one platform. zopday ships the code, zopcloud runs it, zopnight keeps the bill down. AWS, Google Cloud and Azure.","url":"https://zop.dev/","image":"https://zop.dev/og/home.png"},{"@type":"WebSite","name":"ZopDev","url":"https://zop.dev","potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://zop.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}},{"@type":"SoftwareApplication","name":"zopdev","description":"Provisioning, deployment, observability, optimisation and governance in one platform. zopday ships the code, zopcloud runs it, zopnight keeps the bill down. AWS, Google Cloud and Azure.","applicationCategory":"BusinessApplication","operatingSystem":"Web","image":"https://zop.dev/og-default.png","url":"https://zop.dev/","featureList":["zopday â provisions the cluster, network, load balancer and datastore, then builds the repository and rolls the service out. EKS, GKE, AKS, numbered revisions, one-click rollback.","zopcloud â connect a repo, name the service, click. Detects the framework and the port, builds without a Dockerfile, and hands back a live HTTPS URL.","zopnight â schedules cloud resources to power down when nobody is using them and right-sizes what is left. Cuts non-prod spend across AWS, GCP, Azure and Kubernetes."],"publisher":{"@type":"Organization","name":"ZopDev","url":"https://zop.dev","logo":{"@type":"ImageObject","url":"https://zop.dev/images/defaults/logo.svg","width":512,"height":512},"sameAs":["https://linkedin.com/company/zopdev","https://twitter.com/zopdev","https://github.com/zopdev","https://www.youtube.com/@zopdev"],"description":"zopdev builds the Technology Value OS for AI, cloud and humans - a continuous loop that finds cloud waste, routes ownership, automates optimisation and proves which technology investments create value. Products: zopnight, zopday and zopcloud.","legalName":"zopdev Technology Private Limited","foundingDate":"2024","contactPoint":{"@type":"ContactPoint","contactType":"customer support","email":"[email protected]","availableLanguage":"en"},"address":{"@type":"PostalAddress","streetAddress":"24th Main Road, HSR Layout","addressLocality":"Bengaluru","addressRegion":"Karnataka","postalCode":"560102","addressCountry":"IN"}}},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://zop.dev/"}]},{"@type":"Organization","name":"ZopDev","url":"https://zop.dev","logo":{"@type":"ImageObject","url":"https://zop.dev/images/defaults/logo.svg","width":512,"height":512},"sameAs":["https://linkedin.com/company/zopdev","https://twitter.com/zopdev","https://github.com/zopdev","https://www.youtube.com/@zopdev"],"description":"zopdev builds the Technology Value OS for AI, cloud and humans - a continuous loop that finds cloud waste, routes ownership, automates optimisation and proves which technology investments create value. Products: zopnight, zopday and zopcloud.","legalName":"zopdev Technology Private Limited","foundingDate":"2024","contactPoint":{"@type":"ContactPoint","contactType":"customer support","email":"[email protected]","availableLanguage":"en"},"address":{"@type":"PostalAddress","streetAddress":"24th Main Road, HSR Layout","addressLocality":"Bengaluru","addressRegion":"Karnataka","postalCode":"560102","addressCountry":"IN"}},{"@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What is zopdev?","acceptedA
120nswer":{"@type":"Answer","text":"One platform for the whole life of a cloud workload. zopday provisions the infrastructure and ships the code, zopcloud runs it for you when you do not want an account of your own, and zopnight keeps the bill down once it is live. The same inventory, the same permissions and the same audit trail sit under all three."}},{"@type":"Question","name":"Does zopdev require agent installation or code changes?","acceptedAnswer":{"@type":"Answer","text":"No agents, no sidecars, no Terraform changes. zopdev connects through cloud APIs, with AWS, GCP and Azure access granted by IAM roles you provision once. Discovery starts in minutes, not days."}},{"@type":"Question","name":"Which clouds and services are supported?","acceptedAnswer":{"@type":"Answer","text":"AWS, GCP and Azure, covering compute, storage, databases, networking and Kubernetes across all regions â 353 resource types today. Coverage grows every sprint; if you use something niche, \u003ca href=\"https://bookings.zop.dev/#/discover-zopdev\" target=\"_blank\" rel=\"noopener noreferrer\"\u003etell us\u003c/a\u003e and it is usually on the roadmap within a quarter."}},{"@type":"Question","name":"What can I do with the MCP server?","acceptedA
120nswer":{"@type":"Answer","text":"Point Claude, Cursor, VS Code or Codex at the zopdev MCP server and your agent can read the same inventory, cost and deployment data the dashboard shows, then act on it under your existing permissions. It connects over OAuth, so there is no token to paste or rotate. Setup is on the \u003ca href=\"/docs/zopnight/integrations/mcp\"\u003eMCP docs page\u003c/a\u003e."}},{"@type":"Question","name":"Is my cloud data safe? What does zopdev read?","acceptedAnswer":{"@type":"Answer","text":"zopdev operates with least-privilege read access plus the specific write permissions for the actions you explicitly enable. It never reads application data, secrets or user content â only resource metadata and billing data. Everything is encrypted in transit and at rest, and a SOC 2 Type II report is available on request."}},{"@type":"Question","name":"Does it work alongside Terraform or other IaC tools?","acceptedAnswer":{"@type":"Answer","text":"Yes. zopdev detects IaC-managed resources and marks them separately, so you know which changes belong in your Terraform pipeline and which can be actioned directly. For IaC resources it can generate a diff-ready Terraform snippet rather than acting itself."}}
120,{"@type":"Question","name":"How is zopdev priced?","acceptedAnswer":{"@type":"Answer","text":"Pricing is based on the number of cloud resources managed, not on savings found or actions taken. See full plans on the \u003ca href=\"/pricing\"\u003epricing page\u003c/a\u003e, or start free with the playground. No card required."}}]}]}</script>
120<link rel="dns-prefetch" href="https://www.googletagmanager.com">
120<script>(function(w,d,s,l,i){w[l]=w[l]||[];var EV=['pointerdown','keydown','touchstart','scroll','mousemove'],t; 121 function g(){if(w.__gtmLoaded)return;w.__gtmLoaded=1;clearTimeout(t);EV.forEach(function(e){w.removeEventListener(e,g)}); 122 w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 123 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 124 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);} 125 function arm(){EV.forEach(function(e){w.addEventListener(e,g,{once:true,passive:true})});t=setTimeout(g,5000);} 126 d.readyState==='complete'?arm():w.addEventListener('load',arm,{once:true}); 127 })(window,document,'script','dataLayer','GTM-MH6P3J34');</script>
127 <meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="swap">
127<script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.BfWw3Bhu.js"></script>
127<meta name="zop-spa-scope" content="root">
127<script type="module" src="/_astro/PostHogAnalytics.astro_astro_type_script_index_0_lang.BM6QIxDr.js"></script>
127<script type="module" src="/_astro/WebEvents.astro_astro_type_script_index_0_lang.BpcGAQTv.js"></script>
127<link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="manifest" href="/site.webmanifest"><!-- Google Fonts CDN â verbatim port from website/index.html line ~47-49. 128 Restored from self-hosted woff2 to recover pixel parity with the 129 reference (self-hosted subset had subtly different hinting/AA, which 130 showed up as widespread text-pixel diff at 1440 dark even when 131 layout was identical). The previous local @font-face declarations 132 in src/styles/marketing/tokens.css have been disabled (commented 133 out) so they don't shadow the CDN-loaded faces. 134 NOTE (caveat): this re-adds the cross-origin RTT we removed during 135 the Phase 1 close-the-loop â Lighthouse perf may regress slightly. --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="preconnect" href="https://storage.googleapis.com" crossorigin><link rel="preload" as="font" type="font/woff2" crossorigin href="https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2"><!-- Defer Google Fonts CSS to remove it from the render-blocking 136 critical path. The preload tags above already warm the woff2 137 cache, so the deferred CSS resolves fonts from cache as soon as 138 the stylesheet parses. `display=swap` (in the URL) keeps the 139 FOUT brief; system-ui fallback bridges the < ~100ms window. --><link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap"></noscript><link rel="stylesheet" href="/_astro/MarketingLayout.CC5YkZI6.css"> 140<style>.faq-list summary{display:flex;align-items:center;justify-content:space-between;gap:16px;cursor:pointer;list-style:none}.faq-list summary::-webkit-details-marker{display:none}.faq-list .faq-q{flex:1 1 auto;min-width:0}.faq-list .faq-chevron{flex:0 0 auto}.faq-list .faq-body{display:grid;grid-template-rows:0fr;overflow:hidden;transition:grid-template-rows .25s ease}.faq-list details[open]>.faq-body{grid-template-rows:1fr}.faq-list .faq-body>*{min-height:0}.faq-list .faq-body>p{margin:0} 141.hero-release-pill[data-astro-cid-pcumwdht]{max-width:100%;min-width:0}.hero-release-pill[data-astro-cid-pcumwdht] .hpv-text[data-astro-cid-pcumwdht],.hero-release-pill[data-astro-cid-pcumwdht] .hmp-text[data-astro-cid-pcumwdht]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hero-release-pill[data-astro-cid-pcumwdht] .hpv-tag[data-astro-cid-pcumwdht],.hero-release-pill[data-astro-cid-pcumwdht] .hmp-tag[data-astro-cid-pcumwdht],.hero-release-pill[data-astro-cid-pcumwdht] .hpv-arrow[data-astro-cid-pcumwdht],.hero-release-pill[data-astro-cid-pcumwdht] .hmp-arrow[data-astro-cid-pcumwdht],.hero-release-pill[data-astro-cid-pcumwdht] .hpv-dot[data-astro-cid-pcumwdht],.hero-release-pill[data-astro-cid-pcumwdht] .hmp-status[data-astro-cid-pcumwdht],.hero-release-pill[data-astro-cid-pcumwdht] .hpv-sep[data-astro-cid-pcumwdht]{flex:none}@media(max-width:360px){.hero-release-pill[data-astro-cid-pcumwdht] .hpv-text[data-astro-cid-pcumwdht],.hero-release-pill[data-astro-cid-pcumwdht] .hmp-text[data-astro-cid-pcumwdht],.hero-release-pill[data-astro-cid-pcumwdht] .hpv-sep[data-astro-cid-pcumwdht]{display:none}}.hero-release-pill-spacer[data-astro-cid-pcumwdht]{display:inline-block;height:0}.hero-release-pill-spacer--v2[data-astro-cid-pcumwdht]{margin-bottom:44px}.hero-release-pill-spacer--mcp[data-astro-cid-pcumwdht]{margin-bottom:24px}@media(max-width:768px){.hero-release-pill-spacer--v2[data-astro-cid-pcumwdht]{margin-bottom:32px}} 142</style> 143<link rel="stylesheet" href="/_astro/index@[email protected]">
143<script type="module" src="/_astro/page.hxieZTNw.js"></script>
143</head> <body> <svg data-astro-transition-persist="svg-defs" width="0" height="0" style="position:absolute" aria-hidden="true"> <defs> <symbol id="mark-zopdev" viewBox="0 0 32 32"> <rect x="0" y="0" width="16" height="16" fill="var(--logo-blue, #2A4494)"></rect> <rect x="16" y="0" width="16" height="16" fill="var(--zop-orange, #F58549)"></rect> <rect x="16" y="16" width="16" height="16" fill="var(--zop-green, #7FB236)"></rect> </symbol> <symbol id="mark-zopnight" viewBox="0 0 32 32"> <rect x="0" y="0" width="32" height="32" fill="var(--logo-blue, #2A4494)"></rect> <circle cx="16" cy="16" r="8" fill="#FFFFFF"></circle> </symbol> <symbol id="mark-zopday" viewBox="0 0 32 32"> <rect x="0" y="0" width="32" height="32" fill="var(--zop-orange, #F58549)"></rect> <circle cx="16" cy="16" r="8" fill="#FFFFFF"></circle> </symbol> <symbol id="mark-zopcloud" viewBox="0 0 32 32"> <rect width="32" height="32" fill="var(--logo-green, #7FB236)"></rect> <rect x="12" y="8" width="8" height="6" fill="#FFFFFF"></rect> <rect x="6" y="14" width="20" height="10" fill="#FFFFFF"></rect> </symbol> <symbol id="logo-zopdev" viewBox="27 105 3817 1365"> <path d="M27.0005 1250V1145.7157L279.1443 861.7128H30.2863V754H427.4279V858.2843L171.8557 1142.2872H432.4279V1250Z M732.8571 1262Q658.2858 1262 598.2859 1229.1429Q538.2859 1196.2858 503.2146 1137.3572Q468.1432 1078.4286 468.1432 1001.9838Q468.1432 924.5714 503.286 866.1428Q538.4288 807.7142 598.9287 774.8571Q659.4286 742 733.1311 742Q807.8571 742 867.7856 774.8571Q927.7141 807.7142 962.7854 866.1428Q997.8568 924.5714 997.8568 1001.9838Q997.8568 1078.4286 962.714 1137.3572Q927.5712 1196.2858 867.5713 1229.1429Q807.5714 1262 732.8571 1262ZM732.7416 1149.7159Q769.0004 1149.7159 798.8578 1133.2157Q828.7153 1116.7155 846.4298 1083.8986Q864.1443 1051.0816 864.1443 1002.4093Q864.1443 952.9995 846.0727 920.142Q828.0011 887.2845 798.5722 870.7843Q769.1432 854.2841 733.5714 854.2841Q697.9996 854.2841 667.9998 870.9116Q638 887.539 619.9278 920.055Q601.8557 952.5709 601.8557 1002.0838Q601.8557 1050.8577 619.5702 1083.7866Q637.2847 1116.7155 667.2537 1133.2157Q697.2227 1149.7159 732.7416 1149.7159Z M1042.5721 1470V754H1172.5703V824.5719Q1196.5703 791.7146 1236.2133 766.8573Q1275.8564 742 1338.1423 742Q1407.9996 742 1462.9996 776Q1517.9996 810 1549.7853 869Q1581.571 928 1581.571 1003Q1581.571 1077.1429 1549.7853 1136.0714Q1517.9996 1195 1462.9996 1228.5Q1407.9996 1262 1337.9995 1262Q1281.8564 1262 1240.2133 1241.0713Q1198.5703 1220.1425 1172.5703 1182.5708V1470ZM1309.2859 1148.7159Q1350.2863 1148.7159 1382.1437 1129.7157Q1414.0011 1110.7155 1431.8584 1077.7866Q1449.7157 1044.8577 1449.7157 1002.8571Q1449.7157 959.9995 1431.8584 926.5705Q1414.0011 893.1416 1382.1437 874.2129Q1350.2863 855.2841 1309.2859 855.2841Q1268.4285 855.2841 1236.9282 874.2129Q1205.4279 893.1416 1187.5706 926.142Q1169.7133 959.1423 1169.7133 1002Q1169.7133 1044.8577 1187.5706 1077.7866Q1205.4279 1110.7155 1236.9282 1129.7157Q1268.4285 1148.7159 1309.2859 1148.7159Z M1848.7148 1262Q1778.8575 1262 1723.4289 1228Q1668.0004 1194 1636.2147 1134.5714Q1604.429 1075.1429 1604.429 1001Q1604.429 926 1636.2147 867.5Q1668.0004 809 1723.5004 775.5Q1779.0004 742 1848.8577 742Q1905.0007 742 1946.7152 762.9287Q1988.4297 783.8575 2013.4297 821.4292V530H2143.4279V1250H2013.4297V1179.4281Q1990.2869 1212.1425 1950.7152 1237.0713Q1911.1436 1262 1848.7148 1262ZM1876.7141 1148.7159Q1917.7144 1148.7159 1949.1432 1129.7157Q1980.5721 1110.7155 1998.4294 1077.358Q2016.2867 1044.0005 2016.2867 1002Q2016.2867 959.1423 1998.4294 926.142Q1980.5721 893.1416 1949.1432 874.2129Q1917.7144 855.2841 1876.7141 855.2841Q1836.7137 855.2841 1804.7849 874.2129Q1772.856 893.1416 1754.9987 925.7134Q1737.1414 958.2852 1737.1414 1001.1429Q1737.1414 1044.0005 1754.9987 1077.358Q1772.856 1110.7155 1804.7849 1129.7157Q1836.7137 1148.7159 1876.7141 1148.7159Z M2446.1427 1262Q2370.1429 1262 2311.8573 1229.5Q2253.5717 1197 2220.8575 1139.3571Q2188.1432 1081.7142 2188.1432 1006.1427Q2188.1432 928.8569 2220.3575 869.1427Q2252.5717 809.4285 2311.0002 775.7142Q2369.4286 742 2446.4285 742Q2520.1427 742 2576.2854 774.0714Q2632.4281 806.1429 2663.7137 861.1428Q2694.9993 916.1427 2694.9993 985.571Q2694.9993 995.5
14371 2694.9993 1007.8567Q2694.9993 1020.1423 2693.1422 1033.2852H2281.5706V952.7144H2563.5726Q2560.5726 904.5708 2527.8579 875.999Q2495.1432 847.4272 2446.8569 847.4272Q2411.2852 847.4272 2381.2849 863.1416Q2351.2847 878.856 2333.713 910.4991Q2316.1414 942.1422 2316.1414 990.571V1019.2852Q2316.1414 1061.4288 2332.9988 1092.215Q2349.8562 1123.0011 2379.0708 1139.3584Q2408.2854 1155.7157 2445.2856 1155.7157Q2483.2861 1155.7157 2509.2865 1138.7154Q2535.2869 1121.7151 2548.7155 1093.7146H2680.9993Q2667.285 1141.2859 2634.428 1179.4287Q2601.571 1217.5715 2553.714 1239.7858Q2505.8569 1262 2446.1427 1262Z M2899.5726 1250 2717.2867 754H2853.7133L2979 1127.1445L3103.4296 754H3238.8562L3056.5703 1250Z" fill="currentColor"></path> <rect x="2994" y="105" width="425" height="425" fill="var(--logo-blue, #2A4494)"></rect> <rect x="3419" y="105" width="425" height="425" fill="var(--zop-orange, #F58549)"></rect> <rect x="3419" y="530" width="425" height="425" fill="var(--zop-green, #7FB236)"></rect> </symbol> </defs> </svg> <!-- ============================================================ 144 TETRIS LOADER · brand intro · runs at most once per 24h (cookie 145 `zd-loader-shown-v2` gate in MarketingLayout head). Tailwind utilities for responsive 146 sizing/layout; @keyframes + state-rules in <style is:global> below. 147 `inert` on the active loader blocks keyboard tab + AT from reaching 148 elements behind the overlay during the 2s intro. 149 ============================================================ --><div id="zop-loader" data-astro-transition-persist="zop-loader" class="zop-loader fixed inset-0 z-[9999] flex items-center justify-center px-6 sm:px-8 lg:px-0" aria-hidden="true" inert> <div class="zop-loader-stage flex flex-col items-center gap-3 sm:gap-4 lg:gap-5 xl:gap-6 text-[var(--ink)]"> <svg class="zop-logo-anim block h-12 w-auto sm:h-[60px] lg:h-[72px] xl:h-[84px] text-[var(--ink)]" viewBox="0 0 715 276" aria-label="zopdev" role="img"> <use href="#logo-zopdev"></use> </svg> <div class="zop-tagline mt-1 font-mono text-[10px] tracking-[0.14em] uppercase text-[var(--g-500)] opacity-0 sm:text-xs sm:tracking-[0.18em]">Continuous CloudOps</div> <!-- Compact loader beat under the tagline · second mirror of the 150 JS-driven progress fill via shared sibling state. --> <div class="zop-progress-track zop-progress-track--stage relative mt-3 h-2 w-44 overflow-hidden sm:mt-4 sm:w-52 lg:mt-5 lg:w-60 xl:w-72"><div class="zop-progress-fill block h-full w-0" id="zop-progress-stage"></div></div> </div> <!-- Viewport-bottom line bar · syncs with stage track via shared JS. --> <div class="zop-progress-track zop-progress-track--bottom absolute inset-x-0 bottom-0 h-0.5 overflow-hidden lg:h-[3px]"><div class="zop-progress-fill block h-full w-0" id="zop-progress"></div></div> </div> <!-- ============================================================ 151 LOADER · cookie-gated. The head-level `zd-loader-shown-v2` 152 cookie gate lives in MarketingLayout.astro <head> so it runs 153 before paint. This component only renders the loader markup 154 + CSS + the post-paint animation IIFE. 155 Cookie has max-age=86400 (1 day) â the loader returns once 156 per 24h per browser profile. 157 ============================================================ -->
157<script> 158(function(){ 159 var l = document.getElementById('zop-loader'); 160 if(!l) return; 161 /* Loader is `transition:persist`. On every SPA swap this script 162 re-executes; the persisted element keeps its `.done` class. We bail 163 the 2720ms intro replay but FIRST register a one-shot astro:page-load 164 handler so each new page's .hero-reveal / .hero / .globe-panel still 165 gets the entrance handoff (.go / .vis classes). Without this, hero 166 animations are stuck at opacity:0 on every nav after first load. */ 167 if(l.classList.contains('done')){ 168 if(!window.__zopHeroFlowInit){ 169 window.__zopHeroFlowInit = true; 170 var refire = function(){ 171 var h = document.querySelector('.hero-reveal'); if(h){ h.classList.add('go'); var hv=h.closest('.hero-v2'); if(hv) hv.classList.add('is-revealed'); } 172 var hs = document.querySelector('.hero'); if(hs) hs.classList.add('go'); 173 var gp = document.querySelector('.globe-panel'); if(gp) gp.classList.add('vis'); 174 }; 175 refire(); 176 document.addEventListener('astro:page-load', refire); 177 } 178 return; 179 } 180 181 var startTs = Date.now(); 182 var heroFired = false; 183 var globeFired = false; 184 185 /* whenReady waits for DOMContentLoaded then fonts.ready, but races 186 fonts.ready against a 1500ms timeout so a slow/hanging font CDN 187 (rare iOS in-app webviews, jailed environments) can't block the 188 hero-reveal handoff forever. */ 189 function whenReady(fn){ 190 function done(){ 191 if (document.fonts && document.fonts.ready) { 192 var bailout = new Promise(function(r){ setTimeout(r, 1500); }); 193 Promise.race([document.fonts.ready, bailout]).then(fn, fn); 194 } else { fn(); } 195 } 196 if (document.readyState === 'loading') { 197 document.addEventListener('DOMContentLoaded', done, { once: true }); 198 } else { 199 done(); 200 } 201 } 202 203 function fireHero(){ 204 if (heroFired) return; 205 heroFired = true; 206 var h = document.querySelector('.hero-reveal'); 207 if(h){ h.classList.add('go'); var hv=h.closest('.hero-v2'); if(hv) hv.classList.add('is-revealed'); } 208 var heroSec = document.querySelector('.hero'); 209 if(heroSec) heroSec.classList.add('go'); 210 } 211 function fireGlobe(){ 212 if (globeFired) return; 213 globeFired = true; 214 var gp = document.querySelector('.globe-panel'); 215 if(gp) gp.classList.add('vis'); 216 } 217 function finish(){ 218 l.classList.add('done'); 219 l.setAttribute('aria-hidden','true'); 220 /* Strip `inert` so the loader's previous focus-blocking is released 221 once the overlay is gone (the underlying page becomes interactive). */ 222 l.removeAttribute('inert'); 223 } 224 225 /* ââ bfcache restore âââââââââââââââââââââââââââââââââââââââââââââ 226 Head pre-paint script does NOT re-run on bfcache; if the page is 227 restored mid-loader the overlay would still be visible. Force the 228 skip path on persisted pageshow events. */ 229 window.addEventListener('pageshow', function(e){ 230 if (e.persisted) { 231 document.documentElement.classList.add('loader-skip'); 232 finish(); 233 fireHero(); 234 fireGlobe(); 235 } 236 }); 237 238 /* ââ Skip path · `loader-skip` set by head script (`zd-loader-shown-v2` 239 cookie present, automation UA, iframe); `no-loader-mobile` set on 240 â¤768px viewports ââââââââââââââââââââââââââââââââââââââââââââââââââ 241 CSS rules `html.loader-skip .zop-loader{display:none}` / 242 `html.no-loader-mobile .zop-loader{display:none}` already hide the 243 chassis. Fire post-loader handoffs immediately so the hero still 244 animates in cleanly. */ 245 if(document.documentElement.classList.contains('loader-skip') || 246 document.documentElement.classList.contains('no-loader-mobile')){ 247 finish(); 248 whenReady(function(){ 249 fireHero(); 250 /* Globe still waits ~2400ms after `.go` so it doesn't race the 251 headline reveal cascade. */ 252 setTimeout(fireGlobe, 2400); 253 }); 254 return; 255 } 256 257 if(window.matchMedia('(prefers-reduced-motion: reduce)').matches){ 258 finish(); 259 whenReady(function(){ 260 fireHero(); 261 fireGlobe(); 262 }); 263 return; 264 } 265 266 var prog = document.getElementById('zop-progress'); 267 var progStage = document.getElementById('zop-progress-stage'); 268 function setProg(w, color){ 269 if(prog){ 270 prog.style.width = w; 271 if(color) prog.style.background = color; 272 } 273 if(progStage){ 274 progStage.style.width = w; 275 } 276 } 277 278 /* 2720ms timeline · capsules fill green at 800ms, hold for a ~1200ms 279 dwell so the user reads the "loaded" beat, then the CSS keyframe 280 slides the overlay up over a slow / calm 720ms starting at 2000ms. 281 JS finalises hero handoff at 2720ms â exactly when the slide 282 completes â so the overlay's `display:none` lands cleanly. */ 283 setTimeout(function(){ setProg('40%'); }, 150); 284 setTimeout(function(){ 285 l.classList.add('filled'); 286 setProg('70%', 'var(--zop-orange)'); 287 }, 600); 288 setTimeout(function(){ 289 l.classList.add('is-reveal'); 290 setProg('100%', 'var(--zop-green)'); 291 }, 800); 292 setTimeout(function(){ 293 finish(); 294 fireHero(); 295 }, 2720); 296 /* Globe fades in ~2400ms after the hero headline reveal kicks off. 297 hero.go fires at 2720ms â globe at 2720 + 2400 = 5120ms */ 298 setTimeout(fireGlobe, 5120); 299 300 /* ââ Tab-throttling recovery âââââââââââââââââââââââââââââââââââââ
301 Background tabs throttle setTimeout to ~1Hz. The CSS keyframe 302 `zop-loader-out` is real-time and hides the overlay on schedule, 303 but the JS hero/globe handoff may not have fired. On visibility 304 return, fast-forward anything overdue. */ 305 document.addEventListener('visibilitychange', function(){ 306 if (document.visibilityState !== 'visible') return; 307 var elapsed = Date.now() - startTs; 308 if (elapsed >= 2720) { finish(); fireHero(); } 309 if (elapsed >= 5120) { fireGlobe(); } 310 }); 311})(); 312</script>
312 <!-- ============================================================ 313 Loader styles · inline in website/index.html (NOT in 314 homepage-chrome.css), so they are mirrored verbatim here to 315 keep the component self-contained. `is:global` because the 316 selectors target ids/classes used by the markup above and by 317 consumers outside this component. 318 ============================================================ --> <a class="skip-to-main" href="#main-content">Skip to main content</a> <nav class="nav" data-astro-transition-persist="nav"> <div class="nav-inner px-3 py-2 sm:px-4 sm:py-3 md:px-6 md:py-3 lg:px-8 lg:py-4 gap-2 sm:gap-3 md:gap-4 lg:gap-6"> <a href="/" class="logo-lockup sm min-h-11 inline-flex items-center max-w-[120px] sm:max-w-[140px] md:max-w-[160px] lg:max-w-none shrink-0" aria-label="zopdev"> <svg viewBox="0 0 715 276" class="max-w-full h-auto"><use href="#logo-zopdev"></use></svg> </a> <div class="nav-links lg:gap-4 xl:gap-6 2xl:gap-8 text-sm xl:text-base" id="nav-links"> <div class="nav-item" data-menu="product"> <a href="#">Product <span class="nav-caret" aria-hidden="true"></span></a> </div> <div class="nav-item" data-menu="solutions"> <a href="#">Solutions <span class="nav-caret" aria-hidden="true"></span></a> </div> <div class="nav-item" data-menu="opensource"> <a href="#">Open Source <span class="nav-caret" aria-hidden="true"></span></a> </div> <div class="nav-item" data-menu="resources"> <a href="#">Resources <span class="nav-caret" aria-hidden="true"></span></a> </div> <a href="/pricing">Pricing</a> <div class="nav-item" data-menu="company"> <a href="#">Company <span class="nav-caret" aria-hidden="true"></span></a> </div> </div> <!-- Shared dropdown overlay. Content crossfades, panel slides left/right --> <div class="nav-overlay" id="nav-overlay" aria-hidden="true"> <div class="nav-panes" id="nav-panes"> <!-- âââââââ PRODUCT · 2 hero bentos + ZopCloud strip âââââââ --> <div class="nav-pane" data-pane="product"> <div class="np-bento np-bento--products-v2"> <!-- ZopNight · large hero with sidebar/topbar/stat dashboard peek 319 sliding up on hover. Brand-blue accents. --> <a class="np-prod-card np-prod-card--night" data-product="zopnight" href="/zopnight"> <span class="np-prod-badge live">live</span> <div class="np-prod-head"> <div class="np-prod-title"><svg class="h-[22px] w-auto block" viewBox="-1125 530 4943.43 952" role="img" aria-label="zopnight" focusable="false"> <rect x="-1125" y="530" width="952" height="952" fill="var(--logo-blue, #2A4494)"></rect> <circle cx="-649" cy="1006" r="238" fill="#FFFFFF"></circle> <path d="M27.0005 1250V1145.7157L279.1443 861.7128H30.2863V754H427.4279V858.2843L171.8557 1142.2872H432.4279V1250Z M732.8571 1262Q658.2858 1262 598.2859 1229.1429Q538.2859 1196.2858 503.2146 1137.3572Q468.1432 1078.4286 468.1432 1001.9838Q468.1432 924.5714 503.286 866.1428Q538.4288 807.7142 598.9287 774.8571Q659.4286 742 733.1311 742Q807.8571 742 867.7856 774.8571Q927.7141 807.7142 962.7854 866.1428Q997.8568 924.5714 997.8568 1001.9838Q997.8568 1078.4286 962.714 1137.3572Q927.5712 1196.2858 867.5713 1229.1429Q807.5714 1262 732.8571 1262ZM732.7416 1149.7159Q769.0004 1149.7159 798.8578 1133.2157Q828.7153 1116.7155 846.4298 1083.8986Q864.1443 1051.0816 864.1443 1002.4093Q864.1443 952.9995 846.0727 920.142Q828.0011 887.2845 798.5722 870.7843Q769.1432 854.2841 733.5714 854.2841Q697.9996 854.2841 667.9998 870.9116Q638 887.539 619.9278 920.055Q601.8557 952.5709 601.8557 1002.0838Q601.8557 1050.8577 619.5702 1083.7866Q637.2847 1116.7155 667.2537 1133.2157Q697.2227 1149.7159 732.7416 1149.7159Z M1042.5721 1470V754H1172.5703V824.5719Q1196.5703 791.7146 1236.2133 766.8573Q1275.8564 742 1338.1423 742Q1407.9996 742 1462.9996 776Q1517.9996 810 1549.7853 869Q1581.571 928 1581.571 1003Q1581.571 1077.1429 1549.7853 1136.0714Q1517.9996 1195 1462.9996 1228.5Q1407.9996 1262 1337.9995 1262Q1281.8564 1262 1240.2133 1241.0713Q1198.5703 1220.1425 1172.5703 1182.5708V1470ZM1309.2859 1148.7159Q1350.2863 1148.7159 1382.1437 1129.7157Q1414.0011 1110.7155 1431.8584 1077.7866Q1449.7157 1044.8577 1449.7157 1002.8571Q1449.7157 959.9995 1431.8584 926.5705Q1414.0011 893.1416 1382.1437 874.2129Q1350.2863 855.2841 1309.2859 855.2841Q1268.4285 855.2841 1236.9282 874.2129Q1205.4279 893.1416 1187.5706 926.142Q1169.7133 959.1423 1169.7133 1002Q1169.7133 1044.8577 1187.5706 1077.7866Q1205.4279 1110.7155 1236.9282 1129.7157Q1268.4285 1148.7159 1309.2859 1148.7159Z M1623.7151 1250V754H1753.7133V828.8575Q1777.8562 788.85
31973 1819.8563 765.4286Q1861.8564 742 1917.7135 742Q2010.5704 742 2060.9991 800.4284Q2111.4277 858.8568 2111.4277 970.7139V1250H1981.4296V982.9995Q1981.4296 918.9989 1955.5007 885.4273Q1929.5719 851.8557 1874.8573 851.8557Q1822.2854 851.8557 1787.9994 889.2846Q1753.7133 926.7135 1753.7133 993.8571V1250Z M2173.1438 1250V754H2303.142V1250ZM2176.0004 671.8566V545.7144H2301.7139V671.8566Z M2636.8568 1482Q2573.4281 1482 2515.7854 1461.1428Q2458.1427 1440.2856 2418.0714 1395.7857Q2378.0002 1351.2858 2369.5715 1281.429H2498.5697Q2507.8557 1321.858 2545.2846 1345.7155Q2582.7135 1369.573 2634.2854 1369.573Q2671.7144 1369.573 2703.3576 1353.9299Q2735.0007 1338.2869 2753.858 1306.5722Q2772.7153 1274.8575 2772.7153 1226.1427V1163.9995Q2757.5724 1187.8568 2733.9295 1207.9284Q2710.2865 1228 2677.7149 1240.2859Q2645.1432 1252.5717 2602.7144 1252.5717Q2532.0002 1252.5717 2475.4287 1219.0003Q2418.8573 1185.4288 2386.2144 1127.2859Q2353.5715 1069.1431 2353.5715 996.7144Q2353.5715 924.2858 2386.2144 866.6429Q2418.8573 809 2475.4287 775.5Q2532.0002 742 2602.8573 742Q2659.8577 742 2703.7151 765.3574Q2747.5724 788.7148 2772.7153 823.2865V754H2902.7135V1219.2858Q2902.7135 1305.2856 2866.4279 1363.7856Q2830.1423 1422.2856 2769.7139 1452.1428Q2709.2854 1482 2636.8568 1482ZM2628.8568 1140.1447Q2671.5714 1140.1447 2703.3574 1121.1445Q2735.1434 1102.1443 2753.2151 1069.9297Q2771.2867 1037.715 2771.2867 997.5715Q2771.2867 956.4281 2753.2151 924.3563Q2735.1434 892.2845 2703.3574 873.7843Q2671.5714 855.2841 2628.8568 855.2841Q2586.9993 855.2841 2554.7847 873.7843Q2522.5701 892.2845 2504.4984 923.9277Q2486.4268 955.571 2486.4268 996.7144Q2486.4268 1036.8578 2504.4984 1069.5011Q2522.5701 1102.1443 2554.7847 1121.1445Q2586.9993 1140.1447 2628.8568 1140.1447Z M2964.1436 1250V530H3094.1418V829.1432Q3118.4276 789.0002 3161.4991 765.5001Q3204.5706 742 3259.4277 742Q3351.1418 742 3401.499 800.4284Q3451.8562 858.8568 3451.8562 970.7139V1250H3322.858V982.9995Q3322.858 918.9989 3297.5721 885.4273Q3272.2861 851.8557 3217.5715 851.8557Q3164.1425 851.8557 3129.1422 889.2846Q3094.1418 926.7135 3094.1418 993.8571V1250Z M3715.8564 1250Q3665.8568 1250 3631.6427 1238.2858Q3597.4286 1226.5715 3580.0716 1193.2146Q3562.7146 1159.8577 3562.7146 1097.1438V862.8557H3477.5717V754H3562.7146V621.0005H3692.7128V754H3818.4277V862.8557H3692.7128V1080.7153Q3692.7128 1105.5728 3697.7842 1118.1443Q3702.8557 1130.7159 3716.7843 1135.073Q3730.713 1139.4301 3755.2847 1139.4301H3814.5704V1250Z" fill="currentColor"></path> </svg></div> </div> <p class="np-prod-desc">Autonomous cloud governance + FinOps. AWS, Azure, GCP.</p> <span class="np-prod-cta">Explore <span class="brand-lc">zopnight</span> <span class="np-prod-arrow" aria-hidden="true">â</span></span> <!-- Dashboard peek · mini-mock of the ZopNight savings 320 console (sidebar + monthly-savings hero number + stat 321 tiles + breakdown chart). Hidden by translateY(70%); 322 rises on hover so the user glimpses the real dashboard. --> <span class="np-prod-peek np-prod-peek--night" aria-hidden="true"> <span class="np-peek-side"> <span class="np-peek-brand"> <span class="np-peek-brand-mark"></span> <span class="np-peek-brand-name">zop<b>night</b></span> </span> <span class="np-peek-sec">Cloud Estate</span> <span class="np-peek-nav">Dashboard</span> <span class="np-peek-nav">Inventory</span> <span class="np-peek-sec">Optimization</span> <span class="np-peek-nav np-peek-nav--on">Recommendations</span> <span class="np-peek-nav">Schedules</span> <span class="np-peek-nav">Auto-Remediate</span> </span> <span class="np-peek-main"> <span class="np-peek-top"> <span class="np-peek-top-title">Monthly Savings</span> <span class="np-peek-pill">live</span> </span> <span class="np-peek-hero"> <span class="np-peek-hero-num">$42,180</span> <span class="np-peek-hero-delta">â² 12.4%</span> </span> <span class="np-peek-stats"> <span class="np-peek-stat"><span class="np-peek-stat-k">Idle</span><span class="np-peek-stat-v">218</span></span> <span class="np-peek-stat"><span class="np-peek-stat-k">Scheduled</span><span class="np-peek-stat-v">73%</span></span> <span class="np-peek-stat"><span class="np-peek-stat-k">Verified</span><span class="np-peek-stat-v">$31k</span></span> </span> <span class="np-peek-chart"></span> </span> </span> </a> <!-- ZopDay · large hero with the Deployment Spaces console 323 peek (sidebar + page-head + filter row + provider table). 324 Brand-orange accents. --> <a class="np-prod-card np-prod-card--day" data-product="zopday" href="/zopday"> <span class="np-prod-badge live">live</span> <div class="np-prod-head"> <div class="np-prod-title">
324<svg class="h-[22px] w-auto block" viewBox="-1125 530 4407.43 952" role="img" aria-label="zopday" focusable="false"> <rect x="-1125" y="530" width="952" height="952" fill="var(--zop-orange, #F58549)"></rect> <circle cx="-649" cy="1006" r="238" fill="#FFFFFF"></circle> <path d="M27.0005 1250V1145.7157L279.1443 861.7128H30.2863V754H427.4279V858.2843L171.8557 1142.2872H432.4279V1250Z M732.8571 1262Q658.2858 1262 598.2859 1229.1429Q538.2859 1196.2858 503.2146 1137.3572Q468.1432 1078.4286 468.1432 1001.9838Q468.1432 924.5714 503.286 866.1428Q538.4288 807.7142 598.9287 774.8571Q659.4286 742 733.1311 742Q807.8571 742 867.7856 774.8571Q927.7141 807.7142 962.7854 866.1428Q997.8568 924.5714 997.8568 1001.9838Q997.8568 1078.4286 962.714 1137.3572Q927.5712 1196.2858 867.5713 1229.1429Q807.5714 1262 732.8571 1262ZM732.7416 1149.7159Q769.0004 1149.7159 798.8578 1133.2157Q828.7153 1116.7155 846.4298 1083.8986Q864.1443 1051.0816 864.1443 1002.4093Q864.1443 952.9995 846.0727 920.142Q828.0011 887.2845 798.5722 870.7843Q769.1432 854.2841 733.5714 854.2841Q697.9996 854.2841 667.9998 870.9116Q638 887.539 619.9278 920.055Q601.8557 952.5709 601.8557 1002.0838Q601.8557 1050.8577 619.5702 1083.7866Q637.2847 1116.7155 667.2537 1133.2157Q697.2227 1149.7159 732.7416 1149.7159Z M1042.5721 1470V754H1172.5703V824.5719Q1196.5703 791.7146 1236.2133 766.8573Q1275.8564 742 1338.1423 742Q1407.9996 742 1462.9996 776Q1517.9996 810 1549.7853 869Q1581.571 928 1581.571 1003Q1581.571 1077.1429 1549.7853 1136.0714Q1517.9996 1195 1462.9996 1228.5Q1407.9996 1262 1337.9995 1262Q1281.8564 1262 1240.2133 1241.0713Q1198.5703 1220.1425 1172.5703 1182.5708V1470ZM1309.2859 1148.7159Q1350.2863 1148.7159 1382.1437 1129.7157Q1414.0011 1110.7155 1431.8584 1077.7866Q1449.7157 1044.8577 1449.7157 1002.8571Q1449.7157 959.9995 1431.8584 926.5705Q1414.0011 893.1416 1382.1437 874.2129Q1350.2863 855.2841 1309.2859 855.2841Q1268.4285 855.2841 1236.9282 874.2129Q1205.4279 893.1416 1187.5706 926.142Q1169.7133 959.1423 1169.7133 1002Q1169.7133 1044.8577 1187.5706 1077.7866Q1205.4279 1110.7155 1236.9282 1129.7157Q1268.4285 1148.7159 1309.2859 1148.7159Z M1848.7148 1262Q1778.8575 1262 1723.4289 1228Q1668.0004 1194 1636.2147 1134.5714Q1604.429 1075.1429 1604.429 1001Q1604.429 926 1636.2147 867.5Q1668.0004 809 1723.5004 775.5Q1779.0004 742 1848.8577 742Q1905.0007 742 1946.7152 762.9287Q1988.4297 783.8575 2013.4297 821.4292V530H2143.4279V1250H2013.4297V1179.4281Q1990.2869 1212.1425 1950.7152 1237.0713Q1911.1436 1262 1848.7148 1262ZM1876.7141 1148.7159Q1917.7144 1148.7159 1949.1432 1129.7157Q1980.5721 1110.7155 1998.4294 1077.358Q2016.2867 1044.0005 2016.2867 1002Q2016.2867 959.1423 1998.4294 926.142Q1980.5721 893.1416 1949.1432 874.2129Q1917.7144 855.2841 1876.7141 855.2841Q1836.7137 855.2841 1804.7849 874.2129Q1772.856 893.1416 1754.9987 925.7134Q1737.1414 958.2852 1737.1414 1001.1429Q1737.1414 1044.0005 1754.9987 1077.358Q1772.856 1110.7155 1804.7849 1129.7157Q1836.7137 1148.7159 1876.7141 1148.7159Z M2375.7146 1262Q2319.7144 1262 2279.5715 1241.8571Q2239.4286 1221.7142 2218.143 1187.6428Q2196.8573 1153.5714 2196.8573 1113Q2196.8573 1035.2856 2252.9288 992.7141Q2309.0004 950.1427 2400.0005 950.1427Q2442.7148 950.1427 2474.0006 956.2141Q2505.2865 962.2856 2524.858 968.5714V945Q2524.858 892.9995 2495.3578 868.9276Q2465.8577 844.8558 2419.4286 844.8558Q2386.2852 844.8558 2360.3563 858.2132Q2334.4274 871.5706 2327.1416 906.2854H2204.4288Q2210.4288 853.1425 2240.1432 816.5712Q2269.8575 779.9998 2316.6432 760.9999Q2363.4288 742 2419.4286 742Q2530.1427 742 2592.4995 795.0715Q2654.8562 848.1431 2654.8562 945V1057.1445Q2654.8562 1094.8588 2659.3562 1113.0016Q2663.8562 1131.1443 2674.0705 1135.93Q2684.2849 1140.7157 2700.8564 1140.7157H2705.4279V1250H2676.7141Q2623.8571 1250 2588.7859 1235.9999Q2553.7146 1221.9998 2538.0005 1181.1423Q2512.5721 1216.1425 2471.6435 1239.0713Q2430.715 1262 2375.7146 1262ZM2404.9996 1162.5726Q2437.0002 1162.5726 2459.7149 1148.1437Q2482.4296 1133.7148 2497.2154 1108.5714Q2512.0013 1083.4281 2518.0011 1052.9991Q2497.4296 1046.8562 2469.6436 1041.2848Q2441.8577 1035.7133 2413.571
3247 1035.7133Q2375.2847 1035.7133 2351.5701 1053.428Q2327.8555 1071.1427 2327.8555 1102.4288Q2327.8555 1128.5721 2348.5701 1145.5724Q2369.2847 1162.5726 2404.9996 1162.5726Z M2731.5721 1470V1367.1442H2838.1432Q2853.0004 1367.1442 2862.8575 1363.4298Q2872.7146 1359.7155 2881.786 1348.0011Q2890.8575 1336.2867 2901.429 1311.0007L2943.8582 1217.5708L2937.4296 1274.9989L2721.1438 754H2862.2847L3000 1100.573L3143.5726 754H3282.4277L3018.1418 1355.7141Q3001.7131 1392.5714 2989.5703 1415.3571Q2977.4274 1438.1429 2965.1417 1449.7143Q2952.856 1461.2858 2936.2847 1465.6429Q2919.7133 1470 2894.4277 1470Z" fill="currentColor"></path> </svg></div> </div> <p class="np-prod-desc">Internal Developer Platform across AWS, GCP, Azure.</p> <span class="np-prod-cta">Explore <span class="brand-lc">zopday</span> <span class="np-prod-arrow" aria-hidden="true">â</span></span> <span class="np-prod-peek np-prod-peek--day" aria-hidden="true"> <span class="np-peek-side"> <span class="np-peek-brand"> <span class="np-peek-brand-mark"></span> <span class="np-peek-brand-name">zop<b>day</b></span> </span> <span class="np-peek-sec">Infrastructure</span> <span class="np-peek-nav">Provision</span> <span class="np-peek-nav">Datastore</span> <span class="np-peek-nav">Cluster</span> <span class="np-peek-sec">Deployment</span> <span class="np-peek-nav np-peek-nav--on">Spaces</span> <span class="np-peek-nav">Projects</span> </span> <span class="np-peek-main"> <span class="np-peek-top"> <span class="np-peek-top-title">Deployment Spaces</span> <span class="np-peek-pill">5 healthy</span> </span> <span class="np-peek-filters"> <span class="np-peek-chip np-peek-chip--on">All</span> <span class="np-peek-chip">Healthy</span> <span class="np-peek-chip">Issues</span> <span class="np-peek-chip">Pending</span> </span> <span class="np-peek-rows"> <span class="np-peek-row"><span class="np-peek-prov np-peek-prov--gcp">G</span><span class="np-peek-row-name">us-prod</span><span class="np-peek-row-dot"></span><span class="np-peek-row-tag">GCP</span></span> <span class="np-peek-row"><span class="np-peek-prov np-peek-prov--aws">aws</span><span class="np-peek-row-name">eu-prod</span><span class="np-peek-row-dot"></span><span class="np-peek-row-tag">AWS</span></span> <span class="np-peek-row"><span class="np-peek-prov np-peek-prov--aws">aws</span><span class="np-peek-row-name">eu-staging</span><span class="np-peek-row-dot"></span><span class="np-peek-row-tag">AWS</span></span> <span class="np-peek-row"><span class="np-peek-prov np-peek-prov--az">A</span><span class="np-peek-row-name">apac-prod</span><span class="np-peek-row-dot"></span><span class="np-peek-row-tag">AZ</span></span> </span> </span> </span> </a> <!-- ZopCloud · spans full width below as the product strip --> <a class="np-prod-strip" href="/zopcloud"> <span class="np-prod-strip-body"> <div class="np-prod-strip-title"><svg class="h-[20px] w-auto block" viewBox="-1125 530 5062.43 952" role="img" aria-label="zopcloud" focusable="false"> <rect x="-1125" y="530" width="952" height="952" fill="var(--logo-green, #7
324FB236)"></rect> <rect x="-768" y="768" width="238" height="178.5" fill="#FFFFFF"></rect> <rect x="-946.5" y="946.5" width="595" height="297.5" fill="#FFFFFF"></rect> <path d="M27.0005 1250V1145.7157L279.1443 861.7128H30.2863V754H427.4279V858.2843L171.8557 1142.2872H432.4279V1250Z M732.8571 1262Q658.2858 1262 598.2859 1229.1429Q538.2859 1196.2858 503.2146 1137.3572Q468.1432 1078.4286 468.1432 1001.9838Q468.1432 924.5714 503.286 866.1428Q538.4288 807.7142 598.9287 774.8571Q659.4286 742 733.1311 742Q807.8571 742 867.7856 774.8571Q927.7141 807.7142 962.7854 866.1428Q997.8568 924.5714 997.8568 1001.9838Q997.8568 1078.4286 962.714 1137.3572Q927.5712 1196.2858 867.5713 1229.1429Q807.5714 1262 732.8571 1262ZM732.7416 1149.7159Q769.0004 1149.7159 798.8578 1133.2157Q828.7153 1116.7155 846.4298 1083.8986Q864.1443 1051.0816 864.1443 1002.4093Q864.1443 952.9995 846.0727 920.142Q828.0011 887.2845 798.5722 870.7843Q769.1432 854.2841 733.5714 854.2841Q697.9996 854.2841 667.9998 870.9116Q638 887.539 619.9278 920.055Q601.8557 952.5709 601.8557 1002.0838Q601.8557 1050.8577 619.5702 1083.7866Q637.2847 1116.7155 667.2537 1133.2157Q697.2227 1149.7159 732.7416 1149.7159Z M1042.5721 1470V754H1172.5703V824.5719Q1196.5703 791.7146 1236.2133 766.8573Q1275.8564 742 1338.1423 742Q1407.9996 742 1462.9996 776Q1517.9996 810 1549.7853 869Q1581.571 928 1581.571 1003Q1581.571 1077.1429 1549.7853 1136.0714Q1517.9996 1195 1462.9996 1228.5Q1407.9996 1262 1337.9995 1262Q1281.8564 1262 1240.2133 1241.0713Q1198.5703 1220.1425 1172.5703 1182.5708V1470ZM1309.2859 1148.7159Q1350.2863 1148.7159 1382.1437 1129.7157Q1414.0011 1110.7155 1431.8584 1077.7866Q1449.7157 1044.8577 1449.7157 1002.8571Q1449.7157 959.9995 1431.8584 926.5705Q1414.0011 893.1416 1382.1437 874.2129Q1350.2863 855.2841 1309.2859 855.2841Q1268.4285 855.2841 1236.9282 874.2129Q1205.4279 893.1416 1187.5706 926.142Q1169.7133 959.1423 1169.7133 1002Q1169.7133 1044.8577 1187.5706 1077.7866Q1205.4279 1110.7155 1236.9282 1129.7157Q1268.4285 1148.7159 1309.2859 1148.7159Z M1864 1262Q1788.1431 1262 1729.6432
3241228.6429Q1671.1432 1195.2858 1637.7861 1136.7858Q1604.429 1078.2858 1604.429 1002Q1604.429 925.5714 1637.7861 867.1428Q1671.1432 808.7142 1729.6432 775.3571Q1788.1431 742 1864 742Q1958.7141 742 2023.6424 791.7141Q2088.5708 841.4283 2107.1422 928.285H1970.287Q1961.0013 893.7131 1931.9295 873.5701Q1902.8577 853.427 1863.1429 853.427Q1828.5712 853.427 1799.7137 871.2129Q1770.8562 888.9987 1754.0703 921.8562Q1737.2843 954.7137 1737.2843 1002Q1737.2843 1048.2863 1754.0703 1082.0724Q1770.8562 1115.8584 1799.7137 1133.6443Q1828.5712 1151.4301 1863.1429 1151.4301Q1902.8577 1151.4301 1931.9295 1131.7156Q1961.0013 1112.0011 1970.287 1075.715H2107.1422Q2089.5708 1159.7146 2024.1424 1210.8573Q1958.7141 1262 1864 1262Z M2152.0009 1250V530H2281.9991V1250Z M2590.8571 1262Q2516.2858 1262 2456.2859 1229.1429Q2396.2859 1196.2858 2361.2146 1137.3572Q2326.1432 1078.4286 2326.1432 1001.9838Q2326.1432 924.5714 2361.286 866.1428Q2396.4288 807.7142 2456.9287 774.8571Q2517.4286 742 2591.1311 742Q2665.8571 742 2725.7856 774.8571Q2785.7141 807.7142 2820.7854 866.1428Q2855.8568 924.5714 2855.8568 1001.9838Q2855.8568 1078.4286 2820.714 1137.3572Q2785.5712 1196.2858 2725.5713 1229.1429Q2665.5714 1262 2590.8571 1262ZM2590.7416 1149.7159Q2627.0004 1149.7159 2656.8578 1133.2157Q2686.7153 1116.7155 2704.4298 1083.8986Q2722.1443 1051.0816 2722.1443 1002.4093Q2722.1443 952.9995 2704.0727 920.142Q2686.0011 887.2845 2656.5722 870.7843Q2627.1432 854.2841 2591.5714 854.2841Q2555.9996 854.2841 2525.9998 870.9116Q2496 887.539 2477.9278 920.055Q2459.8557 952.5709 2459.8557 1002.0838Q2459.8557 1050.8577 2477.5702 1083.7866Q2495.2847 1116.7155 2525.2537 1133.2157Q2555.2227 1149.7159 2590.7416 1149.7159Z M3074.1438 1262Q2989.144 1262 2939.7868 1203.5716Q2890.4296 1145.1432 2890.4296 1033.2861V754H3019.5706V1021.0005Q3019.5706 1085.0011 3044.0709 1118.5727Q3068.5712 1152.1443 3116.1429 1152.1443Q3168.7148 1152.1443 3198.0008 1114.7154Q3227.2869 1077.2865 3227.2869 1010.1429V754H3357.285V1250H3227.2869V1177.1425Q3205.2869 1216.2856 3167.1439 1239.1428Q3129.0009 1262 3074.1438 1262Z M3642.7148 1262Q3572.8575 1262 3517.4289 1228Q3462.0004 1194 3430.2147 1134.5714Q3398.429 1075.1429 3398.429 1001Q3398.429 926 3430.2147 867.5Q3462.0004 809 3517.5004 775.5Q3573.0004 742 3642.8577 742Q3699.0007 742 3740.7152 762.9287Q3782.4297 783.8575 3807.4297 821.4292V530H3937.4279V1250H3807.4297V1179.4281Q3784.2869 1212.1425 3744.7152 1237.0713Q3705.1436 1262 3642.7148 1262ZM3670.7141 1148.7159Q3711.7144 1148.7159 3743.1432 1129.7157Q3774.5721 1110.7155 3792.4294 1077.358Q3810.2867 1044.0005 3810.2867 1002Q3810.2867 959.1423 3792.4294 926.142Q3774.5721 893.1416 3743.1432 874.2129Q3711.7144 855.2841 3670.7141 855.2841Q3630.7137 855.2841 3598.7849 874.2129Q3566.856 893.1416 3548.9987 925.7134Q3531.1414 958.2852 3531.1414 1001.1429Q3531.1414 1044.0005 3548.9987 1077.358Q3566.856 1110.7155 3598.7849 1129.7157Q3630.7137 1148.7159 3670.7141 1148.7159Z" fill="currentColor"></path> </svg></div> <p class="np-prod-strip-desc">Push your repo, get a URL. No cloud account needed.</p> </span> <span class="np-prod-badge live">live</span> </a> </div> <div class="np-promo-row"> <span><strong>Live in 20 MCP clients</strong> · run zopnight from your MCP client</span> <a href="/developers">Try MCP â</a> </div> </div> <!-- âââââââ SOLUTIONS · ZopNight capabilities, grouped as the product's 325 own left nav groups them, so the menu and the app agree. Uses the 326 Resources pane's row + icon cells so both dropdowns read the same: 327 a 1px grid gap over --line with --paper cells is what draws the 328 hairlines, not borders on the cells. âââââââ --> <div class="nav-pane" data-pane="solutions"> <div class="np-bento np-bento--solutions"> <div class="np-sol-cols"> <div class="np-sol-col"> <span class="np-sol-head">Estate</span> <a class="np-res-row" href="/zopnight/architecture"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M10 3v4M10 13v4M4 10h4M12 10h4" stroke="currentColor" stroke-width="1.5"></path><circle cx="10" cy="10" r="2.4" stroke="currentColor" stroke-width="1.5"></circle><circle cx="10" cy="3" r="1.4" stroke="currentColor" stroke-width="1.5"></circle><circle cx="10" cy="17" r="1.4" stroke="currentColor" stroke-width="1.5"></circle></svg> </span> 329Architecture 330</a> <a class="np-res-row" href="/zopnight/globe-view"> <span class="np-res-row-icon">
330 <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><circle cx="10" cy="10" r="7" stroke="currentColor" stroke-width="1.5"></circle><path d="M3 10h14M10 3c2 2.4 2 11.6 0 14M10 3c-2 2.4-2 11.6 0 14" stroke="currentColor" stroke-width="1.5"></path></svg> </span> 331Globe view 332</a> <a class="np-res-row" href="/zopnight/auto-tagging"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M10 3H4v6l8 8 6-6-8-8z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path><circle cx="7" cy="6" r="1.1" fill="currentColor"></circle></svg> </span> 333Auto tagging 334</a> <a class="np-res-row" href="/zopnight/resource-discovery"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M3 8V3h5M16 3h5v5M21 16v5h-5M8 21H3v-5"></path><path d="M3 12h18"></path></svg> </span> 335Resource discovery 336</a> <a class="np-res-row" href="/zopnight/ownership-detection"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M2.5 12S6 6 12 6s9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"></path><circle cx="12" cy="12" r="2.6"></circle></svg> </span> 337Ownership detection 338</a> <a class="np-res-row" href="/zopnight/cloud-accounts"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M10 14a4.5 4.5 0 0 0 6.4 0l2.6-2.6a4.5 4.5 0 0 0-6.4-6.4L11 6.7"></path><path d="M14 10a4.5 4.5 0 0 0-6.4 0L5 12.6a4.5 4.5 0 0 0 6.4 6.4l1.6-1.7"></path></svg> </span> 339Cloud accounts 340</a> <a class="np-res-row" href="/zopnight/openshift"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="m12 3 9 4.5-9 4.5-9-4.5Z"></path><path d="m3 12 9 4.5 9-4.5M3 16.5 12 21l9-4.5"></path></svg> </span> 341OpenShift 342</a> </div> <div class="np-sol-col"> <span class="np-sol-head">Automate</span> <a class="np-res-row" href="/zopnight/schedules"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><circle cx="10" cy="10" r="7" stroke="currentColor" stroke-width="1.5"></circle><path d="M10 6v4l3 2" stroke="currentColor" stroke-width="1.5" stroke-linecap="square"></path></svg> </span> 343Schedules 344</a> <a class="np-res-row" href="/zopnight/overrides"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M4 6h12M4 10h12M4 14h7" stroke="currentColor" stroke-width="1.5" stroke-linecap="square"></path><circle cx="14" cy="14" r="2.2" stroke="currentColor" stroke-width="1.5"></circle></svg> </span> 345Overrides 346</a> <a class="np-res-row" href="/zopnight/resource-groups"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M4 4h4v4H4ZM16 16h4v4h-4Z"></path><path d="M8 6h5a3 3 0 0 1 3 3v9"></path></svg> </span> 347Resource groups 348</a> <a class="np-res-row" href="/zopnight/auto-scaling"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M5 13V7l3 3M15 7v6l-3-3" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path><path d="M3 16h14M3 4h14" stroke="currentColor" stroke-width="1.5" stroke-linecap="square"></path></svg> </span> 349Auto Scaling 350</a> <a class="np-res-row" href="/zopnight/event-readiness"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M3 5h14v12H3z" stroke="currentColor" stroke-width="1.5"></path><path d="M3 8h14M7 3v3M13 3v3" stroke="currentColor" stroke-width="1.5" stroke-linecap="square"></path></svg> </span> 351Event Readiness 352</a> <a class="np-res-row" href="/zopnight/auto-remediation"> <span class="np-res-row-icon">
352 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M13.5 2.5 4.5 13.5h6l-.5 8 9-11h-6Z"></path></svg> </span> 353Auto-remediation 354</a> <a class="np-res-row" href="/zopnight/notifications"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M6.5 10a5.5 5.5 0 1 1 11 0c0 4 1.5 5.4 1.5 5.4H5S6.5 14 6.5 10Z"></path><path d="M10 18.4a2.2 2.2 0 0 0 4 0"></path></svg> </span> 355Notifications 356</a> <a class="np-res-row" href="/integrations"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><circle cx="5" cy="6" r="2.2"></circle><circle cx="19" cy="6" r="2.2"></circle><circle cx="12" cy="18" r="2.2"></circle><path d="M6.6 7.6 10.6 16M17.4 7.6 13.4 16M7.2 6h9.6"></path></svg> </span> 357Integrations 358</a> </div> <div class="np-sol-col"> <span class="np-sol-head">Cost</span> <a class="np-res-row" href="/zopnight/cost-report"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M4 3h9l3 3v11H4z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path><path d="M7 13v-3M10 13v-5M13 13v-2" stroke="currentColor" stroke-width="1.5" stroke-linecap="square"></path></svg> </span> 359Cost Report 360</a> <a class="np-res-row" href="/zopnight/showback"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M4 5h16v14H4Z"></path><path d="M12 8.2v7.6M14 10c0-1-1-1.6-2-1.6s-2 .6-2 1.5.9 1.3 2 1.6 2 .7 2 1.6-1 1.5-2 1.5-2-.6-2-1.6"></path></svg> </span> 361Showback 362</a> <a class="np-res-row" href="/zopnight/team-budgets"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><circle cx="12" cy="12" r="8.5"></circle><circle cx="12" cy="12" r="4"></circle><circle cx="12" cy="12" r="0.8" fill="currentColor" stroke="none"></circle></svg> </span> 363Team budgets 364</a> <a class="np-res-row" href="/zopnight/unit-economics"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M3.5 18a9 9 0 1 1 17 0"></path><path d="M12 18 16.5 10.5"></path><path d="M3.5 18h3M17.5 18h3"></path></svg> </span> 365Unit economics 366</a> <a class="np-res-row" href="/zopnight/anomaly-detection"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M12 3.5 21.5 20H2.5Z"></path><path d="M12 9.5v4.4M12 16.8v.6"></path></svg> </span> 367Anomaly detection 368</a> <a class="np-res-row" href="/zopnight/dashboards"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M3 21h18"></path><path d="M6 21v-7M11 21V6M16 21v-10M21 21V9"></path></svg> </span> 369Dashboards 370</a> </div> <div class="np-sol-col"> <span class="np-sol-head">Govern</span> <a class="np-res-row" href="/zopnight/access-control"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M5 10.5h14V21H5Z"></path><path d="M8 10.5V7.6a4 4 0 0 1 8 0v2.9"></path></svg> </span> 371Access control 372</a> <a class="np-res-row" href="/zopnight/audit-log"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M5 3h9l5 5v13H5Z"></path><path d="M14 3v5h5"></path><path d="M8.5 13h7M8.5 16.5h5"></path></svg> </span> 373Audit log 374</a> <a class="np-res-row" href="/zopnight/iac-governance"> <span class="np-res-row-icon">
374 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><path d="M12 3 4 6v6c0 4.4 3.3 7.6 8 9 4.7-1.4 8-4.6 8-9V6Z"></path><path d="m8.6 12 2.4 2.4 4.4-4.8"></path></svg> </span> 375IaC governance 376</a> <span class="np-sol-head">AI</span> <a class="np-res-row" href="/zopnight/ai-gateway"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M7 4h6v12H7z" stroke="currentColor" stroke-width="1.5"></path><path d="M4 7h3M4 13h3M13 7h3M13 13h3" stroke="currentColor" stroke-width="1.5" stroke-linecap="square"></path></svg> </span> 377AI Gateway 378</a> <a class="np-res-row" href="/zopnight/mcp-server"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><circle cx="5" cy="6" r="2.2"></circle><circle cx="19" cy="6" r="2.2"></circle><circle cx="12" cy="18" r="2.2"></circle><path d="M6.6 7.6 10.6 16M17.4 7.6 13.4 16M7.2 6h9.6"></path></svg> </span> 379MCP server 380</a> <span class="np-sol-head">Recommendations</span> <a class="np-res-row" href="/zopnight/recommendations"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M10 3a5 5 0 0 0-3 9v2h6v-2a5 5 0 0 0-3-9z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path><path d="M8 17h4" stroke="currentColor" stroke-width="1.5" stroke-linecap="square"></path></svg> </span> 381Recommendations 382</a> <a class="np-res-row" href="/zopnight/rules"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter"><circle cx="12" cy="12" r="9"></circle><path d="m8 12 2.8 2.8L16 9.4"></path></svg> </span> 383Rule catalogue 384</a> </div> </div> <a class="np-sol-foot" href="/zopnight/resources"> <span class="np-sol-foot-title">Free reports and handbooks</span> <span class="np-sol-foot-arrow" aria-hidden="true">â</span> </a> </div> </div> <!-- âââââââ RESOURCES · Latest hero + compact icon list âââââââ --> <div class="nav-pane" data-pane="resources"> <div class="np-bento np-bento--resources-v2"> <!-- Featured · "Latest from the blog" hero card. Text sits 385 on the top-left (eyebrow + title + meta + CTA); the 386 cover image is anchored at the bottom and is only 387 partly visible at rest (translateY 55%). On card hover 388 the image slides up so the cover reads clearly. Same 389 peek pattern as the product dropdown ZopNight card. --> <a class="np-res-hero" href="/resources/blogs/a-hardcoded-payment-callback-was-404ing-on-prod-all-along"> <span class="np-res-hero-body"> <span class="np-res-hero-eyebrow"> <span class="np-res-hero-dot" aria-hidden="true"></span> 390Latest from the blog 391</span> <div class="np-res-hero-title">ZopNight's Billing Rewrite: Clearer Invoices, Safer Payments</div> <span class="np-res-hero-meta">3 min read · cloud-governance</span> <span class="np-res-hero-cta">Read Post <span class="np-res-hero-arrow" aria-hidden="true">â</span></span> </span> <span class="np-res-hero-peek" aria-hidden="true"> <img src="https://storage.googleapis.com/zopdev-blog-resources/1/files/originals/20261002/974341b6-28b1-466e-b852-91034a81b1f8-banner.webp" alt="" width="240" height="160" loading="lazy" decoding="async"> </span> </a> <!-- Compact list · 8 links, icon + title only, no descriptions --> <div class="np-res-list"> <a class="np-res-row" href="/resources/blogs"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M4 4h12v12H4z" stroke="currentColor" stroke-width="1.5"></path><path d="M7 8h6M7 11h4" stroke="currentColor" stroke-width="1.5" stroke-linecap="square"></path></svg> </span> 392Blog 393</a> <a class="np-res-row" href="/resources/ebooks"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M3 4h7v13H3zM10 4h7v13h-7z" stroke="currentColor" stroke-width="1.5"></path><path d="M10 4v13" stroke="currentColor" stroke-width="1.5"></path></svg> </span> 394Ebooks 395</a> <a class="np-res-row" href="/resources/university"> <span class="np-res-row-icon">
395 <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M2 7l8-4 8 4-8 4-8-4z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path><path d="M5 9v4c0 1.1 2.24 2 5 2s5-.9 5-2V9" stroke="currentColor" stroke-width="1.5"></path></svg> </span> 396University 397</a> <a class="np-res-row" href="/changelog"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><circle cx="10" cy="10" r="7" stroke="currentColor" stroke-width="1.5"></circle><path d="M10 6v4l2.5 2.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="square"></path></svg> </span> 398Changelog 399</a> <a class="np-res-row" href="/developer-docs"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><path d="M7 6l-4 4 4 4M13 6l4 4-4 4" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter"></path></svg> </span> 400Developer docs 401</a> <a class="np-res-row" href="/docs"> <span class="np-res-row-icon"> <svg width="16" height="16" viewBox="0 0 20 20" fill="none"><rect x="3" y="4" width="14" height="12" stroke="currentColor" stroke-width="1.5"></rect>
401<path d="M9 8l3 2-3 2z" fill="currentColor"></path></svg> </span> 402Product docs 403</a> </div> </div> </div> <!-- âââââââ COMPANY · About hero + Careers / Contact stack âââââââ --> <div class="nav-pane" data-pane="company"> <div class="np-bento np-bento--company-v2"> <!-- About · larger hero card with a stylized company peek 404 (wordmark + founder avatars + location strip) that 405 slides up on hover, monochrome at rest. --> <a class="np-comp-card" href="/about"> <span class="np-comp-eyebrow"> <svg class="np-comp-eyebrow-mark" viewBox="0 0 715 276" aria-hidden="true" focusable="false"><use href="#logo-zopdev"></use></svg> <span>About <span class="brand-lc">zopdev</span></span> </span> <div class="np-comp-title">Founded 2024.</div> <p class="np-comp-desc">Technology Value OS for AI, Cloud and Human.</p> <span class="np-comp-cta">Meet the Team <span class="np-comp-arrow" aria-hidden="true">â</span></span> <!-- Photo stack · 3 company photos overlapping with a 406 subtle offset + rotation. On card hover they fan out 407 horizontally so all three are visible at once. --> <span class="np-comp-stack" aria-hidden="true"> <img class="np-comp-stack-img np-comp-stack-img--3" src="https://storage.googleapis.com/zopdev-ui-assets/websitev2-images/about/offices/office-2-600w.jpg" alt="" width="600" height="400" loading="lazy" decoding="async"> <img class="np-comp-stack-img np-comp-stack-img--2" src="https://storage.googleapis.com/zopdev-ui-assets/websitev2-images/about/founders/founders-2-800w.jpg" alt="" width="800" height="600" loading="lazy" decoding="async"> <img class="np-comp-stack-img np-comp-stack-img--1" src="https://storage.googleapis.com/zopdev-ui-assets/websitev2-images/about/founders/founders-1-800w.jpg" alt="" width="800" height="600" loading="lazy" decoding="async"> </span> </a> <!-- Media Kit · compact cell, logos + brand files --> <a class="np-comp-cell" href="/media-kit"> <div class="np-cell-icon"> <svg width="18" height="18" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter"><path d="M3 4h11v12H3z"></path><path d="M14 7h3v9h-3"></path><path d="M6 8h5M6 11h5M6 14h3" stroke-width="1.3" stroke-linecap="square"></path></svg> </div> <div class="np-cell-title">Media Kit</div> <p class="np-cell-desc">Logos, marks & brand files · all formats</p> </a> <!-- Contact · compact cell --> <a class="np-comp-cell" href="/contact"> <div class="np-cell-icon"> <svg width="18" height="18" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter"><path d="M3 5h14v10H3z"></path><path d="M3 5l7 5 7-5"></path></svg> </div> <div class="np-cell-title">Contact</div> <p class="np-cell-desc">Talk to sales · founders reply within 24h</p> </a> </div> </div> <!-- âââââââ OPEN SOURCE · the two deploy-button pages âââââââ 408 Same two-card shape as the Playground pane (np-play-*), one card 409 per product, so it reads as part of the same menu family. --> <div class="nav-pane" data-pane="opensource"> <div class="np-bento np-bento--playground-v2"> <a class="np-play-card np-play-card--cloud" href="/zopcloud/oss"> <div class="np-play-head"> <svg class="np-play-mark" viewBox="0 0 32 32" aria-hidden="true" focusable="false"><use href="#mark-zopcloud"></use></svg> <div class="np-play-body"> <div class="np-play-title">zopcloud</div> <p class="np-play-desc">A Deploy to ZopCloud button for your README</p> </div> <span class="np-play-arrow" aria-hidden="true">→</span> </div> <div class="np-play-foot"> <span class="np-play-foot-mark np-play-foot-mark--cloud" aria-hidden="true"></span> <span class="np-play-foot-text">Hosted, free to start</span> </div> </a> <a class="np-play-card np-play-card--day" href="/zopday/oss"> <div class="np-play-head"> <svg class="np-play-mark" viewBox="0 0 32 32" aria-hidden="true" focusable="false"><use href="#mark-zopday"></use></svg> <div class="np-play-body"> <div class="np-play-title">zopday</div> <p class="np-play-desc">Deploy buttons for zopcloud or their own cloud</p> </div> <span class="np-play-arrow" aria-hidden="true">→</span> </div> <div class="np-play-foot"> <span class="np-play-foot-mark np-play-foot-mark--day" aria-hidden="true"></span> <span class="np-play-foot-text">Your own AWS, GCP or Azure</span> </div> </a> </div> </div> <!-- âââââââ PLAYGROUND · 2 hands-on consoles âââââââ --> <div class="nav-pane" data-pane="playground"> <div class="np-bento np-bento--playground-v2"> <a class="np-play-card np-play-card--night" href="/zopnight/playground"> <div class="np-play-head"> <svg class="np-play-mark" viewBox="0 0 32 32" aria-hidden="true" focusable="false"><use href="#mark-zopnight"></use></svg> <div class="np-play-body"> <div class="np-play-title">zopnight playground</div> <p class="np-play-desc">Cost loop · idle, schedules, anomalies</p> </div> <span class="np-play-arrow" aria-hidden="true">→</span> </div> <div class="np-play-foot"> <span class="np-play-foot-mark np-play-foot-mark--night" aria-hidden="true"></span> <span class="np-play-foot-text">Cost console</span> </div> </a> <a class="np-play-card np-play-card--day" href="/zopday/playground"> <div class="np-play-head"> <svg class="np-play-mark" viewBox="0 0 32 32" aria-hidden="true" focusable="false"><use href="#mark-zopday"></use></svg> <div class="np-play-body"> <div class="np-play-title">zopday playground</div> <p class="np-play-desc">Deploy loop ·
409 clusters, datastores, push</p> </div> <span class="np-play-arrow" aria-hidden="true">→</span> </div> <div class="np-play-foot"> <span class="np-play-foot-mark np-play-foot-mark--day" aria-hidden="true"></span> <span class="np-play-foot-text">Deploy console</span> </div> </a> </div> </div> </div> </div> <div class="nav-cta gap-2 sm:gap-3 md:gap-3 lg:gap-4 shrink min-w-0 max-w-full"> <div class="nav-item nav-item--playground" data-menu="playground"> <a class="chip-playground" href="#" aria-haspopup="true" aria-expanded="false"> <span>Playground</span> <span class="nav-caret chip-playground-caret" aria-hidden="true"></span> </a> </div> <a class="sign" href="/zopnight/app/signin">Sign In</a> <a class="btn btn-accent text-xs sm:text-sm md:text-sm lg:text-base whitespace-nowrap" href="https://bookings.zop.dev/#/discover-zopdev" target="_blank" rel="noopener noreferrer"><span>Book a Demo</span> <span class="arrow">â</span></a> </div> <button class="mob-nav-toggle" id="mob-nav-toggle" aria-label="Open menu" aria-expanded="false" aria-controls="mob-nav-drawer" type="button"> <span class="bars" aria-hidden="true"><span></span><span></span><span></span></span> </button> </div> </nav> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style>
409<script>(()=>{var l=(n,t)=>{let i=async()=>{await(await n())()},e=typeof t.value=="object"?t.value:void 0,s={timeout:e==null?void 0:e.timeout};"requestIdleCallback"in window?window.requestIdleCallback(i,s):setTimeout(i,s.timeout||200)};(self.Astro||(self.Astro={})).idle=l;window.dispatchEvent(new Event("astro:idle"));})();</script>
409<script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script>
409<astro-island uid="2dcPsU" prefix="r4" component-url="/_astro/MegaMenu.BJWbIGbg.js" component-export="default" renderer-url="/_astro/client.bnjHR3qd.js" props="{}" ssr client="idle" opts="{"name":"MegaMenu","value":true}"></astro-island>
409<script type="module">const a="/zopnight/app/signin",i=new Set(["zopnight","zopday","zopcloud"]);function l(r){const n=r.toLowerCase().split("/").filter(Boolean)[0];return i.has(n)?n:null}function c(r,n){let t,e;try{e=new URL(n),t=new URL(r,e)}catch{return null}if(t.origin!==e.origin||t.pathname.replace(/\/+$/,"")!==a)return null;const o=l(e.pathname);return o?t.searchParams.set("app",o):t.searchParams.delete("app"),`${t.pathname}${t.search}${t.hash}`}function s(r,n){for(const t of r.querySelectorAll(`a[href*="${a}"]`)){const e=c(t.getAttribute("href"),n);e&&e!==t.getAttribute("href")&&t.setAttribute("href",e)}}document.addEventListener("astro:page-load",()=>s(document,window.location.href));</script>
409 <!-- NOTE: the `#mob-nav-toggle` button is rendered ONCE by NavBar.astro 410 (inside .nav-inner, matching the original /website/*.html markup 411 where the toggle lives in the nav header). Do NOT duplicate it 412 here â having two `.mob-nav-toggle` elements showed up as two 413 hamburger icons on tablet viewports (the static markup AND the 414 IIFE-built drawer's bail-check `if(document.querySelector('.mob-nav-toggle')) return;` 415 would still pass because the markup itself was the duplicate). 416 This component now only owns the scrim + drawer aside. --><div class="mob-nav-scrim" id="mob-nav-scrim" aria-hidden="true" data-astro-transition-persist="mob-nav-scrim"></div> <aside class="mob-nav" id="mob-nav-drawer" inert aria-hidden="true" aria-label="Mobile navigation" data-astro-transition-persist="mob-nav"> <header class="mob-nav-head"> <a href="/" class="mob-nav-logo" aria-label="zopdev"> <svg viewBox="0 0 715 276" aria-hidden="true"><use href="#logo-zopdev"></use></svg> </a> <button class="mob-nav-close min-w-11 min-h-11 inline-flex items-center justify-center" id="mob-nav-close" aria-label="Close menu" type="button"> <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="square"> <path d="M3 3 L13 13 M13 3 L3 13"></path> </svg> </button> </header> <nav class="mob-nav-body flex flex-col gap-2 px-4 py-3 md:px-6 md:py-4 md:gap-3" aria-label="Mobile menu items"> <!-- PRODUCT · expandable --> <details class="mob-nav-group"> <summary class="flex items-center justify-between min-h-11 py-3 md:py-4"> <span>Product</span> <svg class="mob-nav-chev" width="14" height="14" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M3 5 L6 8 L9 5"></path></svg> </summary> <ul class="flex flex-col gap-1 md:gap-2 py-1"> <li><a class="flex items-center min-h-11 py-3 md:py-4" href="/zopnight"> <svg class="mob-nav-mark" viewBox="-1125 530 4943.43 952" role="img" aria-label="zopnight" focusable="false"> <rect x="-1125" y="530" width="952" height="952" fill="var(--logo-blue, #2A4494)"></rect> <circle cx="-649" cy="1006" r="238" fill="#FFFFFF"></circle> <path d="M27.0005 1250V1145.7157L279.1443 861.7128H30.2863V754H427.4279V858.2843L171.8557 1142.2872H432.4279V1250Z M732.8571 1262Q658.2858 1262 598.2859 1229.1429Q538.2859 1196.2858 503.2146 1137.3572Q468.1432 1078.4286 468.1432 1001.9838Q468.1432 924.5714 503.286 866.1428Q538.4288 807.7142 598.9287 774.8571Q659.4286 742 733.1311 742Q807.8571 742 867.7856 774.8571Q927.7141 807.7142 962.7854 866.1428Q997.8568 924.5714 997.8568 1001.9838Q997.8568 1078.4286 962.714 1137.3572Q927.5712 1196.2858 867.5713 1229.1429Q807.5714 1262 732.8571 1262ZM732.7416 1149.7159Q769.0004 1149.7159 798.8578 1133.2157Q828.7153 1116.7155 846.4298 1083.8986Q864.1443 1051.0816 864.1443 1002.4093Q864.1443 952.9995 846.0727 920.142Q828.0011 887.2845 798.5722 870.7843Q769.1432 854.2841 733.5714 854.2841Q697.9996 854.2841 667.9998 870.9116Q638 887.539 619.9278 920.055Q601.8557 952.5709 601.8557 1002.0838Q601.8557 1050.8577 619.5702 1083.7866Q637.2847 1116.7155 667.2537 1133.2157Q697.2227 1149.7159 732.7416 1149.7159Z M1042.5721 1470V754H1172.5703V824.5719Q1196.5703 791.7146 1236.2133 766.8573Q1275.8564 742 1338.1423 742Q1407.9996 742 1462.9996 776Q1517.9996 810 1549.7853 869Q1581.571 928 1581.571 1003Q1581.571 1077.1429 1549.7853 1136.0714Q1517.9996 1195 1462.9996 1228.5Q1407.9996 1262 1337.9995 1262Q1281.8564 1262 1240.2133 1241.0713Q1198.5703 1220.1425 1172.5703 1182.5708V1470ZM1309.2859 1148.7159Q1350.2863 1148.7159 1382.1437 1129.7157Q1414.0011 1110.7155 1431.8584 1077.7866Q1449.7157 1044.8577 1449.7157 1002.8571Q1449.7157 959.9995 1431.8584 926.5705Q1414.0011 893.1416 1382.1437 874.2129Q1350.2863 855.2841 1309.2859 855.2841Q1268.4285 855.2841 1236.9282 874.2129Q1205.4279 893.1416 1187.5706 926.142Q1169.7133 959.1423 1169.7133 1002Q1169.7133 1044.8577 1187.5706 1077.7866Q1205.4279 1110.7155 1236.9282 1129.7157Q1268.4285 1148.7159 1309.2859 1148.7159Z M1623.7151 1250V754H1753.7133V828.8575Q1777.8562 788.8573 1819.8563 765.4286Q1861.8564 742 1917.7135 742Q2010.5704 742 2060.9991 800.4284Q2111.4277 858.8568 2111.4277 970.7139V1250H1981.4296V982.9995Q1981.4296 918.9989 1955.5007 885.4273Q1929.5719 851.8557 1874.8573 851.8557Q1822.2854 851.8557 1787.9994 889.2846Q1753.7133 926.7135 1753.7133 993.8571V1250Z M2173.1438 1250V754H2303.142V1250ZM2176.0004 671.8566V545.7144H2301.7139V671.8566Z M2636.8568 1482Q2573.4281 1482 2515.7854 1461.1428Q2458.1427 1440.2856 2418.0714 1395.7857Q2378.0002 1351.2858 2369.5715 1281.429H2498.5697Q2507.8557 1321.858 2545.2846 1345.7155Q2582.7135 1369.573 2634.2854 1369.573Q2671.7144 1369.573 2703.35
41676 1353.9299Q2735.0007 1338.2869 2753.858 1306.5722Q2772.7153 1274.8575 2772.7153 1226.1427V1163.9995Q2757.5724 1187.8568 2733.9295 1207.9284Q2710.2865 1228 2677.7149 1240.2859Q2645.1432 1252.5717 2602.7144 1252.5717Q2532.0002 1252.5717 2475.4287 1219.0003Q2418.8573 1185.4288 2386.2144 1127.2859Q2353.5715 1069.1431 2353.5715 996.7144Q2353.5715 924.2858 2386.2144 866.6429Q2418.8573 809 2475.4287 775.5Q2532.0002 742 2602.8573 742Q2659.8577 742 2703.7151 765.3574Q2747.5724 788.7148 2772.7153 823.2865V754H2902.7135V1219.2858Q2902.7135 1305.2856 2866.4279 1363.7856Q2830.1423 1422.2856 2769.7139 1452.1428Q2709.2854 1482 2636.8568 1482ZM2628.8568 1140.1447Q2671.5714 1140.1447 2703.3574 1121.1445Q2735.1434 1102.1443 2753.2151 1069.9297Q2771.2867 1037.715 2771.2867 997.5715Q2771.2867 956.4281 2753.2151 924.3563Q2735.1434 892.2845 2703.3574 873.7843Q2671.5714 855.2841 2628.8568 855.2841Q2586.9993 855.2841 2554.7847 873.7843Q2522.5701 892.2845 2504.4984 923.9277Q2486.4268 955.571 2486.4268 996.7144Q2486.4268 1036.8578 2504.4984 1069.5011Q2522.5701 1102.1443 2554.7847 1121.1445Q2586.9993 1140.1447 2628.8568 1140.1447Z M2964.1436 1250V530H3094.1418V829.1432Q3118.4276 789.0002 3161.4991 765.5001Q3204.5706 742 3259.4277 742Q3351.1418 742 3401.499 800.4284Q3451.8562 858.8568 3451.8562 970.7139V1250H3322.858V982.9995Q3322.858 918.9989 3297.5721 885.4273Q3272.2861 851.8557 3217.5715 851.8557Q3164.1425 851.8557 3129.1422 889.2846Q3094.1418 926.7135 3094.1418 993.8571V1250Z M3715.8564 1250Q3665.8568 1250 3631.6427 1238.2858Q3597.4286 1226.5715 3580.0716 1193.2146Q3562.7146 1159.8577 3562.7146 1097.1438V862.8557H3477.5717V754H3562.7146V621.0005H3692.7128V754H3818.4277V862.8557H3692.7128V1080.7153Q3692.7128 1105.5728 3697.7842 1118.1443Q3702.8557 1130.7159 3716.7843 1135.073Q3730.713 1139.4301 3755.2847 1139.4301H3814.5704V1250Z" fill="currentColor"></path> </svg> <small>Cloud governance + FinOps</small> </a></li> <li><a class="flex items-center min-h-11 py-3 md:py-4" href="/zopday"> <svg class="mob-nav-mark" viewBox="-1125 530 4407.43 952" role="img" aria-label="zopday" focusable="false"> <rect x="-1125" y="530" width="952" height="952" fill="var(--zop-orange, #F58549)"></rect> <circle cx="-649" cy="1006" r="238" fill="#FFFFFF"></circle> <path d="M27.0005 1250V1145.7157L279.1443 861.7128H30.2863V754H427.4279V858.2843L171.8557 1142.2872H432.4279V1250Z M732.8571 1262Q658.2858 1262 598.2859 1229.1429Q538.2859 1196.2858 503.2146 1137.3572Q468.1432 1078.4286 468.1432 1001.9838Q468.1432 924.5714 503.286 866.1428Q538.4288 807.7142 598.9287 774.8571Q659.4286 742 733.1311 742Q807.8571 742 867.7856 774.8571Q927.7141 807.7142 962.7854 866.1428Q997.8568 924.5714 997.8568 1001.9838Q997.8568 1078.4286 962.714 1137.3572Q927.5712 1196.2858 867.5713 1229.1429Q807.5714 1262 732.8571 1262ZM732.7416 1149.7159Q769.0004 1149.7159 798.8578 1133.2157Q828.7153 1116.7155 846.4298 1083.8986Q864.1443 1051.0816 864.1443 1002.4093Q864.1443 952.9995 846.0727 920.142Q828.0011 887.2845 798.5722 870.7843Q769.1432 854.2841 733.5714 854.2841Q697.9996 854.2841 667.9998 870.9116Q638 887.539 619.9278 920.055Q601.8557 952.5709 601.8557 1002.0838Q601.8557 1050.8577 619.5702 1083.7866Q637.2847 1116.7155 667.2537 1133.2157Q697.2227 1149.7159 732.7416 1149.7159Z M1042.5721 1470V754H1172.5703V824.5719Q1196.5703 791.7146 1236.2133 766.8573Q1275.8564 742 1338.1423 742Q1407.9996 742 1462.9996 776Q1517.9996 810 1549.7853 869Q1581.571 928 1581.571 1003Q1581.571 1077.1429 1549.7853 1136.0714Q1517.9996 1195 1462.9996 1228.5Q1407.9996 1262 1337.9995 1262Q1281.8564 1262 1240.2133 1241.0713Q1198.5703 1220.1425 1172.5703 1182.5708V1470ZM1309.2859 1148.7159Q1350.2863 1148.7159 1382.1437 1129.7157Q1414.0011 1110.7155 1431.8584 1077.7866Q1449.7157 1044.8577 1449.7157 1002.8571Q1449.7157 959.9995 1431.8584 926.5705Q1414.0011 893.1416 1382.1437 874.2129Q1350.2863 855.2841 1309.2859 855.2841Q1268.4285 855.2841 1236.9282 874.2129Q1205.4279 893.1416 1187.5706 926.142Q1169.7133 959.1423 1169.7133 1002Q1169.7133 1044.8577 1187.5706 1077.7866Q1205.4279 1110.7155 1236.9282 1129.7157Q1268.4285 1148.7159 1309.2859 1148.7159Z M1848.7148 1262Q1778.8575 1262 1723.4289 1228Q1668.0004 1194 1636.2147 1134.5714Q1604.429 1075.1429 1604.429 1001Q1604.429 926 1636.2147 867.5Q1668.0004 809 1723.5004 775.5Q1779.0004 742 1848.8577 742Q1905.0007 742 1946.7152 762.9287Q1988.4297 783.8575 2013.4297 821.4292V530H2143.4279V1250H2013.4297V1179.4281Q1990.2869 1212.1425 1950.7152 1237.0713Q1911.1436 1262 1848.7148 1262ZM1876.7141 1148.7159Q1917.7144 1148.7159 1949.1432
4161129.7157Q1980.5721 1110.7155 1998.4294 1077.358Q2016.2867 1044.0005 2016.2867 1002Q2016.2867 959.1423 1998.4294 926.142Q1980.5721 893.1416 1949.1432 874.2129Q1917.7144 855.2841 1876.7141 855.2841Q1836.7137 855.2841 1804.7849 874.2129Q1772.856 893.1416 1754.9987 925.7134Q1737.1414 958.2852 1737.1414 1001.1429Q1737.1414 1044.0005 1754.9987 1077.358Q1772.856 1110.7155 1804.7849 1129.7157Q1836.7137 1148.7159 1876.7141 1148.7159Z M2375.7146 1262Q2319.7144 1262 2279.5715 1241.8571Q2239.4286 1221.7142 2218.143 1187.6428Q2196.8573 1153.5714 2196.8573 1113Q2196.8573 1035.2856 2252.9288 992.7141Q2309.0004 950.1427 2400.0005 950.1427Q2442.7148 950.1427 2474.0006 956.2141Q2505.2865 962.2856 2524.858 968.5714V945Q2524.858 892.9995 2495.3578 868.9276Q2465.8577 844.8558 2419.4286 844.8558Q2386.2852 844.8558 2360.3563 858.2132Q2334.4274 871.5706 2327.1416 906.2854H2204.4288Q2210.4288 853.1425 2240.1432 816.5712Q2269.8575 779.9998 2316.6432 760.9999Q2363.4288 742 2419.4286 742Q2530.1427 742 2592.4995 795.0715Q2654.8562 848.1431 2654.8562 945V1057.1445Q2654.8562 1094.8588 2659.3562 1113.0016Q2663.8562 1131.1443 2674.0705 1135.93Q2684.2849 1140.7157 2700.8564 1140.7157H2705.4279V1250H2676.7141Q2623.8571 1250 2588.7859 1235.9999Q2553.7146 1221.9998 2538.0005 1181.1423Q2512.5721 1216.1425 2471.6435 1239.0713Q2430.715 1262 2375.7146 1262ZM2404.9996 1162.5726Q2437.0002 1162.5726 2459.7149 1148.1437Q2482.4296 1133.7148 2497.2154 1108.5714Q2512.0013 1083.4281 2518.0011 1052.9991Q2497.4296 1046.8562 2469.6436 1041.2848Q2441.8577 1035.7133 2413.5717 1035.7133Q2375.2847 1035.7133 2351.5701 1053.428Q2327.8555 1071.1427 2327.8555 1102.4288Q2327.8555 1128.5721 2348.5701 1145.5724Q2369.2847 1162.5726 2404.9996 1162.5726Z M2731.5721 1470V1367.1442H2838.1432Q2853.0004 1367.1442 2862.8575 1363.4298Q2872.7146 1359.7155 2881.786 1348.0011Q2890.8575 1336.2867 2901.429 1311.0007L2943.8582 1217.5708L2937.4296 1274.9989L2721.1438 754H2862.2847L3000 1100.573L3143.5726 754H3282.4277L3018.1418 1355.7141Q3001.7131 1392.5714 2989.5703 1415.3571Q2977.4274 1438.1429 2965.1417 1449.7143Q2952.856 1461.2858 2936.2847 1465.6429Q2919.7133 1470 2894.4277 1470Z" fill="currentColor"></path> </svg> <small>Internal Developer Platform</small> </a></li> <li><a class="flex items-center min-h-11 py-3 md:py-4" href="/zopcloud"> <svg class="mob-nav-mark" viewBox="-1125 530 5062.43 952" role="img" aria-label="zopcloud" focusable="false"> <rect x="-1125" y="530" width="952" height="952" fill="var(--logo-green, #7
416FB236)"></rect> <rect x="-768" y="768" width="238" height="178.5" fill="#FFFFFF"></rect> <rect x="-946.5" y="946.5" width="595" height="297.5" fill="#FFFFFF"></rect> <path d="M27.0005 1250V1145.7157L279.1443 861.7128H30.2863V754H427.4279V858.2843L171.8557 1142.2872H432.4279V1250Z M732.8571 1262Q658.2858 1262 598.2859 1229.1429Q538.2859 1196.2858 503.2146 1137.3572Q468.1432 1078.4286 468.1432 1001.9838Q468.1432 924.5714 503.286 866.1428Q538.4288 807.7142 598.9287 774.8571Q659.4286 742 733.1311 742Q807.8571 742 867.7856 774.8571Q927.7141 807.7142 962.7854 866.1428Q997.8568 924.5714 997.8568 1001.9838Q997.8568 1078.4286 962.714 1137.3572Q927.5712 1196.2858 867.5713 1229.1429Q807.5714 1262 732.8571 1262ZM732.7416 1149.7159Q769.0004 1149.7159 798.8578 1133.2157Q828.7153 1116.7155 846.4298 1083.8986Q864.1443 1051.0816 864.1443 1002.4093Q864.1443 952.9995 846.0727 920.142Q828.0011 887.2845 798.5722 870.7843Q769.1432 854.2841 733.5714 854.2841Q697.9996 854.2841 667.9998 870.9116Q638 887.539 619.9278 920.055Q601.8557 952.5709 601.8557 1002.0838Q601.8557 1050.8577 619.5702 1083.7866Q637.2847 1116.7155 667.2537 1133.2157Q697.2227 1149.7159 732.7416 1149.7159Z M1042.5721 1470V754H1172.5703V824.5719Q1196.5703 791.7146 1236.2133 766.8573Q1275.8564 742 1338.1423 742Q1407.9996 742 1462.9996 776Q1517.9996 810 1549.7853 869Q1581.571 928 1581.571 1003Q1581.571 1077.1429 1549.7853 1136.0714Q1517.9996 1195 1462.9996 1228.5Q1407.9996 1262 1337.9995 1262Q1281.8564 1262 1240.2133 1241.0713Q1198.5703 1220.1425 1172.5703 1182.5708V1470ZM1309.2859 1148.7159Q1350.2863 1148.7159 1382.1437 1129.7157Q1414.0011 1110.7155 1431.8584 1077.7866Q1449.7157 1044.8577 1449.7157 1002.8571Q1449.7157 959.9995 1431.8584 926.5705Q1414.0011 893.1416 1382.1437 874.2129Q1350.2863 855.2841 1309.2859 855.2841Q1268.4285 855.2841 1236.9282 874.2129Q1205.4279 893.1416 1187.5706 926.142Q1169.7133 959.1423 1169.7133 1002Q1169.7133 1044.8577 1187.5706 1077.7866Q1205.4279 1110.7155 1236.9282 1129.7157Q1268.4285 1148.7159 1309.2859 1148.7159Z M1864 1262Q1788.1431 1262 1729.6432
4161228.6429Q1671.1432 1195.2858 1637.7861 1136.7858Q1604.429 1078.2858 1604.429 1002Q1604.429 925.5714 1637.7861 867.1428Q1671.1432 808.7142 1729.6432 775.3571Q1788.1431 742 1864 742Q1958.7141 742 2023.6424 791.7141Q2088.5708 841.4283 2107.1422 928.285H1970.287Q1961.0013 893.7131 1931.9295 873.5701Q1902.8577 853.427 1863.1429 853.427Q1828.5712 853.427 1799.7137 871.2129Q1770.8562 888.9987 1754.0703 921.8562Q1737.2843 954.7137 1737.2843 1002Q1737.2843 1048.2863 1754.0703 1082.0724Q1770.8562 1115.8584 1799.7137 1133.6443Q1828.5712 1151.4301 1863.1429 1151.4301Q1902.8577 1151.4301 1931.9295 1131.7156Q1961.0013 1112.0011 1970.287 1075.715H2107.1422Q2089.5708 1159.7146 2024.1424 1210.8573Q1958.7141 1262 1864 1262Z M2152.0009 1250V530H2281.9991V1250Z M2590.8571 1262Q2516.2858 1262 2456.2859 1229.1429Q2396.2859 1196.2858 2361.2146 1137.3572Q2326.1432 1078.4286 2326.1432 1001.9838Q2326.1432 924.5714 2361.286 866.1428Q2396.4288 807.7142 2456.9287 774.8571Q2517.4286 742 2591.1311 742Q2665.8571 742 2725.7856 774.8571Q2785.7141 807.7142 2820.7854 866.1428Q2855.8568 924.5714 2855.8568 1001.9838Q2855.8568 1078.4286 2820.714 1137.3572Q2785.5712 1196.2858 2725.5713 1229.1429Q2665.5714 1262 2590.8571 1262ZM2590.7416 1149.7159Q2627.0004 1149.7159 2656.8578 1133.2157Q2686.7153 1116.7155 2704.4298 1083.8986Q2722.1443 1051.0816 2722.1443 1002.4093Q2722.1443 952.9995 2704.0727 920.142Q2686.0011 887.2845 2656.5722 870.7843Q2627.1432 854.2841 2591.5714 854.2841Q2555.9996 854.2841 2525.9998 870.9116Q2496 887.539 2477.9278 920.055Q2459.8557 952.5709 2459.8557 1002.0838Q2459.8557 1050.8577 2477.5702 1083.7866Q2495.2847 1116.7155 2525.2537 1133.2157Q2555.2227 1149.7159 2590.7416 1149.7159Z M3074.1438 1262Q2989.144 1262 2939.7868 1203.5716Q2890.4296 1145.1432 2890.4296 1033.2861V754H3019.5706V1021.0005Q3019.5706 1085.0011 3044.0709 1118.5727Q3068.5712 1152.1443 3116.1429 1152.1443Q3168.7148 1152.1443 3198.0008 1114.7154Q3227.2869 1077.2865 3227.2869 1010.1429V754H3357.285V1250H3227.2869V1177.1425Q3205.2869 1216.2856 3167.1439 1239.1428Q3129.0009 1262 3074.1438 1262Z M3642.7148 1262Q3572.8575 1262 3517.4289 1228Q3462.0004 1194 3430.2147 1134.5714Q3398.429 1075.1429 3398.429 1001Q3398.429 926 3430.2147 867.5Q3462.0004 809 3517.5004 775.5Q3573.0004 742 3642.8577 742Q3699.0007 742 3740.7152 762.9287Q3782.4297 783.8575 3807.4297 821.4292V530H3937.4279V1250H3807.4297V1179.4281Q3784.2869 1212.1425 3744.7152 1237.0713Q3705.1436 1262 3642.7148 1262ZM3670.7141 1148.7159Q3711.7144 1148.7159 3743.1432 1129.7157Q3774.5721 1110.7155 3792.4294 1077.358Q3810.2867 1044.0005 3810.2867 1002Q3810.2867 959.1423 3792.4294 926.142Q3774.5721 893.1416 3743.1432 874.2129Q3711.7144 855.2841 3670.7141 855.2841Q3630.7137 855.2841 3598.7849 874.2129Q3566.856 893.1416 3548.9987 925.7134Q3531.1414 958.2852 3531.1414 1001.1429Q3531.1414 1044.0005 3548.9987 1077.358Q3566.856 1110.7155 3598.7849 1129.7157Q3630.7137 1148.7159 3670.7141 1148.7159Z" fill="currentColor"></path> </svg> <small>Push repo, get a URL</small> </a></li> </ul> </details> <!-- SOLUTIONS · expandable. Grouped as the ZopNight app groups them. --> <details class="mob-nav-group"> <summary class="flex items-center justify-between min-h-11 py-3 md:py-4"> <span>Solutions</span> <svg class="mob-nav-chev" width="14" height="14" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M3 5 L6 8 L9 5"></path></svg> </summary> <ul class="flex flex-col gap-1 md:gap-2 py-1"> <li class="mob-nav-subhead" aria-hidden="true"><span>Estate</span></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/architecture">Architecture<small>See what breaks before you touch it</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/globe-view">Globe view<small>Your whole estate, on one globe</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/auto-tagging">Auto tagging<small>Untagged resources, attributed anyway</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/resource-discovery">Resource discovery<small>Every resource, every cloud</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/ownership-detection">Ownership detection<small>
416Who built it, and are they here</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/cloud-accounts">Cloud accounts<small>Connect six platforms securely</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/openshift">OpenShift<small>ROSA clusters, connected properly</small></a></li> <li class="mob-nav-subhead" aria-hidden="true"><span>Automate</span></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/schedules">Schedules<small>Nothing runs at 3am unless you said so</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/overrides">Overrides<small>Keep it running. Just not forever.</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/resource-groups">Resource groups<small>Start a stack in the right order</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/auto-scaling">Auto Scaling<small>Autoscaling you can hand over gradually</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/event-readiness">Event Readiness<small>Scale up for the sale, before the sale</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/auto-remediation">Auto-remediation<small>Findings fixed from the product</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/notifications">Notifications<small>Slack, Teams, Google Chat, webhooks</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/integrations">Integrations<small>Clouds, data platforms, Kubernetes, repos</small></a></li> <li class="mob-nav-subhead" aria-hidden="true"><span>Cost</span></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/cost-report">Cost Report<small>Every dollar, traced to what spent it</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/showback">Showback<small>Spend by team and by tag</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/team-budgets">Team budgets<small>Budgets tracked against live spend</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/unit-economics">Unit economics<small>Cost per customer, order or call</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/anomaly-detection">Anomaly detection<small>Spend spikes, with the likely cause</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/dashboards">Dashboards<small>Presets, or build your own</small></a></li> <li class="mob-nav-subhead" aria-hidden="true"><span>Govern</span></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/access-control">Access control<small>Roles scoped to single resources</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/audit-log">Audit log<small>Every change, request and response</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/iac-governance">IaC governance<small>Policy on every Terraform plan</small></a></li> <li class="mob-nav-subhead" aria-hidden="true"><span>AI</span></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/ai-gateway">AI Gateway<small>A hard budget on every LLM key</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/mcp-server">MCP server<small>Claude, Cursor and Codex, fenced in</small></a></li> <li class="mob-nav-subhead" aria-hidden="true"><span>Recommendations</span></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/recommendations">Recommendations<small>Savings you can audit</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/rules">Rule catalogue<small>447 checks, each with the fix</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/zopnight/resources">Reports & handbooks<small>Free, two fields to unlock</small></a></li> </ul> </details> <!-- OPEN SOURCE · expandable --> <details class="mob-nav-group"> <summary class="flex items-center justify-between min-h-11 py-3 md:py-4"> <span>Open Source</span> <svg class="mob-nav-chev" width="14" height="14" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M3 5 L6 8 L9 5"></path></svg> </summary> <ul class="flex flex-col gap-1 md:gap-2 py-1"> <li><a class="flex items-center min-h-11 py-3 md:py-4" href="/zopcloud/oss"> <svg class="mob-nav-mark" viewBox="0 0 32 32" aria-hidden="true"><use href="#mark-zopcloud"></use></svg> 417zopcloud<small>A Deploy to ZopCloud button for your README</small> </a></li> <li><a class="flex items-center min-h-11 py-3 md:py-4" href="/zopday/oss"> <svg class="mob-nav-mark" viewBox="0 0 32 32" aria-hidden="true"><use href="#mark-zopday"></use></svg> 418zopday<small>Deploy buttons for zopcloud or their own cloud</small> </a></li> </ul> </details> <!-- RESOURCES · expandable --> <details class="mob-nav-group"> <summary class="flex items-center justify-between min-h-11 py-3 md:py-4"> <span>Resources</span> <svg class="mob-nav-chev" width="14" height="14" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M3 5 L6 8 L9 5"></path></svg> </summary> <ul class="flex flex-col gap-1 md:gap-2 py-1"> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/resources/blogs">Blog<small>Engineering + cost notes</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/resources/ebooks">Ebooks<small>Free playbooks</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/resources/university">University<small>Certifications</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/changelog">Changelog<small>What shipped this week</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/developer-docs">Developer docs<small>APIs, SDKs & integrations</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/docs">Product docs<small>Guides & how-tos</small></a></li> </ul> </details> <!-- PRICING · single link --> <a class="mob-nav-link" href="/pricing">Pricing</a> <!-- COMPANY · expandable --> <details class="mob-nav-group"> <summary class="flex items-center justify-between min-h-11 py-3 md:py-4"> <span>Company</span> <svg class="mob-nav-chev" width="14" height="14" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M3 5 L6 8 L9 5"></path></svg> </summary> <ul class="flex flex-col gap-1 md:gap-2 py-1"> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/about">About<small>Founded 2024</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/media-kit">Media Kit<small>Logos, brand files</small></a></li> <li><a class="flex flex-col justify-center min-h-11 py-3 md:py-4" href="/contact">Contact<small>Talk to sales</small></a></li> </ul> </details> <!-- COMMUNITY · single link --> <!-- PLAYGROUND · expandable --> <details class="mob-nav-group"> <summary class="flex items-center justify-between min-h-11 py-3 md:py-4"> <span>Playground</span> <svg class="mob-nav-chev" width="14" height="14" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M3 5 L6 8 L9 5"></path></svg> </summary> <ul class="flex flex-col gap-1 md:gap-2 py-1"> <li><a class="flex items-center min-h-11 py-3 md:py-4" href="/zopnight/playground"> <svg class="mob-nav-mark" viewBox="0 0 32 32" aria-hidden="true"> <rect x="0" y="0" width="32" height="32" fill="#2A4494"></rect> <circle cx="16" cy="16" r="8" fill="#FFFFFF"></circle> </svg> 419zopnight playground<small>Cost loop · idle, schedules, anomalies</small> </a></li> <li><a class="flex items-center min-h-11 py-3 md:py-4" href="/zopday/playground"> <svg class="mob-nav-mark" viewBox="0 0 32 32" aria-hidden="true"> <rect x="0" y="0" width="32" height="32" fill="#F58549"></rect> <circle cx="16" cy="16" r="8" fill="#FFFFFF"></circle> </svg> 420zopday playground<small>Deploy loop ·
420 clusters, datastores, push</small> </a></li> </ul> </details> </nav> <div class="mob-nav-foot"> <a href="/zopnight/app/signin" class="inline-flex items-center justify-center gap-sp-2 font-mono font-bold tracking-[-0.02em] cursor-pointer transition-[background-color,border-color,color] duration-150 disabled:opacity-60 disabled:cursor-not-allowed whitespace-nowrap py-[13px] px-[22px] text-t-14 leading-[22px] bg-transparent text-ink border border-line hover:bg-[var(--btn-outline-tint)] hover:border-ink mob-nav-foot-cta">Sign In</a> <a href="https://bookings.zop.dev/#/discover-zopdev" class="inline-flex items-center justify-center gap-sp-2 font-mono font-bold tracking-[-0.02em] cursor-pointer transition-[background-color,border-color,color] duration-150 disabled:opacity-60 disabled:cursor-not-allowed whitespace-nowrap py-[13px] px-[22px] text-t-14 leading-[22px] bg-zop-orange !text-zop-black font-bold border border-zop-orange hover:bg-[var(--btn-fill-orange-hover)] hover:border-[var(--btn-fill-orange-hover)] mob-nav-foot-cta" target="_blank" rel="noopener noreferrer"><span>Book a Demo</span> <span aria-hidden="true">→</span></a> </div> </aside>
420<script type="module">(function(){var n=document.getElementById("mob-nav-toggle"),t=document.getElementById("mob-nav-drawer"),a=document.getElementById("mob-nav-scrim"),o=document.getElementById("mob-nav-close");if(!n||!t||t.dataset.drawerWired==="1")return;t.dataset.drawerWired="1";var e=null;function l(){e=document.activeElement,t.classList.add("open"),t.removeAttribute("aria-hidden"),t.removeAttribute("inert"),a&&(a.classList.add("open"),a.removeAttribute("aria-hidden")),n.setAttribute("aria-expanded","true"),n.setAttribute("aria-label","Close menu"),document.body.style.overflow="hidden"}function d(){t.classList.remove("open"),t.setAttribute("inert",""),t.setAttribute("aria-hidden","true"),a&&(a.classList.remove("open"),a.setAttribute("aria-hidden","true")),n.setAttribute("aria-expanded","false"),n.setAttribute("aria-label","Open menu"),document.body.style.overflow="",e&&typeof e.focus=="function"&&e.focus()}function i(){t.classList.contains("open")?d():l()}n.addEventListener("click",i),a&&a.addEventListener("click",d),o&&o.addEventListener("click",d),document.addEventListener("keydown",function(s){s.key==="Escape"&&t.classList.contains("open")&&d()}),t.querySelectorAll("a[href]").forEach(function(s){s.addEventListener("click",function(){setTimeout(d,40)})});var r=window.matchMedia("(max-width: 899.98px)");function c(){!r.matches&&t.classList.contains("open")&&d()}r.addEventListener?r.addEventListener("change",c):r.addListener&&r.addListener(c)})();(function(){var n=document.querySelector(".nav");if(!n||n.dataset.scrollHideWired==="1")return;n.dataset.scrollHideWired="1";function t(){return document.body&&document.body.classList.contains("docs-page")}if(t()&&n.classList.remove("nav--hidden"),!document.getElementById("zd-navscroll-css")){var a=document.createElement("style");a.id="zd-navscroll-css",a.textContent=".nav{transition:transform .24s cubic-bezier(.65,0,.35,1), background-color var(--dur-md,.4s) var(--ease-in-out,cubic-bezier(.65,0,.35,1)), border-color var(--dur-md,.4s) var(--ease-in-out,cubic-bezier(.65,0,.35,1))}.nav.nav--hidden{transform:translateY(-110%)}",document.head.appendChild(a)}var o=0,e=0,l=72,d=10,i=!1,r=!1;function c(){r=!1;var s=window.pageYOffset,u=s-o;if(o=s,t()){i&&(n.classList.remove("nav--hidden"),i=!1),e=0;return}if(s<=0){i&&(n.classList.remove("nav--hidden"),i=!1),e=0;return}if(u>0){if(e=(e>0?e:0)+u,!i&&e>l){var v=document.getElementById("nav-overlay");v&&v.classList.remove("open"),n.classList.add("nav--hidden"),i=!0,e=0}}else e=(e<0?e:0)+u,i&&Math.abs(e)>d&&(n.classList.remove("nav--hidden"),i=!1,e=0)}window.addEventListener("scroll",function(){r||(requestAnimationFrame(c),r=!0)},{passive:!0})})();</script>
420 <main class="page p-0" id="main-content" tabindex="-1"> <svg width="0" height="0" aria-hidden="true" focusable="false" style="position:absolute"> <defs> <symbol id="zl-gchat" viewBox="0 0 192 192"><rect width="160" height="96" x="16" y="28" fill="#00AF57" rx="48"></rect><path fill="#0EBC5F" d="M133 48c28.167 0 51 22.834 51 51 0 28.167-22.833 51-51 51H96.624l-34.857 23.064c-3.86 2.544-5.789 3.816-7.372 3.92a6 6 0 0 1-5.612-3.022C48 172.583 48 170.271 48 165.649V148.81C25.121 143.78 8 123.39 8 99c0-28.166 22.834-51 51-51h74z"></path><mask id="a" width="176" height="129" x="8" y="48" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#0EBC5F" d="M133 48c28.167 0 51 22.834 51 51 0 28.167-22.833 51-51 51H96.722l-39.428 25.896c-3.99 2.62-9.294-.242-9.294-5.015V148.81C25.121 143.78 8 123.39 8 99c0-28.166 22.834-51 51-51h74z"></path></mask><g mask="url(#a)"><rect width="160" height="96" x="16" y="28" fill="#0EBC5F" rx="48"></rect><rect width="160" height="96" x="16" y="28" fill="url(#b)" rx="48"></rect><path stroke="#fff" stroke-linecap="round" stroke-width="12" d="M62 94s8.84 18 34 18 34-17.182 34-17.182"></path></g><defs><linearGradient id="b" x1="96" x2="96" y1="28" y2="124" gradientUnits="userSpaceOnUse"><stop offset=".09" stop-color="#94D4FF"></stop><stop offset=".28" stop-color="#78C9FF"></stop><stop offset=".88" stop-color="#01AE58" stop-opacity="0"></stop></linearGradient></defs></symbol> <symbol id="zl-servicenow" viewBox="0 0 1570 1403"><path fill="currentColor" fill-rule="evenodd" d="M1228.4 138.9c129.2 88.9 228.9 214.3 286.3 360.2 57.5 145.8 70 305.5 36 458.5S1437.8 1250 1324 1357.9c-13.3 12.9-28.8 23.4-45.8 30.8-17 7.5-35.2 11.9-53.7 12.9-18.5 1.1-37.1-1.1-54.8-6.6-17.7-5.4-34.3-13.9-49.1-25.2-48.2-35.9-101.8-63.8-158.8-82.6-57.1-18.9-116.7-28.5-176.8-28.5s-119.8 9.6-176.8 28.5c-57 18.8-110.7 46.7-158.9 82.6-14.6 11.2-31 19.8-48.6 25.3s-36 7.8-54.4 6.8c-18.4-.9-36.5-5.1-53.4-12.4s-32.4-17.5-45.8-30.2C132.5 1251 53 1110.8 19 956.8s-20.9-314.6 37.6-461c58.5-146.5 159.6-272 290.3-360.3S631.8.1 789.6.5c156.8 1.3 309.6 49.6 438.8 138.4m-291.8 1014c48.2-19.2 92-48 128.7-84.6 36.7-36.7 65.5-80.4 84.7-128.6 19.2-48.1 28.4-99.7 27-151.5 0-103.9-41.3-203.5-114.8-277S889 396.4 785 396.4s-203.7 41.3-277.2 114.8S393 684.3 393 788.2c-1.4 51.8 7.8 103.4 27 151.5 19.2 48.2 48 91.9 84.7 128.6 36.7 36.6 80.5 65.4 128.6 84.6 48.2 19.2 99.8 28.4 151.7 27 51.8 1.4 103.4-7.8 151.6-27"></path></symbol> <symbol id="zl-gh" viewBox="0 0 256 250"><path fill="currentColor" d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46c6.397 1.185 8.746-2.777 8.746-6.158c0-3.052-.12-13.135-.174-23.83c-35.61 7.742-43.124-15.103-43.124-15.103c-5.823-14.795-14.213-18.73-14.213-18.73c-11.613-7.944.876-7.78.876-7.78c12.853.902 19.621 13.19 19.621 13.19c11.417 19.568 29.945 13.911 37.249 10.64c1.149-8.272 4.466-13.92 8.127-17.116c-28.431-3.236-58.318-14.212-58.318-63.258c0-13.975 5-25.394 13.188-34.358c-1.329-3.224-5.71-16.242 1.24-33.874c0 0 10.749-3.44 35.21 13.121c10.21-2.836 21.16-4.258 32.038-4.307c10.878.049 21.837 1.47 32.066 4.307c24.431-16.56 35.165-13.12 35.165-13.12c6.967 17.63 2.584 30.65 1.255 33.873c8.207 8.964 13.173 20.383 13.173 34.358c0 49.163-29.944 59.988-58.447 63.157c4.591 3.972 8.682 11.762 8.682 23.704c0 17.126-.148 30.91-.148 35.126c0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002C256 57.307 198.691 0 128.001 0m-80.06 182.34c-.282.636-1.283.827-2.194.39c-.929-.417-1.45-1.284-1.15-1.922c.276-.655 1.279-.838 2.205-.399c.93.418 1.46 1.293 1.139 1.931m6.296 5.618c-.61.566-1.804.303-2.614-.591c-.837-.892-.994-2.086-.375-2.66c.63-.566 1.787-.301 2.626.591c.838.903 1 2.088.363 2.66m4.32 7.188c-.785.545-2.067.034-2.86-1.104c-.784-1.138-.784-2.503.017-3.05c.795-.547 2.058-.055 2.861 1.075c.782 1.157.782 2.522-.019 3.08m7.304 8.325c-.701.774-2.196.566-3.29-.49c-1.119-1.032-1.43-2.496-.726-3.27c.71-.776 2.213-.558 3.315.49c1.11 1.03 1.45 2.505.701 3.27m9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033c-1.448-.439-2.395-1.613-2.103-2.626c.301-1.01 1.747-1.484 3.207-1.028c1.446.436 2.396 1.602 2.095 2.622m10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95c-1.53.034-2.769-.82-2.786-1.86c0-1.065 1.202-1.932 2.733-1.958c1.522-.03 2.768.818 2.768 1.868m10.555-.405c.
420182 1.03-.875 2.088-2.387 2.37c-1.485.271-2.861-.365-3.05-1.386c-.184-1.056.893-2.114 2.376-2.387c1.514-.263 2.868.356 3.061 1.403"></path></symbol> <symbol id="zl-ghactions" viewBox="0 0 256 256"><path fill="#4a7ebf" d="M53.604 0c29.604 0 53.604 23.992 53.604 53.59c0 29.09-23.189 52.75-52.093 53.553c0 2.461.109 7.111 1.501 9.92c1.933 3.893 13.525 11.144 24.892 11.144h4.084c2.567-18.271 18.257-32.332 37.24-32.332c18.906 0 34.55 13.946 37.211 32.11h21.13c2.661-18.164 18.304-32.11 37.21-32.11c20.775 0 37.617 16.837 37.617 37.607s-16.842 37.606-37.617 37.606c-18.906 0-34.55-13.948-37.21-32.11h-21.129c-2.66 18.162-18.305 32.11-37.212 32.11c-18.87 0-34.494-13.893-37.199-32.007l-4.515.135c-7.435-.056-15.29-2.042-21.598-6.328c-1.72-1.169-3.415-2.397-5.182-3.56v2.441c-.01.79-.153 12.657-.164 25.833v2.79c.005 8.641.073 17.545.277 24.04c.446 14.246 12.034 25.745 24.822 28.436c1.663.35 4.52.394 6.321.238c2.571-18.264 18.26-32.32 37.238-32.32c20.774 0 37.616 16.838 37.616 37.607c0 20.77-16.842 37.607-37.616 37.607c-18.769 0-34.323-13.744-37.153-31.714h-3.254c-24.436-1.334-39.628-23.746-39.363-41.923c.334-22.877.082-45.764.079-68.646v-7.565C18.546 101.286 0 79.606 0 53.591C0 23.992 23.999 0 53.604 0m69.228 191.78c-14.701 0-26.62 11.915-26.62 26.613s11.919 26.614 26.62 26.614s26.62-11.915 26.62-26.614c0-14.698-11.918-26.614-26.62-26.614m0-84.912c-14.701 0-26.62 11.915-26.62 26.614c0 14.697 11.919 26.613 26.62 26.613s26.62-11.916 26.62-26.613c0-14.699-11.918-26.614-26.62-26.614m95.551 0c-14.702 0-26.62 11.915-26.62 26.614c0 14.697 11.918 26.613 26.62 26.613s26.621-11.916 26.621-26.613c0-14.699-11.918-26.614-26.62-26.614m15.161 15.408a5.496 5.496 0 0 1 .17 7.606l-.16.168l-16.31 16.345a5.5 5.5 0 0 1-7.576.198l-.172-.163l-7.985-7.86a5.496 5.496 0 0 1-.06-7.773a5.5 5.5 0 0 1 7.606-.22l.168.16l4.092 4.027l12.452-12.477a5.5 5.5 0 0 1 7.775-.01m-95.99-.08a5.497 5.497 0 0 1 .17 7.606l-.16.168l-16.31 16.344a5.5 5.5 0 0 1-7.576.198l-.172-.163l-7.985-7.86a5.498 5.498 0 0 1 7.546-7.992l.168.16l4.093 4.027l12.451-12.478a5.5 5.5 0 0 1 7.775-.01M53.604 10.993c-23.532 0-42.608 19.07-42.608 42.598c0 23.525 19.076 42.597 42.608 42.597s42.608-19.072 42.608-42.597c0-23.527-19.076-42.598-42.608-42.598M49.171 28.13A744 744 0 0 1 75.7 44.841c7.308 4.82 7.29 13.563-.1 18.394a609 609 0 0 1-27.058 16.712c-7.455 4.34-15.8-.65-16.002-9.344c-.13-5.602-.024-11.21-.032-16.817c-.006-5.454-.113-10.911.019-16.363c.222-9.248 8.736-14.066 16.643-9.293m-5.91 8.872v3.868l-.001 5.674l-.001 3.71v5.482c0 4.23.002 8.394.01 12.557c.003 1.96 1.023 1.88 2.343 1.063q11.408-7.071 22.827-14.127c1.258-.776 1.294-1.587.06-2.365c-8.154-5.139-16.318-10.26-25.238-15.862"></path><path fill="#85b3df" d="M133.227 223.88a5.497 5.497 0 1 0 .001-10.996a5.497 5.497 0 0 0 0 10.995m-21.049.001a5.497 5.497 0 1 0 0-10.996a5.497 5.497 0 0 0 0 10.995m106.205 21.128c-14.702 0-26.62-11.915-26.62-26.614c0-14.698 11.918-26.614 26.62-26.614c14.701 0 26.62 11.916 26.62 26.614s-11.919 26.614-26.62 26.614m0-64.22c-18.906 0-34.55 13.947-37.211 32.11h-6.153c-2.685 0-4.864 2.461-4.864 5.496s2.179 5.497 4.864 5.497h6.153c2.66 18.163 18.305 32.11 37.21 32.11C239.159 256 256 239.162 256 218.393c0-20.77-16.842-37.607-37.616-37.607"></path></symbol> <symbol id="zl-gitlab" viewBox="0 0 256 247"><path fill="#e24329" d="m251.845 97.642l-.328-.986l-34.85-90.903c-.657-1.808-1.972-3.287-3.616-4.274Q210.586 0 207.627 0c-1.973 0-3.78.822-5.26 1.973a8.73 8.73 0 0 0-3.124 4.767l-23.506 71.999H80.56l-23.506-72c-.493-1.808-1.644-3.451-3.123-4.766C52.45.822 50.643 0 48.67 0s-3.781.329-5.425 1.48c-1.644.986-2.96 2.465-3.617 4.273L4.781 96.656l-.33.986c-10.355 26.959-1.479 57.37 21.535 74.794h.328c0 .164 53.096 39.944 53.096 39.944l26.3 19.89l15.946 12c3.78 2.96 9.205 2.96 12.986 0l15.945-12l26.3-19.89l53.424-39.944c23.014-17.425 31.726-47.835 21.37-74.794z"></path><path fill="#fc6d26" d="m251.845 97.642l-.328-.986c-17.26 3.616-33.205 10.85-46.849 21.04c-.164 0-41.424 31.398-76.602 57.863a18377 18377 0 0 0 48.657 36.821l53.424-39.944c23.013-17.425 31.726-47.835 21.37-74.794z"></path><path fill="#fca326" d="m79.245 212.38l26.301 19.89l15.945 12c3.78 2.96 9.206 2.96 12.986 0l15.945-12l26.301-19.89s-22.684-17.095-48.657-36.82c-26.136 19.725-48.82 36.82-48.82 36.82"></path><path fill="#fc6d26" d="M51.465 117.697c-13.644-10.192-29.589-17.589-46.849-21.04l-.329.985c-10.356 26.959-1.479 57.37 21.534 74.794h.33c0 .164 53.094 39.944 53.094 39.944s22.685-17.095 48.821-36.82c-35.013-26.466-76.272-57.699-76.601-57.863"></path></symbol> <symbol id="zl-docker" viewBox="0 0 256 185">
420<path fill="currentColor" d="M250.716 70.497c-5.765-4-18.976-5.5-29.304-3.5c-1.2-10-6.725-18.749-16.333-26.499l-5.524-4l-3.844 5.75c-4.803 7.5-7.205 18-6.485 28c.24 3.499 1.441 9.749 5.044 15.249c-3.362 2-10.328 4.5-19.455 4.5H1.155l-.48 2c-1.682 9.999-1.682 41.248 18.014 65.247c14.892 18.249 36.99 27.499 66.053 27.499c62.93 0 109.528-30.25 131.386-84.997c8.647.25 27.142 0 36.51-18.75c.24-.5.72-1.5 2.401-5.249l.961-2zM139.986 0h-26.42v24.999h26.42zm0 29.999h-26.42v24.999h26.42zm-31.225 0h-26.42v24.999h26.42zm-31.225 0H51.115v24.999h26.421zM46.311 59.998H19.89v24.999h26.42zm31.225 0H51.115v24.999h26.421zm31.225 0h-26.42v24.999h26.42zm31.226 0h-26.422v24.999h26.422zm31.225 0H144.79v24.999h26.422z"></path></symbol> <symbol id="zl-eks" viewBox="0 0 256 256"><defs><linearGradient id="SVGeyciVcvH" x1="0%" x2="100%" y1="100%" y2="0%"><stop offset="0%" stop-color="#c8511b"></stop><stop offset="100%" stop-color="#f90"></stop></linearGradient></defs><path fill="url(#SVGeyciVcvH)" d="M0 0h256v256H0z"></path><path fill="#fff" d="m149.894 103.037l-21.852 25.347l23.77 27.725h-8.871L121.6 131.2v25.6h-6.4v-54.4h6.4v22.4l19.78-21.763zm54.906 51.312l-25.6-15.363V102.4c0-1.14-.602-2.192-1.587-2.765L140.8 78.163V47.206l64 37.821zm4.829-73.904l-70.4-41.6a3.21 3.21 0 0 0-3.216-.026A3.21 3.21 0 0 0 134.4 41.6V80c0 1.136.605 2.189 1.587 2.765l36.813 21.472V140.8c0 1.123.592 2.166 1.555 2.742l32 19.2a3.19 3.19 0 0 0 3.223.042A3.2 3.2 0 0 0 211.2 160V83.2c0-1.133-.595-2.18-1.571-2.755m-80.205 133.517L54.4 174.077v-89.05l64-37.82v31.036L84.682 99.7a3.2 3.2 0 0 0-1.482 2.7v54.4c0 1.194.666 2.288 1.722 2.838l43.05 22.4c.924.48 2.025.484 2.946.004l41.767-21.581l25.702 15.424zm77.024-40.708l-32-19.2a3.2 3.2 0 0 0-3.117-.096l-41.875 21.636L89.6 154.858v-50.701L123.318 82.7A3.2 3.2 0 0 0 124.8 80V41.6a3.2 3.2 0 0 0-1.613-2.782a3.21 3.21 0 0 0-3.216.026l-70.4 41.6A3.2 3.2 0 0 0 48 83.2V176c0 1.18.653 2.269 1.696 2.826l78.253 41.6a3.2 3.2 0 0 0 3.05-.026l75.35-41.6a3.2 3.2 0 0 0 1.652-2.742a3.21 3.21 0 0 0-1.553-2.804"></path></symbol> <symbol id="zl-gcp" viewBox="0 0 256 206"><path fill="#ea4335" d="m170.252 56.819l22.253-22.253l1.483-9.37C153.437-11.677 88.976-7.496 52.42 33.92C42.267 45.423 34.734 59.764 30.717 74.573l7.97-1.123l44.505-7.34l3.436-3.513c19.797-21.742 53.27-24.667 76.128-6.168z"></path><path fill="#4285f4" d="M224.205 73.918a100.25 100.25 0 0 0-30.217-48.722l-31.232 31.232a55.52 55.52 0 0 1 20.379 44.037v5.544c15.35 0 27.797 12.445 27.797 27.796c0 15.352-12.446 27.485-27.797 27.485h-55.671l-5.466 5.934v33.34l5.466 5.231h55.67c39.93.311 72.553-31.494 72.864-71.424a72.3 72.3 0 0 0-31.793-60.453"></path><path fill="#34a853" d="M71.87 205.796h55.593V161.29H71.87a27.3 27.3 0 0 1-11.399-2.498l-7.887 2.42l-22.409 22.253l-1.952 7.574c12.567 9.489 27.9 14.825 43.647 14.757"></path><path fill="#fbbc05" d="M71.87 61.426C31.94 61.663-.237 94.227.001 134.158a72.3 72.3 0 0 0 28.222 56.88l32.248-32.246c-13.99-6.322-20.208-22.786-13.887-36.776s22.786-20.208 36.775-13.888a27.8 27.8 0 0 1 13.887 13.888l32.248-32.248A72.22 72.22 0 0 0 71.87 61.427"></path></symbol> <symbol id="zl-azure" viewBox="0 0 256 242"><defs><linearGradient id="SVG4V795Kgq" x1="58.972%" x2="37.191%" y1="7.411%" y2="103.762%"><stop offset="0%" stop-color="#114a8b"></stop><stop offset="100%" stop-color="#0669bc"></stop></linearGradient><linearGradient id="SVGzpurqcJr" x1="59.719%" x2="52.691%" y1="52.313%" y2="54.864%"><stop offset="0%" stop-opacity=".3"></stop><stop offset="7.1%" stop-opacity=".2"></stop><stop offset="32.1%" stop-opacity=".1"></stop><stop offset="62.3%" stop-opacity=".05"></stop><stop offset="100%" stop-opacity="0"></stop></linearGradient><linearGradient id="SVGZ5kCkZNr" x1="37.279%" x2="62.473%" y1="4.6%" y2="99.979%"><stop offset="0%" stop-color="#3ccbf4"></stop><stop offset="100%" stop-color="#2892df"></stop></linearGradient></defs><path fill="url(#SVG4V795Kgq)" d="M85.343.003h75.753L82.457 233a12.08 12.08 0 0 1-11.442 8.216H12.06A12.06 12.06 0 0 1 .633 225.303L73.898 8.219A12.08 12.08 0 0 1 85.343 0z"></path><path fill="#0078d4" d="M195.423 156.282H75.297a5.56 5.56 0 0 0-3.796 9.627l77.19 72.047a12.14 12.14 0 0 0 8.28 3.26h68.02z"></path><path fill="url(#SVGzpurqcJr)" d="M85.343.003a11.98 11.98 0 0 0-11.471 8.376L.723 225.105a12.045 12.045 0 0 0 11.37 16.112h60.475a12.93 12.93 0 0 0 9.921-8.437l14.588-42.991l52.105 48.6a12.33 12.33 0 0 0 7.757 2.828h67.766l-29.721-84.935l-86.643.02L161.37.003z"></path><path fill="url(#SVGZ5kCkZNr)" d="M182.098 8.207A12.06 12.06 0 0 0 170.67.003H86.245c5.175 0 9.773 3.301 11.428 8.204L170.94 225.3a12.062 12.062 0 0 1-11.428 15.92h84.429a12.062 12.062 0 0 0 11.425-15.92z"></path></symbol> <symbol id="zl-openshift" viewBox="0 0 256 237"><path fill="#da2430" d="m74.84 106.893l-40.869 14.87c.525 6.552 1.652 13.024 3.24 19.366l38.818-14.137c-1.244-6.552-1.689-13.32-1.18-20.1m180.595-45.19c-2.85-5.879-6.147-11.561-9.966-16.916l-40.857 14.87c4.755 4.864 8.743 10.33 12.007 16.176L255.445 61.7z"></path><path fill="#da2430" d="M182.95 61.461c-5.14-4.46-10.946-8.31-17.408-11.324h-.003C127.6 32.449 82.33 48.905 64.642 86.859a74 74 0 0 0-2.653 6.487c-2.208 6.423-3.498 12.99-3.991 19.546l-.144.054l-.011.144l-24.596 8.95l-15.826 5.849l-.007-.088l-.434.158c-1.536-19.435 1.74-39.512 10.553-58.411a118 118 0 0 1 3.687-7.246c29.054-54.116 95.
420164-76.736 150.918-50.33a115.3 115.3 0 0 1 30.557 21.074a116.6 116.6 0 0 1 15.78 17.94L187.618 65.86a80 80 0 0 0-.635-.641l-.113.041a79 79 0 0 0-3.919-3.798"></path><path fill="#e82429" d="m19.261 193.896l-.064.024A118.4 118.4 0 0 1 .939 154.347l38.825-14.14l.002.003l.024.125l.252-.093l.006.015c1.994 10.56 6.145 20.635 12.198 29.494a75 75 0 0 0 7.722 9.326l-.154.057l.294.308l-40.488 14.97q-.18-.256-.359-.516"></path><path fill="#da2430" d="M173.465 183.447c-21.051 13.017-48.053 15.532-72.113 4.312a75.1 75.1 0 0 1-22.118-15.695l-40.772 14.844l.313.437l-.02.008c11.21 16.016 26.502 29.404 45.266 38.298c40.47 19.163 86.387 12.501 119.634-13.284c14.888-11.152 27.317-26.016 35.713-44.02c8.819-18.895 12.076-38.964 10.515-58.384l-1.136.414q-.022-.312-.047-.624l-40.49 14.957l.002.004a76.5 76.5 0 0 1-6.806 26.46c-6.315 13.753-16.164 24.708-27.94 32.273"></path><path fill="#e82429" d="m218.552 75.13l.607-.222v-.001a117.7 117.7 0 0 1 11.454 42.055l-40.773 14.834l.022-.304l-.77.285c1.11-15.088-2.275-30.093-9.435-43.123l38.548-14.25l.002-.004q.174.364.345.73"></path><path fill="#c22035" d="M74.89 106.654L34.31 121.65c.52 6.61 1.64 13.136 3.219 19.532l38.546-14.258c-1.247-6.622-1.695-13.438-1.169-20.274m179.321-45.567c-2.83-5.929-6.106-11.658-9.898-17.059L203.76 59.02c4.72 4.906 8.68 10.418 11.92 16.315l38.542-14.256z"></path><path fill="#ac223b" d="m34.308 121.653l40.482-14.829l-.165 8.133l-39.056 14.749l-1.266-8.063zm169.458-62.756l41.113-14.108l4.273 6.449l-39.946 14.121l-5.434-6.465z"></path><path fill="#b92135" d="m38.764 187.201l40.53-14.749l12.258 11.565l-42.503 15.956l-10.283-12.776zm210.616-77.339l-41.165 14.844l-3.032 16.478l43.892-15.643l.311-15.677z"></path></symbol> <symbol id="zl-helm" viewBox="0 0 256 297"><path fill="currentColor" d="m60.349 70.537l-.811-.767l-.278-.266c-7.589-7.29-13.462-15.721-17.01-25.685c-.951-2.673-1.68-5.397-1.621-8.262l.012-.375c.012-.285.011-.571.031-.856c.268-3.877 2.863-5.836 6.652-4.918c1.195.31 2.351.753 3.447 1.321c4.007 2.01 7.297 4.948 10.317 8.185l.312.336a67.7 67.7 0 0 1 13.066 20.108q.102.266.234.518a.3.3 0 0 0 .061.074l.212.181l.064.057a106.1 106.1 0 0 1 48.733-14.954l-.043-.218l-.112-.585a12 12 0 0 0-.073-.35l-.041-.17a67.7 67.7 0 0 1-1.596-22.23a50.6 50.6 0 0 1 2.674-13.09a18.8 18.8 0 0 1 3.294-6.118a9.4 9.4 0 0 1 1.902-1.697a4.23 4.23 0 0 1 4.832-.034a10.4 10.4 0 0 1 3.513 4.049a32 32 0 0 1 3.165 8.828a67.7 67.7 0 0 1 1.277 19.852a57.5 57.5 0 0 1-2.1 11.976q1.072.197 2.14.382l3.2.552c2.481.43 4.946.88 7.38 1.458a112 112 0 0 1 12.296 3.611c4.059 1.49 8.03 3.211 11.891 5.155c2.227 1.11 4.39 2.346 6.564 3.612l1.866 1.09q1.403.824 2.829 1.637l.08-.163l.178-.354q.092-.187.167-.387a65.36 65.36 0 0 1 19.79-28.128a22.7 22.7 0 0 1 7.11-4.14c.717-.25 1.46-.42 2.213-.508c3.768-.431 5.35 1.94 5.628 4.771a18 18 0 0 1-.465 6.228a52.9 52.9 0 0 1-6.147 14.357l-.308.493c-3.982 6.435-8.69 12.247-14.633 16.98l-.46.362a3 3 0 0 0-.12.1l-.192.177l-.24.228l-.098.09a107 107 0 0 1 15.996 18.576a6.6 6.6 0 0 1-1.016.179c-6.373.01-12.746-.011-19.12.028a2.4 2.4 0 0 1-1.908-1.017a88.95 88.95 0 0 0-53.039-27.999a86.2 86.2 0 0 0-17.453-.75l-.76.047a88.06 88.06 0 0 0-49.207 18.785l-.44.349a84 84 0 0 0-10.21 9.529a2.84 2.84 0 0 1-2.324 1.057a1483 1483 0 0 0-10.958-.026l-8.6.005q.044-.168.144-.398l.09-.193q.049-.101.107-.211l.123-.23l.14-.245l.157-.262l.171-.277l.186-.292l.306-.464l.337-.493l.241-.343l.384-.535l.134-.183l.419-.564l.292-.386l.302-.394l.472-.604l.491-.616l.338-.418l.346-.42l.352-.425l.36-.426l.365-.428l.558-.644l.378-.43l.382-.428l.386-.426l.39-.425c1.896-2.049 3.859-4.036 5.86-6.045l2.013-2.019q1.013-1.015 2.033-2.052m155.187 136.407a106.3 106.3 0 0 1-14.42 16.339l1.12.933a65.15 65.15 0 0 1 20.26 28.96a20.8 20.8 0 0 1 1.325 8.673a9 9 0 0 1-.363 1.95l-.087.271a4.335 4.335 0 0 1-4.907 3.021a13.4 13.4 0 0 1-4.067-1.206a30.8 30.8 0 0 1-5.523-3.498a64.7 64.7 0 0 1-19.627-27.589l-.262-.713l-.357-.922a117 117 0 0 1-15.045 8.426a109 109 0 0 1-16.052 5.85a113 113 0 0 1-17.025 3.24l.078.41l.07.373q.034.178.073.348l.042.168a65.7 65.7 0 0 1 1.787 21.92a48.6 48.6 0 0 1-2.66 13.52a47 47 0 0 1-2.505 5.26a8 8 0 0 1-1.407 1.788c-2.394 2.471-5.253 2.492-7.586-.045a16.4 16.4 0 0 1-2.35-3.379c-1.85-3.474-2.803-7.252-3.483-11.104a70.3 70.3 0 0 1-.818-15.918a57 57 0 0 1 1.568-10.873l.167-.667q.13-.48.224-.969a.3.3 0 0 0-.015-.132l-.067-.23l-.021-.082A105.94 105.94 0 0 1 74.9 236.033l-.56 1.24l-.102.231a66.45 66.45 0 0 1-18.164 24.56l-.423.355
420a23 23 0 0 1-7.247 4.186a7.27 7.27 0 0 1-3.919.42a4.28 4.28 0 0 1-3.19-2.55l-.06-.15c-.783-1.894-.718-3.859-.478-5.815l.067-.51a33.4 33.4 0 0 1 2.59-8.572a67.7 67.7 0 0 1 15.947-22.714l.556-.52q.139-.129.275-.262q.13-.186.22-.394A107.6 107.6 0 0 1 43.287 206.7l.19-.017l.65-.062c.193-.018.369-.03.545-.03c5.06-.005 10.12.009 15.179-.008l3.794-.018a2.83 2.83 0 0 1 2.228.978a88.4 88.4 0 0 0 23.1 17.07l.6.304a84.2 84.2 0 0 0 29.898 8.887q42.514 4.132 73.142-25.777a4.6 4.6 0 0 1 3.605-1.47c2.947.036 5.896.044 8.844.042l5.896-.01l2.949-.002h1.523zm-26.342-90.316q.559.001 1.109.013l1.093.022c.724.013 1.439.015 2.148-.026l.531-.039c1.802-.163 3.091.481 4.405 1.692c6.323 5.826 12.7 11.592 19.071 17.364l3.966 3.595l.45.4l.675.595l.799-.68q.257-.22.503-.443q11.813-10.753 23.608-21.525a3.28 3.28 0 0 1 2.362-.995l.167.005c1.21.049 2.422.045 3.66.036l1.498-.011q.378-.003.761-.003v63.38a1 1 0 0 1-.097.021l-.14.02l-.18.02l-.22.02l-.255.017l-.447.026l-.897.037l-1.06.032l-1.188.025l-1.817.025l-1.639.01l-1.653.002l-1.082-.005l-1.3-.013l-.978-.015l-.686-.015l-.637-.017l-.762-.028l-.496-.024l-.424-.027l-.239-.02l-.2-.02l-.087-.012l-.141-.022v-32.098l-.323-.153l-16.383 14.942l-16.516-14.879l-.316.116l-.007 2.679v29.509h-16.497c-.016-.053-.031-.251-.046-.58l-.017-.455l-.017-.575l-.024-1.076l-.023-1.314l-.03-2.093l-.033-3.101l-.047-5.884l-.032-5.84l-.027-7.156l-.017-8.245l-.002-5.379l.009-6.732l.013-3.813l.023-4.033l.025-2.81l.025-1.825l.022-1.095l.015-.588l.017-.47l.018-.345q.004-.07.01-.124m-152.24.073h16.398c.013.042.026.18.039.406l.018.404l.018.53l.016.652l.025 1.19l.036 2.508l.027 2.424l.028 3.479l.037 6.391l.017 4.372l.018 8.267l.003 5.583l-.006 6.347l-.01 4.294l-.02 4.749l-.022 3.515l-.035 3.555l-.02 1.461l-.014.844l-.016.732l-.017.616l-.017.494l-.018.365q-.015.226-.03.295H36.996a277 277 0 0 1-.048-6.9l.009-3.445l-.001-1.722l-.004-1.707l-.002-3.422l.003-6.924H16.63v23.904a1 1 0 0 1-.116.027l-.162.026l-.205.024l-.383.035l-.303.021l-.706.04l-.61.025l-.904.03l-.737.02l-1.043.02l-1.66.022l-1.716.01H6.66l-1.384-.009l-1.551-.022l-.939-.02l-.84-.027l-.553-.024l-.329-.017l-.293-.019l-.367-.03l-.103-.011l-.172-.023a2 2 0 0 1-.128-.024v-63.324h16.564v22.37a1 1 0 0 0 .096.02l.138.021l.177.02l.336.028l.415.026l.665.033l.576.022l.635.02l1.423.036l1.864.032l1.135.014l1.761.014l1.789.006l2.343-.005l1.395-.01l1.308-.017l1.193-.022l1.05-.028l.88-.035l.433-.023l.357-.026l.192-.02q.042-.003.08-.009l.133-.02l.012-4.084l.003-1.375l.002-2.853zm36.054 63.45v-63.262q.045-.015.18-.028l.22-.018l.14-.01l.525-.025l.682-.025l.826-.024l1.308-.029l1.52-.027l1.704-.025l4.374-.046l2.123-.016l5.002-.026l3.952-.01l4.384.002l3.563.012l2.737.019l1.99.022l1.67.028l.567.013l.732.021l.58.024l.296.017l.22.018l.08.01v13.482c-.528.038-1.073.11-1.619.111l-9.63.007l-11.413-.002v10.487h20.058v13.95H89.9a3.4 3.4 0 0 0-.078.448l-.03.255l-.026.294l-.037.505l-.023.375l-.03.615l-.026.666l-.027.951l-.016.747l-.01.764l-.008 1.028l.003 1.264l.008.73l.009.467l.01.45l.021.632l.026.573l.02.345l.022.311l.025.274l.014.122c.508.035 1.052.102 1.597.103l9.63.007l11.415-.002v13.426zm58.17.024a5 5 0 0 1-.035-.479l-.016-.437l-.015-.562l-.014-.68l-.02-1.231l-.018-1.466l-.03-3.56l-.02-3.516l-.019-5.581l-.01-7.949l.006-10.192l.022-8.11l.03-6.587l.03-4.327l.03-3.08l.026-2.056l.014-.877l.022-1.109l.016-.594l.016-.472l.017-.343q.013-.208.026-.26h16.338v46.775l.503.03l.46.028l.431.023q.21.008.417.009l9.701.005l11.45-.001v16.6z"></path></symbol> <symbol id="zl-aws" viewBox="0 0 256 153"><path fill="currentColor" d="M72.392 55.438c0 3.137.34 5.68.933 7.545a45.4 45.4 0 0 0 2.712 6.103c.424.678.593 1.356.593 1.95c0 .847-.508 1.695-1.61 2.543l-5.34 3.56c-.763.509-1.526.763-2.205.763c-.847 0-1.695-.424-2.543-1.187a26 26 0 0 1-3.051-3.984c-.848-1.44-1.696-3.052-2.628-5.001q-9.919 11.697-24.922 11.698c-7.12 0-12.8-2.035-16.954-6.103c-4.153-4.07-6.272-9.495-6.272-16.276c0-7.205 2.543-13.054 7.714-17.462c5.17-4.408 12.037-6.612 20.768-6.612c2.882 0 5.849.254 8.985.678c3.137.424 6.358 1.102 9.749 1.865V29.33c0-6.443-1.357-10.935-3.985-13.563c-2.712-2.628-7.29-3.9-13.817-3.9c-2.967 0-6.018.34-9.155 1.103s-6.188 1.695-9.155 2.882c-1.356.593-2.373.932-2.967 1.102s-1.017.254-1.356.254c-1.187 0-1.78-.848-1.78-2.628v-4.154c0-1.356.17-2.373.593-2.966c.424-.594 1.187-1.187 2.374-1.78q4.45-2.29 10.68-3.815C33.908.763 38.316.255 42.978.255c10.088 0 17.463 2.288 22.21 6.866c4.662 4.577 7.036 11.528 7.036 20.853v27.464zM37.976 68.323c2.798 0 5.68-.508 8.731-1.526c3.052-1.017 5.765-2.882 8.053-5.425c1.357-1.61 2.374-3.39 2.882-5.425c.509-2.034.848-4.493.848-7.375v-3.56a71 71 0 0 0-7.799-1.441a64 64 0 0 0-7.968-.509c-5.68 0-9.833 1.102-12.63 3.391s-4.154 5.51-4.154 9.748c0 3.984 1.017 6.951 3.136 8.986c2.035 2.119 5.
420002 3.136 8.901 3.136m68.069 9.155c-1.526 0-2.543-.254-3.221-.848c-.678-.508-1.272-1.695-1.78-3.305L81.124 7.799c-.51-1.696-.764-2.798-.764-3.391c0-1.356.678-2.12 2.035-2.12h8.307c1.61 0 2.713.255 3.306.848c.678.509 1.187 1.696 1.695 3.306l14.241 56.117l13.224-56.117c.424-1.695.933-2.797 1.61-3.306c.679-.508 1.866-.847 3.392-.847h6.781c1.61 0 2.713.254 3.39.847c.679.509 1.272 1.696 1.611 3.306l13.394 56.795L168.01 6.442c.508-1.695 1.102-2.797 1.695-3.306c.678-.508 1.78-.847 3.306-.847h7.883c1.357 0 2.12.678 2.12 2.119c0 .424-.085.848-.17 1.356s-.254 1.187-.593 2.12l-20.43 65.525q-.762 2.544-1.78 3.306c-.678.509-1.78.848-3.22.848h-7.29c-1.611 0-2.713-.254-3.392-.848c-.678-.593-1.271-1.695-1.61-3.39l-13.14-54.676l-13.054 54.59c-.423 1.696-.932 2.798-1.61 3.391c-.678.594-1.865.848-3.39.848zm108.927 2.289c-4.408 0-8.816-.509-13.054-1.526c-4.239-1.017-7.544-2.12-9.748-3.39c-1.357-.764-2.29-1.611-2.628-2.374a6 6 0 0 1-.509-2.374V65.78c0-1.78.678-2.628 1.95-2.628a4.8 4.8 0 0 1 1.526.255c.508.17 1.271.508 2.119.847a46 46 0 0 0 9.324 2.967a51 51 0 0 0 10.088 1.017c5.34 0 9.494-.932 12.376-2.797s4.408-4.577 4.408-8.053c0-2.373-.763-4.323-2.289-5.934s-4.408-3.051-8.561-4.408l-12.292-3.814c-6.188-1.95-10.765-4.832-13.563-8.647c-2.797-3.73-4.238-7.883-4.238-12.291q0-5.34 2.289-9.41c1.525-2.712 3.56-5.085 6.103-6.95c2.543-1.95 5.425-3.391 8.816-4.408c3.39-1.017 6.95-1.441 10.68-1.441c1.865 0 3.815.085 5.68.339c1.95.254 3.73.593 5.51.932c1.695.424 3.306.848 4.832 1.357q2.288.762 3.56 1.525c1.187.679 2.034 1.357 2.543 2.12q.763 1.017.763 2.797v3.984c0 1.78-.678 2.713-1.95 2.713c-.678 0-1.78-.34-3.22-1.018q-7.25-3.306-16.276-3.306c-4.832 0-8.647.763-11.275 2.374c-2.627 1.61-3.984 4.069-3.984 7.544c0 2.374.848 4.408 2.543 6.019s4.832 3.221 9.325 4.662l12.037 3.815c6.103 1.95 10.511 4.662 13.139 8.137s3.9 7.46 3.9 11.868c0 3.645-.764 6.951-2.205 9.833c-1.525 2.882-3.56 5.425-6.188 7.46c-2.628 2.119-5.764 3.645-9.409 4.747c-3.815 1.187-7.799 1.78-12.122 1.78"></path><path fill="#f90" d="M230.993 120.964c-27.888 20.599-68.408 31.534-103.247 31.534c-48.827 0-92.821-18.056-126.05-48.064c-2.628-2.373-.255-5.594 2.881-3.73c35.942 20.854 80.276 33.484 126.136 33.484c30.94 0 64.932-6.442 96.212-19.666c4.662-2.12 8.646 3.052 4.068 6.442m11.614-13.224c-3.56-4.577-23.566-2.204-32.636-1.102c-2.713.34-3.137-2.034-.678-3.814c15.936-11.19 42.13-7.968 45.181-4.239c3.052 3.815-.848 30.008-15.767 42.554c-2.288 1.95-4.492.933-3.475-1.61c3.39-8.393 10.935-27.296 7.375-31.789"></path></symbol> <symbol id="zl-rds" viewBox="0 0 256 256"><defs><linearGradient id="SVGte2wIbLN" x1="0%" x2="100%" y1="100%" y2="0%"><stop offset="0%" stop-color="#2e27ad"></stop><stop offset="100%" stop-color="#527fff"></stop></linearGradient></defs><path fill="url(#SVGte2wIbLN)" d="M0 0h256v256H0z"></path><path fill="#fff" d="m49.325 44.8l29.737 29.738l-4.524 4.524L44.8 49.325V73.6h-6.4v-32a3.2 3.2 0 0 1 3.2-3.2h32v6.4zM217.6 41.6v32h-6.4V49.325l-29.738 29.737l-4.524-4.524L206.675 44.8H182.4v-6.4h32a3.2 3.2 0 0 1 3.2 3.2m-6.4 140.8h6.4v32a3.2 3.2 0 0 1-3.2 3.2h-32v-6.4h24.275l-29.737-29.738l4.524-4.524l29.738 29.737zm-1.6-56.918c0-10.621-12.262-21.114-32.8-28.068l2.051-6.06C202.458 99.344 216 111.782 216 125.482c0 13.702-13.542 26.144-37.152 34.13l-2.051-6.063c20.54-6.95 32.803-17.44 32.803-28.067m-163.02 0c0 10.176 11.478 20.39 30.706 27.328l-2.172 6.019c-22.202-8.01-34.935-20.163-34.935-33.347c0-13.181 12.733-25.335 34.935-33.348l2.172 6.02c-19.228 6.94-30.707 17.155-30.707 27.328m32.482 55.98L49.325 211.2H73.6v6.4h-32a3.2 3.2 0 0 1-3.2-3.2v-32h6.4v24.275l29.738-29.737zM128 100.115c-22.867 0-35.2-5.907-35.2-8.32c0-2.416 12.333-8.32 35.2-8.32c22.864 0 35.2 5.904 35.2 8.32c0 2.413-12.336 8.32-35.2 8.32m.093 24.784c-21.895 0-35.293-5.98-35.293-9.235v-15.555c7.882 4.349 21.862 6.406 35.2 6.406s27.318-2.057 35.2-6.406v15.555c0 3.258-13.328 9.235-35.107 9.235m0 24.435c-21.895 0-35.293-5.98-35.293-9.235v-15.74c7.78 4.572 21.574 6.94 35.293 6.94c13.641 0 27.357-2.365 35.107-6.925V140.1c0 3.258-13.328 9.235-35.107 9.235M128 171.258c-22.774 0-35.2-6.122-35.2-9.268v-13.196c7.78 4.572 21.574 6.94 35.293 6.94c13.641 0 27.357-2.361 35.107-6.924v13.18c0 3.146-12.426 9.268-35.2 9.268m0-94.183c-20.035 0-41.6 4.605-41.6 14.72v70.195c0 10.285 20.928 15.668 41.6 15.668s41.6-5.383 41.6-15.668V91.795c0-10.115-21.565-14.72-41.6-14.72"></path></symbol>
420 <symbol id="zl-databricks" viewBox="0 0 256 276"><path fill="#ee3d2c" d="m242.284 113.629l-114.158 64.268l-122.24-68.672L0 112.399v49.864l128.126 71.834l114.145-64.017v26.387l-114.145 64.281l-122.24-68.672L0 195.25v8.545l128.126 71.846L256 203.795v-49.851l-5.886-3.174l-121.988 68.42l-114.41-64.016v-26.4l114.41 64.016L256 120.97V71.82l-6.375-3.664l-121.499 68.183L19.602 75.735l108.524-60.842l89.16 50.089l7.843-4.391V54.48L128.126 0L0 71.833v7.831l128.126 71.846l114.145-64.281z"></path></symbol> <symbol id="zl-snowflake" viewBox="0 0 256 255"><path fill="currentColor" d="M100.212 161.19c8.15.579 14.607 7.254 14.776 15.442l.003.328v62.095c0 8.751-7.166 15.842-15.965 15.842c-8.735 0-15.813-6.92-15.982-15.526l-.003-.316V204.32l-30.408 17.383c-7.625 4.397-17.376 1.795-21.803-5.763c-4.35-7.48-1.866-17.04 5.541-21.495l.295-.173l54.275-31.015a15.83 15.83 0 0 1 9.27-2.067m64.452 1.854l.382.213l54.264 31.015c7.647 4.376 10.241 14.09 5.846 21.668c-4.348 7.46-13.915 10.092-21.503 5.931l-.299-.168l-30.387-17.383v34.735c0 8.751-7.144 15.842-15.986 15.842c-8.735 0-15.794-6.92-15.963-15.526l-.003-.316V176.96c0-8.337 6.502-15.184 14.78-15.77c2.97-.252 6.056.33 8.87 1.854M23.671 82.509l.3.167l54.234 31.035c3.813 2.179 6.358 5.635 7.432 9.504c.357 1.246.52 2.49.583 3.737c.04 1.72-.185 3.464-.727 5.155a15.74 15.74 0 0 1-6.926 8.824l-.362.213L23.971 172.2c-7.656 4.367-17.417 1.783-21.81-5.773c-4.371-7.5-1.886-17.013 5.544-21.475l.292-.17l30.306-17.323l-30.306-17.37C.34 105.708-2.276 96.047 2.16 88.481c4.337-7.478 13.902-10.105 21.511-5.973m230.177 5.973c4.425 7.565 1.808 17.227-5.846 21.605l-30.308 17.37l30.308 17.323c7.654 4.386 10.27 14.05 5.846 21.646c-4.417 7.556-14.186 10.14-21.813 5.773l-54.275-31.055c-3.619-2.087-6.132-5.36-7.247-9.037a15.4 15.4 0 0 1-.716-5.155a15.3 15.3 0 0 1 .562-3.737a15.9 15.9 0 0 1 7.401-9.504l54.275-31.035c7.627-4.367 17.396-1.77 21.813 5.806M131.306 97.84c.919 0 2.186.516 2.831 1.174l22.558 22.326c.643.638 1.165 1.904 1.165 2.817v6.583c0 .892-.522 2.157-1.165 2.786l-22.558 22.327c-.645.656-1.892 1.193-2.831 1.193h-6.634c-.911 0-2.178-.537-2.833-1.193l-22.546-22.327c-.646-.629-1.167-1.894-1.167-2.786v-6.583c0-.913.521-2.18 1.167-2.817l22.546-22.326c.655-.658 1.922-1.174 2.833-1.174zm-3.192 19.054h-.253c-.91 0-2.177.528-2.811 1.164l-6.532 6.444c-.655.667-1.156 1.924-1.156 2.826v.252c0 .891.501 2.137 1.156 2.786l6.532 6.462c.643.638 1.9 1.164 2.81 1.164h.254c.912 0 2.18-.526 2.824-1.164l6.531-6.462c.644-.649 1.195-1.895 1.195-2.786v-.252c0-.902-.551-2.16-1.195-2.826l-6.531-6.444c-.644-.636-1.912-1.164-2.824-1.164M156.98 0c8.735 0 15.813 6.923 15.983 15.505l.003.315v34.746l30.387-17.404c7.636-4.374 17.397-1.78 21.802 5.784a15.783 15.783 0 0 1-5.55 21.477l-.296.173l-54.264 31.044a16 16 0 0 1-9.252 2.065c-8.168-.597-14.608-7.283-14.776-15.462l-.003-.328V15.82C141.015 7.092 148.14 0 156.98 0M99.026 0c8.693 0 15.792 6.923 15.962 15.505l.003.315v62.095c0 8.327-6.52 15.185-14.78 15.79a16.05 16.05 0 0 1-8.888-1.854l-.382-.211l-54.275-31.044c-7.636-4.378-10.243-14.051-5.836-21.65c4.37-7.465 13.926-10.09 21.505-5.95l.298.166l30.408 17.404V15.82C83.041 7.092 90.185 0 99.026 0"></path></symbol> <symbol id="zl-slack" viewBox="0 0 256 256"><path fill="#e01e5a" d="M53.841 161.32c0 14.832-11.987 26.82-26.819 26.82S.203 176.152.203 161.32c0-14.831 11.987-26.818 26.82-26.818H53.84zm13.41 0c0-14.831 11.987-26.818 26.819-26.818s26.819 11.987 26.819 26.819v67.047c0 14.832-11.987 26.82-26.82 26.82c-14.83 0-26.818-11.988-26.818-26.82z"></path><path fill="#36c5f0" d="M94.07 53.638c-14.832 0-26.82-11.987-26.82-26.819S79.239 0 94.07 0s26.819 11.987 26.819 26.819v26.82zm0 13.613c14.832 0 26.819 11.987 26.819 26.819s-11.987 26.819-26.82 26.819H26.82C11.987 120.889 0 108.902 0 94.069c0-14.83 11.987-26.818 26.819-26.818z"></path><path fill="#2eb67d" d="M201.55 94.07c0-14.832 11.987-26.82 26.818-26.82s26.82 11.988 26.82 26.82s-11.988 26.819-26.82 26.819H201.55zm-13.41 0c0 14.832-11.988 26.819-26.82 26.819c-14.831 0-26.818-11.987-26.818-26.82V26.82C134.502 11.987 146.489 0 161.32 0s26.819 11.987 26.819 26.819z"></path><path fill="#ecb22e" d="M161.32 201.55c14.832 0 26.82 11.987 26.82 26.818s-11.988 26.82-26.82 26.82c-14.831 0-26.818-11.988-26.818-26.82V201.55zm0-13.41c-14.831 0-26.818-11.988-26.818-26.82c0-14.831 11.987-26.818 26.819-26.818h67.25c14.832 0 26.82 11.987 26.82 26.819s-11.988 26.819-26.82 26.819z"></path></symbol> <symbol id="zl-teams" viewBox="0 0 256 239"><defs><linearGradient id="SVGCo9xpmZW" x1="17.372%" x2="82.628%" y1="-6.51%" y2="106.51%"><stop offset="0%" stop-color="#5a62c3"></stop><stop offset="50%" stop-color="#4d55bd"></stop><stop offset="100%" stop-color="#3940ab"></stop></linearGradient>
420<path fill="currentColor" id="SVGhJCUgeMn" d="M136.93 64.476v12.8a32.7 32.7 0 0 1-5.953-.952a38.7 38.7 0 0 1-26.79-22.742h21.848c6.008.022 10.872 4.887 10.895 10.894"></path></defs><path fill="#5059c9" d="M178.563 89.302h66.125c6.248 0 11.312 5.065 11.312 11.312v60.231c0 22.96-18.613 41.574-41.573 41.574h-.197c-22.96.003-41.576-18.607-41.579-41.568V95.215a5.91 5.91 0 0 1 5.912-5.913"></path><circle cx="223.256" cy="50.605" r="26.791" fill="#5059c9"></circle><circle cx="139.907" cy="38.698" r="38.698" fill="#7b83eb"></circle><path fill="#7b83eb" d="M191.506 89.302H82.355c-6.173.153-11.056 5.276-10.913 11.449v68.697c-.862 37.044 28.445 67.785 65.488 68.692c37.043-.907 66.35-31.648 65.489-68.692v-68.697c.143-6.173-4.74-11.296-10.913-11.449"></path><path fill="currentColor" d="M142.884 89.302v96.268a10.96 10.96 0 0 1-6.787 10.062c-1.3.55-2.697.833-4.108.833H76.68c-.774-1.965-1.488-3.93-2.084-5.953a72.5 72.5 0 0 1-3.155-21.076v-68.703c-.143-6.163 4.732-11.278 10.895-11.43z" opacity=".1"></path><path fill="currentColor" d="M136.93 89.302v102.222c0 1.411-.283 2.808-.833 4.108a10.96 10.96 0 0 1-10.062 6.787H79.48c-1.012-1.965-1.965-3.93-2.798-5.954a59 59 0 0 1-2.084-5.953a72.5 72.5 0 0 1-3.155-21.076v-68.703c-.143-6.163 4.732-11.278 10.895-11.43z" opacity=".2"></path><path fill="currentColor" d="M136.93 89.302v90.315c-.045 5.998-4.896 10.85-10.895 10.895H74.597a72.5 72.5 0 0 1-3.155-21.076v-68.703c-.143-6.163 4.732-11.278 10.895-11.43z" opacity=".2"></path><path fill="currentColor" d="M130.977 89.302v90.315c-.046 5.998-4.897 10.85-10.895 10.895H74.597a72.5 72.5 0 0 1-3.155-21.076v-68.703c-.143-6.163 4.732-11.278 10.895-11.43z" opacity=".2"></path><path fill="currentColor" d="M142.884 58.523v18.753c-1.012.06-1.965.12-2.977.12s-1.965-.06-2.977-.12a32.7 32.7 0 0 1-5.953-.952a38.7 38.7 0 0 1-26.791-22.742a33 33 0 0 1-1.905-5.954h29.708c6.007.023 10.872 4.887 10.895 10.895" opacity=".1"></path><use href="#SVGhJCUgeMn" opacity=".2"></use><use href="#SVGhJCUgeMn" opacity=".2"></use><path fill="currentColor" d="M130.977 64.476v11.848a38.7 38.7 0 0 1-26.791-22.743h15.896c6.008.023 10.872 4.888 10.895 10.895" opacity=".2"></path><path fill="url(#SVGCo9xpmZW)" d="M10.913 53.581h109.15c6.028 0 10.914 4.886 10.914 10.913v109.151c0 6.027-4.886 10.913-10.913 10.913H10.913C4.886 184.558 0 179.672 0 173.645V64.495C0 58.466 4.886 53.58 10.913 53.58"></path><path fill="#fff" d="M94.208 95.125h-21.82v59.416H58.487V95.125H36.769V83.599h57.439z"></path></symbol> <symbol id="zl-jira" viewBox="0 0 256 256"><defs><linearGradient id="SVGSBI7obaC" x1="98.031%" x2="58.888%" y1=".161%" y2="40.766%"><stop offset="18%" stop-color="#0052cc"></stop><stop offset="100%" stop-color="#2684ff"></stop></linearGradient><linearGradient id="SVGHifZlbzE" x1="100.665%" x2="55.402%" y1=".455%" y2="44.727%"><stop offset="18%" stop-color="#0052cc"></stop><stop offset="100%" stop-color="#2684ff"></stop></linearGradient></defs><path fill="#2684ff" d="M244.658 0H121.707a55.5 55.5 0 0 0 55.502 55.502h22.649V77.37c.02 30.625 24.841 55.447 55.466 55.467V10.666C255.324 4.777 250.55 0 244.658 0"></path><path fill="url(#SVGSBI7obaC)" d="M183.822 61.262H60.872c.019 30.625 24.84 55.447 55.466 55.467h22.649v21.938c.039 30.625 24.877 55.43 55.502 55.43V71.93c0-5.891-4.776-10.667-10.667-10.667"></path><path fill="url(#SVGHifZlbzE)" d="M122.951 122.489H0c0 30.653 24.85 55.502 55.502 55.502h22.72v21.867c.02 30.597 24.798 55.408 55.396 55.466V133.156c0-5.891-4.776-10.667-10.667-10.667"></path></symbol> <symbol id="zl-google" viewBox="0 0 256 262"><path fill="#4285f4" d="M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027"></path><path fill="#34a853" d="M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1"></path><path fill="#fbbc05" d="M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z"></path><path fill="#eb4335" d="M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C
42079.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251"></path></symbol> <symbol id="zl-openai" viewBox="0 0 256 260"><path fill="currentColor" d="M239.184 106.203a64.72 64.72 0 0 0-5.576-53.103C219.452 28.459 191 15.784 163.213 21.74A65.586 65.586 0 0 0 52.096 45.22a64.72 64.72 0 0 0-43.23 31.36c-14.31 24.602-11.061 55.634 8.033 76.74a64.67 64.67 0 0 0 5.525 53.102c14.174 24.65 42.644 37.324 70.446 31.36a64.72 64.72 0 0 0 48.754 21.744c28.481.025 53.714-18.361 62.414-45.481a64.77 64.77 0 0 0 43.229-31.36c14.137-24.558 10.875-55.423-8.083-76.483m-97.56 136.338a48.4 48.4 0 0 1-31.105-11.255l1.535-.87l51.67-29.825a8.6 8.6 0 0 0 4.247-7.367v-72.85l21.845 12.636c.218.111.37.32.409.563v60.367c-.056 26.818-21.783 48.545-48.601 48.601M37.158 197.93a48.35 48.35 0 0 1-5.781-32.589l1.534.921l51.722 29.826a8.34 8.34 0 0 0 8.441 0l63.181-36.425v25.221a.87.87 0 0 1-.358.665l-52.335 30.184c-23.257 13.398-52.97 5.431-66.404-17.803M23.549 85.38a48.5 48.5 0 0 1 25.58-21.333v61.39a8.29 8.29 0 0 0 4.195 7.316l62.874 36.272l-21.845 12.636a.82.82 0 0 1-.767 0L41.353 151.53c-23.211-13.454-31.171-43.144-17.804-66.405zm179.466 41.695l-63.08-36.63L161.73 77.86a.82.82 0 0 1 .768 0l52.233 30.184a48.6 48.6 0 0 1-7.316 87.635v-61.391a8.54 8.54 0 0 0-4.4-7.213m21.742-32.69l-1.535-.922l-51.619-30.081a8.39 8.39 0 0 0-8.492 0L99.98 99.808V74.587a.72.72 0 0 1 .307-.665l52.233-30.133a48.652 48.652 0 0 1 72.236 50.391zM88.061 139.097l-21.845-12.585a.87.87 0 0 1-.41-.614V65.685a48.652 48.652 0 0 1 79.757-37.346l-1.535.87l-51.67 29.825a8.6 8.6 0 0 0-4.246 7.367zm11.868-25.58L128.067 97.3l28.188 16.218v32.434l-28.086 16.218l-28.188-16.218z"></path></symbol> <symbol id="zl-anthropic" viewBox="0 0 256 176"><path fill="currentColor" d="m147.487 0l70.081 175.78H256L185.919 0zM66.183 106.221l23.98-61.774l23.98 61.774zM70.07 0L0 175.78h39.18l14.33-36.914h73.308l14.328 36.914h39.179L110.255 0z"></path></symbol> <symbol id="zl-openrouter" viewBox="0 0 24 24"><path fill="#6467F2" d="M16.778 1.844v1.919q-.569-.026-1.138-.032q-.708-.008-1.415.037c-1.93.126-4.023.728-6.149 2.237c-2.911 2.066-2.731 1.95-4.14 2.75c-.396.223-1.342.574-2.185.798c-.841.225-1.753.333-1.751.333v4.229s.768.108 1.61.333c.842.224 1.789.575 2.185.799c1.41.798 1.228.683 4.14 2.75c2.126 1.509 4.22 2.11 6.148 2.236c.88.058 1.716.041 2.555.005v1.918l7.222-4.168l-7.222-4.17v2.176c-.86.038-1.611.065-2.278.021c-1.364-.09-2.417-.357-3.979-1.465c-2.244-1.593-2.866-2.027-3.68-2.508c.889-.518 1.449-.906 3.822-2.59c1.56-1.109 2.614-1.377 3.978-1.466c.667-.044 1.418-.017 2.278.02v2.176L24 6.014Z"></path></symbol> <symbol id="zl-cursor" viewBox="0 0 128 128"><path fill="url(#zlcurSVG2pKMedUq)" d="m64 128l55.6-32L64 64L8.4 96Z"></path><path fill="url(#zlcurSVGA2bnqcPY)" d="M119.6 96V32L64 0v64Z"></path><path fill="url(#zlcurSVGPbrgK0dR)" d="M64 0L8.4 32v64L64 64Z"></path><path fill="currentColor" fill-opacity=".55" d="M119.6 32L64 128V64Z"></path><path fill="currentColor" d="M119.6 32L64 64L8.4 32Z"></path><defs><linearGradient id="zlcurSVG2pKMedUq" x1="11.925" x2="11.925" y1="12" y2="24" gradientTransform="translate(.4)scale(5.33333)" gradientUnits="userSpaceOnUse"><stop stop-color="currentColor" offset=".16" stop-opacity=".39"></stop><stop stop-color="currentColor" offset=".658" stop-opacity=".8"></stop></linearGradient><linearGradient id="zlcurSVGA2bnqcPY" x1="22.35" x2="11.925" y1="6.037" y2="12.15" gradientTransform="translate(.4)scale(5.33333)" gradientUnits="userSpaceOnUse"><stop stop-color="currentColor" offset=".182" stop-opacity=".31"></stop><stop stop-color="currentColor" offset=".715" stop-opacity="0"></stop></linearGradient><linearGradient id="zlcurSVGPbrgK0dR" x1="11.925" x2="1.5" y1="0" y2="18" gradientTransform="translate(.4)scale(5.33333)" gradientUnits="userSpaceOnUse"><stop stop-color="currentColor" stop-opacity=".6"></stop><stop stop-color="currentColor" offset=".667" stop-opacity=".22"></stop></linearGradient></defs></symbol> <symbol id="zl-vscode" viewBox="0 0 256 254"><defs>
420<linearGradient id="SVG6Q5wMbNQ" x1="50%" x2="50%" y1="0%" y2="100%"><stop offset="0%" stop-color="#fff"></stop><stop offset="100%" stop-color="#fff" stop-opacity="0"></stop></linearGradient><path id="SVGWhZ12djk" d="M180.828 252.605a15.87 15.87 0 0 0 12.65-.486l52.501-25.262a15.94 15.94 0 0 0 9.025-14.364V41.197a15.94 15.94 0 0 0-9.025-14.363l-52.5-25.263a15.88 15.88 0 0 0-18.115 3.084L74.857 96.35l-43.78-33.232a10.614 10.614 0 0 0-13.56.603L3.476 76.494c-4.63 4.211-4.635 11.495-.012 15.713l37.967 34.638l-37.967 34.637c-4.623 4.219-4.618 11.502.012 15.714l14.041 12.772a10.614 10.614 0 0 0 13.56.604l43.78-33.233l100.507 91.695a15.85 15.85 0 0 0 5.464 3.571m10.464-183.649l-76.262 57.889l76.262 57.888z"></path></defs><mask id="SVGSAQ58H2f" fill="#fff"><use href="#SVGWhZ12djk"></use></mask><path fill="#0065a9" d="M246.135 26.873L193.593 1.575a15.885 15.885 0 0 0-18.123 3.08L3.466 161.482c-4.626 4.219-4.62 11.502.012 15.714l14.05 12.772a10.625 10.625 0 0 0 13.569.604L238.229 33.436c6.949-5.271 16.93-.315 16.93 8.407v-.61a15.94 15.94 0 0 0-9.024-14.36" mask="url(#SVGSAQ58H2f)"></path><path fill="#007acc" d="m246.135 226.816l-52.542 25.298a15.89 15.89 0 0 1-18.123-3.08L3.466 92.207c-4.626-4.218-4.62-11.502.012-15.713l14.05-12.773a10.625 10.625 0 0 1 13.569-.603l207.132 157.135c6.949 5.271 16.93.315 16.93-8.408v.611a15.94 15.94 0 0 1-9.024 14.36" mask="url(#SVGSAQ58H2f)"></path><path fill="#1f9cf0" d="M193.428 252.134a15.89 15.89 0 0 1-18.125-3.083c5.881 5.88 15.938 1.715 15.938-6.603V11.273c0-8.318-10.057-12.483-15.938-6.602a15.89 15.89 0 0 1 18.125-3.084l52.533 25.263a15.94 15.94 0 0 1 9.03 14.363V212.51c0 6.125-3.51 11.709-9.03 14.363z" mask="url(#SVGSAQ58H2f)"></path><path fill="url(#SVG6Q5wMbNQ)" fill-opacity=".25" d="M180.828 252.605a15.87 15.87 0 0 0 12.65-.486l52.5-25.263a1
4205.94 15.94 0 0 0 9.026-14.363V41.197a15.94 15.94 0 0 0-9.025-14.363L193.477 1.57a15.88 15.88 0 0 0-18.114 3.084L74.857 96.35l-43.78-33.232a10.614 10.614 0 0 0-13.56.603L3.476 76.494c-4.63 4.211-4.635 11.495-.012 15.713l37.967 34.638l-37.967 34.637c-4.623 4.219-4.618 11.502.012 15.714l14.041 12.772a10.614 10.614 0 0 0 13.56.604l43.78-33.233l100.506 91.695a15.9 15.9 0 0 0 5.465 3.571m10.464-183.65l-76.262 57.89l76.262 57.888z" mask="url(#SVGSAQ58H2f)"></path></symbol> </defs> </svg> <a class="zh-audit-rail" href="/cloud-audit" data-cta-location="home_audit_rail" aria-label="Find your cloud waste in 24 hours. Free. Get my free audit"> <span class="zh-audit-rail-t" aria-hidden="true"> <span class="zh-audit-rail-track"><span>Find your cloud waste in 24 hours. Free.</span><span class="zh-audit-rail-link">Get my free audit <span class="zh-audit-rail-arrow">→</span></span><span class="zh-audit-rail-acc">·</span><span>Find your cloud waste in 24 hours. Free.</span><span class="zh-audit-rail-link">Get my free audit <span class="zh-audit-rail-arrow">→</span></span><span class="zh-audit-rail-acc">·</span><span>Find your cloud waste in 24 hours. Free.</span><span class="zh-audit-rail-link">Get my free audit <span class="zh-audit-rail-arrow">→</span></span><span class="zh-audit-rail-acc">·</span><span>Find your cloud waste in 24 hours. Free.</span><span class="zh-audit-rail-link">Get my free audit <span class="zh-audit-rail-arrow">→</span></span><span class="zh-audit-rail-acc">·</span><span>Find your cloud waste in 24 hours. Free.</span><span class="zh-audit-rail-link">Get my free audit <span class="zh-audit-rail-arrow">→</span></span><span class="zh-audit-rail-acc">·</span><span>Find your cloud waste in 24 hours. Free.</span><span class="zh-audit-rail-link">Get my free audit <span class="zh-audit-rail-arrow">→</span></span><span class="zh-audit-rail-acc">·</span></span> </span> </a> <section class="zh-hero"> <div class="container"> <a class="hero-release-pill hero-v2-pill" href="/changelog" data-astro-cid-pcumwdht><span class="hpv-dot" aria-hidden="true" data-astro-cid-pcumwdht></span><span class="hpv-tag" data-astro-cid-pcumwdht>v1.47.0</span><span class="hpv-sep" aria-hidden="true" data-astro-cid-pcumwdht>|</span><span class="hpv-text" data-astro-cid-pcumwdht>Pick your cost source. See your usage.</span><span class="hpv-arrow" aria-hidden="true" data-astro-cid-pcumwdht>â</span></a> <h1 class="zh-headline">The easiest AI-native way<br>to run your cloud.</h1> <p class="zh-lead">Plug zopdev into Claude, Cursor or VS Code. Then just ask — it provisions, deploys, watches and saves you money easily.</p> <div class="zh-cta"> <a href="/zopnight/app/signin" class="inline-flex items-center justify-center gap-sp-2 font-mono font-bold tracking-[-0.02em] cursor-pointer transition-[background-color,border-color,color] duration-150 disabled:opacity-60 disabled:cursor-not-allowed whitespace-nowrap py-[13px] px-[22px] text-t-14 leading-[22px] bg-transparent text-ink border border-line hover:bg-[var(--btn-outline-tint)] hover:border-ink zh-cta-secondary">Get Started Free<span class="arrow">→</span></a> <div class="zh-edd" id="zh-edd"> <button type="button" class="inline-flex items-center justify-center gap-sp-2 font-mono font-bold tracking-[-0.02em] cursor-pointer transition-[background-color,border-color,color] duration-150 disabled:opacity-60 disabled:cursor-not-allowed whitespace-nowrap py-[13px] px-[22px] text-t-14 leading-[22px] bg-zop-orange !text-zop-black font-bold border border-zop-orange hover:bg-[var(--btn-fill-orange-hover)] hover:border-[var(--btn-fill-orange-hover)] zh-edd-btn" id="zh-edd-btn" aria-haspopup="true" aria-expanded="false" aria-controls="zh-edd-menu"> <span>Connect Your Agents</span> <span class="zh-edd-caret" aria-hidden="true"></span></button> <div class="zh-edd-menu" id="zh-edd-menu" role="menu" aria-label="Install the zopdev MCP server"> <p class="zh-edd-lbl">One click, OAuth</p> <a class="zh-edd-item" role="menuitem" href="cursor://anysphere.cursor-deeplink/mcp/install?name=zopdev&config=eyJ1cmwiOiJodHRwczovL2FwaS56b3AuZGV2L21jcC1zZXJ2ZXIiLCJ0cmFuc3BvcnQiOiJzdHJlYW1hYmxlLWh0dHAifQ==" data-install="https://cursor.com/downloads"> <span class="zh-edd-ic"> <svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M11.5.1 1.9 5.7c-.3.1-.4.4-.4.7v11.2c0 .3.2.6.4.7l9.6 5.5c.3.2.7.2 1 0l9.6-5.5c.3-.1.4-.4.4-.7V6.4c0-.3-.2-.6-.4-.7L12.5.1c-.3-.2-.6-.2-1 0Zm-8.8 6.2h18.6c.3 0 .4.3.3.5L12.2 22.9c-.1.1-.2 0-.2-.1V12.3c0-.2-.1-.4-.3-.5L2.6 6.5c-.1-.1 0-.2.1-.2Z"></path></svg> </span> <span class="zh-edd-t">Cursor</span>
420 <svg class="zh-edd-go" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><path d="M7 17L17 7M17 7H8M17 7v9"></path></svg> </a> <a class="zh-edd-item" role="menuitem" href="vscode:mcp/install?%7B%22name%22%3A%22zopdev%22%2C%22gallery%22%3Atrue%2C%22url%22%3A%22https%3A%2F%2Fapi.zop.dev%2Fmcp-server%22%2C%22type%22%3A%22http%22%7D" data-install="https://code.visualstudio.com/download"> <span class="zh-edd-ic"> <svg width="15" height="15" viewBox="0 0 100 100" aria-hidden="true"><path fill="#0065A9" d="M70.2 98.1c1.6.6 3.4.6 5 0l20.6-9.9a4.7 4.7 0 0 0 2.7-4.3V16.5a4.7 4.7 0 0 0-2.7-4.3L75.2 2.3c-2.1-1-4.6-.7-6.4.8-.3.2-.5.4-.7.6L29.4 38 12.5 25c-1.6-1.2-3.8-1.1-5.3.2l-5.5 5c-1.8 1.7-1.8 4.5 0 6.2L16 50 1.7 63.6c-1.8 1.7-1.8 4.5 0 6.2l5.5 5c1.5 1.3 3.7 1.4 5.3.2L29.4 62l38.7 34.3c.6.5 1.4 1 2.1 1.3z"></path><path fill="#007ACC" d="M75.2 2.3c-2.1-1-4.6-.7-6.4.8L29.4 38l38.7 33.9L75 76.5V23.5L68.1 26.6l-38.7 33.9L1.7 36.2c-1.8-1.7-1.8-4.5 0-6.2l5.5-5c1.5-1.3 3.7-1.4 5.3-.2L29.4 38 68.8 2.9c1.8-1.5 4.3-1.8 6.4-.6z"></path><path fill="#1F9CF0" d="M75.8 97.7c-2.1 1-4.6.7-6.4-.8 2.4 2.4 6.4.7 6.4-2.6V5.7c0-3.3-4-5-6.4-2.6 1.8-1.5 4.3-1.8 6.4-.8l20.6 10c1.7.8 2.7 2.5 2.7 4.3v66.7c0 1.8-1.1 3.5-2.7 4.3l-20.6 10z"></path></svg> </span> <span class="zh-edd-t">VS Code</span>
420 <svg class="zh-edd-go" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><path d="M7 17L17 7M17 7H8M17 7v9"></path></svg> </a> <p class="zh-edd-lbl zh-edd-lbl--2">One command</p> <a class="zh-edd-item" role="menuitem" href="#zh-mcp" data-tab="cc"><span class="zh-edd-t">Claude Code</span><span class="zh-edd-hint">claude mcp add</span></a> <a class="zh-edd-item" role="menuitem" href="#zh-mcp" data-tab="codex"><span class="zh-edd-t">Codex</span><span class="zh-edd-hint">config.toml</span></a> <a class="zh-edd-item" role="menuitem" href="#zh-mcp" data-tab="cd"><span class="zh-edd-t">Claude Desktop</span><span class="zh-edd-hint">custom connector</span></a> </div> </div> </div> <p class="zh-fine">No credit card. Read-only to start.</p> <p class="zh-trust">Three products, one control plane, across<span class="zh-across"> <svg class="zh-mark" viewBox="0 0 256 153" role="img" aria-label="Amazon Web Services"><use href="#zl-aws"></use></svg> <svg class="zh-mark" viewBox="0 0 256 206" role="img" aria-label="Google Cloud"><use href="#zl-gcp"></use></svg> <svg class="zh-mark" viewBox="0 0 256 242" role="img" aria-label="Microsoft Azure"><use href="#zl-azure"></use></svg> </span></p> <div class="zh-vendors"> <svg class="zh-mark" viewBox="0 0 256 176" role="img" aria-label="Claude"><use href="#zl-anthropic"></use></svg> <svg class="zh-mark" viewBox="0 0 128 128" role="img" aria-label="Cursor"><use href="#zl-cursor"></use></svg> <svg class="zh-mark" viewBox="0 0 256 254" role="img" aria-label="Visual Studio Code"><use href="#zl-vscode"></use></svg> <svg class="zh-mark" viewBox="0 0 256 260" role="img" aria-label="ChatGPT"><use href="#zl-openai"></use></svg> <span class="zh-vsep" aria-hidden="true"></span> <span class="zh-seal"> <svg viewBox="0 0 64 64" aria-hidden="true"><circle cx="32" cy="32" r="29" fill="none" stroke="currentColor" stroke-width="1.5"></circle><path d="M22 32 l8 8 l14 -16" stroke="currentColor" stroke-width="2.6" fill="none" stroke-linecap="square"></path></svg> <span class="zh-seal-l"><strong>SOC 2</strong> Type II</span> </span> <span class="zh-seal"> <svg viewBox="0 0 64 64" aria-hidden="true"><rect x="6" y="6" width="52" height="52" fill="none" stroke="currentColor" stroke-width="1.5"></rect><rect x="11" y="11" width="42" height="42" fill="none" stroke="currentColor" stroke-width="1" opacity=".5"></rect><text x="32" y="30" font-family="Space Grotesk, sans-serif" font-size="10" fill="currentColor" text-anchor="middle" letter-spacing="2">ISO</text><text x="32" y="43" font-family="Space Grotesk, sans-serif" font-size="11" font-weight="700" fill="currentColor" text-anchor="middle">27001</text></svg> <span class="zh-seal-l"><strong>ISO 27001</strong> 2022</span> </span> </div> </div> </section> <section class="zh-kpis"><div class="container"> <div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-px bg-line border border-line"> <div class="srk-card relative bg-bg-0 p-sp-7 flex flex-col gap-sp-2"> <div class="text-[clamp(2rem,3.4vw,3rem)] font-bold tracking-heading leading-tight text-ink tabular-nums">$30M+</div> <div class="text-t-13 text-ink-3 leading-body"> Annualised cloud spend under management </div> </div><div class="srk-card relative bg-bg-0 p-sp-7 flex flex-col gap-sp-2"> <div class="text-[clamp(2rem,3.4vw,3rem)] font-bold tracking-heading leading-tight text-ink tabular-nums">550K+</div> <div class="text-t-13 text-ink-3 leading-body"> Resources tracked since launch </div> </div><div class="srk-card relative bg-bg-0 p-sp-7 flex flex-col gap-sp-2"> <div class="text-[clamp(2rem,3.4vw,3rem)] font-bold tracking-heading leading-tight text-ink tabular-nums">220M+</div> <div class="text-t-13 text-ink-3 leading-body"> Cloud data points processed monthly </div> </div><div class="srk-card relative bg-bg-0 p-sp-7 flex flex-col gap-sp-2"> <div class="text-[clamp(2rem,3.4vw,3rem)] font-bold tracking-heading leading-tight text-ink tabular-nums">353</div> <div class="text-t-13 text-ink-3 leading-body"> Resource types with coverage across 6 cloud platforms </div> </div> </div> </div></section> <section class="zh-loop" aria-label="The continuous loop"> <div class="container"> <p class="zh-loop-lede">A continuous loop, not five tools stitched together.</p> <ol class="zh-rail" id="zh-rail"> <li class="zh-step is-on" data-i="0"> <span class="zh-step-track" aria-hidden="true"><i></i></span> <span class="zh-step-n">01</span> <b class="zh-step-w">Provision</b> <i class="zh-step-d">Cluster, network, load balancer, datastore. Torn down in exact reverse.</i> </li><li class="zh-step" data-i="1"> <span class="zh-step-track" aria-hidden="true"><i></i></span> <span class="zh-step-n">02</span> <b class="zh-step-w">Deploy</b> <i class="zh-step-d">Repository in, running service out. Built on GitHub Actions, rolled out with Helm.</i> </li><li class="zh-step" data-i="2"> <span class="zh-step-track" aria-hidden="true"><i></i></span> <span class="zh-step-n">03</span> <b class="zh-step-w">Observe</b> <i class="zh-step-d">Live pod logs, metrics, traces and alerts. Including the container that already crashed.</i> </li><li class="zh-step" data-i="3"> <span class="zh-step-track" aria-hidden="true"><i></i></span> <span class="zh-step-n">04</span> <b class="zh-step-w">Optimise</b> <i class="zh-step-d">Idle found, scheduled off, right-sized. Every dollar lands on a team.</i> </li><li class="zh-step" data-i="4"> <span class="zh-step-track" aria-hidden="true"><i></i></span> <span class="zh-step-n">05</span> <b class="zh-step-w">Govern</b> <i class="zh-step-d">Policies, tags, roles and budgets enforced. Every action has an actor on the row.</i> </li> </ol> <p class="zh-loop-foot"><span aria-hidden="true">↵</span> and back to the top, every day, without anyone opening a console.</p> </div> </section> <section class="zh-audit" aria-labelledby="zh-audit-title"> <div class="container"> <div class="zh-audit-band"> <div class="zh-audit-copy"> <h2 class="zh-audit-title" id="zh-audit-title">Find your cloud waste. In 24 hours.</h2> <p class="zh-audit-sub">Your 20 biggest compute and storage savings, backed by actual usage. Read-only access, no card, no obligation.</p> </div> <a href="/cloud-audit" class="inline-flex items-center justify-center gap-sp-2 font-mono font-bold tracking-[-0.02em] cursor-pointer transition-[background-color,border-color,color] duration-150 disabled:opacity-60 disabled:cursor-not-allowed whitespace-nowrap py-[13px] px-[22px] text-t-14 leading-[22px] bg-zop-orange !text-zop-black font-bold border border-zop-orange hover:bg-[var(--btn-fill-orange-hover)] hover:border-[var(--btn-fill-orange-hover)] zh-audit-btn" data-cta-location="home_audit_banner">Get my free audit<span class="arrow">→</span></a> </div> </div> </section> <section class="pt-sp-12 pb-sp-10" id="zh-mcp"><div class="container"> <header class="bd-unprose flex flex-col gap-sp-4 pb-sp-6 mb-sp-12 border-b border-line items-start"> <div class="sec-meta"><span>model context protocol</span></div> <div class="w-full flex flex-col md:flex-row md:items-end md:justify-between gap-sp-4 md:gap-sp-12"> <h2 class="m-0 font-bold text-[clamp(28px,3.2vw,44px)] leading-[1.1] tracking-[-0.03em] text-ink max-w-[720px]">The console you<br/>never have to open.</h2> <p class="m-0 text-t-15 text-ink-3 leading-[1.55] max-w-[360px] md:text-right md:mb-sp-2 shrink-0">Your cloud already has the answer. It is three consoles away.</p> </div> </header> <div class="zh-mcp-two"> <div class="zh-mcp-box"> <div class="zh-mcp-tabs" role="tablist" aria-label="MCP clients"> <button class="zh-mcp-tab is-on" role="tab" aria-selected="true" data-c="cursor">Cursor</button> <button class="zh-mcp-tab" role="tab" aria-selected="false" data-c="vscode">VS Code</button> <button class="zh-mcp-tab" role="tab" aria-selected="false" data-c="cc">Claude Code</button> <button class="zh-mcp-tab" role="tab" aria-selected="false" data-c="cd">Claude Desktop</button> <button class="zh-mcp-tab" role="tab" aria-selected="false" data-c="codex">Codex</button> </div> <div class="zh-mcp-body"> <div class="zh-mcp-pane is-on" data-c="cursor"> <div class="zh-mcp-head"> <a class="zh-1c" href="cursor://anysphere.cursor-deeplink/mcp/install?name=zopdev&config=eyJ1cmwiOiJodHRwczovL2FwaS56b3AuZGV2L21jcC1zZXJ2ZXIiLCJ0cmFuc3BvcnQiOiJzdHJlYW1hYmxlLWh0dHAifQ==" data-install="https://cursor.com/downloads"> <span class="zh-1c-ic">
420<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M11.5.1 1.9 5.7c-.3.1-.4.4-.4.7v11.2c0 .3.2.6.4.7l9.6 5.5c.3.2.7.2 1 0l9.6-5.5c.3-.1.4-.4.4-.7V6.4c0-.3-.2-.6-.4-.7L12.5.1c-.3-.2-.6-.2-1 0Zm-8.8 6.2h18.6c.3 0 .4.3.3.5L12.2 22.9c-.1.1-.2 0-.2-.1V12.3c0-.2-.1-.4-.3-.5L2.6 6.5c-.1-.1 0-.2.1-.2Z"></path></svg></span> <span class="zh-1c-t">Add to Cursor</span> <svg class="zh-1c-ext" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><path d="M7 17L17 7M17 7H8M17 7v9"></path></svg> </a> <p class="zh-1c-miss" hidden>Cursor did not open — taking you to <a href="https://cursor.com/downloads" target="_blank" rel="noopener noreferrer">the download page</a>. Already have it? Paste the config below.</p> <button class="zh-mcp-copy" type="button">Copy</button></div> <pre class="zh-mcp-code"><code><span class="t-c">// ~/.cursor/mcp.json</span> 421{ 422 <span class="t-k">"mcpServers"</span>: { 423 <span class="t-k">"zopnight"</span>: { <span class="t-k">"url"</span>: <span class="t-s">"https://api.zop.dev/mcp-server"</span> } 424 } 425}</code></pre> <p class="zh-mcp-then">Reload Cursor, approve in the browser.</p> </div> <div class="zh-mcp-pane" data-c="cc"> <div class="zh-mcp-head"><span class="zh-mcp-head-l">In a Claude Code session</span><button class="zh-mcp-copy" type="button">Copy</button></div> <pre class="zh-mcp-code"><code><span class="t-f">claude mcp add</span> zopnight <span class="t-s">https://api.zop.dev/mcp-server</span> <span class="t-k">-t</span> http</code></pre> <p class="zh-mcp-then">Restart, run <code>/mcp</code>, select Authenticate.</p> </div> <div class="zh-mcp-pane" data-c="vscode"> <div class="zh-mcp-head"> <a class="zh-1c" href="vscode:mcp/install?%7B%22name%22%3A%22zopdev%22%2C%22gallery%22%3Atrue%2C%22url%22%3A%22https%3A%2F%2Fapi.zop.dev%2Fmcp-server%22%2C%22type%22%3A%22http%22%7D" data-install="https://code.visualstudio.com/download"> <span class="zh-1c-ic"><svg width="16" height="16" viewBox="0 0 100 100" aria-hidden="true"><path fill="#0065A9" d="M70.2 98.1c1.6.6 3.4.6 5 0l20.6-9.9a4.7 4.7 0 0 0 2.7-4.3V16.5a4.7 4.7 0 0 0-2.7-4.3L75.2 2.3c-2.1-1-4.6-.7-6.4.8-.3.2-.5.4-.7.6L29.4 38 12.5 25c-1.6-1.2-3.8-1.1-5.3.2l-5.5 5c-1.8 1.7-1.8 4.5 0 6.2L16 50 1.7 63.6c-1.8 1.7-1.8 4.5 0 6.2l5.5 5c1.5 1.3 3.7 1.4 5.3.2L29.4 62l38.7 34.3c.6.5 1.4 1 2.1 1.3z"></path><path fill="#007ACC" d="M75.2 2.3c-2.1-1-4.6-.7-6.4.8L29.4 38l38.7 33.9L75 76.5V23.5L68.1 26.6l-38.7 33.9L1.7 36.2c-1.8-1.7-1.8-4.5 0-6.2l5.5-5c1.5-1.3 3.7-1.4 5.3-.2L29.4 38 68.8 2.9c1.8-1.5 4.3-1.8 6.4-.6z"></path><path fill="#1F9CF0" d="M75.8 97.7c-2.1 1-4.6.7-6.4-.8 2.4 2.4 6.4.7 6.4-2.6V5.7c0-3.3-4-5-6.4-2.6 1.8-1.5 4.3-1.8 6.4-.8l20.6 10c1.7.8 2.7 2.5 2.7 4.3v66.7c0 1.8-1.1 3.5-2.7 4.3l-20.6 10z"></path></svg></span> <span class="zh-1c-t">
425Add to VS Code</span> <svg class="zh-1c-ext" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><path d="M7 17L17 7M17 7H8M17 7v9"></path></svg> </a> <p class="zh-1c-miss" hidden>VS Code did not open — taking you to <a href="https://code.visualstudio.com/download" target="_blank" rel="noopener noreferrer">the download page</a>. Already have it? Paste the config below.</p> <button class="zh-mcp-copy" type="button">Copy</button></div> <pre class="zh-mcp-code"><code><span class="t-c">// MCP: Open User Configuration</span> 426{ 427 <span class="t-k">"servers"</span>: { 428 <span class="t-k">"zopnight"</span>: { <span class="t-k">"url"</span>: <span class="t-s">"https://api.zop.dev/mcp-server"</span>, <span class="t-k">"type"</span>: <span class="t-s">"http"</span> } 429 } 430}</code></pre> <p class="zh-mcp-then">Save. It starts itself and prompts on first use.</p> </div> <div class="zh-mcp-pane" data-c="cd"> <div class="zh-mcp-head"><span class="zh-mcp-head-l">Settings → Connectors → Add custom</span><button class="zh-mcp-copy" type="button">Copy</button></div> <pre class="zh-mcp-code"><code><span class="t-s">https://api.zop.dev/mcp-server</span></code></pre> <p class="zh-mcp-then">Name it <em>zopnight</em>, then Add and Connect.</p> </div> <div class="zh-mcp-pane" data-c="codex"> <div class="zh-mcp-head"><span class="zh-mcp-head-l">In ~/.codex/config.toml</span><button class="zh-mcp-copy" type="button">Copy</button></div> <pre class="zh-mcp-code"><code><span class="t-c"># ~/.codex/config.toml</span> 431[<span class="t-k">mcp_servers.zopnight</span>] 432url = <span class="t-s">"https://api.zop.dev/mcp-server"</span></code></pre> <p class="zh-mcp-then">Or Settings → MCP Servers, transport Streamable HTTP.</p> </div> </div> <div class="zh-mcp-foot"> <span class="zh-oauth">OAuth</span> <span>Nothing to paste or rotate. Any MCP client works.</span> <a class="zh-mcp-docs" href="/docs/zopnight/integrations/mcp">All 20 clients <span class="arrow" aria-hidden="true">→</span></a> </div> </div> <div class="zh-ask"> <p class="zh-ask-k">Then just ask</p> <ul class="zh-ask-l"> <li>Which non-prod databases sat idle last week, and what did they cost me?</li><li>Show me every resource in eu-west-1 with no owner tag.</li><li>What changed on the checkout-api deployment in the last 24 hours?</li><li>Which team is over budget this month, and on what?</li> </ul> <p class="zh-ask-f">Answers come from your live inventory, not a stale export.</p> </div> </div> <dl class="zh-rails"> <div class="zh-rail-row zh-rail-row--can"> <dt>Reads</dt> <dd>inventory · cost and budgets · schedules · findings · deployments · teams and audit logs</dd> </div> <div class="zh-rail-row zh-rail-row--no"> <dt>Never</dt> <dd>writes unless you enable it · touches roles, users or credentials · reveals a secret · acts unlogged</dd> </div> </dl> </div></section> <section class="pt-sp-12 pb-sp-10 bg-bg-1" id="zh-products"><div class="container"> <header class="bd-unprose flex flex-col gap-sp-4 pb-sp-6 mb-sp-12 border-b border-line items-start"> <div class="sec-meta"><span>three products, one platform</span></div> <div class="w-full flex flex-col md:flex-row md:items-end md:justify-between gap-sp-4 md:gap-sp-12"> <h2 class="m-0 font-bold text-[clamp(28px,3.2vw,44px)] leading-[1.1] tracking-[-0.03em] text-ink max-w-[720px]">Pick where you are today.</h2> <p class="m-0 text-t-15 text-ink-3 leading-[1.55] max-w-[360px] md:text-right md:mb-sp-2 shrink-0">One gateway, one identity model, one audit trail, one bill. Start with whichever problem is loudest. The rest is already wired in.</p> </div> </header> <div class="zh-prods"> <a class="feature zh-prod zh-prod--day" href="/zopday"> <div class="zh-prod-top"> <svg class="zh-prod-mark" viewBox="0 0 32 32" aria-hidden="true"><use href="#mark-zopday"></use></svg> <span class="pill pill-live">live</span> </div> <h3 class="zh-prod-title">zopday</h3> <p class="zh-prod-role">Build and deploy</p> <p class="zh-prod-body">A git repository goes in. A running service comes out. zopday provisions the cluster, builds the image, applies the rollout and hands back the URL.</p> <ul class="zh-prod-list"> <li>Framework and port read from the source</li><li>Builds on GitHub Actions with BuildKit</li><li>EKS, GKE, AKS, VPCs, managed datastores</li><li>Numbered revisions, one-click rollback</li> </ul> <span class="zh-prod-go">Explore zopday <span class="arrow" aria-hidden="true">→</span></span> </a><a class="feature zh-prod zh-prod--cloud" href="/zopcloud"> <div class="zh-prod-top"> <svg class="zh-prod-mark" viewBox="0 0 32 32" aria-hidden="true"><use href="#mark-zopcloud"></use></svg> <span class="pill pill-live">live</span> </div> <h3 class="zh-prod-title">zopcloud</h3> <p class="zh-prod-role">Instant deploy</p> <p class="zh-prod-body">No cloud account, no cluster, no card. Paste a repository URL and get a live HTTPS address on a pool we operate. Move to your own account whenever you want.</p> <ul class="zh-prod-list"> <li>Managed domains with automatic TLS</li><li>Scale to zero when idle, wake on request</li><li>Shareable install links for repos and charts</li><li>The same pipeline as your own cloud</li> </ul> <span class="zh-prod-go">Explore zopcloud <span class="arrow" aria-hidden="true">→</span></span> </a><a class="feature zh-prod zh-prod--night" href="/zopnight"> <div class="zh-prod-top"> <svg class="zh-prod-mark" viewBox="0 0 32 32" aria-hidden="true"><use href="#mark-zopnight"></use></svg> <span class="pill pill-live">live</span> </div> <h3 class="zh-prod-title">zopnight</h3> <p class="zh-prod-role">Cost and governance</p> <p class="zh-prod-body">It finds every resource you own, learns when nobody is using it, turns it off, and shows each team exactly what they spent.</p> <ul class="zh-prod-list"> <li>353 resource types across your clouds</li><li>Schedules, autoscaling, one-click fixes</li><li>Real billing data, not estimates</li><li>Showback by team and by tag</li> </ul> <span class="zh-prod-go">Explore zopnight <span class="arrow" aria-hidden="true">→</span></span> </a> </div> </div></section> <section class="pt-sp-12 pb-sp-10" id="zh-integrations"><div class="container"> <header class="bd-unprose flex flex-col gap-sp-4 pb-sp-6 mb-sp-12 border-b border-line items-start"> <div class="sec-meta"><span>integrations</span></div> <div class="w-full flex flex-col md:flex-row md:items-end md:justify-between gap-sp-4 md:gap-sp-12"> <h2 class="m-0 font-bold text-[clamp(28px,3.2vw,44px)] leading-[1.1] tracking-[-0.03em] text-ink max-w-[720px]">Fits the stack<br/>you already run.</h2> <p class="m-0 text-t-15 text-ink-3 leading-[1.55] max-w-[360px] md:text-right md:mb-sp-2 shrink-0">Nothing to rip out. zopdev reads your clouds, builds on the CI you already pay for, and shouts in the channel your team already watches.</p> </div> </header> <div class="zh-clouds"> <div class="zh-cloud"> <img class="zh-cloud-logo zh-cloud-logo--dark" src="/logo-aws-white.svg" alt="" width="48" height="28" loading="lazy" decoding="async"> <img class="zh-cloud-logo zh-cloud-logo--light" src="/logo-aws.svg" alt="" width="48" height="28" loading="lazy" decoding="async"> <h3 class="zh-cloud-n">Amazon Web Services</h3> <p class="zh-cloud-d">EC2, EKS, RDS, Lambda, SageMaker. <b>121 resource types</b> via Resource Explorer.</p> </div><div class="zh-cloud"> <img class="zh-cloud-logo" src="/logo-gcp.svg" alt="" width="56" height="28" loading="lazy" decoding="async"> <h3 class="zh-cloud-n">Google Cloud</h3> <p class="zh-cloud-d">Compute Engine, GKE, Cloud SQL, BigQuery. <b>78 resource types</b> via Asset Inventory.</p> </div><div class="zh-cloud"> <img class="zh-cloud-logo" src="/logo-azure.svg" alt="" width="100" height="28" loading="lazy" decoding="async"> <h3 class="zh-cloud-n">Microsoft Azure</h3> <p class="zh-cloud-d">VMs, AKS, SQL, Databricks, ML Compute. <b>110 resource types</b> via Resource Graph.</p> </div> </div> <div class="zh-intg"> <div class="zh-cell"> <h3 class="zh-cell-k">Source and CI</h3> <ul class="zh-cell-l"><li class="zh-cell-i" data-m="zl-gh" data-n="GitHub"> <svg class="zh-cell-ic" role="img" aria-label="GitHub"><use href="#zl-gh"></use></svg> </li><li class="zh-cell-i" data-m="zl-ghactions" data-n="GitHub Actions"> <svg class="zh-cell-ic" role="img" aria-label="GitHub Actions">
432<use href="#zl-ghactions"></use></svg> </li><li class="zh-cell-i" data-m="zl-gitlab" data-n="GitLab"> <svg class="zh-cell-ic" role="img" aria-label="GitLab"><use href="#zl-gitlab"></use></svg> </li><li class="zh-cell-i" data-m="zl-docker" data-n="BuildKit"> <svg class="zh-cell-ic" role="img" aria-label="BuildKit"><use href="#zl-docker"></use></svg> </li></ul> </div><div class="zh-cell"> <h3 class="zh-cell-k">Kubernetes and packaging</h3> <ul class="zh-cell-l"><li class="zh-cell-i" data-m="zl-eks" data-n="Amazon EKS"> <svg class="zh-cell-ic" role="img" aria-label="Amazon EKS"><use href="#zl-eks"></use></svg> </li><li class="zh-cell-i" data-m="zl-gcp" data-n="Google GKE"> <svg class="zh-cell-ic" role="img" aria-label="Google GKE"><use href="#zl-gcp"></use></svg> </li><li class="zh-cell-i" data-m="zl-azure" data-n="Azure AKS"> <svg class="zh-cell-ic" role="img" aria-label="Azure AKS"><use href="#zl-azure"></use></svg> </li><li class="zh-cell-i" data-m="zl-openshift" data-n="OpenShift"> <svg class="zh-cell-ic" role="img" aria-label="OpenShift"><use href="#zl-openshift"></use></svg> </li><li class="zh-cell-i" data-m="zl-helm" data-n="Helm"> <svg class="zh-cell-ic" role="img" aria-label="Helm"><use href="#zl-helm"></use></svg> </li></ul> </div><div class="zh-cell"> <h3 class="zh-cell-k">Registries</h3> <ul class="zh-cell-l"><li class="zh-cell-i" data-m="zl-gcp" data-n="Artifact Registry"> <svg class="zh-cell-ic" role="img" aria-label="Artifact Registry"><use href="#zl-gcp"></use></svg> </li><li class="zh-cell-i" data-m="zl-aws" data-n="Amazon ECR"> <svg class="zh-cell-ic" role="img" aria-label="Amazon ECR"><use href="#zl-aws"></use></svg> </li><li class="zh-cell-i" data-m="zl-azure" data-n="Azure Container Registry"> <svg class="zh-cell-ic" role="img" aria-label="Azure Container Registry"><use href="#zl-azure"></use></svg> </li></ul> </div><div class="zh-cell"> <h3 class="zh-cell-k">Data platforms</h3> <ul class="zh-cell-l"><li class="zh-cell-i" data-m="zl-databricks" data-n="Databricks"> <svg class="zh-cell-ic" role="img" aria-label="Databricks"><use href="#zl-databricks"></use></svg> </li><li class="zh-cell-i" data-m="zl-snowflake" data-n="Snowflake"> <svg class="zh-cell-ic" role="img" aria-label="Snowflake"><use href="#zl-snowflake"></use></svg> </li><li class="zh-cell-i" data-m="zl-gcp" data-n="Cloud SQL"> <svg class="zh-cell-ic" role="img" aria-label="Cloud SQL"><use href="#zl-gcp"></use></svg> </li><li class="zh-cell-i" data-m="zl-rds" data-n="Amazon RDS"> <svg class="zh-cell-ic" role="img" aria-label="Amazon RDS"><use href="#zl-rds"></use></svg> </li></ul> </div><div class="zh-cell"> <h3 class="zh-cell-k">Alerting</h3> <ul class="zh-cell-l"><li class="zh-cell-i" data-m="zl-slack" data-n="Slack"> <svg class="zh-cell-ic" role="img" aria-label="Slack"><use href="#zl-slack"></use></svg> </li><li class="zh-cell-i" data-m="zl-teams" data-n="Microsoft Teams"> <svg class="zh-cell-ic" role="img" aria-label="Microsoft Teams"><use href="#zl-teams"></use></svg> </li><li class="zh-cell-i" data-m="zl-gchat" data-n="Google Chat"> <svg class="zh-cell-ic" role="img" aria-label="Google Chat"><use href="#zl-gchat"></use></svg> </li></ul> </div><div class="zh-cell"> <h3 class="zh-cell-k">Tickets</h3> <ul class="zh-cell-l"><li class="zh-cell-i" data-m="zl-jira" data-n="Jira"> <svg class="zh-cell-ic" role="img" aria-label="Jira"><use href="#zl-jira"></use></svg> </li><li class="zh-cell-i" data-m="zl-servicenow" data-n="ServiceNow"> <svg class="zh-cell-ic" role="img" aria-label="ServiceNow"><use href="#zl-servicenow"></use></svg> </li></ul> </div><div class="zh-cell"> <h3 class="zh-cell-k">Identity</h3> <ul class="zh-cell-l"><li class="zh-cell-i" data-m="zl-gh" data-n="GitHub"> <svg class="zh-cell-ic" role="img" aria-label="GitHub"><use href="#zl-gh"></use></svg> </li><li class="zh-cell-i" data-m="zl-google" data-n="Google"> <svg class="zh-cell-ic" role="img" aria-label="Google"><use href="#zl-google"></use></svg> </li><li class="zh-cell-i" data-m="zl-azure" data-n="Microsoft Entra ID"> <svg class="zh-cell-ic" role="img" aria-label="Microsoft Entra ID"><use href="#zl-azure"></use></svg> </li></ul> </div><div class="zh-cell"> <h3 class="zh-cell-k">AI</h3> <ul class="zh-cell-l"><li class="zh-cell-i" data-m="zl-openai" data-n="OpenAI"> <svg class="zh-cell-ic" role="img" aria-label="OpenAI"><use href="#zl-openai"></use></svg> </li><li class="zh-cell-i" data-m="zl-anthropic" data-n="Anthropic"> <svg class="zh-cell-ic" role="img" aria-label="Anthropic"><use href="#zl-anthropic"></use></svg> </li><li class="zh-cell-i" data-m="zl-aws" data-n="AWS Bedrock"> <svg class="zh-cell-ic" role="img" aria-label="AWS Bedrock"><use href="#zl-aws"></use></svg> </li><li class="zh-cell-i" data-m="zl-openrouter" data-n="OpenRouter"> <svg class="zh-cell-ic" role="img" aria-label="OpenRouter"><use href="#zl-openrouter"></use></svg> </li></ul> </div> </div> </div></section> <section class="pt-sp-12 pb-sp-10 bg-bg-1" id="zh-security"><div class="container"> <header class="bd-unprose flex flex-col gap-sp-4 pb-sp-6 mb-sp-12 border-b border-line items-start"> <div class="sec-meta"><span>security</span></div> <div class="w-full flex flex-col md:flex-row md:items-end md:justify-between gap-sp-4 md:gap-sp-12"> <h2 class="m-0 font-bold text-[clamp(28px,3.2vw,44px)] leading-[1.1] tracking-[-0.03em] text-ink max-w-[720px]">The boring guarantees<br/>that let you say yes.</h2> <p class="m-0 text-t-15 text-ink-3 leading-[1.55] max-w-[360px] md:text-right md:mb-sp-2 shrink-0">Built for the person who has to answer the questionnaire.</p> </div> </header> <div class="zh-trustgrid"> <div class="zh-trustcell"> <h3>Ephemeral access</h3> <p>Cluster credentials are minted per job from your own cloud account and expire with it. Nothing standing, nothing to rotate.</p> </div><div class="zh-trustcell"> <h3>Encrypted vault</h3> <p>Every cloud credential, registry token and integration secret is AES-256-GCM encrypted and scoped to your organisation.</p> </div><div class="zh-trustcell"> <h3>Roles and SSO</h3> <p>Organisation-scoped roles down to the resource, custom policies, team assignment, SAML single sign-on and OAuth.</p> </div><div class="zh-trustcell"> <h3>Everything audited</h3> <p>Every action recorded with the actor, the state before and the state after, including reads made by AI assistants.</p> </div> </div> </div></section> <section class="pt-sp-12 pb-sp-10" id="zh-faq"><div class="container"> <header class="bd-unprose flex flex-col gap-sp-4 pb-sp-6 mb-sp-12 border-b border-line items-start"> <div class="sec-meta"><span>
432faq</span></div> <div class="w-full flex flex-col md:flex-row md:items-end md:justify-between gap-sp-4 md:gap-sp-12"> <h2 class="m-0 font-bold text-[clamp(28px,3.2vw,44px)] leading-[1.1] tracking-[-0.03em] text-ink max-w-[720px]">The questions that<br/>come up every time.</h2> <p class="m-0 text-t-15 text-ink-3 leading-[1.55] max-w-[360px] md:text-right md:mb-sp-2 shrink-0">Short answers. Longer ones live in the docs.</p> </div> </header> <div class="faq-list"> <details class="faq-item"> <summary> <span class="faq-q" role="heading" aria-level="3">What is zopdev?</span> <span class="faq-chevron" aria-hidden="true">+</span> </summary> <div class="faq-body"> <p>One platform for the whole life of a cloud workload. zopday provisions the infrastructure and ships the code, zopcloud runs it for you when you do not want an account of your own, and zopnight keeps the bill down once it is live. The same inventory, the same permissions and the same audit trail sit under all three.</p> </div> </details><details class="faq-item"> <summary> <span class="faq-q" role="heading" aria-level="3">Does zopdev require agent installation or code changes?</span> <span class="faq-chevron" aria-hidden="true">+</span> </summary> <div class="faq-body"> <p>No agents, no sidecars, no Terraform changes. zopdev connects through cloud APIs, with AWS, GCP and Azure access granted by IAM roles you provision once. Discovery starts in minutes, not days.</p> </div> </details><details class="faq-item"> <summary> <span class="faq-q" role="heading" aria-level="3">Which clouds and services are supported?</span> <span class="faq-chevron" aria-hidden="true">+</span> </summary> <div class="faq-body"> <p>AWS, GCP and Azure, covering compute, storage, databases, networking and Kubernetes across all regions â 353 resource types today. Coverage grows every sprint; if you use something niche, <a href="https://bookings.zop.dev/#/discover-zopdev" target="_blank" rel="noopener noreferrer">tell us</a> and it is usually on the roadmap within a quarter.</p> </div> </details><details class="faq-item"> <summary> <span class="faq-q" role="heading" aria-level="3">What can I do with the MCP server?</span> <span class="faq-chevron" aria-hidden="true">+</span> </summary> <div class="faq-body"> <p>Point Claude, Cursor, VS Code or Codex at the zopdev MCP server and your agent can read the same inventory, cost and deployment data the dashboard shows, then act on it under your existing permissions. It connects over OAuth, so there is no token to paste or rotate. Setup is on the <a href="/docs/zopnight/integrations/mcp">MCP docs page</a>.</p> </div> </details><details class="faq-item"> <summary> <span class="faq-q" role="heading" aria-level="3">Is my cloud data safe? What does zopdev read?</span> <span class="faq-chevron" aria-hidden="true">+</span> </summary> <div class="faq-body"> <p>zopdev operates with least-privilege read access plus the specific write permissions for the actions you explicitly enable. It never reads application data, secrets or user content â only resource metadata and billing data. Everything is encrypted in transit and at rest, and a SOC 2 Type II report is available on request.</p> </div> </details><details class="faq-item"> <summary> <span class="faq-q" role="heading" aria-level="3">Does it work alongside Terraform or other IaC tools?</span> <span class="faq-chevron" aria-hidden="true">+</span> </summary> <div class="faq-body"> <p>Yes. zopdev detects IaC-managed resources and marks them separately, so you know which changes belong in your Terraform pipeline and which can be actioned directly. For IaC resources it can generate a diff-ready Terraform snippet rather than acting itself.</p> </div> </details><details class="faq-item"> <summary> <span class="faq-q" role="heading" aria-level="3">How is zopdev priced?</span> <span class="faq-chevron" aria-hidden="true">+</span> </summary> <div class="faq-body"> <p>Pricing is based on the number of cloud resources managed, not on savings found or actions taken. See full plans on the <a href="/pricing">pricing page</a>, or start free with the playground. No card required.</p> </div> </details> </div> </div></section> <section class="final" id="zh-start"> <!-- 433 CtaBlock â page-body component. Never place inside a layout slot â 434 Footer is owned by MarketingLayout (cf. footer-duplicate fix commit 60f5b91). 435--><section class="bg-[#0F0F12] text-[color:var(--color-paper)] pb-sp-24"><div class="container">
435 <div class="grid grid-cols-1 md:grid-cols-[2fr_1fr] gap-[60px] items-center"> <div class="flex flex-col items-start text-left min-w-0"> <h2 class="font-display font-bold tracking-[-0.04em] leading-[1] mb-sp-5 text-[clamp(36px,4vw,56px)] text-[color:var(--color-paper)]">Cut your cloud bill.</h2> <p class="text-[16px] leading-[1.55] max-w-[460px] mb-sp-7 text-[color:var(--color-paper)]">Read-only to start. Nothing changes until you approve it.</p> <p class="text-[16px] leading-[1.55] max-w-[460px] mb-sp-7 text-[#B8B0A0]"> Connect a cloud account and zopdev prices what you actually run across AWS, Google Cloud and Azure â idle machines, oversized instances, disks nobody owns. First findings land in under five minutes, on your real inventory rather than an estimate. Then ask your agent to fix them, or do it yourself. </p> <div class="flex flex-wrap gap-sp-3"> <a class="btn btn-primary" href="/zopnight/app/signin">Get Recommendations â</a><a class="btn btn-secondary" href="/contact">Talk to Platform Sales â</a> </div> <div class="mt-sp-8 w-full grid grid-cols-1 md:grid-cols-3 gap-sp-5"> <div class="flex flex-col gap-1 pt-sp-4 border-t border-[rgba(240,235,219,.18)]"> <strong class="block font-mono font-semibold text-[18px] tracking-[-0.01em] text-[#F0EBDB]">5 min</strong> <span class="text-[13px] leading-[1.45] tracking-[0.05em] text-[rgba(240,235,219,.78)]">first findings on your live inventory</span> </div><div class="flex flex-col gap-1 pt-sp-4 border-t border-[rgba(240,235,219,.18)]"> <strong class="block font-mono font-semibold text-[18px] tracking-[-0.01em] text-[#F0EBDB]">0</strong> <span class="text-[13px] leading-[1.45] tracking-[0.05em] text-[rgba(240,235,219,.78)]">production write actions during the PoC</span> </div><div class="flex flex-col gap-1 pt-sp-4 border-t border-[rgba(240,235,219,.18)]"> <strong class="block font-mono font-semibold text-[18px] tracking-[-0.01em] text-[#F0EBDB]">read-only</strong> <span class="text-[13px] leading-[1.45] tracking-[0.05em] text-[rgba(240,235,219,.78)]">cloud account connection for the full trial</span> </div> </div> </div> <div aria-hidden="true"></div> </div> </div></section> <div aria-hidden="true" style="display:contents"> <astro-island uid="Z2mnD3s" prefix="r7" component-url="/_astro/TetrisCanvasIsland.BZjuOMl1.js" component-export="default" renderer-url="/_astro/client.bnjHR3qd.js" props="{}" ssr client="idle" opts="{"name":"TetrisCanvasIsland","value":true}" await-children><canvas id="tet-canvas" aria-hidden="true"></canvas><!--astro:end--></astro-island> </div> </section> </main>
435<script type="module" src="/_astro/index.astro_astro_type_script_index_0_lang.UeFheItq.js"></script>
435 <section class="bridge-marquee" aria-label="zopdev brand statement"> <div class="bridge-track"> <span>Multi-cloud automation</span><span class="acc">·</span> <span>Production-ready in 30 min</span><span class="acc">·</span> <span>SOC 2 · ISO 27001</span><span class="acc">·</span> <span>20â60% off the bill, first month</span><span class="acc">·</span> <span>4 platforms · 1 console</span><span class="acc">·</span> <span>Multi-cloud automation</span><span class="acc">·</span> <span>Production-ready in 30 min</span><span class="acc">·</span> <span>SOC 2 · ISO 27001</span><span class="acc">·</span> <span>20â60% off the bill, first month</span><span class="acc">·</span> <span>4 platforms · 1 console</span><span class="acc">·</span> </div> </section> <footer data-astro-transition-persist="footer"><div class="container"><div class="foot-grid foot-grid--equal"><div class="foot-col"><h2>product</h2><ul><li><a href="/zopnight">Zopnight</a></li><li><a href="/zopday">Zopday</a></li><li><a href="/zopcloud">Zopcloud</a></li><li><a href="/k8s-view">Kubernetes View</a></li><li><a href="/integrations">Integrations</a></li><li><a href="/pricing">Pricing</a></li><li><a href="/walkthrough">Walkthrough</a></li><li><a href="/learn/mcp-server">MCP server</a></li></ul></div><div class="foot-col"><h2>solutions</h2><ul><li><a href="/solutions">Use cases by industry</a></li><li><a href="/devops-hub">DevOps hub</a></li><li><a href="/platform-engineering-hub">Platform engineering</a></li><li><a href="/services">Services</a></li><li><a href="/zopnight/anomaly-detection">Anomaly detection</a></li><li><a href="/zopnight/team-budgets">Team budgets</a></li></ul></div><div class="foot-col"><h2>resources</h2><ul><li><a href="/resources/blogs">Blog</a></li><li><a href="/resources/ebooks">Ebooks</a></li><li><a href="/resources/university">University</a></li><li><a href="/what-is-devops">What is DevOps</a></li><li><a href="/ci-cd-best-practices">CI/CD best practices</a></li><li><a href="/cdcr-whitepaper">CDCR whitepaper</a></li><li><a href="/developers">Developers</a></li><li><a href="/changelog">Changelog</a></li></ul></div><div class="foot-col"><h2>company</h2><ul><li><a href="/about">About</a></li><li><a href="/media-kit">Media Kit</a></li><li><a href="/contact">Contact</a></li><li><a href="https://bookings.zop.dev/#/discover-zopdev" target="_blank" rel="noopener noreferrer" aria-label="Demo (opens in a new tab)">Demo</a></li><li><a href="/status">Status</a></li><li><a href="/trust">Trust</a></li></ul></div><div class="foot-col"><h2>optimize</h2><ul><li><a href="/solutions/scheduling">Scheduling</a></li><li><a href="/solutions/right-sizing">Rightsizing</a></li><li><a href="/solutions/idle-detection">Idle detection</a></li><li><a href="/solutions/auto-remediation">Auto-remediation</a></li><li><a href="/solutions/orphan-cleanup">Orphan cleanup</a></li><li><a href="/solutions/auto-tagging">Smart tags</a></li><li><a href="/solutions/showback">Showback</a></li><li><a href="/solutions/finops">FinOps</a></li><li><a href="/solutions/multi-cloud">Multi-cloud</a></li><li><a href="/solutions-catalog">All solutions â</a></li></ul></div><div class="foot-col"><h2>comparisons</h2><ul><li><a href="/compare/cloudhealth-vs-zopnight">vs CloudHealth</a></li><li><a href="/compare/spot-io-vs-zopnight">vs Spot.io</a></li><li><a href="/compare/cloudzero-vs-zopnight">vs CloudZero</a></li><li><a href="/compare/kubecost-vs-zopnight">vs Kubecost</a></li><li><a href="/compare/densify-vs-zopnight">vs Densify</a></li><li><a href="/compare/apptio-vs-zopnight">vs Apptio</a></li><li><a href="/compare/vantage-vs-zopnight">vs Vantage</a></li><li><a href="/compare">All comparisons â</a></li></ul></div><div class="foot-col"><h2>by service</h2><ul><li><a href="/solutions/aws-rds">RDS</a></li><li><a href="/solutions/gcp-cloud-sql">Cloud SQL</a></li><li><a href="/solutions/aws-eks">EKS</a></li><li><a href="/solutions/gcp-gke">GKE</a></li><li><a href="/solutions/azure-aks">AKS</a></li><li><a href="/solutions/aws-s3">S3</a></li><li><a href="/solutions/aws-lambda">Lambda</a></li><li><a href="/solutions/aws-ec2">EC2</a></li><li><a href="/solutions/gcp-compute-engine">Compute Engine</a></li></ul></div><div class="foot-col"><h2>by industry & role</h2><ul><li><a href="/industries">All industries â</a></li><li><a href="/industries/saas">SaaS</a></li><li><a href="/industries/fintech">Fintech</a></li><li><a href="/industries/healthcare">Healthcare</a></li><li><a href="/industries/ecommerce">Ecommerce</a></li><li><a href="/for">All roles â</a></li><li><a href="/for/devops-engineers">DevOps</a></li><li><a href="/for/finops-teams">FinOps teams</a></li><li><a href="/for/platform-engineers">Platform engineers</a></li><li><a href="/for/sre-teams">SRE teams</a></li></ul></div><div class="foot-col"><h2>learn & recs</h2><ul><li><a href="/learn">Learn & guides</a></li><li><a href="/learn/finops">
435FinOps guide</a></li><li><a href="/learn/cloud-cost-optimization">Cost optimization</a></li><li><a href="/learn/kubernetes-cost-optimization">Kubernetes cost</a></li><li><a href="/recommendations">Recommendations</a></li><li><a href="/recommendations/idle">Idle resources</a></li><li><a href="/recommendations/orphan">Orphaned resources</a></li><li><a href="/zopnight/rules">Rule catalogue</a></li></ul></div><div class="foot-col"><h2>by provider</h2><ul><li><a href="/aws-cost-optimization">AWS</a></li><li><a href="/zopnight/rules/aws">AWS Recommendation</a></li><li><a href="/gcp-cost-optimization">GCP</a></li><li><a href="/zopnight/rules/gcp">GCP Recommendation</a></li><li><a href="/azure-cost-optimization">Azure</a></li><li><a href="/zopnight/rules/azure">Azure Recommendation</a></li><li><a href="/cloud-cost-optimization">By location</a></li></ul></div></div><!-- ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 436 FOOTER BOTTOM PANEL · ZopDev wordmark left · world map right 437 ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ --><!-- COMPLIANCE BADGES · SOC 2 + ISO white badges before logo + globe --><div class="foot-globe"><div class="foot-globe-left"><a href="/" class="foot-globe-mark" aria-label="zopdev"><svg class="foot-globe-logo" viewBox="0 0 715 276" aria-hidden="true"><use href="#logo-zopdev"></use></svg></a><div class="foot-globe-badges" aria-label="Compliance certifications"><span class="foot-globe-badge" aria-label="SOC 2 Type II"><svg viewBox="0 0 64 64" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"><circle cx="32" cy="32" r="29" fill="none" stroke="currentColor" stroke-width="1.5"></circle><path d="M32 8 a24 24 0 0 1 24 24 v6 a24 24 0 0 1 -24 24 a24 24 0 0 1 -24 -24 v-6 a24 24 0 0 1 24 -24 z" fill="none" stroke="currentColor" stroke-width="1" opacity=".5"></path><path d="M22 32 l8 8 l14 -16" stroke="currentColor" stroke-width="2.4" fill="none" stroke-linecap="square" stroke-linejoin="miter"></path></svg><span class="foot-globe-badge-label"><strong>SOC 2</strong> Type II</span></span><span class="foot-globe-badge" aria-label="ISO 27001:2022"><svg viewBox="0 0 64 64" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="52" height="52" fill="none" stroke="currentColor" stroke-width="1.5"></rect><rect x="11" y="11" width="42" height="42" fill="none" stroke="currentColor" stroke-width="1" opacity=".5"></rect><text x="32" y="29" font-family="Space Grotesk, monospace" font-size="9" fill="currentColor" text-anchor="middle" letter-spacing="2">ISO</text><text x="32" y="42" font-family="Space Grotesk, sans-serif" font-size="11" font-weight="700" fill="currentColor" text-anchor="middle">27001</text><line x1="14" y1="50" x2="50" y2="50" stroke="currentColor" stroke-width="1"></line></svg><span class="foot-globe-badge-label"><strong>ISO 27001</strong> 2022</span></span></div><div class="foot-globe-aws-group"><span class="foot-globe-aws-label" aria-hidden="true">Available on</span><a class="foot-globe-aws" href="https://aws.amazon.com/marketplace/pp/prodview-f7anqsweiahwm" target="_blank" rel="noopener noreferrer" aria-label="View zopdev on AWS Marketplace (opens in a new tab)"><img src="/logo-aws-marketplace.svg" alt="AWS Marketplace" width="194" height="34" loading="lazy" decoding="async"></a></div></div><div class="foot-globe-right min-w-0"><div class="foot-regions-v2" id="foot-regions-v2"><canvas id="foot-regions-map"></canvas></div><astro-island uid="Zzv01Y" prefix="r5" component-url="/_astro/FooterGlobe.B3WCmj3M.js" component-export="default" renderer-url="/_astro/client.bnjHR3qd.js" props="{}" ssr client="idle" opts="{"name":"FooterGlobe","value":true}"></astro-island></div></div><div class="foot-bottom foot-bottom-3"><div class="foot-copy">© <span data-year>2026</span> zopdev · <a href="/legal/privacy-policy">privacy</a> · <a href="/legal/website-terms-of-service">terms</a> · <a href="/legal/refund-policy">refunds</a></div><div class="foot-mid">made with <svg viewBox="0 0 7 6" aria-hidden="true"><rect x="1" y="0" width="1" height="1"></rect><rect x="2" y="0" width="1" height="1"></rect><rect x="4" y="0" width="1" height="1"></rect><rect x="5" y="0" width="1" height="1"></rect><rect x="0" y="1" width="7" height="1"></rect><rect x="0" y="2" width="7" height="1"></rect><rect x="1" y="3" width="5" height="1"></rect><rect x="2" y="4" width="3" height="1"></rect><rect x="3" y="5" width="1" height="1"></rect></svg> by zopdev</div><div class="foot-social"><a href="https://linkedin.com/company/zopdev" class="foot-social-icon" aria-label="zopdev on LinkedIn" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg></a><a href="https://twitter.com/zopdev" class="foot-social-icon" aria-label="zopdev on X (Twitter)" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"></path></svg></a><a href="https://github.com/zopdev" class="foot-social-icon" aria-label="zopdev on GitHub" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.91 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222 0 1.606-.014 2.898-.014 3.293 0 .322.216.694.825.576C20.565 22.092 24 17.598 24 12.297c0-6.627-5.373-12-12-12"></path></svg></a></div></div></div></footer>
437<script> 438/* ============================================================================ 439 Footer interactive globe (canvas + drop-a-pin) lives in 440 src/components/islands/FooterGlobe.jsx and mounts via <FooterGlobe 441 client:visible /> in the marketing variant above. Only the graduation 442 band IIFE remains inline below. 443 ============================================================================ */ 444 445/* ============================================================================ 446 Graduation band · "Pick where you are", three product cards above the 447 globe footer. Reads <body data-product> to highlight the active product 448 ("you're here"). Self-initializing IIFE; safe on every page. Renders into 449 the .foot-globe block so the band sits visually above the world map. 450 451 DISABLED per CEO request, the entire band (3 product cards + "No 452 re-platform" line + "Looking at the platform?" link) is hidden site-wide. 453 To restore: delete the early-return below. 454 ============================================================================ */ 455(function(){ 456 return; /* CEO: graduation band disabled site-wide */ 457 var globe = document.querySelector('.foot-globe'); 458 if(!globe || document.querySelector('.foot-grad')) return; 459 460 var here = (document.body.getAttribute('data-product') || '').toLowerCase(); 461 var hereKey = here === 'zopcloud' ? 'cloud' 462 : here === 'zopday' ? 'day' 463 : here === 'zopnight' ? 'night' 464 : ''; 465 466 var products = [ 467 { key:'cloud', href:'/zopcloud', name:'zopcloud', 468 eyebrow:'Indie devs · MVP teams', 469 tag:'We host. You push.' }, 470 { key:'day', href:'/zopday', name:'zopday', 471 eyebrow:'Platform engineers · scale-ups', 472 tag:'Your cloud. Our platform layer.' }, 473 { key:'night', href:'/zopnight', name:'zopnight', 474 eyebrow:'FinOps leads · CFOs · enterprises', 475 tag:'Continuous governance + cost optimization.' } 476 ]; 477 478 var section = document.createElement('section'); 479 section.className = 'foot-grad'; 480 section.setAttribute('aria-label', 'Pick where you are'); 481 482 var head = document.createElement('div'); 483 head.className = 'foot-grad-head'; 484 head.innerHTML = 485 '<div class="foot-grad-eyebrow">pick where you are</div>' + 486 '<h2 class="foot-grad-title">Three products. One platform.</h2>'; 487 section.appendChild(head); 488 489 var row = document.createElement('div'); 490 row.className = 'foot-grad-row'; 491 for(var i=0; i<products.length; i++){ 492 var p = products[i]; 493 var card = document.createElement('a'); 494 card.className = 'foot-grad-card foot-grad-' + p.key + (p.key === hereKey ? ' is-here' : ''); 495 card.href = p.href; 496 card.setAttribute('data-product', p.key); 497 card.innerHTML = 498 '<div class="grad-eyebrow">' + 499 (p.key === hereKey ? '<span class="grad-here-dot" aria-hidden="true"></span>you are here · ' : '') + 500 p.eyebrow + 501 '</div>' + 502 '<div class="grad-title">' + p.name + '</div>' + 503 '<div class="grad-tag">' + p.tag + '</div>' + 504 '<span class="grad-arrow" aria-hidden="true">→</span>'; 505 row.appendChild(card); 506 } 507 section.appendChild(row); 508 509 var sub = document.createElement('p'); 510 sub.className = 'foot-grad-sub'; 511 sub.innerHTML = 'No re-platform when you grow. No surprise bill when you scale. No drift when itâs running.'; 512 section.appendChild(sub); 513 514 var meta = document.createElement('p'); 515 meta.className = 'foot-grad-meta'; 516 meta.innerHTML = 'Looking at the platform? → <a href="/">zopdev</a>'; 517 section.appendChild(meta); 518 519 globe.parentNode.insertBefore(section, globe); 520})(); 521</script>
521 <div data-astro-transition-persist="drawer-features"><astro-island uid="15ccXc" prefix="r6" component-url="/_astro/DrawerFeatures.aoNEDZT_.js" component-export="default" renderer-url="/_astro/client.bnjHR3qd.js" props="{}" ssr client="idle" opts="{"name":"DrawerFeatures","value":true}"></astro-island></div>
521<script> 522 /* ============================================================ 523 SECTION REVEAL + LAZY VIDEO 524 Wrapped in `astro:page-load` so each SPA swap (when ClientRouter 525 is active on a docs page) re-runs the observers against the new 526 DOM. Idempotent: `.in` classList.add and `if(v.src) return` guard 527 repeat invocations. 528 ============================================================ */ 529 function __zopMarketingPageLoad(){ 530 /* Section reveal */ 531 if('IntersectionObserver' in window){ 532 var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 533 var nodes = document.querySelectorAll('.section, .stat'); 534 if(reduce){ 535 nodes.forEach(function(n){ n.classList.add('in'); }); 536 } else { 537 var io = new IntersectionObserver(function(entries){ 538 entries.forEach(function(e){ 539 if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } 540 }); 541 }, { rootMargin:'0px 0px -60px 0px', threshold:0.08 }); 542 nodes.forEach(function(n){ io.observe(n); }); 543 } 544 } 545 546 /* Lazy-load videos with data-lazysrc: only fetch + autoplay when in view. */ 547 var vids = document.querySelectorAll('video[data-lazysrc]'); 548 if(vids.length){ 549 function activate(v){ 550 if(v.src) return; 551 v.src = v.getAttribute('data-lazysrc'); 552 if(v.hasAttribute('autoplay')){ 553 var reduce2 = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; 554 if(reduce2) return; 555 try{ var p = v.play(); if(p && p.catch) p.catch(function(){}); }catch(e){} 556 } 557 } 558 if(!('IntersectionObserver' in window)){ 559 vids.forEach(activate); 560 } else { 561 var io2 = new IntersectionObserver(function(entries){ 562 entries.forEach(function(e){ 563 if(e.isIntersecting){ activate(e.target); io2.unobserve(e.target); } 564 }); 565 }, { rootMargin: '200px 0px' }); 566 vids.forEach(function(v){ io2.observe(v); }); 567 } 568 } 569 570 /* NavBar active-link refresh â NavBar is transition:persist'd, so the 571 build-time .active class baked into HTML stays on the OLD page's link 572 forever unless we recompute on every SPA swap against location.pathname. */ 573 var __path = window.location.pathname; 574 document.querySelectorAll('.nav-links a, .mob-nav a').forEach(function(a){ 575 var href = a.getAttribute('href'); 576 if(!href || href.charAt(0) === '#' || /^(?:mailto:|tel:|https?:)/.test(href)) return; 577 var match = __path === href || (href !== '/' && __path.indexOf(href + '/') === 0); 578 a.classList.toggle('active', match); 579 if(match) a.setAttribute('aria-current', 'page'); else a.removeAttribute('aria-current'); 580 }); 581 582 /* Hero/globe re-fire belt-and-suspenders. LoaderGate's own astro:page-load 583 handler covers this when the loader element is present and .done; this 584 is the fallback for pages that load before LoaderGate's IIFE runs. */ 585 var __l = document.getElementById('zop-loader'); 586 if(__l && __l.classList.contains('done')){ 587 var __h = document.querySelector('.hero-reveal'); if(__h && !__h.classList.contains('go')){ __h.classList.add('go'); var __hv=__h.closest('.hero-v2'); if(__hv) __hv.classList.add('is-revealed'); } 588 var __hs = document.querySelector('.hero'); if(__hs && !__hs.classList.contains('go')) __hs.classList.add('go'); 589 var __gp = document.querySelector('.globe-panel'); if(__gp && !__gp.classList.contains('vis')) __gp.classList.add('vis'); 590 } 591 } 592 __zopMarketingPageLoad(); 593 document.addEventListener('astro:page-load', __zopMarketingPageLoad); 594 /* First-load gate for the body entrance animation (`zop-page-enter`). 595 On the very first hard load, give the keyframe time to play; after 596 600ms add `html.spa-bootstrapped` so the rule 597 html.spa-bootstrapped body { animation: none !important; } 598 suppresses replays on any future swap. Astro's ClientRouter REPLACES 599 <html> attributes on each swap (per the new page's HTML), wiping 600 this class â so the after-swap listener below re-applies it. */ 601 setTimeout(function(){ document.documentElement.classList.add('spa-bootstrapped'); window.__zopBootstrapped = true; }, 600); 602 </script>
602
602<script> 603 /* ============================================================ 604 SPA STATE-LEAK FIXES · root scope (fires for every nav, not 605 just marketing â so docs/dev-docs benefit too). 606 607 1) MobileNav + Drawer force-close on before-swap â both are 608 transition:persist'd; without this their open-state survives 609 the swap and the next page loads with them covering content. 610 2) LiveOpsStrip ticker preservation â capture currentTime at 611 before-swap, restore at after-swap so the marquee doesn't snap 612 back to translateX(0) on every nav. 613 3) loader-skip reapply â head cookie pre-paint script doesn't 614 re-run on swap; persisted LoaderGate stays .done, but the class 615 on <html> must stick so the CSS display:none rule wins. 616 4) Hash-anchor scroll â for cross-page /foo#bar nav, scroll the 617 target into view after the new body settles. 618 ============================================================ */ 619 document.addEventListener('astro:before-swap', function(){ 620 /* MobileNav close â real IDs from NavBar.astro / MobileNav.astro 621 (#mob-nav-drawer / #mob-nav-toggle). The drawer is 622 transition:persist'd so without this its .open state survives the 623 swap and the next page loads with the drawer covering content. */ 624 var mob = document.getElementById('mob-nav-drawer'); 625 if(mob){ mob.classList.remove('open'); try{ mob.setAttribute('inert', ''); }catch(e){} } 626 document.body.style.overflow = ''; 627 document.documentElement.classList.remove('mob-nav-open'); 628 var btn = document.getElementById('mob-nav-toggle'); 629 if(btn) btn.setAttribute('aria-expanded', 'false'); 630 /* Drawer close â DrawerFeatures' own astro:before-swap also strips 631 body.drawer-open, but force-close the visible element state too. */ 632 document.body.classList.remove('drawer-open'); 633 var dr = document.querySelector('.drawer'); 634 if(dr) dr.classList.remove('open'); 635 /* Desktop mega-menu reset â the <nav> is `transition:persist`'d 636 (NavBar.astro:20) so the overlay DOM, its `.open` class, and 637 its stale `style.left` from the previous page survive the 638 swap. Without this the next page would render with the 639 dropdown visible until the user moves the cursor or presses 640 Esc. Defense-in-depth: also re-syncs nav-item.open + .nav-pane.active 641 + aria-expanded on triggers so MegaMenu's next mount starts 642 from a clean neutral state. */ 643 var ov = document.getElementById('nav-overlay'); 644 if(ov){ 645 ov.classList.remove('open'); 646 ov.setAttribute('aria-hidden', 'true'); 647 ov.style.left = ''; 648 } 649 document.querySelectorAll('.nav-item.open').forEach(function(ni){ 650 ni.classList.remove('open'); 651 var a = ni.querySelector('a[aria-haspopup]'); 652 if(a) a.setAttribute('aria-expanded', 'false'); 653 }); 654 document.querySelectorAll('.nav-pane.active').forEach(function(p){ 655 p.classList.remove('active'); 656 }); 657 /* Footer/nav scroll-jump fix â when a link inside a transition:persist'd 658 island (footer/nav) is the active element at swap time, Astro core's 659 restoreFocus() re-focuses it AFTER the swap without {preventScroll}, 660 scrolling it back into view. For a footer link that's at page bottom, 661 and with html{scroll-behavior:smooth} (render-blocking in build, so 662 active at swap) the focus-scroll animates and outlives Astro's instant 663 scrollTo(0,0) â the new page lands on the footer. Blurring the 664 navigational control here (before saveFocus runs) makes Astro save a 665 null active element and skip that focus. Restricted to A/BUTTON so a 666 persisted nav search <input> keeps its focus + caret restoration. */ 667 var ae = document.activeElement; 668 if(ae && (ae.tagName === 'A' || ae.tagName === 'BUTTON') && 669 ae.closest && ae.closest('[data-astro-transition-persist]')){ 670 try{ ae.blur(); }catch(e){} 671 } 672 }); 673 674 var __zopRootTickerTimes = []; 675 document.addEventListener('astro:before-swap', function(){
676 __zopRootTickerTimes = []; 677 document.querySelectorAll('.topbar-news-track, .ls-track .ls-rail').forEach(function(el){ 678 var anims = el.getAnimations && el.getAnimations(); 679 if(anims && anims.length) __zopRootTickerTimes.push({ time: anims[0].currentTime }); 680 }); 681 }); 682 document.addEventListener('astro:after-swap', function(){ 683 /* Re-apply loader-skip â the persisted LoaderGate stays .done across 684 swaps, but the <html> class is what the CSS display:none rule 685 targets. The head pre-paint cookie script doesn't re-run on swap. */ 686 if(document.cookie.indexOf('zd-loader-shown-v2=1') !== -1){ 687 document.documentElement.classList.add('loader-skip'); 688 } 689 /* Re-apply spa-bootstrapped â once we're past the first hard load, 690 body entrance animation should be permanently suppressed on every 691 swap. Astro wipes html class on swap, so re-add it here. */ 692 if(window.__zopBootstrapped){ 693 document.documentElement.classList.add('spa-bootstrapped'); 694 } 695 /* Restore ticker animation currentTime so marquee continues smoothly. */ 696 document.querySelectorAll('.topbar-news-track, .ls-track .ls-rail').forEach(function(el, i){ 697 var saved = __zopRootTickerTimes[i]; 698 if(!saved) return; 699 var anims = el.getAnimations && el.getAnimations(); 700 if(anims && anims.length){ try{ anims[0].currentTime = saved.time; }catch(e){} } 701 }); 702 /* Hash-anchor scroll â for /foo#bar cross-page nav, scroll into view 703 after the new body settles. Astro's default scrolls to top for 704 forward nav; this restores the expected hash behavior. */ 705 var hash = window.location.hash; 706 if(hash && hash !== '#'){ 707 requestAnimationFrame(function(){ 708 var t; try{ t = document.querySelector(hash); }catch(e){ return; } 709 if(t && typeof t.scrollIntoView === 'function') t.scrollIntoView(); 710 }); 711 } 712 }); 713 </script>
713 </body> </html>
713<script type="module" src="/_astro/index.astro_astro_type_script_index_1_lang.DD5nv_Q3.js"></script>
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.