victor HF Staff commited on
Commit
d6fa1dc
·
verified ·
1 Parent(s): e6ba631
Files changed (2) hide show
  1. README.md +7 -4
  2. index.html +517 -18
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Undefined Harmony
3
- emoji: 🐨
4
- colorFrom: green
5
  colorTo: blue
 
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: Undefined Harmony 🎨
3
+ colorFrom: pink
 
4
  colorTo: blue
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://deepsite.hf.co).
index.html CHANGED
@@ -1,19 +1,518 @@
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>Undefined Harmony</title>
7
+ <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
10
+ <script src="https://cdn.jsdelivr.net/npm/animejs/lib/anime.iife.min.js"></script>
11
+ <script src="https://unpkg.com/feather-icons"></script>
12
+ <style>
13
+ :root {
14
+ --primary-500: #8B5CF6;
15
+ --secondary-500: #EC4899;
16
+ --primary-400: #A78BFA;
17
+ --secondary-400: #F472B6;
18
+ --primary-600: #7C3AED;
19
+ --secondary-600: #DB2777;
20
+ }
21
+
22
+ .dark {
23
+ --primary-500: #EC4899;
24
+ --secondary-500: #8B5CF6;
25
+ --primary-400: #F472B6;
26
+ --secondary-400: #A78BFA;
27
+ --primary-600: #DB2777;
28
+ --secondary-600: #7C3AED;
29
+ }
30
+
31
+ .bg-primary-500 { background-color: var(--primary-500); }
32
+ .bg-secondary-500 { background-color: var(--secondary-500); }
33
+ .bg-primary-400 { background-color: var(--primary-400); }
34
+ .bg-secondary-400 { background-color: var(--secondary-400); }
35
+ .bg-primary-600 { background-color: var(--primary-600); }
36
+ .bg-secondary-600 { background-color: var(--secondary-600); }
37
+
38
+ .text-primary-500 { color: var(--primary-500); }
39
+ .text-secondary-500 { color: var(--secondary-500); }
40
+ .text-primary-400 { color: var(--primary-400); }
41
+ .text-secondary-400 { color: var(--secondary-400); }
42
+ .text-primary-600 { color: var(--primary-600); }
43
+ .text-secondary-600 { color: var(--secondary-600); }
44
+
45
+ .border-primary-500 { border-color: var(--primary-500); }
46
+ .border-secondary-500 { border-color: var(--secondary-500); }
47
+ .border-primary-400 { border-color: var(--primary-400); }
48
+ .border-secondary-400 { border-color: var(--secondary-400); }
49
+ .border-primary-600 { border-color: var(--primary-600); }
50
+ .border-secondary-600 { border-color: var(--secondary-600); }
51
+
52
+ .ring-primary-500 { --tw-ring-color: var(--primary-500); }
53
+ .ring-secondary-500 { --tw-ring-color: var(--secondary-500); }
54
+
55
+ .gradient-bg {
56
+ background: linear-gradient(135deg, var(--primary-500) 0%, var(--secondary-500) 100%);
57
+ }
58
+
59
+ .glass-effect {
60
+ backdrop-filter: blur(10px);
61
+ background: rgba(255, 255, 255, 0.1);
62
+ border: 1px solid rgba(255, 255, 255, 0.2);
63
+ }
64
+
65
+ .dark .glass-effect {
66
+ background: rgba(0, 0, 0, 0.1);
67
+ border: 1px solid rgba(255, 255, 255, 0.1);
68
+ }
69
+
70
+ .btn-primary {
71
+ background: var(--primary-500);
72
+ transition: all 0.3s ease;
73
+ position: relative;
74
+ overflow: hidden;
75
+ }
76
+
77
+ .btn-primary:hover {
78
+ background: var(--primary-600);
79
+ transform: translateY(-2px);
80
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
81
+ }
82
+
83
+ .btn-primary::before {
84
+ content: '';
85
+ position: absolute;
86
+ top: 0;
87
+ left: -100%;
88
+ width: 100%;
89
+ height: 100%;
90
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
91
+ transition: left 0.5s;
92
+ }
93
+
94
+ .btn-primary:hover::before {
95
+ left: 100%;
96
+ }
97
+
98
+ .btn-secondary {
99
+ background: var(--secondary-500);
100
+ transition: all 0.3s ease;
101
+ }
102
+
103
+ .btn-secondary:hover {
104
+ background: var(--secondary-600);
105
+ transform: translateY(-2px);
106
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
107
+ }
108
+
109
+ .card-hover {
110
+ transition: all 0.3s ease;
111
+ }
112
+
113
+ .card-hover:hover {
114
+ transform: translateY(-5px);
115
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
116
+ }
117
+
118
+ .form-input {
119
+ transition: all 0.3s ease;
120
+ border: 2px solid transparent;
121
+ }
122
+
123
+ .form-input:focus {
124
+ border-color: var(--primary-500);
125
+ box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.1);
126
+ }
127
+
128
+ .dark .form-input:focus {
129
+ box-shadow: 0 0 0 3px rgba(236, 72, 153, 0.1);
130
+ }
131
+
132
+ .modal {
133
+ backdrop-filter: blur(5px);
134
+ transition: all 0.3s ease;
135
+ }
136
+
137
+ .modal-content {
138
+ animation: modalFadeIn 0.3s ease;
139
+ }
140
+
141
+ @keyframes modalFadeIn {
142
+ from {
143
+ opacity: 0;
144
+ transform: scale(0.9);
145
+ }
146
+ to {
147
+ opacity: 1;
148
+ transform: scale(1);
149
+ }
150
+ }
151
+
152
+ .nav-link {
153
+ position: relative;
154
+ transition: color 0.3s ease;
155
+ }
156
+
157
+ .nav-link::after {
158
+ content: '';
159
+ position: absolute;
160
+ bottom: -2px;
161
+ left: 0;
162
+ width: 0;
163
+ height: 2px;
164
+ background: var(--secondary-500);
165
+ transition: width 0.3s ease;
166
+ }
167
+
168
+ .nav-link:hover::after {
169
+ width: 100%;
170
+ }
171
+
172
+ .toggle-switch {
173
+ position: relative;
174
+ width: 60px;
175
+ height: 30px;
176
+ background: var(--primary-400);
177
+ border-radius: 15px;
178
+ cursor: pointer;
179
+ transition: background 0.3s ease;
180
+ }
181
+
182
+ .toggle-switch.active {
183
+ background: var(--secondary-500);
184
+ }
185
+
186
+ .toggle-switch::before {
187
+ content: '';
188
+ position: absolute;
189
+ top: 3px;
190
+ left: 3px;
191
+ width: 24px;
192
+ height: 24px;
193
+ background: white;
194
+ border-radius: 50%;
195
+ transition: transform 0.3s ease;
196
+ }
197
+
198
+ .toggle-switch.active::before {
199
+ transform: translateX(30px);
200
+ }
201
+
202
+ .floating-element {
203
+ animation: float 6s ease-in-out infinite;
204
+ }
205
+
206
+ @keyframes float {
207
+ 0%, 100% { transform: translateY(0px); }
208
+ 50% { transform: translateY(-20px); }
209
+ }
210
+
211
+ .gradient-text {
212
+ background: linear-gradient(135deg, var(--primary-500) 0%, var(--secondary-500) 100%);
213
+ -webkit-background-clip: text;
214
+ -webkit-text-fill-color: transparent;
215
+ background-clip: text;
216
+ }
217
+
218
+ .ripple {
219
+ position: absolute;
220
+ border-radius: 50%;
221
+ background: rgba(255, 255, 255, 0.5);
222
+ transform: scale(0);
223
+ animation: ripple 0.6s ease-out;
224
+ }
225
+
226
+ @keyframes ripple {
227
+ to {
228
+ transform: scale(4);
229
+ opacity: 0;
230
+ }
231
+ }
232
+ </style>
233
+ </head>
234
+ <body class="bg-gradient-to-br from-purple-50 to-pink-50 dark:from-gray-900 dark:to-gray-800 min-h-screen transition-colors duration-500">
235
+ <!-- Navigation -->
236
+ <nav class="fixed top-0 w-full z-50 glass-effect">
237
+ <div class="container mx-auto px-4 py-4">
238
+ <div class="flex justify-between items-center">
239
+ <div class="flex items-center space-x-2">
240
+ <div class="w-8 h-8 rounded-full gradient-bg"></div>
241
+ <span class="text-xl font-bold gradient-text">Undefined</span>
242
+ </div>
243
+ <div class="hidden md:flex space-x-8">
244
+ <a href="#home" class="nav-link text-gray-700 dark:text-gray-300 hover:text-primary-500">Home</a>
245
+ <a href="#features" class="nav-link text-gray-700 dark:text-gray-300 hover:text-primary-500">Features</a>
246
+ <a href="#portfolio" class="nav-link text-gray-700 dark:text-gray-300 hover:text-primary-500">Portfolio</a>
247
+ <a href="#contact" class="nav-link text-gray-700 dark:text-gray-300 hover:text-primary-500">Contact</a>
248
+ </div>
249
+ <div class="flex items-center space-x-4">
250
+ <div class="toggle-switch" id="darkModeToggle"></div>
251
+ <button class="md:hidden" onclick="toggleMobileMenu()">
252
+ <i data-feather="menu" class="w-6 h-6"></i>
253
+ </button>
254
+ </div>
255
+ </div>
256
+ <div id="mobileMenu" class="hidden md:hidden mt-4 pb-4">
257
+ <a href="#home" class="block py-2 text-gray-700 dark:text-gray-300">Home</a>
258
+ <a href="#features" class="block py-2 text-gray-700 dark:text-gray-300">Features</a>
259
+ <a href="#portfolio" class="block py-2 text-gray-700 dark:text-gray-300">Portfolio</a>
260
+ <a href="#contact" class="block py-2 text-gray-700 dark:text-gray-300">Contact</a>
261
+ </div>
262
+ </div>
263
+ </nav>
264
+
265
+ <!-- Hero Section -->
266
+ <section id="home" class="min-h-screen flex items-center justify-center relative overflow-hidden">
267
+ <div class="absolute inset-0 z-0">
268
+ <div class="absolute top-20 left-10 w-32 h-32 bg-primary-400 rounded-full opacity-20 floating-element"></div>
269
+ <div class="absolute bottom-20 right-10 w-40 h-40 bg-secondary-400 rounded-full opacity-20 floating-element" style="animation-delay: 3s;"></div>
270
+ <div class="absolute top-1/2 left-1/4 w-24 h-24 bg-primary-300 rounded-full opacity-10 floating-element" style="animation-delay: 1.5s;"></div>
271
+ </div>
272
+ <div class="container mx-auto px-4 text-center relative z-10">
273
+ <h1 class="text-5xl md:text-7xl font-bold mb-6 gradient-text">
274
+ Undefined Harmony
275
+ </h1>
276
+ <p class="text-xl md:text-2xl text-gray-600 dark:text-gray-300 mb-8 max-w-3xl mx-auto">
277
+ Where creativity meets undefined possibilities. Experience the perfect blend of design and functionality.
278
+ </p>
279
+ <div class="flex flex-col sm:flex-row gap-4 justify-center">
280
+ <button class="btn-primary px-8 py-3 rounded-full text-white font-semibold" onclick="showModal('getStarted')">
281
+ Get Started
282
+ </button>
283
+ <button class="btn-secondary px-8 py-3 rounded-full text-white font-semibold" onclick="scrollToSection('features')">
284
+ Learn More
285
+ </button>
286
+ </div>
287
+ </div>
288
+ </section>
289
+
290
+ <!-- Features Section -->
291
+ <section id="features" class="py-20">
292
+ <div class="container mx-auto px-4">
293
+ <h2 class="text-4xl font-bold text-center mb-12 gradient-text">Features</h2>
294
+ <div class="grid md:grid-cols-3 gap-8">
295
+ <div class="card-hover bg-white dark:bg-gray-800 p-8 rounded-2xl shadow-lg">
296
+ <div class="w-16 h-16 rounded-full gradient-bg mb-4 flex items-center justify-center">
297
+ <i data-feather="zap" class="w-8 h-8 text-white"></i>
298
+ </div>
299
+ <h3 class="text-2xl font-bold mb-4 text-primary-500">Lightning Fast</h3>
300
+ <p class="text-gray-600 dark:text-gray-300">
301
+ Experience blazing fast performance with our optimized framework.
302
+ </p>
303
+ </div>
304
+ <div class="card-hover bg-white dark:bg-gray-800 p-8 rounded-2xl shadow-lg">
305
+ <div class="w-16 h-16 rounded-full gradient-bg mb-4 flex items-center justify-center">
306
+ <i data-feather="shield" class="w-8 h-8 text-white"></i>
307
+ </div>
308
+ <h3 class="text-2xl font-bold mb-4 text-secondary-500">Secure</h3>
309
+ <p class="text-gray-600 dark:text-gray-300">
310
+ Your data is protected with enterprise-grade security measures.
311
+ </p>
312
+ </div>
313
+ <div class="card-hover bg-white dark:bg-gray-800 p-8 rounded-2xl shadow-lg">
314
+ <div class="w-16 h-16 rounded-full gradient-bg mb-4 flex items-center justify-center">
315
+ <i data-feather="heart" class="w-8 h-8 text-white"></i>
316
+ </div>
317
+ <h3 class="text-2xl font-bold mb-4 text-primary-500">User Friendly</h3>
318
+ <p class="text-gray-600 dark:text-gray-300">
319
+ Intuitive design that makes complex tasks simple and enjoyable.
320
+ </p>
321
+ </div>
322
+ </div>
323
+ </div>
324
+ </section>
325
+
326
+ <!-- Portfolio Section -->
327
+ <section id="portfolio" class="py-20 bg-gray-50 dark:bg-gray-900">
328
+ <div class="container mx-auto px-4">
329
+ <h2 class="text-4xl font-bold text-center mb-12 gradient-text">Portfolio</h2>
330
+ <div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
331
+ <div class="card-hover group relative overflow-hidden rounded-2xl">
332
+ <img src="http://static.photos/technology/640x360/42" alt="Project" class="w-full h-64 object-cover">
333
+ <div class="absolute inset-0 bg-gradient-to-t from-black/70 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300">
334
+ <div class="absolute bottom-0 left-0 right-0 p-6">
335
+ <h3 class="text-white text-xl font-bold mb-2">Tech Innovation</h3>
336
+ <p class="text-gray-200">Revolutionary tech solutions</p>
337
+ </div>
338
+ </div>
339
+ </div>
340
+ <div class="card-hover group relative overflow-hidden rounded-2xl">
341
+ <img src="http://static.photos/workspace/640x360/133" alt="Project" class="w-full h-64 object-cover">
342
+ <div class="absolute inset-0 bg-gradient-to-t from-black/70 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300">
343
+ <div class="absolute bottom-0 left-0 right-0 p-6">
344
+ <h3 class="text-white text-xl font-bold mb-2">Modern Workspace</h3>
345
+ <p class="text-gray-200">Efficient work environments</p>
346
+ </div>
347
+ </div>
348
+ </div>
349
+ <div class="card-hover group relative overflow-hidden rounded-2xl">
350
+ <img src="http://static.photos/nature/640x360/99" alt="Project" class="w-full h-64 object-cover">
351
+ <div class="absolute inset-0 bg-gradient-to-t from-black/70 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300">
352
+ <div class="absolute bottom-0 left-0 right-0 p-6">
353
+ <h3 class="text-white text-xl font-bold mb-2">Nature Connect</h3>
354
+ <p class="text-gray-200">Sustainable solutions</p>
355
+ </div>
356
+ </div>
357
+ </div>
358
+ </div>
359
+ </div>
360
+ </section>
361
+
362
+ <!-- Contact Section -->
363
+ <section id="contact" class="py-20">
364
+ <div class="container mx-auto px-4">
365
+ <h2 class="text-4xl font-bold text-center mb-12 gradient-text">Get In Touch</h2>
366
+ <div class="max-w-2xl mx-auto">
367
+ <form class="space-y-6" onsubmit="handleSubmit(event)">
368
+ <div class="grid md:grid-cols-2 gap-6">
369
+ <input type="text" placeholder="Your Name" class="form-input w-full px-4 py-3 rounded-lg bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 focus:outline-none">
370
+ <input type="email" placeholder="Your Email" class="form-input w-full px-4 py-3 rounded-lg bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 focus:outline-none">
371
+ </div>
372
+ <input type="text" placeholder="Subject" class="form-input w-full px-4 py-3 rounded-lg bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 focus:outline-none">
373
+ <textarea placeholder="Your Message" rows="6" class="form-input w-full px-4 py-3 rounded-lg bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 focus:outline-none resize-none"></textarea>
374
+ <button type="submit" class="btn-primary w-full py-3 rounded-lg text-white font-semibold">
375
+ Send Message
376
+ </button>
377
+ </form>
378
+ </div>
379
+ </div>
380
+ </section>
381
+
382
+ <!-- Footer -->
383
+ <footer class="py-8 bg-gray-900 text-white">
384
+ <div class="container mx-auto px-4 text-center">
385
+ <p>&copy; 2024 Undefined Harmony. All rights reserved.</p>
386
+ </div>
387
+ </footer>
388
+
389
+ <!-- Modal -->
390
+ <div id="modal" class="modal fixed inset-0 bg-black/50 hidden items-center justify-center z-50">
391
+ <div class="modal-content bg-white dark:bg-gray-800 rounded-2xl p-8 max-w-md w-full mx-4">
392
+ <h3 class="text-2xl font-bold mb-4 gradient-text">Welcome!</h3>
393
+ <p class="text-gray-600 dark:text-gray-300 mb-6">
394
+ Thank you for your interest in Undefined Harmony. We're excited to have you on board!
395
+ </p>
396
+ <button onclick="hideModal()" class="btn-primary px-6 py-2 rounded-lg text-white font-semibold w-full">
397
+ Close
398
+ </button>
399
+ </div>
400
+ </div>
401
+
402
+ <script>
403
+ // Initialize Feather Icons
404
+ feather.replace();
405
+
406
+ // Dark Mode Toggle
407
+ const darkModeToggle = document.getElementById('darkModeToggle');
408
+ const html = document.documentElement;
409
+
410
+ // Check for saved theme preference
411
+ if (localStorage.getItem('darkMode') === 'true') {
412
+ html.classList.add('dark');
413
+ darkModeToggle.classList.add('active');
414
+ }
415
+
416
+ darkModeToggle.addEventListener('click', () => {
417
+ html.classList.toggle('dark');
418
+ darkModeToggle.classList.toggle('active');
419
+ localStorage.setItem('darkMode', html.classList.contains('dark'));
420
+ });
421
+
422
+ // Mobile Menu Toggle
423
+ function toggleMobileMenu() {
424
+ const mobileMenu = document.getElementById('mobileMenu');
425
+ mobileMenu.classList.toggle('hidden');
426
+ }
427
+
428
+ // Smooth Scroll
429
+ function scrollToSection(sectionId) {
430
+ const section = document.getElementById(sectionId);
431
+ section.scrollIntoView({ behavior: 'smooth' });
432
+ }
433
+
434
+ // Modal Functions
435
+ function showModal(modalType) {
436
+ const modal = document.getElementById('modal');
437
+ modal.classList.remove('hidden');
438
+ modal.classList.add('flex');
439
+ }
440
+
441
+ function hideModal() {
442
+ const modal = document.getElementById('modal');
443
+ modal.classList.add('hidden');
444
+ modal.classList.remove('flex');
445
+ }
446
+
447
+ // Form Submit
448
+ function handleSubmit(event) {
449
+ event.preventDefault();
450
+ showModal();
451
+ event.target.reset();
452
+ }
453
+
454
+ // Add ripple effect to buttons
455
+ document.querySelectorAll('.btn-primary, .btn-secondary').forEach(button => {
456
+ button.addEventListener('click', function(e) {
457
+ const ripple = document.createElement('span');
458
+ ripple.classList.add('ripple');
459
+
460
+ const rect = this.getBoundingClientRect();
461
+ const size = Math.max(rect.width, rect.height);
462
+ const x = e.clientX - rect.left - size / 2;
463
+ const y = e.clientY - rect.top - size / 2;
464
+
465
+ ripple.style.width = ripple.style.height = size + 'px';
466
+ ripple.style.left = x + 'px';
467
+ ripple.style.top = y + 'px';
468
+
469
+ this.appendChild(ripple);
470
+
471
+ setTimeout(() => ripple.remove(), 600);
472
+ });
473
+ });
474
+
475
+ // Animate elements on scroll
476
+ const observerOptions = {
477
+ threshold: 0.1,
478
+ rootMargin: '0px 0px -100px 0px'
479
+ };
480
+
481
+ const observer = new IntersectionObserver((entries) => {
482
+ entries.forEach(entry => {
483
+ if (entry.isIntersecting) {
484
+ entry.target.style.opacity = '1';
485
+ entry.target.style.transform = 'translateY(0)';
486
+ }
487
+ });
488
+ }, observerOptions);
489
+
490
+ // Observe all cards and sections
491
+ document.querySelectorAll('.card-hover, section').forEach(el => {
492
+ el.style.opacity = '0';
493
+ el.style.transform = 'translateY(20px)';
494
+ el.style.transition = 'all 0.6s ease';
495
+ observer.observe(el);
496
+ });
497
+
498
+ // Add some dynamic background elements
499
+ function createFloatingElement() {
500
+ const element = document.createElement('div');
501
+ element.classList.add('absolute', 'rounded-full', 'opacity-10', 'floating-element');
502
+ element.style.width = Math.random() * 100 + 50 + 'px';
503
+ element.style.height = element.style.width;
504
+ element.style.left = Math.random() * 100 + '%';
505
+ element.style.top = Math.random() * 100 + '%';
506
+ element.style.background = `var(--${Math.random() > 0.5 ? 'primary' : 'secondary'}-400)`;
507
+ element.style.animationDuration = (Math.random() * 3 + 3) + 's';
508
+
509
+ document.body.appendChild(element);
510
+
511
+ setTimeout(() => element.remove(), 10000);
512
+ }
513
+
514
+ // Create floating elements periodically
515
+ setInterval(createFloatingElement, 3000);
516
+ </script>
517
+ </body>
518
  </html>