ProCreations commited on
Commit
61c22dd
·
verified ·
1 Parent(s): cf238e8

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +606 -18
index.html CHANGED
@@ -1,19 +1,607 @@
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>Space Matters | Save NASA's Future</title>
7
+ <style>
8
+ * {
9
+ margin: 0;
10
+ padding: 0;
11
+ box-sizing: border-box;
12
+ }
13
+
14
+ body {
15
+ font-family: 'Arial', sans-serif;
16
+ background: #000;
17
+ color: #fff;
18
+ overflow-x: hidden;
19
+ position: relative;
20
+ }
21
+
22
+ #starfield {
23
+ position: fixed;
24
+ top: 0;
25
+ left: 0;
26
+ width: 100%;
27
+ height: 100%;
28
+ z-index: 1;
29
+ }
30
+
31
+ .content {
32
+ position: relative;
33
+ z-index: 10;
34
+ min-height: 100vh;
35
+ }
36
+
37
+ .hero {
38
+ height: 100vh;
39
+ display: flex;
40
+ flex-direction: column;
41
+ justify-content: center;
42
+ align-items: center;
43
+ text-align: center;
44
+ padding: 20px;
45
+ background: radial-gradient(ellipse at center, rgba(20, 20, 40, 0.4) 0%, transparent 70%);
46
+ }
47
+
48
+ h1 {
49
+ font-size: clamp(3rem, 8vw, 6rem);
50
+ margin-bottom: 20px;
51
+ text-shadow: 0 0 30px rgba(100, 150, 255, 0.8);
52
+ animation: glow 3s ease-in-out infinite alternate;
53
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 25%, #f093fb 50%, #667eea 100%);
54
+ -webkit-background-clip: text;
55
+ -webkit-text-fill-color: transparent;
56
+ background-clip: text;
57
+ }
58
+
59
+ @keyframes glow {
60
+ from { text-shadow: 0 0 20px rgba(100, 150, 255, 0.5); }
61
+ to { text-shadow: 0 0 40px rgba(100, 150, 255, 1), 0 0 60px rgba(100, 150, 255, 0.5); }
62
+ }
63
+
64
+ .subtitle {
65
+ font-size: clamp(1.2rem, 3vw, 1.8rem);
66
+ opacity: 0.9;
67
+ margin-bottom: 40px;
68
+ animation: fadeInUp 1s ease-out;
69
+ }
70
+
71
+ @keyframes fadeInUp {
72
+ from {
73
+ opacity: 0;
74
+ transform: translateY(30px);
75
+ }
76
+ to {
77
+ opacity: 0.9;
78
+ transform: translateY(0);
79
+ }
80
+ }
81
+
82
+ .cta-button {
83
+ padding: 15px 40px;
84
+ font-size: 1.2rem;
85
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
86
+ border: none;
87
+ border-radius: 50px;
88
+ color: white;
89
+ cursor: pointer;
90
+ transition: all 0.3s ease;
91
+ text-decoration: none;
92
+ display: inline-block;
93
+ animation: pulse 2s infinite;
94
+ box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
95
+ }
96
+
97
+ @keyframes pulse {
98
+ 0% { transform: scale(1); }
99
+ 50% { transform: scale(1.05); }
100
+ 100% { transform: scale(1); }
101
+ }
102
+
103
+ .cta-button:hover {
104
+ transform: translateY(-3px);
105
+ box-shadow: 0 10px 30px rgba(102, 126, 234, 0.6);
106
+ }
107
+
108
+ .section {
109
+ padding: 80px 20px;
110
+ max-width: 1200px;
111
+ margin: 0 auto;
112
+ position: relative;
113
+ }
114
+
115
+ .section::before {
116
+ content: '';
117
+ position: absolute;
118
+ top: 0;
119
+ left: 50%;
120
+ transform: translateX(-50%);
121
+ width: 100px;
122
+ height: 2px;
123
+ background: linear-gradient(90deg, transparent, #667eea, transparent);
124
+ animation: scan 3s linear infinite;
125
+ }
126
+
127
+ @keyframes scan {
128
+ 0% { width: 0; }
129
+ 50% { width: 200px; }
130
+ 100% { width: 0; }
131
+ }
132
+
133
+ h2 {
134
+ font-size: clamp(2rem, 5vw, 3rem);
135
+ margin-bottom: 30px;
136
+ text-align: center;
137
+ background: linear-gradient(90deg, #f093fb 0%, #f5576c 100%);
138
+ -webkit-background-clip: text;
139
+ -webkit-text-fill-color: transparent;
140
+ background-clip: text;
141
+ }
142
+
143
+ .stats-grid {
144
+ display: grid;
145
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
146
+ gap: 30px;
147
+ margin: 50px 0;
148
+ }
149
+
150
+ .stat-card {
151
+ background: rgba(255, 255, 255, 0.05);
152
+ backdrop-filter: blur(10px);
153
+ border: 1px solid rgba(255, 255, 255, 0.1);
154
+ border-radius: 15px;
155
+ padding: 30px;
156
+ text-align: center;
157
+ transition: all 0.3s ease;
158
+ animation: fadeIn 1s ease-out;
159
+ }
160
+
161
+ @keyframes fadeIn {
162
+ from { opacity: 0; transform: translateY(20px); }
163
+ to { opacity: 1; transform: translateY(0); }
164
+ }
165
+
166
+ .stat-card:hover {
167
+ transform: translateY(-10px);
168
+ background: rgba(255, 255, 255, 0.1);
169
+ box-shadow: 0 20px 40px rgba(102, 126, 234, 0.3);
170
+ }
171
+
172
+ .stat-number {
173
+ font-size: clamp(2rem, 4vw, 3rem);
174
+ font-weight: bold;
175
+ color: #f093fb;
176
+ margin-bottom: 10px;
177
+ text-shadow: 0 0 20px rgba(240, 147, 251, 0.5);
178
+ }
179
+
180
+ .stat-label {
181
+ font-size: 1.1rem;
182
+ opacity: 0.8;
183
+ }
184
+
185
+ .warning-box {
186
+ background: linear-gradient(135deg, rgba(244, 67, 54, 0.1), rgba(244, 67, 54, 0.05));
187
+ border: 2px solid rgba(244, 67, 54, 0.5);
188
+ border-radius: 15px;
189
+ padding: 30px;
190
+ margin: 40px 0;
191
+ animation: warningPulse 2s ease-in-out infinite;
192
+ }
193
+
194
+ @keyframes warningPulse {
195
+ 0%, 100% { border-color: rgba(244, 67, 54, 0.5); }
196
+ 50% { border-color: rgba(244, 67, 54, 1); box-shadow: 0 0 30px rgba(244, 67, 54, 0.3); }
197
+ }
198
+
199
+ .impact-list {
200
+ list-style: none;
201
+ padding: 20px 0;
202
+ }
203
+
204
+ .impact-list li {
205
+ padding: 15px 0;
206
+ padding-left: 40px;
207
+ position: relative;
208
+ font-size: 1.1rem;
209
+ line-height: 1.6;
210
+ opacity: 0.9;
211
+ }
212
+
213
+ .impact-list li::before {
214
+ content: '🚀';
215
+ position: absolute;
216
+ left: 0;
217
+ animation: float 3s ease-in-out infinite;
218
+ }
219
+
220
+ @keyframes float {
221
+ 0%, 100% { transform: translateY(0); }
222
+ 50% { transform: translateY(-5px); }
223
+ }
224
+
225
+ .quote {
226
+ font-style: italic;
227
+ font-size: 1.3rem;
228
+ text-align: center;
229
+ padding: 40px;
230
+ border-left: 4px solid #667eea;
231
+ margin: 40px 0;
232
+ background: rgba(102, 126, 234, 0.05);
233
+ position: relative;
234
+ }
235
+
236
+ .quote::before {
237
+ content: '"';
238
+ font-size: 4rem;
239
+ position: absolute;
240
+ top: -10px;
241
+ left: 20px;
242
+ color: #667eea;
243
+ opacity: 0.3;
244
+ }
245
+
246
+ .footer {
247
+ text-align: center;
248
+ padding: 50px 20px;
249
+ background: linear-gradient(to top, rgba(20, 20, 40, 0.8), transparent);
250
+ }
251
+
252
+ .footer h3 {
253
+ font-size: 2rem;
254
+ margin-bottom: 20px;
255
+ color: #f093fb;
256
+ }
257
+
258
+ .social-links {
259
+ display: flex;
260
+ justify-content: center;
261
+ gap: 30px;
262
+ margin-top: 30px;
263
+ }
264
+
265
+ .social-links a {
266
+ color: #667eea;
267
+ text-decoration: none;
268
+ font-size: 1.1rem;
269
+ transition: all 0.3s ease;
270
+ }
271
+
272
+ .social-links a:hover {
273
+ color: #f093fb;
274
+ transform: scale(1.1);
275
+ }
276
+
277
+ /* Shooting star animations */
278
+ .shooting-star {
279
+ position: fixed;
280
+ width: 2px;
281
+ height: 2px;
282
+ background: white;
283
+ box-shadow: 0 0 10px white;
284
+ animation: shoot 3s linear infinite;
285
+ opacity: 0;
286
+ }
287
+
288
+ @keyframes shoot {
289
+ 0% {
290
+ transform: translateX(0) translateY(0);
291
+ opacity: 0;
292
+ }
293
+ 10% {
294
+ opacity: 1;
295
+ }
296
+ 90% {
297
+ opacity: 1;
298
+ }
299
+ 100% {
300
+ transform: translateX(-1000px) translateY(1000px);
301
+ opacity: 0;
302
+ }
303
+ }
304
+
305
+ @media (max-width: 768px) {
306
+ .hero {
307
+ padding: 40px 20px;
308
+ }
309
+
310
+ .stats-grid {
311
+ grid-template-columns: 1fr;
312
+ }
313
+ }
314
+ </style>
315
+ </head>
316
+ <body>
317
+ <canvas id="starfield"></canvas>
318
+
319
+ <div class="content">
320
+ <section class="hero">
321
+ <h1>SPACE MATTERS</h1>
322
+ <p class="subtitle">NASA faces its largest budget cut in history. Our future in the stars is at stake.</p>
323
+ <a href="#action" class="cta-button">Take Action Now</a>
324
+ </section>
325
+
326
+ <section class="section">
327
+ <h2>The Crisis We Face</h2>
328
+ <div class="warning-box">
329
+ <h3 style="color: #f44336; text-align: center; margin-bottom: 20px;">⚠️ UNPRECEDENTED CUTS PROPOSED ⚠️</h3>
330
+ <div class="stats-grid">
331
+ <div class="stat-card">
332
+ <div class="stat-number">24%</div>
333
+ <div class="stat-label">Overall NASA Budget Cut</div>
334
+ </div>
335
+ <div class="stat-card">
336
+ <div class="stat-number">47%</div>
337
+ <div class="stat-label">Science Funding Slashed</div>
338
+ </div>
339
+ <div class="stat-card">
340
+ <div class="stat-number">40+</div>
341
+ <div class="stat-label">Missions to be Cancelled</div>
342
+ </div>
343
+ <div class="stat-card">
344
+ <div class="stat-number">5,538</div>
345
+ <div class="stat-label">Jobs to be Eliminated</div>
346
+ </div>
347
+ </div>
348
+ </div>
349
+
350
+ <p style="font-size: 1.2rem; line-height: 1.8; opacity: 0.9; margin-top: 40px;">
351
+ The proposed 2026 budget would reduce NASA's funding from $24.9 billion to just $18.8 billion -
352
+ the lowest level since 1961 when adjusted for inflation. This isn't just numbers on a spreadsheet;
353
+ it's the potential end of American leadership in space exploration.
354
+ </p>
355
+ </section>
356
+
357
+ <section class="section">
358
+ <h2>What We Stand to Lose</h2>
359
+ <ul class="impact-list">
360
+ <li>Mars Sample Return mission - our chance to study Martian soil for signs of life</li>
361
+ <li>NEO Surveyor - the mission designed to track potentially dangerous asteroids</li>
362
+ <li>Chandra X-Ray Observatory - our window into the high-energy universe</li>
363
+ <li>Climate monitoring satellites - critical for tracking and predicting extreme weather</li>
364
+ <li>53% cut to Earth science programs - limiting our ability to monitor wildfires, hurricanes, and climate change</li>
365
+ <li>The smallest NASA workforce since before the Mercury, Gemini, and Apollo programs</li>
366
+ </ul>
367
+
368
+ <div class="quote">
369
+ "This would represent the smallest NASA workforce since mid-1960, before the first American had launched into space.
370
+ It's not just about missions - it's about the people who make discovery possible."
371
+ <br><span style="font-size: 0.9rem; opacity: 0.7;">- Casey Dreier, The Planetary Society</span>
372
+ </div>
373
+ </section>
374
+
375
+ <section class="section">
376
+ <h2>NASA's Incredible Return on Investment</h2>
377
+ <div class="stats-grid">
378
+ <div class="stat-card">
379
+ <div class="stat-number">$75.6B</div>
380
+ <div class="stat-label">Economic Output Generated (2023)</div>
381
+ </div>
382
+ <div class="stat-card">
383
+ <div class="stat-number">304,803</div>
384
+ <div class="stat-label">Jobs Supported Nationwide</div>
385
+ </div>
386
+ <div class="stat-card">
387
+ <div class="stat-number">$9.5B</div>
388
+ <div class="stat-label">Tax Revenue Generated</div>
389
+ </div>
390
+ <div class="stat-card">
391
+ <div class="stat-number">$7-40</div>
392
+ <div class="stat-label">Return for Every $1 Invested</div>
393
+ </div>
394
+ </div>
395
+
396
+ <p style="font-size: 1.2rem; line-height: 1.8; opacity: 0.9; margin-top: 40px;">
397
+ NASA isn't just about exploring space - it's an economic powerhouse. From just a $25 billion budget,
398
+ NASA generated over $75 billion in economic activity. Every dollar invested in NASA returns between
399
+ $7 and $40 to the economy through technological innovation, job creation, and scientific advancement.
400
+ </p>
401
+ </section>
402
+
403
+ <section class="section">
404
+ <h2>Technologies NASA Gave Us</h2>
405
+ <ul class="impact-list">
406
+ <li>GPS navigation that guides us every day</li>
407
+ <li>CAT scans and LED lights used in medical treatments</li>
408
+ <li>Water purification systems saving lives worldwide</li>
409
+ <li>Memory foam improving comfort and safety</li>
410
+ <li>Miniaturized electronics powering our smartphones</li>
411
+ <li>Weather satellites predicting hurricanes and saving thousands of lives</li>
412
+ <li>Over 2,000 spinoff technologies benefiting humanity</li>
413
+ </ul>
414
+ </section>
415
+
416
+ <section class="section" id="action">
417
+ <h2>What You Can Do</h2>
418
+ <div style="background: rgba(102, 126, 234, 0.1); padding: 40px; border-radius: 15px; margin-top: 30px;">
419
+ <h3 style="color: #f093fb; margin-bottom: 20px;">Take Action Today:</h3>
420
+ <ul class="impact-list">
421
+ <li>Contact your representatives in Congress - they control the budget</li>
422
+ <li>Share this message on social media with #SaveNASA</li>
423
+ <li>Join The Planetary Society and other space advocacy groups</li>
424
+ <li>Educate others about NASA's incredible return on investment</li>
425
+ <li>Attend town halls and ask your representatives about NASA funding</li>
426
+ </ul>
427
+
428
+ <div style="text-align: center; margin-top: 30px;">
429
+ <a href="https://www.planetary.org/get-involved/be-a-space-advocate" class="cta-button" target="_blank">
430
+ Become a Space Advocate
431
+ </a>
432
+ </div>
433
+ </div>
434
+ </section>
435
+
436
+ <footer class="footer">
437
+ <h3>The Universe is Calling</h3>
438
+ <p style="font-size: 1.1rem; opacity: 0.8; margin: 20px 0;">
439
+ For less than half a penny of every tax dollar, NASA has taken us to the Moon,
440
+ explored Mars, and revealed the secrets of the cosmos. Don't let this legacy end.
441
+ </p>
442
+ <div class="social-links">
443
+ <a href="https://twitter.com/intent/tweet?text=NASA%20faces%20its%20largest%20budget%20cut%20in%20history.%20We%20must%20act%20now%20to%20save%20our%20space%20program.%20%23SaveNASA" target="_blank">Share on Twitter</a>
444
+ <a href="https://www.nasa.gov" target="_blank">Visit NASA</a>
445
+ <a href="https://www.planetary.org" target="_blank">The Planetary Society</a>
446
+ </div>
447
+ </footer>
448
+ </div>
449
+
450
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
451
+ <script>
452
+ // Three.js Starfield Animation
453
+ const scene = new THREE.Scene();
454
+ const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
455
+ const renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('starfield'), alpha: true });
456
+ renderer.setSize(window.innerWidth, window.innerHeight);
457
+
458
+ // Create stars
459
+ const starsGeometry = new THREE.BufferGeometry();
460
+ const starsMaterial = new THREE.PointsMaterial({
461
+ color: 0xFFFFFF,
462
+ size: 2,
463
+ transparent: true,
464
+ opacity: 0.8,
465
+ sizeAttenuation: true
466
+ });
467
+
468
+ const starsVertices = [];
469
+ const starsVelocities = [];
470
+
471
+ for (let i = 0; i < 5000; i++) {
472
+ const x = (Math.random() - 0.5) * 2000;
473
+ const y = (Math.random() - 0.5) * 2000;
474
+ const z = (Math.random() - 0.5) * 2000;
475
+ starsVertices.push(x, y, z);
476
+
477
+ // Store velocity for twinkling effect
478
+ starsVelocities.push(Math.random() * 0.01);
479
+ }
480
+
481
+ starsGeometry.setAttribute('position', new THREE.Float32BufferAttribute(starsVertices, 3));
482
+ const stars = new THREE.Points(starsGeometry, starsMaterial);
483
+ scene.add(stars);
484
+
485
+ camera.position.z = 5;
486
+
487
+ // Create shooting stars
488
+ class ShootingStar {
489
+ constructor() {
490
+ this.reset();
491
+ this.mesh = this.createMesh();
492
+ scene.add(this.mesh);
493
+ }
494
+
495
+ createMesh() {
496
+ const geometry = new THREE.BufferGeometry();
497
+ const material = new THREE.LineBasicMaterial({
498
+ color: 0xFFFFFF,
499
+ transparent: true,
500
+ opacity: 0.8
501
+ });
502
+
503
+ const positions = new Float32Array(6); // 2 points, 3 coordinates each
504
+ geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));
505
+
506
+ return new THREE.Line(geometry, material);
507
+ }
508
+
509
+ reset() {
510
+ this.x = Math.random() * 1000 - 500;
511
+ this.y = Math.random() * 500 + 200;
512
+ this.z = Math.random() * 500 - 250;
513
+ this.speed = Math.random() * 50 + 20;
514
+ this.length = Math.random() * 100 + 50;
515
+ this.opacity = Math.random() * 0.5 + 0.5;
516
+ }
517
+
518
+ update(deltaTime) {
519
+ this.x -= this.speed * deltaTime;
520
+ this.y -= this.speed * deltaTime * 0.5;
521
+
522
+ const positions = this.mesh.geometry.attributes.position.array;
523
+ positions[0] = this.x;
524
+ positions[1] = this.y;
525
+ positions[2] = this.z;
526
+ positions[3] = this.x + this.length;
527
+ positions[4] = this.y + this.length * 0.5;
528
+ positions[5] = this.z;
529
+
530
+ this.mesh.geometry.attributes.position.needsUpdate = true;
531
+ this.mesh.material.opacity = this.opacity * (1 - (500 - this.x) / 1000);
532
+
533
+ if (this.x < -500 || this.y < -500) {
534
+ this.reset();
535
+ }
536
+ }
537
+ }
538
+
539
+ const shootingStars = [];
540
+ for (let i = 0; i < 5; i++) {
541
+ shootingStars.push(new ShootingStar());
542
+ }
543
+
544
+ let clock = new THREE.Clock();
545
+
546
+ function animate() {
547
+ requestAnimationFrame(animate);
548
+
549
+ const deltaTime = clock.getDelta();
550
+ const elapsedTime = clock.getElapsedTime();
551
+
552
+ // Rotate stars slowly
553
+ stars.rotation.y += 0.0001;
554
+ stars.rotation.x += 0.00005;
555
+
556
+ // Twinkle effect
557
+ const positions = stars.geometry.attributes.position.array;
558
+ for (let i = 0; i < positions.length; i += 3) {
559
+ const originalY = positions[i + 1];
560
+ positions[i + 1] = originalY + Math.sin(elapsedTime + i) * 0.1;
561
+ }
562
+ stars.geometry.attributes.position.needsUpdate = true;
563
+
564
+ // Update shooting stars
565
+ shootingStars.forEach(star => star.update(deltaTime));
566
+
567
+ // Pulse opacity for twinkling
568
+ stars.material.opacity = 0.6 + Math.sin(elapsedTime * 2) * 0.2;
569
+
570
+ renderer.render(scene, camera);
571
+ }
572
+
573
+ // Handle window resize
574
+ window.addEventListener('resize', () => {
575
+ camera.aspect = window.innerWidth / window.innerHeight;
576
+ camera.updateProjectionMatrix();
577
+ renderer.setSize(window.innerWidth, window.innerHeight);
578
+ });
579
+
580
+ animate();
581
+
582
+ // Add CSS shooting stars for extra effect
583
+ function createCSSShootingStar() {
584
+ const star = document.createElement('div');
585
+ star.className = 'shooting-star';
586
+ star.style.top = Math.random() * window.innerHeight * 0.5 + 'px';
587
+ star.style.left = window.innerWidth + 'px';
588
+ star.style.animationDelay = Math.random() * 5 + 's';
589
+ star.style.animationDuration = Math.random() * 2 + 2 + 's';
590
+ document.body.appendChild(star);
591
+
592
+ setTimeout(() => {
593
+ star.remove();
594
+ }, 5000);
595
+ }
596
+
597
+ // Create CSS shooting stars periodically
598
+ setInterval(createCSSShootingStar, 3000);
599
+
600
+ // Parallax effect on scroll
601
+ window.addEventListener('scroll', () => {
602
+ const scrolled = window.pageYOffset;
603
+ camera.position.y = scrolled * 0.0005;
604
+ });
605
+ </script>
606
+ </body>
607
  </html>