Tab bars are essential components in modern UI design, providing users with a streamlined way to navigate through different sections of an application. They enhance user experience by offering quick access to key features and content.
In this article, we will explore 10 exemplary tab bar designs that showcase creativity, functionality, and user-centric design principles. These examples will inspire you to create intuitive and visually appealing navigation solutions for your own projects.
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
Designers and developers love Subframe for its drag-and-drop interface and intuitive, responsive canvas. Create pixel-perfect UI effortlessly, ensuring every detail is just right.
Join the community of satisfied users and elevate your design game. Start for free 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 pixel-perfect interfaces, including stunning tab bars, in minutes. Our drag-and-drop editor ensures efficiency and precision.
Don't wait! Start for free and begin designing immediately. Join the community of designers who trust Subframe for their projects.
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Enterprise Analytics Dashboard</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; } :root { --primary: #1a56db; --primary-light: #3b7eff; --secondary: #10b981; --tertiary: #f43f5e; --quaternary: #8b5cf6; --dark: #111827; --gray: #6b7280; --light: #f9fafb; --underline-height: 4px; --animation-duration: 0.3s; } body { width: 100%; height: 700px; background-color: #f3f4f6; color: var(--dark); overflow: hidden; } .dashboard { width: 100%; max-width: 700px; height: 100%; margin: 0 auto; background-color: white; display: flex; flex-direction: column; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.05); border-radius: 12px; overflow: hidden; } .dashboard-header { padding: 20px 24px 0; background-color: white; display: flex; justify-content: space-between; align-items: center; } .logo-area { display: flex; align-items: center; gap: 12px; } .logo { width: 40px; height: 40px; background: linear-gradient(135deg, var(--primary), var(--primary-light)); border-radius: 10px; position: relative; display: flex; align-items: center; justify-content: center; } .logo::before, .logo::after { content: ""; position: absolute; background-color: white; } .logo::before { width: 18px; height: 4px; border-radius: 2px; top: 15px; } .logo::after { width: 4px; height: 18px; border-radius: 2px; left: 18px; bottom: 8px; } .title { font-size: 20px; font-weight: 700; color: var(--dark); } .user-area { display: flex; align-items: center; gap: 15px; } .notification { position: relative; cursor: pointer; } .notification i { font-size: 22px; color: var(--gray); } .notification::after { content: ""; position: absolute; width: 8px; height: 8px; background-color: var(--tertiary); border-radius: 50%; top: 0; right: 0; } .user-avatar { width: 36px; height: 36px; border-radius: 50%; background-color: var(--light); border: 2px solid var(--primary-light); display: flex; align-items: center; justify-content: center; font-size: 16px; font-weight: 600; color: var(--primary); cursor: pointer; } .tab-container { padding: 20px 24px 0; position: relative; } .tabs { display: flex; list-style: none; gap: 30px; position: relative; } .tab { padding: 10px 4px; font-size: 15px; font-weight: 600; color: var(--gray); cursor: pointer; transition: color var(--animation-duration) ease; position: relative; white-space: nowrap; } .tab.active { color: var(--primary); } .tab:hover:not(.active) { color: var(--dark); } .tab-underline { position: absolute; bottom: 0; height: var(--underline-height); background-color: var(--primary); border-radius: var(--underline-height); transition: all var(--animation-duration) cubic-bezier(0.645, 0.045, 0.355, 1); } .tab-highlight { position: absolute; top: -12px; height: 60px; border-radius: 10px; background-color: rgba(59, 126, 255, 0.06); z-index: 1; transition: all var(--animation-duration) cubic-bezier(0.645, 0.045, 0.355, 1); } .tab-content { flex: 1; padding: 24px; overflow-y: auto; } .panel { display: none; animation: fadeIn 0.5s; height: 100%; } .panel.active { display: block; } @keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } .metrics-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 15px; margin-bottom: 24px; } .metric-card { background-color: white; border-radius: 10px; padding: 15px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.04); border: 1px solid rgba(0, 0, 0, 0.05); transition: transform 0.2s, box-shadow 0.2s; } .metric-card:hover { transform: translateY(-3px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08); } .metric-label { font-size: 13px; color: var(--gray); margin-bottom: 8px; } .metric-value { font-size: 22px; font-weight: 700; color: var(--dark); display: flex; align-items: baseline; } .metric-trend { font-size: 12px; font-weight: 600; margin-left: 6px; padding: 2px 6px; border-radius: 4px; } .trend-up { color: var(--secondary); background-color: rgba(16, 185, 129, 0.1); } .trend-down { color: var(--tertiary); background-color: rgba(244, 63, 94, 0.1); } .chart-container { background-color: white; border-radius: 10px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.04); border: 1px solid rgba(0, 0, 0, 0.05); padding: 20px; height: calc(100% - 120px); position: relative; } .chart-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .chart-title { font-size: 16px; font-weight: 600; } .chart-legend { display: flex; gap: 15px; } .legend-item { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--gray); } .legend-color { width: 10px; height: 10px; border-radius: 2px; } .color-primary { background-color: var(--primary); } .color-secondary { background-color: var(--secondary); } .color-tertiary { background-color: var(--tertiary); } .color-quaternary { background-color: var(--quaternary); } .chart { width: 100%; height: calc(100% - 50px); position: relative; } canvas { width: 100% !important; height: 100% !important; } /* User panel styles */ .user-table { width: 100%; border-collapse: collapse; } .user-table th, .user-table td { padding: 12px 16px; text-align: left; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } .user-table th { font-size: 13px; font-weight: 600; color: var(--gray); } .user-table td { font-size: 14px; color: var(--dark); } .user-row:hover { background-color: rgba(0, 0, 0, 0.01); } .status { padding: 4px 8px; border-radius: 4px; font-size: 12px; font-weight: 500; } .status-active { background-color: rgba(16, 185, 129, 0.1); color: var(--secondary); } .status-inactive { background-color: rgba(107, 114, 128, 0.1); color: var(--gray); } .status-pending { background-color: rgba(244, 63, 94, 0.1); color: var(--tertiary); } /* Sales panel styles */ .sales-grid { display: grid; grid-template-columns: 2fr 1fr; gap: 20px; height: calc(100% - 100px); } .sales-chart { background-color: white; border-radius: 10px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.04); border: 1px solid rgba(0, 0, 0, 0.05); padding: 20px; height: 100%; } .sales-breakdown { background-color: white; border-radius: 10px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.04); border: 1px solid rgba(0, 0, 0, 0.05); padding: 20px; height: 100%; display: flex; flex-direction: column; } .breakdown-item { display: flex; justify-content: space-between; padding: 12px 0; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } .breakdown-label { font-size: 14px; color: var(--dark); } .breakdown-value { font-size: 14px; font-weight: 600; color: var(--dark); } /* Product panel styles */ .product-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 15px; overflow-y: auto; max-height: calc(100% - 120px); } .product-card { background-color: white; border-radius: 10px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.04); border: 1px solid rgba(0, 0, 0, 0.05); overflow: hidden; transition: transform 0.2s, box-shadow 0.2s; } .product-card:hover { transform: translateY(-3px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08); } .product-image { width: 100%; height: 100px; background-color: var(--light); display: flex; align-items: center; justify-content: center; overflow: hidden; } .product-image i { font-size: 30px; color: var(--primary); } .product-details { padding: 12px; } .product-name { font-size: 14px; font-weight: 600; margin-bottom: 4px; color: var(--dark); } .product-price { font-size: 13px; color: var(--gray); } .product-sales { font-size: 12px; color: var(--tertiary); display: flex; align-items: center; gap: 4px; margin-top: 6px; } /* Marketing panel styles */ .campaign-list { margin-top: 20px; height: calc(100% - 140px); overflow-y: auto; } .campaign-item { display: flex; padding: 16px; background-color: white; border-radius: 10px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.04); border: 1px solid rgba(0, 0, 0, 0.05); margin-bottom: 15px; } .campaign-icon { width: 50px; height: 50px; border-radius: 10px; display: flex; align-items: center; justify-content: center; margin-right: 15px; font-size: 20px; color: white; } .icon-email { background-color: var(--primary); } .icon-social { background-color: var(--quaternary); } .icon-seo { background-color: var(--secondary); } .icon-ads { background-color: var(--tertiary); } .campaign-details { flex: 1; } .campaign-name { font-size: 16px; font-weight: 600; margin-bottom: 5px; color: var(--dark); } .campaign-metrics { display: flex; gap: 15px; } .campaign-metric { font-size: 13px; color: var(--gray); } .campaign-metric span { font-weight: 600; color: var(--dark); } /* Responsive styles */ @media (max-width: 600px) { .metrics-grid { grid-template-columns: repeat(2, 1fr); } .sales-grid { grid-template-columns: 1fr; } .tab { font-size: 13px; } .tabs { gap: 15px; } } @media (max-width: 400px) { .metrics-grid { grid-template-columns: 1fr; } .product-grid { grid-template-columns: 1fr 1fr; } } /* Skeleton loader */ .skeleton { background: linear-gradient(90deg, #f0f0f0 25%, #f8f8f8 50%, #f0f0f0 75%); background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: 4px; } @keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } .skeleton-text { height: 16px; margin-bottom: 8px; width: 100%; } .skeleton-text:last-child { width: 80%; } </style> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> </head> <body> <div class="dashboard"> <div class="dashboard-header"> <div class="logo-area"> <div class="logo"></div> <div class="title">QuantumMetrics</div> </div> <div class="user-area"> <div class="notification"> <i class="far fa-bell"></i> </div> <div class="user-avatar">JD</div> </div> </div> <div class="tab-container"> <div class="tab-highlight"></div> <ul class="tabs"> <li class="tab active" data-panel="overview">Overview</li> <li class="tab" data-panel="sales">Sales Analysis</li> <li class="tab" data-panel="products">Product Metrics</li> <li class="tab" data-panel="users">User Analytics</li> <li class="tab" data-panel="marketing">Marketing</li> </ul> <div class="tab-underline"></div> </div> <div class="tab-content"> <!-- Overview Panel --> <div class="panel active" id="overview"> <div class="metrics-grid"> <div class="metric-card"> <div class="metric-label">Total Revenue</div> <div class="metric-value"> $247,829 <span class="metric-trend trend-up">+12.5%</span> </div> </div> <div class="metric-card"> <div class="metric-label">Active Users</div> <div class="metric-value"> 18,492 <span class="metric-trend trend-up">+8.2%</span> </div> </div> <div class="metric-card"> <div class="metric-label">Conversion Rate</div> <div class="metric-value"> 3.8% <span class="metric-trend trend-down">-0.6%</span> </div> </div> </div> <div class="chart-container"> <div class="chart-header"> <div class="chart-title">Performance Metrics</div> <div class="chart-legend"> <div class="legend-item"> <div class="legend-color color-primary"></div> <span>Revenue</span> </div> <div class="legend-item"> <div class="legend-color color-secondary"></div> <span>Users</span> </div> <div class="legend-item"> <div class="legend-color color-tertiary"></div> <span>Conversion</span> </div> </div> </div> <div class="chart" id="overviewChart"></div> </div> </div> <!-- Sales Analysis Panel --> <div class="panel" id="sales"> <div class="metrics-grid"> <div class="metric-card"> <div class="metric-label">Monthly Sales</div> <div class="metric-value"> $86,241 <span class="metric-trend trend-up">+15.3%</span> </div> </div> <div class="metric-card"> <div class="metric-label">Avg. Order Value</div> <div class="metric-value"> $124.72 <span class="metric-trend trend-up">+3.8%</span> </div> </div> <div class="metric-card"> <div class="metric-label">Refund Rate</div> <div class="metric-value"> 2.1% <span class="metric-trend trend-down">-0.7%</span> </div> </div> </div> <div class="sales-grid"> <div class="sales-chart"> <div class="chart-header"> <div class="chart-title">Sales Trend Q3 2023</div> <div class="chart-legend"> <div class="legend-item"> <div class="legend-color color-primary"></div> <span>Current</span> </div> <div class="legend-item"> <div class="legend-color color-secondary"></div> <span>Previous</span> </div> </div> </div> <div class="chart" id="salesChart"></div> </div> <div class="sales-breakdown"> <div class="chart-title">Sales Breakdown</div> <div class="breakdown-item"> <div class="breakdown-label">Direct Sales</div> <div class="breakdown-value">$51,744</div> </div> <div class="breakdown-item"> <div class="breakdown-label">Online Store</div> <div class="breakdown-value">$23,287</div> </div> <div class="breakdown-item"> <div class="breakdown-label">Marketplace</div> <div class="breakdown-value">$8,952</div> </div> <div class="breakdown-item"> <div class="breakdown-label">Partners</div> <div class="breakdown-value">$2,258</div> </div> </div> </div> </div> <!-- Product Metrics Panel --> <div class="panel" id="products"> <div class="metrics-grid"> <div class="metric-card"> <div class="metric-label">Total Products</div> <div class="metric-value"> 347 <span class="metric-trend trend-up">+12</span> </div> </div> <div class="metric-card"> <div class="metric-label">Top Seller</div> <div class="metric-value"> ProXL 5000 <span class="metric-trend trend-up">+23.4%</span> </div> </div> <div class="metric-card"> <div class="metric-label">Inventory Value</div> <div class="metric-value"> $624,183 <span class="metric-trend trend-up">+5.2%</span> </div> </div> </div> <div class="chart-container"> <div class="chart-header"> <div class="chart-title">Top Performing Products</div> </div> <div class="product-grid"> <div class="product-card"> <div class="product-image"> <i class="fas fa-laptop"></i> </div> <div class="product-details"> <div class="product-name">ProXL 5000</div> <div class="product-price">$1,299.99</div> <div class="product-sales"> <i class="fas fa-chart-line"></i> 217 units </div> </div> </div> <div class="product-card"> <div class="product-image"> <i class="fas fa-headphones"></i> </div> <div class="product-details"> <div class="product-name">SonicWave Pro</div> <div class="product-price">$249.99</div> <div class="product-sales"> <i class="fas fa-chart-line"></i> 189 units </div> </div> </div> <div class="product-card"> <div class="product-image"> <i class="fas fa-server"></i> </div> <div class="product-details"> <div class="product-name">ServerStack 2TB</div> <div class="product-price">$599.99</div> <div class="product-sales"> <i class="fas fa-chart-line"></i> 142 units </div> </div> </div> <div class="product-card"> <div class="product-image"> <i class="fas fa-mobile-alt"></i> </div> <div class="product-details"> <div class="product-name">SmartCell X1</div> <div class="product-price">$899.99</div> <div class="product-sales"> <i class="fas fa-chart-line"></i> 128 units </div> </div> </div> <div class="product-card"> <div class="product-image"> <i class="fas fa-keyboard"></i> </div> <div class="product-details"> <div class="product-name">MechKey Pro</div> <div class="product-price">$129.99</div> <div class="product-sales"> <i class="fas fa-chart-line"></i> 112 units </div> </div> </div> <div class="product-card"> <div class="product-image"> <i class="fas fa-memory"></i> </div> <div class="product-details"> <div class="product-name">RamBoost 64GB</div> <div class="product-price">$229.99</div> <div class="product-sales"> <i class="fas fa-chart-line"></i> 98 units </div> </div> </div> </div> </div> </div> <!-- User Analytics Panel --> <div class="panel" id="users"> <div class="metrics-grid"> <div class="metric-card"> <div class="metric-label">New Users</div> <div class="metric-value"> 2,847 <span class="metric-trend trend-up">+15.7%</span> </div> </div> <div class="metric-card"> <div class="metric-label">Avg. Session</div> <div class="metric-value"> 4:32 <span class="metric-trend trend-up">+0:43</span> </div> </div> <div class="metric-card"> <div class="metric-label">Bounce Rate</div> <div class="metric-value"> 32.6% <span class="metric-trend trend-down">-3.2%</span> </div> </div> </div> <div class="chart-container"> <div class="chart-header"> <div class="chart-title">Recently Active Users</div> </div> <table class="user-table"> <thead> <tr> <th>User</th> <th>Last Activity</th> <th>Sessions</th> <th>Status</th> </tr> </thead> <tbody> <tr class="user-row"> <td>Sarah Johnson</td> <td>Today, 10:42 AM</td> <td>24</td> <td><span class="status status-active">Active</span></td> </tr> <tr class="user-row"> <td>Michael Chen</td> <td>Today, 09:57 AM</td> <td>18</td> <td><span class="status status-active">Active</span></td> </tr> <tr class="user-row"> <td>Emily Rodriguez</td> <td>Yesterday, 04:23 PM</td> <td>42</td> <td><span class="status status-inactive">Inactive</span></td> </tr> <tr class="user-row"> <td>Robert Parker</td> <td>Today, 08:15 AM</td> <td>7</td> <td><span class="status status-active">Active</span></td> </tr> <tr class="user-row"> <td>Alex Thompson</td> <td>Yesterday, 02:49 PM</td> <td>12</td> <td><span class="status status-inactive">Inactive</span></td> </tr> <tr class="user-row"> <td>Jessica Kim</td> <td>Today, 11:03 AM</td> <td>5</td> <td><span class="status status-pending">Pending</span></td> </tr> </tbody> </table> </div> </div> <!-- Marketing Panel --> <div class="panel" id="marketing"> <div class="metrics-grid"> <div class="metric-card"> <div class="metric-label">Active Campaigns</div> <div class="metric-value"> 7 <span class="metric-trend trend-up">+2</span> </div> </div> <div class="metric-card"> <div class="metric-label">Conversion Rate</div> <div class="metric-value"> 4.2% <span class="metric-trend trend-up">+0.8%</span> </div> </div> <div class="metric-card"> <div class="metric-label">Marketing ROI</div> <div class="metric-value"> 287% <span class="metric-trend trend-up">+42%</span> </div> </div> </div> <div class="campaign-list"> <div class="campaign-item"> <div class="campaign-icon icon-email"> <i class="fas fa-envelope"></i> </div> <div class="campaign-details"> <div class="campaign-name">Fall Product Launch</div> <div class="campaign-metrics"> <div class="campaign-metric">Opens: <span>42.5%</span></div> <div class="campaign-metric">Clicks: <span>8.3%</span></div> <div class="campaign-metric">Conversions: <span>3.7%</span></div> </div> </div> </div> <div class="campaign-item"> <div class="campaign-icon icon-social"> <i class="fas fa-hashtag"></i> </div> <div class="campaign-details"> <div class="campaign-name">Social Media Contest</div> <div class="campaign-metrics"> <div class="campaign-metric">Engagement: <span>12.8K</span></div> <div class="campaign-metric">Shares: <span>3.4K</span></div> <div class="campaign-metric">Leads: <span>843</span></div> </div> </div> </div> <div class="campaign-item"> <div class="campaign-icon icon-seo"> <i class="fas fa-search"></i> </div> <div class="campaign-details"> <div class="campaign-name">Q3 SEO Optimization</div> <div class="campaign-metrics"> <div class="campaign-metric">Organic Traffic: <span>+24.7%</span></div> <div class="campaign-metric">Keyword Ranking: <span>+8</span></div> <div class="campaign-metric">Backlinks: <span>+217</span></div> </div> </div> </div> <div class="campaign-item"> <div class="campaign-icon icon-ads"> <i class="fas fa-ad"></i> </div> <div class="campaign-details"> <div class="campaign-name">PPC Campaign - Enterprise</div> <div class="campaign-metrics"> <div class="campaign-metric">CTR: <span>4.8%</span></div> <div class="campaign-metric">CPC: <span>$1.86</span></div> <div class="campaign-metric">ROAS: <span>387%</span></div> </div> </div> </div> </div> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script> document.addEventListener('DOMContentLoaded', function() { // Tab switching const tabs = document.querySelectorAll('.tab'); const panels = document.querySelectorAll('.panel'); const tabUnderline = document.querySelector('.tab-underline'); const tabHighlight = document.querySelector('.tab-highlight'); function updateTabIndicator(tab) { const tabRect = tab.getBoundingClientRect(); const tabContainerRect = document.querySelector('.tab-container').getBoundingClientRect(); tabUnderline.style.width = `${tabRect.width}px`; tabUnderline.style.left = `${tabRect.left - tabContainerRect.left}px`; tabHighlight.style.width = `${tabRect.width + 20}px`; tabHighlight.style.left = `${tabRect.left - tabContainerRect.left - 10}px`; } tabs.forEach(tab => { tab.addEventListener('click', () => { // Remove active class from all tabs and panels tabs.forEach(t => t.classList.remove('active')); panels.forEach(p => p.classList.remove('active')); // Add active class to clicked tab and corresponding panel tab.classList.add('active'); document.getElementById(tab.dataset.panel).classList.add('active'); // Update the underline position updateTabIndicator(tab); }); }); // Initialize underline position for the default active tab const activeTab = document.querySelector('.tab.active'); if (activeTab) { updateTabIndicator(activeTab); } // Overview Chart if (document.getElementById('overviewChart')) { const overviewCtx = document.getElementById('overviewChart').getContext('2d'); const overviewChart = new Chart(overviewCtx, { type: 'line', data: { labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'], datasets: [ { label: 'Revenue', data: [18500, 22000, 19800, 24500, 23000, 25800, 27500, 31000, 29500], backgroundColor: 'rgba(26, 86, 219, 0.1)', borderColor: '#1a56db', borderWidth: 3, tension: 0.3, fill: true }, { label: 'Users', data: [11000, 12500, 14000, 15200, 16800, 15500, 17000, 18200, 18800], backgroundColor: 'rgba(16, 185, 129, 0.1)', borderColor: '#10b981', borderWidth: 3, tension: 0.3, fill: true }, { label: 'Conversion', data: [3.2, 3.5,
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Mobile eCommerce Tab Bar</title> <style> :root { --primary-gradient-start: #5e60ce; --primary-gradient-end: #64dfdf; --secondary-color: #80ffdb; --dark-color: #222; --light-color: #fff; --gray-light: #f5f5f5; --gray-medium: #e0e0e0; --text-color: #333; --shadow-color: rgba(94, 96, 206, 0.2); --padding: 1.5rem; --border-radius: 12px; --transition-speed: 0.3s; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; } body { background-color: var(--gray-light); color: var(--text-color); overflow-x: hidden; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; max-width: 700px; margin: 0 auto; } .container { width: 100%; max-width: 700px; height: 100%; display: flex; flex-direction: column; } .product-container { background: var(--light-color); border-radius: var(--border-radius); box-shadow: 0 10px 25px var(--shadow-color); overflow: hidden; margin: 1rem; position: relative; height: 88%; } .product-header { position: relative; height: 200px; background: linear-gradient(45deg, var(--primary-gradient-start), var(--primary-gradient-end)); display: flex; justify-content: center; align-items: center; padding: var(--padding); } .product-image { width: 180px; height: 180px; object-fit: contain; filter: drop-shadow(0 10px 15px rgba(0, 0, 0, 0.2)); transform: translateY(10px); transition: transform var(--transition-speed) ease; } .product-badges { position: absolute; top: 1rem; left: 1rem; display: flex; gap: 0.5rem; } .badge { background: var(--light-color); color: var(--primary-gradient-start); padding: 0.25rem 0.75rem; border-radius: 20px; font-size: 0.75rem; font-weight: 600; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } .tab-bar { display: flex; border-bottom: 1px solid var(--gray-medium); position: relative; z-index: 2; background: var(--light-color); } .tab { flex: 1; padding: 1rem 0.5rem; text-align: center; font-weight: 600; cursor: pointer; transition: all var(--transition-speed) ease; position: relative; overflow: hidden; color: var(--text-color); } .tab:after { content: ''; position: absolute; bottom: 0; left: 50%; width: 0; height: 3px; background: linear-gradient(90deg, var(--primary-gradient-start), var(--primary-gradient-end)); transition: all var(--transition-speed) ease; transform: translateX(-50%); border-radius: 3px 3px 0 0; } .tab.active { color: var(--primary-gradient-start); } .tab.active:after { width: 70%; } .tab-content { padding: var(--padding); overflow-y: auto; height: calc(100% - 200px - 49px); /* Subtract header and tab bar height */ } .product-title { font-size: 1.5rem; margin-bottom: 0.5rem; font-weight: 700; } .product-price { font-size: 1.75rem; font-weight: 700; color: var(--primary-gradient-start); margin-bottom: 1rem; display: flex; align-items: center; gap: 0.5rem; } .original-price { font-size: 1rem; color: #888; text-decoration: line-through; } .product-description { line-height: 1.6; margin-bottom: 1.5rem; color: #666; } .product-features { margin-bottom: 1.5rem; } .feature { display: flex; align-items: center; margin-bottom: 0.75rem; } .feature-icon { width: 24px; height: 24px; background: linear-gradient(45deg, var(--primary-gradient-start), var(--primary-gradient-end)); border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-right: 0.75rem; color: var(--light-color); flex-shrink: 0; } .cta-button { background: linear-gradient(45deg, var(--primary-gradient-start), var(--primary-gradient-end)); color: var(--light-color); border: none; padding: 1rem 2rem; border-radius: 30px; font-weight: 600; font-size: 1rem; cursor: pointer; display: block; width: 100%; box-shadow: 0 5px 15px var(--shadow-color); transition: all var(--transition-speed) ease; margin-top: 1rem; position: relative; overflow: hidden; } .cta-button:hover { transform: translateY(-2px); box-shadow: 0 8px 20px var(--shadow-color); } .cta-button:active { transform: translateY(0); } .pulse { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 0; height: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.4); opacity: 0; } @keyframes pulse { 0% { width: 0; height: 0; opacity: 0.5; } 100% { width: 500px; height: 500px; opacity: 0; } } /* Review tab styles */ .review { border-bottom: 1px solid var(--gray-medium); padding-bottom: 1rem; margin-bottom: 1rem; } .review:last-child { border-bottom: none; margin-bottom: 0; } .review-header { display: flex; align-items: center; margin-bottom: 0.5rem; } .reviewer-avatar { width: 40px; height: 40px; border-radius: 50%; margin-right: 0.75rem; object-fit: cover; background: linear-gradient(45deg, var(--primary-gradient-start), var(--primary-gradient-end)); color: white; display: flex; align-items: center; justify-content: center; font-weight: bold; } .reviewer-name { font-weight: 600; } .review-date { font-size: 0.75rem; color: #888; margin-left: auto; } .star-rating { display: flex; margin-bottom: 0.5rem; } .star { color: #FFD700; margin-right: 2px; } .review-text { line-height: 1.5; color: #555; } /* Related items tab styles */ .related-items { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; } .related-item { background: var(--gray-light); border-radius: var(--border-radius); overflow: hidden; transition: all var(--transition-speed) ease; position: relative; } .related-item:hover { transform: translateY(-5px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); } .related-item-img { width: 100%; height: 120px; object-fit: contain; background: white; padding: 0.5rem; } .related-item-details { padding: 0.75rem; } .related-item-title { font-weight: 600; font-size: 0.9rem; margin-bottom: 0.25rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .related-item-price { color: var(--primary-gradient-start); font-weight: 700; font-size: 1rem; } /* Micro interactions */ .tab:hover { background-color: rgba(94, 96, 206, 0.05); } .tab:active { transform: scale(0.98); } /* Responsive */ @media (max-width: 480px) { .product-header { height: 150px; } .product-image { width: 140px; height: 140px; } .tab-content { height: calc(100% - 150px - 49px); /* Adjust for smaller header */ } .related-items { grid-template-columns: 1fr; } } .hidden { display: none; } /* Accessibility focus styles */ .tab:focus { outline: 2px solid var(--primary-gradient-start); outline-offset: -2px; } /* Subtle animations */ @keyframes fadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } } .tab-content.active { animation: fadeIn 0.3s ease-in-out; } .color-options { display: flex; gap: 0.5rem; margin: 1rem 0; } .color-option { width: 24px; height: 24px; border-radius: 50%; cursor: pointer; transition: transform 0.2s ease; position: relative; } .color-option:after { content: ''; position: absolute; top: -3px; left: -3px; right: -3px; bottom: -3px; border-radius: 50%; border: 2px solid transparent; transition: border-color 0.2s ease; } .color-option.selected:after { border-color: var(--primary-gradient-start); } .color-option:hover { transform: scale(1.1); } .color-blue { background: #5e60ce; } .color-teal { background: #64dfdf; } .color-mint { background: #80ffdb; } .color-coral { background: #ff6b6b; } </style> </head> <body> <div class="container"> <div class="product-container"> <div class="product-header"> <div class="product-badges"> <span class="badge">NEW</span> <span class="badge">20% OFF</span> </div> <img src="https://images.unsplash.com/photo-1600003014755-ba31aa59c4b6?ixlib=rb-1.2.1&auto=format&fit=crop&w=1350&q=80" alt="Wireless Noise-Cancelling Headphones" class="product-image" id="product-image"> </div> <div class="tab-bar"> <div class="tab active" data-tab="details">Details</div> <div class="tab" data-tab="reviews">Reviews</div> <div class="tab" data-tab="related">Related</div> </div> <div class="tab-content active" id="details"> <h1 class="product-title">SoundScape Pro Wireless Headphones</h1> <div class="product-price"> <span>$219.99</span> <span class="original-price">$279.99</span> </div> <p class="product-description">Experience immersive audio with our premium noise-cancelling headphones. The SoundScape Pro delivers crystal-clear sound and blocks out ambient noise for an uninterrupted listening experience.</p> <div class="color-options"> <div class="color-option color-blue selected" data-color="blue"></div> <div class="color-option color-teal" data-color="teal"></div> <div class="color-option color-mint" data-color="mint"></div> <div class="color-option color-coral" data-color="coral"></div> </div> <div class="product-features"> <div class="feature"> <div class="feature-icon">✓</div> <span>40-hour battery life with quick charge</span> </div> <div class="feature"> <div class="feature-icon">✓</div> <span>Active noise cancellation technology</span> </div> <div class="feature"> <div class="feature-icon">✓</div> <span>Bluetooth 5.0 with multipoint connection</span> </div> <div class="feature"> <div class="feature-icon">✓</div> <span>Memory foam ear cushions for comfort</span> </div> </div> <button class="cta-button" id="add-to-cart"> Add to Cart <span class="pulse" id="pulse"></span> </button> </div> <div class="tab-content hidden" id="reviews"> <div class="review"> <div class="review-header"> <div class="reviewer-avatar">MK</div> <div class="reviewer-name">Michael K.</div> <div class="review-date">2 days ago</div> </div> <div class="star-rating"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> </div> <p class="review-text">Best headphones I've ever owned. The noise cancellation is exceptional - I can barely hear my noisy neighbors when I'm working from home. Battery life also exceeds expectations.</p> </div> <div class="review"> <div class="review-header"> <div class="reviewer-avatar">SL</div> <div class="reviewer-name">Sarah L.</div> <div class="review-date">1 week ago</div> </div> <div class="star-rating"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star" style="color: #ddd;">★</span> </div> <p class="review-text">The sound quality is amazing and they're really comfortable to wear for long periods. The only downside is that the app is a bit glitchy sometimes. Otherwise, perfectly satisfied!</p> </div> <div class="review"> <div class="review-header"> <div class="reviewer-avatar">JT</div> <div class="reviewer-name">James T.</div> <div class="review-date">2 weeks ago</div> </div> <div class="star-rating"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> </div> <p class="review-text">These headphones transformed my daily commute. The noise cancellation blocks out the subway noise completely. The touch controls are intuitive and the build quality feels premium.</p> </div> </div> <div class="tab-content hidden" id="related"> <div class="related-items"> <div class="related-item"> <img src="https://images.unsplash.com/photo-1572536147248-ac59a8abfa4b?ixlib=rb-1.2.1&auto=format&fit=crop&w=634&q=80" alt="SoundScape Mini Earbuds" class="related-item-img"> <div class="related-item-details"> <h3 class="related-item-title">SoundScape Mini Earbuds</h3> <div class="related-item-price">$129.99</div> </div> </div> <div class="related-item"> <img src="https://images.unsplash.com/photo-1545127398-14699f92334b?ixlib=rb-1.2.1&auto=format&fit=crop&w=675&q=80" alt="SoundScape Charging Stand" class="related-item-img"> <div class="related-item-details"> <h3 class="related-item-title">Headphone Charging Stand</h3> <div class="related-item-price">$49.99</div> </div> </div> <div class="related-item"> <img src="https://images.unsplash.com/photo-1585298723682-7115561c51b7?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="Premium Carry Case" class="related-item-img"> <div class="related-item-details"> <h3 class="related-item-title">Premium Carry Case</h3> <div class="related-item-price">$34.99</div> </div> </div> <div class="related-item"> <img src="https://images.unsplash.com/photo-1583394838336-acd977736f90?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="Replacement Ear Cushions" class="related-item-img"> <div class="related-item-details"> <h3 class="related-item-title">Replacement Ear Cushions</h3> <div class="related-item-price">$24.99</div> </div> </div> </div> </div> </div> </div> <script> // Tab switching functionality const tabs = document.querySelectorAll('.tab'); const tabContents = document.querySelectorAll('.tab-content'); tabs.forEach(tab => { tab.addEventListener('click', function() { // Remove active class from all tabs tabs.forEach(t => t.classList.remove('active')); // Add active class to clicked tab this.classList.add('active'); // Hide all tab contents tabContents.forEach(content => { content.classList.add('hidden'); content.classList.remove('active'); }); // Show the corresponding tab content const tabId = this.getAttribute('data-tab'); const activeContent = document.getElementById(tabId); activeContent.classList.remove('hidden'); activeContent.classList.add('active'); }); // Keyboard accessibility tab.addEventListener('keydown', function(e) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); this.click(); } }); // Make tabs focusable tab.setAttribute('tabindex', '0'); tab.setAttribute('role', 'tab'); }); // Button pulse effect const addToCartBtn = document.getElementById('add-to-cart'); const pulse = document.getElementById('pulse'); addToCartBtn.addEventListener('click', function(e) { // Create pulse effect const rect = this.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; pulse.style.left = `${x}px`; pulse.style.top = `${y}px`; pulse.style.animation = 'pulse 0.6s ease-out forwards'; // Update button text temporarily this.textContent = 'Added to Cart ✓'; setTimeout(() => { pulse.style.animation = ''; this.textContent = 'Add to Cart'; // Restore the hidden span this.appendChild(pulse); }, 1500); }); // Color selection functionality const colorOptions = document.querySelectorAll('.color-option'); const productImage = document.getElementById('product-image'); // Image URLs for different colors const colorImages = { blue: 'https://images.unsplash.com/photo-1600003014755-ba31aa59c4b6?ixlib=rb-1.2.1&auto=format&fit=crop&w=1350&q=80', teal: 'https://images.unsplash.com/photo-1546435770-a3e426bf472b?ixlib=rb-1.2.1&auto=format&fit=crop&w=1346&q=80', mint: 'https://images.unsplash.com/photo-1572113694932-2282ba13a4eb?ixlib=rb-1.2.1&auto=format&fit=crop&w=1350&q=80', coral: 'https://images.unsplash.com/photo-1578319439584-104c94d37305?ixlib=rb-1.2.1&auto=format&fit=crop&w=1350&q=80' }; colorOptions.forEach(option => { option.addEventListener('click', function() { // Remove selected class from all options colorOptions.forEach(o => o.classList.remove('selected')); // Add selected class to clicked option this.classList.add('selected'); // Change product image based on color const color = this.getAttribute('data-color'); productImage.src = colorImages[color]; // Add a slight float animation to the image productImage.style.transform = 'translateY(0)'; setTimeout(() => { productImage.style.transform = 'translateY(10px)'; }, 50); }); }); // Make the tab content div scrollable with touch const tabContentElements = document.querySelectorAll('.tab-content'); tabContentElements.forEach(content => { content.addEventListener('touchstart', function(e) { // Allow default touchstart behavior for scrolling }, { passive: true }); }); </script> </body> </html>
<html> <head> <style> :root { --primary: #5469d4; --primary-light: #7b8be8; --secondary: #12b878; --danger: #e25950; --warning: #f5a623; --dark: #1d2433; --gray: #677389; --light-gray: #e6e9ef; --white: #ffffff; --shadow: rgba(0, 0, 0, 0.05); --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: var(--font-family); background-color: #f8fafc; color: var(--dark); height: 100vh; display: flex; flex-direction: column; overflow-x: hidden; } .enterprise-admin { width: 100%; max-width: 700px; margin: 0 auto; background-color: var(--white); border-radius: 10px; box-shadow: 0 10px 25px var(--shadow); display: flex; flex-direction: column; height: 100%; overflow: hidden; } .admin-header { display: flex; justify-content: space-between; align-items: center; padding: 18px 24px; border-bottom: 1px solid var(--light-gray); } .header-title { display: flex; align-items: center; gap: 12px; } .logo { width: 32px; height: 32px; background-color: var(--primary); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: white; font-weight: 700; } .company-name { font-weight: 600; font-size: 18px; color: var(--dark); } .admin-badge { font-size: 12px; padding: 3px 8px; background-color: var(--light-gray); border-radius: 100px; margin-left: 6px; color: var(--gray); } .user-profile { display: flex; align-items: center; gap: 10px; cursor: pointer; padding: 6px 10px; border-radius: 8px; transition: background-color 0.2s; } .user-profile:hover { background-color: var(--light-gray); } .avatar { width: 32px; height: 32px; border-radius: 50%; background-color: var(--primary-light); display: flex; align-items: center; justify-content: center; color: var(--white); font-weight: 600; font-size: 14px; } .tab-bar { display: flex; padding: 0 24px; border-bottom: 1px solid var(--light-gray); position: relative; overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none; } .tab-bar::-webkit-scrollbar { display: none; } .tab { padding: 16px 0; margin-right: 24px; font-weight: 500; color: var(--gray); cursor: pointer; border-bottom: 2px solid transparent; transition: all 0.3s; white-space: nowrap; display: flex; align-items: center; gap: 8px; user-select: none; position: relative; } .tab:focus { outline: none; color: var(--primary); } .tab:hover { color: var(--primary); } .tab.active { color: var(--primary); border-bottom: 2px solid var(--primary); } .tab-indicator { position: absolute; bottom: -1px; height: 2px; background-color: var(--primary); transition: all 0.3s cubic-bezier(0.64, 0.04, 0.35, 1); } .tab-icon { width: 18px; height: 18px; opacity: 0.8; transition: all 0.3s; } .tab:hover .tab-icon, .tab.active .tab-icon { opacity: 1; } .tab-notification { position: absolute; top: 12px; right: -8px; background-color: var(--danger); color: white; border-radius: 10px; padding: 1px 6px; font-size: 10px; font-weight: 600; } .content-area { flex: 1; overflow-y: auto; padding: 24px; display: none; } .content-area.active { display: block; animation: fadeIn 0.4s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* Dashboard specific styles */ .metrics-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; margin-bottom: 24px; } .metric-card { background-color: var(--white); border-radius: 8px; padding: 20px; box-shadow: 0 4px 12px var(--shadow); transition: transform 0.3s, box-shadow 0.3s; cursor: pointer; } .metric-card:hover { transform: translateY(-4px); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1); } .metric-title { color: var(--gray); font-size: 14px; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; } .metric-value { font-size: 28px; font-weight: 700; margin-bottom: 8px; } .metric-trend { font-size: 13px; display: flex; align-items: center; gap: 4px; } .trend-up { color: var(--secondary); } .trend-down { color: var(--danger); } .chart-container { background-color: var(--white); border-radius: 8px; padding: 20px; box-shadow: 0 4px 12px var(--shadow); margin-bottom: 24px; } .chart-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } .chart-title { font-weight: 600; } .time-selector { display: flex; gap: 8px; } .time-option { padding: 6px 12px; border-radius: 6px; font-size: 13px; cursor: pointer; color: var(--gray); transition: all 0.2s; } .time-option.active { background-color: var(--light-gray); color: var(--dark); font-weight: 500; } .chart { height: 200px; width: 100%; position: relative; } .chart-bars { display: flex; height: 100%; justify-content: space-between; align-items: flex-end; gap: 6px; padding-top: 20px; } .chart-bar { flex: 1; background-color: var(--light-gray); border-radius: 4px 4px 0 0; transition: height 0.5s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.3s; cursor: pointer; position: relative; } .chart-bar:hover { background-color: var(--primary-light); } .chart-bar.highlight { background-color: var(--primary); } .chart-bar-tooltip { position: absolute; bottom: calc(100% + 10px); left: 50%; transform: translateX(-50%); background-color: var(--dark); color: var(--white); padding: 6px 10px; border-radius: 6px; font-size: 12px; font-weight: 500; pointer-events: none; opacity: 0; transition: opacity 0.2s; white-space: nowrap; z-index: 10; } .chart-bar:hover .chart-bar-tooltip { opacity: 1; } .chart-bar-tooltip::after { content: ''; position: absolute; top: 100%; left: 50%; transform: translateX(-50%); border-width: 5px; border-style: solid; border-color: var(--dark) transparent transparent transparent; } .chart-labels { display: flex; justify-content: space-between; margin-top: 10px; } .chart-label { font-size: 11px; color: var(--gray); text-align: center; flex: 1; } .activity-feed { background-color: var(--white); border-radius: 8px; padding: 20px; box-shadow: 0 4px 12px var(--shadow); } .feed-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } .feed-title { font-weight: 600; } .view-all { color: var(--primary); font-size: 13px; font-weight: 500; cursor: pointer; } .view-all:hover { text-decoration: underline; } .activity-list { display: flex; flex-direction: column; gap: 12px; } .activity-item { display: flex; gap: 12px; padding-bottom: 12px; border-bottom: 1px solid var(--light-gray); } .activity-item:last-child { border-bottom: none; padding-bottom: 0; } .activity-icon { width: 36px; height: 36px; border-radius: 8px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .activity-icon.blue { background-color: rgba(84, 105, 212, 0.1); color: var(--primary); } .activity-icon.green { background-color: rgba(18, 184, 120, 0.1); color: var(--secondary); } .activity-icon.orange { background-color: rgba(245, 166, 35, 0.1); color: var(--warning); } .activity-icon.red { background-color: rgba(226, 89, 80, 0.1); color: var(--danger); } .activity-content { flex: 1; } .activity-text { font-size: 14px; margin-bottom: 4px; } .activity-time { font-size: 12px; color: var(--gray); } .activity-user { font-weight: 600; } .activity-action { color: var(--primary); font-weight: 500; } /* Settings specific styles */ .settings-section { margin-bottom: 32px; } .settings-header { margin-bottom: 16px; } .settings-title { font-size: 16px; font-weight: 600; margin-bottom: 4px; } .settings-description { color: var(--gray); font-size: 14px; } .settings-card { background-color: var(--white); border-radius: 8px; padding: 20px; box-shadow: 0 4px 12px var(--shadow); } .form-group { margin-bottom: 20px; } .form-label { display: block; margin-bottom: 8px; font-weight: 500; font-size: 14px; } .form-input { width: 100%; padding: 10px 12px; border: 1px solid var(--light-gray); border-radius: 6px; font-family: var(--font-family); font-size: 14px; transition: border 0.2s; } .form-input:focus { outline: none; border-color: var(--primary); } .form-select { width: 100%; padding: 10px 12px; border: 1px solid var(--light-gray); border-radius: 6px; font-family: var(--font-family); font-size: 14px; background-color: var(--white); appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23677389' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; background-size: 16px; } .toggle-group { display: flex; justify-content: space-between; align-items: center; } .toggle-label { font-weight: 500; font-size: 14px; } .toggle-switch { position: relative; display: inline-block; width: 44px; height: 24px; } .toggle-switch input { opacity: 0; width: 0; height: 0; } .toggle-slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: var(--light-gray); transition: .4s; border-radius: 24px; } .toggle-slider:before { position: absolute; content: ""; height: 18px; width: 18px; left: 3px; bottom: 3px; background-color: white; transition: .4s; border-radius: 50%; } input:checked + .toggle-slider { background-color: var(--primary); } input:checked + .toggle-slider:before { transform: translateX(20px); } .settings-divider { height: 1px; background-color: var(--light-gray); margin: 20px 0; } .button-row { display: flex; gap: 12px; justify-content: flex-end; margin-top: 20px; } .btn { padding: 10px 16px; border-radius: 6px; font-weight: 500; font-size: 14px; cursor: pointer; transition: all 0.2s; border: none; font-family: var(--font-family); } .btn-primary { background-color: var(--primary); color: white; } .btn-primary:hover { background-color: var(--primary-light); } .btn-secondary { background-color: var(--white); color: var(--dark); border: 1px solid var(--light-gray); } .btn-secondary:hover { background-color: var(--light-gray); } /* Users specific styles */ .search-section { display: flex; margin-bottom: 24px; gap: 12px; } .search-input-wrapper { position: relative; flex: 1; } .search-input { width: 100%; padding: 10px 12px 10px 40px; border: 1px solid var(--light-gray); border-radius: 6px; font-family: var(--font-family); font-size: 14px; transition: border 0.2s; } .search-input:focus { outline: none; border-color: var(--primary); } .search-icon { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--gray); } .users-table { width: 100%; border-collapse: collapse; margin-bottom: 24px; } .users-table th { text-align: left; padding: 12px 16px; border-bottom: 1px solid var(--light-gray); color: var(--gray); font-weight: 500; font-size: 13px; } .users-table td { padding: 16px; border-bottom: 1px solid var(--light-gray); font-size: 14px; } .users-table tr:last-child td { border-bottom: none; } .user-cell { display: flex; align-items: center; gap: 12px; } .user-avatar { width: 36px; height: 36px; border-radius: 50%; background-color: var(--primary-light); display: flex; align-items: center; justify-content: center; color: var(--white); font-weight: 600; font-size: 14px; } .user-info { display: flex; flex-direction: column; } .user-name { font-weight: 500; margin-bottom: 2px; } .user-email { color: var(--gray); font-size: 13px; } .user-status { display: inline-flex; align-items: center; padding: 4px 8px; border-radius: 100px; font-size: 12px; font-weight: 500; } .status-active { background-color: rgba(18, 184, 120, 0.1); color: var(--secondary); } .status-inactive { background-color: rgba(226, 89, 80, 0.1); color: var(--danger); } .status-pending { background-color: rgba(245, 166, 35, 0.1); color: var(--warning); } .user-actions { display: flex; gap: 8px; } .action-btn { padding: 6px; border-radius: 6px; background-color: var(--white); color: var(--gray); border: 1px solid var(--light-gray); cursor: pointer; transition: all 0.2s; } .action-btn:hover { background-color: var(--light-gray); color: var(--dark); } .pagination { display: flex; justify-content: space-between; align-items: center; } .page-info { color: var(--gray); font-size: 13px; } .page-controls { display: flex; gap: 8px; } .page-btn { padding: 8px 12px; border-radius: 6px; background-color: var(--white); border: 1px solid var(--light-gray); cursor: pointer; transition: all 0.2s; font-size: 13px; } .page-btn:hover { background-color: var(--light-gray); } .page-btn.active { background-color: var(--primary); color: white; border-color: var(--primary); } .page-btn.disabled { opacity: 0.5; cursor: not-allowed; } /* Responsive adjustments */ @media (max-width: 580px) { .admin-header { padding: 16px; } .tab-bar { padding: 0 16px; } .content-area { padding: 16px; } .metrics-grid { grid-template-columns: 1fr; } .users-table thead { display: none; } .users-table, .users-table tbody, .users-table tr, .users-table td { display: block; width: 100%; } .users-table tr { margin-bottom: 16px; border: 1px solid var(--light-gray); border-radius: 8px; padding: 12px; } .users-table td { padding: 8px 0; border-bottom: none; position: relative; } .users-table td:before { content: attr(data-label); font-weight: 500; color: var(--gray); display: block; margin-bottom: 4px; font-size: 12px; } .page-controls { flex-wrap: wrap; } } /* Animation for tab switching */ @keyframes slideIn { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } /* Animation for hover effects */ @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } /* Animation for notification badge */ @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-3px); } } .tab-notification { animation: bounce 2s infinite; } /* Focus styles for accessibility */ .tab:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; } .form-input:focus-visible, .form-select:focus-visible, .btn:focus-visible, .action-btn:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; } </style> </head> <body> <div class="enterprise-admin"> <div class="admin-header"> <div class="header-title"> <div class="logo">S</div> <div class="company-name">StackMetrics<span class="admin-badge">Admin</span></div> </div> <div class="user-profile"> <div class="avatar">AL</div> </div> </div> <div class="tab-bar" role="tablist"> <div class="tab active" role="tab" tabindex="0" data-tab="dashboard" aria-selected="true"> <svg class="tab-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect x="3" y="3" width="7" height="9"></rect> <rect x="14" y="3" width="7" height="5"></rect> <rect x="14" y="12" width="7" height="9"></rect> <rect x="3" y="16" width="7" height="5"></rect> </svg> Dashboard </div> <div class="tab" role="tab" tabindex="0" data-tab="users" aria-selected="false"> <svg class="tab-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path> <circle cx="9" cy="7" r="4"></circle> <path d="M23 21v-2a4 4 0 0 0-3-3.87"></path> <path d="M16 3.13a4 4 0 0 1 0 7.75"></path> </svg> User Management <span class="tab-notification">3</span> </div> <div class="tab" role="tab" tabindex="0" data-tab="settings" aria-selected="false"> <svg class="tab-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="3"></circle> <path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path> </svg> Settings </div> <div class="tab" role="tab" tabindex="0" data-tab="security" aria-selected="false"> <svg class="tab-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect> <path d="M7 11V7a5 5 0 0 1 10 0v4"></path> </svg> Security </div> <div class="tab" role="tab" tabindex="0" data-tab="integrations" aria-selected="false"> <svg class="tab-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="16 3 21 3 21 8"></polyline> <line x1="4" y1="20" x2="21" y2="3"></line> <polyline points="21 16 21 21 16 21"></polyline> <line x1="15" y1="15" x2="21" y2="21"></line> <line x1="4" y1="4" x2="9" y2="9"></line> </svg> Integrations </div> <div class="tab-indicator"></div> </div> <div id="dashboard" class="content-area active" role="tabpanel"> <div class="metrics-grid"> <div class="metric-card"> <div class="metric-title"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M22 12h-4l-3 9L9 3l-3 9H2"></path> </svg> Active Users </div> <div class="metric-value">2,483</div> <div class="metric-trend trend-up"> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="18 15 12 9 6 15"></polyline> </svg> 14.2% since last week </div> </div> <div class="metric-card"> <div class="metric-title"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline> </svg> Session Duration </div> <div class="metric-value">18.3m</div> <div class="metric-trend trend-up"> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="18 15 12 9 6 15"></polyline> </svg> 3.7% since last week </div> </div> <div class="metric-card"> <div class="metric-title"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path> <path d="M13.73 21a2 2 0 0 1-3.46 0"></path> </svg> Error Rate </div> <div class="metric-value">0.8%</div> <div class="metric-trend trend-down"> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="6 9 12 15 18 9"></polyline> </svg> 2.1% since last week </div> </div> </div> <div class="chart-container"> <div class="chart-header"> <div class="chart-title">User Engagement Metrics</div> <div class="time-selector"> <div class="time-option">Day</div> <div class="time-option active">Week</div> <div class="time-option">Month</div> <div class="time-option">Quarter</div> </div> </div> <div class="chart"> <div class="chart-bars"> <div class="chart-bar" style="height: 40%"> <div class="chart-bar-tooltip">Mon: 1,243 users</div> </div> <div class="chart-bar" style="height: 65%"> <div class="chart-bar-tooltip">Tue: 2,157 users</div> </div> <div class="chart-bar" style="height: 80%"> <div class="chart-bar-tooltip">Wed: 2,896 users</div> </div> <div class="chart-bar" style="height: 70%"> <div class="chart-bar-tooltip">Thu: 2,483 users</div> </div> <div class="chart-bar highlight" style="height: 90%"> <div class="chart-bar-tooltip">Fri: 3,127 users</div> </div> <div class="chart-bar" style="height: 50%"> <div class="chart-bar-tooltip">Sat: 1,752 users</div> </div> <div class="chart-bar" style="height: 30%"> <div class="chart-bar-tooltip">Sun: 943 users</div> </div> </div> <div class="chart-labels"> <div class="chart-label">Mon</div> <div class="chart-label">Tue</div> <div class="chart-label">Wed</div> <div class="chart-label">Thu</div> <div class="chart-label">Fri</div> <div class="chart-label">Sat</div> <div class="chart-label">Sun</div> </div> </div> </div> <div class="activity-
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> :root { --primary-bg: #f8f8fa; --accent-pink: #ff96ad; --accent-blue: #96c7ff; --accent-purple: #c496ff; --accent-yellow: #ffe996; --text-color: #505565; --light-text: #9ca1b2; --shadow: 0 8px 30px rgba(0, 0, 0, 0.06); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; } body { background-color: var(--primary-bg); display: flex; justify-content: center; align-items: center; min-height: 100vh; overflow: hidden; color: var(--text-color); } .container { width: 100%; max-width: 650px; height: 650px; background: white; border-radius: 24px; box-shadow: var(--shadow); position: relative; overflow: hidden; } .profile-header { padding: 24px; display: flex; align-items: center; justify-content: space-between; } .profile-info { display: flex; align-items: center; gap: 16px; } .avatar { width: 60px; height: 60px; border-radius: 50%; object-fit: cover; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); position: relative; } .avatar::after { content: ""; position: absolute; bottom: 2px; right: 2px; width: 15px; height: 15px; background: #4cda64; border: 3px solid white; border-radius: 50%; } .user-details h2 { font-size: 18px; margin-bottom: 4px; font-weight: 700; } .user-details p { color: var(--light-text); font-size: 14px; } .action-button { background: #f5f5f7; border: none; padding: 10px 24px; border-radius: 24px; color: var(--text-color); font-weight: 600; font-size: 14px; cursor: pointer; transition: all 0.3s ease; } .action-button:hover { background: #eeeef0; transform: translateY(-2px); } .summary-stats { display: flex; align-items: center; justify-content: space-around; padding: 24px 0; border-bottom: 1px solid #f0f0f5; } .stat-item { text-align: center; } .stat-number { font-size: 24px; font-weight: 700; margin-bottom: 4px; } .stat-label { color: var(--light-text); font-size: 13px; } .tab-bar { display: flex; justify-content: space-around; border-bottom: 1px solid #f0f0f5; position: relative; } .tab { padding: 16px 0; flex: 1; text-align: center; cursor: pointer; position: relative; transition: all 0.3s ease; color: var(--light-text); font-weight: 600; font-size: 14px; display: flex; align-items: center; justify-content: center; gap: 8px; } .tab svg { width: 20px; height: 20px; transition: all 0.3s ease; } .tab.active { color: var(--text-color); } .tab-indicator { position: absolute; bottom: -1px; height: 3px; width: calc(100% / 3); border-radius: 2px; background: var(--accent-blue); transition: transform 0.5s cubic-bezier(0.68, -0.6, 0.32, 1.6); } .content-area { height: calc(100% - 265px); overflow-y: auto; padding: 24px; scroll-behavior: smooth; } .content-section { display: none; opacity: 0; transform: translateY(20px); transition: all 0.5s cubic-bezier(0.68, -0.6, 0.32, 1.6); } .content-section.active { display: block; opacity: 1; transform: translateY(0); } /* Styling for Posts section */ .post { background: white; border-radius: 16px; margin-bottom: 24px; padding: 16px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.03); transition: transform 0.3s ease; } .post:hover { transform: translateY(-3px); } .post-header { display: flex; align-items: center; margin-bottom: 12px; } .post-avatar { width: 40px; height: 40px; border-radius: 50%; margin-right: 12px; object-fit: cover; } .post-meta h4 { font-size: 15px; margin-bottom: 2px; } .post-time { font-size: 12px; color: var(--light-text); } .post-content { font-size: 14px; line-height: 1.5; margin-bottom: 16px; } .post-image { width: 100%; height: 200px; object-fit: cover; border-radius: 12px; margin-bottom: 16px; } .post-actions { display: flex; gap: 16px; } .action { display: flex; align-items: center; gap: 6px; color: var(--light-text); font-size: 13px; cursor: pointer; transition: all 0.2s ease; } .action:hover { color: var(--text-color); } .action svg { width: 18px; height: 18px; } /* Styling for Photos section */ .photos-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; } .photo-item { border-radius: 12px; overflow: hidden; aspect-ratio: 1/1; position: relative; cursor: pointer; } .photo-item img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; } .photo-item:hover img { transform: scale(1.1); } .photo-item::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(to top, rgba(0,0,0,0.3), transparent); opacity: 0; transition: opacity 0.3s ease; z-index: 1; } .photo-item:hover::before { opacity: 1; } .photo-meta { position: absolute; bottom: 10px; left: 10px; color: white; font-size: 12px; z-index: 2; opacity: 0; transition: opacity 0.3s ease; display: flex; align-items: center; gap: 8px; } .photo-item:hover .photo-meta { opacity: 1; } /* Styling for Friends section */ .friends-list { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; } .friend-card { display: flex; align-items: center; gap: 12px; padding: 12px; border-radius: 16px; background: #f9f9fb; transition: all 0.3s ease; cursor: pointer; } .friend-card:hover { background: white; box-shadow: 0 8px 20px rgba(0, 0, 0, 0.05); transform: translateY(-3px); } .friend-avatar { width: 50px; height: 50px; border-radius: 50%; object-fit: cover; } .friend-info { flex: 1; } .friend-name { font-size: 15px; font-weight: 600; margin-bottom: 2px; } .friend-status { font-size: 12px; color: var(--light-text); } .friend-action { width: 32px; height: 32px; border-radius: 50%; border: none; background: white; display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05); transition: all 0.2s ease; } .friend-action:hover { background: var(--accent-purple); color: white; transform: scale(1.1); } /* Custom scrollbar */ .content-area::-webkit-scrollbar { width: 6px; } .content-area::-webkit-scrollbar-track { background: transparent; } .content-area::-webkit-scrollbar-thumb { background-color: #e0e0e5; border-radius: 20px; } /* Animation for floating bubble particles */ .floating-bubbles { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: -1; } .bubble { position: absolute; background: rgba(255, 255, 255, 0.8); border-radius: 50%; animation: float linear infinite; opacity: 0; } @keyframes float { 0% { transform: translateY(0) rotate(0deg); opacity: 0; } 10% { opacity: 0.8; } 90% { opacity: 0.4; } 100% { transform: translateY(-100vh) rotate(360deg); opacity: 0; } } /* Responsive adjustments */ @media screen and (max-width: 600px) { .container { width: 95%; height: 640px; border-radius: 20px; } .profile-header { padding: 16px; } .avatar { width: 50px; height: 50px; } .summary-stats { padding: 16px 0; } .stat-number { font-size: 20px; } .content-area { padding: 16px; height: calc(100% - 240px); } .friends-list { grid-template-columns: 1fr; } .photos-grid { grid-template-columns: repeat(2, 1fr); } } /* Tab hover effect */ .tab:hover { color: var(--text-color); } .tab:hover svg { transform: translateY(-3px); } /* Like button animation */ .heart-animation { display: inline-block; position: relative; } .heart-animation .heart { transition: transform 0.3s cubic-bezier(0.68, -0.6, 0.32, 1.6); } .heart-animation.liked .heart { fill: var(--accent-pink); transform: scale(1.3); animation: heartBeat 0.4s cubic-bezier(0.68, -0.6, 0.32, 1.6); } @keyframes heartBeat { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.3); } } .empty-state { text-align: center; padding: 30px; color: var(--light-text); } .empty-state svg { width: 80px; height: 80px; margin-bottom: 16px; color: #e0e0e5; } .empty-state h3 { margin-bottom: 8px; color: var(--text-color); } .empty-state p { font-size: 14px; line-height: 1.5; } </style> </head> <body> <div class="container"> <div class="profile-header"> <div class="profile-info"> <img src="https://source.unsplash.com/random/200x200/?portrait" alt="User avatar" class="avatar"> <div class="user-details"> <h2>Clara Lindsey</h2> <p>Travel photographer & writer</p> </div> </div> <button class="action-button">Follow</button> </div> <div class="summary-stats"> <div class="stat-item"> <div class="stat-number">248</div> <div class="stat-label">Posts</div> </div> <div class="stat-item"> <div class="stat-number">12.4k</div> <div class="stat-label">Followers</div> </div> <div class="stat-item"> <div class="stat-number">843</div> <div class="stat-label">Following</div> </div> </div> <div class="tab-bar"> <div class="tab active" data-tab="posts"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" /> </svg> Posts </div> <div class="tab" data-tab="photos"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" /> </svg> Photos </div> <div class="tab" data-tab="friends"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z" /> </svg> Friends </div> <div class="tab-indicator"></div> </div> <div class="content-area"> <div class="content-section active" id="posts-content"> <div class="post"> <div class="post-header"> <img src="https://source.unsplash.com/random/100x100/?portrait" alt="User avatar" class="post-avatar"> <div class="post-meta"> <h4>Clara Lindsey</h4> <span class="post-time">3 hours ago</span> </div> </div> <div class="post-content"> Just discovered this incredible canyon in Utah! The light filtering through the rock formations created the most surreal atmosphere. 💫 #AdventureSeeker #HiddenGems </div> <img src="https://source.unsplash.com/random/600x400/?canyon" alt="Post image" class="post-image"> <div class="post-actions"> <div class="action heart-animation" id="like-button"> <svg class="heart" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" /> </svg> <span class="like-count">243</span> </div> <div class="action"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" /> </svg> <span>42</span> </div> <div class="action"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z" /> </svg> <span>Share</span> </div> </div> </div> <div class="post"> <div class="post-header"> <img src="https://source.unsplash.com/random/100x100/?portrait" alt="User avatar" class="post-avatar"> <div class="post-meta"> <h4>Clara Lindsey</h4> <span class="post-time">Yesterday</span> </div> </div> <div class="post-content"> Morning rituals in Tokyo: matcha tea, people watching, and the gentle hum of the city coming to life. It's the small moments that make travel meaningful. 🍵 #SlowTravel #TokyoDiary </div> <img src="https://source.unsplash.com/random/600x400/?tokyo" alt="Post image" class="post-image"> <div class="post-actions"> <div class="action heart-animation"> <svg class="heart" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" /> </svg> <span class="like-count">328</span> </div> <div class="action"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" /> </svg> <span>56</span> </div> <div class="action"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z" /> </svg> <span>Share</span> </div> </div> </div> </div> <div class="content-section" id="photos-content"> <div class="photos-grid"> <div class="photo-item"> <img src="https://source.unsplash.com/random/300x300/?landscape" alt="Photo"> <div class="photo-meta"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M8 16a2 2 0 0 0 2-2H6a2 2 0 0 0 2 2zM8 1.918l-.797.161A4.002 4.002 0 0 0 4 6c0 .628-.134 2.197-.459 3.742-.16.767-.376 1.566-.663 2.258h10.244c-.287-.692-.502-1.49-.663-2.258C12.134 8.197 12 6.628 12 6a4.002 4.002 0 0 0-3.203-3.92L8 1.917zM14.22 12c.223.447.481.801.78 1H1c.299-.199.557-.553.78-1C2.68 10.2 3 6.88 3 6c0-2.42 1.72-4.44 4.005-4.901a1 1 0 1 1 1.99 0A5.002 5.002 0 0 1 13 6c0 .88.32 4.2 1.22 6z"/> </svg> Santorini </div> </div> <div class="photo-item"> <img src="https://source.unsplash.com/random/300x300/?travel" alt="Photo"> <div class="photo-meta"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M8 16a2 2 0 0 0 2-2H6a2 2 0 0 0 2 2zM8 1.918l-.797.161A4.002 4.002 0 0 0 4 6c0 .628-.134 2.197-.459 3.742-.16.767-.376 1.566-.663 2.258h10.244c-.287-.692-.502-1.49-.663-2.258C12.134 8.197 12 6.628 12 6a4.002 4.002 0 0 0-3.203-3.92L8 1.917zM14.22 12c.223.447.481.801.78 1H1c.299-.199.557-.553.78-1C2.68 10.2 3 6.88 3 6c0-2.42 1.72-4.44 4.005-4.901a1 1 0 1 1 1.99 0A5.002 5.002 0 0 1 13 6c0 .88.32 4.2 1.22 6z"/> </svg> Paris </div> </div> <div class="photo-item"> <img src="https://source.unsplash.com/random/300x300/?city" alt="Photo"> <div class="photo-meta"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M8 16a2 2 0 0 0 2-2H6a2 2 0 0 0 2 2zM8 1.918l-.797.161A4.002 4.002 0 0 0 4 6c0 .628-.134 2.197-.459 3.742-.16.767-.376 1.566-.663 2.258h10.244c-.287-.692-.502-1.49-.663-2.258C12.134 8.197 12 6.628 12 6a4.002 4.002 0 0 0-3.203-3.92L8 1.917zM14.22 12c.223.447.481.801.78 1H1c.299-.199.557-.553.78-1C2.68 10.2 3 6.88 3 6c0-2.42 1.72-4.44 4.005-4.901a1 1 0 1 1 1.99 0A5.002 5.002 0 0 1 13 6c0 .88.32 4.2 1.22 6z"/> </svg> Tokyo </div> </div> <div class="photo-item"> <img src="https://source.unsplash.com/random/300x300/?nature" alt="Photo"> <div class="photo-meta"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M8 16a2 2 0 0 0 2-2H6a2 2 0 0 0 2 2zM8 1.918l-.797.161A4.002 4.002 0 0 0 4 6c0 .628-.134 2.197-.459 3.742-.16.767-.376 1.566-.663 2.258h10.244c-.287-.692-.502-1.49-.663-2.258C12.134 8.197 12 6.628 12 6a4.002 4.002 0 0 0-3.203-3.92L8 1.917zM14.22 12c.223.447.481.801.78 1H1c.299-.199.557-.553.78-1C2.68 10.2 3 6.88 3 6c0-2.42 1.72-4.44 4.005-4.901a1 1 0 1 1 1.99 0A5.002 5.002 0 0 1 13 6c0 .88.32 4.2 1.22 6z"/> </svg> Bali </div> </div> <div class="photo-item"> <img src="https://source.unsplash.com/random/300x300/?architecture" alt="Photo"> <div class="photo-meta"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M8 16a2 2 0 0 0 2-2H6a2 2 0 0 0 2 2zM8 1.918l-.797.161A4.002 4.002 0 0 0 4 6c0 .628-.134 2.197-.459 3.742-.16.767-.376 1.566-.663 2.258h10.244c-.287-.692-.502-1.49-.663-2.258C12.134 8.197 12 6.628 12 6a4.002 4.002 0 0 0-3.203-3.92L8 1.917zM14.22 12c.223.447.481.801.78 1H1c.299-.199.557-.553.78-1C2.68 10.2 3 6.88 3 6c0-2.42 1.72-4.44 4.005-4.901a1 1 0 1 1 1.99 0A5.002 5.002 0 0 1 13 6c0 .88.32 4.2 1.22 6z"/> </svg> Barcelona </div> </div> <div class="photo-item"> <img src="https://source.unsplash.com/random/300x300/?food" alt="Photo"> <div class="photo-meta"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M8 16a2 2 0 0 0 2-2H6a2 2 0 0 0 2 2zM8 1.918l-.797.161A4.002 4.002 0 0 0 4 6c0 .628-.134 2.197-.459 3.742-.16.767-.376 1.566-.663 2.258h10.244c-.287-.692-.502-1.49-.663-2.258C12.134 8.197 12 6.628 12 6a4.002 4.002 0 0 0-3.203-3.92L8 1.917zM14.22 12c.223.447.481.801.78 1H1c.299-.199.557-.553.78-1C2.68 10.2 3 6.88 3 6c0-2.42 1.72-4.44 4.005-4.901a1 1 0 1 1 1.99 0A5.002 5.002 0 0 1 13 6c0 .88.32 4.2 1.22 6z"/> </svg> Morocco </div> </div> <div class="photo-item"> <img src="https://source.unsplash.com/random/300x300/?sunset" alt="Photo"> <div class="photo-meta"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M8 16a2 2 0 0 0 2-2H6a2 2 0 0 0 2 2zM8 1.918l-.797.161A4.002 4.002 0 0 0 4 6c0 .628-.134 2.197-.459 3.742-.16.767-.376 1.566-.663 2.258h10.244c-.287-.692-.502-1.49-.663-2.258C12.134 8.197 12 6.628 12 6a4.002 4.002 0 0 0-3.203-3.92L8 1.917zM14.22 12c.223.447.481.801.78 1H1c.299-.199.557-.553.78-1C2.68 10.2 3 6.88 3 6c0-2.42 1.72-4.44 4.005-4.901a1 1 0 1 1 1.99 0A5.002 5.002 0 0 1 13 6c0 .88.32 4.2 1.22 6z"/> </svg> Maldives </div> </div> <div class="photo-item"> <img src="https://source.unsplash.com/random/300x300/?beach" alt="Photo"> <div class="photo-meta"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M8 16a2 2 0 0 0 2-2H6a2 2 0 0 0 2 2zM8 1.918l-.797.161A4.002 4.002 0 0 0 4 6c0 .628-.134 2.197-.459 3.742-.16.767-.376 1.566-.663 2.258h10.244c-.287-.692-.502-1.49-.663-2.258C12.134 8.197 12 6.628 12 6a4.002 4.002 0 0 0-3.203-3.92L8 1.917zM14.22 12c.223.447.481.801.78 1H1c.299-.199.557-.553.78-1C2.68 10.2 3 6.88 3 6c0-2.42 1.72-4.44 4.005-4.901a1 1 0 1 1 1.99 0A5.002 5.002 0 0 1 13 6c0 .88.32 4.2 1.22 6z"/> </svg> Hawaii </div> </div> <div class="photo-item"> <img src="https://source.unsplash.com/random/300x300/?mountains" alt="Photo"> <div class="photo-meta"> <svg xmlns="http
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Learniverse - Education App</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Poppins', sans-serif; } :root { --pastel-blue: #b8d8f0; --pastel-green: #b8f0d8; --pastel-yellow: #f0e8b8; --pastel-purple: #d8b8f0; --pastel-red: #f0b8b8; --dark-blue: #2a4d69; --light-gray: #f7f7f7; --white: #ffffff; --shadow: 0 4px 20px rgba(0, 0, 0, 0.1); --tab-transition: 0.5s cubic-bezier(0.25, 1, 0.5, 1); } body { display: flex; justify-content: center; align-items: center; height: 100vh; background-color: var(--light-gray); overflow: hidden; } .app-container { width: 100%; max-width: 700px; height: 700px; background-color: var(--white); border-radius: 24px; box-shadow: var(--shadow); position: relative; overflow: hidden; } .app-header { padding: 25px; background-color: var(--white); display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid rgba(0, 0, 0, 0.05); position: relative; z-index: 2; } .logo { display: flex; align-items: center; gap: 12px; } .logo-icon { width: 32px; height: 32px; background-color: var(--pastel-blue); border-radius: 8px; display: flex; justify-content: center; align-items: center; } .logo-icon svg { width: 20px; height: 20px; fill: var(--dark-blue); } .logo-text { font-weight: 700; font-size: 18px; color: var(--dark-blue); } .user-profile { width: 38px; height: 38px; border-radius: 50%; background-color: var(--pastel-purple); display: flex; justify-content: center; align-items: center; cursor: pointer; transition: transform 0.2s ease; } .user-profile:hover { transform: scale(1.05); } .user-profile svg { width: 20px; height: 20px; fill: var(--dark-blue); } .tab-container { display: flex; flex-direction: column; height: calc(100% - 82px - 80px); position: relative; overflow: hidden; } .tabs { display: flex; justify-content: space-around; padding: 15px 0; background-color: var(--white); position: relative; z-index: 2; } .tab { display: flex; flex-direction: column; align-items: center; cursor: pointer; position: relative; transition: transform 0.2s ease; width: 90px; } .tab:hover { transform: translateY(-2px); } .tab-icon { width: 50px; height: 50px; border-radius: 15px; display: flex; justify-content: center; align-items: center; margin-bottom: 8px; transition: all 0.3s ease; } .tab:nth-child(1) .tab-icon { background-color: var(--pastel-blue); } .tab:nth-child(2) .tab-icon { background-color: var(--pastel-green); } .tab:nth-child(3) .tab-icon { background-color: var(--pastel-yellow); } .tab svg { width: 24px; height: 24px; fill: var(--dark-blue); opacity: 0.7; transition: all 0.3s ease; } .tab-label { font-size: 14px; font-weight: 500; color: rgba(42, 77, 105, 0.7); transition: all 0.3s ease; } .tab.active .tab-icon { transform: scale(1.1); box-shadow: 0 6px 15px rgba(0, 0, 0, 0.08); } .tab.active svg { opacity: 1; } .tab.active .tab-label { color: var(--dark-blue); font-weight: 600; } .tab-content { flex: 1; position: relative; overflow: hidden; } .content-panel { position: absolute; top: 0; left: 0; width: 100%; height: 100%; padding: 25px; transition: transform var(--tab-transition), opacity var(--tab-transition); opacity: 0; transform: translateX(50px); pointer-events: none; overflow-y: auto; } .content-panel.active { opacity: 1; transform: translateX(0); pointer-events: all; } .panel-title { font-size: 24px; font-weight: 700; color: var(--dark-blue); margin-bottom: 20px; } .panel-subtitle { font-size: 16px; color: rgba(42, 77, 105, 0.7); margin-bottom: 30px; } /* Lessons Panel */ .lesson-list { display: flex; flex-direction: column; gap: 15px; } .lesson-card { background-color: var(--white); border-radius: 16px; padding: 20px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); display: flex; align-items: center; cursor: pointer; transition: transform 0.2s ease, box-shadow 0.2s ease; position: relative; overflow: hidden; } .lesson-card::before { content: ''; position: absolute; top: 0; left: 0; width: 6px; height: 100%; background-color: var(--pastel-blue); transition: all 0.3s ease; } .lesson-card:hover { transform: translateY(-3px); box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1); } .lesson-card:hover::before { width: 10px; } .lesson-number { font-size: 22px; font-weight: 700; color: var(--pastel-blue); margin-right: 15px; min-width: 30px; } .lesson-info { flex: 1; } .lesson-title { font-size: 16px; font-weight: 600; color: var(--dark-blue); margin-bottom: 5px; } .lesson-meta { display: flex; align-items: center; gap: 10px; font-size: 12px; color: rgba(42, 77, 105, 0.6); } .lesson-meta span { display: flex; align-items: center; gap: 4px; } .lesson-meta svg { width: 12px; height: 12px; fill: rgba(42, 77, 105, 0.6); } .lesson-status { font-size: 12px; padding: 4px 10px; border-radius: 20px; background-color: rgba(184, 216, 240, 0.2); color: var(--pastel-blue); font-weight: 500; } .completed .lesson-status { background-color: rgba(184, 240, 216, 0.2); color: var(--pastel-green); } /* Quizzes Panel */ .quiz-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; } .quiz-card { background-color: var(--white); border-radius: 16px; padding: 20px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); cursor: pointer; transition: transform 0.2s ease, box-shadow 0.2s ease; position: relative; overflow: hidden; display: flex; flex-direction: column; } .quiz-card::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 5px; background-color: var(--pastel-green); transition: all 0.3s ease; } .quiz-card:hover { transform: translateY(-3px); box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1); } .quiz-card:hover::before { height: 8px; } .quiz-title { font-size: 16px; font-weight: 600; color: var(--dark-blue); margin-bottom: 10px; } .quiz-meta { display: flex; justify-content: space-between; align-items: center; font-size: 12px; color: rgba(42, 77, 105, 0.6); margin-top: auto; } .quiz-meta-item { display: flex; align-items: center; gap: 4px; } .quiz-meta svg { width: 12px; height: 12px; fill: rgba(42, 77, 105, 0.6); } .quiz-difficulty { font-size: 11px; padding: 3px 8px; border-radius: 20px; font-weight: 500; } .quiz-difficulty.easy { background-color: rgba(184, 240, 216, 0.2); color: var(--pastel-green); } .quiz-difficulty.medium { background-color: rgba(240, 232, 184, 0.2); color: var(--pastel-yellow); } .quiz-difficulty.hard { background-color: rgba(240, 184, 184, 0.2); color: var(--pastel-red); } /* Resources Panel */ .resource-list { display: flex; flex-direction: column; gap: 15px; } .resource-card { background-color: var(--white); border-radius: 16px; padding: 20px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); cursor: pointer; transition: transform 0.2s ease, box-shadow 0.2s ease; display: flex; align-items: center; gap: 20px; } .resource-card:hover { transform: translateY(-3px); box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1); } .resource-icon { width: 50px; height: 50px; border-radius: 12px; background-color: var(--pastel-yellow); display: flex; justify-content: center; align-items: center; flex-shrink: 0; } .resource-icon svg { width: 24px; height: 24px; fill: var(--dark-blue); } .resource-info { flex: 1; } .resource-title { font-size: 16px; font-weight: 600; color: var(--dark-blue); margin-bottom: 5px; } .resource-desc { font-size: 13px; color: rgba(42, 77, 105, 0.6); line-height: 1.4; } .resource-type { padding: 4px 10px; border-radius: 20px; font-size: 12px; font-weight: 500; background-color: rgba(240, 232, 184, 0.2); color: var(--dark-blue); margin-left: auto; flex-shrink: 0; } .resource-type.pdf { background-color: rgba(240, 184, 184, 0.2); color: var(--pastel-red); } .resource-type.video { background-color: rgba(184, 240, 216, 0.2); color: var(--pastel-green); } .resource-type.article { background-color: rgba(184, 216, 240, 0.2); color: var(--pastel-blue); } .app-footer { height: 80px; position: relative; z-index: 2; padding: 0 25px; display: flex; justify-content: space-between; align-items: center; border-top: 1px solid rgba(0, 0, 0, 0.05); background-color: var(--white); } .progress-container { display: flex; flex-direction: column; gap: 6px; flex: 1; max-width: 320px; } .progress-text { display: flex; justify-content: space-between; font-size: 13px; } .progress-label { color: var(--dark-blue); font-weight: 500; } .progress-percentage { color: var(--pastel-blue); font-weight: 600; } .progress-bar { height: 8px; background-color: rgba(0, 0, 0, 0.05); border-radius: 4px; overflow: hidden; } .progress-fill { height: 100%; width: 65%; background-color: var(--pastel-blue); border-radius: 4px; position: relative; transition: width 0.5s ease; } .progress-fill::after { content: ''; position: absolute; top: 0; right: 0; height: 100%; width: 20px; background: linear-gradient( 90deg, rgba(184, 216, 240, 0.5) 0%, rgba(184, 216, 240, 1) 100% ); animation: pulse 1.5s infinite; } @keyframes pulse { 0% { opacity: 0.5; } 50% { opacity: 1; } 100% { opacity: 0.5; } } .action-button { background-color: var(--pastel-blue); color: var(--dark-blue); border: none; padding: 12px 25px; border-radius: 25px; font-weight: 600; font-size: 14px; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 4px 15px rgba(184, 216, 240, 0.4); display: flex; align-items: center; gap: 8px; } .action-button:hover { background-color: var(--dark-blue); color: var(--white); transform: translateY(-2px); box-shadow: 0 8px 20px rgba(184, 216, 240, 0.6); } .action-button svg { width: 16px; height: 16px; fill: currentColor; } /* Animation Effects */ @keyframes float { 0% { transform: translateY(0px); } 50% { transform: translateY(-10px); } 100% { transform: translateY(0px); } } /* Responsive Styles */ @media (max-width: 600px) { .app-container { border-radius: 12px; height: 650px; } .panel-title { font-size: 20px; } .tab-icon { width: 40px; height: 40px; } .tab-label { font-size: 12px; } .quiz-grid { grid-template-columns: 1fr; } .content-panel { padding: 20px; } } /* Scrollbar styling */ .content-panel::-webkit-scrollbar { width: 6px; } .content-panel::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0.03); border-radius: 3px; } .content-panel::-webkit-scrollbar-thumb { background-color: rgba(42, 77, 105, 0.2); border-radius: 3px; } .content-panel::-webkit-scrollbar-thumb:hover { background-color: rgba(42, 77, 105, 0.3); } /* Notification dot */ .notification-dot { position: absolute; top: 3px; right: 3px; width: 8px; height: 8px; background-color: var(--pastel-red); border-radius: 50%; animation: pulse 1.5s infinite; } /* Sparkle effect */ .sparkle { position: absolute; background-color: var(--pastel-blue); border-radius: 50%; opacity: 0; pointer-events: none; } </style> </head> <body> <div class="app-container"> <div class="app-header"> <div class="logo"> <div class="logo-icon"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"></path> </svg> </div> <span class="logo-text">Learniverse</span> </div> <div class="user-profile"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"></path> </svg> </div> </div> <div class="tab-container"> <div class="tabs"> <div class="tab active" data-tab="lessons"> <div class="tab-icon"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"></path> </svg> </div> <span class="tab-label">Lessons</span> </div> <div class="tab" data-tab="quizzes"> <div class="tab-icon"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"></path> </svg> </div> <span class="tab-label">Quizzes</span> <div class="notification-dot"></div> </div> <div class="tab" data-tab="resources"> <div class="tab-icon"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9H9V9h10v2zm-4 4H9v-2h6v2zm4-8H9V5h10v2z"></path> </svg> </div> <span class="tab-label">Resources</span> </div> </div> <div class="tab-content"> <div class="content-panel active" id="lessons-panel"> <h2 class="panel-title">Your Learning Path</h2> <p class="panel-subtitle">Continue your journey with these structured lessons</p> <div class="lesson-list"> <div class="lesson-card completed"> <div class="lesson-number">01</div> <div class="lesson-info"> <div class="lesson-title">Foundations of Data Visualization</div> <div class="lesson-meta"> <span> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67V7z"></path> </svg> 25 mins </span> <span> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-2 14l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"></path> </svg> Completed </span> </div> </div> <div class="lesson-status">100%</div> </div> <div class="lesson-card"> <div class="lesson-number">02</div> <div class="lesson-info"> <div class="lesson-title">Interactive Data Storytelling</div> <div class="lesson-meta"> <span> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67V7z"></path> </svg> 40 mins </span> <span> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z"></path> </svg> In Progress </span> </div> </div> <div class="lesson-status">65%</div> </div> <div class="lesson-card"> <div class="lesson-number">03</div> <div class="lesson-info"> <div class="lesson-title">Advanced Chart Types & Techniques</div> <div class="lesson-meta"> <span> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67V7z"></path> </svg> 35 mins </span> <span> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM9 6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9V6zm9 14H6V10h12v10zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"></path> </svg> Locked </span> </div> </div> <div class="lesson-status">0%</div> </div> <div class="lesson-card"> <div class="lesson-number">04</div> <div class="lesson-info"> <div class="lesson-title">User Experience in Data Interfaces</div> <div class="lesson-meta"> <span> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67V7z"></path> </svg> 50 mins </span> <span> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM9 6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9V6zm9 14H6V10h12v10zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"></path> </svg> Locked </span> </div> </div> <div class="lesson-status">0%</div> </div> </div> </div> <div class="content-panel" id="quizzes-panel"> <h2 class="panel-title">Test Your Knowledge</h2> <p class="panel-subtitle">Reinforce your learning with these interactive assessments</p> <div class="quiz-grid"> <div class="quiz-card"> <div class="quiz-title">Data Viz Fundamentals</div> <div class="quiz-meta"> <div class="quiz-meta-item"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-2 14l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"></path> </svg> Completed </div> <div class="quiz-difficulty easy">Easy</div> </div> </div> <div class="quiz-card"> <div class="quiz-title">Chart Selection Quiz</div> <div class="quiz-meta"> <div class="quiz-meta-item"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M19,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V5C21,3.9,20.1,3,19,3z M19,19H5V5h14V19z M13.96,12.29l-2.75,3.54l-1.96-2.36L6.5,17h11L13.96,12.29z"></path> </svg> New Quiz </div> <div class="quiz-difficulty medium">Medium</div> </div> </div> <div class="quiz-card"> <div class="quiz-title">Interactive Dashboard Challenge</div> <div class="quiz-meta"> <div class="quiz-meta-item"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM9 6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9V6zm9 14H6V10h12v10zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"></path> </svg> Locked </div> <div class="quiz-difficulty hard">Hard</div> </div> </div> <div class="quiz-card"> <div class="quiz-title">Color Theory Assessment</div> <div class="quiz-meta"> <div class="quiz-meta-item"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M19,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V5C21,3.9,20.1,3,19,3z M19,19H5V5h14V19z M13.96,12.29l-2.75,3.54l-1.96-2.36L6.5,17h11L13.96,12.29z"></path> </svg
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sonic Stream - Music App Interface</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; } :root { --background: #121212; --primary: #1DB954; --secondary: #3d5af1; --tertiary: #e22867; --text-primary: #FFFFFF; --text-secondary: #b3b3b3; --surface: #1e1e1e; --surface-light: #282828; } body { background-color: var(--background); color: var(--text-primary); height: 700px; width: 700px; max-width: 100%; max-height: 100%; overflow: hidden; display: flex; flex-direction: column; } .app-container { display: flex; flex-direction: column; height: 100%; width: 100%; overflow: hidden; position: relative; } .header { padding: 20px; display: flex; align-items: center; justify-content: space-between; z-index: 10; } .logo { font-size: 24px; font-weight: 700; background: linear-gradient(90deg, var(--primary), var(--secondary), var(--tertiary)); -webkit-background-clip: text; background-clip: text; color: transparent; display: flex; align-items: center; gap: 8px; } .logo-icon { width: 28px; height: 28px; fill: url(#logo-gradient); } .search-bar { display: flex; align-items: center; background-color: var(--surface); border-radius: 20px; padding: 8px 16px; width: 200px; transition: all 0.3s ease; } .search-bar:focus-within { background-color: var(--surface-light); width: 240px; box-shadow: 0 0 0 2px rgba(29, 185, 84, 0.3); } .search-icon { width: 18px; height: 18px; margin-right: 8px; fill: var(--text-secondary); } .search-input { background: transparent; border: none; color: var(--text-primary); outline: none; width: 100%; font-size: 14px; } .content { flex: 1; overflow-y: auto; padding: 0 20px 80px; position: relative; } .content::-webkit-scrollbar { width: 8px; } .content::-webkit-scrollbar-track { background: var(--surface); border-radius: 4px; } .content::-webkit-scrollbar-thumb { background: var(--surface-light); border-radius: 4px; } .content::-webkit-scrollbar-thumb:hover { background: #555; } .welcome-section { margin-bottom: 30px; } .welcome-title { font-size: 28px; font-weight: 700; margin-bottom: 8px; position: relative; display: inline-block; } .welcome-title::after { content: ''; position: absolute; height: 3px; width: 40px; background: linear-gradient(90deg, var(--primary), var(--secondary)); bottom: -6px; left: 0; border-radius: 3px; } .welcome-subtitle { color: var(--text-secondary); font-size: 16px; margin-bottom: 20px; } .recently-played { margin-bottom: 30px; } .section-title { font-size: 20px; font-weight: 600; margin-bottom: 15px; display: flex; align-items: center; gap: 10px; } .section-icon { width: 20px; height: 20px; fill: var(--primary); } .cards-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); grid-gap: 16px; } .music-card { background-color: var(--surface); border-radius: 8px; padding: 16px; transition: all 0.3s ease; cursor: pointer; position: relative; overflow: hidden; } .music-card:hover { background-color: var(--surface-light); transform: translateY(-4px); } .music-card:hover .card-image { transform: scale(1.05); } .music-card:hover .play-overlay { opacity: 1; transform: translate(-50%, -50%) scale(1); } .music-card:hover .sound-wave { opacity: 1; } .card-image-container { position: relative; width: 100%; padding-bottom: 100%; margin-bottom: 12px; border-radius: 4px; overflow: hidden; } .card-image { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; transition: all 0.3s ease; } .play-overlay { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.8); width: 40px; height: 40px; background-color: var(--primary); border-radius: 50%; display: flex; align-items: center; justify-content: center; opacity: 0; transition: all 0.3s ease; z-index: 2; } .play-icon { width: 16px; height: 16px; fill: white; margin-left: 2px; } .card-title { font-size: 14px; font-weight: 600; margin-bottom: 4px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .card-artist { font-size: 12px; color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .sound-wave { position: absolute; bottom: 0; left: 0; width: 100%; height: 30px; display: flex; align-items: flex-end; justify-content: center; opacity: 0; transition: opacity 0.3s ease; gap: 3px; padding: 0 8px; } .wave-bar { width: 3px; background: linear-gradient(to top, var(--primary), var(--secondary)); border-radius: 3px; animation: sound-wave-anim 1s infinite; } @keyframes sound-wave-anim { 0%, 100% { height: 5px; } 50% { height: 15px; } } .wave-bar:nth-child(1) { animation-delay: 0.1s; } .wave-bar:nth-child(2) { animation-delay: 0.2s; } .wave-bar:nth-child(3) { animation-delay: 0.3s; } .wave-bar:nth-child(4) { animation-delay: 0.4s; } .wave-bar:nth-child(5) { animation-delay: 0.5s; } .tab-bar { position: absolute; bottom: 0; width: 100%; background: linear-gradient(to right, #212121, #1a1a1a); display: flex; justify-content: space-around; padding: 16px 0; border-top: 1px solid #333; z-index: 20; } .tab { display: flex; flex-direction: column; align-items: center; gap: 6px; cursor: pointer; position: relative; transition: all 0.3s ease; flex: 1; z-index: 1; } .tab-icon { width: 24px; height: 24px; transition: all 0.3s ease; fill: var(--text-secondary); } .tab-label { font-size: 12px; font-weight: 500; color: var(--text-secondary); transition: all 0.3s ease; } .tab.active .tab-icon, .tab:hover .tab-icon { fill: var(--primary); transform: translateY(-4px); } .tab.active .tab-label, .tab:hover .tab-label { color: var(--primary); } .tab::after { content: ''; position: absolute; bottom: -16px; left: 50%; transform: translateX(-50%); width: 0; height: 3px; background: var(--primary); transition: all 0.3s ease; border-radius: 3px 3px 0 0; } .tab.active::after { width: 20px; } .tab-indicator { position: absolute; bottom: 0; height: 3px; width: 20px; background: linear-gradient(to right, var(--primary), var(--secondary)); border-radius: 3px 3px 0 0; transition: transform 0.3s ease; } .content-section { display: none; animation: fadeIn 0.3s ease; } .content-section.active { display: block; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .artist-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); grid-gap: 16px; } .artist-card { display: flex; flex-direction: column; align-items: center; cursor: pointer; transition: all 0.3s ease; } .artist-card:hover { transform: translateY(-4px); } .artist-image-container { width: 100%; padding-bottom: 100%; position: relative; border-radius: 50%; overflow: hidden; margin-bottom: 12px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); } .artist-image { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s ease; } .artist-card:hover .artist-image { transform: scale(1.1); } .artist-name { font-size: 14px; font-weight: 600; text-align: center; margin-bottom: 4px; } .artist-genre { font-size: 12px; color: var(--text-secondary); text-align: center; } .album-list { display: flex; flex-direction: column; gap: 12px; } .album-item { display: flex; align-items: center; background-color: var(--surface); border-radius: 8px; padding: 12px; cursor: pointer; transition: all 0.3s ease; } .album-item:hover { background-color: var(--surface-light); transform: translateX(4px); } .album-thumbnail { width: 50px; height: 50px; border-radius: 4px; margin-right: 16px; object-fit: cover; } .album-info { flex: 1; } .album-title { font-size: 16px; font-weight: 600; margin-bottom: 4px; } .album-details { display: flex; font-size: 12px; color: var(--text-secondary); gap: 8px; } .album-year { padding: 2px 6px; background-color: rgba(29, 185, 84, 0.1); border-radius: 4px; color: var(--primary); } .album-actions { display: flex; gap: 16px; } .album-action { width: 24px; height: 24px; fill: var(--text-secondary); transition: fill 0.3s ease; } .album-item:hover .album-action { fill: var(--text-primary); } .album-action:hover { fill: var(--primary); } .mini-player { position: absolute; bottom: 80px; left: 20px; right: 20px; background: rgba(30, 30, 30, 0.9); backdrop-filter: blur(10px); border-radius: 12px; padding: 12px 16px; display: flex; align-items: center; transform: translateY(100px); opacity: 0; transition: all 0.3s ease; border: 1px solid #333; z-index: 15; } .mini-player.active { transform: translateY(0); opacity: 1; } .mini-player-image { width: 48px; height: 48px; border-radius: 6px; margin-right: 16px; object-fit: cover; } .mini-player-info { flex: 1; } .mini-player-title { font-size: 14px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-bottom: 2px; } .mini-player-artist { font-size: 12px; color: var(--text-secondary); } .mini-player-controls { display: flex; align-items: center; gap: 16px; } .control-btn { cursor: pointer; transition: all 0.2s ease; } .control-btn:hover { transform: scale(1.1); } .control-icon { width: 20px; height: 20px; fill: var(--text-primary); } .play-btn { width: 36px; height: 36px; background-color: var(--primary); border-radius: 50%; display: flex; align-items: center; justify-content: center; } .play-btn .control-icon { width: 16px; height: 16px; fill: var(--background); margin-left: 2px; } .gradient-bg { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; opacity: 0.05; background: radial-gradient(circle at top right, var(--tertiary), transparent 70%), radial-gradient(circle at bottom left, var(--secondary), transparent 70%); z-index: 0; } .pulse-circle { position: absolute; width: 200px; height: 200px; border-radius: 50%; background: radial-gradient(circle, var(--primary) 0%, transparent 70%); opacity: 0; z-index: 0; pointer-events: none; animation: pulse 10s infinite alternate; } .pulse-circle:nth-child(1) { top: 10%; right: 20%; animation-delay: 0s; } .pulse-circle:nth-child(2) { bottom: 30%; left: 15%; background: radial-gradient(circle, var(--secondary) 0%, transparent 70%); animation-delay: 2s; } .pulse-circle:nth-child(3) { bottom: 10%; right: 10%; background: radial-gradient(circle, var(--tertiary) 0%, transparent 70%); animation-delay: 5s; } @keyframes pulse { 0%, 100% { opacity: 0; transform: scale(0.8); } 50% { opacity: 0.1; transform: scale(1.2); } } /* Responsive adjustments */ @media (max-width: 600px) { .cards-container, .artist-cards { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); } .header { padding: 16px; } .search-bar { width: 160px; } .welcome-title { font-size: 24px; } .welcome-subtitle { font-size: 14px; } .section-title { font-size: 18px; } .content { padding: 0 16px 70px; } } @media (max-width: 400px) { .cards-container, .artist-cards { grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); } .tab-label { font-size: 10px; } .mini-player-controls { gap: 10px; } } </style> </head> <body> <!-- SVG Definitions --> <svg style="display: none;"> <defs> <linearGradient id="logo-gradient" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="0%" stop-color="#1DB954" /> <stop offset="50%" stop-color="#3d5af1" /> <stop offset="100%" stop-color="#e22867" /> </linearGradient> </defs> </svg> <div class="app-container"> <div class="gradient-bg"></div> <div class="pulse-circle"></div> <div class="pulse-circle"></div> <div class="pulse-circle"></div> <header class="header"> <div class="logo"> <svg class="logo-icon" 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 2zm-1 14.5v-9l6 4.5-6 4.5z"/> </svg> <span>Sonic Stream</span> </div> <div class="search-bar"> <svg class="search-icon" viewBox="0 0 24 24"> <path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/> </svg> <input type="text" class="search-input" placeholder="Search music..."> </div> </header> <main class="content"> <!-- Home Content --> <div class="content-section active" id="home-section"> <div class="welcome-section"> <h1 class="welcome-title">Good afternoon</h1> <p class="welcome-subtitle">Discover your next favorite track</p> </div> <div class="recently-played"> <h2 class="section-title"> <svg class="section-icon" viewBox="0 0 24 24"> <path d="M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z"/> </svg> Recently Played </h2> <div class="cards-container"> <div class="music-card" data-title="Midnight Cityscapes" data-artist="Echo Pulse"> <div class="card-image-container"> <img class="card-image" src="https://images.unsplash.com/photo-1534854638093-bada1813ca19?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Album Cover"> <div class="play-overlay"> <svg class="play-icon" viewBox="0 0 24 24"> <path d="M8 5v14l11-7z"/> </svg> </div> <div class="sound-wave"> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> </div> </div> <h3 class="card-title">Midnight Cityscapes</h3> <p class="card-artist">Echo Pulse</p> </div> <div class="music-card" data-title="Neon Dreams" data-artist="Synth Collective"> <div class="card-image-container"> <img class="card-image" src="https://images.unsplash.com/photo-1496293455970-f8581aae0e3b?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Album Cover"> <div class="play-overlay"> <svg class="play-icon" viewBox="0 0 24 24"> <path d="M8 5v14l11-7z"/> </svg> </div> <div class="sound-wave"> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> </div> </div> <h3 class="card-title">Neon Dreams</h3> <p class="card-artist">Synth Collective</p> </div> <div class="music-card" data-title="Quantum Beats" data-artist="Digital Array"> <div class="card-image-container"> <img class="card-image" src="https://images.unsplash.com/photo-1514525253161-7a46d19cd819?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Album Cover"> <div class="play-overlay"> <svg class="play-icon" viewBox="0 0 24 24"> <path d="M8 5v14l11-7z"/> </svg> </div> <div class="sound-wave"> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> </div> </div> <h3 class="card-title">Quantum Beats</h3> <p class="card-artist">Digital Array</p> </div> <div class="music-card" data-title="Acoustic Memories" data-artist="Melody Strings"> <div class="card-image-container"> <img class="card-image" src="https://images.unsplash.com/photo-1511671782779-c97d3d27a1d4?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Album Cover"> <div class="play-overlay"> <svg class="play-icon" viewBox="0 0 24 24"> <path d="M8 5v14l11-7z"/> </svg> </div> <div class="sound-wave"> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> </div> </div> <h3 class="card-title">Acoustic Memories</h3> <p class="card-artist">Melody Strings</p> </div> </div> </div> <div class="trending"> <h2 class="section-title"> <svg class="section-icon" viewBox="0 0 24 24"> <path d="M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 17.41 3.8 13.5.67zM11.71 19c-1.78 0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 4.04 0 2.65-2.15 4.8-4.8 4.8z"/> </svg> Trending Now </h2> <div class="cards-container"> <div class="music-card" data-title="Future Waves" data-artist="Electro Vision"> <div class="card-image-container"> <img class="card-image" src="https://images.unsplash.com/photo-1505740420928-5e560c06d30e?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Album Cover"> <div class="play-overlay"> <svg class="play-icon" viewBox="0 0 24 24"> <path d="M8 5v14l11-7z"/> </svg> </div> <div class="sound-wave"> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> </div> </div> <h3 class="card-title">Future Waves</h3> <p class="card-artist">Electro Vision</p> </div> <div class="music-card" data-title="Cosmic Journey" data-artist="Astro Sound"> <div class="card-image-container"> <img class="card-image" src="https://images.unsplash.com/photo-1557672172-298e090bd0f1?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Album Cover"> <div class="play-overlay"> <svg class="play-icon" viewBox="0 0 24 24"> <path d="M8 5v14l11-7z"/> </svg> </div> <div class="sound-wave"> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> </div> </div> <h3 class="card-title">Cosmic Journey</h3> <p class="card-artist">Astro Sound</p> </div> <div class="music-card" data-title="Urban Rhythm" data-artist="City Beats"> <div class="card-image-container"> <img class="card-image" src="https://images.unsplash.com/photo-1504898770365-14faca6a7320?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Album Cover"> <div class="play-overlay"> <svg class="play-icon" viewBox="0 0 24 24"> <path d="M8 5v14l11-7z"/> </svg> </div> <div class="sound-wave"> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> </div> </div> <h3 class="card-title">Urban Rhythm</h3> <p class="card-artist">City Beats</p> </div> <div class="music-card" data-title="Desert Mirage" data-artist="Ambient Oasis"> <div class="card-image-container"> <img class="card-image" src="https://images.unsplash.com/photo-1470225620780-dba8ba36b745?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Album Cover"> <div class="play-overlay"> <svg class="play-icon" viewBox="0 0 24 24"> <path d="M8 5v14l11-7z"/> </svg> </div> <div class="sound-wave"> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> <div class="wave-bar"></div> </div> </div> <h3 class="card-title">Desert Mirage</h3> <p class="card-artist">Ambient Oasis</p> </div> </div> </div> </div> <!-- Artists Content --> <div class="content-section" id="artists-section"> <div class="welcome-section"> <h1 class="welcome-title">Artists</h1> <p class="welcome-subtitle">Explore your favorite musicians</p> </div> <h2 class="section-title"> <svg class="section-icon" viewBox="0 0 24 24"> <path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/> </svg> Popular Artists </h2> <div class="artist-cards"> <div class="artist-card"> <div class="artist-image-container"> <img class="artist-image" src="https://images.unsplash.com/photo-1522196772883-393d879eb14d?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Artist"> </div> <h3 class="artist-name">Luna Ray</h3> <p class="artist-genre">Indie Pop</p> </div> <div class="artist-card"> <div class="artist-image-container"> <img class="artist-image" src="https://images.unsplash.com/photo-1508700115892-45ecd05ae2ad?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Artist"> </div> <h3 class="artist-name">Neon Pulse</h3> <p class="artist-genre">Synthwave</p> </div> <div class="artist-card"> <div class="artist-image-container"> <img class="artist-image" src="https://images.unsplash.com/photo-1520813792240-56fc4a3765a7?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Artist"> </div> <h3 class="artist-name">Rhythm Kings</h3> <p class="artist-genre">Hip Hop</p> </div> <div class="artist-card"> <div class="artist-image-container"> <img class="artist-image" src="https://images.unsplash.com/photo-1535992165812-68d1861aa71e?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Artist"> </div> <h3 class="artist-name">Echo Valley</h3> <p class="artist-genre">Folk</p> </div> <div class="artist-card"> <div class="artist-image-container"> <img class="artist-image" src="https://images.unsplash.com/photo-1493225457124-a3eb161ffa5f?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Artist"> </div> <h3 class="artist-name">Meta Wave</h3> <p class="artist-genre">Electronic</p> </div> <div class="artist-card"> <div class="artist-image-container"> <img class="artist-image" src="https://images.unsplash.com/photo-1549213783-8284d0336c4f?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Artist"> </div> <h3 class="artist-name">Crystal Notes</h3> <p class="artist-genre">Classical</p> </div> </div> <h2 class="section-title" style="margin-top:
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Skyway Travel</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } :root { --primary: #5468FF; --secondary: #FFB400; --accent: #FF5A5F; --light: #F6F9FE; --dark: #2A2D45; --white: #FFFFFF; --shadow: 0 4px 20px rgba(84, 104, 255, 0.15); --radius: 12px; --transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); } body { background: linear-gradient(120deg, #F6F9FE, #EFF3FC); color: var(--dark); height: 700px; overflow: hidden; display: flex; flex-direction: column; } .container { max-width: 700px; width: 100%; margin: 0 auto; padding: 20px; display: flex; flex-direction: column; height: 100%; position: relative; } .header { text-align: center; margin-bottom: 20px; position: relative; z-index: 2; } .logo { display: flex; align-items: center; justify-content: center; margin-bottom: 10px; } .logo-text { font-size: 28px; font-weight: 700; background: linear-gradient(90deg, var(--primary), var(--accent)); -webkit-background-clip: text; background-clip: text; color: transparent; letter-spacing: -0.5px; } .logo-icon { font-size: 24px; margin-right: 8px; color: var(--accent); } .tagline { font-size: 14px; color: var(--dark); opacity: 0.7; margin-bottom: 5px; } .tab-bar { display: flex; background: rgba(255, 255, 255, 0.9); backdrop-filter: blur(10px); border-radius: var(--radius); box-shadow: var(--shadow); overflow: hidden; position: relative; z-index: 2; margin-bottom: 20px; } .tab { flex: 1; padding: 16px 0; text-align: center; cursor: pointer; position: relative; transition: var(--transition); color: var(--dark); font-weight: 500; z-index: 1; } .tab i { display: block; font-size: 22px; margin-bottom: 5px; transition: var(--transition); } .tab span { font-size: 14px; } .tab.active { color: var(--white); } .tab-indicator { position: absolute; height: 100%; width: calc(100% / 3); background: linear-gradient(135deg, var(--primary), #7386FF); border-radius: var(--radius); transition: var(--transition); top: 0; left: 0; z-index: 0; } .content-section { background: var(--white); border-radius: var(--radius); box-shadow: var(--shadow); padding: 25px; flex: 1; overflow: auto; position: relative; display: none; opacity: 0; transform: translateY(10px); transition: var(--transition); } .content-section.active { display: block; opacity: 1; transform: translateY(0); } .section-title { font-size: 18px; font-weight: 600; margin-bottom: 20px; color: var(--dark); } .form-group { margin-bottom: 20px; } .form-row { display: flex; gap: 15px; margin-bottom: 15px; } .form-col { flex: 1; } label { display: block; font-size: 13px; margin-bottom: 8px; color: var(--dark); font-weight: 500; } input, select { width: 100%; padding: 12px 15px; border: 1px solid rgba(0, 0, 0, 0.1); border-radius: var(--radius); background: var(--light); font-size: 14px; transition: var(--transition); } input:focus, select:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(84, 104, 255, 0.15); } .search-btn { width: 100%; padding: 14px; background: linear-gradient(135deg, var(--primary), #7386FF); color: white; border: none; border-radius: var(--radius); font-size: 16px; font-weight: 600; cursor: pointer; transition: var(--transition); box-shadow: 0 4px 15px rgba(84, 104, 255, 0.3); position: relative; overflow: hidden; } .search-btn:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(84, 104, 255, 0.4); } .search-btn .ripple { position: absolute; border-radius: 50%; background: rgba(255, 255, 255, 0.5); transform: scale(0); animation: ripple 0.8s linear; pointer-events: none; } @keyframes ripple { to { transform: scale(4); opacity: 0; } } .trending-section { margin-top: 25px; } .trending-title { font-size: 15px; font-weight: 600; margin-bottom: 15px; display: flex; align-items: center; } .trending-title i { margin-right: 8px; color: var(--secondary); } .trending-items { display: flex; gap: 10px; overflow-x: auto; padding-bottom: 10px; scrollbar-width: thin; } .trending-items::-webkit-scrollbar { height: 5px; } .trending-items::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.1); border-radius: 10px; } .trending-item { min-width: 110px; background: var(--light); border-radius: var(--radius); padding: 12px; text-align: center; cursor: pointer; transition: var(--transition); border: 1px solid rgba(0, 0, 0, 0.05); } .trending-item:hover { transform: translateY(-3px); box-shadow: var(--shadow); background: white; } .trending-item img { width: 40px; height: 40px; object-fit: cover; border-radius: 50%; margin-bottom: 8px; } .trending-item .name { font-size: 12px; font-weight: 600; color: var(--dark); } .trending-item .price { font-size: 11px; color: var(--accent); font-weight: 600; margin-top: 3px; } .decorative-bg { position: absolute; top: -50px; right: -100px; width: 300px; height: 300px; border-radius: 50%; background: linear-gradient(135deg, rgba(84, 104, 255, 0.2), rgba(255, 90, 95, 0.1)); filter: blur(60px); z-index: 0; } .decorative-bg2 { position: absolute; bottom: -100px; left: -50px; width: 250px; height: 250px; border-radius: 50%; background: linear-gradient(135deg, rgba(255, 180, 0, 0.15), rgba(84, 104, 255, 0.1)); filter: blur(60px); z-index: 0; } .special-offer { position: absolute; bottom: 20px; right: 20px; background: linear-gradient(135deg, #FFB400, #FF9900); color: white; padding: 6px 12px; border-radius: 20px; font-size: 12px; font-weight: bold; display: flex; align-items: center; box-shadow: 0 4px 15px rgba(255, 153, 0, 0.3); z-index: 10; cursor: pointer; transition: var(--transition); } .special-offer:hover { transform: translateY(-2px) scale(1.05); } .special-offer i { margin-right: 5px; } .feature-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 15px; margin-bottom: 25px; } .feature-tag { background: rgba(84, 104, 255, 0.1); color: var(--primary); padding: 6px 12px; border-radius: 20px; font-size: 12px; font-weight: 500; display: flex; align-items: center; } .feature-tag i { font-size: 10px; margin-right: 5px; } .quick-filters { display: flex; gap: 10px; margin-bottom: 20px; flex-wrap: wrap; } .filter-btn { background: var(--light); border: 1px solid rgba(0, 0, 0, 0.08); border-radius: 20px; padding: 6px 12px; font-size: 12px; cursor: pointer; transition: var(--transition); } .filter-btn.active { background: var(--primary); color: white; } .filter-btn:hover:not(.active) { background: rgba(84, 104, 255, 0.1); } @media (max-width: 480px) { .form-row { flex-direction: column; gap: 15px; } .container { padding: 15px; } .content-section { padding: 20px; } .tab span { font-size: 12px; } } /* Animations */ @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } } .logo { animation: float 4s ease-in-out infinite; } .pulse { animation: pulse 2s infinite; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(84, 104, 255, 0.4); } 70% { box-shadow: 0 0 0 10px rgba(84, 104, 255, 0); } 100% { box-shadow: 0 0 0 0 rgba(84, 104, 255, 0); } } .search-btn .btn-text { position: relative; z-index: 2; display: flex; align-items: center; justify-content: center; gap: 8px; } .date-wrapper { position: relative; } .date-wrapper i { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); color: rgba(0, 0, 0, 0.3); pointer-events: none; } .select-wrapper { position: relative; } .select-wrapper select { appearance: none; } .select-wrapper::after { content: '\f107'; font-family: 'Font Awesome 5 Free'; font-weight: 900; position: absolute; right: 12px; top: 50%; transform: translateY(-50%); color: rgba(0, 0, 0, 0.3); pointer-events: none; } /* Hotel-specific styles */ .hotel-amenities { display: flex; gap: 10px; margin-bottom: 20px; flex-wrap: wrap; } .amenity-option { display: flex; align-items: center; gap: 5px; font-size: 12px; } .amenity-option input { width: auto; } /* Car rental-specific styles */ .vehicle-type { display: flex; gap: 10px; overflow-x: auto; padding-bottom: 10px; margin-bottom: 20px; } .vehicle-option { min-width: 80px; text-align: center; border: 1px solid rgba(0, 0, 0, 0.1); border-radius: var(--radius); padding: 10px; cursor: pointer; transition: var(--transition); } .vehicle-option.active { border-color: var(--primary); background: rgba(84, 104, 255, 0.1); } .vehicle-option i { font-size: 20px; margin-bottom: 5px; color: var(--dark); } .vehicle-option span { font-size: 12px; display: block; } </style> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css"> </head> <body> <div class="container"> <div class="decorative-bg"></div> <div class="decorative-bg2"></div> <div class="header"> <div class="logo"> <i class="fas fa-paper-plane logo-icon"></i> <h1 class="logo-text">Skyway</h1> </div> <p class="tagline">Your journey begins with a simple search</p> </div> <div class="tab-bar"> <div class="tab active" data-tab="flights"> <i class="fas fa-plane"></i> <span>Flights</span> </div> <div class="tab" data-tab="hotels"> <i class="fas fa-hotel"></i> <span>Hotels</span> </div> <div class="tab" data-tab="cars"> <i class="fas fa-car"></i> <span>Car Rental</span> </div> <div class="tab-indicator"></div> </div> <!-- Flights Section --> <div class="content-section active" id="flights-content"> <h2 class="section-title">Find your perfect flight</h2> <div class="feature-tags"> <div class="feature-tag"><i class="fas fa-check-circle"></i> No Booking Fees</div> <div class="feature-tag"><i class="fas fa-check-circle"></i> Price Match</div> <div class="feature-tag"><i class="fas fa-check-circle"></i> Flexible Changes</div> </div> <div class="quick-filters"> <div class="filter-btn active">Return</div> <div class="filter-btn">One-way</div> <div class="filter-btn">Multi-city</div> </div> <form class="flight-form"> <div class="form-row"> <div class="form-col"> <label for="flight-from">From</label> <input type="text" id="flight-from" placeholder="City or airport" autocomplete="off"> </div> <div class="form-col"> <label for="flight-to">To</label> <input type="text" id="flight-to" placeholder="City or airport" autocomplete="off"> </div> </div> <div class="form-row"> <div class="form-col"> <label for="departure-date">Departure Date</label> <div class="date-wrapper"> <input type="text" id="departure-date" placeholder="Select date" autocomplete="off"> <i class="far fa-calendar"></i> </div> </div> <div class="form-col"> <label for="return-date">Return Date</label> <div class="date-wrapper"> <input type="text" id="return-date" placeholder="Select date" autocomplete="off"> <i class="far fa-calendar"></i> </div> </div> </div> <div class="form-row"> <div class="form-col"> <label for="passengers">Passengers</label> <div class="select-wrapper"> <select id="passengers"> <option value="1">1 Passenger</option> <option value="2">2 Passengers</option> <option value="3">3 Passengers</option> <option value="4">4+ Passengers</option> </select> </div> </div> <div class="form-col"> <label for="class">Class</label> <div class="select-wrapper"> <select id="class"> <option value="economy">Economy</option> <option value="premium">Premium Economy</option> <option value="business">Business</option> <option value="first">First Class</option> </select> </div> </div> </div> <button type="button" class="search-btn"> <span class="btn-text"> <i class="fas fa-search"></i> Search Flights </span> </button> </form> <div class="trending-section"> <h3 class="trending-title"><i class="fas fa-fire"></i> Trending Destinations</h3> <div class="trending-items"> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1564594736624-def7a10ab047?w=150&q=80" alt="Paris"> <div class="name">Paris</div> <div class="price">$249</div> </div> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1531572753322-ad063cecc140?w=150&q=80" alt="Tokyo"> <div class="name">Tokyo</div> <div class="price">$649</div> </div> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1544085311-11a028465b03?w=150&q=80" alt="Bali"> <div class="name">Bali</div> <div class="price">$399</div> </div> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1546708676-71d8396bf732?w=150&q=80" alt="Santorini"> <div class="name">Santorini</div> <div class="price">$329</div> </div> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1506973035872-a4ec16b8e8d9?w=150&q=80" alt="New York"> <div class="name">New York</div> <div class="price">$289</div> </div> </div> </div> </div> <!-- Hotels Section --> <div class="content-section" id="hotels-content"> <h2 class="section-title">Find your perfect stay</h2> <div class="feature-tags"> <div class="feature-tag"><i class="fas fa-check-circle"></i> Free Cancellation</div> <div class="feature-tag"><i class="fas fa-check-circle"></i> Pay at Property</div> <div class="feature-tag"><i class="fas fa-check-circle"></i> Verified Reviews</div> </div> <form class="hotel-form"> <div class="form-group"> <label for="hotel-destination">Destination/Property</label> <input type="text" id="hotel-destination" placeholder="City, neighborhood, or specific hotel" autocomplete="off"> </div> <div class="form-row"> <div class="form-col"> <label for="check-in">Check-in</label> <div class="date-wrapper"> <input type="text" id="check-in" placeholder="Select date" autocomplete="off"> <i class="far fa-calendar"></i> </div> </div> <div class="form-col"> <label for="check-out">Check-out</label> <div class="date-wrapper"> <input type="text" id="check-out" placeholder="Select date" autocomplete="off"> <i class="far fa-calendar"></i> </div> </div> </div> <div class="form-row"> <div class="form-col"> <label for="rooms">Rooms</label> <div class="select-wrapper"> <select id="rooms"> <option value="1">1 Room</option> <option value="2">2 Rooms</option> <option value="3">3 Rooms</option> <option value="4">4+ Rooms</option> </select> </div> </div> <div class="form-col"> <label for="guests">Guests</label> <div class="select-wrapper"> <select id="guests"> <option value="1">1 Guest</option> <option value="2">2 Guests</option> <option value="3">3 Guests</option> <option value="4">4+ Guests</option> </select> </div> </div> </div> <div class="hotel-amenities"> <div class="amenity-option"> <input type="checkbox" id="pool"> <label for="pool">Pool</label> </div> <div class="amenity-option"> <input type="checkbox" id="wifi"> <label for="wifi">Free WiFi</label> </div> <div class="amenity-option"> <input type="checkbox" id="breakfast"> <label for="breakfast">Breakfast</label> </div> <div class="amenity-option"> <input type="checkbox" id="parking"> <label for="parking">Parking</label> </div> </div> <button type="button" class="search-btn"> <span class="btn-text"> <i class="fas fa-search"></i> Find Hotels </span> </button> </form> <div class="trending-section"> <h3 class="trending-title"><i class="fas fa-star"></i> Top Rated Properties</h3> <div class="trending-items"> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1566073771259-6a8506099945?w=150&q=80" alt="Luxury Resort"> <div class="name">Oceanview Resort</div> <div class="price">$189/night</div> </div> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1578683010236-d716f9a3f461?w=150&q=80" alt="Boutique Hotel"> <div class="name">City Loft Hotel</div> <div class="price">$149/night</div> </div> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1455587734955-081b22074882?w=150&q=80" alt="Mountain Cabin"> <div class="name">Alpine Lodge</div> <div class="price">$120/night</div> </div> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1520250497591-112f2f40a3f4?w=150&q=80" alt="Beach Villa"> <div class="name">Beachfront Villa</div> <div class="price">$235/night</div> </div> </div> </div> </div> <!-- Car Rental Section --> <div class="content-section" id="cars-content"> <h2 class="section-title">Rent the perfect car</h2> <div class="feature-tags"> <div class="feature-tag"><i class="fas fa-check-circle"></i> Free Cancellation</div> <div class="feature-tag"><i class="fas fa-check-circle"></i> No Hidden Fees</div> <div class="feature-tag"><i class="fas fa-check-circle"></i> Unlimited Mileage</div> </div> <div class="vehicle-type"> <div class="vehicle-option active"> <i class="fas fa-car"></i> <span>Economy</span> </div> <div class="vehicle-option"> <i class="fas fa-car-side"></i> <span>Compact</span> </div> <div class="vehicle-option"> <i class="fas fa-car-alt"></i> <span>Mid-size</span> </div> <div class="vehicle-option"> <i class="fas fa-truck-pickup"></i> <span>SUV</span> </div> <div class="vehicle-option"> <i class="fas fa-shuttle-van"></i> <span>Van</span> </div> <div class="vehicle-option"> <i class="fas fa-truck-monster"></i> <span>Luxury</span> </div> </div> <form class="car-form"> <div class="form-group"> <label for="pickup-location">Pickup Location</label> <input type="text" id="pickup-location" placeholder="City or airport" autocomplete="off"> </div> <div class="form-row"> <div class="form-col"> <label for="pickup-date">Pickup Date</label> <div class="date-wrapper"> <input type="text" id="pickup-date" placeholder="Select date" autocomplete="off"> <i class="far fa-calendar"></i> </div> </div> <div class="form-col"> <label for="pickup-time">Pickup Time</label> <div class="select-wrapper"> <select id="pickup-time"> <option value="10:00">10:00 AM</option> <option value="11:00">11:00 AM</option> <option value="12:00">12:00 PM</option> <option value="13:00">1:00 PM</option> <option value="14:00">2:00 PM</option> <option value="15:00">3:00 PM</option> </select> </div> </div> </div> <div class="form-row"> <div class="form-col"> <label for="dropoff-date">Drop-off Date</label> <div class="date-wrapper"> <input type="text" id="dropoff-date" placeholder="Select date" autocomplete="off"> <i class="far fa-calendar"></i> </div> </div> <div class="form-col"> <label for="dropoff-time">Drop-off Time</label> <div class="select-wrapper"> <select id="dropoff-time"> <option value="10:00">10:00 AM</option> <option value="11:00">11:00 AM</option> <option value="12:00">12:00 PM</option> <option value="13:00">1:00 PM</option> <option value="14:00">2:00 PM</option> <option value="15:00">3:00 PM</option> </select> </div> </div> </div> <div class="form-group"> <label for="driver-age">Driver's Age</label> <div class="select-wrapper"> <select id="driver-age"> <option value="25+">25+ years</option> <option value="21-24">21-24 years</option> <option value="18-20">18-20 years</option> </select> </div> </div> <button type="button" class="search-btn"> <span class="btn-text"> <i class="fas fa-search"></i> Find Cars </span> </button> </form> <div class="trending-section"> <h3 class="trending-title"><i class="fas fa-tag"></i> Special Offers</h3> <div class="trending-items"> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1533473359331-0135ef1b58bf?w=150&q=80" alt="SUV"> <div class="name">Weekend SUV</div> <div class="price">$45/day</div> </div> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1494976388531-d1058494cdd8?w=150&q=80" alt="Sports Car"> <div class="name">Summer Convertible</div> <div class="price">$72/day</div> </div> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1549317661-bd32c8ce0db2?w=150&q=80" alt="EV Car"> <div class="name">Electric Vehicle</div> <div class="price">$59/day</div> </div> <div class="trending-item"> <img src="https://images.unsplash.com/photo-1549399542-7e8f2e928464?w=150&q=80" alt="Van"> <div class="name">Family Van</div> <div class="price">$67/day</div> </div> </div> </div> </div> <div class="special-offer pulse"> <i class="fas fa-gift"></i> Summer Discount: 15% OFF </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Tab switching functionality const tabs = document.querySelectorAll('.tab'); const tabIndicator = document.querySelector('.tab-indicator'); const contentSections = document.querySelectorAll('.content-section'); tabs.forEach((tab, index) => { tab.addEventListener('click', () => { // Move the tab indicator tabIndicator.style.left = `${index * (100 / tabs.length)}%`; // Update active tab tabs.forEach(t => t.classList.remove('active')); tab.classList.add('active'); // Show corresponding content const tabId = tab.getAttribute('data-tab'); contentSections.forEach(section => { section.classList.remove('active'); if (section.id === `${tabId}-content`) { section.classList.add('active'); } }); }); }); // Ripple effect on buttons const buttons = document.querySelectorAll('.search-btn'); buttons.forEach(button => { button.addEventListener('click', function(e) { const x = e.clientX - e.target.getBoundingClientRect().left; const y = e.clientY - e.target.getBoundingClientRect().top; const ripple = document.createElement('span'); ripple.classList.add('ripple'); ripple.style.left = `${x}px`; ripple.style.top = `${y}px`; this.appendChild(ripple); setTimeout(() => { ripple.remove(); }, 800); }); }); // Quick filters functionality const filterBtns = document.querySelectorAll('.filter-btn'); filterBtns.forEach(btn => { btn.addEventListener('click', () => { filterBtns.forEach(b => b.classList.remove('active')); btn.classList.add('active'); }); }); // Vehicle options functionality const vehicleOptions = document.querySelectorAll('.vehicle-option'); vehicleOptions.forEach(option => { option.addEventListener('click', () => { vehicleOptions.forEach(o => o.classList.remove('active')); option.classList.add('active'); }); }); // Trending items interaction const trendingItems = document.querySelectorAll('.trending-item'); trendingItems.forEach(item => { item.addEventListener('click', () => { // Fill the form with selected destination data const name = item.querySelector('.name').textContent; const section = item.closest('.content-section'); if (section.id === 'flights-content') { document.getElementById('flight-to').value = name; } else if (section.id === 'hotels-content') { document.getElementById('hotel-destination').value = name; } else if (section.id === 'cars-content') { document.getElementById('pickup-location').value = name; } }); }); // Special offer interaction const specialOffer = document.querySelector('.special-offer'); specialOffer.addEventListener('click', () => { specialOffer.textContent = 'Code: SUMMER15 Applied ✓'; specialOffer.classList.remove('pulse'); setTimeout(() => { specialOffer.innerHTML = '<i class="fas fa-gift"></i> Summer Discount: 15% OFF'; specialOffer.classList.add('pulse'); }, 2000); }); // Some form placeholder functions const today = new Date(); const tomorrow = new Date(today); tomorrow.setDate(today.getDate() + 1); const nextWeek = new Date(today); nextWeek.setDate(today.getDate() + 7); // Format date as MM/DD/YYYY const formatDate = (date) => { const month = date.getMonth() + 1; const day = date.getDate(); const year = date.getFullYear(); return `${month}/${day}/${year}`; }; // Set placeholder defaults for flight dates document.getElementById('departure-date').placeholder = formatDate(tomorrow); document.getElementById('return-date').placeholder = formatDate(nextWeek); // Set placeholder defaults for hotel dates document.getElementById('check-in').placeholder = formatDate(tomorrow); document.getElementById('check-out').placeholder = formatDate(nextWeek); // Set placeholder defaults for car rental dates document.getElementById('pickup-date').placeholder = formatDate(tomorrow); document.getElementById('dropoff-date').placeholder = formatDate(nextWeek); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>MedConnect Patient Portal</title> <style> :root { --primary: #1976D2; --primary-light: #64B5F6; --primary-dark: #0D47A1; --accent: #00BCD4; --text: #333; --text-light: #6E6E6E; --background: #FFFFFF; --card-bg: #F5F9FF; --border: #E0E0E0; --shadow: 0 4px 12px rgba(0, 0, 0, 0.08); --success: #4CAF50; --warning: #FF9800; --error: #F44336; --anim-duration: 0.3s; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background: var(--background); color: var(--text); display: flex; flex-direction: column; height: 100vh; overflow: hidden; max-width: 700px; margin: 0 auto; } .portal-header { padding: 20px; background: linear-gradient(135deg, var(--primary), var(--primary-dark)); color: white; box-shadow: var(--shadow); border-radius: 0 0 15px 15px; position: relative; z-index: 10; } .portal-header__top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .logo { display: flex; align-items: center; gap: 10px; } .logo-icon { width: 30px; height: 30px; background-color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--primary); font-weight: bold; font-size: 14px; } .logo-text { font-weight: 600; letter-spacing: 0.5px; } .user-info { display: flex; align-items: center; gap: 10px; cursor: pointer; padding: 8px 12px; border-radius: 20px; transition: background-color var(--anim-duration); } .user-info:hover { background-color: rgba(255, 255, 255, 0.1); } .user-avatar { width: 32px; height: 32px; border-radius: 50%; background-color: var(--primary-light); display: flex; align-items: center; justify-content: center; font-weight: bold; color: white; font-size: 14px; border: 2px solid white; } .greeting { font-size: 14px; opacity: 0.9; } .tab-bar { display: flex; justify-content: space-between; background-color: rgba(255, 255, 255, 0.15); border-radius: 12px; padding: 4px; position: relative; margin-top: 10px; } .tab-bar__indicator { position: absolute; height: calc(100% - 8px); width: calc(33.333% - 6px); background-color: white; border-radius: 10px; top: 4px; left: 4px; transition: transform var(--anim-duration) cubic-bezier(0.34, 1.56, 0.64, 1); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .tab-bar__btn { flex: 1; padding: 12px 0; text-align: center; color: rgba(255, 255, 255, 0.8); font-weight: 500; border: none; background: transparent; cursor: pointer; position: relative; z-index: 2; transition: color var(--anim-duration); border-radius: 10px; display: flex; flex-direction: column; align-items: center; gap: 4px; } .tab-bar__btn.active { color: var(--primary-dark); } .tab-bar__btn i { font-size: 18px; display: block; margin-bottom: 4px; } .tab-bar__btn::after { content: ""; position: absolute; bottom: -4px; left: 50%; transform: translateX(-50%); width: 4px; height: 4px; background-color: white; border-radius: 50%; opacity: 0; transition: opacity var(--anim-duration); } .tab-bar__btn.active::after { opacity: 1; } .tab-bar__label { font-size: 12px; letter-spacing: 0.5px; font-weight: 500; } .tab-bar__icon { font-size: 16px; height: 20px; display: flex; align-items: center; justify-content: center; } .tab-content { flex: 1; overflow: hidden; padding: 20px; position: relative; } .tab-panel { position: absolute; top: 0; left: 0; width: 100%; height: 100%; padding: 20px; opacity: 0; transform: translateX(20px); transition: opacity var(--anim-duration), transform var(--anim-duration); pointer-events: none; overflow-y: auto; } .tab-panel.active { opacity: 1; transform: translateX(0); pointer-events: all; } .section-title { font-size: 18px; font-weight: 600; color: var(--primary-dark); margin-bottom: 16px; display: flex; align-items: center; justify-content: space-between; } .action-btn { font-size: 12px; background-color: var(--primary-light); color: white; border: none; padding: 6px 12px; border-radius: 20px; cursor: pointer; transition: background-color var(--anim-duration); } .action-btn:hover { background-color: var(--primary); } .card { background-color: var(--card-bg); border-radius: 12px; padding: 16px; margin-bottom: 16px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); transition: transform var(--anim-duration), box-shadow var(--anim-duration); cursor: pointer; position: relative; overflow: hidden; } .card:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); } .card:active { transform: translateY(0); } .card::before { content: ""; position: absolute; top: 0; left: 0; width: 4px; height: 100%; background-color: var(--primary); } .card--urgent::before { background-color: var(--error); } .card--success::before { background-color: var(--success); } .card--warning::before { background-color: var(--warning); } .card__header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 12px; } .card__title { font-weight: 600; font-size: 15px; color: var(--text); } .card__subtitle { margin-top: 4px; font-size: 13px; color: var(--text-light); } .card__status { font-size: 12px; padding: 4px 8px; border-radius: 12px; font-weight: 500; } .status--confirmed { background-color: rgba(76, 175, 80, 0.15); color: var(--success); } .status--pending { background-color: rgba(255, 152, 0, 0.15); color: var(--warning); } .status--urgent { background-color: rgba(244, 67, 54, 0.15); color: var(--error); } .status--normal { background-color: rgba(25, 118, 210, 0.15); color: var(--primary); } .status--abnormal { background-color: rgba(244, 67, 54, 0.15); color: var(--error); } .card__meta { display: flex; gap: 8px; margin-top: 12px; } .meta-item { display: flex; align-items: center; gap: 4px; font-size: 12px; color: var(--text-light); } .card__actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 12px; } .card__btn { background-color: transparent; border: 1px solid var(--border); padding: 6px 12px; border-radius: 6px; font-size: 12px; cursor: pointer; transition: background-color var(--anim-duration); } .card__btn:hover { background-color: rgba(0, 0, 0, 0.05); } .card__btn--primary { background-color: var(--primary); color: white; border: none; } .card__btn--primary:hover { background-color: var(--primary-dark); } .message-preview { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 13px; color: var(--text-light); margin-top: 8px; } .lab-result { display: flex; align-items: center; gap: 16px; margin-top: 12px; } .result-item { flex: 1; text-align: center; } .result-value { font-size: 16px; font-weight: 600; margin-bottom: 4px; } .result-label { font-size: 12px; color: var(--text-light); } .value--normal { color: var(--success); } .value--abnormal { color: var(--error); } .empty-state { text-align: center; padding: 40px 0; color: var(--text-light); } .empty-icon { font-size: 40px; margin-bottom: 16px; color: var(--primary-light); } .notification-badge { position: absolute; top: -2px; right: -2px; background-color: var(--error); color: white; font-size: 10px; width: 16px; height: 16px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; } .pulse { animation: pulse 2s infinite; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(244, 67, 54, 0.4); } 70% { box-shadow: 0 0 0 6px rgba(244, 67, 54, 0); } 100% { box-shadow: 0 0 0 0 rgba(244, 67, 54, 0); } } .quick-actions { display: flex; gap: 12px; margin-bottom: 20px; overflow-x: auto; padding-bottom: 8px; -ms-overflow-style: none; scrollbar-width: none; } .quick-actions::-webkit-scrollbar { display: none; } .quick-action { min-width: 100px; flex: 1; background-color: white; border-radius: 10px; padding: 12px; text-align: center; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); cursor: pointer; transition: transform var(--anim-duration), box-shadow var(--anim-duration); border: 1px solid var(--border); } .quick-action:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); } .quick-action__icon { width: 32px; height: 32px; background-color: rgba(25, 118, 210, 0.1); border-radius: 8px; display: flex; align-items: center; justify-content: center; margin: 0 auto 8px; color: var(--primary); } .quick-action__label { font-size: 12px; font-weight: 500; } /* Responsive Adjustments */ @media (max-width: 500px) { .portal-header { padding: 16px; } .tab-content { padding: 16px; } .tab-panel { padding: 16px; } .card { padding: 12px; } } </style> </head> <body> <header class="portal-header"> <div class="portal-header__top"> <div class="logo"> <div class="logo-icon">M</div> <div class="logo-text">MedConnect</div> </div> <div class="user-info"> <div class="user-avatar">JS</div> <div> <div class="greeting">Welcome back,</div> <div>Jennifer Smith</div> </div> </div> </div> <nav class="tab-bar"> <div class="tab-bar__indicator" id="tab-indicator"></div> <button class="tab-bar__btn active" data-tab="appointments"> <div class="tab-bar__icon">📅</div> <span class="tab-bar__label">Appointments</span> </button> <button class="tab-bar__btn" data-tab="lab-results"> <div class="tab-bar__icon">🔬</div> <span class="tab-bar__label">Lab Results</span> </button> <button class="tab-bar__btn" data-tab="messages"> <div class="tab-bar__icon" style="position: relative"> 📨 <div class="notification-badge pulse">3</div> </div> <span class="tab-bar__label">Messages</span> </button> </nav> </header> <main class="tab-content"> <section class="tab-panel active" id="appointments"> <div class="section-title"> <span>Your Appointments</span> <button class="action-btn">Request New</button> </div> <div class="quick-actions"> <div class="quick-action"> <div class="quick-action__icon">📝</div> <div class="quick-action__label">Schedule</div> </div> <div class="quick-action"> <div class="quick-action__icon">⏱️</div> <div class="quick-action__label">Check-in</div> </div> <div class="quick-action"> <div class="quick-action__icon">🧾</div> <div class="quick-action__label">History</div> </div> <div class="quick-action"> <div class="quick-action__icon">❓</div> <div class="quick-action__label">Help</div> </div> </div> <div class="card"> <div class="card__header"> <div> <div class="card__title">Cardiology Follow-Up</div> <div class="card__subtitle">Dr. Emily Chen, Cardiology</div> </div> <span class="card__status status--confirmed">Confirmed</span> </div> <div class="card__meta"> <div class="meta-item"> <span>📅</span> <span>Tomorrow, 10:30 AM</span> </div> <div class="meta-item"> <span>📍</span> <span>Main Campus, Room 305</span> </div> </div> <div class="card__actions"> <button class="card__btn">Reschedule</button> <button class="card__btn card__btn--primary">Check-in Online</button> </div> </div> <div class="card card--warning"> <div class="card__header"> <div> <div class="card__title">Annual Physical Exam</div> <div class="card__subtitle">Dr. Robert Lee, Primary Care</div> </div> <span class="card__status status--pending">Pending Confirmation</span> </div> <div class="card__meta"> <div class="meta-item"> <span>📅</span> <span>August 24, 2023, 9:00 AM</span> </div> <div class="meta-item"> <span>📍</span> <span>North Wing, Room 112</span> </div> </div> <div class="card__actions"> <button class="card__btn">Cancel</button> <button class="card__btn card__btn--primary">Confirm</button> </div> </div> <div class="card card--success"> <div class="card__header"> <div> <div class="card__title">Telemedicine Consultation</div> <div class="card__subtitle">Dr. Sophia Williams, Dermatology</div> </div> <span class="card__status status--confirmed">Confirmed</span> </div> <div class="card__meta"> <div class="meta-item"> <span>📅</span> <span>August 30, 2023, 2:15 PM</span> </div> <div class="meta-item"> <span>💻</span> <span>Virtual Visit</span> </div> </div> <div class="card__actions"> <button class="card__btn">Instructions</button> <button class="card__btn card__btn--primary">Join Meeting</button> </div> </div> </section> <section class="tab-panel" id="lab-results"> <div class="section-title"> <span>Lab Results</span> <button class="action-btn">Filter</button> </div> <div class="card card--urgent"> <div class="card__header"> <div> <div class="card__title">Comprehensive Metabolic Panel</div> <div class="card__subtitle">Ordered by Dr. Robert Lee</div> </div> <span class="card__status status--urgent">Attention Needed</span> </div> <div class="lab-result"> <div class="result-item"> <div class="result-value value--abnormal">143 mg/dL</div> <div class="result-label">Glucose (70-99)</div> </div> <div class="result-item"> <div class="result-value value--normal">0.9 mg/dL</div> <div class="result-label">Creatinine (0.6-1.2)</div> </div> <div class="result-item"> <div class="result-value value--normal">142 mEq/L</div> <div class="result-label">Sodium (135-145)</div> </div> </div> <div class="card__meta"> <div class="meta-item"> <span>📅</span> <span>Collected: August 2, 2023</span> </div> <div class="meta-item"> <span>🕓</span> <span>Resulted: August 3, 2023</span> </div> </div> <div class="card__actions"> <button class="card__btn">Download PDF</button> <button class="card__btn card__btn--primary">Schedule Follow-up</button> </div> </div> <div class="card"> <div class="card__header"> <div> <div class="card__title">Complete Blood Count (CBC)</div> <div class="card__subtitle">Ordered by Dr. Emily Chen</div> </div> <span class="card__status status--normal">Normal</span> </div> <div class="lab-result"> <div class="result-item"> <div class="result-value value--normal">14.2 g/dL</div> <div class="result-label">Hemoglobin (12-16)</div> </div> <div class="result-item"> <div class="result-value value--normal">5.2 x10^6/μL</div> <div class="result-label">RBC (4.2-5.4)</div> </div> <div class="result-item"> <div class="result-value value--normal">7.5 x10^3/μL</div> <div class="result-label">WBC (4.5-11.0)</div> </div> </div> <div class="card__meta"> <div class="meta-item"> <span>📅</span> <span>Collected: July 15, 2023</span> </div> <div class="meta-item"> <span>🕓</span> <span>Resulted: July 16, 2023</span> </div> </div> <div class="card__actions"> <button class="card__btn">Download PDF</button> <button class="card__btn">View Trends</button> </div> </div> <div class="card"> <div class="card__header"> <div> <div class="card__title">Lipid Panel</div> <div class="card__subtitle">Ordered by Dr. Robert Lee</div> </div> <span class="card__status status--abnormal">High Cholesterol</span> </div> <div class="lab-result"> <div class="result-item"> <div class="result-value value--abnormal">225 mg/dL</div> <div class="result-label">Total Cholesterol (<200)</div> </div> <div class="result-item"> <div class="result-value value--normal">45 mg/dL</div> <div class="result-label">HDL (>40)</div> </div> <div class="result-item"> <div class="result-value value--abnormal">155 mg/dL</div> <div class="result-label">LDL (<100)</div> </div> </div> <div class="card__meta"> <div class="meta-item"> <span>📅</span> <span>Collected: June 28, 2023</span> </div> <div class="meta-item"> <span>🕓</span> <span>Resulted: June 29, 2023</span> </div> </div> <div class="card__actions"> <button class="card__btn">Download PDF</button> <button class="card__btn">View Diet Plan</button> </div> </div> </section> <section class="tab-panel" id="messages"> <div class="section-title"> <span>Messages</span> <button class="action-btn">New Message</button> </div> <div class="card card--urgent"> <div class="card__header"> <div> <div class="card__title">Lab Results Follow-up Required</div> <div class="card__subtitle">From: Dr. Robert Lee, Primary Care</div> </div> <span class="card__status status--urgent">Urgent</span> </div> <div class="message-preview"> Hi Jennifer, I've reviewed your recent lab results and noticed your glucose levels are elevated. Please call the office to schedule a follow-up appointment so we can discuss management options... </div> <div class="card__meta"> <div class="meta-item"> <span>📅</span> <span>Today, 9:45 AM</span> </div> <div class="meta-item"> <span>🔄</span> <span>Action Required</span> </div> </div> <div class="card__actions"> <button class="card__btn">Mark as Read</button> <button class="card__btn card__btn--primary">Reply</button> </div> </div> <div class="card"> <div class="card__header"> <div> <div class="card__title">Prescription Refill Approved</div> <div class="card__subtitle">From: Pharmacy Services</div> </div> <span class="card__status status--confirmed">Information</span> </div> <div class="message-preview"> Your prescription refill request for Lisinopril 10mg has been approved. The medication will be ready for pickup at your preferred pharmacy (Walgreens #247) by 5:00 PM today... </div> <div class="card__meta"> <div class="meta-item"> <span>📅</span> <span>Today, 8:32 AM</span> </div> <div class="meta-item"> <span>💊</span> <span>Prescription</span> </div> </div> <div class="card__actions"> <button class="card__btn">Mark as Read</button> <button class="card__btn">View Details</button> </div> </div> <div class="card"> <div class="card__header"> <div> <div class="card__title">Your Cardiology Appointment Reminder</div> <div class="card__subtitle">From: Appointment Scheduling</div> </div> <span class="card__status status--confirmed">Reminder</span> </div> <div class="message-preview"> This is a reminder that you have a cardiology follow-up appointment with Dr. Emily Chen tomorrow at 10:30 AM. Please arrive 15 minutes early to complete any necessary paperwork... </div> <div class="card__meta"> <div class="meta-item"> <span>📅</span> <span>Yesterday, 2:15 PM</span> </div> <div class="meta-item"> <span>⏰</span> <span>Appointment</span> </div> </div> <div class="card__actions"> <button class="card__btn">Mark as Read</button> <button class="card__btn">Set Reminder</button> </div> </div> </section> </main> <script> document.addEventListener('DOMContentLoaded', function() { const tabButtons = document.querySelectorAll('.tab-bar__btn'); const tabPanels = document.querySelectorAll('.tab-panel'); const tabIndicator = document.getElementById('tab-indicator'); function setActiveTab(tabId) { // Update active tab button tabButtons.forEach(btn => { if (btn.dataset.tab === tabId) { btn.classList.add('active'); } else { btn.classList.remove('active'); } }); // Update active tab panel tabPanels.forEach(panel => { if (panel.id === tabId) { panel.classList.add('active'); } else { panel.classList.remove('active'); } }); // Move the indicator const activeIndex = Array.from(tabButtons).findIndex(btn => btn.dataset.tab === tabId); tabIndicator.style.transform = `translateX(${activeIndex * 100}%)`; } // Add click events to tab buttons tabButtons.forEach(button => { button.addEventListener('click', () => { setActiveTab(button.dataset.tab); // If it's the messages tab, remove notification badge when clicked if (button.dataset.tab === 'messages') { const badge = button.querySelector('.notification-badge'); if (badge) { badge.classList.remove('pulse'); setTimeout(() => { badge.style.display = 'none'; }, 300); } } }); }); // Card hover effect with subtle animation const cards = document.querySelectorAll('.card'); cards.forEach(card => { card.addEventListener('mouseenter', function() { this.style.transition = 'transform 0.3s, box-shadow 0.3s'; }); card.addEventListener('mouseleave', function() { this.style.transition = 'transform 0.3s, box-shadow 0.3s'; }); }); // Make action buttons interactive const actionButtons = document.querySelectorAll('.action-btn, .card__btn'); actionButtons.forEach(button => { button.addEventListener('click', function(e) { e.stopPropagation(); // Add ripple effect const ripple = document.createElement('span'); ripple.classList.add('ripple'); this.appendChild(ripple); const rect = this.getBoundingClientRect(); const size = Math.max(rect.width, rect.height); ripple.style.width = ripple.style.height = size + 'px'; ripple.style.left = (e.clientX - rect.left - size/2) + 'px'; ripple.style.top = (e.clientY - rect.top - size/2) + 'px'; setTimeout(() => { ripple.remove(); }, 600); // Show feedback that button was clicked this.style.transform = 'scale(0.98)'; setTimeout(() => { this.style.transform = 'scale(1)'; }, 150); }); }); // Add interaction for quick actions const quickActions = document.querySelectorAll('.quick-action'); quickActions.forEach(action => { action.addEventListener('click', function() { // Quick feedback animation this.style.transform = 'scale(0.95)'; setTimeout(() => { this.style.transform = ''; }, 150); }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Financial Dashboard</title> <style> :root { --primary: #2c6bed; --primary-light: #3f7efa; --secondary: #12b886; --danger: #fa5252; --warning: #fd7e14; --info: #15aabf; --dark: #212529; --light: #f8f9fa; --gray: #6c757d; --gray-light: #e9ecef; --border-radius: 10px; --box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); --transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } body { background-color: #f5f7fa; color: var(--dark); display: flex; flex-direction: column; min-height: 100vh; padding: 20px; max-width: 700px; margin: 0 auto; } .dashboard { background-color: white; border-radius: var(--border-radius); box-shadow: var(--box-shadow); overflow: hidden; position: relative; height: 660px; display: flex; flex-direction: column; } .header { padding: 24px; position: relative; z-index: 10; display: flex; justify-content: space-between; align-items: center; } .header-pattern { position: absolute; top: 0; left: 0; right: 0; height: 140px; background: linear-gradient(120deg, var(--primary), var(--primary-light)); z-index: 1; opacity: 0.08; background-image: radial-gradient(circle at 20% 30%, rgba(255, 255, 255, 0.2) 0%, transparent 8%), radial-gradient(circle at 75% 44%, rgba(255, 255, 255, 0.2) 0%, transparent 10%), radial-gradient(circle at 46% 65%, rgba(255, 255, 255, 0.2) 0%, transparent 12%); } .header h1 { font-size: 1.5rem; font-weight: 600; margin-bottom: 4px; } .header p { color: var(--gray); font-size: 0.875rem; } .balance-card { background: linear-gradient(120deg, var(--primary), var(--primary-light)); border-radius: var(--border-radius); padding: 24px; color: white; margin: 0 24px 24px; position: relative; z-index: 10; box-shadow: 0 8px 16px rgba(44, 107, 237, 0.16); overflow: hidden; } .balance-pattern { position: absolute; top: 0; right: 0; bottom: 0; left: 0; background-image: radial-gradient(circle at 20% 30%, rgba(255, 255, 255, 0.1) 0%, transparent 8%), radial-gradient(circle at 75% 44%, rgba(255, 255, 255, 0.1) 0%, transparent 10%), radial-gradient(circle at 46% 65%, rgba(255, 255, 255, 0.1) 0%, transparent 12%); z-index: -1; } .balance-label { font-size: 0.875rem; opacity: 0.9; margin-bottom: 8px; display: block; } .balance-amount { font-size: 2rem; font-weight: 700; margin-bottom: 16px; display: block; } .balance-stats { display: flex; justify-content: space-between; align-items: center; margin-top: 16px; } .stat { flex: 1; } .stat-label { font-size: 0.75rem; opacity: 0.8; margin-bottom: 4px; } .stat-value { font-size: 1rem; font-weight: 600; } .stat-trend { display: inline-flex; align-items: center; font-size: 0.75rem; margin-left: 4px; padding: 2px 6px; border-radius: 12px; background-color: rgba(255, 255, 255, 0.15); } .positive { color: #a3ffdc; } .negative { color: #ffa3a3; } .tabs { display: flex; background-color: var(--light); border-radius: var(--border-radius); padding: 4px; margin: 0 24px 20px; position: relative; z-index: 10; } .tab { flex: 1; padding: 12px; text-align: center; font-size: 0.875rem; font-weight: 500; color: var(--gray); cursor: pointer; border-radius: calc(var(--border-radius) - 4px); transition: var(--transition); position: relative; overflow: hidden; user-select: none; } .tab.active { color: var(--primary); font-weight: 600; background-color: white; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); } .tab:hover:not(.active) { background-color: rgba(255, 255, 255, 0.5); } .tab::after { content: ''; position: absolute; top: 0; left: 50%; transform: translateX(-50%) scale(0); width: 100%; height: 100%; background: radial-gradient(circle, rgba(44, 107, 237, 0.1) 0%, transparent 70%); opacity: 0; transition: transform 0.4s ease, opacity 0.4s ease; pointer-events: none; border-radius: inherit; } .tab:active::after { transform: translateX(-50%) scale(1.5); opacity: 1; transition: transform 0.2s ease, opacity 0.1s ease; } .tab-content { flex: 1; overflow-y: auto; padding: 0 24px 24px; } .content-section:not(.active) { display: none; } .spending-item { display: flex; align-items: center; padding: 16px; border-radius: var(--border-radius); margin-bottom: 10px; background-color: white; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); transition: var(--transition); position: relative; overflow: hidden; } .spending-item:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); } .spending-icon { display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 12px; margin-right: 16px; } .icon-shopping { background-color: rgba(253, 126, 20, 0.1); color: var(--warning); } .icon-food { background-color: rgba(21, 170, 191, 0.1); color: var(--info); } .icon-transport { background-color: rgba(250, 82, 82, 0.1); color: var(--danger); } .icon-utilities { background-color: rgba(18, 184, 134, 0.1); color: var(--secondary); } .icon-entertainment { background-color: rgba(44, 107, 237, 0.1); color: var(--primary); } .spending-details { flex: 1; } .spending-name { font-size: 0.875rem; font-weight: 500; margin-bottom: 4px; } .spending-date { font-size: 0.75rem; color: var(--gray); } .spending-amount { font-weight: 600; font-size: 0.875rem; } .progress-container { margin-bottom: 24px; } .progress-heading { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .progress-title { font-size: 0.875rem; font-weight: 500; } .progress-value { font-size: 0.75rem; color: var(--gray); display: flex; align-items: center; } .progress-bar { height: 8px; background-color: var(--gray-light); border-radius: 4px; overflow: hidden; } .progress-fill { height: 100%; border-radius: 4px; transition: width 1s cubic-bezier(0.34, 1.56, 0.64, 1); } .fill-warning { background-color: var(--warning); } .fill-danger { background-color: var(--danger); } .fill-info { background-color: var(--info); } .fill-secondary { background-color: var(--secondary); } .fill-primary { background-color: var(--primary); } .account-card { background-color: white; border-radius: var(--border-radius); padding: 16px; margin-bottom: 12px; display: flex; justify-content: space-between; align-items: center; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); transition: var(--transition); } .account-card:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); } .account-info { display: flex; align-items: center; } .account-icon { width: 48px; height: 48px; border-radius: 12px; margin-right: 16px; display: flex; align-items: center; justify-content: center; background-color: var(--gray-light); } .account-details h3 { font-size: 0.9rem; font-weight: 500; margin-bottom: 4px; } .account-number { font-size: 0.75rem; color: var(--gray); } .account-balance { font-weight: 600; } .budget-status { display: flex; align-items: center; gap: 4px; font-size: 0.75rem; } .budget-progress { display: inline-block; width: 8px; height: 8px; border-radius: 50%; } .on-track { background-color: var(--secondary); } .warning { background-color: var(--warning); } .over-budget { background-color: var(--danger); } .notification-button { position: relative; background: transparent; border: none; cursor: pointer; padding: 8px; color: var(--dark); } .notification-dot { position: absolute; top: 6px; right: 6px; width: 8px; height: 8px; border-radius: 50%; background-color: var(--danger); } .profile-button { width: 36px; height: 36px; border-radius: 50%; background-color: #e9f0ff; display: flex; align-items: center; justify-content: center; color: var(--primary); font-weight: bold; border: none; cursor: pointer; transition: var(--transition); } .profile-button:hover { background-color: #d0e0ff; } .month-selector { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; background-color: white; border-radius: var(--border-radius); margin-bottom: 16px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); } .month-selector span { font-weight: 500; } .month-nav { display: flex; gap: 8px; } .month-button { width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; border-radius: 50%; border: none; background-color: var(--gray-light); color: var(--gray); cursor: pointer; transition: var(--transition); font-size: 0.75rem; } .month-button:hover { background-color: var(--primary-light); color: white; } .budget-overview { margin-bottom: 20px; } .budget-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .budget-header h2 { font-size: 1rem; font-weight: 600; } .action-link { font-size: 0.75rem; color: var(--primary); text-decoration: none; transition: var(--transition); } .action-link:hover { color: var(--primary-light); text-decoration: underline; } .hint-text { font-size: 0.75rem; color: var(--gray); margin-top: 8px; display: block; } .spending-breakdown { text-align: center; padding: 24px; background-color: white; border-radius: var(--border-radius); margin-bottom: 20px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); } .breakdown-chart { width: 100%; height: 200px; margin: 20px 0; position: relative; } .chart-container { position: relative; width: 160px; height: 160px; margin: 0 auto; } .chart-segment { position: absolute; width: 100%; height: 100%; clip-path: polygon(50% 50%, 50% 0%, 100% 0%, 100% 100%, 0% 100%, 0% 0%, 50% 0%); transform-origin: 50% 50%; transition: transform 0.4s ease; } .chart-segment:hover { transform: translateX(5px) translateY(-5px); } .chart-center { position: absolute; width: 60%; height: 60%; top: 20%; left: 20%; background-color: white; border-radius: 50%; display: flex; flex-direction: column; align-items: center; justify-content: center; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) inset; } .chart-total { font-size: 1.25rem; font-weight: 700; margin-bottom: 4px; color: var(--dark); } .chart-label { font-size: 0.75rem; color: var(--gray); } .legend { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 16px; } .legend-item { display: flex; align-items: center; gap: 8px; font-size: 0.75rem; } .legend-color { width: 12px; height: 12px; border-radius: 4px; } .legend-text { display: flex; flex-direction: column; align-items: flex-start; text-align: left; } .legend-value { font-weight: 500; } .bills-due { padding: 16px; background-color: white; border-radius: var(--border-radius); margin-bottom: 20px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); } .bills-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } .bills-header h2 { font-size: 1rem; font-weight: 600; } .bill-item { display: flex; justify-content: space-between; align-items: center; padding: 12px 0; border-bottom: 1px solid var(--gray-light); } .bill-item:last-child { border-bottom: none; } .bill-info { display: flex; flex-direction: column; } .bill-name { font-size: 0.875rem; font-weight: 500; margin-bottom: 4px; } .bill-date { font-size: 0.75rem; color: var(--gray); } .bill-amount { font-weight: 600; font-size: 0.875rem; } .bill-status { font-size: 0.75rem; padding: 4px 8px; border-radius: 4px; margin-left: 8px; } .upcoming { background-color: rgba(44, 107, 237, 0.1); color: var(--primary); } .overdue { background-color: rgba(250, 82, 82, 0.1); color: var(--danger); } .paid { background-color: rgba(18, 184, 134, 0.1); color: var(--secondary); } /* Animation effects */ @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .animated-fade-in { animation: fadeIn 0.4s ease forwards; } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } .pulse-animation { animation: pulse 2s infinite; } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } .shimmer-effect { background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.5) 50%, rgba(255, 255, 255, 0) 100%); background-size: 200% 100%; animation: shimmer 1.5s infinite; } /* Scrollbar styling */ .tab-content::-webkit-scrollbar { width: 4px; } .tab-content::-webkit-scrollbar-track { background: var(--gray-light); border-radius: 10px; } .tab-content::-webkit-scrollbar-thumb { background: var(--gray); border-radius: 10px; } .tab-content::-webkit-scrollbar-thumb:hover { background: var(--primary); } /* Responsive adjustments */ @media (max-width: 480px) { .balance-card { padding: 20px; } .balance-amount { font-size: 1.75rem; } .legend { grid-template-columns: repeat(2, 1fr); } .tab { padding: 10px 8px; font-size: 0.8rem; } } </style> </head> <body> <div class="dashboard"> <div class="header-pattern"></div> <div class="header"> <div> <h1>Financial Dashboard</h1> <p>Welcome back, Alex</p> </div> <div style="display: flex; gap: 10px;"> <button class="notification-button"> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path> <path d="M13.73 21a2 2 0 0 1-3.46 0"></path> </svg> <span class="notification-dot"></span> </button> <button class="profile-button">A</button> </div> </div> <div class="balance-card"> <div class="balance-pattern"></div> <span class="balance-label">Total Balance</span> <span class="balance-amount">$12,846.35</span> <div class="balance-stats"> <div class="stat"> <div class="stat-label">Income</div> <div class="stat-value">$4,235.78 <span class="stat-trend positive">+2.5%</span></div> </div> <div class="stat"> <div class="stat-label">Expenses</div> <div class="stat-value">$1,675.40 <span class="stat-trend negative">+4.3%</span></div> </div> </div> </div> <div class="tabs"> <div class="tab active" data-tab="overview">Overview</div> <div class="tab" data-tab="spending">Spending</div> <div class="tab" data-tab="budgets">Budgets</div> <div class="tab" data-tab="accounts">Accounts</div> </div> <div class="tab-content"> <!-- Overview Tab --> <div class="content-section active" id="overview"> <div class="month-selector"> <span>November 2023</span> <div class="month-nav"> <button class="month-button"> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="15 18 9 12 15 6"></polyline> </svg> </button> <button class="month-button"> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </button> </div> </div> <div class="spending-breakdown"> <h2 class="progress-title">Monthly Spending Breakdown</h2> <div class="breakdown-chart"> <div class="chart-container"> <div class="chart-segment" style="background-color: var(--warning); transform: rotate(0deg); clip-path: polygon(50% 50%, 50% 0%, 100% 0%, 100% 50%, 50% 50%);"></div> <div class="chart-segment" style="background-color: var(--info); transform: rotate(72deg); clip-path: polygon(50% 50%, 50% 0%, 85% 35%, 50% 50%);"></div> <div class="chart-segment" style="background-color: var(--danger); transform: rotate(108deg); clip-path: polygon(50% 50%, 50% 0%, 75% 75%, 50% 50%);"></div> <div class="chart-segment" style="background-color: var(--secondary); transform: rotate(180deg); clip-path: polygon(50% 50%, 50% 0%, 20% 20%, 50% 50%);"></div> <div class="chart-segment" style="background-color: var(--primary); transform: rotate(240deg); clip-path: polygon(50% 50%, 50% 0%, 0% 30%, 50% 50%);"></div> <div class="chart-center"> <span class="chart-total">$1,675.40</span> <span class="chart-label">Total Spent</span> </div> </div> </div> <div class="legend"> <div class="legend-item"> <div class="legend-color" style="background-color: var(--warning);"></div> <div class="legend-text"> <span>Shopping</span> <span class="legend-value">$487.25</span> </div> </div> <div class="legend-item"> <div class="legend-color" style="background-color: var(--info);"></div> <div class="legend-text"> <span>Food</span> <span class="legend-value">$328.91</span> </div> </div> <div class="legend-item"> <div class="legend-color" style="background-color: var(--danger);"></div> <div class="legend-text"> <span>Transport</span> <span class="legend-value">$215.62</span> </div> </div> <div class="legend-item"> <div class="legend-color" style="background-color: var(--secondary);"></div> <div class="legend-text"> <span>Utilities</span> <span class="legend-value">$352.40</span> </div> </div> <div class="legend-item"> <div class="legend-color" style="background-color: var(--primary);"></div> <div class="legend-text"> <span>Entertainment</span> <span class="legend-value">$291.22</span> </div> </div> </div> </div> <div class="bills-due"> <div class="bills-header"> <h2>Upcoming Bills</h2> <a href="#" class="action-link">View All</a> </div> <div class="bill-item"> <div class="bill-info"> <span class="bill-name">Electricity Bill</span> <span class="bill-date">Due in 3 days</span> </div> <div style="display: flex; align-items: center;"> <span class="bill-amount">$82.40</span> <span class="bill-status upcoming">Upcoming</span> </div> </div> <div class="bill-item"> <div class="bill-info"> <span class="bill-name">Internet Subscription</span> <span class="bill-date">Due tomorrow</span> </div> <div style="display: flex; align-items: center;"> <span class="bill-amount">$59.99</span> <span class="bill-status upcoming">Upcoming</span> </div> </div> <div class="bill-item"> <div class="bill-info"> <span class="bill-name">Credit Card Payment</span> <span class="bill-date">Overdue by 2 days</span> </div> <div style="display: flex; align-items: center;"> <span class="bill-amount">$320.15</span> <span class="bill-status overdue">Overdue</span> </div> </div> </div> </div> <!-- Spending Tab --> <div class="content-section" id="spending"> <div class="month-selector"> <span>November 2023</span> <div class="month-nav"> <button class="month-button"> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="15 18 9 12 15 6"></polyline> </svg> </button> <button class="month-button"> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </button> </div> </div> <div class="budget-header"> <h2>Recent Transactions</h2> <a href="#" class="action-link">All Transactions</a> </div> <div class="spending-item"> <div class="spending-icon icon-shopping"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path> <line x1="3" y1="6" x2="21" y2="6"></line> <path d="M16 10a4 4 0 0 1-8 0"></path> </svg> </div> <div class="spending-details"> <div class="spending-name">Amazon.com</div> <div class="spending-date">Nov 15, 2023</div> </div> <div class="spending-amount">-$86.42</div> </div> <div class="spending-item"> <div class="spending-icon icon-food"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path> </svg> </div> <div class="spending-details"> <div class="spending-name">Sushi Express</div> <div class="spending-date">Nov 14, 2023</div> </div> <div class="spending-amount">-$42.15</div> </div> <div class="spending-item"> <div class="spending-icon icon-transport"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect x="1" y="3" width="15" height="13"></rect> <polygon points="16 8 20 8 23 11 23 16 16 16 16 8"></polygon> <circle cx="5.5" cy="18.5" r="2.5"></circle> <circle cx="18.5" cy="18.5" r="2.5"></circle> </svg> </div> <div class="spending-details"> <div class="spending-name">Uber</div> <div class="spending-date">Nov 14, 2023</div> </div> <div class="spending-amount">-$24.50</div> </div> <div class="spending-item"> <div class="spending-icon icon-entertainment"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon> </svg> </div> <div class="spending-details"> <div class="spending-name">Cinema Tickets</div> <div class="spending-date">Nov 12, 2023</div> </div> <div class="spending-amount">-$38.00</div> </div> <div class="spending-item"> <div class="spending-icon icon-utilities"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M22 12h-4l-3 9L9 3l-3 9H2"></path> </svg> </div> <div class="spending-details"> <div class="spending-name">Water Bill</div> <div class="spending-date">Nov 10, 2023</div> </div> <div class="spending-amount">-$45.90</div> </div> </div> <!-- Budgets Tab --> <div class="content-section" id="budgets"> <div class="budget-overview"> <div class="budget-header"> <h2>Monthly Budget Overview</h2> <a href="#" class="action-link">Adjust Budgets</a> </div> <div class="progress-container"> <div class="progress-heading"> <span class="progress-title">Shopping</span> <span class="progress-value"> <span class="budget-status"> <span class="budget-progress warning"></span> At risk </span> $487.25 / $500.00 </span> </div> <div class="progress-bar"> <div class="progress-fill fill-warning" style="width: 97%"></div> </div> <span class="hint-text">You've used 97% of your Shopping budget</span> </div> <div class="progress-container"> <div class="progress-heading"> <span class="progress-title">Food</span> <span class="progress-value"> <span class="budget-status"> <span class="budget-progress on-track"></span> On track </span> $328.91 / $400.00 </span> </div> <div class="progress-bar"> <div class="progress-fill fill-info" style="width: 82%"></div> </div> </div> <div class="progress-container"> <div class="progress-heading"> <span class="progress-title">Transport</span> <span class="progress
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>DataFlow SaaS Navigation</title> <style> @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); :root { --primary: #121212; --secondary: #222222; --text-primary: #f8f8f8; --text-secondary: #a0a0a0; --accent: #6366f1; --accent-alt: #4f46e5; --transition-timing: cubic-bezier(0.16, 1, 0.3, 1); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; } body { background-color: var(--primary); color: var(--text-primary); display: flex; flex-direction: column; align-items: center; justify-content: flex-start; min-height: 100vh; padding: 2rem 1rem; overflow-x: hidden; } .container { width: 100%; max-width: 700px; display: flex; flex-direction: column; gap: 2rem; } header { display: flex; justify-content: space-between; align-items: center; padding-bottom: 1.5rem; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .logo { display: flex; align-items: center; gap: 0.75rem; font-weight: 700; font-size: 1.5rem; } .logo-icon { width: 32px; height: 32px; background: linear-gradient(135deg, var(--accent), var(--accent-alt)); border-radius: 8px; display: flex; align-items: center; justify-content: center; } .tab-navigation { width: 100%; background-color: var(--secondary); border-radius: 12px; padding: 0.5rem; position: relative; overflow: hidden; } .tab-list { display: flex; list-style: none; position: relative; } .tab-indicator { position: absolute; height: 40px; border-radius: 8px; background-color: var(--accent); transition: all 0.4s var(--transition-timing); z-index: 1; box-shadow: 0 4px 20px rgba(99, 102, 241, 0.3); } .tab-item { flex: 1; height: 40px; position: relative; z-index: 2; } .tab-button { width: 100%; height: 100%; background: transparent; border: none; color: var(--text-secondary); font-weight: 500; cursor: pointer; position: relative; transition: color 0.3s ease; border-radius: 8px; font-size: 0.95rem; } .tab-button.active { color: white; } .content { padding: 2rem; background-color: var(--secondary); border-radius: 12px; min-height: 400px; position: relative; overflow: hidden; } .tab-content { position: absolute; top: 0; left: 0; width: 100%; height: 100%; padding: 2rem; opacity: 0; transform: translateY(20px); transition: all 0.5s var(--transition-timing); pointer-events: none; } .tab-content.active { opacity: 1; transform: translateY(0); pointer-events: all; } h2 { margin-bottom: 1.5rem; font-size: 1.75rem; font-weight: 600; display: flex; align-items: center; gap: 0.75rem; } h2 .icon { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; background-color: rgba(99, 102, 241, 0.15); border-radius: 8px; color: var(--accent); } p { color: var(--text-secondary); line-height: 1.6; margin-bottom: 1.5rem; } .demo-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1rem; margin-top: 1.5rem; } .demo-card { background-color: rgba(255, 255, 255, 0.05); border-radius: 10px; padding: 1.25rem; transition: transform 0.3s ease, background-color 0.3s ease; cursor: pointer; border: 1px solid rgba(255, 255, 255, 0.05); } .demo-card:hover { transform: translateY(-5px); background-color: rgba(255, 255, 255, 0.08); border-color: rgba(99, 102, 241, 0.3); } .demo-card h3 { font-size: 1rem; margin-bottom: 0.5rem; color: var(--text-primary); } .demo-card p { font-size: 0.85rem; margin-bottom: 0; } .pricing-table { width: 100%; border-collapse: collapse; margin-top: 1.5rem; } .pricing-table th { text-align: left; padding: 1rem; font-weight: 500; color: var(--text-primary); border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .pricing-table td { padding: 1rem; color: var(--text-secondary); border-bottom: 1px solid rgba(255, 255, 255, 0.05); } .pricing-table .highlight { color: var(--accent); font-weight: 600; } .pricing-table tr:last-child td { border-bottom: none; } .testimonial-cards { display: flex; flex-direction: column; gap: 1rem; margin-top: 1rem; } .testimonial-card { background-color: rgba(255, 255, 255, 0.05); border-radius: 10px; padding: 1.5rem; position: relative; } .testimonial-card::before { content: """; position: absolute; top: 1rem; right: 1.5rem; font-size: 4rem; color: rgba(99, 102, 241, 0.2); font-family: serif; line-height: 1; } .testimonial-quote { font-style: italic; margin-bottom: 1rem; position: relative; z-index: 1; } .testimonial-author { display: flex; align-items: center; gap: 0.75rem; } .author-avatar { width: 40px; height: 40px; border-radius: 50%; background-color: var(--accent); display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 1rem; color: white; } .author-info h4 { font-size: 0.95rem; margin-bottom: 0.25rem; } .author-info p { font-size: 0.85rem; margin-bottom: 0; } .btn { background-color: var(--accent); color: white; border: none; padding: 0.75rem 1.5rem; border-radius: 8px; font-weight: 500; cursor: pointer; transition: background-color 0.3s ease, transform 0.2s ease; display: inline-flex; align-items: center; gap: 0.5rem; } .btn:hover { background-color: var(--accent-alt); transform: translateY(-2px); } .btn .icon { font-size: 1.25rem; } @media (max-width: 600px) { .container { padding: 1rem; } .content { padding: 1.5rem; min-height: 450px; } .tab-content { padding: 1.5rem; } .demo-cards { grid-template-columns: 1fr; } .tab-button { font-size: 0.85rem; } } /* Animation effects */ @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } .pulse-animation { animation: pulse 2s infinite; } .feature-tag { display: inline-block; padding: 0.35rem 0.75rem; background-color: rgba(99, 102, 241, 0.15); color: var(--accent); border-radius: 20px; font-size: 0.75rem; font-weight: 600; margin-bottom: 1rem; } </style> </head> <body> <div class="container"> <header> <div class="logo"> <div class="logo-icon">DF</div> <span>DataFlow</span> </div> </header> <nav class="tab-navigation"> <div class="tab-indicator"></div> <ul class="tab-list"> <li class="tab-item"> <button class="tab-button active" data-tab="demos">Interactive Demos</button> </li> <li class="tab-item"> <button class="tab-button" data-tab="pricing">Pricing Tiers</button> </li> <li class="tab-item"> <button class="tab-button" data-tab="testimonials">Client Stories</button> </li> </ul> </nav> <div class="content"> <section id="demos" class="tab-content active"> <span class="feature-tag">New Features</span> <h2><span class="icon">⚡</span> Interactive Demos</h2> <p>Experience DataFlow's powerful features firsthand through our curated demos. Each demo showcases specific capabilities tailored to common data workflow challenges.</p> <div class="demo-cards"> <div class="demo-card"> <h3>Data Pipeline Orchestration</h3> <p>Visually construct complex data workflows with zero code required.</p> </div> <div class="demo-card pulse-animation"> <h3>Real-Time Analytics</h3> <p>Monitor streaming data sources with sub-second latency dashboards.</p> </div> <div class="demo-card"> <h3>AI Data Enrichment</h3> <p>Enhance datasets with ML-powered classification and predictions.</p> </div> </div> <button class="btn" style="margin-top: 2rem;"> <span class="icon">▶</span> Launch Demo Console </button> </section> <section id="pricing" class="tab-content"> <span class="feature-tag">Flexible Options</span> <h2><span class="icon">💎</span> Pricing Tiers</h2> <p>Transparent, predictable pricing designed to scale with your data needs. All plans include our core platform capabilities with tiered access to advanced features.</p> <table class="pricing-table"> <thead> <tr> <th>Plan</th> <th>Data Processing</th> <th>Users</th> <th>Price</th> </tr> </thead> <tbody> <tr> <td>Starter</td> <td>5TB / month</td> <td>Up to 5</td> <td class="highlight">$1,990/mo</td> </tr> <tr> <td>Professional</td> <td>20TB / month</td> <td>Up to 15</td> <td class="highlight">$4,990/mo</td> </tr> <tr> <td>Enterprise</td> <td>Unlimited</td> <td>Unlimited</td> <td class="highlight">Custom</td> </tr> </tbody> </table> <button class="btn" style="margin-top: 2rem;"> <span class="icon">📊</span> Calculate Your Costs </button> </section> <section id="testimonials" class="tab-content"> <span class="feature-tag">Success Stories</span> <h2><span class="icon">💬</span> Client Testimonials</h2> <p>See how leading organizations have transformed their data operations with DataFlow's enterprise-grade platform.</p> <div class="testimonial-cards"> <div class="testimonial-card"> <p class="testimonial-quote">DataFlow reduced our ETL pipeline development time by 78% while handling 3x the data volume we processed with our previous solution.</p> <div class="testimonial-author"> <div class="author-avatar">AR</div> <div class="author-info"> <h4>Alex Rodriguez</h4> <p>Data Engineering Lead, TechCore</p> </div> </div> </div> <div class="testimonial-card"> <p class="testimonial-quote">The real-time analytics capabilities have completely transformed how we respond to market shifts. What used to take days now happens in seconds.</p> <div class="testimonial-author"> <div class="author-avatar">JP</div> <div class="author-info"> <h4>Jennifer Park</h4> <p>VP of Analytics, FinanceStream</p> </div> </div> </div> </div> <button class="btn" style="margin-top: 2rem;"> <span class="icon">📘</span> View All Case Studies </button> </section> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const tabButtons = document.querySelectorAll('.tab-button'); const tabContents = document.querySelectorAll('.tab-content'); const tabIndicator = document.querySelector('.tab-indicator'); // Initialize tab indicator position positionIndicator(document.querySelector('.tab-button.active')); tabButtons.forEach(button => { button.addEventListener('click', function() { // Remove active class from all buttons and content tabButtons.forEach(btn => btn.classList.remove('active')); tabContents.forEach(content => content.classList.remove('active')); // Add active class to clicked button and corresponding content this.classList.add('active'); const tabId = this.getAttribute('data-tab'); document.getElementById(tabId).classList.add('active'); // Update indicator position positionIndicator(this); }); }); function positionIndicator(activeButton) { const parentLeft = activeButton.parentElement.parentElement.offsetLeft; const buttonLeft = activeButton.parentElement.offsetLeft; const buttonWidth = activeButton.parentElement.offsetWidth; tabIndicator.style.width = `${buttonWidth}px`; tabIndicator.style.left = `${buttonLeft - parentLeft}px`; } // Handle window resize for responsive indicator window.addEventListener('resize', function() { positionIndicator(document.querySelector('.tab-button.active')); }); // Add hover effect to demo cards for additional interactivity const demoCards = document.querySelectorAll('.demo-card'); demoCards.forEach(card => { card.addEventListener('mouseenter', function() { demoCards.forEach(otherCard => { if (otherCard !== card) { otherCard.style.opacity = '0.6'; } }); }); card.addEventListener('mouseleave', function() { demoCards.forEach(otherCard => { otherCard.style.opacity = '1'; }); }); }); }); </script> </body> </html>