Tabs are a fundamental component in modern web design, offering a seamless way to organize content and enhance user experience. They allow users to navigate through different sections without leaving the current page.
In this article, we will explore 10 exemplary tab designs that showcase both functionality and aesthetic appeal. These examples will inspire you to create intuitive and visually pleasing interfaces for your 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
Designing your own tabs has never been easier with Subframe. Its drag-and-drop interface and intuitive, responsive canvas ensure you create pixel-perfect UI every time. Loved by designers and developers alike, Subframe makes the design process seamless and efficient.
Start for free and experience the difference 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 tabs, in minutes. Its drag-and-drop editor ensures efficiency and precision.
Don't wait! Start for free and begin designing stunning UIs right away.
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>E-commerce Product Tabs</title> <style> :root { --primary: #2a2a2a; --secondary: #f5f5f5; --accent: #6e5ef7; --text: #333333; --light-text: #777777; --border: #e0e0e0; --transition: all 0.3s cubic-bezier(0.25, 1, 0.5, 1); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } body { background-color: white; color: var(--text); display: flex; justify-content: center; align-items: center; min-height: 700px; padding: 20px; } .product-container { width: 100%; max-width: 650px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05); border-radius: 16px; overflow: hidden; background: white; } .product-header { padding: 24px; display: flex; align-items: center; border-bottom: 1px solid var(--border); } .product-image { width: 90px; height: 90px; border-radius: 12px; object-fit: cover; margin-right: 20px; background: var(--secondary); } .product-title { font-size: 1.4rem; font-weight: 600; margin-bottom: 8px; color: var(--primary); } .product-price { font-size: 1.1rem; font-weight: 500; color: var(--accent); display: flex; align-items: center; } .original-price { text-decoration: line-through; color: var(--light-text); font-size: 0.9rem; margin-left: 8px; } .discount-badge { background: rgba(110, 94, 247, 0.1); color: var(--accent); padding: 4px 8px; border-radius: 4px; font-size: 0.8rem; font-weight: 600; margin-left: 10px; } .tabs { display: flex; border-bottom: 1px solid var(--border); position: relative; background: white; } .tab { padding: 16px 24px; font-weight: 500; color: var(--light-text); cursor: pointer; transition: var(--transition); position: relative; user-select: none; flex: 1; text-align: center; } .tab:hover { color: var(--accent); } .tab.active { color: var(--accent); } .indicator { position: absolute; bottom: -1px; height: 3px; width: 0; background: var(--accent); transition: var(--transition); border-radius: 3px 3px 0 0; } .tab-content { padding: 24px; display: none; animation: fadeIn 0.5s ease forwards; min-height: 360px; } .tab-content.active { display: block; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .detail-section { margin-bottom: 20px; } .detail-title { font-weight: 600; margin-bottom: 8px; font-size: 0.95rem; color: var(--primary); } .detail-content { font-size: 0.9rem; line-height: 1.6; color: var(--light-text); } .specs-table { width: 100%; border-collapse: collapse; font-size: 0.9rem; } .specs-table tr:nth-child(odd) { background-color: var(--secondary); } .specs-table td { padding: 10px 12px; } .specs-table td:first-child { font-weight: 500; width: 40%; } .review { padding: 16px 0; border-bottom: 1px solid var(--border); } .review:last-child { border-bottom: none; } .review-header { display: flex; justify-content: space-between; margin-bottom: 12px; } .reviewer { font-weight: 500; font-size: 0.95rem; } .stars { display: flex; gap: 4px; } .star { color: var(--accent); font-size: 0.9rem; } .review-date { font-size: 0.8rem; color: var(--light-text); } .review-text { font-size: 0.9rem; line-height: 1.6; color: var(--text); } .related-items { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .related-item { border-radius: 8px; overflow: hidden; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); transition: var(--transition); } .related-item:hover { transform: translateY(-5px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.08); } .related-item-img { width: 100%; height: 120px; object-fit: cover; background: var(--secondary); } .related-item-info { padding: 12px; } .related-item-name { font-size: 0.9rem; font-weight: 500; margin-bottom: 4px; color: var(--primary); } .related-item-price { font-size: 0.85rem; color: var(--accent); font-weight: 600; } .badge { display: inline-block; background: #ff7a501a; color: #ff7a50; padding: 4px 8px; border-radius: 4px; font-size: 0.7rem; font-weight: 600; margin-left: 6px; } .see-more { margin-top: 20px; text-align: center; } .see-more-btn { background: none; border: 1px solid var(--border); padding: 8px 16px; border-radius: 6px; font-size: 0.85rem; color: var(--light-text); cursor: pointer; transition: var(--transition); } .see-more-btn:hover { background: var(--accent); color: white; border-color: var(--accent); } .cta-wrapper { margin-top: 30px; display: flex; gap: 12px; } .cta-btn { flex: 1; padding: 12px; border: none; border-radius: 8px; font-weight: 500; font-size: 0.9rem; cursor: pointer; transition: var(--transition); } .add-to-cart { background: var(--accent); color: white; } .add-to-cart:hover { background: #5a4ad3; } .wishlist { background: white; color: var(--primary); border: 1px solid var(--border); } .wishlist:hover { background: var(--secondary); } .detail-list { list-style: none; padding-left: 0; } .detail-list li { position: relative; padding-left: 20px; margin-bottom: 8px; font-size: 0.9rem; line-height: 1.6; color: var(--light-text); } .detail-list li::before { content: ''; position: absolute; left: 0; top: 8px; width: 6px; height: 6px; border-radius: 50%; background: var(--accent); } .color-options { display: flex; gap: 10px; margin-top: 12px; } .color-option { width: 24px; height: 24px; border-radius: 50%; cursor: pointer; transition: var(--transition); position: relative; } .color-option.selected::after { content: ''; position: absolute; inset: -4px; border: 2px solid var(--accent); border-radius: 50%; } .stock-status { display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 0.8rem; font-weight: 600; background: #e6f7ed; color: #34c471; margin-left: 10px; } @media (max-width: 500px) { .product-container { border-radius: 12px; } .product-header { flex-direction: column; align-items: flex-start; } .product-image { margin-right: 0; margin-bottom: 16px; } .tabs { overflow-x: auto; -webkit-overflow-scrolling: touch; } .tab { flex: none; padding: 16px 18px; white-space: nowrap; } .related-items { grid-template-columns: 1fr; } } </style> </head> <body> <div class="product-container"> <div class="product-header"> <img src="https://images.unsplash.com/photo-1505740420928-5e560c06d30e" alt="Sony WH-1000XM5" class="product-image"> <div> <h1 class="product-title">Sony WH-1000XM5</h1> <div class="product-price"> $349.99 <span class="original-price">$399.99</span> <span class="discount-badge">Save 12%</span> <span class="stock-status">In Stock</span> </div> </div> </div> <div class="tabs"> <div class="tab active" data-tab="details">Details</div> <div class="tab" data-tab="specs">Specifications</div> <div class="tab" data-tab="reviews">Reviews</div> <div class="tab" data-tab="related">Related</div> <div class="indicator"></div> </div> <div class="tab-content active" id="details"> <div class="detail-section"> <h3 class="detail-title">Product Overview</h3> <p class="detail-content">Sony's WH-1000XM5 wireless headphones redefine noise cancellation with next-generation technology. Engineered for immersive audio, they deliver exceptional sound clarity and unprecedented comfort for all-day wear.</p> </div> <div class="detail-section"> <h3 class="detail-title">Key Features</h3> <ul class="detail-list"> <li>Industry-leading noise cancellation with two processors and eight microphones</li> <li>30-hour battery life with quick charging (3 hours from just 3 minutes)</li> <li>Precise Voice Pickup technology for crystal-clear calls</li> <li>Multipoint connection allows simultaneous pairing with two Bluetooth devices</li> <li>Comfortable, lightweight design with soft-fit leather</li> </ul> </div> <div class="detail-section"> <h3 class="detail-title">Available Colors</h3> <div class="color-options"> <div class="color-option selected" style="background-color: #2a2a2a;" data-color="Black"></div> <div class="color-option" style="background-color: #f0f0f0;" data-color="Silver"></div> <div class="color-option" style="background-color: #bea99c;" data-color="Midnight Blue"></div> </div> </div> <div class="cta-wrapper"> <button class="cta-btn add-to-cart">Add to Cart</button> <button class="cta-btn wishlist">Add to Wishlist</button> </div> </div> <div class="tab-content" id="specs"> <table class="specs-table"> <tr> <td>Driver Unit</td> <td>30mm, dome type (CCAW Voice coil)</td> </tr> <tr> <td>Frequency Response</td> <td>4Hz-40,000Hz</td> </tr> <tr> <td>DSEE Extreme</td> <td>Yes (AI upscaling)</td> </tr> <tr> <td>Noise Cancelling</td> <td>Integrated Processor V1 & HD Noise Cancelling Processor QN1</td> </tr> <tr> <td>Battery Life</td> <td>30 hrs (NC ON), 40 hrs (NC OFF)</td> </tr> <tr> <td>Charging Time</td> <td>3.5 hours (Full charge via USB-C)</td> </tr> <tr> <td>Bluetooth Version</td> <td>5.2</td> </tr> <tr> <td>Supported Audio Formats</td> <td>SBC, AAC, LDAC</td> </tr> <tr> <td>Weight</td> <td>250g</td> </tr> <tr> <td>Warranty</td> <td>2-year manufacturer warranty</td> </tr> </table> </div> <div class="tab-content" id="reviews"> <div class="review"> <div class="review-header"> <div class="reviewer">Alex Thompson</div> <div class="stars"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> </div> </div> <div class="review-date">Verified Purchase · June 15, 2023</div> <p class="review-text">The noise cancellation on these is truly next level. I work in a busy office and these completely block out ambient chatter. Sound quality is exceptional with balanced highs and deep, rich bass. Battery life exceeds expectations - got 32 hours on a single charge.</p> </div> <div class="review"> <div class="review-header"> <div class="reviewer">Mira Patel</div> <div class="stars"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star" style="color: #ddd;">★</span> </div> </div> <div class="review-date">Verified Purchase · April 28, 2023</div> <p class="review-text">Incredibly comfortable for long wear. I regularly use these for 6+ hours and forget they're on my head. The multipoint connection is game-changing for switching between my laptop and phone. Only drawback is the case size is a bit bulky for travel.</p> </div> <div class="review"> <div class="review-header"> <div class="reviewer">James Liu</div> <div class="stars"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> </div> </div> <div class="review-date">Verified Purchase · May 3, 2023</div> <p class="review-text">The call quality is exceptional. I take client calls while walking on busy streets and they never know I'm not in an office. The voice isolation tech is impressive. Worth every penny for business professionals.</p> </div> <div class="see-more"> <button class="see-more-btn">View All 247 Reviews</button> </div> </div> <div class="tab-content" id="related"> <div class="related-items"> <div class="related-item"> <img src="https://images.unsplash.com/photo-1600086827875-a63b01f1335c" alt="Sony WF-1000XM4" class="related-item-img"> <div class="related-item-info"> <div class="related-item-name">Sony WF-1000XM4 Earbuds</div> <div class="related-item-price">$248.99 <span class="badge">Hot</span></div> </div> </div> <div class="related-item"> <img src="https://images.unsplash.com/photo-1606144042614-b2417e99c4e3" alt="Sony SRS-XG500" class="related-item-img"> <div class="related-item-info"> <div class="related-item-name">Sony SRS-XG500 Speaker</div> <div class="related-item-price">$298.00</div> </div> </div> <div class="related-item"> <img src="https://images.unsplash.com/photo-1572536147248-ac59a8abfa4b" alt="Sony WH-CH710N" class="related-item-img"> <div class="related-item-info"> <div class="related-item-name">Sony WH-CH710N Headphones</div> <div class="related-item-price">$149.99</div> </div> </div> <div class="related-item"> <img src="https://images.unsplash.com/photo-1590658268037-6bf12165a8df" alt="Sony LinkBuds S" class="related-item-img"> <div class="related-item-info"> <div class="related-item-name">Sony LinkBuds S</div> <div class="related-item-price">$179.99 <span class="badge">New</span></div> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const tabs = document.querySelectorAll('.tab'); const tabContents = document.querySelectorAll('.tab-content'); const indicator = document.querySelector('.indicator'); // Set initial indicator position setIndicatorPosition(document.querySelector('.tab.active')); tabs.forEach(tab => { tab.addEventListener('click', () => { // Remove active class from all tabs and contents tabs.forEach(t => t.classList.remove('active')); tabContents.forEach(content => content.classList.remove('active')); // Add active class to clicked tab and corresponding content tab.classList.add('active'); const tabId = tab.getAttribute('data-tab'); document.getElementById(tabId).classList.add('active'); // Move indicator setIndicatorPosition(tab); }); }); // Color options functionality const colorOptions = document.querySelectorAll('.color-option'); colorOptions.forEach(option => { option.addEventListener('click', () => { colorOptions.forEach(o => o.classList.remove('selected')); option.classList.add('selected'); }); }); // Add to Cart animation const addToCartBtn = document.querySelector('.add-to-cart'); addToCartBtn.addEventListener('click', function() { this.innerHTML = 'Added to Cart ✓'; this.style.background = '#34c471'; setTimeout(() => { this.innerHTML = 'Add to Cart'; this.style.background = ''; }, 2000); }); // Add to Wishlist animation const wishlistBtn = document.querySelector('.wishlist'); wishlistBtn.addEventListener('click', function() { this.innerHTML = 'Added to Wishlist ♥'; this.style.color = '#ff4757'; setTimeout(() => { this.innerHTML = 'Add to Wishlist'; this.style.color = ''; }, 2000); }); // Function to set indicator position function setIndicatorPosition(activeTab) { indicator.style.width = `${activeTab.offsetWidth}px`; indicator.style.left = `${activeTab.offsetLeft}px`; } // Recalculate indicator position on window resize window.addEventListener('resize', () => { setIndicatorPosition(document.querySelector('.tab.active')); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Enterprise Analytics Dashboard</title> <style> :root { --primary: #1a73e8; --primary-light: #4285f4; --secondary: #34a853; --gray-dark: #2c3e50; --gray: #546e7a; --gray-light: #eceff1; --white: #ffffff; --shadow: 0 2px 10px rgba(0, 0, 0, 0.1); --shadow-hover: 0 4px 15px rgba(0, 0, 0, 0.15); --transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background-color: #f5f7fa; color: var(--gray-dark); height: 100vh; display: flex; flex-direction: column; overflow: hidden; } .dashboard-container { max-width: 700px; height: 700px; margin: 0 auto; background-color: var(--white); border-radius: 8px; box-shadow: var(--shadow); display: flex; flex-direction: column; overflow: hidden; } .dashboard-header { padding: 20px; background-color: var(--white); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); display: flex; justify-content: space-between; align-items: center; z-index: 10; } .company-info { display: flex; align-items: center; } .logo { width: 40px; height: 40px; margin-right: 15px; border-radius: 50%; background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%); display: flex; align-items: center; justify-content: center; color: var(--white); font-weight: bold; font-size: 16px; } .title h1 { font-size: 18px; font-weight: 600; margin-bottom: 2px; } .title p { font-size: 12px; color: var(--gray); } .user-info { display: flex; align-items: center; } .user-avatar { width: 35px; height: 35px; border-radius: 50%; background-color: var(--gray-light); display: flex; align-items: center; justify-content: center; margin-left: 15px; color: var(--gray-dark); font-weight: 600; cursor: pointer; transition: var(--transition); } .user-avatar:hover { transform: scale(1.05); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); } .tab-container { position: relative; width: 100%; } .tabs { display: flex; background-color: var(--white); padding: 0 20px; position: relative; overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none; } .tabs::-webkit-scrollbar { display: none; } .tab { padding: 16px 20px; min-width: fit-content; text-align: center; color: var(--gray); font-weight: 500; font-size: 14px; position: relative; cursor: pointer; transition: var(--transition); display: flex; align-items: center; white-space: nowrap; } .tab i { margin-right: 8px; font-size: 18px; } .tab::after { content: ''; position: absolute; bottom: 0; left: 0; width: 100%; height: 3px; background-color: transparent; transition: var(--transition); } .tab.active { color: var(--primary); } .tab.active::after { background-color: var(--primary); } .tab:hover { color: var(--primary-light); } .tab:hover .tab-preview { opacity: 1; transform: translateY(0); pointer-events: auto; } .tab-preview { position: absolute; top: 100%; left: 0; width: 220px; padding: 15px; background-color: var(--white); border-radius: 6px; box-shadow: var(--shadow-hover); z-index: 100; opacity: 0; transform: translateY(10px); transition: var(--transition); pointer-events: none; } .tab-preview h4 { margin-bottom: 8px; font-size: 14px; color: var(--gray-dark); } .preview-data { margin-bottom: 8px; } .preview-item { display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px; font-size: 12px; } .preview-item span:first-child { color: var(--gray); } .preview-item span:last-child { font-weight: 500; } .tab-content { flex: 1; padding: 25px; overflow-y: auto; display: none; } .tab-content.active { display: block; } .panel-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; height: 100%; } .panel { background-color: var(--white); border-radius: 8px; box-shadow: var(--shadow); padding: 20px; position: relative; transition: var(--transition); overflow: hidden; } .panel:hover { box-shadow: var(--shadow-hover); transform: translateY(-2px); } .panel h3 { font-size: 16px; font-weight: 600; margin-bottom: 15px; display: flex; align-items: center; justify-content: space-between; } .panel h3 .refresh { cursor: pointer; font-size: 14px; color: var(--gray); transition: var(--transition); } .panel h3 .refresh:hover { color: var(--primary); transform: rotate(180deg); } .panel-full { grid-column: span 2; height: 250px; } .panel-half { height: 200px; } .kpi-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; } .kpi-item { background-color: var(--gray-light); border-radius: 6px; padding: 15px; transition: var(--transition); } .kpi-item:hover { transform: translateY(-2px); box-shadow: var(--shadow); } .kpi-label { font-size: 12px; color: var(--gray); margin-bottom: 6px; } .kpi-value { font-size: 22px; font-weight: 700; color: var(--gray-dark); display: flex; align-items: flex-end; } .kpi-value span { font-size: 12px; color: var(--secondary); font-weight: 500; margin-left: 8px; } .chart-container { position: relative; width: 100%; height: calc(100% - 40px); } .table-container { width: 100%; overflow-x: auto; height: calc(100% - 40px); } table { width: 100%; border-collapse: collapse; text-align: left; font-size: 14px; } th { padding: 8px 12px; border-bottom: 2px solid var(--gray-light); color: var(--gray); font-weight: 600; } td { padding: 10px 12px; border-bottom: 1px solid var(--gray-light); } tr:last-child td { border-bottom: none; } tr:hover td { background-color: rgba(66, 133, 244, 0.05); } .status { display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 12px; font-weight: 500; } .status.success { background-color: rgba(52, 168, 83, 0.1); color: var(--secondary); } .status.warning { background-color: rgba(251, 188, 5, 0.1); color: #fbbc05; } .status.error { background-color: rgba(234, 67, 53, 0.1); color: #ea4335; } .pulse { animation: pulse 2s infinite; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(26, 115, 232, 0.4); } 70% { box-shadow: 0 0 0 10px rgba(26, 115, 232, 0); } 100% { box-shadow: 0 0 0 0 rgba(26, 115, 232, 0); } } .sparkline { fill: none; stroke: var(--primary); stroke-width: 2; } .sparkline-area { fill: rgba(66, 133, 244, 0.1); stroke: none; } .notification-indicator { position: relative; display: inline-block; } .notification-indicator::after { content: ''; position: absolute; top: 0; right: 0; width: 8px; height: 8px; background-color: #ea4335; border-radius: 50%; border: 2px solid var(--white); } .loader { width: 20px; height: 20px; border: 2px solid rgba(66, 133, 244, 0.3); border-radius: 50%; border-top-color: var(--primary); animation: spin 1s linear infinite; display: inline-block; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Responsive adjustments */ @media (max-width: 600px) { .panel-grid { grid-template-columns: 1fr; } .panel-full { grid-column: span 1; } .kpi-grid { grid-template-columns: 1fr; } .tab { padding: 16px 15px; font-size: 13px; } .tab i { margin-right: 5px; } } /* Custom scrollbar styles */ .tab-content::-webkit-scrollbar { width: 8px; } .tab-content::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 10px; } .tab-content::-webkit-scrollbar-thumb { background: #d1d1d1; border-radius: 10px; } .tab-content::-webkit-scrollbar-thumb:hover { background: #b3b3b3; } /* Page transition animation */ @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .tab-content.active { animation: fadeIn 0.3s ease-out; } </style> </head> <body> <div class="dashboard-container"> <div class="dashboard-header"> <div class="company-info"> <div class="logo">D</div> <div class="title"> <h1>DataPulse Analytics</h1> <p>Enterprise Dashboard v2.4</p> </div> </div> <div class="user-info"> <div class="notification-indicator"> <i class="fas fa-bell" style="color: #546e7a; cursor: pointer;"></i> </div> <div class="user-avatar">SK</div> </div> </div> <div class="tab-container"> <div class="tabs"> <div class="tab active" data-tab="kpi"> <i class="fas fa-chart-line"></i> <span>Key Performance</span> <div class="tab-preview"> <h4>KPI Overview</h4> <div class="preview-data"> <div class="preview-item"> <span>Revenue Growth</span> <span>+24.8%</span> </div> <div class="preview-item"> <span>Monthly Users</span> <span>12.4M</span> </div> <div class="preview-item"> <span>Conversion Rate</span> <span>3.2%</span> </div> </div> </div> </div> <div class="tab" data-tab="reports"> <i class="fas fa-file-alt"></i> <span>Reports</span> <div class="tab-preview"> <h4>Recent Reports</h4> <div class="preview-data"> <div class="preview-item"> <span>Q3 Performance</span> <span>Updated 2h ago</span> </div> <div class="preview-item"> <span>Product Analytics</span> <span>Updated yesterday</span> </div> <div class="preview-item"> <span>Customer Segments</span> <span>Updated 3d ago</span> </div> </div> </div> </div> <div class="tab" data-tab="forecast"> <i class="fas fa-chart-pie"></i> <span>Forecast</span> <div class="tab-preview"> <h4>Forecast Insights</h4> <div class="preview-data"> <div class="preview-item"> <span>Q4 Projection</span> <span>$4.2M</span> </div> <div class="preview-item"> <span>Growth Trend</span> <span>Positive</span> </div> <div class="preview-item"> <span>Risk Factor</span> <span>Low</span> </div> </div> </div> </div> <div class="tab" data-tab="operations"> <i class="fas fa-cogs"></i> <span>Operations</span> <div class="tab-preview"> <h4>Operational Status</h4> <div class="preview-data"> <div class="preview-item"> <span>System Uptime</span> <span>99.98%</span> </div> <div class="preview-item"> <span>Active Incidents</span> <span>2</span> </div> <div class="preview-item"> <span>Resource Usage</span> <span>68%</span> </div> </div> </div> </div> <div class="tab" data-tab="customers"> <i class="fas fa-users"></i> <span>Customers</span> <div class="tab-preview"> <h4>Customer Metrics</h4> <div class="preview-data"> <div class="preview-item"> <span>Total Customers</span> <span>48,392</span> </div> <div class="preview-item"> <span>Acquisition Cost</span> <span>$42.18</span> </div> <div class="preview-item"> <span>Retention Rate</span> <span>87.4%</span> </div> </div> </div> </div> <div class="tab" data-tab="settings"> <i class="fas fa-cog"></i> <span>Settings</span> </div> </div> </div> <div class="tab-content active" id="kpi"> <div class="panel-grid"> <div class="panel panel-full"> <h3> Revenue Trends <i class="fas fa-sync-alt refresh"></i> </h3> <div class="chart-container" id="revenueChart"></div> </div> <div class="panel panel-half"> <h3> Key Metrics <i class="fas fa-sync-alt refresh"></i> </h3> <div class="kpi-grid"> <div class="kpi-item pulse"> <div class="kpi-label">Revenue</div> <div class="kpi-value">$1.24M <span>+12.4%</span></div> </div> <div class="kpi-item"> <div class="kpi-label">Customers</div> <div class="kpi-value">48,392 <span>+8.7%</span></div> </div> <div class="kpi-item"> <div class="kpi-label">Conversion</div> <div class="kpi-value">3.2% <span>+0.5%</span></div> </div> <div class="kpi-item"> <div class="kpi-label">Avg. Order</div> <div class="kpi-value">$122 <span>+4.2%</span></div> </div> </div> </div> <div class="panel panel-half"> <h3> System Status <i class="fas fa-sync-alt refresh"></i> </h3> <div class="table-container"> <table> <thead> <tr> <th>Service</th> <th>Status</th> <th>Load</th> </tr> </thead> <tbody> <tr> <td>API Gateway</td> <td><span class="status success">Operational</span></td> <td>42%</td> </tr> <tr> <td>Database Cluster</td> <td><span class="status success">Operational</span></td> <td>68%</td> </tr> <tr> <td>Storage Service</td> <td><span class="status warning">Degraded</span></td> <td>82%</td> </tr> <tr> <td>Authentication</td> <td><span class="status success">Operational</span></td> <td>31%</td> </tr> </tbody> </table> </div> </div> </div> </div> <div class="tab-content" id="reports"> <div class="panel-grid"> <div class="panel panel-half"> <h3> Recent Reports <i class="fas fa-sync-alt refresh"></i> </h3> <div class="table-container"> <table> <thead> <tr> <th>Report Name</th> <th>Last Updated</th> <th>Status</th> </tr> </thead> <tbody> <tr> <td>Q3 Performance Summary</td> <td>2 hours ago</td> <td><span class="status success">Complete</span></td> </tr> <tr> <td>Product Analytics</td> <td>Yesterday</td> <td><span class="status success">Complete</span></td> </tr> <tr> <td>Customer Segments</td> <td>3 days ago</td> <td><span class="status success">Complete</span></td> </tr> <tr> <td>Marketing Campaign ROI</td> <td>Just now</td> <td><div class="loader"></div></td> </tr> </tbody> </table> </div> </div> <div class="panel panel-half"> <h3> Report Generation <i class="fas fa-sync-alt refresh"></i> </h3> <div class="table-container"> <table> <thead> <tr> <th>Type</th> <th>Frequency</th> <th>Next Run</th> </tr> </thead> <tbody> <tr> <td>Sales Dashboard</td> <td>Daily</td> <td>4h 32m</td> </tr> <tr> <td>Inventory Status</td> <td>Daily</td> <td>4h 32m</td> </tr> <tr> <td>User Engagement</td> <td>Weekly</td> <td>3d 12h</td> </tr> <tr> <td>Financial Summary</td> <td>Monthly</td> <td>18d 6h</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-full"> <h3> Regional Sales Distribution <i class="fas fa-sync-alt refresh"></i> </h3> <div class="chart-container" id="regionChart"></div> </div> </div> </div> <div class="tab-content" id="forecast"> <div class="panel-grid"> <div class="panel panel-full"> <h3> Quarterly Forecast <i class="fas fa-sync-alt refresh"></i> </h3> <div class="chart-container" id="forecastChart"></div> </div> <div class="panel panel-half"> <h3> Prediction Accuracy <i class="fas fa-sync-alt refresh"></i> </h3> <div class="table-container"> <table> <thead> <tr> <th>Metric</th> <th>Prediction</th> <th>Actual</th> <th>Accuracy</th> </tr> </thead> <tbody> <tr> <td>Q2 Revenue</td> <td>$3.4M</td> <td>$3.6M</td> <td>94.4%</td> </tr> <tr> <td>Q2 New Users</td> <td>12,800</td> <td>14,327</td> <td>89.3%</td> </tr> <tr> <td>Q2 Churn Rate</td> <td>2.8%</td> <td>2.5%</td> <td>89.3%</td> </tr> <tr> <td>Q2 Acquisition</td> <td>$42.00</td> <td>$42.18</td> <td>99.6%</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-half"> <h3> Market Indicators <i class="fas fa-sync-alt refresh"></i> </h3> <div class="kpi-grid"> <div class="kpi-item"> <div class="kpi-label">Industry Growth</div> <div class="kpi-value">4.8% <span>Positive</span></div> </div> <div class="kpi-item"> <div class="kpi-label">Market Share</div> <div class="kpi-value">12.4% <span>+1.2%</span></div> </div> <div class="kpi-item"> <div class="kpi-label">Competitor Index</div> <div class="kpi-value">86 <span>Stable</span></div> </div> <div class="kpi-item"> <div class="kpi-label">Risk Factor</div> <div class="kpi-value">Low <span>Favorable</span></div> </div> </div> </div> </div> </div> <div class="tab-content" id="operations"> <div class="panel-grid"> <div class="panel panel-half"> <h3> System Health <i class="fas fa-sync-alt refresh"></i> </h3> <div class="kpi-grid"> <div class="kpi-item"> <div class="kpi-label">Uptime</div> <div class="kpi-value">99.98% <span>+0.01%</span></div> </div> <div class="kpi-item"> <div class="kpi-label">Response Time</div> <div class="kpi-value">82ms <span>-4ms</span></div> </div> <div class="kpi-item"> <div class="kpi-label">Error Rate</div> <div class="kpi-value">0.12% <span>-0.03%</span></div> </div> <div class="kpi-item"> <div class="kpi-label">CPU Usage</div> <div class="kpi-value">48% <span>Optimal</span></div> </div> </div> </div> <div class="panel panel-half"> <h3> Active Incidents <i class="fas fa-sync-alt refresh"></i> </h3> <div class="table-container"> <table> <thead> <tr> <th>ID</th> <th>Issue</th> <th>Priority</th> <th>Status</th> </tr> </thead> <tbody> <tr> <td>#4281</td> <td>Storage latency</td> <td>Medium</td> <td><span class="status warning">In Progress</span></td> </tr> <tr> <td>#4285</td> <td>API rate limiting</td> <td>Low</td> <td><span class="status warning">In Progress</span></td> </tr> <tr> <td>#4278</td> <td>Database index</td> <td>Low</td> <td><span class="status success">Resolved</span></td> </tr> <tr> <td>#4273</td> <td>Auth service issue</td> <td>High</td> <td><span class="status success">Resolved</span></td> </tr> </tbody> </table> </div> </div> <div class="panel panel-full"> <h3> Resource Usage Trends <i class="fas fa-sync-alt refresh"></i> </h3> <div class="chart-container" id="resourceChart"></div> </div> </div> </div> <div class="tab-content" id="customers"> <div class="panel-grid"> <div class="panel panel-full"> <h3> Customer Acquisition <i class="fas fa-sync-alt refresh"></i> </h3> <div class="chart-container" id="acquisitionChart"></div> </div> <div class="panel panel-half"> <h3> Customer Segments <i class="fas fa-sync-alt refresh"></i> </h3> <div class="chart-container" id="segmentChart"></div> </div> <div class="panel panel-half"> <h3> Top Customers <i class="fas fa-sync-alt refresh"></i> </h3> <div class="table-container"> <table> <thead> <tr> <th>Company</th> <th>Plan</th> <th>MRR</th> <th>Status</th> </tr> </thead> <tbody> <tr> <td>Acme Inc.</td> <td>Enterprise</td> <td>$12,400</td> <td><span class="status success">Active</span></td> </tr> <tr> <td>TechGlobe</td> <td>Enterprise</td> <td>$9,800</td> <td><span class="status success">Active</span></td> </tr> <tr> <td>Nexus Group</td> <td>Advanced</td> <td>$5,400</td> <td><span class="status warning">Pending</span></td> </tr> <tr> <td>Pinnacle Ltd.</td> <td>Advanced</td> <td>$4,800</td> <td><span class="status success">Active</span></td> </tr> </tbody> </table> </div> </div> </div> </div> <div class="tab-content" id="settings"> <div class="panel-grid"> <div class="panel panel-half"> <h3> Dashboard Settings <i class="fas fa-sync-alt refresh"></i> </h3> <div class="table-container"> <table> <thead> <tr> <th>Setting</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>Data Refresh Rate</td> <td>5 minutes</td> </tr> <tr> <td>Theme</td> <td>Light Mode</td> </tr> <tr> <td>Chart Animation</td> <td>Enabled</td> </tr> <tr> <td>Time Zone</td> <td>UTC-8 (Pacific)</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-half"> <h3> Notifications <i class="fas fa-sync-alt refresh"></i> </h3> <div class="table-container"> <table> <thead> <tr> <th>Alert Type</th> <th>Email</th> <th>In-App</th> </tr> </thead> <tbody> <tr> <td>System Alerts</td> <td>✓</td> <td>✓</td> </tr> <tr> <td>Report Generation</td> <td>✓</td> <td>✓</td> </tr> <tr> <td>KPI Thresholds</td> <td>✓</td> <td>✓</td> </tr> <tr> <td>User Activity</td> <td>-</td> <td>✓</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-full"> <h3> API Integration Status <i class="fas fa-sync-alt refresh"></i> </h3> <div class="table-container"> <table> <thead> <tr> <th>Service</th> <th>Status</th> <th>Last Sync</th> <th>API Version</th> </tr> </thead> <tbody> <tr> <td>Sales CRM</td> <td><span class="status success">Connected</span></td> <td>10 min ago</td> <td>v2.4.1</td> </tr> <tr> <td>Inventory System</td> <td><span class="status success">Connected</span></td> <td>12 min ago</td> <td>v1.8.0</td> </tr> <tr> <td>Financial Services</td> <td><span class="status success">Connected</span></td> <td>25 min ago</td> <td>v3.2.0</td> </tr> <tr> <td>Marketing Platform</td> <td><span class="status error">Disconnected</span></td> <td>2h ago</td> <td>v2.1.5</td> </tr>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Banking App Navigation</title> <style> :root { --primary-gradient: linear-gradient(135deg, #4F46E5, #06B6D4); --secondary-gradient: linear-gradient(135deg, #3B82F6, #10B981); --tertiary-gradient: linear-gradient(135deg, #8B5CF6, #EC4899); --accent-color: #F9FAFB; --dark-color: #1F2937; --light-gray: #F3F4F6; --medium-gray: #E5E7EB; --tab-height: 70px; --tab-radius: 16px; --content-height: 530px; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; -webkit-tap-highlight-color: transparent; } body { display: flex; justify-content: center; align-items: center; min-height: 100vh; background-color: #f5f5f5; padding: 20px; overflow-x: hidden; } .app-container { width: 100%; max-width: 400px; height: 700px; background-color: white; border-radius: 28px; overflow: hidden; position: relative; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1); } .content-area { height: var(--content-height); overflow-y: auto; padding: 20px; position: relative; } .content-section { display: none; height: 100%; opacity: 0; transform: translateY(10px); transition: opacity 0.4s ease, transform 0.4s ease; } .content-section.active { display: block; opacity: 1; transform: translateY(0); } .navigation-tabs { position: absolute; bottom: 0; left: 0; width: 100%; height: 100px; display: flex; justify-content: space-around; padding: 0 15px; background-color: white; border-top-left-radius: 24px; border-top-right-radius: 24px; box-shadow: 0 -5px 20px rgba(0, 0, 0, 0.05); z-index: 100; } .tab { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding-top: 10px; cursor: pointer; position: relative; overflow: hidden; transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); } .tab:active { transform: scale(0.95); } .tab-icon { width: 26px; height: 26px; margin-bottom: 5px; position: relative; z-index: 2; transition: transform 0.3s ease; } .tab-label { font-size: 12px; font-weight: 600; color: var(--dark-color); opacity: 0.7; margin-bottom: 10px; position: relative; z-index: 2; transition: opacity 0.3s ease, transform 0.3s ease; } .tab.active .tab-icon { transform: translateY(-5px); } .tab.active .tab-label { opacity: 1; transform: translateY(-5px); } .tab-background { position: absolute; top: 0; left: 0; width: 100%; height: 0; border-radius: 0 0 50% 50%; transition: height 0.3s ease; z-index: 1; opacity: 0; } .tab.active .tab-background { height: 130px; opacity: 0.1; } .tab-indicator { position: absolute; top: 8px; left: 50%; transform: translateX(-50%); width: 5px; height: 5px; border-radius: 50%; opacity: 0; transition: opacity 0.3s ease; } .tab.active .tab-indicator { opacity: 1; } /* Account Section Styling */ .account-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 30px; } .greeting { font-size: 24px; font-weight: 700; color: var(--dark-color); } .profile-pic { width: 40px; height: 40px; border-radius: 50%; background: var(--primary-gradient); display: flex; align-items: center; justify-content: center; color: white; font-weight: 700; box-shadow: 0 4px 10px rgba(79, 70, 229, 0.3); } .balance-card { background: var(--primary-gradient); border-radius: 20px; padding: 25px; color: white; margin-bottom: 25px; box-shadow: 0 10px 15px rgba(79, 70, 229, 0.2); position: relative; overflow: hidden; } .balance-label { font-size: 14px; opacity: 0.9; margin-bottom: 10px; } .balance-amount { font-size: 32px; font-weight: 700; margin-bottom: 25px; } .card-actions { display: flex; gap: 10px; } .action-button { background-color: rgba(255, 255, 255, 0.15); border-radius: 12px; padding: 10px 15px; font-size: 13px; font-weight: 600; display: flex; align-items: center; gap: 8px; cursor: pointer; transition: background-color 0.3s ease; } .action-button:hover { background-color: rgba(255, 255, 255, 0.25); } .action-button i { font-size: 16px; } .card-pattern { position: absolute; top: 10px; right: 10px; width: 100px; height: 100px; opacity: 0.1; background-image: radial-gradient(circle, rgba(255,255,255,0.8) 1px, transparent 1px); background-size: 12px 12px; } .quick-actions { display: grid; grid-template-columns: repeat(4, 1fr); gap: 15px; margin-bottom: 25px; } .quick-action { display: flex; flex-direction: column; align-items: center; gap: 8px; } .action-icon { width: 50px; height: 50px; border-radius: 15px; display: flex; align-items: center; justify-content: center; background-color: var(--light-gray); color: var(--dark-color); font-size: 20px; transition: transform 0.2s ease, box-shadow 0.2s ease; } .quick-action:nth-child(1) .action-icon { background-color: rgba(79, 70, 229, 0.1); color: #4F46E5; } .quick-action:nth-child(2) .action-icon { background-color: rgba(6, 182, 212, 0.1); color: #06B6D4; } .quick-action:nth-child(3) .action-icon { background-color: rgba(59, 130, 246, 0.1); color: #3B82F6; } .quick-action:nth-child(4) .action-icon { background-color: rgba(236, 72, 153, 0.1); color: #EC4899; } .quick-action:active .action-icon { transform: scale(0.9); } .action-label { font-size: 12px; color: var(--dark-color); font-weight: 500; } .section-title { font-size: 18px; font-weight: 700; color: var(--dark-color); margin-bottom: 15px; } .recent-transaction { display: flex; align-items: center; justify-content: space-between; padding: 15px; background-color: var(--light-gray); border-radius: 15px; margin-bottom: 10px; transition: transform 0.2s ease; cursor: pointer; } .recent-transaction:active { transform: scale(0.98); } .transaction-details { display: flex; align-items: center; gap: 12px; } .transaction-icon { width: 40px; height: 40px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 18px; } .income { background-color: rgba(16, 185, 129, 0.1); color: #10B981; } .expense { background-color: rgba(239, 68, 68, 0.1); color: #EF4444; } .transaction-info { display: flex; flex-direction: column; } .transaction-name { font-size: 14px; font-weight: 600; color: var(--dark-color); } .transaction-date { font-size: 12px; color: #6B7280; } .transaction-amount { font-size: 16px; font-weight: 700; } .amount-positive { color: #10B981; } .amount-negative { color: #EF4444; } /* Transactions Section Styling */ .filter-tabs { display: flex; gap: 10px; margin-bottom: 20px; padding-bottom: 15px; overflow-x: auto; scrollbar-width: none; } .filter-tabs::-webkit-scrollbar { display: none; } .filter-tab { padding: 8px 16px; background-color: var(--light-gray); border-radius: 20px; font-size: 14px; font-weight: 500; color: var(--dark-color); white-space: nowrap; cursor: pointer; transition: all 0.3s ease; } .filter-tab.active { background: var(--primary-gradient); color: white; box-shadow: 0 4px 10px rgba(79, 70, 229, 0.3); } .search-bar { display: flex; align-items: center; gap: 10px; background-color: var(--light-gray); border-radius: 15px; padding: 12px 15px; margin-bottom: 20px; } .search-bar i { color: #6B7280; font-size: 18px; } .search-input { flex: 1; border: none; background: transparent; font-size: 14px; color: var(--dark-color); outline: none; } .search-input::placeholder { color: #9CA3AF; } .transaction-group { margin-bottom: 25px; } .group-header { display: flex; justify-content: space-between; margin-bottom: 10px; } .date-label { font-size: 14px; font-weight: 600; color: var(--dark-color); } .total-amount { font-size: 14px; font-weight: 700; color: var(--dark-color); } /* Budget Section Styling */ .budget-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .monthly-summary { background: var(--secondary-gradient); border-radius: 20px; padding: 20px; color: white; margin-bottom: 25px; box-shadow: 0 10px 15px rgba(59, 130, 246, 0.2); position: relative; overflow: hidden; } .summary-title { font-size: 16px; font-weight: 600; margin-bottom: 15px; } .progress-container { height: 10px; background-color: rgba(255, 255, 255, 0.2); border-radius: 5px; margin-bottom: 15px; overflow: hidden; } .progress-bar { height: 100%; width: 65%; background-color: white; border-radius: 5px; position: relative; } .spending-details { display: flex; justify-content: space-between; font-size: 14px; } .budget-categories { display: flex; flex-direction: column; gap: 15px; } .budget-category { background-color: var(--light-gray); border-radius: 15px; padding: 15px; transition: transform 0.2s ease; cursor: pointer; } .budget-category:active { transform: scale(0.98); } .category-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .category-name { display: flex; align-items: center; gap: 10px; } .category-icon { width: 36px; height: 36px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 16px; } .food { background-color: rgba(239, 68, 68, 0.1); color: #EF4444; } .transport { background-color: rgba(245, 158, 11, 0.1); color: #F59E0B; } .shopping { background-color: rgba(139, 92, 246, 0.1); color: #8B5CF6; } .utilities { background-color: rgba(6, 182, 212, 0.1); color: #06B6D4; } .category-title { font-size: 16px; font-weight: 600; color: var(--dark-color); } .category-amount { font-size: 16px; font-weight: 700; color: var(--dark-color); } .category-progress { height: 8px; background-color: var(--medium-gray); border-radius: 4px; overflow: hidden; } .progress-fill { height: 100%; border-radius: 4px; } .food-fill { width: 80%; background-color: #EF4444; } .transport-fill { width: 65%; background-color: #F59E0B; } .shopping-fill { width: 45%; background-color: #8B5CF6; } .utilities-fill { width: 30%; background-color: #06B6D4; } .ripple { position: absolute; border-radius: 50%; background-color: rgba(255, 255, 255, 0.5); transform: scale(0); animation: ripple-animation 0.6s linear; pointer-events: none; } @keyframes ripple-animation { to { transform: scale(4); opacity: 0; } } /* Screen reader only */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } /* Placeholder loading animation */ @keyframes shimmer { 0% { background-position: -400px 0; } 100% { background-position: 400px 0; } } .shimmer { background: linear-gradient(90deg, rgba(243, 244, 246, 0.4) 0%, rgba(243, 244, 246, 0.8) 50%, rgba(243, 244, 246, 0.4) 100%); background-size: 400px 100%; animation: shimmer 1.5s infinite linear; } /* Notification indicator */ .notification-dot { position: absolute; top: 5px; right: 30%; width: 8px; height: 8px; border-radius: 50%; background-color: #EF4444; border: 2px solid white; z-index: 3; } </style> </head> <body> <div class="app-container"> <!-- Account Section --> <div class="content-area"> <div id="account" class="content-section active"> <div class="account-header"> <div class="greeting">Hi, Alex</div> <div class="profile-pic">A</div> </div> <div class="balance-card"> <div class="card-pattern"></div> <div class="balance-label">Total Balance</div> <div class="balance-amount">$12,842.65</div> <div class="card-actions"> <div class="action-button"> <i class="fas fa-plus"></i> Add Money </div> <div class="action-button"> <i class="fas fa-exchange-alt"></i> Transfer </div> </div> </div> <div class="quick-actions"> <div class="quick-action"> <div class="action-icon"> <i class="fas fa-qrcode"></i> </div> <div class="action-label">Scan</div> </div> <div class="quick-action"> <div class="action-icon"> <i class="fas fa-credit-card"></i> </div> <div class="action-label">Cards</div> </div> <div class="quick-action"> <div class="action-icon"> <i class="fas fa-bolt"></i> </div> <div class="action-label">Pay</div> </div> <div class="quick-action"> <div class="action-icon"> <i class="fas fa-ellipsis-h"></i> </div> <div class="action-label">More</div> </div> </div> <div class="section-title">Recent Transactions</div> <div class="recent-transaction"> <div class="transaction-details"> <div class="transaction-icon income"> <i class="fas fa-arrow-down"></i> </div> <div class="transaction-info"> <div class="transaction-name">Direct Deposit</div> <div class="transaction-date">Today, 9:41 AM</div> </div> </div> <div class="transaction-amount amount-positive">+$2,480.00</div> </div> <div class="recent-transaction"> <div class="transaction-details"> <div class="transaction-icon expense"> <i class="fas fa-arrow-up"></i> </div> <div class="transaction-info"> <div class="transaction-name">Whole Foods Market</div> <div class="transaction-date">Yesterday, 2:15 PM</div> </div> </div> <div class="transaction-amount amount-negative">-$128.42</div> </div> <div class="recent-transaction"> <div class="transaction-details"> <div class="transaction-icon expense"> <i class="fas fa-arrow-up"></i> </div> <div class="transaction-info"> <div class="transaction-name">Netflix Subscription</div> <div class="transaction-date">May 22, 2023</div> </div> </div> <div class="transaction-amount amount-negative">-$15.99</div> </div> </div> <!-- Transactions Section --> <div id="transactions" class="content-section"> <div class="section-title">Transactions</div> <div class="filter-tabs"> <div class="filter-tab active">All</div> <div class="filter-tab">Income</div> <div class="filter-tab">Expense</div> <div class="filter-tab">Pending</div> <div class="filter-tab">Canceled</div> </div> <div class="search-bar"> <i class="fas fa-search"></i> <input type="text" class="search-input" placeholder="Search transactions..."> </div> <div class="transaction-group"> <div class="group-header"> <div class="date-label">Today</div> <div class="total-amount">$2,351.58</div> </div> <div class="recent-transaction"> <div class="transaction-details"> <div class="transaction-icon income"> <i class="fas fa-arrow-down"></i> </div> <div class="transaction-info"> <div class="transaction-name">Direct Deposit</div> <div class="transaction-date">9:41 AM</div> </div> </div> <div class="transaction-amount amount-positive">+$2,480.00</div> </div> <div class="recent-transaction"> <div class="transaction-details"> <div class="transaction-icon expense"> <i class="fas fa-arrow-up"></i> </div> <div class="transaction-info"> <div class="transaction-name">Uber Ride</div> <div class="transaction-date">8:23 AM</div> </div> </div> <div class="transaction-amount amount-negative">-$18.50</div> </div> <div class="recent-transaction"> <div class="transaction-details"> <div class="transaction-icon expense"> <i class="fas fa-arrow-up"></i> </div> <div class="transaction-info"> <div class="transaction-name">Starbucks Coffee</div> <div class="transaction-date">7:15 AM</div> </div> </div> <div class="transaction-amount amount-negative">-$5.45</div> </div> </div> <div class="transaction-group"> <div class="group-header"> <div class="date-label">Yesterday</div> <div class="total-amount">$174.62</div> </div> <div class="recent-transaction"> <div class="transaction-details"> <div class="transaction-icon expense"> <i class="fas fa-arrow-up"></i> </div> <div class="transaction-info"> <div class="transaction-name">Whole Foods Market</div> <div class="transaction-date">2:15 PM</div> </div> </div> <div class="transaction-amount amount-negative">-$128.42</div> </div> <div class="recent-transaction"> <div class="transaction-details"> <div class="transaction-icon expense"> <i class="fas fa-arrow-up"></i> </div> <div class="transaction-info"> <div class="transaction-name">Amazon Purchase</div> <div class="transaction-date">11:30 AM</div> </div> </div> <div class="transaction-amount amount-negative">-$46.20</div> </div> </div> </div> <!-- Budget Section --> <div id="budget" class="content-section"> <div class="budget-header"> <div class="section-title">Budget Tracker</div> </div> <div class="monthly-summary"> <div class="card-pattern"></div> <div class="summary-title">Monthly Spending</div> <div class="progress-container"> <div class="progress-bar"></div> </div> <div class="spending-details"> <div>$1,840 of $2,800</div> <div>65% spent</div> </div> </div> <div class="section-title">Categories</div> <div class="budget-categories"> <div class="budget-category"> <div class="category-header"> <div class="category-name"> <div class="category-icon food"> <i class="fas fa-utensils"></i> </div> <div class="category-title">Food & Dining</div> </div> <div class="category-amount">$480/$600</div> </div> <div class="category-progress"> <div class="progress-fill food-fill"></div> </div> </div> <div class="budget-category"> <div class="category-header"> <div class="category-name"> <div class="category-icon transport"> <i class="fas fa-car"></i> </div> <div class="category-title">Transportation</div> </div> <div class="category-amount">$325/$500</div> </div> <div class="category-progress"> <div class="progress-fill transport-fill"></div> </div> </div> <div class="budget-category"> <div class="category-header"> <div class="category-name"> <div class="category-icon shopping"> <i class="fas fa-shopping-bag"></i> </div> <div class="category-title">Shopping</div> </div> <div class="category-amount">$315/$700</div> </div> <div class="category-progress"> <div class="progress-fill shopping-fill"></div> </div> </div> <div class="budget-category"> <div class="category-header"> <div class="category-name"> <div class="category-icon utilities"> <i class="fas fa-bolt"></i> </div> <div class="category-title">Utilities</div> </div> <div class="category-amount">$240/$800</div> </div> <div class="category-progress"> <div class="progress-fill utilities-fill"></div> </div> </div> </div> </div> </div> <!-- Navigation Tabs --> <div class="navigation-tabs"> <div class="tab active" data-tab="account"> <div class="tab-indicator" style="background: #4F46E5;"></div> <div class="tab-background" style="background: #4F46E5;"></div> <div class="tab-icon"> <i class="fas fa-home"></i> </div> <div class="tab-label">Accounts</div> </div> <div class="tab" data-tab="transactions"> <div class="tab-indicator" style="background: #3B82F6;"></div> <div class="tab-background" style="background: #3B82F6;"></div> <div class="tab-icon"> <i class="fas fa-exchange-alt"></i> </div> <div class="tab-label">Transactions</div> <div class="notification-dot"></div> </div> <div class="tab" data-tab="budget"> <div class="tab-indicator" style="background: #8B5CF6;"></div> <div class="tab-background" style="background: #8B5CF6;"></div> <div class="tab-icon"> <i class="fas fa-chart-pie"></i> </div> <div class="tab-label">Budget</div> </div> </div> </div> <script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script> <script> document.addEventListener('DOMContentLoaded', function() { // Tab navigation functionality const tabs = document.querySelectorAll('.tab'); const contentSections = document.querySelectorAll('.content-section'); // Use Font Awesome alternative if the CDN fails setTimeout(function() { if (!document.querySelector('.fa-home')) { const icons = document.querySelectorAll('.tab-icon i, .transaction-icon i, .action-icon i, .action-button i, .search-bar i, .category-icon i'); icons.forEach(icon => { // Extract the icon name from the class const classNames = Array.from(icon.classList); const iconName = classNames.find(cls => cls.startsWith('fa-')).replace('fa-', ''); // Replace with text representations const iconMap = { 'home': '🏠', 'exchange-alt': '↔️', 'chart-pie': '📊', 'arrow-down': '⬇️', 'arrow-up': '⬆️', 'plus': '+', 'qrcode': '📱', 'credit-card': '💳', 'bolt': '⚡', 'ellipsis-h': '•••', 'search': '🔍', 'utensils': '🍴', 'car': '🚗', 'shopping-bag': '🛍️' }; icon.textContent = iconMap[iconName] || '*'; icon.classList.remove(...classNames); }); } }, 1000); tabs.forEach(tab => { tab.addEventListener('click', function(e) { // Create 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`; const x = e.clientX - rect.left - size / 2; const y = e.clientY - rect.top - size / 2; ripple.style.left = `${x}px`; ripple.style.top = `${y}px`; setTimeout(() => { ripple.remove(); }, 600); // Haptic feedback simulation if (window.navigator && window.navigator.vibrate) { window.navigator.vibrate(50); } // Tab switching const tabId = this.getAttribute('data-tab'); tabs.forEach(t => t.classList.remove('active')); this.classList.add('active'); contentSections.forEach(section => { section.classList.remove('active'); if (section.id === tabId) { // Add a small delay for better animation setTimeout(() => { section.classList.add('active'); }, 50); } }); // Remove notification dot when transactions tab is clicked if (tabId === 'transactions') { const notificationDot = this.querySelector('.notification-dot'); if (notificationDot) { notificationDot.classList.add('removing'); setTimeout(() => { notificationDot.remove(); }, 300); } } }); }); // Filter tabs functionality const filterTabs = document.querySelectorAll('.filter-tab'); filterTabs.forEach(tab => { tab.addEventListener('click', function() { filterTabs.forEach(t => t.classList.remove('active')); this.classList.add('active'); // Add haptic feedback if (window.navigator && window.navigator.vibrate) { window.navigator.vibrate(30); } }); }); // Interactive elements const interactiveElements = document.querySelectorAll('.action-button, .quick-action, .recent-transaction, .budget-category'); interactiveElements.forEach(element => { element.addEventListener('click', function() { // Add haptic feedback if (window.navigator && window.navigator.vibrate) { window.navigator.vibrate(20); } }); }); // Preload tab switching animation setTimeout(() => { const preloadTabs = [...tabs].filter(tab => !tab.classList.contains('active')); let currentIndex = 0; function preloadNextTab() { if (currentIndex < preloadTabs.length) { const tab = preloadTabs[currentIndex]; tab.click(); currentIndex++; setTimeout(() => { tabs[0].click(); // Return to first tab setTimeout(preloadNextTab, 100); }, 100); } } preloadNextTab(); }, 500); }); </script> </body> </html>
<html> <head> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Poppins', sans-serif; } body { display: flex; justify-content: center; align-items: center; min-height: 100vh; background-color: #f9f9f9; color: #333; overflow-x: hidden; } .app-container { position: relative; width: 100%; max-width: 600px; height: 650px; background-color: #fff; border-radius: 20px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); overflow: hidden; } .app-header { display: flex; justify-content: space-between; align-items: center; padding: 20px; background-color: #fff; border-bottom: 1px solid #eee; } .logo { font-size: 24px; font-weight: 700; background: linear-gradient(45deg, #6C63FF, #FF6584); -webkit-background-clip: text; -webkit-text-fill-color: transparent; display: inline-block; } .user-avatar { width: 40px; height: 40px; border-radius: 50%; background: linear-gradient(45deg, #6C63FF, #FF6584); display: flex; justify-content: center; align-items: center; color: white; font-weight: 700; cursor: pointer; transition: all 0.3s ease; } .user-avatar:hover { transform: scale(1.1); } .tabs-container { display: flex; justify-content: space-around; align-items: center; width: 100%; background-color: #fff; border-radius: 15px; padding: 5px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); position: relative; z-index: 10; } .tab { display: flex; flex-direction: column; align-items: center; justify-content: center; width: 33.33%; padding: 15px 0; cursor: pointer; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); } .tab-icon { font-size: 24px; margin-bottom: 5px; transition: all 0.3s ease; } .tab-label { font-size: 12px; font-weight: 600; opacity: 0.7; transition: all 0.3s ease; } .tab.active .tab-icon { transform: translateY(-3px); } .tab.active .tab-label { opacity: 1; } .tab.active::after { content: ""; position: absolute; bottom: 0; left: 0; width: 100%; height: 3px; border-radius: 3px; transform: scaleX(0.6); animation: tabIndicatorAnimation 0.5s forwards cubic-bezier(0.34, 1.56, 0.64, 1); } #feed-tab.active::after { background: linear-gradient(45deg, #6C63FF, #8E86FF); } #notifications-tab.active::after { background: linear-gradient(45deg, #FF6584, #FF8B94); } #profile-tab.active::after { background: linear-gradient(45deg, #43E695, #3BB2B8); } .tab-ripple { position: absolute; width: 100px; height: 100px; border-radius: 50%; transform: scale(0); opacity: 0.4; z-index: -1; pointer-events: none; } @keyframes rippleEffect { to { transform: scale(2); opacity: 0; } } @keyframes tabIndicatorAnimation { to { transform: scaleX(1); } } .content-area { padding: 20px; height: calc(100% - 180px); overflow-y: auto; overflow-x: hidden; position: relative; transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); } .content-section { position: absolute; width: 100%; left: 0; opacity: 0; transform: translateX(30px); pointer-events: none; transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); } .content-section.active { opacity: 1; transform: translateX(0); pointer-events: auto; } /* Feed section styles */ .post { background-color: #fff; border-radius: 15px; padding: 20px; margin-bottom: 15px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); transition: all 0.3s ease; } .post:hover { transform: translateY(-3px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.1); } .post-header { display: flex; align-items: center; margin-bottom: 15px; } .post-avatar { width: 40px; height: 40px; border-radius: 50%; margin-right: 10px; background-size: cover; background-position: center; } .post-info { flex: 1; } .post-author { font-weight: 600; margin-bottom: 2px; } .post-time { font-size: 12px; color: #888; } .post-content { margin-bottom: 15px; line-height: 1.5; } .post-image { width: 100%; border-radius: 10px; margin-bottom: 15px; transition: all 0.3s ease; } .post-image:hover { transform: scale(1.02); } .post-actions { display: flex; justify-content: space-between; } .post-action { display: flex; align-items: center; gap: 5px; cursor: pointer; font-size: 14px; color: #666; transition: all 0.2s ease; } .post-action:hover { color: #6C63FF; } /* Notifications section styles */ .notification { display: flex; align-items: center; padding: 15px; margin-bottom: 10px; background-color: #fff; border-radius: 15px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); transition: all 0.3s ease; cursor: pointer; position: relative; overflow: hidden; } .notification.unread::before { content: ""; position: absolute; top: 15px; right: 15px; width: 8px; height: 8px; border-radius: 50%; background-color: #FF6584; } .notification:hover { transform: translateX(5px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.1); } .notification-icon { width: 40px; height: 40px; border-radius: 50%; margin-right: 15px; display: flex; justify-content: center; align-items: center; font-size: 18px; color: white; } .like-icon { background: linear-gradient(45deg, #FF6584, #FF8B94); } .comment-icon { background: linear-gradient(45deg, #43E695, #3BB2B8); } .friend-icon { background: linear-gradient(45deg, #6C63FF, #8E86FF); } .notification-content { flex: 1; } .notification-text { font-size: 14px; margin-bottom: 5px; line-height: 1.4; } .notification-time { font-size: 12px; color: #888; } /* Profile section styles */ .profile-header { text-align: center; margin-bottom: 30px; } .profile-avatar { width: 100px; height: 100px; border-radius: 50%; margin: 0 auto 15px; background: linear-gradient(45deg, #6C63FF, #FF6584); display: flex; justify-content: center; align-items: center; color: white; font-size: 36px; font-weight: 700; } .profile-name { font-size: 22px; font-weight: 700; margin-bottom: 5px; } .profile-bio { color: #666; margin-bottom: 20px; line-height: 1.4; } .profile-stats { display: flex; justify-content: space-around; margin-bottom: 30px; } .profile-stat { text-align: center; } .stat-value { font-size: 20px; font-weight: 700; margin-bottom: 5px; } .stat-label { font-size: 12px; color: #888; text-transform: uppercase; } .profile-section-title { font-size: 16px; font-weight: 600; margin-bottom: 15px; color: #333; } .profile-section { margin-bottom: 30px; } .settings-option { display: flex; align-items: center; padding: 12px 15px; border-radius: 12px; background-color: #f8f8f8; margin-bottom: 10px; cursor: pointer; transition: all 0.3s ease; } .settings-option:hover { background-color: #f0f0f0; transform: translateX(5px); } .settings-icon { margin-right: 15px; font-size: 18px; width: 20px; text-align: center; color: #6C63FF; } .tab-reorder-container { padding: 15px; background-color: #f8f8f8; border-radius: 12px; margin-bottom: 20px; } .reorder-instruction { font-size: 14px; color: #666; margin-bottom: 10px; line-height: 1.4; } .reorderable-tabs { display: flex; justify-content: space-between; margin-top: 15px; } .reorderable-tab { background-color: #fff; border-radius: 8px; padding: 10px 15px; cursor: move; margin-right: 10px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); transition: all 0.3s ease; display: flex; align-items: center; font-weight: 500; } .reorderable-tab:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); } .reorderable-tab-icon { margin-right: 5px; } .drag-handle { color: #bbb; margin-right: 8px; font-size: 14px; } /* Footer tabs */ .footer-tabs { position: absolute; bottom: 0; left: 0; width: 100%; background-color: #fff; border-top: 1px solid #eee; padding: 5px 0; display: flex; justify-content: space-around; align-items: center; z-index: 100; } /* Custom scrollbar */ .content-area::-webkit-scrollbar { width: 6px; } .content-area::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 10px; } .content-area::-webkit-scrollbar-thumb { background: #c5c5c5; border-radius: 10px; } .content-area::-webkit-scrollbar-thumb:hover { background: #a8a8a8; } /* Responsive adjustments */ @media (max-width: 600px) { .app-container { border-radius: 0; height: 100vh; } .post-actions { flex-wrap: wrap; } .profile-stats { flex-wrap: wrap; } .profile-stat { flex: 1 0 33%; margin-bottom: 10px; } } /* Tab preference toggle in profile */ .toggle-switch { position: relative; display: inline-block; width: 50px; height: 24px; margin-left: auto; } .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: #ccc; transition: .4s; border-radius: 34px; } .toggle-slider:before { position: absolute; content: ""; height: 16px; width: 16px; left: 4px; bottom: 4px; background-color: white; transition: .4s; border-radius: 50%; } input:checked + .toggle-slider { background-color: #6C63FF; } input:checked + .toggle-slider:before { transform: translateX(26px); } .preference-option { display: flex; align-items: center; justify-content: space-between; padding: 12px 15px; background-color: #f8f8f8; border-radius: 12px; margin-bottom: 10px; } .preference-label { font-size: 14px; font-weight: 500; } </style> </head> <body> <div class="app-container"> <div class="app-header"> <div class="logo">SocialWave</div> <div class="user-avatar">JD</div> </div> <div class="tabs-container"> <div class="tab active" id="feed-tab" data-tab="feed"> <div class="tab-icon">📱</div> <div class="tab-label">Feed</div> <div class="tab-ripple"></div> </div> <div class="tab" id="notifications-tab" data-tab="notifications"> <div class="tab-icon">🔔</div> <div class="tab-label">Notifications</div> <div class="tab-ripple"></div> </div> <div class="tab" id="profile-tab" data-tab="profile"> <div class="tab-icon">👤</div> <div class="tab-label">Profile</div> <div class="tab-ripple"></div> </div> </div> <div class="content-area"> <!-- Feed Section --> <div class="content-section active" id="feed-content"> <div class="post"> <div class="post-header"> <div class="post-avatar" style="background-image: url('https://randomuser.me/api/portraits/women/65.jpg');"></div> <div class="post-info"> <div class="post-author">Emma Johnson</div> <div class="post-time">20 minutes ago</div> </div> </div> <div class="post-content"> Just tried this amazing new café downtown! The atmosphere is perfect for working remotely and their caramel latte is to die for! 💯 </div> <img class="post-image" src="https://source.unsplash.com/random/600x400/?cafe" alt="Cafe photo"> <div class="post-actions"> <div class="post-action"> <span>❤️</span> 128 Likes </div> <div class="post-action"> <span>💬</span> 32 Comments </div> <div class="post-action"> <span>↗️</span> Share </div> </div> </div> <div class="post"> <div class="post-header"> <div class="post-avatar" style="background-image: url('https://randomuser.me/api/portraits/men/32.jpg');"></div> <div class="post-info"> <div class="post-author">Michael Chen</div> <div class="post-time">2 hours ago</div> </div> </div> <div class="post-content"> Hiking trip successful! Made it to the peak despite the cloudy weather. The view was worth every step. Who's joining next weekend? 🏔️ </div> <img class="post-image" src="https://source.unsplash.com/random/600x400/?hiking" alt="Hiking photo"> <div class="post-actions"> <div class="post-action"> <span>❤️</span> 84 Likes </div> <div class="post-action"> <span>💬</span> 17 Comments </div> <div class="post-action"> <span>↗️</span> Share </div> </div> </div> <div class="post"> <div class="post-header"> <div class="post-avatar" style="background-image: url('https://randomuser.me/api/portraits/women/22.jpg');"></div> <div class="post-info"> <div class="post-author">Sophia Rivera</div> <div class="post-time">Yesterday</div> </div> </div> <div class="post-content"> Finished my first painting workshop! Not perfect but I'm proud of the progress. Art really is about the journey, not the destination. 🎨 </div> <img class="post-image" src="https://source.unsplash.com/random/600x400/?painting" alt="Painting photo"> <div class="post-actions"> <div class="post-action"> <span>❤️</span> 216 Likes </div> <div class="post-action"> <span>💬</span> 54 Comments </div> <div class="post-action"> <span>↗️</span> Share </div> </div> </div> </div> <!-- Notifications Section --> <div class="content-section" id="notifications-content"> <div class="notification unread"> <div class="notification-icon like-icon">❤️</div> <div class="notification-content"> <div class="notification-text"><strong>Emma Johnson</strong> and <strong>18 others</strong> liked your photo from Central Park.</div> <div class="notification-time">5 minutes ago</div> </div> </div> <div class="notification unread"> <div class="notification-icon comment-icon">💬</div> <div class="notification-content"> <div class="notification-text"><strong>Michael Chen</strong> commented on your post: "Great shot! What camera do you use?"</div> <div class="notification-time">26 minutes ago</div> </div> </div> <div class="notification"> <div class="notification-icon friend-icon">👋</div> <div class="notification-content"> <div class="notification-text"><strong>Priya Sharma</strong> sent you a friend request.</div> <div class="notification-time">2 hours ago</div> </div> </div> <div class="notification"> <div class="notification-icon like-icon">❤️</div> <div class="notification-content"> <div class="notification-text"><strong>David Wilson</strong> and <strong>7 others</strong> liked your comment: "This is amazing!"</div> <div class="notification-time">5 hours ago</div> </div> </div> <div class="notification"> <div class="notification-icon comment-icon">💬</div> <div class="notification-content"> <div class="notification-text"><strong>Sophia Rivera</strong> replied to your comment: "Absolutely! Let's plan something next week."</div> <div class="notification-time">Yesterday</div> </div> </div> <div class="notification"> <div class="notification-icon friend-icon">👋</div> <div class="notification-content"> <div class="notification-text"><strong>Alex Johnson</strong> and <strong>3 mutual friends</strong> just joined SocialWave. Say hello!</div> <div class="notification-time">Yesterday</div> </div> </div> <div class="notification"> <div class="notification-icon like-icon">❤️</div> <div class="notification-content"> <div class="notification-text"><strong>Your hiking post</strong> is getting lots of attention! It has received 20+ interactions in the last hour.</div> <div class="notification-time">2 days ago</div> </div> </div> </div> <!-- Profile Section --> <div class="content-section" id="profile-content"> <div class="profile-header"> <div class="profile-avatar">JD</div> <div class="profile-name">Jane Doe</div> <div class="profile-bio">Travel enthusiast, amateur photographer, and coffee addict. Always seeking new adventures and beautiful landscapes to capture.</div> </div> <div class="profile-stats"> <div class="profile-stat"> <div class="stat-value">248</div> <div class="stat-label">Posts</div> </div> <div class="profile-stat"> <div class="stat-value">1,452</div> <div class="stat-label">Followers</div> </div> <div class="profile-stat"> <div class="stat-value">538</div> <div class="stat-label">Following</div> </div> </div> <div class="profile-section"> <div class="profile-section-title">Tab Customization</div> <div class="tab-reorder-container"> <div class="reorder-instruction">Drag to reorder your tabs. Your most-used tabs will appear first in the navigation bar.</div> <div class="reorderable-tabs"> <div class="reorderable-tab" draggable="true"> <span class="drag-handle">≡</span> <span class="reorderable-tab-icon">📱</span> Feed </div> <div class="reorderable-tab" draggable="true"> <span class="drag-handle">≡</span> <span class="reorderable-tab-icon">🔔</span> Notifications </div> <div class="reorderable-tab" draggable="true"> <span class="drag-handle">≡</span> <span class="reorderable-tab-icon">👤</span> Profile </div> </div> </div> <div class="preference-option"> <div class="preference-label">Enable tab animations</div> <label class="toggle-switch"> <input type="checkbox" checked> <span class="toggle-slider"></span> </label> </div> <div class="preference-option"> <div class="preference-label">Show notification badges</div> <label class="toggle-switch"> <input type="checkbox" checked> <span class="toggle-slider"></span> </label> </div> <div class="preference-option"> <div class="preference-label">Colorful tab indicators</div> <label class="toggle-switch"> <input type="checkbox" checked> <span class="toggle-slider"></span> </label> </div> </div> <div class="profile-section"> <div class="profile-section-title">Settings</div> <div class="settings-option"> <div class="settings-icon">🔒</div> <div>Privacy & Security</div> </div> <div class="settings-option"> <div class="settings-icon">🎨</div> <div>Appearance</div> </div> <div class="settings-option"> <div class="settings-icon">🔔</div> <div>Notification Preferences</div> </div> <div class="settings-option"> <div class="settings-icon">❓</div> <div>Help & Support</div> </div> </div> </div> </div> <div class="footer-tabs tabs-container"> <div class="tab active" id="footer-feed-tab" data-tab="feed"> <div class="tab-icon">📱</div> <div class="tab-label">Feed</div> </div> <div class="tab" id="footer-notifications-tab" data-tab="notifications"> <div class="tab-icon">🔔</div> <div class="tab-label">Notifications</div> </div> <div class="tab" id="footer-profile-tab" data-tab="profile"> <div class="tab-icon">👤</div> <div class="tab-label">Profile</div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Tab switching functionality const tabs = document.querySelectorAll('.tab'); const footerTabs = document.querySelectorAll('.footer-tabs .tab'); const contentSections = document.querySelectorAll('.content-section'); function switchTab(tabId) { // Remove active class from all tabs and content sections tabs.forEach(tab => tab.classList.remove('active')); footerTabs.forEach(tab => tab.classList.remove('active')); contentSections.forEach(section => section.classList.remove('active')); // Add active class to clicked tab and corresponding content section document.querySelectorAll(`[data-tab="${tabId}"]`).forEach(tab => tab.classList.add('active')); document.getElementById(`${tabId}-content`).classList.add('active'); } // Add click event listeners to tabs tabs.forEach(tab => { tab.addEventListener('click', function(e) { const tabId = this.dataset.tab; switchTab(tabId); // Add ripple effect const ripple = this.querySelector('.tab-ripple'); if (ripple) { ripple.style.left = (e.offsetX - 50) + 'px'; ripple.style.top = (e.offsetY - 50) + 'px'; // Set ripple color based on tab if (tabId === 'feed') { ripple.style.background = 'rgba(108, 99, 255, 0.2)'; } else if (tabId === 'notifications') { ripple.style.background = 'rgba(255, 101, 132, 0.2)'; } else if (tabId === 'profile') { ripple.style.background = 'rgba(67, 230, 149, 0.2)'; } ripple.style.animation = 'none'; void ripple.offsetWidth; // Trigger reflow ripple.style.animation = 'rippleEffect 0.6s ease-out'; } }); }); // Add click event listeners to footer tabs footerTabs.forEach(tab => { tab.addEventListener('click', function() { const tabId = this.dataset.tab; switchTab(tabId); }); }); // Notification item click effect const notifications = document.querySelectorAll('.notification'); notifications.forEach(notification => { notification.addEventListener('click', function() { this.classList.remove('unread'); }); }); // Like action animation const likeActions = document.querySelectorAll('.post-action'); likeActions.forEach(action => { action.addEventListener('click', function() { if (this.textContent.includes('Like')) { this.style.transform = 'scale(1.2)'; setTimeout(() => { this.style.transform = 'scale(1)'; }, 300); } }); }); // Draggable tab reordering const reorderableTabs = document.querySelectorAll('.reorderable-tab'); let draggedTab = null; reorderableTabs.forEach(tab => { tab.addEventListener('dragstart', function() { draggedTab = this; setTimeout(() => { this.style.opacity = '0.5'; }, 0); }); tab.addEventListener('dragend', function() { draggedTab = null; this.style.opacity = '1'; }); tab.addEventListener('dragover', function(e) { e.preventDefault(); }); tab.addEventListener('dragenter', function(e) { e.preventDefault(); if (this !== draggedTab) { this.style.transform = 'translateY(-2px)'; this.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.15)'; } }); tab.addEventListener('dragleave', function() { if (this !== draggedTab) { this.style.transform = ''; this.style.boxShadow = ''; } }); tab.addEventListener('drop', function(e) { e.preventDefault(); if (this !== draggedTab) { const container = document.querySelector('.reorderable-tabs'); const children = Array.from(container.children); const draggedIndex = children.indexOf(draggedTab); const targetIndex = children.indexOf(this); if (draggedIndex < targetIndex) { container.insertBefore(draggedTab, this.nextSibling); } else { container.insertBefore(draggedTab, this); } // Reset styles this.style.transform = ''; this.style.boxShadow = ''; } }); }); // Toggle option animations const toggles = document.querySelectorAll('.toggle-switch input'); toggles.forEach(toggle => { toggle.addEventListener('change', function() { const slider = this.nextElementSibling; if (this.checked) { slider.style.transition = 'background-color 0.4s, transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1)'; } else { slider.style.transition = 'background-color 0.4s, transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1)'; } }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Educational Platform Tabs</title> <style> :root { --primary: #2563eb; --primary-dark: #1d4ed8; --primary-light: #3b82f6; --secondary: #e2e8f0; --accent: #f97316; --text: #1e293b; --text-light: #64748b; --white: #ffffff; --success: #10b981; --danger: #ef4444; --border-radius: 8px; --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --font-main: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: var(--font-main); background: #f8fafc; color: var(--text); line-height: 1.6; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 20px; } .learning-portal { background: var(--white); border-radius: var(--border-radius); width: 100%; max-width: 700px; box-shadow: var(--shadow); overflow: hidden; height: 650px; position: relative; transition: all 0.3s ease; } .header { background: var(--primary); color: var(--white); padding: 20px 25px; display: flex; align-items: center; justify-content: space-between; position: relative; overflow: hidden; } .header::before { content: ''; position: absolute; top: -50px; right: -50px; width: 150px; height: 150px; background: var(--primary-light); border-radius: 50%; opacity: 0.2; } .header-left { display: flex; align-items: center; gap: 12px; } .logo { display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; background: var(--white); border-radius: 10px; font-weight: bold; color: var(--primary); font-size: 18px; } .course-info h1 { font-size: 18px; margin-bottom: 4px; font-weight: 700; } .course-info p { font-size: 12px; opacity: 0.8; } .user-avatar { width: 38px; height: 38px; border-radius: 50%; background: var(--primary-light); display: flex; align-items: center; justify-content: center; color: var(--white); font-weight: 600; border: 2px solid rgba(255, 255, 255, 0.3); cursor: pointer; transition: all 0.2s ease; } .user-avatar:hover { transform: scale(1.05); } .tabs { display: flex; padding: 0 10px; position: relative; background: #f8fafc; border-bottom: 1px solid var(--secondary); overflow-x: auto; scrollbar-width: none; } .tabs::-webkit-scrollbar { display: none; } .tab { padding: 15px 20px; font-weight: 600; color: var(--text-light); border: none; background: transparent; cursor: pointer; position: relative; transition: all 0.3s ease; white-space: nowrap; font-size: 14px; display: flex; align-items: center; gap: 8px; } .tab:focus { outline: none; box-shadow: 0 0 0 2px var(--primary-light); border-radius: 4px; } .tab.active { color: var(--primary); } .tab.active::after { content: ''; position: absolute; bottom: -1px; left: 0; width: 100%; height: 3px; background: var(--primary); border-radius: 3px 3px 0 0; animation: slideIn 0.3s ease forwards; } .tab:hover:not(.active) { color: var(--text); background: rgba(0, 0, 0, 0.03); border-radius: 4px; } .tab-badge { display: inline-flex; align-items: center; justify-content: center; background: var(--accent); color: white; border-radius: 12px; font-size: 10px; min-width: 20px; height: 20px; padding: 0 6px; font-weight: 700; transform: translateY(-1px); } .tab-icon { font-size: 16px; } .tab-content { padding: 25px; height: calc(100% - 140px); overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--primary-light) var(--secondary); } .tab-content::-webkit-scrollbar { width: 8px; } .tab-content::-webkit-scrollbar-track { background: var(--secondary); border-radius: 10px; } .tab-content::-webkit-scrollbar-thumb { background: var(--primary-light); border-radius: 10px; } .tab-panel { display: none; animation: fadeIn 0.3s ease forwards; } .tab-panel.active { display: block; } .section { margin-bottom: 25px; } .section-header { margin-bottom: 15px; display: flex; align-items: center; justify-content: space-between; } .section-title { font-size: 16px; font-weight: 700; color: var(--text); position: relative; padding-left: 15px; } .section-title::before { content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%); width: 6px; height: 18px; background: var(--primary); border-radius: 3px; } .module { background: var(--white); border-radius: var(--border-radius); padding: 15px; margin-bottom: 12px; border: 1px solid var(--secondary); transition: all 0.2s ease; cursor: pointer; } .module:hover { box-shadow: var(--shadow); transform: translateY(-2px); border-color: #cbd5e1; } .module h3 { font-size: 15px; font-weight: 600; margin-bottom: 6px; display: flex; align-items: center; justify-content: space-between; } .module-time { font-size: 12px; color: var(--text-light); font-weight: normal; } .module p { font-size: 13px; color: var(--text-light); margin-bottom: 12px; } .progress-bar { height: 6px; background: var(--secondary); border-radius: 10px; overflow: hidden; } .progress { height: 100%; background: var(--primary); width: 0; transition: width 0.5s ease; border-radius: 10px; } .assignment { display: flex; background: var(--white); border-radius: var(--border-radius); padding: 15px; margin-bottom: 12px; border: 1px solid var(--secondary); transition: all 0.2s ease; cursor: pointer; align-items: center; gap: 15px; } .assignment:hover { box-shadow: var(--shadow); transform: translateY(-2px); border-color: #cbd5e1; } .assignment-icon { width: 40px; height: 40px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 18px; flex-shrink: 0; } .icon-pdf { background: #fef2f2; color: var(--danger); } .icon-doc { background: #eff6ff; color: var(--primary); } .icon-quiz { background: #fef9c3; color: #ca8a04; } .assignment-content { flex: 1; } .assignment-content h3 { font-size: 15px; font-weight: 600; margin-bottom: 4px; } .assignment-meta { display: flex; font-size: 12px; color: var(--text-light); gap: 10px; } .assignment-status { margin-left: auto; font-size: 12px; font-weight: 600; padding: 4px 10px; border-radius: 12px; background: #f0fdf4; color: var(--success); } .assignment-status.pending { background: #fef2f2; color: var(--danger); } .assignment-status.draft { background: #f8fafc; color: var(--text-light); } .discussion-item { background: var(--white); border-radius: var(--border-radius); padding: 15px; margin-bottom: 12px; border: 1px solid var(--secondary); transition: all 0.2s ease; } .discussion-item:hover { box-shadow: var(--shadow); border-color: #cbd5e1; } .discussion-header { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; } .discussion-avatar { width: 35px; height: 35px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--white); font-weight: 600; flex-shrink: 0; font-size: 12px; } .avatar-1 { background: var(--primary); } .avatar-2 { background: var(--accent); } .avatar-3 { background: #8b5cf6; } .discussion-info { flex: 1; } .discussion-info h3 { font-size: 15px; font-weight: 600; margin-bottom: 2px; } .discussion-meta { font-size: 12px; color: var(--text-light); } .discussion-content { font-size: 13px; color: var(--text); margin-bottom: 15px; } .discussion-actions { display: flex; align-items: center; gap: 15px; font-size: 12px; } .discussion-action { display: flex; align-items: center; gap: 5px; color: var(--text-light); cursor: pointer; } .discussion-action:hover { color: var(--primary); } .new-discussion { display: flex; background: var(--white); border-radius: var(--border-radius); padding: 15px; border: 1px solid var(--secondary); transition: all 0.2s ease; margin-top: 15px; } .new-discussion-input { flex: 1; border: none; outline: none; font-size: 14px; font-family: var(--font-main); color: var(--text); resize: none; margin-left: 10px; } .new-discussion-input::placeholder { color: var(--text-light); } .resources-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 15px; } .resource { background: var(--white); border-radius: var(--border-radius); padding: 15px; border: 1px solid var(--secondary); transition: all 0.2s ease; cursor: pointer; display: flex; flex-direction: column; height: 100%; } .resource:hover { box-shadow: var(--shadow); transform: translateY(-2px); border-color: #cbd5e1; } .resource-icon { width: 100%; height: 110px; border-radius: 6px; display: flex; align-items: center; justify-content: center; font-size: 32px; margin-bottom: 10px; } .resource-title { font-size: 14px; font-weight: 600; margin-bottom: 5px; } .resource-description { font-size: 12px; color: var(--text-light); flex: 1; } .resource-meta { margin-top: 10px; display: flex; align-items: center; justify-content: space-between; font-size: 11px; color: var(--text-light); } .button { padding: 8px 15px; background: var(--primary); color: var(--white); border: none; border-radius: var(--border-radius); font-weight: 600; cursor: pointer; font-size: 13px; transition: all 0.2s ease; display: inline-flex; align-items: center; gap: 5px; } .button:hover { background: var(--primary-dark); } .button.secondary { background: var(--secondary); color: var(--text); } .button.secondary:hover { background: #d1d5db; } .empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 40px 20px; color: var(--text-light); } .empty-state-icon { font-size: 48px; margin-bottom: 15px; color: var(--secondary); } .empty-state-title { font-size: 16px; font-weight: 600; margin-bottom: 5px; } .empty-state-description { font-size: 14px; max-width: 300px; margin-bottom: 20px; } .todo-list { position: absolute; top: 10px; right: 10px; } .toast { position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%) translateY(100px); background: var(--primary-dark); color: white; padding: 10px 20px; border-radius: 6px; font-size: 14px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); z-index: 1000; opacity: 0; transition: all 0.3s ease; display: flex; align-items: center; gap: 10px; } .toast.show { transform: translateX(-50%) translateY(0); opacity: 1; } .toast-icon { font-size: 18px; } .floating-button { position: fixed; bottom: 20px; right: 20px; width: 56px; height: 56px; border-radius: 50%; background: var(--primary); color: white; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); cursor: pointer; z-index: 100; transition: all 0.2s ease; } .floating-button:hover { background: var(--primary-dark); transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2); } @keyframes slideIn { 0% { transform: scaleX(0); transform-origin: left center; } 100% { transform: scaleX(1); transform-origin: left center; } } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @media (max-width: 576px) { .tab { padding: 12px 16px; font-size: 13px; } .resources-grid { grid-template-columns: 1fr; } .tab-content { padding: 15px; } } </style> </head> <body> <div class="learning-portal"> <div class="header"> <div class="header-left"> <div class="logo">E+</div> <div class="course-info"> <h1>Advanced Data Structures</h1> <p>CS 401 • Fall 2023</p> </div> </div> <div class="user-avatar">JD</div> </div> <div class="tabs" role="tablist"> <button class="tab active" id="tab-syllabus" role="tab" aria-selected="true" aria-controls="panel-syllabus"> <span class="tab-icon">📚</span> Syllabus </button> <button class="tab" id="tab-assignments" role="tab" aria-selected="false" aria-controls="panel-assignments"> <span class="tab-icon">📝</span> Assignments <span class="tab-badge">3</span> </button> <button class="tab" id="tab-discussions" role="tab" aria-selected="false" aria-controls="panel-discussions"> <span class="tab-icon">💬</span> Discussions </button> <button class="tab" id="tab-resources" role="tab" aria-selected="false" aria-controls="panel-resources"> <span class="tab-icon">📎</span> Resources </button> </div> <div class="tab-content"> <!-- Syllabus Tab --> <div id="panel-syllabus" class="tab-panel active" role="tabpanel" aria-labelledby="tab-syllabus"> <div class="section"> <div class="section-header"> <h2 class="section-title">Course Modules</h2> </div> <div class="module"> <h3> Module 1: Introduction to Data Structures <span class="module-time">3 hours</span> </h3> <p>Fundamental concepts and analysis techniques for data structures and algorithms.</p> <div class="progress-bar"> <div class="progress" style="width: 100%;"></div> </div> </div> <div class="module"> <h3> Module 2: Trees & Graphs <span class="module-time">4 hours</span> </h3> <p>Binary trees, AVL trees, B-trees, graph representations and traversal algorithms.</p> <div class="progress-bar"> <div class="progress" style="width: 65%;"></div> </div> </div> <div class="module"> <h3> Module 3: Hashing Techniques <span class="module-time">2.5 hours</span> </h3> <p>Hash functions, collision resolution strategies, and advanced applications.</p> <div class="progress-bar"> <div class="progress" style="width: 20%;"></div> </div> </div> <div class="module"> <h3> Module 4: Advanced Sorting <span class="module-time">3.5 hours</span> </h3> <p>Merge sort, quicksort, heapsort, and special-purpose sorting algorithms.</p> <div class="progress-bar"> <div class="progress" style="width: 0%;"></div> </div> </div> </div> <div class="section"> <div class="section-header"> <h2 class="section-title">Course Information</h2> </div> <div class="module"> <h3>Prerequisites</h3> <p>CS 201 (Programming Fundamentals) and CS 301 (Discrete Mathematics)</p> </div> <div class="module"> <h3>Learning Objectives</h3> <p>By the end of this course, students will be able to design efficient data structures, implement complex algorithms, and analyze their performance in real-world applications.</p> </div> </div> </div> <!-- Assignments Tab --> <div id="panel-assignments" class="tab-panel" role="tabpanel" aria-labelledby="tab-assignments"> <div class="section"> <div class="section-header"> <h2 class="section-title">Upcoming</h2> <button class="button"> <i class="fas fa-plus"></i> New </button> </div> <div class="assignment"> <div class="assignment-icon icon-doc"> <i class="fas fa-file-alt"></i> </div> <div class="assignment-content"> <h3>Tree Traversal Implementation</h3> <div class="assignment-meta"> <span>Due: October 15, 2023</span> <span>50 points</span> </div> </div> <div class="assignment-status pending">Due soon</div> </div> <div class="assignment"> <div class="assignment-icon icon-quiz"> <i class="fas fa-tasks"></i> </div> <div class="assignment-content"> <h3>Midterm Quiz: Hash Functions</h3> <div class="assignment-meta"> <span>Due: October 20, 2023</span> <span>100 points</span> </div> </div> <div class="assignment-status draft">Not started</div> </div> </div> <div class="section"> <div class="section-header"> <h2 class="section-title">Completed</h2> </div> <div class="assignment"> <div class="assignment-icon icon-pdf"> <i class="fas fa-file-pdf"></i> </div> <div class="assignment-content"> <h3>Array Analysis Paper</h3> <div class="assignment-meta"> <span>Submitted: September 30, 2023</span> <span>25 points</span> </div> </div> <div class="assignment-status">Graded: 23/25</div> </div> </div> </div> <!-- Discussions Tab --> <div id="panel-discussions" class="tab-panel" role="tabpanel" aria-labelledby="tab-discussions"> <div class="section"> <div class="section-header"> <h2 class="section-title">Recent Discussions</h2> </div> <div class="discussion-item"> <div class="discussion-header"> <div class="discussion-avatar avatar-1">KL</div> <div class="discussion-info"> <h3>Kaitlyn Lee</h3> <div class="discussion-meta">Posted 2 days ago • Module 2</div> </div> </div> <div class="discussion-content"> Has anyone found a good approach for balancing AVL trees with complex node structures? My implementation gets extremely slow with nested objects. </div> <div class="discussion-actions"> <div class="discussion-action"> <i class="fas fa-reply"></i> Reply (4) </div> <div class="discussion-action"> <i class="fas fa-heart"></i> Like (12) </div> <div class="discussion-action"> <i class="fas fa-bookmark"></i> Save </div> </div> </div> <div class="discussion-item"> <div class="discussion-header"> <div class="discussion-avatar avatar-2">RM</div> <div class="discussion-info"> <h3>Prof. Rodriguez</h3> <div class="discussion-meta">Posted 3 days ago • Announcement</div> </div> </div> <div class="discussion-content"> REMINDER: Office hours will be extended this Thursday from 3-5 PM for anyone needing help with the Tree Traversal assignment. Please come prepared with specific questions. </div> <div class="discussion-actions"> <div class="discussion-action"> <i class="fas fa-reply"></i> Reply (2) </div> <div class="discussion-action"> <i class="fas fa-heart"></i> Like (8) </div> <div class="discussion-action"> <i class="fas fa-bookmark"></i> Save </div> </div> </div> <div class="discussion-item"> <div class="discussion-header"> <div class="discussion-avatar avatar-3">AJ</div> <div class="discussion-info"> <h3>Aiden Johnson</h3> <div class="discussion-meta">Posted 5 days ago • Module 2</div> </div> </div> <div class="discussion-content"> I've created a visualization tool for the different tree rotations we learned in class. It's built with D3.js – feel free to use it for your assignments: <a href="#">tree-rotations.io/visualizer</a> </div> <div class="discussion-actions"> <div class="discussion-action"> <i class="fas fa-reply"></i> Reply (15) </div> <div class="discussion-action"> <i class="fas fa-heart"></i> Like (32) </div> <div class="discussion-action"> <i class="fas fa-bookmark"></i> Save </div> </div> </div> <div class="new-discussion"> <div class="discussion-avatar avatar-1">JD</div> <textarea class="new-discussion-input" placeholder="Start a new discussion..."></textarea> </div> </div> </div> <!-- Resources Tab --> <div id="panel-resources" class="tab-panel" role="tabpanel" aria-labelledby="tab-resources"> <div class="section"> <div class="section-header"> <h2 class="section-title">Course Materials</h2> </div> <div class="resources-grid"> <div class="resource"> <div class="resource-icon" style="background: #eff6ff;"> <i class="fas fa-book" style="color: var(--primary);"></i> </div> <div class="resource-title">Data Structures & Algorithms in Java</div> <div class="resource-description">Primary textbook for the course with in-depth explanations and examples.</div> <div class="resource-meta"> <span>PDF • 8.2 MB</span> <i class="fas fa-download"></i> </div> </div> <div class="resource"> <div class="resource-icon" style="background: #f0fdf4;"> <i class="fas fa-file-code" style="color: var(--success);"></i> </div> <div class="resource-title">Practice Code Samples</div> <div class="resource-description">Code repository with implementation examples for all data structures covered.</div> <div class="resource-meta"> <span>GitHub • Updated 3 days ago</span> <i class="fas fa-external-link-alt"></i> </div> </div> <div class="resource"> <div class="resource-icon" style="background: #fef2f2;"> <i class="fas fa-video" style="color: var(--danger);"></i> </div> <div class="resource-title">AVL Tree Rotations</div> <div class="resource-description">Visual demonstration of left, right, and double rotations with detailed analysis.</div> <div class="resource-meta"> <span>Video • 14:25</span> <i class="fas fa-play"></i> </div> </div> <div class="resource"> <div class="resource-icon" style="background: #fdf4ff;"> <i class="fas fa-table" style="color: #c026d3;"></i> </div> <div class="resource-title">Algorithm Complexity Cheatsheet</div> <div class="resource-description">Quick reference for time and space complexity of all algorithms covered in the course.</div> <div class="resource-meta"> <span>PDF • 2.1 MB</span> <i class="fas fa-download"></i> </div> </div> </div> </div> <div class="section"> <div class="section-header"> <h2 class="section-title">Additional Resources</h2> </div> <div class="resources-grid"> <div class="resource"> <div class="resource-icon" style="background: #fef3c7;"> <i class="fas fa-puzzle-piece" style="color: #d97706;"></i> </div> <div class="resource-title">Algorithm Visualizations</div> <div class="resource-description">Interactive tool to visualize how different algorithms work on various inputs.</div> <div class="resource-meta"> <span>Website • External</span> <i class="fas fa-external-link-alt"></i> </div> </div> <div class="resource"> <div class="resource-icon" style="background: #eef2ff;"> <i class="fas fa-chalkboard-teacher" style="color: #6366f1;"></i> </div> <div class="resource-title">Study Group Guidelines</div> <div class="resource-description">Recommendations for forming effective study groups and collaborative learning.</div> <div class="resource-meta"> <span>PDF • 1.5 MB</span> <i class="fas fa-download"></i> </div> </div> </div> </div> </div> </div> </div> <div class="toast" id="toast"> <div class="toast-icon"><i class="fas fa-check-circle"></i></div> <div class="toast-message">Action completed successfully!</div> </div> <script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script> <script> document.addEventListener('DOMContentLoaded', function() { // Tab functionality const tabs = document.querySelectorAll('.tab'); const tabPanels = document.querySelectorAll('.tab-panel'); tabs.forEach(tab => { tab.addEventListener('click', () => { // Deactivate all tabs tabs.forEach(t => { t.classList.remove('active'); t.setAttribute('aria-selected', 'false'); }); // Activate clicked tab tab.classList.add('active'); tab.setAttribute('aria-selected', 'true'); // Hide all panels tabPanels.forEach(panel => { panel.classList.remove('active'); }); // Show corresponding panel const panelId = tab.getAttribute('aria-controls'); document.getElementById(panelId).classList.add('active'); }); // Keyboard navigation for tabs tab.addEventListener('keydown', e => { if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') { e.preventDefault(); const currentIndex = Array.from(tabs).indexOf(tab); const direction = e.key === 'ArrowLeft' ? -1 : 1; const nextIndex = (currentIndex + direction + tabs.length) % tabs.length; tabs[nextIndex].focus(); tabs[nextIndex].click(); } }); }); // Module click animation const modules = document.querySelectorAll('.module'); modules.forEach(module => { module.addEventListener('click', () => { showToast('Module content is being loaded...'); }); }); // Assignment click const assignments = document.querySelectorAll('.assignment'); assignments.forEach(assignment => { assignment.addEventListener('click', () => { showToast('Opening assignment details...'); }); }); // Resource click const resources = document.querySelectorAll('.resource'); resources.forEach(resource => { resource.addEventListener('click', () => { showToast('Preparing resource for viewing...'); }); }); // Discussion actions const discussionActions = document.querySelectorAll('.discussion-action'); discussionActions.forEach(action => { action.addEventListener('click', (e) => { e.stopPropagation(); const actionText = action.textContent.trim(); if (actionText.includes('Reply')) { showToast('Opening reply editor...'); } else if (actionText.includes('Like')) { action.innerHTML = `<i class="fas fa-heart" style="color: var(--accent);"></i> Liked (${parseInt(actionText.match(/\d+/)[0]) + 1})`; showToast('Post liked!'); } else if (actionText.includes('Save')) { action.innerHTML = `<i class="fas fa-bookmark" style="color: var(--primary);"></i> Saved`; showToast('Post saved to your bookmarks!'); } }); }); // New discussion const newDiscussionInput = document.querySelector('.new-discussion-input'); if (newDiscussionInput) { newDiscussionInput.addEventListener('focus', () => { newDiscussionInput.style.height =
<html> <head> <title>Vitality Hub - Health & Fitness Tracker</title> <style> :root { --primary: #3d5afe; --primary-light: #536dfe; --secondary: #00e676; --secondary-light: #00e5ff; --tertiary: #ff3d00; --dark: #263238; --light: #eceff1; --success: #4caf50; --warning: #ff9800; --danger: #f44336; --info: #2196f3; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Chakra Petch', sans-serif; } body { background: #121212; color: var(--light); font-family: 'Chakra Petch', sans-serif; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; overflow-x: hidden; padding: 20px; } .container { width: 100%; max-width: 700px; height: 700px; display: flex; flex-direction: column; border-radius: 16px; overflow: hidden; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5); background: linear-gradient(135deg, #1e2023, #191b1e); position: relative; } .header { padding: 20px; display: flex; align-items: center; justify-content: space-between; background: rgba(25, 27, 30, 0.8); backdrop-filter: blur(10px); z-index: 100; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .header h1 { font-size: 1.8rem; font-weight: 600; background: linear-gradient(90deg, var(--primary-light), var(--secondary-light)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; letter-spacing: 0.5px; } .profile { display: flex; align-items: center; gap: 12px; } .profile-img { width: 40px; height: 40px; border-radius: 50%; background: linear-gradient(135deg, var(--primary), var(--secondary)); display: flex; align-items: center; justify-content: center; font-weight: bold; color: white; position: relative; overflow: hidden; } .profile-img::after { content: ''; position: absolute; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.2); transform: translateX(-100%); animation: shimmer 2s infinite; } @keyframes shimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } .profile-info { font-size: 0.9rem; } .profile-info .name { font-weight: 600; } .profile-info .goal { font-size: 0.8rem; opacity: 0.7; } .tab-container { width: 100%; display: flex; justify-content: space-between; padding: 0 10px; margin-top: 10px; position: relative; } .tabs { display: flex; width: 100%; justify-content: space-between; position: relative; z-index: 2; } .tab { padding: 12px 0; flex: 1; text-align: center; color: rgba(255, 255, 255, 0.7); cursor: pointer; position: relative; transition: all 0.3s ease; font-size: 0.9rem; font-weight: 500; letter-spacing: 0.5px; overflow: hidden; } .tab::before { content: ''; position: absolute; bottom: 0; left: 50%; width: 0; height: 3px; background: linear-gradient(90deg, var(--primary), var(--secondary)); transition: width 0.3s ease, left 0.3s ease; border-radius: 3px; transform: translateY(4px); } .tab.active { color: #fff; } .tab.active::before { width: 70%; left: 15%; transform: translateY(0); } .tab .icon { display: block; margin: 0 auto 5px; font-size: 1.2rem; transition: transform 0.3s ease; } .tab.active .icon { transform: translateY(-2px) scale(1.1); } .tab-content { flex-grow: 1; overflow-y: auto; overflow-x: hidden; scroll-behavior: smooth; position: relative; padding: 20px; } .tab-content::-webkit-scrollbar { width: 6px; } .tab-content::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.05); border-radius: 10px; } .tab-content::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.2); border-radius: 10px; } .tab-pane { display: none; height: 100%; animation: fadeIn 0.5s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .tab-pane.active { display: block; } .insights-card { background: rgba(255, 255, 255, 0.05); border-radius: 12px; padding: 20px; margin-bottom: 20px; backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.1); transition: transform 0.3s ease, box-shadow 0.3s ease; } .insights-card:hover { transform: translateY(-5px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1); } .insights-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; } .insights-title { font-size: 1.1rem; font-weight: 600; } .insights-date { font-size: 0.8rem; opacity: 0.6; } .metrics { display: flex; justify-content: space-between; margin-top: 15px; } .metric { text-align: center; flex: 1; } .metric-value { font-size: 1.5rem; font-weight: 700; margin-bottom: 5px; position: relative; } .metric-label { font-size: 0.8rem; opacity: 0.7; } .activity-chart { margin-top: 20px; height: 150px; position: relative; display: flex; align-items: flex-end; justify-content: space-between; } .chart-bar { width: 8%; background: linear-gradient(to top, var(--primary-light), var(--secondary-light)); border-radius: 4px 4px 0 0; position: relative; transition: height 1s cubic-bezier(0.68, -0.55, 0.27, 1.55); } .chart-bar::after { content: attr(data-value); position: absolute; top: -20px; left: 50%; transform: translateX(-50%); font-size: 0.7rem; opacity: 0; transition: opacity 0.3s ease; } .chart-bar:hover::after { opacity: 1; } .chart-day { position: absolute; bottom: -25px; font-size: 0.7rem; left: 50%; transform: translateX(-50%); opacity: 0.7; } .meal-plan { display: flex; flex-direction: column; gap: 15px; } .meal-item { background: rgba(255, 255, 255, 0.05); border-radius: 10px; padding: 15px; display: flex; align-items: center; gap: 15px; transition: all 0.3s ease; border-left: 3px solid transparent; } .meal-item:hover { background: rgba(255, 255, 255, 0.08); transform: translateX(5px); } .meal-item.breakfast { border-left-color: var(--info); } .meal-item.lunch { border-left-color: var(--success); } .meal-item.dinner { border-left-color: var(--warning); } .meal-item.snack { border-left-color: var(--tertiary); } .meal-icon { width: 40px; height: 40px; background: rgba(255, 255, 255, 0.1); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.2rem; } .meal-content { flex: 1; } .meal-title { font-weight: 600; margin-bottom: 5px; } .meal-calories { font-size: 0.8rem; opacity: 0.7; } .meal-time { font-size: 0.8rem; background: rgba(0, 0, 0, 0.2); padding: 4px 8px; border-radius: 20px; } .progress-section { margin-bottom: 25px; } .progress-title { margin-bottom: 15px; font-size: 1.1rem; font-weight: 600; } .progress-card { background: rgba(255, 255, 255, 0.05); border-radius: 12px; padding: 20px; margin-bottom: 15px; } .progress-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .progress-label { font-weight: 500; } .progress-value { font-weight: 600; font-size: 0.9rem; } .progress-bar-container { height: 8px; background: rgba(255, 255, 255, 0.1); border-radius: 4px; overflow: hidden; position: relative; } .progress-bar { height: 100%; border-radius: 4px; transition: width 1s cubic-bezier(0.43, 0.195, 0.02, 1); position: relative; overflow: hidden; } .progress-bar.steps { background: linear-gradient(90deg, var(--info), var(--primary)); } .progress-bar.calories { background: linear-gradient(90deg, var(--secondary), var(--success)); } .progress-bar.water { background: linear-gradient(90deg, var(--secondary-light), var(--info)); } .progress-bar.sleep { background: linear-gradient(90deg, var(--primary-light), var(--primary)); } .progress-bar::after { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0) 100%); animation: shine 2s infinite; } @keyframes shine { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } .weekly-insights { margin-top: 20px; } .stats-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; margin-top: 15px; } .stat-card { background: rgba(255, 255, 255, 0.05); border-radius: 10px; padding: 15px; transition: all 0.3s ease; border: 1px solid rgba(255, 255, 255, 0.1); } .stat-card:hover { background: rgba(255, 255, 255, 0.08); transform: translateY(-3px); } .stat-title { font-size: 0.8rem; opacity: 0.7; margin-bottom: 10px; } .stat-value { font-size: 1.4rem; font-weight: 700; margin-bottom: 5px; } .stat-change { font-size: 0.8rem; display: flex; align-items: center; gap: 5px; } .positive { color: var(--success); } .negative { color: var(--danger); } .separator { width: 100%; height: 1px; background: rgba(255, 255, 255, 0.1); margin: 20px 0; } .recommendations-list { display: flex; flex-direction: column; gap: 15px; } .recommendation-item { background: rgba(255, 255, 255, 0.05); border-radius: 10px; padding: 15px; transition: all 0.3s ease; display: flex; align-items: center; gap: 15px; border-left: 3px solid var(--secondary); } .recommendation-item:hover { background: rgba(255, 255, 255, 0.08); transform: translateX(5px); } .recommendation-icon { width: 40px; height: 40px; background: rgba(255, 255, 255, 0.1); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.2rem; } .recommendation-content { flex: 1; } .recommendation-title { font-weight: 600; margin-bottom: 5px; } .recommendation-desc { font-size: 0.8rem; opacity: 0.7; } .badge { font-size: 0.7rem; padding: 3px 8px; border-radius: 20px; background: rgba(0, 0, 0, 0.3); display: inline-block; margin-left: 8px; } .badge.steps { background: rgba(61, 90, 254, 0.2); color: var(--primary-light); } .badge.nutrition { background: rgba(0, 230, 118, 0.2); color: var(--secondary); } .badge.sleep { background: rgba(255, 61, 0, 0.2); color: var(--tertiary); } .notification-dot { width: 8px; height: 8px; background: var(--tertiary); border-radius: 50%; position: absolute; top: 5px; right: 5px; animation: pulse 2s infinite; } @keyframes pulse { 0% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.5); opacity: 0.7; } 100% { transform: scale(1); opacity: 1; } } .bottom-nav { padding: 15px 20px; display: flex; justify-content: space-around; background: rgba(25, 27, 30, 0.9); border-top: 1px solid rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); z-index: 100; } .quick-action { width: 50px; height: 50px; background: linear-gradient(135deg, var(--primary), var(--primary-light)); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; color: white; cursor: pointer; box-shadow: 0 5px 15px rgba(83, 109, 254, 0.4); transition: all 0.3s ease; } .quick-action:hover { transform: translateY(-5px); box-shadow: 0 8px 20px rgba(83, 109, 254, 0.6); } .nav-button { display: flex; flex-direction: column; align-items: center; gap: 5px; opacity: 0.7; transition: all 0.3s ease; cursor: pointer; } .nav-button:hover { opacity: 1; } .nav-icon { font-size: 1.2rem; } .nav-label { font-size: 0.7rem; } /* Custom scrollbar for the entire page */ ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.05); } ::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.2); border-radius: 10px; } /* Pseudo tooltip effect */ [data-tooltip] { position: relative; cursor: pointer; } [data-tooltip]::after { content: attr(data-tooltip); position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); background: rgba(0, 0, 0, 0.8); color: white; padding: 5px 10px; border-radius: 5px; font-size: 0.7rem; white-space: nowrap; opacity: 0; pointer-events: none; transition: all 0.3s ease; z-index: 100; } [data-tooltip]:hover::after { opacity: 1; transform: translateX(-50%) translateY(-5px); } /* Shimmering effect for loading skeleton */ .shimmer { position: relative; overflow: hidden; background: rgba(255, 255, 255, 0.05); } .shimmer::after { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent); animation: shimmerEffect 1.5s infinite; } @keyframes shimmerEffect { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } /* Responsive styles */ @media (max-width: 700px) { .container { border-radius: 0; height: 100vh; width: 100vw; } .header { padding: 15px; } .header h1 { font-size: 1.5rem; } .tab { font-size: 0.8rem; } .tab-content { padding: 15px; } .stats-grid { grid-template-columns: 1fr; } } /* Font imports */ @import url('https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@300;400;500;600;700&display=swap'); @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css'); </style> </head> <body> <div class="container"> <div class="header"> <h1>VitalityHub</h1> <div class="profile"> <div class="profile-img">AK</div> <div class="profile-info"> <div class="name">Alex Kim</div> <div class="goal">Goal: Build Strength</div> </div> </div> </div> <div class="tab-container"> <div class="tabs"> <div class="tab active" data-tab="dashboard"> <i class="icon fas fa-chart-line"></i> Dashboard </div> <div class="tab" data-tab="activity"> <i class="icon fas fa-running"></i> Activity </div> <div class="tab" data-tab="nutrition"> <i class="icon fas fa-utensils"></i> Nutrition </div> <div class="tab" data-tab="progress"> <i class="icon fas fa-trophy"></i> Progress <span class="notification-dot"></span> </div> </div> </div> <div class="tab-content"> <!-- Dashboard Tab --> <div class="tab-pane active" id="dashboard"> <div class="insights-card"> <div class="insights-header"> <div class="insights-title">Today's Overview</div> <div class="insights-date">May 12, 2023</div> </div> <div class="metrics"> <div class="metric"> <div class="metric-value">8,463</div> <div class="metric-label">Steps</div> </div> <div class="metric"> <div class="metric-value">1,867</div> <div class="metric-label">Calories</div> </div> <div class="metric"> <div class="metric-value">7:30</div> <div class="metric-label">Sleep (hrs)</div> </div> <div class="metric"> <div class="metric-value">68<span style="font-size: 0.7rem">%</span></div> <div class="metric-label">Hydration</div> </div> </div> </div> <div class="progress-section"> <div class="progress-title">Daily Goals</div> <div class="progress-card"> <div class="progress-header"> <div class="progress-label">Steps</div> <div class="progress-value">8,463 / 10,000</div> </div> <div class="progress-bar-container"> <div class="progress-bar steps" style="width: 84.6%"></div> </div> </div> <div class="progress-card"> <div class="progress-header"> <div class="progress-label">Calories Burned</div> <div class="progress-value">1,867 / 2,200</div> </div> <div class="progress-bar-container"> <div class="progress-bar calories" style="width: 85%"></div> </div> </div> <div class="progress-card"> <div class="progress-header"> <div class="progress-label">Water Intake</div> <div class="progress-value">1.6 / 2.5 L</div> </div> <div class="progress-bar-container"> <div class="progress-bar water" style="width: 64%"></div> </div> </div> <div class="progress-card"> <div class="progress-header"> <div class="progress-label">Sleep Duration</div> <div class="progress-value">7:30 / 8:00 hrs</div> </div> <div class="progress-bar-container"> <div class="progress-bar sleep" style="width: 93.75%"></div> </div> </div> </div> <div class="separator"></div> <div class="recommendations-list"> <div class="insights-title">Personalized Insights</div> <div class="recommendation-item"> <div class="recommendation-icon"> <i class="fas fa-heartbeat"></i> </div> <div class="recommendation-content"> <div class="recommendation-title">Cardio Zone Improvement <span class="badge steps">Trending</span></div> <div class="recommendation-desc">Your heart rate zone efficiency has improved by 12% this week.</div> </div> </div> <div class="recommendation-item"> <div class="recommendation-icon"> <i class="fas fa-apple-alt"></i> </div> <div class="recommendation-content"> <div class="recommendation-title">Protein Intake Opportunity <span class="badge nutrition">Action</span></div> <div class="recommendation-desc">Consider adding 15g more protein to meet your muscle-building goal.</div> </div> </div> <div class="recommendation-item"> <div class="recommendation-icon"> <i class="fas fa-moon"></i> </div> <div class="recommendation-content"> <div class="recommendation-title">Sleep Pattern Analysis <span class="badge sleep">Alert</span></div> <div class="recommendation-desc">Your deep sleep has decreased. Try optimizing bedroom temperature.</div> </div> </div> </div> </div> <!-- Activity Tab --> <div class="tab-pane" id="activity"> <div class="insights-card"> <div class="insights-header"> <div class="insights-title">Weekly Activity</div> <div class="insights-date">May 6 - May 12</div> </div> <div class="activity-chart"> <div class="chart-bar" style="height: 50%;" data-value="5,231"> <div class="chart-day">Mon</div> </div> <div class="chart-bar" style="height: 75%;" data-value="7,845"> <div class="chart-day">Tue</div> </div> <div class="chart-bar" style="height: 60%;" data-value="6,423"> <div class="chart-day">Wed</div> </div> <div class="chart-bar" style="height: 85%;" data-value="8,916"> <div class="chart-day">Thu</div> </div> <div class="chart-bar" style="height: 65%;" data-value="6,784"> <div class="chart-day">Fri</div> </div> <div class="chart-bar" style="height: 40%;" data-value="4,125"> <div class="chart-day">Sat</div> </div> <div class="chart-bar" style="height: 80%;" data-value="8,463"> <div class="chart-day">Sun</div> </div> </div> </div> <div class="stats-grid"> <div class="stat-card"> <div class="stat-title">Weekly Average</div> <div class="stat-value">6,827</div> <div class="stat-change positive"> <i class="fas fa-arrow-up"></i> 12.4% from last week </div> </div> <div class="stat-card"> <div class="stat-title">Active Minutes</div> <div class="stat-value">276</div> <div class="stat-change positive"> <i class="fas fa-arrow-up"></i> 8.2% from last week </div> </div> <div class="stat-card"> <div class="stat-title">Distance</div> <div class="stat-value">32.5 km</div> <div class="stat-change positive"> <i class="fas fa-arrow-up"></i> 5.7% from last week </div> </div> <div class="stat-card"> <div class="stat-title">Calories Burned</div> <div class="stat-value">14,320</div> <div class="stat-change positive"> <i class="fas fa-arrow-up"></i> 10.3% from last week </div> </div> </div> <div class="separator"></div> <div class="insights-title">Recent Workouts</div> <div class="recommendations-list"> <div class="recommendation-item"> <div class="recommendation-icon"> <i class="fas fa-dumbbell"></i> </div> <div class="recommendation-content"> <div class="recommendation-title">Upper Body Strength</div> <div class="recommendation-desc">45 mins • 320 calories • 8/10 intensity</div> </div> </div> <div class="recommendation-item"> <div class="recommendation-icon"> <i class="fas fa-biking"></i> </div> <div class="recommendation-content"> <div class="recommendation-title">HIIT Cycling</div> <div class="recommendation-desc">30 mins • 425 calories • 9/10 intensity</div> </div> </div> <div class="recommendation-item"> <div class="recommendation-icon"> <i class="fas fa-running"></i> </div> <div class="recommendation-content"> <div class="recommendation-title">Outdoor Run</div> <div class="recommendation-desc">38 mins • 386 calories • 7/10 intensity</div> </div> </div> </div> </div> <!-- Nutrition Tab --> <div class="tab-pane" id="nutrition"> <div class="insights-card"> <div class="insights-header"> <div class="insights-title">Today's Nutrition</div> <div class="insights-date">May 12, 2023</div> </div> <div class="metrics"> <div class="metric"> <div class="metric-value">1,758</div> <div class="metric-label">Calories</div> </div> <div class="metric"> <div class="metric-value">98g</div> <div class="metric-label">Protein</div> </div> <div class="metric"> <div class="metric-value">176g</div> <div class="metric-label">Carbs</div> </div> <div class="metric"> <div class="metric-value">54g</div> <div class="metric-label">Fat</div> </div> </div> </div> <div class="progress-card"> <div class="progress-header"> <div class="progress-label">Daily Calorie Goal</div> <div class="progress-value">1,758 / 2,100</div> </div> <div class="progress-bar-container"> <div class="progress-bar calories" style="width: 83.7%"></div> </div> </div> <div class="separator"></div> <div class="insights-title">Today's Meal Plan</div> <div class="meal-plan"> <div class="meal-item breakfast"> <div class="meal-icon"> <i class="fas fa-mug-hot"></i> </div> <div class="meal-content"> <div class="meal-title">Protein Oatmeal Bowl</div> <div class="meal-calories">385 calories • 24g protein</div> </div> <div class="meal-time">7:30 AM</div> </div> <div class="meal-item snack"> <div class="meal-icon"> <i class="fas fa-apple-alt"></i> </div> <div class="meal-content"> <div class="meal-title">Greek Yogurt & Berries</div> <div class="meal-calories">210 calories • 18g protein</div> </div> <div class="meal-time">10:15 AM</div> </div> <div class="meal-item lunch"> <div class="meal-icon"> <i class="fas fa-drumstick-bite"></i> </div> <div class="meal-content"> <div class="meal-title">Grilled Chicken Quinoa Bowl</div> <div class="meal-calories">520 calories • 32g protein</div> </div> <div class="meal-time">1:00 PM</div> </div> <div class="meal-item snack"> <div class="meal-icon"> <i class="fas fa-seedling"></i> </div> <div class="meal-content"> <div class="meal-title">Protein Smoothie</div> <div class="meal-calories">245 calories • 20g protein</div> </div> <div class="meal-time">4:30 PM</div> </div> <div class="meal-item dinner"> <div class="meal-icon"> <i class="fas fa-fish"></i> </div> <div class="meal-content"> <div class="meal-title">Baked Salmon & Veggies</div> <div class="meal-calories">398 calories • 28g protein</div> </div> <div class="meal-time">7:45 PM</div> </div> </div> <div class="separator"></div> <div class="insights-title">Nutritional Insights</div> <div class="recommendations-list"> <div class="recommendation-item"> <div class="recommendation-icon"> <i class="fas fa-bolt"></i> </div> <div class="recommendation-content"> <div class="recommendation-title">Energy Distribution</div> <div class="recommendation-desc">Your pre-workout meals are optimally timed for peak performance.</div> </div> </div> <div class="recommendation-item"> <div class="recommendation-icon"> <i class="fas fa-chart-line"></i> </div> <div class="recommendation-content"> <div class="recommendation-title">Protein Synthesis Window</div> <div class="recommendation-desc">Consider adding 10g protein to your post-workout meal.</div> </div> </div> </div> </div
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Travel Booking Tabs</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; } :root { --primary: #e67e22; --primary-light: #f39c12; --secondary: #27ae60; --earth-brown: #8B4513; --sand: #F5DEB3; --forest: #228B22; --ocean: #1E90FF; --mountain: #4A5568; --accent: #3498db; --dark: #2c3e50; --light: #ecf0f1; --white: #ffffff; --shadow: 0 4px 6px rgba(0, 0, 0, 0.1); --transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); } body { background-color: var(--light); color: var(--dark); min-height: 100vh; display: flex; justify-content: center; align-items: center; overflow-x: hidden; padding: 0 15px; } .container { max-width: 680px; width: 100%; background-color: var(--white); border-radius: 12px; overflow: hidden; box-shadow: var(--shadow); position: relative; height: 680px; display: flex; flex-direction: column; } .header { padding: 20px 25px; position: relative; z-index: 1; background-color: var(--white); } .header h1 { font-size: 1.8rem; margin-bottom: 5px; color: var(--dark); font-weight: 700; position: relative; display: inline-block; } .header h1::after { content: ''; position: absolute; bottom: -3px; left: 0; width: 60%; height: 3px; background-color: var(--primary); border-radius: 3px; } .header p { color: var(--mountain); font-size: 0.9rem; margin-bottom: 10px; } .tabs { display: flex; border-bottom: 1px solid #ddd; position: relative; overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none; background: var(--white); z-index: 2; } .tabs::-webkit-scrollbar { display: none; } .tab { padding: 15px 20px; cursor: pointer; font-weight: 600; font-size: 0.9rem; color: var(--mountain); transition: var(--transition); white-space: nowrap; position: relative; border-bottom: 3px solid transparent; display: flex; align-items: center; gap: 8px; } .tab.active { color: var(--primary); border-bottom: 3px solid var(--primary); } .tab-indicator { position: absolute; bottom: 0; left: 0; height: 3px; width: 100px; background-color: var(--primary); transition: transform 0.3s ease; } .tab i { font-size: 1.1rem; } .content-container { flex: 1; overflow: hidden; position: relative; } .content { height: 100%; width: 400%; display: flex; transition: transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); } .tab-content { width: 25%; height: 100%; padding: 25px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--primary-light) var(--light); } .tab-content::-webkit-scrollbar { width: 6px; } .tab-content::-webkit-scrollbar-track { background: var(--light); } .tab-content::-webkit-scrollbar-thumb { background-color: var(--primary-light); border-radius: 20px; border: 3px solid transparent; } /* Search Results Content */ .search-result { background-color: var(--white); border-radius: 8px; margin-bottom: 15px; padding: 15px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); transition: var(--transition); cursor: pointer; position: relative; overflow: hidden; display: flex; align-items: center; gap: 15px; } .search-result:hover { transform: translateY(-3px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); } .search-result::before { content: ''; position: absolute; top: 0; left: 0; width: 4px; height: 100%; background-color: var(--primary); border-radius: 2px 0 0 2px; } .search-result img { width: 80px; height: 80px; border-radius: 8px; object-fit: cover; } .result-details { flex: 1; } .result-details h3 { margin-bottom: 5px; font-size: 1rem; color: var(--dark); } .result-details p { color: var(--mountain); font-size: 0.85rem; margin-bottom: 5px; } .result-price { font-weight: 700; color: var(--primary); font-size: 1.1rem; } .result-meta { display: flex; align-items: center; gap: 10px; font-size: 0.8rem; color: var(--mountain); margin-top: 8px; } .result-meta span { display: flex; align-items: center; gap: 5px; } /* Itineraries Content */ .itinerary { background-color: var(--white); border-radius: 8px; margin-bottom: 15px; padding: 15px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); transition: var(--transition); cursor: pointer; position: relative; } .itinerary:hover { transform: translateY(-3px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); } .itinerary-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .itinerary-header h3 { font-size: 1rem; color: var(--dark); } .itinerary-dates { font-size: 0.85rem; color: var(--mountain); font-weight: 600; } .timeline { position: relative; padding-left: 30px; margin-top: 15px; } .timeline::before { content: ''; position: absolute; top: 0; left: 10px; height: 100%; width: 2px; background-color: var(--sand); border-radius: 1px; } .timeline-item { position: relative; padding-bottom: 15px; } .timeline-item:last-child { padding-bottom: 0; } .timeline-item::before { content: ''; position: absolute; top: 5px; left: -30px; width: 20px; height: 20px; border-radius: 50%; background-color: var(--white); border: 2px solid var(--primary); z-index: 1; } .timeline-item h4 { font-size: 0.9rem; margin-bottom: 5px; color: var(--dark); } .timeline-item p { font-size: 0.85rem; color: var(--mountain); margin-bottom: 5px; } .itinerary-actions { display: flex; gap: 10px; margin-top: 15px; } .btn { padding: 8px 15px; border-radius: 6px; border: none; font-weight: 600; font-size: 0.85rem; cursor: pointer; transition: var(--transition); } .btn-primary { background-color: var(--primary); color: var(--white); } .btn-primary:hover { background-color: var(--primary-light); } .btn-secondary { background-color: var(--light); color: var(--mountain); } .btn-secondary:hover { background-color: #ddd; } /* Reviews Content */ .review { background-color: var(--white); border-radius: 8px; margin-bottom: 15px; padding: 15px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); transition: var(--transition); position: relative; } .review-header { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; } .review-avatar { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; } .review-user { font-size: 0.9rem; font-weight: 600; color: var(--dark); } .review-date { font-size: 0.8rem; color: var(--mountain); } .review-stars { color: var(--primary); font-size: 0.9rem; margin-bottom: 10px; } .review-text { font-size: 0.9rem; line-height: 1.5; color: var(--mountain); } .review-destination { margin-top: 10px; font-size: 0.85rem; color: var(--primary); font-weight: 600; } /* Maps Content */ .map-container { height: 100%; display: flex; flex-direction: column; gap: 15px; } .map-wrapper { flex: 1; border-radius: 8px; overflow: hidden; position: relative; } .map { width: 100%; height: 100%; object-fit: cover; } .map-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: flex-end; padding: 15px; background: linear-gradient(to top, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0)); color: var(--white); } .map-controls { display: flex; gap: 10px; margin-bottom: 10px; } .map-btn { padding: 8px; border-radius: 50%; width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; background-color: rgba(255, 255, 255, 0.9); color: var(--dark); border: none; cursor: pointer; transition: var(--transition); } .map-btn:hover { background-color: var(--white); transform: scale(1.05); } .map-locations { display: flex; gap: 10px; overflow-x: auto; padding-bottom: 10px; scroll-snap-type: x mandatory; scrollbar-width: none; } .map-locations::-webkit-scrollbar { display: none; } .map-location { background-color: var(--white); border-radius: 8px; padding: 12px; min-width: 200px; scroll-snap-align: start; cursor: pointer; transition: var(--transition); } .map-location:hover { transform: translateY(-3px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); } .map-location h3 { font-size: 0.9rem; color: var(--dark); margin-bottom: 5px; } .map-location p { font-size: 0.8rem; color: var(--mountain); } /* Map markers */ .map-marker { position: absolute; width: 30px; height: 30px; transform: translate(-50%, -100%); cursor: pointer; transition: var(--transition); } .map-marker:hover { transform: translate(-50%, -100%) scale(1.2); } .map-marker.hotel { top: 40%; left: 35%; } .map-marker.restaurant { top: 55%; left: 60%; } .map-marker.attraction { top: 30%; left: 70%; } /* Responsive */ @media (max-width: 600px) { .container { height: 650px; } .header h1 { font-size: 1.5rem; } .tab { padding: 12px 15px; font-size: 0.8rem; } .search-result { flex-direction: column; gap: 10px; align-items: flex-start; } .search-result img { width: 100%; height: 120px; } .tab-content { padding: 15px; } } /* Animations */ @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } @keyframes ripple { 0% { box-shadow: 0 0 0 0 rgba(230, 126, 34, 0.5); } 100% { box-shadow: 0 0 0 15px rgba(230, 126, 34, 0); } } /* Apply animations */ .search-result, .itinerary, .review, .map-location { animation: fadeIn 0.4s ease forwards; animation-delay: calc(var(--i) * 0.1s); opacity: 0; } .tab.active i { animation: pulse 1s infinite; } .map-marker:active { animation: ripple 0.8s ease-out; } /* Swipe effect */ .swipe-indicator { position: absolute; bottom: 15px; left: 50%; transform: translateX(-50%); display: flex; gap: 8px; z-index: 10; } .swipe-dot { width: 8px; height: 8px; border-radius: 50%; background-color: #ddd; transition: var(--transition); } .swipe-dot.active { background-color: var(--primary); width: 20px; border-radius: 4px; } /* Creative filter component */ .filter-component { margin-bottom: 20px; background-color: var(--light); border-radius: 8px; padding: 15px; position: relative; overflow: hidden; } .filter-component::before { content: ''; position: absolute; top: 0; left: 0; width: 5px; height: 100%; background: linear-gradient(to bottom, var(--primary), var(--accent)); } .filter-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; } .filter-tag { padding: 6px 12px; border-radius: 20px; background-color: var(--white); color: var(--mountain); font-size: 0.8rem; font-weight: 600; cursor: pointer; transition: var(--transition); display: flex; align-items: center; gap: 5px; border: 1px solid #ddd; } .filter-tag:hover { border-color: var(--primary); color: var(--primary); } .filter-tag.active { background-color: var(--primary); color: var(--white); border-color: var(--primary); } .filter-tag i { font-size: 0.8rem; } </style> </head> <body> <div class="container"> <div class="header"> <h1>Wanderlust Explorer</h1> <p>Find your next adventure with personalized travel recommendations</p> </div> <div class="tabs"> <div class="tab active" data-tab="0"> <i class="fa-solid fa-magnifying-glass"></i> <span>Search Results</span> </div> <div class="tab" data-tab="1"> <i class="fa-solid fa-route"></i> <span>Itineraries</span> </div> <div class="tab" data-tab="2"> <i class="fa-solid fa-star"></i> <span>Reviews</span> </div> <div class="tab" data-tab="3"> <i class="fa-solid fa-map-location-dot"></i> <span>Map View</span> </div> </div> <div class="content-container"> <div class="content"> <!-- Search Results --> <div class="tab-content"> <div class="filter-component"> <h3>Filter your results</h3> <div class="filter-tags"> <div class="filter-tag active"><i class="fa-solid fa-filter"></i> Best Match</div> <div class="filter-tag"><i class="fa-solid fa-dollar-sign"></i> Price</div> <div class="filter-tag"><i class="fa-solid fa-star"></i> Rating</div> <div class="filter-tag"><i class="fa-solid fa-clock"></i> Duration</div> <div class="filter-tag"><i class="fa-solid fa-hotel"></i> Amenities</div> </div> </div> <div class="search-result" style="--i:1;"> <img src="https://images.unsplash.com/photo-1602002418816-5c0aeef426aa?crop=entropy&cs=tinysrgb&fit=crop&fm=jpg&h=80&ixid=MnwxfDB8MXxyYW5kb218MHx8YmFsaXx8fHx8fDE2ODc4MTg5ODQ&ixlib=rb-4.0.3&q=80&w=80" alt="Ubud Bali Resort"> <div class="result-details"> <h3>Ubud Jungle Retreat</h3> <p>Serene villas nestled in Bali's cultural heart</p> <div class="result-price">$189/night</div> <div class="result-meta"> <span><i class="fa-solid fa-star"></i> 4.8</span> <span><i class="fa-solid fa-location-dot"></i> Ubud, Bali</span> <span><i class="fa-solid fa-calendar"></i> Available</span> </div> </div> </div> <div class="search-result" style="--i:2;"> <img src="https://images.unsplash.com/photo-1601701119533-fde20cecbf4e?crop=entropy&cs=tinysrgb&fit=crop&fm=jpg&h=80&ixid=MnwxfDB8MXxyYW5kb218MHx8a3lvdG98fHx8fHwxNjg3ODE5MDQz&ixlib=rb-4.0.3&q=80&w=80" alt="Kyoto Traditional Inn"> <div class="result-details"> <h3>Kyoto Traditional Ryokan</h3> <p>Authentic Japanese experience with onsen baths</p> <div class="result-price">$210/night</div> <div class="result-meta"> <span><i class="fa-solid fa-star"></i> 4.9</span> <span><i class="fa-solid fa-location-dot"></i> Gion, Kyoto</span> <span><i class="fa-solid fa-calendar"></i> Limited</span> </div> </div> </div> <div class="search-result" style="--i:3;"> <img src="https://images.unsplash.com/photo-1565964450302-27a2fccc1d7c?crop=entropy&cs=tinysrgb&fit=crop&fm=jpg&h=80&ixid=MnwxfDB8MXxyYW5kb218MHx8c2FudG9yaW5pfHx8fHx8MTY4NzgxOTA5MA&ixlib=rb-4.0.3&q=80&w=80" alt="Santorini Villa"> <div class="result-details"> <h3>Santorini Caldera View Villa</h3> <p>Breathtaking sunset views from private infinity pool</p> <div class="result-price">$345/night</div> <div class="result-meta"> <span><i class="fa-solid fa-star"></i> 4.7</span> <span><i class="fa-solid fa-location-dot"></i> Oia, Santorini</span> <span><i class="fa-solid fa-fire"></i> Hot Deal</span> </div> </div> </div> <div class="search-result" style="--i:4;"> <img src="https://images.unsplash.com/photo-1588733103629-b77afe0425ce?crop=entropy&cs=tinysrgb&fit=crop&fm=jpg&h=80&ixid=MnwxfDB8MXxyYW5kb218MHx8dHVsdW18fHx8fHwxNjg3ODE5MTI3&ixlib=rb-4.0.3&q=80&w=80" alt="Tulum Beachfront"> <div class="result-details"> <h3>Tulum Eco Beachfront Cabana</h3> <p>Sustainable luxury steps away from turquoise waters</p> <div class="result-price">$275/night</div> <div class="result-meta"> <span><i class="fa-solid fa-star"></i> 4.6</span> <span><i class="fa-solid fa-location-dot"></i> Tulum, Mexico</span> <span><i class="fa-solid fa-leaf"></i> Eco-friendly</span> </div> </div> </div> <div class="search-result" style="--i:5;"> <img src="https://images.unsplash.com/photo-1579027989536-b7b1f875659b?crop=entropy&cs=tinysrgb&fit=crop&fm=jpg&h=80&ixid=MnwxfDB8MXxyYW5kb218MHx8bWFycmFrZWNofHx8fHx8MTY4NzgxOTE2NA&ixlib=rb-4.0.3&q=80&w=80" alt="Marrakech Riad"> <div class="result-details"> <h3>Marrakech Authentic Riad</h3> <p>Ornate courtyard paradise in the heart of the medina</p> <div class="result-price">$165/night</div> <div class="result-meta"> <span><i class="fa-solid fa-star"></i> 4.8</span> <span><i class="fa-solid fa-location-dot"></i> Medina, Marrakech</span> <span><i class="fa-solid fa-users"></i> Family-friendly</span> </div> </div> </div> </div> <!-- Itineraries --> <div class="tab-content"> <div class="itinerary" style="--i:1;"> <div class="itinerary-header"> <h3>Japan Cultural Expedition</h3> <div class="itinerary-dates">May 12 - 24, 2023</div> </div> <p>Immerse yourself in the perfect blend of ancient traditions and modern wonders across Japan's iconic cities.</p> <div class="timeline"> <div class="timeline-item"> <h4>Days 1-3: Tokyo Exploration</h4> <p>Shibuya crossing, Meiji Shrine, teamLab Borderless museum experience</p> </div> <div class="timeline-item"> <h4>Days 4-6: Kyoto Heritage</h4> <p>Fushimi Inari Shrine, bamboo forest walk, tea ceremony with maiko</p> </div> <div class="timeline-item"> <h4>Days 7-9: Mount Fuji & Hakone</h4> <p>Lake Ashi cruise, onsen ryokan stay, panoramic Fuji views</p> </div> <div class="timeline-item"> <h4>Days 10-12: Osaka Flavors</h4> <p>Street food tour, Osaka Castle, day trip to Nara Deer Park</p> </div> </div> <div class="itinerary-actions"> <button class="btn btn-primary">Save Itinerary</button> <button class="btn btn-secondary">Customize</button> </div> </div> <div class="itinerary" style="--i:2;"> <div class="itinerary-header"> <h3>Greek Island Hopping</h3> <div class="itinerary-dates">July 5 - 17, 2023</div> </div> <p>Experience the quintessential Mediterranean vacation with breathtaking landscapes and vibrant island culture.</p> <div class="timeline"> <div class="timeline-item"> <h4>Days 1-3: Athens & History</h4> <p>Acropolis visit, Plaka neighborhood exploration, coastal dinner</p> </div> <div class="timeline-item"> <h4>Days 4-7: Santorini Sunsets</h4> <p>Caldera view accommodations, Oia sunset, catamaran cruise</p> </div> <div class="timeline-item"> <h4>Days 8-10: Milos Hidden Coves</h4> <p>Sarakiniko beach, traditional fishing village stays, boat tour</p> </div> <div class="timeline-item"> <h4>Days 11-13: Crete Exploration</h4> <p>Knossos Palace, Balos Lagoon, Cretan cooking class</p> </div> </div> <div class="itinerary-actions"> <button class="btn btn-primary">Save Itinerary</button> <button class="btn btn-secondary">Customize</button> </div> </div> <div class="itinerary" style="--i:3;"> <div class="itinerary-header"> <h3>Peru & Machu Picchu Adventure</h3> <div class="itinerary-dates">September 10 - 20, 2023</div> </div> <p>Journey through mystical ruins, vibrant markets, and breathtaking Andean landscapes on this South American expedition.</p> <div class="timeline"> <div class="timeline-item"> <h4>Days 1-2: Lima Gastronomy</h4> <p>Miraflores district, ceviche cooking class, historic center tour</p> </div> <div class="timeline-item"> <h4>Days 3-5: Sacred Valley</h4> <p>Pisac market, Ollantaytambo fortress, local weaving workshop</p> </div> <div class="timeline-item"> <h4>Days 6-7: Machu Picchu Wonder</h4> <p>Scenic train journey, guided citadel tour, sunrise experience</p> </div> <div class="timeline-item"> <h4>Days 8-10: Cusco & Culture</h4> <p>San Pedro market, Sacsayhuaman ruins, Andean music night</p> </div> </div> <div class="itinerary-actions"> <button class="btn btn-primary">Save Itinerary</button> <button class="btn btn-secondary">Customize</button> </div> </div> </div> <!-- Reviews --> <div class="tab-content"> <div class="review" style="--i:1;"> <div class="review-header"> <img src="https://randomuser.me/api/portraits/women/44.jpg" alt="User" class="review-avatar"> <div> <div class="review-user">Emily K.</div> <div class="review-date">Traveled April 2023</div> </div> </div> <div class="review-stars">★★★★★</div> <p class="review-text">The Ryokan Ginkaku exceeded all my expectations. The staff's attention to detail was incredible - from the welcome tea ceremony to the kaiseki dinner served in our room. The onsen with forest views was pure magic, especially at sunset. This was truly an authentic Japanese experience I'll never forget.</p> <div class="review-destination">Kyoto Traditional Ryokan, Japan</div> </div> <div class="review" style="--i:2;"> <div class="review-header"> <img src="https://randomuser.me/api/portraits/men/32.jpg" alt="User" class="review-avatar"> <div> <div class="review-user">Marco T.</div> <div class="review-date">Traveled March 2023</div> </div> </div> <div class="review-stars">★★★★☆</div> <p class="review-text">Our stay at the Santorini Caldera View Villa was breathtaking. Waking up to that blue dome view every morning was surreal. The private infinity pool was perfect for afternoon dips after exploring the island. Only giving 4 stars because the Wi-Fi was spotty, but honestly, with views like that, who needs internet?</p> <div class="review-destination">Santorini Caldera View Villa, Greece</div> </div> <div class="review" style="--i:3;"> <div class="review-header"> <img src="https://randomuser.me/api/portraits/women/65.jpg" alt="User" class="review-avatar"> <div> <div class="review-user">Sarah J.</div> <div class="review-date">Traveled May 2023</div> </div> </div> <div class="review-stars">★★★★★</div> <p class="review-text">The Ubud Jungle Retreat was pure bliss. Our villa had the most stunning rice paddy views, and the outdoor shower under the stars was magical. The morning yoga sessions on the deck followed by a floating breakfast in our private pool made every day special. The staff even arranged a surprise birthday dinner for my husband with local dancers!</p> <div class="review-destination">Ubud Jungle Retreat, Bali</div> </div> <div class="review" style="--i:4;"> <div class="review-header"> <img src="https://randomuser.me/api/portraits/men/78.jpg" alt="User" class="review-avatar"> <div> <div class="review-user">Alex W.</div> <div class="review-date">Traveled February 2023</div> </div> </div> <div class="review-stars">★★★★☆</div> <p class="review-text">Our eco-cabana in Tulum was the perfect digital detox. Solar-powered but still luxurious, with handcrafted furniture and the softest organic linens. Being steps from that turquoise water was incredible. The complimentary bikes made it easy to explore the ruins and cenotes nearby. Breakfast with fresh tropical fruits daily was a highlight!</p> <div class="review-destination">Tulum Eco Beachfront Cabana, Mexico</div> </div> </div> <!-- Map View --> <div class="tab-content"> <div class="map-container"> <div class="map-wrapper"> <img src="https://images.unsplash.com/photo-1526778548025-fa2f459cd5ce?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1350&q=80" alt="Travel Map" class="map"> <div class="map-marker hotel"> <svg viewBox="0 0 24 24" width="30" height="30"> <path fill="#e67e22" d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/> </svg> </div> <div class="map-marker restaurant"> <svg viewBox
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>The Chronicle | Digital News Magazine</title> <style> @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700;900&family=Source+Sans+Pro:wght@300;400;600&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } :root { --primary-color: #1a1a1a; --accent-color: #c41e3a; --text-color: #333; --light-bg: #f8f8f8; --tab-bg: #fff; --border-color: #ddd; --transition: all 0.3s ease; } body { font-family: 'Source Sans Pro', sans-serif; color: var(--text-color); background-color: var(--light-bg); line-height: 1.6; font-size: 16px; max-width: 700px; margin: 0 auto; overflow-x: hidden; height: 700px; } .container { width: 100%; max-width: 700px; margin: 0 auto; padding: 0; height: 700px; display: flex; flex-direction: column; } header { background-color: var(--primary-color); color: white; padding: 20px; position: relative; } .header-content { display: flex; justify-content: space-between; align-items: center; } .logo { font-family: 'Playfair Display', serif; font-size: 28px; font-weight: 900; letter-spacing: -1px; margin: 0; } .logo span { color: var(--accent-color); } .date { font-size: 14px; margin-top: 5px; opacity: 0.8; } .trending { display: flex; align-items: center; margin-top: 10px; padding-top: 10px; border-top: 1px solid rgba(255, 255, 255, 0.2); overflow: hidden; } .trending-label { background-color: var(--accent-color); padding: 4px 8px; font-weight: 600; font-size: 12px; text-transform: uppercase; margin-right: 15px; white-space: nowrap; } .trending-news { animation: scroll 20s linear infinite; white-space: nowrap; } @keyframes scroll { 0% { transform: translateX(100%); } 100% { transform: translateX(-100%); } } .tabs-container { padding: 0; background-color: var(--primary-color); position: relative; } .tabs { display: flex; overflow-x: auto; scrollbar-width: none; /* Firefox */ } .tabs::-webkit-scrollbar { display: none; /* Chrome, Safari, Edge */ } .tab { padding: 15px 25px; background-color: var(--primary-color); color: white; font-family: 'Playfair Display', serif; font-size: 16px; font-weight: 700; cursor: pointer; transition: var(--transition); position: relative; white-space: nowrap; border: none; outline: none; text-transform: uppercase; letter-spacing: 1px; } .tab::after { content: ''; position: absolute; width: 0; height: 3px; bottom: 0; left: 50%; background-color: var(--accent-color); transition: var(--transition); transform: translateX(-50%); } .tab:hover::after, .tab.active::after { width: 70%; } .tab.active { color: #fff; background-color: var(--primary-color); } .scroll-arrows { position: absolute; top: 0; display: flex; height: 100%; align-items: center; pointer-events: none; } .scroll-left { left: 0; background: linear-gradient(to right, var(--primary-color), transparent); padding-left: 10px; } .scroll-right { right: 0; background: linear-gradient(to left, var(--primary-color), transparent); padding-right: 10px; } .arrow-btn { cursor: pointer; background: rgba(255, 255, 255, 0.1); border: none; color: white; width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; pointer-events: all; transition: var(--transition); } .arrow-btn:hover { background: rgba(255, 255, 255, 0.3); } .tab-content { display: none; padding: 20px; background-color: white; height: 100%; overflow-y: auto; animation: fadeIn 0.5s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .tab-content.active { display: block; } .article { margin-bottom: 25px; border-bottom: 1px solid var(--border-color); padding-bottom: 20px; position: relative; transition: var(--transition); } .article:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; } .article:hover { transform: translateX(5px); } .article-category { font-family: 'Playfair Display', serif; font-size: 12px; color: var(--accent-color); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 8px; font-weight: 700; } .article-title { font-family: 'Playfair Display', serif; font-size: 24px; font-weight: 700; line-height: 1.3; margin-bottom: 10px; color: var(--primary-color); } .article-meta { display: flex; align-items: center; font-size: 14px; color: #666; margin-bottom: 10px; } .article-author { margin-right: 15px; font-weight: 600; } .article-time { position: relative; padding-left: 15px; } .article-time::before { content: '•'; position: absolute; left: 5px; } .article-excerpt { font-size: 16px; line-height: 1.6; margin-bottom: 15px; } .read-more { color: var(--accent-color); text-decoration: none; font-weight: 600; transition: var(--transition); display: inline-block; position: relative; } .read-more::after { content: ''; position: absolute; width: 100%; height: 2px; bottom: -2px; left: 0; background-color: var(--accent-color); transform: scaleX(0); transform-origin: bottom right; transition: transform 0.3s ease; } .read-more:hover::after { transform: scaleX(1); transform-origin: bottom left; } .featured { position: relative; margin-bottom: 30px; border-radius: 5px; overflow: hidden; box-shadow: 0 5px 15px rgba(0,0,0,0.1); } .featured-image { width: 100%; height: 200px; object-fit: cover; transition: transform 0.5s ease; } .featured:hover .featured-image { transform: scale(1.05); } .featured-content { position: absolute; bottom: 0; left: 0; width: 100%; padding: 20px; background: linear-gradient(to top, rgba(0,0,0,0.8), transparent); color: white; } .featured-title { font-family: 'Playfair Display', serif; font-size: 28px; font-weight: 700; line-height: 1.2; margin-bottom: 10px; text-shadow: 1px 1px 3px rgba(0,0,0,0.5); } .featured-meta { display: flex; align-items: center; font-size: 14px; margin-bottom: 10px; } /* Responsive */ @media (max-width: 600px) { .tab { padding: 12px 15px; font-size: 14px; } .featured-title { font-size: 20px; } .article-title { font-size: 20px; } header { padding: 15px; } .logo { font-size: 24px; } } /* Unique Feature: Article Highlight */ .article-highlight { position: absolute; top: 0; left: -5px; width: 3px; height: 0; background-color: var(--accent-color); transition: height 0.3s ease; } .article:hover .article-highlight { height: 100%; } /* Breaking News Notification */ .breaking-news { position: relative; padding: 15px; margin-bottom: 20px; background-color: #fff3f3; border-left: 4px solid var(--accent-color); animation: pulse 2s infinite; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(196, 30, 58, 0.4); } 70% { box-shadow: 0 0 0 10px rgba(196, 30, 58, 0); } 100% { box-shadow: 0 0 0 0 rgba(196, 30, 58, 0); } } .breaking-label { display: inline-block; background-color: var(--accent-color); color: white; padding: 3px 8px; font-weight: 600; font-size: 12px; margin-bottom: 8px; } .breaking-title { font-family: 'Playfair Display', serif; font-size: 18px; font-weight: 700; margin-bottom: 5px; } .breaking-time { font-size: 14px; color: #666; } </style> </head> <body> <div class="container"> <header> <div class="header-content"> <h1 class="logo">The <span>Chronicle</span></h1> <div class="date" id="current-date">June 12, 2024</div> </div> <div class="trending"> <div class="trending-label">TRENDING</div> <div class="trending-news">Global markets respond to central bank decisions • French elections enter second round • Climate summit reaches breakthrough agreement</div> </div> </header> <div class="tabs-container"> <div class="tabs" id="tabs"> <button class="tab active" data-tab="world">World</button> <button class="tab" data-tab="politics">Politics</button> <button class="tab" data-tab="business">Business</button> <button class="tab" data-tab="technology">Technology</button> <button class="tab" data-tab="sports">Sports</button> <button class="tab" data-tab="culture">Culture</button> <button class="tab" data-tab="science">Science</button> </div> <div class="scroll-arrows scroll-left"> <button class="arrow-btn" id="scroll-left">◀</button> </div> <div class="scroll-arrows scroll-right"> <button class="arrow-btn" id="scroll-right">▶</button> </div> </div> <div class="tab-content active" id="world"> <div class="breaking-news"> <div class="breaking-label">BREAKING</div> <div class="breaking-title">Peace Negotiations Resume in Middle East After Six-Month Standstill</div> <div class="breaking-time">20 minutes ago</div> </div> <div class="featured"> <img src="https://source.unsplash.com/random/700x400/?diplomacy" alt="UN Climate Summit" class="featured-image"> <div class="featured-content"> <div class="featured-title">UN Climate Summit Achieves Historic Carbon Agreement</div> <div class="featured-meta"> <span class="article-author">By Emma Richardson</span> <span class="article-time">3 hours ago</span> </div> </div> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Diplomacy</div> <h2 class="article-title">European Leaders Convene Emergency Meeting on Eastern Border Tensions</h2> <div class="article-meta"> <span class="article-author">By Thomas Weber</span> <span class="article-time">5 hours ago</span> </div> <p class="article-excerpt">Brussels becomes center stage for high-stakes negotiations as leaders from 27 EU nations meet to address escalating military presence along eastern borders. Security analysts warn that the situation could deteriorate without diplomatic intervention.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Humanitarian Crisis</div> <h2 class="article-title">Aid Organizations Struggle to Reach Remote Areas After Devastating Floods</h2> <div class="article-meta"> <span class="article-author">By Sarah Johnson</span> <span class="article-time">Yesterday</span> </div> <p class="article-excerpt">Unprecedented monsoon rains have left over 300,000 people displaced across Southeast Asia, destroying critical infrastructure and complicating relief efforts. "We're facing a race against time," says UN coordinator.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Global Economy</div> <h2 class="article-title">African Free Trade Agreement Enters Final Implementation Phase</h2> <div class="article-meta"> <span class="article-author">By Daniel Okonkwo</span> <span class="article-time">2 days ago</span> </div> <p class="article-excerpt">The landmark continental trade agreement, projected to create a $3.4 trillion economic bloc, begins its final implementation phase with 42 countries now fully participating. Experts call it a transformative moment for African economies.</p> <a href="#" class="read-more">Continue reading</a> </div> </div> <div class="tab-content" id="politics"> <div class="featured"> <img src="https://source.unsplash.com/random/700x400/?parliament" alt="Parliament" class="featured-image"> <div class="featured-content"> <div class="featured-title">Constitutional Reform Bill Passes After Heated 14-Hour Session</div> <div class="featured-meta"> <span class="article-author">By Robert Chambers</span> <span class="article-time">6 hours ago</span> </div> </div> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Election Analysis</div> <h2 class="article-title">Coalition Talks Intensify as Deadlock Continues in Regional Parliament</h2> <div class="article-meta"> <span class="article-author">By Victoria Hernandez</span> <span class="article-time">Yesterday</span> </div> <p class="article-excerpt">Three weeks after elections delivered a hung parliament, centrist and progressive parties engage in complex negotiations. Political analysts suggest a minority government may be the only viable solution to avoid a second election.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Policy</div> <h2 class="article-title">Healthcare Reform Package Faces Critical Senate Vote Tomorrow</h2> <div class="article-meta"> <span class="article-author">By James McKinley</span> <span class="article-time">12 hours ago</span> </div> <p class="article-excerpt">The comprehensive legislation, which would overhaul prescription drug pricing and expand coverage for millions, faces its final hurdle. Several key senators remain undecided, making the outcome uncertain.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">International Relations</div> <h2 class="article-title">Diplomatic Row Escalates After Controversial Comments by Foreign Minister</h2> <div class="article-meta"> <span class="article-author">By Sophia Chen</span> <span class="article-time">4 hours ago</span> </div> <p class="article-excerpt">Tensions between neighboring countries reached new heights following unscripted remarks during a press conference. Both nations have recalled their ambassadors for consultations, raising concerns about regional stability.</p> <a href="#" class="read-more">Continue reading</a> </div> </div> <div class="tab-content" id="business"> <div class="featured"> <img src="https://source.unsplash.com/random/700x400/?stockmarket" alt="Stock Market" class="featured-image"> <div class="featured-content"> <div class="featured-title">Tech Stocks Rally After Surprise Interest Rate Decision</div> <div class="featured-meta"> <span class="article-author">By Michael Lin</span> <span class="article-time">2 hours ago</span> </div> </div> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Corporate Strategy</div> <h2 class="article-title">Merger Creating Largest Pharmaceutical Company Receives Regulatory Approval</h2> <div class="article-meta"> <span class="article-author">By Alexandra Davies</span> <span class="article-time">Yesterday</span> </div> <p class="article-excerpt">The $68 billion merger, which had faced intense scrutiny from competition authorities, was finally approved with significant divestiture requirements. Industry analysts expect waves of consolidation to follow.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Energy Markets</div> <h2 class="article-title">Renewable Energy Investments Surpass Oil & Gas for First Time</h2> <div class="article-meta"> <span class="article-author">By Carlos Mendoza</span> <span class="article-time">3 days ago</span> </div> <p class="article-excerpt">Global capital flows have reached a historic inflection point as investments in renewable energy infrastructure exceeded traditional fossil fuel projects. Market analysts cite policy incentives and shifting investor sentiment as key drivers.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Labor Market</div> <h2 class="article-title">Tech Layoffs Continue Despite Strong Overall Employment Data</h2> <div class="article-meta"> <span class="article-author">By Rachel Goldman</span> <span class="article-time">5 hours ago</span> </div> <p class="article-excerpt">While national unemployment figures remain at historic lows, technology companies continue announcing significant workforce reductions. Industry experts point to over-hiring during the pandemic boom and shifting strategic priorities.</p> <a href="#" class="read-more">Continue reading</a> </div> </div> <div class="tab-content" id="technology"> <div class="featured"> <img src="https://source.unsplash.com/random/700x400/?technology" alt="Technology" class="featured-image"> <div class="featured-content"> <div class="featured-title">Revolutionary Quantum Computing Breakthrough Announced by Research Team</div> <div class="featured-meta"> <span class="article-author">By Dr. Amelia Wong</span> <span class="article-time">5 hours ago</span> </div> </div> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Artificial Intelligence</div> <h2 class="article-title">Landmark AI Regulation Bill Advances Through Committee</h2> <div class="article-meta"> <span class="article-author">By Nathan Reynolds</span> <span class="article-time">Yesterday</span> </div> <p class="article-excerpt">After months of testimony from industry leaders and ethics experts, lawmakers have advanced comprehensive legislation establishing guardrails for artificial intelligence development. The bill creates a new regulatory framework and accountability measures.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Cybersecurity</div> <h2 class="article-title">Critical Infrastructure Agencies Launch Coordinated Defense Initiative</h2> <div class="article-meta"> <span class="article-author">By Sonia Kapoor</span> <span class="article-time">2 days ago</span> </div> <p class="article-excerpt">Following a series of sophisticated attacks targeting utilities and transportation systems, government agencies have unveiled a joint initiative to strengthen digital defenses. The program includes information sharing protocols and rapid response teams.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Innovation</div> <h2 class="article-title">New Battery Technology Could Double Electric Vehicle Range</h2> <div class="article-meta"> <span class="article-author">By David Zhang</span> <span class="article-time">3 days ago</span> </div> <p class="article-excerpt">Researchers have developed a solid-state battery prototype that demonstrates twice the energy density of current lithium-ion technologies. The breakthrough addresses key challenges of temperature management and manufacturing scalability.</p> <a href="#" class="read-more">Continue reading</a> </div> </div> <div class="tab-content" id="sports"> <div class="featured"> <img src="https://source.unsplash.com/random/700x400/?olympics" alt="Olympics" class="featured-image"> <div class="featured-content"> <div class="featured-title">Underdog Nation Secures Record Medal Count in Olympic Games</div> <div class="featured-meta"> <span class="article-author">By Marcus Johnson</span> <span class="article-time">8 hours ago</span> </div> </div> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Football</div> <h2 class="article-title">Champions League Final Set After Dramatic Semi-Final Comeback</h2> <div class="article-meta"> <span class="article-author">By Luis Fernandez</span> <span class="article-time">Yesterday</span> </div> <p class="article-excerpt">In one of the most remarkable turnarounds in recent football history, the underdog team overcame a three-goal deficit to secure their first Champions League final appearance in 25 years. The winning goal came in the 94th minute.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Tennis</div> <h2 class="article-title">Rising Star Defeats Defending Champion in Grand Slam Upset</h2> <div class="article-meta"> <span class="article-author">By Elena Petrova</span> <span class="article-time">4 hours ago</span> </div> <p class="article-excerpt">The 19-year-old qualifier produced a stunning performance to eliminate the world number one in a five-set thriller. Tennis legends described the match as "one of the finest displays of mental fortitude" seen on the grand slam stage.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Basketball</div> <h2 class="article-title">Historic Three-Team Trade Reshapes Championship Favorites</h2> <div class="article-meta"> <span class="article-author">By Jamal Washington</span> <span class="article-time">2 days ago</span> </div> <p class="article-excerpt">In the most complex transaction of the offseason, three championship contenders have executed a blockbuster trade involving five All-Stars and multiple draft picks. League analysts are divided on which team emerges as the biggest winner.</p> <a href="#" class="read-more">Continue reading</a> </div> </div> <div class="tab-content" id="culture"> <div class="featured"> <img src="https://source.unsplash.com/random/700x400/?festival" alt="Art Festival" class="featured-image"> <div class="featured-content"> <div class="featured-title">International Arts Festival Opens with Groundbreaking Mixed Reality Installation</div> <div class="featured-meta"> <span class="article-author">By Isabelle Morgan</span> <span class="article-time">Yesterday</span> </div> </div> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Cinema</div> <h2 class="article-title">Independent Film Sweeps Major Awards at Prestigious Festival</h2> <div class="article-meta"> <span class="article-author">By Paolo Rossi</span> <span class="article-time">3 days ago</span> </div> <p class="article-excerpt">The low-budget feature, produced with a cast of non-professional actors and shot entirely on location, has taken top honors at one of cinema's most exclusive festivals. Critics praise its "unflinching authenticity and visual poetry."</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Literature</div> <h2 class="article-title">Long-Lost Manuscript by Renowned Author Discovered in University Archives</h2> <div class="article-meta"> <span class="article-author">By Claire Hudson</span> <span class="article-time">1 week ago</span> </div> <p class="article-excerpt">Literary scholars are celebrating the discovery of a complete, previously unknown novel by one of the 20th century's most influential writers. The manuscript was found among unprocessed papers donated to a university library decades ago.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Music</div> <h2 class="article-title">Genre-Defying Album Sets Streaming Records Despite Industry Skepticism</h2> <div class="article-meta"> <span class="article-author">By Marcus Williams</span> <span class="article-time">2 days ago</span> </div> <p class="article-excerpt">Released without traditional promotion and defying easy categorization, the experimental album has shattered first-week streaming records. Music industry executives are reassessing marketing strategies in light of its unexpected success.</p> <a href="#" class="read-more">Continue reading</a> </div> </div> <div class="tab-content" id="science"> <div class="featured"> <img src="https://source.unsplash.com/random/700x400/?research" alt="Scientific Research" class="featured-image"> <div class="featured-content"> <div class="featured-title">Breakthrough Study Identifies Promising Approach to Neurodegenerative Disease Treatment</div> <div class="featured-meta"> <span class="article-author">By Dr. Jonathan Park</span> <span class="article-time">3 days ago</span> </div> </div> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Astronomy</div> <h2 class="article-title">Webb Telescope Captures Evidence of Water Vapor on Distant Exoplanet</h2> <div class="article-meta"> <span class="article-author">By Dr. Maria Rodriguez</span> <span class="article-time">Yesterday</span> </div> <p class="article-excerpt">In a significant astronomical discovery, the James Webb Space Telescope has detected clear signatures of water vapor in the atmosphere of a potentially habitable exoplanet. Scientists call it "the most promising candidate yet" in the search for extraterrestrial life.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Genetics</div> <h2 class="article-title">CRISPR Gene Editing Technique Shows Promise in Clinical Trial for Rare Disease</h2> <div class="article-meta"> <span class="article-author">By Dr. Alex Foster</span> <span class="article-time">5 days ago</span> </div> <p class="article-excerpt">Early results from a pioneering clinical trial suggest that gene editing technology may provide a durable treatment for a previously untreatable genetic disorder. Patients showed significant improvement in key biomarkers six months after a single treatment.</p> <a href="#" class="read-more">Continue reading</a> </div> <div class="article"> <div class="article-highlight"></div> <div class="article-category">Environment</div> <h2 class="article-title">Novel Carbon Capture Material Could Transform Climate Change Mitigation</h2> <div class="article-meta"> <span class="article-author">By Dr. Sophie Anderson</span> <span class="article-time">1 week ago</span> </div> <p class="article-excerpt">Engineers have developed a revolutionary material capable of capturing carbon dioxide from ambient air at unprecedented rates and with minimal energy requirements. The technology could be scaled for industrial applications within three years.</p> <a href="#" class="read-more">Continue reading</a> </div> </div> </div> <script> // Set current date const dateElement = document.getElementById('current-date'); const options = { year: 'numeric', month: 'long', day: 'numeric' }; const currentDate = new Date().toLocaleDateString('en-US', options); dateElement.textContent = currentDate; // Tab functionality const tabs = document.querySelectorAll('.tab'); const tabContents = document.querySelectorAll('.tab-content'); tabs.forEach(tab => { tab.addEventListener('click', () => { // Remove active class from all tabs and contents tabs.forEach(t => t.classList.remove('active')); tabContents.forEach(content => content.classList.remove('active')); // Add active class to clicked tab and corresponding content tab.classList.add('active'); const tabId = tab.getAttribute('data-tab'); document.getElementById(tabId).classList.add('active'); }); }); // Horizontal scrolling for tabs const tabsContainer = document.getElementById('tabs'); const scrollLeftBtn = document.getElementById('scroll-left'); const scrollRightBtn = document.getElementById('scroll-right'); scrollLeftBtn.addEventListener('click', () => { tabsContainer.scrollBy({ left: -200, behavior: 'smooth' }); }); scrollRightBtn.addEventListener('click', () => { tabsContainer.scrollBy({ left: 200, behavior: 'smooth' }); }); // Check scroll position to show/hide arrows tabsContainer.addEventListener('scroll', checkScrollPosition); window.addEventListener('resize', checkScrollPosition); function checkScrollPosition() { const isAtStart = tabsContainer.scrollLeft === 0; const isAtEnd = tabsContainer.scrollLeft >= tabsContainer.scrollWidth - tabsContainer.clientWidth - 5; scrollLeftBtn.style.opacity = isAtStart ? '0.3' : '1'; scrollRightBtn.style.opacity = isAtEnd ? '0.3' : '1'; } // Initial check checkScrollPosition(); // Smooth scroll to active tab function scrollToActiveTab() { const activeTab = document.querySelector('.tab.active'); if (activeTab) { const tabsRect = tabsContainer.getBoundingClientRect(); const activeTabRect = activeTab.getBoundingClientRect(); // Calculate the scroll position to center the active tab const scrollPos = activeTab.offsetLeft - (tabsRect.width / 2) + (activeTabRect.width / 2); tabsContainer.scrollTo({ left: scrollPos, behavior: 'smooth' }); } } // Scroll to active tab on load window.addEventListener('load', scrollToActiveTab); // Add hover effect for articles const articles = document.querySelectorAll('.article'); articles.forEach(article => { article.addEventListener('mouseenter', () => { article.style.transform = 'translateX(10px)'; }); article.addEventListener('mouseleave', () => { article.style.transform = 'translateX(0)'; }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Artist Portfolio Tabs</title> <style> @import url('https://fonts.googleapis.com/css2?family=Caveat:wght@400;700&family=Montserrat:wght@300;400;600&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } :root { --bg-color: #f7f5f2; --accent-1: #e85d75; --accent-2: #5c9ead; --accent-3: #e19e23; --text-color: #333333; --transition: all 0.4s cubic-bezier(0.23, 1, 0.32, 1); } body { font-family: 'Montserrat', sans-serif; background-color: var(--bg-color); color: var(--text-color); max-width: 700px; margin: 0 auto; height: 100vh; padding: 20px; overflow-x: hidden; } .portfolio-container { max-width: 100%; height: 660px; position: relative; overflow: hidden; border-radius: 12px; box-shadow: 0 8px 30px rgba(0, 0, 0, 0.08); background-color: white; } .header { padding: 25px 30px 15px; position: relative; z-index: 10; } .artist-title { font-weight: 300; font-size: 16px; letter-spacing: 3px; text-transform: uppercase; margin-bottom: 5px; color: #888; } .artist-name { font-family: 'Caveat', cursive; font-size: 42px; margin-bottom: 20px; position: relative; display: inline-block; } .artist-name::after { content: ""; position: absolute; width: 40%; height: 6px; background-color: var(--accent-1); bottom: 0; left: 0; border-radius: 3px; transform: translateY(5px); } .tabs-container { position: relative; } .tabs { display: flex; list-style: none; padding: 0 30px; border-bottom: 1px solid rgba(0, 0, 0, 0.1); position: relative; z-index: 2; } .tab { padding: 12px 5px; margin-right: 25px; cursor: pointer; font-size: 15px; position: relative; transition: var(--transition); font-weight: 600; color: #888; } .tab::after { content: ""; position: absolute; bottom: -1px; left: 0; width: 0; height: 3px; background-color: var(--accent-2); transition: var(--transition); border-radius: 2px 2px 0 0; } .tab.active { color: var(--text-color); } .tab.active::after { width: 100%; } .tab:hover { color: var(--text-color); } .tab-content { padding: 30px; height: 500px; overflow-y: auto; position: relative; opacity: 0; transform: translateY(20px); transition: var(--transition); display: none; } .tab-content.active { opacity: 1; transform: translateY(0); display: block; } .gallery-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 20px; } .gallery-item { position: relative; border-radius: 8px; overflow: hidden; aspect-ratio: 1; cursor: pointer; transition: var(--transition); transform: scale(1); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); } .gallery-item:hover { transform: scale(1.05); z-index: 1; box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); } .gallery-item img { width: 100%; height: 100%; object-fit: cover; transition: var(--transition); } .gallery-item:hover img { filter: brightness(1.1); } .gallery-item::before { content: ""; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(to top, rgba(0, 0, 0, 0.5), transparent); opacity: 0; transition: var(--transition); } .gallery-item:hover::before { opacity: 1; } .gallery-item-title { position: absolute; bottom: 0; left: 0; padding: 15px; color: white; font-family: 'Caveat', cursive; font-size: 18px; opacity: 0; transform: translateY(10px); transition: var(--transition); } .gallery-item:hover .gallery-item-title { opacity: 1; transform: translateY(0); } .project { margin-bottom: 40px; } .project-title { font-size: 24px; margin-bottom: 15px; font-weight: 600; display: flex; align-items: center; } .project-title::before { content: ""; display: inline-block; width: 12px; height: 12px; background-color: var(--accent-3); margin-right: 10px; border-radius: 50%; } .project-description { margin-bottom: 15px; line-height: 1.6; color: #555; } .project-details { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 10px; } .project-tag { background-color: rgba(92, 158, 173, 0.15); color: var(--accent-2); padding: 5px 12px; border-radius: 20px; font-size: 13px; font-weight: 600; } .testimonial { margin-bottom: 30px; position: relative; padding-left: 20px; border-left: 3px solid var(--accent-1); } .testimonial-content { font-style: italic; line-height: 1.6; margin-bottom: 15px; color: #555; } .testimonial-author { font-weight: 600; display: flex; align-items: center; } .testimonial-role { font-size: 14px; color: #888; font-weight: normal; margin-left: 8px; } .testimonial::before { content: """; position: absolute; top: -20px; left: 15px; font-size: 60px; color: rgba(232, 93, 117, 0.15); font-family: Georgia, serif; } .tab-indicator { height: 3px; position: absolute; bottom: -1px; background-color: var(--accent-2); transition: var(--transition); border-radius: 2px 2px 0 0; z-index: 1; } .ink-splatter { position: absolute; width: 150px; height: 150px; background-repeat: no-repeat; background-size: contain; opacity: 0.1; z-index: 0; pointer-events: none; } .splatter1 { top: 20%; right: 5%; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath fill='%23e85d75' d='M53.3 30.2c3.1-1.5 6.3-0.9 9.4-0.4 3.1 0.5 6.1 1.7 9.1 2.7 3 1 6 1.8 8.9 3 2.9 1.2 5.8 2.8 7.9 5.2 2.1 2.4 3.3 5.7 3.3 9 0 3.3-1.2 6.6-3.3 9-2.1 2.4-5 4-7.9 5.2-2.9 1.2-5.9 2-8.9 3-3 1-6 2.2-9.1 2.7-3.1 0.5-6.3 0.3-9.4-1.2-3.1-1.5-5.9-4.2-8.2-7.2-2.3-3-4.2-6.4-6.1-9.7-1.9-3.3-3.7-6.7-5.6-10-1.9-3.3-3.7-6.7-4.5-10.2-0.8-3.5-0.5-7.3 1.3-10.2 1.8-2.9 5.1-5 8.7-6.1 3.6-1.1 7.5-1.2 11-0.5 3.5 0.7 6.6 2.2 9.5 4 2.9 1.8 5.6 3.8 7.9 6.2 2.3 2.4 4.2 5.1 5.5 8 1.3 2.9 2 6 1.9 9.1-0.1 3.1-1 6.1-2.7 8.5-1.7 2.4-4.2 4.1-6.8 5.1-2.6 1-5.5 1.4-8.3 1.6-2.8 0.2-5.6 0.2-8.4-0.4-2.8-0.6-5.5-1.7-7.7-3.5-2.2-1.8-3.8-4.3-4.3-7.1-0.5-2.8 0.1-5.8 1.8-8.3 1.7-2.5 4.3-4.5 7-6 2.7-1.5 5.5-2.6 8.3-3.5 2.8-0.9 5.6-1.6 8.4-2 2.8-0.4 5.5-0.5 8.1 0.1 2.6 0.6 5 1.8 6.5 3.8 1.5 2 2.1 4.8 1.8 7.4-0.3 2.6-1.5 5.1-3.1 7.1-1.6 2-3.5 3.6-5.6 4.9-2.1 1.3-4.4 2.2-6.6 2.9-2.2 0.7-4.4 1.1-6.5 1.1-2.1 0-4.1-0.4-5.7-1.4-1.6-1-2.8-2.6-3.4-4.3-0.6-1.7-0.7-3.6-0.3-5.4 0.4-1.8 1.3-3.4 2.4-4.7 1.1-1.3 2.5-2.3 3.9-3.1 1.4-0.8 2.9-1.4 4.4-1.9 1.5-0.5 3-0.9 4.5-1.1 1.5-0.2 3-0.1 4.3 0.4 1.3 0.5 2.5 1.5 3.2 2.8 0.7 1.3 1 3 0.8 4.5-0.2 1.5-0.9 2.9-1.8 4-0.9 1.1-2.1 1.9-3.3 2.5-1.2 0.6-2.5 1-3.7 1.2-1.2 0.2-2.4 0.3-3.5 0.1-1.1-0.2-2.1-0.6-2.7-1.4-0.6-0.8-0.8-1.9-0.5-3 0.3-1.1 1-2 1.9-2.7 0.9-0.7 2-1.2 3-1.5 1-0.3 2.1-0.5 3.1-0.6 1-0.1 2-0.1 3 0.1 1 0.2 1.9 0.5 2.4 1.2 0.5 0.7 0.7 1.7 0.4 2.6-0.3 0.9-1 1.6-1.8 2.2'/%3E%3C/svg%3E"); transform: rotate(45deg); } .splatter2 { bottom: 10%; left: 5%; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath fill='%235c9ead' d='M65.6 48.7c-1.6 2.8-4.5 4.4-7.6 5.3-3.1 0.9-6.4 1.1-9.6 1.1-3.2 0-6.5-0.2-9.6-1.1-3.1-0.9-6-2.5-7.6-5.3-1.6-2.8-1.7-6.7-0.8-10.2 0.9-3.5 2.9-6.7 5.2-9.4 2.3-2.7 5-5 7.9-6.8 2.9-1.8 6-3.2 9.2-3.7 3.2-0.5 6.5-0.1 9.2 1.8 2.7 1.9 4.7 5.2 5.3 8.8 0.6 3.6-0.3 7.4-1.9 10.6-1.6 3.2-3.9 5.9-6.5 8-2.6 2.1-5.6 3.6-8.7 4.2-3.1 0.6-6.4 0.3-9.2-1.2-2.8-1.5-5.1-4.1-6.3-7.1-1.2-3-1.3-6.4-0.7-9.5 0.6-3.1 1.9-6 3.8-8.5 1.9-2.5 4.4-4.5 7.3-5.6 2.9-1.1 6.1-1.3 9.1-0.6 3 0.7 5.7 2.4 7.9 4.7 2.2 2.3 3.9 5.1 4.9 8.1 1 3 1.3 6.1 0.8 9.1-0.5 3-1.9 5.9-3.9 8.1-2 2.2-4.7 3.8-7.5 4.5-2.8 0.7-5.8 0.5-8.4-0.6-2.6-1.1-4.9-3-6.6-5.3-1.7-2.3-2.9-5-3.4-7.7-0.5-2.7-0.3-5.6 0.6-8.1 0.9-2.5 2.6-4.7 4.8-6.3 2.2-1.6 4.9-2.6 7.6-2.9 2.7-0.3 5.4 0.2 7.8 1.3 2.4 1.1 4.5 2.7 6 4.8 1.5 2.1 2.5 4.6 2.8 7.1 0.3 2.5-0.2 5.1-1.3 7.3-1.1 2.2-2.9 4-5 5.2-2.1 1.2-4.5 1.8-6.9 1.6-2.4-0.2-4.7-1.1-6.6-2.6-1.9-1.5-3.4-3.5-4.3-5.8-0.9-2.3-1.1-4.9-0.6-7.3 0.5-2.4 1.8-4.6 3.6-6.3 1.8-1.7 4.1-2.9 6.5-3.5 2.4-0.6 4.9-0.5 7.1 0.3 2.2 0.8 4.1 2.3 5.5 4.2 1.4 1.9 2.3 4.1 2.7 6.4 0.4 2.3 0.1 4.7-0.6 6.8-0.7 2.1-1.9 4-3.4 5.5-1.5 1.5-3.4 2.6-5.3 3-1.9 0.4-4 0.1-5.8-0.9-1.8-1-3.3-2.6-4.2-4.5-0.9-1.9-1.2-4.1-0.9-6.2 0.3-2.1 1.2-4 2.6-5.5 1.4-1.5 3.2-2.5 5.1-3 1.9-0.5 3.9-0.5 5.7 0.1 1.8 0.6 3.4 1.7 4.5 3.1 1.1 1.4 1.7 3.1 1.8 4.8 0.1 1.7-0.4 3.5-1.3 4.9-0.9 1.4-2.2 2.6-3.8 3.2-1.6 0.6-3.3 0.7-4.9 0.2-1.6-0.5-3-1.5-4-2.9-1-1.4-1.5-3.1-1.5-4.8 0-1.7 0.5-3.3 1.5-4.7'/%3E%3C/svg%3E"); transform: rotate(-15deg); } .splatter3 { top: 10%; left: 25%; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath fill='%23e19e23' d='M34.4 51.3c1.5-2.7 4.1-4.5 6.9-5.5 2.8-1 5.9-1.3 9-1 3.1 0.3 6.2 1.1 9.1 2.4 2.9 1.3 5.6 3.1 7.8 5.4 2.2 2.3 3.9 5.1 4.5 8.1 0.6 3-0.1 6.2-1.8 8.8-1.7 2.6-4.4 4.6-7.5 5.8-3.1 1.2-6.5 1.7-9.9 1.4-3.4-0.3-6.7-1.4-9.6-3.1-2.9-1.7-5.4-4-7-6.7-1.6-2.7-2.3-5.8-1.9-8.7 0.4-2.9 1.9-5.6 4-7.7 2.1-2.1 4.8-3.6 7.7-4.4 2.9-0.8 6-0.9 8.9-0.1 2.9 0.8 5.6 2.4 7.7 4.5 2.1 2.1 3.6 4.8 4.4 7.7 0.8 2.9 0.7 6-0.1 8.9-0.8 2.9-2.3 5.6-4.4 7.7-2.1 2.1-4.8 3.6-7.7 4-2.9 0.4-5.9-0.3-8.4-1.9-2.5-1.6-4.4-4.1-5.4-6.9-1-2.8-1.1-5.9-0.3-8.8 0.8-2.9 2.5-5.6 4.8-7.6 2.3-2 5.1-3.2 8.1-3.5 3-0.3 6.1 0.3 8.8 1.7 2.7 1.4 5 3.6 6.4 6.3 1.4 2.7 1.9 5.9 1.5 8.9-0.4 3-1.8 5.9-3.9 8.1-2.1 2.2-4.9 3.7-7.9 4.2-3 0.5-6.2 0-8.9-1.5-2.7-1.5-4.9-3.9-6.1-6.7-1.2-2.8-1.4-6-0.5-8.8 0.9-2.8 2.8-5.4 5.3-7.1 2.5-1.7 5.5-2.7 8.6-2.7 3.1 0 6.2 0.9 8.8 2.6 2.6 1.7 4.7 4.1 5.9 6.9 1.2 2.8 1.5 6 0.7 8.9-0.8 2.9-2.6 5.6-5.1 7.5-2.5 1.9-5.6 3.1-8.8 3.3-3.2 0.2-6.4-0.6-9-2.3-2.6-1.7-4.6-4.2-5.7-7.1-1.1-2.9-1.2-6.1-0.3-9 0.9-2.9 2.8-5.5 5.1-7.3'/%3E%3C/svg%3E"); transform: rotate(120deg); } /* Modal Styles */ .modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.85); display: flex; align-items: center; justify-content: center; z-index: 100; opacity: 0; visibility: hidden; transition: all 0.3s ease; } .modal.active { opacity: 1; visibility: visible; } .modal-content { max-width: 90%; max-height: 90%; position: relative; transform: scale(0.9); transition: transform 0.3s ease; } .modal.active .modal-content { transform: scale(1); } .modal-image { max-width: 100%; max-height: 80vh; border-radius: 8px; box-shadow: 0 5px 30px rgba(0, 0, 0, 0.3); } .modal-close { position: absolute; top: -40px; right: 0; color: white; background: none; border: none; font-size: 24px; cursor: pointer; z-index: 101; } /* Responsive */ @media (max-width: 600px) { .portfolio-container { height: 700px; } .header { padding: 20px 20px 10px; } .artist-name { font-size: 36px; } .tabs { padding: 0 20px; overflow-x: auto; justify-content: flex-start; } .tab { font-size: 14px; margin-right: 20px; white-space: nowrap; } .tab-content { padding: 20px; height: 550px; } .gallery-grid { grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 15px; } .project-title { font-size: 20px; } } /* Scrollbar Styles */ .tab-content::-webkit-scrollbar { width: 6px; } .tab-content::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 10px; } .tab-content::-webkit-scrollbar-thumb { background: #ddd; border-radius: 10px; } .tab-content::-webkit-scrollbar-thumb:hover { background: #ccc; } .empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; padding: 2rem; text-align: center; color: #888; } .empty-state svg { width: 100px; height: 100px; margin-bottom: 1rem; color: var(--accent-2); opacity: 0.5; } .empty-state h3 { margin-bottom: 0.5rem; font-size: 1.2rem; } .empty-state p { max-width: 300px; margin: 0 auto; line-height: 1.6; } </style> </head> <body> <div class="portfolio-container"> <div class="header"> <div class="artist-title">Visual Artist & Illustrator</div> <h1 class="artist-name">Eliza Thornberry</h1> </div> <div class="tabs-container"> <ul class="tabs"> <li class="tab active" data-tab="gallery">Gallery</li> <li class="tab" data-tab="projects">Projects</li> <li class="tab" data-tab="testimonials">Testimonials</li> <li class="tab" data-tab="about">About Me</li> </ul> <div id="tab-content-gallery" class="tab-content active"> <div class="gallery-grid"> <div class="gallery-item" data-img="abstract"> <img src="https://images.unsplash.com/photo-1536924940846-227afb31e2a5?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Abstract Painting"> <div class="gallery-item-title">Whispers of Color</div> </div> <div class="gallery-item" data-img="portrait"> <img src="https://images.unsplash.com/photo-1578301978693-85fa9c0320b9?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Portrait"> <div class="gallery-item-title">Urban Soul</div> </div> <div class="gallery-item" data-img="nature"> <img src="https://images.unsplash.com/photo-1550684376-efcbd6e3f031?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Nature Painting"> <div class="gallery-item-title">Forest Dreams</div> </div> <div class="gallery-item" data-img="illustration"> <img src="https://images.unsplash.com/photo-1582201942988-13e60e4556ee?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Illustration"> <div class="gallery-item-title">Ink Narrative</div> </div> <div class="gallery-item" data-img="mixed"> <img src="https://images.unsplash.com/photo-1549887534-1541e9326642?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Mixed Media"> <div class="gallery-item-title">Textured Reality</div> </div> <div class="gallery-item" data-img="sculpture"> <img src="https://images.unsplash.com/photo-1554188572-9f21fd24c4d6?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Sculpture"> <div class="gallery-item-title">Metal Harmony</div> </div> <div class="gallery-item" data-img="installation"> <img src="https://images.unsplash.com/photo-1561839561-b13bcfe95249?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Installation"> <div class="gallery-item-title">Spatial Dialogue</div> </div> <div class="gallery-item" data-img="photography"> <img src="https://images.unsplash.com/photo-1500462918059-b1a0cb512f1d?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Photography"> <div class="gallery-item-title">Light Fragments</div> </div> </div> </div> <div id="tab-content-projects" class="tab-content"> <div class="project"> <h3 class="project-title">The Urban Jungle Series</h3> <p class="project-description">A six-month exploration of urban landscapes blending traditional ink with digital post-processing. This collection examines the contrast between nature and structure in metropolitan environments across three continents.</p> <div class="project-details"> <span class="project-tag">Mixed Media</span> <span class="project-tag">Exhibition</span> <span class="project-tag">2023</span> </div> </div> <div class="project"> <h3 class="project-title">Ethereal Currents</h3> <p class="project-description">Commissioned by NeoCurrent Magazine for their annual eco-focused issue. This series of 12 watercolor illustrations depicts the lifecycle of oceanic microorganisms in a stylized, semi-abstract approach that brings microscopic beauty to a visible scale.</p> <div class="project-details"> <span class="project-tag">Editorial</span> <span class="project-tag">Watercolor</span> <span class="project-tag">2022</span> </div> </div> <div class="project"> <h3 class="project-title">Fragments of Memory</h3> <p class="project-description">An interactive installation created for the Weston Contemporary Arts Festival. Visitors contributed personal objects which were photographed, rendered as sketches, and incorporated into a growing tapestry of communal memory. The project examined how physical objects anchor our emotional experiences.</p> <div class="project-details"> <span class="project-tag">Installation</span> <span class="project-tag">Interactive</span> <span class="project-tag">2021</span> </div> </div> <div class="project"> <h3 class="project-title">Chromatic Identity</h3> <p class="project-description">A collaborative project with psychologist Dr. Amelia Chen exploring color perception and emotional response. Twenty-five abstract compositions were created using specific color combinations linked to emotional states, then tested with focus groups to measure perceptual consistency.</p> <div class="project-details"> <span class="project-tag">Research</span> <span class="project-tag">Abstract</span> <span class="project-tag">2020</span> </div> </div> </div> <div id="tab-content-testimonials" class="tab-content"> <div class="testimonial"> <p class="testimonial-content">Eliza brings an extraordinary sensitivity to her work that transforms even commercial projects into art. Her ability to distill complex concepts into visually striking imagery gave our campaign an authenticity that resonated deeply with our audience.</p> <div class="testimonial-author"> Miranda Chen <span class="testimonial-role">Creative Director, Prism Advertising</span> </div> </div> <div class="testimonial"> <p class="testimonial-content">Working with Eliza on our gallery exhibition was transformative. Her intuitive understanding of space and light brought a dimension to the installation that exceeded our expectations. What impresses me most is her meticulous attention to the subtleties that others might overlook.</p> <div class="testimonial-author"> Julian Mercer <span class="testimonial-role">Curator, Whitewall Gallery</span> </div> </div> <div class="testimonial"> <p class="testimonial-content">The illustrations Eliza created for our children's book series combine technical brilliance with genuine emotional warmth. Her work doesn't just illustrate the text—it expands it, finding visual rhythms that echo the narrative in unexpected ways. Three books later, she continues to surprise us.</p> <div class="testimonial-author"> Sarah Thompson <span class="testimonial-role">Editor, Lunar Press</span> </div> </div> <div class="testimonial"> <p class="testimonial-content">I commissioned Eliza for a series of pieces for our corporate headquarters, seeking something that would reflect our company values without resorting to clichés. The resulting works are sophisticated, thought-provoking, and have become a touchpoint for meaningful conversations among staff and visitors alike.</p> <div class="testimonial-author"> Robert Kiyosaki <span class="testimonial-role">CEO, Nexus Technologies</span> </div> </div> </div> <div id="tab-content-about" class="tab-content"> <div class="empty-state"> <svg fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clip-rule="evenodd"></path> </svg> <h3>Under Construction</h3> <p>I'm currently redesigning my personal story section. Check back soon to learn more about my artistic journey, inspirations, and process.</p> </div> </div> </div> <div class="ink-splatter splatter1"></div> <div class="ink-splatter splatter2"></div> <div class="ink-splatter splatter3"></div> </div> <div class="modal" id="image-modal"> <div class="modal-content"> <button class="modal-close">×</button> <img class="modal-image" src="" alt="Enlarged artwork"> </div>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ProjectSync - Project Management Tool</title> <style> :root { --primary: #4d69fa; --secondary: #5d5fef; --success: #38c172; --danger: #e3342f; --warning: #ffce56; --info: #3498db; --light: #f8f9fa; --dark: #343a40; --gray: #6c757d; --gray-light: #f1f3f5; --transition: all 0.3s ease; --shadow: 0 4px 6px rgba(0, 0, 0, 0.1); --radius: 8px; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; } body { background-color: var(--light); color: var(--dark); height: 100vh; display: flex; flex-direction: column; overflow: hidden; } .container { max-width: 700px; margin: 0 auto; padding: 15px; width: 100%; height: 100%; display: flex; flex-direction: column; } .header { display: flex; justify-content: space-between; align-items: center; padding-bottom: 15px; border-bottom: 1px solid var(--gray-light); margin-bottom: 20px; } .logo { display: flex; align-items: center; gap: 10px; } .logo-icon { background: linear-gradient(135deg, var(--primary), var(--secondary)); width: 36px; height: 36px; border-radius: 8px; display: flex; align-items: center; justify-content: center; color: white; font-weight: bold; } .logo-text { font-weight: 700; font-size: 1.4rem; color: var(--dark); } .user-profile { display: flex; align-items: center; gap: 10px; } .user-avatar { width: 38px; height: 38px; border-radius: 50%; background-color: var(--secondary); color: white; display: flex; align-items: center; justify-content: center; font-weight: bold; cursor: pointer; transition: var(--transition); } .user-avatar:hover { transform: scale(1.05); box-shadow: var(--shadow); } .project-title { font-size: 1.5rem; font-weight: 700; margin-bottom: 5px; } .project-meta { display: flex; gap: 15px; margin-bottom: 15px; font-size: 0.9rem; color: var(--gray); align-items: center; } .project-meta-item { display: flex; align-items: center; gap: 5px; } .tab-container { position: relative; width: 100%; margin-bottom: 10px; } .tabs { display: flex; list-style: none; padding: 0; margin: 0; position: relative; border-bottom: 1px solid var(--gray-light); gap: 5px; } .tab { padding: 12px 20px; cursor: grab; font-weight: 500; color: var(--gray); position: relative; transition: var(--transition); border-radius: var(--radius) var(--radius) 0 0; user-select: none; display: flex; align-items: center; gap: 8px; } .tab:hover { background-color: var(--gray-light); color: var(--dark); } .tab.active { color: var(--primary); font-weight: 600; } .tab.active::after { content: ''; position: absolute; bottom: -1px; left: 0; width: 100%; height: 3px; background-color: var(--primary); border-radius: 3px 3px 0 0; } .tab-icon { font-size: 1.1rem; display: flex; align-items: center; justify-content: center; } .dragging { opacity: 0.8; background-color: var(--gray-light); z-index: 1000; box-shadow: var(--shadow); } .tab-content { display: none; padding: 15px 0; height: 100%; overflow-y: auto; } .tab-content.active { display: block; animation: fadeIn 0.3s ease; } .add-tab-btn { background-color: transparent; border: none; display: flex; align-items: center; justify-content: center; width: 30px; height: 30px; border-radius: 50%; cursor: pointer; color: var(--gray); font-size: 1.2rem; transition: var(--transition); margin-left: 10px; } .add-tab-btn:hover { background-color: var(--gray-light); color: var(--primary); } /* Task tab content */ .tasks-grid { display: grid; grid-template-columns: 1fr; gap: 15px; } .task-card { background-color: white; border-radius: var(--radius); padding: 15px; box-shadow: var(--shadow); border-left: 4px solid transparent; position: relative; transition: var(--transition); } .task-card:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); } .task-card.priority-high { border-left-color: var(--danger); } .task-card.priority-medium { border-left-color: var(--warning); } .task-card.priority-low { border-left-color: var(--success); } .task-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 10px; } .task-title { font-weight: 600; font-size: 1.1rem; margin-bottom: 5px; } .task-meta { display: flex; justify-content: space-between; font-size: 0.85rem; color: var(--gray); margin-bottom: 10px; } .task-description { font-size: 0.9rem; line-height: 1.5; margin-bottom: 15px; } .task-footer { display: flex; justify-content: space-between; align-items: center; } .task-status { display: inline-flex; align-items: center; padding: 4px 10px; border-radius: 20px; font-size: 0.8rem; font-weight: 500; } .status-in-progress { background-color: rgba(255, 206, 86, 0.2); color: #b7860b; } .status-completed { background-color: rgba(56, 193, 114, 0.2); color: #1e7e34; } .status-to-do { background-color: rgba(108, 117, 125, 0.2); color: #495057; } .task-assignees { display: flex; gap: -5px; } .task-assignee { width: 28px; height: 28px; border-radius: 50%; background-color: var(--primary); color: white; display: flex; align-items: center; justify-content: center; font-size: 0.8rem; font-weight: 500; border: 2px solid white; transition: var(--transition); } .task-assignee:nth-child(2) { background-color: var(--secondary); margin-left: -10px; } .task-assignee:nth-child(3) { background-color: var(--info); margin-left: -10px; } .task-assignee:hover { transform: translateY(-2px); z-index: 1; } .priority-badge { position: absolute; top: 15px; right: 15px; font-size: 0.75rem; padding: 3px 8px; border-radius: 20px; font-weight: 500; } .priority-high { background-color: rgba(227, 52, 47, 0.1); color: var(--danger); } .priority-medium { background-color: rgba(255, 206, 86, 0.1); color: #b7860b; } .priority-low { background-color: rgba(56, 193, 114, 0.1); color: var(--success); } /* Timeline tab content */ .timeline-container { padding: 10px 0; } .timeline-header { display: flex; justify-content: space-between; margin-bottom: 20px; } .timeline-legend { display: flex; gap: 15px; } .legend-item { display: flex; align-items: center; gap: 5px; font-size: 0.85rem; } .legend-color { width: 12px; height: 12px; border-radius: 3px; } .gantt-chart { width: 100%; overflow-x: auto; } .gantt-row { display: flex; height: 55px; margin-bottom: 5px; position: relative; } .gantt-row-label { width: 120px; flex-shrink: 0; padding-right: 15px; display: flex; flex-direction: column; justify-content: center; } .gantt-row-timeline { flex-grow: 1; position: relative; background-color: var(--gray-light); border-radius: var(--radius); overflow: hidden; } .gantt-task { position: absolute; height: 65%; top: 50%; transform: translateY(-50%); border-radius: 20px; padding: 0 10px; display: flex; align-items: center; color: white; font-size: 0.85rem; font-weight: 500; cursor: pointer; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); transition: var(--transition); } .gantt-task:hover { transform: translateY(-50%) scale(1.02); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); } .gantt-milestone { position: absolute; width: 12px; height: 12px; background-color: var(--danger); border-radius: 50%; top: 50%; transform: translateY(-50%); cursor: pointer; z-index: 2; transition: var(--transition); } .gantt-milestone:hover { transform: translateY(-50%) scale(1.3); } .gantt-milestone::after { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border-radius: 50%; background-color: rgba(227, 52, 47, 0.3); animation: pulse 2s infinite; } .gantt-progress { position: absolute; height: 100%; top: 0; left: 0; background-color: rgba(255, 255, 255, 0.2); } .gantt-task-design { background-color: var(--primary); } .gantt-task-dev { background-color: var(--info); } .gantt-task-marketing { background-color: var(--success); } /* Team tab content */ .team-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 20px; } .team-member { background-color: white; border-radius: var(--radius); box-shadow: var(--shadow); padding: 20px; display: flex; flex-direction: column; align-items: center; transition: var(--transition); } .team-member:hover { transform: translateY(-5px); box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1); } .member-avatar { width: 80px; height: 80px; border-radius: 50%; background-color: var(--primary); color: white; display: flex; align-items: center; justify-content: center; font-size: 1.8rem; font-weight: 700; margin-bottom: 15px; position: relative; } .member-status { position: absolute; right: 0; bottom: 0; width: 15px; height: 15px; border-radius: 50%; border: 2px solid white; } .status-online { background-color: var(--success); } .status-away { background-color: var(--warning); } .status-offline { background-color: var(--gray); } .member-name { font-weight: 600; font-size: 1.1rem; margin-bottom: 5px; text-align: center; } .member-role { color: var(--gray); font-size: 0.9rem; margin-bottom: 15px; text-align: center; } .member-stats { display: flex; justify-content: center; gap: 15px; width: 100%; margin-bottom: 15px; } .member-stat { display: flex; flex-direction: column; align-items: center; } .stat-value { font-weight: 600; font-size: 1.1rem; color: var(--dark); } .stat-label { font-size: 0.75rem; color: var(--gray); } .member-actions { display: flex; justify-content: center; gap: 10px; width: 100%; } .member-action { width: 35px; height: 35px; border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: var(--transition); color: var(--gray); background-color: var(--gray-light); font-size: 0.9rem; } .member-action:hover { background-color: var(--primary); color: white; transform: scale(1.1); } /* Buttons and utilities */ .search-box { display: flex; align-items: center; background-color: var(--gray-light); border-radius: 20px; padding: 8px 15px; gap: 10px; width: 100%; max-width: 300px; margin-bottom: 20px; } .search-box input { background: none; border: none; outline: none; font-size: 0.9rem; flex-grow: 1; } .search-icon { color: var(--gray); } .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 8px 16px; border-radius: var(--radius); font-weight: 500; cursor: pointer; transition: var(--transition); border: none; outline: none; font-size: 0.9rem; } .btn-primary { background-color: var(--primary); color: white; } .btn-primary:hover { background-color: var(--secondary); transform: translateY(-2px); box-shadow: var(--shadow); } .btn-outline { background-color: transparent; border: 1px solid var(--gray-light); color: var(--gray); } .btn-outline:hover { background-color: var(--gray-light); color: var(--dark); } .chat-container { display: flex; flex-direction: column; height: 100%; } .chat-messages { flex-grow: 1; overflow-y: auto; padding-right: 10px; margin-bottom: 15px; } .message { display: flex; margin-bottom: 15px; position: relative; } .message-avatar { width: 36px; height: 36px; border-radius: 50%; background-color: var(--primary); color: white; display: flex; align-items: center; justify-content: center; font-weight: bold; margin-right: 12px; flex-shrink: 0; } .message-content { background-color: white; border-radius: var(--radius); padding: 12px 15px; position: relative; box-shadow: var(--shadow); max-width: 80%; } .message-sender { font-weight: 600; margin-bottom: 5px; font-size: 0.9rem; } .message-text { font-size: 0.95rem; line-height: 1.5; } .message-time { font-size: 0.75rem; color: var(--gray); margin-top: 5px; text-align: right; } .message-self { flex-direction: row-reverse; } .message-self .message-avatar { margin-right: 0; margin-left: 12px; background-color: var(--secondary); } .message-self .message-content { background-color: var(--primary); color: white; } .message-self .message-time { color: rgba(255, 255, 255, 0.8); } .chat-input { display: flex; gap: 10px; margin-top: auto; } .chat-input input { flex-grow: 1; padding: 12px 15px; border: 1px solid var(--gray-light); border-radius: 20px; outline: none; transition: var(--transition); } .chat-input input:focus { border-color: var(--primary); } .chat-input button { background-color: var(--primary); color: white; border: none; border-radius: 50%; width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: var(--transition); } .chat-input button:hover { background-color: var(--secondary); transform: scale(1.05); } /* Animations */ @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulse { 0% { transform: scale(1); opacity: 1; } 100% { transform: scale(2.5); opacity: 0; } } /* Responsive */ @media (max-width: 600px) { .tab { padding: 10px 15px; font-size: 0.9rem; } .task-title { font-size: 1rem; } .project-meta { flex-wrap: wrap; } .team-container { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); } .gantt-row-label { width: 100px; } } /* Scrollbar styling */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--gray-light); border-radius: 10px; } ::-webkit-scrollbar-thumb { background: #c1c9d2; border-radius: 10px; } ::-webkit-scrollbar-thumb:hover { background: var(--gray); } </style> </head> <body> <div class="container"> <div class="header"> <div class="logo"> <div class="logo-icon">PS</div> <div class="logo-text">ProjectSync</div> </div> <div class="user-profile"> <div class="user-avatar">JD</div> </div> </div> <h1 class="project-title">Website Redesign Project</h1> <div class="project-meta"> <div class="project-meta-item"> <i class="far fa-calendar"></i> <span>Due: Nov 15, 2023</span> </div> <div class="project-meta-item"> <i class="far fa-user-circle"></i> <span>8 team members</span> </div> <div class="project-meta-item"> <i class="far fa-clock"></i> <span>65% complete</span> </div> </div> <div class="tab-container"> <ul class="tabs" id="projectTabs"> <li class="tab active" data-tab="tasks"> <span class="tab-icon"><i class="fas fa-tasks"></i></span> <span>Tasks</span> </li> <li class="tab" data-tab="timeline"> <span class="tab-icon"><i class="fas fa-chart-gantt"></i></span> <span>Timeline</span> </li> <li class="tab" data-tab="team"> <span class="tab-icon"><i class="fas fa-users"></i></span> <span>Team</span> </li> <li class="tab" data-tab="chat"> <span class="tab-icon"><i class="fas fa-comments"></i></span> <span>Chat</span> </li> <button class="add-tab-btn"> <i class="fas fa-plus"></i> </button> </ul> </div> <div class="tab-content active" id="tasks"> <div class="search-box"> <span class="search-icon"><i class="fas fa-search"></i></span> <input type="text" placeholder="Search tasks..."> </div> <div class="tasks-grid"> <div class="task-card priority-high"> <div class="task-header"> <h3 class="task-title">Finalize homepage wireframes</h3> <span class="priority-badge priority-high">High</span> </div> <div class="task-meta"> <div>Due: Oct 28, 2023</div> <div>ID: WR-104</div> </div> <p class="task-description">Complete all homepage wireframes including mobile responsive views. Ensure alignment with brand guidelines and accessibility standards.</p> <div class="task-footer"> <div class="task-status status-in-progress">In Progress</div> <div class="task-assignees"> <div class="task-assignee">AL</div> <div class="task-assignee">SJ</div> </div> </div> </div> <div class="task-card priority-medium"> <div class="task-header"> <h3 class="task-title">Product page component library</h3> <span class="priority-badge priority-medium">Medium</span> </div> <div class="task-meta"> <div>Due: Nov 3, 2023</div> <div>ID: WR-109</div> </div> <p class="task-description">Create reusable UI components for product pages, including product cards, filters, and image galleries with zoom functionality.</p> <div class="task-footer"> <div class="task-status status-to-do">To Do</div> <div class="task-assignees"> <div class="task-assignee">RB</div> </div> </div> </div> <div class="task-card priority-low"> <div class="task-header"> <h3 class="task-title">Checkout flow usability testing</h3> <span class="priority-badge priority-low">Low</span> </div> <div class="task-meta"> <div>Due: Nov 10, 2023</div> <div>ID: WR-112</div> </div> <p class="task-description">Conduct usability testing on new checkout flow with 5-7 participants. Document findings and prioritize improvements based on user feedback.</p> <div class="task-footer"> <div class="task-status status-completed">Completed</div> <div class="task-assignees"> <div class="task-assignee">KL</div> <div class="task-assignee">PM</div> <div class="task-assignee">TD</div> </div> </div> </div> </div> </div> <div class="tab-content" id="timeline"> <div class="timeline-header"> <div class="timeline-legend"> <div class="legend-item"> <div class="legend-color" style="background-color: var(--primary);"></div> <span>Design</span> </div> <div class="legend-item"> <div class="legend-color" style="background-color: var(--info);"></div> <span>Development</span> </div> <div class="legend-item"> <div class="legend-color" style="background-color: var(--success);"></div> <span>Marketing</span> </div> </div> <button class="btn btn-outline"> <i class="fas fa-filter"></i> <span>Filter</span> </button> </div> <div class="timeline-container"> <div class="gantt-chart"> <div class="gantt-row"> <div class="gantt-row-label"> <div style="font-weight: 600;">Wireframing</div> <div style="font-size: 0.8rem; color: var(--gray);">Design Team</div> </div> <div class="gantt-row-timeline"> <div class="gantt-task gantt-task-design" style="left: 10%; width: 25%;"> <div class="gantt-progress" style="width: 90%;"></div> <span>Wireframes</span> </div> </div> </div> <div class="gantt-row"> <div class="gantt-row-label"> <div style="font-weight: 600;">UI Design</div> <div style="font-size: 0.8rem; color: var(--gray);">Design Team</div> </div> <div class="gantt-row-timeline"> <div class="gantt-task gantt-task-design" style="left: 30%; width: 30%;"> <div class="gantt-progress" style="width: 65%;"></div> <span>UI Components</span> </div> <div class="gantt-milestone" style="left: 60%;" title="Design Review"></div> </div> </div> <div class="gantt-row"> <div class="gantt-row-label"> <div style="font-weight: 600;">Frontend Dev</div> <div style="font-size: 0.8rem; color: var(--gray);">Dev Team</div> </div> <div class="gantt-row-timeline"> <div class="gantt-task gantt-task-dev" style="left: 35%; width: 40%;"> <div class="gantt-progress" style="width: 35%;"></div> <span>Component Build</span> </div> </div> </div> <div class="gantt-row"> <div class="gantt-row-label"> <div style="font-weight: 600;">Backend</div> <div style="font-size: 0.8rem; color: var(--gray);">Dev Team</div> </div> <div class="gantt-row-timeline"> <div class="gantt-task gantt-task-dev" style="left: 45%; width: 35%;"> <div class="gantt-progress" style="width: 20%;"></div> <span>API Development</span> </div> </div> </div> <div class="gantt-row"> <div class="gantt-row-label"> <div style="font-weight: 600;">Content</div> <div style="font-size: 0.8rem; color: var(--gray);">Marketing</div> </div> <div class="gantt-row-timeline"> <div class="gantt-task gantt-task-marketing" style="left: 20%; width: 25%;"> <div class="gantt-progress" style="width: 100%;"></div> <span>Copy & Assets</span> </div> <div class="gantt-milestone" style="left: 85%;" title="Launch"></div> </div> </div> </div> </div> </div> <div class="tab-content" id="team"> <div class="search-box"> <span class="search-icon"><i class="fas fa-search"></i></span> <input type="text" placeholder="Search team members..."> </div> <div class="team-container"> <div class="team-member"> <div class="member-avatar"> AL <div class="member-status status-online"></div> </div> <h3 class="member-name">Alex Lee</h3> <div class="member-role">Lead Designer</div> <div class="member-stats"> <div class="member-stat"> <div class="stat-value">8</div> <div class="stat-label">Tasks</div> </div> <div class="member-stat"> <div class="stat-value">93%</div> <div class="stat-label">Complete</div> </div> </div> <div class="member-actions"> <div class="member-action"><i class="fas fa-comment"></i></div> <div class="member-action"><i class="fas fa-envelope"></i></div> <div class="member-action"><i class="fas fa-phone"></i></div> </div> </div> <div class="team-member"> <div class="member-avatar" style="background-color: var(--info);"> RB <div class="member-status status-away"></div> </div> <h3 class="member-name">Ryan Buxton</h3> <div class="member-role">Frontend Developer</div> <div class="member-stats"> <div class="member-stat"> <div class="stat-value">12</div> <div class="stat-label">Tasks</div> </div> <div class="member-stat"> <div class="stat-value">67%</div> <div class="stat-label">Complete</div> </div> </div> <div class="member-actions"> <div class="member-action"><i class="fas fa-comment"></i></div> <div class="member-action"><i class="fas fa-envelope"></i></div> <div class="member-action"><i class="fas fa-phone"></i></div> </div> </div> <div class="team-member"> <div class="member-avatar" style="background-color: var(--success);"> KL <div class="member-status status-online"></div> </div> <h3 class="member-name">Kira Laine</h3> <div class="member-role">UX Researcher</div> <div class="member-stats"> <div class="member-stat"> <div class="stat-value">5</div> <div class="stat-label">Tasks</div> </div> <div class="member-stat"> <div class="stat-value">100%</div> <div class="stat-label">Complete</div> </div> </div> <div class="member-actions"> <div class="member-action"><i class="fas fa-comment"></i></div> <div class="member-action"><i class="fas fa-envelope"></i></div> <div class="member-action"><i class="fas fa-phone"></i></div> </div> </div> </div> </div> <div class="tab-content" id="chat"> <div class="chat-container"> <div class="chat-messages"> <div class="message"> <div class="message-avatar">AL</div> <div class="message-content"> <div class="message-sender">Alex Lee</div> <div class="message-text">I've completed the homepage wireframes. Could everyone review them before our meeting?</div> <div class="message-time">10:23 AM</div> </div> </div> <div class="message"> <div class="message-avatar" style="background-color: var(--success);">KL</div> <div class="message-content"> <div class="message-sender">Kira Laine</div> <div class="message-text">Looking good! The product listings are clearer than before. We should add filters on mobile though.</div> <div class="message-time">10:31 AM</div> </div> </div> <div class="message message-self"> <div class="message-avatar">JD</div>