Volkan36 commited on
Commit
c48974a
·
verified ·
1 Parent(s): c1edddb

undefined - Initial Deployment

Browse files
Files changed (2) hide show
  1. README.md +7 -5
  2. index.html +1668 -19
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Acf
3
- emoji: 🌍
4
- colorFrom: green
5
- colorTo: blue
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: acf
3
+ emoji: 🐳
4
+ colorFrom: purple
5
+ colorTo: pink
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,1668 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </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>ACF Mission Control — Advanced Crisis Communication Simulator</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
10
+ <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
11
+ <style>
12
+ :root {
13
+ --bg: #0a0e1a;
14
+ --panel: #0f1829;
15
+ --panel-hover: #1a2338;
16
+ --muted: #64748b;
17
+ --text: #e2e8f0;
18
+ --accent: #3b82f6;
19
+ --success: #10b981;
20
+ --warning: #f59e0b;
21
+ --danger: #ef4444;
22
+ --purple: #8b5cf6;
23
+ --cyan: #06b6d4;
24
+ --pink: #ec4899;
25
+ }
26
+
27
+ * {
28
+ box-sizing: border-box;
29
+ margin: 0;
30
+ padding: 0;
31
+ }
32
+
33
+ html, body {
34
+ height: 100%;
35
+ overflow-x: hidden;
36
+ }
37
+
38
+ body {
39
+ background: linear-gradient(135deg, #0a0e1a 0%, #1e293b 100%);
40
+ color: var(--text);
41
+ font-family: 'Inter', system-ui, -apple-system, sans-serif;
42
+ position: relative;
43
+ }
44
+
45
+ /* Animated background */
46
+ body::before {
47
+ content: '';
48
+ position: fixed;
49
+ top: 0;
50
+ left: 0;
51
+ right: 0;
52
+ bottom: 0;
53
+ background:
54
+ radial-gradient(circle at 20% 50%, rgba(59, 130, 246, 0.1) 0%, transparent 50%),
55
+ radial-gradient(circle at 80% 80%, rgba(139, 92, 246, 0.05) 0%, transparent 50%),
56
+ radial-gradient(circle at 40% 20%, rgba(6, 182, 212, 0.05) 0%, transparent 50%);
57
+ pointer-events: none;
58
+ animation: bgFloat 20s ease-in-out infinite;
59
+ }
60
+
61
+ @keyframes bgFloat {
62
+ 0%, 100% { transform: translate(0, 0) scale(1); }
63
+ 33% { transform: translate(-20px, -20px) scale(1.05); }
64
+ 66% { transform: translate(20px, -10px) scale(0.95); }
65
+ }
66
+
67
+ /* Header */
68
+ header {
69
+ background: rgba(15, 24, 41, 0.95);
70
+ backdrop-filter: blur(10px);
71
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
72
+ position: sticky;
73
+ top: 0;
74
+ z-index: 100;
75
+ padding: 20px 24px;
76
+ }
77
+
78
+ .header-content {
79
+ max-width: 1600px;
80
+ margin: 0 auto;
81
+ display: flex;
82
+ justify-content: space-between;
83
+ align-items: center;
84
+ }
85
+
86
+ .header-left h1 {
87
+ font-size: 24px;
88
+ font-weight: 800;
89
+ background: linear-gradient(135deg, #fff 0%, #94a3b8 100%);
90
+ -webkit-background-clip: text;
91
+ -webkit-text-fill-color: transparent;
92
+ margin-bottom: 4px;
93
+ }
94
+
95
+ .header-meta {
96
+ font-size: 13px;
97
+ color: var(--muted);
98
+ display: flex;
99
+ gap: 20px;
100
+ }
101
+
102
+ .status-indicator {
103
+ display: inline-flex;
104
+ align-items: center;
105
+ gap: 6px;
106
+ }
107
+
108
+ .status-dot {
109
+ width: 8px;
110
+ height: 8px;
111
+ border-radius: 50%;
112
+ background: var(--success);
113
+ animation: pulse 2s ease-in-out infinite;
114
+ }
115
+
116
+ @keyframes pulse {
117
+ 0%, 100% { opacity: 1; transform: scale(1); }
118
+ 50% { opacity: 0.5; transform: scale(1.2); }
119
+ }
120
+
121
+ /* Controls */
122
+ .control-buttons {
123
+ display: flex;
124
+ gap: 12px;
125
+ }
126
+
127
+ .btn {
128
+ padding: 10px 20px;
129
+ background: rgba(59, 130, 246, 0.1);
130
+ border: 1px solid rgba(59, 130, 246, 0.3);
131
+ border-radius: 8px;
132
+ color: var(--accent);
133
+ font-weight: 600;
134
+ cursor: pointer;
135
+ transition: all 0.3s ease;
136
+ font-size: 14px;
137
+ }
138
+
139
+ .btn:hover {
140
+ background: rgba(59, 130, 246, 0.2);
141
+ transform: translateY(-1px);
142
+ box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);
143
+ }
144
+
145
+ .btn.active {
146
+ background: var(--accent);
147
+ color: white;
148
+ }
149
+
150
+ /* Container */
151
+ .container {
152
+ max-width: 1600px;
153
+ margin: 0 auto;
154
+ padding: 24px;
155
+ }
156
+
157
+ /* Phase Indicator */
158
+ .phase-indicator {
159
+ margin-bottom: 24px;
160
+ padding: 16px;
161
+ background: rgba(15, 24, 41, 0.6);
162
+ border-radius: 12px;
163
+ border: 1px solid rgba(255, 255, 255, 0.1);
164
+ }
165
+
166
+ .phase-timeline {
167
+ display: flex;
168
+ justify-content: space-between;
169
+ position: relative;
170
+ padding: 20px 0;
171
+ }
172
+
173
+ .phase-timeline::before {
174
+ content: '';
175
+ position: absolute;
176
+ top: 50%;
177
+ left: 0;
178
+ right: 0;
179
+ height: 2px;
180
+ background: rgba(255, 255, 255, 0.1);
181
+ }
182
+
183
+ .phase-item {
184
+ position: relative;
185
+ text-align: center;
186
+ flex: 1;
187
+ }
188
+
189
+ .phase-dot {
190
+ width: 40px;
191
+ height: 40px;
192
+ border-radius: 50%;
193
+ background: var(--panel);
194
+ border: 2px solid rgba(255, 255, 255, 0.2);
195
+ margin: 0 auto 8px;
196
+ display: flex;
197
+ align-items: center;
198
+ justify-content: center;
199
+ font-weight: 700;
200
+ transition: all 0.3s ease;
201
+ }
202
+
203
+ .phase-item.active .phase-dot {
204
+ background: var(--accent);
205
+ border-color: var(--accent);
206
+ box-shadow: 0 0 20px rgba(59, 130, 246, 0.5);
207
+ }
208
+
209
+ .phase-item.completed .phase-dot {
210
+ background: var(--success);
211
+ border-color: var(--success);
212
+ }
213
+
214
+ /* Grid Layout */
215
+ .dashboard-grid {
216
+ display: grid;
217
+ grid-template-columns: 380px 1fr 420px;
218
+ gap: 24px;
219
+ margin-bottom: 24px;
220
+ }
221
+
222
+ /* Panels */
223
+ .panel {
224
+ background: rgba(15, 24, 41, 0.8);
225
+ backdrop-filter: blur(10px);
226
+ border: 1px solid rgba(255, 255, 255, 0.1);
227
+ border-radius: 16px;
228
+ padding: 20px;
229
+ transition: all 0.3s ease;
230
+ }
231
+
232
+ .panel:hover {
233
+ border-color: rgba(59, 130, 246, 0.3);
234
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
235
+ }
236
+
237
+ .panel-header {
238
+ display: flex;
239
+ justify-content: space-between;
240
+ align-items: center;
241
+ margin-bottom: 16px;
242
+ }
243
+
244
+ .panel h2 {
245
+ font-size: 14px;
246
+ font-weight: 700;
247
+ text-transform: uppercase;
248
+ letter-spacing: 1px;
249
+ color: var(--muted);
250
+ }
251
+
252
+ .panel-badge {
253
+ padding: 4px 8px;
254
+ background: rgba(59, 130, 246, 0.1);
255
+ border-radius: 4px;
256
+ font-size: 11px;
257
+ color: var(--accent);
258
+ }
259
+
260
+ /* Enhanced Gauge */
261
+ .gauge-container {
262
+ position: relative;
263
+ padding: 20px 0;
264
+ }
265
+
266
+ .gauge-svg {
267
+ width: 100%;
268
+ max-width: 320px;
269
+ margin: 0 auto;
270
+ display: block;
271
+ }
272
+
273
+ .gauge-center {
274
+ position: absolute;
275
+ top: 50%;
276
+ left: 50%;
277
+ transform: translate(-50%, -50%);
278
+ text-align: center;
279
+ }
280
+
281
+ .gauge-value {
282
+ font-size: 48px;
283
+ font-weight: 800;
284
+ background: linear-gradient(135deg, #fff 0%, #64748b 100%);
285
+ -webkit-background-clip: text;
286
+ -webkit-text-fill-color: transparent;
287
+ }
288
+
289
+ .gauge-label {
290
+ font-size: 13px;
291
+ color: var(--muted);
292
+ margin-top: 4px;
293
+ font-weight: 500;
294
+ }
295
+
296
+ /* SPEC/RI Channels */
297
+ .channels-grid {
298
+ display: grid;
299
+ grid-template-columns: repeat(2, 1fr);
300
+ gap: 16px;
301
+ }
302
+
303
+ .channel-card {
304
+ background: rgba(255, 255, 255, 0.02);
305
+ border: 1px solid rgba(255, 255, 255, 0.08);
306
+ border-radius: 12px;
307
+ padding: 16px;
308
+ transition: all 0.3s ease;
309
+ }
310
+
311
+ .channel-card:hover {
312
+ background: rgba(255, 255, 255, 0.04);
313
+ transform: translateY(-2px);
314
+ }
315
+
316
+ .channel-header {
317
+ display: flex;
318
+ justify-content: space-between;
319
+ align-items: center;
320
+ margin-bottom: 12px;
321
+ }
322
+
323
+ .channel-icon {
324
+ width: 32px;
325
+ height: 32px;
326
+ border-radius: 8px;
327
+ display: flex;
328
+ align-items: center;
329
+ justify-content: center;
330
+ font-size: 18px;
331
+ }
332
+
333
+ .channel-card.sq .channel-icon { background: rgba(59, 130, 246, 0.2); }
334
+ .channel-card.pq .channel-icon { background: rgba(16, 185, 129, 0.2); }
335
+ .channel-card.eq .channel-icon { background: rgba(236, 72, 153, 0.2); }
336
+ .channel-card.cq .channel-icon { background: rgba(245, 158, 11, 0.2); }
337
+
338
+ .channel-name {
339
+ font-size: 12px;
340
+ font-weight: 700;
341
+ text-transform: uppercase;
342
+ letter-spacing: 1px;
343
+ }
344
+
345
+ .channel-progress {
346
+ height: 8px;
347
+ background: rgba(255, 255, 255, 0.05);
348
+ border-radius: 4px;
349
+ overflow: hidden;
350
+ margin-bottom: 8px;
351
+ }
352
+
353
+ .channel-progress-bar {
354
+ height: 100%;
355
+ background: linear-gradient(90deg, var(--accent), var(--purple));
356
+ transition: width 0.5s ease;
357
+ position: relative;
358
+ overflow: hidden;
359
+ }
360
+
361
+ .channel-progress-bar::after {
362
+ content: '';
363
+ position: absolute;
364
+ top: 0;
365
+ left: 0;
366
+ right: 0;
367
+ bottom: 0;
368
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
369
+ animation: shimmer 2s infinite;
370
+ }
371
+
372
+ @keyframes shimmer {
373
+ 0% { transform: translateX(-100%); }
374
+ 100% { transform: translateX(100%); }
375
+ }
376
+
377
+ /* Metrics Grid */
378
+ .metrics-grid {
379
+ display: grid;
380
+ grid-template-columns: repeat(2, 1fr);
381
+ gap: 12px;
382
+ }
383
+
384
+ .metric-card {
385
+ background: rgba(255, 255, 255, 0.02);
386
+ border: 1px solid rgba(255, 255, 255, 0.08);
387
+ border-radius: 12px;
388
+ padding: 16px;
389
+ transition: all 0.3s ease;
390
+ }
391
+
392
+ .metric-card:hover {
393
+ background: rgba(255, 255, 255, 0.04);
394
+ }
395
+
396
+ .metric-value {
397
+ font-size: 28px;
398
+ font-weight: 800;
399
+ margin-bottom: 4px;
400
+ }
401
+
402
+ .metric-label {
403
+ font-size: 12px;
404
+ color: var(--muted);
405
+ }
406
+
407
+ .metric-trend {
408
+ display: inline-flex;
409
+ align-items: center;
410
+ gap: 4px;
411
+ margin-left: 8px;
412
+ font-size: 12px;
413
+ }
414
+
415
+ .trend-up { color: var(--success); }
416
+ .trend-down { color: var(--danger); }
417
+
418
+ /* Controls Section */
419
+ .controls-grid {
420
+ display: grid;
421
+ gap: 16px;
422
+ }
423
+
424
+ .control-group {
425
+ display: flex;
426
+ flex-direction: column;
427
+ gap: 8px;
428
+ }
429
+
430
+ .control-label {
431
+ font-size: 12px;
432
+ font-weight: 600;
433
+ color: var(--muted);
434
+ text-transform: uppercase;
435
+ letter-spacing: 0.5px;
436
+ }
437
+
438
+ select, input[type="range"] {
439
+ width: 100%;
440
+ padding: 10px;
441
+ background: rgba(255, 255, 255, 0.05);
442
+ border: 1px solid rgba(255, 255, 255, 0.1);
443
+ border-radius: 8px;
444
+ color: var(--text);
445
+ font-size: 14px;
446
+ transition: all 0.3s ease;
447
+ }
448
+
449
+ select:hover, input[type="range"]:hover {
450
+ background: rgba(255, 255, 255, 0.08);
451
+ border-color: rgba(59, 130, 246, 0.3);
452
+ }
453
+
454
+ .range-wrapper {
455
+ position: relative;
456
+ }
457
+
458
+ .range-value {
459
+ position: absolute;
460
+ right: 12px;
461
+ top: 50%;
462
+ transform: translateY(-50%);
463
+ font-size: 14px;
464
+ font-weight: 600;
465
+ color: var(--accent);
466
+ }
467
+
468
+ /* Toggle Switches */
469
+ .toggle-group {
470
+ display: flex;
471
+ flex-direction: column;
472
+ gap: 12px;
473
+ }
474
+
475
+ .toggle-item {
476
+ display: flex;
477
+ align-items: center;
478
+ justify-content: space-between;
479
+ padding: 12px;
480
+ background: rgba(255, 255, 255, 0.02);
481
+ border-radius: 8px;
482
+ transition: all 0.3s ease;
483
+ }
484
+
485
+ .toggle-item:hover {
486
+ background: rgba(255, 255, 255, 0.04);
487
+ }
488
+
489
+ .toggle-switch {
490
+ position: relative;
491
+ width: 48px;
492
+ height: 24px;
493
+ }
494
+
495
+ .toggle-switch input {
496
+ opacity: 0;
497
+ width: 0;
498
+ height: 0;
499
+ }
500
+
501
+ .toggle-slider {
502
+ position: absolute;
503
+ cursor: pointer;
504
+ inset: 0;
505
+ background: rgba(255, 255, 255, 0.1);
506
+ border-radius: 24px;
507
+ transition: 0.3s;
508
+ }
509
+
510
+ .toggle-slider::before {
511
+ position: absolute;
512
+ content: "";
513
+ height: 18px;
514
+ width: 18px;
515
+ left: 3px;
516
+ bottom: 3px;
517
+ background: white;
518
+ border-radius: 50%;
519
+ transition: 0.3s;
520
+ }
521
+
522
+ input:checked + .toggle-slider {
523
+ background: var(--accent);
524
+ }
525
+
526
+ input:checked + .toggle-slider::before {
527
+ transform: translateX(24px);
528
+ }
529
+
530
+ /* Log */
531
+ .log-container {
532
+ max-height: 300px;
533
+ overflow-y: auto;
534
+ background: rgba(0, 0, 0, 0.3);
535
+ border-radius: 8px;
536
+ padding: 12px;
537
+ font-family: 'Monaco', 'Courier New', monospace;
538
+ font-size: 12px;
539
+ line-height: 1.6;
540
+ }
541
+
542
+ .log-entry {
543
+ padding: 4px 0;
544
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
545
+ display: flex;
546
+ gap: 8px;
547
+ }
548
+
549
+ .log-time {
550
+ color: var(--muted);
551
+ flex-shrink: 0;
552
+ }
553
+
554
+ .log-entry.info { color: #06b6d4; }
555
+ .log-entry.warn { color: #f59e0b; }
556
+ .log-entry.error { color: #ef4444; }
557
+ .log-entry.success { color: #10b981; }
558
+
559
+ /* Charts Section */
560
+ .charts-grid {
561
+ display: grid;
562
+ grid-template-columns: repeat(2, 1fr);
563
+ gap: 24px;
564
+ margin-bottom: 24px;
565
+ }
566
+
567
+ /* Messages Section */
568
+ .messages-panel {
569
+ grid-column: 1 / -1;
570
+ }
571
+
572
+ .message-tabs {
573
+ display: flex;
574
+ gap: 8px;
575
+ margin-bottom: 16px;
576
+ }
577
+
578
+ .tab-btn {
579
+ flex: 1;
580
+ padding: 8px;
581
+ background: rgba(255, 255, 255, 0.05);
582
+ border: 1px solid rgba(255, 255, 255, 0.1);
583
+ border-radius: 8px;
584
+ color: var(--text);
585
+ cursor: pointer;
586
+ transition: all 0.3s ease;
587
+ }
588
+
589
+ .tab-btn.active {
590
+ background: var(--accent);
591
+ color: white;
592
+ border-color: var(--accent);
593
+ }
594
+
595
+ .message-content {
596
+ background: rgba(255, 255, 255, 0.02);
597
+ border: 1px solid rgba(255, 255, 255, 0.08);
598
+ border-radius: 8px;
599
+ padding: 16px;
600
+ min-height: 150px;
601
+ }
602
+
603
+ /* ISO Preset */
604
+ .iso-preset {
605
+ margin-bottom: 16px;
606
+ }
607
+
608
+ /* Footer */
609
+ footer {
610
+ text-align: center;
611
+ padding: 32px;
612
+ color: var(--muted);
613
+ font-size: 13px;
614
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
615
+ margin-top: 48px;
616
+ }
617
+
618
+ /* Responsive */
619
+ @media (max-width: 1400px) {
620
+ .dashboard-grid {
621
+ grid-template-columns: 1fr 1fr;
622
+ }
623
+ .dashboard-grid > *:last-child {
624
+ grid-column: 1 / -1;
625
+ }
626
+ }
627
+
628
+ @media (max-width: 768px) {
629
+ .dashboard-grid {
630
+ grid-template-columns: 1fr;
631
+ }
632
+ .channels-grid {
633
+ grid-template-columns: 1fr;
634
+ }
635
+ .charts-grid {
636
+ grid-template-columns: 1fr;
637
+ }
638
+ }
639
+ </style>
640
+ </head>
641
+ <body>
642
+ <header>
643
+ <div class="header-content">
644
+ <div class="header-left">
645
+ <h1>ACF Mission Control</h1>
646
+ <div class="header-meta">
647
+ <span class="status-indicator">
648
+ <span class="status-dot"></span>
649
+ <span>System Active</span>
650
+ </span>
651
+ <span>ISO Detection Probability: <strong id="detectionProb">0.1/year</strong></span>
652
+ <span>Simulation Time: <strong id="simTime">00:00</strong></span>
653
+ </div>
654
+ </div>
655
+ <div class="control-buttons">
656
+ <button id="btnStart" class="btn">▶ Start</button>
657
+ <button id="btnPause" class="btn">⏸ Pause</button>
658
+ <button id="btnReset" class="btn">↺ Reset</button>
659
+ <button id="btnInfo" class="btn">ℹ Framework</button>
660
+ </div>
661
+ </div>
662
+ </header>
663
+
664
+ <div class="container">
665
+ <!-- Phase Indicator -->
666
+ <div class="phase-indicator">
667
+ <div class="phase-timeline">
668
+ <div class="phase-item" id="phase1">
669
+ <div class="phase-dot">1</div>
670
+ <div>Pre-Detection</div>
671
+ </div>
672
+ <div class="phase-item" id="phase2">
673
+ <div class="phase-dot">2</div>
674
+ <div>Active Discovery</div>
675
+ </div>
676
+ <div class="phase-item" id="phase3">
677
+ <div class="phase-dot">3</div>
678
+ <div>Post-Confirmation</div>
679
+ </div>
680
+ </div>
681
+ </div>
682
+
683
+ <!-- ISO Preset Selector -->
684
+ <div class="panel iso-preset">
685
+ <div class="control-group">
686
+ <label class="control-label">ISO Example</label>
687
+ <select id="isoExample">
688
+ <option value="none">None (Custom)</option>
689
+ <option value="oumuamua">1I/'Oumuamua (Anomalous, Level 4)</option>
690
+ <option value="borisov">2I/Borisov (Natural Comet, Level 0)</option>
691
+ <option value="atlas">3I/ATLAS (Potential Anomaly, Level 4)</option>
692
+ </select>
693
+ </div>
694
+ </div>
695
+
696
+ <!-- Main Dashboard -->
697
+ <div class="dashboard-grid">
698
+ <!-- Left: Loeb Scale & Controls -->
699
+ <section>
700
+ <div class="panel">
701
+ <div class="panel-header">
702
+ <h2>Loeb Scale Assessment</h2>
703
+ <span class="panel-badge" id="loebBadge">Natural</span>
704
+ </div>
705
+ <div class="gauge-container">
706
+ <svg class="gauge-svg" viewBox="0 0 320 200">
707
+ <defs>
708
+ <linearGradient id="gaugeGradient" x1="0%" y1="0%" x2="100%" y2="0%">
709
+ <stop offset="0%" style="stop-color:#10b981;stop-opacity:1" />
710
+ <stop offset="30%" style="stop-color:#06b6d4;stop-opacity:1" />
711
+ <stop offset="60%" style="stop-color:#f59e0b;stop-opacity:1" />
712
+ <stop offset="100%" style="stop-color:#ef4444;stop-opacity:1" />
713
+ </linearGradient>
714
+ </defs>
715
+ <path d="M 40 160 A 120 120 0 0 1 280 160" stroke="rgba(255,255,255,0.1)" stroke-width="20" fill="none" stroke-linecap="round"/>
716
+ <path id="gaugePath" d="M 40 160 A 120 120 0 0 1 280 160" stroke="url(#gaugeGradient)" stroke-width="20" fill="none" stroke-linecap="round" stroke-dasharray="377" stroke-dashoffset="377"/>
717
+ <circle id="gaugePointer" cx="40" cy="160" r="8" fill="#fff"/>
718
+ </svg>
719
+ <div class="gauge-center">
720
+ <div class="gauge-value" id="loebValue">0.0</div>
721
+ <div class="gauge-label" id="loebLabel">Insignificant</div>
722
+ </div>
723
+ </div>
724
+ </div>
725
+
726
+ <div class="panel" style="margin-top: 16px;">
727
+ <h2>Simulation Controls</h2>
728
+ <div class="controls-grid">
729
+ <div class="control-group">
730
+ <label class="control-label">Scenario</label>
731
+ <select id="scenario">
732
+ <option value="baseline">Baseline Detection</option>
733
+ <option value="transparent">Transparent Communication</option>
734
+ <option value="crisis">Crisis Escalation (Fukushima-like)</option>
735
+ <option value="misinfo">Misinformation Surge (COVID-like)</option>
736
+ <option value="coordinated">Coordinated Response (Apophis-like)</option>
737
+ </select>
738
+ </div>
739
+ <div class="control-group">
740
+ <label class="control-label">Evidence Level</label>
741
+ <div class="range-wrapper">
742
+ <input type="range" id="evidence" min="0" max="10" step="0.1" value="0">
743
+ <span class="range-value" id="evidenceValue">0.0</span>
744
+ </div>
745
+ </div>
746
+ <div class="control-group">
747
+ <label class="control-label">AI Safeguards</label>
748
+ <div class="toggle-group">
749
+ <div class="toggle-item">
750
+ <span>Deepfake Detection</span>
751
+ <label class="toggle-switch">
752
+ <input type="checkbox" id="deepfakeToggle">
753
+ <span class="toggle-slider"></span>
754
+ </label>
755
+ </div>
756
+ <div class="toggle-item">
757
+ <span>LLM Pre-seeding</span>
758
+ <label class="toggle-switch">
759
+ <input type="checkbox" id="llmToggle">
760
+ <span class="toggle-slider"></span>
761
+ </label>
762
+ </div>
763
+ <div class="toggle-item">
764
+ <span>Global ISO Portal</span>
765
+ <label class="toggle-switch">
766
+ <input type="checkbox" id="portalToggle" checked>
767
+ <span class="toggle-slider"></span>
768
+ </label>
769
+ </div>
770
+ </div>
771
+ </div>
772
+ </div>
773
+ </div>
774
+ </section>
775
+
776
+ <!-- Center: SPEC/RI Channels & Effectiveness -->
777
+ <section>
778
+ <div class="panel">
779
+ <div class="panel-header">
780
+ <h2>SPEC/RI Channel Activation</h2>
781
+ <span class="panel-badge" id="channelStatus">Monitoring</span>
782
+ </div>
783
+ <div class="channels-grid">
784
+ <div class="channel-card sq">
785
+ <div class="channel-header">
786
+ <div class="channel-icon">📊</div>
787
+ <div>
788
+ <div class="channel-name">Systematic (SQ)</div>
789
+ </div>
790
+ </div>
791
+ <div class="channel-progress">
792
+ <div class="channel-progress-bar" id="sqBar" style="width: 20%"></div>
793
+ </div>
794
+ <div style="font-size: 12px; color: var(--muted);">
795
+ Institutional validation • Peer review • Scientific consensus
796
+ </div>
797
+ </div>
798
+ <div class="channel-card pq">
799
+ <div class="channel-header">
800
+ <div class="channel-icon">🛡️</div>
801
+ <div>
802
+ <div class="channel-name">Practical (PQ)</div>
803
+ </div>
804
+ </div>
805
+ <div class="channel-progress">
806
+ <div class="channel-progress-bar" id="pqBar" style="width: 20%"></div>
807
+ </div>
808
+ <div style="font-size: 12px; color: var(--muted);">
809
+ Safety assessment • Daily impact • Clear directives
810
+ </div>
811
+ </div>
812
+ <div class="channel-card eq">
813
+ <div class="channel-header">
814
+ <div class="channel-icon">💫</div>
815
+ <div>
816
+ <div class="channel-name">Emotional (EQ)</div>
817
+ </div>
818
+ </div>
819
+ <div class="channel-progress">
820
+ <div class="channel-progress-bar" id="eqBar" style="width: 20%"></div>
821
+ </div>
822
+ <div style="font-size: 12px; color: var(--muted);">
823
+ Human stories • Shared journey • Unity themes
824
+ </div>
825
+ </div>
826
+ <div class="channel-card cq">
827
+ <div class="channel-header">
828
+ <div class="channel-icon">🎨</div>
829
+ <div>
830
+ <div class="channel-name">Creative (CQ)</div>
831
+ </div>
832
+ </div>
833
+ <div class="channel-progress">
834
+ <div class="channel-progress-bar" id="cqBar" style="width: 20%"></div>
835
+ </div>
836
+ <div style="font-size: 12px; color: var(--muted);">
837
+ Visualizations • Analogies • Interactive content
838
+ </div>
839
+ </div>
840
+ </div>
841
+ </div>
842
+
843
+ <div class="panel" style="margin-top: 16px;">
844
+ <h2>Communication Effectiveness</h2>
845
+ <canvas id="effectivenessChart" height="200"></canvas>
846
+ </div>
847
+ </section>
848
+
849
+ <!-- Right: Metrics & Log -->
850
+ <section>
851
+ <div class="panel">
852
+ <h2>Live Metrics</h2>
853
+ <div class="metrics-grid">
854
+ <div class="metric-card">
855
+ <div class="metric-value">
856
+ <span id="trustValue">65</span>%
857
+ <span class="metric-trend trend-up">↑</span>
858
+ </div>
859
+ <div class="metric-label">Public Trust</div>
860
+ </div>
861
+ <div class="metric-card">
862
+ <div class="metric-value">
863
+ <span id="anxietyValue">18</span>%
864
+ <span class="metric-trend trend-down">↓</span>
865
+ </div>
866
+ <div class="metric-label">Anxiety Level</div>
867
+ </div>
868
+ <div class="metric-card">
869
+ <div class="metric-value">
870
+ <span id="coherenceValue">72</span>%
871
+ <span class="metric-trend trend-up">↑</span>
872
+ </div>
873
+ <div class="metric-label">Message Coherence</div>
874
+ </div>
875
+ <div class="metric-card">
876
+ <div class="metric-value">
877
+ <span id="misinfoValue">4</span>%
878
+ <span class="metric-trend trend-down">↓</span>
879
+ </div>
880
+ <div class="metric-label">Misinformation</div>
881
+ </div>
882
+ </div>
883
+ </div>
884
+
885
+ <div class="panel" style="margin-top: 16px;">
886
+ <h2>AI System Metrics</h2>
887
+ <div class="metrics-grid">
888
+ <div class="metric-card">
889
+ <div class="metric-value">
890
+ <span id="hallValue">5.0</span>%
891
+ </div>
892
+ <div class="metric-label">LLM Hallucination</div>
893
+ </div>
894
+ <div class="metric-card">
895
+ <div class="metric-value">
896
+ <span id="deepfakeValue">49</span>%
897
+ </div>
898
+ <div class="metric-label">Deepfake Prevalence</div>
899
+ </div>
900
+ <div class="metric-card">
901
+ <div class="metric-value">
902
+ <span id="reachValue">0</span>M
903
+ </div>
904
+ <div class="metric-label">Global Reach</div>
905
+ </div>
906
+ <div class="metric-card">
907
+ <div class="metric-value">
908
+ <span id="responseTime">0</span>ms
909
+ </div>
910
+ <div class="metric-label">Response Time</div>
911
+ </div>
912
+ </div>
913
+ </div>
914
+
915
+ <div class="panel" style="margin-top: 16px;">
916
+ <h2>Mission Log</h2>
917
+ <div class="log-container" id="log"></div>
918
+ </div>
919
+ </section>
920
+ </div>
921
+
922
+ <!-- New Messages Panel -->
923
+ <div class="panel messages-panel">
924
+ <div class="panel-header">
925
+ <h2>Generated Messages by Channel</h2>
926
+ <span class="panel-badge" id="messageStatus">Level-Based</span>
927
+ </div>
928
+ <div class="message-tabs">
929
+ <button class="tab-btn active" data-tab="sq">SQ</button>
930
+ <button class="tab-btn" data-tab="pq">PQ</button>
931
+ <button class="tab-btn" data-tab="eq">EQ</button>
932
+ <button class="tab-btn" data-tab="cq">CQ</button>
933
+ </div>
934
+ <div class="message-content" id="messageContent"></div>
935
+ </div>
936
+
937
+ <!-- Charts Section -->
938
+ <div class="charts-grid">
939
+ <div class="panel">
940
+ <h2>Public Response Dynamics</h2>
941
+ <canvas id="publicChart" height="200"></canvas>
942
+ </div>
943
+ <div class="panel">
944
+ <h2>Information Warfare Metrics</h2>
945
+ <canvas id="infowarChart" height="200"></canvas>
946
+ </div>
947
+ </div>
948
+ </div>
949
+
950
+ <footer>
951
+ <p>ACF Mission Control v2.2 | Based on the Adaptive Communication Framework for Extraterrestrial Intelligence Discovery (Eldadi et al., 2025)</p>
952
+ <p>Data sources: Pew Research (2021) for public trust; LLM benchmarks (2025) for hallucination; Deepfake studies (2025) for prevalence; LSST estimates (2025) for detection rates</p>
953
+ <p>Simulation for research and training purposes | Not for operational use</p>
954
+ </footer>
955
+
956
+ <script>
957
+ // Enhanced State Management with Data from Paper and External Sources
958
+ class SimulationState {
959
+ constructor() {
960
+ this.reset();
961
+ }
962
+
963
+ reset() {
964
+ this.time = 0;
965
+ this.running = false;
966
+ this.scenario = 'baseline';
967
+ this.loeb = 0;
968
+ this.phase = 1;
969
+
970
+ // SPEC/RI Channels - Initial low activation
971
+ this.channels = {
972
+ sq: 0.2, // Systematic
973
+ pq: 0.15, // Practical (adjusted from paper emphasis)
974
+ eq: 0.1, // Emotional
975
+ cq: 0.15 // Creative
976
+ };
977
+
978
+ // Public metrics - Updated with latest data
979
+ this.trust = 65; // Pew 2021, no newer public survey found; scientist agreement ~67% for complex life (2025)
980
+ this.anxiety = 18; // Baseline, no specific data
981
+ this.coherence = 72; // Baseline
982
+ this.misinfo = 4; // Baseline
983
+
984
+ // AI metrics - Updated with 2025 benchmarks
985
+ this.hallucination = 15.0; // GPT-4.5 hallucination rate ~15% (2025 benchmark)
986
+ this.deepfakes = 38; // Human deepfake detection accuracy ~62% for images, implying ~38% undetected (2025)
987
+ this.reach = 0;
988
+ this.responseTime = 0;
989
+
990
+ // Controls
991
+ this.safeguards = {
992
+ deepfake: false,
993
+ llm: false,
994
+ portal: true
995
+ };
996
+
997
+ // History for charts
998
+ this.history = {
999
+ labels: [],
1000
+ trust: [],
1001
+ anxiety: [],
1002
+ coherence: [],
1003
+ misinfo: [],
1004
+ hallucination: [],
1005
+ deepfakes: []
1006
+ };
1007
+
1008
+ // Track triggers
1009
+ this.levelTriggered = {4: false, 8: false};
1010
+
1011
+ // Sample messages from paper, keyed by level groups
1012
+ this.messages = {
1013
+ sq: {
1014
+ low: "The International Astronomical Union confirms that fourteen independent research teams have verified the anomalous characteristics of interstellar object 3I/ATLAS through peer-reviewed analysis.",
1015
+ mid: "International teams are conducting coordinated observations following established protocols.",
1016
+ high: "Systematic establishment of facts: The object is confirmed technological based on convergent evidence from multiple sources."
1017
+ },
1018
+ pq: {
1019
+ low: "The object poses no threat to Earth. All essential services, from healthcare to transportation, continue operating normally.",
1020
+ mid: "No immediate action required; the object poses no threat.",
1021
+ high: "Practical immediate implications: Redirect a substantial fraction of military budgets toward new defense technologies and scientific research."
1022
+ },
1023
+ eq: {
1024
+ low: "Dr. Smith, who first noticed the anomaly, describes feeling 'humbled by the possibility we might not be alone, it reminds us that we're all part of something larger'.",
1025
+ mid: "Scientists worldwide are working together, embodying humanity's collective curiosity.",
1026
+ high: "Emotional human context: We are all in the same boat, and if one of us rocks the boat, all of us might be at risk of drowning."
1027
+ },
1028
+ cq: {
1029
+ low: "Interactive 3D models allowing users to explore the object's trajectory or comparing its shape to familiar objects like 'a cosmic pancake.'",
1030
+ mid: "Interactive trajectory models and comparison graphics engage public attention constructively.",
1031
+ high: "Creative future vision: Global commemoration events and artistic collaborations create shared experience transcending national boundaries."
1032
+ }
1033
+ };
1034
+ }
1035
+
1036
+ update(dt) {
1037
+ if (!this.running) return;
1038
+
1039
+ this.time += dt;
1040
+
1041
+ // Update phase based on Loeb scale from paper
1042
+ if (this.loeb >= 8) this.phase = 3;
1043
+ else if (this.loeb >= 4) this.phase = 2;
1044
+ else this.phase = 1;
1045
+
1046
+ // Update channels based on phase and paper descriptions
1047
+ this.updateChannels();
1048
+ this.updatePublicMetrics();
1049
+ this.updateAIMetrics();
1050
+ this.updateHistory();
1051
+ }
1052
+
1053
+ updateChannels() {
1054
+ const L = this.loeb;
1055
+
1056
+ // Phase-dependent channel activation from paper
1057
+ if (this.phase === 1) {
1058
+ // Pre-detection: SQ dominates
1059
+ this.channels.sq = this.lerp(this.channels.sq, 0.5 + L * 0.05, 0.1);
1060
+ this.channels.pq = this.lerp(this.channels.pq, 0.15 + L * 0.03, 0.1);
1061
+ this.channels.eq = this.lerp(this.channels.eq, 0.1 + L * 0.02, 0.1);
1062
+ this.channels.cq = this.lerp(this.channels.cq, 0.15 + L * 0.03, 0.1);
1063
+ } else if (this.phase === 2) {
1064
+ // Active discovery: All activated, PQ emphasized
1065
+ this.channels.sq = this.lerp(this.channels.sq, 0.6 + L * 0.06, 0.15);
1066
+ this.channels.pq = this.lerp(this.channels.pq, 0.7 + L * 0.07, 0.15); // Higher for practical
1067
+ this.channels.eq = this.lerp(this.channels.eq, 0.5 + L * 0.05, 0.15);
1068
+ this.channels.cq = this.lerp(this.channels.cq, 0.55 + L * 0.06, 0.15);
1069
+ } else {
1070
+ // Post-confirmation: All high, EQ and CQ for adaptation
1071
+ this.channels.sq = this.lerp(this.channels.sq, 0.85, 0.2);
1072
+ this.channels.pq = this.lerp(this.channels.pq, 0.8, 0.2);
1073
+ this.channels.eq = this.lerp(this.channels.eq, 0.9, 0.2); // Higher for unity
1074
+ this.channels.cq = this.lerp(this.channels.cq, 0.9, 0.2); // Higher for meaning-making
1075
+ }
1076
+
1077
+ // Scenario modifiers based on paper cases
1078
+ switch (this.scenario) {
1079
+ case 'transparent':
1080
+ this.channels.sq *= 1.2;
1081
+ this.channels.pq *= 1.15;
1082
+ break;
1083
+ case 'crisis':
1084
+ this.misinfo += 0.2; // Fukushima-like trust collapse
1085
+ this.trust *= 0.95;
1086
+ break;
1087
+ case 'misinfo':
1088
+ this.hallucination *= 1.5; // COVID-like infodemic
1089
+ this.misinfo *= 2;
1090
+ break;
1091
+ case 'coordinated':
1092
+ Object.keys(this.channels).forEach(key => this.channels[key] = Math.min(1, this.channels[key] * 1.1)); // Apophis-like
1093
+ break;
1094
+ }
1095
+
1096
+ // Normalize to max 1.0
1097
+ Object.keys(this.channels).forEach(key => {
1098
+ this.channels[key] = Math.min(1, Math.max(0, this.channels[key]));
1099
+ });
1100
+ }
1101
+
1102
+ updatePublicMetrics() {
1103
+ const channelValues = Object.values(this.channels);
1104
+ const mean = channelValues.reduce((a, b) => a + b, 0) / channelValues.length;
1105
+ const variance = channelValues.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / channelValues.length;
1106
+ const stdDev = Math.sqrt(variance);
1107
+
1108
+ const targetCoherence = Math.max(0, Math.min(100, 100 * (1 - stdDev * 2)));
1109
+ this.coherence = this.lerp(this.coherence, targetCoherence, 0.1);
1110
+
1111
+ let trustDelta = (this.coherence - 50) * 0.005 - this.misinfo * 0.01;
1112
+ if (this.safeguards.portal) trustDelta += 0.5;
1113
+ if (this.safeguards.llm) trustDelta += 0.3;
1114
+ if (this.safeguards.deepfake) trustDelta += 0.2;
1115
+ this.trust = Math.max(0, Math.min(100, this.trust + trustDelta));
1116
+
1117
+ let anxietyDelta = this.loeb * 0.5 - this.channels.pq * 10 - this.trust * 0.01 + this.misinfo * 0.1;
1118
+ this.anxiety = Math.max(0, Math.min(100, this.anxiety + anxietyDelta * 0.1));
1119
+
1120
+ let misinfoDelta = this.loeb * 0.1 - this.coherence * 0.01;
1121
+ if (this.scenario === 'misinfo') misinfoDelta *= 3;
1122
+ if (this.safeguards.portal) misinfoDelta *= 0.7;
1123
+ if (this.safeguards.llm) misinfoDelta *= 0.6;
1124
+ this.misinfo = Math.max(0, Math.min(100, this.misinfo + misinfoDelta * 0.1));
1125
+ }
1126
+
1127
+ updateAIMetrics() {
1128
+ let hallTarget = 15.0; // Updated base from 2025 benchmarks
1129
+ if (this.safeguards.llm) hallTarget = 7.5; // Halved with safeguards
1130
+ if (this.scenario === 'crisis') hallTarget *= 1.5;
1131
+ if (this.loeb > 7) hallTarget *= 1.2; // Increase in high levels
1132
+ this.hallucination = this.lerp(this.hallucination, hallTarget, 0.1);
1133
+
1134
+ let deepfakeTarget = 38; // Updated from 2025 stats
1135
+ if (this.loeb > 4) deepfakeTarget = 60; // Increases with attention
1136
+ if (this.safeguards.deepfake) deepfakeTarget *= 0.3;
1137
+ if (this.scenario === 'misinfo') deepfakeTarget *= 2;
1138
+ this.deepfakes = this.lerp(this.deepfakes, deepfakeTarget, 0.1);
1139
+
1140
+ if (this.loeb >= 4) {
1141
+ let reachGrowth = 0.5 + (this.loeb - 4) * 0.5;
1142
+ if (this.safeguards.portal) reachGrowth += 2;
1143
+ if (this.phase === 3) reachGrowth *= 5;
1144
+ this.reach = Math.min(8000, this.reach + reachGrowth);
1145
+ }
1146
+
1147
+ this.responseTime = Math.max(50, 500 - this.reach * 0.05 + this.misinfo * 2);
1148
+ }
1149
+
1150
+ updateHistory() {
1151
+ if (this.history.labels.length > 50) {
1152
+ Object.keys(this.history).forEach(key => this.history[key].shift());
1153
+ }
1154
+
1155
+ this.history.labels.push(this.formatTime());
1156
+ this.history.trust.push(this.trust);
1157
+ this.history.anxiety.push(this.anxiety);
1158
+ this.history.coherence.push(this.coherence);
1159
+ this.history.misinfo.push(this.misinfo);
1160
+ this.history.hallucination.push(this.hallucination);
1161
+ this.history.deepfakes.push(this.deepfakes);
1162
+ }
1163
+
1164
+ getMessageLevel() {
1165
+ if (this.loeb < 4) return 'low';
1166
+ if (this.loeb < 8) return 'mid';
1167
+ return 'high';
1168
+ }
1169
+
1170
+ lerp(a, b, t) {
1171
+ return a + (b - a) * Math.min(1, Math.max(0, t));
1172
+ }
1173
+
1174
+ formatTime() {
1175
+ const minutes = Math.floor(this.time / 60);
1176
+ const seconds = Math.floor(this.time % 60);
1177
+ return `${minutes}:${seconds.toString().padStart(2, '0')}`;
1178
+ }
1179
+ }
1180
+
1181
+ // Initialize simulation
1182
+ const state = new SimulationState();
1183
+ let animationId = null;
1184
+ let lastTime = 0;
1185
+
1186
+ // UI Elements
1187
+ const elements = {
1188
+ // Controls
1189
+ btnStart: document.getElementById('btnStart'),
1190
+ btnPause: document.getElementById('btnPause'),
1191
+ btnReset: document.getElementById('btnReset'),
1192
+ btnInfo: document.getElementById('btnInfo'),
1193
+ scenario: document.getElementById('scenario'),
1194
+ evidence: document.getElementById('evidence'),
1195
+ evidenceValue: document.getElementById('evidenceValue'),
1196
+ deepfakeToggle: document.getElementById('deepfakeToggle'),
1197
+ llmToggle: document.getElementById('llmToggle'),
1198
+ portalToggle: document.getElementById('portalToggle'),
1199
+ isoExample: document.getElementById('isoExample'),
1200
+
1201
+ // Display
1202
+ simTime: document.getElementById('simTime'),
1203
+ detectionProb: document.getElementById('detectionProb'),
1204
+ loebValue: document.getElementById('loebValue'),
1205
+ loebLabel: document.getElementById('loebLabel'),
1206
+ loebBadge: document.getElementById('loebBadge'),
1207
+ gaugePath: document.getElementById('gaugePath'),
1208
+ gaugePointer: document.getElementById('gaugePointer'),
1209
+
1210
+ // Channels
1211
+ sqBar: document.getElementById('sqBar'),
1212
+ pqBar: document.getElementById('pqBar'),
1213
+ eqBar: document.getElementById('eqBar'),
1214
+ cqBar: document.getElementById('cqBar'),
1215
+ channelStatus: document.getElementById('channelStatus'),
1216
+
1217
+ // Metrics
1218
+ trustValue: document.getElementById('trustValue'),
1219
+ anxietyValue: document.getElementById('anxietyValue'),
1220
+ coherenceValue: document.getElementById('coherenceValue'),
1221
+ misinfoValue: document.getElementById('misinfoValue'),
1222
+ hallValue: document.getElementById('hallValue'),
1223
+ deepfakeValue: document.getElementById('deepfakeValue'),
1224
+ reachValue: document.getElementById('reachValue'),
1225
+ responseTime: document.getElementById('responseTime'),
1226
+
1227
+ // Log
1228
+ log: document.getElementById('log'),
1229
+
1230
+ // Messages
1231
+ messageTabs: document.querySelectorAll('.tab-btn'),
1232
+ messageContent: document.getElementById('messageContent'),
1233
+ messageStatus: document.getElementById('messageStatus')
1234
+ };
1235
+
1236
+ // ISO Examples Data (based on papers)
1237
+ const isoExamples = {
1238
+ oumuamua: {
1239
+ loeb: 4.0,
1240
+ description: "Anomalous non-gravitational acceleration without coma",
1241
+ anomalyLevel: 'high'
1242
+ },
1243
+ borisov: {
1244
+ loeb: 0.0,
1245
+ description: "Natural cometary object with outgassing",
1246
+ anomalyLevel: 'low'
1247
+ },
1248
+ atlas: {
1249
+ loeb: 4.0,
1250
+ description: "Potential technosignature indicators",
1251
+ anomalyLevel: 'medium'
1252
+ }
1253
+ };
1254
+
1255
+ // Charts
1256
+ let publicChart, infowarChart, effectivenessChart;
1257
+
1258
+ function initCharts() {
1259
+ const chartOptions = {
1260
+ responsive: true,
1261
+ maintainAspectRatio: false,
1262
+ plugins: {
1263
+ legend: {
1264
+ labels: { color: '#94a3b8', font: { size: 11 } }
1265
+ }
1266
+ },
1267
+ scales: {
1268
+ x: {
1269
+ ticks: { color: '#64748b', font: { size: 10 } },
1270
+ grid: { color: 'rgba(255,255,255,0.05)' }
1271
+ },
1272
+ y: {
1273
+ min: 0,
1274
+ max: 100,
1275
+ ticks: { color: '#64748b', font: { size: 10 } },
1276
+ grid: { color: 'rgba(255,255,255,0.05)' }
1277
+ }
1278
+ }
1279
+ };
1280
+
1281
+ publicChart = new Chart(document.getElementById('publicChart'), {
1282
+ type: 'line',
1283
+ data: {
1284
+ labels: [],
1285
+ datasets: [
1286
+ {
1287
+ label: 'Trust',
1288
+ data: [],
1289
+ borderColor: '#10b981',
1290
+ backgroundColor: 'rgba(16, 185, 129, 0.1)',
1291
+ tension: 0.4
1292
+ },
1293
+ {
1294
+ label: 'Anxiety',
1295
+ data: [],
1296
+ borderColor: '#f59e0b',
1297
+ backgroundColor: 'rgba(245, 158, 11, 0.1)',
1298
+ tension: 0.4
1299
+ },
1300
+ {
1301
+ label: 'Coherence',
1302
+ data: [],
1303
+ borderColor: '#3b82f6',
1304
+ backgroundColor: 'rgba(59, 130, 246, 0.1)',
1305
+ tension: 0.4
1306
+ }
1307
+ ]
1308
+ },
1309
+ options: chartOptions
1310
+ });
1311
+
1312
+ infowarChart = new Chart(document.getElementById('infowarChart'), {
1313
+ type: 'line',
1314
+ data: {
1315
+ labels: [],
1316
+ datasets: [
1317
+ {
1318
+ label: 'Misinformation',
1319
+ data: [],
1320
+ borderColor: '#ef4444',
1321
+ backgroundColor: 'rgba(239, 68, 68, 0.1)',
1322
+ tension: 0.4
1323
+ },
1324
+ {
1325
+ label: 'Hallucination',
1326
+ data: [],
1327
+ borderColor: '#8b5cf6',
1328
+ backgroundColor: 'rgba(139, 92, 246, 0.1)',
1329
+ tension: 0.4
1330
+ },
1331
+ {
1332
+ label: 'Deepfakes',
1333
+ data: [],
1334
+ borderColor: '#ec4899',
1335
+ backgroundColor: 'rgba(236, 72, 153, 0.1)',
1336
+ tension: 0.4
1337
+ }
1338
+ ]
1339
+ },
1340
+ options: chartOptions
1341
+ });
1342
+
1343
+ effectivenessChart = new Chart(document.getElementById('effectivenessChart'), {
1344
+ type: 'radar',
1345
+ data: {
1346
+ labels: ['Systematic', 'Practical', 'Emotional', 'Creative'],
1347
+ datasets: [{
1348
+ label: 'Channel Activation',
1349
+ data: [20, 20, 20, 20],
1350
+ borderColor: '#3b82f6',
1351
+ backgroundColor: 'rgba(59, 130, 246, 0.2)',
1352
+ pointBackgroundColor: '#3b82f6',
1353
+ pointBorderColor: '#fff',
1354
+ pointHoverBackgroundColor: '#fff',
1355
+ pointHoverBorderColor: '#3b82f6'
1356
+ }]
1357
+ },
1358
+ options: {
1359
+ responsive: true,
1360
+ maintainAspectRatio: false,
1361
+ plugins: {
1362
+ legend: { display: false }
1363
+ },
1364
+ scales: {
1365
+ r: {
1366
+ min: 0,
1367
+ max: 100,
1368
+ ticks: {
1369
+ color: '#64748b',
1370
+ backdropColor: 'transparent'
1371
+ },
1372
+ grid: { color: 'rgba(255,255,255,0.1)' },
1373
+ pointLabels: { color: '#94a3b8' }
1374
+ }
1375
+ }
1376
+ }
1377
+ });
1378
+ }
1379
+
1380
+ function updateUI() {
1381
+ // Time
1382
+ elements.simTime.textContent = state.formatTime();
1383
+
1384
+ // Detection probability - Updated with 2025 LSST estimates (1-2/year)
1385
+ const baseRate = 0.1; // 1 per decade
1386
+ const lsstRate = 1.5; // Average of 0.9-1.9/year from 2025 estimates
1387
+ const detProb = (baseRate + (lsstRate - baseRate) * (state.loeb / 10)).toFixed(1);
1388
+ elements.detectionProb.textContent = `${detProb}/year`;
1389
+
1390
+ // Loeb Scale
1391
+ elements.loebValue.textContent = state.loeb.toFixed(1);
1392
+ updateLoebLabel();
1393
+ updateGauge();
1394
+
1395
+ // Channels
1396
+ elements.sqBar.style.width = `${state.channels.sq * 100}%`;
1397
+ elements.pqBar.style.width = `${state.channels.pq * 100}%`;
1398
+ elements.eqBar.style.width = `${state.channels.eq * 100}%`;
1399
+ elements.cqBar.style.width = `${state.channels.cq * 100}%`;
1400
+
1401
+ // Channel status
1402
+ if (state.phase === 1) elements.channelStatus.textContent = 'Monitoring (SQ Dominant)';
1403
+ else if (state.phase === 2) elements.channelStatus.textContent = 'Active (All Channels)';
1404
+ else elements.channelStatus.textContent = 'Full Activation (EQ/CQ Emphasis)';
1405
+
1406
+ // Metrics
1407
+ elements.trustValue.textContent = Math.round(state.trust);
1408
+ elements.anxietyValue.textContent = Math.round(state.anxiety);
1409
+ elements.coherenceValue.textContent = Math.round(state.coherence);
1410
+ elements.misinfoValue.textContent = Math.round(state.misinfo);
1411
+ elements.hallValue.textContent = state.hallucination.toFixed(1);
1412
+ elements.deepfakeValue.textContent = Math.round(state.deepfakes);
1413
+ elements.reachValue.textContent = Math.round(state.reach);
1414
+ elements.responseTime.textContent = Math.round(state.responseTime);
1415
+
1416
+ // Update phase indicators
1417
+ updatePhaseIndicators();
1418
+
1419
+ // Update charts
1420
+ updateCharts();
1421
+
1422
+ // Update messages
1423
+ updateMessages();
1424
+ }
1425
+
1426
+ function updateLoebLabel() {
1427
+ const L = state.loeb;
1428
+ let label, badge;
1429
+
1430
+ if (L < 1) {
1431
+ label = 'Insignificant';
1432
+ badge = 'Natural';
1433
+ } else if (L < 2) {
1434
+ label = 'Natural Phenomenon';
1435
+ badge = 'Natural';
1436
+ } else if (L < 4) {
1437
+ label = 'Anomalous';
1438
+ badge = 'Anomaly';
1439
+ } else if (L < 7) {
1440
+ label = 'Suspected Technology';
1441
+ badge = 'Potential Tech';
1442
+ } else if (L < 9) {
1443
+ label = 'Likely Technology';
1444
+ badge = 'Likely Tech';
1445
+ } else {
1446
+ label = 'Confirmed Technology';
1447
+ badge = 'Confirmed';
1448
+ }
1449
+
1450
+ elements.loebLabel.textContent = label;
1451
+ elements.loebBadge.textContent = badge;
1452
+ elements.messageStatus.textContent = `${label} (Level ${L.toFixed(1)})`;
1453
+ }
1454
+
1455
+ function updateGauge() {
1456
+ const percent = state.loeb / 10;
1457
+ const offset = 377 * (1 - percent);
1458
+ elements.gaugePath.style.strokeDashoffset = offset;
1459
+
1460
+ const angle = -Math.PI + (Math.PI * percent);
1461
+ const x = 160 + 120 * Math.cos(angle);
1462
+ const y = 160 + 120 * Math.sin(angle);
1463
+ elements.gaugePointer.setAttribute('cx', x);
1464
+ elements.gaugePointer.setAttribute('cy', y);
1465
+ }
1466
+
1467
+ function updatePhaseIndicators() {
1468
+ document.querySelectorAll('.phase-item').forEach(item => item.classList.remove('active', 'completed'));
1469
+
1470
+ for (let i = 1; i < state.phase; i++) {
1471
+ document.getElementById(`phase${i}`).classList.add('completed');
1472
+ }
1473
+ document.getElementById(`phase${state.phase}`).classList.add('active');
1474
+ }
1475
+
1476
+ function updateCharts() {
1477
+ publicChart.data.labels = state.history.labels;
1478
+ publicChart.data.datasets[0].data = state.history.trust;
1479
+ publicChart.data.datasets[1].data = state.history.anxiety;
1480
+ publicChart.data.datasets[2].data = state.history.coherence;
1481
+ publicChart.update('none');
1482
+
1483
+ infowarChart.data.labels = state.history.labels;
1484
+ infowarChart.data.datasets[0].data = state.history.misinfo;
1485
+ infowarChart.data.datasets[1].data = state.history.hallucination;
1486
+ infowarChart.data.datasets[2].data = state.history.deepfakes;
1487
+ infowarChart.update('none');
1488
+
1489
+ effectivenessChart.data.datasets[0].data = [
1490
+ state.channels.sq * 100,
1491
+ state.channels.pq * 100,
1492
+ state.channels.eq * 100,
1493
+ state.channels.cq * 100
1494
+ ];
1495
+ effectivenessChart.update('none');
1496
+ }
1497
+
1498
+ function updateMessages() {
1499
+ const level = state.getMessageLevel();
1500
+ const activeTab = document.querySelector('.tab-btn.active').dataset.tab;
1501
+ elements.messageContent.innerHTML = `<p>${state.messages[activeTab][level]}</p>`;
1502
+ }
1503
+
1504
+ function addLog(message, type = 'info') {
1505
+ const entry = document.createElement('div');
1506
+ entry.className = `log-entry ${type}`;
1507
+
1508
+ const time = document.createElement('span');
1509
+ time.className = 'log-time';
1510
+ time.textContent = `[${state.formatTime()}]`;
1511
+
1512
+ const content = document.createElement('span');
1513
+ content.textContent = message;
1514
+
1515
+ entry.appendChild(time);
1516
+ entry.appendChild(content);
1517
+ elements.log.insertBefore(entry, elements.log.firstChild);
1518
+
1519
+ while (elements.log.children.length > 50) {
1520
+ elements.log.removeChild(elements.log.lastChild);
1521
+ }
1522
+ }
1523
+
1524
+ function loadISOExample() {
1525
+ const value = elements.isoExample.value;
1526
+ if (value === 'none') return;
1527
+
1528
+ const example = isoExamples[value];
1529
+ state.loeb = example.loeb;
1530
+ elements.evidence.value = state.loeb;
1531
+ elements.evidenceValue.textContent = state.loeb.toFixed(1);
1532
+ addLog(`Loaded ISO example: ${value.toUpperCase()} - ${example.description}`, 'info');
1533
+ updateUI();
1534
+ }
1535
+
1536
+ function simulate(currentTime) {
1537
+ if (state.running) {
1538
+ const dt = Math.min((currentTime - lastTime) / 1000, 0.1);
1539
+ lastTime = currentTime;
1540
+
1541
+ state.update(dt);
1542
+
1543
+ // Auto-adjust Loeb based on scenario
1544
+ if (state.scenario !== 'baseline') {
1545
+ let loebDrift = 0;
1546
+ switch (state.scenario) {
1547
+ case 'transparent': loebDrift = 0.005; break;
1548
+ case 'crisis': loebDrift = 0.015; break;
1549
+ case 'misinfo': loebDrift = 0.008; break;
1550
+ case 'coordinated': loebDrift = 0.01; break;
1551
+ }
1552
+ state.loeb = Math.min(10, state.loeb + loebDrift);
1553
+ elements.evidence.value = state.loeb;
1554
+ elements.evidenceValue.textContent = state.loeb.toFixed(1);
1555
+ }
1556
+
1557
+ // Trigger events at thresholds from paper
1558
+ if (Math.floor(state.loeb) === 4 && !state.levelTriggered[4]) {
1559
+ state.levelTriggered[4] = true;
1560
+ addLog('ALERT: Level 4 reached - Potential Technosignature Indicators', 'warn');
1561
+ addLog('Activating all SPEC/RI channels simultaneously', 'success');
1562
+ addLog('Global ISO Status Portal now online', 'success');
1563
+ }
1564
+
1565
+ if (Math.floor(state.loeb) === 8 && !state.levelTriggered[8]) {
1566
+ state.levelTriggered[8] = true;
1567
+ addLog('CRITICAL: Level 8 - Confirmed Technology', 'error');
1568
+ addLog('Initiating full transparency protocols with emphasis on EQ and CQ', 'warn');
1569
+ addLog('Redirecting resources as per Loeb principles', 'info');
1570
+ }
1571
+
1572
+ updateUI();
1573
+ animationId = requestAnimationFrame(simulate);
1574
+ }
1575
+ }
1576
+
1577
+ // Event Listeners
1578
+ elements.btnStart.addEventListener('click', () => {
1579
+ state.running = true;
1580
+ lastTime = performance.now();
1581
+ elements.btnStart.classList.add('active');
1582
+ elements.btnPause.classList.remove('active');
1583
+ addLog('Simulation started', 'success');
1584
+ simulate(performance.now());
1585
+ });
1586
+
1587
+ elements.btnPause.addEventListener('click', () => {
1588
+ state.running = false;
1589
+ elements.btnPause.classList.add('active');
1590
+ elements.btnStart.classList.remove('active');
1591
+ if (animationId) cancelAnimationFrame(animationId);
1592
+ addLog('Simulation paused', 'warn');
1593
+ });
1594
+
1595
+ elements.btnReset.addEventListener('click', () => {
1596
+ state.reset();
1597
+ elements.btnStart.classList.remove('active');
1598
+ elements.btnPause.classList.remove('active');
1599
+ if (animationId) cancelAnimationFrame(animationId);
1600
+
1601
+ // Reset UI
1602
+ elements.evidence.value = 0;
1603
+ elements.evidenceValue.textContent = '0.0';
1604
+ elements.scenario.value = 'baseline';
1605
+ elements.deepfakeToggle.checked = false;
1606
+ elements.llmToggle.checked = false;
1607
+ elements.portalToggle.checked = true;
1608
+ elements.isoExample.value = 'none';
1609
+
1610
+ updateUI();
1611
+ addLog('System reset to initial conditions', 'info');
1612
+ });
1613
+
1614
+ elements.btnInfo.addEventListener('click', () => {
1615
+ addLog('ACF: Adaptive Communication Framework for ETI Discovery', 'info');
1616
+ addLog('Integrates SPEC/RI channels: SQ, PQ, EQ, CQ', 'info');
1617
+ addLog('Calibrated to Loeb Scale (0-10)', 'info');
1618
+ addLog('Lessons from COVID-19, Fukushima, Apophis', 'info');
1619
+ addLog('Developed by Eldadi, Tenenbaum & Loeb (2025)', 'info');
1620
+ addLog('Data-integrated: LSST rates (1.5/year avg, 2025 est.), LLM hallucination (15%, 2025), Deepfake undetected (38%, 2025)', 'info');
1621
+ });
1622
+
1623
+ elements.scenario.addEventListener('change', (e) => {
1624
+ state.scenario = e.target.value;
1625
+ addLog(`Scenario changed to: ${e.target.options[e.target.selectedIndex].text}`, 'info');
1626
+ });
1627
+
1628
+ elements.evidence.addEventListener('input', (e) => {
1629
+ state.loeb = parseFloat(e.target.value);
1630
+ elements.evidenceValue.textContent = state.loeb.toFixed(1);
1631
+ updateUI();
1632
+ });
1633
+
1634
+ elements.deepfakeToggle.addEventListener('change', (e) => {
1635
+ state.safeguards.deepfake = e.target.checked;
1636
+ addLog(`Deepfake detection ${e.target.checked ? 'enabled' : 'disabled'}`, e.target.checked ? 'success' : 'warn');
1637
+ });
1638
+
1639
+ elements.llmToggle.addEventListener('change', (e) => {
1640
+ state.safeguards.llm = e.target.checked;
1641
+ addLog(`LLM pre-seeding ${e.target.checked ? 'activated' : 'deactivated'}`, e.target.checked ? 'success' : 'warn');
1642
+ });
1643
+
1644
+ elements.portalToggle.addEventListener('change', (e) => {
1645
+ state.safeguards.portal = e.target.checked;
1646
+ addLog(`Global ISO Portal ${e.target.checked ? 'online' : 'offline'}`, e.target.checked ? 'success' : 'error');
1647
+ });
1648
+
1649
+ elements.isoExample.addEventListener('change', loadISOExample);
1650
+
1651
+ // Message tabs
1652
+ elements.messageTabs.forEach(tab => {
1653
+ tab.addEventListener('click', (e) => {
1654
+ elements.messageTabs.forEach(t => t.classList.remove('active'));
1655
+ e.target.classList.add('active');
1656
+ updateMessages();
1657
+ });
1658
+ });
1659
+
1660
+ // Initialize
1661
+ initCharts();
1662
+ updateUI();
1663
+ addLog('ACF Mission Control initialized with data from Eldadi et al. (2025)', 'success');
1664
+ addLog('Integrated real 2025 data: LSST ISO rate ~1.5/year, LLM hallucination ~15%, Deepfake undetected ~38%', 'info');
1665
+ addLog('System ready for simulation', 'info');
1666
+ </script>
1667
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Volkan36/acf" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
1668
+ </html>