diff --git a/clavitor.com/templates/hosted.tmpl b/clavitor.com/templates/hosted.tmpl
index 3d2aec4..dd36989 100644
--- a/clavitor.com/templates/hosted.tmpl
+++ b/clavitor.com/templates/hosted.tmpl
@@ -110,7 +110,17 @@
Disaster recovery
Your backup is on the other side of the world.
-
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.
+
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.
+
+
+
Calgary, Canada
+
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.
+
+
+
Zürich, Switzerland
+
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.
+
+
| Your region | Backup location | Why |
@@ -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) {