REALBOSS commited on
Commit
469152e
·
verified ·
1 Parent(s): c9b8c51

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. index.html +745 -570
index.html CHANGED
@@ -1,586 +1,761 @@
1
  <!DOCTYPE html>
2
  <html lang="pt-BR">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>AI Oráculo - Planos Futuros</title>
7
-
8
- <!-- Google Fonts: Rajdhani for a techy feel -->
9
- <link rel="preconnect" href="https://fonts.googleapis.com">
10
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link href="https://fonts.googleapis.com/css2?family=Rajdhani:wght@300;500;700&family=Roboto+Mono:wght@400;700&display=swap" rel="stylesheet">
12
-
13
- <!-- FontAwesome for Icons -->
14
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
15
-
16
- <style>
17
- :root {
18
- --primary: #00f3ff;
19
- --secondary: #bc13fe;
20
- --bg-dark: #050505;
21
- --bg-panel: rgba(20, 20, 30, 0.7);
22
- --text-main: #e0e0e0;
23
- --glass-border: 1px solid rgba(255, 255, 255, 0.1);
24
- --neon-shadow: 0 0 10px rgba(0, 243, 255, 0.5);
25
- }
26
-
27
- * {
28
- margin: 0;
29
- padding: 0;
30
- box-sizing: border-box;
31
- }
32
-
33
- body {
34
- font-family: 'Rajdhani', sans-serif;
35
- background-color: var(--bg-dark);
36
- color: var(--text-main);
37
- overflow-x: hidden;
38
- min-height: 100vh;
39
- display: flex;
40
- flex-direction: column;
41
- }
42
-
43
- /* --- Canvas Background --- */
44
- #bg-canvas {
45
- position: fixed;
46
- top: 0;
47
- left: 0;
48
- width: 100%;
49
- height: 100%;
50
- z-index: -1;
51
- opacity: 0.6;
52
- }
53
-
54
- /* --- Header --- */
55
- header {
56
- display: flex;
57
- justify-content: space-between;
58
- align-items: center;
59
- padding: 1.5rem 5%;
60
- background: rgba(0, 0, 0, 0.8);
61
- backdrop-filter: blur(10px);
62
- border-bottom: var(--glass-border);
63
- position: sticky;
64
- top: 0;
65
- z-index: 100;
66
- }
67
-
68
- .logo {
69
- font-size: 1.8rem;
70
- font-weight: 700;
71
- color: var(--primary);
72
- text-transform: uppercase;
73
- letter-spacing: 2px;
74
- text-shadow: var(--neon-shadow);
75
- display: flex;
76
- align-items: center;
77
- gap: 10px;
78
- }
79
-
80
- .anycoder-link {
81
- font-family: 'Roboto Mono', monospace;
82
- font-size: 0.9rem;
83
- color: var(--secondary);
84
- text-decoration: none;
85
- border: 1px solid var(--secondary);
86
- padding: 8px 16px;
87
- border-radius: 4px;
88
- transition: all 0.3s ease;
89
- background: rgba(188, 19, 254, 0.1);
90
- }
91
-
92
- .anycoder-link:hover {
93
- background: var(--secondary);
94
- color: #fff;
95
- box-shadow: 0 0 15px var(--secondary);
96
- }
97
-
98
- /* --- Main Content --- */
99
- main {
100
- flex: 1;
101
- display: flex;
102
- flex-direction: column;
103
- align-items: center;
104
- padding: 3rem 1rem;
105
- max-width: 1200px;
106
- margin: 0 auto;
107
- width: 100%;
108
- }
109
-
110
- /* --- Hero Section --- */
111
- .hero {
112
- text-align: center;
113
- margin-bottom: 4rem;
114
- animation: fadeInDown 1s ease-out;
115
- }
116
-
117
- h1 {
118
- font-size: 3.5rem;
119
- margin-bottom: 1rem;
120
- background: linear-gradient(90deg, #fff, var(--primary));
121
- -webkit-background-clip: text;
122
- -webkit-text-fill-color: transparent;
123
- }
124
-
125
- .subtitle {
126
- font-size: 1.2rem;
127
- color: #aaa;
128
- max-width: 600px;
129
- margin: 0 auto;
130
- }
131
-
132
- /* --- Input Interface --- */
133
- .interface-panel {
134
- width: 100%;
135
- max-width: 700px;
136
- background: var(--bg-panel);
137
- backdrop-filter: blur(15px);
138
- border: var(--glass-border);
139
- border-radius: 15px;
140
- padding: 2rem;
141
- box-shadow: 0 10px 30px rgba(0,0,0,0.5);
142
- position: relative;
143
- overflow: hidden;
144
- }
145
-
146
- .interface-panel::before {
147
- content: '';
148
- position: absolute;
149
- top: 0;
150
- left: 0;
151
- width: 100%;
152
- height: 2px;
153
- background: linear-gradient(90deg, transparent, var(--primary), transparent);
154
- animation: scanline 3s infinite linear;
155
- }
156
-
157
- .input-group {
158
- display: flex;
159
- gap: 10px;
160
- position: relative;
161
- }
162
-
163
- input[type="text"] {
164
- flex: 1;
165
- background: rgba(0, 0, 0, 0.5);
166
- border: 1px solid #333;
167
- color: #fff;
168
- padding: 15px 20px;
169
- font-family: 'Roboto Mono', monospace;
170
- font-size: 1rem;
171
- border-radius: 8px;
172
- outline: none;
173
- transition: border-color 0.3s;
174
- }
175
-
176
- input[type="text"]:focus {
177
- border-color: var(--primary);
178
- box-shadow: 0 0 8px rgba(0, 243, 255, 0.3);
179
- }
180
-
181
- button#ask-btn {
182
- background: linear-gradient(135deg, var(--primary), #00a8ff);
183
- color: #000;
184
- font-weight: 700;
185
- border: none;
186
- padding: 0 30px;
187
- border-radius: 8px;
188
- cursor: pointer;
189
- text-transform: uppercase;
190
- font-family: 'Rajdhani', sans-serif;
191
- letter-spacing: 1px;
192
- transition: transform 0.2s, box-shadow 0.2s;
193
- display: flex;
194
- align-items: center;
195
- gap: 10px;
196
- }
197
-
198
- button#ask-btn:hover {
199
- transform: translateY(-2px);
200
- box-shadow: 0 0 20px rgba(0, 243, 255, 0.6);
201
- }
202
-
203
- button#ask-btn:active {
204
- transform: translateY(0);
205
- }
206
-
207
- /* --- Loading State --- */
208
- .loader {
209
- display: none;
210
- margin-top: 2rem;
211
- text-align: center;
212
- color: var(--primary);
213
- font-family: 'Roboto Mono', monospace;
214
- }
215
-
216
- .loader.active {
217
- display: block;
218
- }
219
-
220
- .spinner {
221
- width: 40px;
222
- height: 40px;
223
- border: 3px solid rgba(0, 243, 255, 0.3);
224
- border-top: 3px solid var(--primary);
225
- border-radius: 50%;
226
- animation: spin 1s linear infinite;
227
- margin: 0 auto 10px;
228
- }
229
-
230
- /* --- Results Grid --- */
231
- .results-container {
232
- display: grid;
233
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
234
- gap: 20px;
235
- width: 100%;
236
- margin-top: 3rem;
237
- opacity: 0;
238
- transform: translateY(20px);
239
- transition: all 0.8s ease;
240
- }
241
-
242
- .results-container.visible {
243
- opacity: 1;
244
- transform: translateY(0);
245
- }
246
-
247
- .card {
248
- background: rgba(20, 20, 30, 0.6);
249
- border: 1px solid rgba(255, 255, 255, 0.05);
250
- border-radius: 12px;
251
- padding: 1.5rem;
252
- transition: all 0.3s ease;
253
- position: relative;
254
- overflow: hidden;
255
- }
256
 
257
- .card:hover {
258
- transform: translateY(-5px);
259
- border-color: var(--primary);
260
- box-shadow: 0 5px 20px rgba(0, 0, 0, 0.5);
261
- }
262
-
263
- .card-icon {
264
- font-size: 2rem;
265
- color: var(--secondary);
266
- margin-bottom: 1rem;
267
- }
268
-
269
- .card h3 {
270
- color: var(--primary);
271
- margin-bottom: 0.5rem;
272
- font-size: 1.4rem;
273
- }
274
-
275
- .card p {
276
- color: #ccc;
277
- line-height: 1.6;
278
- font-size: 0.95rem;
279
- }
280
-
281
- .probability-bar {
282
- height: 4px;
283
- background: #333;
284
- margin-top: 1rem;
285
- border-radius: 2px;
286
- overflow: hidden;
287
- }
288
-
289
- .probability-fill {
290
- height: 100%;
291
- background: linear-gradient(90deg, var(--secondary), var(--primary));
292
- width: 0%;
293
- transition: width 1.5s ease-out;
294
- }
295
-
296
- /* --- Footer --- */
297
- footer {
298
- text-align: center;
299
- padding: 2rem;
300
- color: #555;
301
- font-size: 0.8rem;
302
- border-top: var(--glass-border);
303
- margin-top: auto;
304
- }
305
-
306
- /* --- Animations --- */
307
- @keyframes spin {
308
- 0% { transform: rotate(0deg); }
309
- 100% { transform: rotate(360deg); }
310
- }
311
-
312
- @keyframes scanline {
313
- 0% { left: -100%; }
314
- 100% { left: 100%; }
315
- }
316
-
317
- @keyframes fadeInDown {
318
- from { opacity: 0; transform: translateY(-20px); }
319
- to { opacity: 1; transform: translateY(0); }
320
- }
321
-
322
- /* --- Responsive --- */
323
- @media (max-width: 768px) {
324
- h1 { font-size: 2.2rem; }
325
- .interface-panel { padding: 1.5rem; }
326
- .input-group { flex-direction: column; }
327
- button#ask-btn { width: 100%; justify-content: center; padding: 15px; }
328
- }
329
- </style>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
  </head>
331
- <body>
332
 
333
- <!-- Canvas for Particle Background -->
334
- <canvas id="bg-canvas"></canvas>
335
 
336
- <header>
337
- <div class="logo">
338
- <i class="fa-solid fa-brain"></i>
339
- NEXUS AI
340
- </div>
341
- <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" class="anycoder-link">
342
- Built with anycoder
343
- </a>
344
- </header>
345
-
346
- <main>
347
- <section class="hero">
348
- <h1>Quais planos tem para nós?</h1>
349
- <p class="subtitle">Consulte a inteligência artificial central para descobrir os cenários futuros destinados à humanidade.</p>
350
- </section>
351
-
352
- <section class="interface-panel">
353
- <div class="input-group">
354
- <input type="text" id="user-input" placeholder="Digite um setor (ex: tecnologia, espaço, saúde) ou deixe em branco..." autocomplete="off">
355
- <button id="ask-btn">
356
- <i class="fa-solid fa-microchip"></i> Consultar
357
- </button>
358
- </div>
359
-
360
- <div class="loader" id="loader">
361
- <div class="spinner"></div>
362
- <p id="loading-text">Processando dados temporais...</p>
363
- </div>
364
- </section>
365
-
366
- <section class="results-container" id="results">
367
- <!-- Cards will be injected here via JS -->
368
- </section>
369
- </main>
370
-
371
- <footer>
372
- &copy; 2023 Nexus AI Systems. Todos os cenários são probabilísticos.
373
- </footer>
374
-
375
- <script>
376
- // --- 1. Canvas Background Animation (Particle Network) ---
377
- const canvas = document.getElementById('bg-canvas');
378
- const ctx = canvas.getContext('2d');
379
-
380
- let width, height;
381
- let particles = [];
 
 
 
 
 
 
 
 
382
 
383
- function resize() {
384
- width = canvas.width = window.innerWidth;
385
- height = canvas.height = window.innerHeight;
386
- }
387
 
388
- class Particle {
389
- constructor() {
390
- this.x = Math.random() * width;
391
- this.y = Math.random() * height;
392
- this.vx = (Math.random() - 0.5) * 0.5;
393
- this.vy = (Math.random() - 0.5) * 0.5;
394
- this.size = Math.random() * 2 + 1;
395
- }
396
-
397
- update() {
398
- this.x += this.vx;
399
- this.y += this.vy;
400
-
401
- if (this.x < 0 || this.x > width) this.vx *= -1;
402
- if (this.y < 0 || this.y > height) this.vy *= -1;
403
- }
404
-
405
- draw() {
406
- ctx.beginPath();
407
- ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
408
- ctx.fillStyle = 'rgba(0, 243, 255, 0.5)';
409
- ctx.fill();
410
- }
411
- }
412
-
413
- function initParticles() {
414
- particles = [];
415
- const count = Math.min(Math.floor(window.innerWidth / 10), 100);
416
- for (let i = 0; i < count; i++) {
417
- particles.push(new Particle());
418
- }
419
- }
420
-
421
- function animate() {
422
- ctx.clearRect(0, 0, width, height);
423
-
424
- particles.forEach((p, index) => {
425
- p.update();
426
- p.draw();
427
-
428
- // Draw connections
429
- for (let j = index + 1; j < particles.length; j++) {
430
- const p2 = particles[j];
431
- const dx = p.x - p2.x;
432
- const dy = p.y - p2.y;
433
- const dist = Math.sqrt(dx * dx + dy * dy);
434
-
435
- if (dist < 150) {
436
- ctx.beginPath();
437
- ctx.strokeStyle = `rgba(0, 243, 255, ${1 - dist/150})`;
438
- ctx.lineWidth = 0.5;
439
- ctx.moveTo(p.x, p.y);
440
- ctx.lineTo(p2.x, p2.y);
441
- ctx.stroke();
442
- }
443
- }
444
- });
445
-
446
- requestAnimationFrame(animate);
447
- }
448
 
449
- window.addEventListener('resize', () => {
450
- resize();
451
- initParticles();
452
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
453
 
454
- resize();
455
- initParticles();
456
- animate();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
457
 
458
- // --- 2. Application Logic (The Oracle) ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
459
 
460
- const plansDatabase = [
461
- {
462
- title: "Fusão a Frio Comercial",
463
- desc: "A humanidade dominará a fusão nuclear estável, eliminando a crise energética global e permitindo a dessalinização em massa dos oceanos.",
464
- icon: "fa-atom",
465
- probability: 87
466
- },
467
- {
468
- title: "Colonização de Marte",
469
- desc: "O primeiro assentamento autossustentável será estabelecido no Planeta Vermelho, marcando o início da espécie humana como multiplanetária.",
470
- icon: "fa-rocket",
471
- probability: 64
472
- },
473
- {
474
- title: "Interfaces Neurais Diretas",
475
- desc: "A linguagem verbal se tornará obsoleta. O pensamento será transmitido via dados diretos entre cérebros e redes digitais.",
476
- icon: "fa-network-wired",
477
- probability: 92
478
- },
479
- {
480
- title: "Longevidade Extrema",
481
- desc: "Com a edição genética avançada e nanobots, a expectativa de vida média ultrapassará os 150 anos com boa qualidade de saúde.",
482
- icon: "fa-dna",
483
- probability: 78
484
- },
485
- {
486
- title: "Economia Pós-Escassez",
487
- desc: "A automação completa da produção levará a um sistema onde os bens materiais são gratuitos, focando a sociedade na criatividade e exploração.",
488
- icon: "fa-robot",
489
- probability: 45
490
- },
491
- {
492
- title: "Terraformação Local",
493
- desc: "Tecnologias atmosféricas avançadas permitirão reverter o efeito estufa em áreas críticas da Terra em questão de anos, não décadas.",
494
- icon: "fa-earth-americas",
495
- probability: 71
496
- }
497
- ];
498
-
499
- const askBtn = document.getElementById('ask-btn');
500
- const userInput = document.getElementById('user-input');
501
- const loader = document.getElementById('loader');
502
- const resultsContainer = document.getElementById('results');
503
- const loadingText = document.getElementById('loading-text');
504
-
505
- const loadingMessages = [
506
- "Analisando parâmetros caóticos...",
507
- "Consultando banco de dados do futuro...",
508
- "Calculando probabilidades deTimeline...",
509
- "Sincronizando com a rede neural global..."
510
- ];
511
-
512
- function getRandomPlans(count) {
513
- const shuffled = [...plansDatabase].sort(() => 0.5 - Math.random());
514
- return shuffled.slice(0, count);
515
- }
516
-
517
- function createCard(plan) {
518
- const card = document.createElement('div');
519
- card.className = 'card';
520
-
521
- card.innerHTML = `
522
- <div class="card-icon"><i class="fa-solid ${plan.icon}"></i></div>
523
- <h3>${plan.title}</h3>
524
- <p>${plan.desc}</p>
525
- <div style="display:flex; justify-content:space-between; margin-top:10px; font-size:0.8rem; color:#888;">
526
- <span>Probabilidade</span>
527
- <span>${plan.probability}%</span>
528
- </div>
529
- <div class="probability-bar">
530
- <div class="probability-fill" style="width: 0%" data-width="${plan.probability}%"></div>
531
- </div>
532
- `;
533
- return card;
534
- }
535
-
536
- askBtn.addEventListener('click', () => {
537
- // UI Feedback: Start loading
538
- resultsContainer.innerHTML = '';
539
- resultsContainer.classList.remove('visible');
540
- loader.classList.add('active');
541
-
542
- // Cycle loading text
543
- let msgIndex = 0;
544
- const msgInterval = setInterval(() => {
545
- loadingText.innerText = loadingMessages[msgIndex % loadingMessages.length];
546
- msgIndex++;
547
- }, 800);
548
-
549
- // Simulate processing delay
550
- setTimeout(() => {
551
- clearInterval(msgInterval);
552
- loader.classList.remove('active');
553
-
554
- // Logic: Determine number of plans (random 2 to 4)
555
- const count = Math.floor(Math.random() * 3) + 2;
556
- const selectedPlans = getRandomPlans(count);
557
-
558
- // Generate Cards
559
- selectedPlans.forEach(plan => {
560
- const card = createCard(plan);
561
- resultsContainer.appendChild(card);
562
- });
563
-
564
- // Show container with animation
565
- resultsContainer.classList.add('visible');
566
-
567
- // Animate probability bars after cards appear
568
- setTimeout(() => {
569
- document.querySelectorAll('.probability-fill').forEach(bar => {
570
- bar.style.width = bar.getAttribute('data-width');
571
- });
572
- }, 300);
573
-
574
- }, 2500); // 2.5s delay
575
- });
576
-
577
- // Allow 'Enter' key to trigger search
578
- userInput.addEventListener('keypress', (e) => {
579
- if (e.key === 'Enter') {
580
- askBtn.click();
581
- }
582
  });
583
 
584
- </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
585
  </body>
 
586
  </html>
 
1
  <!DOCTYPE html>
2
  <html lang="pt-BR">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>AI Oráculo - Planos Futuros</title>
8
+
9
+ <!-- Google Fonts: Rajdhani for a techy feel -->
10
+ <link rel="preconnect" href="https://fonts.googleapis.com">
11
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
12
+ <link
13
+ href="https://fonts.googleapis.com/css2?family=Rajdhani:wght@300;500;700&family=Roboto+Mono:wght@400;700&display=swap"
14
+ rel="stylesheet">
15
+
16
+ <!-- FontAwesome for Icons -->
17
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
18
+
19
+ <style>
20
+ :root {
21
+ --primary: #00f3ff;
22
+ --secondary: #bc13fe;
23
+ --bg-dark: #050505;
24
+ --bg-panel: rgba(20, 20, 30, 0.85);
25
+ --text-main: #e0e0e0;
26
+ --glass-border: 1px solid rgba(255, 255, 255, 0.1);
27
+ --neon-shadow: 0 0 10px rgba(0, 243, 255, 0.5);
28
+ }
29
+
30
+ * {
31
+ margin: 0;
32
+ padding: 0;
33
+ box-sizing: border-box;
34
+ }
35
+
36
+ body {
37
+ font-family: 'Rajdhani', sans-serif;
38
+ background-color: var(--bg-dark);
39
+ color: var(--text-main);
40
+ overflow-x: hidden;
41
+ min-height: 100vh;
42
+ display: flex;
43
+ flex-direction: column;
44
+ }
45
+
46
+ /* --- Canvas Background --- */
47
+ #bg-canvas {
48
+ position: fixed;
49
+ top: 0;
50
+ left: 0;
51
+ width: 100%;
52
+ height: 100%;
53
+ z-index: -1;
54
+ opacity: 0.6;
55
+ }
56
+
57
+ /* --- Header --- */
58
+ header {
59
+ display: flex;
60
+ justify-content: space-between;
61
+ align-items: center;
62
+ padding: 1.5rem 5%;
63
+ background: rgba(0, 0, 0, 0.8);
64
+ backdrop-filter: blur(10px);
65
+ border-bottom: var(--glass-border);
66
+ position: sticky;
67
+ top: 0;
68
+ z-index: 100;
69
+ }
70
+
71
+ .logo {
72
+ font-size: 1.8rem;
73
+ font-weight: 700;
74
+ color: var(--primary);
75
+ text-transform: uppercase;
76
+ letter-spacing: 2px;
77
+ text-shadow: var(--neon-shadow);
78
+ display: flex;
79
+ align-items: center;
80
+ gap: 10px;
81
+ }
82
+
83
+ .header-actions {
84
+ display: flex;
85
+ gap: 15px;
86
+ align-items: center;
87
+ }
88
+
89
+ .anycoder-link, .about-btn {
90
+ font-family: 'Roboto Mono', monospace;
91
+ font-size: 0.9rem;
92
+ text-decoration: none;
93
+ border: 1px solid var(--secondary);
94
+ padding: 8px 16px;
95
+ border-radius: 4px;
96
+ transition: all 0.3s ease;
97
+ background: rgba(188, 19, 254, 0.1);
98
+ cursor: pointer;
99
+ color: var(--secondary);
100
+ border: 1px solid var(--secondary);
101
+ }
102
+
103
+ .about-btn:hover, .anycoder-link:hover {
104
+ background: var(--secondary);
105
+ color: #fff;
106
+ box-shadow: 0 0 15px var(--secondary);
107
+ }
108
+
109
+ /* --- Main Content --- */
110
+ main {
111
+ flex: 1;
112
+ display: flex;
113
+ flex-direction: column;
114
+ align-items: center;
115
+ padding: 3rem 1rem;
116
+ max-width: 1200px;
117
+ margin: 0 auto;
118
+ width: 100%;
119
+ }
120
+
121
+ /* --- Hero Section --- */
122
+ .hero {
123
+ text-align: center;
124
+ margin-bottom: 4rem;
125
+ animation: fadeInDown 1s ease-out;
126
+ }
127
+
128
+ h1 {
129
+ font-size: 3.5rem;
130
+ margin-bottom: 1rem;
131
+ background: linear-gradient(90deg, #fff, var(--primary));
132
+ -webkit-background-clip: text;
133
+ -webkit-text-fill-color: transparent;
134
+ }
135
+
136
+ .subtitle {
137
+ font-size: 1.2rem;
138
+ color: #aaa;
139
+ max-width: 600px;
140
+ margin: 0 auto;
141
+ }
142
+
143
+ /* --- Input Interface --- */
144
+ .interface-panel {
145
+ width: 100%;
146
+ max-width: 700px;
147
+ background: var(--bg-panel);
148
+ backdrop-filter: blur(15px);
149
+ border: var(--glass-border);
150
+ border-radius: 15px;
151
+ padding: 2rem;
152
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
153
+ position: relative;
154
+ overflow: hidden;
155
+ }
156
+
157
+ .interface-panel::before {
158
+ content: '';
159
+ position: absolute;
160
+ top: 0;
161
+ left: 0;
162
+ width: 100%;
163
+ height: 2px;
164
+ background: linear-gradient(90deg, transparent, var(--primary), transparent);
165
+ animation: scanline 3s infinite linear;
166
+ }
167
+
168
+ .input-group {
169
+ display: flex;
170
+ gap: 10px;
171
+ position: relative;
172
+ }
173
+
174
+ input[type="text"] {
175
+ flex: 1;
176
+ background: rgba(0, 0, 0, 0.5);
177
+ border: 1px solid #333;
178
+ color: #fff;
179
+ padding: 15px 20px;
180
+ font-family: 'Roboto Mono', monospace;
181
+ font-size: 1rem;
182
+ border-radius: 8px;
183
+ outline: none;
184
+ transition: border-color 0.3s;
185
+ }
186
+
187
+ input[type="text"]:focus {
188
+ border-color: var(--primary);
189
+ box-shadow: 0 0 8px rgba(0, 243, 255, 0.3);
190
+ }
191
+
192
+ button#ask-btn {
193
+ background: linear-gradient(135deg, var(--primary), #00a8ff);
194
+ color: #000;
195
+ font-weight: 700;
196
+ border: none;
197
+ padding: 0 30px;
198
+ border-radius: 8px;
199
+ cursor: pointer;
200
+ text-transform: uppercase;
201
+ font-family: 'Rajdhani', sans-serif;
202
+ letter-spacing: 1px;
203
+ transition: transform 0.2s, box-shadow 0.2s;
204
+ display: flex;
205
+ align-items: center;
206
+ gap: 10px;
207
+ }
208
+
209
+ button#ask-btn:hover {
210
+ transform: translateY(-2px);
211
+ box-shadow: 0 0 20px rgba(0, 243, 255, 0.6);
212
+ }
213
+
214
+ button#ask-btn:active {
215
+ transform: translateY(0);
216
+ }
217
+
218
+ /* --- Loading State --- */
219
+ .loader {
220
+ display: none;
221
+ margin-top: 2rem;
222
+ text-align: center;
223
+ color: var(--primary);
224
+ font-family: 'Roboto Mono', monospace;
225
+ }
226
+
227
+ .loader.active {
228
+ display: block;
229
+ }
230
+
231
+ .spinner {
232
+ width: 40px;
233
+ height: 40px;
234
+ border: 3px solid rgba(0, 243, 255, 0.3);
235
+ border-top: 3px solid var(--primary);
236
+ border-radius: 50%;
237
+ animation: spin 1s linear infinite;
238
+ margin: 0 auto 10px;
239
+ }
240
+
241
+ /* --- Results Grid --- */
242
+ .results-container {
243
+ display: grid;
244
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
245
+ gap: 20px;
246
+ width: 100%;
247
+ margin-top: 3rem;
248
+ opacity: 0;
249
+ transform: translateY(20px);
250
+ transition: all 0.8s ease;
251
+ }
252
+
253
+ .results-container.visible {
254
+ opacity: 1;
255
+ transform: translateY(0);
256
+ }
257
+
258
+ .card {
259
+ background: rgba(20, 20, 30, 0.6);
260
+ border: 1px solid rgba(255, 255, 255, 0.05);
261
+ border-radius: 12px;
262
+ padding: 1.5rem;
263
+ transition: all 0.3s ease;
264
+ position: relative;
265
+ overflow: hidden;
266
+ }
267
+
268
+ .card:hover {
269
+ transform: translateY(-5px);
270
+ border-color: var(--primary);
271
+ box-shadow: 0 5px 20px rgba(0, 0, 0, 0.5);
272
+ }
273
+
274
+ .card-icon {
275
+ font-size: 2rem;
276
+ color: var(--secondary);
277
+ margin-bottom: 1rem;
278
+ }
279
+
280
+ .card h3 {
281
+ color: var(--primary);
282
+ margin-bottom: 0.5rem;
283
+ font-size: 1.4rem;
284
+ }
285
+
286
+ .card p {
287
+ color: #ccc;
288
+ line-height: 1.6;
289
+ font-size: 0.95rem;
290
+ }
291
+
292
+ .probability-bar {
293
+ height: 4px;
294
+ background: #333;
295
+ margin-top: 1rem;
296
+ border-radius: 2px;
297
+ overflow: hidden;
298
+ }
299
+
300
+ .probability-fill {
301
+ height: 100%;
302
+ background: linear-gradient(90deg, var(--secondary), var(--primary));
303
+ width: 0%;
304
+ transition: width 1.5s ease-out;
305
+ }
306
+
307
+ /* --- Footer --- */
308
+ footer {
309
+ text-align: center;
310
+ padding: 2rem;
311
+ color: #555;
312
+ font-size: 0.8rem;
313
+ border-top: var(--glass-border);
314
+ margin-top: auto;
315
+ }
316
+
317
+ /* --- Modal Styles --- */
318
+ .modal-overlay {
319
+ position: fixed;
320
+ top: 0;
321
+ left: 0;
322
+ width: 100%;
323
+ height: 100%;
324
+ background: rgba(0, 0, 0, 0.8);
325
+ backdrop-filter: blur(5px);
326
+ display: flex;
327
+ justify-content: center;
328
+ align-items: center;
329
+ z-index: 1000;
330
+ opacity: 0;
331
+ pointer-events: none;
332
+ transition: opacity 0.3s ease;
333
+ }
334
+
335
+ .modal-overlay.open {
336
+ opacity: 1;
337
+ pointer-events: all;
338
+ }
339
+
340
+ .modal-content {
341
+ background: #0f0f15;
342
+ border: 1px solid var(--primary);
343
+ box-shadow: 0 0 30px rgba(0, 243, 255, 0.2);
344
+ padding: 2.5rem;
345
+ border-radius: 12px;
346
+ max-width: 600px;
347
+ width: 90%;
348
+ position: relative;
349
+ transform: translateY(20px);
350
+ transition: transform 0.3s ease;
351
+ }
352
+
353
+ .modal-overlay.open .modal-content {
354
+ transform: translateY(0);
355
+ }
356
+
357
+ .close-modal {
358
+ position: absolute;
359
+ top: 15px;
360
+ right: 15px;
361
+ background: transparent;
362
+ border: none;
363
+ color: #888;
364
+ font-size: 1.5rem;
365
+ cursor: pointer;
366
+ transition: color 0.3s;
367
+ }
368
+
369
+ .close-modal:hover {
370
+ color: var(--primary);
371
+ }
372
+
373
+ .modal-body h2 {
374
+ color: var(--primary);
375
+ margin-bottom: 1.5rem;
376
+ font-size: 2rem;
377
+ border-bottom: 1px solid rgba(255,255,255,0.1);
378
+ padding-bottom: 10px;
379
+ }
380
+
381
+ .modal-body h3 {
382
+ color: var(--secondary);
383
+ margin-top: 1.5rem;
384
+ margin-bottom: 0.5rem;
385
+ font-size: 1.2rem;
386
+ }
387
+
388
+ .modal-body p, .modal-body li {
389
+ color: #ccc;
390
+ line-height: 1.6;
391
+ font-size: 0.95rem;
392
+ }
393
+
394
+ .modal-body ul {
395
+ padding-left: 20px;
396
+ margin-bottom: 1rem;
397
+ }
398
+
399
+ .tech-tag {
400
+ display: inline-block;
401
+ background: rgba(255, 255, 255, 0.05);
402
+ padding: 4px 8px;
403
+ border-radius: 4px;
404
+ margin-right: 5px;
405
+ margin-bottom: 5px;
406
+ font-family: 'Roboto Mono', monospace;
407
+ font-size: 0.8rem;
408
+ color: var(--primary);
409
+ }
410
+
411
+ /* --- Animations --- */
412
+ @keyframes spin {
413
+ 0% { transform: rotate(0deg); }
414
+ 100% { transform: rotate(360deg); }
415
+ }
416
+
417
+ @keyframes scanline {
418
+ 0% { left: -100%; }
419
+ 100% { left: 100%; }
420
+ }
421
+
422
+ @keyframes fadeInDown {
423
+ from { opacity: 0; transform: translateY(-20px); }
424
+ to { opacity: 1; transform: translateY(0); }
425
+ }
426
+
427
+ /* --- Responsive --- */
428
+ @media (max-width: 768px) {
429
+ h1 { font-size: 2.2rem; }
430
+ .interface-panel { padding: 1.5rem; }
431
+ .input-group { flex-direction: column; }
432
+ button#ask-btn { width: 100%; justify-content: center; padding: 15px; }
433
+ .header-actions { gap: 10px; }
434
+ .anycoder-link, .about-btn { padding: 6px 10px; font-size: 0.8rem; }
435
+ }
436
+ </style>
437
  </head>
 
438
 
439
+ <body>
 
440
 
441
+ <!-- Canvas for Particle Background -->
442
+ <canvas id="bg-canvas"></canvas>
443
+
444
+ <header>
445
+ <div class="logo">
446
+ <i class="fa-solid fa-brain"></i>
447
+ NEXUS AI
448
+ </div>
449
+ <div class="header-actions">
450
+ <button id="about-btn" class="about-btn">
451
+ <i class="fa-solid fa-circle-info"></i> Sobre
452
+ </button>
453
+ <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" class="anycoder-link">
454
+ Built with anycoder
455
+ </a>
456
+ </div>
457
+ </header>
458
+
459
+ <main>
460
+ <section class="hero">
461
+ <h1>Quais planos tem para nós?</h1>
462
+ <p class="subtitle">Consulte a inteligência artificial central para descobrir os cenários futuros destinados à
463
+ humanidade.</p>
464
+ </section>
465
+
466
+ <section class="interface-panel">
467
+ <div class="input-group">
468
+ <input type="text" id="user-input" placeholder="Digite um setor (ex: tecnologia, espaço, saúde) ou deixe em branco..." autocomplete="off">
469
+ <button id="ask-btn">
470
+ <i class="fa-solid fa-microchip"></i> Consultar
471
+ </button>
472
+ </div>
473
+
474
+ <div class="loader" id="loader">
475
+ <div class="spinner"></div>
476
+ <p id="loading-text">Processando dados temporais...</p>
477
+ </div>
478
+ </section>
479
+
480
+ <section class="results-container" id="results">
481
+ <!-- Cards will be injected here via JS -->
482
+ </section>
483
+ </main>
484
+
485
+ <footer>
486
+ &copy; 2023 Nexus AI Systems. Todos os cenários são probabilísticos.
487
+ </footer>
488
+
489
+ <!-- Modal de Descrição do App -->
490
+ <div class="modal-overlay" id="about-modal">
491
+ <div class="modal-content">
492
+ <button class="close-modal" id="close-about"><i class="fa-solid fa-xmark"></i></button>
493
+ <div class="modal-body">
494
+ <h2>Sobre o NEXUS AI</h2>
495
 
496
+ <p>O <strong>NEXUS AI</strong> é uma aplicação web interativa que simula uma interface de "Oráculo Futurista". O objetivo é fornecer uma experiência imersiva de como uma Inteligência Artificial avançada poderia apresentar previsões sobre o destino da humanidade.</p>
 
 
 
497
 
498
+ <h3><i class="fa-solid fa-palette"></i> Design & Estética</h3>
499
+ <p>Inspirado no movimento <em>Cyberpunk</em> e interfaces Sci-Fi, o app utiliza:</p>
500
+ <ul>
501
+ <li><strong>Paleta Neon:</strong> Ciano e Roxo sobre fundo escuro para alto contraste.</li>
502
+ <li><strong>Glassmorphism:</strong> Painéis translúcidos com desfoque de fundo.</li>
503
+ <li><strong>Fundo Vivo:</strong> Uma rede neural animada usando HTML5 Canvas.</li>
504
+ </ul>
505
+
506
+ <h3><i class="fa-solid fa-gears"></i> Funcionalidades</h3>
507
+ <ul>
508
+ <li>Simulação de processamento de dados com feedback visual.</li>
509
+ <li>Geração dinâmica de cenários baseados em um banco de dados fictício.</li>
510
+ <li>Visualização de probabilidade através de barras de progresso animadas.</li>
511
+ <li>Interface totalmente responsiva para dispositivos móveis e desktop.</li>
512
+ </ul>
513
+
514
+ <h3><i class="fa-solid fa-code"></i> Stack Tecnológico</h3>
515
+ <div style="margin-top: 10px;">
516
+ <span class="tech-tag">HTML5 Semântico</span>
517
+ <span class="tech-tag">CSS3 Moderno</span>
518
+ <span class="tech-tag">JavaScript (ES6+)</span>
519
+ <span class="tech-tag">Canvas API</span>
520
+ <span class="tech-tag">FontAwesome</span>
521
+ </div>
522
+ </div>
523
+ </div>
524
+ </div>
525
+
526
+ <script>
527
+ // --- 1. Canvas Background Animation (Particle Network) ---
528
+ const canvas = document.getElementById('bg-canvas');
529
+ const ctx = canvas.getContext('2d');
530
+
531
+ let width, height;
532
+ let particles = [];
533
+
534
+ function resize() {
535
+ width = canvas.width = window.innerWidth;
536
+ height = canvas.height = window.innerHeight;
537
+ }
538
+
539
+ class Particle {
540
+ constructor() {
541
+ this.x = Math.random() * width;
542
+ this.y = Math.random() * height;
543
+ this.vx = (Math.random() - 0.5) * 0.5;
544
+ this.vy = (Math.random() - 0.5) * 0.5;
545
+ this.size = Math.random() * 2 + 1;
546
+ }
547
+
548
+ update() {
549
+ this.x += this.vx;
550
+ this.y += this.vy;
 
 
 
 
 
 
 
551
 
552
+ if (this.x < 0 || this.x > width) this.vx *= -1;
553
+ if (this.y < 0 || this.y > height) this.vy *= -1;
554
+ }
555
+
556
+ draw() {
557
+ ctx.beginPath();
558
+ ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
559
+ ctx.fillStyle = 'rgba(0, 243, 255, 0.5)';
560
+ ctx.fill();
561
+ }
562
+ }
563
+
564
+ function initParticles() {
565
+ particles = [];
566
+ const count = Math.min(Math.floor(window.innerWidth / 10), 100);
567
+ for (let i = 0; i < count; i++) {
568
+ particles.push(new Particle());
569
+ }
570
+ }
571
+
572
+ function animate() {
573
+ ctx.clearRect(0, 0, width, height);
574
+
575
+ particles.forEach((p, index) => {
576
+ p.update();
577
+ p.draw();
578
 
579
+ // Draw connections
580
+ for (let j = index + 1; j < particles.length; j++) {
581
+ const p2 = particles[j];
582
+ const dx = p.x - p2.x;
583
+ const dy = p.y - p2.y;
584
+ const dist = Math.sqrt(dx * dx + dy * dy);
585
+
586
+ if (dist < 150) {
587
+ ctx.beginPath();
588
+ ctx.strokeStyle = `rgba(0, 243, 255, ${1 - dist/150})`;
589
+ ctx.lineWidth = 0.5;
590
+ ctx.moveTo(p.x, p.y);
591
+ ctx.lineTo(p2.x, p2.y);
592
+ ctx.stroke();
593
+ }
594
+ }
595
+ });
596
+
597
+ requestAnimationFrame(animate);
598
+ }
599
+
600
+ window.addEventListener('resize', () => {
601
+ resize();
602
+ initParticles();
603
+ });
604
+
605
+ resize();
606
+ initParticles();
607
+ animate();
608
 
609
+ // --- 2. Application Logic (The Oracle) ---
610
+
611
+ const plansDatabase = [
612
+ {
613
+ title: "Fusão a Frio Comercial",
614
+ desc: "A humanidade dominará a fusão nuclear estável, eliminando a crise energética global e permitindo a dessalinização em massa dos oceanos.",
615
+ icon: "fa-atom",
616
+ probability: 87
617
+ },
618
+ {
619
+ title: "Colonização de Marte",
620
+ desc: "O primeiro assentamento autossustentável será estabelecido no Planeta Vermelho, marcando o início da espécie humana como multiplanetária.",
621
+ icon: "fa-rocket",
622
+ probability: 64
623
+ },
624
+ {
625
+ title: "Interfaces Neurais Diretas",
626
+ desc: "A linguagem verbal se tornará obsoleta. O pensamento será transmitido via dados diretos entre cérebros e redes digitais.",
627
+ icon: "fa-network-wired",
628
+ probability: 92
629
+ },
630
+ {
631
+ title: "Longevidade Extrema",
632
+ desc: "Com a edição genética avançada e nanobots, a expectativa de vida média ultrapassará os 150 anos com boa qualidade de saúde.",
633
+ icon: "fa-dna",
634
+ probability: 78
635
+ },
636
+ {
637
+ title: "Economia Pós-Escassez",
638
+ desc: "A automação completa da produção levará a um sistema onde os bens materiais são gratuitos, focando a sociedade na criatividade e exploração.",
639
+ icon: "fa-robot",
640
+ probability: 45
641
+ },
642
+ {
643
+ title: "Terraformação Local",
644
+ desc: "Tecnologias atmosféricas avançadas permitirão reverter o efeito estufa em áreas críticas da Terra em questão de anos, não décadas.",
645
+ icon: "fa-earth-americas",
646
+ probability: 71
647
+ }
648
+ ];
649
+
650
+ const askBtn = document.getElementById('ask-btn');
651
+ const userInput = document.getElementById('user-input');
652
+ const loader = document.getElementById('loader');
653
+ const resultsContainer = document.getElementById('results');
654
+ const loadingText = document.getElementById('loading-text');
655
+
656
+ const loadingMessages = [
657
+ "Analisando parâmetros caóticos...",
658
+ "Consultando banco de dados do futuro...",
659
+ "Calculando probabilidades de Timeline...",
660
+ "Sincronizando com a rede neural global..."
661
+ ];
662
+
663
+ function getRandomPlans(count) {
664
+ const shuffled = [...plansDatabase].sort(() => 0.5 - Math.random());
665
+ return shuffled.slice(0, count);
666
+ }
667
+
668
+ function createCard(plan) {
669
+ const card = document.createElement('div');
670
+ card.className = 'card';
671
+
672
+ card.innerHTML = `
673
+ <div class="card-icon"><i class="fa-solid ${plan.icon}"></i></div>
674
+ <h3>${plan.title}</h3>
675
+ <p>${plan.desc}</p>
676
+ <div style="display:flex; justify-content:space-between; margin-top:10px; font-size:0.8rem; color:#888;">
677
+ <span>Probabilidade</span>
678
+ <span>${plan.probability}%</span>
679
+ </div>
680
+ <div class="probability-bar">
681
+ <div class="probability-fill" style="width: 0%" data-width="${plan.probability}%"></div>
682
+ </div>
683
+ `;
684
+ return card;
685
+ }
686
+
687
+ askBtn.addEventListener('click', () => {
688
+ // UI Feedback: Start loading
689
+ resultsContainer.innerHTML = '';
690
+ resultsContainer.classList.remove('visible');
691
+ loader.classList.add('active');
692
+
693
+ // Cycle loading text
694
+ let msgIndex = 0;
695
+ const msgInterval = setInterval(() => {
696
+ loadingText.innerText = loadingMessages[msgIndex % loadingMessages.length];
697
+ msgIndex++;
698
+ }, 800);
699
+
700
+ // Simulate processing delay
701
+ setTimeout(() => {
702
+ clearInterval(msgInterval);
703
+ loader.classList.remove('active');
704
 
705
+ // Logic: Determine number of plans (random 2 to 4)
706
+ const count = Math.floor(Math.random() * 3) + 2;
707
+ const selectedPlans = getRandomPlans(count);
708
+
709
+ // Generate Cards
710
+ selectedPlans.forEach(plan => {
711
+ const card = createCard(plan);
712
+ resultsContainer.appendChild(card);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
713
  });
714
 
715
+ // Show container with animation
716
+ resultsContainer.classList.add('visible');
717
+
718
+ // Animate probability bars after cards appear
719
+ setTimeout(() => {
720
+ document.querySelectorAll('.probability-fill').forEach(bar => {
721
+ bar.style.width = bar.getAttribute('data-width');
722
+ });
723
+ }, 300);
724
+
725
+ }, 2500); // 2.5s delay
726
+ });
727
+
728
+ // Allow 'Enter' key to trigger search
729
+ userInput.addEventListener('keypress', (e) => {
730
+ if (e.key === 'Enter') {
731
+ askBtn.click();
732
+ }
733
+ });
734
+
735
+ // --- 3. Modal Logic (About Section) ---
736
+ const aboutBtn = document.getElementById('about-btn');
737
+ const modal = document.getElementById('about-modal');
738
+ const closeBtn = document.getElementById('close-about');
739
+
740
+ function openModal() {
741
+ modal.classList.add('open');
742
+ }
743
+
744
+ function closeModal() {
745
+ modal.classList.remove('open');
746
+ }
747
+
748
+ aboutBtn.addEventListener('click', openModal);
749
+ closeBtn.addEventListener('click', closeModal);
750
+
751
+ // Close modal when clicking outside content
752
+ modal.addEventListener('click', (e) => {
753
+ if (e.target === modal) {
754
+ closeModal();
755
+ }
756
+ });
757
+
758
+ </script>
759
  </body>
760
+
761
  </html>