|
|
<!DOCTYPE html> |
|
|
<html lang="en"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>Blue Sky Empire: Meth Tycoon</title> |
|
|
<link rel="icon" type="image/x-icon" href="https://static.photos/blue/200x200/42"> |
|
|
<script src="https://cdn.tailwindcss.com"></script> |
|
|
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> |
|
|
<script src="https://unpkg.com/feather-icons"></script> |
|
|
<script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.net.min.js"></script> |
|
|
<script src="https://cdn.jsdelivr.net/npm/animejs@3.2.1/lib/anime.min.js"></script> |
|
|
<style> |
|
|
.crystal-animation { |
|
|
animation: float 3s ease-in-out infinite; |
|
|
} |
|
|
@keyframes float { |
|
|
0%, 100% { transform: translateY(0); } |
|
|
50% { transform: translateY(-20px); } |
|
|
} |
|
|
.progress-bar { |
|
|
transition: width 0.5s ease; |
|
|
} |
|
|
</style> |
|
|
</head> |
|
|
<body class="bg-gray-900 text-blue-100"> |
|
|
<div id="vanta-bg" class="fixed inset-0 z-0"></div> |
|
|
<div class="relative z-10 min-h-screen"> |
|
|
|
|
|
<header class="bg-blue-900/80 backdrop-blur-md border-b border-blue-700"> |
|
|
<div class="container mx-auto px-4 py-3 flex justify-between items-center"> |
|
|
<div class="flex items-center space-x-2"> |
|
|
<i data-feather="alert-triangle" class="text-blue-300"></i> |
|
|
<h1 class="text-xl font-bold text-blue-100">Blue Sky Empire</h1> |
|
|
</div> |
|
|
<div class="flex items-center space-x-4"> |
|
|
<div class="hidden md:flex items-center space-x-2 bg-blue-800/50 px-3 py-1 rounded-full"> |
|
|
<i data-feather="dollar-sign" class="text-blue-200"></i> |
|
|
<span id="money-counter" class="font-mono">$0</span> |
|
|
</div> |
|
|
<div class="hidden md:flex items-center space-x-2 bg-blue-800/50 px-3 py-1 rounded-full"> |
|
|
<i data-feather="activity" class="text-blue-200"></i> |
|
|
<span id="heat-meter" class="font-mono">0%</span> |
|
|
</div> |
|
|
<button id="menu-toggle" class="md:hidden"> |
|
|
<i data-feather="menu"></i> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
</header> |
|
|
|
|
|
|
|
|
<main class="container mx-auto px-4 py-6"> |
|
|
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6"> |
|
|
|
|
|
<div class="lg:col-span-2 space-y-6"> |
|
|
|
|
|
<div class="bg-blue-900/70 backdrop-blur-sm rounded-lg border border-blue-700 p-4"> |
|
|
<div class="flex justify-between items-center mb-4"> |
|
|
<h2 class="text-lg font-bold text-blue-100">Chemical Lab</h2> |
|
|
<div class="text-xs bg-blue-800/50 px-2 py-1 rounded-full"> |
|
|
<span id="production-rate">0</span> units/min |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="grid grid-cols-2 md:grid-cols-4 gap-4"> |
|
|
|
|
|
<div class="bg-blue-800/50 rounded-lg p-3 border border-blue-700/50 hover:border-blue-500 transition cursor-pointer"> |
|
|
<div class="flex justify-center mb-2"> |
|
|
<i data-feather="flask" class="text-blue-300"></i> |
|
|
</div> |
|
|
<h3 class="text-sm font-semibold text-center">Basic Flask</h3> |
|
|
<p class="text-xs text-blue-200 text-center">+0.1 units/min</p> |
|
|
<button class="w-full mt-2 bg-blue-700 hover:bg-blue-600 text-xs py-1 rounded"> |
|
|
$100 |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
<div class="bg-blue-800/50 rounded-lg p-3 border border-blue-700/50 opacity-50 cursor-not-allowed"> |
|
|
<div class="flex justify-center mb-2"> |
|
|
<i data-feather="wind" class="text-blue-300"></i> |
|
|
</div> |
|
|
<h3 class="text-sm font-semibold text-center">Ventilation</h3> |
|
|
<p class="text-xs text-blue-200 text-center">Unlocks at $500</p> |
|
|
</div> |
|
|
|
|
|
|
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="bg-blue-900/70 backdrop-blur-sm rounded-lg border border-blue-700 p-4"> |
|
|
<h2 class="text-lg font-bold text-blue-100 mb-4">Distribution Network</h2> |
|
|
<div class="space-y-3"> |
|
|
<div class="flex items-center justify-between bg-blue-800/40 p-3 rounded-lg"> |
|
|
<div class="flex items-center space-x-3"> |
|
|
<div class="w-10 h-10 rounded-full bg-blue-700 flex items-center justify-center"> |
|
|
<i data-feather="truck" class="text-blue-300"></i> |
|
|
</div> |
|
|
<div> |
|
|
<h3 class="font-medium">Street Sales</h3> |
|
|
<p class="text-xs text-blue-300">Sell 1 unit for $50</p> |
|
|
</div> |
|
|
</div> |
|
|
<button |
|
|
id="sell-button" |
|
|
class="bg-blue-700 hover:bg-blue-600 px-3 py-1 text-sm rounded-full disabled:opacity-50 disabled:cursor-not-allowed" |
|
|
:disabled="gameState.product < 1" |
|
|
> |
|
|
Sell |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="bg-blue-900/70 backdrop-blur-sm rounded-lg border border-blue-700 p-4"> |
|
|
<h2 class="text-lg font-bold text-blue-100 mb-4">Crew Management</h2> |
|
|
<div class="space-y-3"> |
|
|
|
|
|
<div class="flex items-center justify-between bg-blue-800/40 p-3 rounded-lg"> |
|
|
<div class="flex items-center space-x-3"> |
|
|
<div class="w-10 h-10 rounded-full bg-blue-700 flex items-center justify-center"> |
|
|
<i data-feather="user" class="text-blue-300"></i> |
|
|
</div> |
|
|
<div> |
|
|
<h3 class="font-medium">Street Dealer</h3> |
|
|
<p class="text-xs text-blue-300">+5% sales speed</p> |
|
|
</div> |
|
|
</div> |
|
|
<button class="bg-blue-700 hover:bg-blue-600 px-3 py-1 text-sm rounded-full"> |
|
|
$250 |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="space-y-6"> |
|
|
|
|
|
<div class="bg-blue-900/70 backdrop-blur-sm rounded-lg border border-blue-700 p-4 flex flex-col items-center"> |
|
|
<div class="crystal-animation mb-4"> |
|
|
<img src="https://static.photos/blue/200x200/7" alt="Blue Crystal" class="w-24 h-24 object-contain"> |
|
|
</div> |
|
|
<h2 class="text-xl font-bold text-blue-100 mb-2" id="product-count">0 Units</h2> |
|
|
<div class="w-full bg-blue-800/50 h-2 rounded-full mb-3"> |
|
|
<div id="production-progress" class="h-full bg-blue-400 rounded-full progress-bar" style="width: 0%"></div> |
|
|
</div> |
|
|
<button id="manual-produce" class="bg-blue-600 hover:bg-blue-500 px-6 py-2 rounded-full font-medium flex items-center"> |
|
|
<i data-feather="zap" class="mr-2"></i> Cook Batch |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="bg-blue-900/70 backdrop-blur-sm rounded-lg border border-blue-700 p-4"> |
|
|
<div class="flex justify-between items-center mb-2"> |
|
|
<h2 class="font-bold text-blue-100">DEA Heat</h2> |
|
|
<span class="text-xs bg-blue-800/50 px-2 py-1 rounded-full">Low Risk</span> |
|
|
</div> |
|
|
<div class="w-full bg-blue-800/30 h-4 rounded-full mb-2"> |
|
|
<div id="heat-progress" class="h-full bg-red-500 rounded-full progress-bar" style="width: 5%"></div> |
|
|
</div> |
|
|
<p class="text-xs text-blue-300">Produce carefully to avoid detection!</p> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="bg-blue-900/70 backdrop-blur-sm rounded-lg border border-blue-700 p-4"> |
|
|
<h2 class="font-bold text-blue-100 mb-2">Events</h2> |
|
|
<div class="text-sm text-blue-200 italic"> |
|
|
"Your operation is running smoothly... for now." |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</main> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="fixed bottom-0 left-0 right-0 bg-blue-900/80 backdrop-blur-md border-t border-blue-700 md:hidden"> |
|
|
<div class="container mx-auto px-4 py-2 flex justify-between items-center"> |
|
|
<div class="flex items-center space-x-2"> |
|
|
<i data-feather="dollar-sign" class="text-blue-200"></i> |
|
|
<span id="mobile-money" class="font-mono text-sm">$0</span> |
|
|
</div> |
|
|
<div class="flex items-center space-x-2"> |
|
|
<i data-feather="activity" class="text-blue-200"></i> |
|
|
<span id="mobile-heat" class="font-mono text-sm">0%</span> |
|
|
</div> |
|
|
<div class="flex items-center space-x-2"> |
|
|
<i data-feather="package" class="text-blue-200"></i> |
|
|
<span id="mobile-product" class="font-mono text-sm">0</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<script> |
|
|
|
|
|
VANTA.NET({ |
|
|
el: "#vanta-bg", |
|
|
mouseControls: true, |
|
|
touchControls: true, |
|
|
gyroControls: false, |
|
|
minHeight: 200.00, |
|
|
minWidth: 200.00, |
|
|
scale: 1.00, |
|
|
scaleMobile: 1.00, |
|
|
color: 0x3b82f6, |
|
|
backgroundColor: 0x111827, |
|
|
points: 10.00, |
|
|
maxDistance: 22.00, |
|
|
spacing: 17.00 |
|
|
}); |
|
|
|
|
|
let gameState = { |
|
|
money: 0, |
|
|
product: 0, |
|
|
heat: 0, |
|
|
productionRate: 0, |
|
|
autoProduction: 0 |
|
|
}; |
|
|
|
|
|
const moneyCounter = document.getElementById('money-counter'); |
|
|
const mobileMoney = document.getElementById('mobile-money'); |
|
|
const heatMeter = document.getElementById('heat-meter'); |
|
|
const mobileHeat = document.getElementById('mobile-heat'); |
|
|
const productCount = document.getElementById('product-count'); |
|
|
const mobileProduct = document.getElementById('mobile-product'); |
|
|
const productionRate = document.getElementById('production-rate'); |
|
|
const productionProgress = document.getElementById('production-progress'); |
|
|
const heatProgress = document.getElementById('heat-progress'); |
|
|
const manualProduce = document.getElementById('manual-produce'); |
|
|
|
|
|
|
|
|
function updateUI() { |
|
|
moneyCounter.textContent = '$' + Math.floor(gameState.money).toLocaleString(); |
|
|
mobileMoney.textContent = '$' + Math.floor(gameState.money).toLocaleString(); |
|
|
heatMeter.textContent = Math.floor(gameState.heat) + '%'; |
|
|
mobileHeat.textContent = Math.floor(gameState.heat) + '%'; |
|
|
productCount.textContent = Math.floor(gameState.product) + ' Units'; |
|
|
mobileProduct.textContent = Math.floor(gameState.product); |
|
|
productionRate.textContent = gameState.productionRate.toFixed(1); |
|
|
productionProgress.style.width = (gameState.product % 1) * 100 + '%'; |
|
|
heatProgress.style.width = gameState.heat + '%'; |
|
|
} |
|
|
|
|
|
|
|
|
manualProduce.addEventListener('click', () => { |
|
|
gameState.product += 0.2; |
|
|
gameState.heat += 0.5; |
|
|
if (gameState.heat > 100) gameState.heat = 100; |
|
|
updateUI(); |
|
|
|
|
|
|
|
|
anime({ |
|
|
targets: manualProduce, |
|
|
scale: [1, 1.1, 1], |
|
|
duration: 300, |
|
|
easing: 'easeInOutQuad' |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
setInterval(() => { |
|
|
if (gameState.productionRate > 0) { |
|
|
gameState.product += gameState.productionRate / 60; |
|
|
gameState.heat += gameState.productionRate / 600; |
|
|
if (gameState.heat > 100) gameState.heat = 100; |
|
|
updateUI(); |
|
|
} |
|
|
}, 1000 / 60); |
|
|
|
|
|
document.getElementById('sell-button').addEventListener('click', () => { |
|
|
if (gameState.product >= 1) { |
|
|
gameState.product -= 1; |
|
|
gameState.money += 50; |
|
|
gameState.heat += 2; |
|
|
if (gameState.heat > 100) gameState.heat = 100; |
|
|
|
|
|
|
|
|
anime({ |
|
|
targets: '#sell-button', |
|
|
scale: [1, 1.1, 1], |
|
|
duration: 300, |
|
|
easing: 'easeInOutQuad' |
|
|
}); |
|
|
|
|
|
|
|
|
const moneyPop = document.createElement('div'); |
|
|
moneyPop.textContent = '+$50'; |
|
|
moneyPop.className = 'absolute text-green-400 font-bold animate-ping'; |
|
|
document.getElementById('sell-button').appendChild(moneyPop); |
|
|
setTimeout(() => moneyPop.remove(), 1000); |
|
|
|
|
|
updateUI(); |
|
|
} |
|
|
}); |
|
|
|
|
|
|
|
|
feather.replace(); |
|
|
updateUI(); |
|
|
|
|
|
|
|
|
setInterval(() => { |
|
|
document.getElementById('sell-button').disabled = gameState.product < 1; |
|
|
}, 100); |
|
|
</script> |
|
|
</body> |
|
|
</html> |
|
|
|