-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
22 lines (20 loc) · 41.5 KB
/
index.html
File metadata and controls
22 lines (20 loc) · 41.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html><html lang="en"><head><meta charSet="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Bullfrog Security - Zero-Trust Egress Filtering for GitHub Actions</title><meta name="description" content="Block unauthorized network connections in your CI/CD pipelines before they exfiltrate secrets or inject backdoors. Real-time monitoring and enforcement for GitHub-hosted runners."/><meta property="og:title" content="Bullfrog Security - CI/CD Protection"/><meta property="og:description" content="Zero-Trust Egress Filtering for GitHub Actions. Protect your CI/CD pipelines from supply chain attacks."/><link rel="stylesheet" href="/assets/root-aha99t8L.css"/><link rel="icon" href="/favicon.svg" type="image/svg+xml"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/></head><body><div class="min-h-screen bg-white"><nav class="fixed top-0 left-0 right-0 bg-white/95 backdrop-blur-sm border-b border-gray-200 z-50"><div class="max-w-7xl mx-auto px-4 md:px-8 py-4"><div class="flex items-center justify-between"><a class="flex items-center gap-3" href="/" data-discover="true"><div class="w-10 h-10 bg-emerald-500 rounded-lg flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield w-6 h-6 text-white"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path></svg></div><div><h1 class="text-xl">Bullfrog Security</h1><p class="text-xs text-gray-600">CI/CD Protection</p></div></a><div class="hidden md:flex items-center gap-8"><button class="text-gray-700 hover:text-emerald-600 transition-colors cursor-pointer">Features</button><button class="text-gray-700 hover:text-emerald-600 transition-colors cursor-pointer">How It Works</button><button class="text-gray-700 hover:text-emerald-600 transition-colors cursor-pointer">Pricing</button><a class="text-gray-700 hover:text-emerald-600 transition-colors" href="/faq" data-discover="true">FAQ</a><button class="px-6 py-2 bg-emerald-500 text-white rounded-lg hover:bg-emerald-600 transition-colors cursor-pointer">Get Started</button></div><button class="md:hidden p-2 text-gray-700 hover:text-emerald-600 transition-colors" aria-label="Toggle menu"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu w-6 h-6"><line x1="4" x2="20" y1="12" y2="12"></line><line x1="4" x2="20" y1="6" y2="6"></line><line x1="4" x2="20" y1="18" y2="18"></line></svg></button></div></div></nav><section class="pt-24 md:pt-40 pb-12 md:pb-20 px-4 md:px-8 bg-gradient-to-br from-gray-900 via-gray-800 to-emerald-900 text-white"><div class="max-w-7xl mx-auto"><div class="grid grid-cols-1 lg:grid-cols-2 gap-8 md:gap-16 items-center"><div><div class="inline-flex items-center gap-2 px-4 py-2 bg-emerald-500/20 border border-emerald-500/30 text-emerald-300 rounded-full mb-6"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code w-4 h-4"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg><span class="text-sm">Open Source Agent</span></div><h1 class="text-3xl md:text-5xl mb-6 leading-tight">Zero-Trust Egress Filtering for GitHub Actions</h1><p class="text-base md:text-xl text-gray-300 mb-8">Block unauthorized network connections in your CI/CD pipelines before they exfiltrate secrets or intellectual property. Real-time monitoring and enforcement for GitHub-hosted runners.</p><div class="flex flex-row gap-4"><a href="#get-started" class="flex items-center gap-2 px-8 py-4 bg-emerald-500 text-white rounded-lg hover:bg-emerald-600 transition-colors cursor-pointer"><span class="text-lg">Get Started Free</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right w-5 h-5"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a href="https://app.bullfrogsec.com/auth/demo" class="flex items-center gap-2 px-8 py-4 border-2 border-white/30 text-white rounded-lg hover:bg-white/10 transition-colors"><span class="text-lg">View Demo</span></a></div><p class="text-sm text-gray-400 mt-6">Free for up to 5 contributors • Unlimited repos (public & private) • No credit card required</p></div><div class="bg-gray-800/50 rounded-2xl border border-gray-700 p-4 md:p-8 backdrop-blur-sm"><div class="bg-gray-900 rounded-lg overflow-hidden"><div class="bg-gray-800 px-4 py-3 flex items-center gap-2 border-b border-gray-700"><div class="w-3 h-3 rounded-full bg-red-500"></div><div class="w-3 h-3 rounded-full bg-yellow-500"></div><div class="w-3 h-3 rounded-full bg-green-500"></div><span class="ml-4 text-sm text-gray-400">build.yml</span></div><div class="p-6 font-mono text-sm"><div class="text-gray-500">steps:</div><div class="text-emerald-400 mt-2"> <!-- -->- name:<!-- --> <span class="text-gray-300">Setup Bullfrog</span></div><div class="text-emerald-400"> <!-- --> uses:<!-- --> <span class="text-gray-300">bullfrogsec/bullfrog</span></div><div class="text-emerald-400 mt-2"> with:</div><div class="text-emerald-400"> egress-policy:<!-- --> <span class="text-blue-400">block</span></div><div class="mt-4 text-gray-500"># Your workflow steps run protected</div><div class="mt-2 text-emerald-400"> <!-- -->- name: <span class="text-gray-300">Build</span></div><div class="text-emerald-400"> run:<!-- --> <span class="text-gray-300">npm run build</span></div></div></div></div></div></div></section><section class="py-12 md:py-20 px-4 md:px-8 bg-gray-50"><div class="max-w-4xl mx-auto"><div class="flex items-center gap-3 mb-6 justify-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-triangle-alert w-10 h-10 text-red-600"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"></path><path d="M12 9v4"></path><path d="M12 17h.01"></path></svg><h2 class="text-2xl sm:text-3xl">The Supply Chain Attack Problem</h2></div><p class="text-lg text-gray-700 mb-6 text-center">Companies invest heavily in security, yet CI/CD pipelines remain vulnerable:</p><div class="bg-white rounded-2xl border border-gray-200 p-8"><div class="space-y-4"><div class="flex items-start gap-3"><div class="w-8 h-8 bg-green-100 rounded-lg flex items-center justify-center flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-green-600"><path d="M20 6 9 17l-5-5"></path></svg></div><div><p class="font-medium text-gray-900">Developer laptops are protected with EDR</p></div></div><div class="flex items-start gap-3"><div class="w-8 h-8 bg-green-100 rounded-lg flex items-center justify-center flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-green-600"><path d="M20 6 9 17l-5-5"></path></svg></div><div><p class="font-medium text-gray-900">Production servers and infrastructure are secured with firewalls and monitoring</p></div></div><div class="flex items-start gap-3"><div class="w-8 h-8 bg-red-100 rounded-lg flex items-center justify-center flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-triangle-alert w-5 h-5 text-red-600"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"></path><path d="M12 9v4"></path><path d="M12 17h.01"></path></svg></div><div><p class="font-medium text-gray-900">GitHub Actions hosted runners have zero egress filtering</p><p class="text-sm text-gray-600 mt-1">Attackers can freely exfiltrate secrets or steal intellectual property</p></div></div></div><div class="mt-6 p-4 bg-emerald-50 rounded-lg border border-emerald-200"><p class="text-sm text-gray-800"><span class="font-semibold text-emerald-800">Bullfrog closes this gap</span> <!-- -->by bringing the same level of egress filtering to your CI/CD pipelines.</p></div></div></div></section><section id="features" class="py-12 md:py-20 px-4 md:px-8 bg-white"><div class="max-w-7xl mx-auto"><div class="text-center mb-16"><h2 class="text-3xl sm:text-4xl mb-4">Zero-Trust Security for GitHub Actions</h2><p class="text-lg sm:text-xl text-gray-600">Real-time egress filtering and monitoring for Github Hosted Ubuntu runners</p></div><div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 sm:gap-8"><div class="bg-white rounded-xl border border-gray-200 p-8 hover:shadow-lg transition-shadow"><div class="w-12 h-12 bg-emerald-100 rounded-lg flex items-center justify-center mb-4"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lock w-6 h-6 text-emerald-600"><rect width="18" height="11" x="3" y="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg></div><h3 class="text-xl mb-3">Egress Filtering</h3><p class="text-gray-600 mb-4">Block unauthorized network connections from your CI/CD pipelines. Define allowlists of approved domains and IPs.</p><ul class="space-y-2 text-sm text-gray-700"><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-emerald-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Audit and blocking modes</span></li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-emerald-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Per-workflow policies</span></li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-emerald-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Domain and IP allowlists</span></li></ul></div><div class="bg-white rounded-xl border border-gray-200 p-8 hover:shadow-lg transition-shadow"><div class="w-12 h-12 bg-blue-100 rounded-lg flex items-center justify-center mb-4"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-eye w-6 h-6 text-blue-600"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg></div><h3 class="text-xl mb-3">Real-time Monitoring</h3><p class="text-gray-600 mb-4">Complete visibility into all network connections made by your workflows, including IPs, domains, and processes.</p><ul class="space-y-2 text-sm text-gray-700"><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-blue-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Connection tracking</span></li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-blue-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Historical analysis</span></li></ul></div><div class="bg-white rounded-xl border border-gray-200 p-8 hover:shadow-lg transition-shadow"><div class="w-12 h-12 bg-indigo-100 rounded-lg flex items-center justify-center mb-4"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code w-6 h-6 text-indigo-600"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg></div><h3 class="text-xl mb-3">100% Open Source Agent</h3><p class="text-gray-600 mb-4">The agent running on your GitHub-hosted runners is completely open source. No black boxes in your security stack. Inspect and verify every line of code.</p><ul class="space-y-2 text-sm text-gray-700"><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-indigo-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Fully auditable code</span></li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-indigo-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Community reviewed</span></li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-indigo-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Trust through transparency</span></li></ul></div><div class="bg-white rounded-xl border border-gray-200 p-8 hover:shadow-lg transition-shadow"><div class="w-12 h-12 bg-pink-100 rounded-lg flex items-center justify-center mb-4"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-terminal w-6 h-6 text-pink-600"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" x2="20" y1="19" y2="19"></line></svg></div><h3 class="text-xl mb-3">Easy Integration</h3><p class="text-gray-600 mb-4">Add one step to your workflow file. No infrastructure changes required. Works with all GitHub Actions.</p><ul class="space-y-2 text-sm text-gray-700"><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-pink-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Single-line setup</span></li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-pink-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Zero maintenance</span></li></ul></div><div class="bg-white rounded-xl border border-gray-200 p-8 hover:shadow-lg transition-shadow"><div class="w-12 h-12 bg-purple-100 rounded-lg flex items-center justify-center mb-4"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-triangle-alert w-6 h-6 text-purple-600"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"></path><path d="M12 9v4"></path><path d="M12 17h.01"></path></svg></div><div class="flex items-center justify-between mb-3"><h3 class="text-xl">Risk Assessment</h3><div class="inline-flex items-center gap-1.5 px-1 py-1 bg-blue-50 border border-blue-200 text-blue-700 rounded-md text-xs font-medium"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap w-3 h-3"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg><span>Coming Soon</span></div></div><p class="text-gray-600 mb-4">Comprehensive risk assessment at both workflow and action levels. Complete inventory of third-party actions with security scoring, plus workflow analysis for unpinned actions, secrets exposure, and misconfigurations.</p><ul class="space-y-2 text-sm text-gray-700"><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-purple-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Workflow risk scoring & analysis</span></li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-purple-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Third-party action inventory & assessment</span></li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-purple-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Actionable security recommendations</span></li></ul></div><div class="bg-white rounded-xl border border-gray-200 p-8 hover:shadow-lg transition-shadow"><div class="w-12 h-12 bg-orange-100 rounded-lg flex items-center justify-center mb-4"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bell w-6 h-6 text-orange-600"><path d="M10.268 21a2 2 0 0 0 3.464 0"></path><path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326"></path></svg></div><div class="flex items-center justify-between mb-3"><h3 class="text-xl">Smart Alerts</h3><div class="inline-flex items-center gap-1.5 px-1 py-1 bg-blue-50 border border-blue-200 text-blue-700 rounded-md text-xs font-medium"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap w-3 h-3"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg><span>Coming Soon</span></div></div><p class="text-gray-600 mb-4">We value your time. Get notified only when it matters. Intelligent filtering minimizes noise and alert fatigue so you can focus on real threats.</p><ul class="space-y-2 text-sm text-gray-700"><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-orange-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Low-noise, high-signal alerts</span></li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-orange-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Smart filtering & deduplication</span></li><li class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-orange-600"><path d="M20 6 9 17l-5-5"></path></svg><span>Multi-channel delivery (email, Slack, webhooks)</span></li></ul></div></div></div></section><section id="how-it-works" class="py-12 md:py-20 px-4 md:px-8 bg-gray-50"><div class="max-w-7xl mx-auto"><div class="text-center mb-16"><h2 class="text-3xl sm:text-4xl mb-4">How Bullfrog Works</h2><p class="text-xl text-gray-600">Protection in three simple steps</p></div><div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8"><div class="text-center"><div class="w-16 h-16 bg-emerald-500 text-white rounded-2xl flex items-center justify-center mx-auto mb-6 text-2xl">1</div><h3 class="text-xl mb-3">Install the Github App</h3><p class="text-gray-600 mb-4">Connect your GitHub account and install the Bullfrog GitHub App.</p></div><div class="text-center"><div class="w-16 h-16 bg-emerald-500 text-white rounded-2xl flex items-center justify-center mx-auto mb-6 text-2xl">2</div><h3 class="text-xl mb-3">Add to Workflows</h3><p class="text-gray-600 mb-4">Add the Bullfrog action to your workflow files and define your egress filtering policies.</p></div><div class="text-center"><div class="w-16 h-16 bg-emerald-500 text-white rounded-2xl flex items-center justify-center mx-auto mb-6 text-2xl">3</div><h3 class="text-xl mb-3">Monitor & Block</h3><p class="text-gray-600 mb-4">Bullfrog monitors all network connections. View insights in your control plane dashboard.</p></div></div></div></section><section id="pricing" class="py-12 md:py-20 px-4 md:px-8 bg-white"><div class="max-w-7xl mx-auto"><div class="text-center mb-16"><h2 class="text-3xl md:text-4xl mb-4">Free During Beta</h2><p class="text-xl text-gray-600">Help us shape the future of CI/CD security. All features are free while we build together.</p></div><div class="grid grid-cols-1 md:grid-cols-2 gap-6 md:gap-8 max-w-4xl mx-auto"><div class="bg-white rounded-2xl border-2 border-emerald-500 p-8"><div class="flex items-center gap-2 mb-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap w-6 h-6 text-emerald-600"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg><h3 class="text-2xl font-bold">Free</h3></div><div class="mb-6"><span class="text-4xl sm:text-5xl font-bold">$0</span><span class="text-lg text-gray-500">/month</span></div><p class="text-gray-600 mb-6">Everything you need to secure your pipelines for small teams and open source projects</p><div class="mb-8 p-4 bg-emerald-50 border border-emerald-200 rounded-lg"><p class="text-sm text-emerald-800"><span class="font-semibold">Up to 5 contributors</span> • Public & private repos</p></div><ul class="space-y-3 mb-8"><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-600 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Unlimited public & private repos</span></li><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-600 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Full egress filtering & blocking</span></li><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-600 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Real-time connection monitoring</span></li><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-600 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Control plane dashboard</span></li><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-600 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Audit mode testing</span></li><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-600 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Community support</span></li></ul><a href="#get-started" class="w-full py-3 bg-emerald-500 text-white rounded-lg hover:bg-emerald-600 transition-colors cursor-pointer font-medium block text-center">Get Started Free</a><p class="text-sm text-gray-500 text-center mt-3">No credit card required</p></div><div class="bg-gradient-to-br from-gray-900 to-emerald-900 text-white rounded-2xl border-2 border-emerald-400 p-8 relative"><div class="flex items-center gap-2 mb-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lock w-6 h-6 text-emerald-400"><rect width="18" height="11" x="3" y="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg><h3 class="text-2xl font-bold">Pro</h3></div><div class="mb-6"><div class="flex items-baseline gap-2"><span class="text-4xl sm:text-5xl font-bold">Free</span><span class="text-xl text-gray-300">during beta</span></div></div><p class="text-gray-300 mb-6">Advanced features for teams who want to go deeper. Help us build what you need.</p><div class="mb-8 p-4 bg-emerald-500/20 border border-emerald-500/50 rounded-lg"><p class="text-sm text-emerald-200"><span class="font-semibold">Free while in beta</span> • Your feedback shapes the product</p></div><ul class="space-y-3 mb-8"><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-400 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span class="font-medium">Everything in Free, plus:</span></li><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-400 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Unlimited contributors</span></li><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-400 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Priority support & direct access to our team</span></li><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-400 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Early access to new features</span></li><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-400 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Risk assessment & workflow analysis (coming soon)</span></li><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-400 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Smart alerts (coming soon)</span></li><li class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-5 h-5 text-emerald-400 flex-shrink-0 mt-0.5"><path d="M20 6 9 17l-5-5"></path></svg><span>Shape the roadmap with your input</span></li></ul><a href="#get-started" class="w-full py-3 bg-white text-gray-900 rounded-lg hover:bg-gray-100 transition-colors cursor-pointer font-medium block text-center">Join Beta Program</a><p class="text-sm text-gray-400 text-center mt-4">Completely free during beta • Pricing TBD based on your feedback</p></div></div><div class="mt-4 max-w-4xl mx-auto p-6 bg-blue-50 border border-blue-200 rounded-xl"><div class="flex items-start gap-4"><div class="w-10 h-10 bg-blue-100 rounded-lg flex items-center justify-center flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap w-6 h-6 text-blue-600"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg></div><div><h4 class="font-semibold text-gray-900 mb-2">Help us build the perfect solution</h4><p class="text-gray-700 mb-3">We're in beta and actively shaping our Pro tier based on real user needs. Join our beta program to get free access to advanced features and help define what comes next. Your feedback directly influences our roadmap and pricing model.</p><a href="mailto:contact@bullfrogsec.com" class="text-blue-600 hover:text-blue-700 font-medium">Contact us to join the beta program →</a></div></div></div></div></section><section id="get-started" class="py-12 md:py-20 px-4 md:px-8 bg-gradient-to-br from-gray-900 via-gray-800 to-emerald-900 text-white"><div class="max-w-4xl mx-auto text-center"><h2 class="text-3xl md:text-4xl mb-6">Ready to Secure Your CI/CD Pipelines?</h2><p class="text-base md:text-xl text-gray-300 mb-12">Start blocking unauthorized network connections in your GitHub Actions workflows today. Free for up to 5 contributors with unlimited repositories.</p><div class="bg-white rounded-2xl shadow-2xl p-6 md:p-12 max-w-md mx-auto"><div class="text-center mb-8"><h3 class="text-2xl mb-2 text-gray-900">Get Started</h3><p class="text-gray-600 mb-3">Connect your GitHub account to begin</p></div><a href="https://app.bullfrogsec.com" class="w-full flex items-center justify-center gap-3 px-6 py-4 bg-gray-900 text-white rounded-lg hover:bg-gray-800 transition-colors mb-3"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 496 512" class="w-6 h-6" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg><span class="text-lg">Continue with GitHub</span></a><div class="relative mb-3"><div class="absolute inset-0 flex items-center"><div class="w-full border-t border-gray-300"></div></div><div class="relative flex justify-center text-sm"><span class="px-2 bg-white text-gray-500">or</span></div></div><a href="https://app.bullfrogsec.com/auth/demo" class="w-full flex items-center justify-center gap-3 px-6 py-4 border-2 border-gray-300 text-gray-700 rounded-lg hover:bg-gray-50 transition-colors mb-6"><span class="text-lg">Try Demo</span></a><p class="text-sm text-gray-600 text-center">No credit card required • 2 minute setup</p></div></div></section><footer class="bg-gray-900 text-gray-400 py-12 px-4 md:px-8"><div class="max-w-7xl mx-auto"><div class="grid grid-cols-2 sm:grid-cols-4 gap-6 sm:gap-8 mb-8"><div><div class="flex items-center gap-2 mb-4"><div class="w-8 h-8 bg-emerald-500 rounded-lg flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield w-5 h-5 text-white"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path></svg></div><span class="text-white">Bullfrog Security</span></div><p class="text-sm">Securing CI/CD pipelines from supply chain attacks</p></div><div><h4 class="text-white mb-4">Product</h4><ul class="space-y-2 text-sm"><li><a class="hover:text-emerald-400" href="/#features" data-discover="true">Features</a></li><li><a class="hover:text-emerald-400" href="/#pricing" data-discover="true">Pricing</a></li><li><a href="https://docs.bullfrogsec.com" class="hover:text-emerald-400">Documentation</a></li></ul></div><div><h4 class="text-white mb-4">Legal</h4><ul class="space-y-2 text-sm"><li><a class="hover:text-emerald-400" href="/privacy" data-discover="true">Privacy Policy</a></li><li><a class="hover:text-emerald-400" href="/terms" data-discover="true">Terms of Service</a></li><li><a class="hover:text-emerald-400" href="/security" data-discover="true">Security</a></li></ul></div><div><h4 class="text-white mb-4">Community</h4><ul class="space-y-2 text-sm"><li><a class="hover:text-emerald-400" href="/blog" data-discover="true">Blog</a></li><li><a class="hover:text-emerald-400" href="https://github.com/bullfrogsec">Github</a></li><li><a class="hover:text-emerald-400" href="https://www.reddit.com/r/bullfrogsec">Reddit</a></li></ul></div></div><div class="border-t border-gray-800 pt-8 flex flex-row items-center justify-between gap-4"><p class="text-sm">© 2026 Bullfrog Security. All rights reserved.</p><div class="flex gap-4"><a href="https://github.com/bullfrogsec" class="hover:text-emerald-400" aria-label="GitHub"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 496 512" class="w-6 h-6" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></a><a href="https://www.reddit.com/r/bullfrogsec" class="hover:text-emerald-400" aria-label="Reddit"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="w-6 h-6" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z"></path></svg></a></div></div></div></footer></div><script>((storageKey2, restoreKey) => {
if (!window.history.state || !window.history.state.key) {
let key = Math.random().toString(32).slice(2);
window.history.replaceState({ key }, "");
}
try {
let positions = JSON.parse(sessionStorage.getItem(storageKey2) || "{}");
let storedY = positions[restoreKey || window.history.state.key];
if (typeof storedY === "number") {
window.scrollTo(0, storedY);
}
} catch (error) {
console.error(error);
sessionStorage.removeItem(storageKey2);
}
})("react-router-scroll-positions", null)</script><link rel="modulepreload" href="/assets/manifest-2fa9a63e.js"/><link rel="modulepreload" href="/assets/entry.client-DNIXySRU.js"/><link rel="modulepreload" href="/assets/chunk-EPOLDU6W-BK8S5wzv.js"/><link rel="modulepreload" href="/assets/root-auRoiDyi.js"/><link rel="modulepreload" href="/assets/_index-BKnjM1NJ.js"/><link rel="modulepreload" href="/assets/Footer-BqagX1kC.js"/><link rel="modulepreload" href="/assets/lock-D-TTsvJC.js"/><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());</script><script type="module" async="">import "/assets/manifest-2fa9a63e.js";
import * as route0 from "/assets/root-auRoiDyi.js";
import * as route1 from "/assets/_index-BKnjM1NJ.js";
window.__reactRouterRouteModules = {"root":route0,"routes/_index":route1};
import("/assets/entry.client-DNIXySRU.js");</script></body></html><!--$?--><template id="B:0"></template><!--/$--><div hidden id="S:0"><script>window.__reactRouterContext.streamController.enqueue("[{\"_1\":2,\"_3\":-5,\"_4\":-5},\"loaderData\",{},\"actionData\",\"errors\"]\n");</script><!--$?--><template id="B:1"></template><!--/$--></div><script>function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d)if(0===e)break;else e--;else"$"!==d&&"$?"!==d&&"$!"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data="$";a._reactRetry&&a._reactRetry()}};$RC("B:0","S:0")</script><div hidden id="S:1"><script>window.__reactRouterContext.streamController.close();</script></div><script>$RC("B:1","S:1")</script>