| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Happy Birthday Jennifer/Mom!</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=Dancing+Script:wght@700&family=Poppins:wght@300;400;600&display=swap'); |
| |
| body { |
| font-family: 'Poppins', sans-serif; |
| background: linear-gradient(135deg, #f5f7fa 0%, #ffeef8 100%); |
| min-height: 100vh; |
| overflow-x: hidden; |
| } |
| |
| .dancing-font { |
| font-family: 'Dancing Script', cursive; |
| } |
| |
| .heart { |
| animation: heartbeat 1.5s infinite; |
| } |
| |
| @keyframes heartbeat { |
| 0% { transform: scale(1); } |
| 25% { transform: scale(1.1); } |
| 50% { transform: scale(1); } |
| 75% { transform: scale(1.1); } |
| 100% { transform: scale(1); } |
| } |
| |
| .floating { |
| animation: floating 3s ease-in-out infinite; |
| } |
| |
| @keyframes floating { |
| 0% { transform: translateY(0px); } |
| 50% { transform: translateY(-15px); } |
| 100% { transform: translateY(0px); } |
| } |
| |
| .confetti { |
| position: absolute; |
| width: 10px; |
| height: 10px; |
| background-color: #f00; |
| opacity: 0; |
| } |
| |
| .message-card { |
| transition: all 0.3s ease; |
| transform: rotate(-2deg); |
| } |
| |
| .message-card:hover { |
| transform: rotate(0deg) scale(1.05); |
| } |
| |
| .candle-flame { |
| width: 15px; |
| height: 30px; |
| background: #ff9d00; |
| border-radius: 50% 50% 20% 20%; |
| box-shadow: 0 0 20px #ff9d00, 0 0 60px #ff9d00, 0 0 100px #ff9d00; |
| animation: flicker 2s infinite alternate; |
| } |
| |
| @keyframes flicker { |
| 0%, 100% { transform: scale(1); opacity: 1; } |
| 50% { transform: scale(0.9); opacity: 0.8; } |
| } |
| </style> |
| </head> |
| <body class="text-gray-800"> |
| |
| <div id="confetti-container"></div> |
| |
| |
| <div class="container mx-auto px-4 py-12 max-w-4xl"> |
| |
| <header class="text-center mb-12"> |
| <div class="floating inline-block"> |
| <div class="text-6xl mb-2 dancing-font text-pink-600">Happy Birthday</div> |
| <h1 class="text-5xl font-bold text-purple-800">Jennifer <span class="heart text-red-500">♥</span></h1> |
| <div class="mt-4 flex justify-center"> |
| <div class="w-8 h-8 rounded-full bg-yellow-400 mx-1"></div> |
| <div class="w-8 h-8 rounded-full bg-pink-400 mx-1"></div> |
| <div class="w-8 h-8 rounded-full bg-blue-400 mx-1"></div> |
| <div class="w-8 h-8 rounded-full bg-green-400 mx-1"></div> |
| <div class="w-8 h-8 rounded-full bg-purple-400 mx-1"></div> |
| </div> |
| </div> |
| </header> |
| |
| |
| <section class="mb-16 text-center"> |
| <div class="relative inline-block"> |
| |
| <div class="w-64 h-6 bg-gray-200 rounded-full mx-auto shadow-md"></div> |
| |
| <div class="w-56 h-24 bg-gradient-to-b from-pink-300 to-pink-400 rounded-t-lg mx-auto -mt-3 shadow-inner"></div> |
| |
| <div class="w-48 h-16 bg-gradient-to-b from-pink-200 to-pink-300 rounded-t-lg mx-auto -mt-1 shadow-inner"></div> |
| |
| <div class="w-52 h-4 bg-pink-100 rounded-full mx-auto -mt-8"></div> |
| |
| <div class="flex justify-center -mt-16 space-x-3"> |
| <div class="relative"> |
| <div class="w-3 h-16 bg-gradient-to-b from-yellow-100 to-yellow-300 mx-auto rounded-sm"></div> |
| <div class="candle-flame mx-auto -mt-6"></div> |
| </div> |
| <div class="relative"> |
| <div class="w-3 h-20 bg-gradient-to-b from-blue-100 to-blue-300 mx-auto rounded-sm"></div> |
| <div class="candle-flame mx-auto -mt-6"></div> |
| </div> |
| <div class="relative"> |
| <div class="w-3 h-18 bg-gradient-to-b from-purple-100 to-purple-300 mx-auto rounded-sm"></div> |
| <div class="candle-flame mx-auto -mt-6"></div> |
| </div> |
| </div> |
| </div> |
| <button id="blow-candles" class="mt-8 px-6 py-3 bg-pink-500 text-white rounded-full font-semibold hover:bg-pink-600 transition-all"> |
| <i class="fas fa-wind mr-2"></i> Blow Out Candles |
| </button> |
| </section> |
| |
| |
| <section class="mb-16"> |
| <h2 class="text-3xl font-bold text-center mb-8 dancing-font text-purple-700">Special Wishes For You</h2> |
| |
| <div class="grid md:grid-cols-2 gap-6"> |
| |
| <div class="message-card p-6 bg-gradient-to-br from-purple-50 to-pink-50 rounded-lg shadow-md border-l-4 border-pink-400"> |
| <div class="text-4xl text-pink-500 mb-3"><i class="fas fa-heart"></i></div> |
| <h3 class="text-xl font-semibold mb-2 text-purple-800">To The World's Best Mom</h3> |
| <p class="text-gray-700">Your love is the guiding light in our lives. Today we celebrate you and all the wonderful things you bring to this world.</p> |
| </div> |
| |
| |
| <div class="message-card p-6 bg-gradient-to-br from-blue-50 to-purple-50 rounded-lg shadow-md border-l-4 border-purple-400"> |
| <div class="text-4xl text-purple-500 mb-3"><i class="fas fa-star"></i></div> |
| <h3 class="text-xl font-semibold mb-2 text-purple-800">Endless Appreciation</h3> |
| <p class="text-gray-700">For all the sacrifices you've made, the lessons you've taught, and the unconditional love you've given - thank you!</p> |
| </div> |
| |
| |
| <div class="message-card p-6 bg-gradient-to-br from-yellow-50 to-pink-50 rounded-lg shadow-md border-l-4 border-yellow-400"> |
| <div class="text-4xl text-yellow-500 mb-3"><i class="fas fa-sun"></i></div> |
| <h3 class="text-xl font-semibold mb-2 text-purple-800">Your Special Day</h3> |
| <p class="text-gray-700">May this year bring you as much happiness as you've brought to others. You deserve all the joy in the world!</p> |
| </div> |
| |
| |
| <div class="message-card p-6 bg-gradient-to-br from-green-50 to-blue-50 rounded-lg shadow-md border-l-4 border-blue-400"> |
| <div class="text-4xl text-blue-500 mb-3"><i class="fas fa-gift"></i></div> |
| <h3 class="text-xl font-semibold mb-2 text-purple-800">The Gift of You</h3> |
| <p class="text-gray-700">The greatest gift we've ever received is having you in our lives. Today we celebrate that precious gift!</p> |
| </div> |
| </div> |
| </section> |
| |
| |
| <section class="mb-16 text-center bg-gradient-to-r from-purple-100 to-pink-100 p-8 rounded-xl shadow-inner"> |
| <h2 class="text-3xl font-bold mb-6 dancing-font text-purple-700">Celebration Countdown</h2> |
| <div class="flex justify-center space-x-4"> |
| <div class="bg-white p-4 rounded-lg shadow-md w-20"> |
| <div id="days" class="text-3xl font-bold text-pink-600">00</div> |
| <div class="text-sm text-gray-600">Days</div> |
| </div> |
| <div class="bg-white p-4 rounded-lg shadow-md w-20"> |
| <div id="hours" class="text-3xl font-bold text-pink-600">00</div> |
| <div class="text-sm text-gray-600">Hours</div> |
| </div> |
| <div class="bg-white p-4 rounded-lg shadow-md w-20"> |
| <div id="minutes" class="text-3xl font-bold text-pink-600">00</div> |
| <div class="text-sm text-gray-600">Minutes</div> |
| </div> |
| <div class="bg-white p-4 rounded-lg shadow-md w-20"> |
| <div id="seconds" class="text-3xl font-bold text-pink-600">00</div> |
| <div class="text-sm text-gray-600">Seconds</div> |
| </div> |
| </div> |
| <p class="mt-6 text-purple-800">Until we celebrate together in person!</p> |
| </section> |
| |
| |
| <section class="mb-16"> |
| <h2 class="text-3xl font-bold text-center mb-8 dancing-font text-purple-700">Memory Lane</h2> |
| <div class="bg-white p-6 rounded-xl shadow-lg"> |
| <div class="flex flex-wrap justify-center gap-4"> |
| |
| <div class="w-32 h-32 bg-gradient-to-br from-pink-200 to-purple-200 rounded-lg flex items-center justify-center shadow-md"> |
| <i class="fas fa-smile-beam text-4xl text-purple-600"></i> |
| </div> |
| <div class="w-32 h-32 bg-gradient-to-br from-yellow-200 to-pink-200 rounded-lg flex items-center justify-center shadow-md"> |
| <i class="fas fa-laugh-beam text-4xl text-pink-600"></i> |
| </div> |
| <div class="w-32 h-32 bg-gradient-to-br from-blue-200 to-purple-200 rounded-lg flex items-center justify-center shadow-md"> |
| <i class="fas fa-hands-helping text-4xl text-blue-600"></i> |
| </div> |
| <div class="w-32 h-32 bg-gradient-to-br from-green-200 to-blue-200 rounded-lg flex items-center justify-center shadow-md"> |
| <i class="fas fa-heart text-4xl text-green-600"></i> |
| </div> |
| </div> |
| <p class="text-center mt-6 text-gray-700 italic"> |
| "While we can't show photos here, every moment with you is a cherished memory in our hearts." |
| </p> |
| </div> |
| </section> |
| |
| |
| <section class="text-center py-12 bg-gradient-to-r from-pink-500 to-purple-600 rounded-xl shadow-xl text-white"> |
| <div class="max-w-2xl mx-auto px-4"> |
| <div class="text-5xl mb-6 dancing-font"><i class="fas fa-glass-cheers"></i></div> |
| <h2 class="text-4xl font-bold mb-4">Happy Birthday Jennifer!</h2> |
| <p class="text-xl mb-6">Wishing you a day filled with love, laughter, and all the happiness you bring to others!</p> |
| <div class="text-6xl"> |
| <i class="fas fa-heart mx-2 heart"></i> |
| <i class="fas fa-star mx-2 floating" style="animation-delay: 0.5s"></i> |
| <i class="fas fa-birthday-cake mx-2 floating" style="animation-delay: 1s"></i> |
| </div> |
| </div> |
| </section> |
| </div> |
| |
| <script> |
| |
| function createConfetti() { |
| const colors = ['#f44336', '#e91e63', '#9c27b0', '#673ab7', '#3f51b5', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722']; |
| |
| for (let i = 0; i < 100; i++) { |
| const confetti = document.createElement('div'); |
| confetti.className = 'confetti'; |
| confetti.style.left = Math.random() * window.innerWidth + 'px'; |
| confetti.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)]; |
| confetti.style.transform = `rotate(${Math.random() * 360}deg)`; |
| |
| const animationDuration = Math.random() * 3 + 2; |
| confetti.style.animation = `fall ${animationDuration}s linear forwards`; |
| |
| document.getElementById('confetti-container').appendChild(confetti); |
| |
| |
| setTimeout(() => { |
| confetti.style.top = window.innerHeight + 'px'; |
| confetti.style.opacity = '1'; |
| confetti.style.transform = `rotate(${Math.random() * 360}deg) translate(${Math.random() * 200 - 100}px, ${Math.random() * 200 - 100}px)`; |
| }, 10); |
| |
| |
| setTimeout(() => { |
| confetti.remove(); |
| }, animationDuration * 1000); |
| } |
| |
| |
| const style = document.createElement('style'); |
| style.innerHTML = ` |
| @keyframes fall { |
| to { |
| top: 100vh; |
| opacity: 0; |
| transform: rotate(360deg) translate(100px, 100px); |
| } |
| } |
| `; |
| document.head.appendChild(style); |
| } |
| |
| |
| document.getElementById('blow-candles').addEventListener('click', function() { |
| const flames = document.querySelectorAll('.candle-flame'); |
| flames.forEach(flame => { |
| flame.style.animation = 'none'; |
| flame.style.opacity = '0'; |
| flame.style.boxShadow = 'none'; |
| flame.style.transform = 'scale(0)'; |
| }); |
| |
| createConfetti(); |
| |
| |
| setTimeout(() => { |
| alert('Happy Birthday Jennifer! Your wish will come true!'); |
| }, 1000); |
| }); |
| |
| |
| function updateCountdown() { |
| |
| const now = new Date(); |
| let birthday = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1); |
| |
| |
| if (now > birthday) { |
| birthday = new Date(now.getFullYear() + 1, now.getMonth(), now.getDate()); |
| } |
| |
| const diff = birthday - now; |
| |
| const days = Math.floor(diff / (1000 * 60 * 60 * 24)); |
| const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); |
| const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)); |
| const seconds = Math.floor((diff % (1000 * 60)) / 1000); |
| |
| document.getElementById('days').textContent = days.toString().padStart(2, '0'); |
| document.getElementById('hours').textContent = hours.toString().padStart(2, '0'); |
| document.getElementById('minutes').textContent = minutes.toString().padStart(2, '0'); |
| document.getElementById('seconds').textContent = seconds.toString().padStart(2, '0'); |
| } |
| |
| |
| setInterval(updateCountdown, 1000); |
| updateCountdown(); |
| |
| |
| const memories = document.querySelectorAll('.memory-lane div'); |
| memories.forEach((memory, index) => { |
| memory.style.animation = `floating ${3 + Math.random() * 2}s ease-in-out infinite`; |
| memory.style.animationDelay = `${index * 0.2}s`; |
| }); |
| </script> |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=dsfijdskf/bdayt" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
| </html> |