PageSourceSearch

https://zop.dev/

html zop.dev collected 2026-10-03 19:46:37 UTC 223,368 bytes, 713 lines download raw bytes

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&#39;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 &amp; brand files &middot; 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 &middot; 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">&rarr;</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">&rarr;</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 &middot; idle, schedules, anomalies</p> </div> <span class="np-play-arrow" aria-hidden="true">&rarr;</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 &middot;
409 clusters, datastores, push</p> </div> <span class="np-play-arrow" aria-hidden="true">&rarr;</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="{&quot;name&quot;:&quot;MegaMenu&quot;,&quot;value&quot;: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 &amp; 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 &amp; 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 &amp; 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 &middot; 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 &middot;
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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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 &mdash; 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">&rarr;</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&#38;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">&#8629;</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">&rarr;</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&#38;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 &mdash; 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 &mdash; 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 &rarr; Connectors &rarr; 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 &rarr; 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">&rarr;</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 &middot; cost and budgets &middot; schedules &middot; findings &middot; deployments &middot; teams and audit logs</dd> </div> <div class="zh-rail-row zh-rail-row--no"> <dt>Never</dt> <dd>writes unless you enable it &middot; touches roles, users or credentials &middot; reveals a secret &middot; 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">&rarr;</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">&rarr;</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">&rarr;</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="{&quot;name&quot;:&quot;TetrisCanvasIsland&quot;,&quot;value&quot;: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 &amp; 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 &amp; recs</h2><ul><li><a href="/learn">Learn &amp; 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="{&quot;name&quot;:&quot;FooterGlobe&quot;,&quot;value&quot;: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">&rarr;</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? &rarr; <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="{&quot;name&quot;:&quot;DrawerFeatures&quot;,&quot;value&quot;: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.