Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>The Farther Experience</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
| <style> | |
| @keyframes float { | |
| 0%, 100% { transform: translateY(0); } | |
| 50% { transform: translateY(-20px); } | |
| } | |
| @keyframes shake { | |
| 0% { transform: rotate(0deg); } | |
| 25% { transform: rotate(5deg); } | |
| 50% { transform: rotate(0deg); } | |
| 75% { transform: rotate(-5deg); } | |
| 100% { transform: rotate(0deg); } | |
| } | |
| @keyframes spin { | |
| 0% { transform: rotate(0deg); } | |
| 100% { transform: rotate(360deg); } | |
| } | |
| .fart-cloud { | |
| opacity: 0; | |
| transition: all 1s ease-out; | |
| } | |
| .active-fart { | |
| opacity: 1; | |
| transform: scale(1.5); | |
| } | |
| .fart-button:hover { | |
| animation: shake 0.5s infinite; | |
| } | |
| .spinning { | |
| animation: spin 2s linear infinite; | |
| } | |
| .floating { | |
| animation: float 3s ease-in-out infinite; | |
| } | |
| #fartCounter { | |
| transition: all 0.3s; | |
| } | |
| .counter-pop { | |
| transform: scale(1.2); | |
| color: #ff0000; | |
| } | |
| .rainbow-text { | |
| background-image: linear-gradient(to left, violet, indigo, blue, green, yellow, orange, red); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| color: transparent; | |
| } | |
| .fart-zone { | |
| background: repeating-linear-gradient( | |
| 45deg, | |
| #f0fff0, | |
| #f0fff0 10px, | |
| #e0ffe0 10px, | |
| #e0ffe0 20px | |
| ); | |
| } | |
| </style> | |
| </head> | |
| <body class="bg-green-50 fart-zone min-h-screen flex flex-col items-center justify-center p-4"> | |
| <div class="max-w-4xl w-full bg-white rounded-xl shadow-2xl overflow-hidden"> | |
| <!-- Header --> | |
| <div class="bg-green-800 p-6 text-center relative overflow-hidden"> | |
| <div class="absolute top-0 left-0 w-full h-full opacity-20"> | |
| <div class="fart-cloud absolute w-20 h-20 bg-yellow-100 rounded-full top-10 left-1/4"></div> | |
| <div class="fart-cloud absolute w-24 h-24 bg-yellow-100 rounded-full top-20 right-1/3"></div> | |
| <div class="fart-cloud absolute w-16 h-16 bg-yellow-100 rounded-full bottom-10 left-1/2"></div> | |
| </div> | |
| <h1 class="text-5xl font-bold text-white mb-2 rainbow-text">The Farther</h1> | |
| <p class="text-yellow-200 italic">"Going the distance... one toot at a time"</p> | |
| </div> | |
| <!-- Main Content --> | |
| <div class="p-8"> | |
| <div class="flex flex-col md:flex-row gap-8 items-center"> | |
| <!-- Fart Character --> | |
| <div class="relative flex-1 flex justify-center"> | |
| <div class="relative"> | |
| <img src="https://i.imgur.com/JQl1E7W.png" alt="Farther character" class="w-64 h-64 floating" id="fartCharacter"> | |
| <div class="fart-cloud absolute top-0 left-0 w-32 h-32 bg-yellow-100 rounded-full opacity-0" id="fartCloud1"></div> | |
| <div class="fart-cloud absolute top-10 right-0 w-24 h-24 bg-yellow-100 rounded-full opacity-0" id="fartCloud2"></div> | |
| <div class="fart-cloud absolute bottom-0 left-1/4 w-28 h-28 bg-yellow-100 rounded-full opacity-0" id="fartCloud3"></div> | |
| </div> | |
| </div> | |
| <!-- Controls --> | |
| <div class="flex-1 space-y-6"> | |
| <div class="bg-yellow-100 p-6 rounded-lg border-2 border-yellow-300"> | |
| <h2 class="text-2xl font-bold text-green-800 mb-4">Fart Control Panel</h2> | |
| <div class="mb-6"> | |
| <div class="flex justify-between items-center mb-2"> | |
| <span class="font-medium text-green-700">Fart Intensity:</span> | |
| <span id="intensityValue" class="font-bold text-green-900">Medium</span> | |
| </div> | |
| <input type="range" min="1" max="5" value="3" class="w-full h-4 bg-green-200 rounded-lg appearance-none cursor-pointer" id="intensitySlider"> | |
| <div class="flex justify-between text-xs text-green-600 mt-1"> | |
| <span>Whisper</span> | |
| <span>Medium</span> | |
| <span>Earthquake</span> | |
| </div> | |
| </div> | |
| <div class="mb-6"> | |
| <div class="flex justify-between items-center mb-2"> | |
| <span class="font-medium text-green-700">Fart Type:</span> | |
| <span id="typeValue" class="font-bold text-green-900">Classic</span> | |
| </div> | |
| <div class="grid grid-cols-3 gap-2"> | |
| <button class="fart-type-btn py-2 px-3 bg-green-100 hover:bg-green-200 border border-green-300 rounded" data-type="classic">Classic</button> | |
| <button class="fart-type-btn py-2 px-3 bg-green-100 hover:bg-green-200 border border-green-300 rounded" data-type="squeaker">Squeaker</button> | |
| <button class="fart-type-btn py-2 px-3 bg-green-100 hover:bg-green-200 border border-green-300 rounded" data-type="bass">Bass</button> | |
| <button class="fart-type-btn py-2 px-3 bg-green-100 hover:bg-green-200 border border-green-300 rounded" data-type="ripper">Ripper</button> | |
| <button class="fart-type-btn py-2 px-3 bg-green-100 hover:bg-green-200 border border-green-300 rounded" data-type="mystery">Mystery</button> | |
| <button class="fart-type-btn py-2 px-3 bg-green-100 hover:bg-green-200 border border-green-300 rounded" data-type="silent">Silent</button> | |
| </div> | |
| </div> | |
| <div class="flex justify-center"> | |
| <button id="fartButton" class="fart-button py-4 px-8 bg-red-500 hover:bg-red-600 text-white font-bold rounded-full text-xl transition-all transform hover:scale-110"> | |
| <i class="fas fa-wind mr-2"></i> RELEASE THE FART | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Stats --> | |
| <div class="mt-12 bg-gray-100 p-6 rounded-lg border border-gray-200"> | |
| <h2 class="text-2xl font-bold text-gray-800 mb-4">Fart Statistics</h2> | |
| <div class="grid grid-cols-2 md:grid-cols-4 gap-4 text-center"> | |
| <div class="bg-white p-4 rounded-lg shadow"> | |
| <div class="text-4xl font-bold text-green-600" id="fartCounter">0</div> | |
| <div class="text-gray-600">Total Farts</div> | |
| </div> | |
| <div class="bg-white p-4 rounded-lg shadow"> | |
| <div class="text-4xl font-bold text-blue-600" id="powerLevel">0</div> | |
| <div class="text-gray-600">Power Level</div> | |
| </div> | |
| <div class="bg-white p-4 rounded-lg shadow"> | |
| <div class="text-4xl font-bold text-purple-600" id="distance">0</div> | |
| <div class="text-gray-600">Distance (ft)</div> | |
| </div> | |
| <div class="bg-white p-4 rounded-lg shadow"> | |
| <div class="text-4xl font-bold text-red-600" id="clearance">100%</div> | |
| <div class="text-gray-600">Air Clearance</div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Achievements --> | |
| <div class="mt-8"> | |
| <h2 class="text-2xl font-bold text-gray-800 mb-4">Fart Achievements</h2> | |
| <div class="grid grid-cols-2 md:grid-cols-3 gap-4" id="achievements"> | |
| <div class="bg-yellow-50 border border-yellow-200 p-3 rounded-lg opacity-50 achievement" data-count="1"> | |
| <div class="flex items-center"> | |
| <div class="bg-yellow-100 p-2 rounded-full mr-3"> | |
| <i class="fas fa-medal text-yellow-500"></i> | |
| </div> | |
| <div> | |
| <h3 class="font-bold">First Toot</h3> | |
| <p class="text-sm text-gray-600">Release your first fart</p> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-yellow-50 border border-yellow-200 p-3 rounded-lg opacity-50 achievement" data-count="5"> | |
| <div class="flex items-center"> | |
| <div class="bg-yellow-100 p-2 rounded-full mr-3"> | |
| <i class="fas fa-biohazard text-green-500"></i> | |
| </div> | |
| <div> | |
| <h3 class="font-bold">Gas Chamber</h3> | |
| <p class="text-sm text-gray-600">5 farts released</p> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-yellow-50 border border-yellow-200 p-3 rounded-lg opacity-50 achievement" data-count="10"> | |
| <div class="flex items-center"> | |
| <div class="bg-yellow-100 p-2 rounded-full mr-3"> | |
| <i class="fas fa-cloud-meatball text-red-500"></i> | |
| </div> | |
| <div> | |
| <h3 class="font-bold">Toxic Cloud</h3> | |
| <p class="text-sm text-gray-600">10 farts released</p> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-yellow-50 border border-yellow-200 p-3 rounded-lg opacity-50 achievement" data-count="25"> | |
| <div class="flex items-center"> | |
| <div class="bg-yellow-100 p-2 rounded-full mr-3"> | |
| <i class="fas fa-skull-crossbones text-purple-500"></i> | |
| </div> | |
| <div> | |
| <h3 class="font-bold">Biological Hazard</h3> | |
| <p class="text-sm text-gray-600">25 farts released</p> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-yellow-50 border border-yellow-200 p-3 rounded-lg opacity-50 achievement" data-count="50"> | |
| <div class="flex items-center"> | |
| <div class="bg-yellow-100 p-2 rounded-full mr-3"> | |
| <i class="fas fa-atom text-blue-500"></i> | |
| </div> | |
| <div> | |
| <h3 class="font-bold">Nuclear Winter</h3> | |
| <p class="text-sm text-gray-600">50 farts released</p> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-yellow-50 border border-yellow-200 p-3 rounded-lg opacity-50 achievement" data-count="100"> | |
| <div class="flex items-center"> | |
| <div class="bg-yellow-100 p-2 rounded-full mr-3"> | |
| <i class="fas fa-meteor text-orange-500"></i> | |
| </div> | |
| <div> | |
| <h3 class="font-bold">Extinction Event</h3> | |
| <p class="text-sm text-gray-600">100 farts released</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Fart Science --> | |
| <div class="mt-12 bg-blue-50 p-6 rounded-lg border border-blue-200"> | |
| <h2 class="text-2xl font-bold text-blue-800 mb-4">Fart Science Corner</h2> | |
| <div class="space-y-4"> | |
| <div class="bg-white p-4 rounded-lg shadow"> | |
| <h3 class="font-bold text-blue-700 mb-2">Did you know?</h3> | |
| <p class="text-gray-700">The average person passes gas between 13-21 times a day. That's enough to fill a small balloon!</p> | |
| </div> | |
| <div class="bg-white p-4 rounded-lg shadow"> | |
| <h3 class="font-bold text-blue-700 mb-2">Fart Facts</h3> | |
| <ul class="list-disc pl-5 text-gray-700 space-y-1"> | |
| <li>Farts are composed of about 59% nitrogen, 21% hydrogen, 9% carbon dioxide, 7% methane, and 4% oxygen</li> | |
| <li>The speed of a fart is about 10 feet per second (3 meters per second)</li> | |
| <li>Termites produce more methane (from farting) than cows and other animals</li> | |
| </ul> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Footer --> | |
| <div class="bg-green-900 p-4 text-center text-green-200 text-sm"> | |
| <p>The Farther Experience © 2023 | Warning: Excessive farting may cause social distancing</p> | |
| </div> | |
| </div> | |
| <!-- Audio Elements --> | |
| <audio id="fartSound1" src="https://www.soundjay.com/human/sounds/fart-01.mp3" preload="auto"></audio> | |
| <audio id="fartSound2" src="https://www.soundjay.com/human/sounds/fart-02.mp3" preload="auto"></audio> | |
| <audio id="fartSound3" src="https://www.soundjay.com/human/sounds/fart-03.mp3" preload="auto"></audio> | |
| <audio id="fartSound4" src="https://www.soundjay.com/human/sounds/fart-04.mp3" preload="auto"></audio> | |
| <audio id="fartSound5" src="https://www.soundjay.com/human/sounds/fart-05.mp3" preload="auto"></audio> | |
| <audio id="fartSound6" src="https://www.soundjay.com/human/sounds/fart-06.mp3" preload="auto"></audio> | |
| <script> | |
| document.addEventListener('DOMContentLoaded', function() { | |
| // DOM Elements | |
| const fartButton = document.getElementById('fartButton'); | |
| const fartCharacter = document.getElementById('fartCharacter'); | |
| const fartCloud1 = document.getElementById('fartCloud1'); | |
| const fartCloud2 = document.getElementById('fartCloud2'); | |
| const fartCloud3 = document.getElementById('fartCloud3'); | |
| const intensitySlider = document.getElementById('intensitySlider'); | |
| const intensityValue = document.getElementById('intensityValue'); | |
| const typeValue = document.getElementById('typeValue'); | |
| const fartCounter = document.getElementById('fartCounter'); | |
| const powerLevel = document.getElementById('powerLevel'); | |
| const distance = document.getElementById('distance'); | |
| const clearance = document.getElementById('clearance'); | |
| const achievements = document.querySelectorAll('.achievement'); | |
| // Audio Elements | |
| const fartSounds = [ | |
| document.getElementById('fartSound1'), | |
| document.getElementById('fartSound2'), | |
| document.getElementById('fartSound3'), | |
| document.getElementById('fartSound4'), | |
| document.getElementById('fartSound5'), | |
| document.getElementById('fartSound6') | |
| ]; | |
| // Game State | |
| let fartCount = 0; | |
| let currentIntensity = 3; | |
| let currentType = 'classic'; | |
| let power = 0; | |
| let totalDistance = 0; | |
| let airClearance = 100; | |
| // Intensity Slider | |
| intensitySlider.addEventListener('input', function() { | |
| currentIntensity = parseInt(this.value); | |
| const intensityLabels = ['Whisper', 'Gentle', 'Medium', 'Strong', 'Earthquake']; | |
| intensityValue.textContent = intensityLabels[currentIntensity - 1]; | |
| }); | |
| // Fart Type Buttons | |
| document.querySelectorAll('.fart-type-btn').forEach(button => { | |
| button.addEventListener('click', function() { | |
| currentType = this.dataset.type; | |
| typeValue.textContent = this.textContent; | |
| // Update active button | |
| document.querySelectorAll('.fart-type-btn').forEach(btn => { | |
| btn.classList.remove('bg-green-300', 'border-green-500'); | |
| }); | |
| this.classList.add('bg-green-300', 'border-green-500'); | |
| }); | |
| }); | |
| // Fart Button | |
| fartButton.addEventListener('click', function() { | |
| // Play fart sound based on type | |
| playFartSound(); | |
| // Show fart clouds | |
| showFartClouds(); | |
| // Update counters | |
| updateCounters(); | |
| // Check achievements | |
| checkAchievements(); | |
| // Animate character | |
| animateCharacter(); | |
| }); | |
| function playFartSound() { | |
| let soundIndex; | |
| let volume = currentIntensity / 5; | |
| switch(currentType) { | |
| case 'squeaker': | |
| soundIndex = 1; // High pitch | |
| break; | |
| case 'bass': | |
| soundIndex = 2; // Low pitch | |
| break; | |
| case 'ripper': | |
| soundIndex = 3; // Long | |
| break; | |
| case 'mystery': | |
| soundIndex = Math.floor(Math.random() * fartSounds.length); | |
| break; | |
| case 'silent': | |
| volume = 0.1; // Almost silent | |
| soundIndex = 4; | |
| break; | |
| default: // classic | |
| soundIndex = 0; | |
| } | |
| // Play sound | |
| const sound = fartSounds[soundIndex].cloneNode(); | |
| sound.volume = volume; | |
| sound.play(); | |
| } | |
| function showFartClouds() { | |
| // Reset clouds | |
| fartCloud1.classList.remove('active-fart'); | |
| fartCloud2.classList.remove('active-fart'); | |
| fartCloud3.classList.remove('active-fart'); | |
| // Trigger reflow | |
| void fartCloud1.offsetWidth; | |
| // Activate clouds with delay | |
| setTimeout(() => { | |
| fartCloud1.classList.add('active-fart'); | |
| }, 100); | |
| setTimeout(() => { | |
| fartCloud2.classList.add('active-fart'); | |
| }, 300); | |
| setTimeout(() => { | |
| fartCloud3.classList.add('active-fart'); | |
| }, 500); | |
| // Remove clouds after animation | |
| setTimeout(() => { | |
| fartCloud1.classList.remove('active-fart'); | |
| fartCloud2.classList.remove('active-fart'); | |
| fartCloud3.classList.remove('active-fart'); | |
| }, 2000); | |
| } | |
| function updateCounters() { | |
| // Increment fart count | |
| fartCount++; | |
| fartCounter.textContent = fartCount; | |
| // Animate counter | |
| fartCounter.classList.add('counter-pop'); | |
| setTimeout(() => { | |
| fartCounter.classList.remove('counter-pop'); | |
| }, 300); | |
| // Calculate power (intensity * type multiplier) | |
| let typeMultiplier = 1; | |
| if (currentType === 'bass') typeMultiplier = 1.5; | |
| if (currentType === 'ripper') typeMultiplier = 2; | |
| if (currentType === 'mystery') typeMultiplier = Math.random() * 3; | |
| power += currentIntensity * typeMultiplier; | |
| powerLevel.textContent = Math.round(power); | |
| // Calculate distance (random based on intensity) | |
| totalDistance += Math.random() * currentIntensity * 5; | |
| distance.textContent = Math.round(totalDistance); | |
| // Decrease air clearance | |
| airClearance = Math.max(0, airClearance - (currentIntensity * 2)); | |
| clearance.textContent = airClearance + '%'; | |
| // Change clearance color based on level | |
| if (airClearance < 30) { | |
| clearance.classList.add('text-red-600'); | |
| clearance.classList.remove('text-yellow-600', 'text-green-600'); | |
| } else if (airClearance < 70) { | |
| clearance.classList.add('text-yellow-600'); | |
| clearance.classList.remove('text-red-600', 'text-green-600'); | |
| } else { | |
| clearance.classList.add('text-green-600'); | |
| clearance.classList.remove('text-red-600', 'text-yellow-600'); | |
| } | |
| } | |
| function checkAchievements() { | |
| achievements.forEach(achievement => { | |
| const requiredCount = parseInt(achievement.dataset.count); | |
| if (fartCount >= requiredCount) { | |
| achievement.classList.remove('opacity-50'); | |
| } | |
| }); | |
| } | |
| function animateCharacter() { | |
| // Add animation class | |
| fartCharacter.classList.add('spinning'); | |
| // Remove after animation | |
| setTimeout(() => { | |
| fartCharacter.classList.remove('spinning'); | |
| }, 1000); | |
| // Change face based on intensity | |
| const faceUrls = [ | |
| 'https://i.imgur.com/JQl1E7W.png', // normal | |
| 'https://i.imgur.com/3QmZr7P.png', // happy | |
| 'https://i.imgur.com/8zLXq7G.png', // strain | |
| 'https://i.imgur.com/VvV4Z9h.png' // relief | |
| ]; | |
| // Strain face during fart | |
| fartCharacter.src = faceUrls[2]; | |
| // Return to normal or happy face after | |
| setTimeout(() => { | |
| fartCharacter.src = Math.random() > 0.5 ? faceUrls[1] : faceUrls[0]; | |
| }, 800); | |
| // Sometimes show relief face | |
| if (Math.random() > 0.7) { | |
| setTimeout(() => { | |
| fartCharacter.src = faceUrls[3]; | |
| }, 1200); | |
| setTimeout(() => { | |
| fartCharacter.src = faceUrls[0]; | |
| }, 2000); | |
| } | |
| } | |
| // Easter egg - keyboard controls | |
| document.addEventListener('keydown', function(e) { | |
| if (e.code === 'Space') { | |
| e.preventDefault(); | |
| fartButton.click(); | |
| fartButton.classList.add('animate-ping'); | |
| setTimeout(() => { | |
| fartButton.classList.remove('animate-ping'); | |
| }, 300); | |
| } | |
| // Secret turbo mode | |
| if (e.code === 'KeyT' && e.ctrlKey) { | |
| alert('Turbo fart mode activated! Hold space to rapid fire!'); | |
| document.addEventListener('keydown', turboFart); | |
| document.addEventListener('keyup', stopTurboFart); | |
| } | |
| }); | |
| let turboInterval; | |
| function turboFart(e) { | |
| if (e.code === 'Space' && !turboInterval) { | |
| turboInterval = setInterval(() => { | |
| fartButton.click(); | |
| }, 200); | |
| } | |
| } | |
| function stopTurboFart() { | |
| clearInterval(turboInterval); | |
| turboInterval = null; | |
| } | |
| // Initialize | |
| document.querySelector('.fart-type-btn[data-type="classic"]').classList.add('bg-green-300', 'border-green-500'); | |
| }); | |
| </script> | |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Boobs00/raspberry-fart" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
| </html> |