| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>BoomBuddy: The Skibidi Odyssey</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> |
| @import url('https://fonts.googleapis.com/css2?family=Comic+Neue:wght@400;700&family=Permanent+Marker&display=swap'); |
| |
| :root { |
| --neon-pink: #ff6ec7; |
| --neon-blue: #00f7ff; |
| --neon-yellow: #fff01f; |
| --neon-green: #00ff7f; |
| --neon-purple: #c724ff; |
| } |
| |
| body { |
| font-family: 'Comic Neue', cursive; |
| background-color: #111; |
| color: white; |
| overflow-x: hidden; |
| } |
| |
| .title-font { |
| font-family: 'Permanent Marker', cursive; |
| } |
| |
| .neon-text-pink { |
| text-shadow: 0 0 5px var(--neon-pink), 0 0 15px var(--neon-pink); |
| color: var(--neon-pink); |
| } |
| |
| .neon-text-blue { |
| text-shadow: 0 0 5px var(--neon-blue), 0 0 15px var(--neon-blue); |
| color: var(--neon-blue); |
| } |
| |
| .neon-text-yellow { |
| text-shadow: 0 0 5px var(--neon-yellow), 0 0 15px var(--neon-yellow); |
| color: var(--neon-yellow); |
| } |
| |
| .neon-text-green { |
| text-shadow: 0 0 5px var(--neon-green), 0 0 15px var(--neon-green); |
| color: var(--neon-green); |
| } |
| |
| .neon-text-purple { |
| text-shadow: 0 0 5px var(--neon-purple), 0 0 15px var(--neon-purple); |
| color: var(--neon-purple); |
| } |
| |
| .neon-border-pink { |
| box-shadow: 0 0 5px var(--neon-pink), 0 0 15px var(--neon-pink), inset 0 0 5px var(--neon-pink); |
| border: 2px solid var(--neon-pink); |
| } |
| |
| .neon-border-blue { |
| box-shadow: 0 0 5px var(--neon-blue), 0 0 15px var(--neon-blue), inset 0 0 5px var(--neon-blue); |
| border: 2px solid var(--neon-blue); |
| } |
| |
| .neon-border-yellow { |
| box-shadow: 0 0 5px var(--neon-yellow), 0 0 15px var(--neon-yellow), inset 0 0 5px var(--neon-yellow); |
| border: 2px solid var(--neon-yellow); |
| } |
| |
| .neon-border-green { |
| box-shadow: 0 0 5px var(--neon-green), 0 0 15px var(--neon-green), inset 0 0 5px var(--neon-green); |
| border: 2px solid var(--neon-green); |
| } |
| |
| .neon-border-purple { |
| box-shadow: 0 0 5px var(--neon-purple), 0 0 15px var(--neon-purple), inset 0 0 5px var(--neon-purple); |
| border: 2px solid var(--neon-purple); |
| } |
| |
| .skibidi-spin { |
| animation: skibidi-spin 3s infinite linear; |
| } |
| |
| @keyframes skibidi-spin { |
| 0% { transform: rotate(0deg); } |
| 25% { transform: rotate(5deg); } |
| 50% { transform: rotate(0deg); } |
| 75% { transform: rotate(-5deg); } |
| 100% { transform: rotate(0deg); } |
| } |
| |
| .skibidi-bounce { |
| animation: skibidi-bounce 2s infinite; |
| } |
| |
| @keyframes skibidi-bounce { |
| 0%, 100% { transform: translateY(0); } |
| 50% { transform: translateY(-20px); } |
| } |
| |
| .skibidi-pulse { |
| animation: skibidi-pulse 1.5s infinite; |
| } |
| |
| @keyframes skibidi-pulse { |
| 0%, 100% { transform: scale(1); } |
| 50% { transform: scale(1.05); } |
| } |
| |
| .skibidi-flicker { |
| animation: skibidi-flicker 1.5s infinite alternate; |
| } |
| |
| @keyframes skibidi-flicker { |
| 0%, 18%, 22%, 25%, 53%, 57%, 100% { |
| opacity: 1; |
| } |
| 20%, 24%, 55% { |
| opacity: 0.3; |
| } |
| } |
| |
| .comic-box { |
| clip-path: polygon( |
| 0% 0%, |
| 100% 0%, |
| 100% 75%, |
| 75% 75%, |
| 75% 100%, |
| 50% 75%, |
| 0% 75% |
| ); |
| } |
| |
| .speech-bubble { |
| position: relative; |
| background: white; |
| border-radius: 1em; |
| color: black; |
| padding: 1rem; |
| } |
| |
| .speech-bubble:after { |
| content: ''; |
| position: absolute; |
| bottom: -10px; |
| left: 20px; |
| border-width: 15px 15px 0; |
| border-style: solid; |
| border-color: white transparent; |
| } |
| |
| .app-screen { |
| border-radius: 30px; |
| overflow: hidden; |
| position: relative; |
| } |
| |
| .app-notch { |
| position: absolute; |
| top: 0; |
| left: 50%; |
| transform: translateX(-50%); |
| width: 40%; |
| height: 30px; |
| background: #111; |
| border-bottom-left-radius: 15px; |
| border-bottom-right-radius: 15px; |
| z-index: 10; |
| } |
| |
| .feature-icon { |
| width: 60px; |
| height: 60px; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| border-radius: 20px; |
| font-size: 28px; |
| } |
| |
| .glow-hover:hover { |
| transform: scale(1.05); |
| transition: all 0.3s ease; |
| } |
| |
| |
| #map { |
| width: 100%; |
| height: 100%; |
| background-color: #222; |
| position: relative; |
| overflow: hidden; |
| } |
| |
| .map-marker { |
| position: absolute; |
| width: 20px; |
| height: 20px; |
| background-color: var(--neon-pink); |
| border-radius: 50%; |
| transform: translate(-50%, -50%); |
| } |
| |
| .map-path { |
| position: absolute; |
| height: 3px; |
| background-color: var(--neon-blue); |
| transform-origin: left center; |
| } |
| |
| |
| .story-result { |
| min-height: 100px; |
| overflow-y: auto; |
| max-height: 200px; |
| } |
| |
| |
| .spray-meter { |
| width: 100%; |
| height: 20px; |
| background-color: #333; |
| border-radius: 10px; |
| overflow: hidden; |
| } |
| |
| .spray-fill { |
| height: 100%; |
| background: linear-gradient(to right, var(--neon-green), var(--neon-yellow)); |
| transition: width 0.5s ease; |
| } |
| |
| |
| .tab-content { |
| display: none; |
| } |
| |
| .tab-content.active { |
| display: block; |
| } |
| |
| |
| @media (max-width: 640px) { |
| .app-screen { |
| max-width: 100%; |
| height: 400px; |
| } |
| } |
| </style> |
| </head> |
| <body class="min-h-screen"> |
| |
| <div class="app-container hidden"> |
| |
| <header class="bg-black neon-border-purple p-4"> |
| <div class="flex justify-between items-center"> |
| <div class="flex items-center"> |
| <div class="w-10 h-10 rounded-full neon-border-pink bg-black flex items-center justify-center mr-2"> |
| <span class="text-xl">🚐</span> |
| </div> |
| <h1 class="text-xl font-bold title-font neon-text-pink"> |
| Boom<span class="neon-text-yellow">Buddy</span> |
| </h1> |
| </div> |
| <div class="flex items-center space-x-2"> |
| <span class="text-sm neon-text-blue">🐷👦</span> |
| <button id="logoutBtn" class="text-sm neon-text-yellow hover:neon-text-pink"> |
| <i class="fas fa-sign-out-alt"></i> |
| </button> |
| </div> |
| </div> |
| </header> |
|
|
| |
| <main class="flex-1 overflow-y-auto"> |
| |
| <div class="flex border-b border-gray-800"> |
| <button class="tab-btn flex-1 py-3 neon-text-blue hover:neon-text-pink" data-tab="map"> |
| <i class="fas fa-map-marker-alt mr-1"></i> Map |
| </button> |
| <button class="tab-btn flex-1 py-3 neon-text-pink hover:neon-text-yellow" data-tab="spray"> |
| <i class="fas fa-spray-can mr-1"></i> Spray |
| </button> |
| <button class="tab-btn flex-1 py-3 neon-text-yellow hover:neon-text-green" data-tab="stories"> |
| <i class="fas fa-book mr-1"></i> Stories |
| </button> |
| </div> |
|
|
| |
| <div class="p-4"> |
| |
| <div id="map-tab" class="tab-content active"> |
| <div class="app-screen neon-border-blue mx-auto relative" style="height: 300px;"> |
| <div class="app-notch"></div> |
| <div id="map" class="absolute inset-0"> |
| |
| </div> |
| </div> |
| <div class="mt-4 bg-gray-900 rounded-xl p-4 neon-border-yellow"> |
| <h3 class="text-lg font-bold neon-text-blue mb-2">Navigation</h3> |
| <div class="flex items-center mb-2"> |
| <div class="w-3 h-3 rounded-full bg-green-500 mr-2"></div> |
| <p class="text-sm">Current location: <span id="currentLocation" class="neon-text-pink">Loading...</span></p> |
| </div> |
| <div class="flex items-center mb-2"> |
| <div class="w-3 h-3 rounded-full bg-pink-500 mr-2"></div> |
| <p class="text-sm">Destination: <span id="destination" class="neon-text-yellow">Boom Festival</span></p> |
| </div> |
| <div class="mt-3"> |
| <p class="text-sm neon-text-green" id="navigationText">"Oi Piglet, we're heading to the Skibidi toilets first!"</p> |
| </div> |
| <button id="refreshLocation" class="mt-3 px-4 py-2 bg-blue-600 hover:bg-blue-700 rounded-full text-sm neon-border-blue"> |
| <i class="fas fa-sync-alt mr-1"></i> Update Location |
| </button> |
| </div> |
| </div> |
|
|
| |
| <div id="spray-tab" class="tab-content"> |
| <div class="app-screen neon-border-yellow mx-auto relative" style="height: 300px;"> |
| <div class="app-notch"></div> |
| <div class="absolute inset-0 bg-gradient-to-b from-yellow-900 to-black p-4 flex flex-col items-center justify-center"> |
| <div class="w-24 h-24 rounded-full neon-border-pink flex items-center justify-center mb-4 cursor-pointer" id="sprayButton"> |
| <span class="text-4xl">💨</span> |
| </div> |
| <p class="text-sm neon-text-yellow mb-2" id="sprayMessage">"Piglet didn't see that coming!"</p> |
| <div class="w-full bg-gray-800 rounded-full p-1 neon-border-green mb-2"> |
| <div class="spray-meter"> |
| <div class="spray-fill" id="sprayFill" style="width: 0%"></div> |
| </div> |
| </div> |
| <p class="text-xs neon-text-blue mb-4" id="sprayLevel">Level: Spray Novice</p> |
| <div class="text-center"> |
| <p class="text-sm neon-text-pink">Today's sprays: <span id="sprayCount" class="text-xl">0</span></p> |
| <p class="text-xs neon-text-yellow">All-time sprays: <span id="totalSprays">0</span></p> |
| </div> |
| </div> |
| </div> |
| <div class="mt-4 bg-gray-900 rounded-xl p-4 neon-border-pink"> |
| <h3 class="text-lg font-bold neon-text-yellow mb-2">Spray Achievements</h3> |
| <div class="grid grid-cols-3 gap-2 text-center"> |
| <div class="bg-gray-800 p-2 rounded neon-border-blue"> |
| <span class="text-xs block neon-text-blue">Sneaky Spray</span> |
| <span class="text-sm" id="sneakySpray">0</span> |
| </div> |
| <div class="bg-gray-800 p-2 rounded neon-border-pink"> |
| <span class="text-xs block neon-text-pink">Double Tap</span> |
| <span class="text-sm" id="doubleSpray">0</span> |
| </div> |
| <div class="bg-gray-800 p-2 rounded neon-border-yellow"> |
| <span class="text-xs block neon-text-yellow">Nasal Assassin</span> |
| <span class="text-sm" id="nasalAssassin">0</span> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div id="stories-tab" class="tab-content"> |
| <div class="app-screen neon-border-green mx-auto relative" style="height: 300px;"> |
| <div class="app-notch"></div> |
| <div class="absolute inset-0 bg-gradient-to-b from-green-900 to-black p-4 flex flex-col"> |
| <div class="flex-1 bg-gray-800 rounded-xl neon-border-yellow p-4 mb-3 overflow-hidden"> |
| <div class="story-result bg-gray-900 rounded-lg p-3 h-full" id="storyResult"> |
| <p class="text-sm neon-text-blue">Enter your crazy adventure below and we'll turn it into art!</p> |
| </div> |
| </div> |
| <div class="flex space-x-2"> |
| <input type="text" id="storyInput" class="flex-1 bg-gray-700 rounded-full px-4 py-2 text-sm neon-border-blue" placeholder="Describe your skibidi moment..."> |
| <button id="generateStory" class="bg-pink-600 hover:bg-pink-700 rounded-full px-4 text-sm neon-border-pink"> |
| <i class="fas fa-magic"></i> |
| </button> |
| </div> |
| </div> |
| </div> |
| <div class="mt-4 bg-gray-900 rounded-xl p-4 neon-border-yellow"> |
| <h3 class="text-lg font-bold neon-text-green mb-2">Previous Stories</h3> |
| <div class="space-y-2 max-h-40 overflow-y-auto" id="previousStories"> |
| |
| </div> |
| </div> |
| </div> |
| </div> |
| </main> |
|
|
| |
| <footer class="bg-black neon-border-green p-3"> |
| <div class="flex justify-center space-x-6"> |
| <button class="text-xl neon-text-pink hover:neon-text-yellow" id="emergencyBtn"> |
| <i class="fas fa-bell"></i> |
| </button> |
| <button class="text-xl neon-text-blue hover:neon-text-pink" id="cameraBtn"> |
| <i class="fas fa-camera"></i> |
| </button> |
| <button class="text-xl neon-text-yellow hover:neon-text-green" id="musicBtn"> |
| <i class="fas fa-music"></i> |
| </button> |
| </div> |
| </footer> |
| </div> |
|
|
| |
| <div class="login-container min-h-screen flex items-center justify-center bg-black"> |
| <div class="text-center p-6 max-w-md"> |
| <div class="inline-block mb-6 neon-border-yellow rounded-full p-2 skibidi-bounce"> |
| <div class="rounded-full bg-black p-4 neon-border-pink"> |
| <span class="text-4xl">🚐</span> |
| </div> |
| </div> |
| <h1 class="text-5xl font-bold title-font neon-text-pink mb-4"> |
| Boom<span class="neon-text-yellow">Buddy</span> |
| </h1> |
| <p class="text-xl neon-text-blue mb-8"> |
| The <span class="neon-text-green">Skibidi Odyssey</span> of Piglet & Henley |
| </p> |
| |
| <div class="bg-gray-900 p-6 rounded-2xl neon-border-blue mb-6"> |
| <div class="mb-4"> |
| <label class="block text-left text-sm neon-text-pink mb-1">Who are you?</label> |
| <select id="userSelect" class="w-full bg-gray-800 rounded-full px-4 py-2 neon-border-yellow"> |
| <option value="">Select your identity</option> |
| <option value="piglet">Piglet 🐷</option> |
| <option value="henley">Henley 👦</option> |
| </select> |
| </div> |
| <div class="mb-4"> |
| <label class="block text-left text-sm neon-text-blue mb-1">Secret Code</label> |
| <input type="password" id="passwordInput" class="w-full bg-gray-800 rounded-full px-4 py-2 neon-border-pink" placeholder="Enter skibidi code"> |
| </div> |
| <button id="loginBtn" class="w-full px-6 py-3 bg-pink-600 hover:bg-pink-700 rounded-full font-bold neon-border-pink skibidi-pulse"> |
| Enter Skibidi Mode |
| </button> |
| </div> |
| |
| <p class="text-sm neon-text-purple"> |
| * Private app - not available to normies * |
| </p> |
| </div> |
| </div> |
|
|
| |
| <div class="fixed bottom-6 right-6 text-5xl neon-text-yellow skibidi-spin"> |
| <span class="inline-block">🤪</span> |
| </div> |
| |
| <div class="fixed top-1/4 left-6 text-3xl neon-text-pink skibidi-bounce"> |
| <span class="inline-block">🐷</span> |
| </div> |
| |
| <div class="fixed bottom-1/3 left-10 text-2xl neon-text-blue skibidi-flicker"> |
| <span class="inline-block">👦</span> |
| </div> |
|
|
| <script> |
| // App State |
| const appState = { |
| currentUser: null, |
| sprayCount: 0, |
| totalSprays: 0, |
| lastSprayTime: 0, |
| achievements: { |
| sneakySpray: 0, |
| doubleSpray: 0, |
| nasalAssassin: 0 |
| }, |
| stories: [], |
| locations: [ |
| "Main Stage", |
| "Skibidi Toilets", |
| "Dance Temple", |
| "Food Court", |
| "Chill Zone", |
| "Secret Rave Spot" |
| ], |
| currentLocation: null, |
| destination: "Boom Festival" |
| }; |
| |
| // DOM Elements |
| const loginContainer = document.querySelector('.login-container'); |
| const appContainer = document.querySelector('.app-container'); |
| const userSelect = document.getElementById('userSelect'); |
| const passwordInput = document.getElementById('passwordInput'); |
| const loginBtn = document.getElementById('loginBtn'); |
| const logoutBtn = document.getElementById('logoutBtn'); |
| const tabBtns = document.querySelectorAll('.tab-btn'); |
| const tabContents = document.querySelectorAll('.tab-content'); |
| const sprayButton = document.getElementById('sprayButton'); |
| const sprayCount = document.getElementById('sprayCount'); |
| const totalSprays = document.getElementById('totalSprays'); |
| const sprayFill = document.getElementById('sprayFill'); |
| const sprayMessage = document.getElementById('sprayMessage'); |
| const sprayLevel = document.getElementById('sprayLevel'); |
| const sneakySpray = document.getElementById('sneakySpray'); |
| const doubleSpray = document.getElementById('doubleSpray'); |
| const nasalAssassin = document.getElementById('nasalAssassin'); |
| const storyInput = document.getElementById('storyInput'); |
| const generateStory = document.getElementById('generateStory'); |
| const storyResult = document.getElementById('storyResult'); |
| const previousStories = document.getElementById('previousStories'); |
| const currentLocationDisplay = document.getElementById('currentLocation'); |
| const navigationText = document.getElementById('navigationText'); |
| const refreshLocation = document.getElementById('refreshLocation'); |
| const map = document.getElementById('map'); |
| const emergencyBtn = document.getElementById('emergencyBtn'); |
| const cameraBtn = document.getElementById('cameraBtn'); |
| const musicBtn = document.getElementById('musicBtn'); |
| |
| // Initialize the app |
| function initApp() { |
| // Check if user is already logged in (from localStorage) |
| const savedUser = localStorage.getItem('boomBuddyUser'); |
| if (savedUser) { |
| try { |
| const userData = JSON.parse(savedUser); |
| appState.currentUser = userData.user; |
| appState.totalSprays = userData.totalSprays || 0; |
| appState.achievements = userData.achievements || { |
| sneakySpray: 0, |
| doubleSpray: 0, |
| nasalAssassin: 0 |
| }; |
| appState.stories = userData.stories || []; |
| |
| loginContainer.classList.add('hidden'); |
| appContainer.classList.remove('hidden'); |
| updateUI(); |
| } catch (e) { |
| localStorage.removeItem('boomBuddyUser'); |
| } |
| } |
| } |
| |
| // Login function |
| function login() { |
| const user = userSelect.value; |
| const password = passwordInput.value; |
| |
| if (!user) { |
| alert("Oi! Select who you are first!"); |
| return; |
| } |
| |
| // Very secure authentication 😉 |
| if (password !== "skibidi") { |
| alert("Wrong skibidi code! Try 'skibidi'"); |
| return; |
| } |
| |
| appState.currentUser = user; |
| |
| // Save to localStorage |
| localStorage.setItem('boomBuddyUser', JSON.stringify({ |
| user: appState.currentUser, |
| totalSprays: appState.totalSprays, |
| achievements: appState.achievements, |
| stories: appState.stories |
| })); |
| |
| loginContainer.classList.add('hidden'); |
| appContainer.classList.remove('hidden'); |
| |
| // Initialize app features |
| updateUI(); |
| generateRandomLocation(); |
| renderMap(); |
| } |
| |
| // Logout function |
| function logout() { |
| if (confirm("Are you sure you want to exit Skibidi mode?")) { |
| localStorage.removeItem('boomBuddyUser'); |
| appContainer.classList.add('hidden'); |
| loginContainer.classList.remove('hidden'); |
| userSelect.value = ""; |
| passwordInput.value = ""; |
| appState.currentUser = null; |
| } |
| } |
| |
| // Update UI based on app state |
| function updateUI() { |
| // Update spray counter |
| sprayCount.textContent = appState.sprayCount; |
| totalSprays.textContent = appState.totalSprays; |
| |
| // Update achievements |
| sneakySpray.textContent = appState.achievements.sneakySpray; |
| doubleSpray.textContent = appState.achievements.doubleSpray; |
| nasalAssassin.textContent = appState.achievements.nasalAssassin; |
| |
| // Update spray meter |
| const sprayPercentage = Math.min(100, (appState.sprayCount / 5) * 100); |
| sprayFill.style.width = `${sprayPercentage}%`; |
| |
| // Update spray level |
| if (appState.totalSprays >= 20) { |
| sprayLevel.textContent = "Level: Nasal Overlord"; |
| } else if (appState.totalSprays >= 10) { |
| sprayLevel.textContent = "Level: Spray Assassin"; |
| } else if (appState.totalSprays >= 5) { |
| sprayLevel.textContent = "Level: Spray Novice"; |
| } else { |
| sprayLevel.textContent = "Level: Spray Rookie"; |
| } |
| |
| // Update previous stories |
| previousStories.innerHTML = ""; |
| appState.stories.slice().reverse().forEach((story, index) => { |
| if (index < 5) { // Only show last 5 stories |
| const storyEl = document.createElement('div'); |
| storyEl.className = 'bg-gray-800 p-2 rounded mb-1 text-sm neon-border-purple'; |
| storyEl.textContent = `${story.input.substring(0, 30)}... → ${story.type}`; |
| storyEl.title = `${story.input} → ${story.result.substring(0, 100)}...`; |
| previousStories.appendChild(storyEl); |
| } |
| }); |
| |
| // Update location display |
| if (appState.currentLocation) { |
| currentLocationDisplay.textContent = appState.currentLocation; |
| navigationText.textContent = getRandomNavigationPhrase(); |
| } |
| } |
| |
| // Handle spray action |
| function handleSpray() { |
| const now = Date.now(); |
| |
| // Increment counters |
| appState.sprayCount++; |
| appState.totalSprays++; |
| |
| // Check for achievements |
| // Sneaky spray (after 10 seconds of inactivity) |
| if (now - appState.lastSprayTime > 10000) { |
| appState.achievements.sneakySpray++; |
| sprayMessage.textContent = `"${appState.currentUser === 'piglet' ? 'Henley' : 'Piglet'} didn't see that coming!"`; |
| } |
| |
| // Double spray (within 2 seconds) |
| if (now - appState.lastSprayTime < 2000) { |
| appState.achievements.doubleSpray++; |
| sprayMessage.textContent = `"DOUBLE TAP! ${appState.currentUser === 'piglet' ? 'Henley' : 'Piglet'} is gonna lose it!"`; |
| } |
| |
| // Nasal assassin (5 sprays in a row) |
| if (appState.sprayCount >= 5) { |
| appState.achievements.nasalAssassin++; |
| sprayMessage.textContent = `"NASAL ASSASSIN! ${appState.currentUser === 'piglet' ? 'Henley' : 'Piglet'} is drowning in JPG!"`; |
| appState.sprayCount = 0; // Reset counter |
| } |
| |
| appState.lastSprayTime = now; |
| |
| // Animate spray button |
| sprayButton.classList.add('animate__animated', 'animate__rubberBand'); |
| setTimeout(() => { |
| sprayButton.classList.remove('animate__animated', 'animate__rubberBand'); |
| }, 1000); |
| |
| // Save state |
| saveAppState(); |
| updateUI(); |
| } |
| |
| // Generate a story |
| function generateStory() { |
| const input = storyInput.value.trim(); |
| if (!input) { |
| alert("Oi! Write something skibidi first!"); |
| return; |
| } |
| |
| // Randomly select a story type |
| const types = ['poem', 'comic', 'meme', 'song', 'shakespeare']; |
| const type = types[Math.floor(Math.random() * types.length)]; |
| |
| let result = ""; |
| |
| switch (type) { |
| case 'poem': |
| result = `The Ballad of ${appState.currentUser === 'piglet' ? 'Piglet' : 'Henley'}\n\n` + |
| `Roses are red,\nViolets are blue,\n${input}\nAnd so are you!`; |
| break; |
| case 'comic': |
| result = `COMIC STRIP: "${input.toUpperCase()}"\n\n` + |
| `[Frame 1]: ${appState.currentUser === 'piglet' ? 'Piglet' : 'Henley'} looking confused\n` + |
| `[Frame 2]: ${input}\n` + |
| `[Frame 3]: Both laughing hysterically`; |
| break; |
| case 'meme': |
| result = `MEME: ${appState.currentUser === 'piglet' ? 'Henley' : 'Piglet'} when ${input}\n\n` + |
| `[Top text]: WHEN ${input.toUpperCase()}\n` + |
| `[Bottom text]: SKIBIDI MODE ACTIVATED`; |
| break; |
| case 'song': |
| result = `🎵 ${input.toUpperCase()} 🎵\n\n` + |
| `(Verse 1)\n${input}\n${input}\n` + |
| `(Chorus)\nSkibidi bop bop yes yes\n${input}\n` + |
| `(Verse 2)\n${appState.currentUser === 'piglet' ? 'Henley' : 'Piglet'} joins in\n${input}`; |
| break; |
| case 'shakespeare': |
| result = `Act V, Scene II\n\n` + |
| `${appState.currentUser === 'piglet' ? 'PIGLET' : 'HENLEY'}\n` + |
| `"${shakespearify(input)}"\n\n` + |
| `[Exeunt, pursued by a bear]`; |
| break; |
| } |
| |
| // Add to stories |
| appState.stories.push({ |
| input, |
| type, |
| result, |
| timestamp: new Date().toISOString() |
| }); |
| |
| // Display result |
| storyResult.innerHTML = `<p class="neon-text-${type === 'poem' ? 'pink' : type === 'comic' ? 'blue' : type === 'meme' ? 'yellow' : 'green'}">${result.replace(/\n/g, '<br>')}</p>`; |
| storyInput.value = ""; |
| |
| // Save state |
| saveAppState(); |
| updateUI(); |
| } |
| |
| // Helper to Shakespeare-ify text |
| function shakespearify(text) { |
| const replacements = [ |
| ['I', 'Thy humble servant'], |
| ['you', 'thee'], |
| ['your', 'thine'], |
| ['cool', 'most wondrous'], |
| ['awesome', 'of most excellent virtue'], |
| ['hi', 'hark'], |
| ['hello', 'good morrow'], |
| ['dude', 'good sir'], |
| ['bro', 'dear brother'], |
| ['farted', 'did let forth a most foul wind'], |
| ['sprayed', 'did unleash the perfume of the gods'], |
| ['lol', 'verily, tis most humorous'], |
| ['funny', 'causing great mirth'], |
| ['hungry', 'in dire need of sustenance'], |
| ['tired', 'weary from life\'s toils'], |
| ['drunk', 'in cups'], |
| ['party', 'merrymaking'], |
| ['dance', 'caper about'], |
| ['music', 'sweet melodies'], |
| ['food', 'victuals'], |
| ['sleep', 'slumber'], |
| ['bathroom', 'privy'], |
| ['toilet', 'chamber pot'], |
| ['love', 'adore'], |
| ['hate', 'despise'], |
| ['friend', 'trusty companion'], |
| ['enemy', 'villainous knave'], |
| ['good', 'excellent'], |
| ['bad', 'most foul'], |
| ['happy', 'merry'], |
| ['sad', 'woeful'], |
| ['angry', 'full of wrath'], |
| ['crazy', 'mad'], |
| ['stupid', 'foolish'], |
| ['smart', 'wise'], |
| ['beautiful', 'fair'], |
| ['ugly', 'hideous'], |
| ['old', 'aged'], |
| ['new', 'fresh'], |
| ['big', 'large'], |
| ['small', 'tiny'], |
| ['fast', 'swift'], |
| ['slow', 'sluggish'], |
| ['hot', 'burning'], |
| ['cold', 'chilling'], |
| ['wet', 'damp'], |
| ['dry', 'parched'], |
| ['clean', 'spotless'], |
| ['dirty', 'filthy'], |
| ['rich', 'wealthy'], |
| ['poor', 'destitute'], |
| ['strong', 'mighty'], |
| ['weak', 'feeble'], |
| ['tall', 'lofty'], |
| ['short', 'diminutive'], |
| ['fat', 'portly'], |
| ['skinny', 'gaunt'], |
| ['nice', 'kind'], |
| ['mean', 'cruel'], |
| ['fun', 'merry'], |
| ['boring', 'tedious'], |
| ['exciting', 'thrilling'], |
| ['scary', 'frightful'], |
| ['silly', 'foolish'], |
| ['serious', 'grave'], |
| ['weird', 'strange'], |
| ['normal', 'ordinary'], |
| ['special', 'unique'], |
| ['common', 'mundane'], |
| ['rare', 'scarce'], |
| ['important', 'vital'], |
| ['unimportant', 'trivial'], |
| ['difficult', 'arduous'], |
| ['easy', 'simple'], |
| ['hard', 'tough'], |
| ['soft', 'gentle'], |
| ['loud', 'boisterous'], |
| ['quiet', 'silent'], |
| ['bright', 'radiant'], |
| ['dark', 'gloomy'], |
| ['colorful', 'vibrant'], |
| ['dull', 'drab'], |
| ['shiny', 'gleaming'], |
| ['matte', 'flat'], |
| ['smooth', 'even'], |
| ['rough', 'coarse'], |
| ['sharp', 'keen'], |
| ['blunt', 'dull'], |
| ['sweet', 'sugary'], |
| ['sour', 'tart'], |
| ['bitter', 'acrid'], |
| ['salty', 'briny'], |
| ['spicy', 'piquant'], |
| ['mild', 'bland'], |
| ['tasty', 'delicious'], |
| ['disgusting', 'revolting'], |
| ['smelly', 'malodorous'], |
| ['fragrant', 'aromatic'], |
| ['fresh', 'crisp'], |
| ['stale', 'musty'], |
| ['new', 'novel'], |
| ['old', 'ancient'], |
| ['young', 'youthful'], |
| ['modern', 'contemporary'], |
| ['ancient', 'archaic'], |
| ['future', 'forthcoming'], |
| ['past', 'bygone'], |
| ['present', 'current'], |
| ['now', 'at this very moment'], |
| ['then', 'at that time'], |
| ['soon', 'ere long'], |
| ['later', 'anon'], |
| ['never', 'not ever'], |
| ['always', 'forevermore'], |
| ['sometimes', 'on occasion'], |
| ['often', 'frequently'], |
| ['rarely', 'seldom'], |
| ['every', 'each and every'], |
| ['any', 'whichever'], |
| ['some', 'a few'], |
| ['many', 'numerous'], |
| ['few', 'scarce'], |
| ['all', 'every last'], |
| ['none', 'naught'], |
| ['more', 'additional'], |
| ['less', 'fewer'], |
| ['most', 'the majority'], |
| ['least', 'the minority'], |
| ['better', 'superior'], |
| ['worse', 'inferior'], |
| ['best', 'supreme'], |
| ['worst', 'most terrible'], |
| ['same', 'identical'], |
| ['different', 'distinct'], |
| ['similar', 'alike'], |
| ['opposite', 'contrary'], |
| ['true', 'veritable'], |
| ['false', 'untrue'], |
| ['real', 'genuine'], |
| ['fake', 'counterfeit'], |
| ['right', 'correct'], |
| ['wrong', 'incorrect'], |
| ['correct', 'accurate'], |
| ['incorrect', 'erroneous'], |
| ['exact', 'precise'], |
| ['approximate', 'rough'], |
| ['certain', 'definite'], |
| ['uncertain', 'doubtful'], |
| ['sure', 'confident'], |
| ['unsure', 'hesitant'], |
| ['clear', 'transparent'], |
| ['unclear', 'obscure'], |
| ['obvious', 'evident'], |
| ['subtle', 'delicate'], |
| ['simple', 'elementary'], |
| ['complex', 'complicated'], |
| ['easy', 'effortless'], |
| ['hard', 'difficult'], |
| ['possible', 'feasible'], |
| ['impossible', 'unattainable'], |
| ['likely', 'probable'], |
| ['unlikely', 'improbable'], |
| ['able', 'capable'], |
| ['unable', 'incapable'], |
| ['willing', 'ready'], |
| ['unwilling', 'reluctant'], |
| ['ready', 'prepared'], |
| ['unready', 'unprepared'], |
| ['happy', 'content'], |
| ['unhappy', 'discontent'], |
| ['pleased', 'satisfied'], |
| ['displeased', 'dissatisfied'], |
| ['excited', 'enthusiastic'], |
| ['bored', 'uninterested'], |
| ['interested', 'intrigued'], |
| ['disinterested', 'indifferent'], |
| ['surprised', 'astonished'], |
| ['unsurprised', 'expectant'], |
| ['shocked', 'stunned'], |
| ['unshocked', 'unfazed'], |
| ['amazed', 'awestruck'], |
| ['unamazed', 'unimpressed'], |
| ['impressed', 'admiring'], |
| ['unimpressed', 'unmoved'], |
| ['proud', 'dignified'], |
| ['ashamed', 'humiliated'], |
| ['confident', 'self-assured'], |
| ['insecure', 'self-conscious'], |
| ['brave', 'courageous'], |
| ['cowardly', 'timid'], |
| ['strong', 'resilient'], |
| ['weak', 'vulnerable'], |
| ['independent', 'self-reliant'], |
| ['dependent', 'reliant'], |
| ['free', 'unrestricted'], |
| ['trapped', 'confined'], |
| ['safe', 'secure'], |
| ['unsafe', 'dangerous'], |
| ['healthy', 'fit'], |
| ['unhealthy', 'ill'], |
| ['sick', 'ailing'], |
| ['well', 'healthy'], |
| ['injured', 'wounded'], |
| ['healed', 'recovered'], |
| ['dead', 'deceased'], |
| ['alive', 'living'], |
| ['awake', 'alert'], |
| ['asleep', 'slumbering'], |
| ['tired', 'weary'], |
| ['rested', 'refreshed'], |
| ['busy', 'occupied'], |
| ['free', 'available'], |
| ['calm', 'peaceful'], |
| ['anxious', 'nervous'], |
| ['relaxed', 'at ease'], |
| ['stressed', 'tense'], |
| ['patient', 'tolerant'], |
| ['impatient', 'restless'], |
| ['kind', 'compassionate'], |
| ['unkind', 'cruel'], |
| ['nice', 'pleasant'], |
| ['mean', 'nasty'], |
| ['friendly', 'amiable'], |
| ['unfriendly', 'hostile'], |
| ['generous', 'giving'], |
| ['selfish', 'greedy'], |
| ['honest', 'truthful'], |
| ['dishonest', 'deceitful'], |
| ['trustworthy', 'reliable'], |
| ['untrustworthy', 'unreliable'], |
| ['loyal', 'faithful'], |
| ['disloyal', 'treacherous'], |
| ['responsible', 'accountable'], |
| ['irresponsible', 'careless'], |
| ['mature', 'grown-up'], |
| ['immature', 'childish'], |
| ['polite', 'courteous'], |
| ['rude', 'impolite'], |
| ['respectful', 'considerate'], |
| ['disrespectful', 'insolent'], |
| ['grateful', 'thankful'], |
| ['ungrateful', 'unappreciative'], |
| ['humble', 'modest'], |
| ['arrogant', 'conceited'], |
| ['optimistic', 'hopeful'], |
| ['pessimistic', 'doubtful'], |
| ['realistic', 'practical'], |
| ['unrealistic', 'impractical'], |
| ['romantic', 'amorous'], |
| ['unromantic', 'unaffectionate'], |
| ['sensitive', 'perceptive'], |
| ['insensitive', 'obtuse'], |
| ['emotional', 'passionate'], |
| ['unemotional', 'stoic'], |
| ['logical', 'rational'], |
| ['illogical', 'irrational'], |
| ['intelligent', 'smart'], |
| ['unintelligent', 'stupid'], |
| ['wise', 'sage'], |
| ['foolish', 'unwise'], |
| ['educated', 'learned'], |
| ['uneducated', 'ignorant'], |
| ['experienced', 'seasoned'], |
| ['inexperienced', 'naive'], |
| ['skilled', 'talented'], |
| ['unskilled', 'incompetent'], |
| ['creative', 'imaginative'], |
| ['uncreative', 'uninspired'], |
| ['artistic', 'expressive'], |
| ['unartistic', 'dull'], |
| ['musical', 'melodic'], |
| ['unmusical', 'tone-deaf'], |
| ['athletic', 'fit'], |
| ['unathletic', 'clumsy'], |
| ['coordinated', 'graceful'], |
| ['uncoordinated', 'awkward'], |
| ['attractive', 'handsome'], |
| ['unattractive', 'ugly'], |
| ['beautiful', 'gorgeous'], |
| ['plain', 'ordinary'], |
| ['stylish', 'fashionable'], |
| ['unstylish', 'frumpy'], |
| ['clean', 'hygienic'], |
| ['dirty', 'unclean'], |
| ['neat', 'tidy'], |
| ['messy', 'disorganized'], |
| ['organized', 'systematic'], |
| ['disorganized', 'chaotic'], |
| ['efficient', 'productive'], |
| ['inefficient', 'wasteful'], |
| ['effective', 'successful'], |
| ['ineffective', 'unsuccessful'], |
| ['fast', 'quick'], |
| ['slow', 'sluggish'], |
| ['early', 'premature'], |
| ['late', 'delayed'], |
| ['on time', 'punctual'], |
| ['delayed', 'postponed'], |
| ['sudden', 'abrupt'], |
| ['gradual', 'progressive'], |
| ['immediate', 'instant'], |
| ['eventual', 'ultimate'], |
| ['temporary', 'transient'], |
| ['permanent', 'lasting'], |
| ['constant', 'steady'], |
| ['variable', 'changing'], |
| ['regular', 'routine'], |
| ['irregular', 'sporadic'], |
| ['frequent', 'common'], |
| ['infrequent', 'rare'], |
| ['usual', 'typical'], |
| ['unusual', 'atypical'], |
| ['normal', 'standard'], |
| ['abnormal', 'deviant'], |
| ['ordinary', 'mundane'], |
| ['extraordinary', 'remarkable'], |
| ['special', 'exceptional'], |
| ['generic', 'commonplace'], |
| ['unique', 'one-of-a-kind'], |
| ['identical', 'same'], |
| ['different', 'distinct'], |
| ['similar', 'alike'], |
| ['diverse', 'varied'], |
| ['uniform', 'consistent'], |
| ['mixed', 'assorted'], |
| ['pure', 'unadulterated'], |
| ['impure', 'contaminated'], |
| ['natural', 'organic'], |
| ['artificial', 'synthetic'], |
| ['real', 'genuine'], |
| ['fake', 'counterfeit'], |
| ['authentic', 'legitimate'], |
| ['inauthentic', 'phony'], |
| ['original', 'innovative'], |
| ['derivative', 'unoriginal'], |
| ['traditional', 'conventional'], |
| ['modern', 'contemporary'], |
| ['old-fashioned', 'outdated'], |
| ['newfangled', 'novel'], |
| ['current', 'up-to-date'], |
| ['obsolete', 'archaic'], |
| ['timeless', 'eternal'], |
| ['dated', 'passé'], |
| ['futuristic', 'ahead of its time'], |
| ['retro', 'nostalgic'], |
| ['classic', 'time-honored'], |
| ['trendy', 'fashionable'], |
| ['outdated', 'old hat'], |
| ['innovative', 'groundbreaking'], |
| ['conservative', 'traditional'], |
| ['progressive', 'forward-thinking'], |
| ['radical', 'extreme'], |
| ['moderate', 'middle-of-the-road'], |
| ['extreme', 'excessive'], |
| ['balanced', 'even-handed'], |
| ['unbalanced', 'lopsided'], |
| ['fair', 'just'], |
| ['unfair', 'biased'], |
| ['equal', 'equivalent'], |
| ['unequal', 'disproportionate'], |
| ['democratic', 'egalitarian'], |
| ['authoritarian', 'dictatorial'], |
| ['free', 'liberated'], |
| ['oppressed', 'subjugated'], |
| ['independent', 'self-governing'], |
| ['dependent', 'subordinate'], |
| ['sovereign', 'autonomous'], |
| ['colonial', 'dependent'], |
| ['patriotic', 'nationalistic'], |
| ['treasonous', 'seditionous'], |
| ['loyal', 'faithful'], |
| ['disloyal', 'treacherous'], |
| ['faithful', 'devoted'], |
| ['unfaithful', 'adulterous'], |
| ['trustworthy', 'dependable'], |
| ['untrustworthy', 'deceitful'], |
| ['honest', 'truthful'], |
| ['dishonest', 'deceptive'], |
| ['sincere', 'genuine'], |
| ['insincere', 'hypocritical'], |
| ['transparent', 'open'], |
| ['secretive', 'clandestine'], |
| ['outspoken', 'vocal'], |
| ['reserved', 'reticent'], |
| ['bold', 'daring'], |
| ['timid', 'shy'], |
| ['confident', 'self-assured'], |
| ['insecure', 'self-doubting'], |
| ['assertive', 'forceful'], |
| ['passive', 'submissive'], |
| ['aggressive', 'hostile'], |
| ['peaceful', 'nonviolent'], |
| ['violent', 'aggressive'], |
| ['calm', 'serene'], |
| ['anxious', 'nervous'], |
| ['relaxed', 'at ease'], |
| ['stressed', 'tense'], |
| ['patient', 'tolerant'], |
| ['impatient', 'restless'], |
| ['understanding', 'compassionate'], |
| ['unsympathetic', 'callous'], |
| ['empathetic', 'caring'], |
| ['indifferent', 'apathetic'], |
| ['kind', 'benevolent'], |
| ['cruel', 'mean'], |
| ['gentle', 'tender'], |
| ['rough', 'harsh'], |
| ['loving', 'affectionate'], |
| ['hateful', 'spiteful'], |
| ['friendly', 'amiable'], |
| ['unfriendly', 'hostile'], |
| ['sociable', 'gregarious'], |
| ['antisocial', 'reclusive'], |
| ['outgoing', 'extroverted'], |
| ['introverted', 'shy'], |
| ['fun', 'enjoyable'], |
| ['boring', 'tedious'], |
| ['exciting', 'thrilling'], |
| ['dull', 'uninteresting'], |
| ['interesting', 'engaging'], |
| ['uninteresting', 'mundane'], |
| ['entertaining', 'amusing'], |
| ['tedious', 'monotonous'], |
| ['humorous', 'funny'], |
| ['serious', 'grave'], |
| ['playful', 'frolicsome'], |
| ['solemn', 'somber'], |
| ['cheerful', 'happy'], |
| ['gloomy', 'morose'], |
| ['optimistic', 'hopeful'], |
| ['pessimistic', 'doubtful'], |
| ['realistic', 'practical'], |
| ['unrealistic', 'impractical'], |
| ['romantic', 'amorous'], |
| ['unromantic', 'unaffectionate'], |
| ['sentimental', 'nostalgic'], |
| ['unsentimental', 'pragmatic'], |
| ['spiritual', 'devout'], |
| ['secular', 'worldly'], |
| ['religious', 'pious'], |
| ['irreligious', 'atheistic'], |
| ['moral', 'ethical'], |
| ['immoral', 'unethical'], |
| ['virtuous', 'righteous'], |
| ['sinful', 'wicked'], |
| ['pure', 'innocent'], |
| ['impure', 'corrupt'], |
| ['chaste', 'celibate'], |
| ['promiscuous', 'licentious'], |
| ['modest', 'humble'], |
| ['immodest', 'brazen'], |
| ['decent', 'proper'], |
| ['indecent', 'obscene'], |
| ['polite', 'courteous'], |
| ['rude', 'impolite'], |
| ['respectful', 'considerate'], |
| ['disrespectful', 'insolent'], |
| ['grateful', 'thankful'], |
| ['ungrateful', 'unappreciative'], |
| ['humble', 'modest'], |
| ['arrogant', 'conceited'], |
| ['proud', 'dignified'], |
| ['ashamed', 'humiliated'], |
| ['confident', 'self-assured'], |
| ['insecure', 'self-conscious'], |
| ['brave', 'courageous'], |
| ['cowardly', 'timid'], |
| ['strong', 'resilient'], |
| ['weak', 'vulnerable'], |
| ['independent', 'self-reliant'], |
| ['dependent', 'reliant'], |
| ['free', 'unrestricted'], |
| ['trapped', 'confined'], |
| ['safe', 'secure'], |
| ['unsafe', 'dangerous'], |
| ['healthy', 'fit'], |
| ['unhealthy', 'ill'], |
| ['sick', 'ailing'], |
| ['well', 'healthy'], |
| ['injured', 'wounded'], |
| ['healed', 'recovered'], |
| ['dead', 'deceased'], |
| ['alive', 'living'], |
| ['awake', 'alert'], |
| ['asleep', 'slumbering'], |
| ['tired', 'weary'], |
| ['rested', 'refreshed'], |
| ['busy', 'occupied'], |
| ['free', 'available'], |
| ['calm', 'peaceful'], |
| ['anxious', 'nervous'], |
| ['relaxed', 'at ease'], |
| ['stressed', 'tense'], |
| ['patient', 'tolerant'], |
| ['impatient', 'restless'], |
| ['kind', 'compassionate'], |
| ['unkind', 'cruel'], |
| ['nice', 'pleasant'], |
| ['mean', 'nasty'], |
| ['friendly', 'amiable'], |
| ['unfriendly', 'hostile'], |
| ['generous', 'giving'], |
| ['selfish', 'greedy'], |
| ['honest', 'truthful'], |
| ['dishonest', 'deceitful'], |
| ['trustworthy', 'reliable'], |
| ['untrustworthy', 'unreliable'], |
| ['loyal', 'faithful'], |
| ['disloyal', 'treacherous'], |
| ['responsible', 'accountable'], |
| ['irresponsible', 'careless'], |
| ['mature', 'grown-up'], |
| ['immature', 'childish'], |
| ['polite', 'courteous'], |
| ['rude', 'impolite'], |
| ['respectful', 'considerate'], |
| ['disrespectful', 'insolent'], |
| ['grateful', 'thankful'], |
| ['ungrateful', 'unappreciative'], |
| ['humble', 'modest'], |
| ['arrogant', 'conceited'], |
| ['optimistic', 'hopeful'], |
| ['pessimistic', 'doubtful'], |
| ['realistic', 'practical'], |
| ['unrealistic', 'impractical'], |
| ['romantic', 'amorous'], |
| ['unromantic', 'unaffectionate'], |
| ['sensitive', 'perceptive'], |
| ['insensitive', 'obtuse'], |
| ['emotional', 'passionate'], |
| ['unemotional', 'stoic'], |
| ['logical', 'rational'], |
| ['illogical', 'irrational'], |
| ['intelligent', 'smart'], |
| ['unintelligent', 'stupid'], |
| ['wise', 'sage'], |
| ['foolish', 'unwise'], |
| ['educated', 'learned'], |
| ['uneducated', 'ignorant'], |
| ['experienced', 'seasoned'], |
| ['inexperienced', 'naive'], |
| ['skilled', 'talented'], |
| ['unskilled', 'incompetent'], |
| ['creative', 'imaginative'], |
| ['uncreative', 'uninspired'], |
| ['artistic', 'expressive'], |
| ['unartistic', 'dull'], |
| ['musical', 'melodic'], |
| ['unmusical', 'tone-deaf'], |
| ['athletic', 'fit'], |
| ['unathletic', 'clumsy'], |
| ['coordinated', 'graceful'], |
| ['uncoordinated', 'awkward'], |
| ['attractive', 'handsome'], |
| ['unattractive', 'ugly'], |
| ['beautiful', 'gorgeous'], |
| ['plain', 'ordinary'], |
| ['stylish', 'fashionable'], |
| ['unstylish', 'frumpy'], |
| ['clean', 'hygienic'], |
| ['dirty', 'unclean'], |
| ['neat', 'tidy'], |
| ['messy', 'disorganized'], |
| ['organized', 'systematic'], |
| ['disorganized', 'chaotic'], |
| ['efficient', 'productive'], |
| ['inefficient', 'wasteful'], |
| ['effective', 'successful'], |
| ['ineffective', 'unsuccessful'], |
| ['fast', 'quick'], |
| ['slow', 'sluggish'], |
| ['early', 'premature'], |
| ['late', 'delayed'], |
| ['on time', 'punctual'], |
| ['delayed', 'postponed'], |
| ['sudden', 'abrupt'], |
| ['gradual', 'progressive'], |
| ['immediate', 'instant'], |
| ['eventual', 'ultimate'], |
| ['temporary', 'transient'], |
| ['permanent', 'lasting'], |
| ['constant', 'steady'], |
| ['variable', 'changing'], |
| ['regular', 'routine'], |
| ['irregular', 'sporadic'], |
| ['frequent', 'common'], |
| ['infrequent', 'rare'], |
| ['usual', 'typical'], |
| ['unusual', 'atypical'], |
| ['normal', 'standard'], |
| ['abnormal', 'deviant'], |
| ['ordinary', 'mundane'], |
| ['extraordinary', 'remarkable'], |
| ['special', 'exceptional'], |
| ['generic', 'commonplace'], |
| ['unique', 'one-of-a-kind'], |
| ['identical', 'same'], |
| ['different', 'distinct'], |
| ['similar', 'alike'], |
| ['diverse', 'varied'], |
| ['uniform', 'consistent'], |
| ['mixed', 'assorted'], |
| ['pure', 'unadulterated'], |
| ['impure', 'contaminated'], |
| ['natural', 'organic'], |
| ['artificial', 'synthetic'], |
| ['real', 'genuine'], |
| ['fake', 'counterfeit'], |
| ['authentic', 'legitimate'], |
| ['inauthentic', 'phony'], |
| ['original', 'innovative'], |
| ['derivative', 'unoriginal'], |
| ['traditional', 'conventional'], |
| ['modern', 'contemporary'], |
| ['old-fashioned', 'outdated'], |
| ['newfangled', 'novel'], |
| ['current', 'up-to-date'], |
| ['obsolete', 'archaic'], |
| ['timeless', 'eternal'], |
| ['dated', 'passé'], |
| ['futuristic', 'ahead of its time'], |
| ['retro', 'nostalgic'], |
| ['classic', 'time-honored'], |
| ['trendy', 'fashionable'], |
| ['outdated', 'old hat'], |
| ['innovative', 'groundbreaking'], |
| ['conservative', 'traditional'], |
| ['progressive', 'forward-thinking'], |
| ['radical', 'extreme'], |
| ['moderate', 'middle-of-the-road'], |
| ['extreme', 'excessive'], |
| ['balanced', 'even-handed'], |
| ['unbalanced', 'lopsided'], |
| ['fair', 'just'], |
| ['unfair', 'biased'], |
| ['equal', 'equivalent'], |
| ['unequal', 'disproportionate'], |
| ['democratic', 'egalitarian'], |
| ['authoritarian', 'dictatorial'], |
| ['free', 'liberated'], |
| ['oppressed', 'subjugated'], |
| ['independent', 'self-governing'], |
| ['dependent', 'subordinate'], |
| ['sovereign', 'autonomous'], |
| ['colonial', 'dependent'], |
| ['patriotic', 'nationalistic'], |
| ['treasonous', 'seditionous'], |
| ['loyal', 'faithful'], |
| ['disloyal', 'treacherous'], |
| ['faithful', 'devoted'], |
| ['unfaithful', 'adulterous'], |
| ['trustworthy', 'dependable'], |
| ['untrustworthy', 'deceitful'], |
| ['honest', 'truthful'], |
| ['dishonest', 'deceptive'], |
| ['sincere', 'genuine'], |
| ['insincere', 'hypocritical'], |
| ['transparent', 'open'], |
| ['secretive', 'clandestine'], |
| ['outspoken', 'vocal'], |
| ['reserved', 'reticent'], |
| ['bold', 'daring'], |
| ['timid', 'shy'], |
| ['confident', 'self-assured'], |
| ['insecure', 'self-doubting'], |
| ['assertive', 'forceful'], |
| ['passive', 'submissive'], |
| ['aggressive', 'hostile'], |
| ['peaceful', 'nonviolent'], |
| ['violent', 'aggressive'], |
| ['calm', 'serene'], |
| ['anxious', 'nervous'], |
| ['relaxed', 'at ease'], |
| ['stressed', 'tense'], |
| ['patient', 'tolerant'], |
| ['impatient', 'restless'], |
| ['understanding', 'compassionate'], |
| ['unsympathetic', 'callous'], |
| ['empathetic', 'caring'], |
| ['indifferent', 'apathetic'], |
| ['kind', 'benevolent'], |
| ['cruel', 'mean'], |
| ['gentle', 'tender'], |
| ['rough', 'harsh'], |
| ['loving', 'affectionate'], |
| ['hateful', 'spiteful'], |
| ['friendly', 'amiable'], |
| ['unfriendly', 'hostile'], |
| ['sociable', 'gregarious'], |
| ['antisocial', 'reclusive'], |
| ['outgoing', 'extroverted'], |
| ['introverted', 'shy'], |
| ['fun', 'enjoyable'], |
| ['boring', 'tedious'], |
| ['exciting', 'thrilling'], |
| ['dull', 'uninteresting'], |
| ['interesting', 'engaging'], |
| ['uninteresting', 'mundane'], |
| ['entertaining', 'amusing'], |
| ['tedious', 'monotonous'], |
| ['humorous', 'funny'], |
| ['serious', 'grave'], |
| ['playful', 'frolicsome'], |
| ['solemn', 'somber'], |
| ['cheerful', 'happy'], |
| ['gloomy', 'morose'], |
| ['optimistic', 'hopeful'], |
| ['pessimistic', 'doubtful'], |
| ['realistic', 'practical'], |
| ['unrealistic', 'impractical'], |
| ['romantic', 'amorous'], |
| ['unromantic', 'unaffectionate'], |
| ['sentimental', 'nostalgic'], |
| ['unsentimental', 'pragmatic'], |
| ['spiritual', 'devout'], |
| ['secular', 'worldly'], |
| ['religious', 'pious'], |
| ['irreligious', 'atheistic'], |
| ['moral', 'ethical'], |
| ['immoral', 'unethical'], |
| ['virtuous', 'righteous'], |
| ['sinful', 'wicked'], |
| ['pure', 'innocent'], |
| ['impure', 'corrupt'], |
| ['chaste', 'celibate'], |
| ['promiscuous', 'licentious'], |
| ['modest', 'humble'], |
| ['immodest', 'brazen'], |
| ['decent', 'proper'], |
| ['indecent', 'obscene'], |
| ['polite', 'courteous'], |
| ['rude', 'impolite'], |
| ['respectful', 'considerate'], |
| ['disrespectful', 'insolent'], |
| ['grateful', 'thankful'], |
| ['ungrateful', 'unappreciative'], |
| ['humble', 'modest'], |
| ['arrogant', 'conceited'], |
| ['proud', 'dignified'], |
| ['ashamed', 'humiliated'], |
| ['confident', 'self-assured'], |
| ['insecure', 'self-conscious'], |
| ['brave', 'courageous'], |
| ['cowardly', 'timid'], |
| ['strong', 'resilient'], |
| ['weak', 'vulnerable'], |
| ['independent', 'self-reliant'], |
| ['dependent', 'reliant'], |
| ['free', 'unrestricted'], |
| ['trapped', 'confined'], |
| ['safe', 'secure'], |
| ['unsafe', 'dangerous'], |
| ['healthy', 'fit'], |
| ['unhealthy', 'ill'], |
| ['sick', 'ailing'], |
| ['well', 'healthy'], |
| ['injured', 'wounded'], |
| ['healed', 'recovered'], |
| ['dead', 'deceased'], |
| ['alive', 'living'], |
| ['awake', 'alert'], |
| ['asleep', 'slumbering'], |
| ['tired', 'weary'], |
| ['rested', 'refreshed'], |
| ['busy', 'occupied'], |
| ['free', 'available'], |
| ['calm', 'peaceful'], |
| ['anxious', 'nervous'], |
| ['relaxed', 'at ease'], |
| ['stressed', 'tense'], |
| ['patient', 'tolerant'], |
| ['impatient', 'restless'], |
| ['kind', 'compassionate'], |
| ['unkind', 'cruel'], |
| ['nice', 'pleasant'], |
| ['mean', 'nasty'], |
| ['friendly', 'amiable'], |
| ['unfriendly', 'hostile'], |
| ['generous', 'giving'], |
| ['selfish', 'greedy'], |
| ['honest', 'truthful'], |
| ['dishonest', 'deceitful'], |
| ['trustworthy', 'reliable'], |
| ['untrustworthy', 'unreliable'], |
| ['loyal', 'faithful'], |
| ['disloyal', 'treacherous'], |
| ['responsible', 'accountable'], |
| ['irresponsible', 'careless'], |
| ['mature', 'grown-up'], |
| ['immature', 'childish'], |
| ['polite', 'courteous'], |
| ['rude', 'impolite'], |
| ['respectful', 'considerate'], |
| ['disrespectful', 'insolent'], |
| ['grateful', 'thankful'], |
| ['ungrateful', 'unappreciative'], |
| ['humble', 'modest'], |
| ['arrogant', 'conceited'], |
| ['optimistic', 'hopeful'], |
| ['pessimistic', 'doubtful'], |
| ['realistic', 'practical'], |
| ['unrealistic', 'impractical'], |
| ['romantic', 'amorous'], |
| ['unromantic', 'unaffectionate'], |
| ['sensitive', 'perceptive'], |
| ['insensitive', 'obtuse'], |
| ['emotional', 'passionate'], |
| ['unemotional', 'stoic'], |
| ['logical', 'rational'], |
| ['illogical', 'irrational'], |
| ['intelligent', 'smart'], |
| ['unintelligent', 'stupid'], |
| ['wise', 'sage'], |
| ['foolish', 'unwise'], |
| ['educated', 'learned'], |
| ['uneducated', 'ignorant'], |
| ['experienced', 'seasoned'], |
| ['inexperienced', 'naive'], |
| ['skilled', 'talented'], |
| ['unskilled', 'incompetent'], |
| ['creative', 'imaginative'], |
| ['uncreative', 'uninspired'], |
| ['artistic', 'expressive'], |
| ['unartistic', 'dull'], |
| ['musical', 'melodic'], |
| ['unmusical', 'tone-deaf'], |
| ['athletic', 'fit'], |
| ['unathletic', 'clumsy'], |
| ['coordinated', 'graceful'], |
| ['uncoordinated', 'awkward'], |
| ['attractive', 'handsome'], |
| ['unattractive', 'ugly'], |
| ['beautiful', 'gorgeous'], |
| ['plain', 'ordinary'], |
| ['stylish', 'fashionable'], |
| ['unstylish', 'frumpy'], |
| ['clean', 'hygienic'], |
| ['dirty', 'unclean'], |
| ['neat', 'tidy'], |
| ['messy', 'disorganized'], |
| ['organized', 'systematic'], |
| ['disorganized', 'chaotic'], |
| ['efficient', 'productive'], |
| ['inefficient', 'wasteful'], |
| ['effective', 'successful'], |
| ['ineffective', 'unsuccessful'], |
| ['fast', 'quick'], |
| ['slow', 'sluggish'], |
| ['early', 'premature'], |
| ['late', 'delayed'], |
| ['on time', 'punctual'], |
| ['delayed', 'postponed'], |
| ['sudden', 'abrupt'], |
| ['gradual', 'progressive'], |
| ['immediate', 'instant'], |
| ['eventual', 'ultimate'], |
| ['temporary', 'transient'], |
| ['permanent', 'lasting'], |
| ['constant', 'steady'], |
| ['variable', 'changing'], |
| ['regular', 'routine'], |
| ['irregular', 'sporadic'], |
| ['frequent', 'common'], |
| ['infrequent', 'rare'], |
| ['usual', 'typical'], |
| ['unusual', 'atypical'], |
| ['normal', 'standard'], |
| ['abnormal', 'deviant'], |
| ['ordinary', 'mundane'], |
| ['extraordinary', 'remarkable'], |
| ['special', 'exceptional'], |
| ['generic', 'commonplace'], |
| ['unique', 'one-of-a-kind'], |
| ['identical', 'same'], |
| ['different', 'distinct'], |
| ['similar', 'alike'], |
| ['diverse', 'varied'], |
| ['uniform', 'consistent'], |
| ['mixed', 'assorted'], |
| ['pure', 'unadulterated'], |
| ['impure', 'contaminated'], |
| ['natural', 'organic'], |
| ['artificial', 'synthetic'], |
| ['real', 'genuine'], |
| ['fake', 'counterfeit'], |
| ['authentic', 'legitimate'], |
| ['inauthentic', 'phony'], |
| ['original', 'innovative'], |
| ['derivative', 'unoriginal'], |
| ['traditional', 'conventional'], |
| ['modern', 'contemporary'], |
| ['old-fashioned', 'outdated'], |
| ['newfangled', 'novel'], |
| ['current', 'up-to-date'], |
| ['obsolete', 'archaic'], |
| ['timeless', 'eternal'], |
| ['dated', 'passé'], |
| ['futuristic', 'ahead of its time'], |
| ['retro', 'nostalgic'], |
| ['classic', 'time-honored'], |
| ['trendy', 'fashionable'], |
| ['outdated', 'old hat'], |
| ['innovative', 'groundbreaking'], |
| ['conservative', 'traditional'], |
| ['progressive', 'forward-thinking'], |
| ['radical', 'extreme'], |
| ['moderate', 'middle-of-the-road'], |
| ['extreme', 'excessive'], |
| ['balanced', 'even-handed'], |
| ['unbalanced', 'lopsided'], |
| ['fair', 'just'], |
| ['unfair', 'biased'], |
| ['equal', 'equivalent'], |
| ['unequal', 'disproportionate'], |
| ['democratic', 'egalitarian'], |
| ['authoritarian', 'dictatorial'], |
| ['free', 'liberated'], |
| ['oppressed', 'subjugated'], |
| ['independent', 'self-governing'], |
| ['dependent', 'subordinate'], |
| ['sovereign', 'autonomous'], |
| ['colonial', 'dependent'], |
| ['patriotic', 'nationalistic'], |
| ['treasonous', 'seditionous'], |
| ['loyal', 'faithful'], |
| ['disloyal', 'treacherous'], |
| ['faithful', 'devoted'], |
| ['unfaithful', 'adulterous'], |
| ['trustworthy', 'dependable'], |
| ['untrustworthy', 'deceitful'], |
| ['honest', 'truthful'], |
| ['dishonest', 'deceptive'], |
| ['sincere', 'genuine'], |
| ['insincere', 'hypocritical'], |
| ['transparent', 'open'], |
| ['secretive', 'clandestine'], |
| ['outspoken', 'vocal'], |
| ['reserved', 'reticent'], |
| ['bold', 'daring'], |
| ['timid', 'shy'], |
| ['confident', 'self-assured'], |
| ['insecure', 'self-doubting'], |
| ['assertive', 'forceful'], |
| ['passive', 'submissive'], |
| ['aggressive', 'hostile'], |
| ['peaceful', 'nonviolent'], |
| ['violent', 'aggressive'], |
| ['calm', 'serene'], |
| ['anxious', 'nervous'], |
| ['relaxed', 'at ease'], |
| ['stressed', 'tense'], |
| ['patient', 'tolerant'], |
| ['impatient', 'restless'], |
| ['understanding', 'compassionate'], |
| ['unsympathetic', 'callous'], |
| ['empathetic', 'caring'], |
| ['indifferent', 'apathetic'], |
| ['kind', 'benevolent'], |
| ['cruel', 'mean'], |
| ['gentle', 'tender'], |
| ['rough', 'harsh'], |
| ['loving', 'affectionate'], |
| ['hateful', 'spiteful'], |
| ['friendly', 'amiable'], |
| ['unfriendly', 'hostile'], |
| ['sociable', 'gregarious'], |
| ['antisocial', 'reclusive'], |
| ['outgoing', 'extroverted'], |
| ['introverted', 'shy'], |
| ['fun', 'enjoyable'], |
| ['boring', 'tedious'], |
| ['exciting', 'thrilling'], |
| ['dull', 'uninteresting'], |
| ['interesting', 'engaging'], |
| ['uninteresting', 'mundane'], |
| ['entertaining', 'amusing'], |
| ['tedious', 'monotonous'], |
| ['humorous', 'funny'], |
| ['serious', 'grave'], |
| ['playful', 'frolicsome'], |
| ['solemn', 'somber'], |
| ['cheerful', 'happy'], |
| ['gloomy', 'morose'], |
| ['optimistic', 'hopeful'], |
| ['pessimistic', 'doubtful'], |
| ['realistic', 'practical'], |
| ['unrealistic', 'impractical'], |
| ['romantic', 'amorous'], |
| ['unrom |
| </html> |