A continuation of portfolio.html. The complete source identity, every recorded occurrence, and linked equations are on its first page.
Source transcript · continued
Download complete source text ↓1,547 lines · 52.4 KB
cardObserver.unobserve(entry.target);
}
});
}, { threshold: 0.1 });
cards.forEach(card => {
card.style.opacity = '0';
cardObserver.observe(card);
});
// Add animations
const style = document.createElement('style');
style.textContent = `
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(40px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeOut {
from { opacity: 1; transform: translateY(0); }
to { opacity: 0; transform: translateY(-20px); }
}
`;
document.head.appendChild(style);
// Parallax on scroll
window.addEventListener('scroll', () => {
const scrolled = window.pageYOffset;
particles.rotation.x = scrolled * 0.0002;
});
// Mobile menu toggle
const mobileMenuBtn = document.querySelector('.mobile-menu-btn');
const navLinks = document.querySelector('.nav-links');
mobileMenuBtn.addEventListener('click', () => {
navLinks.classList.toggle('active');
});
document.querySelectorAll('.nav-links a').forEach(link => {
link.addEventListener('click', () => {
navLinks.classList.remove('active');
});
});
</script>
</body>
</html>