| | <!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> |