VoidVision commited on
Commit
d90b88c
·
verified ·
1 Parent(s): d515c9b

it should look very professional it is looking very simple

Browse files
Files changed (4) hide show
  1. components/navbar.js +8 -9
  2. index.html +16 -19
  3. script.js +34 -12
  4. style.css +145 -15
components/navbar.js CHANGED
@@ -38,15 +38,14 @@ class CustomNavbar extends HTMLElement {
38
  </style>
39
  <nav class="fixed w-full z-50 py-4 px-6 transition-all duration-300">
40
  <div class="max-w-7xl mx-auto flex justify-between items-center">
41
- <a href="/" class="text-2xl font-bold text-gradient">PixelPulse</a>
42
-
43
- <div class="hidden md:flex items-center space-x-8">
44
- <a href="#gallery" class="nav-link text-white hover:text-primary-200 transition-colors">Gallery</a>
45
- <a href="#about" class="nav-link text-white hover:text-primary-200 transition-colors">About</a>
46
- <a href="#testimonials" class="nav-link text-white hover:text-primary-200 transition-colors">Testimonials</a>
47
- <a href="#contact" class="nav-link text-white hover:text-primary-200 transition-colors">Contact</a>
48
- <a href="#" class="px-6 py-2 bg-white text-primary-500 rounded-full font-medium hover:bg-gray-100 transition-colors">Commission</a>
49
- </div>
50
 
51
  <button class="md:hidden text-white focus:outline-none" id="mobile-menu-button">
52
  <i data-feather="menu"></i>
 
38
  </style>
39
  <nav class="fixed w-full z-50 py-4 px-6 transition-all duration-300">
40
  <div class="max-w-7xl mx-auto flex justify-between items-center">
41
+ <a href="/" class="text-2xl font-bold text-gradient tracking-tight">PixelPulse</a>
42
+ <div class="hidden md:flex items-center space-x-8">
43
+ <a href="#gallery" class="nav-link text-white hover:text-primary-200 transition-colors professional-underline">Gallery</a>
44
+ <a href="#about" class="nav-link text-white hover:text-primary-200 transition-colors professional-underline">About</a>
45
+ <a href="#testimonials" class="nav-link text-white hover:text-primary-200 transition-colors professional-underline">Testimonials</a>
46
+ <a href="#contact" class="nav-link text-white hover:text-primary-200 transition-colors professional-underline">Contact</a>
47
+ <a href="#" class="professional-btn px-6 py-2 bg-white text-primary-500 rounded-full font-medium hover:bg-gray-100 transition-colors">Commission</a>
48
+ </div>
 
49
 
50
  <button class="md:hidden text-white focus:outline-none" id="mobile-menu-button">
51
  <i data-feather="menu"></i>
index.html CHANGED
@@ -49,27 +49,26 @@
49
  <main>
50
  <!-- Hero Section -->
51
  <section class="hero-section relative h-screen flex items-center justify-center overflow-hidden">
52
- <div class="absolute inset-0 bg-gradient-to-br from-primary-500 to-secondary-600 opacity-90 animate-gradientBG"></div>
53
  <div class="absolute inset-0 bg-[url('https://static.photos/abstract/1200x630/42')] bg-cover bg-center mix-blend-overlay"></div>
54
  <div class="absolute inset-0 bg-[url('https://static.photos/abstract/1200x630/43')] bg-cover bg-center mix-blend-overlay opacity-0 hover:opacity-100 transition-opacity duration-1000"></div>
55
  <div class="relative z-10 text-center px-4 max-w-4xl mx-auto">
56
- <h1 class="text-5xl md:text-7xl font-bold text-white mb-6 text-reveal" data-animate="fadeIn">
57
  PixelPulse Gallery
58
  </h1>
59
- <p class="text-xl md:text-2xl text-white/90 mb-8 max-w-2xl mx-auto" data-animate="fadeIn" data-delay="100">
60
  Where digital brushstrokes meet infinite imagination
61
  </p>
62
- <a href="#gallery" class="inline-flex items-center px-8 py-3 bg-white text-primary-600 rounded-full font-semibold shadow-lg hover:bg-gray-100 transition-all duration-300 animate-bounce">
63
  Explore Artworks
64
  <i data-feather="arrow-down" class="ml-2"></i>
65
  </a>
66
  </div>
67
- <div class="absolute bottom-10 left-1/2 transform -translate-x-1/2 animate-bounce">
68
  <i data-feather="chevron-down" class="text-white w-8 h-8"></i>
69
  </div>
70
  </section>
71
-
72
- <!-- Gallery Section -->
73
  <section id="gallery" class="py-20 px-4 sm:px-6 lg:px-8 bg-white">
74
  <div class="max-w-7xl mx-auto">
75
  <div class="text-center mb-16">
@@ -79,20 +78,19 @@
79
 
80
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
81
  <!-- Artwork 1 -->
82
- <div class="artwork-card group relative overflow-hidden rounded-xl shadow-xl hover:shadow-2xl transition-all duration-500 transform-style-preserve-3d">
83
- <img src="https://static.photos/abstract/640x360/1" alt="Digital Artwork" class="w-full h-64 object-cover transition-transform duration-500 group-hover:scale-110" data-animate="fadeIn">
84
- <div class="absolute inset-0 bg-gradient-to-t from-black/70 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-end p-6">
85
- <div>
86
- <h3 class="text-xl font-bold text-white">Cosmic Dreams</h3>
87
- <p class="text-white/80">Digital Painting | 2023</p>
88
- <button class="mt-2 px-4 py-2 bg-primary-500 text-white rounded-md hover:bg-primary-600 transition-colors">
89
  View Details
90
  </button>
91
  </div>
92
  </div>
93
  </div>
94
-
95
- <!-- Artwork 2 -->
96
  <div class="group relative overflow-hidden rounded-xl shadow-xl hover:shadow-2xl transition-all duration-500">
97
  <img src="https://static.photos/minimal/640x360/2" alt="Digital Artwork" class="w-full h-64 object-cover transition-transform duration-500 group-hover:scale-110">
98
  <div class="absolute inset-0 bg-gradient-to-t from-black/70 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-end p-6">
@@ -171,10 +169,9 @@
171
  </div>
172
  </div>
173
  </section>
174
-
175
  <!-- About Section -->
176
- <section class="py-20 px-4 sm:px-6 lg:px-8 bg-gray-50">
177
- <div class="max-w-7xl mx-auto">
178
  <div class="flex flex-col lg:flex-row items-center gap-12">
179
  <div class="lg:w-1/2">
180
  <img src="https://static.photos/people/640x360/7" alt="Artist" class="rounded-2xl shadow-2xl w-full">
 
49
  <main>
50
  <!-- Hero Section -->
51
  <section class="hero-section relative h-screen flex items-center justify-center overflow-hidden">
52
+ <div class="absolute inset-0 bg-gradient-to-br from-primary-500 to-secondary-600 opacity-90 animate-professionalGradient"></div>
53
  <div class="absolute inset-0 bg-[url('https://static.photos/abstract/1200x630/42')] bg-cover bg-center mix-blend-overlay"></div>
54
  <div class="absolute inset-0 bg-[url('https://static.photos/abstract/1200x630/43')] bg-cover bg-center mix-blend-overlay opacity-0 hover:opacity-100 transition-opacity duration-1000"></div>
55
  <div class="relative z-10 text-center px-4 max-w-4xl mx-auto">
56
+ <h1 class="text-5xl md:text-7xl font-bold text-white mb-6 text-reveal" data-animate="professionalSlide">
57
  PixelPulse Gallery
58
  </h1>
59
+ <p class="text-xl md:text-2xl text-white/90 mb-8 max-w-2xl mx-auto" data-animate="professionalSlide" data-delay="100">
60
  Where digital brushstrokes meet infinite imagination
61
  </p>
62
+ <a href="#gallery" class="professional-btn inline-flex items-center px-8 py-3 bg-white text-primary-600 rounded-full font-semibold shadow-lg hover:bg-gray-100 transition-all duration-300">
63
  Explore Artworks
64
  <i data-feather="arrow-down" class="ml-2"></i>
65
  </a>
66
  </div>
67
+ <div class="absolute bottom-10 left-1/2 transform -translate-x-1/2 animate-subtleFloat">
68
  <i data-feather="chevron-down" class="text-white w-8 h-8"></i>
69
  </div>
70
  </section>
71
+ <!-- Gallery Section -->
 
72
  <section id="gallery" class="py-20 px-4 sm:px-6 lg:px-8 bg-white">
73
  <div class="max-w-7xl mx-auto">
74
  <div class="text-center mb-16">
 
78
 
79
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
80
  <!-- Artwork 1 -->
81
+ <div class="professional-card group relative overflow-hidden rounded-xl shadow-lg hover:shadow-2xl transition-all duration-500 transform-style-preserve-3d">
82
+ <img src="https://static.photos/abstract/640x360/1" alt="Digital Artwork" class="w-full h-64 object-cover transition-transform duration-500 group-hover:scale-105" data-animate="professionalSlide">
83
+ <div class="absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500 flex items-end p-6">
84
+ <div class="transform translate-y-4 group-hover:translate-y-0 transition-transform duration-500">
85
+ <h3 class="text-xl font-bold text-white professional-underline">Cosmic Dreams</h3>
86
+ <p class="text-white/80 mb-4">Digital Painting | 2023</p>
87
+ <button class="professional-btn mt-2 px-4 py-2 bg-primary-500 text-white rounded-md hover:bg-primary-600 transition-colors">
88
  View Details
89
  </button>
90
  </div>
91
  </div>
92
  </div>
93
+ <!-- Artwork 2 -->
 
94
  <div class="group relative overflow-hidden rounded-xl shadow-xl hover:shadow-2xl transition-all duration-500">
95
  <img src="https://static.photos/minimal/640x360/2" alt="Digital Artwork" class="w-full h-64 object-cover transition-transform duration-500 group-hover:scale-110">
96
  <div class="absolute inset-0 bg-gradient-to-t from-black/70 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-end p-6">
 
169
  </div>
170
  </div>
171
  </section>
 
172
  <!-- About Section -->
173
+ <section class="py-20 px-4 sm:px-6 lg:px-8 bg-gradient-to-br from-gray-50 to-gray-100">
174
+ <div class="max-w-7xl mx-auto">
175
  <div class="flex flex-col lg:flex-row items-center gap-12">
176
  <div class="lg:w-1/2">
177
  <img src="https://static.photos/people/640x360/7" alt="Artist" class="rounded-2xl shadow-2xl w-full">
script.js CHANGED
@@ -1,47 +1,69 @@
1
 
2
  document.addEventListener('DOMContentLoaded', function() {
3
- // Add cursor trail effect
4
  const cursorTrail = document.createElement('div');
5
  cursorTrail.style.position = 'fixed';
6
- cursorTrail.style.width = '20px';
7
- cursorTrail.style.height = '20px';
8
  cursorTrail.style.background = 'radial-gradient(circle, rgba(124,58,237,0.8) 0%, rgba(14,165,233,0.4) 70%, transparent 100%)';
9
  cursorTrail.style.borderRadius = '50%';
10
  cursorTrail.style.pointerEvents = 'none';
11
  cursorTrail.style.zIndex = '9999';
12
- cursorTrail.style.transform = 'translate(-50%, -50%)';
13
  cursorTrail.style.mixBlendMode = 'overlay';
 
 
14
  document.body.appendChild(cursorTrail);
15
 
 
 
 
 
 
 
 
 
 
 
 
16
  let posX = 0, posY = 0;
17
  let mouseX = 0, mouseY = 0;
 
18
 
19
  document.addEventListener('mousemove', (e) => {
20
  mouseX = e.clientX;
21
  mouseY = e.clientY;
 
 
22
  });
23
 
24
  const updateCursor = () => {
25
- posX += (mouseX - posX) / 10;
26
- posY += (mouseY - posY) / 10;
27
 
28
  cursorTrail.style.left = `${posX}px`;
29
  cursorTrail.style.top = `${posY}px`;
 
30
 
31
  requestAnimationFrame(updateCursor);
32
  };
33
  updateCursor();
34
-
35
- // Add hover effect to interactive elements
36
- const interactiveElements = document.querySelectorAll('a, button, [data-interactive]');
37
  interactiveElements.forEach(el => {
38
  el.addEventListener('mouseenter', () => {
39
- cursorTrail.style.transform = 'translate(-50%, -50%) scale(2)';
40
- cursorTrail.style.background = 'radial-gradient(circle, rgba(255,255,255,0.8) 0%, rgba(124,58,237,0.6) 70%, transparent 100%)';
 
 
 
41
  });
42
  el.addEventListener('mouseleave', () => {
43
- cursorTrail.style.transform = 'translate(-50%, -50%) scale(1)';
44
  cursorTrail.style.background = 'radial-gradient(circle, rgba(124,58,237,0.8) 0%, rgba(14,165,233,0.4) 70%, transparent 100%)';
 
 
 
45
  });
46
  });
47
  // Smooth scrolling for anchor links
 
1
 
2
  document.addEventListener('DOMContentLoaded', function() {
3
+ // Professional cursor trail effect
4
  const cursorTrail = document.createElement('div');
5
  cursorTrail.style.position = 'fixed';
6
+ cursorTrail.style.width = '24px';
7
+ cursorTrail.style.height = '24px';
8
  cursorTrail.style.background = 'radial-gradient(circle, rgba(124,58,237,0.8) 0%, rgba(14,165,233,0.4) 70%, transparent 100%)';
9
  cursorTrail.style.borderRadius = '50%';
10
  cursorTrail.style.pointerEvents = 'none';
11
  cursorTrail.style.zIndex = '9999';
12
+ cursorTrail.style.transform = 'translate(-50%, -50%) scale(0)';
13
  cursorTrail.style.mixBlendMode = 'overlay';
14
+ cursorTrail.style.transition = 'transform 0.2s cubic-bezier(0.25, 0.1, 0.25, 1)';
15
+ cursorTrail.style.filter = 'blur(1px)';
16
  document.body.appendChild(cursorTrail);
17
 
18
+ // Professional cursor dot
19
+ const cursorDot = document.createElement('div');
20
+ cursorDot.style.position = 'fixed';
21
+ cursorDot.style.width = '6px';
22
+ cursorDot.style.height = '6px';
23
+ cursorDot.style.backgroundColor = 'rgba(124,58,237,0.9)';
24
+ cursorDot.style.borderRadius = '50%';
25
+ cursorDot.style.pointerEvents = 'none';
26
+ cursorDot.style.zIndex = '10000';
27
+ cursorDot.style.transform = 'translate(-50%, -50%)';
28
+ document.body.appendChild(cursorDot);
29
  let posX = 0, posY = 0;
30
  let mouseX = 0, mouseY = 0;
31
+ let isHovering = false;
32
 
33
  document.addEventListener('mousemove', (e) => {
34
  mouseX = e.clientX;
35
  mouseY = e.clientY;
36
+ cursorDot.style.left = `${mouseX}px`;
37
+ cursorDot.style.top = `${mouseY}px`;
38
  });
39
 
40
  const updateCursor = () => {
41
+ posX += (mouseX - posX) / 6;
42
+ posY += (mouseY - posY) / 6;
43
 
44
  cursorTrail.style.left = `${posX}px`;
45
  cursorTrail.style.top = `${posY}px`;
46
+ cursorTrail.style.transform = `translate(-50%, -50%) scale(${isHovering ? 1.5 : 1})`;
47
 
48
  requestAnimationFrame(updateCursor);
49
  };
50
  updateCursor();
51
+ // Professional hover effect for interactive elements
52
+ const interactiveElements = document.querySelectorAll('a, button, [data-interactive], .professional-btn, .professional-card');
 
53
  interactiveElements.forEach(el => {
54
  el.addEventListener('mouseenter', () => {
55
+ isHovering = true;
56
+ cursorTrail.style.background = 'radial-gradient(circle, rgba(255,255,255,0.9) 0%, rgba(124,58,237,0.7) 70%, transparent 100%)';
57
+ cursorTrail.style.filter = 'blur(1.5px)';
58
+ cursorDot.style.transform = 'translate(-50%, -50%) scale(1.5)';
59
+ cursorDot.style.backgroundColor = 'rgba(255,255,255,0.9)';
60
  });
61
  el.addEventListener('mouseleave', () => {
62
+ isHovering = false;
63
  cursorTrail.style.background = 'radial-gradient(circle, rgba(124,58,237,0.8) 0%, rgba(14,165,233,0.4) 70%, transparent 100%)';
64
+ cursorTrail.style.filter = 'blur(1px)';
65
+ cursorDot.style.transform = 'translate(-50%, -50%) scale(1)';
66
+ cursorDot.style.backgroundColor = 'rgba(124,58,237,0.9)';
67
  });
68
  });
69
  // Smooth scrolling for anchor links
style.css CHANGED
@@ -4,6 +4,33 @@
4
  to { opacity: 1; transform: translateY(0); }
5
  }
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  @keyframes bounce {
8
  0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
9
  40% { transform: translateY(-30px); }
@@ -42,11 +69,28 @@
42
  from { transform: rotate(0deg); }
43
  to { transform: rotate(360deg); }
44
  }
45
-
46
  .animate-fadeIn {
47
- animation: fadeIn 1.2s cubic-bezier(0.22, 1, 0.36, 1) forwards;
 
 
 
 
 
48
  }
49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  .animate-float {
51
  animation: float 6s ease-in-out infinite;
52
  }
@@ -124,16 +168,20 @@
124
  transform: scale(1.05);
125
  filter: url('#liquid');
126
  }
127
-
128
- /* Glass Morphism */
129
  .glass-morphism {
130
- background: rgba(255, 255, 255, 0.15);
131
- backdrop-filter: blur(10px);
132
- -webkit-backdrop-filter: blur(10px);
133
- border: 1px solid rgba(255, 255, 255, 0.18);
134
  box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.15);
 
135
  }
136
 
 
 
 
 
137
  /* Neon Text Effect */
138
  .neon-text {
139
  text-shadow:
@@ -204,26 +252,108 @@
204
  transform: translateY(100%);
205
  opacity: 0;
206
  }
207
-
208
- /* Custom scrollbar */
209
  ::-webkit-scrollbar {
210
- width: 8px;
211
- height: 8px;
212
  }
213
 
214
  ::-webkit-scrollbar-track {
215
- background: #f1f1f1;
 
216
  }
217
 
218
  ::-webkit-scrollbar-thumb {
219
- background: linear-gradient(to bottom, #0ea5e9, #7c3aed);
220
  border-radius: 10px;
 
221
  }
222
 
223
  ::-webkit-scrollbar-thumb:hover {
224
- background: linear-gradient(to bottom, #0284c7, #6d28d9);
 
 
 
 
 
225
  }
226
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  /* Hover effects */
228
  .group:hover .group-hover\:opacity-100 {
229
  opacity: 1;
 
4
  to { opacity: 1; transform: translateY(0); }
5
  }
6
 
7
+ @keyframes professionalFadeIn {
8
+ 0% { opacity: 0; transform: translateY(20px) scale(0.98); }
9
+ 50% { opacity: 0.5; transform: translateY(10px) scale(0.99); }
10
+ 100% { opacity: 1; transform: translateY(0) scale(1); }
11
+ }
12
+
13
+ @keyframes subtleFloat {
14
+ 0%, 100% { transform: translateY(0); }
15
+ 50% { transform: translateY(-8px); }
16
+ }
17
+
18
+ @keyframes professionalPulse {
19
+ 0% { transform: scale(1); box-shadow: 0 5px 15px rgba(0,0,0,0.1); }
20
+ 50% { transform: scale(1.02); box-shadow: 0 8px 25px rgba(0,0,0,0.15); }
21
+ 100% { transform: scale(1); box-shadow: 0 5px 15px rgba(0,0,0,0.1); }
22
+ }
23
+
24
+ @keyframes professionalGradient {
25
+ 0% { background-position: 0% 50%; }
26
+ 50% { background-position: 100% 50%; }
27
+ 100% { background-position: 0% 50%; }
28
+ }
29
+
30
+ @keyframes professionalSlideIn {
31
+ from { opacity: 0; transform: translateY(40px) perspective(1000px) rotateX(10deg); }
32
+ to { opacity: 1; transform: translateY(0) perspective(1000px) rotateX(0); }
33
+ }
34
  @keyframes bounce {
35
  0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
36
  40% { transform: translateY(-30px); }
 
69
  from { transform: rotate(0deg); }
70
  to { transform: rotate(360deg); }
71
  }
 
72
  .animate-fadeIn {
73
+ animation: professionalFadeIn 1.2s cubic-bezier(0.16, 0.77, 0.47, 0.99) forwards;
74
+ }
75
+
76
+ .animate-professionalSlide {
77
+ animation: professionalSlideIn 1s cubic-bezier(0.23, 1, 0.32, 1) forwards;
78
+ transform-origin: center bottom;
79
  }
80
 
81
+ .animate-subtleFloat {
82
+ animation: subtleFloat 6s ease-in-out infinite;
83
+ }
84
+
85
+ .animate-professionalPulse {
86
+ animation: professionalPulse 4s cubic-bezier(0.4, 0, 0.2, 1) infinite;
87
+ }
88
+
89
+ .animate-professionalGradient {
90
+ background: linear-gradient(135deg, #0ea5e9, #7c3aed, #0ea5e9);
91
+ background-size: 200% 200%;
92
+ animation: professionalGradient 8s ease infinite;
93
+ }
94
  .animate-float {
95
  animation: float 6s ease-in-out infinite;
96
  }
 
168
  transform: scale(1.05);
169
  filter: url('#liquid');
170
  }
171
+ /* Professional Glass Morphism */
 
172
  .glass-morphism {
173
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.05));
174
+ backdrop-filter: blur(12px) saturate(180%);
175
+ -webkit-backdrop-filter: blur(12px) saturate(180%);
176
+ border: 1px solid rgba(255, 255, 255, 0.125);
177
  box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.15);
178
+ transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
179
  }
180
 
181
+ .glass-morphism:hover {
182
+ transform: translateY(-2px);
183
+ box-shadow: 0 12px 40px 0 rgba(31, 38, 135, 0.25);
184
+ }
185
  /* Neon Text Effect */
186
  .neon-text {
187
  text-shadow:
 
252
  transform: translateY(100%);
253
  opacity: 0;
254
  }
255
+ /* Professional Scrollbar */
 
256
  ::-webkit-scrollbar {
257
+ width: 10px;
258
+ height: 10px;
259
  }
260
 
261
  ::-webkit-scrollbar-track {
262
+ background: rgba(0,0,0,0.03);
263
+ border-radius: 10px;
264
  }
265
 
266
  ::-webkit-scrollbar-thumb {
267
+ background: linear-gradient(135deg, #0ea5e9, #7c3aed);
268
  border-radius: 10px;
269
+ border: 2px solid rgba(255,255,255,0.2);
270
  }
271
 
272
  ::-webkit-scrollbar-thumb:hover {
273
+ background: linear-gradient(135deg, #0284c7, #6d28d9);
274
+ }
275
+
276
+ /* Professional Underline Animation */
277
+ .professional-underline {
278
+ position: relative;
279
  }
280
 
281
+ .professional-underline::after {
282
+ content: '';
283
+ position: absolute;
284
+ width: 0;
285
+ height: 2px;
286
+ bottom: -4px;
287
+ left: 0;
288
+ background: currentColor;
289
+ transition: width 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
290
+ transform-origin: left center;
291
+ }
292
+
293
+ .professional-underline:hover::after {
294
+ width: 100%;
295
+ }
296
+
297
+ /* Professional Card */
298
+ .professional-card {
299
+ position: relative;
300
+ overflow: hidden;
301
+ transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
302
+ transform: translateZ(0);
303
+ will-change: transform;
304
+ }
305
+
306
+ .professional-card::before {
307
+ content: '';
308
+ position: absolute;
309
+ top: 0;
310
+ left: 0;
311
+ right: 0;
312
+ bottom: 0;
313
+ background: linear-gradient(135deg, rgba(14,165,233,0.1), rgba(124,58,237,0.1));
314
+ opacity: 0;
315
+ transition: opacity 0.4s ease;
316
+ z-index: 1;
317
+ }
318
+
319
+ .professional-card:hover {
320
+ transform: translateY(-5px) scale(1.01);
321
+ box-shadow: 0 20px 40px rgba(0,0,0,0.12);
322
+ }
323
+
324
+ .professional-card:hover::before {
325
+ opacity: 1;
326
+ }
327
+
328
+ /* Professional Button */
329
+ .professional-btn {
330
+ position: relative;
331
+ overflow: hidden;
332
+ transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
333
+ transform: translateZ(0);
334
+ will-change: transform;
335
+ }
336
+
337
+ .professional-btn::after {
338
+ content: '';
339
+ position: absolute;
340
+ top: 0;
341
+ left: 0;
342
+ width: 100%;
343
+ height: 100%;
344
+ background: linear-gradient(135deg, rgba(255,255,255,0.2), transparent);
345
+ transform: translateX(-100%);
346
+ transition: transform 0.6s cubic-bezier(0.25, 0.8, 0.25, 1);
347
+ }
348
+
349
+ .professional-btn:hover {
350
+ transform: translateY(-2px);
351
+ box-shadow: 0 8px 20px rgba(14,165,233,0.3);
352
+ }
353
+
354
+ .professional-btn:hover::after {
355
+ transform: translateX(0);
356
+ }
357
  /* Hover effects */
358
  .group:hover .group-hover\:opacity-100 {
359
  opacity: 1;