MarkTheArtist commited on
Commit
fef040a
·
verified ·
1 Parent(s): a9a73a9

Add 2 files

Browse files
Files changed (2) hide show
  1. README.md +6 -4
  2. index.html +597 -19
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: T 8000 Visual Processor
3
- emoji: 🚀
4
  colorFrom: yellow
5
- colorTo: pink
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: t-8000-visual-processor
3
+ emoji: 🐳
4
  colorFrom: yellow
5
+ colorTo: blue
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,597 @@
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>Terminator Targeting Display</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <style>
9
+ @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&display=swap');
10
+
11
+ body {
12
+ background-color: black;
13
+ overflow: hidden;
14
+ font-family: 'Orbitron', sans-serif;
15
+ cursor: none;
16
+ }
17
+
18
+ .scanline {
19
+ position: absolute;
20
+ width: 100%;
21
+ height: 2px;
22
+ background: rgba(255, 0, 0, 0.5);
23
+ box-shadow: 0 0 10px rgba(255, 0, 0, 0.7);
24
+ animation: scan 4s linear infinite;
25
+ z-index: 100;
26
+ }
27
+
28
+ @keyframes scan {
29
+ 0% { top: 0%; }
30
+ 100% { top: 100%; }
31
+ }
32
+
33
+ .grid-overlay {
34
+ position: absolute;
35
+ width: 100%;
36
+ height: 100%;
37
+ background-image:
38
+ linear-gradient(rgba(255, 0, 0, 0.1) 1px, transparent 1px),
39
+ linear-gradient(90deg, rgba(255, 0, 0, 0.1) 1px, transparent 1px);
40
+ background-size: 20px 20px;
41
+ z-index: 1;
42
+ }
43
+
44
+ .target-box {
45
+ position: absolute;
46
+ border: 2px solid red;
47
+ box-shadow: 0 0 15px rgba(255, 0, 0, 0.7);
48
+ z-index: 10;
49
+ transition: all 0.2s;
50
+ }
51
+
52
+ .target-box.identified {
53
+ border-color: #00ff00;
54
+ box-shadow: 0 0 15px rgba(0, 255, 0, 0.7);
55
+ background-color: rgba(0, 255, 0, 0.1);
56
+ }
57
+
58
+ .target-box.destroyed {
59
+ border-color: #ff0000;
60
+ box-shadow: 0 0 30px rgba(255, 0, 0, 0.9);
61
+ background-color: rgba(255, 0, 0, 0.3);
62
+ opacity: 0.5;
63
+ }
64
+
65
+ .target-crosshair {
66
+ position: absolute;
67
+ width: 30px;
68
+ height: 30px;
69
+ border: 2px solid red;
70
+ box-shadow: 0 0 15px rgba(255, 0, 0, 0.7);
71
+ z-index: 20;
72
+ pointer-events: none;
73
+ }
74
+
75
+ .target-crosshair:before, .target-crosshair:after {
76
+ content: '';
77
+ position: absolute;
78
+ background: red;
79
+ box-shadow: 0 0 5px rgba(255, 0, 0, 0.7);
80
+ }
81
+
82
+ .target-crosshair:before {
83
+ width: 2px;
84
+ height: 30px;
85
+ left: 50%;
86
+ transform: translateX(-50%);
87
+ }
88
+
89
+ .target-crosshair:after {
90
+ width: 30px;
91
+ height: 2px;
92
+ top: 50%;
93
+ transform: translateY(-50%);
94
+ }
95
+
96
+ .target-crosshair.firing {
97
+ animation: firing 0.3s 1;
98
+ }
99
+
100
+ @keyframes firing {
101
+ 0% { transform: translate(-50%, -50%) scale(1); }
102
+ 50% { transform: translate(-50%, -50%) scale(1.5); }
103
+ 100% { transform: translate(-50%, -50%) scale(1); }
104
+ }
105
+
106
+ .data-display {
107
+ position: absolute;
108
+ color: red;
109
+ text-shadow: 0 0 5px rgba(255, 0, 0, 0.7);
110
+ font-family: 'Orbitron', sans-serif;
111
+ font-size: 12px;
112
+ z-index: 5;
113
+ }
114
+
115
+ .flicker {
116
+ animation: flicker 0.1s infinite alternate;
117
+ }
118
+
119
+ @keyframes flicker {
120
+ 0% { opacity: 0.7; }
121
+ 100% { opacity: 1; }
122
+ }
123
+
124
+ .glitch {
125
+ position: relative;
126
+ }
127
+
128
+ .glitch::before, .glitch::after {
129
+ content: attr(data-text);
130
+ position: absolute;
131
+ top: 0;
132
+ left: 0;
133
+ width: 100%;
134
+ height: 100%;
135
+ }
136
+
137
+ .glitch::before {
138
+ left: 2px;
139
+ text-shadow: -2px 0 #00ff00;
140
+ clip: rect(44px, 450px, 56px, 0);
141
+ animation: glitch-anim 5s infinite linear alternate-reverse;
142
+ }
143
+
144
+ .glitch::after {
145
+ left: -2px;
146
+ text-shadow: -2px 0 blue;
147
+ clip: rect(44px, 450px, 56px, 0);
148
+ animation: glitch-anim2 5s infinite linear alternate-reverse;
149
+ }
150
+
151
+ @keyframes glitch-anim {
152
+ 0% { clip: rect(31px, 9999px, 94px, 0); }
153
+ 10% { clip: rect(112px, 9999px, 76px, 0); }
154
+ 20% { clip: rect(85px, 9999px, 77px, 0); }
155
+ 30% { clip: rect(27px, 9999px, 97px, 0); }
156
+ 40% { clip: rect(64px, 9999px, 98px, 0); }
157
+ 50% { clip: rect(61px, 9999px, 85px, 0); }
158
+ 60% { clip: rect(99px, 9999px, 114px, 0); }
159
+ 70% { clip: rect(34px, 9999px, 115px, 0); }
160
+ 80% { clip: rect(98px, 9999px, 129px, 0); }
161
+ 90% { clip: rect(43px, 9999px, 96px, 0); }
162
+ 100% { clip: rect(82px, 9999px, 64px, 0); }
163
+ }
164
+
165
+ @keyframes glitch-anim2 {
166
+ 0% { clip: rect(65px, 9999px, 119px, 0); }
167
+ 10% { clip: rect(66px, 9999px, 101px, 0); }
168
+ 20% { clip: rect(33px, 9999px, 117px, 0); }
169
+ 30% { clip: rect(147px, 9999px, 93px, 0); }
170
+ 40% { clip: rect(55px, 9999px, 97px, 0); }
171
+ 50% { clip: rect(122px, 9999px, 113px, 0); }
172
+ 60% { clip: rect(15px, 9999px, 44px, 0); }
173
+ 70% { clip: rect(112px, 9999px, 72px, 0); }
174
+ 80% { clip: rect(42px, 9999px, 60px, 0); }
175
+ 90% { clip: rect(134px, 9999px, 99px, 0); }
176
+ 100% { clip: rect(78px, 9999px, 38px, 0); }
177
+ }
178
+
179
+ .pulse {
180
+ animation: pulse 1s infinite alternate;
181
+ }
182
+
183
+ @keyframes pulse {
184
+ 0% { opacity: 0.5; }
185
+ 100% { opacity: 1; }
186
+ }
187
+
188
+ .laser-beam {
189
+ position: absolute;
190
+ height: 2px;
191
+ background: linear-gradient(90deg, rgba(255,0,0,0) 0%, rgba(255,0,0,1) 50%, rgba(255,0,0,0) 100%);
192
+ box-shadow: 0 0 10px rgba(255, 0, 0, 0.8);
193
+ z-index: 15;
194
+ transform-origin: left center;
195
+ pointer-events: none;
196
+ }
197
+
198
+ .target-id {
199
+ position: absolute;
200
+ color: #00ff00;
201
+ font-size: 10px;
202
+ text-shadow: 0 0 3px #00ff00;
203
+ z-index: 11;
204
+ white-space: nowrap;
205
+ }
206
+
207
+ .damage-effect {
208
+ position: absolute;
209
+ width: 100%;
210
+ height: 100%;
211
+ background: radial-gradient(circle, rgba(255,0,0,0.3) 0%, rgba(255,0,0,0) 70%);
212
+ z-index: 25;
213
+ pointer-events: none;
214
+ opacity: 0;
215
+ }
216
+ </style>
217
+ </head>
218
+ <body class="h-screen w-screen bg-black relative">
219
+ <div class="scanline"></div>
220
+ <div class="grid-overlay"></div>
221
+ <div id="damage-effect" class="damage-effect"></div>
222
+
223
+ <div id="crosshair" class="target-crosshair absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
224
+
225
+ <div id="targets-container"></div>
226
+
227
+ <div class="data-display top-4 left-4">
228
+ <div class="glitch flicker" data-text="T-800 VISUAL PROCESSOR">T-800 VISUAL PROCESSOR</div>
229
+ <div class="mt-2 pulse">SYSTEMS: <span class="text-green-500">ONLINE</span></div>
230
+ <div class="mt-1">TARGETS: <span id="target-count">0</span>/<span id="targets-destroyed">0</span></div>
231
+ <div class="mt-1">THREAT LEVEL: <span id="threat-level">NONE</span></div>
232
+ <div class="mt-1">TARGET ID: <span id="current-target-id">NONE</span></div>
233
+ </div>
234
+
235
+ <div class="data-display top-4 right-4 text-right">
236
+ <div class="glitch" data-text="SKYNET v3.5.7">SKYNET v3.5.7</div>
237
+ <div class="mt-2">MISSION: <span class="text-red-500">TERMINATE</span></div>
238
+ <div class="mt-1">T-800 UNITS: <span class="text-green-500">1</span></div>
239
+ <div class="mt-1">TIME: <span id="time">00:00:00</span></div>
240
+ <div class="mt-1">WEAPON: <span class="text-yellow-500">PLASMA RIFLE</span></div>
241
+ </div>
242
+
243
+ <div class="data-display bottom-4 left-4">
244
+ <div class="glitch" data-text="TARGET ANALYSIS">TARGET ANALYSIS</div>
245
+ <div class="mt-2" id="target-info">NO TARGET LOCKED</div>
246
+ <div class="mt-1" id="target-status">STATUS: UNKNOWN</div>
247
+ </div>
248
+
249
+ <div class="data-display bottom-4 right-4 text-right">
250
+ <div class="glitch" data-text="WEAPONS SYSTEMS">WEAPONS SYSTEMS</div>
251
+ <div class="mt-2">STATUS: <span class="text-green-500">ARMED</span></div>
252
+ <div class="mt-1">AMMO: <span class="text-yellow-500">∞</span></div>
253
+ <div class="mt-1">FIRE MODE: <span class="text-red-500">AUTO</span></div>
254
+ <div class="mt-1">LAST ACTION: <span id="last-action">NONE</span></div>
255
+ </div>
256
+
257
+ <div id="debug" class="data-display bottom-2 left-1/2 transform -translate-x-1/2 text-center text-xs opacity-50">
258
+ CLICK TO ADD TARGETS | RIGHT CLICK TO FIRE | MOUSE MOVE TO AIM
259
+ </div>
260
+
261
+ <audio id="target-sound" src="https://assets.mixkit.co/sfx/preview/mixkit-sci-fi-positive-interface-beep-257.mp3" preload="auto"></audio>
262
+ <audio id="lock-sound" src="https://assets.mixkit.co/sfx/preview/mixkit-arcade-game-explosion-2759.mp3" preload="auto"></audio>
263
+ <audio id="fire-sound" src="https://assets.mixkit.co/sfx/preview/mixkit-laser-weapon-shot-1670.mp3" preload="auto"></audio>
264
+ <audio id="hit-sound" src="https://assets.mixkit.co/sfx/preview/mixkit-explosion-impact-1684.mp3" preload="auto"></audio>
265
+
266
+ <script>
267
+ document.addEventListener('DOMContentLoaded', function() {
268
+ let currentTarget = null;
269
+ let identifiedTargets = [];
270
+ let destroyedTargets = [];
271
+
272
+ // Update time
273
+ function updateTime() {
274
+ const now = new Date();
275
+ const timeStr = now.toLocaleTimeString('en-US', {hour12: false});
276
+ document.getElementById('time').textContent = timeStr;
277
+ }
278
+ setInterval(updateTime, 1000);
279
+ updateTime();
280
+
281
+ // Create random targets
282
+ function createRandomTarget() {
283
+ const target = document.createElement('div');
284
+ target.className = 'target-box absolute w-16 h-24 bg-red-500 bg-opacity-10';
285
+
286
+ // Random position but not too close to edges
287
+ const x = Math.random() * (window.innerWidth - 200) + 100;
288
+ const y = Math.random() * (window.innerHeight - 200) + 100;
289
+
290
+ target.style.left = `${x}px`;
291
+ target.style.top = `${y}px`;
292
+
293
+ // Add target identifier
294
+ const targetId = 'T-' + Math.floor(Math.random() * 1000).toString().padStart(4, '0');
295
+ target.dataset.id = targetId;
296
+
297
+ // Add target info
298
+ const targetTypes = ['HUMAN', 'VEHICLE', 'STRUCTURE', 'THREAT'];
299
+ const targetType = targetTypes[Math.floor(Math.random() * targetTypes.length)];
300
+ target.dataset.type = targetType;
301
+
302
+ // Add threat level
303
+ const threatLevels = ['LOW', 'MEDIUM', 'HIGH'];
304
+ const threatLevel = threatLevels[Math.floor(Math.random() * threatLevels.length)];
305
+ target.dataset.threat = threatLevel;
306
+
307
+ // Add pulsing animation
308
+ target.classList.add('pulse');
309
+
310
+ // Add target ID label
311
+ const idLabel = document.createElement('div');
312
+ idLabel.className = 'target-id';
313
+ idLabel.textContent = targetId;
314
+ idLabel.style.top = '-15px';
315
+ idLabel.style.left = '0';
316
+ idLabel.style.opacity = '0';
317
+ target.appendChild(idLabel);
318
+
319
+ return target;
320
+ }
321
+
322
+ // Add initial targets
323
+ for (let i = 0; i < 5; i++) {
324
+ document.getElementById('targets-container').appendChild(createRandomTarget());
325
+ }
326
+ updateTargetCount();
327
+
328
+ // Click to add new targets
329
+ document.addEventListener('click', function(e) {
330
+ if (e.button === 0 && e.target.id !== 'targets-container') { // Left click
331
+ const newTarget = createRandomTarget();
332
+ newTarget.style.left = `${e.clientX - 30}px`;
333
+ newTarget.style.top = `${e.clientY - 40}px`;
334
+ document.getElementById('targets-container').appendChild(newTarget);
335
+ updateTargetCount();
336
+ document.getElementById('target-sound').play();
337
+ updateLastAction('TARGET ADDED');
338
+ }
339
+ });
340
+
341
+ // Right click to fire
342
+ document.addEventListener('contextmenu', function(e) {
343
+ e.preventDefault();
344
+ fireWeapon(e.clientX, e.clientY);
345
+ return false;
346
+ });
347
+
348
+ // Mouse move to aim
349
+ document.addEventListener('mousemove', function(e) {
350
+ document.getElementById('crosshair').style.left = `${e.clientX}px`;
351
+ document.getElementById('crosshair').style.top = `${e.clientY}px`;
352
+
353
+ // Check for target lock
354
+ checkTargetLock(e.clientX, e.clientY);
355
+ });
356
+
357
+ // Fire weapon
358
+ function fireWeapon(x, y) {
359
+ // Play fire sound
360
+ document.getElementById('fire-sound').play();
361
+
362
+ // Add firing animation to crosshair
363
+ const crosshair = document.getElementById('crosshair');
364
+ crosshair.classList.add('firing');
365
+ setTimeout(() => {
366
+ crosshair.classList.remove('firing');
367
+ }, 300);
368
+
369
+ // Create laser beam effect
370
+ const laser = document.createElement('div');
371
+ laser.className = 'laser-beam';
372
+ laser.style.left = `${x}px`;
373
+ laser.style.top = `${y}px`;
374
+ laser.style.width = '0';
375
+ laser.style.opacity = '1';
376
+
377
+ // Random angle for dramatic effect
378
+ const angle = (Math.random() * 10) - 5;
379
+ laser.style.transform = `rotate(${angle}deg)`;
380
+
381
+ document.body.appendChild(laser);
382
+
383
+ // Animate laser beam
384
+ setTimeout(() => {
385
+ laser.style.width = '300px';
386
+ laser.style.opacity = '0.8';
387
+ }, 10);
388
+
389
+ setTimeout(() => {
390
+ laser.style.opacity = '0';
391
+ setTimeout(() => {
392
+ document.body.removeChild(laser);
393
+ }, 300);
394
+ }, 200);
395
+
396
+ // Check if we hit a target
397
+ if (currentTarget) {
398
+ destroyTarget(currentTarget);
399
+ } else {
400
+ updateLastAction('FIRED - NO TARGET');
401
+ showDamageEffect(x, y, false);
402
+ }
403
+ }
404
+
405
+ // Destroy target
406
+ function destroyTarget(target) {
407
+ // Play hit sound
408
+ document.getElementById('hit-sound').play();
409
+
410
+ // Mark as destroyed
411
+ target.classList.remove('identified');
412
+ target.classList.add('destroyed');
413
+ target.dataset.status = 'DESTROYED';
414
+
415
+ // Update target info
416
+ document.getElementById('target-status').textContent = 'STATUS: DESTROYED';
417
+ document.getElementById('target-status').className = 'mt-1 text-red-500';
418
+
419
+ // Add to destroyed targets
420
+ if (!destroyedTargets.includes(target.dataset.id)) {
421
+ destroyedTargets.push(target.dataset.id);
422
+ }
423
+
424
+ // Remove from identified targets
425
+ identifiedTargets = identifiedTargets.filter(id => id !== target.dataset.id);
426
+
427
+ // Update counters
428
+ updateTargetCount();
429
+ updateLastAction(`TARGET ${target.dataset.id} DESTROYED`);
430
+
431
+ // Show damage effect
432
+ const rect = target.getBoundingClientRect();
433
+ showDamageEffect(rect.left + rect.width/2, rect.top + rect.height/2, true);
434
+ }
435
+
436
+ // Show damage effect
437
+ function showDamageEffect(x, y, isHit) {
438
+ const damageEffect = document.getElementById('damage-effect');
439
+ damageEffect.style.left = `${x}px`;
440
+ damageEffect.style.top = `${y}px`;
441
+ damageEffect.style.transform = 'translate(-50%, -50%)';
442
+ damageEffect.style.opacity = '1';
443
+ damageEffect.style.background = isHit ?
444
+ 'radial-gradient(circle, rgba(255,0,0,0.5) 0%, rgba(255,0,0,0) 70%)' :
445
+ 'radial-gradient(circle, rgba(255,255,0,0.3) 0%, rgba(255,255,0,0) 70%)';
446
+
447
+ setTimeout(() => {
448
+ damageEffect.style.opacity = '0';
449
+ }, 300);
450
+ }
451
+
452
+ // Check if crosshair is over a target
453
+ function checkTargetLock(x, y) {
454
+ const targets = document.querySelectorAll('.target-box:not(.destroyed)');
455
+ let lockedTarget = null;
456
+
457
+ targets.forEach(target => {
458
+ const rect = target.getBoundingClientRect();
459
+ const isOver = x > rect.left && x < rect.right && y > rect.top && y < rect.bottom;
460
+
461
+ if (isOver) {
462
+ lockedTarget = target;
463
+ target.classList.add('bg-opacity-30');
464
+
465
+ // Show target ID
466
+ const idLabel = target.querySelector('.target-id');
467
+ if (idLabel) idLabel.style.opacity = '1';
468
+
469
+ // Update target info display
470
+ document.getElementById('target-info').innerHTML = `
471
+ ID: ${target.dataset.id}<br>
472
+ TYPE: ${target.dataset.type}<br>
473
+ THREAT: <span class="${getThreatColor(target.dataset.threat)}">${target.dataset.threat}</span>
474
+ `;
475
+
476
+ document.getElementById('current-target-id').textContent = target.dataset.id;
477
+ document.getElementById('current-target-id').className = getThreatColor(target.dataset.threat);
478
+
479
+ // Update threat level
480
+ document.getElementById('threat-level').textContent = target.dataset.threat;
481
+ document.getElementById('threat-level').className = getThreatColor(target.dataset.threat);
482
+
483
+ // Update status
484
+ if (target.classList.contains('identified')) {
485
+ document.getElementById('target-status').textContent = 'STATUS: IDENTIFIED';
486
+ document.getElementById('target-status').className = 'mt-1 text-green-500';
487
+ } else if (target.classList.contains('destroyed')) {
488
+ document.getElementById('target-status').textContent = 'STATUS: DESTROYED';
489
+ document.getElementById('target-status').className = 'mt-1 text-red-500';
490
+ } else {
491
+ document.getElementById('target-status').textContent = 'STATUS: DETECTED';
492
+ document.getElementById('target-status').className = 'mt-1 text-yellow-500';
493
+ }
494
+
495
+ // Identify target if not already identified
496
+ if (!target.classList.contains('identified') && !target.classList.contains('destroyed')) {
497
+ setTimeout(() => {
498
+ if (lockedTarget === target) {
499
+ identifyTarget(target);
500
+ }
501
+ }, 1000);
502
+ }
503
+ } else {
504
+ target.classList.remove('bg-opacity-30');
505
+ const idLabel = target.querySelector('.target-id');
506
+ if (idLabel && !target.classList.contains('identified')) idLabel.style.opacity = '0';
507
+ }
508
+ });
509
+
510
+ currentTarget = lockedTarget;
511
+
512
+ if (!lockedTarget) {
513
+ document.getElementById('target-info').textContent = 'NO TARGET LOCKED';
514
+ document.getElementById('target-status').textContent = 'STATUS: UNKNOWN';
515
+ document.getElementById('target-status').className = 'mt-1';
516
+ document.getElementById('current-target-id').textContent = 'NONE';
517
+ document.getElementById('current-target-id').className = '';
518
+ document.getElementById('threat-level').textContent = 'NONE';
519
+ document.getElementById('threat-level').className = '';
520
+ }
521
+ }
522
+
523
+ // Identify target
524
+ function identifyTarget(target) {
525
+ if (!target.classList.contains('identified') && !target.classList.contains('destroyed')) {
526
+ target.classList.add('identified');
527
+ if (!identifiedTargets.includes(target.dataset.id)) {
528
+ identifiedTargets.push(target.dataset.id);
529
+ }
530
+
531
+ // Play lock sound
532
+ document.getElementById('lock-sound').play();
533
+
534
+ // Keep ID label visible for identified targets
535
+ const idLabel = target.querySelector('.target-id');
536
+ if (idLabel) idLabel.style.opacity = '1';
537
+
538
+ // Update status
539
+ document.getElementById('target-status').textContent = 'STATUS: IDENTIFIED';
540
+ document.getElementById('target-status').className = 'mt-1 text-green-500';
541
+
542
+ updateLastAction(`TARGET ${target.dataset.id} IDENTIFIED`);
543
+ }
544
+ }
545
+
546
+ function getThreatColor(level) {
547
+ switch(level) {
548
+ case 'LOW': return 'text-green-500';
549
+ case 'MEDIUM': return 'text-yellow-500';
550
+ case 'HIGH': return 'text-red-500';
551
+ default: return '';
552
+ }
553
+ }
554
+
555
+ function updateTargetCount() {
556
+ const total = document.querySelectorAll('.target-box').length;
557
+ const destroyed = document.querySelectorAll('.target-box.destroyed').length;
558
+ document.getElementById('target-count').textContent = total - destroyed;
559
+ document.getElementById('targets-destroyed').textContent = destroyed;
560
+ }
561
+
562
+ function updateLastAction(action) {
563
+ const lastAction = document.getElementById('last-action');
564
+ lastAction.textContent = action;
565
+ lastAction.className = 'text-red-500';
566
+ setTimeout(() => {
567
+ lastAction.className = '';
568
+ }, 2000);
569
+ }
570
+
571
+ // Random glitch effect
572
+ setInterval(() => {
573
+ const elements = document.querySelectorAll('.glitch');
574
+ elements.forEach(el => {
575
+ if (Math.random() > 0.7) {
576
+ el.classList.add('glitch-active');
577
+ setTimeout(() => {
578
+ el.classList.remove('glitch-active');
579
+ }, 200);
580
+ }
581
+ });
582
+
583
+ // Randomly change threat level when no target is locked
584
+ if (Math.random() > 0.9 && document.getElementById('threat-level').textContent === 'NONE') {
585
+ const randomThreat = ['LOW', 'MEDIUM', 'HIGH'][Math.floor(Math.random() * 3)];
586
+ document.getElementById('threat-level').textContent = randomThreat;
587
+ document.getElementById('threat-level').className = getThreatColor(randomThreat);
588
+ setTimeout(() => {
589
+ document.getElementById('threat-level').textContent = 'NONE';
590
+ document.getElementById('threat-level').className = '';
591
+ }, 1000);
592
+ }
593
+ }, 3000);
594
+ });
595
+ </script>
596
+ <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=MarkTheArtist/t-8000-visual-processor" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
597
+ </html>