Spaces:
Running
Running
now its too simple.
Browse filesmaking it more visually engaging, dynamic, animated
- index.html +255 -34
index.html
CHANGED
|
@@ -38,17 +38,159 @@
|
|
| 38 |
line-height: 1.6;
|
| 39 |
overflow-x: hidden;
|
| 40 |
cursor: none;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
}
|
|
|
|
| 42 |
.custom-cursor {
|
| 43 |
-
width:
|
| 44 |
-
height:
|
| 45 |
-
border:
|
| 46 |
border-radius: 50%;
|
| 47 |
position: fixed;
|
| 48 |
pointer-events: none;
|
| 49 |
z-index: 9999;
|
| 50 |
-
transition: all 0.
|
| 51 |
opacity: 0.8;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
}
|
| 53 |
.mono {
|
| 54 |
font-family: 'JetBrains Mono', monospace;
|
|
@@ -238,7 +380,9 @@
|
|
| 238 |
</head>
|
| 239 |
<body>
|
| 240 |
<div class="custom-cursor"></div>
|
|
|
|
| 241 |
<div id="particles-js"></div>
|
|
|
|
| 242 |
<!-- Navigation -->
|
| 243 |
<nav class="fixed top-0 w-full bg-opacity-90 backdrop-blur-xl bg-opacity-90 backdrop-blur-xl z-50 border-b border-gray-800">
|
| 244 |
<div class="max-w-7xl mx-auto px-6 py-4">
|
|
@@ -262,15 +406,18 @@
|
|
| 262 |
</div>
|
| 263 |
</nav>
|
| 264 |
<!-- Hero Section -->
|
| 265 |
-
<section id="home" class="min-h-screen flex items-center justify-center px-6 pt-20 relative">
|
| 266 |
-
<div class="
|
| 267 |
-
|
| 268 |
-
|
|
|
|
|
|
|
|
|
|
| 269 |
</div>
|
| 270 |
-
<h1 class="text-5xl md:text-7xl font-bold mb-6">
|
| 271 |
-
Hi <span class="emoji-bounce inline-block">👋</span>, I'm <span class="gradient-text">Dev-in-the-BM</span>
|
| 272 |
</h1>
|
| 273 |
-
<div class="text-2xl md:text-3xl text-gray-400 mb-8 max-w-4xl mx-auto">
|
| 274 |
<span class="inline-flex items-center gap-2 mb-2">
|
| 275 |
<span class="emoji-bounce">🎩</span>
|
| 276 |
<span>Yeshiva Bochur</span>
|
|
@@ -281,17 +428,17 @@
|
|
| 281 |
<span>Vibe Coder</span>
|
| 282 |
</span>
|
| 283 |
</div>
|
| 284 |
-
<div class="flex justify-center gap-6 mb-12">
|
| 285 |
-
<a href="#projects" class="btn-primary">
|
| 286 |
<i data-feather="briefcase" class="w-5 h-5"></i>
|
| 287 |
View Projects
|
| 288 |
</a>
|
| 289 |
-
<a href="#contact" class="btn-secondary">
|
| 290 |
<i data-feather="mail" class="w-5 h-5"></i>
|
| 291 |
Get in Touch
|
| 292 |
</a>
|
| 293 |
</div>
|
| 294 |
-
|
| 295 |
<div class="terminal-header">
|
| 296 |
<div class="terminal-dot bg-red-500"></div>
|
| 297 |
<div class="terminal-dot bg-yellow-500"></div>
|
|
@@ -573,22 +720,76 @@
|
|
| 573 |
<script>
|
| 574 |
// Initialize Feather Icons
|
| 575 |
feather.replace();
|
| 576 |
-
// Custom Cursor
|
| 577 |
const cursor = document.querySelector('.custom-cursor');
|
|
|
|
| 578 |
|
| 579 |
document.addEventListener('mousemove', (e) => {
|
| 580 |
-
cursor.style.left = e.clientX -
|
| 581 |
-
cursor.style.top = e.clientY -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 582 |
});
|
| 583 |
|
| 584 |
document.addEventListener('mousedown', () => {
|
| 585 |
-
cursor.style.transform = 'scale(0.
|
|
|
|
| 586 |
});
|
| 587 |
|
| 588 |
document.addEventListener('mouseup', () => {
|
| 589 |
cursor.style.transform = 'scale(1)';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 590 |
});
|
| 591 |
-
|
| 592 |
particlesJS('particles-js', {
|
| 593 |
particles: {
|
| 594 |
number: {
|
|
@@ -656,22 +857,25 @@
|
|
| 656 |
}
|
| 657 |
});
|
| 658 |
});
|
| 659 |
-
//
|
| 660 |
-
const
|
| 661 |
-
|
| 662 |
-
|
| 663 |
-
|
|
|
|
|
|
|
| 664 |
|
| 665 |
-
const
|
| 666 |
entries.forEach(entry => {
|
| 667 |
if (entry.isIntersecting) {
|
| 668 |
-
entry.target.
|
|
|
|
| 669 |
}
|
| 670 |
});
|
| 671 |
-
},
|
| 672 |
|
| 673 |
-
|
| 674 |
-
|
| 675 |
});
|
| 676 |
// Terminal typing effect
|
| 677 |
const terminalLines = document.querySelectorAll('.terminal .text-green-400 p');
|
|
@@ -682,11 +886,28 @@
|
|
| 682 |
line.style.opacity = '1';
|
| 683 |
}, index * 1000);
|
| 684 |
});
|
| 685 |
-
// Mobile menu toggle
|
| 686 |
function toggleMobileMenu() {
|
| 687 |
-
|
| 688 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 689 |
}
|
| 690 |
-
|
| 691 |
</body>
|
| 692 |
</html>
|
|
|
|
| 38 |
line-height: 1.6;
|
| 39 |
overflow-x: hidden;
|
| 40 |
cursor: none;
|
| 41 |
+
position: relative;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
body::before {
|
| 45 |
+
content: '';
|
| 46 |
+
position: fixed;
|
| 47 |
+
top: 0;
|
| 48 |
+
left: 0;
|
| 49 |
+
width: 100%;
|
| 50 |
+
height: 100%;
|
| 51 |
+
background:
|
| 52 |
+
radial-gradient(circle at 20% 50%, rgba(124, 58, 237, 0.1) 0%, transparent 50%),
|
| 53 |
+
radial-gradient(circle at 80% 80%, rgba(59, 130, 246, 0.1) 0%, transparent 50%),
|
| 54 |
+
radial-gradient(circle at 40% 20%, rgba(236, 72, 153, 0.05) 0%, transparent 50%);
|
| 55 |
+
pointer-events: none;
|
| 56 |
+
z-index: 0;
|
| 57 |
}
|
| 58 |
+
|
| 59 |
.custom-cursor {
|
| 60 |
+
width: 20px;
|
| 61 |
+
height: 20px;
|
| 62 |
+
border: 2px solid var(--accent);
|
| 63 |
border-radius: 50%;
|
| 64 |
position: fixed;
|
| 65 |
pointer-events: none;
|
| 66 |
z-index: 9999;
|
| 67 |
+
transition: all 0.1s ease;
|
| 68 |
opacity: 0.8;
|
| 69 |
+
box-shadow: 0 0 20px rgba(124, 58, 237, 0.5);
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
.cursor-follower {
|
| 73 |
+
width: 40px;
|
| 74 |
+
height: 40px;
|
| 75 |
+
background: rgba(124, 58, 237, 0.1);
|
| 76 |
+
border: 1px solid rgba(124, 58, 237, 0.3);
|
| 77 |
+
border-radius: 50%;
|
| 78 |
+
position: fixed;
|
| 79 |
+
pointer-events: none;
|
| 80 |
+
z-index: 9998;
|
| 81 |
+
transition: all 0.3s ease;
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
.magnetic-button {
|
| 85 |
+
position: relative;
|
| 86 |
+
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
.magnetic-button:hover {
|
| 90 |
+
transform: scale(1.05);
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
@keyframes float {
|
| 94 |
+
0%, 100% { transform: translateY(0px); }
|
| 95 |
+
50% { transform: translateY(-20px); }
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
@keyframes glow-pulse {
|
| 99 |
+
0%, 100% {
|
| 100 |
+
box-shadow: 0 0 20px rgba(124, 58, 237, 0.5),
|
| 101 |
+
0 0 40px rgba(124, 58, 237, 0.3),
|
| 102 |
+
0 0 60px rgba(124, 58, 237, 0.1);
|
| 103 |
+
}
|
| 104 |
+
50% {
|
| 105 |
+
box-shadow: 0 0 30px rgba(124, 58, 237, 0.7),
|
| 106 |
+
0 0 60px rgba(124, 58, 237, 0.4),
|
| 107 |
+
0 0 90px rgba(124, 58, 237, 0.2);
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
.floating {
|
| 112 |
+
animation: float 6s ease-in-out infinite;
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
.glow-pulse {
|
| 116 |
+
animation: glow-pulse 2s ease-in-out infinite;
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
.parallax-bg {
|
| 120 |
+
position: absolute;
|
| 121 |
+
top: 0;
|
| 122 |
+
left: 0;
|
| 123 |
+
width: 100%;
|
| 124 |
+
height: 100%;
|
| 125 |
+
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320"><path fill="%237c3aed" fill-opacity="0.05" d="M0,96L48,112C96,128,192,160,288,160C384,160,480,128,576,122.7C672,117,768,139,864,133.3C960,128,1056,96,1152,90.7C1248,85,1344,107,1392,117.3L1440,128L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z"></path></svg>') no-repeat bottom;
|
| 126 |
+
background-size: cover;
|
| 127 |
+
z-index: -1;
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
.text-reveal {
|
| 131 |
+
opacity: 0;
|
| 132 |
+
transform: translateY(50px);
|
| 133 |
+
transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
.text-reveal.active {
|
| 137 |
+
opacity: 1;
|
| 138 |
+
transform: translateY(0);
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
.stagger-animation > * {
|
| 142 |
+
opacity: 0;
|
| 143 |
+
transform: translateY(30px);
|
| 144 |
+
transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
.stagger-animation.active > * {
|
| 148 |
+
opacity: 1;
|
| 149 |
+
transform: translateY(0);
|
| 150 |
+
}
|
| 151 |
+
|
| 152 |
+
.stagger-animation.active > *:nth-child(1) { transition-delay: 0.1s; }
|
| 153 |
+
.stagger-animation.active > *:nth-child(2) { transition-delay: 0.2s; }
|
| 154 |
+
.stagger-animation.active > *:nth-child(3) { transition-delay: 0.3s; }
|
| 155 |
+
.stagger-animation.active > *:nth-child(4) { transition-delay: 0.4s; }
|
| 156 |
+
.stagger-animation.active > *:nth-child(5) { transition-delay: 0.5s; }
|
| 157 |
+
.stagger-animation.active > *:nth-child(6) { transition-delay: 0.6s; }
|
| 158 |
+
|
| 159 |
+
.gradient-mesh {
|
| 160 |
+
position: absolute;
|
| 161 |
+
width: 100%;
|
| 162 |
+
height: 100%;
|
| 163 |
+
background:
|
| 164 |
+
radial-gradient(at 40% 20%, rgba(124, 58, 237, 0.3) 0px, transparent 50%),
|
| 165 |
+
radial-gradient(at 80% 0%, rgba(59, 130, 246, 0.3) 0px, transparent 50%),
|
| 166 |
+
radial-gradient(at 0% 50%, rgba(236, 72, 153, 0.2) 0px, transparent 50%);
|
| 167 |
+
filter: blur(100px);
|
| 168 |
+
z-index: -1;
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
.morphing-shape {
|
| 172 |
+
width: 300px;
|
| 173 |
+
height: 300px;
|
| 174 |
+
background: linear-gradient(45deg, #7c3aed, #3b82f6, #ec4899);
|
| 175 |
+
border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%;
|
| 176 |
+
position: absolute;
|
| 177 |
+
top: 50%;
|
| 178 |
+
left: 50%;
|
| 179 |
+
transform: translate(-50%, -50%);
|
| 180 |
+
animation: morph 8s ease-in-out infinite;
|
| 181 |
+
opacity: 0.1;
|
| 182 |
+
filter: blur(40px);
|
| 183 |
+
}
|
| 184 |
+
|
| 185 |
+
@keyframes morph {
|
| 186 |
+
0%, 100% {
|
| 187 |
+
border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%;
|
| 188 |
+
transform: translate(-50%, -50%) rotate(0deg);
|
| 189 |
+
}
|
| 190 |
+
50% {
|
| 191 |
+
border-radius: 30% 60% 70% 40% / 50% 60% 30% 60%;
|
| 192 |
+
transform: translate(-50%, -50%) rotate(180deg);
|
| 193 |
+
}
|
| 194 |
}
|
| 195 |
.mono {
|
| 196 |
font-family: 'JetBrains Mono', monospace;
|
|
|
|
| 380 |
</head>
|
| 381 |
<body>
|
| 382 |
<div class="custom-cursor"></div>
|
| 383 |
+
<div class="cursor-follower"></div>
|
| 384 |
<div id="particles-js"></div>
|
| 385 |
+
<div class="gradient-mesh"></div>
|
| 386 |
<!-- Navigation -->
|
| 387 |
<nav class="fixed top-0 w-full bg-opacity-90 backdrop-blur-xl bg-opacity-90 backdrop-blur-xl z-50 border-b border-gray-800">
|
| 388 |
<div class="max-w-7xl mx-auto px-6 py-4">
|
|
|
|
| 406 |
</div>
|
| 407 |
</nav>
|
| 408 |
<!-- Hero Section -->
|
| 409 |
+
<section id="home" class="min-h-screen flex items-center justify-center px-6 pt-20 relative overflow-hidden">
|
| 410 |
+
<div class="morphing-shape"></div>
|
| 411 |
+
<div class="parallax-bg"></div>
|
| 412 |
+
<div class="max-w-7xl mx-auto text-center relative z-10">
|
| 413 |
+
<div class="mb-8 relative floating">
|
| 414 |
+
<div class="absolute inset-0 bg-gradient-to-r from-purple-600 to-blue-600 rounded-xl blur-xl opacity-50"></div>
|
| 415 |
+
<img src="https://raw.githubusercontent.com/Dev-in-the-BM/Dev-in-the-BM/blob/main/banner.png" alt="Profile Banner" class="w-full max-w-4xl mx-auto rounded-xl border border-gray-800 shadow-2xl relative z-10 transform hover:scale-105 transition-transform duration-500">
|
| 416 |
</div>
|
| 417 |
+
<h1 class="text-5xl md:text-7xl font-bold mb-6 text-reveal">
|
| 418 |
+
Hi <span class="emoji-bounce inline-block">👋</span>, I'm <span class="gradient-text glow-pulse">Dev-in-the-BM</span>
|
| 419 |
</h1>
|
| 420 |
+
<div class="text-2xl md:text-3xl text-gray-400 mb-8 max-w-4xl mx-auto stagger-animation">
|
| 421 |
<span class="inline-flex items-center gap-2 mb-2">
|
| 422 |
<span class="emoji-bounce">🎩</span>
|
| 423 |
<span>Yeshiva Bochur</span>
|
|
|
|
| 428 |
<span>Vibe Coder</span>
|
| 429 |
</span>
|
| 430 |
</div>
|
| 431 |
+
<div class="flex justify-center gap-6 mb-12 stagger-animation">
|
| 432 |
+
<a href="#projects" class="btn-primary magnetic-button">
|
| 433 |
<i data-feather="briefcase" class="w-5 h-5"></i>
|
| 434 |
View Projects
|
| 435 |
</a>
|
| 436 |
+
<a href="#contact" class="btn-secondary magnetic-button">
|
| 437 |
<i data-feather="mail" class="w-5 h-5"></i>
|
| 438 |
Get in Touch
|
| 439 |
</a>
|
| 440 |
</div>
|
| 441 |
+
<div class="terminal max-w-3xl mx-auto">
|
| 442 |
<div class="terminal-header">
|
| 443 |
<div class="terminal-dot bg-red-500"></div>
|
| 444 |
<div class="terminal-dot bg-yellow-500"></div>
|
|
|
|
| 720 |
<script>
|
| 721 |
// Initialize Feather Icons
|
| 722 |
feather.replace();
|
| 723 |
+
// Enhanced Custom Cursor
|
| 724 |
const cursor = document.querySelector('.custom-cursor');
|
| 725 |
+
const follower = document.querySelector('.cursor-follower');
|
| 726 |
|
| 727 |
document.addEventListener('mousemove', (e) => {
|
| 728 |
+
cursor.style.left = e.clientX - 10 + 'px';
|
| 729 |
+
cursor.style.top = e.clientY - 10 + 'px';
|
| 730 |
+
|
| 731 |
+
setTimeout(() => {
|
| 732 |
+
follower.style.left = e.clientX - 20 + 'px';
|
| 733 |
+
follower.style.top = e.clientY - 20 + 'px';
|
| 734 |
+
}, 100);
|
| 735 |
});
|
| 736 |
|
| 737 |
document.addEventListener('mousedown', () => {
|
| 738 |
+
cursor.style.transform = 'scale(0.6)';
|
| 739 |
+
follower.style.transform = 'scale(0.8)';
|
| 740 |
});
|
| 741 |
|
| 742 |
document.addEventListener('mouseup', () => {
|
| 743 |
cursor.style.transform = 'scale(1)';
|
| 744 |
+
follower.style.transform = 'scale(1)';
|
| 745 |
+
});
|
| 746 |
+
|
| 747 |
+
// Magnetic button effect
|
| 748 |
+
document.querySelectorAll('.magnetic-button').forEach(button => {
|
| 749 |
+
button.addEventListener('mousemove', (e) => {
|
| 750 |
+
const rect = button.getBoundingClientRect();
|
| 751 |
+
const x = e.clientX - rect.left - rect.width / 2;
|
| 752 |
+
const y = e.clientY - rect.top - rect.height / 2;
|
| 753 |
+
|
| 754 |
+
button.style.transform = `translate(${x * 0.3}px, ${y * 0.3}px) scale(1.05)`;
|
| 755 |
+
});
|
| 756 |
+
|
| 757 |
+
button.addEventListener('mouseleave', () => {
|
| 758 |
+
button.style.transform = 'translate(0, 0) scale(1)';
|
| 759 |
+
});
|
| 760 |
+
});
|
| 761 |
+
|
| 762 |
+
// Text reveal animation
|
| 763 |
+
const observerOptions = {
|
| 764 |
+
threshold: 0.1,
|
| 765 |
+
rootMargin: '0px 0px -50px 0px'
|
| 766 |
+
};
|
| 767 |
+
|
| 768 |
+
const textObserver = new IntersectionObserver((entries) => {
|
| 769 |
+
entries.forEach(entry => {
|
| 770 |
+
if (entry.isIntersecting) {
|
| 771 |
+
entry.target.classList.add('active');
|
| 772 |
+
}
|
| 773 |
+
});
|
| 774 |
+
}, observerOptions);
|
| 775 |
+
|
| 776 |
+
document.querySelectorAll('.text-reveal').forEach(el => {
|
| 777 |
+
textObserver.observe(el);
|
| 778 |
+
});
|
| 779 |
+
|
| 780 |
+
document.querySelectorAll('.stagger-animation').forEach(el => {
|
| 781 |
+
textObserver.observe(el);
|
| 782 |
+
});
|
| 783 |
+
|
| 784 |
+
// Parallax effect
|
| 785 |
+
window.addEventListener('scroll', () => {
|
| 786 |
+
const scrolled = window.pageYOffset;
|
| 787 |
+
const parallax = document.querySelector('.parallax-bg');
|
| 788 |
+
if (parallax) {
|
| 789 |
+
parallax.style.transform = `translateY(${scrolled * 0.5}px)`;
|
| 790 |
+
}
|
| 791 |
});
|
| 792 |
+
// Particles.js
|
| 793 |
particlesJS('particles-js', {
|
| 794 |
particles: {
|
| 795 |
number: {
|
|
|
|
| 857 |
}
|
| 858 |
});
|
| 859 |
});
|
| 860 |
+
// Enhanced scroll animations
|
| 861 |
+
const sections = document.querySelectorAll('section');
|
| 862 |
+
sections.forEach((section, index) => {
|
| 863 |
+
section.style.opacity = '0';
|
| 864 |
+
section.style.transform = 'translateY(50px)';
|
| 865 |
+
section.style.transition = `all 0.8s cubic-bezier(0.4, 0, 0.2, 1) ${index * 0.1}s`;
|
| 866 |
+
});
|
| 867 |
|
| 868 |
+
const sectionObserver = new IntersectionObserver((entries) => {
|
| 869 |
entries.forEach(entry => {
|
| 870 |
if (entry.isIntersecting) {
|
| 871 |
+
entry.target.style.opacity = '1';
|
| 872 |
+
entry.target.style.transform = 'translateY(0)';
|
| 873 |
}
|
| 874 |
});
|
| 875 |
+
}, { threshold: 0.1 });
|
| 876 |
|
| 877 |
+
sections.forEach(section => {
|
| 878 |
+
sectionObserver.observe(section);
|
| 879 |
});
|
| 880 |
// Terminal typing effect
|
| 881 |
const terminalLines = document.querySelectorAll('.terminal .text-green-400 p');
|
|
|
|
| 886 |
line.style.opacity = '1';
|
| 887 |
}, index * 1000);
|
| 888 |
});
|
| 889 |
+
// Mobile menu toggle with animation
|
| 890 |
function toggleMobileMenu() {
|
| 891 |
+
const mobileMenu = document.createElement('div');
|
| 892 |
+
mobileMenu.className = 'fixed inset-0 bg-black bg-opacity-90 z-50 flex items-center justify-center';
|
| 893 |
+
mobileMenu.innerHTML = `
|
| 894 |
+
<div class="text-center">
|
| 895 |
+
<button onclick="this.parentElement.parentElement.remove()" class="absolute top-6 right-6 text-white">
|
| 896 |
+
<i data-feather="x" class="w-8 h-8"></i>
|
| 897 |
+
</button>
|
| 898 |
+
<nav class="flex flex-col gap-6 text-2xl">
|
| 899 |
+
<a href="#home" onclick="toggleMobileMenu()" class="text-gray-300 hover:text-white transition-colors">Home</a>
|
| 900 |
+
<a href="#about" onclick="toggleMobileMenu()" class="text-gray-300 hover:text-white transition-colors">About</a>
|
| 901 |
+
<a href="#projects" onclick="toggleMobileMenu()" class="text-gray-300 hover:text-white transition-colors">Projects</a>
|
| 902 |
+
<a href="#skills" onclick="toggleMobileMenu()" class="text-gray-300 hover:text-white transition-colors">Skills</a>
|
| 903 |
+
<a href="#sponsor" onclick="toggleMobileMenu()" class="text-gray-300 hover:text-white transition-colors">Sponsor</a>
|
| 904 |
+
<a href="#contact" onclick="toggleMobileMenu()" class="text-gray-300 hover:text-white transition-colors">Contact</a>
|
| 905 |
+
</nav>
|
| 906 |
+
</div>
|
| 907 |
+
`;
|
| 908 |
+
document.body.appendChild(mobileMenu);
|
| 909 |
+
feather.replace();
|
| 910 |
}
|
| 911 |
+
</script>
|
| 912 |
</body>
|
| 913 |
</html>
|