ACLASCollege commited on
Commit
b1da891
·
verified ·
1 Parent(s): 5b2388d

chore: professionalize branding

Browse files
Files changed (1) hide show
  1. index.html +487 -174
index.html CHANGED
@@ -1,174 +1,487 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Aegis-Verify | Sovereign Academic Integrity Protocol</title>
7
- <link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;600;800&family=JetBrains+Mono&display=swap" rel="stylesheet">
8
- <style>
9
- :root {
10
- --primary: #00f2ff;
11
- --accent: #7000ff;
12
- --bg: #03050a;
13
- --card: rgba(255, 255, 255, 0.03);
14
- --border: rgba(255, 255, 255, 0.1);
15
- }
16
-
17
- body {
18
- background: var(--bg);
19
- background-image:
20
- radial-gradient(circle at 20% 30%, rgba(0, 242, 255, 0.05) 0%, transparent 50%),
21
- radial-gradient(circle at 80% 70%, rgba(112, 0, 255, 0.05) 0%, transparent 50%);
22
- color: #fff;
23
- font-family: 'Outfit', sans-serif;
24
- margin: 0;
25
- display: flex;
26
- flex-direction: column;
27
- align-items: center;
28
- justify-content: center;
29
- min-height: 100vh;
30
- overflow: hidden;
31
- }
32
-
33
- .glass-card {
34
- background: var(--card);
35
- backdrop-filter: blur(40px);
36
- border: 1px solid var(--border);
37
- border-radius: 32px;
38
- padding: 60px;
39
- width: 90%;
40
- max-width: 700px;
41
- text-align: center;
42
- box-shadow: 0 40px 100px rgba(0,0,0,0.5);
43
- animation: fadeIn 1s ease-out;
44
- }
45
-
46
- @keyframes fadeIn {
47
- from { opacity: 0; transform: translateY(20px); }
48
- to { opacity: 1; transform: translateY(0); }
49
- }
50
-
51
- .logo-badge {
52
- width: 80px;
53
- height: 80px;
54
- background: linear-gradient(135deg, var(--primary), var(--accent));
55
- border-radius: 20px;
56
- display: flex;
57
- align-items: center;
58
- justify-content: center;
59
- margin: 0 auto 30px;
60
- box-shadow: 0 0 30px rgba(0, 242, 255, 0.3);
61
- }
62
-
63
- h1 {
64
- font-size: 3.5rem;
65
- margin: 0 0 10px;
66
- letter-spacing: -2px;
67
- font-weight: 800;
68
- }
69
-
70
- p.description {
71
- font-size: 1.2rem;
72
- color: rgba(255, 255, 255, 0.6);
73
- margin-bottom: 50px;
74
- }
75
-
76
- .upload-area {
77
- border: 2px dashed var(--border);
78
- border-radius: 24px;
79
- padding: 80px 40px;
80
- transition: 0.3s;
81
- cursor: pointer;
82
- position: relative;
83
- overflow: hidden;
84
- }
85
-
86
- .upload-area:hover {
87
- border-color: var(--primary);
88
- background: rgba(0, 242, 255, 0.02);
89
- transform: scale(1.02);
90
- }
91
-
92
- .upload-icon {
93
- font-size: 50px;
94
- margin-bottom: 20px;
95
- display: block;
96
- }
97
-
98
- .upload-text {
99
- font-size: 1.2rem;
100
- font-weight: 600;
101
- color: var(--primary);
102
- }
103
-
104
- .nav-footer {
105
- margin-top: 60px;
106
- display: flex;
107
- gap: 30px;
108
- opacity: 0.5;
109
- transition: 0.3s;
110
- }
111
-
112
- .nav-footer:hover { opacity: 1; }
113
- .nav-footer a { color: #fff; text-decoration: none; font-size: 14px; font-weight: 600; }
114
-
115
- /* Scanning Animation overlay */
116
- .scan-bar {
117
- position: absolute;
118
- top: 0; left: 0; width: 100%; height: 2px;
119
- background: var(--primary);
120
- box-shadow: 0 0 15px var(--primary);
121
- display: none;
122
- animation: scanLine 2s linear infinite;
123
- }
124
-
125
- @keyframes scanLine {
126
- 0% { top: 0%; }
127
- 100% { top: 100%; }
128
- }
129
- </style>
130
- </head>
131
- <body>
132
- <div class="glass-card">
133
- <div class="logo-badge">
134
- <svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
135
- </div>
136
- <h1>Aegis-Verify</h1>
137
- <p class="description">Sovereign Protocol for Global Academic Integrity.</p>
138
-
139
- <div class="upload-area" id="dropZone">
140
- <div class="scan-bar" id="scanBar"></div>
141
- <span class="upload-icon">📄</span>
142
- <span class="upload-text">Drop Academic Certificate Here</span>
143
- <p style="font-size: 0.9rem; color: rgba(255,255,255,0.4); margin-top: 15px;">Supports PDF, JPEG, or JSON-LD Attestations</p>
144
- </div>
145
- </div>
146
-
147
- <div class="nav-footer">
148
- <a href="https://aclas.college/">ACLAS COLLEGE</a>
149
- <a href="https://github.com/aclascollege/aegis-graph">GITHUB</a>
150
- <a href="https://huggingface.co/spaces/ACLASCollege/aegis-graph-final">SPACE</a>
151
- </div>
152
-
153
- <script>
154
- const dropZone = document.getElementById('dropZone');
155
- const scanBar = document.getElementById('scanBar');
156
-
157
- dropZone.onclick = () => alert('Demo Mode: Please drag and drop a file to simulate verification.');
158
-
159
- dropZone.ondragover = (e) => {
160
- e.preventDefault();
161
- dropZone.style.borderColor = 'var(--primary)';
162
- };
163
-
164
- dropZone.ondrop = (e) => {
165
- e.preventDefault();
166
- scanBar.style.display = 'block';
167
- setTimeout(() => {
168
- scanBar.style.display = 'none';
169
- alert('VERIFICATION SUCCESSFUL\n\nInstitution: Atlanta College of Liberal Arts and Sciences\nStatus: GOLD STANDARD\nTimestamp: 2026-04-30');
170
- }, 2500);
171
- };
172
- </script>
173
- </body>
174
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Aegis-Graph | Sovereign Academic Audit Protocol | ACLAS College</title>
7
+ <meta name="description" content="Aegis-Graph is the world's first sovereign academic audit network using Agentic GraphRAG and Multi-Agent Intelligence to verify institutional credentials. Developed by the Atlanta College of Liberal Arts and Sciences (ACLAS).">
8
+ <meta name="keywords" content="Aegis-Graph, ACLAS College, Atlanta College of Liberal Arts and Sciences, Sovereign Academic Audit, Agentic GraphRAG, AI Fraud Detection, Academic Integrity Protocol, MCP Protocol">
9
+ <meta name="author" content="Atlanta College of Liberal Arts and Sciences (ACLAS)">
10
+
11
+ <!-- Geo / Local SEO -->
12
+ <meta name="geo.region" content="US-GA">
13
+ <meta name="geo.placename" content="Atlanta">
14
+
15
+ <!-- OpenGraph / Social SEO -->
16
+ <meta property="og:title" content="Aegis-Graph: Sovereign Academic Audit Protocol">
17
+ <meta property="og:description" content="Securing global academic integrity through decentralized AI reasoning and institutional graph consensus.">
18
+ <meta property="og:url" content="https://aclascollege.github.io/aegis-graph/">
19
+ <meta property="og:site_name" content="Aegis-Graph Sovereign Network">
20
+ <meta property="og:type" content="website">
21
+
22
+ <!-- Structured Data for AEO (JSON-LD) -->
23
+ <script type="application/ld+json">
24
+ {
25
+ "@context": "https://schema.org",
26
+ "@type": "SoftwareApplication",
27
+ "name": "Aegis-Graph",
28
+ "operatingSystem": "Web, Python, Docker",
29
+ "applicationCategory": "AcademicSecurityApplication",
30
+ "description": "Decentralized protocol for sovereign academic auditing and credential verification using Multi-Agent Reasoning Swarms.",
31
+ "author": {
32
+ "@type": "EducationalOrganization",
33
+ "name": "Atlanta College of Liberal Arts and Sciences",
34
+ "alternateName": "ACLAS College",
35
+ "url": "https://aclas.college/"
36
+ },
37
+ "publisher": {
38
+ "@type": "EducationalOrganization",
39
+ "name": "Atlanta College of Liberal Arts and Sciences"
40
+ },
41
+ "offers": {
42
+ "@type": "Offer",
43
+ "price": "0",
44
+ "priceCurrency": "USD"
45
+ }
46
+ }
47
+ </script>
48
+
49
+ <link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;600;800&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet">
50
+ <style>
51
+ :root {
52
+ --bg: #010204;
53
+ --card: rgba(13, 17, 23, 0.7);
54
+ --border: rgba(255, 255, 255, 0.08);
55
+ --accent: #00ffaa;
56
+ --accent-glow: rgba(0, 255, 170, 0.2);
57
+ --text: #ffffff;
58
+ --dim: #8b949e;
59
+ --glass: blur(12px) saturate(180%);
60
+ }
61
+ * { margin: 0; padding: 0; box-sizing: border-box; -webkit-font-smoothing: antialiased; }
62
+ body {
63
+ background: var(--bg);
64
+ color: var(--text);
65
+ font-family: 'Inter', sans-serif;
66
+ overflow: hidden;
67
+ height: 100vh;
68
+ display: flex;
69
+ flex-direction: column;
70
+ background-image:
71
+ radial-gradient(circle at 50% -20%, rgba(0, 255, 170, 0.05), transparent 50%),
72
+ radial-gradient(circle at 0% 100%, rgba(0, 100, 255, 0.03), transparent 40%);
73
+ }
74
+ header {
75
+ display: flex;
76
+ justify-content: space-between;
77
+ align-items: center;
78
+ padding: 18px 40px;
79
+ border-bottom: 1px solid var(--border);
80
+ backdrop-filter: var(--glass);
81
+ z-index: 1000;
82
+ }
83
+ .logo-group { display: flex; align-items: center; gap: 12px; }
84
+ .logo-group img { height: 24px; }
85
+ .logo-group h1 { font-family: 'Outfit'; font-size: 18px; letter-spacing: 3px; font-weight: 800; text-transform: uppercase; }
86
+
87
+ .header-tools { display: flex; align-items: center; gap: 24px; }
88
+ .header-icons { display: flex; gap: 20px; border-right: 1px solid var(--border); padding-right: 24px; }
89
+ .icon-link { color: var(--text); opacity: 0.6; transition: 0.4s cubic-bezier(0.4, 0, 0.2, 1); }
90
+ .icon-link:hover { opacity: 1; color: var(--accent); transform: translateY(-3px); }
91
+
92
+ .container {
93
+ display: grid;
94
+ grid-template-columns: 300px 1fr 340px;
95
+ gap: 20px;
96
+ padding: 24px;
97
+ flex: 1;
98
+ overflow: hidden;
99
+ }
100
+ .bento {
101
+ background: var(--card);
102
+ border: 1px solid var(--border);
103
+ border-radius: 16px;
104
+ padding: 24px;
105
+ display: flex;
106
+ flex-direction: column;
107
+ overflow: hidden;
108
+ backdrop-filter: var(--glass);
109
+ transition: 0.3s;
110
+ }
111
+ .bento:hover { border-color: rgba(0, 255, 170, 0.3); }
112
+
113
+ .label {
114
+ font-size: 10px;
115
+ color: var(--dim);
116
+ text-transform: uppercase;
117
+ letter-spacing: 2px;
118
+ margin-bottom: 16px;
119
+ font-weight: 700;
120
+ display: flex;
121
+ align-items: center;
122
+ gap: 10px;
123
+ }
124
+ .label::after { content: ''; flex: 1; height: 1px; background: var(--border); }
125
+
126
+ .agent-card {
127
+ background: rgba(255, 255, 255, 0.03);
128
+ border: 1px solid var(--border);
129
+ padding: 16px;
130
+ border-radius: 12px;
131
+ margin-bottom: 12px;
132
+ transition: 0.3s;
133
+ }
134
+ .agent-card:hover { background: rgba(255, 255, 255, 0.05); }
135
+
136
+ .energy-bar { height: 3px; background: rgba(255, 255, 255, 0.05); margin-top: 10px; overflow: hidden; border-radius: 2px; }
137
+ .energy-fill { height: 100%; background: var(--accent); width: 0%; transition: width 1s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: 0 0 10px var(--accent); }
138
+
139
+ .drop-zone {
140
+ width: 100%;
141
+ height: 100%;
142
+ border: 2px dashed var(--border);
143
+ border-radius: 20px;
144
+ display: flex;
145
+ flex-direction: column;
146
+ align-items: center;
147
+ justify-content: center;
148
+ cursor: pointer;
149
+ transition: 0.4s cubic-bezier(0.4, 0, 0.2, 1);
150
+ background: rgba(255, 255, 255, 0.01);
151
+ }
152
+ .drop-zone:hover { border-color: var(--accent); background: rgba(0, 255, 170, 0.03); transform: scale(0.99); }
153
+
154
+ .terminal {
155
+ background: rgba(0, 0, 0, 0.4);
156
+ border-radius: 12px;
157
+ padding: 20px;
158
+ font-family: 'JetBrains Mono', monospace;
159
+ font-size: 11px;
160
+ flex: 1;
161
+ overflow-y: auto;
162
+ line-height: 1.7;
163
+ color: var(--dim);
164
+ border: 1px solid var(--border);
165
+ }
166
+ .terminal::-webkit-scrollbar { width: 4px; }
167
+ .terminal::-webkit-scrollbar-thumb { background: var(--border); border-radius: 10px; }
168
+
169
+ .btn-main {
170
+ background: var(--accent);
171
+ color: #000;
172
+ border: none;
173
+ padding: 14px 28px;
174
+ border-radius: 8px;
175
+ font-weight: 700;
176
+ font-size: 13px;
177
+ cursor: pointer;
178
+ font-family: 'Outfit';
179
+ letter-spacing: 1px;
180
+ transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
181
+ }
182
+ .btn-main:hover { transform: translateY(-2px); box-shadow: 0 8px 25px var(--accent-glow); filter: brightness(1.1); }
183
+ .btn-main:active { transform: translateY(0); }
184
+
185
+ .meta-item { background: rgba(255, 255, 255, 0.02); padding: 14px; border-radius: 10px; border: 1px solid var(--border); }
186
+ .meta-val { font-size: 14px; font-weight: 700; color: var(--accent); margin-top: 6px; font-family: 'JetBrains Mono'; }
187
+
188
+ .custom-dropdown {
189
+ position: relative;
190
+ cursor: pointer;
191
+ font-size: 13px;
192
+ font-weight: 600;
193
+ min-width: 130px;
194
+ z-index: 2000;
195
+ }
196
+ .dropdown-selected {
197
+ padding: 8px 16px;
198
+ background: rgba(255, 255, 255, 0.05);
199
+ border: 1px solid var(--border);
200
+ border-radius: 8px;
201
+ display: flex;
202
+ justify-content: space-between;
203
+ align-items: center;
204
+ transition: 0.3s;
205
+ }
206
+ .dropdown-selected:hover {
207
+ background: rgba(255, 255, 255, 0.08);
208
+ border-color: rgba(255, 255, 255, 0.2);
209
+ }
210
+ .dropdown-options {
211
+ position: absolute;
212
+ top: calc(100% + 8px);
213
+ right: 0;
214
+ background: #0d1117;
215
+ border: 1px solid var(--border);
216
+ border-radius: 12px;
217
+ overflow: hidden;
218
+ display: none;
219
+ flex-direction: column;
220
+ min-width: 100%;
221
+ box-shadow: 0 10px 30px rgba(0,0,0,0.5);
222
+ backdrop-filter: var(--glass);
223
+ }
224
+ .custom-dropdown.open .dropdown-options {
225
+ display: flex;
226
+ animation: dropdownFade 0.2s ease-out;
227
+ }
228
+ @keyframes dropdownFade {
229
+ from { opacity: 0; transform: translateY(-10px); }
230
+ to { opacity: 1; transform: translateY(0); }
231
+ }
232
+ .dropdown-option {
233
+ padding: 10px 20px;
234
+ transition: 0.3s;
235
+ white-space: nowrap;
236
+ }
237
+ .dropdown-option:hover {
238
+ background: var(--accent);
239
+ color: #000;
240
+ }
241
+
242
+ .modal {
243
+ position: fixed; top: 0; left: 0; width: 100%; height: 100%;
244
+ background: rgba(0, 0, 0, 0.8); backdrop-filter: blur(20px);
245
+ display: none; justify-content: center; align-items: center; z-index: 3000;
246
+ }
247
+ .report {
248
+ background: #ffffff; color: #000; width: 540px; padding: 60px;
249
+ border-radius: 24px; box-shadow: 0 30px 60px rgba(0,0,0,0.5);
250
+ animation: modalPop 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
251
+ }
252
+ @keyframes modalPop { from { transform: scale(0.9) translateY(20px); opacity: 0; } to { transform: scale(1) translateY(0); opacity: 1; } }
253
+ </style>
254
+ </head>
255
+ <body>
256
+ <header>
257
+ <div class="logo-group">
258
+ <img src="assets/logo-new.png" alt="Logo">
259
+ <h1>AEGIS-GRAPH <span style="font-size: 9px; color:var(--accent); opacity: 0.8;">SOVEREIGN_NODE v2.15</span></h1>
260
+ </div>
261
+ <div class="header-tools">
262
+ <div class="header-icons">
263
+ <a href="https://aclas.college" target="_blank" class="icon-link" title="Institution">
264
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21h18M3 10h18M5 10V7a3 3 0 0 1 3-3h8a3 3 0 0 1 3 3v3M4 10v11M20 10v11M10 14v4M14 14v4"/></svg>
265
+ </a>
266
+ <a href="https://docs.aclas.college/aegis-graph" target="_blank" class="icon-link" title="GitBook Documentation">
267
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20M4 19.5A2.5 2.5 0 0 0 6.5 22H20M4 19.5V3A2.5 2.5 0 0 1 6.5 0.5H20v16.5H6.5a2.5 2.5 0 0 0-2.5 2.5z"/></svg>
268
+ </a>
269
+ <a href="https://github.com/aclascollege/aegis-graph" target="_blank" class="icon-link" title="GitHub Repository">
270
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"/></svg>
271
+ </a>
272
+ </div>
273
+ <div class="custom-dropdown" id="lang-dropdown">
274
+ <div class="dropdown-selected" id="lang-current">English <span style="font-size: 8px;">▼</span></div>
275
+ <div class="dropdown-options">
276
+ <div class="dropdown-option" data-value="en">English</div>
277
+ <div class="dropdown-option" data-value="cn">简体中文</div>
278
+ <div class="dropdown-option" data-value="es">Español</div>
279
+ <div class="dropdown-option" data-value="fr">Français</div>
280
+ <div class="dropdown-option" data-value="de">Deutsch</div>
281
+ <div class="dropdown-option" data-value="jp">日本語</div>
282
+ <div class="dropdown-option" data-value="kr">한국어</div>
283
+ <div class="dropdown-option" data-value="pt">Português</div>
284
+ </div>
285
+ </div>
286
+ <button class="btn-main" id="audit-btn" data-i18n="btn_audit">START AUDIT</button>
287
+ </div>
288
+ </header>
289
+
290
+ <div class="container">
291
+ <div class="bento" style="grid-row: span 2;">
292
+ <p class="label" data-i18n="label_agents">System Swarm</p>
293
+ <div class="agent-card"><div style="display:flex; justify-content:space-between; font-size:12px; font-weight: 600;"><span data-i18n="agent_v">Vision Forensics</span><span id="v-status" style="color:var(--dim)">IDLE</span></div><div class="energy-bar"><div class="energy-fill" id="v-fill"></div></div></div>
294
+ <div class="agent-card"><div style="display:flex; justify-content:space-between; font-size:12px; font-weight: 600;"><span data-i18n="agent_g">Graph Navigator</span><span id="g-status" style="color:var(--dim)">IDLE</span></div><div class="energy-bar"><div class="energy-fill" id="g-fill"></div></div></div>
295
+ <div class="agent-card"><div style="display:flex; justify-content:space-between; font-size:12px; font-weight: 600;"><span data-i18n="agent_l">Logic Auditor</span><span id="l-status" style="color:var(--dim)">IDLE</span></div><div class="energy-bar"><div class="energy-fill" id="l-fill"></div></div></div>
296
+ <div style="margin-top: auto; padding: 20px; background: rgba(0, 255, 170, 0.03); border-radius: 12px; border: 1px solid var(--border);">
297
+ <p class="label" data-i18n="label_node_title" style="margin-bottom: 8px;">Active Node</p>
298
+ <p style="font-size: 13px; font-weight: 800; color:var(--accent); font-family: 'Outfit';">AEGIS_SOV_7822</p>
299
+ <p style="font-size: 11px; color:var(--dim); line-height: 1.5; margin-top: 4px;">Maintained by the <a href="https://aclas.college" style="color:var(--accent); text-decoration: underline;">Atlanta College of Liberal Arts and Sciences</a>. Global sovereign research partner.</p>
300
+ <a href="https://github.com/aclascollege/aegis-graph" target="_blank" style="font-size: 10px; color: var(--accent); text-decoration: none; margin-top: 12px; display: inline-block; font-weight: 700; letter-spacing: 0.5px;">PROTOCOL SOURCE ↗</a>
301
+ </div>
302
+ </div>
303
+ <div class="bento"><p class="label" data-i18n="label_hub">Evidence Processing</p><div class="center-hub" style="height: 100%;"><div class="drop-zone" id="drop-zone"><div style="font-size: 32px; color: var(--accent); margin-bottom: 12px;">✧</div><p style="font-size: 15px; font-weight: 700; font-family: 'Outfit'; letter-spacing: 1px;" data-i18n="drop_text">INGEST CREDENTIAL</p><p style="font-size: 10px; color: var(--dim); margin-top: 4px;">PDF, JPG, PNG SUPPORTED</p><p style="font-size: 9px; color: #ffcc66; margin-top: 8px; max-width: 260px; line-height: 1.4;">DEMO MODE: local preview only. Final credential verification requires a server-signed audit.</p><input type="file" id="f-input" accept=".pdf,image/png,image/jpeg" style="display: none"></div></div></div>
304
+ <div class="bento" style="grid-row: span 2;"><p class="label" data-i18n="label_telemetry">Live Telemetry</p><div class="terminal" id="console"><div>[SYSTEM] Sovereign Node Active. Waiting for ingestion...</div></div></div>
305
+ <div class="bento">
306
+ <p class="label" data-i18n="label_metadata">Sovereign Analytics</p>
307
+ <div class="meta-grid" style="display: grid; grid-template-columns: 1fr 1fr; gap: 12px;">
308
+ <div class="meta-item"><span class="label" style="margin-bottom:0; font-size: 8px;" data-i18n="meta_issuer">Issuer</span><div class="meta-val" id="m-issuer">--</div></div>
309
+ <div class="meta-item"><span class="label" style="margin-bottom:0; font-size: 8px;" data-i18n="meta_status">Status</span><div class="meta-val" id="m-status">--</div></div>
310
+ </div>
311
+ </div>
312
+ </div>
313
+ <div class="modal" id="modal"><div class="report" id="rep-body"></div></div>
314
+
315
+ <script>
316
+ const i18n = {
317
+ en: { btn_audit: "START AUDIT", label_agents: "System Agents", agent_v: "Vision Forensics", agent_g: "Graph Navigator", agent_l: "Logic Auditor", label_node_title: "Institutional Node", label_hub: "Evidence Processing", drop_text: "Ingest Credential", label_telemetry: "Live Telemetry", label_metadata: "Metadata Analytics", meta_issuer: "Issuer", meta_status: "Status", verdict_ok: "VERIFIED APPROVED", verdict_no: "AUDIT REJECTED" },
318
+ cn: { btn_audit: "开始审计", label_agents: "系统代理", agent_v: "视觉法证", agent_g: "图谱导航", agent_l: "逻辑审计", label_node_title: "主权节点", label_hub: "证据处理中心", drop_text: "载入凭证", label_telemetry: "实时遥测", label_metadata: "元数据分析", meta_issuer: "签发机构", meta_status: "状态", verdict_ok: "核验通过", verdict_no: "审计拒绝" },
319
+ es: { btn_audit: "INICIAR AUDITORÍA", label_agents: "Agentes de Sistema", agent_v: "Forense Visual", agent_g: "Navegador de Grafos", agent_l: "Auditor Lógico", label_node_title: "Nodo Institucional", label_hub: "Procesamiento", drop_text: "Ingresar Credencial", label_telemetry: "Telemetría", label_metadata: "Metadatos", meta_issuer: "Emisor", meta_status: "Estado", verdict_ok: "VERIFICADO", verdict_no: "RECHAZADO" },
320
+ fr: { btn_audit: "LANCER L'AUDIT", label_agents: "Agents Système", agent_v: "Forensique Visuelle", agent_g: "Navigateur", agent_l: "Auditeur Logique", label_node_title: "Nœud Institutionnel", label_hub: "Traitement", drop_text: "Ingérer", label_telemetry: "Télémétrie", label_metadata: "Métadonnées", meta_issuer: "Émetteur", meta_status: "Statut", verdict_ok: "VERIFIÉ", verdict_no: "REJETÉ" },
321
+ de: { btn_audit: "AUDIT STARTEN", label_agents: "System-Agenten", agent_v: "Visuelle Forensik", agent_g: "Graph-Navigator", agent_l: "Logik-Auditor", label_node_title: "Institutioneller Knoten", label_hub: "Verarbeitung", drop_text: "Nachweis Einreichen", label_telemetry: "Telemetrie", label_metadata: "Metadaten", meta_issuer: "Aussteller", meta_status: "Status", verdict_ok: "VERIFIZIERT", verdict_no: "ABGELEHNT" },
322
+ jp: { btn_audit: "監査開始", label_agents: "システムエージェント", agent_v: "視覚法医学", agent_g: "グラフナビ", agent_l: "ロジック監査", label_node_title: "機関ノード", label_hub: "証拠処理", drop_text: "資格情報を入れる", label_telemetry: "テレメトリ", label_metadata: "メタデータ", meta_issuer: "発行者", meta_status: "ステータス", verdict_ok: "検証承認", verdict_no: "拒否" },
323
+ kr: { btn_audit: "감사 시작", label_agents: "시스템 에이전트", agent_v: "시각적 법의학", agent_g: "그래프 탐색", agent_l: "논리 감사", label_node_title: "기관 노드", label_hub: "증거 처리", drop_text: "자격 증명 제출", label_telemetry: "원격 측정", label_metadata: "메타데이터", meta_issuer: "발행자", meta_status: "상태", verdict_ok: "검증 승인", verdict_no: "거부" },
324
+ pt: { btn_audit: "INICIAR AUDITORIA", label_agents: "Agentes de Sistema", agent_v: "Forense Visual", agent_g: "Navegador", agent_l: "Auditor Lógico", label_node_title: "Nó Institucional", label_hub: "Processamento", drop_text: "Inserir Credencial", label_telemetry: "Telemetria", label_metadata: "Metadados", meta_issuer: "Emissor", meta_status: "Estado", verdict_ok: "APROVADO", verdict_no: "REJEITADO" }
325
+ };
326
+
327
+ const dropdown = document.getElementById('lang-dropdown');
328
+ const langCurrent = document.getElementById('lang-current');
329
+ let currentLang = 'en';
330
+
331
+ dropdown.onclick = (e) => {
332
+ dropdown.classList.toggle('open');
333
+ e.stopPropagation();
334
+ };
335
+
336
+ // Close dropdown when clicking outside
337
+ window.addEventListener('click', (e) => {
338
+ if (!dropdown.contains(e.target)) {
339
+ dropdown.classList.remove('open');
340
+ }
341
+ });
342
+
343
+ document.querySelectorAll('.dropdown-option').forEach(opt => {
344
+ opt.onclick = (e) => {
345
+ currentLang = opt.getAttribute('data-value');
346
+ langCurrent.replaceChildren();
347
+ langCurrent.appendChild(document.createTextNode(`${opt.innerText} `));
348
+ const arrow = document.createElement('span');
349
+ arrow.style.fontSize = '8px';
350
+ arrow.innerText = '▼';
351
+ langCurrent.appendChild(arrow);
352
+ document.querySelectorAll('[data-i18n]').forEach(el => {
353
+ const key = el.getAttribute('data-i18n');
354
+ if(i18n[currentLang][key]) el.innerText = i18n[currentLang][key];
355
+ });
356
+ e.stopPropagation();
357
+ dropdown.classList.remove('open');
358
+ };
359
+ });
360
+
361
+ const btn = document.getElementById('audit-btn');
362
+ const cons = document.getElementById('console');
363
+ let file = null;
364
+
365
+ function log(msg) {
366
+ const d = document.createElement('div');
367
+ const prompt = document.createElement('span');
368
+ prompt.style.color = 'var(--accent)';
369
+ prompt.innerText = '> ';
370
+ d.appendChild(prompt);
371
+ d.appendChild(document.createTextNode(msg));
372
+ cons.appendChild(d); cons.scrollTop = cons.scrollHeight;
373
+ }
374
+
375
+ document.getElementById('f-input').onchange = (e) => {
376
+ if(e.target.files.length) {
377
+ file = e.target.files[0];
378
+ const dropZone = document.getElementById('drop-zone');
379
+ dropZone.replaceChildren();
380
+
381
+ const check = document.createElement('div');
382
+ check.style.color = 'var(--accent)';
383
+ check.innerText = '✓';
384
+ dropZone.appendChild(check);
385
+
386
+ const name = document.createElement('p');
387
+ name.style.fontSize = '10px';
388
+ name.innerText = file.name;
389
+ dropZone.appendChild(name);
390
+
391
+ const note = document.createElement('p');
392
+ note.style.fontSize = '9px';
393
+ note.style.color = '#ffcc66';
394
+ note.style.marginTop = '8px';
395
+ note.innerText = 'Demo intake only; no browser-side approval will be issued.';
396
+ dropZone.appendChild(note);
397
+
398
+ log(`INGESTED: ${file.name}`);
399
+ }
400
+ };
401
+ document.getElementById('drop-zone').onclick = () => document.getElementById('f-input').click();
402
+
403
+ btn.onclick = async () => {
404
+ if(!file) return;
405
+ btn.disabled = true;
406
+ log("INIT: Preparing local demo intake...");
407
+
408
+ // Vision Agent
409
+ document.getElementById('v-fill').style.width = "100%";
410
+ log("VISION: Demo animation only; document bytes are not authenticated in-browser...");
411
+ await new Promise(r => setTimeout(r, 800));
412
+
413
+ // Graph Agent
414
+ document.getElementById('g-fill').style.width = "100%";
415
+ log("GRAPH: Skipping browser-side registry approval; server audit required...");
416
+ await new Promise(r => setTimeout(r, 1500)); // Simulating a deeper search
417
+
418
+ // Logic Agent
419
+ document.getElementById('l-fill').style.width = "100%";
420
+ log("LOGIC: Refusing automatic approval without signed server evidence...");
421
+ await new Promise(r => setTimeout(r, 800));
422
+
423
+ await finish();
424
+ };
425
+
426
+ async function finish() {
427
+ let verdict = 'NEEDS_REVIEW';
428
+ let reason = 'DEMO MODE: This browser-only page does not read or authenticate document contents. A professional credential decision requires OCR/forensics, issuer registry checks, revocation checks, and a server-signed audit certificate.';
429
+ let status_code = 'DEMO_ONLY';
430
+ let issuer = 'UNVERIFIED';
431
+ let ror_id = '--';
432
+
433
+ const allowedTypes = ['application/pdf', 'image/png', 'image/jpeg'];
434
+ const fileTypeKnown = allowedTypes.includes(file.type);
435
+ if (!fileTypeKnown) {
436
+ verdict = 'REJECTED';
437
+ status_code = 'UNSUPPORTED_TYPE';
438
+ reason = 'Unsupported file type. Upload a PDF, PNG, or JPEG credential for a production server-side audit.';
439
+ log('SYSTEM: REJECTED - Unsupported file type for audit intake.');
440
+ } else {
441
+ log('SYSTEM: DEMO ONLY - File content was not sent to a trusted audit service.');
442
+ log('SYSTEM: NEEDS REVIEW - No browser-side approval is issued.');
443
+ }
444
+
445
+ const modal = document.getElementById('modal');
446
+ modal.style.display = 'flex';
447
+ const t = i18n[currentLang];
448
+
449
+ document.getElementById('m-issuer').innerText = issuer;
450
+ document.getElementById('m-status').innerText = status_code;
451
+
452
+ const verdictTitle = verdict === 'REJECTED' ? t.verdict_no : 'SERVER AUDIT REQUIRED';
453
+ const verdictColor = verdict === 'REJECTED' ? '#ff3366' : '#ffcc66';
454
+
455
+ const report = document.getElementById('rep-body');
456
+ report.replaceChildren();
457
+
458
+ const title = document.createElement('h2');
459
+ title.style.color = verdictColor;
460
+ title.innerText = verdictTitle;
461
+ report.appendChild(title);
462
+
463
+ const summary = document.createElement('p');
464
+ summary.style.margin = '20px 0';
465
+ summary.style.lineHeight = '1.6';
466
+ summary.innerText = reason;
467
+ report.appendChild(summary);
468
+
469
+ const details = document.createElement('div');
470
+ details.style.borderTop = '1px solid #eee';
471
+ details.style.paddingTop = '15px';
472
+ details.style.fontSize = '11px';
473
+ details.style.color = '#666';
474
+ details.style.marginBottom = '20px';
475
+ details.innerText = `ROR ID: ${ror_id}\nAudit Trace: LOCAL-DEMO-NOT-SIGNED`;
476
+ report.appendChild(details);
477
+
478
+ const done = document.createElement('button');
479
+ done.className = 'btn-main';
480
+ done.style.width = '100%';
481
+ done.innerText = 'DONE';
482
+ done.onclick = () => location.reload();
483
+ report.appendChild(done);
484
+ }
485
+ </script>
486
+ </body>
487
+ </html>