// Add animation when social links appear document.addEventListener('DOMContentLoaded', () => { const socialLinks = document.querySelectorAll('.social-link'); const profileImage = document.querySelector('.profile-image img'); const container = document.querySelector('.container'); // Simple key sequences const sequences = { 'wow': { message: '🌈 WOW Effect Activated! 🌈', effect: () => { socialLinks.forEach(link => { link.style.transform = 'scale(1.1)'; setTimeout(() => { link.style.transform = 'scale(1)'; }, 500); }); } }, 'fun': { message: '🎨 Color Party! 🎨', effect: () => { document.body.style.animation = 'backgroundParty 3s'; setTimeout(() => { document.body.style.animation = ''; }, 3000); } }, 'spin': { message: '🌀 Spin Time! 🌀', effect: () => { socialLinks.forEach((link, i) => { setTimeout(() => { link.style.transition = 'transform 1s'; link.style.transform = 'rotate(360deg)'; setTimeout(() => { link.style.transform = 'none'; }, 1000); }, i * 100); }); } }, 'boom': { message: '💥 Boom Effect! 💥', effect: () => { for (let i = 0; i < 30; i++) { createConfetti(); } } }, 'code': { message: '🖥️ Enter The Matrix 🖥️', effect: () => { createMatrixEffect(); } } }; // Track typed keys let typedKeys = ''; let typingTimer; // Listen for key presses document.addEventListener('keypress', (e) => { typedKeys += e.key.toLowerCase(); // Check each sequence Object.entries(sequences).forEach(([sequence, { message, effect }]) => { if (typedKeys.includes(sequence)) { // Show message showMessage(message); // Run effect effect(); // Reset typed keys typedKeys = ''; } }); // Reset after 2 seconds of no typing clearTimeout(typingTimer); typingTimer = setTimeout(() => { typedKeys = ''; }, 2000); // Keep string at reasonable length if (typedKeys.length > 10) { typedKeys = typedKeys.slice(-10); } }); function showMessage(text) { const message = document.createElement('div'); message.textContent = text; message.style.cssText = ` position: fixed; top: 20px; left: 50%; transform: translateX(-50%); background: rgba(0, 0, 0, 0.8); color: white; padding: 15px 30px; border-radius: 30px; font-size: 18px; z-index: 1000; opacity: 0; transition: opacity 0.3s; `; document.body.appendChild(message); // Fade in setTimeout(() => { message.style.opacity = '1'; }, 10); // Remove after 2 seconds setTimeout(() => { message.style.opacity = '0'; setTimeout(() => message.remove(), 300); }, 2000); } // Konami Code Easter Egg const konamiCode = ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'b', 'a']; let konamiIndex = 0; let partyMode = false; document.addEventListener('keydown', (e) => { // Check if the pressed key matches the next key in the sequence if (e.key === konamiCode[konamiIndex]) { konamiIndex++; // If we've matched all keys, activate party mode if (konamiIndex === konamiCode.length) { activatePartyMode(); konamiIndex = 0; // Reset the index } } else { konamiIndex = 0; // Reset if wrong key is pressed // If the wrong key is the first key of the sequence, start over if (e.key === konamiCode[0]) { konamiIndex = 1; } } }); // Party Mode Easter Egg function activatePartyMode() { if (partyMode) return; partyMode = true; // Add party mode class to body document.body.classList.add('party-mode'); // Create and add party mode styles const partyStyle = document.createElement('style'); partyStyle.textContent = ` .party-mode { animation: backgroundParty 2s infinite !important; } .party-mode .container { animation: shake 0.5s infinite !important; } .party-mode .social-link { animation: rainbow 2s infinite !important; } @keyframes backgroundParty { 0% { background-color: #ff0000; } 20% { background-color: #00ff00; } 40% { background-color: #0000ff; } 60% { background-color: #ff00ff; } 80% { background-color: #ffff00; } 100% { background-color: #ff0000; } } @keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-5px); } 75% { transform: translateX(5px); } } @keyframes rainbow { 0% { background: #ff0000; } 20% { background: #00ff00; } 40% { background: #0000ff; } 60% { background: #ff00ff; } 80% { background: #ffff00; } 100% { background: #ff0000; } } `; document.head.appendChild(partyStyle); // Create confetti for (let i = 0; i < 100; i++) { createConfetti(); } // Show success message showMessage('🎉 KONAMI CODE ACTIVATED! 🎉'); // Reset after 10 seconds setTimeout(() => { document.body.classList.remove('party-mode'); partyMode = false; }, 10000); } // Profile Image Click Easter Egg let clickCount = 0; profileImage.addEventListener('click', () => { clickCount++; if (clickCount === 5) { profileImage.style.transform = 'rotate(360deg) scale(1.2)'; profileImage.style.transition = 'transform 1s ease'; setTimeout(() => { const sunglasses = document.createElement('div'); sunglasses.className = 'sunglasses'; sunglasses.innerHTML = '😎'; sunglasses.style.position = 'absolute'; sunglasses.style.top = '50%'; sunglasses.style.left = '50%'; sunglasses.style.transform = 'translate(-50%, -50%)'; sunglasses.style.fontSize = '40px'; sunglasses.style.opacity = '0'; sunglasses.style.transition = 'opacity 0.5s ease'; profileImage.appendChild(sunglasses); setTimeout(() => { sunglasses.style.opacity = '1'; }, 100); }, 1000); clickCount = 0; } }); // Create confetti particles function createConfetti() { const confetti = document.createElement('div'); confetti.className = 'confetti'; confetti.style.cssText = ` position: fixed; width: 10px; height: 10px; background: ${['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#ff00ff'][Math.floor(Math.random() * 5)]}; left: ${Math.random() * 100}vw; top: -10px; opacity: 1; transform: rotate(${Math.random() * 360}deg); animation: fall ${Math.random() * 3 + 2}s linear; `; document.body.appendChild(confetti); confetti.addEventListener('animationend', () => { confetti.remove(); }); } // Add confetti animation style const confettiStyle = document.createElement('style'); confettiStyle.textContent = ` @keyframes fall { to { transform: translateY(100vh) rotate(960deg); opacity: 0; } } `; document.head.appendChild(confettiStyle); // Add 3D tilt effect to profile image profileImage.parentElement.addEventListener('mousemove', (e) => { const rect = profileImage.parentElement.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; const centerX = rect.width / 2; const centerY = rect.height / 2; const angleX = (y - centerY) / 20; const angleY = (centerX - x) / 20; profileImage.parentElement.style.transform = `perspective(1000px) rotateX(${angleX}deg) rotateY(${angleY}deg)`; }); profileImage.parentElement.addEventListener('mouseleave', () => { profileImage.parentElement.style.transform = 'perspective(1000px) rotateX(0) rotateY(0)'; }); // Animate social links socialLinks.forEach((link, index) => { link.style.opacity = '0'; link.style.transform = 'translateY(20px)'; setTimeout(() => { link.style.transition = 'all 0.5s cubic-bezier(0.4, 0, 0.2, 1)'; link.style.opacity = '1'; link.style.transform = 'translateY(0)'; }, 100 * index); // Add hover effect link.addEventListener('mousemove', (e) => { const rect = link.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; const shine = `radial-gradient(circle at ${x}px ${y}px, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0) 50%)`; link.style.background = `${getComputedStyle(link).background}, ${shine}`; }); link.addEventListener('mouseleave', () => { link.style.background = ''; }); // Add click ripple effect link.addEventListener('click', function(e) { const ripple = document.createElement('div'); ripple.classList.add('ripple'); const rect = link.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; ripple.style.left = `${x}px`; ripple.style.top = `${y}px`; link.appendChild(ripple); setTimeout(() => { ripple.remove(); }, 1000); }); }); // Mobile Easter Eggs let lastTap = 0; document.querySelector('.profile-image').addEventListener('touchstart', (e) => { const now = new Date().getTime(); const timeSince = now - lastTap; if (timeSince < 300 && timeSince > 0) { // Double tap e.preventDefault(); const profileImage = e.target; profileImage.style.animation = 'bounce 0.5s ease'; setTimeout(() => profileImage.style.animation = '', 500); } lastTap = now; }); let touchStartY = 0; document.querySelector('.container').addEventListener('touchstart', (e) => { touchStartY = e.touches[0].clientY; }); document.querySelector('.container').addEventListener('touchend', (e) => { const touchEndY = e.changedTouches[0].clientY; const distance = touchEndY - touchStartY; if (Math.abs(distance) > 100) { // Long swipe if (distance < 0) { // Swipe up - spin effect document.querySelector('.profile-image').style.animation = 'spin 1s linear infinite'; setTimeout(() => document.querySelector('.profile-image').style.animation = '', 2000); } else { // Swipe down - rainbow effect document.querySelector('.container').style.animation = 'rainbow-bg 3s linear'; setTimeout(() => document.querySelector('.container').style.animation = '', 3000); } } }); // Add animations const style = document.createElement('style'); style.textContent = ` @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-20px); } } @keyframes rainbow-bg { 0% { background: linear-gradient(45deg, #ff0000, #ff8000); } 20% { background: linear-gradient(45deg, #ff8000, #ffff00); } 40% { background: linear-gradient(45deg, #ffff00, #00ff00); } 60% { background: linear-gradient(45deg, #00ff00, #0000ff); } 80% { background: linear-gradient(45deg, #0000ff, #ff00ff); } 100% { background: linear-gradient(45deg, #ff00ff, #ff0000); } } `; document.head.appendChild(style); // Matrix Effect function createMatrixEffect() { // Create container if it doesn't exist let matrixContainer = document.querySelector('.matrix-container'); if (!matrixContainer) { matrixContainer = document.createElement('div'); matrixContainer.className = 'matrix-container'; document.body.appendChild(matrixContainer); } // Show container matrixContainer.style.display = 'block'; // Matrix characters const matrixChars = '日ハミヒーウシナモニサワツオリアホテマケメエカキムユラセネスタヌヘ012345789:・.=*+-<>¦|╌リ'; // Create falling characters const createCharacter = () => { const character = document.createElement('div'); character.className = 'matrix-character'; character.style.left = Math.random() * 100 + 'vw'; character.style.animationDuration = (Math.random() * 2 + 1) + 's'; character.textContent = matrixChars[Math.floor(Math.random() * matrixChars.length)]; matrixContainer.appendChild(character); // Remove character after animation character.addEventListener('animationend', () => { character.remove(); }); }; // Create characters continuously const interval = setInterval(() => { for (let i = 0; i < 5; i++) { createCharacter(); } }, 100); // Stop after 5 seconds setTimeout(() => { clearInterval(interval); setTimeout(() => { matrixContainer.style.display = 'none'; matrixContainer.innerHTML = ''; }, 2000); }, 5000); } }); // Add ripple effect styles const rippleStyle = document.createElement('style'); rippleStyle.textContent = ` .social-link { position: relative; overflow: hidden; } .ripple { position: absolute; background: rgba(255, 255, 255, 0.3); border-radius: 50%; pointer-events: none; width: 100px; height: 100px; transform: translate(-50%, -50%) scale(0); animation: ripple 1s linear; } @keyframes ripple { to { transform: translate(-50%, -50%) scale(4); opacity: 0; } } `; document.head.appendChild(rippleStyle);