chore: auto-commit uncommitted changes
This commit is contained in:
parent
723b780598
commit
0b3a885166
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -6,6 +6,10 @@
|
|||
</div>
|
||||
|
||||
<div class="section container" style="padding-top:24px">
|
||||
<div style="background:#fffbeb;border:1px solid #fde68a;border-radius:var(--radius-sm);padding:16px 20px;margin-bottom:24px;font-size:0.85rem;color:#854d0e">
|
||||
<strong style="text-transform:uppercase;letter-spacing:0.06em;font-size:0.75rem">Expanding our network</strong><br>
|
||||
We are actively deploying new points of presence. Some planned nodes may show as unavailable during provisioning. Dubai (me-central-1) is temporarily offline due to AWS infrastructure damage in the UAE.
|
||||
</div>
|
||||
<div class="glass-grid">
|
||||
{{range .Pops}}
|
||||
<div class="glass-pop {{if eq .Status "live"}}glass-live{{else}}glass-planned{{end}}">
|
||||
|
|
|
|||
|
|
@ -110,7 +110,17 @@
|
|||
<div class="section container">
|
||||
<p class="label accent mb-3">Disaster recovery</p>
|
||||
<h2 class="mb-4">Your backup is on the other side of the world.</h2>
|
||||
<p class="lead mb-8">Every vault is automatically replicated to an inland backup location — no coastline, no tsunami risk, no storm surge. The two backup sites are Calgary and Zürich: different continents, different jurisdictions, maximum geographic separation. Your data is encrypted end-to-end — nobody but you can read it.</p>
|
||||
<p class="lead mb-8">Every vault is automatically replicated to an inland backup location — no coastline, no tsunami risk, no storm surge. Your data is encrypted end-to-end — nobody but you can read it.</p>
|
||||
<div class="grid-2 mb-8">
|
||||
<div class="card">
|
||||
<h3 class="mb-2">Calgary, Canada</h3>
|
||||
<p>Deep in the Canadian prairies, over 1,000 km from the nearest ocean. No earthquakes, no hurricanes, no volcanoes — the most geologically stable terrain in North America. Canadian privacy law. Backs up all vaults in Asia-Pacific and Africa.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3 class="mb-2">Zürich, Switzerland</h3>
|
||||
<p>Landlocked in the center of Europe, surrounded by the Alps. Swiss data protection — among the strongest in the world. Politically neutral for over 200 years. Backs up all vaults in the Americas.</p>
|
||||
</div>
|
||||
</div>
|
||||
<table class="data-table mb-4">
|
||||
<thead>
|
||||
<tr><th>Your region</th><th>Backup location</th><th>Why</th></tr>
|
||||
|
|
@ -164,13 +174,13 @@
|
|||
const isHQ = pop.city === 'Zürich';
|
||||
const isLive = pop.status === 'live';
|
||||
const isDubai = pop.city === 'Dubai';
|
||||
const dotColor = isDubai ? '#ca8a04' : isHQ ? '#0A0A0A' : isLive ? '#DC2626' : '#F5B7B7';
|
||||
const textColor = isDubai ? '#ca8a04' : isHQ ? '#0A0A0A' : isLive ? '#B91C1C' : '#777777';
|
||||
const dotColor = isDubai ? '#EA580C' : isHQ ? '#0A0A0A' : isLive ? '#DC2626' : '#F5B7B7';
|
||||
const textColor = isDubai ? '#EA580C' : isHQ ? '#0A0A0A' : isLive ? '#B91C1C' : '#777777';
|
||||
const pulseColor = isHQ ? '#0A0A0A' : isLive ? '#DC2626' : '#F5B7B7';
|
||||
const dotSize = isHQ ? 11 : 9;
|
||||
const pulseR = isHQ ? 5 : 4;
|
||||
const pulseMax = isHQ ? 18 : 13;
|
||||
const tooltip = isDubai ? 'Dubai · Temporarily unavailable — AWS me-central-1 damaged by drone strikes (March 2026)' : isLive ? pop.city + ' · Live' : pop.city + ' · Planned';
|
||||
const tooltip = isDubai ? 'Dubai · Down — AWS me-central-1 damaged by drone strikes (March 2026)' : isLive ? pop.city + ' · Live' : pop.city + ' · Planned';
|
||||
|
||||
// Pulse rings — only for live/HQ pops
|
||||
let r1, r2;
|
||||
|
|
@ -227,6 +237,29 @@
|
|||
if (r2) svg.appendChild(r2);
|
||||
svg.appendChild(dot);
|
||||
svg.appendChild(label);
|
||||
|
||||
// Down indicator for Dubai
|
||||
if (isDubai) {
|
||||
const bg = document.createElementNS(ns, 'circle');
|
||||
bg.setAttribute('cx', x); bg.setAttribute('cy', y);
|
||||
bg.setAttribute('r', '12'); bg.setAttribute('fill', '#EA580C'); bg.setAttribute('fill-opacity', '0.15');
|
||||
bg.setAttribute('stroke', '#EA580C'); bg.setAttribute('stroke-width', '1.5'); bg.setAttribute('stroke-opacity', '0.4');
|
||||
svg.appendChild(bg);
|
||||
const sz = 4;
|
||||
const cross = document.createElementNS(ns, 'g');
|
||||
cross.setAttribute('stroke', '#ffffff'); cross.setAttribute('stroke-width', '2.5'); cross.setAttribute('stroke-linecap', 'round');
|
||||
const l1 = document.createElementNS(ns, 'line');
|
||||
l1.setAttribute('x1', x - sz); l1.setAttribute('y1', y - sz);
|
||||
l1.setAttribute('x2', x + sz); l1.setAttribute('y2', y + sz);
|
||||
const l2 = document.createElementNS(ns, 'line');
|
||||
l2.setAttribute('x1', x + sz); l2.setAttribute('y1', y - sz);
|
||||
l2.setAttribute('x2', x - sz); l2.setAttribute('y2', y + sz);
|
||||
cross.appendChild(l1); cross.appendChild(l2);
|
||||
const crossTitle = document.createElementNS(ns, 'title');
|
||||
crossTitle.textContent = tooltip;
|
||||
cross.appendChild(crossTitle);
|
||||
svg.appendChild(cross);
|
||||
}
|
||||
}
|
||||
|
||||
function addVisitorDot(lat, lon, city) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue