|
|
<!DOCTYPE html> |
|
|
<html lang="en"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>Order a Coffee | QuantumCode</title> |
|
|
<link rel="icon" type="image/x-icon" href="/static/favicon.ico"> |
|
|
<script src="https://cdn.tailwindcss.com"></script> |
|
|
<script src="https://unpkg.com/feather-icons"></script> |
|
|
<script src="components/voice-track.js"></script> |
|
|
<style> |
|
|
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap'); |
|
|
|
|
|
body { |
|
|
font-family: 'Space Grotesk', sans-serif; |
|
|
background-color: #0f172a; |
|
|
color: #e2e8f0; |
|
|
} |
|
|
|
|
|
.gradient-text { |
|
|
background: linear-gradient(90deg, #7c3aed 0%, #2563eb 100%); |
|
|
-webkit-background-clip: text; |
|
|
background-clip: text; |
|
|
color: transparent; |
|
|
} |
|
|
|
|
|
.glass-card { |
|
|
background: rgba(15, 23, 42, 0.7); |
|
|
backdrop-filter: blur(10px); |
|
|
border: 1px solid rgba(255, 255, 255, 0.1); |
|
|
border-radius: 1rem; |
|
|
} |
|
|
|
|
|
.menu-item { |
|
|
transition: all 0.2s ease; |
|
|
border: 1px solid transparent; |
|
|
} |
|
|
|
|
|
.menu-item:hover { |
|
|
border-color: #7c3aed; |
|
|
transform: translateY(-2px); |
|
|
} |
|
|
|
|
|
.menu-item.selected { |
|
|
border-color: #7c3aed; |
|
|
background: rgba(124, 58, 237, 0.1); |
|
|
} |
|
|
|
|
|
.progress-bar { |
|
|
height: 8px; |
|
|
border-radius: 4px; |
|
|
background: rgba(124, 58, 237, 0.2); |
|
|
} |
|
|
|
|
|
.progress-fill { |
|
|
height: 100%; |
|
|
border-radius: 4px; |
|
|
background: linear-gradient(90deg, #7c3aed 0%, #2563eb 100%); |
|
|
} |
|
|
</style> |
|
|
</head> |
|
|
<body class="min-h-screen"> |
|
|
<nav class="px-6 py-4 flex justify-between items-center"> |
|
|
<div class="flex items-center space-x-2"> |
|
|
<i data-feather="cpu" class="text-indigo-500"></i> |
|
|
<span class="text-xl font-bold gradient-text">QuantumCode</span> |
|
|
</div> |
|
|
<div class="flex items-center space-x-2"> |
|
|
<a href="i18n-setup.html" class="flex items-center text-sm hover:text-indigo-400 transition-colors"> |
|
|
<i data-feather="globe" class="w-4 h-4 mr-1"></i> |
|
|
<span id="currentLang">EN</span> |
|
|
</a> |
|
|
</div> |
|
|
</nav> |
|
|
|
|
|
<main class="container mx-auto px-4 py-16"> |
|
|
<section class="max-w-4xl mx-auto"> |
|
|
<div class="flex justify-between items-center mb-8"> |
|
|
<h1 class="text-3xl md:text-4xl font-bold gradient-text">Order a Coffee</h1> |
|
|
<div class="text-xl font-medium"> |
|
|
Score: <span id="currentScore" class="text-indigo-400">0</span>/100 |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="glass-card p-8 mb-8"> |
|
|
<div class="flex flex-col md:flex-row gap-8"> |
|
|
<div class="md:w-1/3"> |
|
|
<h3 class="text-xl font-bold mb-4">Café Menu</h3> |
|
|
<div class="space-y-3"> |
|
|
<div class="menu-item glass-card p-4 cursor-pointer" data-item="latte"> |
|
|
<div class="font-medium">Latte</div> |
|
|
<div class="text-sm text-slate-400">Espresso with steamed milk</div> |
|
|
</div> |
|
|
<div class="menu-item glass-card p-4 cursor-pointer" data-item="cappuccino"> |
|
|
<div class="font-medium">Cappuccino</div> |
|
|
<div class="text-sm text-slate-400">Espresso with foam</div> |
|
|
</div> |
|
|
<div class="menu-item glass-card p-4 cursor-pointer" data-item="americano"> |
|
|
<div class="font-medium">Americano</div> |
|
|
<div class="text-sm text-slate-400">Espresso with hot water</div> |
|
|
</div> |
|
|
<div class="menu-item glass-card p-4 cursor-pointer" data-item="mocha"> |
|
|
<div class="font-medium">Mocha</div> |
|
|
<div class="text-sm text-slate-400">Chocolate espresso</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="md:w-2/3"> |
|
|
<h3 class="text-xl font-bold mb-4">Your Order</h3> |
|
|
<div class="glass-card p-6 mb-6 min-h-32" id="orderDisplay"> |
|
|
<p class="text-slate-400 italic">Your order will appear here...</p> |
|
|
</div> |
|
|
|
|
|
<div class="mb-6"> |
|
|
<voice-track></voice-track> |
|
|
</div> |
|
|
|
|
|
<div class="progress-bar w-full mb-2"> |
|
|
<div class="progress-fill" id="progressBar" style="width: 0%"></div> |
|
|
</div> |
|
|
<div class="text-right text-sm text-slate-400"> |
|
|
Progress: <span id="progressText">0</span>% |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="text-center"> |
|
|
<a href="gamequest.html" class="inline-flex items-center px-6 py-3 border border-indigo-500 text-indigo-400 hover:bg-indigo-900/50 rounded-full font-medium transition-colors"> |
|
|
<i data-feather="arrow-left" class="mr-2"></i> |
|
|
Back to GameQuest |
|
|
</a> |
|
|
</div> |
|
|
</section> |
|
|
</main> |
|
|
|
|
|
<script> |
|
|
let currentScore = 0; |
|
|
let selectedItem = null; |
|
|
let progress = 0; |
|
|
|
|
|
|
|
|
document.querySelectorAll('.menu-item').forEach(item => { |
|
|
item.addEventListener('click', function() { |
|
|
document.querySelectorAll('.menu-item').forEach(i => i.classList.remove('selected')); |
|
|
this.classList.add('selected'); |
|
|
selectedItem = this.getAttribute('data-item'); |
|
|
updateOrderDisplay(); |
|
|
}); |
|
|
}); |
|
|
|
|
|
function updateOrderDisplay() { |
|
|
const orderDisplay = document.getElementById('orderDisplay'); |
|
|
if (selectedItem) { |
|
|
orderDisplay.innerHTML = ` |
|
|
<p>You ordered: <span class="text-indigo-400 font-medium">${selectedItem}</span></p> |
|
|
<p class="mt-2">Try saying: <span class="text-slate-300">"I'd like a ${selectedItem}, please"</span></p> |
|
|
`; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function updateScore(points) { |
|
|
currentScore += points; |
|
|
document.getElementById('currentScore').textContent = currentScore; |
|
|
|
|
|
progress = Math.min(currentScore / 100 * 100, 100); |
|
|
document.getElementById('progressBar').style.width = `${progress}%`; |
|
|
document.getElementById('progressText').textContent = Math.floor(progress); |
|
|
|
|
|
if (progress >= 100) { |
|
|
completeGame(); |
|
|
} |
|
|
} |
|
|
|
|
|
function completeGame() { |
|
|
|
|
|
const stats = JSON.parse(localStorage.getItem('gamequestStats')) || { |
|
|
gamesPlayed: 0, |
|
|
totalScore: 0, |
|
|
highScore: 0 |
|
|
}; |
|
|
|
|
|
stats.gamesPlayed += 1; |
|
|
stats.totalScore += currentScore; |
|
|
if (currentScore > stats.highScore) { |
|
|
stats.highScore = currentScore; |
|
|
} |
|
|
|
|
|
localStorage.setItem('gamequestStats', JSON.stringify(stats)); |
|
|
alert(`Congratulations! You scored ${currentScore}/100 points.`); |
|
|
} |
|
|
|
|
|
|
|
|
document.getElementById('currentLang').textContent = |
|
|
document.cookie.match('(^|;)\\s*NEXT_LOCALE\\s*=\\s*([^;]+)')?.pop() || 'EN'; |
|
|
|
|
|
feather.replace(); |
|
|
</script> |
|
|
</body> |
|
|
</html> |