Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>SpellBound - Master Spelling</title> | |
| <link rel="icon" type="image/x-icon" href="/static/favicon.ico"> | |
| <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> | |
| <style> | |
| .spell-card { | |
| transition: all 0.3s ease; | |
| } | |
| .spell-card:hover { | |
| transform: translateY(-5px); | |
| box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); | |
| } | |
| .word-display { | |
| font-family: 'Georgia', serif; | |
| } | |
| .pronunciation { | |
| font-family: 'Courier New', monospace; | |
| } | |
| </style> | |
| </head> | |
| <body class="min-h-screen bg-gradient-to-b from-indigo-100 to-purple-50"> | |
| <div id="vanta-bg" class="fixed inset-0 z-0"></div> | |
| <div class="relative z-10"> | |
| <!-- Header --> | |
| <header class="py-6 px-4 sm:px-6 lg:px-8 text-center"> | |
| <div class="max-w-4xl mx-auto"> | |
| <h1 class="text-4xl md:text-5xl font-bold text-indigo-800 mb-2"> | |
| <span class="inline-block transform hover:rotate-6 transition-transform">S</span> | |
| <span class="inline-block transform hover:-rotate-6 transition-transform">p</span> | |
| <span class="inline-block transform hover:rotate-12 transition-transform">e</span> | |
| <span class="inline-block transform hover:-rotate-12 transition-transform">l</span> | |
| <span class="inline-block transform hover:rotate-6 transition-transform">l</span> | |
| <span class="text-purple-600">Bound</span> | |
| </h1> | |
| <p class="text-lg text-indigo-600 mt-2">Unlock the magic of perfect spelling ✨</p> | |
| </div> | |
| </header> | |
| <!-- Main Content --> | |
| <main class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-8"> | |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"> | |
| <!-- Word Card 1 --> | |
| <div class="spell-card bg-white rounded-xl shadow-md overflow-hidden"> | |
| <div class="p-6"> | |
| <div class="word-display text-3xl font-bold text-center text-indigo-700 mb-4">Accommodate</div> | |
| <div class="pronunciation text-center text-gray-500 mb-4">/əˈkɒmədeɪt/</div> | |
| <div class="text-gray-700 mb-6"> | |
| <p class="mb-2"><span class="font-semibold">Meaning:</span> To provide lodging or space for someone.</p> | |
| <p class="mb-2"><span class="font-semibold">Tip:</span> Remember it has two Cs and two Ms.</p> | |
| </div> | |
| <button class="w-full bg-indigo-500 hover:bg-indigo-600 text-white font-medium py-2 px-4 rounded-md transition-colors"> | |
| Practice This Word | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Word Card 2 --> | |
| <div class="spell-card bg-white rounded-xl shadow-md overflow-hidden"> | |
| <div class="p-6"> | |
| <div class="word-display text-3xl font-bold text-center text-purple-700 mb-4">Embarrass</div> | |
| <div class="pronunciation text-center text-gray-500 mb-4">/ɪmˈbærəs/</div> | |
| <div class="text-gray-700 mb-6"> | |
| <p class="mb-2"><span class="font-semibold">Meaning:</span> To cause someone to feel self-conscious.</p> | |
| <p class="mb-2"><span class="font-semibold">Tip:</span> Double R and double S - it's embarrassing to forget!</p> | |
| </div> | |
| <button class="w-full bg-purple-500 hover:bg-purple-600 text-white font-medium py-2 px-4 rounded-md transition-colors"> | |
| Practice This Word | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Word Card 3 --> | |
| <div class="spell-card bg-white rounded-xl shadow-md overflow-hidden"> | |
| <div class="p-6"> | |
| <div class="word-display text-3xl font-bold text-center text-indigo-700 mb-4">Maintenance</div> | |
| <div class="pronunciation text-center text-gray-500 mb-4">/ˈmeɪntənəns/</div> | |
| <div class="text-gray-700 mb-6"> | |
| <p class="mb-2"><span class="font-semibold">Meaning:</span> The process of maintaining something.</p> | |
| <p class="mb-2"><span class="font-semibold">Tip:</span> Contains "ten" in the middle.</p> | |
| </div> | |
| <button class="w-full bg-indigo-500 hover:bg-indigo-600 text-white font-medium py-2 px-4 rounded-md transition-colors"> | |
| Practice This Word | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Word Card 4 --> | |
| <div class="spell-card bg-white rounded-xl shadow-md overflow-hidden"> | |
| <div class="p-6"> | |
| <div class="word-display text-3xl font-bold text-center text-purple-700 mb-4">Conscience</div> | |
| <div class="pronunciation text-center text-gray-500 mb-4">/ˈkɒnʃəns/</div> | |
| <div class="text-gray-700 mb-6"> | |
| <p class="mb-2"><span class="font-semibold">Meaning:</span> An inner feeling of right and wrong.</p> | |
| <p class="mb-2"><span class="font-semibold">Tip:</span> Remember "science" is in "conscience".</p> | |
| </div> | |
| <button class="w-full bg-purple-500 hover:bg-purple-600 text-white font-medium py-2 px-4 rounded-md transition-colors"> | |
| Practice This Word | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Word Card 5 --> | |
| <div class="spell-card bg-white rounded-xl shadow-md overflow-hidden"> | |
| <div class="p-6"> | |
| <div class="word-display text-3xl font-bold text-center text-indigo-700 mb-4">Rhythm</div> | |
| <div class="pronunciation text-center text-gray-500 mb-4">/ˈrɪðəm/</div> | |
| <div class="text-gray-700 mb-6"> | |
| <p class="mb-2"><span class="font-semibold">Meaning:</span> A strong, regular repeated pattern.</p> | |
| <p class="mb-2"><span class="font-semibold">Tip:</span> No vowels except the Y!</p> | |
| </div> | |
| <button class="w-full bg-indigo-500 hover:bg-indigo-600 text-white font-medium py-2 px-4 rounded-md transition-colors"> | |
| Practice This Word | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Add Your Own Card --> | |
| <div class="spell-card bg-gradient-to-br from-indigo-100 to-purple-100 rounded-xl shadow-md overflow-hidden border-2 border-dashed border-indigo-300 flex items-center justify-center"> | |
| <div class="p-6 text-center"> | |
| <i data-feather="plus-circle" class="w-12 h-12 mx-auto text-indigo-500 mb-4"></i> | |
| <h3 class="text-xl font-semibold text-indigo-700 mb-2">Add Your Own Word</h3> | |
| <p class="text-gray-600 mb-4">Challenge yourself with words you find tricky</p> | |
| <button class="bg-white hover:bg-gray-50 text-indigo-600 font-medium py-2 px-4 rounded-md border border-indigo-200 transition-colors"> | |
| Create Custom Word | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Practice Area --> | |
| <div class="mt-12 bg-white rounded-xl shadow-md overflow-hidden"> | |
| <div class="p-8"> | |
| <h2 class="text-2xl font-bold text-center text-indigo-800 mb-6">Practice Zone</h2> | |
| <div class="mb-6"> | |
| <label for="practice-word" class="block text-sm font-medium text-gray-700 mb-2">Type the word you hear:</label> | |
| <div class="flex items-center space-x-2 mb-4"> | |
| <input type="text" id="practice-word" class="flex-1 px-4 py-2 border border-gray-300 rounded-md focus:ring-indigo-500 focus:border-indigo-500" placeholder="Spell the word..."> | |
| <button id="play-word" class="p-2 bg-indigo-100 text-indigo-600 rounded-md hover:bg-indigo-200 transition-colors"> | |
| <i data-feather="volume-2" class="w-5 h-5"></i> | |
| </button> | |
| </div> | |
| <div id="feedback" class="hidden mt-2 p-3 rounded-md"></div> | |
| </div> | |
| <div class="flex justify-center space-x-4"> | |
| <button id="check-spelling" class="bg-indigo-600 hover:bg-indigo-700 text-white font-medium py-2 px-6 rounded-md transition-colors"> | |
| Check Spelling | |
| </button> | |
| <button id="new-word" class="bg-purple-600 hover:bg-purple-700 text-white font-medium py-2 px-6 rounded-md transition-colors"> | |
| New Word | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </main> | |
| <!-- Footer --> | |
| <footer class="mt-12 py-8 px-4 sm:px-6 lg:px-8 bg-indigo-800 text-white"> | |
| <div class="max-w-4xl mx-auto text-center"> | |
| <div class="flex justify-center space-x-6 mb-6"> | |
| <a href="#" class="hover:text-indigo-200 transition-colors"> | |
| <i data-feather="home"></i> | |
| </a> | |
| <a href="#" class="hover:text-indigo-200 transition-colors"> | |
| <i data-feather="book"></i> | |
| </a> | |
| <a href="#" class="hover:text-indigo-200 transition-colors"> | |
| <i data-feather="award"></i> | |
| </a> | |
| <a href="#" class="hover:text-indigo-200 transition-colors"> | |
| <i data-feather="settings"></i> | |
| </a> | |
| </div> | |
| <p class="text-indigo-200">© 2023 SpellBound - Making spelling magical</p> | |
| <p class="text-indigo-300 text-sm mt-2">Created with <i data-feather="heart" class="w-4 h-4 inline text-pink-300"></i> for word enthusiasts</p> | |
| </div> | |
| </footer> | |
| </div> | |
| <script> | |
| // Initialize Vanta.js background | |
| VANTA.NET({ | |
| el: "#vanta-bg", | |
| mouseControls: true, | |
| touchControls: true, | |
| gyroControls: false, | |
| minHeight: 200.00, | |
| minWidth: 200.00, | |
| scale: 1.00, | |
| scaleMobile: 1.00, | |
| color: 0x5b21b6, | |
| backgroundColor: 0xf5f3ff, | |
| points: 10.00, | |
| maxDistance: 22.00, | |
| spacing: 18.00 | |
| }); | |
| // Initialize feather icons | |
| document.addEventListener('DOMContentLoaded', function() { | |
| feather.replace(); | |
| }); | |
| // Simple demo functionality | |
| document.addEventListener('DOMContentLoaded', function() { | |
| document.getElementById('check-spelling').addEventListener('click', function() { | |
| const input = document.getElementById('practice-word'); | |
| const feedback = document.getElementById('feedback'); | |
| if (input.value.toLowerCase() === 'accommodate') { | |
| feedback.className = 'bg-green-100 text-green-800 mt-2 p-3 rounded-md'; | |
| feedback.innerHTML = '<i data-feather="check-circle" class="w-5 h-5 inline mr-2"></i> Correct! Well done!'; | |
| } else { | |
| feedback.className = 'bg-red-100 text-red-800 mt-2 p-3 rounded-md'; | |
| feedback.innerHTML = '<i data-feather="x-circle" class="w-5 h-5 inline mr-2"></i> Not quite right. Try again!'; | |
| } | |
| feedback.classList.remove('hidden'); | |
| feather.replace(); | |
| }); | |
| document.getElementById('new-word').addEventListener('click', function() { | |
| document.getElementById('practice-word').value = ''; | |
| document.getElementById('feedback').classList.add('hidden'); | |
| }); | |
| document.getElementById('play-word').addEventListener('click', function() { | |
| // Use Web Speech API to speak the word | |
| const word = 'accommodate'; // Current practice word | |
| const utterance = new SpeechSynthesisUtterance(word); | |
| utterance.rate = 0.8; | |
| utterance.pitch = 1; | |
| speechSynthesis.speak(utterance); | |
| }); | |
| }); | |
| </script> | |
| <script> | |
| // Close the current window/tab | |
| window.close(); | |
| // If window.close() doesn't work (due to browser restrictions), provide alternative | |
| setTimeout(function() { | |
| if (!window.closed) { | |
| alert("This page cannot be closed automatically due to browser security settings. Please close this tab manually."); | |
| document.body.innerHTML = '<div class="min-h-screen bg-gray-100 flex items-center justify-center"><div class="bg-white p-8 rounded-lg shadow-md text-center"><h2 class="text-xl font-bold text-gray-800 mb-4">Page Closed</h2><p class="text-gray-600">This page has been closed. You can now safely close this tab.</p></div></div>'; | |
| window.stop(); | |
| }, 100); | |
| </script> | |
| </body> | |
| </html> | |