Search on this blog

Search on this blog

Ape Gang – $APEGANG – GO BANANAS OR GO HOME!
Ape Gang Text Logo

GO BANANAS OR GO HOME!

The WILDEST, FUNNIEST, MOST APE-MAZING token in the crypto jungle! $APEGANG is here to stay and play!

Ape Gang Mascot
🍌 $APEGANG MOONING! 🚀 GET YOUR DAILY DOSE OF POTASSIUM! 💎 DIAMOND HANDS GET MORE BANANAS! 🦍 APE TOGETHER STRONK! 🎉 PARTY IN THE JUNGLE! 🍌

WHY $APEGANG? IT’S APE-IC!

We’re building a whole banana republic of FUN and UTILITY!

🎓

Education Hub

Become a crypto genius, ape-style!

🚀

Token Boosters

Launch your token to the banana moon!

🖌️

Marketing Suite

Branding that makes other tokens jealous!

🎮

Awesome Games

Play, earn, and go APE! (Banana Clicker & Ape Runner!)

GET YOUR PAWS ON $APEGANG!

Wallet

1. GET WALLET

MetaMask/Trust Wallet!

ETH

2. GRAB ETH

Need ETH for swap!

Uniswap

3. GO TO UNISWAP

The jungle exchange!

APEGANG

4. SWAP $APEGANG

Enter CA & Swap!

TOKENOMICS – BANANA-NOMICS!

CA: 0xAPESAREAWESOMEANDFUNKY123…SOON

TOTAL SUPPLY

1 QUADRILLION $APEGANG (Enough for every ape!)

LIQUIDITY LOCKED

97% LP Locked & Key Thrown in Volcano! 🔥

MARKETING WALLET

2% For Galactic Ape Domination!

REWARDS & DEV

1% Airdrops + 1% For More Ape Tech!

BANANA CLICKER MANIA!

Bananas: 0 🍌

Bananas Per Second: 0

Click Banana

UPGRADE YOUR BANANA EMPIRE!

🖱️

Super Click Finger (+1)

Cost: 10 🍌

🐒

Auto-Clicker Monkey (+1 BPS)

Cost: 50 🍌

Owned: 0

🌳

Banana Farm (+10 BPS)

Cost: 500 🍌

Owned: 0

🌟

Golden Banana Boost (x2 BPS for 30s)

Cost: 1000 🍌

APE GANG MEME FACTORY!

SHILL TEXT BLAST-O-MATIC!

Craft Your Shill!

Your Shill Arsenal:

Click “Generate Shills” to see the magic!

APE RUNNER – BANANA DASH!

Loading Ape Runner…

JOIN THE APE TROOP!

Swing by our social jungle! Don’t be a lone wolf… err, ape!

Ape Gang Community
document.addEventListener(‘DOMContentLoaded’, () => { // — CONFIGURATIONS — const launchTargetDate = “2025-06-20T00:00:00”; const numFloatingBananas = 20; // How many bananas to float // — CUSTOM CURSOR (Banana) — const cursor = document.querySelector(‘.custom-cursor’); if (cursor && !isTouchDevice()) { // Only show custom cursor on non-touch devices document.addEventListener(‘mousemove’, e => { cursor.style.left = e.pageX + ‘px’; cursor.style.top = e.pageY – window.scrollY + ‘px’; // Account for scroll }); document.body.style.cursor = ‘none’; // Hide default system cursor } else if (cursor) { cursor.style.display = ‘none’; // Hide if touch device } function isTouchDevice() { return (‘ontouchstart’ in window) || navigator.maxTouchPoints > 0; } // — FLOATING BANANAS — const bananaContainer = document.querySelector(‘.floating-banana-container’); if (bananaContainer) { for (let i = 0; i < numFloatingBananas; i++) { const banana = document.createElement('div'); banana.classList.add('banana-floater'); banana.style.left = Math.random() * 100 + 'vw'; const duration = Math.random() * 8 + 7; // Random duration between 7-15 seconds banana.style.animationDuration = duration + 's'; banana.style.animationDelay = Math.random() * duration + 's'; // Stagger start times banana.style.setProperty('--sway', (Math.random() * 60 - 30) + 'px'); // Random sway banana.style.transform = `scale(${Math.random() * 0.5 + 0.5})`; // Random size bananaContainer.appendChild(banana); } } // --- PARALLAX BACKGROUNDS --- const parallaxElements = document.querySelectorAll('.parallax-bg'); parallaxElements.forEach(el => { const bgImage = el.dataset.bgImage; if (bgImage) { el.style.backgroundImage = `url(‘${bgImage}’)`; } }); // — MOBILE MENU — const mobileMenuToggle = document.querySelector(‘.mobile-menu-toggle’); const mobileNav = document.querySelector(‘.mobile-nav’); if (mobileMenuToggle && mobileNav) { mobileMenuToggle.addEventListener(‘click’, () => { mobileNav.classList.toggle(‘active’); mobileMenuToggle.innerHTML = mobileNav.classList.contains(‘active’) ? ‘‘ : ‘‘; }); mobileNav.querySelectorAll(‘a’).forEach(link => { link.addEventListener(‘click’, () => { if (mobileNav.classList.contains(‘active’)) { mobileNav.classList.remove(‘active’); mobileMenuToggle.innerHTML = ‘‘; } }); }); } // — LAUNCH COUNTDOWN TIMER — // (Uses same logic as before, ensure IDs match new HTML) const daysEl = document.getElementById(‘days’); const hoursEl = document.getElementById(‘hours’); const minutesEl = document.getElementById(‘minutes’); const secondsEl = document.getElementById(‘seconds’); const launchDateDisplayEl = document.getElementById(‘launchDateDisplay’); if (launchDateDisplayEl) { /* … (countdown logic unchanged from previous script) … */ } function countdown() { const launchDate = new Date(launchTargetDate); const currentDate = new Date(); const totalSeconds = (launchDate – currentDate) / 1000; if (totalSeconds <= 0) { if(daysEl) daysEl.innerHTML = '00'; if(hoursEl) hoursEl.innerHTML = '00'; if(minutesEl) minutesEl.innerHTML = '00'; if(secondsEl) secondsEl.innerHTML = '00'; const timerContainer = document.getElementById('launch-timer'); if (timerContainer) { const parentContainer = timerContainer.parentElement; if (parentContainer) { const launchedMessage = parentContainer.querySelector('.launch-date-text'); if(launchedMessage) launchedMessage.innerHTML = "APE GANG HAS LAUNCHED! 🚀“; } } if (typeof countdownInterval !== ‘undefined’) clearInterval(countdownInterval); return; } const days = Math.floor(totalSeconds / 3600 / 24); const hours = Math.floor(totalSeconds / 3600) % 24; const minutes = Math.floor(totalSeconds / 60) % 60; const seconds = Math.floor(totalSeconds) % 60; if(daysEl) daysEl.innerHTML = formatTime(days); if(hoursEl) hoursEl.innerHTML = formatTime(hours); if(minutesEl) minutesEl.innerHTML = formatTime(minutes); if(secondsEl) secondsEl.innerHTML = formatTime(seconds); } function formatTime(time) { return time < 10 ? `0${time}` : time; } if (daysEl) { // Check if timer elements exist if (launchDateDisplayEl) { const formattedLaunchDate = new Date(launchTargetDate).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); launchDateDisplayEl.textContent = formattedLaunchDate; } countdown(); var countdownInterval = setInterval(countdown, 1000); } // --- SCROLL ANIMATIONS --- const animatedElements = document.querySelectorAll('.animate-on-scroll'); const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add(‘is-visible’); observer.unobserve(entry.target); } }); }, { threshold: 0.1 }); animatedElements.forEach(el => observer.observe(el)); // — CONTRACT ADDRESS COPY — const copyCAButton = document.getElementById(‘copyCAButton’); const contractAddressEl = document.getElementById(‘contractAddress’); if (copyCAButton && contractAddressEl) { copyCAButton.addEventListener(‘click’, () => { navigator.clipboard.writeText(contractAddressEl.textContent.trim()) .then(() => { const originalText = copyCAButton.innerHTML; copyCAButton.innerHTML = ‘ Copied!’; setTimeout(() => { copyCAButton.innerHTML = originalText; }, 2000); }) .catch(err => console.error(‘Failed to copy: ‘, err)); }); } // — MEME MAKER STUB — const memeCanvas = document.getElementById(‘memeCanvas’); const memeCtx = memeCanvas ? memeCanvas.getContext(‘2d’) : null; const memeImageUpload = document.getElementById(‘memeImageUpload’); const memeTopText = document.getElementById(‘memeTopText’); const memeBottomText = document.getElementById(‘memeBottomText’); const generateMemeBtn = document.getElementById(‘generateMemeBtn’); const downloadMemeBtn = document.getElementById(‘downloadMemeBtn’); const memeFontColor = document.getElementById(‘memeFontColor’); const memeFontSize = document.getElementById(‘memeFontSize’); let currentMemeImage = null; function drawMeme() { if (!memeCtx || !memeCanvas) return; memeCtx.clearRect(0, 0, memeCanvas.width, memeCanvas.height); memeCtx.fillStyle = ‘#ddd’; // Default bg if no image memeCtx.fillRect(0, 0, memeCanvas.width, memeCanvas.height); if (currentMemeImage) { // Calculate aspect ratio to fit image within canvas const hRatio = memeCanvas.width / currentMemeImage.width; const vRatio = memeCanvas.height / currentMemeImage.height; const ratio = Math.min(hRatio, vRatio); const centerShift_x = (memeCanvas.width – currentMemeImage.width * ratio) / 2; const centerShift_y = (memeCanvas.height – currentMemeImage.height * ratio) / 2; memeCtx.drawImage(currentMemeImage, 0, 0, currentMemeImage.width, currentMemeImage.height, centerShift_x, centerShift_y, currentMemeImage.width * ratio, currentMemeImage.height * ratio); } memeCtx.fillStyle = memeFontColor ? memeFontColor.value : ‘#FFFFFF’; const fontSize = memeFontSize ? parseInt(memeFontSize.value) : 40; memeCtx.font = `bold ${fontSize}px ‘Luckiest Guy’, cursive`; memeCtx.textAlign = ‘center’; memeCtx.strokeStyle = ‘black’; memeCtx.lineWidth = Math.max(1, fontSize / 15); // Stroke width relative to font size // Top text const topText = memeTopText ? memeTopText.value.toUpperCase() : “”; memeCtx.strokeText(topText, memeCanvas.width / 2, fontSize * 1.2); memeCtx.fillText(topText, memeCanvas.width / 2, fontSize * 1.2); // Bottom text const bottomText = memeBottomText ? memeBottomText.value.toUpperCase() : “”; memeCtx.strokeText(bottomText, memeCanvas.width / 2, memeCanvas.height – (fontSize * 0.5)); memeCtx.fillText(bottomText, memeCanvas.width / 2, memeCanvas.height – (fontSize * 0.5)); if(downloadMemeBtn) downloadMemeBtn.style.display = ‘inline-block’; } if (memeImageUpload) { memeImageUpload.addEventListener(‘change’, (e) => { const reader = new FileReader(); reader.onload = (event) => { currentMemeImage = new Image(); currentMemeImage.onload = () => { drawMeme(); }; currentMemeImage.src = event.target.result; } if (e.target.files[0]) { reader.readAsDataURL(e.target.files[0]); } }); } if (generateMemeBtn) generateMemeBtn.addEventListener(‘click’, drawMeme); if (memeTopText) memeTopText.addEventListener(‘input’, drawMeme); if (memeBottomText) memeBottomText.addEventListener(‘input’, drawMeme); if (memeFontColor) memeFontColor.addEventListener(‘input’, drawMeme); if (memeFontSize) memeFontSize.addEventListener(‘input’, drawMeme); if (downloadMemeBtn) { downloadMemeBtn.addEventListener(‘click’, () => { if (!memeCanvas) return; const imageURL = memeCanvas.toDataURL(‘image/png’); const link = document.createElement(‘a’); link.href = imageURL; link.download = ‘apegang-meme.png’; document.body.appendChild(link); link.click(); document.body.removeChild(link); }); } if (memeCanvas) drawMeme(); // Initial draw // — APE RUNNER MINI-GAME STUB — const gameCanvas = document.getElementById(‘apeRunnerGame’); const gameCtx = gameCanvas ? gameCanvas.getContext(‘2d’) : null; const startGameBtn = document.getElementById(‘startGameBtn’); const restartGameBtn = document.getElementById(‘restartGameBtn’); const gameInstructionsEl = document.getElementById(‘gameInstructions’); const gameOverScreenEl = document.getElementById(‘gameOverScreen’); const finalScoreEl = document.getElementById(‘finalScore’); let gameLoop; let player, obstacles, score, gameActive; function initGame() { if (!gameCtx || !gameCanvas) return; player = { x: 50, y: gameCanvas.height – 60, width: 40, height: 50, dy: 0, onGround: true, jumpPower: 15, gravity: 0.8 }; obstacles = []; score = 0; gameActive = true; if(gameInstructionsEl) gameInstructionsEl.style.display = ‘none’; if(gameOverScreenEl) gameOverScreenEl.style.display = ‘none’; spawnObstacle(); gameLoop = requestAnimationFrame(updateGame); } function drawPlayer() { if (!gameCtx) return; gameCtx.fillStyle = ‘brown’; // Simple ape color gameCtx.fillRect(player.x, player.y, player.width, player.height); // Banana in hand (very simple) gameCtx.fillStyle = ‘yellow’; gameCtx.fillRect(player.x + player.width -10, player.y + 10, 10, 15); } function drawObstacles() { if (!gameCtx) return; obstacles.forEach(obs => { gameCtx.fillStyle = ‘red’; // FUD Monster color gameCtx.fillRect(obs.x, obs.y, obs.width, obs.height); }); } function drawScore() { if (!gameCtx) return; gameCtx.fillStyle = ‘black’; gameCtx.font = “24px ‘Luckiest Guy’, cursive”; gameCtx.textAlign = ‘left’; gameCtx.fillText(“Score: ” + score, 10, 30); } function spawnObstacle() { if (!gameCanvas) return; const height = Math.random() * 50 + 20; // Random height obstacles.push({ x: gameCanvas.width, y: gameCanvas.height – height, width: 30, height: height, speed: 3 + (score / 100) // Speed increases with score }); } let obstacleSpawnTimer = 0; function updateGame() { if (!gameActive || !gameCtx || !gameCanvas) return; gameCtx.clearRect(0, 0, gameCanvas.width, gameCanvas.height); // Player physics player.y += player.dy; player.dy += player.gravity; if (player.y + player.height >= gameCanvas.height) { player.y = gameCanvas.height – player.height; player.dy = 0; player.onGround = true; } // Obstacles obstacleSpawnTimer++; if (obstacleSpawnTimer > (120 – Math.min(score / 5, 60)) ) { // Spawn faster as score increases spawnObstacle(); obstacleSpawnTimer = 0; } obstacles.forEach((obs, index) => { obs.x -= obs.speed; if (obs.x + obs.width < 0) { // Off screen obstacles.splice(index, 1); score++; } // Collision if (player.x < obs.x + obs.width && player.x + player.width > obs.x && player.y < obs.y + obs.height && player.y + player.height > obs.y) { gameOver(); } }); drawPlayer(); drawObstacles(); drawScore(); if (gameActive) gameLoop = requestAnimationFrame(updateGame); } function playerJump() { if (player.onGround && gameActive) { player.dy = -player.jumpPower; player.onGround = false; } } function gameOver() { gameActive = false; cancelAnimationFrame(gameLoop); if(gameOverScreenEl) gameOverScreenEl.style.display = ‘block’; if(finalScoreEl) finalScoreEl.textContent = score; } if (startGameBtn) startGameBtn.addEventListener(‘click’, initGame); if (restartGameBtn) restartGameBtn.addEventListener(‘click’, initGame); document.addEventListener(‘keydown’, (e) => { if (e.code === ‘Space’) { if (!gameActive && gameOverScreenEl && gameOverScreenEl.style.display === ‘block’) { // If game over screen is shown, space can restart // initGame(); // Or rely on button click } else if (gameActive || (gameInstructionsEl && gameInstructionsEl.style.display !== ‘none’)) { // If game active, or on instructions screen, space can jump/start if (gameInstructionsEl && gameInstructionsEl.style.display !== ‘none’) initGame(); playerJump(); } } }); if (gameCanvas) { // Add touch to jump for mobile gameCanvas.addEventListener(‘touchstart’, (e) => { e.preventDefault(); // Prevent scrolling if (gameInstructionsEl && gameInstructionsEl.style.display !== ‘none’) initGame(); playerJump(); }); } // — FOOTER CURRENT YEAR — const currentYearEl = document.getElementById(‘currentYear’); if (currentYearEl) currentYearEl.textContent = new Date().getFullYear(); // — SMOOTH SCROLL FOR NAV LINKS (same as before) — document.querySelectorAll(‘header a[href^=”#”]’).forEach(anchor => { anchor.addEventListener(‘click’, function (e) { e.preventDefault(); const targetId = this.getAttribute(‘href’); const targetElement = document.querySelector(targetId); if (targetElement) { const headerOffset = document.querySelector(‘header’).offsetHeight || 80; const elementPosition = targetElement.getBoundingClientRect().top; const offsetPosition = elementPosition + window.pageYOffset – headerOffset; window.scrollTo({ top: offsetPosition, behavior: “smooth” }); } }); }); }); document.addEventListener(‘DOMContentLoaded’, () => { // — CONFIGURATIONS — const launchTargetDate = “2025-06-20T00:00:00”; const numFloatingBananas = 20; // How many bananas to float // — CUSTOM CURSOR (Banana) — const cursor = document.querySelector(‘.custom-cursor’); if (cursor && !isTouchDevice()) { // Only show custom cursor on non-touch devices document.addEventListener(‘mousemove’, e => { cursor.style.left = e.pageX + ‘px’; cursor.style.top = e.pageY – window.scrollY + ‘px’; // Account for scroll }); document.body.style.cursor = ‘none’; // Hide default system cursor } else if (cursor) { cursor.style.display = ‘none’; // Hide if touch device } function isTouchDevice() { return (‘ontouchstart’ in window) || navigator.maxTouchPoints > 0; } // — FLOATING BANANAS — const bananaContainer = document.querySelector(‘.floating-banana-container’); if (bananaContainer) { for (let i = 0; i < numFloatingBananas; i++) { const banana = document.createElement('div'); banana.classList.add('banana-floater'); banana.style.left = Math.random() * 100 + 'vw'; const duration = Math.random() * 8 + 7; // Random duration between 7-15 seconds banana.style.animationDuration = duration + 's'; banana.style.animationDelay = Math.random() * duration + 's'; // Stagger start times banana.style.setProperty('--sway', (Math.random() * 60 - 30) + 'px'); // Random sway banana.style.transform = `scale(${Math.random() * 0.5 + 0.5})`; // Random size bananaContainer.appendChild(banana); } } // --- PARALLAX BACKGROUNDS --- const parallaxElements = document.querySelectorAll('.parallax-bg'); parallaxElements.forEach(el => { const bgImage = el.dataset.bgImage; if (bgImage) { el.style.backgroundImage = `url(‘${bgImage}’)`; } }); // — MOBILE MENU — const mobileMenuToggle = document.querySelector(‘.mobile-menu-toggle’); const mobileNav = document.querySelector(‘.mobile-nav’); if (mobileMenuToggle && mobileNav) { mobileMenuToggle.addEventListener(‘click’, () => { mobileNav.classList.toggle(‘active’); mobileMenuToggle.innerHTML = mobileNav.classList.contains(‘active’) ? ‘‘ : ‘‘; }); mobileNav.querySelectorAll(‘a’).forEach(link => { link.addEventListener(‘click’, () => { if (mobileNav.classList.contains(‘active’)) { mobileNav.classList.remove(‘active’); mobileMenuToggle.innerHTML = ‘‘; } }); }); } // — LAUNCH COUNTDOWN TIMER — // (Uses same logic as before, ensure IDs match new HTML) const daysEl = document.getElementById(‘days’); const hoursEl = document.getElementById(‘hours’); const minutesEl = document.getElementById(‘minutes’); const secondsEl = document.getElementById(‘seconds’); const launchDateDisplayEl = document.getElementById(‘launchDateDisplay’); if (launchDateDisplayEl) { /* … (countdown logic unchanged from previous script) … */ } function countdown() { const launchDate = new Date(launchTargetDate); const currentDate = new Date(); const totalSeconds = (launchDate – currentDate) / 1000; if (totalSeconds <= 0) { if(daysEl) daysEl.innerHTML = '00'; if(hoursEl) hoursEl.innerHTML = '00'; if(minutesEl) minutesEl.innerHTML = '00'; if(secondsEl) secondsEl.innerHTML = '00'; const timerContainer = document.getElementById('launch-timer'); if (timerContainer) { const parentContainer = timerContainer.parentElement; if (parentContainer) { const launchedMessage = parentContainer.querySelector('.launch-date-text'); if(launchedMessage) launchedMessage.innerHTML = "APE GANG HAS LAUNCHED! 🚀“; } } if (typeof countdownInterval !== ‘undefined’) clearInterval(countdownInterval); return; } const days = Math.floor(totalSeconds / 3600 / 24); const hours = Math.floor(totalSeconds / 3600) % 24; const minutes = Math.floor(totalSeconds / 60) % 60; const seconds = Math.floor(totalSeconds) % 60; if(daysEl) daysEl.innerHTML = formatTime(days); if(hoursEl) hoursEl.innerHTML = formatTime(hours); if(minutesEl) minutesEl.innerHTML = formatTime(minutes); if(secondsEl) secondsEl.innerHTML = formatTime(seconds); } function formatTime(time) { return time < 10 ? `0${time}` : time; } if (daysEl) { // Check if timer elements exist if (launchDateDisplayEl) { const formattedLaunchDate = new Date(launchTargetDate).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); launchDateDisplayEl.textContent = formattedLaunchDate; } countdown(); var countdownInterval = setInterval(countdown, 1000); } // --- SCROLL ANIMATIONS --- const animatedElements = document.querySelectorAll('.animate-on-scroll'); const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add(‘is-visible’); observer.unobserve(entry.target); } }); }, { threshold: 0.1 }); animatedElements.forEach(el => observer.observe(el)); // — CONTRACT ADDRESS COPY — const copyCAButton = document.getElementById(‘copyCAButton’); const contractAddressEl = document.getElementById(‘contractAddress’); if (copyCAButton && contractAddressEl) { copyCAButton.addEventListener(‘click’, () => { navigator.clipboard.writeText(contractAddressEl.textContent.trim()) .then(() => { const originalText = copyCAButton.innerHTML; copyCAButton.innerHTML = ‘ Copied!’; setTimeout(() => { copyCAButton.innerHTML = originalText; }, 2000); }) .catch(err => console.error(‘Failed to copy: ‘, err)); }); } // — MEME MAKER STUB — const memeCanvas = document.getElementById(‘memeCanvas’); const memeCtx = memeCanvas ? memeCanvas.getContext(‘2d’) : null; const memeImageUpload = document.getElementById(‘memeImageUpload’); const memeTopText = document.getElementById(‘memeTopText’); const memeBottomText = document.getElementById(‘memeBottomText’); const generateMemeBtn = document.getElementById(‘generateMemeBtn’); const downloadMemeBtn = document.getElementById(‘downloadMemeBtn’); const memeFontColor = document.getElementById(‘memeFontColor’); const memeFontSize = document.getElementById(‘memeFontSize’); let currentMemeImage = null; function drawMeme() { if (!memeCtx || !memeCanvas) return; memeCtx.clearRect(0, 0, memeCanvas.width, memeCanvas.height); memeCtx.fillStyle = ‘#ddd’; // Default bg if no image memeCtx.fillRect(0, 0, memeCanvas.width, memeCanvas.height); if (currentMemeImage) { // Calculate aspect ratio to fit image within canvas const hRatio = memeCanvas.width / currentMemeImage.width; const vRatio = memeCanvas.height / currentMemeImage.height; const ratio = Math.min(hRatio, vRatio); const centerShift_x = (memeCanvas.width – currentMemeImage.width * ratio) / 2; const centerShift_y = (memeCanvas.height – currentMemeImage.height * ratio) / 2; memeCtx.drawImage(currentMemeImage, 0, 0, currentMemeImage.width, currentMemeImage.height, centerShift_x, centerShift_y, currentMemeImage.width * ratio, currentMemeImage.height * ratio); } memeCtx.fillStyle = memeFontColor ? memeFontColor.value : ‘#FFFFFF’; const fontSize = memeFontSize ? parseInt(memeFontSize.value) : 40; memeCtx.font = `bold ${fontSize}px ‘Luckiest Guy’, cursive`; memeCtx.textAlign = ‘center’; memeCtx.strokeStyle = ‘black’; memeCtx.lineWidth = Math.max(1, fontSize / 15); // Stroke width relative to font size // Top text const topText = memeTopText ? memeTopText.value.toUpperCase() : “”; memeCtx.strokeText(topText, memeCanvas.width / 2, fontSize * 1.2); memeCtx.fillText(topText, memeCanvas.width / 2, fontSize * 1.2); // Bottom text const bottomText = memeBottomText ? memeBottomText.value.toUpperCase() : “”; memeCtx.strokeText(bottomText, memeCanvas.width / 2, memeCanvas.height – (fontSize * 0.5)); memeCtx.fillText(bottomText, memeCanvas.width / 2, memeCanvas.height – (fontSize * 0.5)); if(downloadMemeBtn) downloadMemeBtn.style.display = ‘inline-block’; } if (memeImageUpload) { memeImageUpload.addEventListener(‘change’, (e) => { const reader = new FileReader(); reader.onload = (event) => { currentMemeImage = new Image(); currentMemeImage.onload = () => { drawMeme(); }; currentMemeImage.src = event.target.result; } if (e.target.files[0]) { reader.readAsDataURL(e.target.files[0]); } }); } if (generateMemeBtn) generateMemeBtn.addEventListener(‘click’, drawMeme); if (memeTopText) memeTopText.addEventListener(‘input’, drawMeme); if (memeBottomText) memeBottomText.addEventListener(‘input’, drawMeme); if (memeFontColor) memeFontColor.addEventListener(‘input’, drawMeme); if (memeFontSize) memeFontSize.addEventListener(‘input’, drawMeme); if (downloadMemeBtn) { downloadMemeBtn.addEventListener(‘click’, () => { if (!memeCanvas) return; const imageURL = memeCanvas.toDataURL(‘image/png’); const link = document.createElement(‘a’); link.href = imageURL; link.download = ‘apegang-meme.png’; document.body.appendChild(link); link.click(); document.body.removeChild(link); }); } if (memeCanvas) drawMeme(); // Initial draw // — APE RUNNER MINI-GAME STUB — const gameCanvas = document.getElementById(‘apeRunnerGame’); const gameCtx = gameCanvas ? gameCanvas.getContext(‘2d’) : null; const startGameBtn = document.getElementById(‘startGameBtn’); const restartGameBtn = document.getElementById(‘restartGameBtn’); const gameInstructionsEl = document.getElementById(‘gameInstructions’); const gameOverScreenEl = document.getElementById(‘gameOverScreen’); const finalScoreEl = document.getElementById(‘finalScore’); let gameLoop; let player, obstacles, score, gameActive; function initGame() { if (!gameCtx || !gameCanvas) return; player = { x: 50, y: gameCanvas.height – 60, width: 40, height: 50, dy: 0, onGround: true, jumpPower: 15, gravity: 0.8 }; obstacles = []; score = 0; gameActive = true; if(gameInstructionsEl) gameInstructionsEl.style.display = ‘none’; if(gameOverScreenEl) gameOverScreenEl.style.display = ‘none’; spawnObstacle(); gameLoop = requestAnimationFrame(updateGame); } function drawPlayer() { if (!gameCtx) return; gameCtx.fillStyle = ‘brown’; // Simple ape color gameCtx.fillRect(player.x, player.y, player.width, player.height); // Banana in hand (very simple) gameCtx.fillStyle = ‘yellow’; gameCtx.fillRect(player.x + player.width -10, player.y + 10, 10, 15); } function drawObstacles() { if (!gameCtx) return; obstacles.forEach(obs => { gameCtx.fillStyle = ‘red’; // FUD Monster color gameCtx.fillRect(obs.x, obs.y, obs.width, obs.height); }); } function drawScore() { if (!gameCtx) return; gameCtx.fillStyle = ‘black’; gameCtx.font = “24px ‘Luckiest Guy’, cursive”; gameCtx.textAlign = ‘left’; gameCtx.fillText(“Score: ” + score, 10, 30); } function spawnObstacle() { if (!gameCanvas) return; const height = Math.random() * 50 + 20; // Random height obstacles.push({ x: gameCanvas.width, y: gameCanvas.height – height, width: 30, height: height, speed: 3 + (score / 100) // Speed increases with score }); } let obstacleSpawnTimer = 0; function updateGame() { if (!gameActive || !gameCtx || !gameCanvas) return; gameCtx.clearRect(0, 0, gameCanvas.width, gameCanvas.height); // Player physics player.y += player.dy; player.dy += player.gravity; if (player.y + player.height >= gameCanvas.height) { player.y = gameCanvas.height – player.height; player.dy = 0; player.onGround = true; } // Obstacles obstacleSpawnTimer++; if (obstacleSpawnTimer > (120 – Math.min(score / 5, 60)) ) { // Spawn faster as score increases spawnObstacle(); obstacleSpawnTimer = 0; } obstacles.forEach((obs, index) => { obs.x -= obs.speed; if (obs.x + obs.width < 0) { // Off screen obstacles.splice(index, 1); score++; } // Collision if (player.x < obs.x + obs.width && player.x + player.width > obs.x && player.y < obs.y + obs.height && player.y + player.height > obs.y) { gameOver(); } }); drawPlayer(); drawObstacles(); drawScore(); if (gameActive) gameLoop = requestAnimationFrame(updateGame); } function playerJump() { if (player.onGround && gameActive) { player.dy = -player.jumpPower; player.onGround = false; } } function gameOver() { gameActive = false; cancelAnimationFrame(gameLoop); if(gameOverScreenEl) gameOverScreenEl.style.display = ‘block’; if(finalScoreEl) finalScoreEl.textContent = score; } if (startGameBtn) startGameBtn.addEventListener(‘click’, initGame); if (restartGameBtn) restartGameBtn.addEventListener(‘click’, initGame); document.addEventListener(‘keydown’, (e) => { if (e.code === ‘Space’) { if (!gameActive && gameOverScreenEl && gameOverScreenEl.style.display === ‘block’) { // If game over screen is shown, space can restart // initGame(); // Or rely on button click } else if (gameActive || (gameInstructionsEl && gameInstructionsEl.style.display !== ‘none’)) { // If game active, or on instructions screen, space can jump/start if (gameInstructionsEl && gameInstructionsEl.style.display !== ‘none’) initGame(); playerJump(); } } }); if (gameCanvas) { // Add touch to jump for mobile gameCanvas.addEventListener(‘touchstart’, (e) => { e.preventDefault(); // Prevent scrolling if (gameInstructionsEl && gameInstructionsEl.style.display !== ‘none’) initGame(); playerJump(); }); } // — FOOTER CURRENT YEAR — const currentYearEl = document.getElementById(‘currentYear’); if (currentYearEl) currentYearEl.textContent = new Date().getFullYear(); // — SMOOTH SCROLL FOR NAV LINKS (same as before) — document.querySelectorAll(‘header a[href^=”#”]’).forEach(anchor => { anchor.addEventListener(‘click’, function (e) { e.preventDefault(); const targetId = this.getAttribute(‘href’); const targetElement = document.querySelector(targetId); if (targetElement) { const headerOffset = document.querySelector(‘header’).offsetHeight || 80; const elementPosition = targetElement.getBoundingClientRect().top; const offsetPosition = elementPosition + window.pageYOffset – headerOffset; window.scrollTo({ top: offsetPosition, behavior: “smooth” }); } }); }); }); document.addEventListener(‘DOMContentLoaded’, () => { // … (Keep existing setup: launchTargetDate, numFloatingBananas, cursor, mobile menu, countdown, scroll animations, CA copy, footer year, smooth scroll) … const launchTargetDate = “2025-06-20T00:00:00”; const numFloatingBananas = 25; // — CUSTOM CURSOR — const cursor = document.querySelector(‘.custom-cursor’); // … (cursor logic from previous response) … if (cursor && !isTouchDevice()) { document.addEventListener(‘mousemove’, e => { cursor.style.left = e.pageX + ‘px’; cursor.style.top = e.pageY – window.scrollY + ‘px’; }); document.body.style.cursor = ‘none’; } else if (cursor) { cursor.style.display = ‘none’; } function isTouchDevice() { return (‘ontouchstart’ in window) || navigator.maxTouchPoints > 0; } // — FLOATING BANANAS (Enhanced) — const bananaContainer = document.querySelector(‘.floating-banana-container’); if (bananaContainer) { for (let i = 0; i < numFloatingBananas; i++) { const banana = document.createElement('div'); banana.classList.add('banana-floater'); banana.style.left = Math.random() * 100 + 'vw'; const duration = Math.random() * 10 + 8; // Random duration 8-18s banana.style.animationDuration = duration + 's'; banana.style.animationDelay = Math.random() * duration + 's'; banana.style.setProperty('--sway', (Math.random() * 80 - 40) + 'px'); banana.style.setProperty('--rotate1', (Math.random() * 360 - 180) + 'deg'); banana.style.setProperty('--rotate2', (Math.random() * 360 - 180) + 'deg'); banana.style.transform = `scale(${Math.random() * 0.6 + 0.4})`; // Random size 0.4 to 1.0 bananaContainer.appendChild(banana); } } // --- PARALLAX BACKGROUNDS --- // ... (parallax logic from previous response) ... const parallaxElements = document.querySelectorAll('.parallax-bg'); parallaxElements.forEach(el => { const bgImage = el.dataset.bgImage; if (bgImage) el.style.backgroundImage = `url(‘${bgImage}’)`; }); // — MOBILE MENU — // … (mobile menu logic from previous response) … const mobileMenuToggle = document.querySelector(‘.mobile-menu-toggle’); const mobileNav = document.querySelector(‘.mobile-nav’); if (mobileMenuToggle && mobileNav) { /* … */ } // — LAUNCH COUNTDOWN — // … (countdown logic, make sure IDs are correct e.g. `launchDateDisplay`) … const daysEl = document.getElementById(‘days’); // etc. if (daysEl) { /* … countdown() and formatTime() … */ } // — SCROLL ANIMATIONS — // … (observer logic from previous response) … const animatedElements = document.querySelectorAll(‘.animate-on-scroll’); const observer = new IntersectionObserver((entries) => { /* … */ }, { threshold: 0.1 }); animatedElements.forEach(el => observer.observe(el)); // — CONTRACT ADDRESS COPY (For main CA display) — const copyCAMainButton = document.getElementById(‘copyCAMainButton’); const contractAddressMainEl = document.getElementById(‘contractAddressMain’); if (copyCAMainButton && contractAddressMainEl) { copyCAMainButton.addEventListener(‘click’, () => { navigator.clipboard.writeText(contractAddressMainEl.textContent.trim()) .then(() => { const originalText = copyCAMainButton.innerHTML; copyCAMainButton.innerHTML = ‘‘; setTimeout(() => { copyCAMainButton.innerHTML = originalText; }, 1500); }) .catch(err => console.error(‘Failed to copy main CA: ‘, err)); }); } // — BANANA CLICKER GAME LOGIC — const bananaCountEl = document.getElementById(‘bananaCount’); const bananasPerSecondEl = document.getElementById(‘bananasPerSecond’); const clickableBanana = document.getElementById(‘clickableBanana’); const clickEffectContainer = document.getElementById(‘clickEffectContainer’); const upgradeClickPowerBtn = document.querySelector(‘#upgradeClickPower button’); const clickPowerValueEl = document.getElementById(‘clickPowerValue’); const clickPowerCostEl = document.getElementById(‘clickPowerCost’); const upgradeAutoMonkeyBtn = document.querySelector(‘#upgradeAutoMonkey button’); const autoMonkeyCostEl = document.getElementById(‘autoMonkeyCost’); const autoMonkeyOwnedEl = document.getElementById(‘autoMonkeyOwned’); const upgradeBananaFarmBtn = document.querySelector(‘#upgradeBananaFarm button’); const bananaFarmCostEl = document.getElementById(‘bananaFarmCost’); const bananaFarmOwnedEl = document.getElementById(‘bananaFarmOwned’); const buyGoldenBananaBoostBtn = document.getElementById(‘buyGoldenBananaBoost’); const goldenBananaCostEl = document.getElementById(‘goldenBananaCost’); let bananas = 0; let clickPower = 1; let bananasPerSecond = 0; let autoMonkeys = 0; let bananaFarms = 0; let clickPowerCost = 10; let autoMonkeyCost = 50; let bananaFarmCost = 500; let goldenBananaCost = 1000; let goldenBananaActive = false; let goldenBananaMultiplier = 1; // Becomes 2 when active function updateClickerDisplay() { if (bananaCountEl) bananaCountEl.textContent = Math.floor(bananas); if (bananasPerSecondEl) bananasPerSecondEl.textContent = (bananasPerSecond * goldenBananaMultiplier).toFixed(1); if (clickPowerValueEl) clickPowerValueEl.textContent = clickPower; if (clickPowerCostEl) clickPowerCostEl.textContent = clickPowerCost; if (autoMonkeyCostEl) autoMonkeyCostEl.textContent = autoMonkeyCost; if (autoMonkeyOwnedEl) autoMonkeyOwnedEl.textContent = autoMonkeys; if (bananaFarmCostEl) bananaFarmCostEl.textContent = bananaFarmCost; if (bananaFarmOwnedEl) bananaFarmOwnedEl.textContent = bananaFarms; if (goldenBananaCostEl) goldenBananaCostEl.textContent = goldenBananaCost; // Disable buttons if not affordable if (upgradeClickPowerBtn) upgradeClickPowerBtn.parentElement.classList.toggle(‘disabled’, bananas < clickPowerCost); if (upgradeAutoMonkeyBtn) upgradeAutoMonkeyBtn.parentElement.classList.toggle('disabled', bananas < autoMonkeyCost); if (upgradeBananaFarmBtn) upgradeBananaFarmBtn.parentElement.classList.toggle('disabled', bananas < bananaFarmCost); if (buyGoldenBananaBoostBtn) buyGoldenBananaBoostBtn.parentElement.classList.toggle('disabled', bananas < goldenBananaCost || goldenBananaActive); } if (clickableBanana) { clickableBanana.addEventListener('click', () => { bananas += clickPower * goldenBananaMultiplier; // sound_bananaClick.play(); // Sound cue // Click visual effect if (clickEffectContainer) { const effect = document.createElement(‘div’); effect.classList.add(‘click-effect’); effect.textContent = `+${clickPower * goldenBananaMultiplier}`; effect.style.left = (Math.random() * 50 + 25) + ‘%’; // Random horizontal position effect.style.top = (Math.random() * 20 + 40) + ‘%’; // Random vertical position clickEffectContainer.appendChild(effect); setTimeout(() => effect.remove(), 1000); } updateClickerDisplay(); }); } if (upgradeClickPowerBtn) { upgradeClickPowerBtn.addEventListener(‘click’, () => { if (bananas >= clickPowerCost) { bananas -= clickPowerCost; clickPower++; clickPowerCost = Math.ceil(clickPowerCost * 1.5); // sound_upgrade.play(); updateClickerDisplay(); } }); } if (upgradeAutoMonkeyBtn) { upgradeAutoMonkeyBtn.addEventListener(‘click’, () => { if (bananas >= autoMonkeyCost) { bananas -= autoMonkeyCost; autoMonkeys++; bananasPerSecond += 1; autoMonkeyCost = Math.ceil(autoMonkeyCost * 1.25); // sound_monkey.play(); updateClickerDisplay(); } }); } if (upgradeBananaFarmBtn) { upgradeBananaFarmBtn.addEventListener(‘click’, () => { if (bananas >= bananaFarmCost) { bananas -= bananaFarmCost; bananaFarms++; bananasPerSecond += 10; bananaFarmCost = Math.ceil(bananaFarmCost * 1.35); // sound_farm.play(); updateClickerDisplay(); } }); } if (buyGoldenBananaBoostBtn) { buyGoldenBananaBoostBtn.addEventListener(‘click’, () => { if (bananas >= goldenBananaCost && !goldenBananaActive) { bananas -= goldenBananaCost; goldenBananaActive = true; goldenBananaMultiplier = 2; // sound_powerup.play(); buyGoldenBananaBoostBtn.textContent = “ACTIVE!”; buyGoldenBananaBoostBtn.parentElement.classList.add(‘disabled’); // Visually disable while active setTimeout(() => { goldenBananaActive = false; goldenBananaMultiplier = 1; buyGoldenBananaBoostBtn.textContent = “Activate!”; // Re-check affordability for visual state buyGoldenBananaBoostBtn.parentElement.classList.toggle(‘disabled’, bananas < goldenBananaCost || goldenBananaActive); updateClickerDisplay(); }, 30000); // 30 seconds updateClickerDisplay(); } }); } // Passive banana generation setInterval(() => { bananas += (bananasPerSecond * goldenBananaMultiplier) / 10; // BPS divided by interval ticks (100ms) updateClickerDisplay(); }, 100); // Update 10 times per second for smoother display if (bananaCountEl) updateClickerDisplay(); // Initial display // — MEME MAKER (with Presets) — const memeCanvas = document.getElementById(‘memeCanvas’); const memeCtx = memeCanvas ? memeCanvas.getContext(‘2d’) : null; const memeImageUpload = document.getElementById(‘memeImageUpload’); const memeTopText = document.getElementById(‘memeTopText’); const memeBottomText = document.getElementById(‘memeBottomText’); const generateMemeBtn = document.getElementById(‘generateMemeBtn’); const downloadMemeBtn = document.getElementById(‘downloadMemeBtn’); const memeFontColor = document.getElementById(‘memeFontColor’); const memeFontSize = document.getElementById(‘memeFontSize’); const memePresetSelect = document.getElementById(‘memePresetSelect’); let currentMemeImage = null; const memePresets = { // Using placeholder image URLs drake: { url: ‘https://i.imgflip.com/2/30b1gx.jpg’, // Drake Hotline Bling top: ‘Old Thing’, bottom: ‘New Hotness’ }, distracted: { url: ‘https://i.imgflip.com/2/1ur9b0.jpg’, // Distracted Boyfriend top: ‘You’, bottom: ‘$APEGANG’, other: ‘Responsibilities’ // Need to handle ‘other’ if used }, brain: { url: ‘https://i.imgflip.com/2/1jwhww.jpg’, // Expanding Brain (multi-panel) top: ‘Small Brain: Other Coins’, bottom: ‘Galaxy Brain: $APEGANG’ }, ape: { // Custom for Ape Gang url: ‘https://bodegacrypto.com/wp-content/uploads/2025/05/mokey.png’, // Your hero monkey top: ‘$APEGANG TO THE MOON!’, bottom: ‘HODL STRONG APES!’ } }; function drawMeme() { /* … (drawMeme logic unchanged from previous script, but ensure it uses currentMemeImage) … */ if (!memeCtx || !memeCanvas) return; memeCtx.clearRect(0, 0, memeCanvas.width, memeCanvas.height); memeCtx.fillStyle = ‘#eee’; memeCtx.fillRect(0, 0, memeCanvas.width, memeCanvas.height); if (currentMemeImage) { const hRatio = memeCanvas.width / currentMemeImage.width; const vRatio = memeCanvas.height / currentMemeImage.height; const ratio = Math.min(hRatio, vRatio, 1); // Ensure image is not stretched beyond its original size if smaller than canvas const imgDrawWidth = currentMemeImage.width * ratio; const imgDrawHeight = currentMemeImage.height * ratio; const centerShift_x = (memeCanvas.width – imgDrawWidth) / 2; const centerShift_y = (memeCanvas.height – imgDrawHeight) / 2; memeCtx.drawImage(currentMemeImage, 0, 0, currentMemeImage.width, currentMameImage.height, centerShift_x, centerShift_y, imgDrawWidth, imgDrawHeight); } memeCtx.fillStyle = memeFontColor ? memeFontColor.value : ‘#FFFFFF’; const fontSize = memeFontSize ? parseInt(memeFontSize.value) : 40; memeCtx.font = `bold ${fontSize}px ‘Luckiest Guy’, cursive`; memeCtx.textAlign = ‘center’; memeCtx.strokeStyle = ‘black’; memeCtx.lineWidth = Math.max(2, fontSize / 12); const topTextVal = memeTopText ? memeTopText.value.toUpperCase() : “”; memeCtx.strokeText(topTextVal, memeCanvas.width / 2, fontSize * 1.2); memeCtx.fillText(topTextVal, memeCanvas.width / 2, fontSize * 1.2); const bottomTextVal = memeBottomText ? memeBottomText.value.toUpperCase() : “”; memeCtx.strokeText(bottomTextVal, memeCanvas.width / 2, memeCanvas.height – (fontSize * 0.5)); memeCtx.fillText(bottomTextVal, memeCanvas.width / 2, memeCanvas.height – (fontSize * 0.5)); if(downloadMemeBtn) downloadMemeBtn.style.display = ‘inline-block’; } if (memePresetSelect) { memePresetSelect.addEventListener(‘change’, (e) => { const selectedPresetKey = e.target.value; if (selectedPresetKey && memePresets[selectedPresetKey]) { const preset = memePresets[selectedPresetKey]; currentMemeImage = new Image(); currentMemeImage.crossOrigin = “anonymous”; // For Imgflip, etc. currentMemeImage.onload = () => { if (memeTopText) memeTopText.value = preset.top || “”; if (memeBottomText) memeBottomText.value = preset.bottom || “”; drawMeme(); }; currentMemeImage.onerror = () => { console.error(“Error loading preset image. CORS issue or invalid URL?”); // Draw a fallback or clear canvas memeCtx.clearRect(0,0,memeCanvas.width, memeCanvas.height); memeCtx.fillStyle = ‘#ccc’; memeCtx.fillRect(0,0,memeCanvas.width, memeCanvas.height); memeCtx.fillStyle = ‘red’; memeCtx.font = “20px Arial”; memeCtx.textAlign = ‘center’; memeCtx.fillText(“Error loading image.”, memeCanvas.width/2, memeCanvas.height/2); } currentMemeImage.src = preset.url; } else if (selectedPresetKey === “”) { // “– Select Preset –” currentMemeImage = null; if (memeTopText) memeTopText.value = “”; if (memeBottomText) memeBottomText.value = “”; drawMeme(); // Redraw with blank or default background } }); } // … (Rest of meme maker event listeners: imageUpload, generateMemeBtn, text inputs, downloadMemeBtn) … // (Ensure these are present from the previous script) if (memeImageUpload) { /* … */ } if (generateMemeBtn) generateMemeBtn.addEventListener(‘click’, drawMeme); if (memeTopText) memeTopText.addEventListener(‘input’, drawMeme); // etc. if (downloadMemeBtn) { /* … */ } if (memeCanvas) drawMeme(); // Initial draw // — SHILL TEXT GENERATOR — const shillTokenNameEl = document.getElementById(‘shillTokenName’); const shillFeature1El = document.getElementById(‘shillFeature1’); const shillFeature2El = document.getElementById(‘shillFeature2’); const shillCTAEl = document.getElementById(‘shillCTA’); const shillEmojiPackEl = document.getElementById(‘shillEmojiPack’); const generateShillBtn = document.getElementById(‘generateShillBtn’); const shillOutputAreaEl = document.getElementById(‘shillOutputArea’); const emojiPacks = { rockets: [“🚀”, “🌕”, “💎”, “✨”, “🌟”, “🛰️”], fire: [“🔥”, “💯”, “✔️”, “💥”, “⚡”, “🤯”], animals: [“🦍”, “🍌”, “🎉”, “🥳”, “🐅”, “🦁”, “🐒”], money: [“💰”, “💸”, “🤑”, “💲”, “💵”, “📈”] }; const shillTemplates = [ (token, f1, f2, cta, emojis) => `${emojis[0]} ${token} IS GOING PARABOLIC! ${emojis[1]} With ${f1} and ${f2}, this is a GUARANTEED MOONSHOT! ${emojis[2]} ${cta} ${emojis[3]}`, (token, f1, f2, cta, emojis) => `ATTENTION APES! ${emojis[4]} ${token} is the hidden gem you’ve been waiting for! Featuring ${f1} & don’t forget the ${f2}! ${emojis[5]} ${cta}! LFG! ${emojis[0]}`, (token, f1, f2, cta, emojis) => `HOLD ONTO YOUR BANANAS! ${emojis[1]} ${token} is about to EXPLODE! ${emojis[2]} ${f1} will blow your mind, and ${f2} is just the cherry on top! ${cta} ${emojis[3]}${emojis[4]}`, (token, f1, f2, cta, emojis) => `You SNOOZE you LOSE! ${emojis[5]} ${token} is the NEXT 1000X! ${emojis[0]} ${f1} + ${f2} = PURE GAINS! ${cta} #DYOR #ToTheMoon ${emojis[1]}`, (token, f1, f2, cta, emojis) => `GET IN ON ${token} NOW! ${emojis[2]} This isn’t just a coin, it’s a REVOLUTION! With ${f1} and the incredible ${f2}, we’re unstoppable! ${cta} ${emojis[3]}${emojis[0]}${emojis[4]}` ]; function getRandomSubset(arr, count) { const shuffled = […arr].sort(() => 0.5 – Math.random()); return shuffled.slice(0, count); } if (generateShillBtn) { generateShillBtn.addEventListener(‘click’, () => { const token = shillTokenNameEl.value || “$TOKEN”; const f1 = shillFeature1El.value || “amazing devs”; const f2 = shillFeature2El.value || “a strong community”; const cta = shillCTAEl.value || “Join the Telegram now!”; const selectedEmojiPack = emojiPacks[shillEmojiPackEl.value] || emojiPacks.rockets; if(shillOutputAreaEl) shillOutputAreaEl.innerHTML = “”; // Clear previous for (let i = 0; i < 3; i++) { // Generate 3 variations const template = shillTemplates[Math.floor(Math.random() * shillTemplates.length)]; const randomEmojis = getRandomSubset(selectedEmojiPack, 6); // Get 6 random emojis from the pack const shillText = template(token, f1, f2, cta, randomEmojis); const shillDiv = document.createElement('div'); shillDiv.classList.add('shill-message'); const p = document.createElement('p'); p.textContent = shillText; const copyBtn = document.createElement('button'); copyBtn.classList.add('copy-shill-btn'); copyBtn.innerHTML = '‘; copyBtn.title = “Copy to clipboard”; copyBtn.addEventListener(‘click’, () => { navigator.clipboard.writeText(shillText) .then(() => { const originalIcon = copyBtn.innerHTML; copyBtn.innerHTML = ‘‘; setTimeout(() => { copyBtn.innerHTML = originalIcon; }, 1500); }) .catch(err => console.error(‘Failed to copy shill: ‘, err)); }); shillDiv.appendChild(p); shillDiv.appendChild(copyBtn); if (shillOutputAreaEl) shillOutputAreaEl.appendChild(shillDiv); } // sound_shillGenerated.play(); }); } // — APE RUNNER GAME STUB — // … (Ape Runner logic unchanged from previous script, ensure IDs match if used) … const gameCanvas = document.getElementById(‘apeRunnerGame’); // etc. if (gameCanvas) { /* … initGame(), drawPlayer(), etc. … */ } // — FOOTER CURRENT YEAR — const currentYearEl = document.getElementById(‘currentYear’); if (currentYearEl) currentYearEl.textContent = new Date().getFullYear(); // — SMOOTH SCROLL — document.querySelectorAll(‘header a[href^=”#”]’).forEach(anchor => { /* … */ }); }); // End DOMContentLoaded /* Global Styles & Variables */ :root { –primary-yellow: #ffff00; –dark-gold: #b8860b; /* #DAA520 is another option for a brighter gold */ –black: #000000; –white: #ffffff; –dark-bg: #121212; /* Very dark gray for main background */ –card-bg: #1f1f1f; /* Slightly lighter for cards */ –text-light: #f0f0f0; –text-medium: #cccccc; –border-color: #333333; –comic-font: ‘Comic Neue’, cursive; –body-font: ‘Open Sans’, sans-serif; } * { margin: 0; padding: 0; box-sizing: border-box; scroll-behavior: smooth; } body { font-family: var(–body-font); background-color: var(–dark-bg); color: var(–text-light); line-height: 1.6; overflow-x: hidden; /* Prevent horizontal scroll */ cursor: none; /* Hide default cursor */ } .custom-cursor { position: fixed; left: 0; top: 0; width: 20px; height: 20px; border: 2px solid var(–primary-yellow); border-radius: 50%; pointer-events: none; transform: translate(-50%, -50%); transition: width 0.1s, height 0.1s, background-color 0.1s; z-index: 9999; } body:hover .custom-cursor { display: block; } /* Show only on hover */ a:hover ~ .custom-cursor, button:hover ~ .custom-cursor, input:hover ~ .custom-cursor { width: 30px; height: 30px; background-color: rgba(255, 255, 0, 0.3); } h1, h2, h3, h4 { font-family: var(–comic-font); color: var(–primary-yellow); margin-bottom: 1rem; line-height: 1.2; text-shadow: 1px 1px 2px rgb(255, 253, 253); } h1 { font-size: 3rem; } h2 { font-size: 2.5rem; text-align: center; margin-bottom: 2rem; } h3 { font-size: 1.8rem; } p { margin-bottom: 1rem; color: var(–text-medium); } a { color: var(–primary-yellow); text-decoration: none; } a:hover { text-decoration: underline; } img { max-width: 100%; height: auto; display: block; } section { padding: 60px 20px; } .container { max-width: 1200px; margin: 0 auto; padding: 0 20px; } /* Buttons */ .btn { display: inline-block; padding: 12px 25px; font-family: var(–comic-font); font-size: 1.1rem; font-weight: bold; text-transform: uppercase; border-radius: 50px; /* Fun, rounded buttons */ transition: all 0.3s ease; border: 2px solid transparent; cursor: pointer; } .btn-primary { background-color: var(–primary-yellow); color: var(–black); border-color: var(–primary-yellow); } .btn-primary:hover { background-color: var(–dark-gold); color: var(–black); border-color: var(–dark-gold); transform: translateY(-3px); box-shadow: 0 5px 10px rgba(255, 255, 0, 0.3); text-decoration: none; } .btn-secondary { background-color: transparent; color: var(–primary-yellow); border: 2px solid var(–primary-yellow); } .btn-secondary:hover { background-color: var(–primary-yellow); color: var(–black); transform: translateY(-3px); box-shadow: 0 5px 10px rgba(255, 255, 0, 0.2); text-decoration: none; } /* Header & Navigation */ header { background-color: rgba(18, 18, 18, 0.85); /* Slightly transparent dark */ backdrop-filter: blur(10px); padding: 1rem 0; position: fixed; width: 100%; top: 0; z-index: 1000; box-shadow: 0 2px 10px rgba(0,0,0,0.5); } nav { max-width: 1200px; margin: 0 auto; padding: 0 20px; display: flex; justify-content: space-between; align-items: center; } .logo-container { display: flex; align-items: center; } .nav-logo-img { height: 40px; /* Adjust as needed */ margin-right: 10px; } .nav-logo-text { font-family: var(–comic-font); font-size: 1.8rem; color: var(–primary-yellow); font-weight: bold; } nav ul { list-style: none; display: flex; } nav ul li { margin-left: 25px; } nav ul li a { font-family: var(–comic-font); font-size: 1rem; color: var(–white); padding: 5px 0; position: relative; } nav ul li a::after { content: ”; position: absolute; bottom: 0; left: 0; width: 0; height: 2px; background-color: var(–primary-yellow); transition: width 0.3s ease; } nav ul li a:hover::after { width: 100%; } nav ul li a:hover { text-decoration: none; color: var(–primary-yellow); } .mobile-menu-toggle { display: none; /* Hidden by default */ background: none; border: none; color: var(–primary-yellow); font-size: 1.8rem; cursor: pointer; } /* Hero Section */ .hero-section { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding-top: 80px; /* Account for fixed header */ background: var(–dark-bg) url(‘https://www.transparenttextures.com/patterns/dark-geometric.png’); /* Subtle pattern */ position: relative; overflow: hidden; } .hero-section::before { /* Optional overlay for text contrast */ content: ”; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.3); z-index: 0; } .hero-content { display: flex; align-items: center; justify-content: space-between; max-width: 1200px; margin: 0 auto; width: 100%; gap: 30px; position: relative; z-index: 1; } .hero-text-content { flex: 1.2; /* Give more space to text */ animation: slideInFromLeft 1s ease-out; } .hero-text-logo { max-width: 300px; /* Adjust as needed */ margin-bottom: 1.5rem; } .hero-text-content h1 { font-size: 3.5rem; margin-bottom: 0.5rem; color: var(–primary-yellow); } .hero-text-content .subtitle { font-family: var(–comic-font); font-size: 1.8rem; color: var(–white); margin-bottom: 1rem; } .hero-text-content p { font-size: 1.1rem; color: var(–text-light); margin-bottom: 2rem; } .hero-cta a { margin-right: 15px; margin-bottom: 10px; /* For mobile stacking */ } .hero-image-content { flex: 1; display: flex; justify-content: center; align-items: center; animation: fadeIn 1.5s ease-out; } .hero-mokey { max-width: 450px; width: 100%; filter: drop-shadow(0 0 20px rgba(255, 255, 0, 0.3)); } /* Marquee Section */ .marquee-section { background-color: var(–black); color: var(–primary-yellow); padding: 10px 0; overflow: hidden; white-space: nowrap; font-family: var(–comic-font); font-weight: bold; } .marquee span { display: inline-block; padding-left: 100%; animation: marquee-scroll 25s linear infinite; } @keyframes marquee-scroll { 0% { transform: translateX(0); } 100% { transform: translateX(-100%); } } /* Countdown Section */ .countdown-section { background-color: var(–card-bg); text-align: center; } .countdown-section h2 { color: var(–primary-yellow); } #launch-timer { display: flex; justify-content: center; gap: 20px; margin: 30px 0; } #launch-timer div { background: linear-gradient(to bottom, var(–primary-yellow), var(–dark-gold)); color: var(–black); padding: 20px; border-radius: 10px; min-width: 100px; box-shadow: 0 5px 15px rgba(0,0,0,0.3); } #launch-timer div span { display: block; font-size: 2.5rem; font-weight: bold; font-family: var(–comic-font); } #launchDateDisplay { font-weight: bold; color: var(–primary-yellow); } /* Utility Section */ .utility-section { background-color: var(–dark-bg); } .utility-section > p { text-align: center; max-width: 700px; margin-left: auto; margin-right: auto;} .utility-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 30px; margin-top: 2rem; } .utility-card { background: linear-gradient(145deg, var(–primary-yellow), var(–dark-gold)); color: var(–black); padding: 30px; border-radius: 15px; box-shadow: 0 8px 20px rgba(0,0,0,0.4); transition: transform 0.3s ease, box-shadow 0.3s ease; } .utility-card:hover { transform: translateY(-10px); box-shadow: 0 12px 25px rgba(255, 215, 0, 0.3); /* Gold glow */ } .utility-card h3 { color: var(–black); font-family: var(–comic-font); margin-bottom: 1rem; font-size: 1.6rem; } .utility-card p { color: #333; /* Darker text for readability on yellow */ font-size: 1rem; } .card-icon { font-size: 3rem; margin-bottom: 1rem; text-align: center; /* Or adjust as needed */ } /* Discount Banner Section */ .discount-banner-section { background: var(–black); /* Dark background for rainbow text to pop */ padding: 30px 20px; text-align: center; } .rainbow-text { font-size: 2.2rem; /* Make it prominent */ font-family: var(–comic-font); font-weight: bold; background: linear-gradient(to right, red, orange, yellow, green, blue, indigo, violet, red); /* Added red at end for smoother loop */ background-size: 200% auto; -webkit-background-clip: text; -webkit-text-fill-color: transparent; animation: rainbow-flow 4s linear infinite; } @keyframes rainbow-flow { to { background-position: -200% center; } } /* About Section */ .about-section { background-color: var(–card-bg); } .about-content { display: flex; align-items: center; gap: 40px; max-width: 1100px; margin: 0 auto; } .about-text { flex: 1.5; } .about-image { flex: 1; } .about-image img { border-radius: 15px; box-shadow: 0 0 25px rgba(255,255,0,0.2); } /* Tokenomics Section */ .tokenomics-content { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 40px; max-width: 1000px; margin: 0 auto; } .tokenomics-info { flex: 1; min-width: 300px; } .tokenomics-info .token-address { font-weight: bold; color: var(–primary-yellow); word-break: break-all; } .token-distribution { list-style: none; padding-left: 0; } .token-distribution li { margin-bottom: 0.5rem; padding-left: 20px; position: relative; } .token-distribution li::before { content: “🍌”; /* Banana bullet */ position: absolute; left: 0; top: 0; font-size: 0.9em; } .tokenomics-chart-placeholder { flex: 1; min-width: 300px; background-color: var(–card-bg); padding: 20px; border-radius: 10px; text-align: center; } .tokenomics-chart-placeholder h4 { color: var(–primary-yellow); margin-bottom: 15px; } .chart-visual { /* Simple CSS pie chart concept */ width: 150px; height: 150px; border-radius: 50%; background-image: conic-gradient( var(–color1, #FFD700) 0% var(–p1, 97%), var(–color2, #FFA500) var(–p1, 97%) var(–p2, 99%), /* 97 + 2 = 99 */ var(–color3, #FF8C00) var(–p2, 99%) var(–p3, 100%), /* 99 + 1 = 100 */ var(–color4, #FF6347) var(–p3, 100%) 100% /* Placeholder for the last 1%, ensure it adds to 100 if used for small % */ ); /* This CSS chart is very basic. For accurate representation, use SVG or a JS library */ margin: 20px auto; display: none; /* Hiding this basic one for now. Better to use an image or proper chart lib */ } .chart-note { font-size: 0.9em; color: var(–text-medium); margin-top: 10px;} /* Roadmap Section */ .roadmap-section { background-color: var(–card-bg); } .roadmap-list { list-style: none; position: relative; padding-left: 40px; /* Space for timeline line */ max-width: 800px; margin: 0 auto; } .roadmap-list::before { /* Timeline line */ content: ”; position: absolute; left: 10px; top: 0; bottom: 0; width: 4px; background: linear-gradient(to bottom, var(–primary-yellow), var(–dark-gold)); border-radius: 2px; } .roadmap-item { margin-bottom: 40px; padding-left: 30px; /* Space from timeline marker */ position: relative; } .roadmap-item::before { /* Timeline marker (circle) */ content: ”; position: absolute; left: -28px; /* (40px padding – (30px marker width / 2) – (4px line / 2) ) */ top: 0px; width: 20px; height: 20px; background-color: var(–primary-yellow); border: 3px solid var(–dark-bg); border-radius: 50%; z-index: 1; } .roadmap-phase { font-family: var(–comic-font); font-size: 1.5rem; color: var(–primary-yellow); margin-bottom: 0.5rem; } .roadmap-details p { margin-bottom: 0.3rem; font-size: 0.95rem; } .roadmap-details p::before { content: “✅”; /* Or use different emojis for different states */ margin-right: 8px; } /* Whitepaper Section */ .whitepaper-section { text-align: center; background: var(–dark-bg) url(‘https://www.transparenttextures.com/patterns/otis-redding.png’); } .whitepaper-section p { max-width: 600px; margin-left: auto; margin-right: auto; margin-bottom: 2rem; } /* Team Section */ .team-section { background-color: var(–card-bg); } .team-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 30px; max-width: 1000px; margin: 0 auto; } .team-member { background-color: var(–dark-bg); padding: 20px; border-radius: 10px; text-align: center; border: 1px solid var(–border-color); transition: transform 0.3s ease, box-shadow 0.3s ease; } .team-member:hover { transform: translateY(-5px); box-shadow: 0 0 15px var(–primary-yellow); } .team-member img { width: 120px; height: 120px; border-radius: 50%; margin: 0 auto 15px auto; border: 3px solid var(–primary-yellow); object-fit: cover; } .team-member h3 { color: var(–primary-yellow); font-size: 1.3rem; margin-bottom: 0.5rem; } .team-member p { font-size: 0.9rem; color: var(–text-medium); } /* FAQ Section */ .faq-list { max-width: 800px; margin: 0 auto; } .faq-list details { background-color: var(–card-bg); margin-bottom: 10px; border-radius: 8px; border: 1px solid var(–border-color); overflow: hidden; /* To make border-radius apply to summary */ } .faq-list summary { padding: 15px 20px; font-family: var(–comic-font); font-size: 1.2rem; font-weight: bold; color: var(–primary-yellow); cursor: pointer; list-style: none; /* Remove default marker */ position: relative; } .faq-list summary::-webkit-details-marker { display: none; } /* Chrome/Safari */ .faq-list summary::after { /* Custom marker */ content: ‘🍌’; /* Banana as expand icon */ position: absolute; right: 20px; top: 50%; transform: translateY(-50%) rotate(0deg); transition: transform 0.3s ease; } .faq-list details[open] summary::after { transform: translateY(-50%) rotate(90deg); } .faq-list details p { padding: 0 20px 15px 20px; color: var(–text-light); font-size: 1rem; } /* Calculator Section */ .calculator-section { background-color: var(–card-bg); } .calculator-form { max-width: 500px; margin: 0 auto; background-color: var(–dark-bg); padding: 30px; border-radius: 10px; box-shadow: 0 5px 15px rgba(0,0,0,0.3); } .calculator-form div { margin-bottom: 15px; } .calculator-form label { display: block; margin-bottom: 5px; color: var(–primary-yellow); font-family: var(–comic-font); } .calculator-form input[type=”number”] { width: 100%; padding: 10px; background-color: #333; border: 1px solid #555; color: var(–white); border-radius: 5px; font-size: 1rem; } #calculate-mc-btn { margin-top: 10px; width: 100%; } #market-cap-result { margin-top: 20px; font-size: 1.2rem; font-weight: bold; color: var(–primary-yellow); text-align: center; } #market-cap-result span { color: var(–white); } /* Meme Generator & Game Section (Placeholders) */ .meme-generator-section, .mini-game-section { text-align: center; } .meme-generator-concept, .game-concept { max-width: 800px; margin: 0 auto; background-color: var(–card-bg); padding: 30px; border-radius: 10px; } .meme-generator-concept ul, .game-description ul { text-align: left; list-style-position: inside; margin-bottom: 1rem; } .meme-generator-concept ul li, .game-description ul li { margin-bottom: 0.5rem; } .meme-generator-concept ul ul, .game-description ul ul { margin-left: 20px; margin-top: 0.5rem; } .meme-concept-img, .game-visual-placeholder img { margin-top: 20px; border-radius: 8px; border: 2px solid var(–primary-yellow); } .game-concept { display: flex; flex-wrap: wrap; gap: 30px; text-align: left; } .game-description { flex: 1.5; min-width: 300px; } .game-visual-placeholder { flex: 1; min-width: 280px; text-align: center; } .game-visual-placeholder p { font-size: 0.8em; color: var(–text-medium); } /* Community Section */ .community-section { background-color: var(–card-bg); text-align: center; } .community-section p { max-width: 600px; margin-left: auto; margin-right: auto; margin-bottom: 2rem; } .social-links { display: flex; justify-content: center; flex-wrap: wrap; gap: 20px; } .social-icon { font-size: 1.2rem; font-family: var(–comic-font); color: var(–black); background-color: var(–primary-yellow); padding: 10px 20px; border-radius: 50px; transition: all 0.3s ease; min-width: 150px; text-align: center; } .social-icon i { margin-right: 8px; } .social-icon:hover { background-color: var(–dark-gold); color: var(–black); transform: scale(1.1); text-decoration: none; } /* Footer */ footer { background-color: var(–black); color: var(–text-medium); text-align: center; padding: 30px 20px; font-size: 0.9rem; } footer p { margin-bottom: 0.5rem; } footer a { color: var(–primary-yellow); } .disclaimer { font-size: 0.8rem; color: #888; margin-top: 1rem; max-width: 700px; margin-left: auto; margin-right: auto; } /* Animation Classes */ .animate-on-scroll { opacity: 0; transform: translateY(30px); transition: opacity 0.6s ease-out, transform 0.6s ease-out; } .animate-on-scroll.is-visible { opacity: 1; transform: translateY(0); } @keyframes slideInFromLeft { 0% { transform: translateX(-100%); opacity: 0; } 100% { transform: translateX(0); opacity: 1; } } @keyframes fadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } /* Responsive Design */ @media (max-width: 992px) { .hero-content { flex-direction: column-reverse; /* Image on top on smaller screens */ text-align: center; } .hero-text-content { align-items: center; } .hero-text-logo { margin-left: auto; margin-right: auto; } .hero-cta { justify-content: center; } .hero-mokey { max-width: 350px; } .about-content { flex-direction: column; } .tokenomics-content { flex-direction: column; align-items: center; } .tokenomics-info, .tokenomics-chart-placeholder { width: 100%; max-width: 500px; } } @media (max-width: 768px) { h1 { font-size: 2.5rem; } h2 { font-size: 2rem; } nav ul { display: none; /* Hide desktop nav */ flex-direction: column; width: 100%; background-color: rgba(18, 18, 18, 0.98); position: absolute; top: 68px; /* Adjust based on header height */ left: 0; padding: 1rem 0; } nav ul.active { display: flex; } /* Show when active */ nav ul li { margin: 10px 0; text-align: center; } .mobile-menu-toggle { display: block; } .hero-text-content h1 { font-size: 2.8rem; } .hero-text-content .subtitle { font-size: 1.5rem; } .hero-mokey { max-width: 300px; } #launch-timer { flex-wrap: wrap; gap: 10px; } #launch-timer div { min-width: 80px; padding: 15px; } #launch-timer div span { font-size: 2rem; } .utility-grid { grid-template-columns: 1fr; } /* Stack cards */ .roadmap-list { padding-left: 20px; } .roadmap-item::before { left: -18px; } .team-grid { grid-template-columns: 1fr; } .calculator-form { padding: 20px; } .rainbow-text { font-size: 1.8rem; } } @media (max-width: 480px) { body { font-size: 15px; } h1 { font-size: 2.2rem; } .hero-text-content h1 { font-size: 2.2rem; } .hero-text-content .subtitle { font-size: 1.3rem; } .hero-text-content p { font-size: 1rem; } .btn { padding: 10px 20px; font-size: 1rem; } .hero-mokey { max-width: 250px; } #launch-timer div { min-width: 70px; padding: 10px; } #launch-timer div span { font-size: 1.5rem; } .social-icon { font-size: 1rem; padding: 8px 15px; min-width: 120px; } .rainbow-text { font-size: 1.5rem; } .custom-cursor { display: none !important; } /* Hide custom cursor on mobile */ body { cursor: auto; } } /* Global Styles & Variables */ :root { –primary-yellow: #FFDE00; /* Brighter Yellow */ –ape-black: #1c1c1c; –ape-white: #ffffff; –ape-stroke: #000000; –bg-cream: #fffef7; /* Off-white background */ –card-bg-light: #fffacd; /* Lemon chiffon for cards */ –funky-blue: #00A9E0; –funky-green: #98FB98; /* PaleGreen */ –luckiest-font: ‘Luckiest Guy’, cursive; –body-font: ‘Open Sans’, sans-serif; –border-thick: 4px solid var(–ape-stroke); –border-medium: 2px solid var(–ape-stroke); –border-radius-chunky: 15px; –border-radius-smooth: 8px; } * { margin: 0; padding: 0; box-sizing: border-box; scroll-behavior: smooth; } body { font-family: var(–body-font); background-color: var(–bg-cream); color: var(–ape-black); line-height: 1.6; overflow-x: hidden; cursor: none; /* Hide default cursor for custom one */ } .custom-cursor { /* Same as before, ensure it fits new aesthetic */ position: fixed; left: 0; top: 0; width: 25px; height: 25px; background-image: url(‘data:image/svg+xml;utf8,🍌‘); background-size: contain; pointer-events: none; transform: translate(-50%, -50%); transition: transform 0.1s; z-index: 9999; } body:hover .custom-cursor { display: block; } a:hover ~ .custom-cursor, button:hover ~ .custom-cursor { transform: translate(-50%, -50%) scale(1.3) rotate(15deg); } /* Headings with Stroke */ h1, h2, h3, h4, .chunky-text { font-family: var(–luckiest-font); color: var(–primary-yellow); -webkit-text-stroke: 2px var(–ape-stroke); text-stroke: 2px var(–ape-stroke); paint-order: stroke fill; line-height: 1.1; margin-bottom: 1rem; text-align: center; } h1 { font-size: clamp(2.8rem, 7vw, 5rem); } /* Responsive font size */ h2.section-title { font-size: clamp(2.2rem, 6vw, 4rem); margin-bottom: 2rem; padding: 10px 20px; display: inline-block; /* To contain background */ background-color: var(–ape-black); color: var(–primary-yellow); -webkit-text-stroke-color: var(–primary-yellow); /* Stroke matches text on dark bg */ text-stroke-color: var(–primary-yellow); border-radius: var(–border-radius-chunky); border: var(–border-thick); border-color: var(–primary-yellow); /* Yellow border on black bg */ box-shadow: 5px 5px 0px var(–ape-stroke); } h3 { font-size: clamp(1.8rem, 4vw, 2.5rem); } h4 { font-size: clamp(1.5rem, 3vw, 2rem); color: var(–ape-black); -webkit-text-stroke-width: 1.5px; text-stroke-width: 1.5px;} p { margin-bottom: 1rem; color: #333; } a { color: var(–funky-blue); text-decoration: none; font-weight: bold; } a:hover { color: var(–primary-yellow); text-decoration: underline; text-decoration-thickness: 2px; } img { max-width: 100%; height: auto; display: block; } section { padding: 60px 20px; text-align: center; } /* Buttons – Chunky Style */ .btn { font-family: var(–luckiest-font); font-size: clamp(1rem, 2.5vw, 1.4rem); padding: 12px 30px; border-radius: 50px; /* Very rounded, almost pill-shaped */ border: var(–border-medium); box-shadow: 3px 3px 0px var(–ape-stroke); transition: all 0.2s ease-in-out; display: inline-block; text-align: center; letter-spacing: 1px; } .btn:active { transform: translate(3px, 3px); box-shadow: none; } .btn-primary { background-color: var(–primary-yellow); color: var(–ape-stroke); } .btn-primary:hover { background-color: #ffd000; /* Slightly darker yellow */ } .btn-secondary { background-color: var(–funky-blue); color: var(–ape-white); -webkit-text-stroke: 1px var(–ape-stroke); /* White text needs black stroke on blue */ text-stroke: 1px var(–ape-stroke); } .btn-secondary:hover { background-color: #008bc5; /* Darker blue */ } /* Header & Navigation – Funky */ header { background-color: var(–primary-yellow); border-bottom: var(–border-thick); padding: 0.5rem 0; position: sticky; /* Sticky for fun! */ top: 0; z-index: 1000; box-shadow: 0 4px 0px var(–ape-stroke); } nav { max-width: 1200px; margin: 0 auto; padding: 0 20px; display: flex; justify-content: space-between; align-items: center; } .nav-logo-img { height: 50px; filter: drop-shadow(2px 2px 0 var(–ape-stroke)); } .nav-logo-text { /* Removed for image only */ } nav .desktop-nav { list-style: none; display: flex; } nav .desktop-nav li { margin-left: 20px; } nav .desktop-nav li a { font-family: var(–luckiest-font); font-size: 1.1rem; color: var(–ape-stroke); -webkit-text-stroke: 0; /* No stroke for nav links for clarity */ text-stroke: 0; padding: 5px 8px; border-radius: var(–border-radius-smooth); transition: background-color 0.2s, color 0.2s; } nav .desktop-nav li a:hover { background-color: var(–ape-stroke); color: var(–primary-yellow); text-decoration: none; } .social-header-icons a { font-size: 1.8rem; color: var(–ape-stroke); margin-left: 15px; transition: transform 0.2s; } .social-header-icons a:hover { transform: scale(1.2) rotate(10deg); } .mobile-menu-toggle { display: none; background: none; border: var(–border-medium); border-radius: var(–border-radius-smooth); color: var(–ape-stroke); font-size: 1.8rem; padding: 5px 10px; cursor: pointer; } .mobile-nav { /* Hidden by default */ display: none; list-style: none; background-color: var(–primary-yellow); border-top: var(–border-medium); padding: 10px 0; } .mobile-nav.active { display: block; } .mobile-nav li { text-align: center; margin: 10px 0; } .mobile-nav li a { font-family: var(–luckiest-font); font-size: 1.3rem; color: var(–ape-stroke); padding: 10px; } /* Hero Section – Funky */ .hero-section { min-height: 90vh; display: flex; align-items: center; justify-content: center; background-color: var(–funky-green); /* Fallback bg */ position: relative; border-bottom: var(–border-thick); overflow: hidden; /* For any stray mascot parts */ } .hero-content-wrapper { display: flex; align-items: center; justify-content: space-around; gap: 20px; max-width: 1200px; width: 100%; padding: 20px; position: relative; /* For z-index if needed */ } .hero-text-content { flex: 1.2; text-align: left; } .hero-text-logo-main { max-width: 350px; margin-bottom: 1.5rem; filter: drop-shadow(3px 3px 0 var(–ape-stroke));} .hero-text-content h1 { text-align: left; color: var(–ape-black); /* Black text on green bg */ -webkit-text-stroke-color: var(–primary-yellow); text-stroke-color: var(–primary-yellow); margin-bottom: 0.5rem; } .hero-text-content .subtitle { font-family: var(–luckiest-font); font-size: clamp(1.2rem, 3vw, 1.8rem); color: var(–ape-black); margin-bottom: 2rem; -webkit-text-stroke: 1px var(–bg-cream); text-stroke: 1px var(–bg-cream); line-height: 1.3; } .hero-cta a { margin-right: 15px; margin-bottom: 10px; } .hero-image-content { flex: 1; } .hero-mokey { max-width: 480px; width: 100%; filter: drop-shadow(5px 5px 0px var(–ape-stroke)); animation: bobbingMokey 3s ease-in-out infinite; } @keyframes bobbingMokey { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-20px); } } /* Parallax Background Utility */ .parallax-bg { background-attachment: fixed; background-position: center; background-repeat: repeat; /* Repeat for patterns */ background-size: auto; /* Or cover if it’s a single image */ } /* Marquee – Funky */ .marquee-section-funky { background-color: var(–ape-stroke); color: var(–primary-yellow); padding: 15px 0; overflow: hidden; white-space: nowrap; border-bottom: var(–border-thick); border-color: var(–primary-yellow); } .marquee-funky span { font-family: var(–luckiest-font); font-size: 1.8rem; display: inline-block; padding-left: 100%; animation: marquee-scroll-funky 20s linear infinite; letter-spacing: 2px; } @keyframes marquee-scroll-funky { 0% { transform: translateX(0); } 100% { transform: translateX(-150%); } /* Faster scroll out */ } /* Countdown – Funky */ .countdown-section-funky { background-color: var(–card-bg-light); border-bottom: var(–border-thick); } #launch-timer { display: flex; justify-content: center; flex-wrap: wrap; gap: 20px; margin: 30px 0; } #launch-timer div { background: var(–primary-yellow); color: var(–ape-stroke); padding: 20px; border-radius: var(–border-radius-chunky); border: var(–border-medium); min-width: 100px; box-shadow: 3px 3px 0px var(–ape-stroke); text-align: center; } #launch-timer div span { display: block; font-family: var(–luckiest-font); font-size: clamp(2rem, 5vw, 3rem); line-height: 1; } .launch-date-text { font-family: var(–luckiest-font); font-size: 1.2rem; color: var(–ape-stroke); } .launch-date-text span { color: var(–funky-blue); } /* Why ApeGang Section */ .why-apegang-section { background-color: var(–bg-cream); border-bottom: var(–border-thick);} .section-subtitle { font-family: var(–luckiest-font); font-size: clamp(1.1rem, 2.5vw, 1.5rem); color: var(–ape-black); margin: -1rem auto 2rem auto; max-width: 600px; } .why-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 30px; max-width: 1000px; margin: 0 auto; } .why-card { background-color: var(–primary-yellow); border: var(–border-medium); border-radius: var(–border-radius-chunky); padding: 25px; box-shadow: 4px 4px 0 var(–ape-stroke); transition: transform 0.2s, box-shadow 0.2s; } .why-card:hover { transform: translate(-4px, -4px); box-shadow: 8px 8px 0 var(–ape-stroke); } .card-icon-funky { font-size: 3rem; margin-bottom: 0.5rem; filter: drop-shadow(2px 2px 0px rgba(0,0,0,0.2));} .why-card h3 { color: var(–ape-stroke); text-align: center; margin-top: 0.5rem; -webkit-text-stroke-width: 1.5px; } .why-card p { color: var(–ape-black); text-align: center; font-size: 0.95rem; } /* Discount Banner – Funky */ .discount-banner-section-funky { background: var(–ape-stroke); padding: 30px 20px; border-bottom: var(–border-thick); border-color: var(–primary-yellow); } .rainbow-text-funky { font-size: clamp(1.8rem, 5vw, 3rem); font-weight: bold; background: linear-gradient(to right, red, orange, yellow, green, var(–funky-blue), indigo, violet, red); background-size: 200% auto; -webkit-background-clip: text; -webkit-text-fill-color: transparent; animation: rainbow-flow 4s linear infinite; -webkit-text-stroke: 0; /* No stroke on rainbow for better effect */ text-stroke: 0; } /* Keyframes rainbow-flow already defined in previous CSS, can be reused */ /* How to Buy Section */ .how-to-buy-section { background-color: var(–funky-green); border-bottom: var(–border-thick); } /* Fallback bg */ .how-to-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 25px; max-width: 1000px; margin: 2rem auto 0 auto; } .how-to-step { background-color: var(–card-bg-light); border: var(–border-medium); border-radius: var(–border-radius-chunky); padding: 20px; box-shadow: 3px 3px 0 var(–ape-stroke); } .how-to-icon { width: 60px; height: 60px; margin: 0 auto 15px auto; object-fit: contain; } .how-to-step h4 { margin-bottom: 0.5rem; } .how-to-step p { font-size: 0.9rem; } /* Tokenomics – Funky */ .tokenomics-section-funky { background-color: var(–bg-cream); border-bottom: var(–border-thick); } .ca-box { background-color: var(–ape-black); color: var(–primary-yellow); padding: 15px 25px; border-radius: var(–border-radius-chunky); border: var(–border-medium); border-color: var(–primary-yellow); font-family: var(–luckiest-font); font-size: clamp(1rem, 2.5vw, 1.4rem); display: inline-flex; /* Use flex for better alignment */ align-items: center; gap: 10px; margin: 0 auto 2rem auto; box-shadow: 3px 3px 0px var(–primary-yellow); word-break: break-all; /* Allow address to wrap */ } .ca-box span:first-child { font-weight: bold; } #copyCAButton { background: var(–primary-yellow); color: var(–ape-stroke); border: none; border-radius: var(–border-radius-smooth); padding: 8px 10px; font-size: 1.1rem; cursor: pointer; transition: background-color 0.2s; } #copyCAButton:hover { background-color: #ffd000; } .tokenomics-overview-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 25px; max-width: 1100px; margin: 0 auto 2rem auto; } .tokenomics-card { /* Reusing .why-card styles could be an option too */ background-color: var(–funky-green); border: var(–border-medium); border-radius: var(–border-radius-chunky); padding: 20px; box-shadow: 3px 3px 0 var(–ape-stroke); } .tokenomics-card h4 { color: var(–ape-black); margin-bottom: 0.5rem; } .tokenomics-card p { font-size: 1rem; color: var(–ape-black); } .tokenomics-chart-image-container { margin-top: 2rem; } .funky-chart-img { max-width: 400px; border-radius: var(–border-radius-chunky); border: var(–border-thick); box-shadow: 5px 5px 0 var(–ape-stroke); margin: 0 auto 1rem auto; } .tokenomics-chart-image-container p { font-style: italic; font-size: 0.9rem; } /* Roadmap – Funky */ .roadmap-section-funky { background-color: var(–card-bg-light); border-bottom: var(–border-thick); } /* Fallback bg */ .roadmap-funky-container { display: flex; flex-wrap: wrap; justify-content: center; gap: 30px; max-width: 1200px; margin: 0 auto; } .roadmap-phase-funky { background-color: var(–primary-yellow); border: var(–border-medium); border-radius: var(–border-radius-chunky); padding: 25px; box-shadow: 4px 4px 0 var(–ape-stroke); flex: 1; /* Allows them to grow */ min-width: 280px; /* Minimum width before wrapping */ max-width: 400px; /* Maximum width */ text-align: left; } .phase-icon { font-size: 2.5rem; float: left; margin-right: 15px; line-height: 1; } .roadmap-phase-funky h3 { color: var(–ape-stroke); text-align: left; -webkit-text-stroke-width: 1.5px; margin-bottom: 1rem;} .roadmap-phase-funky ul { list-style: none; padding-left: 0; } .roadmap-phase-funky li { margin-bottom: 0.5rem; font-size: 1rem; color: var(–ape-black); display: flex; /* Align checkmark and text */ align-items: flex-start; } .roadmap-phase-funky .check-mark { font-family: sans-serif; /* For better checkmark rendering */ margin-right: 8px; color: green; font-weight: bold; } /* Meme Maker & Game Sections – Basic Layout */ .meme-maker-section, .mini-game-section-funky { background-color: var(–bg-cream); /* Fallback */ border-bottom: var(–border-thick); } .meme-maker-container, .game-container-funky { background-color: var(–card-bg-light); border: var(–border-thick); border-radius: var(–border-radius-chunky); padding: 30px; max-width: 800px; margin: 0 auto; box-shadow: 5px 5px 0 var(–ape-stroke); } /* Meme Maker Specifics */ .meme-maker-container { display: flex; flex-wrap: wrap; gap: 20px; } .meme-canvas-area { flex: 1.5; min-width: 300px; } #memeCanvas { width: 100%; height: auto; max-height: 400px; /* Limit height */ border: var(–border-medium); background-color: #eee; border-radius: var(–border-radius-smooth); } .meme-controls { flex: 1; min-width: 250px; text-align: left;} .meme-controls label { display: block; margin: 10px 0 5px 0; font-family: var(–luckiest-font); color: var(–ape-black); font-size: 1.1rem; } .meme-controls input[type=”text”], .meme-controls input[type=”file”], .meme-controls input[type=”color”] { width: 100%; padding: 8px; border-radius: var(–border-radius-smooth); border: var(–border-medium); margin-bottom: 10px; font-size: 1rem; } .meme-controls input[type=”range”] { width: 100%; } .meme-controls button, .meme-controls a.btn { width: 100%; margin-top: 10px; } /* Game Specifics */ #apeRunnerGame { width: 100%; height: auto; max-height: 400px; border: var(–border-thick); background-color: var(–funky-blue); /* Jungle sky */ border-radius: var(–border-radius-smooth); display: block; margin: 0 auto 1rem auto; } #gameInstructions, #gameOverScreen { text-align: center; font-family: var(–luckiest-font); color: var(–ape-black); } #gameInstructions p, #gameOverScreen p { font-size: 1.2rem; margin-bottom: 1rem; } #gameOverScreen h3 { color: red; -webkit-text-stroke-color: var(–ape-stroke); text-stroke-color: var(–ape-stroke); } /* Community Section – Funky */ .community-section-funky { background-color: var(–funky-green); border-bottom: var(–border-thick); } .social-links-funky { display: flex; justify-content: center; flex-wrap: wrap; gap: 20px; margin-bottom: 2rem; } .social-btn { /* Re-use .btn styles and add specifics */ min-width: 200px; } .social-btn i { margin-right: 10px; } .telegram-btn { background-color: #0088cc; color: white; -webkit-text-stroke: 1px var(–ape-stroke); text-stroke: 1px var(–ape-stroke); } .telegram-btn:hover { background-color: #0077b3; } .twitter-btn { background-color: #1DA1F2; color: white; -webkit-text-stroke: 1px var(–ape-stroke); text-stroke: 1px var(–ape-stroke); } .twitter-btn:hover { background-color: #1a91da; } .discord-btn { background-color: #7289DA; color: white; -webkit-text-stroke: 1px var(–ape-stroke); text-stroke: 1px var(–ape-stroke); } .discord-btn:hover { background-color: #6273c4; } .community-image { max-width: 500px; border-radius: var(–border-radius-chunky); border: var(–border-thick); box-shadow: 5px 5px 0 var(–ape-stroke); margin: 2rem auto 0 auto; } /* Footer – Funky */ .footer-funky { background-color: var(–primary-yellow); color: var(–ape-stroke); text-align: center; padding: 30px 20px; border-top: var(–border-thick); font-family: var(–body-font); } .footer-logo { height: 60px; margin: 0 auto 1rem auto; filter: drop-shadow(2px 2px 0px var(–ape-stroke)); } .footer-tagline { font-family: var(–luckiest-font); font-size: 1.5rem; margin-bottom: 1rem; -webkit-text-stroke: 1px var(–ape-stroke); text-stroke: 1px var(–ape-stroke); color: var(–ape-stroke); /* Or another color */ } .footer-funky p { margin-bottom: 0.5rem; font-size: 0.9rem; } .footer-funky a { color: var(–ape-stroke); font-weight: bold; } .footer-funky a:hover { color: var(–funky-blue); } .footer-funky .disclaimer { font-size: 0.8rem; color: #555; margin-top: 1rem; } /* Floating Bananas Container */ .floating-banana-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; overflow: hidden; z-index: -1; /* Behind most content but above body bg */ } .banana-floater { position: absolute; bottom: -60px; /* Start off-screen */ width: 40px; height: 40px; background-image: url(‘data:image/svg+xml;utf8,🍌‘); /* Banana emoji */ background-size: contain; background-repeat: no-repeat; animation: floatUpwards linear infinite; opacity: 0; /* Start invisible, JS will make it appear with delay */ } @keyframes floatUpwards { 0% { transform: translateY(0) translateX(0) rotate(0deg); opacity: 0.8; } 50% { /* Add some horizontal sway */ transform: translateY(-50vh) translateX(var(–sway, 20px)) rotate(180deg); opacity: 0.6; } 99% { opacity: 0.1; } 100% { transform: translateY(-100vh) translateX(calc(var(–sway, 20px) * -1)) rotate(360deg); opacity: 0; } } /* Animation Classes (Can reuse existing .animate-on-scroll) */ .animate-on-scroll { opacity: 0; transform: translateY(50px) scale(0.95); transition: opacity 0.6s ease-out, transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275); /* Funky ease */ } .animate-on-scroll.is-visible { opacity: 1; transform: translateY(0) scale(1); } /* Responsive Design */ @media (max-width: 992px) { .hero-content-wrapper { flex-direction: column-reverse; text-align: center; } .hero-text-content { text-align: center; } .hero-text-content h1 { text-align: center; } .hero-text-logo-main { margin-left: auto; margin-right: auto; } .hero-mokey { max-width: 350px; } } @media (max-width: 768px) { nav .desktop-nav, .social-header-icons { display: none; } .mobile-menu-toggle { display: block; } .hero-mokey { max-width: 300px; } #launch-timer div { min-width: 80px; padding: 15px; } .how-to-grid { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } .tokenomics-overview-grid { grid-template-columns: 1fr; } .roadmap-funky-container { flex-direction: column; align-items: center; } .roadmap-phase-funky { min-width: 90%; } .meme-maker-container { flex-direction: column; } .ca-box { flex-direction: column; text-align: center; font-size: 1rem;} .ca-box #contractAddress { font-size: 0.8rem; } } @media (max-width: 480px) { body { cursor: auto; } /* No custom cursor on small screens */ .custom-cursor { display: none !important; } .hero-mokey { max-width: 250px; } #launch-timer div { min-width: calc(50% – 10px); } /* Two per row */ #launch-timer div span { font-size: 1.8rem; } .btn { padding: 10px 20px; } .social-btn { min-width: 150px; } } /* … (Keep all previous styles from the “Bulldog-inspired” version) … */ /* Hero Background – Banana Pattern */ .hero-bg-banana-pattern { position: relative; /* Needed for pseudo-element */ background-color: var(–funky-green); /* Fallback */ } .hero-bg-banana-pattern::before { content: “”; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: repeating-linear-gradient( 45deg, transparent, transparent 15px, rgba(255, 222, 0, 0.1) 15px, /* Semi-transparent banana yellow */ rgba(255, 222, 0, 0.1) 30px ), repeating-linear-gradient( -45deg, transparent, transparent 15px, rgba(255, 222, 0, 0.1) 15px, rgba(255, 222, 0, 0.1) 30px ); /* Or use an actual SVG/PNG repeating pattern for banana emojis */ /* background-image: url(‘path/to/your/banana-emoji-pattern.svg’); */ /* background-size: 100px 100px; */ /* Adjust size */ /* background-repeat: repeat; */ opacity: 0.3; /* Make it subtle */ z-index: 0; /* Behind hero content */ } .hero-content-wrapper { /* Ensure hero content is above the pattern */ position: relative; z-index: 1; } .bounce-text { /* For Hero H1 */ animation: textBounce 0.8s ease-out; } @keyframes textBounce { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } } .btn-bounce:hover { animation: btnBounceEffect 0.5s ease-in-out; } @keyframes btnBounceEffect { 0%, 100% { transform: translateY(0) scale(1); } 50% { transform: translateY(-5px) scale(1.05); } } /* Banana Clicker Game Styles */ .banana-clicker-section { background-color: var(–card-bg-light); border-bottom: var(–border-thick); } .clicker-game-area { background-color: var(–funky-green); border: var(–border-thick); border-radius: var(–border-radius-chunky); padding: 20px; max-width: 900px; margin: 0 auto; box-shadow: 5px 5px 0 var(–ape-stroke); display: flex; flex-direction: column; align-items: center; gap: 20px; } .clicker-stats p { font-size: clamp(1.2rem, 3vw, 1.8rem); margin-bottom: 0.5rem; color: var(–ape-stroke); } .clicker-stats p.chunky-text { font-size: clamp(1.5rem, 4vw, 2.2rem); -webkit-text-stroke-color: var(–primary-yellow); text-stroke-color: var(–primary-yellow); color: var(–ape-black); } .clicker-main { position: relative; /* For click effects */ } .clickable-banana { width: clamp(150px, 30vw, 250px); cursor: pointer; filter: drop-shadow(5px 5px 0px rgba(0,0,0,0.3)); transition: transform 0.1s ease-out; } .clickable-banana:active { transform: scale(0.95) rotate(-5deg); } #clickEffectContainer { position: absolute; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; /* Clicks pass through */ } .click-effect { /* Little +1 banana animation */ position: absolute; font-family: var(–luckiest-font); font-size: 1.5rem; color: var(–primary-yellow); -webkit-text-stroke: 1px var(–ape-stroke); text-stroke: 1px var(–ape-stroke); animation: floatUpAndFade 1s ease-out forwards; user-select: none; } @keyframes floatUpAndFade { to { transform: translateY(-50px); opacity: 0; } } .clicker-shop { width: 100%; max-width: 600px; margin-top: 20px; border-top: var(–border-medium); padding-top: 20px; } .shop-item { background-color: var(–primary-yellow); border: var(–border-medium); border-radius: var(–border-radius-smooth); padding: 10px 15px; margin-bottom: 15px; display: flex; align-items: center; justify-content: space-between; box-shadow: 3px 3px 0 var(–ape-stroke); } .shop-item.disabled { opacity: 0.6; pointer-events: none; /* Disable button clicks */ background-color: #ccc; } .shop-item.disabled button { background-color: #aaa; } .item-icon { font-size: 2rem; margin-right: 15px; } .item-details { flex-grow: 1; text-align: left;} .item-details h4 { font-size: clamp(1.1rem, 2.5vw, 1.4rem); color: var(–ape-stroke); margin-bottom: 0.2rem; text-align: left; -webkit-text-stroke-width: 1px; } .item-details p { font-size: 0.9rem; margin-bottom: 0.1rem; color: var(–ape-black); } .btn-shop { padding: 8px 15px; font-size: 1rem; background-color: var(–funky-blue); color: var(–ape-white); -webkit-text-stroke: 1px var(–ape-stroke); } .btn-shop:hover { background-color: #007bb5; } /* Meme Maker Presets */ .meme-presets { width: 100%; margin-bottom: 20px; text-align: center; } .meme-presets label { display: block; margin-bottom: 5px; color: var(–ape-stroke); } #memePresetSelect { font-family: var(–luckiest-font); padding: 8px 12px; border-radius: var(–border-radius-smooth); border: var(–border-medium); font-size: 1.1rem; background-color: var(–ape-white); min-width: 250px; } /* Shill Text Generator Styles */ .shill-generator-section { background-color: var(–card-bg-light); border-bottom: var(–border-thick); } .shill-generator-container { background-color: var(–primary-yellow); border: var(–border-thick); border-radius: var(–border-radius-chunky); padding: 20px; max-width: 900px; margin: 0 auto; box-shadow: 5px 5px 0 var(–ape-stroke); display: flex; flex-wrap: wrap; gap: 30px; } .shill-inputs, .shill-outputs { flex: 1; min-width: 300px; } .shill-inputs h3, .shill-outputs h3 { color: var(–ape-stroke); text-align: center; margin-bottom: 15px; } .shill-inputs label { display: block; font-family: var(–luckiest-font); color: var(–ape-black); font-size: 1.1rem; margin: 10px 0 5px 0; } .shill-inputs input[type=”text”], .shill-inputs select { width: 100%; padding: 10px; border-radius: var(–border-radius-smooth); border: var(–border-medium); font-size: 1rem; margin-bottom: 10px; } #generateShillBtn { width: 100%; margin-top: 15px; } #shillOutputArea { background-color: var(–ape-white); border: var(–border-medium); border-radius: var(–border-radius-smooth); padding: 15px; min-height: 200px; max-height: 400px; overflow-y: auto; font-size: 0.95rem; } .shill-message { background-color: var(–funky-green); border: 1px solid var(–ape-stroke); border-radius: var(–border-radius-smooth); padding: 10px; margin-bottom: 10px; position: relative; /* For copy button */ } .shill-message p { margin-bottom: 5px; word-wrap: break-word; } .copy-shill-btn { position: absolute; top: 5px; right: 5px; background: var(–funky-blue); color: white; border: none; border-radius: 5px; padding: 3px 6px; font-size: 0.8rem; cursor: pointer; } .copy-shill-btn:hover { background: #007bb5; } /* Floating Bananas Enhanced */ @keyframes floatUpwards { /* Make it more wiggly and varied */ 0% { transform: translateY(0) translateX(0) rotate(0deg); opacity: 0.8; } 25% { transform: translateY(-25vh) translateX(calc(var(–sway) * 0.5)) rotate(var(–rotate1, 90deg)); } 50% { transform: translateY(-50vh) translateX(var(–sway)) rotate(var(–rotate2, 180deg)); opacity: 0.6; } 75% { transform: translateY(-75vh) translateX(calc(var(–sway) * 0.3)) rotate(var(–rotate1, 270deg));} 99% { opacity: 0.1; } 100% { transform: translateY(-105vh) translateX(calc(var(–sway) * -0.2)) rotate(var(–rotate2, 360deg)); opacity: 0;} } .banana-floater { /* … existing styles … */ animation: floatUpwards linear infinite; /* Ensure this is set */ /* JS will set –sway, –rotate1, –rotate2 */ }