@@ -128,184 +128,6 @@ const skills = [
128128 </div >
129129</BaseLayout >
130130
131- <style >
132- /* Blob animation */
133- .animate-blob {
134- animation: blob-bounce 8s infinite ease;
135- }
136-
137- .animation-delay-2000 {
138- animation-delay: 2s;
139- }
140-
141- @keyframes blob-bounce {
142- 0%, 100% {
143- transform: translate(0, 0) scale(1);
144- }
145- 25% {
146- transform: translate(5%, 5%) scale(1.05);
147- }
148- 50% {
149- transform: translate(0, 10%) scale(1);
150- }
151- 75% {
152- transform: translate(-5%, 5%) scale(0.95);
153- }
154- }
155-
156- /* Tech Stack Slider - Seamless infinite loop */
157- .slider-track {
158- width: fit-content;
159- animation: scroll-left 40s linear infinite;
160- }
161-
162- .slider-track.reverse {
163- animation: scroll-right 40s linear infinite;
164- }
165-
166- @keyframes scroll-left {
167- 0% {
168- transform: translateX(0);
169- }
170- 100% {
171- transform: translateX(calc(-220px * 6 - 16px * 6)); /* Card width + margin for mobile */
172- }
173- }
174-
175- @keyframes scroll-right {
176- 0% {
177- transform: translateX(calc(-220px * 6 - 16px * 6));
178- }
179- 100% {
180- transform: translateX(0);
181- }
182- }
183-
184- @media (min-width: 640px) {
185- .slider-track {
186- animation: scroll-left 60s linear infinite;
187- }
188-
189- .slider-track.reverse {
190- animation: scroll-right 60s linear infinite;
191- }
192-
193- @keyframes scroll-left {
194- 0% {
195- transform: translateX(0);
196- }
197- 100% {
198- transform: translateX(calc(-280px * 6 - 32px * 6)); /* Card width + margin for desktop */
199- }
200- }
201-
202- @keyframes scroll-right {
203- 0% {
204- transform: translateX(calc(-280px * 6 - 32px * 6));
205- }
206- 100% {
207- transform: translateX(0);
208- }
209- }
210- }
211-
212- .tech-stack-slider:hover .slider-track {
213- animation-play-state: paused;
214- }
215-
216- .skill-card {
217- transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
218- position: relative;
219- overflow: hidden;
220- }
221-
222- .skill-card:hover {
223- z-index: 10;
224- }
225-
226- /* Reduce animation complexity on mobile for better performance */
227- @media (max-width: 640px) {
228- .skill-card {
229- transition: transform 0.3s ease, box-shadow 0.3s ease;
230- }
231-
232- .skill-card:hover {
233- transform: translateY(-5px) !important;
234- box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1) !important;
235- }
236- }
237-
238- .skill-card:before {
239- content: '';
240- position: absolute;
241- top: -10%;
242- left: -10%;
243- width: 120%;
244- height: 120%;
245- background: radial-gradient(circle at center, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 70%);
246- opacity: 0;
247- transition: opacity 0.5s ease;
248- pointer-events: none;
249- }
250-
251- .skill-card:hover:before {
252- opacity: 1;
253- }
254-
255- .progress-bar-animate {
256- position: relative;
257- overflow: hidden;
258- }
259-
260- .progress-bar-animate:after {
261- content: '';
262- position: absolute;
263- top: 0;
264- left: -100%;
265- width: 100%;
266- height: 100%;
267- background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
268- animation: progress-shine 2s infinite;
269- }
270-
271- @keyframes progress-shine {
272- 0% {
273- left: -100%;
274- }
275- 100% {
276- left: 100%;
277- }
278- }
279-
280- /* Improved touch targets for mobile */
281- @media (max-width: 640px) {
282- a, button {
283- min-height: 44px;
284- display: flex;
285- align-items: center;
286- }
287-
288- .social-link {
289- min-width: 44px;
290- min-height: 44px;
291- }
292- }
293-
294- /* Theme transition effect */
295- :global(.theme-switching) .theme-transition-element {
296- animation: fadeIn 0.6s cubic-bezier(0.22, 1, 0.36, 1);
297- }
298-
299- /* Smooth card transition during theme switch */
300- .skill-card.theme-transition-element {
301- transition: background-color var(--theme-transition),
302- border-color var(--theme-transition),
303- color var(--theme-transition),
304- box-shadow var(--theme-transition),
305- transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
306- }
307- </style >
308-
309131<script >
310132 // Wait for the DOM to be fully loaded
311133document.addEventListener('DOMContentLoaded', () => {
0 commit comments