Watches are more than just timekeeping devices; they are a blend of craftsmanship, technology, and style. From classic analog designs to modern smartwatches, the variety is vast and fascinating.
In this article, we will explore ten exemplary watches that showcase the diversity and innovation in the world of horology. Each watch tells a unique story, reflecting the artistry and precision that go into their creation.
CODE1
Here's the code:
CODETEXT1
CODE2
Here's the code:
CODETEXT2
CODE3
Here's the code:
CODETEXT3
CODE4
Here's the code:
CODETEXT4
CODE5
Here's the code:
CODETEXT5
Designing your own watch UI has never been easier with Subframe. Its drag-and-drop interface and intuitive, responsive canvas ensure pixel-perfect results every time. Loved by designers and developers alike, Subframe makes creativity effortless.
Start for free and bring your vision to life today!
CODE6
Here's the code:
CODETEXT6
CODE7
Here's the code:
CODETEXT7
CODE8
Here's the code:
CODETEXT8
CODE9
Here's the code:
CODETEXT9
CODE10
Here's the code:
CODETEXT10
Ready to elevate your UI design game? With Subframe, you can create stunning, pixel-perfect interfaces in minutes. Its drag-and-drop editor and beautifully crafted components make designing efficient and effortless.
Don't wait to bring your vision to life. Start for free and begin creating immediately!
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pulse Neon Fitness Tracker</title> <style> /* Base Styles */ :root { --primary: #00f7ff; --secondary: #ff2cdf; --tertiary: #7d2cff; --background: #0a0a15; --card-bg: #14141f; --text: #ffffff; --text-secondary: #a3a3c2; --success: #00ff88; --warning: #ffcc00; --danger: #ff3366; --grid-gap: 12px; --border-radius: 16px; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; -webkit-font-smoothing: antialiased; } body { background-color: var(--background); color: var(--text); display: flex; justify-content: center; align-items: center; min-height: 100vh; overflow: hidden; padding: 10px; } .watch-container { width: 100%; max-width: 340px; aspect-ratio: 1; border-radius: 50%; background: var(--card-bg); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5); padding: 8px; position: relative; display: flex; justify-content: center; align-items: center; overflow: hidden; } .watch-frame { width: 100%; height: 100%; border-radius: 50%; position: relative; overflow: hidden; box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.8); display: flex; justify-content: center; align-items: center; } .watch-bezel { position: absolute; inset: 0; border-radius: 50%; border: 3px solid var(--card-bg); box-shadow: inset 0 0 8px rgba(0, 247, 255, 0.2), 0 0 15px rgba(0, 247, 255, 0.2); pointer-events: none; z-index: 10; } .watch-content { width: 92%; height: 92%; border-radius: 50%; background: var(--background); display: flex; flex-direction: column; justify-content: center; align-items: center; position: relative; z-index: 2; overflow: hidden; } /* Progress Ring Animation */ .progress-ring-container { position: absolute; width: 100%; height: 100%; top: 0; left: 0; display: flex; justify-content: center; align-items: center; } .progress-ring { position: relative; width: 100%; height: 100%; } .progress-ring__circle { fill: transparent; stroke-width: 8; stroke-linecap: round; transform: rotate(-90deg); transform-origin: 50% 50%; transition: all 0.3s ease; } .progress-bg { stroke: rgba(255, 255, 255, 0.05); } .progress-steps { stroke: var(--primary); stroke-dasharray: 1000; stroke-dashoffset: 750; /* Will be updated with JS */ } .progress-calories { stroke: var(--secondary); stroke-dasharray: 800; stroke-dashoffset: 600; /* Will be updated with JS */ } .progress-heart { stroke: var(--danger); stroke-dasharray: 600; stroke-dashoffset: 300; /* Will be updated with JS */ } /* Header and Time */ .watch-header { text-align: center; margin-bottom: 5px; position: relative; z-index: 3; } .current-time { font-size: 1.4rem; font-weight: 600; margin-bottom: 2px; background: linear-gradient(to right, var(--primary), var(--secondary)); -webkit-background-clip: text; background-clip: text; color: transparent; } .current-date { font-size: 0.65rem; color: var(--text-secondary); font-weight: 500; } /* Stats Dashboard */ .stats-container { width: 75%; z-index: 3; margin-top: 5px; } .stats-grid { display: grid; grid-template-columns: repeat(2, 1fr); grid-gap: var(--grid-gap); margin-bottom: var(--grid-gap); } .stat-card { background: rgba(20, 20, 35, 0.8); border-radius: var(--border-radius); padding: 10px; backdrop-filter: blur(4px); border: 1px solid rgba(255, 255, 255, 0.05); transition: all 0.3s ease; overflow: hidden; position: relative; } .stat-card:hover, .stat-card:focus { transform: translateY(-2px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); border-color: rgba(255, 255, 255, 0.1); } .stat-card::after { content: ''; position: absolute; inset: 0; background: linear-gradient(120deg, rgba(255, 255, 255, 0.1), transparent 80%); opacity: 0; transition: opacity 0.3s ease; } .stat-card:hover::after { opacity: 1; } .stat-label { color: var(--text-secondary); font-size: 0.6rem; font-weight: 500; margin-bottom: 2px; display: flex; align-items: center; } .stat-icon { margin-right: 3px; font-size: 0.7rem; } .stat-value { font-size: 1.1rem; font-weight: 600; display: flex; align-items: baseline; } .stat-unit { font-size: 0.55rem; font-weight: 400; color: var(--text-secondary); margin-left: 2px; } .stat-card.steps .stat-value { color: var(--primary); } .stat-card.calories .stat-value { color: var(--secondary); } .stat-card.heart-rate .stat-value { color: var(--danger); } .stat-card.distance .stat-value { color: var(--tertiary); } /* Heart Rate Animation */ .heart-animation { display: inline-block; animation: pulse 1.2s ease-in-out infinite; } /* Action Buttons */ .action-button { width: 100%; padding: 10px; background: linear-gradient(135deg, var(--primary), var(--tertiary)); border: none; border-radius: var(--border-radius); color: var(--text); font-weight: 600; font-size: 0.75rem; cursor: pointer; transition: all 0.3s ease; position: relative; overflow: hidden; display: flex; align-items: center; justify-content: center; } .action-button:hover, .action-button:focus { box-shadow: 0 0 15px rgba(0, 247, 255, 0.4); transform: translateY(-2px); } .action-button::before { content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: linear-gradient(transparent, rgba(255, 255, 255, 0.1), transparent); transform: rotate(45deg); animation: sheen 3s infinite; } .button-icon { margin-right: 5px; } /* Wrist Band */ .wrist-band { position: absolute; width: 80px; height: 400px; background: linear-gradient(to bottom, rgba(20, 20, 31, 0.8) 0%, rgba(40, 40, 61, 0.9) 50%, rgba(20, 20, 31, 0.8) 100%); box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.8), 0 0 20px rgba(0, 0, 0, 0.5); z-index: 1; } .wrist-band-top { top: -230px; border-radius: 40px 40px 0 0; } .wrist-band-bottom { bottom: -230px; border-radius: 0 0 40px 40px; } /* Animations */ @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.2); } 100% { transform: scale(1); } } @keyframes sheen { 0%, 40% { transform: translateX(-150%) rotate(45deg); } 100% { transform: translateX(150%) rotate(45deg); } } @keyframes glitch { 0% { transform: translate(0); } 20% { transform: translate(-2px, 2px); } 40% { transform: translate(-2px, -2px); } 60% { transform: translate(2px, 2px); } 80% { transform: translate(2px, -2px); } 100% { transform: translate(0); } } /* Mode Switch */ .mode-switch { position: absolute; bottom: 15%; font-size: 0.65rem; color: var(--text-secondary); cursor: pointer; background: rgba(20, 20, 35, 0.8); padding: 4px 8px; border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.05); transition: all 0.3s ease; z-index: 10; } .mode-switch:hover { color: var(--primary); border-color: var(--primary); box-shadow: 0 0 10px rgba(0, 247, 255, 0.3); } /* Neon Glow Effect */ .neon-glow { position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: radial-gradient( circle at center, rgba(0, 247, 255, 0.05) 0%, rgba(125, 44, 255, 0.02) 30%, transparent 70% ); opacity: 0.7; pointer-events: none; mix-blend-mode: screen; animation: rotate 20s linear infinite; } @keyframes rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Responsive adjustments */ @media (max-width: 400px) { .watch-container { max-width: 280px; } .current-time { font-size: 1.2rem; } .stat-value { font-size: 0.9rem; } .action-button { font-size: 0.7rem; padding: 8px; } } /* Notification */ .notification { position: absolute; top: 15%; left: 50%; transform: translateX(-50%); background: linear-gradient(135deg, rgba(255, 44, 223, 0.9), rgba(125, 44, 255, 0.9)); padding: 8px 12px; border-radius: 12px; font-size: 0.65rem; font-weight: 500; opacity: 0; visibility: hidden; transition: all 0.3s ease; z-index: 20; width: 75%; text-align: center; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); } .notification.show { opacity: 1; visibility: visible; animation: slideDown 0.5s ease, fadeOut 0.5s ease 2.5s forwards; } @keyframes slideDown { from { transform: translate(-50%, -20px); } to { transform: translate(-50%, 0); } } @keyframes fadeOut { to { opacity: 0; visibility: hidden; } } </style> </head> <body> <div class="watch-container"> <!-- Wrist bands --> <div class="wrist-band wrist-band-top"></div> <div class="wrist-band wrist-band-bottom"></div> <div class="watch-frame"> <div class="watch-bezel"></div> <div class="watch-content"> <!-- Progress rings --> <div class="progress-ring-container"> <svg class="progress-ring" width="100%" height="100%" viewBox="0 0 200 200"> <!-- Background circles --> <circle class="progress-ring__circle progress-bg" cx="100" cy="100" r="90"></circle> <circle class="progress-ring__circle progress-bg" cx="100" cy="100" r="80"></circle> <circle class="progress-ring__circle progress-bg" cx="100" cy="100" r="70"></circle> <!-- Progress circles --> <circle class="progress-ring__circle progress-steps" cx="100" cy="100" r="90"></circle> <circle class="progress-ring__circle progress-calories" cx="100" cy="100" r="80"></circle> <circle class="progress-ring__circle progress-heart" cx="100" cy="100" r="70"></circle> </svg> </div> <!-- Header with time --> <div class="watch-header"> <div class="current-time">14:37</div> <div class="current-date">THU, MAY 16</div> </div> <!-- Stats dashboard --> <div class="stats-container"> <div class="stats-grid"> <div class="stat-card steps" id="steps-card"> <div class="stat-label"><span class="stat-icon">👣</span>STEPS</div> <div class="stat-value">8,412<span class="stat-unit">steps</span></div> </div> <div class="stat-card calories" id="calories-card"> <div class="stat-label"><span class="stat-icon">🔥</span>CALORIES</div> <div class="stat-value">487<span class="stat-unit">kcal</span></div> </div> <div class="stat-card heart-rate" id="heart-card"> <div class="stat-label"><span class="stat-icon heart-animation">❤️</span>HEART RATE</div> <div class="stat-value">94<span class="stat-unit">bpm</span></div> </div> <div class="stat-card distance" id="distance-card"> <div class="stat-label"><span class="stat-icon">📏</span>DISTANCE</div> <div class="stat-value">5.7<span class="stat-unit">km</span></div> </div> </div> <button class="action-button" id="start-workout"> <span class="button-icon">▶️</span> START WORKOUT </button> </div> <!-- Mode switcher --> <div class="mode-switch" id="mode-toggle">DAILY STATS</div> <!-- Neon glow effect --> <div class="neon-glow"></div> <!-- Notification --> <div class="notification" id="notification">You've reached 84% of your daily step goal!</div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Update time and date updateTimeAndDate(); setInterval(updateTimeAndDate, 60000); // Set initial progress values updateRingProgress(); // Simulate live data updates setInterval(() => { simulateDataUpdates(); updateRingProgress(); }, 3000); // Add interactive effects to stat cards const statCards = document.querySelectorAll('.stat-card'); statCards.forEach(card => { card.addEventListener('click', () => { highlightCard(card); showDetailNotification(card.id); }); }); // Start workout button const workoutButton = document.getElementById('start-workout'); workoutButton.addEventListener('click', () => { toggleWorkoutMode(); }); // Mode toggle const modeToggle = document.getElementById('mode-toggle'); modeToggle.addEventListener('click', () => { toggleDisplayMode(); }); // Show onboarding notification setTimeout(() => { showNotification("You've reached 84% of your daily step goal!"); }, 1500); }); function updateTimeAndDate() { const now = new Date(); // Format time as HH:MM const hours = now.getHours().toString().padStart(2, '0'); const minutes = now.getMinutes().toString().padStart(2, '0'); document.querySelector('.current-time').textContent = `${hours}:${minutes}`; // Format date as DAY, MONTH DD const days = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']; const months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']; const day = days[now.getDay()]; const month = months[now.getMonth()]; const date = now.getDate(); document.querySelector('.current-date').textContent = `${day}, ${month} ${date}`; } function updateRingProgress() { // Get current values const stepsValue = parseInt(document.querySelector('.stat-card.steps .stat-value').textContent); const caloriesValue = parseInt(document.querySelector('.stat-card.calories .stat-value').textContent); const heartValue = parseInt(document.querySelector('.stat-card.heart-rate .stat-value').textContent); // Calculate progress percentages (target values are just examples) const stepsProgress = 1000 - (stepsValue / 10000 * 1000); const caloriesProgress = 800 - (caloriesValue / 800 * 800); const heartProgress = 600 - (heartValue / 200 * 600); // Update ring dashoffsets document.querySelector('.progress-steps').style.strokeDashoffset = stepsProgress; document.querySelector('.progress-calories').style.strokeDashoffset = caloriesProgress; document.querySelector('.progress-heart').style.strokeDashoffset = heartProgress; } function simulateDataUpdates() { // Randomly update some of the stats to simulate live data if (Math.random() > 0.5) { const stepsEl = document.querySelector('.stat-card.steps .stat-value'); const currentSteps = parseInt(stepsEl.textContent); stepsEl.innerHTML = `${currentSteps + Math.floor(Math.random() * 100)}<span class="stat-unit">steps</span>`; } if (Math.random() > 0.6) { const caloriesEl = document.querySelector('.stat-card.calories .stat-value'); const currentCalories = parseInt(caloriesEl.textContent); caloriesEl.innerHTML = `${currentCalories + Math.floor(Math.random() * 5)}<span class="stat-unit">kcal</span>`; } if (Math.random() > 0.3) { const heartEl = document.querySelector('.stat-card.heart-rate .stat-value'); const currentHeart = parseInt(heartEl.textContent); const newHeart = currentHeart + (Math.random() > 0.5 ? 1 : -1); heartEl.innerHTML = `${newHeart}<span class="stat-unit">bpm</span>`; } if (Math.random() > 0.7) { const distanceEl = document.querySelector('.stat-card.distance .stat-value'); const currentDistance = parseFloat(distanceEl.textContent); distanceEl.innerHTML = `${(currentDistance + 0.1).toFixed(1)}<span class="stat-unit">km</span>`; } } function highlightCard(card) { // Add highlight effect card.style.transform = 'scale(1.05)'; card.style.boxShadow = '0 0 15px rgba(0, 247, 255, 0.4)'; // Reset after animation setTimeout(() => { card.style.transform = ''; card.style.boxShadow = ''; }, 500); } function showDetailNotification(cardId) { let message = ''; switch(cardId) { case 'steps-card': message = 'Great progress! 1,588 steps to go today.'; break; case 'calories-card': message = 'You're burning calories 15% faster than yesterday!'; break; case 'heart-card': message = 'Heart rate in fat-burning zone for 37 minutes today.'; break; case 'distance-card': message = 'New record! You've walked 0.7km more than yesterday.'; break; default: message = 'Tap a metric to see detailed info.'; } showNotification(message); } function showNotification(message) { const notification = document.getElementById('notification'); notification.textContent = message; notification.classList.add('show'); setTimeout(() => { notification.classList.remove('show'); }, 3000); } function toggleWorkoutMode() { const workoutButton = document.getElementById('start-workout'); const isWorkoutActive = workoutButton.classList.contains('active'); if (!isWorkoutActive) { // Start workout workoutButton.innerHTML = '<span class="button-icon">⏹️</span> END WORKOUT'; workoutButton.style.background = 'linear-gradient(135deg, var(--danger), var(--tertiary))'; workoutButton.classList.add('active'); showNotification('Workout started! Tracking your activity...'); // Simulate more frequent heart rate updates during workout const heartRateInterval = setInterval(() => { const heartEl = document.querySelector('.stat-card.heart-rate .stat-value'); const currentHeart = parseInt(heartEl.textContent); // Higher heart rate during workout const newHeart = Math.min(180, currentHeart + Math.floor(Math.random() * 5) - 1); heartEl.innerHTML = `${newHeart}<span class="stat-unit">bpm</span>`; updateRingProgress(); }, 1000); workoutButton.setAttribute('data-interval', heartRateInterval); } else { // End workout workoutButton.innerHTML = '<span class="button-icon">▶️</span> START WORKOUT'; workoutButton.style.background = 'linear-gradient(135deg, var(--primary), var(--tertiary))'; workoutButton.classList.remove('active'); clearInterval(parseInt(workoutButton.getAttribute('data-interval'))); showNotification('Workout complete! Great effort today.'); } } function toggleDisplayMode() { const modeToggle = document.getElementById('mode-toggle'); const isWeeklyMode = modeToggle.textContent === 'WEEKLY STATS'; if (!isWeeklyMode) { // Switch to weekly view modeToggle.textContent = 'WEEKLY STATS'; // Update to weekly data (simulated) document.querySelector('.stat-card.steps .stat-value').innerHTML = '52,487<span class="stat-unit">steps</span>'; document.querySelector('.stat-card.calories .stat-value').innerHTML = '3,215<span class="stat-unit">kcal</span>'; document.querySelector('.stat-card.heart-rate .stat-value').innerHTML = '82<span class="stat-unit">avg</span>'; document.querySelector('.stat-card.distance .stat-value').innerHTML = '35.2<span class="stat-unit">km</span>'; updateRingProgress(); showNotification('Viewing your weekly performance stats.'); } else { // Switch back to daily view modeToggle.textContent = 'DAILY STATS'; // Reset to daily data document.querySelector('.stat-card.steps .stat-value').innerHTML = '8,412<span class="stat-unit">steps</span>'; document.querySelector('.stat-card.calories .stat-value').innerHTML = '487<span class="stat-unit">kcal</span>'; document.querySelector('.stat-card.heart-rate .stat-value').innerHTML = '94<span class="stat-unit">bpm</span>'; document.querySelector('.stat-card.distance .stat-value').innerHTML = '5.7<span class="stat-unit">km</span>'; updateRingProgress(); showNotification('Viewing today\'s activity metrics.'); } } </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Professional Business Watch UI</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Roboto', sans-serif; } body { display: flex; justify-content: center; align-items: center; min-height: 700px; background: #f0f3f7; padding: 20px; overflow: hidden; } .watch-container { position: relative; width: 320px; height: 380px; background: linear-gradient(145deg, #1a1f35, #2c344f); border-radius: 40px; box-shadow: 0 20px 30px rgba(0, 0, 0, 0.2), 0 0 0 2px rgba(255, 255, 255, 0.05), inset 0 0 20px rgba(0, 0, 0, 0.2); overflow: hidden; transform: perspective(1000px) rotateY(0deg); transition: transform 0.6s cubic-bezier(0.165, 0.84, 0.44, 1); } .watch-container:hover { transform: perspective(1000px) rotateY(5deg); } .watch-screen { position: relative; width: 100%; height: 100%; padding: 25px 20px; color: #fff; overflow: hidden; } .top-bar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; } .battery { display: flex; align-items: center; font-size: 12px; } .battery-icon { position: relative; width: 20px; height: 10px; border: 1px solid rgba(255, 255, 255, 0.7); border-radius: 2px; margin-right: 5px; } .battery-level { position: absolute; left: 1px; top: 1px; height: 6px; width: 70%; background: #4cd964; border-radius: 1px; } .battery-tip { position: absolute; right: -3px; top: 2px; width: 2px; height: 4px; background: rgba(255, 255, 255, 0.7); border-radius: 0 1px 1px 0; } .time-display { display: flex; flex-direction: column; align-items: center; margin-bottom: 25px; } .current-time { font-size: 54px; font-weight: 700; letter-spacing: -1px; margin-bottom: 5px; text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); } .current-date { font-size: 14px; font-weight: 500; color: rgba(255, 255, 255, 0.8); letter-spacing: 1px; } .notification-center { margin-top: 20px; transition: all 0.3s ease; } .notification-title { display: flex; justify-content: space-between; align-items: center; padding-bottom: 10px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); margin-bottom: 15px; } .notification-title h3 { font-size: 16px; font-weight: 600; color: rgba(255, 255, 255, 0.9); } .notification-count { background: #ff3b30; color: #fff; font-size: 12px; padding: 2px 6px; border-radius: 10px; font-weight: 600; } .notification-item { background: rgba(255, 255, 255, 0.08); border-radius: 10px; padding: 10px 15px; margin-bottom: 10px; transform: translateX(0); transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); cursor: pointer; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } .notification-item:hover { background: rgba(255, 255, 255, 0.12); transform: translateX(5px); } .notification-header { display: flex; justify-content: space-between; margin-bottom: 5px; } .app-name { font-size: 12px; font-weight: 600; color: rgba(255, 255, 255, 0.9); } .notification-time { font-size: 11px; color: rgba(255, 255, 255, 0.6); } .notification-content { font-size: 13px; line-height: 1.4; } .bottom-nav { position: absolute; bottom: 0; left: 0; width: 100%; height: 60px; display: flex; background: rgba(0, 0, 0, 0.2); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border-top: 1px solid rgba(255, 255, 255, 0.1); } .nav-item { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; color: rgba(255, 255, 255, 0.6); position: relative; transition: all 0.3s ease; cursor: pointer; } .nav-item.active { color: #fff; } .nav-item.active::after { content: ''; position: absolute; bottom: 0; width: 30px; height: 3px; background: #0a84ff; border-radius: 3px 3px 0 0; } .nav-icon { font-size: 18px; margin-bottom: 4px; } .nav-label { font-size: 10px; font-weight: 500; } .active-indicator { position: absolute; top: -4px; right: 25%; width: 6px; height: 6px; background: #ff3b30; border-radius: 50%; } .calendar-container { position: absolute; top: 0; left: 0; width: 100%; height: calc(100% - 60px); background: linear-gradient(145deg, #1a1f35, #2c344f); padding: 25px 20px; transform: translateX(100%); transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94); opacity: 0; } .calendar-container.active { transform: translateX(0); opacity: 1; } .calendar-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .calendar-title { font-size: 18px; font-weight: 600; } .calendar-nav { display: flex; gap: 15px; } .calendar-nav-btn { width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; background: rgba(255, 255, 255, 0.1); border-radius: 50%; cursor: pointer; transition: all 0.2s ease; } .calendar-nav-btn:hover { background: rgba(255, 255, 255, 0.2); } .month-year { font-size: 14px; margin-bottom: 15px; font-weight: 500; } .days-header { display: grid; grid-template-columns: repeat(7, 1fr); gap: 10px; text-align: center; margin-bottom: 10px; } .day-name { font-size: 11px; color: rgba(255, 255, 255, 0.6); font-weight: 500; } .days-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 10px; text-align: center; } .day-cell { font-size: 13px; padding: 8px 0; border-radius: 50%; cursor: pointer; transition: all 0.2s ease; } .day-cell:hover { background: rgba(255, 255, 255, 0.1); } .day-cell.today { background: #0a84ff; color: #fff; font-weight: 600; } .day-cell.has-event { position: relative; } .day-cell.has-event::after { content: ''; position: absolute; bottom: 2px; left: 50%; transform: translateX(-50%); width: 4px; height: 4px; background: #ff9500; border-radius: 50%; } .day-cell.other-month { color: rgba(255, 255, 255, 0.3); } .events-list { margin-top: 20px; } .event-item { background: rgba(255, 255, 255, 0.08); border-radius: 10px; padding: 12px 15px; margin-bottom: 10px; cursor: pointer; border-left: 3px solid #0a84ff; transition: all 0.3s ease; } .event-item:hover { background: rgba(255, 255, 255, 0.12); transform: translateX(5px); } .event-time { font-size: 12px; color: rgba(255, 255, 255, 0.7); margin-bottom: 4px; font-weight: 500; } .event-title { font-size: 14px; font-weight: 600; margin-bottom: 4px; } .event-location { font-size: 12px; color: rgba(255, 255, 255, 0.6); display: flex; align-items: center; } .location-dot { display: inline-block; width: 4px; height: 4px; background: rgba(255, 255, 255, 0.6); border-radius: 50%; margin-right: 5px; } .analytics-container { position: absolute; top: 0; left: 0; width: 100%; height: calc(100% - 60px); background: linear-gradient(145deg, #1a1f35, #2c344f); padding: 25px 20px; transform: translateX(100%); transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94); opacity: 0; } .analytics-container.active { transform: translateX(0); opacity: 1; } .analytics-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .analytics-title { font-size: 18px; font-weight: 600; } .analytics-period { font-size: 12px; color: rgba(255, 255, 255, 0.7); padding: 4px 10px; background: rgba(255, 255, 255, 0.1); border-radius: 15px; } .stats-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; margin-bottom: 20px; } .stat-card { background: rgba(255, 255, 255, 0.08); border-radius: 12px; padding: 15px; transition: all 0.3s ease; } .stat-card:hover { background: rgba(255, 255, 255, 0.12); transform: translateY(-3px); } .stat-label { font-size: 12px; color: rgba(255, 255, 255, 0.7); margin-bottom: 10px; } .stat-value { font-size: 24px; font-weight: 700; margin-bottom: 5px; } .stat-trend { display: flex; align-items: center; font-size: 11px; } .trend-up { color: #4cd964; } .trend-down { color: #ff3b30; } .trend-arrow { margin-right: 3px; } .chart-container { background: rgba(255, 255, 255, 0.08); border-radius: 12px; padding: 15px; height: 140px; margin-bottom: 20px; position: relative; } .chart-header { display: flex; justify-content: space-between; margin-bottom: 15px; } .chart-title { font-size: 14px; font-weight: 600; } .chart-legend { display: flex; gap: 10px; } .legend-item { display: flex; align-items: center; font-size: 11px; color: rgba(255, 255, 255, 0.7); } .legend-color { width: 8px; height: 8px; border-radius: 50%; margin-right: 5px; } .legend-color.meetings { background: #0a84ff; } .legend-color.tasks { background: #5e5ce6; } .chart-canvas { width: 100%; height: 80px; position: relative; } .chart-bar { position: absolute; bottom: 0; width: 6px; border-radius: 3px 3px 0 0; background: #0a84ff; animation: bar-rise 1s cubic-bezier(0.25, 0.46, 0.45, 0.94); } @keyframes bar-rise { from { height: 0; } } .chart-label { position: absolute; bottom: -15px; font-size: 9px; color: rgba(255, 255, 255, 0.6); text-align: center; width: 20px; transform: translateX(-6px); } .productivity-score { display: flex; align-items: center; gap: 15px; background: rgba(255, 255, 255, 0.08); border-radius: 12px; padding: 15px; } .score-circle { position: relative; width: 60px; height: 60px; border-radius: 50%; background: rgba(0, 0, 0, 0.2); } .score-value { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 18px; font-weight: 700; } .score-progress { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border-radius: 50%; background: conic-gradient( #5e5ce6 0% 85%, rgba(255, 255, 255, 0.1) 85% 100% ); clip-path: circle(50%); } .score-info { flex: 1; } .score-title { font-size: 14px; font-weight: 600; margin-bottom: 5px; } .score-desc { font-size: 12px; color: rgba(255, 255, 255, 0.7); line-height: 1.4; } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.1); } 100% { transform: scale(1); } } .notification-item.new { position: relative; animation: pulse 2s infinite; border-left: 3px solid #ff3b30; } @keyframes slide-in { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } .notification-item { animation: slide-in 0.5s forwards; animation-delay: calc(var(--index) * 0.1s); opacity: 0; } .settings-container { position: absolute; top: 0; left: 0; width: 100%; height: calc(100% - 60px); background: linear-gradient(145deg, #1a1f35, #2c344f); padding: 25px 20px; transform: translateX(100%); transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94); opacity: 0; } .settings-container.active { transform: translateX(0); opacity: 1; } .settings-header { margin-bottom: 20px; } .settings-title { font-size: 18px; font-weight: 600; } .settings-section { margin-bottom: 20px; } .settings-section-title { font-size: 14px; font-weight: 500; color: rgba(255, 255, 255, 0.7); margin-bottom: 10px; } .settings-option { display: flex; justify-content: space-between; align-items: center; padding: 12px 0; border-bottom: 1px solid rgba(255, 255, 255, 0.08); } .option-label { font-size: 14px; } .toggle-switch { position: relative; width: 40px; height: 20px; background: rgba(255, 255, 255, 0.2); border-radius: 10px; cursor: pointer; transition: all 0.3s ease; } .toggle-switch.active { background: #4cd964; } .toggle-switch::after { content: ''; position: absolute; width: 16px; height: 16px; border-radius: 50%; background: #fff; top: 2px; left: 2px; transition: all 0.3s ease; } .toggle-switch.active::after { left: calc(100% - 18px); } .setting-select { background: rgba(255, 255, 255, 0.1); color: #fff; border: none; border-radius: 5px; padding: 5px 10px; font-size: 14px; outline: none; width: 100px; cursor: pointer; } .setting-select option { background: #2c344f; } .watch-wrist-band { position: absolute; width: 80px; height: 50px; background: #242c42; top: -25px; left: 50%; transform: translateX(-50%); border-radius: 0 0 40px 40px; box-shadow: 0 10px 20px rgba(0, 0, 0, 0.15), inset 0 -5px 10px rgba(0, 0, 0, 0.2); z-index: -1; } .watch-wrist-band::after { content: ''; position: absolute; width: 80px; height: 50px; background: #242c42; bottom: -405px; left: 0; border-radius: 40px 40px 0 0; box-shadow: 0 -10px 20px rgba(0, 0, 0, 0.15), inset 0 5px 10px rgba(0, 0, 0, 0.2); } .watch-reflection { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, transparent 100%); pointer-events: none; z-index: 10; } @media (max-width: 400px) { .watch-container { width: 290px; height: 350px; } .current-time { font-size: 48px; } .notification-item { padding: 8px 12px; } .events-list, .stats-grid { gap: 10px; } } @keyframes highlight { 0% { box-shadow: 0 0 0 0 rgba(10, 132, 255, 0.5); } 70% { box-shadow: 0 0 0 10px rgba(10, 132, 255, 0); } 100% { box-shadow: 0 0 0 0 rgba(10, 132, 255, 0); } } .day-cell.selected { background: rgba(10, 132, 255, 0.5); animation: highlight 1.5s infinite; } </style> </head> <body> <div class="watch-container"> <div class="watch-screen"> <div class="top-bar"> <div class="connection-status">4G</div> <div class="battery"> <div class="battery-icon"> <div class="battery-level"></div> <div class="battery-tip"></div> </div> <span>72%</span> </div> </div> <div class="time-display"> <div class="current-time">10:42</div> <div class="current-date">TUE, NOV 14</div> </div> <div class="notification-center"> <div class="notification-title"> <h3>Notifications</h3> <span class="notification-count">3</span> </div> <div class="notification-item new" style="--index: 1;"> <div class="notification-header"> <span class="app-name">Agenda</span> <span class="notification-time">Just now</span> </div> <div class="notification-content"> Your Q4 Budget Review meeting starts in 15 minutes </div> </div> <div class="notification-item" style="--index: 2;"> <div class="notification-header"> <span class="app-name">Slack</span> <span class="notification-time">2m ago</span> </div> <div class="notification-content"> Sarah Donovan shared quarterly sales report in #sales-team </div> </div> <div class="notification-item" style="--index: 3;"> <div class="notification-header"> <span class="app-name">Email</span> <span class="notification-time">23m ago</span> </div> <div class="notification-content"> Client proposal approved by Acme Corp. Contract ready for review </div> </div> </div> <div class="calendar-container"> <div class="calendar-header"> <div class="calendar-title">Calendar</div> <div class="calendar-nav"> <div class="calendar-nav-btn">❮</div> <div class="calendar-nav-btn">❯</div> </div> </div> <div class="month-year">November 2023</div> <div class="days-header"> <div class="day-name">S</div> <div class="day-name">M</div> <div class="day-name">T</div> <div class="day-name">W</div> <div class="day-name">T</div> <div class="day-name">F</div> <div class="day-name">S</div> </div> <div class="days-grid"> <div class="day-cell other-month">29</div> <div class="day-cell other-month">30</div> <div class="day-cell other-month">31</div> <div class="day-cell">1</div> <div class="day-cell">2</div> <div class="day-cell">3</div> <div class="day-cell">4</div> <div class="day-cell">5</div> <div class="day-cell">6</div> <div class="day-cell">7</div> <div class="day-cell has-event">8</div> <div class="day-cell">9</div> <div class="day-cell">10</div> <div class="day-cell">11</div> <div class="day-cell has-event">12</div> <div class="day-cell">13</div> <div class="day-cell today selected">14</div> <div class="day-cell has-event">15</div> <div class="day-cell">16</div> <div class="day-cell">17</div> <div class="day-cell">18</div> <div class="day-cell">19</div> <div class="day-cell has-event">20</div> <div class="day-cell">21</div> </div> <div class="events-list"> <div class="event-item"> <div class="event-time">10:45 AM - 11:30 AM</div> <div class="event-title">Q4 Budget Review</div> <div class="event-location"> <span class="location-dot"></span> Executive Boardroom </div> </div> <div class="event-item"> <div class="event-time">2:00 PM - 3:00 PM</div> <div class="event-title">Client Pitch: Vertex Solutions</div> <div class="event-location"> <span class="location-dot"></span> Video Conference </div> </div> </div> </div> <div class="analytics-container"> <div class="analytics-header"> <div class="analytics-title">Performance</div> <div class="analytics-period">This Week</div> </div> <div class="stats-grid"> <div class="stat-card"> <div class="stat-label">Meetings</div> <div class="stat-value">14</div> <div class="stat-trend trend-up"> <span class="trend-arrow">↑</span> 12% </div> </div> <div class="stat-card"> <div class="stat-label">Tasks</div> <div class="stat-value">23</div> <div class="stat-trend trend-down"> <span class="trend-arrow">↓</span> 5% </div> </div> </div> <div class="chart-container"> <div class="chart-header"> <div class="chart-title">Weekly Activity</div> <div class="chart-legend"> <div class="legend-item"> <span class="legend-color meetings"></span> <span>Meetings</span> </div> <div class="legend-item"> <span class="legend-color tasks"></span> <span>Tasks</span> </div> </div> </div> <div class="chart-canvas"> <div class="chart-bar" style="height: 30px; left: 15px; background: #0a84ff;"></div> <div class="chart-label" style="left: 15px;">M</div> <div class="chart-bar" style="height: 45px; left: 50px; background: #0a84ff;"></div> <div class="chart-label" style="left: 50px;">T</div> <div class="chart-bar" style="height: 25px; left: 85px; background: #0a84ff;"></div> <div class="chart-label" style="left: 85px;">W</div> <div class="chart-bar" style="height: 60px; left: 120px; background: #0a84ff;"></div> <div class="chart-label" style="left: 120px;">T</div> <div class="chart-bar" style="height: 40px; left: 155px; background: #0a84ff;"></div> <div class="chart-label" style="left: 155px;">F</div> <div class="chart-bar" style="height: 15px; left: 190px; background: #0a84ff;"></div> <div class="chart-label" style="left: 190px;">S</div> <div class="chart-bar" style="height: 10px; left: 225px; background: #0a84ff;"></div> <div class="chart-label" style="left: 225px;">S</div> </div> </div> <div class="productivity-score"> <div class="score-circle"> <div class="score-progress"></div> <div class="score-value">85%</div> </div> <div class="score-info"> <div class="score-title">Productivity Score</div> <div class="score-desc">Excellent work rate this week. 15% above your monthly average.</div> </div> </div> </div> <div class="settings-container"> <div class="settings-header"> <div class="settings-title">Settings</div> </div> <div class="settings-section"> <div class="settings-section-title">Notifications</div> <div class="settings-option"> <div class="option-label">Meeting Reminders</div> <div class="toggle-switch active"></div> </div> <div class="settings-option"> <div class="option-label">Email Alerts</div> <div class="toggle-switch active"></div> </div> <div class="settings-option"> <div class="option-label">Task Notifications</div> <div class="toggle-switch"></div> </div> </div> <div class="settings-section"> <div class="settings-section-title">Display</div> <div class="settings-option"> <div class="option-label">24-Hour Time</div> <div class="toggle-switch active"></div> </div> <div class="settings-option"> <div class="option-label">Default View</div> <select class="setting-select"> <option value="notifications">Notifications</option> <option value="calendar">Calendar</option> <option value="analytics">Analytics</option> </select> </div> </div> <div class="settings-section"> <div class="settings-section-title">Advanced</div> <div class="settings-option"> <div class="option-label">Sync with Cloud</div> <div class="toggle-switch active"></div> </div> <div class="settings-option"> <div class="option-label">Power Saving</div> <div class="toggle-switch"></div> </div> </div> </div> <div class="bottom-nav"> <div class="nav-item active" id="nav-home"> <div class="nav-icon">◉</div> <div class="nav-label">Home</div> </div> <div class="nav-item" id="nav-calendar"> <div class="nav-icon">◈</div> <div class="nav-label">Calendar</div> </div> <div class="nav-item" id="nav-analytics"> <div class="nav-icon">◎</div> <div class="nav-label">Stats</div> </div> <div class="nav-item" id="nav-settings"> <div class="nav-icon">⚙</div> <div class="nav-label">Settings</div> </div> </div> </div> <div class="watch-reflection"></div> <div class="watch-wrist-band"></div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Get DOM elements const navItems = document.querySelectorAll('.nav-item'); const homeContainer = document.querySelector('.notification-center'); const calendarContainer = document.querySelector('.calendar-container'); const analyticsContainer = document.querySelector('.analytics-container'); const settingsContainer = document.querySelector('.settings-container'); const toggleSwitches = document.querySelectorAll('.toggle-switch'); const notificationItems = document.querySelectorAll('.notification-item'); const dayCells = document.querySelectorAll('.day-cell'); // Current time update function updateTime() { const now = new Date(); const hours = now.getHours(); const minutes = now.getMinutes(); const formattedHours = hours < 10 ? '0' + hours : hours; const formattedMinutes = minutes < 10 ? '0' + minutes : minutes; document.querySelector('.current-time').textContent = `${formattedHours}:${formattedMinutes}`; // Update date const days = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']; const months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']; const dayName = days[now.getDay()]; const monthName = months[now.getMonth()]; const date = now.getDate(); document.querySelector('.current-date').textContent = `${dayName}, ${monthName} ${date}`; // Update battery level randomly to simulate drain const batteryLevel = document.querySelector('.battery-level'); const currentWidth = parseFloat(getComputedStyle(batteryLevel).width); const parentWidth = parseFloat(getComputedStyle(batteryLevel.parentElement).width) - 2; const
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Summit X1 Extreme Sports Watch</title> <style> @import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@500;700;900&family=Roboto+Mono:wght@400;700&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } :root { --primary: #ff3e00; --secondary: #0bdfff; --dark: #101821; --light: #f7f9fc; --warn: #ffcc00; --green: #4dff88; } body { font-family: 'Barlow Condensed', sans-serif; background-color: var(--dark); color: var(--light); display: flex; justify-content: center; align-items: center; min-height: 100vh; overflow: hidden; position: relative; } .container { width: 100%; max-width: 700px; height: 700px; padding: 20px; display: flex; flex-direction: column; align-items: center; justify-content: center; overflow: hidden; position: relative; } .terrain-bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; opacity: 0.2; } .watch { width: 260px; height: 320px; background: var(--dark); border-radius: 40px; position: relative; overflow: hidden; box-shadow: 0 0 20px rgba(0,0,0,0.8), 0 0 0 10px rgba(255, 62, 0, 0.2), inset 0 0 30px rgba(0,0,0,0.5); transition: all 0.5s ease; } .watch::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(11, 223, 255, 0.05) 0%, rgba(255, 62, 0, 0.05) 100%); z-index: 1; pointer-events: none; } .watch-bezel { position: absolute; width: calc(100% + 30px); height: calc(100% + 30px); top: -15px; left: -15px; border-radius: 45px; border: 6px solid #272e36; box-shadow: inset 0 0 10px rgba(0,0,0,0.8); z-index: -1; background: linear-gradient(135deg, #1c2530 0%, #0a0e14 100%); } .watch-buttons { position: absolute; right: -12px; height: 160px; display: flex; flex-direction: column; justify-content: space-between; z-index: 10; } .watch-button { width: 8px; height: 25px; background: #272e36; border-radius: 0 4px 4px 0; cursor: pointer; box-shadow: -1px 2px 5px rgba(0,0,0,0.3); transition: all 0.2s ease; } .watch-button:active { background: var(--primary); transform: translateX(-2px); } .watch-screen { width: 100%; height: 100%; border-radius: 35px; background-color: #101821; position: relative; overflow: hidden; transition: all 0.3s ease; } .screen-content { width: 100%; height: 100%; padding: 20px 15px; position: relative; z-index: 5; } .watch-face { width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: space-between; position: relative; transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275); } .screen { position: absolute; width: 100%; height: 100%; top: 0; left: 0; padding: 20px 15px; transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275); display: flex; flex-direction: column; } .home-screen { transform: translateX(0); } .activity-screen { transform: translateX(100%); } .stats-screen { transform: translateX(200%); } .env-screen { transform: translateX(300%); } .header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; } .logo { font-size: 16px; font-weight: 900; color: var(--primary); letter-spacing: 1px; text-transform: uppercase; } .status-indicators { display: flex; gap: 8px; font-size: 10px; } .battery-indicator { display: flex; align-items: center; gap: 2px; } .battery-level { width: 16px; height: 8px; background: var(--green); border-radius: 2px; position: relative; } .signal-indicator { color: var(--secondary); } .time { font-size: 48px; font-weight: 700; text-align: center; margin: 0; line-height: 1; letter-spacing: -1px; } .date { font-size: 14px; text-align: center; margin-top: 5px; opacity: 0.8; font-family: 'Roboto Mono', monospace; } .metrics { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-top: 20px; } .metric { display: flex; flex-direction: column; align-items: center; padding: 10px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; transition: all 0.3s ease; } .metric:hover { background: rgba(255, 62, 0, 0.1); } .metric-value { font-size: 22px; font-weight: 700; } .metric-unit { font-size: 12px; opacity: 0.7; margin-top: 2px; } .activity-ring { width: 100%; height: 5px; background: rgba(255, 255, 255, 0.1); border-radius: 5px; margin-top: 8px; overflow: hidden; } .activity-progress { height: 100%; background: var(--primary); width: 65%; border-radius: 5px; } .quick-nav { display: flex; justify-content: space-around; margin-top: 20px; padding: 8px 0; border-top: 1px solid rgba(255, 255, 255, 0.1); } .nav-btn { color: var(--light); background: none; border: none; font-size: 20px; cursor: pointer; opacity: 0.7; transition: all 0.2s ease; } .nav-btn.active { color: var(--primary); opacity: 1; } .nav-btn:hover { opacity: 1; transform: scale(1.1); } .data-wheel { width: 230px; height: 230px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 50%; border: 2px dashed rgba(255, 255, 255, 0.1); transition: all 0.3s ease; } .data-point { width: 40px; height: 40px; background: rgba(255, 255, 255, 0.1); border-radius: 50%; position: absolute; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 16px; cursor: pointer; transition: all 0.3s ease; } .data-point:hover { background: var(--primary); transform: scale(1.1); } .data-point:nth-child(1) { top: 0; left: 50%; transform: translateX(-50%); background: var(--secondary); } .data-point:nth-child(2) { top: 50%; right: 0; transform: translateY(-50%); background: var(--primary); } .data-point:nth-child(3) { bottom: 0; left: 50%; transform: translateX(-50%); background: var(--warn); } .data-point:nth-child(4) { top: 50%; left: 0; transform: translateY(-50%); background: var(--green); } .activity-heading { font-size: 20px; font-weight: 700; text-transform: uppercase; margin-bottom: 15px; } .activity-stats { display: flex; flex-direction: column; gap: 15px; flex-grow: 1; } .stat-row { display: flex; justify-content: space-between; align-items: center; padding: 10px 15px; background: rgba(255, 255, 255, 0.05); border-radius: 10px; transition: all 0.3s ease; } .stat-row:hover { background: rgba(255, 62, 0, 0.1); transform: translateX(5px); } .stat-label { font-size: 14px; opacity: 0.8; } .stat-value { font-size: 18px; font-weight: 700; font-family: 'Roboto Mono', monospace; color: var(--secondary); } .heart-rate { color: var(--primary); } .altitude { color: var(--warn); } .chart-container { width: 100%; height: 120px; margin-top: 10px; position: relative; } .chart { width: 100%; height: 100%; position: relative; } .chart-line { position: absolute; bottom: 0; width: 100%; height: 80px; fill: none; stroke: var(--secondary); stroke-width: 2; stroke-linejoin: round; } .chart-area { position: absolute; bottom: 0; width: 100%; height: 80px; fill: url(#gradient); opacity: 0.3; } .chart-axis { position: absolute; bottom: 0; width: 100%; height: 1px; background: rgba(255, 255, 255, 0.2); } .chart-labels { display: flex; justify-content: space-between; margin-top: 5px; font-size: 10px; opacity: 0.7; } .env-data { display: flex; flex-direction: column; gap: 15px; flex-grow: 1; } .weather-widget { background: rgba(11, 223, 255, 0.1); border-radius: 15px; padding: 15px; display: flex; flex-direction: column; gap: 10px; } .weather-top { display: flex; justify-content: space-between; } .weather-temp { font-size: 36px; font-weight: 700; } .weather-icon { font-size: 36px; color: var(--secondary); } .weather-details { display: flex; justify-content: space-between; font-size: 14px; margin-top: 10px; } .compass { width: 80px; height: 80px; border-radius: 50%; border: 2px solid rgba(255, 255, 255, 0.2); position: relative; margin: 0 auto; margin-top: 15px; } .compass-needle { position: absolute; top: 50%; left: 50%; width: 4px; height: 60px; background: linear-gradient(to bottom, var(--primary) 50%, var(--light) 50%); transform-origin: center 50%; transform: translate(-50%, -50%) rotate(45deg); z-index: 2; border-radius: 2px; } .compass-center { position: absolute; top: 50%; left: 50%; width: 12px; height: 12px; background: var(--dark); border: 2px solid var(--light); border-radius: 50%; transform: translate(-50%, -50%); z-index: 3; } .compass-points { position: absolute; width: 100%; height: 100%; top: 0; left: 0; } .compass-point { position: absolute; font-size: 12px; font-weight: 700; } .compass-point.n { top: 5px; left: 50%; transform: translateX(-50%); color: var(--primary); } .compass-point.e { top: 50%; right: 5px; transform: translateY(-50%); } .compass-point.s { bottom: 5px; left: 50%; transform: translateX(-50%); } .compass-point.w { top: 50%; left: 5px; transform: translateY(-50%); } .swipe-indicator { position: absolute; bottom: 10px; left: 50%; transform: translateX(-50%); display: flex; gap: 5px; } .swipe-dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(255, 255, 255, 0.3); transition: all 0.3s ease; } .swipe-dot.active { background: var(--primary); width: 16px; border-radius: 4px; } .notification { position: absolute; top: 15px; left: 50%; transform: translateX(-50%) translateY(-100px); background: var(--warn); color: var(--dark); padding: 10px 20px; border-radius: 20px; font-weight: 700; z-index: 100; box-shadow: 0 5px 15px rgba(0,0,0,0.3); transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275); } .notification.show { transform: translateX(-50%) translateY(0); } .models-display { margin-top: 50px; width: 100%; display: flex; justify-content: space-around; gap: 20px; } .model-card { width: 180px; position: relative; cursor: pointer; perspective: 1000px; transition: all 0.3s ease; } .model-card:hover { transform: translateY(-10px); } .model-card:hover .model-info { opacity: 1; } .model-img { width: 100%; height: 150px; background: linear-gradient(135deg, #272e36 0%, #15191f 100%); border-radius: 15px; display: flex; align-items: center; justify-content: center; overflow: hidden; box-shadow: 0 10px 20px rgba(0,0,0,0.3); } .model-name { font-size: 20px; font-weight: 700; margin-top: 10px; text-align: center; } .model-info { font-size: 14px; margin-top: 5px; text-align: center; opacity: 0.7; transition: all 0.3s ease; } .model-img img { width: 100%; object-fit: cover; transition: all 0.5s ease; } .model-card:hover .model-img img { transform: scale(1.1); } .highlight { color: var(--primary); } .data-ring { position: absolute; width: 80px; height: 80px; border-radius: 50%; border: 4px solid rgba(255, 255, 255, 0.1); top: 50%; left: 50%; transform: translate(-50%, -50%); } @keyframes pulse { 0% { transform: scale(1); opacity: 0.7; } 50% { transform: scale(1.05); opacity: 1; } 100% { transform: scale(1); opacity: 0.7; } } .data-pulse { position: absolute; width: 60px; height: 60px; border-radius: 50%; background: radial-gradient(circle, rgba(255, 62, 0, 0.3) 0%, rgba(255, 62, 0, 0) 70%); top: 50%; left: 50%; transform: translate(-50%, -50%); animation: pulse 2s infinite; } .current-activity { position: absolute; top: 0; left: 0; width: 100%; padding: 15px; background: linear-gradient(180deg, rgba(16, 24, 33, 0.95) 0%, rgba(16, 24, 33, 0) 100%); z-index: 10; display: flex; align-items: center; justify-content: space-between; opacity: 0; transform: translateY(-20px); transition: all 0.3s ease; } .watch:hover .current-activity { opacity: 1; transform: translateY(0); } .activity-name { font-size: 16px; font-weight: 700; color: var(--primary); } .activity-timer { font-family: 'Roboto Mono', monospace; font-weight: 700; } @media (max-width: 700px) { .container { padding: 10px; } .models-display { flex-direction: column; align-items: center; gap: 30px; } .model-card { width: 200px; } } /* Topography pattern */ .topography { background-color: var(--dark); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 800 800'%3E%3Cg fill='none' stroke='%23111b27' stroke-width='1'%3E%3Cpath d='M769 229L1037 260.9M927 880L731 737 520 660 309 538 40 599 295 764 126.5 879.5 40 599-197 493 102 382-31 229 126.5 79.5-69-63'/%3E%3Cpath d='M-31 229L237 261 390 382 603 493 308.5 537.5 101.5 381.5M370 905L295 764'/%3E%3Cpath d='M520 660L578 842 731 737 840 599 603 493 520 660 295 764 309 538 390 382 539 269 769 229 577.5 41.5 370 105 295 -36 126.5 79.5 237 261 102 382 40 599 -69 737 127 880'/%3E%3Cpath d='M520-140L578.5 42.5 731-63M603 493L539 269 237 261 370 105M902 382L539 269M390 382L102 382'/%3E%3Cpath d='M-222 42L126.5 79.5 370 105 539 269 577.5 41.5 927 80 769 229 902 382 603 493 731 737M295-36L577.5 41.5M578 842L295 764M40-201L127 80M102 382L-261 269'/%3E%3C/g%3E%3Cg fill='%231a2736'%3E%3Ccircle cx='769' cy='229' r='5'/%3E%3Ccircle cx='539' cy='269' r='5'/%3E%3Ccircle cx='603' cy='493' r='5'/%3E%3Ccircle cx='731' cy='737' r='5'/%3E%3Ccircle cx='520' cy='660' r='5'/%3E%3Ccircle cx='309' cy='538' r='5'/%3E%3Ccircle cx='295' cy='764' r='5'/%3E%3Ccircle cx='40' cy='599' r='5'/%3E%3Ccircle cx='102' cy='382' r='5'/%3E%3Ccircle cx='127' cy='80' r='5'/%3E%3Ccircle cx='370' cy='105' r='5'/%3E%3Ccircle cx='578' cy='42' r='5'/%3E%3Ccircle cx='237' cy='261' r='5'/%3E%3Ccircle cx='390' cy='382' r='5'/%3E%3C/g%3E%3C/svg%3E"); } </style> </head> <body class="topography"> <div class="container"> <div class="notification" id="notification">DROP DETECTED - RECORDING DATA</div> <div class="watch"> <div class="watch-bezel"></div> <div class="watch-buttons"> <div class="watch-button" id="btnTop"></div> <div class="watch-button" id="btnMiddle"></div> <div class="watch-button" id="btnBottom"></div> </div> <div class="current-activity"> <span class="activity-name">TRAIL RUN</span> <span class="activity-timer">01:23:45</span> </div> <div class="watch-screen"> <div class="screen-content"> <!-- Home Screen --> <div class="screen home-screen" id="homeScreen"> <div class="header"> <div class="logo">SUMMIT X1</div> <div class="status-indicators"> <div class="signal-indicator">GPS</div> <div class="battery-indicator"> <div class="battery-level"></div> <span>87%</span> </div> </div> </div> <div class="time">14:36</div> <div class="date">MON 22 AUG</div> <div class="data-ring"></div> <div class="data-pulse"></div> <div class="metrics"> <div class="metric"> <div class="metric-value">11,342</div> <div class="metric-unit">STEPS</div> <div class="activity-ring"> <div class="activity-progress"></div> </div> </div> <div class="metric"> <div class="metric-value">1,673</div> <div class="metric-unit">CALORIES</div> <div class="activity-ring"> <div class="activity-progress" style="width: 80%;"></div> </div> </div> <div class="metric"> <div class="metric-value">8.6</div> <div class="metric-unit">KILOMETERS</div> <div class="activity-ring"> <div class="activity-progress" style="width: 70%; background-color: var(--secondary);"></div> </div> </div> <div class="metric"> <div class="metric-value">72</div> <div class="metric-unit">BPM</div> <div class="activity-ring"> <div class="activity-progress" style="width: 45%; background-color: var(--green);"></div> </div> </div> </div> <div class="quick-nav"> <button class="nav-btn active">⌂</button> <button class="nav-btn">▶</button> <button class="nav-btn">📊</button> <button class="nav-btn">🌡️</button> </div> </div> <!-- Activity Screen --> <div class="screen activity-screen" id="activityScreen"> <div class="header"> <div class="logo">ACTIVITY</div> <div class="status-indicators"> <div class="signal-indicator">GPS</div> <div class="battery-indicator"> <div class="battery-level"></div> <span>87%</span> </div> </div> </div> <div class="data-wheel"> <div class="data-point">SPD</div> <div class="data-point">HRT</div> <div class="data-point">ALT</div> <div class="data-point">DST</div> </div> <div class="quick-nav"> <button class="nav-btn">⌂</button> <button class="nav-btn active">▶</button> <button class="nav-btn">📊</button> <button class="nav-btn">🌡️</button> </div> </div> <!-- Stats Screen --> <div class="screen stats-screen" id="statsScreen"> <div class="header"> <div class="logo">STATS</div> <div class="status-indicators"> <div class="signal-indicator">GPS</div> <div class="battery-indicator"> <div class="battery-level"></div> <span>87%</span> </div> </div> </div> <div class="activity-heading">Trail Run</div> <div class="activity-stats"> <div class="stat-row"> <div class="stat-label">DISTANCE</div> <div class="stat-value">8.6 KM</div> </div> <div class="stat-row"> <div class="stat-label">PACE</div> <div class="stat-value">5:24 /KM</div> </div> <div class="stat-row"> <div class="stat-label">HEART RATE</div> <div class="stat-value heart-rate">142 BPM</div> </div> <div class="stat-row"> <div class="stat-label">ALTITUDE</div> <div class="stat-value altitude">1,853 M</div> </div> <div class="stat-row"> <div class="stat-label">CALORIES</div> <div class="stat-value">752 KCAL</div> </div> </div> <div class="quick-nav"> <button class="nav-btn">⌂</button> <button class="nav-btn">▶</button> <button class="nav-btn active">📊</button> <button class="nav-btn">🌡️</button> </div> </div> <!-- Environment Screen --> <div class="screen env-screen" id="envScreen"> <div class="header"> <div class="logo">ENVIRON</div> <div class="status-indicators"> <div class="signal-indicator">GPS</div> <div class="battery-indicator"> <div class="battery-level"></div> <span>87%</span> </div> </div> </div> <div class="env-data"> <div class="weather-widget"> <div class="weather-top"> <div class="weather-temp">14°C</div> <div class="weather-icon">☀️</div> </div> <div class="weather-details"> <div>PRESSURE: 1013 hPa</div> <div>HUM: 72%</div> </div> </div> <div class="stat-row"> <div class="stat-label">ALTITUDE</div> <div class="stat-value altitude">1,853 M</div> </div> <div class="stat-row"> <div class="stat-label">INCLINE</div> <div class="stat-value">8.4%</div> </div> <div class="compass"> <div class="compass-needle"></div> <div class="compass-center"></div> <div class="compass-points"> <div class="compass-point n">N</div> <div class="compass-point e">E</div> <div class="compass-point s">S</div> <div class="compass-point w">W</div> </div> </div> <div class="stat-row"> <div class="stat-label">HEADING</div> <div class="stat-value">45° NE</div> </div> </div> <div class="quick-nav"> <button class="nav-btn">⌂</button> <button class="nav-btn">▶</button> <button class="nav-btn">📊</button> <button class="nav-btn active">🌡️</button> </div> </div> </div> </div> </div> <div class="swipe-indicator"> <div class="swipe-dot active"></div> <div class="swipe-dot"></div> <div class="swipe-dot"></div> <div class="swipe-dot"></div> </div> <div class="models-display"> <div class="model-card"> <div class="model-img"> <img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE1MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJub25lIi8+PGNpcmNsZSBjeD0iOTAiIGN5PSI3NSIgcj0iNjAiIGZpbGw9IiMxMDE4MjEiIHN0cm9rZT0iI2ZmM2UwMCIgc3Ryb2tlLXdpZHRoPSI0Ii8+PHJlY3QgeD0iNjUiIHk9IjQ1IiB3aWR0aD0iNTAiIGhlaWdodD0iNjAiIHJ4PSI1IiByeT0iNSIgZmlsbD0iIzA5MGQxMyIgc3Ryb2tlPSIjMGJkZmZmIiBzdHJva2Utd2lkdGg9IjIiLz48Y2lyY2xlIGN4PSI5MCIgY3k9IjEyNSIgcj0iOCIgZmlsbD0iIzA5MGQxMyIgc3Ryb2tlPSIjMGJkZmZmIiBzdHJva2Utd2lkdGg9IjIiLz48cmVjdCB4PSI4NSIgeT0iMzUiIHdpZHRoPSIxMCIgaGVpZ2h0PSI1IiByeD0iMiIgcnk9IjIiIGZpbGw9IiMwOTBkMTMiLz48cGF0aCBkPSJNMTIwIDc1IHYtMTUgaCA1IHYgMTUiIGZpbGw9IiMwOTBkMTMiIHN0cm9rZT0iIzBiZGZmZiIgc3Ryb2tlLXdpZHRoPSIyIi8+PHBhdGggZD0iTTEyMCA4NSB2IDE1IGggNSB2IC0xNSIgZmlsbD0iIzA5MGQxMyIgc3Ryb2tlPSIjMGJkZmZmIiBzdHJva2Utd2lkdGg9IjIiLz48L3N2Zz4=" alt="Summit X1 Watch"> </div> <div class="model-name">SUMMIT <span class="highlight">X1</span></div> <div class="model-info">Extreme altitude tracking</div> </div> <div class="model-card"> <div class="model-img"> <img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE1MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJub25lIi8+PHJlY3QgeD0iNDAiIHk9IjQwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjcwIiByeD0
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>E-commerce Notification Watch</title> <style> :root { --primary: #ff5768; --secondary: #6b4dff; --tertiary: #00d9b2; --dark: #282a36; --light: #f8f8f2; --accent: #ffb347; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Poppins', -apple-system, BlinkMacSystemFont, sans-serif; } body { background-color: var(--dark); display: flex; justify-content: center; align-items: center; min-height: 100vh; overflow-x: hidden; color: var(--light); } .watch-container { width: 100%; max-width: 600px; margin: 0 auto; padding: 20px; position: relative; } .watch { background: linear-gradient(45deg, #1e2033, #3d3d6b); border-radius: 40px; box-shadow: 0 15px 35px rgba(0, 0, 0, 0.5); padding: 20px; overflow: hidden; position: relative; } .watch-band { position: absolute; height: 80px; width: 120%; background: linear-gradient(45deg, #ff5768, #6b4dff); top: -40px; left: -10%; transform: rotate(-5deg); z-index: -1; opacity: 0.7; border-radius: 50%; } .watch-band:nth-child(2) { top: auto; bottom: -40px; transform: rotate(5deg); background: linear-gradient(45deg, #6b4dff, #00d9b2); } .watch-face { background: rgba(20, 22, 35, 0.9); border-radius: 30px; padding: 20px; box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.5), 0 0 10px rgba(255, 255, 255, 0.1); position: relative; overflow: hidden; } .time-display { text-align: center; font-size: 48px; font-weight: 700; margin-bottom: 10px; background: linear-gradient(45deg, var(--primary), var(--secondary)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; position: relative; z-index: 2; text-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); } .date-display { text-align: center; font-size: 14px; margin-bottom: 20px; color: var(--light); opacity: 0.8; letter-spacing: 1px; } .notifications { position: relative; z-index: 1; } .slider-container { width: 100%; overflow: hidden; margin-bottom: 20px; border-radius: 15px; position: relative; } .slider { display: flex; transition: transform 0.5s ease-in-out; } .slider-item { min-width: 100%; padding: 15px; border-radius: 15px; display: flex; flex-direction: column; justify-content: center; align-items: center; position: relative; overflow: hidden; transition: all 0.3s ease; } .slider-item::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(255,87,104,0.8), rgba(107,77,255,0.3)); opacity: 0.9; z-index: -1; } .slider-item:nth-child(2)::before { background: linear-gradient(135deg, rgba(107,77,255,0.8), rgba(0,217,178,0.3)); } .slider-item:nth-child(3)::before { background: linear-gradient(135deg, rgba(0,217,178,0.8), rgba(255,179,71,0.3)); } .slider-content { text-align: center; color: white; z-index: 2; } .slider-content h3 { font-size: 20px; margin-bottom: 5px; font-weight: 700; text-shadow: 0 1px 3px rgba(0,0,0,0.3); } .slider-content p { font-size: 14px; margin-bottom: 10px; line-height: 1.4; } .discount-badge { position: absolute; top: 10px; right: 10px; background-color: var(--accent); color: var(--dark); font-weight: bold; padding: 5px 10px; border-radius: 20px; font-size: 14px; transform: rotate(5deg); box-shadow: 0 2px 5px rgba(0,0,0,0.2); animation: pulse 2s infinite; } .slider-dots { display: flex; justify-content: center; margin-top: 10px; } .dot { width: 8px; height: 8px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.3); margin: 0 5px; cursor: pointer; transition: background-color 0.3s ease; } .dot.active { background-color: var(--light); transform: scale(1.2); } .countdown-container { padding: 15px; background: rgba(30, 32, 51, 0.8); border-radius: 15px; margin-top: 15px; position: relative; overflow: hidden; box-shadow: 0 5px 15px rgba(0,0,0,0.2); } .countdown-container::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(255,87,104,0.1), rgba(107,77,255,0.1)); z-index: -1; } .countdown-title { text-align: center; margin-bottom: 10px; font-size: 16px; color: var(--light); } .countdown { display: flex; justify-content: center; gap: 10px; } .countdown-item { display: flex; flex-direction: column; align-items: center; position: relative; } .countdown-number { font-size: 24px; font-weight: bold; background: linear-gradient(45deg, var(--tertiary), var(--accent)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; position: relative; } .countdown-label { font-size: 10px; color: var(--light); opacity: 0.7; text-transform: uppercase; letter-spacing: 1px; } .countdown-separator { font-size: 24px; align-self: flex-start; margin-top: 0; color: var(--light); opacity: 0.5; } .actions { display: flex; justify-content: center; margin-top: 20px; gap: 10px; } .action-btn { padding: 10px 20px; background: none; border: none; border-radius: 25px; font-weight: 600; font-size: 14px; cursor: pointer; transition: all 0.3s ease; position: relative; overflow: hidden; z-index: 1; color: var(--light); } .action-btn::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(45deg, var(--primary), var(--secondary)); opacity: 0.9; z-index: -1; border-radius: 25px; transition: all 0.3s ease; } .action-btn:hover::before { opacity: 1; transform: scale(1.05); } .action-btn.secondary::before { background: linear-gradient(45deg, var(--secondary), var(--tertiary)); opacity: 0.2; } .watch-controls { display: flex; justify-content: space-between; margin-top: 20px; } .watch-btn { width: 12px; height: 30px; background: var(--primary); border-radius: 5px; cursor: pointer; transition: all 0.3s ease; } .watch-btn:hover { transform: scale(1.1); background: var(--secondary); } .bubble { position: absolute; border-radius: 50%; background: rgba(255, 255, 255, 0.1); animation: float 8s infinite linear; z-index: 0; } .notifications-badge { position: absolute; top: 10px; right: 10px; background: var(--primary); color: white; width: 20px; height: 20px; border-radius: 50%; display: flex; justify-content: center; align-items: center; font-size: 12px; font-weight: bold; animation: pulse 2s infinite; } .glare { position: absolute; top: 0; left: -100%; width: 50%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent); transform: skewX(-15deg); animation: glare 5s infinite; z-index: 10; pointer-events: none; } @keyframes glare { 0% { left: -100%; } 20%, 100% { left: 100%; } } @keyframes float { 0% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(-20px) rotate(180deg); } 100% { transform: translateY(0) rotate(360deg); } } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.1); } 100% { transform: scale(1); } } @media (max-width: 500px) { .watch-container { padding: 10px; } .time-display { font-size: 36px; } .slider-content h3 { font-size: 18px; } .slider-content p { font-size: 12px; } .countdown-number { font-size: 20px; } } </style> </head> <body> <div class="watch-container"> <div class="watch"> <div class="watch-band"></div> <div class="watch-band"></div> <div class="watch-face"> <div class="notifications-badge">3</div> <div class="glare"></div> <div class="time-display">12:45</div> <div class="date-display">Friday, June 14</div> <div class="notifications"> <div class="slider-container"> <div class="slider"> <div class="slider-item"> <div class="discount-badge">50% OFF</div> <div class="slider-content"> <h3>Summer Sneaker Drop</h3> <p>Limited edition collab just landed. Grab yours before they're gone!</p> </div> </div> <div class="slider-item"> <div class="discount-badge">BOGO</div> <div class="slider-content"> <h3>Festival Fit Check</h3> <p>Buy one, get one free on all festival accessories. Vibes included.</p> </div> </div> <div class="slider-item"> <div class="discount-badge">NEW</div> <div class="slider-content"> <h3>Tech Drop Alert</h3> <p>The wireless earbuds everyone's talking about are back in stock!</p> </div> </div> </div> <div class="slider-dots"> <div class="dot active"></div> <div class="dot"></div> <div class="dot"></div> </div> </div> <div class="countdown-container"> <div class="countdown-title">Flash Sale Ends In:</div> <div class="countdown"> <div class="countdown-item"> <div class="countdown-number" id="hours">04</div> <div class="countdown-label">hours</div> </div> <div class="countdown-separator">:</div> <div class="countdown-item"> <div class="countdown-number" id="minutes">32</div> <div class="countdown-label">mins</div> </div> <div class="countdown-separator">:</div> <div class="countdown-item"> <div class="countdown-number" id="seconds">15</div> <div class="countdown-label">secs</div> </div> </div> </div> <div class="actions"> <button class="action-btn">Shop Now</button> <button class="action-btn secondary">View All</button> </div> </div> <!-- Decorative bubbles --> <div class="bubble" style="width: 20px; height: 20px; top: 20%; left: 10%;"></div> <div class="bubble" style="width: 15px; height: 15px; top: 30%; right: 20%;"></div> <div class="bubble" style="width: 25px; height: 25px; bottom: 15%; left: 30%;"></div> </div> <div class="watch-controls"> <div class="watch-btn"></div> <div class="watch-btn"></div> <div class="watch-btn"></div> </div> </div> </div> <script> // Initialize the time and date display function updateTime() { const now = new Date(); const hours = now.getHours().toString().padStart(2, '0'); const minutes = now.getMinutes().toString().padStart(2, '0'); // Update time display const timeDisplay = document.querySelector('.time-display'); timeDisplay.textContent = `${hours}:${minutes}`; // Update date display const options = { weekday: 'long', month: 'long', day: 'numeric' }; const dateString = now.toLocaleDateString('en-US', options); const dateDisplay = document.querySelector('.date-display'); dateDisplay.textContent = dateString; } updateTime(); setInterval(updateTime, 60000); // Update every minute // Slider functionality let currentSlide = 0; const slider = document.querySelector('.slider'); const dots = document.querySelectorAll('.dot'); const slideCount = document.querySelectorAll('.slider-item').length; function goToSlide(index) { currentSlide = index; const offset = currentSlide * -100; slider.style.transform = `translateX(${offset}%)`; // Update active dot dots.forEach((dot, i) => { dot.classList.toggle('active', i === currentSlide); }); } // Auto slide change setInterval(() => { currentSlide = (currentSlide + 1) % slideCount; goToSlide(currentSlide); }, 5000); // Add click event to dots dots.forEach((dot, index) => { dot.addEventListener('click', () => { goToSlide(index); }); }); // Countdown timer functionality let countdown = { hours: 4, minutes: 32, seconds: 15 }; function updateCountdown() { countdown.seconds--; if (countdown.seconds < 0) { countdown.seconds = 59; countdown.minutes--; if (countdown.minutes < 0) { countdown.minutes = 59; countdown.hours--; if (countdown.hours < 0) { // Reset countdown when it reaches zero countdown = { hours: 4, minutes: 32, seconds: 15 }; } } } // Update the display document.getElementById('hours').textContent = countdown.hours.toString().padStart(2, '0'); document.getElementById('minutes').textContent = countdown.minutes.toString().padStart(2, '0'); document.getElementById('seconds').textContent = countdown.seconds.toString().padStart(2, '0'); } // Update countdown every second setInterval(updateCountdown, 1000); // Add interactive hover effects const sliderItems = document.querySelectorAll('.slider-item'); sliderItems.forEach(item => { item.addEventListener('mouseenter', () => { item.style.transform = 'scale(1.02)'; }); item.addEventListener('mouseleave', () => { item.style.transform = 'scale(1)'; }); }); // Add button click effects const buttons = document.querySelectorAll('.action-btn'); buttons.forEach(button => { button.addEventListener('click', function(e) { // Create a ripple effect const circle = document.createElement('div'); const diameter = Math.max(this.clientWidth, this.clientHeight); const radius = diameter / 2; circle.style.width = circle.style.height = `${diameter}px`; circle.style.left = `${e.clientX - this.offsetLeft - radius}px`; circle.style.top = `${e.clientY - this.offsetTop - radius}px`; circle.style.position = 'absolute'; circle.style.borderRadius = '50%'; circle.style.backgroundColor = 'rgba(255, 255, 255, 0.3)'; circle.style.pointerEvents = 'none'; circle.style.animation = 'ripple 0.8s ease-out forwards'; this.appendChild(circle); setTimeout(() => { circle.remove(); }, 800); // Simulate notification action const badge = document.querySelector('.notifications-badge'); const currentCount = parseInt(badge.textContent); if (currentCount > 0) { badge.textContent = currentCount - 1; if (currentCount - 1 === 0) { badge.style.display = 'none'; } } }); }); // Add keyframes for the ripple effect const style = document.createElement('style'); style.textContent = ` @keyframes ripple { 0% { transform: scale(0); opacity: 1; } 100% { transform: scale(4); opacity: 0; } } `; document.head.appendChild(style); // Watch control buttons functionality const watchButtons = document.querySelectorAll('.watch-btn'); watchButtons.forEach((btn, index) => { btn.addEventListener('click', () => { // Different actions for each button if (index === 0) { // Toggle between time and notification view const timeDisplay = document.querySelector('.time-display'); const dateDisplay = document.querySelector('.date-display'); const notifications = document.querySelector('.notifications'); if (timeDisplay.style.display === 'none') { timeDisplay.style.display = 'block'; dateDisplay.style.display = 'block'; notifications.style.display = 'block'; } else { goToSlide(0); // Reset to first notification } } else if (index === 1) { // Change theme colors const root = document.documentElement; const themes = [ { primary: '#ff5768', secondary: '#6b4dff', tertiary: '#00d9b2' }, { primary: '#00d9b2', secondary: '#ff5768', tertiary: '#6b4dff' }, { primary: '#6b4dff', secondary: '#00d9b2', tertiary: '#ff5768' } ]; const randomTheme = themes[Math.floor(Math.random() * themes.length)]; root.style.setProperty('--primary', randomTheme.primary); root.style.setProperty('--secondary', randomTheme.secondary); root.style.setProperty('--tertiary', randomTheme.tertiary); } else { // Show a "snooze" animation const badge = document.querySelector('.notifications-badge'); badge.style.animation = 'none'; setTimeout(() => { badge.style.animation = 'pulse 2s infinite'; }, 10); } }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Deep Blue Diver Watch Interface</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { width: 100%; height: 100%; background-color: #000; color: #fff; display: flex; justify-content: center; align-items: center; overflow: hidden; } .watch-container { position: relative; width: 700px; height: 700px; display: flex; justify-content: center; align-items: center; } .watch-bezel { position: absolute; width: 500px; height: 500px; border-radius: 50%; background: linear-gradient(45deg, #102030, #203545); box-shadow: 0 0 40px rgba(0, 162, 255, 0.4); display: flex; justify-content: center; align-items: center; transform: rotate(0deg); transition: transform 1.5s cubic-bezier(0.68, -0.55, 0.27, 1.55); } .watch-bezel:before { content: ''; position: absolute; width: 490px; height: 490px; border-radius: 50%; background: linear-gradient(45deg, #0a1a2a, #182835); z-index: -1; } .bezel-markers { position: absolute; width: 480px; height: 480px; border-radius: 50%; display: flex; justify-content: center; } .marker { position: absolute; width: 3px; height: 15px; background-color: rgba(0, 217, 255, 0.8); transform-origin: center 240px; box-shadow: 0 0 5px rgba(0, 217, 255, 0.8); } .marker.five { width: 5px; height: 20px; background-color: rgba(0, 255, 234, 1); } .watch-face { position: relative; width: 400px; height: 400px; border-radius: 50%; background: linear-gradient(135deg, #051724, #0b2a3f); box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.8), 0 0 20px rgba(0, 217, 255, 0.2); display: flex; flex-direction: column; justify-content: center; align-items: center; overflow: hidden; } .bubbles { position: absolute; width: 100%; height: 100%; overflow: hidden; border-radius: 50%; pointer-events: none; } .bubble { position: absolute; background-color: rgba(0, 217, 255, 0.1); border-radius: 50%; animation: rise linear infinite; } @keyframes rise { 0% { transform: translateY(100%) translateX(0); opacity: 0; } 20% { opacity: 0.8; } 100% { transform: translateY(-100%) translateX(var(--translate-x)); opacity: 0; } } .time-display { position: relative; font-size: 64px; font-weight: 700; color: #00eaff; text-shadow: 0 0 10px rgba(0, 234, 255, 0.7); margin-bottom: 20px; display: flex; align-items: center; z-index: 2; } .colon { animation: blink 1.5s infinite; } @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .date-display { font-size: 18px; font-weight: 500; color: #68d0e9; margin-bottom: 20px; z-index: 2; } .depth-meter { position: relative; width: 280px; height: 70px; background: linear-gradient(180deg, rgba(13, 52, 74, 0.7), rgba(5, 26, 37, 0.7)); border-radius: 35px; display: flex; justify-content: center; align-items: center; margin-bottom: 20px; box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.5); cursor: pointer; transition: all 0.3s ease; z-index: 2; } .depth-meter:hover { transform: scale(1.05); box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.5), 0 0 15px rgba(0, 217, 255, 0.3); } .depth-value { font-size: 38px; font-weight: 700; color: #00eaff; text-shadow: 0 0 8px rgba(0, 234, 255, 0.7); } .depth-unit { font-size: 20px; font-weight: 500; color: #68d0e9; margin-left: 5px; } .info-panel { display: flex; justify-content: space-between; width: 280px; z-index: 2; } .info-item { display: flex; flex-direction: column; align-items: center; padding: 12px; background: linear-gradient(180deg, rgba(13, 52, 74, 0.7), rgba(5, 26, 37, 0.7)); border-radius: 12px; cursor: pointer; transition: all 0.3s ease; width: 84px; } .info-item:hover { transform: translateY(-5px); box-shadow: 0 0 15px rgba(0, 217, 255, 0.3); } .info-icon { font-size: 24px; color: #00eaff; text-shadow: 0 0 5px rgba(0, 234, 255, 0.7); margin-bottom: 5px; } .info-value { font-size: 16px; font-weight: 700; color: #00eaff; } .info-label { font-size: 10px; color: #68d0e9; } .mode-indicators { position: absolute; top: 30%; left: 50%; transform: translateX(-50%); display: flex; gap: 20px; z-index: 2; } .mode-indicator { width: 10px; height: 10px; border-radius: 50%; background-color: rgba(104, 208, 233, 0.5); transition: all 0.3s ease; } .mode-indicator.active { background-color: #00eaff; box-shadow: 0 0 10px rgba(0, 234, 255, 0.7); } .water-ripple { position: absolute; width: 400px; height: 400px; border-radius: 50%; background: radial-gradient(circle, rgba(0, 217, 255, 0) 0%, rgba(0, 217, 255, 0.05) 70%, rgba(0, 217, 255, 0.1) 100%); transform: scale(0); opacity: 0; z-index: 1; } @keyframes ripple { 0% { transform: scale(0.3); opacity: 0.5; } 100% { transform: scale(1.5); opacity: 0; } } /* Mode menu */ .mode-menu { position: absolute; bottom: -100px; width: 300px; height: 70px; background: linear-gradient(180deg, rgba(13, 52, 74, 0.9), rgba(5, 26, 37, 0.9)); border-radius: 35px; display: flex; justify-content: space-around; align-items: center; transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55); opacity: 0; z-index: 3; box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); } .mode-menu.visible { bottom: 5px; opacity: 1; } .mode-button { display: flex; flex-direction: column; align-items: center; cursor: pointer; transition: all 0.3s ease; padding: 8px; border-radius: 10px; } .mode-button:hover { background-color: rgba(0, 234, 255, 0.2); } .mode-button.active { background-color: rgba(0, 234, 255, 0.3); } .mode-icon { font-size: 20px; color: #00eaff; margin-bottom: 5px; } .mode-name { font-size: 10px; color: #68d0e9; } /* Pulse animation */ @keyframes pulse { 0% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.1); opacity: 0.8; } 100% { transform: scale(1); opacity: 1; } } /* Oxygen Alert */ .oxygen-alert { position: absolute; top: -100px; width: 280px; padding: 15px; background: linear-gradient(180deg, rgba(255, 69, 58, 0.9), rgba(139, 0, 0, 0.9)); border-radius: 15px; text-align: center; transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55); opacity: 0; z-index: 4; box-shadow: 0 0 20px rgba(255, 0, 0, 0.3); } .oxygen-alert.visible { top: 70px; opacity: 1; animation: pulse 2s infinite; } .alert-title { font-size: 18px; font-weight: 700; color: white; margin-bottom: 8px; } .alert-message { font-size: 14px; color: rgba(255, 255, 255, 0.9); margin-bottom: 10px; } .alert-button { padding: 8px 20px; background-color: rgba(255, 255, 255, 0.2); border: none; border-radius: 20px; color: white; font-weight: 600; cursor: pointer; transition: all 0.3s ease; } .alert-button:hover { background-color: rgba(255, 255, 255, 0.3); } .compass-pointer { position: absolute; width: 4px; height: 180px; background: linear-gradient(to bottom, transparent, #00eaff 40%, #00eaff); top: calc(50% - 180px); left: calc(50% - 2px); transform-origin: bottom center; z-index: 1; opacity: 0; transition: opacity 0.5s ease; } .compass-pointer:after { content: 'N'; position: absolute; top: 0; left: 50%; transform: translateX(-50%); color: #00eaff; font-weight: bold; font-size: 16px; } .compass-pointer.visible { opacity: 1; } .compass-cardinal { position: absolute; font-size: 14px; color: #68d0e9; font-weight: bold; z-index: 1; opacity: 0; transition: opacity 0.5s ease; } .compass-cardinal.visible { opacity: 0.7; } /* Responsiveness */ @media (max-width: 700px) { .watch-bezel { width: 450px; height: 450px; } .bezel-markers { width: 430px; height: 430px; } .marker { transform-origin: center 215px; } .watch-face { width: 350px; height: 350px; } .time-display { font-size: 56px; } .depth-meter { width: 240px; } .info-panel { width: 240px; } .info-item { width: 70px; } } @media (max-width: 500px) { .watch-bezel { width: 380px; height: 380px; } .bezel-markers { width: 360px; height: 360px; } .marker { transform-origin: center 180px; } .watch-face { width: 300px; height: 300px; } .time-display { font-size: 48px; } .depth-meter { width: 200px; height: 60px; } .depth-value { font-size: 32px; } .info-panel { width: 200px; } .info-item { width: 60px; padding: 8px; } .info-icon { font-size: 20px; } .info-value { font-size: 14px; } } </style> </head> <body> <div class="watch-container"> <div class="watch-bezel"> <div class="bezel-markers"></div> <div class="watch-face"> <div class="bubbles"></div> <div class="mode-indicators"> <div class="mode-indicator active"></div> <div class="mode-indicator"></div> <div class="mode-indicator"></div> </div> <div class="time-display">10<span class="colon">:</span>28</div> <div class="date-display">WED 15 OCT</div> <div class="depth-meter"> <span class="depth-value">18.7</span> <span class="depth-unit">m</span> </div> <div class="info-panel"> <div class="info-item" id="oxygen"> <div class="info-icon">O₂</div> <div class="info-value">21%</div> <div class="info-label">OXYGEN</div> </div> <div class="info-item" id="temp"> <div class="info-icon">°C</div> <div class="info-value">19.4</div> <div class="info-label">TEMP</div> </div> <div class="info-item" id="mode"> <div class="info-icon">⚙️</div> <div class="info-value">DIVE</div> <div class="info-label">MODE</div> </div> </div> <div class="water-ripple"></div> <div class="compass-pointer"></div> <div class="compass-cardinal n">N</div> <div class="compass-cardinal e">E</div> <div class="compass-cardinal s">S</div> <div class="compass-cardinal w">W</div> </div> </div> <div class="mode-menu"> <div class="mode-button active" data-mode="dive"> <div class="mode-icon">🤿</div> <div class="mode-name">DIVE</div> </div> <div class="mode-button" data-mode="compass"> <div class="mode-icon">🧭</div> <div class="mode-name">COMPASS</div> </div> <div class="mode-button" data-mode="timer"> <div class="mode-icon">⏱️</div> <div class="mode-name">TIMER</div> </div> </div> <div class="oxygen-alert"> <div class="alert-title">OXYGEN ALERT</div> <div class="alert-message">Level dangerously low. Begin ascent immediately.</div> <button class="alert-button">ACKNOWLEDGE</button> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Create bezel markers const bezelMarkers = document.querySelector('.bezel-markers'); for (let i = 0; i < 60; i++) { const marker = document.createElement('div'); marker.className = 'marker'; if (i % 5 === 0) { marker.classList.add('five'); } marker.style.transform = `rotate(${i * 6}deg)`; bezelMarkers.appendChild(marker); } // Create bubbles const bubblesContainer = document.querySelector('.bubbles'); for (let i = 0; i < 25; i++) { createBubble(); } function createBubble() { const bubble = document.createElement('div'); bubble.className = 'bubble'; const size = Math.random() * 15 + 5; const translateX = Math.random() * 60 - 30; bubble.style.width = `${size}px`; bubble.style.height = `${size}px`; bubble.style.left = `${Math.random() * 100}%`; bubble.style.opacity = Math.random() * 0.5; bubble.style.animationDuration = `${Math.random() * 10 + 5}s`; bubble.style.setProperty('--translate-x', `${translateX}px`); bubblesContainer.appendChild(bubble); // Remove and recreate bubble when animation ends bubble.addEventListener('animationend', function() { bubble.remove(); createBubble(); }); } // Set compass cardinal points const compassPoints = document.querySelectorAll('.compass-cardinal'); const positions = [ { selector: '.n', top: '10%', left: '50%', transform: 'translateX(-50%)' }, { selector: '.e', top: '50%', right: '10%', transform: 'translateY(-50%)' }, { selector: '.s', bottom: '10%', left: '50%', transform: 'translateX(-50%)' }, { selector: '.w', top: '50%', left: '10%', transform: 'translateY(-50%)' } ]; positions.forEach((pos, i) => { const elem = compassPoints[i]; Object.keys(pos).forEach(key => { if (key !== 'selector') { elem.style[key] = pos[key]; } }); }); // Update time function updateTime() { const now = new Date(); let hours = now.getHours(); let minutes = now.getMinutes(); hours = hours < 10 ? '0' + hours : hours; minutes = minutes < 10 ? '0' + minutes : minutes; document.querySelector('.time-display').innerHTML = `${hours}<span class="colon">:</span>${minutes}`; const days = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']; const months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']; const day = days[now.getDay()]; const date = now.getDate(); const month = months[now.getMonth()]; document.querySelector('.date-display').textContent = `${day} ${date} ${month}`; } updateTime(); setInterval(updateTime, 1000); // Depth meter interaction const depthMeter = document.querySelector('.depth-meter'); let depth = 18.7; let depthIncreasing = true; depthMeter.addEventListener('click', function() { createWaterRipple(); depth = parseFloat(document.querySelector('.depth-value').textContent); // Simulate depth change more dramatically on click if (Math.random() > 0.5) { depth += (Math.random() * 2).toFixed(1); } else { depth -= (Math.random() * 2).toFixed(1); } if (depth < 0) depth = 0; if (depth > 40) depth = 40; document.querySelector('.depth-value').textContent = depth.toFixed(1); // Change bezel color based on depth updateBezelColor(depth); }); // Subtle automatic depth changes setInterval(function() { if (Math.random() > 0.7) { depth = parseFloat(document.querySelector('.depth-value').textContent); if (depthIncreasing) { depth += (Math.random() * 0.3).toFixed(1); if (depth > 20 || Math.random() > 0.7) depthIncreasing = false; } else { depth -= (Math.random() * 0.3).toFixed(1); if (depth < 15 || Math.random() > 0.7) depthIncreasing = true; } if (depth < 0) depth = 0; if (depth > 40) depth = 40; document.querySelector('.depth-value').textContent = depth.toFixed(1); updateBezelColor(depth); } }, 3000); function updateBezelColor(depth) { const bezel = document.querySelector('.watch-bezel'); if (depth > 30) { bezel.style.background = 'linear-gradient(45deg, #102030, #273a55)'; } else if (depth > 20) { bezel.style.background = 'linear-gradient(45deg, #102030, #203545)'; } else { bezel.style.background = 'linear-gradient(45deg, #102030, #173040)'; } } // Water ripple effect function createWaterRipple() { const ripple = document.querySelector('.water-ripple'); ripple.style.animation = 'none'; // Trigger reflow void ripple.offsetWidth; ripple.style.animation = 'ripple 1.5s ease-out'; } // Mode selection const modeButton = document.getElementById('mode'); const modeMenu = document.querySelector('.mode-menu'); const modeButtons = document.querySelectorAll('.mode-button'); const modeIndicators = document.querySelectorAll('.mode-indicator'); const compassPointer = document.querySelector('.compass-pointer'); const compassCardinals = document.querySelectorAll('.compass-cardinal'); let currentMode = 'dive'; let menuVisible = false; modeButton.addEventListener('click', function() { menuVisible = !menuVisible; if (menuVisible) { modeMenu.classList.add('visible'); } else { modeMenu.classList.remove('visible'); } createWaterRipple(); }); modeButtons.forEach((button, index) => { button.addEventListener('click', function() { const mode = this.getAttribute('data-mode'); currentMode = mode; // Update active mode button modeButtons.forEach(btn => btn.classList.remove('active')); this.classList.add('active'); // Update mode indicators modeIndicators.forEach(ind => ind.classList.remove('active')); modeIndicators[index].classList.add('active'); // Update mode value document.querySelector('#mode .info-value').textContent = mode.toUpperCase(); // Close menu setTimeout(() => { modeMenu.classList.remove('visible'); menuVisible = false; }, 500); // Mode-specific behaviors handleModeChange(mode); // Update watch bezel const bezel = document.querySelector('.watch-bezel'); bezel.style.transform = `rotate(${index * 120}deg)`; createWaterRipple(); }); }); function handleModeChange(mode) { // Reset all mode-specific elements compassPointer.classList.remove('visible'); compassCardinals.forEach(c => c.classList.remove('visible')); if (mode === 'compass') { // Show compass elements compassPointer.classList.add('visible'); compassCardinals.forEach(c => c.classList.add('visible')); // Start compass animation startCompassAnimation(); } else if (mode === 'timer') { // Handle timer mode specifics document.querySelector('.depth-value').textContent = '00:00'; document.querySelector('.depth-unit').textContent = ''; } else { // Reset to dive mode document.querySelector('.depth-value').textContent = depth.toFixed(1); document.querySelector('.depth-unit').textContent = 'm'; } } let compassInterval; function startCompassAnimation() { let degree = 0; clearInterval(compassInterval); compassInterval = setInterval(() => { // Simulate compass movement degree += (Math.random() - 0.5) * 5; compassPointer.style.transform = `rotate(${degree}deg)`; }, 1000); } // Oxygen alert const oxygenButton = document.getElementById('oxygen'); const oxygenAlert = document.querySelector('.oxygen-alert'); const alertButton = document.querySelector('.alert-button'); oxygenButton.addEventListener('click', function() { createWaterRipple(); // Update oxygen level and potentially trigger alert let oxygenLevel = parseInt(document.querySelector('#oxygen .info-value').textContent); if (Math.random() > 0.5) { oxygenLevel -= Math.floor(Math.random() * 5 + 1); } else { oxygenLevel += Math.floor(Math.random() * 2 + 1); } if (oxygenLevel < 0) oxygenLevel = 0; if (oxygenLevel > 21) oxygenLevel = 21; document.querySelector('#oxygen .info-value').textContent = oxygenLevel + '%'; if (oxygenLevel < 15) { oxygenAlert.classList.add('visible'); } }); alertButton.addEventListener('click', function(e) { e.stopPropagation(); oxygenAlert.classList.remove('visible'); document.querySelector('#oxygen .info-value').textContent = '18%'; }); // Temperature interaction const tempButton = document.getElementById('temp'); tempButton.addEventListener('click', function() { createWaterRipple(); // Update temperature let temp = parseFloat(document.querySelector('#temp .info-value').textContent); if (Math.random() > 0.5) { temp -= (Math.random() * 0.5).toFixed(1); } else { temp += (Math.random() * 0.5).toFixed(1); } if (temp < 10) temp = 10; if (temp > 30) temp = 30; document.querySelector('#temp .info-value').textContent = temp.toFixed(1); }); // Start with a water ripple effect createWaterRipple(); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>SmartWatch Home Controller</title> <style> :root { --primary-gradient: linear-gradient(135deg, #6fb1fc, #4e66f8); --secondary-gradient: linear-gradient(135deg, #ff9a9e, #fad0c4); --tertiary-gradient: linear-gradient(135deg, #84fab0, #8fd3f4); --quaternary-gradient: linear-gradient(135deg, #a18cd1, #fbc2eb); --bg-color: #f8f9fa; --text-color: #2c3e50; --text-secondary: #7f8c8d; --shadow: 0 10px 30px rgba(0,0,0,0.1); --font-primary: 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: var(--font-primary); -webkit-tap-highlight-color: transparent; } body { background-color: #f0f0f0; display: flex; justify-content: center; align-items: center; min-height: 100vh; overflow: hidden; padding: 20px; } .watch-container { position: relative; width: 320px; height: 390px; border-radius: 42px; box-shadow: 0 15px 40px rgba(0, 0, 0, 0.2); overflow: hidden; background: #000; } .watch-strap { position: absolute; width: 100px; height: 60px; background: linear-gradient(to bottom, #444, #222); left: 50%; transform: translateX(-50%); border-radius: 14px; z-index: -1; } .watch-strap-top { top: -30px; } .watch-strap-bottom { bottom: -30px; } .watch-crown { position: absolute; width: 8px; height: 22px; background: #444; border-radius: 4px; right: -8px; top: 120px; z-index: -1; } .watch-screen { position: relative; width: 100%; height: 100%; background: var(--bg-color); overflow: hidden; border-radius: 38px; box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.2); } .status-bar { display: flex; justify-content: space-between; padding: 15px 20px 0; color: var(--text-color); font-size: 14px; font-weight: 500; position: relative; z-index: 5; } .time { font-weight: 600; } .battery-icon { display: flex; align-items: center; } .battery-icon::before { content: ''; display: inline-block; width: 20px; height: 10px; border: 1px solid currentColor; border-radius: 2px; margin-left: 5px; position: relative; } .battery-icon::after { content: ''; position: absolute; width: 12px; height: 6px; background-color: currentColor; border-radius: 1px; right: 24px; opacity: 0.8; } .main-content { padding: 15px; height: calc(100% - 50px); overflow-y: auto; overflow-x: hidden; scroll-behavior: smooth; -webkit-overflow-scrolling: touch; } .greeting { font-size: 20px; font-weight: 600; margin-bottom: 20px; color: var(--text-color); } .room-selector { display: flex; gap: 15px; margin-bottom: 20px; overflow-x: auto; padding-bottom: 10px; -ms-overflow-style: none; scrollbar-width: none; } .room-selector::-webkit-scrollbar { display: none; } .room-btn { flex: 0 0 auto; padding: 10px 16px; background: white; border-radius: 20px; font-size: 14px; font-weight: 500; color: var(--text-secondary); box-shadow: 0 2px 8px rgba(0,0,0,0.1); border: none; cursor: pointer; transition: all 0.3s ease; white-space: nowrap; } .room-btn.active { background: var(--primary-gradient); color: white; box-shadow: 0 5px 15px rgba(78, 102, 248, 0.3); } .device-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; margin-bottom: 20px; } .device-card { background: white; border-radius: 20px; padding: 15px; box-shadow: var(--shadow); transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); position: relative; overflow: hidden; } .device-card:hover, .device-card:focus { transform: translateY(-5px); box-shadow: 0 15px 35px rgba(0,0,0,0.1); } .device-card.active { transform: scale(1.02); } .device-card.active::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0.8; z-index: 0; border-radius: 20px; } .device-card.lighting.active::before { background: var(--secondary-gradient); } .device-card.thermostat.active::before { background: var(--tertiary-gradient); } .device-card.security.active::before { background: var(--quaternary-gradient); } .device-card.speakers.active::before { background: var(--primary-gradient); } .device-icon { font-size: 24px; margin-bottom: 10px; position: relative; z-index: 1; } .device-name { font-size: 14px; font-weight: 600; margin-bottom: 5px; color: var(--text-color); position: relative; z-index: 1; } .device-status { font-size: 12px; color: var(--text-secondary); position: relative; z-index: 1; } .device-card.active .device-name, .device-card.active .device-status { color: white; } .toggle-switch { position: absolute; top: 15px; right: 15px; width: 36px; height: 20px; background-color: #ddd; border-radius: 20px; cursor: pointer; transition: background-color 0.3s ease; z-index: 2; } .toggle-switch::after { content: ''; position: absolute; width: 16px; height: 16px; background-color: white; border-radius: 50%; top: 2px; left: 2px; transition: transform 0.3s ease, box-shadow 0.3s ease; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); } .device-card.active .toggle-switch { background-color: rgba(255, 255, 255, 0.5); } .device-card.active .toggle-switch::after { transform: translateX(16px); box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2); } .quick-actions { margin-top: 25px; } .section-title { font-size: 16px; font-weight: 600; margin-bottom: 15px; color: var(--text-color); } .scene-buttons { display: flex; gap: 15px; overflow-x: auto; padding-bottom: 10px; margin-bottom: 15px; -ms-overflow-style: none; scrollbar-width: none; } .scene-buttons::-webkit-scrollbar { display: none; } .scene-btn { flex: 0 0 auto; padding: 12px 20px; background: white; border-radius: 20px; font-size: 14px; font-weight: 500; color: var(--text-color); box-shadow: var(--shadow); border: none; cursor: pointer; transition: all 0.3s ease; display: flex; align-items: center; gap: 8px; } .scene-btn:hover, .scene-btn:focus { transform: translateY(-3px); box-shadow: 0 10px 25px rgba(0,0,0,0.1); } .scene-btn.home { background: var(--primary-gradient); color: white; } .scene-btn.away { background: var(--quaternary-gradient); color: white; } .scene-btn.sleep { background: linear-gradient(135deg, #141e30, #243b55); color: white; } .tab-bar { position: absolute; bottom: 0; left: 0; width: 100%; height: 60px; background: white; display: flex; justify-content: space-around; align-items: center; border-top: 1px solid rgba(0,0,0,0.05); z-index: 10; } .tab-btn { display: flex; flex-direction: column; align-items: center; justify-content: center; flex: 1; height: 100%; font-size: 10px; color: var(--text-secondary); transition: color 0.3s ease; cursor: pointer; border: none; background: transparent; } .tab-icon { font-size: 20px; margin-bottom: 4px; transition: transform 0.3s ease; } .tab-btn.active { color: #4e66f8; } .tab-btn.active .tab-icon { transform: translateY(-2px); } .tab-indicator { position: absolute; bottom: 0; height: 4px; width: 25%; background: var(--primary-gradient); border-radius: 4px 4px 0 0; transition: transform 0.3s ease; } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } .device-card.active { animation: pulse 2s infinite ease-in-out; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .fade-in { animation: fadeIn 0.5s ease forwards; } .slider-container { margin-top: 10px; position: relative; z-index: 1; } .slider { -webkit-appearance: none; width: 100%; height: 6px; border-radius: 3px; background: rgba(0, 0, 0, 0.1); outline: none; } .slider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 16px; height: 16px; border-radius: 50%; background: white; cursor: pointer; box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2); } .device-card.active .slider { background: rgba(255, 255, 255, 0.3); } .notification { position: absolute; top: 70px; left: 50%; transform: translateX(-50%) translateY(-100px); background: rgba(255, 255, 255, 0.95); border-radius: 15px; padding: 15px 20px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); width: 85%; z-index: 100; opacity: 0; transition: transform 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55), opacity 0.3s ease; } .notification.show { transform: translateX(-50%) translateY(0); opacity: 1; } .notification-title { font-weight: 600; margin-bottom: 5px; color: var(--text-color); } .notification-content { font-size: 12px; color: var(--text-secondary); } /* Responsive adjustments for the embed */ @media (max-width: 700px) { .watch-container { transform: scale(0.9); } } @media (max-width: 500px) { .watch-container { transform: scale(0.8); } } @media (max-width: 400px) { .watch-container { transform: scale(0.7); } } </style> </head> <body> <div class="watch-container"> <div class="watch-strap watch-strap-top"></div> <div class="watch-strap watch-strap-bottom"></div> <div class="watch-crown"></div> <div class="watch-screen"> <div class="status-bar"> <div class="time">10:42</div> <div class="battery-icon">82%</div> </div> <div class="main-content"> <div class="greeting">Good morning, Alex</div> <div class="room-selector"> <button class="room-btn active">Living Room</button> <button class="room-btn">Kitchen</button> <button class="room-btn">Bedroom</button> <button class="room-btn">Office</button> </div> <div class="device-grid"> <div class="device-card lighting"> <div class="device-icon">💡</div> <div class="device-name">Lighting</div> <div class="device-status">Off</div> <div class="toggle-switch" data-device="lighting"></div> </div> <div class="device-card thermostat"> <div class="device-icon">🌡️</div> <div class="device-name">Thermostat</div> <div class="device-status">72°F</div> <div class="toggle-switch" data-device="thermostat"></div> <div class="slider-container" style="display: none;"> <input type="range" min="60" max="85" value="72" class="slider" id="thermostat-slider"> </div> </div> <div class="device-card security"> <div class="device-icon">🔒</div> <div class="device-name">Security</div> <div class="device-status">Armed</div> <div class="toggle-switch" data-device="security"></div> </div> <div class="device-card speakers"> <div class="device-icon">🔊</div> <div class="device-name">Speakers</div> <div class="device-status">Idle</div> <div class="toggle-switch" data-device="speakers"></div> <div class="slider-container" style="display: none;"> <input type="range" min="0" max="100" value="60" class="slider" id="volume-slider"> </div> </div> </div> <div class="quick-actions"> <div class="section-title">Quick Actions</div> <div class="scene-buttons"> <button class="scene-btn home"> <span class="scene-icon">🏠</span> <span>I'm Home</span> </button> <button class="scene-btn away"> <span class="scene-icon">🚶</span> <span>Away Mode</span> </button> <button class="scene-btn sleep"> <span class="scene-icon">🌙</span> <span>Sleep</span> </button> </div> </div> </div> <div class="tab-bar"> <div class="tab-indicator"></div> <button class="tab-btn active" data-tab="0"> <div class="tab-icon">🏠</div> <div>Home</div> </button> <button class="tab-btn" data-tab="1"> <div class="tab-icon">⚡</div> <div>Energy</div> </button> <button class="tab-btn" data-tab="2"> <div class="tab-icon">📊</div> <div>Stats</div> </button> <button class="tab-btn" data-tab="3"> <div class="tab-icon">⚙️</div> <div>Settings</div> </button> </div> </div> <div class="notification"> <div class="notification-title">Smart Action</div> <div class="notification-content">Living room lights turned on.</div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Tab switching logic const tabBtns = document.querySelectorAll('.tab-btn'); const tabIndicator = document.querySelector('.tab-indicator'); tabBtns.forEach(btn => { btn.addEventListener('click', function() { const tabPosition = this.dataset.tab; // Update active tab document.querySelector('.tab-btn.active').classList.remove('active'); this.classList.add('active'); // Move indicator tabIndicator.style.transform = `translateX(${tabPosition * 100}%)`; // We'd normally switch content here, but we're just showing the home tab for this demo if (tabPosition > 0) { showNotification("Feature coming soon", "This tab is under development."); } }); }); // Toggle switches for devices const toggleSwitches = document.querySelectorAll('.toggle-switch'); toggleSwitches.forEach(toggle => { toggle.addEventListener('click', function() { const deviceCard = this.closest('.device-card'); const deviceType = this.dataset.device; const wasActive = deviceCard.classList.contains('active'); // Toggle device state deviceCard.classList.toggle('active'); // Update device status text const statusEl = deviceCard.querySelector('.device-status'); if (deviceCard.classList.contains('active')) { switch(deviceType) { case 'lighting': statusEl.textContent = 'On - 80%'; showNotification("Lighting Updated", "Living room lights turned on."); break; case 'thermostat': statusEl.textContent = '72°F - Cooling'; showNotification("Thermostat Updated", "AC running to maintain 72°F."); // Show slider when active deviceCard.querySelector('.slider-container').style.display = 'block'; break; case 'security': statusEl.textContent = 'Disarmed'; showNotification("Security Updated", "Home security system disarmed."); break; case 'speakers': statusEl.textContent = 'Playing - 60%'; showNotification("Speakers Updated", "Music playing in living room."); // Show slider when active deviceCard.querySelector('.slider-container').style.display = 'block'; break; } } else { switch(deviceType) { case 'lighting': statusEl.textContent = 'Off'; showNotification("Lighting Updated", "Living room lights turned off."); break; case 'thermostat': statusEl.textContent = '72°F'; showNotification("Thermostat Updated", "Climate control on standby."); // Hide slider when inactive deviceCard.querySelector('.slider-container').style.display = 'none'; break; case 'security': statusEl.textContent = 'Armed'; showNotification("Security Updated", "Home security system armed."); break; case 'speakers': statusEl.textContent = 'Idle'; showNotification("Speakers Updated", "Music stopped."); // Hide slider when inactive deviceCard.querySelector('.slider-container').style.display = 'none'; break; } } }); }); // Sliders logic const thermostatSlider = document.getElementById('thermostat-slider'); thermostatSlider.addEventListener('input', function() { const deviceCard = this.closest('.device-card'); const statusEl = deviceCard.querySelector('.device-status'); statusEl.textContent = `${this.value}°F - Cooling`; }); const volumeSlider = document.getElementById('volume-slider'); volumeSlider.addEventListener('input', function() { const deviceCard = this.closest('.device-card'); const statusEl = deviceCard.querySelector('.device-status'); statusEl.textContent = `Playing - ${this.value}%`; }); // Room selector logic const roomBtns = document.querySelectorAll('.room-btn'); roomBtns.forEach(btn => { btn.addEventListener('click', function() { document.querySelector('.room-btn.active').classList.remove('active'); this.classList.add('active'); showNotification("Room Changed", `Switched to ${this.textContent} controls.`); }); }); // Scene buttons logic const sceneBtns = document.querySelectorAll('.scene-btn'); sceneBtns.forEach(btn => { btn.addEventListener('click', function() { const sceneName = this.textContent.trim(); let sceneAction = ""; if (sceneName.includes("Home")) { // Activate home scene document.querySelectorAll('.device-card').forEach(card => { card.classList.add('active'); const deviceType = card.querySelector('.toggle-switch').dataset.device; const statusEl = card.querySelector('.device-status'); switch(deviceType) { case 'lighting': statusEl.textContent = 'On - 80%'; break; case 'thermostat': statusEl.textContent = '72°F - Cooling'; card.querySelector('.slider-container').style.display = 'block'; break; case 'security': statusEl.textContent = 'Disarmed'; break; case 'speakers': statusEl.textContent = 'Playing - 60%'; card.querySelector('.slider-container').style.display = 'block'; break; } }); sceneAction = "Welcome home! All systems activated."; } else if (sceneName.includes("Away")) { // Activate away scene document.querySelectorAll('.device-card').forEach(card => { const deviceType = card.querySelector('.toggle-switch').dataset.device; const statusEl = card.querySelector('.device-status'); if (deviceType === 'security') { card.classList.add('active'); statusEl.textContent = 'Armed'; } else { card.classList.remove('active'); switch(deviceType) { case 'lighting': statusEl.textContent = 'Off'; break; case 'thermostat': statusEl.textContent = 'Eco Mode - 78°F'; card.querySelector('.slider-container').style.display = 'none'; break; case 'speakers': statusEl.textContent = 'Idle'; card.querySelector('.slider-container').style.display = 'none'; break; } } }); sceneAction = "Away mode activated. Home secured."; } else if (sceneName.includes("Sleep")) { // Activate sleep scene document.querySelectorAll('.device-card').forEach(card => { const deviceType = card.querySelector('.toggle-switch').dataset.device; const statusEl = card.querySelector('.device-status'); if (deviceType === 'security') { card.classList.add('active'); statusEl.textContent = 'Armed - Night Mode'; } else if (deviceType === 'thermostat') { card.classList.add('active'); statusEl.textContent = '68°F - Night Mode'; card.querySelector('.slider-container').style.display = 'block'; } else { card.classList.remove('active'); switch(deviceType) { case 'lighting': statusEl.textContent = 'Off'; break; case 'speakers': statusEl.textContent = 'Idle'; card.querySelector('.slider-container').style.display = 'none'; break; } } }); sceneAction = "Sleep mode activated. Sweet dreams!"; } showNotification(`Scene: ${sceneName}`, sceneAction); }); }); // Notification system function showNotification(title, message) { const notification = document.querySelector('.notification'); const notificationTitle = notification.querySelector('.notification-title'); const notificationContent = notification.querySelector('.notification-content'); notificationTitle.textContent = title; notificationContent.textContent = message; notification.classList.add('show'); setTimeout(() => { notification.classList.remove('show'); }, 3000); } // Update time function updateTime() { const now = new Date(); let hours = now.getHours(); const minutes = String(now.getMinutes()).padStart(2, '0'); const timeDisplay = document.querySelector('.time'); timeDisplay.textContent = `${hours}:${minutes}`; } updateTime(); setInterval(updateTime, 60000); // Update every minute // Show initial notification after a short delay setTimeout(() => { showNotification("Good Morning", "Your home is ready for the day!"); }, 1000); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Retro Gaming Digital Watch</title> <style> @font-face { font-family: 'PressStart2P'; src: url('https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap'); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Courier New', monospace; background-color: #000; color: #33ff00; height: 100vh; display: flex; justify-content: center; align-items: center; overflow: hidden; background-image: linear-gradient(to right, rgba(30, 30, 30, 0.1) 1px, transparent 1px), linear-gradient(to bottom, rgba(30, 30, 30, 0.1) 1px, transparent 1px); background-size: 20px 20px; } .container { width: 100%; max-width: 700px; height: 700px; display: flex; flex-direction: column; padding: 20px; position: relative; } .watch-container { background-color: #111; border: 6px solid #444; border-radius: 12px; padding: 20px; width: 100%; height: 100%; display: flex; flex-direction: column; position: relative; box-shadow: 0 0 0 2px #000, 0 0 10px rgba(51, 255, 0, 0.7), inset 0 0 20px rgba(0, 0, 0, 0.5); overflow: hidden; } .scanline { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient( to bottom, transparent 50%, rgba(0, 0, 0, 0.05) 50% ); background-size: 100% 4px; z-index: 10; pointer-events: none; opacity: 0.3; } .screen-static { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAGWElEQVRogX2aW5LkOAhFj5j1aP2v0/VdQf/YFQ/JdnVNREa6LiAJcUHy59fX1/Tz8xOllFBKiVJK1FpjjBFjjOicE621mGPGGCN676G1jlprzDnDOQfnXKgq1lqstbHWopTC3gtrLeacWGux1uLz+bDWYq3Ffd/knJlzcpwT7z3ee6y12GcVEcaY7L0jImitmXPy+XwQEUSE+76x1rK1ZozBeR4cx4H3nh9FBGsIIqK11uScGGOgtWbvzRjCnDPWWvbeGGMQEYwxWGvZWqO1Rl5uXGvRe2etxRhCzpm9NyLC3pu9N1prRIQxBmstrLV8Ph9EhNaa1hqlFFSVMQbee7z3lFKYczLnxHvPnDNrrfDeg4iwteY4DtZa9N4ZY+C9p/eOqtJ7Z4xBSom9Nz9fv1BV5pxYa7HW4vP5cBwHtVZUlTEG3ntEhNYaSikapRSMMRhjUEqhtWbvjTGG4zhQVXLO1FrJOaOq3PdNKYVSCiLC3pvP58MYg9aaMQbGGD6fD9d1UWtlzolaK977+J//E5EgImMM1lqoKnNOUkrUWjmOg5QSc07GGNRaKaWglKK1xt6bOSdzTnrvpJRQVY7jQFVJKbH3ptZKrRURofdOzpkxBsYYxhj03rHWMsZgzommN8ZaS0qJWiu9d47joJSCMYZaK6UUeu/UWum9o6qklNBb2XsTEVhrqbVy3ze1VlJK9N7Ze9N7p/eO957P58OcE+ccKSV675RSMMZQSsEYw96bOSfee6y1qCo5Z6y1XNdF7x1jDKpKrRVVxVrLz9fXxnt/lFKw1lJKQVWJCO77JiJIKaGqiAi9d8YYpJQopaCqRARrLXtv9t5EBL13UkrstVBV5pwcx0HvnTEGc05SSvTeGWPgvUdVSSmx1uLn6+tGVam1UkpBRBhjkHMmpUTvnb03tVZaa3jvaa0xxmDvTS0FVWWMgYjQe8c5R84ZVeW+bzTdBxFB77211kophdYavXestZRSaK0REbz3OOew1vLPP/9wXRe1VlprqCo5Z6y1XNeFqhIRtNZorZFzJiJIKVFrZa1FSgljDBFBzpneOzkn1lrGGDjnqLWitcZai1orx3Gw98ZaS8457vvm6+uLlBJzTiKC3jt7b1JKGGPQGEBEsNbivSfnTGuN1hrOOVprqCrGGHrv9N7pvZNSYq9FRNBaY61FSom1FimlL1ettfTeMcZgnAv3fVNKIeeM1po5JyLC3pu9N2struvCWotzjt47zjlEhIigqnz9/s3n88E5h6qy1iKlRGuNiKCUws/X183em5QSvXdaa8w5SSkhIkQEzjmcc9Ra6b0zxiClhIhQSqG1RkQQEfTeUVVSShhjuO+b+74ppbDWotaKiNB7Z4yBqmKMIefM19cXrTVSSphSCr13UkrMOdEkOI6DMQZrLXrvpJQYY5BSYoyBc46IYIzB3puI4b5v5pyUUtBbGWNQa0VVaa1Ra0VVabLRe+fn19eNtZYxBs45WmuklNBa01rDGMNxHOy9mXMSEWSttdaotZJzRkRQVXrv5JyJCO77ptaKMYY5J9ZanHPUWtl7M8ZARIgI/vr7G+89x3Ggqsw5SSlhrWWMQc6Z1hq9d5xzpJSotdJaI+eMiFBKofcOwN6b3jsRgYjQe2etRc6ZiKDWyufzYc7JnBMRwVrLcRyICGMMfr6+blJKeO9Za9FaQ0RIKdF7Z61Fa42UEr13xhiICM45IoLWGq01cs6UUlhrUUrBWsv9+SCltPXk8/mw90ZjgPeeWiuqyt6b3jspJYwx/Pz9TSmF4zhYa9FaY85JSomUEq01eu+ICGstrTXmNu69N8dx0HvHWsu91R5wXRd7b5xz1FpJKaGqOOcYY6CqGGP4+vqitUZrjVIKc05EhJwz3ntSSuw78t4TEbx9/Ua3yRhjcM5hnGOMwefzIefMWou1Fq01nHO01ii7SXrv7L0ZY1BKQVUZY/BFsdbivcday3EctNaYc5JSotZKzpm9N977J3GttRhjkFJi701KCVXlOA5qrfTeaa0xxsCVUuI4DlQVEWHOSSklcs601jDGoKrkbcw5xxgD5xy9d1SVUgq1VlSVlBI5Z1SVlBIRgYiw92bOiYjgnKO1Rq2VOScppbivCxEh50xEcF0XxhjmnJznyefzIedM7525zeWcsdbSe8c5x3Ec1FpZa5FSovcOEKUUUkrsvcGV+OfzofceYwzGGFprnOeJc47zPDmOg845eu+UUvgPKoKTvsHg8jIAAAAASUVORK5CYII='); opacity: 0.05; z-index: 5; pointer-events: none; } .header { display: flex; justify-content: space-between; margin-bottom: 10px; } .game-title { font-family: 'Press Start 2P', 'Courier New', monospace; font-size: 16px; text-transform: uppercase; color: #ff8800; text-shadow: 2px 2px 0 #551100; animation: pulse 2s infinite alternate; } .battery-indicator { display: flex; align-items: center; } .battery-icon { width: 20px; height: 10px; border: 2px solid #33ff00; border-radius: 2px; position: relative; margin-right: 5px; } .battery-icon:after { content: ''; position: absolute; right: -4px; top: 2px; width: 2px; height: 6px; background: #33ff00; } .battery-level { position: absolute; left: 1px; top: 1px; height: 6px; width: 15px; background: #33ff00; transform-origin: left; animation: batteryDrain 30s infinite alternate; } .time-display { font-family: 'Press Start 2P', 'Courier New', monospace; font-size: 48px; text-align: center; margin: 40px 0; letter-spacing: 4px; position: relative; text-shadow: 0 0 10px rgba(51, 255, 0, 0.7); } .time-display.glitch { animation: glitch 0.3s infinite; } .date-display { font-family: 'Press Start 2P', 'Courier New', monospace; font-size: 14px; text-align: center; margin-bottom: 30px; color: #aaffaa; } .controls { display: flex; justify-content: space-around; margin-top: auto; } .button { font-family: 'Press Start 2P', 'Courier New', monospace; background-color: #222; color: #33ff00; border: 2px solid #555; padding: 8px 16px; font-size: 12px; border-radius: 4px; cursor: pointer; position: relative; overflow: hidden; transition: all 0.2s ease; box-shadow: 0 4px 0 #111, 0 5px 10px rgba(0, 0, 0, 0.5); } .button:hover { background-color: #333; transform: translateY(2px); box-shadow: 0 2px 0 #111, 0 3px 5px rgba(0, 0, 0, 0.5); } .button:active { transform: translateY(4px); box-shadow: 0 0 0 #111, 0 1px 2px rgba(0, 0, 0, 0.5); } .button::after { content: ''; position: absolute; top: -10px; left: -10px; width: 10px; height: 10px; background-color: rgba(255, 255, 255, 0.5); filter: blur(5px); transform: rotate(45deg); animation: buttonGlow 5s infinite linear; } .game-area { flex-grow: 1; border: 2px solid #444; position: relative; margin: 20px 0; overflow: hidden; background-color: #111; image-rendering: pixelated; } .game-screen { width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; position: relative; } .pixel-char { font-family: 'Press Start 2P', 'Courier New', monospace; font-size: 24px; color: #33ff00; margin: 0 2px; position: relative; animation: float 2s infinite alternate ease-in-out; } .enemy { position: absolute; width: 16px; height: 16px; background-color: #ff4444; transform: rotate(45deg); animation: enemyMove 10s infinite linear; } .player { position: absolute; width: 20px; height: 20px; background-color: #33ff00; border-radius: 50%; bottom: 20px; left: calc(50% - 10px); animation: playerIdle 2s infinite alternate ease-in-out; } .score-display { font-family: 'Press Start 2P', 'Courier New', monospace; font-size: 12px; position: absolute; top: 10px; right: 10px; color: #ffcc00; } .lives { position: absolute; top: 10px; left: 10px; display: flex; } .life { width: 10px; height: 10px; background-color: #ff4444; margin-right: 5px; clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%); } .mode-indicator { font-family: 'Press Start 2P', 'Courier New', monospace; font-size: 10px; margin-top: 10px; text-align: center; color: #aaffaa; } .settings-button { position: absolute; top: 10px; right: 10px; width: 24px; height: 24px; cursor: pointer; display: flex; flex-direction: column; justify-content: space-between; align-items: center; padding: 4px; } .settings-button div { width: 4px; height: 4px; background-color: #33ff00; border-radius: 50%; } .pixel-border { position: absolute; width: 100%; height: 100%; pointer-events: none; z-index: 8; border: 4px solid transparent; box-sizing: border-box; background-image: linear-gradient(to right, #33ff00 4px, transparent 4px), linear-gradient(to bottom, #33ff00 4px, transparent 4px); background-size: 10px 10px; background-position: -2px -2px; opacity: 0.2; } @keyframes glitch { 0% { transform: translate(2px, 0); color: #33ff00; } 25% { transform: translate(-2px, 0); color: #ff00cc; } 50% { transform: translate(0, 2px); color: #ffff00; } 75% { transform: translate(0, -2px); color: #00ffff; } 100% { transform: translate(0, 0); color: #33ff00; } } @keyframes pulse { 0% { opacity: 1; } 50% { opacity: 0.7; } 100% { opacity: 1; } } @keyframes batteryDrain { 0% { transform: scaleX(1); } 80% { transform: scaleX(0.3); } 100% { transform: scaleX(0.1); } } @keyframes buttonGlow { 0% { left: -30px; } 100% { left: 100%; } } @keyframes float { 0% { transform: translateY(0); } 100% { transform: translateY(-4px); } } @keyframes enemyMove { 0% { top: -20px; left: 20%; } 25% { top: 40%; left: 80%; } 50% { top: 80%; left: 60%; } 75% { top: 30%; left: 10%; } 100% { top: -20px; left: 20%; } } @keyframes playerIdle { 0% { transform: translateX(-10px); } 100% { transform: translateX(10px); } } @media (max-width: 600px) { .time-display { font-size: 36px; } .game-title { font-size: 14px; } .button { padding: 6px 12px; font-size: 10px; } } </style> </head> <body> <div class="container"> <div class="watch-container"> <div class="header"> <div class="game-title">TIME QUEST 2.0</div> <div class="battery-indicator"> <div class="battery-icon"> <div class="battery-level"></div> </div> </div> </div> <div class="time-display" id="time">12:34:56</div> <div class="date-display" id="date">08-BIT-2023</div> <div class="game-area"> <div class="game-screen"> <div class="player" id="player"></div> <div class="enemy"></div> <div class="score-display">SCORE: 8192</div> <div class="lives"> <div class="life"></div> <div class="life"></div> <div class="life"></div> </div> </div> <div class="pixel-border"></div> </div> <div class="controls"> <button class="button" id="mode-btn">MODE</button> <button class="button" id="light-btn">LIGHT</button> <button class="button" id="game-btn">GAME</button> </div> <div class="mode-indicator" id="mode-indicator">CHRONO MODE</div> <div class="scanline"></div> <div class="screen-static"></div> <div class="settings-button" id="settings"> <div></div> <div></div> <div></div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Initialize the watch updateTime(); setInterval(updateTime, 1000); // Event listeners for buttons const modeBtn = document.getElementById('mode-btn'); const lightBtn = document.getElementById('light-btn'); const gameBtn = document.getElementById('game-btn'); const timeDisplay = document.getElementById('time'); const modeIndicator = document.getElementById('mode-indicator'); const player = document.getElementById('player'); const settings = document.getElementById('settings'); let currentMode = 0; const modes = ['CHRONO MODE', 'ALARM MODE', 'TIMER MODE', 'STOPWATCH']; let isGameActive = false; let playerX = 50; // Button click effects modeBtn.addEventListener('click', function() { glitchEffect(); currentMode = (currentMode + 1) % modes.length; modeIndicator.textContent = modes[currentMode]; }); lightBtn.addEventListener('click', function() { document.body.style.backgroundColor = document.body.style.backgroundColor === 'rgb(40, 40, 40)' ? '#000' : '#282828'; glitchEffect(); }); gameBtn.addEventListener('click', function() { isGameActive = !isGameActive; glitchEffect(); if (isGameActive) { gameBtn.textContent = 'EXIT'; activateGame(); } else { gameBtn.textContent = 'GAME'; deactivateGame(); } }); settings.addEventListener('click', function() { glitchEffect(); const colors = ['#33ff00', '#ff00cc', '#ffff00', '#00ffff', '#ff8800']; const randomColor = colors[Math.floor(Math.random() * colors.length)]; document.documentElement.style.setProperty('--main-color', randomColor); timeDisplay.style.color = randomColor; }); // Game controls with arrow keys document.addEventListener('keydown', function(e) { if (!isGameActive) return; if (e.key === 'ArrowLeft') { playerX = Math.max(0, playerX - 5); } else if (e.key === 'ArrowRight') { playerX = Math.min(100, playerX + 5); } player.style.left = `calc(${playerX}% - 10px)`; }); // Touch/mouse controls for the game const gameArea = document.querySelector('.game-area'); gameArea.addEventListener('mousemove', function(e) { if (!isGameActive) return; const rect = gameArea.getBoundingClientRect(); const x = e.clientX - rect.left; playerX = (x / rect.width) * 100; player.style.left = `calc(${playerX}% - 10px)`; }); gameArea.addEventListener('touchmove', function(e) { if (!isGameActive) return; e.preventDefault(); const rect = gameArea.getBoundingClientRect(); const touch = e.touches[0]; const x = touch.clientX - rect.left; playerX = (x / rect.width) * 100; player.style.left = `calc(${playerX}% - 10px)`; }); // Functions function updateTime() { const now = new Date(); const hours = String(now.getHours()).padStart(2, '0'); const minutes = String(now.getMinutes()).padStart(2, '0'); const seconds = String(now.getSeconds()).padStart(2, '0'); const timeString = `${hours}:${minutes}:${seconds}`; const day = String(now.getDate()).padStart(2, '0'); const month = String(now.getMonth() + 1).padStart(2, '0'); const year = now.getFullYear(); const dateString = `${day}-BIT-${year}`; document.getElementById('time').textContent = timeString; document.getElementById('date').textContent = dateString; // Random glitch effect if (Math.random() < 0.05) { glitchEffect(); } } function glitchEffect() { timeDisplay.classList.add('glitch'); setTimeout(() => { timeDisplay.classList.remove('glitch'); }, 300); } function activateGame() { // Game activation logic here player.style.animation = 'none'; } function deactivateGame() { // Game deactivation logic here player.style.animation = 'playerIdle 2s infinite alternate ease-in-out'; player.style.left = 'calc(50% - 10px)'; } }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ThermoWatch</title> <style> :root { --primary-neon: #00f7ff; --secondary-neon: #ff00e6; --dark-bg: #111; --darker-bg: #0a0a0a; --light-text: #f0f0f0; --watch-width: 220px; --watch-height: 260px; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { display: flex; justify-content: center; align-items: center; min-height: 700px; background-color: #151515; background-image: radial-gradient(#222 1px, transparent 1px); background-size: 20px 20px; color: var(--light-text); padding: 20px; perspective: 1000px; } .container { width: 100%; max-width: 700px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 20px; } .scene { perspective: 1000px; transform-style: preserve-3d; position: relative; } .watch-container { transform-style: preserve-3d; animation: float 6s ease-in-out infinite; } @keyframes float { 0%, 100% { transform: translateY(0) rotateY(0deg); } 50% { transform: translateY(-10px) rotateY(5deg); } } .smartwatch { width: var(--watch-width); height: var(--watch-height); background: var(--dark-bg); border-radius: 32px; box-shadow: 0 0 0 8px #222, 0 0 0 9px #333, 0 0 20px rgba(0, 247, 255, 0.3), 0 0 40px rgba(0, 247, 255, 0.1); padding: 15px; position: relative; overflow: hidden; transform-style: preserve-3d; } .watch-face { width: 100%; height: 100%; background: var(--darker-bg); border-radius: 20px; display: flex; flex-direction: column; align-items: center; justify-content: space-between; padding: 15px; overflow: hidden; position: relative; } .watch-face:before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, var(--primary-neon), transparent); animation: scan-line 2s linear infinite; } @keyframes scan-line { 0%, 100% { top: 0; } 50% { top: 100%; } } .watch-button { position: absolute; right: -14px; top: 50%; transform: translateY(-50%); width: 6px; height: 20px; background: #444; border-radius: 0 3px 3px 0; cursor: pointer; z-index: 10; } .watch-button:active { background: #666; } .watch-band { width: 60px; height: 100px; background: #333; position: absolute; border-radius: 12px; } .band-top { top: -80px; left: 50%; transform: translateX(-50%); box-shadow: 0 0 10px rgba(0, 0, 0, 0.5) inset; } .band-bottom { bottom: -80px; left: 50%; transform: translateX(-50%); box-shadow: 0 0 10px rgba(0, 0, 0, 0.5) inset; } .time { font-size: 24px; font-weight: 600; color: var(--primary-neon); letter-spacing: 1px; text-shadow: 0 0 8px rgba(0, 247, 255, 0.5); margin-bottom: 5px; } .date { font-size: 10px; color: #ccc; letter-spacing: 1px; margin-bottom: 15px; } .temp-ring { width: 150px; height: 150px; border-radius: 50%; background: var(--darker-bg); position: relative; display: flex; justify-content: center; align-items: center; margin-bottom: 10px; } .temp-indicator { position: absolute; width: 100%; height: 100%; border-radius: 50%; clip: rect(0px, 150px, 150px, 75px); transform: rotate(0deg); } .indicator-fill { position: absolute; width: 100%; height: 100%; border-radius: 50%; clip: rect(0px, 75px, 150px, 0px); background: conic-gradient(var(--primary-neon), var(--secondary-neon)); filter: drop-shadow(0 0 5px var(--primary-neon)); transform: rotate(90deg); transition: transform 1s cubic-bezier(0.34, 1.56, 0.64, 1); } .temp-display { width: 120px; height: 120px; background: var(--darker-bg); border-radius: 50%; display: flex; flex-direction: column; justify-content: center; align-items: center; box-shadow: 0 0 20px rgba(0, 0, 0, 0.8) inset, 0 0 2px var(--primary-neon); position: relative; z-index: 2; } .temp-value { font-size: 32px; font-weight: 700; color: var(--light-text); text-shadow: 0 0 10px rgba(0, 247, 255, 0.7); } .temp-unit { font-size: 12px; color: #999; margin-top: 5px; } .temp-controls { display: flex; gap: 10px; margin-top: 5px; } .temp-btn { background: none; border: none; color: var(--primary-neon); font-size: 18px; cursor: pointer; width: 30px; height: 30px; border-radius: 50%; display: flex; justify-content: center; align-items: center; transition: all 0.3s; box-shadow: 0 0 0 1px var(--primary-neon); } .temp-btn:hover { background: rgba(0, 247, 255, 0.2); box-shadow: 0 0 10px var(--primary-neon), 0 0 0 1px var(--primary-neon); } .temp-btn:active { transform: scale(0.9); } .status-text { font-size: 10px; color: #aaa; text-align: center; margin-top: 5px; opacity: 0.7; } .status-dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--primary-neon); margin-right: 5px; animation: pulse 2s infinite; } @keyframes pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(0.8); } } .modes { display: flex; gap: 8px; margin-top: 5px; } .mode-btn { background: #222; border: none; color: #999; font-size: 8px; padding: 3px 6px; border-radius: 10px; cursor: pointer; transition: all 0.3s; } .mode-btn.active { background: var(--primary-neon); color: var(--dark-bg); box-shadow: 0 0 10px var(--primary-neon); } .glare { position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: radial-gradient( ellipse at center, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 60% ); pointer-events: none; transform: rotate(-45deg); opacity: 0.4; } .info-panel { margin-top: 20px; width: 100%; background: rgba(17, 17, 17, 0.8); backdrop-filter: blur(5px); border-radius: 12px; padding: 20px; box-shadow: 0 0 20px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 247, 255, 0.1); } .info-panel h2 { font-size: 24px; margin-bottom: 15px; color: var(--primary-neon); text-shadow: 0 0 5px var(--primary-neon); } .feature-list { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; } .feature-item { display: flex; align-items: flex-start; gap: 10px; } .feature-icon { background: rgba(0, 247, 255, 0.1); border-radius: 50%; width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; color: var(--primary-neon); font-size: 14px; flex-shrink: 0; } .feature-text { font-size: 14px; line-height: 1.4; } @media (max-width: 600px) { .feature-list { grid-template-columns: 1fr; } } .rooms-panel { width: 100%; display: flex; gap: 10px; margin-top: 20px; overflow-x: auto; padding-bottom: 10px; scrollbar-width: thin; scrollbar-color: var(--primary-neon) var(--dark-bg); } .rooms-panel::-webkit-scrollbar { height: 5px; } .rooms-panel::-webkit-scrollbar-track { background: var(--dark-bg); border-radius: 10px; } .rooms-panel::-webkit-scrollbar-thumb { background: var(--primary-neon); border-radius: 10px; } .room-card { background: rgba(17, 17, 17, 0.8); border-radius: 12px; padding: 15px; min-width: 120px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 247, 255, 0.1); transition: all 0.3s; cursor: pointer; } .room-card:hover { transform: translateY(-3px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.4), 0 0 0 1px var(--primary-neon); } .room-card.active { background: rgba(0, 247, 255, 0.1); box-shadow: 0 0 15px rgba(0, 247, 255, 0.2), 0 0 0 1px var(--primary-neon); } .room-icon { font-size: 20px; margin-bottom: 8px; color: var(--primary-neon); } .room-name { font-size: 12px; margin-bottom: 5px; } .room-temp { font-size: 16px; font-weight: bold; color: var(--light-text); } @media (max-width: 700px) { .container { gap: 10px; } .info-panel { padding: 15px; } .feature-list { gap: 10px; } .feature-item { gap: 5px; } .feature-icon { width: 25px; height: 25px; font-size: 12px; } .feature-text { font-size: 12px; } } </style> </head> <body> <div class="container"> <div class="scene"> <div class="watch-container"> <div class="smartwatch"> <div class="watch-button" id="power-btn"></div> <div class="watch-band band-top"></div> <div class="watch-band band-bottom"></div> <div class="watch-face"> <div class="glare"></div> <div> <div class="time" id="time">13:42</div> <div class="date" id="date">THU, OCT 12</div> </div> <div class="temp-ring"> <div class="temp-indicator"> <div class="indicator-fill" id="temp-fill"></div> </div> <div class="temp-display"> <div class="temp-value" id="temp-value">22°</div> <div class="temp-unit">SET TEMP</div> <div class="temp-controls"> <button class="temp-btn" id="temp-down">-</button> <button class="temp-btn" id="temp-up">+</button> </div> </div> </div> <div> <div class="status-text"> <span class="status-dot"></span> <span id="status-text">HEATING ACTIVE</span> </div> <div class="modes"> <button class="mode-btn active" data-mode="heat">HEAT</button> <button class="mode-btn" data-mode="cool">COOL</button> <button class="mode-btn" data-mode="eco">ECO</button> <button class="mode-btn" data-mode="auto">AUTO</button> </div> </div> </div> </div> </div> </div> <div class="rooms-panel"> <div class="room-card active"> <div class="room-icon">🛋️</div> <div class="room-name">LIVING ROOM</div> <div class="room-temp">22°C</div> </div> <div class="room-card"> <div class="room-icon">🛏️</div> <div class="room-name">BEDROOM</div> <div class="room-temp">20°C</div> </div> <div class="room-card"> <div class="room-icon">🍽️</div> <div class="room-name">KITCHEN</div> <div class="room-temp">23°C</div> </div> <div class="room-card"> <div class="room-icon">🛁</div> <div class="room-name">BATHROOM</div> <div class="room-temp">24°C</div> </div> <div class="room-card"> <div class="room-icon">💻</div> <div class="room-name">OFFICE</div> <div class="room-temp">21°C</div> </div> </div> <div class="info-panel"> <h2>ThermoWatch Pro</h2> <div class="feature-list"> <div class="feature-item"> <div class="feature-icon">⚡</div> <div class="feature-text">Controls up to 8 zones with individual temperature settings</div> </div> <div class="feature-item"> <div class="feature-icon">🔄</div> <div class="feature-text">Syncs with home climate systems in real-time</div> </div> <div class="feature-item"> <div class="feature-icon">📱</div> <div class="feature-text">Touch control or use voice commands for temp adjustment</div> </div> <div class="feature-item"> <div class="feature-icon">⏰</div> <div class="feature-text">Schedule temperature changes based on time & location</div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Temperature control functionality let currentTemp = 22; let currentMode = 'heat'; const tempValue = document.getElementById('temp-value'); const tempFill = document.getElementById('temp-fill'); const tempUp = document.getElementById('temp-up'); const tempDown = document.getElementById('temp-down'); const statusText = document.getElementById('status-text'); const modeBtns = document.querySelectorAll('.mode-btn'); const roomCards = document.querySelectorAll('.room-card'); const timeElement = document.getElementById('time'); const dateElement = document.getElementById('date'); // Set initial temperature display updateTemperatureDisplay(); // Update temperature controls tempUp.addEventListener('click', function() { if (currentTemp < 30) { currentTemp++; updateTemperatureDisplay(); showTemperatureAnimation(); } }); tempDown.addEventListener('click', function() { if (currentTemp > 15) { currentTemp--; updateTemperatureDisplay(); showTemperatureAnimation(); } }); // Mode buttons modeBtns.forEach(btn => { btn.addEventListener('click', function() { modeBtns.forEach(b => b.classList.remove('active')); this.classList.add('active'); currentMode = this.dataset.mode; // Update status based on mode switch(currentMode) { case 'heat': statusText.textContent = 'HEATING ACTIVE'; document.documentElement.style.setProperty('--primary-neon', '#00f7ff'); break; case 'cool': statusText.textContent = 'COOLING ACTIVE'; document.documentElement.style.setProperty('--primary-neon', '#00a2ff'); break; case 'eco': statusText.textContent = 'ECO MODE ENGAGED'; document.documentElement.style.setProperty('--primary-neon', '#00ff8a'); break; case 'auto': statusText.textContent = 'AUTO MODE ACTIVE'; document.documentElement.style.setProperty('--primary-neon', '#ff9500'); break; } // Update thermostat ring with animation updateTemperatureDisplay(); }); }); // Room selection roomCards.forEach(card => { card.addEventListener('click', function() { roomCards.forEach(c => c.classList.remove('active')); this.classList.add('active'); // Extract temperature from selected room const roomTemp = parseInt(this.querySelector('.room-temp').textContent); currentTemp = roomTemp; updateTemperatureDisplay(); showTemperatureAnimation(); }); }); // Update clock every second function updateClock() { const now = new Date(); // Format time as HH:MM const hours = now.getHours().toString().padStart(2, '0'); const minutes = now.getMinutes().toString().padStart(2, '0'); timeElement.textContent = `${hours}:${minutes}`; // Format date as DAY, MONTH DATE const days = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']; const months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']; const dayName = days[now.getDay()]; const monthName = months[now.getMonth()]; const date = now.getDate(); dateElement.textContent = `${dayName}, ${monthName} ${date}`; } updateClock(); setInterval(updateClock, 1000); // Make the watch face follow mouse movement for parallax effect const watchContainer = document.querySelector('.watch-container'); document.addEventListener('mousemove', function(e) { const mouseX = e.clientX / window.innerWidth - 0.5; const mouseY = e.clientY / window.innerHeight - 0.5; watchContainer.style.transform = `rotateY(${mouseX * 10}deg) rotateX(${-mouseY * 10}deg) translateY(${-mouseY * 10}px)`; }); // Functions to update temperature display function updateTemperatureDisplay() { tempValue.textContent = `${currentTemp}°`; // Calculate rotation for temperature fill // Map temperature range (15-30) to rotation (0-270 degrees) const minTemp = 15; const maxTemp = 30; const rotationDegrees = ((currentTemp - minTemp) / (maxTemp - minTemp)) * 270; tempFill.style.transform = `rotate(${90 + rotationDegrees}deg)`; } function showTemperatureAnimation() { // Pulse animation for temperature change tempValue.style.transform = 'scale(1.2)'; tempValue.style.textShadow = '0 0 20px rgba(0, 247, 255, 0.9)'; setTimeout(() => { tempValue.style.transform = 'scale(1)'; tempValue.style.textShadow = '0 0 10px rgba(0, 247, 255, 0.7)'; }, 300); } // Power button functionality const powerBtn = document.getElementById('power-btn'); const watchFace = document.querySelector('.watch-face'); powerBtn.addEventListener('click', function() { if (watchFace.style.opacity === '0.2') { watchFace.style.opacity = '1'; watchFace.style.filter = 'none'; } else { watchFace.style.opacity = '0.2'; watchFace.style.filter = 'grayscale(100%)'; } }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>VitalSync Health Monitor</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background-color: #f5f7fa; display: flex; justify-content: center; align-items: center; min-height: 100vh; color: #333; overflow: hidden; } .watch-container { position: relative; width: 300px; height: 350px; background: linear-gradient(145deg, #e6f3ff, #dff8f5); border-radius: 42px; box-shadow: 0 10px 30px rgba(0, 102, 136, 0.15), 0 5px 15px rgba(0, 150, 136, 0.1), inset 0 -2px 6px rgba(255, 255, 255, 0.7), inset 0 2px 6px rgba(0, 0, 0, 0.1); overflow: hidden; transition: transform 0.5s ease; } .watch-container:hover { transform: scale(1.02); } .watch-strap { position: absolute; width: 70px; height: 60px; background: linear-gradient(to bottom, #2c7b8b, #1d5e6a); box-shadow: inset 0 -2px 5px rgba(0, 0, 0, 0.2); left: 50%; transform: translateX(-50%); z-index: -1; } .strap-top { top: -30px; border-bottom-left-radius: 10px; border-bottom-right-radius: 10px; } .strap-bottom { bottom: -30px; border-top-left-radius: 10px; border-top-right-radius: 10px; } .screen { width: 100%; height: 100%; padding: 15px; position: relative; overflow: hidden; } .watch-face { background: rgba(255, 255, 255, 0.9); border-radius: 35px; height: 100%; padding: 20px; display: flex; flex-direction: column; justify-content: space-between; box-shadow: inset 0 0 10px rgba(0, 150, 136, 0.1); position: relative; overflow: hidden; } .status-bar { display: flex; justify-content: space-between; margin-bottom: 5px; font-size: 12px; color: #0b7285; } .status-bar .battery { display: flex; align-items: center; } .battery-icon { width: 16px; height: 8px; border: 1px solid #0b7285; border-radius: 2px; margin-right: 2px; position: relative; display: flex; align-items: center; } .battery-level { height: 6px; width: 60%; background-color: #2cb1bc; border-radius: 1px; margin-left: 1px; } .battery::after { content: ""; position: absolute; right: -3px; top: 50%; transform: translateY(-50%); width: 2px; height: 4px; background-color: #0b7285; border-radius: 0 1px 1px 0; } .menu-container { flex-grow: 1; display: flex; flex-direction: column; justify-content: space-between; } .tile { background: linear-gradient(145deg, #f0f9ff, #e1f5f2); border-radius: 16px; padding: 15px; margin-bottom: 12px; box-shadow: 0 2px 8px rgba(0, 150, 136, 0.1); transition: all 0.3s ease; position: relative; overflow: hidden; } .tile:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 150, 136, 0.15); } .tile-title { font-size: 14px; font-weight: 600; color: #0f6f7b; margin-bottom: 5px; } .tile-value { font-size: 18px; font-weight: 700; color: #14919b; } .tile-unit { font-size: 12px; color: #3d9ca7; } .heart-rate { height: 80px; } .heart-animation { position: absolute; right: 15px; top: 50%; transform: translateY(-50%); } .heart { width: 25px; height: 25px; background-color: #e63946; position: relative; transform: rotate(45deg); animation: pulse 1s infinite; } .heart::before, .heart::after { content: ""; width: 25px; height: 25px; background-color: #e63946; border-radius: 50%; position: absolute; } .heart::before { top: -12.5px; left: 0; } .heart::after { top: 0; left: -12.5px; } @keyframes pulse { 0% { transform: rotate(45deg) scale(1); } 25% { transform: rotate(45deg) scale(1.1); } 50% { transform: rotate(45deg) scale(1); } 75% { transform: rotate(45deg) scale(1.1); } 100% { transform: rotate(45deg) scale(1); } } .pulse-graph { height: 30px; width: 100%; position: relative; margin-top: 5px; } .pulse-line { position: absolute; top: 50%; left: 0; width: 100%; height: 2px; background-color: rgba(20, 145, 155, 0.2); } .pulse-wave { position: absolute; top: 0; left: 0; width: 200%; height: 100%; background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 100" preserveAspectRatio="none"><path d="M0,50 L30,50 L45,20 L60,80 L75,40 L90,60 L105,50 L120,50 L150,50 L165,20 L180,80 L195,40 L210,60 L225,50 L240,50 L270,50 L285,20 L300,80 L315,40 L330,60 L345,50 L360,50 L390,50 L405,20 L420,80 L435,40 L450,60 L465,50 L480,50 L510,50 L525,20 L540,80 L555,40 L570,60 L585,50 L600,50" fill="none" stroke="%2314919b" stroke-width="2"/></svg>'); background-repeat: repeat-x; background-size: 600px 100%; animation: moveWave 10s linear infinite; } @keyframes moveWave { 0% { transform: translateX(0); } 100% { transform: translateX(-600px); } } .interactive-zone { width: 100%; height: 30px; margin-top: 5px; position: relative; cursor: pointer; } .slider-track { position: absolute; width: 100%; height: 6px; background: linear-gradient(90deg, #2b8a94 0%, #84d1db 100%); border-radius: 3px; top: 50%; transform: translateY(-50%); } .slider-thumb { width: 18px; height: 18px; background: #ffffff; border: 3px solid #14919b; border-radius: 50%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); transition: all 0.2s ease; } .slider-thumb:hover { transform: translate(-50%, -50%) scale(1.1); box-shadow: 0 3px 7px rgba(0, 0, 0, 0.15); } .activity-bar { display: flex; justify-content: space-between; margin-top: 5px; } .activity-segment { flex: 1; height: 4px; background-color: #dff0f0; margin: 0 1px; border-radius: 2px; position: relative; overflow: hidden; } .activity-fill { position: absolute; left: 0; bottom: 0; width: 100%; background-color: #14919b; border-radius: 2px; transition: height 0.5s ease; } .bottom-icons { display: flex; justify-content: space-between; margin-top: 15px; } .icon-button { width: 36px; height: 36px; border-radius: 50%; background: linear-gradient(145deg, #f0f9ff, #e1f5f2); display: flex; justify-content: center; align-items: center; box-shadow: 0 3px 6px rgba(0, 0, 0, 0.1); cursor: pointer; transition: all 0.2s ease; } .icon-button:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); } .icon-button svg { width: 20px; height: 20px; fill: #14919b; } .circle-progress { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border-radius: 35px; pointer-events: none; } .progress-ring { width: 100%; height: 100%; transform: rotate(-90deg); } circle { stroke-dasharray: 880; stroke-dashoffset: 200; transition: stroke-dashoffset 1s ease; } .ripple { position: absolute; border-radius: 50%; background-color: rgba(20, 145, 155, 0.2); animation: ripple 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite; } @keyframes ripple { 0% { width: 0; height: 0; opacity: 0.7; } 100% { width: 200px; height: 200px; opacity: 0; } } .spo2-display { display: flex; justify-content: space-between; align-items: center; } .spo2-oxygen { border: 1px solid rgba(20, 145, 155, 0.2); border-radius: 8px; padding: 3px 8px; display: inline-block; font-size: 12px; color: #14919b; } .temperature .tile-value { display: flex; align-items: baseline; } .decimals { font-size: 12px; margin-left: 2px; } .phone-overlay { position: absolute; width: 100%; height: 100%; top: 0; left: 0; background-color: rgba(255, 255, 255, 0.9); display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 20px; transform: translateY(100%); transition: transform 0.4s ease; z-index: 10; } .phone-overlay.active { transform: translateY(0); } .caller-info { text-align: center; margin-bottom: 20px; } .caller-name { font-size: 20px; font-weight: 600; color: #0f6f7b; margin-bottom: 5px; } .caller-type { font-size: 14px; color: #3d9ca7; } .call-actions { display: flex; justify-content: center; gap: 20px; } .call-button { width: 50px; height: 50px; border-radius: 50%; display: flex; justify-content: center; align-items: center; cursor: pointer; box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15); transition: all 0.2s ease; } .accept { background-color: #2cb67d; } .decline { background-color: #e63946; } .call-button:hover { transform: scale(1.1); } .call-icon { fill: white; width: 24px; height: 24px; } .watch-interface { transform: scale(1); transition: transform 0.4s ease-in-out; } .notification-banner { position: absolute; top: 0; left: 0; width: 100%; padding: 12px; background-color: rgba(255, 255, 255, 0.95); box-shadow: 0 3px 15px rgba(0, 0, 0, 0.1); border-radius: 16px; transform: translateY(-100%); opacity: 0; transition: transform 0.3s ease, opacity 0.3s ease; z-index: 5; } .notification-banner.active { transform: translateY(0); opacity: 1; } .notification-content { display: flex; align-items: center; } .notification-icon { width: 30px; height: 30px; min-width: 30px; background-color: #14919b; border-radius: 50%; display: flex; justify-content: center; align-items: center; margin-right: 10px; } .notification-icon svg { width: 18px; height: 18px; fill: white; } .notification-text { flex: 1; } .notification-title { font-size: 13px; font-weight: 600; color: #0f6f7b; margin-bottom: 2px; } .notification-message { font-size: 11px; color: #666; } .quick-settings { display: flex; gap: 10px; margin-top: 15px; } .setting-button { flex: 1; display: flex; flex-direction: column; align-items: center; background: linear-gradient(145deg, #e6f3ff, #dff8f5); border-radius: 12px; padding: 8px; font-size: 11px; color: #0f6f7b; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); transition: all 0.2s ease; position: relative; overflow: hidden; } .setting-button:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } .setting-button.active { background: linear-gradient(145deg, #dff8f5, #c5e8e5); } .setting-button.active::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 3px; background-color: #14919b; border-radius: 3px 3px 0 0; } .setting-icon { margin-bottom: 5px; color: #14919b; } .setting-icon svg { width: 16px; height: 16px; fill: #14919b; } .emergency-button { position: absolute; bottom: 15px; right: 15px; width: 40px; height: 40px; background-color: rgba(230, 57, 70, 0.1); border: 2px solid #e63946; border-radius: 50%; display: flex; justify-content: center; align-items: center; cursor: pointer; transition: all 0.3s ease; z-index: 5; } .emergency-button:hover { background-color: rgba(230, 57, 70, 0.2); transform: scale(1.1); } .emergency-button svg { width: 20px; height: 20px; fill: #e63946; } .mode-indicator { position: absolute; top: 15px; right: 15px; width: 12px; height: 12px; border-radius: 50%; background-color: #2cb67d; box-shadow: 0 0 0 2px rgba(44, 182, 125, 0.3); animation: pulse-indicator 2s infinite; } @keyframes pulse-indicator { 0% { box-shadow: 0 0 0 0 rgba(44, 182, 125, 0.5); } 70% { box-shadow: 0 0 0 6px rgba(44, 182, 125, 0); } 100% { box-shadow: 0 0 0 0 rgba(44, 182, 125, 0); } } /* Responsive Design */ @media (max-width: 700px) { .watch-container { transform: scale(0.9); } } @media (max-width: 500px) { .watch-container { transform: scale(0.8); } } @media (max-width: 400px) { .watch-container { transform: scale(0.7); } } /* App Selection Panel */ .app-panel { position: absolute; bottom: 0; left: 0; width: 100%; background: linear-gradient(to top, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.8)); padding: 20px 15px; border-radius: 35px; transform: translateY(100%); transition: transform 0.4s ease; z-index: 20; } .app-panel.active { transform: translateY(0); } .app-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 15px; } .app-icon { display: flex; flex-direction: column; align-items: center; cursor: pointer; } .app-circle { width: 40px; height: 40px; border-radius: 50%; display: flex; justify-content: center; align-items: center; margin-bottom: 5px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); transition: all 0.2s ease; } .app-circle:hover { transform: scale(1.1); } .app-name { font-size: 10px; color: #333; text-align: center; } .health { background: linear-gradient(135deg, #ff6b6b, #ff9999); } .activity { background: linear-gradient(135deg, #33b5e5, #4fd0ff); } .ecg { background: linear-gradient(135deg, #4caf50, #8bc34a); } .sleep { background: linear-gradient(135deg, #673ab7, #9c27b0); } .alarm { background: linear-gradient(135deg, #ff9800, #ffc107); } .settings { background: linear-gradient(135deg, #607d8b, #90a4ae); } .app-icon svg { width: 20px; height: 20px; fill: white; } .close-app-panel { position: absolute; top: 10px; right: 10px; width: 24px; height: 24px; background-color: rgba(0, 0, 0, 0.1); border-radius: 50%; display: flex; justify-content: center; align-items: center; cursor: pointer; transition: all 0.2s ease; } .close-app-panel:hover { background-color: rgba(0, 0, 0, 0.2); } .close-app-panel svg { width: 14px; height: 14px; fill: #333; } .app-search { margin-bottom: 15px; position: relative; } .search-input { width: 100%; padding: 8px 15px; padding-left: 35px; border: none; border-radius: 20px; background-color: rgba(0, 0, 0, 0.05); color: #333; font-size: 12px; transition: all 0.3s ease; } .search-input:focus { outline: none; background-color: rgba(0, 0, 0, 0.08); box-shadow: 0 0 0 2px rgba(20, 145, 155, 0.2); } .search-icon { position: absolute; left: 10px; top: 50%; transform: translateY(-50%); width: 16px; height: 16px; fill: #666; } .watch-band-decoration { position: absolute; width: 60px; height: 12px; background-color: #1d5e6a; left: 50%; transform: translateX(-50%); z-index: -1; } .band-line-top { top: -12px; border-top-left-radius: 8px; border-top-right-radius: 8px; } .band-line-bottom { bottom: -12px; border-bottom-left-radius: 8px; border-bottom-right-radius: 8px; } /* Decorative elements */ .watch-crown { position: absolute; right: -8px; top: 90px; width: 8px; height: 20px; background-color: #1d5e6a; border-top-right-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); } .watch-button { position: absolute; right: -6px; width: 6px; height: 15px; background-color: #1d5e6a; border-top-right-radius: 3px; border-bottom-right-radius: 3px; box-shadow: 0 2px 3px rgba(0, 0, 0, 0.2); } .button-top { top: 130px; } .button-bottom { top: 160px; } /* Interactive instructions */ .instruction-overlay { position: absolute; bottom: 10px; left: 50%; transform: translateX(-50%); background-color: rgba(0, 0, 0, 0.7); color: white; padding: 8px 12px; border-radius: 20px; font-size: 12px; opacity: 0; transition: opacity 0.3s ease; pointer-events: none; white-space: nowrap; } .instruction-overlay.active { opacity: 1; } </style> </head> <body> <div class="watch-container"> <div class="watch-strap strap-top"></div> <div class="watch-band-decoration band-line-top"></div> <div class="watch-crown"></div> <div class="watch-button button-top"></div> <div class="watch-button button-bottom"></div> <div class="screen"> <div class="watch-face"> <div class="watch-interface"> <div class="status-bar"> <div class="time" id="time">10:42</div> <div class="battery"> <div class="battery-icon"> <div class="battery-level"></div> </div> <span>82%</span> </div> </div> <div class="menu-container"> <div class="tile heart-rate"> <div class="tile-title">Heart Rate</div> <div class="tile-value">72 <span class="tile-unit">BPM</span></div> <div class="heart-animation"> <div class="heart"></div> </div> <div class="pulse-graph"> <div class="pulse-line"></div> <div class="pulse-wave"></div> </div> <div class="interactive-zone" id="heart-slider"> <div class="slider-track"></div> <div class="slider-thumb"></div> </div> </div> <div class="tile spo2"> <div class="spo2-display"> <div> <div class="tile-title">Blood Oxygen</div> <div class="tile-value">98 <span class="tile-unit">%</span></div> </div> <div class="spo2-oxygen">O₂</div> </div> <div class="activity-bar"> <div class="activity-segment"><div class="activity-fill" style="height: 100%;"></div></div> <div class="activity-segment"><div class="activity-fill" style="height: 90%;"></div></div> <div class="activity-segment"><div class="activity-fill" style="height: 100%;"></div></div> <div class="activity-segment"><div class="activity-fill" style="height: 95%;"></div></div> <div class="activity-segment"><div class="activity-fill" style="height: 100%;"></div></div> <div class="activity-segment"><div class="activity-fill" style="height: 98%;"></div></div> <div class="activity-segment"><div class="activity-fill" style="height: 95%;"></div></div> </div> </div> <div class="tile temperature"> <div class="tile-title">Body Temperature</div> <div class="tile-value">36<span class="decimals">.7</span> <span class="tile-unit">°C</span></div> </div> <div class="quick-settings"> <div class="setting-button active" id="btn-health"> <div class="setting-icon"> <svg viewBox="0 0 24 24"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg> </div> Health </div> <div class="setting-button" id="btn-activity"> <div class="setting-icon"> <svg viewBox="0 0 24 24"><path d="M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5.1-.8.1l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z"/></svg> </div> Activity </div> <div class="setting-button" id="btn-alert"> <div class="setting-icon"> <svg viewBox="0 0 24 24"><path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.9 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-2 1H8v-6c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6z"/></svg> </div> Alerts </div> </div> </div> </div> <div class="circle-progress"> <svg class="progress-ring" viewBox="0 0 300 300"> <circle cx="150" cy="150" r="140" fill="none" stroke="#14919b" stroke-opacity="0.1" stroke-width="4" /> <circle id="progress-circle" cx="150" cy="150" r="140" fill="none" stroke="#14919b" stroke-width="4" stroke-linecap="round" /> </svg> </div> <div class="mode-indicator"></div> <div class="emergency-button" id="emergency-btn"> <svg viewBox="0 0 24 24"> <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/> </svg> </div> <div class="notification-banner" id="notification"> <div class="notification-content"> <div class="notification-icon"> <svg viewBox="0 0 24 24"> <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/> </svg> </div> <div class="notification-text"> <div class="notification-title">Heart Rate Alert</div> <div class="notification-message">Elevated heart rate detected during rest</div> </div> </div> </div> <div class="phone-overlay" id="call-overlay"> <div class="caller-info"> <div class="caller-name">Dr. Sarah Johnson</div> <div class="caller-type">Cardiologist</div> </div> <div class="call-actions"> <div class="call-button accept" id="accept-call"> <svg class="call-icon" viewBox="0 0 24 24"> <path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/> </svg> </div> <div class="call-button decline" id="decline-call"> <svg class="call-icon" viewBox="0 0 24 24"> <path d="M12 9c-1.6 0-3.15.25-4.6.72v3.1c0 .39-.23.74-.56.9-.98.49-1.87 1.12-2.66 1.85-.18.18-.43.28-.7.28-.28 0-.53-.11-.71-.29L.29 13.08c-.18-.17-.29-.42-.29-.7 0-.28.11-.53.29-.71C3.34 8.78 7.46 7 12 7s8.66 1.78 11.71 4.67c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-2.48 2.48c-.18.18-.43.29-.71.29-.27 0-.52-.11-.7-.28-.79-.74-1.69-1.36-2.67-1.85-.33-.16-.56-.5-.56-.9v-3.1C15.15 9.25 13.6 9 12 9z"/> </svg> </div>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>TERRA-X Rugged Smartwatch</title> <style> @import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@600;700&family=Roboto+Mono:wght@400;700&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } :root { --dark-gray: #252525; --light-gray: #2e2e2e; --accent: #ff5722; --warning: #ffcc00; --success: #4CAF50; --display-bg: #131313; --text: #f5f5f5; --text-dim: #aaaaaa; --glass: rgba(255, 255, 255, 0.08); --font-display: 'Roboto Mono', monospace; --font-ui: 'Barlow Condensed', sans-serif; } body { font-family: var(--font-ui); background-color: #1a1a1a; color: var(--text); display: flex; justify-content: center; align-items: center; min-height: 100vh; width: 100%; overflow-x: hidden; padding: 20px; background-image: radial-gradient(circle at 10% 20%, #303030 0%, #1a1a1a 90%); } .container { width: 100%; max-width: 700px; height: 700px; display: flex; flex-direction: column; justify-content: center; align-items: center; position: relative; } .smartwatch { width: 300px; height: 340px; background-color: var(--dark-gray); border-radius: 30px; position: relative; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4), inset 0 2px 10px rgba(255, 255, 255, 0.1), inset 0 -5px 15px rgba(0, 0, 0, 0.5); padding: 12px; transition: transform 0.3s ease; border: 2px solid var(--light-gray); z-index: 10; } .strap-top, .strap-bottom { width: 80px; background-color: #3d3d3d; position: absolute; left: 50%; transform: translateX(-50%); border-radius: 10px; box-shadow: inset 0 -2px 5px rgba(0, 0, 0, 0.3), inset 0 2px 5px rgba(255, 255, 255, 0.1); z-index: 1; } .strap-top { height: 100px; top: -70px; background-image: linear-gradient(to bottom, #3d3d3d, var(--dark-gray)); } .strap-bottom { height: 130px; bottom: -100px; background-image: linear-gradient(to bottom, var(--dark-gray), #3d3d3d); } .strap-texture { width: 100%; height: 100%; background-image: repeating-linear-gradient(0deg, transparent, transparent 8px, rgba(0, 0, 0, 0.1) 8px, rgba(0, 0, 0, 0.1) 12px); } .strap-holes { position: absolute; width: 10px; height: 10px; border-radius: 50%; background-color: #2a2a2a; box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.6); left: 50%; transform: translateX(-50%); } .strap-top .strap-holes:nth-child(1) { top: 20px; } .strap-top .strap-holes:nth-child(2) { top: 50px; } .strap-top .strap-holes:nth-child(3) { top: 80px; } .strap-bottom .strap-holes:nth-child(1) { top: 20px; } .strap-bottom .strap-holes:nth-child(2) { top: 50px; } .strap-bottom .strap-holes:nth-child(3) { top: 80px; } .strap-bottom .strap-holes:nth-child(4) { top: 110px; } .screen { width: 100%; height: 100%; background-color: var(--display-bg); border-radius: 20px; overflow: hidden; position: relative; display: flex; flex-direction: column; justify-content: flex-start; align-items: center; box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.8); } .side-button { width: 10px; height: 35px; background-color: var(--accent); position: absolute; right: -2px; border-radius: 5px 2px 2px 5px; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3); cursor: pointer; z-index: 20; transition: all 0.2s ease; } .side-button:active { transform: translateX(2px); box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); } .button-1 { top: 80px; } .button-2 { top: 130px; } .button-3 { top: 180px; } .status-bar { width: 100%; padding: 10px 15px; display: flex; justify-content: space-between; align-items: center; font-size: 12px; color: var(--text-dim); background-color: rgba(0, 0, 0, 0.4); border-bottom: 1px solid rgba(255, 255, 255, 0.05); z-index: 5; } .battery { display: flex; align-items: center; } .battery-icon { width: 18px; height: 10px; border: 1px solid var(--text-dim); border-radius: 2px; margin-right: 4px; position: relative; } .battery-icon::after { content: ''; position: absolute; right: -3px; top: 2px; width: 2px; height: 6px; background-color: var(--text-dim); border-radius: 0 2px 2px 0; } .battery-level { height: 8px; width: 70%; background-color: var(--success); border-radius: 1px; } .time-display { padding: 15px 0; display: flex; flex-direction: column; align-items: center; width: 100%; } .digital-time { font-family: var(--font-display); font-size: 48px; font-weight: 700; color: var(--text); text-shadow: 0 0 15px rgba(255, 87, 34, 0.5); letter-spacing: 2px; } .date { font-size: 14px; color: var(--text-dim); margin-top: 5px; } .metrics { width: 100%; padding: 0 15px; display: grid; grid-template-columns: 1fr 1fr; gap: 10px; } .metric-box { background-color: var(--glass); border-radius: 12px; padding: 10px; display: flex; flex-direction: column; align-items: center; backdrop-filter: blur(5px); border: 1px solid rgba(255, 255, 255, 0.05); transition: all 0.3s ease; } .metric-box:hover { background-color: rgba(255, 255, 255, 0.12); transform: translateY(-2px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); } .metric-icon { font-size: 24px; margin-bottom: 5px; color: var(--text); } .metric-value { font-size: 22px; font-weight: bold; } .metric-label { font-size: 12px; color: var(--text-dim); } .alert-box { position: absolute; bottom: 0; width: 100%; background-color: var(--warning); color: #000; padding: 10px; font-weight: bold; text-align: center; transform: translateY(100%); transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); display: flex; align-items: center; justify-content: center; gap: 8px; z-index: 10; } .alert-box.active { transform: translateY(0); } .alert-icon { animation: pulse 1.5s infinite; } .shortcuts { width: 100%; padding: 10px 15px; display: flex; justify-content: space-between; margin-top: 15px; } .shortcut { width: 45px; height: 45px; border-radius: 12px; background-color: var(--glass); display: flex; justify-content: center; align-items: center; font-size: 20px; color: var(--text); cursor: pointer; transition: all 0.2s ease; border: 1px solid rgba(255, 255, 255, 0.05); } .shortcut:hover { background-color: var(--accent); transform: translateY(-3px); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3); } .detail-panel { flex: 1; width: 300px; margin-top: 30px; background-color: var(--light-gray); border-radius: 15px; padding: 20px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); transform: translateY(-20px); opacity: 0; transition: all 0.4s ease; z-index: 5; } .detail-panel.active { transform: translateY(0); opacity: 1; } .panel-title { font-size: 22px; font-weight: bold; margin-bottom: 15px; color: var(--accent); display: flex; align-items: center; gap: 8px; } .feature-list { list-style: none; } .feature-item { padding: 10px 0; border-bottom: 1px solid rgba(255, 255, 255, 0.1); display: flex; align-items: center; gap: 10px; } .feature-icon { color: var(--accent); font-size: 18px; } .modes { position: absolute; top: 15px; right: 15px; display: flex; flex-direction: column; gap: 10px; } .mode-btn { width: 40px; height: 40px; border-radius: 50%; display: flex; justify-content: center; align-items: center; background-color: var(--dark-gray); color: var(--text-dim); border: 2px solid transparent; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3); } .mode-btn.active { background-color: var(--accent); color: white; border-color: rgba(255, 255, 255, 0.3); } .mode-btn:hover { transform: scale(1.1); } .compass-mode { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--display-bg); z-index: 6; justify-content: center; align-items: center; } .compass-container { position: relative; width: 200px; height: 200px; } .compass-ring { position: absolute; width: 100%; height: 100%; border: 3px solid var(--accent); border-radius: 50%; display: flex; justify-content: center; align-items: center; } .compass-directions { position: absolute; width: 100%; height: 100%; border-radius: 50%; } .direction { position: absolute; font-weight: bold; color: var(--text); } .direction.n { top: 5px; left: 50%; transform: translateX(-50%); } .direction.e { right: 5px; top: 50%; transform: translateY(-50%); } .direction.s { bottom: 5px; left: 50%; transform: translateX(-50%); } .direction.w { left: 5px; top: 50%; transform: translateY(-50%); } .compass-needle { position: absolute; width: 5px; height: 150px; background-color: transparent; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 7; transform-origin: center center; transition: transform 1s cubic-bezier(0.175, 0.885, 0.32, 1.275); } .needle-north { position: absolute; top: 0; left: 0; width: 100%; height: 50%; background-color: var(--accent); clip-path: polygon(0 0, 100% 0, 50% 100%); } .needle-south { position: absolute; bottom: 0; left: 0; width: 100%; height: 50%; background-color: white; clip-path: polygon(0 100%, 100% 100%, 50% 0); } .compass-center { position: absolute; width: 20px; height: 20px; border-radius: 50%; background-color: var(--dark-gray); top: 50%; left: 50%; transform: translate(-50%, -50%); border: 2px solid var(--accent); z-index: 8; } .degree-display { position: absolute; bottom: 50px; width: 100%; text-align: center; font-family: var(--font-display); font-size: 24px; font-weight: bold; } .rugged-texture { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.1) 75%), linear-gradient(45deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.1) 75%); background-size: 10px 10px; background-position: 0 0, 5px 5px; opacity: 0.3; pointer-events: none; } .screen-reflection { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, transparent 50%, transparent 100%); border-radius: 20px; pointer-events: none; } .notification-dot { position: absolute; top: 60px; right: 20px; width: 10px; height: 10px; background-color: var(--accent); border-radius: 50%; animation: pulse 2s infinite; } /* Animations */ @keyframes pulse { 0% { opacity: 1; transform: scale(1); } 50% { opacity: 0.7; transform: scale(1.1); } 100% { opacity: 1; transform: scale(1); } } /* Responsive adjustments */ @media (max-width: 500px) { .container { padding: 10px; flex-direction: column; height: auto; } .detail-panel { width: 100%; margin-top: 15px; } .modes { flex-direction: row; top: auto; bottom: 15px; right: 15px; } } </style> </head> <body> <div class="container"> <div class="modes"> <div class="mode-btn active" data-mode="time"> <i class="fas fa-clock"></i> </div> <div class="mode-btn" data-mode="compass"> <i class="fas fa-compass"></i> </div> </div> <div class="smartwatch"> <div class="side-button button-1"></div> <div class="side-button button-2"></div> <div class="side-button button-3"></div> <div class="strap-top"> <div class="strap-texture"></div> <div class="strap-holes"></div> <div class="strap-holes"></div> <div class="strap-holes"></div> </div> <div class="strap-bottom"> <div class="strap-texture"></div> <div class="strap-holes"></div> <div class="strap-holes"></div> <div class="strap-holes"></div> <div class="strap-holes"></div> </div> <div class="screen"> <div class="rugged-texture"></div> <div class="screen-reflection"></div> <div class="status-bar"> <span>TERRA-X</span> <div class="battery"> <div class="battery-icon"> <div class="battery-level"></div> </div> 70% </div> </div> <div class="notification-dot"></div> <div class="time-display"> <div class="digital-time">10:35</div> <div class="date">MON, JUN 12</div> </div> <div class="metrics"> <div class="metric-box"> <div class="metric-icon"> <i class="fas fa-heartbeat"></i> </div> <div class="metric-value">82</div> <div class="metric-label">BPM</div> </div> <div class="metric-box"> <div class="metric-icon"> <i class="fas fa-thermometer-half"></i> </div> <div class="metric-value">34°C</div> <div class="metric-label">AMBIENT</div> </div> </div> <div class="shortcuts"> <div class="shortcut" id="radio-btn"> <i class="fas fa-walkie-talkie"></i> </div> <div class="shortcut" id="alert-btn"> <i class="fas fa-bell"></i> </div> <div class="shortcut" id="map-btn"> <i class="fas fa-map-marker-alt"></i> </div> <div class="shortcut" id="tools-btn"> <i class="fas fa-toolbox"></i> </div> </div> <div class="alert-box" id="alert-box"> <div class="alert-icon"> <i class="fas fa-exclamation-triangle"></i> </div> <span>HAZARD ZONE DETECTED</span> </div> <div class="compass-mode"> <div class="compass-container"> <div class="compass-ring"></div> <div class="compass-directions"> <div class="direction n">N</div> <div class="direction e">E</div> <div class="direction s">S</div> <div class="direction w">W</div> </div> <div class="compass-needle"> <div class="needle-north"></div> <div class="needle-south"></div> </div> <div class="compass-center"></div> </div> <div class="degree-display">134°</div> </div> </div> </div> <div class="detail-panel" id="detail-panel"> <div class="panel-title"> <i class="fas fa-shield-alt"></i> TERRA-X PRO FEATURES </div> <ul class="feature-list"> <li class="feature-item"> <span class="feature-icon"><i class="fas fa-hammer"></i></span> <span>MIL-STD-810G impact resistance</span> </li> <li class="feature-item"> <span class="feature-icon"><i class="fas fa-tint"></i></span> <span>IP68 dust/water resistance (20m)</span> </li> <li class="feature-item"> <span class="feature-icon"><i class="fas fa-bolt"></i></span> <span>Vibration alerts for hazard zones</span> </li> <li class="feature-item"> <span class="feature-icon"><i class="fas fa-broadcast-tower"></i></span> <span>Push-to-talk radio integration</span> </li> <li class="feature-item"> <span class="feature-icon"><i class="fas fa-temperature-high"></i></span> <span>-40°C to 85°C operating range</span> </li> </ul> </div> </div> <script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script> <script> document.addEventListener('DOMContentLoaded', function() { // Fix for Font Awesome in case CDN fails if (typeof FontAwesome === 'undefined') { const icons = document.querySelectorAll('.fas'); icons.forEach(icon => { const classNames = icon.className.split(' '); const iconName = classNames[1].substring(3); // Remove 'fa-' prefix icon.textContent = getIconFallback(iconName); }); } // Update time function updateTime() { const now = new Date(); const hours = now.getHours().toString().padStart(2, '0'); const minutes = now.getMinutes().toString().padStart(2, '0'); document.querySelector('.digital-time').textContent = `${hours}:${minutes}`; const daysOfWeek = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']; const months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']; const dayOfWeek = daysOfWeek[now.getDay()]; const month = months[now.getMonth()]; const date = now.getDate(); document.querySelector('.date').textContent = `${dayOfWeek}, ${month} ${date}`; } updateTime(); setInterval(updateTime, 60000); // Alert functionality const alertBtn = document.getElementById('alert-btn'); const alertBox = document.getElementById('alert-box'); alertBtn.addEventListener('click', function() { alertBox.classList.add('active'); // Vibration API if supported if (navigator.vibrate) { navigator.vibrate([200, 100, 200]); } // Hide alert after 3 seconds setTimeout(() => { alertBox.classList.remove('active'); }, 3000); }); // Show detail panel const smartwatch = document.querySelector('.smartwatch'); const detailPanel = document.getElementById('detail-panel'); smartwatch.addEventListener('click', function() { detailPanel.classList.toggle('active'); }); // Mode switching functionality const modeBtns = document.querySelectorAll('.mode-btn'); const timeMode = document.querySelector('.time-display'); const metricsSection = document.querySelector('.metrics'); const shortcutsSection = document.querySelector('.shortcuts'); const compassMode = document.querySelector('.compass-mode'); modeBtns.forEach(btn => { btn.addEventListener('click', function() { // Remove active class from all buttons modeBtns.forEach(b => b.classList.remove('active')); // Add active class to clicked button this.classList.add('active'); const mode = this.getAttribute('data-mode'); if (mode === 'time') { timeMode.style.display = 'flex'; metricsSection.style.display = 'grid'; shortcutsSection.style.display = 'flex'; compassMode.style.display = 'none'; } else if (mode === 'compass') { timeMode.style.display = 'none'; metricsSection.style.display = 'none'; shortcutsSection.style.display = 'none'; compassMode.style.display = 'flex'; animateCompass(); } }); }); // Compass animation function animateCompass() { const needle = document.querySelector('.compass-needle'); const degreeDisplay = document.querySelector('.degree-display'); // Simulate compass movement let degree = Math.floor(Math.random() * 360); needle.style.transform = `translate(-50%, -50%) rotate(${degree}deg)`; degreeDisplay.textContent = `${degree}°`; // Update compass periodically to simulate movement setInterval(() => { // Add slight movement to simulate real compass degree = (degree + Math.floor(Math.random() * 10) - 5) % 360; if (degree < 0) degree += 360; needle.style.transform = `translate(-50%, -50%) rotate(${degree}deg)`; degreeDisplay.textContent = `${degree}°`; }, 2000); } // Side buttons feedback const sideButtons = document.querySelectorAll('.side-button'); sideButtons.forEach((btn, index) => { btn.addEventListener('click', function() { if (navigator.vibrate) { navigator.vibrate(100); } // Different actions for different buttons switch(index) { case 0: // Top button document.querySelector('.battery-level').style.width = '100%'; document.querySelector('.battery').innerHTML = '<div class="battery-icon"><div class="battery-level"></div></div> 100%'; break; case 1: // Middle button toggleFullMetrics(); break; case 2: // Bottom button // Toggle alert alertBox.classList.toggle('active'); break; } }); }); // Toggle between different metrics function toggleFullMetrics() { const currentMetrics = document.querySelector('.metrics'); // Simple toggle between two sets of metrics if (currentMetrics.innerHTML.includes('BPM')) { currentMetrics.innerHTML = ` <div class="metric-box"> <div class="metric-icon"> <i class="fas fa-tachometer-alt"></i> </div> <div class="metric-value">14.2</div> <div class="metric-label">KM/H</div> </div> <div class="metric-box"> <div class="metric-icon"> <i class="fas fa-route"></i> </div> <div class="metric-value">8.7</div> <div class="metric-label">KM</div> </div> `; } else { currentMetrics.innerHTML = ` <div class="metric-box"> <div class="metric-icon"> <i class="fas fa-heartbeat"></i> </div> <div class="metric-value">82</div> <div class="metric-label">BPM</div> </div> <div class="metric-box"> <div class="metric-icon"> <i class="fas fa-thermometer-half"></i> </div> <div class="metric-value">34°C</div> <div class="metric-label">AMBIENT</div> </div> `; } } // Tilt watch animation document.addEventListener('mousemove', function(e) { const watch = document.querySelector('.smartwatch'); const xAxis = (window.innerWidth / 2 - e.pageX) / 30; const yAxis = (window.innerHeight / 2 - e.pageY) / 30; watch.style.transform = `rotateY(${xAxis}deg) rotateX(${yAxis}deg)`; }); // Helper function for icon fallbacks function getIconFallback(iconName) { const iconMap = { 'clock': '⏱️', 'compass': '🧭', 'heartbeat': '❤️', 'thermometer-half': '🌡️', 'walkie-talkie': '📻', 'bell': '🔔', 'map-marker-alt': '📍', 'toolbox': '🧰', 'exclamation-triangle': '⚠️', 'shield-alt': '🛡️', 'hammer': '🔨', 'tint': '💧', 'bolt': '⚡', 'broadcast-tower': '📡', 'temperature-high': '🔥', 'tachometer-alt': '🏎️', 'route': '🛣️' }; return iconMap[iconName] || '•'; } }); </script> </body> </html>