yakmesh 2.9.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +637 -0
- package/Caddyfile +77 -0
- package/README.md +119 -29
- package/content/api.js +50 -41
- package/content/index.js +1 -2
- package/content/store.js +323 -177
- package/dashboard/index.html +19 -3
- package/database/replication.js +117 -37
- package/docs/CRYPTO-AGILITY.md +204 -0
- package/docs/MTLS-RESEARCH.md +367 -0
- package/docs/NAMCHE-SPEC.md +681 -0
- package/docs/PEERQUANTA-YAKMESH-INTEGRATION.md +407 -0
- package/docs/PRECISION-DISCLOSURE.md +96 -0
- package/docs/README.md +76 -0
- package/docs/ROADMAP-2.4.0.md +447 -0
- package/docs/ROADMAP-2.5.0.md +244 -0
- package/docs/SECURITY-AUDIT-REPORT.md +306 -0
- package/docs/SST-INTEGRATION.md +712 -0
- package/docs/STEADYWATCH-IMPLEMENTATION.md +303 -0
- package/docs/TERNARY-AUDIT-REPORT.md +247 -0
- package/docs/TME-FAQ.md +221 -0
- package/docs/WHITEPAPER.md +623 -0
- package/docs/adapters.html +1001 -0
- package/docs/advanced-systems.html +1045 -0
- package/docs/annex.html +1046 -0
- package/docs/api.html +970 -0
- package/docs/business/response-templates.md +160 -0
- package/docs/c2c.html +1225 -0
- package/docs/cli.html +1332 -0
- package/docs/configuration.html +1248 -0
- package/docs/darshan.html +1085 -0
- package/docs/dharma.html +966 -0
- package/docs/docs-bundle.html +1075 -0
- package/docs/docs.css +3120 -0
- package/docs/docs.js +556 -0
- package/docs/doko.html +969 -0
- package/docs/geo-proof.html +858 -0
- package/docs/getting-started.html +840 -0
- package/docs/gumba-tutorial.html +1144 -0
- package/docs/gumba.html +1098 -0
- package/docs/index.html +914 -0
- package/docs/jhilke.html +1312 -0
- package/docs/karma.html +1100 -0
- package/docs/katha.html +1037 -0
- package/docs/lama.html +978 -0
- package/docs/mandala.html +1067 -0
- package/docs/mani.html +964 -0
- package/docs/mantra.html +967 -0
- package/docs/mesh.html +1409 -0
- package/docs/nakpak.html +869 -0
- package/docs/namche.html +928 -0
- package/docs/nav-order.json +53 -0
- package/docs/prahari.html +1043 -0
- package/docs/prism-bash.min.js +1 -0
- package/docs/prism-javascript.min.js +1 -0
- package/docs/prism-json.min.js +1 -0
- package/docs/prism-tomorrow.min.css +1 -0
- package/docs/prism.min.js +1 -0
- package/docs/privacy.html +699 -0
- package/docs/quick-reference.html +1181 -0
- package/docs/sakshi.html +1402 -0
- package/docs/sandboxing.md +386 -0
- package/docs/seva.html +911 -0
- package/docs/sherpa.html +871 -0
- package/docs/studio.html +860 -0
- package/docs/stupa.html +995 -0
- package/docs/tailwind.min.css +2 -0
- package/docs/tattva.html +1332 -0
- package/docs/terms.html +686 -0
- package/docs/time-server-deployment.md +166 -0
- package/docs/time-sources.html +1392 -0
- package/docs/tivra.html +1127 -0
- package/docs/trademark-policy.html +686 -0
- package/docs/tribhuj.html +1183 -0
- package/docs/trust-security.html +1029 -0
- package/docs/tutorials/backup-recovery.html +654 -0
- package/docs/tutorials/dashboard.html +604 -0
- package/docs/tutorials/domain-setup.html +605 -0
- package/docs/tutorials/host-website.html +456 -0
- package/docs/tutorials/mesh-network.html +505 -0
- package/docs/tutorials/mobile-access.html +445 -0
- package/docs/tutorials/privacy.html +467 -0
- package/docs/tutorials/raspberry-pi.html +600 -0
- package/docs/tutorials/security-basics.html +539 -0
- package/docs/tutorials/share-files.html +431 -0
- package/docs/tutorials/troubleshooting.html +637 -0
- package/docs/tutorials/trust-karma.html +419 -0
- package/docs/tutorials/yak-protocol.html +456 -0
- package/docs/tutorials.html +1034 -0
- package/docs/vani.html +1270 -0
- package/docs/webserver.html +809 -0
- package/docs/yak-protocol.html +940 -0
- package/docs/yak-timeserver-design.md +475 -0
- package/docs/yakapp.html +1015 -0
- package/docs/ypc27.html +1069 -0
- package/docs/yurt.html +1344 -0
- package/embedded-docs/bundle.js +274 -114
- package/gossip/protocol.js +247 -27
- package/identity/key-resolver.js +262 -0
- package/identity/machine-seed.js +632 -0
- package/identity/node-key.js +669 -368
- package/identity/tribhuj-ratchet.js +506 -0
- package/knowledge-base.js +37 -8
- package/launcher/yakmesh.bat +62 -0
- package/launcher/yakmesh.sh +70 -0
- package/mesh/annex.js +462 -108
- package/mesh/beacon-broadcast.js +4 -1
- package/mesh/darshan.js +17 -5
- package/mesh/gumba.js +47 -13
- package/mesh/jhilke.js +651 -0
- package/mesh/katha.js +5 -2
- package/mesh/nakpak-routing.js +8 -5
- package/mesh/network.js +724 -34
- package/mesh/pulse-sync.js +4 -1
- package/mesh/seva.js +526 -0
- package/mesh/sherpa-discovery.js +89 -8
- package/mesh/sybil-defense.js +19 -5
- package/mesh/temporal-encoder.js +4 -3
- package/mesh/yurt.js +72 -17
- package/models/entropy-sentinel.onnx +0 -0
- package/models/karma-trust.onnx +0 -0
- package/models/manifest.json +43 -0
- package/models/sakshi-anomaly.onnx +0 -0
- package/oracle/code-proof-protocol.js +7 -6
- package/oracle/codebase-lock.js +257 -28
- package/oracle/index.js +74 -15
- package/oracle/ma902-snmp.js +678 -0
- package/oracle/module-sealer.js +5 -3
- package/oracle/packet-checksum.js +201 -0
- package/oracle/ternary-144t.js +714 -0
- package/oracle/ternary-ml.js +481 -0
- package/oracle/time-api.js +239 -0
- package/oracle/time-source.js +137 -47
- package/oracle/validation-oracle-hardened.js +1111 -1071
- package/oracle/validation-oracle.js +4 -2
- package/oracle/ypc27.js +211 -0
- package/package.json +20 -3
- package/protocol/yak-handler.js +35 -9
- package/protocol/yak-protocol.js +6 -5
- package/reference/cpp/yakmesh_mceliece_shard.cpp +168 -0
- package/reference/cpp/yakmesh_ypc27.cpp +179 -0
- package/sbom.json +87 -0
- package/scripts/security-audit.mjs +264 -0
- package/scripts/update-docs-sidebar.cjs +164 -0
- package/security/crypto-config.js +4 -3
- package/security/dharma-moderation.js +4 -3
- package/security/doko-identity.js +193 -143
- package/security/domain-consensus.js +86 -85
- package/security/fs-hardening.js +620 -0
- package/security/hardware-attestation.js +5 -3
- package/security/hybrid-trust.js +227 -87
- package/security/karma-rate-limiter.js +692 -0
- package/security/khata-protocol.js +22 -21
- package/security/khata-trust-integration.js +277 -150
- package/security/memory-safety.js +635 -0
- package/security/mesh-auth.js +11 -10
- package/security/mesh-revocation.js +18 -5
- package/security/namche-gateway.js +298 -69
- package/security/sakshi.js +102 -3
- package/security/sangha.js +770 -0
- package/security/secure-config.js +473 -0
- package/security/silicon-parity.js +13 -10
- package/security/steadywatch.js +1142 -0
- package/security/strike-system.js +32 -3
- package/security/temporal-signing.js +488 -0
- package/security/trit-commitment.js +464 -0
- package/server/crypto/annex.js +247 -0
- package/server/darshan-api.js +343 -0
- package/server/index.js +3259 -362
- package/server/komm-api.js +668 -0
- package/utils/accel.js +2273 -0
- package/utils/ternary-id.js +79 -0
- package/utils/verify-worker.js +57 -0
- package/webserver/index.js +95 -5
- package/assets/yakmesh-logo.png +0 -0
- package/assets/yakmesh-logo.svg +0 -80
- package/assets/yakmesh-logo2.png +0 -0
- package/assets/yakmesh-logo2sm.png +0 -0
- package/assets/ymsm.png +0 -0
- package/scripts/update-docs-nav.cjs +0 -194
- package/update-docs-nav.cjs +0 -18
- package/update-nav.ps1 +0 -16
- package/website/assets/silhouettes/adapters.svg +0 -107
- package/website/assets/silhouettes/api-endpoints.svg +0 -115
- package/website/assets/silhouettes/atomic-clock.svg +0 -83
- package/website/assets/silhouettes/base-camp.svg +0 -81
- package/website/assets/silhouettes/bridge.svg +0 -69
- package/website/assets/silhouettes/docs-bundle.svg +0 -113
- package/website/assets/silhouettes/doko-basket.svg +0 -70
- package/website/assets/silhouettes/fortress.svg +0 -93
- package/website/assets/silhouettes/gateway.svg +0 -54
- package/website/assets/silhouettes/gears.svg +0 -93
- package/website/assets/silhouettes/globe-satellite.svg +0 -67
- package/website/assets/silhouettes/karma-wheel.svg +0 -137
- package/website/assets/silhouettes/lama-council.svg +0 -141
- package/website/assets/silhouettes/mandala-network.svg +0 -169
- package/website/assets/silhouettes/mani-stones.svg +0 -149
- package/website/assets/silhouettes/mantra-wheel.svg +0 -116
- package/website/assets/silhouettes/mesh-nodes.svg +0 -113
- package/website/assets/silhouettes/nakpak.svg +0 -56
- package/website/assets/silhouettes/peak-lightning.svg +0 -73
- package/website/assets/silhouettes/sherpa.svg +0 -69
- package/website/assets/silhouettes/stupa-tower.svg +0 -119
- package/website/assets/silhouettes/tattva-eye.svg +0 -78
- package/website/assets/silhouettes/terminal.svg +0 -74
- package/website/assets/silhouettes/webserver.svg +0 -145
- package/website/assets/silhouettes/yak.svg +0 -78
- package/website/assets/yakmesh-logo.png +0 -0
- package/website/assets/yakmesh-logo.webp +0 -0
- package/website/assets/yakmesh-logo128x140.webp +0 -0
- package/website/assets/yakmesh-logo2.png +0 -0
- package/website/assets/yakmesh-logo2.svg +0 -51
- package/website/assets/yakmesh-logo40x44.webp +0 -0
- package/website/assets/yakmesh.gif +0 -0
- package/website/assets/yakmesh.ico +0 -0
- package/website/assets/yakmesh.jpg +0 -0
- package/website/assets/yakmesh.pdf +0 -0
- package/website/assets/yakmesh.png +0 -0
- package/website/assets/yakmesh.svg +0 -70
- package/website/assets/yakmesh128.webp +0 -0
- package/website/assets/yakmesh32.png +0 -0
- package/website/assets/yakmesh32.svg +0 -65
- package/website/assets/yakmesh32o.ico +0 -2
- package/website/assets/yakmesh32o.svg +0 -65
- package/website/assets/yakmesh32o.svgz +0 -0
package/assets/yakmesh-logo2.png
DELETED
|
Binary file
|
|
Binary file
|
package/assets/ymsm.png
DELETED
|
Binary file
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* update-docs-nav.js - Update documentation navigation links
|
|
4
|
-
*
|
|
5
|
-
* Reads docs/nav-order.json and updates prev/next links in all doc pages.
|
|
6
|
-
* Handles two navigation formats:
|
|
7
|
-
* 1. Journey Navigation cards (with icons and descriptions)
|
|
8
|
-
* 2. Simple nav-footer links
|
|
9
|
-
*
|
|
10
|
-
* Usage: node scripts/update-docs-nav.js [--dry-run] [--verbose]
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
const fs = require('fs');
|
|
14
|
-
const path = require('path');
|
|
15
|
-
|
|
16
|
-
const DOCS_DIR = path.join(__dirname, '..', 'docs');
|
|
17
|
-
const NAV_ORDER_FILE = path.join(DOCS_DIR, 'nav-order.json');
|
|
18
|
-
|
|
19
|
-
// Parse args
|
|
20
|
-
const args = process.argv.slice(2);
|
|
21
|
-
const DRY_RUN = args.includes('--dry-run');
|
|
22
|
-
const VERBOSE = args.includes('--verbose');
|
|
23
|
-
|
|
24
|
-
function log(...msg) {
|
|
25
|
-
if (VERBOSE) console.log(...msg);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function loadNavOrder() {
|
|
29
|
-
const content = fs.readFileSync(NAV_ORDER_FILE, 'utf8');
|
|
30
|
-
return JSON.parse(content).pages;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Generate Journey Navigation card HTML
|
|
35
|
-
*/
|
|
36
|
-
function generateJourneyCard(page, direction) {
|
|
37
|
-
if (!page) return '';
|
|
38
|
-
|
|
39
|
-
const borderClass = direction === 'prev'
|
|
40
|
-
? 'border-mountain-700'
|
|
41
|
-
: 'border-theme-primary';
|
|
42
|
-
const label = direction === 'prev' ? '← Previous' : 'Next →';
|
|
43
|
-
|
|
44
|
-
return [
|
|
45
|
-
' <a href="' + page.file + '" class="flex-1 block bg-mountain-800 border ' + borderClass + ' rounded-xl p-4 hover:border-theme-accent transition group">',
|
|
46
|
-
' <div class="text-xs text-mountain-400 mb-1">' + label + '</div>',
|
|
47
|
-
' <div class="flex items-center gap-2">',
|
|
48
|
-
' <span class="text-xl">' + page.icon + '</span>',
|
|
49
|
-
' <span class="font-semibold group-hover:text-theme-accent">' + page.title + '</span>',
|
|
50
|
-
' </div>',
|
|
51
|
-
' <p class="text-mountain-400 text-sm mt-1">' + page.description + '</p>',
|
|
52
|
-
' </a>'
|
|
53
|
-
].join('\n');
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Generate Journey Navigation section
|
|
58
|
-
*/
|
|
59
|
-
function generateJourneyNav(prevPage, nextPage) {
|
|
60
|
-
const cards = [];
|
|
61
|
-
if (prevPage) cards.push(generateJourneyCard(prevPage, 'prev'));
|
|
62
|
-
if (nextPage) cards.push(generateJourneyCard(nextPage, 'next'));
|
|
63
|
-
|
|
64
|
-
return [
|
|
65
|
-
' <!-- Journey Navigation -->',
|
|
66
|
-
' <div class="border-t border-mountain-700 mt-12 pt-8">',
|
|
67
|
-
' <h2 class="text-xl font-bold mb-6">Continue the Journey</h2>',
|
|
68
|
-
' <div class="flex flex-col sm:flex-row gap-4">',
|
|
69
|
-
cards.join('\n'),
|
|
70
|
-
' </div>',
|
|
71
|
-
' </div>'
|
|
72
|
-
].join('\n');
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Generate simple nav-footer HTML
|
|
77
|
-
*/
|
|
78
|
-
function generateNavFooter(prevPage, nextPage) {
|
|
79
|
-
const links = [];
|
|
80
|
-
if (prevPage) {
|
|
81
|
-
links.push(' <a href="' + prevPage.file + '">← ' + prevPage.title + '</a>');
|
|
82
|
-
}
|
|
83
|
-
if (nextPage) {
|
|
84
|
-
const mlAuto = prevPage ? ' class="ml-auto"' : '';
|
|
85
|
-
links.push(' <a href="' + nextPage.file + '"' + mlAuto + '>' + nextPage.title + ' →</a>');
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return [
|
|
89
|
-
' <!-- Navigation -->',
|
|
90
|
-
' <nav class="docs-nav-footer">',
|
|
91
|
-
links.join('\n'),
|
|
92
|
-
' </nav>'
|
|
93
|
-
].join('\n');
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Update navigation in a single file
|
|
98
|
-
*/
|
|
99
|
-
function updateFileNav(filePath, prevPage, nextPage) {
|
|
100
|
-
let content = fs.readFileSync(filePath, 'utf8');
|
|
101
|
-
const fileName = path.basename(filePath);
|
|
102
|
-
let modified = false;
|
|
103
|
-
|
|
104
|
-
// Pattern 1: Journey Navigation cards
|
|
105
|
-
const journeyPattern = /<!-- Journey Navigation -->.*?<\/div>\s*<\/div>\s*<\/div>/s;
|
|
106
|
-
if (journeyPattern.test(content)) {
|
|
107
|
-
const newNav = generateJourneyNav(prevPage, nextPage);
|
|
108
|
-
content = content.replace(journeyPattern, newNav);
|
|
109
|
-
modified = true;
|
|
110
|
-
log(' Updated Journey Navigation in', fileName);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// Pattern 2: Simple nav-footer (if no Journey Navigation)
|
|
114
|
-
const navFooterPattern = /<!-- Navigation -->\s*<nav class="docs-nav-footer">.*?<\/nav>/s;
|
|
115
|
-
if (!modified && navFooterPattern.test(content)) {
|
|
116
|
-
const newNav = generateNavFooter(prevPage, nextPage);
|
|
117
|
-
content = content.replace(navFooterPattern, newNav);
|
|
118
|
-
modified = true;
|
|
119
|
-
log(' Updated nav-footer in', fileName);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Pattern 3: Alternative Journey Navigation format (closing with </div></div>)
|
|
123
|
-
const altJourneyPattern = /<div class="border-t border-mountain-700 mt-12 pt-8">\s*<h2 class="text-xl font-bold mb-6">Continue the Journey<\/h2>.*?<\/div>\s*<\/div>/s;
|
|
124
|
-
if (!modified && altJourneyPattern.test(content)) {
|
|
125
|
-
const newNav = generateJourneyNav(prevPage, nextPage);
|
|
126
|
-
content = content.replace(altJourneyPattern, newNav.replace(' <!-- Journey Navigation -->\n', ''));
|
|
127
|
-
modified = true;
|
|
128
|
-
log(' Updated alt Journey Navigation in', fileName);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (modified) {
|
|
132
|
-
if (!DRY_RUN) {
|
|
133
|
-
fs.writeFileSync(filePath, content, 'utf8');
|
|
134
|
-
}
|
|
135
|
-
return true;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
log(' No navigation section found in', fileName);
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Main update function
|
|
144
|
-
*/
|
|
145
|
-
function updateAllNavigation() {
|
|
146
|
-
console.log('📚 Updating documentation navigation links...');
|
|
147
|
-
if (DRY_RUN) console.log(' (DRY RUN - no files will be modified)');
|
|
148
|
-
console.log('');
|
|
149
|
-
|
|
150
|
-
const pages = loadNavOrder();
|
|
151
|
-
console.log('Found', pages.length, 'pages in nav-order.json');
|
|
152
|
-
console.log('');
|
|
153
|
-
|
|
154
|
-
let updated = 0;
|
|
155
|
-
let skipped = 0;
|
|
156
|
-
let notFound = 0;
|
|
157
|
-
|
|
158
|
-
for (let i = 0; i < pages.length; i++) {
|
|
159
|
-
const current = pages[i];
|
|
160
|
-
const prev = i > 0 ? pages[i - 1] : null;
|
|
161
|
-
const next = i < pages.length - 1 ? pages[i + 1] : null;
|
|
162
|
-
|
|
163
|
-
const filePath = path.join(DOCS_DIR, current.file);
|
|
164
|
-
|
|
165
|
-
if (!fs.existsSync(filePath)) {
|
|
166
|
-
console.log('⚠️ File not found:', current.file);
|
|
167
|
-
notFound++;
|
|
168
|
-
continue;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
if (updateFileNav(filePath, prev, next)) {
|
|
172
|
-
console.log('✅', current.file, '→',
|
|
173
|
-
prev ? '← ' + prev.file : '(no prev)',
|
|
174
|
-
next ? '→ ' + next.file : '(no next)');
|
|
175
|
-
updated++;
|
|
176
|
-
} else {
|
|
177
|
-
skipped++;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
console.log('');
|
|
182
|
-
console.log('Summary:');
|
|
183
|
-
console.log(' Updated:', updated);
|
|
184
|
-
console.log(' Skipped:', skipped, '(no nav section)');
|
|
185
|
-
console.log(' Not found:', notFound);
|
|
186
|
-
|
|
187
|
-
if (DRY_RUN) {
|
|
188
|
-
console.log('');
|
|
189
|
-
console.log('Run without --dry-run to apply changes.');
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
// Run
|
|
194
|
-
updateAllNavigation();
|
package/update-docs-nav.cjs
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
const docsDir = './docs';
|
|
4
|
-
const files = fs.readdirSync(docsDir).filter(f => f.endsWith('.html'));
|
|
5
|
-
const oldNav = '<li><a href="annex.html"><span>\u{1F309}</span> <span>ANNEX</span></a></li>\n <li><a href="yak-protocol.html">';
|
|
6
|
-
const newNav = '<li><a href="annex.html"><span>\u{1F309}</span> <span>ANNEX</span></a></li>\n <li><a href="gumba.html"><span>\u{1F6D5}</span> <span>GUMBA</span></a></li>\n <li><a href="yak-protocol.html">';
|
|
7
|
-
let count = 0;
|
|
8
|
-
files.forEach(file => {
|
|
9
|
-
const fp = path.join(docsDir, file);
|
|
10
|
-
let content = fs.readFileSync(fp, 'utf8');
|
|
11
|
-
if (!content.includes('gumba.html') && content.includes(oldNav)) {
|
|
12
|
-
content = content.replace(oldNav, newNav);
|
|
13
|
-
fs.writeFileSync(fp, content, 'utf8');
|
|
14
|
-
count++;
|
|
15
|
-
console.log('Updated:', file);
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
console.log('Total updated:', count);
|
package/update-nav.ps1
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
$files = Get-ChildItem "docs/*.html"
|
|
2
|
-
$count = 0
|
|
3
|
-
foreach ($file in $files) {
|
|
4
|
-
$content = Get-Content $file.FullName -Raw -Encoding UTF8
|
|
5
|
-
if (-not ($content -match 'gumba\.html')) {
|
|
6
|
-
$old = '<li><a href="annex.html"><span>🌉</span> <span>ANNEX</span></a></li>
|
|
7
|
-
<li><a href="yak-protocol.html">'
|
|
8
|
-
$new = '<li><a href="annex.html"><span>🌉</span> <span>ANNEX</span></a></li>
|
|
9
|
-
<li><a href="gumba.html"><span>🛕</span> <span>GUMBA</span></a></li>
|
|
10
|
-
<li><a href="yak-protocol.html">'
|
|
11
|
-
$content = $content.Replace($old, $new)
|
|
12
|
-
[System.IO.File]::WriteAllText($file.FullName, $content)
|
|
13
|
-
$count++
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
Write-Host "Updated $count files"
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" preserveAspectRatio="xMidYMax slice">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="connectionGlow" x1="0%" y1="50%" x2="100%" y2="50%">
|
|
4
|
-
<stop offset="0%" stop-color="#3d6a5a" stop-opacity="0.15"/>
|
|
5
|
-
<stop offset="50%" stop-color="#4a8a6a" stop-opacity="0.2"/>
|
|
6
|
-
<stop offset="100%" stop-color="#3d6a5a" stop-opacity="0.15"/>
|
|
7
|
-
</linearGradient>
|
|
8
|
-
</defs>
|
|
9
|
-
|
|
10
|
-
<!-- MOUNTAIN BACKDROP -->
|
|
11
|
-
<polygon points="0,700 200,400 400,650 400,1080 0,1080" fill="#1a2a22" opacity="0.35"/>
|
|
12
|
-
<polygon points="1550,680 1750,380 1920,620 1920,1080 1550,1080" fill="#1a2a22" opacity="0.35"/>
|
|
13
|
-
|
|
14
|
-
<!-- LEFT SIDE - External systems (puzzle pieces) -->
|
|
15
|
-
|
|
16
|
-
<!-- Database block -->
|
|
17
|
-
<rect x="100" y="300" width="180" height="120" rx="10" fill="#1a2a22" opacity="0.7"/>
|
|
18
|
-
<rect x="100" y="300" width="180" height="120" rx="10" stroke="#2e4c43" stroke-width="2" fill="none" opacity="0.4"/>
|
|
19
|
-
<ellipse cx="190" cy="340" rx="60" ry="20" fill="#2e4c43" opacity="0.5"/>
|
|
20
|
-
<rect x="130" y="340" width="120" height="50" fill="#2e4c43" opacity="0.3"/>
|
|
21
|
-
<ellipse cx="190" cy="390" rx="60" ry="20" fill="#2e4c43" opacity="0.4"/>
|
|
22
|
-
<text x="190" y="440" fill="#3d6a5a" opacity="0.4" font-size="16" font-family="monospace" text-anchor="middle">DATABASE</text>
|
|
23
|
-
<!-- Puzzle tab right -->
|
|
24
|
-
<rect x="280" y="340" width="40" height="40" fill="#1a2a22" opacity="0.7"/>
|
|
25
|
-
|
|
26
|
-
<!-- API block -->
|
|
27
|
-
<rect x="100" y="500" width="180" height="120" rx="10" fill="#1a2a22" opacity="0.7"/>
|
|
28
|
-
<rect x="100" y="500" width="180" height="120" rx="10" stroke="#2e4c43" stroke-width="2" fill="none" opacity="0.4"/>
|
|
29
|
-
<text x="190" y="550" fill="#3d6a5a" opacity="0.5" font-size="18" font-family="monospace" text-anchor="middle">{REST}</text>
|
|
30
|
-
<text x="190" y="580" fill="#2e4c43" opacity="0.35" font-size="14" font-family="monospace" text-anchor="middle">External API</text>
|
|
31
|
-
<text x="190" y="640" fill="#3d6a5a" opacity="0.4" font-size="16" font-family="monospace" text-anchor="middle">API</text>
|
|
32
|
-
<!-- Puzzle tab right -->
|
|
33
|
-
<rect x="280" y="540" width="40" height="40" fill="#1a2a22" opacity="0.7"/>
|
|
34
|
-
|
|
35
|
-
<!-- Message Queue block -->
|
|
36
|
-
<rect x="100" y="700" width="180" height="120" rx="10" fill="#1a2a22" opacity="0.7"/>
|
|
37
|
-
<rect x="100" y="700" width="180" height="120" rx="10" stroke="#2e4c43" stroke-width="2" fill="none" opacity="0.4"/>
|
|
38
|
-
<rect x="130" y="740" width="40" height="30" fill="#2e4c43" opacity="0.4"/>
|
|
39
|
-
<rect x="175" y="740" width="40" height="30" fill="#2e4c43" opacity="0.35"/>
|
|
40
|
-
<rect x="220" y="740" width="40" height="30" fill="#2e4c43" opacity="0.3"/>
|
|
41
|
-
<text x="190" y="840" fill="#3d6a5a" opacity="0.4" font-size="16" font-family="monospace" text-anchor="middle">QUEUE</text>
|
|
42
|
-
<!-- Puzzle tab right -->
|
|
43
|
-
<rect x="280" y="740" width="40" height="40" fill="#1a2a22" opacity="0.7"/>
|
|
44
|
-
|
|
45
|
-
<!-- CENTER - YAKMESH Adapter Hub -->
|
|
46
|
-
<rect x="600" y="350" width="350" height="400" rx="20" fill="#0a120e" opacity="0.85"/>
|
|
47
|
-
<rect x="600" y="350" width="350" height="400" rx="20" stroke="#3d6a5a" stroke-width="3" fill="none" opacity="0.5"/>
|
|
48
|
-
|
|
49
|
-
<!-- Puzzle slots on left -->
|
|
50
|
-
<rect x="580" y="380" width="40" height="40" fill="#0a120e" opacity="0.85"/>
|
|
51
|
-
<rect x="580" y="530" width="40" height="40" fill="#0a120e" opacity="0.85"/>
|
|
52
|
-
<rect x="580" y="680" width="40" height="40" fill="#0a120e" opacity="0.85"/>
|
|
53
|
-
|
|
54
|
-
<!-- Hub content -->
|
|
55
|
-
<text x="775" y="420" fill="#4a8a6a" opacity="0.6" font-size="28" font-family="monospace" text-anchor="middle">YAKMESH</text>
|
|
56
|
-
<text x="775" y="455" fill="#3d6a5a" opacity="0.45" font-size="22" font-family="monospace" text-anchor="middle">ADAPTERS</text>
|
|
57
|
-
|
|
58
|
-
<!-- Adapter icons inside hub -->
|
|
59
|
-
<rect x="650" y="500" width="80" height="60" rx="5" fill="#1a2a22" opacity="0.6"/>
|
|
60
|
-
<text x="690" y="540" fill="#3d6a5a" opacity="0.4" font-size="12" font-family="monospace" text-anchor="middle">SQL</text>
|
|
61
|
-
|
|
62
|
-
<rect x="750" y="500" width="80" height="60" rx="5" fill="#1a2a22" opacity="0.6"/>
|
|
63
|
-
<text x="790" y="540" fill="#3d6a5a" opacity="0.4" font-size="12" font-family="monospace" text-anchor="middle">HTTP</text>
|
|
64
|
-
|
|
65
|
-
<rect x="850" y="500" width="80" height="60" rx="5" fill="#1a2a22" opacity="0.6"/>
|
|
66
|
-
<text x="890" y="540" fill="#3d6a5a" opacity="0.4" font-size="12" font-family="monospace" text-anchor="middle">MQ</text>
|
|
67
|
-
|
|
68
|
-
<rect x="700" y="600" width="80" height="60" rx="5" fill="#1a2a22" opacity="0.6"/>
|
|
69
|
-
<text x="740" y="640" fill="#3d6a5a" opacity="0.4" font-size="12" font-family="monospace" text-anchor="middle">WS</text>
|
|
70
|
-
|
|
71
|
-
<rect x="800" y="600" width="80" height="60" rx="5" fill="#1a2a22" opacity="0.6"/>
|
|
72
|
-
<text x="840" y="640" fill="#3d6a5a" opacity="0.4" font-size="12" font-family="monospace" text-anchor="middle">gRPC</text>
|
|
73
|
-
|
|
74
|
-
<!-- CONNECTION LINES - left to center -->
|
|
75
|
-
<line x1="320" y1="360" x2="580" y2="400" stroke="#3d6a5a" stroke-width="3" opacity="0.4"/>
|
|
76
|
-
<line x1="320" y1="560" x2="580" y2="550" stroke="#3d6a5a" stroke-width="3" opacity="0.4"/>
|
|
77
|
-
<line x1="320" y1="760" x2="580" y2="700" stroke="#3d6a5a" stroke-width="3" opacity="0.4"/>
|
|
78
|
-
|
|
79
|
-
<!-- Connection glow -->
|
|
80
|
-
<rect x="320" y="340" width="260" height="450" fill="url(#connectionGlow)"/>
|
|
81
|
-
|
|
82
|
-
<!-- RIGHT SIDE - YAKMESH Network -->
|
|
83
|
-
<circle cx="1400" cy="550" r="180" fill="#1a2a22" opacity="0.6"/>
|
|
84
|
-
<circle cx="1400" cy="550" r="180" stroke="#4a8a6a" stroke-width="3" fill="none" opacity="0.5"/>
|
|
85
|
-
<circle cx="1400" cy="550" r="120" stroke="#3d6a5a" stroke-width="2" fill="none" opacity="0.3"/>
|
|
86
|
-
<circle cx="1400" cy="550" r="60" fill="#2e4c43" opacity="0.4"/>
|
|
87
|
-
<text x="1400" y="545" fill="#4a8a6a" opacity="0.5" font-size="20" font-family="monospace" text-anchor="middle">MESH</text>
|
|
88
|
-
<text x="1400" y="570" fill="#3d6a5a" opacity="0.4" font-size="14" font-family="monospace" text-anchor="middle">NETWORK</text>
|
|
89
|
-
|
|
90
|
-
<!-- Network nodes -->
|
|
91
|
-
<circle cx="1280" cy="420" r="15" fill="#3d6a5a" opacity="0.4"/>
|
|
92
|
-
<circle cx="1520" cy="440" r="15" fill="#3d6a5a" opacity="0.4"/>
|
|
93
|
-
<circle cx="1300" cy="680" r="15" fill="#3d6a5a" opacity="0.4"/>
|
|
94
|
-
<circle cx="1500" cy="660" r="15" fill="#3d6a5a" opacity="0.4"/>
|
|
95
|
-
|
|
96
|
-
<!-- Connection from hub to network -->
|
|
97
|
-
<line x1="950" y1="550" x2="1220" y2="550" stroke="#4a8a6a" stroke-width="4" opacity="0.5"/>
|
|
98
|
-
<polygon points="1220,540 1240,550 1220,560" fill="#4a8a6a" opacity="0.5"/>
|
|
99
|
-
|
|
100
|
-
<!-- Data flow indicators -->
|
|
101
|
-
<circle cx="1050" cy="550" r="5" fill="#5a9a7a" opacity="0.5"/>
|
|
102
|
-
<circle cx="1120" cy="550" r="5" fill="#5a9a7a" opacity="0.5"/>
|
|
103
|
-
<circle cx="1180" cy="550" r="5" fill="#5a9a7a" opacity="0.5"/>
|
|
104
|
-
|
|
105
|
-
<!-- Ground -->
|
|
106
|
-
<polygon points="0,920 300,900 600,950 900,920 1200,970 1500,930 1920,980 1920,1080 0,1080" fill="#101a16" opacity="0.75"/>
|
|
107
|
-
</svg>
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" preserveAspectRatio="xMidYMax slice">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="hubGlow" x1="50%" y1="0%" x2="50%" y2="100%">
|
|
4
|
-
<stop offset="0%" stop-color="#4a8a6a" stop-opacity="0.3"/>
|
|
5
|
-
<stop offset="100%" stop-color="#101a16" stop-opacity="0"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
</defs>
|
|
8
|
-
|
|
9
|
-
<!-- MOUNTAIN BACKDROP -->
|
|
10
|
-
<polygon points="0,650 200,380 400,600 0,1080" fill="#1a2a22" opacity="0.3"/>
|
|
11
|
-
<polygon points="1600,620 1800,350 1920,550 1920,1080 1600,1080" fill="#1a2a22" opacity="0.3"/>
|
|
12
|
-
|
|
13
|
-
<!-- CENTER - API Hub hexagon -->
|
|
14
|
-
<polygon points="960,180 1160,280 1160,480 960,580 760,480 760,280" fill="#0a120e" opacity="0.9"/>
|
|
15
|
-
<polygon points="960,180 1160,280 1160,480 960,580 760,480 760,280" stroke="#4a8a6a" stroke-width="4" fill="none" opacity="0.6"/>
|
|
16
|
-
<polygon points="960,220 1120,300 1120,460 960,540 800,460 800,300" stroke="#3d6a5a" stroke-width="2" fill="none" opacity="0.35"/>
|
|
17
|
-
|
|
18
|
-
<!-- API label in center -->
|
|
19
|
-
<text x="960" y="360" fill="#5a9a7a" opacity="0.7" font-size="48" font-family="monospace" text-anchor="middle">API</text>
|
|
20
|
-
<text x="960" y="410" fill="#4a8a6a" opacity="0.5" font-size="20" font-family="monospace" text-anchor="middle">GATEWAY</text>
|
|
21
|
-
|
|
22
|
-
<!-- Glow behind hub -->
|
|
23
|
-
<ellipse cx="960" cy="380" rx="250" ry="250" fill="url(#hubGlow)"/>
|
|
24
|
-
|
|
25
|
-
<!-- ENDPOINT BOXES arranged around the hub -->
|
|
26
|
-
|
|
27
|
-
<!-- TOP LEFT - /auth -->
|
|
28
|
-
<rect x="350" y="100" width="200" height="100" rx="10" fill="#1a2a22" opacity="0.8"/>
|
|
29
|
-
<rect x="350" y="100" width="200" height="100" rx="10" stroke="#3d6a5a" stroke-width="2" fill="none" opacity="0.5"/>
|
|
30
|
-
<text x="450" y="145" fill="#4a8a6a" opacity="0.6" font-size="16" font-family="monospace" text-anchor="middle">POST</text>
|
|
31
|
-
<text x="450" y="175" fill="#5a9a7a" opacity="0.5" font-size="20" font-family="monospace" text-anchor="middle">/auth</text>
|
|
32
|
-
<line x1="550" y1="150" x2="760" y2="280" stroke="#3d6a5a" stroke-width="2" opacity="0.4"/>
|
|
33
|
-
<circle cx="650" cy="215" r="4" fill="#4a8a6a" opacity="0.5"/>
|
|
34
|
-
|
|
35
|
-
<!-- TOP RIGHT - /nodes -->
|
|
36
|
-
<rect x="1370" y="100" width="200" height="100" rx="10" fill="#1a2a22" opacity="0.8"/>
|
|
37
|
-
<rect x="1370" y="100" width="200" height="100" rx="10" stroke="#3d6a5a" stroke-width="2" fill="none" opacity="0.5"/>
|
|
38
|
-
<text x="1470" y="145" fill="#4a8a6a" opacity="0.6" font-size="16" font-family="monospace" text-anchor="middle">GET</text>
|
|
39
|
-
<text x="1470" y="175" fill="#5a9a7a" opacity="0.5" font-size="20" font-family="monospace" text-anchor="middle">/nodes</text>
|
|
40
|
-
<line x1="1370" y1="150" x2="1160" y2="280" stroke="#3d6a5a" stroke-width="2" opacity="0.4"/>
|
|
41
|
-
<circle cx="1265" cy="215" r="4" fill="#4a8a6a" opacity="0.5"/>
|
|
42
|
-
|
|
43
|
-
<!-- LEFT - /geo -->
|
|
44
|
-
<rect x="200" y="320" width="200" height="100" rx="10" fill="#1a2a22" opacity="0.8"/>
|
|
45
|
-
<rect x="200" y="320" width="200" height="100" rx="10" stroke="#3d6a5a" stroke-width="2" fill="none" opacity="0.5"/>
|
|
46
|
-
<text x="300" y="365" fill="#4a8a6a" opacity="0.6" font-size="16" font-family="monospace" text-anchor="middle">POST</text>
|
|
47
|
-
<text x="300" y="395" fill="#5a9a7a" opacity="0.5" font-size="20" font-family="monospace" text-anchor="middle">/geo/proof</text>
|
|
48
|
-
<line x1="400" y1="370" x2="760" y2="380" stroke="#4a8a6a" stroke-width="3" opacity="0.5"/>
|
|
49
|
-
<circle cx="580" cy="375" r="5" fill="#5a9a7a" opacity="0.5"/>
|
|
50
|
-
|
|
51
|
-
<!-- RIGHT - /sync -->
|
|
52
|
-
<rect x="1520" y="320" width="200" height="100" rx="10" fill="#1a2a22" opacity="0.8"/>
|
|
53
|
-
<rect x="1520" y="320" width="200" height="100" rx="10" stroke="#3d6a5a" stroke-width="2" fill="none" opacity="0.5"/>
|
|
54
|
-
<text x="1620" y="365" fill="#4a8a6a" opacity="0.6" font-size="16" font-family="monospace" text-anchor="middle">WS</text>
|
|
55
|
-
<text x="1620" y="395" fill="#5a9a7a" opacity="0.5" font-size="20" font-family="monospace" text-anchor="middle">/sync</text>
|
|
56
|
-
<line x1="1520" y1="370" x2="1160" y2="380" stroke="#4a8a6a" stroke-width="3" opacity="0.5"/>
|
|
57
|
-
<circle cx="1340" cy="375" r="5" fill="#5a9a7a" opacity="0.5"/>
|
|
58
|
-
|
|
59
|
-
<!-- BOTTOM LEFT - /time -->
|
|
60
|
-
<rect x="350" y="550" width="200" height="100" rx="10" fill="#1a2a22" opacity="0.8"/>
|
|
61
|
-
<rect x="350" y="550" width="200" height="100" rx="10" stroke="#3d6a5a" stroke-width="2" fill="none" opacity="0.5"/>
|
|
62
|
-
<text x="450" y="595" fill="#4a8a6a" opacity="0.6" font-size="16" font-family="monospace" text-anchor="middle">GET</text>
|
|
63
|
-
<text x="450" y="625" fill="#5a9a7a" opacity="0.5" font-size="20" font-family="monospace" text-anchor="middle">/time</text>
|
|
64
|
-
<line x1="550" y1="600" x2="760" y2="480" stroke="#3d6a5a" stroke-width="2" opacity="0.4"/>
|
|
65
|
-
<circle cx="655" cy="540" r="4" fill="#4a8a6a" opacity="0.5"/>
|
|
66
|
-
|
|
67
|
-
<!-- BOTTOM RIGHT - /mesh -->
|
|
68
|
-
<rect x="1370" y="550" width="200" height="100" rx="10" fill="#1a2a22" opacity="0.8"/>
|
|
69
|
-
<rect x="1370" y="550" width="200" height="100" rx="10" stroke="#3d6a5a" stroke-width="2" fill="none" opacity="0.5"/>
|
|
70
|
-
<text x="1470" y="595" fill="#4a8a6a" opacity="0.6" font-size="16" font-family="monospace" text-anchor="middle">POST</text>
|
|
71
|
-
<text x="1470" y="625" fill="#5a9a7a" opacity="0.5" font-size="20" font-family="monospace" text-anchor="middle">/mesh</text>
|
|
72
|
-
<line x1="1370" y1="600" x2="1160" y2="480" stroke="#3d6a5a" stroke-width="2" opacity="0.4"/>
|
|
73
|
-
<circle cx="1265" cy="540" r="4" fill="#4a8a6a" opacity="0.5"/>
|
|
74
|
-
|
|
75
|
-
<!-- BOTTOM CENTER - /oracle -->
|
|
76
|
-
<rect x="860" y="680" width="200" height="100" rx="10" fill="#1a2a22" opacity="0.8"/>
|
|
77
|
-
<rect x="860" y="680" width="200" height="100" rx="10" stroke="#3d6a5a" stroke-width="2" fill="none" opacity="0.5"/>
|
|
78
|
-
<text x="960" y="725" fill="#4a8a6a" opacity="0.6" font-size="16" font-family="monospace" text-anchor="middle">POST</text>
|
|
79
|
-
<text x="960" y="755" fill="#5a9a7a" opacity="0.5" font-size="20" font-family="monospace" text-anchor="middle">/oracle</text>
|
|
80
|
-
<line x1="960" y1="680" x2="960" y2="580" stroke="#4a8a6a" stroke-width="3" opacity="0.5"/>
|
|
81
|
-
<circle cx="960" cy="630" r="5" fill="#5a9a7a" opacity="0.5"/>
|
|
82
|
-
|
|
83
|
-
<!-- Additional small endpoints floating -->
|
|
84
|
-
<rect x="100" y="550" width="120" height="60" rx="5" fill="#1a2a22" opacity="0.6"/>
|
|
85
|
-
<text x="160" y="590" fill="#3d6a5a" opacity="0.4" font-size="14" font-family="monospace" text-anchor="middle">/health</text>
|
|
86
|
-
|
|
87
|
-
<rect x="1700" y="550" width="120" height="60" rx="5" fill="#1a2a22" opacity="0.6"/>
|
|
88
|
-
<text x="1760" y="590" fill="#3d6a5a" opacity="0.4" font-size="14" font-family="monospace" text-anchor="middle">/metrics</text>
|
|
89
|
-
|
|
90
|
-
<rect x="600" y="720" width="120" height="60" rx="5" fill="#1a2a22" opacity="0.6"/>
|
|
91
|
-
<text x="660" y="760" fill="#3d6a5a" opacity="0.4" font-size="14" font-family="monospace" text-anchor="middle">/config</text>
|
|
92
|
-
|
|
93
|
-
<rect x="1200" y="720" width="120" height="60" rx="5" fill="#1a2a22" opacity="0.6"/>
|
|
94
|
-
<text x="1260" y="760" fill="#3d6a5a" opacity="0.4" font-size="14" font-family="monospace" text-anchor="middle">/status</text>
|
|
95
|
-
|
|
96
|
-
<!-- HTTP methods legend at bottom -->
|
|
97
|
-
<rect x="700" y="850" width="60" height="30" rx="5" fill="#2e4c43" opacity="0.4"/>
|
|
98
|
-
<text x="730" y="870" fill="#4a8a6a" opacity="0.5" font-size="12" font-family="monospace" text-anchor="middle">GET</text>
|
|
99
|
-
|
|
100
|
-
<rect x="780" y="850" width="60" height="30" rx="5" fill="#3d6a5a" opacity="0.4"/>
|
|
101
|
-
<text x="810" y="870" fill="#4a8a6a" opacity="0.5" font-size="12" font-family="monospace" text-anchor="middle">POST</text>
|
|
102
|
-
|
|
103
|
-
<rect x="860" y="850" width="60" height="30" rx="5" fill="#4a8a6a" opacity="0.4"/>
|
|
104
|
-
<text x="890" y="870" fill="#5a9a7a" opacity="0.5" font-size="12" font-family="monospace" text-anchor="middle">PUT</text>
|
|
105
|
-
|
|
106
|
-
<rect x="940" y="850" width="60" height="30" rx="5" fill="#2e4c43" opacity="0.4"/>
|
|
107
|
-
<text x="970" y="870" fill="#4a8a6a" opacity="0.5" font-size="12" font-family="monospace" text-anchor="middle">WS</text>
|
|
108
|
-
|
|
109
|
-
<!-- Response arrows going back -->
|
|
110
|
-
<polygon points="450,210 445,200 455,200" fill="#4a8a6a" opacity="0.4"/>
|
|
111
|
-
<polygon points="1490,210 1485,200 1495,200" fill="#4a8a6a" opacity="0.4"/>
|
|
112
|
-
|
|
113
|
-
<!-- Ground -->
|
|
114
|
-
<polygon points="0,920 300,900 600,950 900,920 1200,970 1500,930 1920,980 1920,1080 0,1080" fill="#101a16" opacity="0.75"/>
|
|
115
|
-
</svg>
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" preserveAspectRatio="xMidYMax slice">
|
|
2
|
-
<defs>
|
|
3
|
-
<radialGradient id="clockGlow" cx="50%" cy="50%" r="50%">
|
|
4
|
-
<stop offset="0%" stop-color="#4a8a6a" stop-opacity="0.15"/>
|
|
5
|
-
<stop offset="70%" stop-color="#3d6a5a" stop-opacity="0.08"/>
|
|
6
|
-
<stop offset="100%" stop-color="#101a16" stop-opacity="0"/>
|
|
7
|
-
</radialGradient>
|
|
8
|
-
</defs>
|
|
9
|
-
|
|
10
|
-
<!-- MOUNTAIN BACKDROP -->
|
|
11
|
-
<polygon points="0,650 200,350 400,600 400,1080 0,1080" fill="#1a2a22" opacity="0.35"/>
|
|
12
|
-
<polygon points="300,680 500,380 700,620 700,1080 300,1080" fill="#1a2a22" opacity="0.4"/>
|
|
13
|
-
<polygon points="1300,660 1500,360 1700,600 1700,1080 1300,1080" fill="#1a2a22" opacity="0.4"/>
|
|
14
|
-
<polygon points="1600,680 1800,420 1920,650 1920,1080 1600,1080" fill="#1a2a22" opacity="0.35"/>
|
|
15
|
-
|
|
16
|
-
<!-- GIANT CLOCK FACE - center -->
|
|
17
|
-
<circle cx="960" cy="500" r="380" fill="#0a120e" opacity="0.8"/>
|
|
18
|
-
<circle cx="960" cy="500" r="380" stroke="#2e4c43" stroke-width="4" fill="none" opacity="0.5"/>
|
|
19
|
-
<circle cx="960" cy="500" r="360" stroke="#1f332d" stroke-width="2" fill="none" opacity="0.3"/>
|
|
20
|
-
|
|
21
|
-
<!-- Clock glow -->
|
|
22
|
-
<circle cx="960" cy="500" r="400" fill="url(#clockGlow)"/>
|
|
23
|
-
|
|
24
|
-
<!-- Clock hour markers -->
|
|
25
|
-
<line x1="960" y1="140" x2="960" y2="180" stroke="#3d6a5a" stroke-width="4" opacity="0.5"/>
|
|
26
|
-
<line x1="960" y1="820" x2="960" y2="860" stroke="#3d6a5a" stroke-width="4" opacity="0.5"/>
|
|
27
|
-
<line x1="600" y1="500" x2="640" y2="500" stroke="#3d6a5a" stroke-width="4" opacity="0.5"/>
|
|
28
|
-
<line x1="1280" y1="500" x2="1320" y2="500" stroke="#3d6a5a" stroke-width="4" opacity="0.5"/>
|
|
29
|
-
|
|
30
|
-
<!-- Minor hour markers -->
|
|
31
|
-
<circle cx="1120" cy="222" r="5" fill="#2e4c43" opacity="0.4"/>
|
|
32
|
-
<circle cx="1238" cy="340" r="5" fill="#2e4c43" opacity="0.4"/>
|
|
33
|
-
<circle cx="1238" cy="660" r="5" fill="#2e4c43" opacity="0.4"/>
|
|
34
|
-
<circle cx="1120" cy="778" r="5" fill="#2e4c43" opacity="0.4"/>
|
|
35
|
-
<circle cx="800" cy="778" r="5" fill="#2e4c43" opacity="0.4"/>
|
|
36
|
-
<circle cx="682" cy="660" r="5" fill="#2e4c43" opacity="0.4"/>
|
|
37
|
-
<circle cx="682" cy="340" r="5" fill="#2e4c43" opacity="0.4"/>
|
|
38
|
-
<circle cx="800" cy="222" r="5" fill="#2e4c43" opacity="0.4"/>
|
|
39
|
-
|
|
40
|
-
<!-- Clock hands - frozen at high precision moment -->
|
|
41
|
-
<!-- Hour hand -->
|
|
42
|
-
<line x1="960" y1="500" x2="960" y2="280" stroke="#3d6a5a" stroke-width="8" opacity="0.5"/>
|
|
43
|
-
<!-- Minute hand -->
|
|
44
|
-
<line x1="960" y1="500" x2="1150" y2="380" stroke="#4a8a6a" stroke-width="5" opacity="0.5"/>
|
|
45
|
-
<!-- Second hand - ultra thin, precision -->
|
|
46
|
-
<line x1="960" y1="500" x2="780" y2="340" stroke="#5a9a7a" stroke-width="2" opacity="0.6"/>
|
|
47
|
-
|
|
48
|
-
<!-- Center hub -->
|
|
49
|
-
<circle cx="960" cy="500" r="15" fill="#4a8a6a" opacity="0.5"/>
|
|
50
|
-
|
|
51
|
-
<!-- ATOMIC ORBITS around the clock -->
|
|
52
|
-
<ellipse cx="960" cy="500" rx="450" ry="150" stroke="#3d6a5a" stroke-width="1.5" fill="none" opacity="0.25" transform="rotate(-30, 960, 500)"/>
|
|
53
|
-
<ellipse cx="960" cy="500" rx="480" ry="160" stroke="#3d6a5a" stroke-width="1.5" fill="none" opacity="0.2" transform="rotate(30, 960, 500)"/>
|
|
54
|
-
<ellipse cx="960" cy="500" rx="420" ry="140" stroke="#2e4c43" stroke-width="1.5" fill="none" opacity="0.2" transform="rotate(90, 960, 500)"/>
|
|
55
|
-
|
|
56
|
-
<!-- Electrons on orbits -->
|
|
57
|
-
<circle cx="560" cy="380" r="8" fill="#4a8a6a" opacity="0.4"/>
|
|
58
|
-
<circle cx="1380" cy="600" r="8" fill="#4a8a6a" opacity="0.4"/>
|
|
59
|
-
<circle cx="960" cy="100" r="8" fill="#4a8a6a" opacity="0.35"/>
|
|
60
|
-
|
|
61
|
-
<!-- GPS SATELLITES in corners -->
|
|
62
|
-
<!-- Top left -->
|
|
63
|
-
<circle cx="200" cy="150" r="6" fill="#4a8a6a" opacity="0.35"/>
|
|
64
|
-
<line x1="200" y1="150" x2="700" y2="350" stroke="#3d6a5a" stroke-width="1" opacity="0.2" stroke-dasharray="5,5"/>
|
|
65
|
-
|
|
66
|
-
<!-- Top right -->
|
|
67
|
-
<circle cx="1700" cy="180" r="6" fill="#4a8a6a" opacity="0.35"/>
|
|
68
|
-
<line x1="1700" y1="180" x2="1200" y2="380" stroke="#3d6a5a" stroke-width="1" opacity="0.2" stroke-dasharray="5,5"/>
|
|
69
|
-
|
|
70
|
-
<!-- Bottom left -->
|
|
71
|
-
<circle cx="250" cy="750" r="6" fill="#4a8a6a" opacity="0.3"/>
|
|
72
|
-
<line x1="250" y1="750" x2="650" y2="600" stroke="#3d6a5a" stroke-width="1" opacity="0.15" stroke-dasharray="5,5"/>
|
|
73
|
-
|
|
74
|
-
<!-- Precision indicator -->
|
|
75
|
-
<text x="960" y="680" fill="#4a8a6a" opacity="0.35" font-size="28" font-family="monospace" text-anchor="middle">±1ms</text>
|
|
76
|
-
|
|
77
|
-
<!-- Stratum levels -->
|
|
78
|
-
<text x="100" y="950" fill="#3d6a5a" opacity="0.2" font-size="20" font-family="monospace">Stratum 0 ← GPS/Atomic</text>
|
|
79
|
-
<text x="100" y="980" fill="#2e4c43" opacity="0.15" font-size="18" font-family="monospace">Stratum 1 ← NTP Server</text>
|
|
80
|
-
|
|
81
|
-
<!-- Ground -->
|
|
82
|
-
<polygon points="0,920 300,900 600,940 900,910 1200,950 1500,920 1920,960 1920,1080 0,1080" fill="#101a16" opacity="0.75"/>
|
|
83
|
-
</svg>
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" preserveAspectRatio="xMidYMax slice">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="skyGradient" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
4
|
-
<stop offset="0%" stop-color="#101a16" stop-opacity="1"/>
|
|
5
|
-
<stop offset="60%" stop-color="#1a2a22" stop-opacity="0.8"/>
|
|
6
|
-
<stop offset="100%" stop-color="#1f332d" stop-opacity="0.4"/>
|
|
7
|
-
</linearGradient>
|
|
8
|
-
<radialGradient id="campGlow" cx="50%" cy="90%" r="50%">
|
|
9
|
-
<stop offset="0%" stop-color="#4a8a6a" stop-opacity="0.08"/>
|
|
10
|
-
<stop offset="100%" stop-color="#101a16" stop-opacity="0"/>
|
|
11
|
-
</radialGradient>
|
|
12
|
-
</defs>
|
|
13
|
-
|
|
14
|
-
<!-- DISTANT MOUNTAIN RANGE -->
|
|
15
|
-
<!-- Far peaks - very subtle -->
|
|
16
|
-
<polygon points="0,600 200,300 400,550 400,1080 0,1080" fill="#1a2a22" opacity="0.35"/>
|
|
17
|
-
<polygon points="300,580 550,250 800,520 800,1080 300,1080" fill="#1a2a22" opacity="0.4"/>
|
|
18
|
-
<polygon points="700,550 960,180 1220,540 1220,1080 700,1080" fill="#1a2a22" opacity="0.45"/>
|
|
19
|
-
<polygon points="1100,560 1350,280 1600,530 1600,1080 1100,1080" fill="#1a2a22" opacity="0.4"/>
|
|
20
|
-
<polygon points="1500,590 1750,320 1920,550 1920,1080 1500,1080" fill="#1a2a22" opacity="0.35"/>
|
|
21
|
-
|
|
22
|
-
<!-- Main peak - Everest analog -->
|
|
23
|
-
<polygon points="750,650 960,180 1170,650" fill="#1f332d" opacity="0.55"/>
|
|
24
|
-
<!-- Snow cap -->
|
|
25
|
-
<polygon points="900,320 960,180 1020,320" fill="#2e4c43" opacity="0.35"/>
|
|
26
|
-
|
|
27
|
-
<!-- Mid-ground ridge -->
|
|
28
|
-
<polygon points="0,800 300,700 600,750 900,680 1200,720 1500,690 1920,780 1920,1080 0,1080" fill="#1a2a22" opacity="0.6"/>
|
|
29
|
-
|
|
30
|
-
<!-- Camp glow -->
|
|
31
|
-
<ellipse cx="960" cy="950" rx="600" ry="200" fill="url(#campGlow)"/>
|
|
32
|
-
|
|
33
|
-
<!-- FOREGROUND - Base camp area -->
|
|
34
|
-
<polygon points="0,850 400,820 700,860 1000,830 1300,870 1600,840 1920,880 1920,1080 0,1080" fill="#101a16" opacity="0.9"/>
|
|
35
|
-
|
|
36
|
-
<!-- TENTS - spread across camp -->
|
|
37
|
-
<!-- Tent 1 - left -->
|
|
38
|
-
<polygon points="250,920 320,850 390,920" fill="#1f332d" opacity="0.7"/>
|
|
39
|
-
<polygon points="280,920 320,870 360,920" fill="#2e4c43" opacity="0.4"/>
|
|
40
|
-
<line x1="320" y1="850" x2="320" y2="840" stroke="#3d6a5a" stroke-width="2" opacity="0.3"/>
|
|
41
|
-
|
|
42
|
-
<!-- Tent 2 - center-left -->
|
|
43
|
-
<polygon points="550,900 640,810 730,900" fill="#1f332d" opacity="0.75"/>
|
|
44
|
-
<polygon points="585,900 640,840 695,900" fill="#2e4c43" opacity="0.45"/>
|
|
45
|
-
<line x1="640" y1="810" x2="640" y2="795" stroke="#3d6a5a" stroke-width="3" opacity="0.35"/>
|
|
46
|
-
|
|
47
|
-
<!-- Tent 3 - center (main/largest) -->
|
|
48
|
-
<polygon points="880,880 980,760 1080,880" fill="#1f332d" opacity="0.8"/>
|
|
49
|
-
<polygon points="920,880 980,800 1040,880" fill="#2e4c43" opacity="0.5"/>
|
|
50
|
-
<line x1="980" y1="760" x2="980" y2="740" stroke="#4a8a6a" stroke-width="4" opacity="0.4"/>
|
|
51
|
-
<!-- Door flap hint -->
|
|
52
|
-
<polygon points="960,880 980,830 1000,880" fill="#3d6a5a" opacity="0.25"/>
|
|
53
|
-
|
|
54
|
-
<!-- Tent 4 - center-right -->
|
|
55
|
-
<polygon points="1200,905 1280,825 1360,905" fill="#1f332d" opacity="0.7"/>
|
|
56
|
-
<polygon points="1230,905 1280,855 1330,905" fill="#2e4c43" opacity="0.4"/>
|
|
57
|
-
<line x1="1280" y1="825" x2="1280" y2="812" stroke="#3d6a5a" stroke-width="2" opacity="0.3"/>
|
|
58
|
-
|
|
59
|
-
<!-- Tent 5 - right -->
|
|
60
|
-
<polygon points="1520,925 1580,865 1640,925" fill="#1f332d" opacity="0.65"/>
|
|
61
|
-
<polygon points="1545,925 1580,885 1615,925" fill="#2e4c43" opacity="0.35"/>
|
|
62
|
-
<line x1="1580" y1="865" x2="1580" y2="855" stroke="#3d6a5a" stroke-width="2" opacity="0.25"/>
|
|
63
|
-
|
|
64
|
-
<!-- PRAYER FLAGS between tent poles -->
|
|
65
|
-
<path d="M320,840 Q480,800 640,795" stroke="#3d6a5a" stroke-width="1" fill="none" opacity="0.25"/>
|
|
66
|
-
<path d="M640,795 Q810,770 980,740" stroke="#3d6a5a" stroke-width="1" fill="none" opacity="0.3"/>
|
|
67
|
-
<path d="M980,740 Q1130,780 1280,812" stroke="#3d6a5a" stroke-width="1" fill="none" opacity="0.25"/>
|
|
68
|
-
|
|
69
|
-
<!-- Small flag triangles -->
|
|
70
|
-
<polygon points="420,815 435,810 428,822" fill="#4a8a6a" opacity="0.2"/>
|
|
71
|
-
<polygon points="520,798 535,792 528,805" fill="#4a8a6a" opacity="0.2"/>
|
|
72
|
-
<polygon points="750,775 765,768 758,782" fill="#4a8a6a" opacity="0.25"/>
|
|
73
|
-
<polygon points="850,762 865,755 858,769" fill="#4a8a6a" opacity="0.25"/>
|
|
74
|
-
<polygon points="1080,765 1095,758 1088,772" fill="#4a8a6a" opacity="0.2"/>
|
|
75
|
-
<polygon points="1180,788 1195,782 1188,795" fill="#4a8a6a" opacity="0.2"/>
|
|
76
|
-
|
|
77
|
-
<!-- Ground texture hints -->
|
|
78
|
-
<path d="M100,980 Q200,970 300,985" stroke="#2e4c43" stroke-width="1" fill="none" opacity="0.15"/>
|
|
79
|
-
<path d="M500,990 Q650,975 800,992" stroke="#2e4c43" stroke-width="1" fill="none" opacity="0.15"/>
|
|
80
|
-
<path d="M1100,985 Q1250,972 1400,988" stroke="#2e4c43" stroke-width="1" fill="none" opacity="0.15"/>
|
|
81
|
-
</svg>
|