rewrite: clean page from scratch

- Inline styles throughout (no Tailwind class guessing)
- hero -> map -> three cards -> problem -> sealed/agent -> why Zurich
- Capital of Privacy (not Security)
- vault1984 in JetBrains Mono bold + green 1984 wherever referenced
- padding-top:100px on hero (fixed nav clearance)
- Headline font shrunk to clamp(1.75rem,4vw,3rem) to keep 'it.' on same line
This commit is contained in:
James 2026-03-02 04:04:10 -05:00
parent 27c0ad6d9b
commit 1b71bd5755
2 changed files with 78 additions and 80 deletions

View File

@ -10,22 +10,21 @@
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/tailwind.min.css"> <link rel="stylesheet" href="/tailwind.min.css">
<style> <style>
body { background-color: #0A1628; } *{box-sizing:border-box}
.gradient-text { background: linear-gradient(135deg, #22C55E 0%, #4ade80 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } body{background:#0A1628;color:#f1f5f9;font-family:Inter,sans-serif;margin:0}
.card-hover { transition: transform 0.2s ease, box-shadow 0.2s ease; } .label{font-family:"JetBrains Mono",monospace;font-size:0.7rem;font-weight:500;letter-spacing:0.12em;text-transform:uppercase}
.card-hover:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(0,0,0,0.3); } .card{border-radius:1rem;border:1px solid rgba(255,255,255,0.06)}
.bg-navy-light { background-color: #111f38; } .card-hover{transition:transform 0.2s,box-shadow 0.2s}
.text-accent { color: #22C55E; } .card-hover:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,0.3)}
.bg-accent { background-color: #22C55E; } .vaultname{font-family:"JetBrains Mono",monospace;font-weight:700;color:#f1f5f9}
.bg-accent-hover { background-color: #16A34A; } .vaultname .n{color:#22C55E}
.border-accent { border-color: #22C55E; } hr.div{border:none;border-top:1px solid rgba(255,255,255,0.06);margin:0}
.hover\:bg-accent-hover:hover { background-color: #16A34A; } @keyframes hostedPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:0.3;transform:scale(1.8)}}
@keyframes hostedPulse { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:0.3;transform:scale(1.8)} }
.hover\:border-accent:hover { border-color: #22C55E; }
</style> </style>
</head> </head>
<body class="font-sans" style="background-color:#0A1628;color:#f1f5f9"> <body>
<nav class="fixed top-0 w-full z-50 bg-navy/80 backdrop-blur-md border-b border-white/5">
<nav class="fixed top-0 w-full z-50 bg-navy/80 backdrop-blur-md border-b border-white/5">
<div class="max-w-7xl mx-auto px-6 h-16 flex items-center justify-between"> <div class="max-w-7xl mx-auto px-6 h-16 flex items-center justify-between">
<a href="/" class="font-mono font-bold text-3xl text-white tracking-tight leading-none">vault<span class="text-accent font-mono">1984</span></a> <a href="/" class="font-mono font-bold text-3xl text-white tracking-tight leading-none">vault<span class="text-accent font-mono">1984</span></a>
<div class="hidden md:flex items-center gap-6 text-sm"> <div class="hidden md:flex items-center gap-6 text-sm">
@ -51,22 +50,18 @@
</nav> </nav>
<!-- Hero --> <!-- Hero -->
<div style="height:80px"></div> <div style="padding-top:100px;padding-bottom:2.5rem;text-align:center;max-width:900px;margin:0 auto;padding-left:1.5rem;padding-right:1.5rem">
<section class="pb-12" style="padding-top:0"> <p class="label" style="color:#22C55E;margin-bottom:1rem">Hosting</p>
<div class="max-w-7xl mx-auto px-6 text-center"> <h1 style="font-size:clamp(1.75rem,4vw,3rem);font-weight:800;color:#fff;margin:0 0 1rem;line-height:1.1">Your vault. Wherever you want it.</h1>
<p class="text-green-400 text-xs font-mono uppercase tracking-widest mb-4">Hosting</p> <p style="color:#94a3b8;font-size:1.125rem;margin:0">We run it. You own it. Pick your region — your data stays there.</p>
<h1 class="text-4xl md:text-6xl font-bold text-white mb-5">Your vault. Wherever you want it.</h1> </div>
<p class="text-gray-400 text-xl max-w-2xl mx-auto">We run it. You own it. Pick your region — your data stays there.</p>
</div>
</section>
<!-- Map --> <!-- Map -->
<section class="pb-10"> <div style="max-width:1280px;margin:0 auto;padding:0 1.5rem 1.5rem">
<div class="max-w-7xl mx-auto px-6"> <div style="border-radius:1rem;overflow:hidden;border:1px solid rgba(255,255,255,0.06)">
<div class="relative mb-6 rounded-2xl overflow-hidden border border-white/5"> <svg id="worldmap" viewBox="0 0 1000 460" xmlns="http://www.w3.org/2000/svg" style="display:block;width:100%;background:#0a1628">
<svg id="worldmap" viewBox="0 0 1000 460" xmlns="http://www.w3.org/2000/svg" class="w-full" style="display:block;background:#0a1628;"> <image href="/worldmap.svg" x="0" y="0" width="1000" height="460"/>
<image href="/worldmap.svg" x="0" y="0" width="1000" height="460"/> <circle cx="284.7" cy="143.8" r="4" fill="none" stroke="#22C55E" stroke-width="1.5"><animate attributeName="r" values="4;13;4" dur="2.4s" begin="0.00s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.6;0;0.6" dur="2.4s" begin="0.00s" repeatCount="indefinite"/></circle>
<circle cx="284.7" cy="143.8" r="4" fill="none" stroke="#22C55E" stroke-width="1.5"><animate attributeName="r" values="4;13;4" dur="2.4s" begin="0.00s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.6;0;0.6" dur="2.4s" begin="0.00s" repeatCount="indefinite"/></circle>
<circle cx="284.7" cy="143.8" r="4" fill="none" stroke="#22C55E" stroke-width="1"><animate attributeName="r" values="4;13;4" dur="2.4s" begin="0.80s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" begin="0.80s" repeatCount="indefinite"/></circle> <circle cx="284.7" cy="143.8" r="4" fill="none" stroke="#22C55E" stroke-width="1"><animate attributeName="r" values="4;13;4" dur="2.4s" begin="0.80s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" begin="0.80s" repeatCount="indefinite"/></circle>
<circle cx="284.7" cy="143.8" r="4.5" fill="#22C55E" stroke="#0a1628" stroke-width="1.5"/> <circle cx="284.7" cy="143.8" r="4.5" fill="#22C55E" stroke="#0a1628" stroke-width="1.5"/>
<text x="284.7" y="155.8" font-family="Inter,sans-serif" font-size="8.5" fill="#6ee7a0" text-anchor="middle" opacity="0.85">Washington D.C.</text> <text x="284.7" y="155.8" font-family="Inter,sans-serif" font-size="8.5" fill="#6ee7a0" text-anchor="middle" opacity="0.85">Washington D.C.</text>
@ -155,11 +150,10 @@
<circle cx="817.2" cy="180.3" r="4" fill="none" stroke="#22C55E" stroke-width="1"><animate attributeName="r" values="4;13;4" dur="2.4s" begin="2.48s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" begin="2.48s" repeatCount="indefinite"/></circle> <circle cx="817.2" cy="180.3" r="4" fill="none" stroke="#22C55E" stroke-width="1"><animate attributeName="r" values="4;13;4" dur="2.4s" begin="2.48s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" begin="2.48s" repeatCount="indefinite"/></circle>
<circle cx="817.2" cy="180.3" r="4.5" fill="#22C55E" stroke="#0a1628" stroke-width="1.5"/> <circle cx="817.2" cy="180.3" r="4.5" fill="#22C55E" stroke="#0a1628" stroke-width="1.5"/>
<text x="817.2" y="172.3" font-family="Inter,sans-serif" font-size="8.5" fill="#6ee7a0" text-anchor="middle" opacity="0.85">Hong Kong</text> <text x="817.2" y="172.3" font-family="Inter,sans-serif" font-size="8.5" fill="#6ee7a0" text-anchor="middle" opacity="0.85">Hong Kong</text>
</svg>
</svg> </div>
</svg> <div style="height:1rem"></div>
</div> <div id="dc-grid" style="display:flex;gap:12px;width:100%;margin-bottom:2.5rem">
<div id="dc-grid" style="display:flex;gap:12px;width:100%;margin-bottom:2.5rem">
<!-- Self-hosted --> <!-- Self-hosted -->
<div class="rounded-xl p-4 text-center card-hover" style="background:#1f0a0a;border:1px solid rgba(239,68,68,0.35);flex:1;min-width:0"> <div class="rounded-xl p-4 text-center card-hover" style="background:#1f0a0a;border:1px solid rgba(239,68,68,0.35);flex:1;min-width:0">
<div class="text-2xl mb-1.5">🖥️</div> <div class="text-2xl mb-1.5">🖥️</div>
@ -172,7 +166,7 @@
<div class="rounded-xl p-4 text-center card-hover" style="background:#3d2e00;border:1px solid rgba(212,175,55,0.5);flex:1;min-width:0"> <div class="rounded-xl p-4 text-center card-hover" style="background:#3d2e00;border:1px solid rgba(212,175,55,0.5);flex:1;min-width:0">
<div class="text-2xl mb-1.5">🇨🇭</div> <div class="text-2xl mb-1.5">🇨🇭</div>
<div class="text-white font-semibold text-sm">Zürich, Switzerland</div> <div class="text-white font-semibold text-sm">Zürich, Switzerland</div>
<div class="text-gray-500 text-xs mb-2">Capital of Security</div> <div class="text-gray-500 text-xs mb-2">Capital of Privacy</div>
<div class="flex items-center justify-center gap-1.5 text-xs mb-3" style="color:#D4AF37"><span class="w-1.5 h-1.5 rounded-full inline-block" style="background:#D4AF37"></span>Headquarters</div> <div class="flex items-center justify-center gap-1.5 text-xs mb-3" style="color:#D4AF37"><span class="w-1.5 h-1.5 rounded-full inline-block" style="background:#D4AF37"></span>Headquarters</div>
<a href="/signup?region=eu-central-2" class="block w-full text-center text-xs font-semibold py-1.5 px-3 rounded-lg transition-colors" style="background:rgba(212,175,55,0.15);color:#D4AF37;border:1px solid rgba(212,175,55,0.3)" onmouseover="this.style.background='rgba(212,175,55,0.25)'" onmouseout="this.style.background='rgba(212,175,55,0.15)'">Buy now →</a> <a href="/signup?region=eu-central-2" class="block w-full text-center text-xs font-semibold py-1.5 px-3 rounded-lg transition-colors" style="background:rgba(212,175,55,0.15);color:#D4AF37;border:1px solid rgba(212,175,55,0.3)" onmouseover="this.style.background='rgba(212,175,55,0.25)'" onmouseout="this.style.background='rgba(212,175,55,0.15)'">Buy now →</a>
</div> </div>
@ -185,56 +179,57 @@
<a id="closest-buy" href="/signup" class="block w-full text-center text-xs font-semibold py-1.5 px-3 rounded-lg transition-colors" style="background:rgba(34,197,94,0.15);color:#22C55E;border:1px solid rgba(34,197,94,0.3)" onmouseover="this.style.background='rgba(34,197,94,0.25)'" onmouseout="this.style.background='rgba(34,197,94,0.15)'">Buy now →</a> <a id="closest-buy" href="/signup" class="block w-full text-center text-xs font-semibold py-1.5 px-3 rounded-lg transition-colors" style="background:rgba(34,197,94,0.15);color:#22C55E;border:1px solid rgba(34,197,94,0.3)" onmouseover="this.style.background='rgba(34,197,94,0.25)'" onmouseout="this.style.background='rgba(34,197,94,0.15)'">Buy now →</a>
</div> </div>
</div> </div>
</div> </div>
</section>
<hr class="div">
<!-- Why it matters --> <!-- Why it matters -->
<section class="py-16 border-t border-white/5"> <div style="max-width:1000px;margin:0 auto;padding:4rem 1.5rem">
<div class="max-w-7xl mx-auto px-6">
<div class="text-center mb-14 max-w-3xl mx-auto">
<p class="text-green-400 text-xs font-mono uppercase tracking-widest mb-3">The security model</p>
<h2 class="text-2xl md:text-3xl font-bold text-white mb-4">Your AI needs access.<br>Not to everything.</h2>
<p class="text-gray-400 text-lg leading-relaxed max-w-2xl mx-auto">A password manager that blocks AI agents is useless in 2025. But one that hands them everything is a liability. vault1984 solves this with two layers.</p>
</div>
<div class="grid md:grid-cols-2 gap-6 mb-14 max-w-5xl mx-auto">
<div class="rounded-2xl p-6 border border-white/5" style="background:#0d1a0d">
<p class="text-green-400 text-xs font-mono uppercase tracking-widest mb-3">Sealed fields</p>
<h3 class="text-xl font-bold text-white mb-3">Only you. Only in person.</h3>
<p class="text-gray-400 leading-relaxed">Passwords and private notes are encrypted on your device with a key derived from your fingerprint or hardware token. We store a locked box. No key ever reaches our servers. Not a court order. Not your AI assistant. Sealed fields require your physical presence to unlock.</p>
</div>
<div class="rounded-2xl p-6 border border-white/5" style="background:#0d1627">
<p class="text-blue-400 text-xs font-mono uppercase tracking-widest mb-3">Agent fields</p>
<h3 class="text-xl font-bold text-white mb-3">Your AI, scoped and controlled.</h3>
<p class="text-gray-400 leading-relaxed">Fields you designate as agent-accessible are encrypted on our servers. You issue scoped tokens — Claude gets your GitHub token, nothing else. Revoke at any time. The agent never sees sealed fields, no matter what.</p>
</div>
</div>
<div>
<p class="text-xs font-mono uppercase tracking-widest mb-3" style="color:#D4AF37">Why Zürich</p>
<h2 class="text-2xl md:text-3xl font-bold text-white mb-4">Sealed fields: jurisdiction irrelevant.<br>Agent fields: it isn't.</h2>
<p class="text-gray-400 text-lg leading-relaxed mb-6">Sealed fields are protected by math — the server's location doesn't matter. But agent fields live on a server in a jurisdiction. A US server is subject to the CLOUD Act. A UK server to the Investigatory Powers Act. Zürich is subject to Swiss law — which does not cooperate with foreign government data requests. No backdoors. Both layers protected.</p>
<div class="grid md:grid-cols-3 gap-4 max-w-5xl mx-auto">
<div class="rounded-xl p-4 border border-white/5" style="background:#1a0a0a">
<p class="text-red-400 text-xs font-mono uppercase tracking-widest mb-2">Self-hosted · US</p>
<p class="text-gray-300 text-sm leading-relaxed">Your server, your rules — until a court says otherwise. CLOUD Act applies to US persons regardless of encryption.</p>
</div>
<div class="rounded-xl p-4 border border-white/5" style="background:#0d1627">
<p class="text-blue-400 text-xs font-mono uppercase tracking-widest mb-2">Self-hosted · anywhere</p>
<p class="text-gray-300 text-sm leading-relaxed">Full control. Your infrastructure, your jurisdiction. The right choice if you know what you're doing.</p>
</div>
<div class="rounded-xl p-4" style="background:#3d2e00;border:1px solid rgba(212,175,55,0.3)">
<p class="text-xs font-mono uppercase tracking-widest mb-2" style="color:#D4AF37">Hosted · Zürich, Switzerland</p>
<p class="text-gray-300 text-sm leading-relaxed">Swiss law. Swiss courts. No CLOUD Act. No backdoors. We handle the infrastructure — you get the protection.</p>
</div>
</div>
</div>
<div style="margin-bottom:3.5rem">
<p class="label" style="color:#f87171;margin-bottom:0.75rem">The problem</p>
<h2 style="font-size:clamp(1.5rem,3vw,2.25rem);font-weight:700;color:#fff;margin:0 0 1rem;line-height:1.2">Your AI assistant needs your credentials.<br>That changes everything.</h2>
<p style="color:#94a3b8;font-size:1.0625rem;line-height:1.75;max-width:680px;margin:0">A password manager that blocks AI agents is useless in 2025. But one that hands them everything is a liability. The question is: how do you give Claude access to your GitHub token without giving it access to your bank password?</p>
</div> </div>
</section>
<!-- Access Methods --> <div style="display:grid;grid-template-columns:1fr 1fr;gap:1.25rem;margin-bottom:3.5rem">
<div class="card" style="background:#0a1a0a;padding:1.75rem">
<p class="label" style="color:#22C55E;margin-bottom:0.75rem">Sealed fields</p>
<h3 style="font-size:1.2rem;font-weight:700;color:#fff;margin:0 0 0.875rem">Only you. Only in person.</h3>
<p style="color:#94a3b8;line-height:1.7;font-size:0.9375rem;margin:0">Passwords and private notes are encrypted on your device with a key derived from your fingerprint or hardware token. We store a locked box. No key ever reaches our servers — not a court order, not your AI assistant. Sealed fields require your physical presence to unlock.</p>
</div>
<div class="card" style="background:#0a1220;padding:1.75rem">
<p class="label" style="color:#60a5fa;margin-bottom:0.75rem">Agent fields</p>
<h3 style="font-size:1.2rem;font-weight:700;color:#fff;margin:0 0 0.875rem">Your AI, scoped and controlled.</h3>
<p style="color:#94a3b8;line-height:1.7;font-size:0.9375rem;margin:0">Fields you designate as agent-accessible are encrypted on our servers. You issue scoped tokens — Claude gets your GitHub token, nothing else. Revoke at any time. The agent never touches sealed fields, no matter what.</p>
</div>
</div>
<div>
<p class="label" style="color:#D4AF37;margin-bottom:0.75rem">Why Zürich</p>
<h2 style="font-size:clamp(1.5rem,3vw,2.25rem);font-weight:700;color:#fff;margin:0 0 1rem;line-height:1.2">Sealed fields: jurisdiction irrelevant.<br>Agent fields: it isnt.</h2>
<p style="color:#94a3b8;font-size:1.0625rem;line-height:1.75;max-width:680px;margin:0 0 1.75rem">Sealed fields are protected by math — where the server sits doesnt matter. But agent fields live on a server in a jurisdiction. A US server is subject to the CLOUD Act. Zürich, Switzerland is subject to Swiss law — which does not cooperate with foreign government data requests. No backdoors. Both layers protected.</p>
<div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:1rem">
<div class="card" style="background:#1a0808;padding:1.25rem">
<p class="label" style="color:#f87171;margin-bottom:0.5rem">Self-hosted · US</p>
<p style="color:#cbd5e1;font-size:0.875rem;line-height:1.65;margin:0">Your server, your rules — until a court says otherwise. CLOUD Act applies to US persons regardless of encryption.</p>
</div>
<div class="card" style="background:#0a1220;padding:1.25rem">
<p class="label" style="color:#60a5fa;margin-bottom:0.5rem">Self-hosted · anywhere</p>
<p style="color:#cbd5e1;font-size:0.875rem;line-height:1.65;margin:0">Full control. Your infrastructure, your jurisdiction. The right choice if you know what youre doing.</p>
</div>
<div style="border-radius:1rem;border:1px solid rgba(212,175,55,0.3);background:#2a1f00;padding:1.25rem">
<p class="label" style="color:#D4AF37;margin-bottom:0.5rem">Hosted · Zürich, Switzerland</p>
<p style="color:#cbd5e1;font-size:0.875rem;line-height:1.65;margin:0">Swiss law. Swiss courts. Capital of Privacy. No CLOUD Act. No backdoors. We handle the infrastructure — you get the protection.</p>
</div>
</div>
</div>
</div>
<hr class="div">
<!-- Access Methods -->
<section class="py-8 border-t border-white/5"> <section class="py-8 border-t border-white/5">
<div class="max-w-7xl mx-auto px-6 text-center"> <div class="max-w-7xl mx-auto px-6 text-center">
<h2 class="text-3xl md:text-4xl font-bold text-white mb-4">Your agent and you — same vault, right access</h2> <h2 class="text-3xl md:text-4xl font-bold text-white mb-4">Your agent and you — same vault, right access</h2>
@ -437,7 +432,9 @@
</div> </div>
</footer> </footer>
<script>
<script>
(function() { (function() {
const W = 1000, H = 460; const W = 1000, H = 460;
function project(lon, lat) { function project(lon, lat) {
@ -560,5 +557,6 @@
} }
})(); })();
</script> </script>
</body> </body>
</html> </html>

Binary file not shown.