Dooratre commited on
Commit
89b02b3
·
verified ·
1 Parent(s): 88a5357

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +486 -680
index.html CHANGED
@@ -1,837 +1,643 @@
1
  <!DOCTYPE html>
2
- <html lang="en" data-theme="light">
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Auto Account Creation</title>
7
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
8
  <style>
9
  :root {
10
- /* Light theme variables */
11
- --primary: #4361ee;
12
- --primary-dark: #3a56d4;
13
- --secondary: #7209b7;
14
- --success: #2ecc71;
15
- --danger: #e74c3c;
16
- --dark: #2d3748;
17
- --light: #f8f9fa;
18
- --bg-color: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
19
- --card-bg: rgba(255, 255, 255, 0.95);
20
- --text-color: #2d3748;
21
- --text-muted: #718096;
22
- --input-bg: #f8fafc;
23
- --input-border: #e2e8f0;
24
- --response-bg: #f8fafc;
25
- --card-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
26
- --transition: all 0.3s ease;
27
- }
28
-
29
- [data-theme="dark"] {
30
- /* Dark theme variables */
31
- --primary: #4361ee;
32
- --primary-dark: #3a56d4;
33
- --secondary: #7209b7;
34
- --success: #2ecc71;
35
- --danger: #e74c3c;
36
- --dark: #f8f9fa;
37
- --light: #2d3748;
38
- --bg-color: linear-gradient(135deg, #1a202c 0%, #2d3748 100%);
39
- --card-bg: rgba(26, 32, 44, 0.95);
40
- --text-color: #f8f9fa;
41
- --text-muted: #a0aec0;
42
- --input-bg: #2d3748;
43
- --input-border: #4a5568;
44
- --response-bg: #2d3748;
45
- --card-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
46
  }
47
 
48
  * {
49
  margin: 0;
50
  padding: 0;
51
  box-sizing: border-box;
 
52
  }
53
 
54
  body {
55
- font-family: 'Poppins', sans-serif;
56
- background: var(--bg-color);
 
 
 
 
 
57
  min-height: 100vh;
58
  display: flex;
59
- justify-content: center;
60
- align-items: center;
61
- padding: 20px;
62
- color: var(--text-color);
63
- line-height: 1.6;
64
- transition: background 0.3s ease;
65
  }
66
 
67
- .container {
68
- width: 100%;
69
- max-width: 550px;
70
- background: var(--card-bg);
71
- padding: 40px;
72
- border-radius: 16px;
73
- box-shadow: var(--card-shadow);
74
- position: relative;
75
- overflow: hidden;
76
- z-index: 1;
77
- transition: background 0.3s ease, box-shadow 0.3s ease;
78
  }
79
 
80
- .container::before {
81
- content: '';
82
- position: absolute;
83
- top: -50px;
84
- right: -50px;
85
- width: 200px;
86
- height: 200px;
87
- background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
88
- border-radius: 50%;
89
- opacity: 0.1;
90
- z-index: -1;
91
  }
92
 
93
- .container::after {
94
- content: '';
95
- position: absolute;
96
- bottom: -80px;
97
- left: -80px;
98
- width: 250px;
99
- height: 250px;
100
- background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
101
- border-radius: 50%;
102
- opacity: 0.1;
103
- z-index: -1;
104
  }
105
 
106
- .logo {
107
- text-align: center;
108
- margin-bottom: 30px;
109
  display: flex;
110
  align-items: center;
111
- justify-content: center;
112
  }
113
 
114
- .logo-icon {
115
- font-size: 28px;
116
- background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
117
- -webkit-background-clip: text;
118
- -webkit-text-fill-color: transparent;
119
- margin-right: 10px;
120
- }
121
-
122
- h1 {
123
- font-size: 28px;
124
- font-weight: 700;
125
- background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
126
- -webkit-background-clip: text;
127
- -webkit-text-fill-color: transparent;
128
- margin-bottom: 5px;
129
- }
130
-
131
- .subtitle {
132
- text-align: center;
133
- font-size: 14px;
134
- color: var(--text-muted);
135
- margin-bottom: 30px;
136
  }
137
 
138
- .form-group {
139
- margin-bottom: 24px;
140
- position: relative;
 
 
 
 
141
  }
142
 
143
- label {
144
- display: block;
145
- font-size: 14px;
146
- font-weight: 600;
147
- margin-bottom: 8px;
148
- color: var(--text-color);
149
- transition: color 0.3s ease;
150
  }
151
 
152
- input[type="email"],
153
- input[type="text"] {
154
- width: 100%;
155
- padding: 14px 16px 14px 45px;
156
- border: 1px solid var(--input-border);
157
- border-radius: 8px;
158
- font-size: 15px;
159
- background-color: var(--input-bg);
160
- color: var(--text-color);
161
- transition: var(--transition);
162
  }
163
 
164
- input[type="email"]:focus,
165
- input[type="text"]:focus {
166
- outline: none;
167
- border-color: var(--primary);
168
- box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.15);
169
  }
170
 
171
- .input-icon {
172
- position: absolute;
173
- left: 16px;
174
- top: 40px;
175
- color: var(--text-muted);
176
- transition: color 0.3s ease;
177
  }
178
 
179
- button {
180
- display: block;
181
  width: 100%;
182
- padding: 14px;
183
- background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
184
- color: #fff;
185
- border: none;
186
- border-radius: 8px;
187
- cursor: pointer;
188
- font-size: 16px;
189
- font-weight: 600;
190
- transition: var(--transition);
191
- position: relative;
192
  overflow: hidden;
193
- z-index: 1;
194
- }
195
-
196
- button:hover {
197
- transform: translateY(-2px);
198
- box-shadow: 0 7px 14px rgba(50, 50, 93, 0.1), 0 3px 6px rgba(0, 0, 0, 0.08);
199
  }
200
 
201
- button:active {
202
- transform: translateY(1px);
 
 
 
 
 
 
203
  }
204
 
205
- button::after {
206
- content: '';
207
  position: absolute;
208
  top: 0;
209
  left: 0;
210
  width: 100%;
211
  height: 100%;
212
- background: linear-gradient(135deg, var(--secondary) 0%, var(--primary) 100%);
213
- opacity: 0;
214
- z-index: -1;
215
- transition: var(--transition);
 
216
  }
217
 
218
- button:hover::after {
219
- opacity: 1;
 
 
 
220
  }
221
 
222
- .response-box {
223
- margin-top: 30px;
224
- padding: 20px;
225
- background-color: var(--response-bg);
226
- border-left: 4px solid var(--primary);
227
- border-radius: 8px;
228
- white-space: pre-wrap;
229
- word-wrap: break-word;
230
- font-family: 'Roboto Mono', monospace;
231
- font-size: 14px;
232
- line-height: 1.7;
233
- max-height: 300px;
234
- overflow-y: auto;
235
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
236
- color: var(--text-color);
237
- transition: background-color 0.3s ease, color 0.3s ease;
238
- }
239
-
240
- .confirmation-form {
241
- margin-top: 30px;
242
- display: none;
243
- animation: fadeIn 0.5s ease-in-out;
244
- }
245
-
246
- .loading {
247
- text-align: center;
248
- margin: 20px 0;
249
- display: none;
250
- font-weight: 600;
251
- color: var(--primary);
252
  }
253
 
254
- .loading-spinner {
255
- display: inline-block;
256
- width: 20px;
257
- height: 20px;
258
- border: 3px solid rgba(67, 97, 238, 0.3);
259
- border-radius: 50%;
260
- border-top-color: var(--primary);
261
- animation: spin 1s ease-in-out infinite;
262
- margin-right: 10px;
263
- vertical-align: middle;
264
  }
265
 
266
- @keyframes spin {
267
- to { transform: rotate(360deg); }
 
 
 
 
268
  }
269
 
270
- @keyframes fadeIn {
271
- from { opacity: 0; transform: translateY(10px); }
272
- to { opacity: 1; transform: translateY(0); }
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  }
274
 
275
- .step-indicator {
276
- display: flex;
277
- justify-content: center;
278
- margin-bottom: 30px;
279
  }
280
 
281
- .step {
282
- display: flex;
283
- flex-direction: column;
284
- align-items: center;
285
- width: 100px;
286
  position: relative;
287
  }
288
 
289
- .step:not(:last-child)::after {
 
290
  content: '';
291
  position: absolute;
292
- top: 15px;
293
- right: -40%;
294
- width: 80%;
295
- height: 2px;
296
- background-color: var(--input-border);
297
- z-index: 0;
298
- transition: background-color 0.3s ease;
 
 
299
  }
300
 
301
- .step.active:not(:last-child)::after {
302
- background: linear-gradient(to right, var(--primary), var(--secondary));
 
 
 
303
  }
304
 
305
- .step-circle {
306
- width: 30px;
307
- height: 30px;
308
- border-radius: 50%;
309
- background-color: var(--input-border);
310
  display: flex;
311
  align-items: center;
312
- justify-content: center;
313
- color: var(--text-muted);
314
- font-weight: 600;
315
- margin-bottom: 8px;
316
- position: relative;
317
- z-index: 1;
318
- transition: var(--transition);
319
  }
320
 
321
- .step.active .step-circle {
322
- background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
323
- color: white;
324
- box-shadow: 0 5px 15px rgba(67, 97, 238, 0.3);
 
 
325
  }
326
 
327
- .step-title {
328
- font-size: 12px;
329
- color: var(--text-muted);
330
- font-weight: 500;
331
- transition: color 0.3s ease;
332
  }
333
 
334
- .step.active .step-title {
335
- color: var(--primary);
336
- font-weight: 600;
337
  }
338
 
339
- .success-message {
340
- display: none;
341
- text-align: center;
342
- animation: fadeIn 0.5s ease-in-out;
343
  }
344
 
345
- .success-icon {
346
- font-size: 60px;
347
- color: var(--success);
348
- margin-bottom: 20px;
349
  }
350
 
351
- .success-title {
352
- font-size: 24px;
353
- font-weight: 700;
354
- color: var(--text-color);
355
- margin-bottom: 10px;
356
- transition: color 0.3s ease;
357
  }
358
 
359
- .success-subtitle {
360
- color: var(--text-muted);
361
- margin-bottom: 30px;
362
- transition: color 0.3s ease;
363
  }
364
 
365
- /* Theme toggle */
366
- .theme-toggle {
367
- position: absolute;
368
- top: 20px;
369
- right: 20px;
370
- background: none;
371
- border: none;
372
- color: var(--text-color);
373
- font-size: 20px;
374
- cursor: pointer;
375
- width: auto;
376
- padding: 5px;
377
  display: flex;
378
- align-items: center;
379
  justify-content: center;
380
- z-index: 10;
381
- transition: color 0.3s ease;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
382
  }
383
 
384
- .theme-toggle:hover {
385
- transform: scale(1.1);
386
- box-shadow: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
387
  }
388
 
389
- .theme-toggle:active {
390
- transform: scale(0.95);
 
391
  }
392
 
393
- .theme-toggle::after {
394
- display: none;
 
395
  }
396
 
397
- /* Code input boxes style */
398
- .code-input-container {
399
- display: flex;
400
- gap: 10px;
401
- justify-content: center;
402
- margin-top: 10px;
403
  }
404
 
405
- .code-input {
406
- width: 50px;
407
- height: 60px;
408
- text-align: center;
409
- font-size: 24px;
410
- font-weight: 600;
411
- border: 1px solid var(--input-border);
412
- border-radius: 8px;
413
- background-color: var(--input-bg);
414
- color: var(--text-color);
415
- transition: var(--transition);
416
- padding: 0;
417
  }
418
 
419
- .code-input:focus {
420
- outline: none;
421
- border-color: var(--primary);
422
- box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.15);
 
 
 
 
423
  }
424
 
425
  /* Responsive adjustments */
426
- @media (max-width: 576px) {
427
- .container {
428
- padding: 25px;
429
  }
430
 
431
- .step-indicator {
432
- margin-bottom: 20px;
433
  }
434
 
435
- .step {
436
- width: 70px;
 
437
  }
438
 
439
- .step-title {
440
- font-size: 10px;
441
  }
442
 
443
- .step:not(:last-child)::after {
444
- right: -50%;
445
- width: 100%;
 
446
  }
447
 
448
- h1 {
449
- font-size: 24px;
 
450
  }
451
 
452
- .code-input-container {
453
- gap: 5px;
454
  }
455
 
456
- .code-input {
457
- width: 40px;
458
- height: 50px;
459
- font-size: 20px;
460
  }
461
  }
462
  </style>
 
 
463
  </head>
464
  <body>
465
- <div class="container">
466
- <button class="theme-toggle" id="themeToggle">
467
- <i class="fas fa-moon"></i>
468
- </button>
469
-
470
- <div class="logo">
471
- <i class="fas fa-user-shield logo-icon"></i>
472
- <h1>Auto Account System</h1>
473
- </div>
474
- <p class="subtitle">Securely create and verify an account in seconds</p>
475
-
476
- <div class="step-indicator">
477
- <div class="step active" id="step1">
478
- <div class="step-circle">1</div>
479
- <div class="step-title">Create Account</div>
480
- </div>
481
- <div class="step" id="step2">
482
- <div class="step-circle">2</div>
483
- <div class="step-title">Verify Email</div>
484
  </div>
485
- <div class="step" id="step3">
486
- <div class="step-circle">3</div>
487
- <div class="step-title">Complete</div>
488
  </div>
489
  </div>
 
490
 
491
- <form id="accountForm">
492
- <div class="form-group">
493
- <label for="email">Email Address</label>
494
- <i class="fas fa-envelope input-icon"></i>
495
- <input type="email" id="email" name="email" required placeholder="Enter your email address">
496
- </div>
497
- <button type="submit">
498
- Create Account <i class="fas fa-arrow-right" style="margin-left: 8px;"></i>
499
- </button>
500
- </form>
501
-
502
- <div class="loading" id="loadingIndicator">
503
- <div class="loading-spinner"></div> Processing your request
504
  </div>
 
 
 
 
 
 
 
 
505
 
506
- <div class="confirmation-form" id="confirmationForm">
507
- <div class="form-group">
508
- <label for="confirmationCode">Confirmation Code</label>
509
- <div class="code-input-container">
510
- <input type="text" class="code-input" maxlength="1" data-index="0">
511
- <input type="text" class="code-input" maxlength="1" data-index="1">
512
- <input type="text" class="code-input" maxlength="1" data-index="2">
513
- <input type="text" class="code-input" maxlength="1" data-index="3">
514
- <input type="text" class="code-input" maxlength="1" data-index="4">
515
- <input type="text" class="code-input" maxlength="1" data-index="5">
516
- </div>
517
- <input type="hidden" id="confirmationCode" name="confirmationCode">
518
- </div>
519
- <button type="button" id="confirmButton">
520
- Verify Email <i class="fas fa-check" style="margin-left: 8px;"></i>
521
- </button>
522
- </div>
523
 
524
- <div class="success-message" id="successMessage">
525
- <i class="fas fa-check-circle success-icon"></i>
526
- <h2 class="success-title">Operation Complete!</h2>
527
- <p class="success-subtitle">Your account has been successfully processed.</p>
528
- <button type="button" id="newRequestBtn">
529
- Start New Request <i class="fas fa-redo" style="margin-left: 8px;"></i>
530
- </button>
531
  </div>
 
 
 
 
 
 
 
532
 
533
- <div class="response-box" id="responseBox">
534
- <!-- Responses will be displayed here -->
 
 
 
 
 
 
 
 
 
535
  </div>
536
  </div>
537
 
538
- <script>
539
- // Theme toggle functionality
540
- const themeToggle = document.getElementById('themeToggle');
541
- const htmlElement = document.documentElement;
542
- const toggleIcon = themeToggle.querySelector('i');
543
-
544
- // Check for saved theme preference or use preferred color scheme
545
- const savedTheme = localStorage.getItem('theme');
546
- if (savedTheme) {
547
- htmlElement.setAttribute('data-theme', savedTheme);
548
- updateThemeToggleIcon(savedTheme);
549
- } else {
550
- // Check if user prefers dark mode
551
- const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
552
- if (prefersDark) {
553
- htmlElement.setAttribute('data-theme', 'dark');
554
- updateThemeToggleIcon('dark');
555
- }
556
- }
557
 
558
- function updateThemeToggleIcon(theme) {
559
- if (theme === 'dark') {
560
- toggleIcon.classList.remove('fa-moon');
561
- toggleIcon.classList.add('fa-sun');
562
- } else {
563
- toggleIcon.classList.remove('fa-sun');
564
- toggleIcon.classList.add('fa-moon');
565
- }
566
- }
567
 
568
- themeToggle.addEventListener('click', function() {
569
- const currentTheme = htmlElement.getAttribute('data-theme');
570
- const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
571
 
572
- htmlElement.setAttribute('data-theme', newTheme);
573
- localStorage.setItem('theme', newTheme);
574
- updateThemeToggleIcon(newTheme);
 
 
 
 
 
 
 
 
 
 
 
 
575
  });
576
-
577
- // Confirmation code input handling
578
- const codeInputs = document.querySelectorAll('.code-input');
579
- const hiddenInput = document.getElementById('confirmationCode');
580
-
581
- codeInputs.forEach((input, index) => {
582
- // Handle input
583
- input.addEventListener('input', function(e) {
584
- // Only allow numeric input
585
- this.value = this.value.replace(/[^0-9]/g, '');
586
-
587
- // Auto-focus to next input
588
- if (this.value && index < codeInputs.length - 1) {
589
- codeInputs[index + 1].focus();
590
- }
591
-
592
- // Update hidden input with combined value
593
- updateHiddenInput();
594
- });
595
-
596
- // Handle keydown for backspace
597
- input.addEventListener('keydown', function(e) {
598
- if (e.key === 'Backspace' && !this.value && index > 0) {
599
- codeInputs[index - 1].focus();
600
- codeInputs[index - 1].value = '';
601
- updateHiddenInput();
602
- }
603
- });
604
-
605
- // Handle paste event
606
- input.addEventListener('paste', function(e) {
607
- e.preventDefault();
608
- const pastedData = e.clipboardData.getData('text');
609
- const numericData = pastedData.replace(/[^0-9]/g, '');
610
-
611
- // Fill inputs with pasted data
612
- for (let i = 0; i < numericData.length && i + index < codeInputs.length; i++) {
613
- codeInputs[i + index].value = numericData[i];
614
- }
615
-
616
- // Focus the next empty input or the last one
617
- let nextEmptyIndex = index + numericData.length;
618
- if (nextEmptyIndex >= codeInputs.length) {
619
- nextEmptyIndex = codeInputs.length - 1;
620
- }
621
- codeInputs[nextEmptyIndex].focus();
622
-
623
- updateHiddenInput();
624
- });
625
  });
626
-
627
- function updateHiddenInput() {
628
- hiddenInput.value = Array.from(codeInputs).map(input => input.value).join('');
629
- }
630
-
631
- // Function to generate a random username (7-15 letters and numbers)
632
- function generateUsername() {
633
- const length = Math.floor(Math.random() * (15 - 7 + 1)) + 7;
634
- const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
635
- let username = '';
636
- for (let i = 0; i < length; i++) {
637
- username += characters.charAt(Math.floor(Math.random() * characters.length));
638
  }
639
- return username;
640
- }
641
-
642
- // Function to generate a random password meeting the criteria
643
- function generatePassword() {
644
- const length = Math.floor(Math.random() * (16 - 8 + 1)) + 8;
645
- const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()';
646
- let password = '';
647
- let hasUpper = false, hasLower = false, hasDigit = false, hasSpecial = false;
648
-
649
- while (!hasUpper || !hasLower || !hasDigit || !hasSpecial) {
650
- password = '';
651
- for (let i = 0; i < length; i++) {
652
- const char = characters.charAt(Math.floor(Math.random() * characters.length));
653
- password += char;
654
-
655
- if (/[A-Z]/.test(char)) hasUpper = true;
656
- if (/[a-z]/.test(char)) hasLower = true;
657
- if (/[0-9]/.test(char)) hasDigit = true;
658
- if (/[\!\@\#\$\%\^\&\*\(\)]/.test(char)) hasSpecial = true;
659
- }
660
  }
661
- return password;
662
- }
663
-
664
- // Global variables to store account info
665
- let accountToken = '';
666
- let accountPassword = '';
667
-
668
- document.getElementById('accountForm').addEventListener('submit', async function (e) {
669
- e.preventDefault(); // Prevent default form submission
670
-
671
- // Clear response box and show loading indicator
672
- const responseBox = document.getElementById('responseBox');
673
- const loadingIndicator = document.getElementById('loadingIndicator');
674
- responseBox.textContent = '';
675
- loadingIndicator.style.display = 'flex';
676
- document.getElementById('accountForm').style.display = 'none';
677
-
678
- try {
679
- // Step 1: Generate random username and password
680
- const email = document.getElementById('email').value;
681
- const username = generateUsername();
682
- const password = generatePassword();
683
- accountPassword = password; // Store for later use
684
-
685
- responseBox.textContent += `📝 Generated Credentials:\n`;
686
- responseBox.textContent += `Username: ${username}\n`;
687
- responseBox.textContent += `Password: ${password}\n\n`;
688
- responseBox.textContent += `🔄 Processing request...\n`;
689
-
690
- // Step 2: Sign up API call
691
- const signupUrl = "https://api.puter.com/signup";
692
- const signupHeaders = {
693
- "Accept-Language": "en-US,en;q=0.9",
694
- "X-Requested-With": "XMLHttpRequest",
695
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
696
- "Accept": "*/*",
697
- "Content-Type": "application/json",
698
- "Origin": "https://puter.com",
699
- "Referer": "https://puter.com/",
700
- "Connection": "keep-alive"
701
- };
702
- const signupData = {
703
- username,
704
- email,
705
- password,
706
- send_confirmation_code: true,
707
- p102xyzname: ""
708
- };
709
-
710
- const signupResponse = await fetch(signupUrl, {
711
- method: 'POST',
712
- headers: signupHeaders,
713
- body: JSON.stringify(signupData)
714
  });
715
-
716
- if (!signupResponse.ok) {
717
- throw new Error(`Signup failed with status: ${signupResponse.status}`);
718
- }
719
-
720
- const signupDataJson = await signupResponse.json();
721
- accountToken = signupDataJson.token;
722
- responseBox.textContent += `✅ Account created successfully!\n\n`;
723
- responseBox.textContent += `📧 Verification code sent to ${email}\n`;
724
- responseBox.textContent += `Please check your email and enter the code below.\n`;
725
-
726
- // Show confirmation form and update step indicator
727
- document.getElementById('confirmationForm').style.display = 'block';
728
- document.getElementById('step1').classList.remove('active');
729
- document.getElementById('step2').classList.add('active');
730
-
731
- // Focus the first code input
732
- codeInputs[0].focus();
733
-
734
- loadingIndicator.style.display = 'none';
735
- } catch (error) {
736
- responseBox.textContent += `❌ Error: ${error.message}`;
737
- loadingIndicator.style.display = 'none';
738
- document.getElementById('accountForm').style.display = 'block';
739
  }
740
  });
741
-
742
- // Handle confirmation code submission
743
- document.getElementById('confirmButton').addEventListener('click', async function() {
744
- const confirmCode = document.getElementById('confirmationCode').value.trim();
745
- const responseBox = document.getElementById('responseBox');
746
- const loadingIndicator = document.getElementById('loadingIndicator');
747
-
748
- if (confirmCode.length !== 6) {
749
- responseBox.textContent += "❌ Error: Please enter all 6 digits of the confirmation code.\n\n";
750
- return;
 
 
 
 
 
 
 
 
751
  }
752
-
753
- loadingIndicator.style.display = 'flex';
754
- document.getElementById('confirmationForm').style.display = 'none';
755
-
756
- try {
757
- responseBox.textContent += `\n🔄 Verifying confirmation code...\n`;
758
-
759
- const confirmEmailUrl = "https://api.puter.com/confirm-email";
760
- const headers = {
761
- "Accept-Language": "en-US,en;q=0.9",
762
- "X-Requested-With": "XMLHttpRequest",
763
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
764
- "Accept": "*/*",
765
- "Content-Type": "application/json",
766
- "Origin": "https://puter.com",
767
- "Referer": "https://puter.com/",
768
- "Connection": "keep-alive",
769
- "Authorization": `Bearer ${accountToken}`
770
- };
771
- const confirmEmailData = { code: confirmCode };
772
-
773
- const confirmEmailResponse = await fetch(confirmEmailUrl, {
774
- method: 'POST',
775
- headers: headers,
776
- body: JSON.stringify(confirmEmailData)
777
- });
778
-
779
- if (!confirmEmailResponse.ok) {
780
- throw new Error(`Email confirmation failed with status: ${confirmEmailResponse.status}`);
781
- }
782
-
783
- const confirmEmailDataJson = await confirmEmailResponse.json();
784
- if (!confirmEmailDataJson.email_confirmed) {
785
- throw new Error("Email confirmation failed.");
786
  }
787
-
788
- responseBox.textContent += `✅ Email confirmed successfully.\n\n`;
789
- responseBox.textContent += `🔄 Finalizing process...\n`;
790
-
791
- // Step 4: Delete account
792
- const deleteAccountUrl = "https://api.puter.com/delete-own-user";
793
- const deleteAccountData = { password: accountPassword };
794
-
795
- const deleteAccountResponse = await fetch(deleteAccountUrl, {
796
- method: 'POST',
797
- headers: headers,
798
- body: JSON.stringify(deleteAccountData)
799
- });
800
-
801
- if (!deleteAccountResponse.ok) {
802
- throw new Error(`Account deletion failed with status: ${deleteAccountResponse.status}`);
803
- }
804
-
805
- const deleteAccountDataJson = await deleteAccountResponse.json();
806
- responseBox.textContent += `✅ Process completed successfully.`;
807
-
808
- // Update step indicator and show success message
809
- document.getElementById('step2').classList.remove('active');
810
- document.getElementById('step3').classList.add('active');
811
- document.getElementById('successMessage').style.display = 'block';
812
-
813
- } catch (error) {
814
- responseBox.textContent += `❌ Error: ${error.message}`;
815
- document.getElementById('confirmationForm').style.display = 'block';
816
- } finally {
817
- loadingIndicator.style.display = 'none';
818
  }
819
- });
820
-
821
- // Reset form for new request
822
- document.getElementById('newRequestBtn').addEventListener('click', function() {
823
- document.getElementById('email').value = '';
824
- document.getElementById('confirmationCode').value = '';
825
- codeInputs.forEach(input => input.value = '');
826
- document.getElementById('responseBox').textContent = '';
827
-
828
- document.getElementById('successMessage').style.display = 'none';
829
- document.getElementById('accountForm').style.display = 'block';
830
-
831
- document.getElementById('step3').classList.remove('active');
832
- document.getElementById('step2').classList.remove('active');
833
- document.getElementById('step1').classList.add('active');
834
- });
835
  </script>
 
836
  </body>
837
  </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>TERMINAL_ACCESS: Western Wall Surveillance</title>
 
7
  <style>
8
  :root {
9
+ --neon-green: #0f0;
10
+ --dark-bg: #000;
11
+ --terminal-bg: rgba(0, 10, 2, 0.9);
12
+ --grid-color: rgba(0, 255, 0, 0.05);
13
+ --text-glow: 0 0 5px rgba(0, 255, 0, 0.7);
14
+ --border-glow: 0 0 10px rgba(0, 255, 0, 0.5);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  }
16
 
17
  * {
18
  margin: 0;
19
  padding: 0;
20
  box-sizing: border-box;
21
+ font-family: 'Courier New', monospace;
22
  }
23
 
24
  body {
25
+ background-color: var(--dark-bg);
26
+ color: var(--neon-green);
27
+ background-image:
28
+ linear-gradient(var(--grid-color) 1px, transparent 1px),
29
+ linear-gradient(90deg, var(--grid-color) 1px, transparent 1px);
30
+ background-size: 20px 20px;
31
+ padding: 20px;
32
  min-height: 100vh;
33
  display: flex;
34
+ flex-direction: column;
35
+ overflow-x: hidden;
 
 
 
 
36
  }
37
 
38
+ header {
39
+ text-align: center;
40
+ margin-bottom: 20px;
41
+ border-bottom: 1px solid var(--neon-green);
42
+ padding-bottom: 15px;
43
+ text-shadow: var(--text-glow);
 
 
 
 
 
44
  }
45
 
46
+ .glitch-text {
47
+ font-size: 2rem;
48
+ font-weight: bold;
49
+ letter-spacing: 2px;
50
+ animation: glitch 3s infinite alternate;
 
 
 
 
 
 
51
  }
52
 
53
+ .status-bar {
54
+ display: flex;
55
+ justify-content: space-between;
56
+ margin-bottom: 10px;
57
+ font-size: 0.8rem;
58
+ padding: 5px;
59
+ border: 1px solid var(--neon-green);
60
+ box-shadow: var(--border-glow);
 
 
 
61
  }
62
 
63
+ .status-item {
 
 
64
  display: flex;
65
  align-items: center;
 
66
  }
67
 
68
+ .status-indicator {
69
+ width: 10px;
70
+ height: 10px;
71
+ border-radius: 50%;
72
+ background-color: var(--neon-green);
73
+ margin-right: 5px;
74
+ animation: blink 1.5s infinite;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  }
76
 
77
+ .terminal-window {
78
+ background-color: var(--terminal-bg);
79
+ border: 1px solid var(--neon-green);
80
+ border-radius: 5px;
81
+ padding: 15px;
82
+ margin-bottom: 20px;
83
+ box-shadow: var(--border-glow);
84
  }
85
 
86
+ .terminal-header {
87
+ display: flex;
88
+ justify-content: space-between;
89
+ margin-bottom: 10px;
90
+ border-bottom: 1px dashed var(--neon-green);
91
+ padding-bottom: 5px;
 
92
  }
93
 
94
+ .terminal-title {
95
+ font-weight: bold;
 
 
 
 
 
 
 
 
96
  }
97
 
98
+ .terminal-content {
99
+ font-size: 0.9rem;
100
+ margin-bottom: 10px;
 
 
101
  }
102
 
103
+ .terminal-prompt::before {
104
+ content: "root@surveillance:~$ ";
 
 
 
 
105
  }
106
 
107
+ .terminal-prompt {
108
+ display: inline-block;
109
  width: 100%;
110
+ white-space: nowrap;
 
 
 
 
 
 
 
 
 
111
  overflow: hidden;
112
+ animation: typing 3s steps(60, end);
 
 
 
 
 
113
  }
114
 
115
+ .webcam-container {
116
+ position: relative;
117
+ width: 100%;
118
+ padding-top: 10px;
119
+ overflow: hidden;
120
+ border: 1px solid var(--neon-green);
121
+ border-radius: 5px;
122
+ box-shadow: var(--border-glow);
123
  }
124
 
125
+ .webcam-overlay {
 
126
  position: absolute;
127
  top: 0;
128
  left: 0;
129
  width: 100%;
130
  height: 100%;
131
+ pointer-events: none;
132
+ background:
133
+ linear-gradient(rgba(0, 255, 0, 0.1), rgba(0, 255, 0, 0.1)),
134
+ repeating-linear-gradient(transparent, transparent 2px, rgba(0, 0, 0, 0.1) 3px, rgba(0, 0, 0, 0.1) 3px);
135
+ z-index: 10;
136
  }
137
 
138
+ .webcam-frame {
139
+ width: 100%;
140
+ height: 70vh;
141
+ border: none;
142
+ display: block;
143
  }
144
 
145
+ .data-stream {
146
+ height: 80px;
147
+ overflow: hidden;
148
+ margin-top: 20px;
149
+ font-size: 0.7rem;
150
+ opacity: 0.8;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  }
152
 
153
+ .data-line {
154
+ white-space: nowrap;
155
+ animation: scrollLeft 20s linear infinite;
 
 
 
 
 
 
 
156
  }
157
 
158
+ footer {
159
+ margin-top: auto;
160
+ text-align: center;
161
+ font-size: 0.8rem;
162
+ padding: 10px;
163
+ border-top: 1px solid var(--neon-green);
164
  }
165
 
166
+ /* Audio control button */
167
+ .audio-control {
168
+ position: fixed;
169
+ top: 20px;
170
+ right: 20px;
171
+ z-index: 100;
172
+ display: flex;
173
+ align-items: center;
174
+ gap: 10px;
175
+ background-color: var(--terminal-bg);
176
+ border: 1px solid var(--neon-green);
177
+ border-radius: 5px;
178
+ padding: 8px 12px;
179
+ box-shadow: var(--border-glow);
180
+ cursor: pointer;
181
+ transition: all 0.3s ease;
182
  }
183
 
184
+ .audio-control:hover {
185
+ background-color: rgba(0, 20, 5, 0.9);
 
 
186
  }
187
 
188
+ .audio-icon {
189
+ width: 20px;
190
+ height: 20px;
 
 
191
  position: relative;
192
  }
193
 
194
+ .audio-icon::before,
195
+ .audio-icon::after {
196
  content: '';
197
  position: absolute;
198
+ background-color: var(--neon-green);
199
+ }
200
+
201
+ .audio-icon::before {
202
+ width: 8px;
203
+ height: 8px;
204
+ border-radius: 0 8px 8px 0;
205
+ left: 0;
206
+ top: 6px;
207
  }
208
 
209
+ .audio-icon::after {
210
+ width: 2px;
211
+ height: 12px;
212
+ left: 0;
213
+ top: 4px;
214
  }
215
 
216
+ .audio-waves {
 
 
 
 
217
  display: flex;
218
  align-items: center;
219
+ height: 16px;
 
 
 
 
 
 
220
  }
221
 
222
+ .audio-wave {
223
+ width: 2px;
224
+ background-color: var(--neon-green);
225
+ margin-right: 2px;
226
+ border-radius: 1px;
227
+ animation: soundWave 1s infinite alternate;
228
  }
229
 
230
+ .audio-wave:nth-child(1) {
231
+ height: 8px;
232
+ animation-delay: 0.1s;
 
 
233
  }
234
 
235
+ .audio-wave:nth-child(2) {
236
+ height: 12px;
237
+ animation-delay: 0.2s;
238
  }
239
 
240
+ .audio-wave:nth-child(3) {
241
+ height: 16px;
242
+ animation-delay: 0.3s;
 
243
  }
244
 
245
+ .audio-wave:nth-child(4) {
246
+ height: 10px;
247
+ animation-delay: 0.4s;
 
248
  }
249
 
250
+ .audio-control.muted .audio-wave {
251
+ animation: none;
252
+ height: 2px;
 
 
 
253
  }
254
 
255
+ .audio-label {
256
+ font-size: 0.8rem;
257
+ text-transform: uppercase;
258
+ letter-spacing: 1px;
259
  }
260
 
261
+ /* Loading screen */
262
+ .loading-screen {
263
+ position: fixed;
264
+ top: 0;
265
+ left: 0;
266
+ width: 100%;
267
+ height: 100%;
268
+ background-color: #000;
269
+ z-index: 9999;
 
 
 
270
  display: flex;
271
+ flex-direction: column;
272
  justify-content: center;
273
+ align-items: center;
274
+ transition: opacity 1s ease-out;
275
+ }
276
+
277
+ .loading-content {
278
+ text-align: center;
279
+ color: var(--neon-green);
280
+ }
281
+
282
+ .loading-image {
283
+ width: 200px;
284
+ height: 200px;
285
+ border-radius: 50%;
286
+ border: 3px solid var(--neon-green);
287
+ margin-bottom: 20px;
288
+ box-shadow: 0 0 20px rgba(0, 255, 0, 0.7);
289
+ object-fit: cover;
290
  }
291
 
292
+ .loading-text {
293
+ font-family: 'Amiri', 'Arial', sans-serif;
294
+ font-size: 2rem;
295
+ margin-bottom: 30px;
296
+ text-shadow: var(--text-glow);
297
+ direction: rtl;
298
+ }
299
+
300
+ .loading-progress-container {
301
+ width: 300px;
302
+ height: 10px;
303
+ background-color: rgba(0, 255, 0, 0.2);
304
+ border-radius: 5px;
305
+ overflow: hidden;
306
+ margin-bottom: 10px;
307
+ margin-left: auto; /* Add this line */
308
+ margin-right: auto; /* Add this line */
309
+ }
310
+
311
+ .loading-progress-bar {
312
+ height: 100%;
313
+ width: 0%;
314
+ background-color: var(--neon-green);
315
+ transition: width 0.5s;
316
+ }
317
+
318
+ .loading-percentage {
319
+ font-size: 1rem;
320
+ letter-spacing: 2px;
321
+ text-align: center; /* Add this line */
322
+ width: 100%; /* Add this line */
323
+ }
324
+
325
+ .loading-message {
326
+ margin-top: 20px;
327
+ font-size: 0.9rem;
328
+ opacity: 0.8;
329
+ max-width: 80%;
330
+ text-align: center;
331
  }
332
 
333
+ @keyframes soundWave {
334
+ 0% { height: 4px; }
335
+ 100% { height: 16px; }
336
  }
337
 
338
+ @keyframes blink {
339
+ 0%, 100% { opacity: 1; }
340
+ 50% { opacity: 0.3; }
341
  }
342
 
343
+ @keyframes typing {
344
+ from { width: 0; }
345
+ to { width: 100%; }
 
 
 
346
  }
347
 
348
+ @keyframes scrollLeft {
349
+ 0% { transform: translateX(100%); }
350
+ 100% { transform: translateX(-100%); }
 
 
 
 
 
 
 
 
 
351
  }
352
 
353
+ @keyframes glitch {
354
+ 0% { text-shadow: 0.05em 0 0 rgba(255, 0, 0, 0.75), -0.05em -0.025em 0 rgba(0, 255, 0, 0.75), -0.025em 0.05em 0 rgba(0, 0, 255, 0.75); }
355
+ 14% { text-shadow: 0.05em 0 0 rgba(255, 0, 0, 0.75), -0.05em -0.025em 0 rgba(0, 255, 0, 0.75), -0.025em 0.05em 0 rgba(0, 0, 255, 0.75); }
356
+ 15% { text-shadow: -0.05em -0.025em 0 rgba(255, 0, 0, 0.75), 0.025em 0.025em 0 rgba(0, 255, 0, 0.75), -0.05em -0.05em 0 rgba(0, 0, 255, 0.75); }
357
+ 49% { text-shadow: -0.05em -0.025em 0 rgba(255, 0, 0, 0.75), 0.025em 0.025em 0 rgba(0, 255, 0, 0.75), -0.05em -0.05em 0 rgba(0, 0, 255, 0.75); }
358
+ 50% { text-shadow: 0.025em 0.05em 0 rgba(255, 0, 0, 0.75), 0.05em 0 0 rgba(0, 255, 0, 0.75), 0 -0.05em 0 rgba(0, 0, 255, 0.75); }
359
+ 99% { text-shadow: 0.025em 0.05em 0 rgba(255, 0, 0, 0.75), 0.05em 0 0 rgba(0, 255, 0, 0.75), 0 -0.05em 0 rgba(0, 0, 255, 0.75); }
360
+ 100% { text-shadow: -0.025em 0 0 rgba(255, 0, 0, 0.75), -0.025em -0.025em 0 rgba(0, 255, 0, 0.75), -0.025em -0.05em 0 rgba(0, 0, 255, 0.75); }
361
  }
362
 
363
  /* Responsive adjustments */
364
+ @media (max-width: 768px) {
365
+ .glitch-text {
366
+ font-size: 1.5rem;
367
  }
368
 
369
+ .webcam-frame {
370
+ height: 50vh;
371
  }
372
 
373
+ .status-bar {
374
+ flex-direction: column;
375
+ gap: 5px;
376
  }
377
 
378
+ .terminal-content {
379
+ font-size: 0.8rem;
380
  }
381
 
382
+ .audio-control {
383
+ top: 10px;
384
+ right: 10px;
385
+ padding: 5px 8px;
386
  }
387
 
388
+ .loading-image {
389
+ width: 150px;
390
+ height: 150px;
391
  }
392
 
393
+ .loading-text {
394
+ font-size: 1.5rem;
395
  }
396
 
397
+ .loading-progress-container {
398
+ width: 250px;
 
 
399
  }
400
  }
401
  </style>
402
+ <!-- Add Amiri font for Arabic text -->
403
+ <link href="https://fonts.googleapis.com/css2?family=Amiri:wght@400;700&display=swap" rel="stylesheet">
404
  </head>
405
  <body>
406
+ <!-- Loading Screen -->
407
+ <div id="loadingScreen" class="loading-screen">
408
+ <div class="loading-content">
409
+ <img src="abu_aubida.png" alt="Abu Aubida" class="loading-image">
410
+ <div class="loading-text">جاري تحميل نظام المراقبة</div>
411
+ <div class="loading-progress-container">
412
+ <div id="loadingProgressBar" class="loading-progress-bar"></div>
 
 
 
 
 
 
 
 
 
 
 
 
413
  </div>
414
+ <div id="loadingPercentage" class="loading-percentage">0%</div>
415
+ <div class="loading-message">
416
+ تحميل وحدات المراقبة... إنشاء اتصال آمن... تجاوز بروتوكولات الأمان...
417
  </div>
418
  </div>
419
+ </div>
420
 
421
+ <header>
422
+ <h1 class="glitch-text">SURVEILLANCE SYSTEM</h1>
423
+ <p>ACCESS LEVEL: CLASSIFIED</p>
424
+ </header>
425
+
426
+ <!-- Audio Control Button -->
427
+ <div id="audioControl" class="audio-control">
428
+ <div class="audio-icon"></div>
429
+ <div class="audio-waves">
430
+ <div class="audio-wave"></div>
431
+ <div class="audio-wave"></div>
432
+ <div class="audio-wave"></div>
433
+ <div class="audio-wave"></div>
434
  </div>
435
+ <span class="audio-label">AUDIO</span>
436
+ </div>
437
+
438
+ <!-- Background Audio -->
439
+ <audio id="bgAudio" autoplay loop>
440
+ <source src="torabora__1727352333.m4a" type="audio/mp4">
441
+ Your browser does not support the audio element.
442
+ </audio>
443
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
444
 
445
+ <div class="status-bar">
446
+ <div class="status-item">
447
+ <div class="status-indicator"></div>
448
+ <span>LIVE FEED</span>
 
 
 
449
  </div>
450
+ <div class="status-item">
451
+ <span id="current-time">--:--:--</span>
452
+ </div>
453
+ <div class="status-item">
454
+ <span>ENCRYPTION: ACTIVE</span>
455
+ </div>
456
+ </div>
457
 
458
+ <div class="terminal-window">
459
+ <div class="terminal-header">
460
+ <div class="terminal-title">TERMINAL ACCESS</div>
461
+ <div class="terminal-controls">SESSION: #7F3D2A9B</div>
462
+ </div>
463
+ <div class="terminal-content">
464
+ <p class="terminal-prompt">initializing surveillance module...</p>
465
+ <p class="terminal-prompt">establishing secure connection to target location...</p>
466
+ <p class="terminal-prompt">bypassing security protocols...</p>
467
+ <p class="terminal-prompt">accessing Western Wall live feed...</p>
468
+ <p class="terminal-prompt">connection established. rendering visual data...</p>
469
  </div>
470
  </div>
471
 
472
+ <div class="webcam-container">
473
+ <div class="webcam-overlay"></div>
474
+ <iframe class="webcam-frame" src="https://share.earthcam.net/tJ90CoLmq7TzrY396Yd88FszUBQXSsaa2UfVVJUL4rU!.tJ90CoLmq7TzrY396Yd88Oz5cQ2aIzlk7JZQa_rfG-I!/aish_hatorah_western_wall_webcam/western_wall_cam/live" allowfullscreen></iframe>
475
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
476
 
477
+ <div class="data-stream">
478
+ <div class="data-line">
479
+ 01001001 01101110 01110100 01100101 01110010 01100011 01100101 01110000 01110100 01101001 01101110 01100111 00100000 01100100 01100001 01110100 01100001 00100000 01110011 01110100 01110010 01100101 01100001 01101101 00100000 01100110 01110010 01101111 01101101 00100000 01110100 01100001 01110010 01100111 01100101 01110100 00100000 01101100 01101111 01100011 01100001 01110100 01101001 01101111 01101110 00101110 00100000 01000001 01101110 01100001 01101100 01111001 01111010 01101001 01101110 01100111 00100000 01110000 01100001 01110100 01110100 01100101 01110010 01101110 01110011 00101110 00100000 01010011 01100101 01100011 01110101 01110010 01101001 01110100 01111001 00100000 01101100 01100101 01110110 01100101 01101100 00111010 00100000 01000001 01101100 01110000 01101000 01100001 00101110
480
+ </div>
481
+ </div>
 
 
 
 
482
 
483
+ <footer>
484
+ <p>SECURE CONNECTION ESTABLISHED | LOCATION: 31.7767° N, 35.2345° E | SYSTEM v3.1.4</p>
485
+ </footer>
486
 
487
+ <script>
488
+ const loadingScreen = document.getElementById('loadingScreen');
489
+ const progressBar = document.getElementById('loadingProgressBar');
490
+ const percentageText = document.getElementById('loadingPercentage');
491
+ const audioControl = document.getElementById('audioControl');
492
+ const bgAudio = document.getElementById('bgAudio');
493
+ const terminalContent = document.querySelector('.terminal-content');
494
+
495
+ let audioPlaying = false;
496
+
497
+ // Set initial volume and force autoplay muted
498
+ bgAudio.volume = 0.6;
499
+ bgAudio.muted = true;
500
+ bgAudio.play().catch(e => {
501
+ console.log("Muted autoplay might be blocked in some browsers:", e);
502
  });
503
+
504
+ // Function to unmute and play audio on first user interaction
505
+ function unmuteAudioOnInteraction() {
506
+ if (!audioPlaying) {
507
+ bgAudio.muted = false;
508
+ bgAudio.volume = 0.6;
509
+ bgAudio.play().then(() => {
510
+ audioPlaying = true;
511
+ audioControl.classList.remove('muted');
512
+ if (!loadingScreen || loadingScreen.style.display === 'none') {
513
+ addAudioMessage('on');
514
+ }
515
+ }).catch(e => {
516
+ console.log("Auto-play prevented after unmute:", e);
517
+ });
518
+ }
519
+
520
+ // Remove all user interaction listeners after first interaction
521
+ document.body.removeEventListener('mousemove', unmuteAudioOnInteraction);
522
+ document.body.removeEventListener('touchstart', unmuteAudioOnInteraction);
523
+ document.body.removeEventListener('keydown', unmuteAudioOnInteraction);
524
+ document.body.removeEventListener('click', unmuteAudioOnInteraction);
525
+ }
526
+
527
+ // Run when page is ready
528
+ document.addEventListener('DOMContentLoaded', function () {
529
+ // Set up unmute triggers
530
+ document.body.addEventListener('mousemove', unmuteAudioOnInteraction, { once: true });
531
+ document.body.addEventListener('touchstart', unmuteAudioOnInteraction, { once: true });
532
+ document.body.addEventListener('keydown', unmuteAudioOnInteraction, { once: true });
533
+ document.body.addEventListener('click', unmuteAudioOnInteraction, { once: true });
534
+
535
+ // Try unmuting shortly after load (some browsers may allow it)
536
+ setTimeout(() => {
537
+ unmuteAudioOnInteraction();
538
+ }, 500);
 
 
 
 
 
 
 
 
 
 
 
 
 
539
  });
540
+
541
+ // Force audio to play on iOS when user taps screen
542
+ window.addEventListener('touchend', function () {
543
+ if (!audioPlaying) {
544
+ unmuteAudioOnInteraction();
 
 
 
 
 
 
 
545
  }
546
+ }, { once: true });
547
+
548
+ // Add terminal message about audio status
549
+ function addAudioMessage(status) {
550
+ const p = document.createElement('p');
551
+ p.className = 'terminal-prompt';
552
+ p.textContent = status === 'on'
553
+ ? "ambient audio module activated..."
554
+ : "ambient audio module deactivated...";
555
+ terminalContent.appendChild(p);
556
+
557
+ if (terminalContent.children.length > 10) {
558
+ terminalContent.removeChild(terminalContent.children[0]);
 
 
 
 
 
 
 
 
559
  }
560
+ }
561
+
562
+ // Toggle audio on control button click
563
+ audioControl.addEventListener('click', function () {
564
+ if (audioPlaying) {
565
+ bgAudio.pause();
566
+ audioControl.classList.add('muted');
567
+ addAudioMessage('off');
568
+ audioPlaying = false;
569
+ } else {
570
+ bgAudio.play().then(() => {
571
+ bgAudio.muted = false;
572
+ audioControl.classList.remove('muted');
573
+ addAudioMessage('on');
574
+ audioPlaying = true;
575
+ }).catch(e => {
576
+ console.log("Audio playback failed:", e);
577
+ const p = document.createElement('p');
578
+ p.className = 'terminal-prompt';
579
+ p.textContent = "audio module requires user interaction to activate...";
580
+ terminalContent.appendChild(p);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
581
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
582
  }
583
  });
584
+
585
+ // Loading screen progress simulation
586
+ let progress = 0;
587
+ const loadingInterval = setInterval(() => {
588
+ progress += Math.random() * 5;
589
+ if (progress >= 100) {
590
+ progress = 100;
591
+ clearInterval(loadingInterval);
592
+
593
+ setTimeout(() => {
594
+ loadingScreen.style.opacity = '0';
595
+ setTimeout(() => {
596
+ loadingScreen.style.display = 'none';
597
+ if (audioPlaying) {
598
+ addAudioMessage('on');
599
+ }
600
+ }, 1000);
601
+ }, 500);
602
  }
603
+
604
+ progressBar.style.width = `${progress}%`;
605
+ percentageText.textContent = `${Math.floor(progress)}%`;
606
+ }, 200);
607
+
608
+ // Clock update
609
+ function updateTime() {
610
+ const now = new Date();
611
+ const timeElement = document.getElementById('current-time');
612
+ timeElement.textContent = now.toTimeString().split(' ')[0];
613
+ }
614
+ setInterval(updateTime, 1000);
615
+ updateTime();
616
+
617
+ // Random terminal messages
618
+ const messages = [
619
+ "analyzing crowd patterns...",
620
+ "facial recognition active...",
621
+ "monitoring movement at coordinates 31.7767° N, 35.2345° E...",
622
+ "satellite uplink stable...",
623
+ "processing visual data...",
624
+ "enhancing image quality...",
625
+ "tracking target area...",
626
+ "maintaining secure connection..."
627
+ ];
628
+
629
+ setInterval(() => {
630
+ if (Math.random() > 0.7) {
631
+ const p = document.createElement('p');
632
+ p.className = 'terminal-prompt';
633
+ p.textContent = messages[Math.floor(Math.random() * messages.length)];
634
+ terminalContent.appendChild(p);
635
+ if (terminalContent.children.length > 10) {
636
+ terminalContent.removeChild(terminalContent.children[0]);
637
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
638
  }
639
+ }, 3000);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
640
  </script>
641
+
642
  </body>
643
  </html>