Page transitions can significantly enhance the user experience by providing smooth and visually appealing navigation between different sections of a website. They not only add a touch of elegance but also help in maintaining user engagement.
In this article, we will explore 10 stunning page transition examples that can elevate your web design and keep your audience captivated. From subtle fades to dynamic animations, these transitions showcase the power of thoughtful design.
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
Subframe's drag-and-drop interface and intuitive, responsive canvas make it effortless to design pixel-perfect page transitions. Loved by designers and developers alike, Subframe ensures your UI is stunning and functional.
Start for free and elevate your web design 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 web design? With Subframe, you can create pixel-perfect UIs and stunning page transitions effortlessly. Our drag-and-drop editor ensures efficiency and precision.
Don't wait! Start for free and begin designing immediately. Experience the power of Subframe today!
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Seamless Checkout Experience</title> <style> :root { --primary: #3a7bd5; --primary-light: #6fabff; --secondary: #6d5dfc; --secondary-light: #8c7fff; --neutral: #f5f7fa; --neutral-dark: #d1d9e6; --text: #2c3e50; --success: #2ecc71; --border-radius: 12px; --box-shadow: 0 8px 20px rgba(0, 0, 0, 0.06); --transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; } body { background: linear-gradient(145deg, var(--neutral), var(--neutral-dark)); color: var(--text); height: 100vh; display: flex; justify-content: center; align-items: center; overflow: hidden; } .checkout-container { position: relative; width: 100%; max-width: 680px; height: 600px; overflow: hidden; background: white; border-radius: var(--border-radius); box-shadow: var(--box-shadow); } .steps-indicator { display: flex; justify-content: space-between; margin: 24px 40px; position: relative; } .steps-indicator::before { content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%); height: 2px; width: 100%; background-color: var(--neutral-dark); z-index: 1; } .progress-bar { position: absolute; left: 0; top: 50%; transform: translateY(-50%); height: 2px; width: 0; background: linear-gradient(to right, var(--primary), var(--secondary)); transition: width 0.5s ease; z-index: 2; } .step { position: relative; z-index: 3; width: 30px; height: 30px; background: white; border: 2px solid var(--neutral-dark); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 14px; transition: var(--transition); } .step.active { background: linear-gradient(145deg, var(--primary), var(--secondary)); border-color: var(--secondary); color: white; box-shadow: 0 0 0 4px rgba(109, 93, 252, 0.2); } .step.completed { background: linear-gradient(145deg, var(--primary), var(--secondary)); border-color: var(--secondary); color: white; } .step-label { position: absolute; top: 36px; left: 50%; transform: translateX(-50%); font-size: 12px; font-weight: 500; white-space: nowrap; opacity: 0.7; transition: var(--transition); } .step.active .step-label { opacity: 1; font-weight: 600; } .checkout-stages { position: relative; height: calc(100% - 100px); width: 400%; display: flex; transition: transform 0.6s cubic-bezier(0.65, 0, 0.35, 1); } .stage { width: 25%; padding: 20px 40px; opacity: 0.3; transform: scale(0.9); transition: var(--transition); } .stage.active { opacity: 1; transform: scale(1); } .stage-title { font-size: 24px; margin-bottom: 24px; font-weight: 700; color: var(--secondary); display: flex; align-items: center; gap: 10px; } .stage-title svg { width: 24px; height: 24px; } .form-group { margin-bottom: 20px; } label { display: block; margin-bottom: 8px; font-weight: 500; font-size: 14px; } input, select { width: 100%; padding: 14px 16px; border: 1px solid var(--neutral-dark); border-radius: var(--border-radius); font-size: 15px; transition: var(--transition); outline: none; background: var(--neutral); } input:focus, select:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(58, 123, 213, 0.15); background: white; } .input-row { display: flex; gap: 16px; } .btn { background: linear-gradient(145deg, var(--primary), var(--secondary)); color: white; border: none; padding: 14px 28px; font-size: 16px; font-weight: 600; border-radius: var(--border-radius); cursor: pointer; transition: var(--transition); display: inline-flex; align-items: center; justify-content: center; gap: 8px; } .btn:hover { transform: translateY(-2px); box-shadow: 0 6px 15px rgba(58, 123, 213, 0.2); } .btn:active { transform: translateY(0); } .btn-back { background: var(--neutral); color: var(--text); } .btn-back:hover { background: var(--neutral-dark); box-shadow: none; } .actions { display: flex; justify-content: space-between; margin-top: 30px; } .cart-item { display: flex; align-items: center; padding: 12px; margin-bottom: 12px; background: var(--neutral); border-radius: var(--border-radius); transition: var(--transition); } .cart-item:hover { transform: translateX(5px); } .cart-item img { width: 60px; height: 60px; object-fit: cover; border-radius: 8px; margin-right: 16px; } .cart-item-details { flex: 1; } .cart-item-name { font-weight: 600; margin-bottom: 4px; } .cart-item-price { font-weight: 700; color: var(--primary); } .cart-item-qty { font-size: 13px; color: #666; } .cart-summary { margin-top: 20px; } .summary-row { display: flex; justify-content: space-between; margin-bottom: 8px; } .summary-row.total { margin-top: 16px; font-size: 18px; font-weight: 700; color: var(--secondary); border-top: 1px solid var(--neutral-dark); padding-top: 16px; } .payment-methods { display: flex; gap: 10px; margin-bottom: 20px; } .payment-method { display: flex; align-items: center; justify-content: center; width: 70px; height: 50px; border: 1px solid var(--neutral-dark); border-radius: var(--border-radius); cursor: pointer; transition: var(--transition); opacity: 0.6; } .payment-method:hover { opacity: 1; } .payment-method.active { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(58, 123, 213, 0.15); opacity: 1; } .payment-method img { max-width: 40px; max-height: 30px; } .confirmation { text-align: center; padding: 40px; } .confirmation svg { width: 100px; height: 100px; margin-bottom: 30px; color: var(--success); } .confirmation h2 { font-size: 28px; margin-bottom: 16px; color: var(--success); } .confirmation p { font-size: 16px; color: #666; max-width: 300px; margin: 0 auto 30px; line-height: 1.5; } .order-number { background: var(--neutral); padding: 12px 20px; border-radius: var(--border-radius); font-size: 18px; font-weight: 700; display: inline-block; margin-bottom: 30px; } .floating-summary { position: absolute; top: 20px; right: 20px; background: white; border-radius: var(--border-radius); padding: 16px; box-shadow: var(--box-shadow); transition: var(--transition); transform: translateY(-10px); opacity: 0; pointer-events: none; z-index: 10; width: 240px; } .floating-summary.visible { transform: translateY(0); opacity: 1; } .summary-toggle { position: absolute; top: 20px; right: 20px; background: var(--primary); color: white; border: none; border-radius: var(--border-radius); width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: var(--transition); z-index: 9; } .summary-toggle:hover { background: var(--secondary); } .summary-toggle svg { width: 20px; height: 20px; } /* Shipping method styles */ .shipping-methods { margin: 20px 0; } .shipping-method { display: flex; align-items: center; padding: 16px; border: 1px solid var(--neutral-dark); border-radius: var(--border-radius); margin-bottom: 12px; cursor: pointer; transition: var(--transition); } .shipping-method:hover { border-color: var(--primary-light); } .shipping-method.selected { border-color: var(--primary); background: rgba(58, 123, 213, 0.05); } .shipping-radio { position: relative; width: 24px; height: 24px; margin-right: 16px; border: 2px solid var(--neutral-dark); border-radius: 50%; transition: var(--transition); } .shipping-method.selected .shipping-radio { border-color: var(--primary); } .shipping-method.selected .shipping-radio::after { content: ''; position: absolute; top: 4px; left: 4px; width: 12px; height: 12px; background: var(--primary); border-radius: 50%; animation: pulse 0.4s ease-out; } .shipping-details { flex: 1; } .shipping-name { font-weight: 700; display: flex; align-items: center; gap: 8px; margin-bottom: 4px; } .shipping-time { font-size: 13px; opacity: 0.7; } .shipping-price { font-weight: 700; color: var(--primary); font-size: 15px; } .mini-loader { display: inline-block; width: 16px; height: 16px; margin-left: 8px; border: 2px solid rgba(255, 255, 255, 0.3); border-radius: 50%; border-top-color: white; animation: spin 0.8s linear infinite; visibility: hidden; } .loader { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.8); display: flex; justify-content: center; align-items: center; z-index: 1000; opacity: 0; pointer-events: none; transition: opacity 0.3s ease; } .loader.active { opacity: 1; pointer-events: all; } .loader-spinner { width: 50px; height: 50px; border: 4px solid rgba(58, 123, 213, 0.2); border-radius: 50%; border-top-color: var(--primary); animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } @keyframes pulse { 0% { transform: scale(0); opacity: 0; } 100% { transform: scale(1); opacity: 1; } } /* Responsive styles */ @media (max-width: 680px) { .checkout-container { height: 580px; width: 100%; max-width: 100%; border-radius: 0; } .steps-indicator { margin: 16px 20px; } .stage { padding: 12px 20px; } .cart-item img { width: 50px; height: 50px; } .input-row { flex-direction: column; gap: 12px; } .shipping-method { padding: 12px; } .summary-toggle { top: 16px; right: 16px; } } </style> </head> <body> <div class="checkout-container"> <div class="steps-indicator"> <div class="progress-bar" id="progressBar"></div> <div class="step active" id="step1"> 1 <span class="step-label">Cart</span> </div> <div class="step" id="step2"> 2 <span class="step-label">Shipping</span> </div> <div class="step" id="step3"> 3 <span class="step-label">Payment</span> </div> <div class="step" id="step4"> 4 <span class="step-label">Confirm</span> </div> </div> <button class="summary-toggle" id="summaryToggle"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path> <line x1="3" y1="6" x2="21" y2="6"></line> <path d="M16 10a4 4 0 0 1-8 0"></path> </svg> </button> <div class="floating-summary" id="floatingSummary"> <h3>Order Summary</h3> <div class="summary-row"> <span>Subtotal</span> <span>$129.98</span> </div> <div class="summary-row"> <span>Shipping</span> <span id="summaryShipping">$8.95</span> </div> <div class="summary-row"> <span>Tax</span> <span>$10.40</span> </div> <div class="summary-row total"> <span>Total</span> <span id="summaryTotal">$149.33</span> </div> </div> <div class="checkout-stages" id="checkoutStages"> <!-- Stage 1: Cart --> <div class="stage active" id="cartStage"> <h2 class="stage-title"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="9" cy="21" r="1"></circle> <circle cx="20" cy="21" r="1"></circle> <path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path> </svg> Your Cart </h2> <div class="cart-items"> <div class="cart-item"> <img src="https://images.unsplash.com/photo-1542291026-7eec264c27ff?ixlib=rb-1.2.1&auto=format&fit=crop&w=320&q=80" alt="Product"> <div class="cart-item-details"> <div class="cart-item-name">Ultraboost Running Shoes</div> <div class="cart-item-qty">Size: 10 • Color: Black</div> </div> <div class="cart-item-price">$79.99</div> </div> <div class="cart-item"> <img src="https://images.unsplash.com/photo-1575537302964-96cd47c06b1b?ixlib=rb-1.2.1&auto=format&fit=crop&w=320&q=80" alt="Product"> <div class="cart-item-details"> <div class="cart-item-name">Premium Sports Socks (3-Pack)</div> <div class="cart-item-qty">Size: M • Color: Mixed</div> </div> <div class="cart-item-price">$49.99</div> </div> </div> <div class="cart-summary"> <div class="summary-row"> <span>Subtotal</span> <span>$129.98</span> </div> <div class="summary-row"> <span>Estimated Shipping</span> <span>$8.95</span> </div> <div class="summary-row"> <span>Estimated Tax</span> <span>$10.40</span> </div> <div class="summary-row total"> <span>Total</span> <span>$149.33</span> </div> </div> <div class="actions"> <button class="btn" id="toShippingBtn"> Continue to Shipping <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline> </svg> </button> </div> </div> <!-- Stage 2: Shipping --> <div class="stage" id="shippingStage"> <h2 class="stage-title"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect x="1" y="3" width="15" height="13"></rect> <polygon points="16 8 20 8 23 11 23 16 16 16 16 8"></polygon> <circle cx="5.5" cy="18.5" r="2.5"></circle> <circle cx="18.5" cy="18.5" r="2.5"></circle> </svg> Shipping Information </h2> <form id="shippingForm"> <div class="input-row"> <div class="form-group"> <label for="firstName">First Name</label> <input type="text" id="firstName" placeholder="John"> </div> <div class="form-group"> <label for="lastName">Last Name</label> <input type="text" id="lastName" placeholder="Doe"> </div> </div> <div class="form-group"> <label for="address">Street Address</label> <input type="text" id="address" placeholder="123 Running Lane"> </div> <div class="input-row"> <div class="form-group"> <label for="city">City</label> <input type="text" id="city" placeholder="New York"> </div> <div class="form-group"> <label for="zip">Zip Code</label> <input type="text" id="zip" placeholder="10001"> </div> </div> <div class="form-group"> <label for="country">Country</label> <select id="country"> <option value="us">United States</option> <option value="ca">Canada</option> <option value="uk">United Kingdom</option> <option value="au">Australia</option> </select> </div> <div class="shipping-methods"> <div class="shipping-method selected" data-price="8.95"> <div class="shipping-radio"></div> <div class="shipping-details"> <div class="shipping-name"> <span>Standard Shipping</span> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="20 6 9 17 4 12"></polyline> </svg> </div> <div class="shipping-time">Delivery in 3-5 business days</div> </div> <div class="shipping-price">$8.95</div> </div> <div class="shipping-method" data-price="14.95"> <div class="shipping-radio"></div> <div class="shipping-details"> <div class="shipping-name">Express Shipping</div> <div class="shipping-time">Delivery in 1-2 business days</div> </div> <div class="shipping-price">$14.95</div> </div> </div> <div class="actions"> <button type="button" class="btn btn-back" id="toCartBtn">Back</button> <button type="button" class="btn" id="toPaymentBtn"> Continue to Payment <span class="mini-loader" id="shippingLoader"></span> </button> </div> </form> </div> <!-- Stage 3: Payment --> <div class="stage" id="paymentStage"> <h2 class="stage-title"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect x="1" y="4" width="22" height="16" rx="2" ry="2"></rect> <line x1="1" y1="10" x2="23" y2="10"></line> </svg> Payment Method </h2> <div class="payment-methods"> <div class="payment-method active" data-method="visa"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Visa_Inc._logo.svg/1200px-Visa_Inc._logo.svg.png" alt="Visa"> </div> <div class="payment-method" data-method="mastercard"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Mastercard-logo.svg/1200px-Mastercard-logo.svg.png" alt="Mastercard"> </div> <div class="payment-method" data-method="paypal"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/PayPal.svg/1200px-PayPal.svg.png" alt="PayPal"> </div> <div class="payment-method" data-method="apple"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Apple-logo.png/640px-Apple-logo.png" alt="Apple Pay"> </div> </div> <form id="paymentForm"> <div class="form-group"> <label for="cardName">Cardholder Name</label> <input type="text" id="cardName" placeholder="John Doe"> </div> <div class="form-group"> <label for="cardNumber">Card Number</label> <input type="text" id="cardNumber" placeholder="4111 1111 1111 1111"> </div> <div class="input-row"> <div class="form-group"> <label for="expiry">Expiry Date</label> <input type="text" id="expiry" placeholder="MM/YY"> </div> <div class="form-group"> <label for="cvv">CVV</label> <input type="text" id="cvv" placeholder="123"> </div> </div> <div class="actions"> <button type="button" class="btn btn-back" id="toShippingBackBtn">Back</button> <button type="button" class="btn" id="reviewOrderBtn"> Review Order <span class="mini-loader" id="paymentLoader"></span> </button> </div> </form> </div> <!-- Stage 4: Confirmation --> <div class="stage" id="confirmationStage"> <div class="confirmation"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path> <polyline points="22 4 12 14.01 9 11.01"></polyline> </svg> <h2>Order Confirmed!</h2> <p>Thank you for your purchase. We've received your order and will begin processing it right away.</p> <div class="order-number">Order #AF80392</div> <button class="btn" id="newOrderBtn">Continue Shopping</button> </div> </div> </div> </div> <div class="loader" id="mainLoader"> <div class="loader-spinner"></div> </div> <script> document.addEventListener('DOMContentLoaded', () => { const stages = ['cartStage', 'shippingStage', 'paymentStage', 'confirmationStage']; const steps = ['step1', 'step2', 'step3', 'step4']; let currentStage = 0; // Navigation buttons const toShippingBtn = document.getElementById('toShippingBtn'); const toCartBtn = document.getElementById('toCartBtn'); const toPaymentBtn = document.getElementById('toPaymentBtn'); const toShippingBackBtn = document.getElementById('toShippingBackBtn'); const reviewOrderBtn = document.getElementById('reviewOrderBtn'); const newOrderBtn = document.getElementById('newOrderBtn'); // Loaders const shippingLoader = document.getElementById('shippingLoader'); const paymentLoader = document.getElementById('paymentLoader'); const mainLoader = document.getElementById('mainLoader'); // UI elements const progressBar = document.getElementById('progressBar'); const checkoutStages = document.getElementById('checkoutStages'); const summaryToggle = document.getElementById('summaryToggle'); const floatingSummary = document.getElementById('floatingSummary'); const summaryShipping = document.getElementById('summaryShipping'); const summaryTotal = document.getElementById('summaryTotal'); // Shipping methods const shippingMethods = document.querySelectorAll('.shipping-method'); let selectedShippingPrice = 8.95; // Payment methods const paymentMethods = document.querySelectorAll('.payment-method'); // Navigate to a specific stage function goToStage(stageIndex) { // Update progress bar progressBar.style.width = `${(stageIndex / (steps.length - 1)) * 100}%`; // Update steps steps.forEach((step, index) => { const stepEl = document.getElementById(step); stepEl.classList.remove('active', 'completed'); if (index < stageIndex) { stepEl.classList.add('completed'); } else if (index === stageIndex) { stepEl.classList.add('active'); } }); // Update stages stages.forEach((stage, index) => { const stageEl = document.getElementById(stage); stageEl.classList.remove('active'); if (index === stageIndex) { stageEl.classList.add('active'); } }); // Slide the checkout stages checkoutStages.style.transform = `translateX(-${stageIndex * 25}%)`; currentStage = stageIndex; } // Fake loading state function showLoading(loader, callback, time = 600) { loader.style.visibility = 'visible'; setTimeout(() => { loader.style.visibility = 'hidden'; callback(); }, time); } // Show full page loader function showFullLoader(callback, time = 800) { mainLoader.classList.add('active'); setTimeout(() => { mainLoader.classList.remove('active'); callback(); }, time); } // Update summary total function updateSummary() { // Base total before shipping const baseTotal = 129.98 + 10.40; const total = baseTotal + selectedShippingPrice; summaryShipping.textContent = `$${selectedShippingPrice.toFixed(2)}`; summaryTotal.textContent = `$${total.toFixed(2)}`; } // Event listeners for navigation toShippingBtn.addEventListener('click', () => { showFullLoader(() => goToStage(1)); }); toCartBtn.addEventListener('click', () => { goToStage(0); }); toPaymentBtn.addEventListener('click', () => { showLoading(shippingLoader, () => { showFullLoader(() => goToStage(2)); }); }); toShippingBackBtn.addEventListener('click', () => { goToStage(1); }); reviewOrderBtn.addEventListener('click', () => { showLoading(paymentLoader, () => { showFullLoader(() => goToStage(3), 1200); }); }); newOrderBtn.addEventListener('click', () => { showFullLoader(() => goToStage(0)); }); // Toggle summary summaryToggle.addEventListener('click', () => { floatingSummary.classList.toggle('visible'); }); // Shipping method selection shippingMethods.forEach(method => { method.addEventListener('click', () => { shippingMethods.forEach(m => m.classList.remove('selected')); method.classList.add('selected'); selectedShippingPrice = parseFloat(method.dataset.price); updateSummary(); }); }); // Payment method selection paymentMethods.forEach(method => { method.addEventListener('click', () => { paymentMethods.forEach(m => m.classList.remove('active')); method.classList.add('active'); }); }); // Initialize the checkout updateSummary(); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Flux Mobile Banking</title> <style> :root { --primary: #4A6FA5; --primary-dark: #2D4B80; --secondary: #F3F5F9; --text: #2C3E50; --text-light: #7A8C9E; --accent: #6ABBFF; --accent-dark: #4E99D6; --success: #4CAF50; --error: #F44336; --warning: #FFC107; --background: #FFFFFF; --card-shadow: 0 8px 20px rgba(43, 71, 112, 0.08); --transition-speed: 0.3s; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', 'San Francisco', -apple-system, BlinkMacSystemFont, sans-serif; } body { background-color: var(--background); color: var(--text); height: 100vh; display: flex; justify-content: center; align-items: center; overflow: hidden; position: relative; } .app-container { width: 100%; max-width: 380px; height: 680px; background-color: var(--secondary); border-radius: 24px; overflow: hidden; position: relative; box-shadow: var(--card-shadow); } .status-bar { height: 40px; background-color: var(--background); display: flex; justify-content: space-between; align-items: center; padding: 0 20px; font-size: 12px; } .status-bar .time { font-weight: 600; } .status-bar .icons { display: flex; gap: 8px; } .header { padding: 20px; background-color: var(--primary); color: white; position: relative; z-index: 2; } .header-content { display: flex; justify-content: space-between; align-items: center; } .user-info { display: flex; align-items: center; gap: 12px; margin-bottom: 15px; } .user-avatar { width: 40px; height: 40px; border-radius: 50%; background-color: var(--accent); display: flex; justify-content: center; align-items: center; color: white; font-weight: 600; font-size: 16px; } .welcome-text h1 { font-size: 18px; font-weight: 600; margin-bottom: 4px; } .welcome-text p { font-size: 13px; opacity: 0.8; } .notification-bell { width: 36px; height: 36px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.2); display: flex; justify-content: center; align-items: center; position: relative; } .notification-bell::after { content: ''; position: absolute; width: 8px; height: 8px; background-color: var(--warning); border-radius: 50%; top: 8px; right: 8px; } .accounts { margin-top: 20px; position: relative; display: flex; gap: 16px; overflow-x: auto; scrollbar-width: none; padding-bottom: 5px; } .accounts::-webkit-scrollbar { display: none; } .account-card { min-width: 240px; height: 140px; background: linear-gradient(135deg, var(--primary), var(--primary-dark)); border-radius: 16px; padding: 16px; color: white; position: relative; overflow: hidden; box-shadow: 0 4px 12px rgba(43, 71, 112, 0.12); transition: transform var(--transition-speed); } .account-card:hover { transform: translateY(-5px); } .account-card::before { content: ''; position: absolute; width: 150px; height: 150px; background-color: rgba(255, 255, 255, 0.05); border-radius: 50%; top: -40px; right: -40px; } .account-card::after { content: ''; position: absolute; width: 100px; height: 100px; background-color: rgba(255, 255, 255, 0.05); border-radius: 50%; bottom: -30px; left: -30px; } .account-type { font-size: 13px; opacity: 0.8; margin-bottom: 16px; } .account-balance { font-size: 26px; font-weight: 600; margin-bottom: 8px; } .account-number { font-size: 12px; opacity: 0.7; } .card-logo { position: absolute; bottom: 16px; right: 16px; font-size: 26px; opacity: 0.5; } .quick-actions { display: flex; justify-content: space-between; padding: 24px 20px; background-color: var(--background); z-index: 1; position: relative; } .action-btn { display: flex; flex-direction: column; align-items: center; gap: 8px; width: 70px; cursor: pointer; transition: transform 0.2s ease; } .action-btn:active { transform: scale(0.95); } .action-icon { width: 44px; height: 44px; border-radius: 50%; background-color: var(--secondary); display: flex; justify-content: center; align-items: center; color: var(--primary); font-size: 20px; transition: background-color 0.2s ease; } .action-btn:hover .action-icon { background-color: var(--primary); color: white; } .action-label { font-size: 12px; color: var(--text-light); font-weight: 500; } .main-content { background-color: var(--secondary); flex: 1; overflow-y: auto; padding: 20px; min-height: 220px; } .transaction-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } .transaction-title { font-weight: 600; font-size: 16px; } .view-all { color: var(--primary); font-size: 13px; font-weight: 500; cursor: pointer; } .transactions-list { display: flex; flex-direction: column; gap: 12px; } .transaction-item { background-color: var(--background); border-radius: 12px; padding: 16px; display: flex; justify-content: space-between; align-items: center; box-shadow: 0 2px 8px rgba(43, 71, 112, 0.05); transition: transform var(--transition-speed), box-shadow var(--transition-speed); cursor: pointer; } .transaction-item:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(43, 71, 112, 0.1); } .transaction-item.active { border-left: 3px solid var(--primary); } .transaction-details { display: flex; align-items: center; gap: 16px; } .transaction-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; justify-content: center; align-items: center; font-size: 18px; } .transaction-icon.payment { background-color: rgba(76, 175, 80, 0.1); color: var(--success); } .transaction-icon.transfer { background-color: rgba(33, 150, 243, 0.1); color: var(--primary); } .transaction-icon.subscription { background-color: rgba(156, 39, 176, 0.1); color: #9C27B0; } .transaction-info h3 { font-size: 14px; margin-bottom: 4px; font-weight: 500; } .transaction-info p { font-size: 12px; color: var(--text-light); } .transaction-amount { text-align: right; } .transaction-amount h3 { font-size: 14px; margin-bottom: 4px; font-weight: 500; } .transaction-amount p { font-size: 12px; color: var(--text-light); } .negative { color: var(--error); } .positive { color: var(--success); } .bottom-navigation { display: flex; justify-content: space-around; background-color: var(--background); padding: 16px; border-top: 1px solid rgba(0, 0, 0, 0.03); position: relative; } .nav-item { display: flex; flex-direction: column; align-items: center; gap: 4px; cursor: pointer; position: relative; transition: color 0.2s ease; } .nav-icon { font-size: 20px; color: var(--text-light); transition: color 0.2s ease; } .nav-label { font-size: 11px; color: var(--text-light); font-weight: 500; transition: color 0.2s ease; } .nav-item.active .nav-icon, .nav-item.active .nav-label { color: var(--primary); font-weight: 600; } .nav-indicator { position: absolute; width: 4px; height: 4px; background-color: var(--primary); border-radius: 50%; bottom: -8px; left: 50%; transform: translateX(-50%); transition: transform 0.3s ease, width 0.3s ease; } .nav-item.active .nav-indicator { width: 12px; border-radius: 2px; } /* Detail View */ .detail-view { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--background); z-index: 10; display: flex; flex-direction: column; transform: translateX(100%); transition: transform 0.3s cubic-bezier(0.19, 1, 0.22, 1); } .detail-view.active { transform: translateX(0); } .detail-header { padding: 20px; background-color: var(--background); display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } .back-button { width: 36px; height: 36px; border-radius: 50%; background-color: var(--secondary); display: flex; justify-content: center; align-items: center; cursor: pointer; transition: background-color 0.2s; } .back-button:hover { background-color: rgba(0, 0, 0, 0.05); } .detail-title { font-size: 16px; font-weight: 600; } .more-options { width: 36px; height: 36px; border-radius: 50%; background-color: var(--secondary); display: flex; justify-content: center; align-items: center; cursor: pointer; transition: background-color 0.2s; } .more-options:hover { background-color: rgba(0, 0, 0, 0.05); } .transaction-detail-content { flex: 1; padding: 24px; display: flex; flex-direction: column; overflow-y: auto; } .transaction-overview { display: flex; flex-direction: column; align-items: center; margin-bottom: 32px; } .transaction-detail-icon { width: 64px; height: 64px; border-radius: 16px; display: flex; justify-content: center; align-items: center; font-size: 28px; margin-bottom: 16px; } .transaction-detail-amount { font-size: 28px; font-weight: 600; margin-bottom: 8px; } .transaction-status { display: inline-block; padding: 4px 12px; border-radius: 20px; font-size: 13px; font-weight: 500; margin-bottom: 16px; } .status-completed { background-color: rgba(76, 175, 80, 0.1); color: var(--success); } .transaction-info-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; margin-bottom: 32px; } .info-item { display: flex; flex-direction: column; gap: 4px; } .info-label { font-size: 12px; color: var(--text-light); } .info-value { font-size: 14px; font-weight: 500; } .detail-card { background-color: var(--secondary); border-radius: 16px; padding: 20px; margin-bottom: 20px; } .detail-card-title { font-size: 15px; font-weight: 600; margin-bottom: 16px; display: flex; align-items: center; gap: 8px; } .detail-card-title svg { width: 18px; height: 18px; color: var(--primary); } .note-text { font-size: 14px; line-height: 1.5; color: var(--text-light); } .action-buttons { display: flex; gap: 12px; margin-top: 32px; } .btn { flex: 1; padding: 16px; border-radius: 12px; font-size: 14px; font-weight: 600; text-align: center; cursor: pointer; transition: background-color 0.2s, transform 0.2s; display: flex; justify-content: center; align-items: center; gap: 8px; } .btn:active { transform: scale(0.98); } .btn-outline { border: 1px solid var(--primary); color: var(--primary); background-color: transparent; } .btn-outline:hover { background-color: rgba(74, 111, 165, 0.05); } .btn-primary { background-color: var(--primary); color: white; } .btn-primary:hover { background-color: var(--primary-dark); } /* Animations and Transitions */ .slide-up { animation: slideUp 0.3s cubic-bezier(0.19, 1, 0.22, 1) forwards; } .slide-down { animation: slideDown 0.3s cubic-bezier(0.19, 1, 0.22, 1) forwards; } .fade-in { animation: fadeIn 0.3s ease forwards; } @keyframes slideUp { 0% { transform: translateY(20px); opacity: 0; } 100% { transform: translateY(0); opacity: 1; } } @keyframes slideDown { 0% { transform: translateY(-20px); opacity: 0; } 100% { transform: translateY(0); opacity: 1; } } @keyframes fadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } /* Pulse animation for the active account */ @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(74, 111, 165, 0.4); } 70% { box-shadow: 0 0 0 8px rgba(74, 111, 165, 0); } 100% { box-shadow: 0 0 0 0 rgba(74, 111, 165, 0); } } .account-card.active { animation: pulse 2s infinite; } /* Floating balance animation */ @keyframes float { 0% { transform: translateY(0px); } 50% { transform: translateY(-5px); } 100% { transform: translateY(0px); } } .account-balance { animation: float 3s ease-in-out infinite; } /* Micro-interactions for security features */ .security-pulse { position: absolute; top: 20px; right: 20px; width: 8px; height: 8px; background-color: var(--success); border-radius: 50%; animation: securityPulse 2s infinite; } @keyframes securityPulse { 0% { transform: scale(1); opacity: 1; } 70% { transform: scale(2); opacity: 0; } 100% { transform: scale(1); opacity: 0; } } /* Responsive Design */ @media (max-width: 380px) { .app-container { border-radius: 0; height: 100vh; max-width: 100%; } .quick-actions { padding: 16px; } .action-btn { width: 60px; } .action-icon { width: 40px; height: 40px; } .transaction-item { padding: 14px; } } /* Loading indicator */ .loader { width: 100%; height: 3px; background-color: rgba(74, 111, 165, 0.2); position: absolute; top: 0; left: 0; overflow: hidden; display: none; } .loader::before { content: ''; position: absolute; width: 50%; height: 100%; background-color: var(--primary); animation: loading 1.5s infinite ease-in-out; } @keyframes loading { 0% { left: -50%; } 100% { left: 100%; } } .loader.active { display: block; } /* Shimmer effect for loading state */ .shimmer { background: linear-gradient(90deg, var(--secondary) 0%, rgba(243, 245, 249, 0.8) 50%, var(--secondary) 100%); background-size: 200% 100%; animation: shimmer 1.5s infinite; } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } </style> </head> <body> <div class="app-container"> <div class="loader" id="loader"></div> <div class="status-bar"> <div class="time">9:41 AM</div> <div class="icons"> <i class="fas">📶</i> <i class="fas">📶</i> <i class="fas">🔋</i> </div> </div> <div class="header"> <div class="header-content"> <div class="user-info"> <div class="user-avatar">JS</div> <div class="welcome-text"> <h1>Good morning, Jamie</h1> <p>Welcome back to Flux Banking</p> </div> </div> <div class="notification-bell"> <i class="fas">🔔</i> </div> </div> <div class="accounts"> <div class="account-card active" onclick="showAccountDetail(this)"> <div class="account-type">Primary Checking</div> <div class="account-balance">$4,285.62</div> <div class="account-number">•••• 4518</div> <div class="card-logo">💳</div> <div class="security-pulse"></div> </div> <div class="account-card" onclick="showAccountDetail(this)"> <div class="account-type">Savings Account</div> <div class="account-balance">$12,354.89</div> <div class="account-number">•••• 7692</div> <div class="card-logo">💰</div> </div> </div> </div> <div class="quick-actions"> <div class="action-btn" onclick="showMicroInteraction(this)"> <div class="action-icon">↗️</div> <div class="action-label">Send</div> </div> <div class="action-btn" onclick="showMicroInteraction(this)"> <div class="action-icon">↙️</div> <div class="action-label">Request</div> </div> <div class="action-btn" onclick="showMicroInteraction(this)"> <div class="action-icon">📱</div> <div class="action-label">Pay Bills</div> </div> <div class="action-btn" onclick="showMicroInteraction(this)"> <div class="action-icon">🔁</div> <div class="action-label">Transfer</div> </div> </div> <div class="main-content"> <div class="transaction-header"> <div class="transaction-title">Recent Transactions</div> <div class="view-all">View all</div> </div> <div class="transactions-list"> <div class="transaction-item" onclick="showTransactionDetail('Amazon Prime', '-$14.99', 'subscription')"> <div class="transaction-details"> <div class="transaction-icon subscription">📺</div> <div class="transaction-info"> <h3>Amazon Prime</h3> <p>Subscription</p> </div> </div> <div class="transaction-amount"> <h3 class="negative">-$14.99</h3> <p>Today</p> </div> </div> <div class="transaction-item" onclick="showTransactionDetail('Salary Deposit', '+$3,482.50', 'payment')"> <div class="transaction-details"> <div class="transaction-icon payment">💼</div> <div class="transaction-info"> <h3>Acme Corp</h3> <p>Salary Deposit</p> </div> </div> <div class="transaction-amount"> <h3 class="positive">+$3,482.50</h3> <p>Yesterday</p> </div> </div> <div class="transaction-item" onclick="showTransactionDetail('Electric Bill', '-$87.32', 'payment')"> <div class="transaction-details"> <div class="transaction-icon payment">⚡</div> <div class="transaction-info"> <h3>City Power Co.</h3> <p>Electric Bill</p> </div> </div> <div class="transaction-amount"> <h3 class="negative">-$87.32</h3> <p>Oct 15, 2023</p> </div> </div> <div class="transaction-item" onclick="showTransactionDetail('Transfer to Sarah', '-$250.00', 'transfer')"> <div class="transaction-details"> <div class="transaction-icon transfer">🔁</div> <div class="transaction-info"> <h3>Sarah Johnson</h3> <p>Transfer</p> </div> </div> <div class="transaction-amount"> <h3 class="negative">-$250.00</h3> <p>Oct 14, 2023</p> </div> </div> </div> </div> <div class="bottom-navigation"> <div class="nav-item active"> <div class="nav-icon">🏠</div> <div class="nav-label">Home</div> <div class="nav-indicator"></div> </div> <div class="nav-item"> <div class="nav-icon">📊</div> <div class="nav-label">Analytics</div> <div class="nav-indicator"></div> </div> <div class="nav-item"> <div class="nav-icon">💳</div> <div class="nav-label">Cards</div> <div class="nav-indicator"></div> </div> <div class="nav-item"> <div class="nav-icon">⚙️</div> <div class="nav-label">Settings</div> <div class="nav-indicator"></div> </div> </div> <!-- Transaction Detail View --> <div class="detail-view" id="transactionDetail"> <div class="detail-header"> <div class="back-button" onclick="hideTransactionDetail()"> <i class="fas">←</i> </div> <div class="detail-title">Transaction Details</div> <div class="more-options"> <i class="fas">⋯</i> </div> </div> <div class="transaction-detail-content"> <div class="transaction-overview"> <div class="transaction-detail-icon payment" id="detailIcon">📺</div> <div class="transaction-detail-amount negative" id="detailAmount">-$14.99</div> <div class="transaction-status status-completed">Completed</div> </div> <div class="transaction-info-grid"> <div class="info-item"> <div class="info-label">Date</div> <div class="info-value">October 17, 2023</div> </div> <div class="info-item"> <div class="info-label">Time</div> <div class="info-value">10:32 AM</div> </div> <div class="info-item"> <div class="info-label">From</div> <div class="info-value">Primary Checking</div> </div> <div class="info-item"> <div class="info-label">Transaction ID</div> <div class="info-value">TXN_78329152</div> </div> </div> <div class="detail-card"> <div class="detail-card-title"> <i class="fas">📝</i> Transaction Note </div> <div class="note-text" id="transactionNote"> Monthly subscription payment to Amazon Prime Video streaming service. Recurring payment on the 17th of each month. </div> </div> <div class="detail-card"> <div class="detail-card-title"> <i class="fas">🔒</i> Security Information </div> <div class="note-text"> This transaction was authorized using your saved payment method and verified with 2-factor authentication. </div> </div> <div class="action-buttons"> <div class="btn btn-outline"> <i class="fas">📋</i> Report Issue </div> <div class="btn btn-primary"> <i class="fas">🔁</i> Repeat Payment </div> </div> </div> </div> </div> <script> // Update the clock function updateClock() { const now = new Date(); let hours = now.getHours(); const minutes = now.getMinutes().toString().padStart(2, '0'); const ampm = hours >= 12 ? 'PM' : 'AM'; hours = hours % 12; hours = hours ? hours : 12; // the hour '0' should be '12' document.querySelector('.time').textContent = `${hours}:${minutes} ${ampm}`; } setInterval(updateClock, 1000); updateClock(); // Nav item click handler const navItems = document.querySelectorAll('.nav-item'); navItems.forEach(item => { item.addEventListener('click', function() { // If clicking an already active item, do nothing if (this.classList.contains('active')) return; // Show loading indicator const loader = document.getElementById('loader'); loader.classList.add('active'); // Remove active class from all items navItems.forEach(navItem => { navItem.classList.remove('active'); }); // Add active class to clicked item setTimeout(() => { this.classList.add('active'); loader.classList.remove('active'); }, 600); }); }); // Transaction detail view function showTransactionDetail(title, amount, type) { // Update the detail content document.getElementById('detailAmount').textContent = amount; document.getElementById('detailAmount').className = amount.startsWith('+') ? 'transaction-detail-amount positive' : 'transaction-detail-amount negative'; document.querySelector('.detail-title').textContent = title; // Set icon based on transaction type const iconElement = document.getElementById('detailIcon'); iconElement.className = `transaction-detail-icon ${type}`; if (type === 'subscription') { iconElement.textContent = '📺'; document.getElementById('transactionNote').textContent = 'Monthly subscription payment to Amazon Prime Video streaming service. Recurring payment on the 17th of each month.'; } else if (type === 'payment') { if (title === 'Salary Deposit') { iconElement.textContent = '💼'; document.getElementById('transactionNote').textContent = 'Monthly salary deposit from Acme Corporation. Direct deposit to your primary checking account.'; } else { iconElement.textContent = '⚡'; document.getElementById('transactionNote').textContent = 'Payment for monthly electric utility bill to City Power Co. Automatic payment from your primary checking account.'; } } else if (type === 'transfer') { iconElement.textContent = '🔁'; document.getElementById('transactionNote').textContent = 'Money transfer to Sarah Johnson ([email protected]). Purpose: "Splitting dinner check".'; } // Show the loading indicator const loader = document.getElementById('loader'); loader.classList.add('active'); // After a short delay, show the transaction detail view setTimeout(() => { document.getElementById('transactionDetail').classList.add('active'); loader.classList.remove('active'); }, 300); } function hideTransactionDetail() { document.getElementById('transactionDetail').classList.remove('active'); } // Account card interaction function showAccountDetail(card) { // Remove active class from all cards const cards = document.querySelectorAll('.account-card'); cards.forEach(c => c.classList.remove('active')); // Add active class to clicked card card.classList.add('active'); // Show loading indicator const loader = document.getElementById('loader'); loader.classList.add('active'); // Simulate loading setTimeout(() => { loader.classList.remove('active'); }, 400); } // Add micro-interactions function showMicroInteraction(button) { // Add class for visual feedback button.classList.add('active'); // Show loading indicator const loader = document.getElementById('loader'); loader.classList.add('active'); // Remove after animation setTimeout(() => { button.classList.remove('active'); loader.classList.remove('active'); }, 500); } // Add animation classes to elements on load document.addEventListener('DOMContentLoaded', function() { const header = document.querySelector('.header'); const quickActions = document.querySelector('.quick-actions'); const mainContent = document.querySelector('.main-content'); header.classList.add('slide-down'); quickActions.classList.add('fade-in'); mainContent.classList.add('slide-up'); // Add animation delay to transactions const transactions = document.querySelectorAll('.transaction-item'); transactions.forEach((transaction, index) => { setTimeout(() => { transaction.classList.add('fade-in'); }, 100 + (index * 50)); }); }); // Handle viewport adjustments for mobile function adjustViewport() { const container = document.querySelector('.app-container'); if (window.innerWidth <= 380) { container.style.height = `${window.innerHeight}px`; } else { container.style.height = '680px'; } } window.addEventListener('resize', adjustViewport); window.addEventListener('load', adjustViewport); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Zenith Estates | Luxury Properties</title> <style> @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600;700&family=Poppins:wght@300;400;500;600&display=swap'); :root { --primary: #a67c52; --primary-light: #d4b594; --secondary: #2c3e50; --accent: #e67e22; --light: #f9f5f0; --dark: #1a1a1a; --shadow: 0 4px 20px rgba(0, 0, 0, 0.08); --transition: all 0.4s cubic-bezier(0.65, 0, 0.35, 1); } * { margin: 0; padding: 0; box-sizing: border-box; } html, body { font-family: 'Poppins', sans-serif; background-color: var(--light); color: var(--dark); overflow-x: hidden; scroll-behavior: smooth; height: 100%; } body { max-width: 700px; margin: 0 auto; position: relative; } h1, h2, h3, h4 { font-family: 'Playfair Display', serif; font-weight: 600; } a { text-decoration: none; color: inherit; } ul { list-style: none; } button { cursor: pointer; border: none; outline: none; background: none; font-family: inherit; } .container { width: 100%; height: 100vh; padding: 0 1.5rem; position: relative; overflow-x: hidden; } /* Header */ header { display: flex; justify-content: space-between; align-items: center; padding: 1.5rem 0; position: fixed; top: 0; width: calc(100% - 3rem); max-width: 700px; z-index: 100; transition: var(--transition); background-color: rgba(249, 245, 240, 0.95); backdrop-filter: blur(8px); } .scrolled { box-shadow: var(--shadow); padding: 1rem 0; } .logo { font-family: 'Playfair Display', serif; font-weight: 700; font-size: 1.5rem; color: var(--primary); display: flex; align-items: center; } .logo-icon { font-size: 1.2rem; margin-right: 0.5rem; } .nav-toggle { display: flex; flex-direction: column; justify-content: space-between; width: 24px; height: 18px; } .nav-toggle span { width: 100%; height: 2px; background-color: var(--primary); transition: var(--transition); } .nav-toggle.active span:nth-child(1) { transform: translateY(8px) rotate(45deg); } .nav-toggle.active span:nth-child(2) { opacity: 0; } .nav-toggle.active span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); } nav { position: fixed; top: 0; right: -100%; width: 70%; height: 100vh; background-color: var(--light); z-index: 90; padding: 6rem 2rem 2rem; transition: var(--transition); box-shadow: var(--shadow); } nav.active { right: 0; } .nav-links { display: flex; flex-direction: column; gap: 1.5rem; } .nav-link { font-size: 1.1rem; font-weight: 500; color: var(--secondary); transition: var(--transition); position: relative; } .nav-link:after { content: ''; position: absolute; bottom: -5px; left: 0; width: 0; height: 2px; background-color: var(--primary); transition: var(--transition); } .nav-link:hover, .nav-link.active { color: var(--primary); } .nav-link:hover:after, .nav-link.active:after { width: 30px; } .overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 80; opacity: 0; visibility: hidden; transition: var(--transition); } .overlay.active { opacity: 1; visibility: visible; } /* Main */ main { padding-top: 80px; overflow: hidden; } /* Hero Section */ .hero { position: relative; height: calc(100vh - 80px); display: flex; flex-direction: column; justify-content: center; overflow: hidden; } .hero-bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; transform: scale(1.1); transition: transform 0.5s ease-out; } .hero-bg img { width: 100%; height: 100%; object-fit: cover; filter: brightness(0.8); } .hero-content { transform: translateY(30px); opacity: 0; animation: fadeInUp 1s forwards 0.3s; } .hero-title { font-size: 2.5rem; color: white; margin-bottom: 1rem; line-height: 1.2; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); letter-spacing: 0.5px; } .hero-subtitle { font-size: 1.1rem; color: rgba(255, 255, 255, 0.9); max-width: 500px; margin-bottom: 2rem; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); } .btn { display: inline-flex; align-items: center; justify-content: center; padding: 0.8rem 1.8rem; border-radius: 4px; font-weight: 500; transition: var(--transition); font-size: 0.95rem; } .btn-primary { background-color: var(--primary); color: white; box-shadow: 0 4px 10px rgba(166, 124, 82, 0.3); } .btn-primary:hover { background-color: #8a6745; transform: translateY(-2px); } .btn-icon { display: inline-flex; margin-left: 0.5rem; font-size: 1.1rem; } .scroll-indicator { position: absolute; bottom: 2rem; left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; color: white; font-size: 0.8rem; opacity: 0; animation: fadeIn 1s forwards 1s; } .scroll-arrow { width: 20px; height: 20px; border-bottom: 2px solid white; border-right: 2px solid white; transform: rotate(45deg); margin-top: 8px; animation: scrollBounce 2s infinite; } /* Featured Properties */ .featured { padding: 3rem 0; position: relative; } .section-header { margin-bottom: 2.5rem; transform: translateY(20px); opacity: 0; transition: var(--transition); } .section-header.visible { transform: translateY(0); opacity: 1; } .section-title { font-size: 2rem; color: var(--secondary); margin-bottom: 0.5rem; position: relative; display: inline-block; } .section-title:after { content: ''; position: absolute; bottom: -8px; left: 0; width: 60px; height: 3px; background-color: var(--primary); } .section-subtitle { color: var(--primary); font-size: 1rem; font-weight: 500; } .properties-grid { display: grid; grid-template-columns: 1fr; gap: 2rem; } .property-card { background-color: white; border-radius: 8px; overflow: hidden; box-shadow: var(--shadow); transition: var(--transition); transform: translateY(30px); opacity: 0; } .property-card.visible { transform: translateY(0); opacity: 1; } .property-card:hover { transform: translateY(-5px); box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1); } .property-img { position: relative; height: 220px; overflow: hidden; } .property-img img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; } .property-card:hover .property-img img { transform: scale(1.05); } .property-tag { position: absolute; top: 1rem; left: 1rem; background-color: var(--primary); color: white; padding: 0.4rem 0.8rem; border-radius: 4px; font-size: 0.8rem; font-weight: 500; } .property-content { padding: 1.5rem; } .property-price { color: var(--primary); font-size: 1.4rem; font-weight: 600; margin-bottom: 0.5rem; } .property-title { font-size: 1.2rem; margin-bottom: 0.5rem; color: var(--secondary); } .property-location { display: flex; align-items: center; color: #777; font-size: 0.9rem; margin-bottom: 1rem; } .property-location i { margin-right: 0.5rem; color: var(--primary); } .property-features { display: flex; border-top: 1px solid #eee; padding-top: 1rem; } .feature { display: flex; flex-direction: column; align-items: center; flex: 1; } .feature i { color: var(--primary); font-size: 1.1rem; margin-bottom: 0.3rem; } .feature span { font-size: 0.9rem; color: #666; } .property-details-btn { display: block; text-align: center; padding: 0.8rem; background-color: var(--light); color: var(--primary); border-radius: 4px; font-weight: 500; margin-top: 1rem; transition: var(--transition); border: 1px solid var(--primary-light); } .property-details-btn:hover { background-color: var(--primary-light); color: white; } /* Property Details Modal */ .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; z-index: 1000; opacity: 0; visibility: hidden; transition: opacity 0.3s ease; } .modal.active { opacity: 1; visibility: visible; } .modal-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.7); backdrop-filter: blur(5px); } .modal-container { position: relative; width: 90%; max-height: 85vh; overflow-y: auto; background-color: white; border-radius: 8px; box-shadow: 0 25px 50px rgba(0, 0, 0, 0.1); transform: scale(0.9); opacity: 0; transition: all 0.4s cubic-bezier(0.19, 1, 0.22, 1); } .modal.active .modal-container { transform: scale(1); opacity: 1; } .modal-close { position: absolute; top: 1rem; right: 1rem; width: 32px; height: 32px; border-radius: 50%; background-color: white; display: flex; align-items: center; justify-content: center; color: var(--dark); font-size: 1.2rem; z-index: 10; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); transition: var(--transition); } .modal-close:hover { background-color: var(--primary); color: white; } .property-gallery { position: relative; height: 250px; } .gallery-img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 0.5s ease; } .gallery-img.active { opacity: 1; } .gallery-img img { width: 100%; height: 100%; object-fit: cover; } .gallery-nav { position: absolute; bottom: 1rem; right: 1rem; display: flex; gap: 0.5rem; } .gallery-dot { width: 12px; height: 12px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.5); cursor: pointer; transition: var(--transition); } .gallery-dot.active { background-color: white; } .modal-content { padding: 2rem; } .property-detail-title { font-size: 1.8rem; color: var(--secondary); margin-bottom: 0.5rem; } .property-detail-price { font-size: 1.5rem; color: var(--primary); font-weight: 600; margin-bottom: 1rem; } .property-detail-location { display: flex; align-items: center; margin-bottom: 1.5rem; color: #555; } .property-detail-location i { margin-right: 0.5rem; color: var(--primary); } .property-detail-features { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-bottom: 1.5rem; padding-bottom: 1.5rem; border-bottom: 1px solid #eee; } .detail-feature { display: flex; align-items: center; } .detail-feature i { color: var(--primary); margin-right: 0.5rem; font-size: 1.1rem; } .property-description { color: #555; line-height: 1.6; margin-bottom: 1.5rem; } .property-amenities { margin-bottom: 1.5rem; } .amenities-title { font-size: 1.2rem; margin-bottom: 1rem; color: var(--secondary); } .amenities-list { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.7rem; } .amenity-item { display: flex; align-items: center; } .amenity-item i { color: var(--primary); margin-right: 0.5rem; } .contact-agent { background-color: var(--light); padding: 1.5rem; border-radius: 8px; margin-top: 1.5rem; } .agent-title { font-size: 1.2rem; margin-bottom: 1rem; color: var(--secondary); } .agent-info { display: flex; align-items: center; margin-bottom: 1rem; } .agent-img { width: 50px; height: 50px; border-radius: 50%; overflow: hidden; margin-right: 1rem; } .agent-img img { width: 100%; height: 100%; object-fit: cover; } .agent-name { font-weight: 500; color: var(--secondary); } .agent-role { font-size: 0.9rem; color: #777; } .modal-action { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-top: 1rem; } .btn-outlined { border: 1px solid var(--primary); color: var(--primary); background-color: transparent; transition: var(--transition); } .btn-outlined:hover { background-color: var(--primary-light); color: white; border-color: var(--primary-light); } /* Testimonials */ .testimonials { padding: 4rem 0; background-color: #f7f1ea; overflow: hidden; } .testimonials-container { position: relative; } .testimonial-card { background-color: white; padding: 2rem; border-radius: 8px; box-shadow: var(--shadow); opacity: 0; transform: translateX(50px); transition: var(--transition); } .testimonial-card.visible { opacity: 1; transform: translateX(0); } .testimonial-quote { color: var(--primary); font-size: 2rem; margin-bottom: 1rem; } .testimonial-text { font-style: italic; line-height: 1.6; color: #555; margin-bottom: 1.5rem; } .testimonial-author { display: flex; align-items: center; } .author-img { width: 45px; height: 45px; border-radius: 50%; overflow: hidden; margin-right: 1rem; } .author-img img { width: 100%; height: 100%; object-fit: cover; } .author-info { display: flex; flex-direction: column; } .author-name { font-weight: 500; color: var(--secondary); } .author-role { font-size: 0.9rem; color: #777; } .testimonial-nav { display: flex; justify-content: center; margin-top: 2rem; gap: 1rem; } .testimonial-btn { width: 40px; height: 40px; border-radius: 50%; background-color: white; color: var(--primary); display: flex; align-items: center; justify-content: center; font-size: 1.2rem; transition: var(--transition); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .testimonial-btn:hover { background-color: var(--primary); color: white; } /* Call to Action */ .cta { padding: 4rem 0; background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.7)), url('https://images.unsplash.com/photo-1560185127-6ed189bf02f4?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80'); background-size: cover; background-position: center; text-align: center; position: relative; overflow: hidden; } .cta-content { max-width: 600px; margin: 0 auto; position: relative; z-index: 1; transform: translateY(30px); opacity: 0; transition: var(--transition); } .cta-content.visible { transform: translateY(0); opacity: 1; } .cta-title { font-size: 2rem; color: white; margin-bottom: 1rem; } .cta-text { color: rgba(255, 255, 255, 0.9); margin-bottom: 2rem; line-height: 1.6; } .cta-form { display: flex; flex-direction: column; gap: 1rem; max-width: 400px; margin: 0 auto; } .form-input { padding: 0.9rem 1rem; border-radius: 4px; border: none; font-family: inherit; font-size: 0.95rem; } .form-input::placeholder { color: #999; } /* Footer */ footer { background-color: var(--secondary); color: rgba(255, 255, 255, 0.8); padding: 3rem 0 1.5rem; } .footer-content { display: grid; grid-template-columns: 1fr; gap: 2rem; margin-bottom: 2rem; } .footer-logo { font-family: 'Playfair Display', serif; font-weight: 700; font-size: 1.5rem; color: white; margin-bottom: 1rem; display: inline-block; } .footer-about { max-width: 300px; line-height: 1.6; margin-bottom: 1rem; } .social-links { display: flex; gap: 1rem; } .social-link { width: 36px; height: 36px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.1); display: flex; align-items: center; justify-content: center; transition: var(--transition); } .social-link:hover { background-color: var(--primary); } .footer-title { color: white; font-size: 1.1rem; margin-bottom: 1.2rem; font-weight: 500; } .footer-links { display: flex; flex-direction: column; gap: 0.8rem; } .footer-link { transition: var(--transition); } .footer-link:hover { color: var(--primary-light); transform: translateX(5px); } .contact-info { display: flex; flex-direction: column; gap: 1rem; } .contact-item { display: flex; align-items: flex-start; } .contact-icon { margin-right: 0.8rem; color: var(--primary-light); font-size: 1.1rem; } .footer-bottom { border-top: 1px solid rgba(255, 255, 255, 0.1); padding-top: 1.5rem; text-align: center; font-size: 0.9rem; opacity: 0.7; } /* Property Detail Page Transitions */ .page-transition { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--primary); transform: translateY(100%); z-index: 1000; transition: transform 0.6s cubic-bezier(0.77, 0, 0.175, 1); } .page-transition.active { transform: translateY(0); } .page-transition.exiting { transform: translateY(-100%); } /* Animations */ @keyframes fadeInUp { from { transform: translateY(30px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes scrollBounce { 0%, 20%, 50%, 80%, 100% { transform: rotate(45deg) translateY(0); } 40% { transform: rotate(45deg) translateY(-10px); } 60% { transform: rotate(45deg) translateY(-5px); } } /* Loader */ .loader { position: fixed; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; background-color: var(--light); z-index: 9999; transition: opacity 0.3s ease, visibility 0.3s ease; } .loader.hidden { opacity: 0; visibility: hidden; } .loader-content { display: flex; flex-direction: column; align-items: center; } .loader-icon { position: relative; width: 60px; height: 60px; } .loader-circle { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 4px solid rgba(166, 124, 82, 0.2); border-top-color: var(--primary); border-radius: 50%; animation: loaderSpin 1s infinite linear; } .loader-text { margin-top: 1rem; font-family: 'Playfair Display', serif; color: var(--primary); font-size: 1.1rem; } @keyframes loaderSpin { 100% { transform: rotate(360deg); } } /* Media Queries */ @media (min-width: 576px) { .properties-grid { grid-template-columns: repeat(2, 1fr); gap: 1rem; } .property-detail-features { grid-template-columns: repeat(4, 1fr); } .property-gallery { height: 300px; } } @media (min-width: 768px) { .hero-title { font-size: 3rem; } .footer-content { grid-template-columns: 1.5fr 1fr 1fr; } .property-gallery { height: 350px; } } /* Mouse follower effect */ .mouse-follower { position: fixed; top: 0; left: 0; width: 40px; height: 40px; border-radius: 50%; pointer-events: none; z-index: 9999; mix-blend-mode: difference; transform: translate(-50%, -50%) scale(0); transition: transform 0.1s ease; display: none; } .mouse-follower-inner { position: absolute; top: 50%; left: 50%; width: 8px; height: 8px; border-radius: 50%; background-color: var(--primary); transform: translate(-50%, -50%); } @media (hover: hover) { .mouse-follower { display: block; } .link-hover { cursor: none; } a, button, .property-card, .nav-toggle { cursor: none; } } </style> </head> <body> <!-- Mouse Follower --> <div class="mouse-follower"> <div class="mouse-follower-inner"></div> </div> <!-- Loader --> <div class="loader"> <div class="loader-content"> <div class="loader-icon"> <div class="loader-circle"></div> </div> <div class="loader-text">Zenith Estates</div> </div> </div> <!-- Page Transition Effect --> <div class="page-transition"></div> <!-- Header --> <header> <a href="#" class="logo link-hover"> <span class="logo-icon">✦</span>Zenith Estates </a> <button class="nav-toggle"> <span></span> <span></span> <span></span> </button> <nav> <ul class="nav-links"> <li><a href="#" class="nav-link active">Home</a></li> <li><a href="#" class="nav-link">Properties</a></li> <li><a href="#" class="nav-link">Services</a></li> <li><a href="#" class="nav-link">About</a></li> <li><a href="#" class="nav-link">Contact</a></li> </ul> </nav> </header> <div class="overlay"></div> <!-- Main Content --> <main> <!-- Hero Section --> <section class="hero"> <div class="hero-bg" id="hero-parallax"> <img src="https://images.unsplash.com/photo-1600596542815-ffad4c1539a9?ixlib=rb-1.2.1&auto=format&fit=crop&w=1350&q=80" alt="Luxury Home"> </div> <div class="container"> <div class="hero-content"> <h1 class="hero-title">Discover Your Dream <br>Luxury Residence</h1> <p class="hero-subtitle">Exceptional properties with unparalleled service and exclusive market insights</p> <a href="#featured" class="btn btn-primary"> Explore Properties <span class="btn-icon">→</span> </a> </div> </div> <div class="scroll-indicator"> <span>Scroll Down</span> <div class="scroll-arrow"></div> </div> </section> <!-- Featured Properties --> <section class="featured" id="featured"> <div class="container"> <div class="section-header"> <h2 class="section-title">Featured Properties</h2> <p class="section-subtitle">Hand-selected luxury homes in prime locations</p> </div> <div class="properties-grid"> <!-- Property 1 --> <div class="property-card" data-id="1"> <div class="property-img"> <img src="https://images.unsplash.com/photo-1580587771525-78b9dba3b914?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1074&q=80" alt="Oceanview Villa"> <div class="property-tag">Featured</div> </div> <div class="property-content"> <h3 class="property-price">$2,750,000</h3> <h4 class="property-title">Oceanview Villa</h4> <div class="property-location"> <i>📍</i> <span>Malibu, California</span> </div> <div class="property-features"> <div class="feature"> <i>🛏️</i> <span>4 Beds</span> </div> <div class="feature"> <i>🚿</i> <span>3.5 Baths</span> </div> <div class="feature"> <i>📏</i> <span>3,850 sqft</span> </div> </div> <button class="property-details-btn view-property">View Details</button> </div> </div> <!-- Property 2 --> <div class="property-card" data-id="2"> <div class="property-img"> <img src="https://images.unsplash.com/photo-1613977257363-707ba9348227?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80" alt="Modern Downtown Penthouse"> <div class="property-tag">New</div> </div> <div class="property-content"> <h3 class="property-price">$1,890,000</h3> <h4 class="property-title">Modern Downtown Penthouse</h4> <div class="property-location"> <i>📍</i> <span>Manhattan, New York</span> </div> <div class="property-features"> <div class="feature"> <i>🛏️</i> <span>3 Beds</span> </div> <div class="feature"> <i>🚿</i> <span>2 Baths</span> </div> <div class="feature"> <i>📏</i> <span>2,200 sqft</span> </div> </div> <button class="property-details-btn view-property">View Details</button> </div> </div> <!-- Property 3 --> <div class="property-card" data-id="3"> <div class="property-img"> <img src="https://images.unsplash.com/photo-1600607687939-ce8a6c25118c?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Chiaroscuro | Fine Art Photography</title> <style> :root { --bg-color: #1a1a1a; --text-color: #e0e0e0; --accent-color: #8a8a8a; --transition-speed: 0.7s; --hover-color: #ffffff; --grid-gap: 15px; --font-primary: 'Cormorant Garamond', serif; --font-secondary: 'Montserrat', sans-serif; } @import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@300;400;500;600&family=Montserrat:wght@300;400;500&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } body { background-color: var(--bg-color); color: var(--text-color); font-family: var(--font-secondary); font-weight: 300; line-height: 1.6; overflow-x: hidden; width: 100%; height: 100%; padding: 20px; } .container { max-width: 660px; margin: 0 auto; padding: 10px; height: calc(100vh - 40px); max-height: 660px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--accent-color) var(--bg-color); } .container::-webkit-scrollbar { width: 3px; } .container::-webkit-scrollbar-track { background: var(--bg-color); } .container::-webkit-scrollbar-thumb { background-color: var(--accent-color); } header { padding: 20px 0; border-bottom: 1px solid rgba(255, 255, 255, 0.05); position: relative; margin-bottom: 30px; display: flex; justify-content: space-between; align-items: center; } .logo { font-family: var(--font-primary); font-size: 28px; font-weight: 300; letter-spacing: 2px; color: var(--text-color); transition: all var(--transition-speed); position: relative; text-decoration: none; cursor: pointer; } .logo:hover { color: var(--hover-color); } .logo::after { content: ''; position: absolute; width: 0; height: 1px; bottom: -2px; left: 0; background-color: var(--hover-color); transition: width var(--transition-speed); } .logo:hover::after { width: 100%; } nav ul { display: flex; list-style-type: none; gap: 20px; } nav a { color: var(--accent-color); text-decoration: none; text-transform: uppercase; font-size: 12px; letter-spacing: 1px; transition: all var(--transition-speed); position: relative; padding: 2px 0; } nav a:hover { color: var(--hover-color); } nav a::after { content: ''; position: absolute; width: 0; height: 1px; bottom: 0; left: 0; background-color: var(--hover-color); transition: width var(--transition-speed); } nav a:hover::after { width: 100%; } .portfolio-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: var(--grid-gap); margin-bottom: 40px; } .portfolio-item { position: relative; overflow: hidden; aspect-ratio: 1/1.2; cursor: pointer; transition: transform 0.3s ease; } .portfolio-item img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(0.6); transition: all var(--transition-speed); } .portfolio-item:hover img { filter: grayscale(0); transform: scale(1.05); } .portfolio-item-info { position: absolute; bottom: 0; left: 0; width: 100%; padding: 15px; background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent); opacity: 0; transform: translateY(20px); transition: all var(--transition-speed); } .portfolio-item:hover .portfolio-item-info { opacity: 1; transform: translateY(0); } .portfolio-item-title { font-family: var(--font-primary); font-size: 16px; margin-bottom: 5px; font-weight: 400; } .portfolio-item-category { font-size: 11px; text-transform: uppercase; letter-spacing: 1px; color: var(--accent-color); } .about-section { max-width: 600px; margin: 60px auto; text-align: center; } .about-section h2 { font-family: var(--font-primary); font-size: 24px; font-weight: 300; margin-bottom: 20px; letter-spacing: 1px; } .about-section p { color: var(--accent-color); font-size: 14px; line-height: 1.8; margin-bottom: 15px; } .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.95); display: flex; justify-content: center; align-items: center; z-index: 1000; opacity: 0; pointer-events: none; transition: opacity var(--transition-speed); } .modal.active { opacity: 1; pointer-events: all; } .modal-content { position: relative; width: 90%; max-width: 1000px; height: 80%; display: flex; flex-direction: column; justify-content: center; } .modal-image-container { position: relative; width: 100%; height: 100%; overflow: hidden; } .modal-image { width: 100%; height: 100%; object-fit: contain; opacity: 0; transform: scale(0.9); transition: opacity 1s ease, transform 1s ease; } .modal.active .modal-image { opacity: 1; transform: scale(1); } .modal-close { position: absolute; top: 20px; right: 20px; background: none; border: none; color: var(--text-color); font-size: 24px; cursor: pointer; z-index: 1001; opacity: 0.7; transition: opacity 0.3s; } .modal-close:hover { opacity: 1; } .modal-details { position: absolute; bottom: 30px; left: 30px; z-index: 1001; opacity: 0; transform: translateY(20px); transition: opacity 0.5s ease 0.3s, transform 0.5s ease 0.3s; } .modal.active .modal-details { opacity: 1; transform: translateY(0); } .modal-title { font-family: var(--font-primary); font-size: 22px; margin-bottom: 5px; font-weight: 400; } .modal-description { max-width: 500px; color: var(--accent-color); font-size: 14px; line-height: 1.6; } .modal-nav { position: absolute; top: 50%; width: 100%; display: flex; justify-content: space-between; transform: translateY(-50%); z-index: 1001; } .modal-nav button { background: none; border: none; color: var(--text-color); font-size: 28px; cursor: pointer; width: 50px; height: 50px; opacity: 0.6; transition: opacity 0.3s; } .modal-nav button:hover { opacity: 1; } .contact-button { display: inline-block; margin-top: 20px; padding: 10px 25px; border: 1px solid var(--accent-color); color: var(--text-color); text-decoration: none; transition: all var(--transition-speed); font-size: 12px; letter-spacing: 1px; text-transform: uppercase; } .contact-button:hover { background-color: rgba(255, 255, 255, 0.05); border-color: var(--text-color); } footer { margin-top: 60px; padding: 20px 0; border-top: 1px solid rgba(255, 255, 255, 0.05); text-align: center; font-size: 12px; color: var(--accent-color); } .theme-toggle { cursor: pointer; font-size: 14px; color: var(--accent-color); transition: color 0.3s; } .theme-toggle:hover { color: var(--text-color); } .ghost-cursor { position: fixed; width: 30px; height: 30px; border: 1px solid rgba(255, 255, 255, 0.5); border-radius: 50%; pointer-events: none; transform: translate(-50%, -50%); transition: transform 0.1s, width 0.3s, height 0.3s, border-color 0.3s; z-index: 9999; mix-blend-mode: difference; } @media screen and (max-width: 700px) { .portfolio-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; } header { flex-direction: column; align-items: flex-start; gap: 15px; } nav ul { gap: 15px; } .about-section { margin: 40px auto; } .modal-details { bottom: 15px; left: 15px; } .modal-title { font-size: 18px; } .modal-description { font-size: 12px; max-width: 90%; } } /* Theme dark/light toggle */ body.light-theme { --bg-color: #f0f0f0; --text-color: #333333; --accent-color: #777777; --hover-color: #000000; } .light-theme .portfolio-item img { filter: grayscale(0.4); } </style> </head> <body> <div class="ghost-cursor"></div> <div class="container"> <header> <a href="#" class="logo">CHIAROSCURO</a> <nav> <ul> <li><a href="#" data-section="portfolio">Portfolio</a></li> <li><a href="#" data-section="about">About</a></li> <li><a href="#" class="theme-toggle">○</a></li> </ul> </nav> </header> <div class="section portfolio-section active"> <div class="portfolio-grid"> <div class="portfolio-item" data-id="1"> <img src="https://images.unsplash.com/photo-1542103749-8ef59b94f47e" alt="Urban Silhouettes"> <div class="portfolio-item-info"> <h3 class="portfolio-item-title">Urban Silhouettes</h3> <p class="portfolio-item-category">Architectural</p> </div> </div> <div class="portfolio-item" data-id="2"> <img src="https://images.unsplash.com/photo-1469474968028-56623f02e42e" alt="Peaceful Solitude"> <div class="portfolio-item-info"> <h3 class="portfolio-item-title">Peaceful Solitude</h3> <p class="portfolio-item-category">Landscape</p> </div> </div> <div class="portfolio-item" data-id="3"> <img src="https://images.unsplash.com/photo-1611241443322-78b19f53881a" alt="Ephemeral Motion"> <div class="portfolio-item-info"> <h3 class="portfolio-item-title">Ephemeral Motion</h3> <p class="portfolio-item-category">Abstract</p> </div> </div> <div class="portfolio-item" data-id="4"> <img src="https://images.unsplash.com/photo-1502977249166-824b3a8a4d6d" alt="Fractured Light"> <div class="portfolio-item-info"> <h3 class="portfolio-item-title">Fractured Light</h3> <p class="portfolio-item-category">Experimental</p> </div> </div> <div class="portfolio-item" data-id="5"> <img src="https://images.unsplash.com/photo-1516616370751-86d6bd8b0651" alt="Transient Moments"> <div class="portfolio-item-info"> <h3 class="portfolio-item-title">Transient Moments</h3> <p class="portfolio-item-category">Street</p> </div> </div> <div class="portfolio-item" data-id="6"> <img src="https://images.unsplash.com/photo-1599751449918-7c71ad74efbc" alt="Geometric Shadows"> <div class="portfolio-item-info"> <h3 class="portfolio-item-title">Geometric Shadows</h3> <p class="portfolio-item-category">Urban</p> </div> </div> </div> </div> <div class="section about-section" style="display: none;"> <h2>The Art of Observation</h2> <p>For over a decade, I've explored the interplay between light and shadow—the essence of chiaroscuro. My work examines how momentary impressions can transform into lasting emotional responses through the lens of a camera.</p> <p>Each photograph represents a dialogue between presence and absence, revealing how the mundane can become transcendent when observed with patience and intention. I'm particularly drawn to liminal spaces and transitional moments, where reality seems to shift ever so slightly.</p> <p>Based in Helsinki, my photography has been exhibited in galleries across Europe and featured in publications including Aperture, LensCulture, and Black+White Photography Magazine.</p> <a href="#" class="contact-button">Get in touch</a> </div> <footer> <p>© 2023 Chiaroscuro Photography — All images are protected by copyright</p> </footer> </div> <div class="modal"> <button class="modal-close">×</button> <div class="modal-content"> <div class="modal-image-container"> <img src="" alt="" class="modal-image"> </div> <div class="modal-details"> <h2 class="modal-title"></h2> <p class="modal-description"></p> </div> <div class="modal-nav"> <button class="modal-prev">❮</button> <button class="modal-next">❯</button> </div> </div> </div> <script> // Portfolio items data const portfolioItems = [ { id: 1, title: "Urban Silhouettes", category: "Architectural", image: "https://images.unsplash.com/photo-1542103749-8ef59b94f47e", description: "Captured during the golden hour in Tokyo, this series explores how architecture creates rhythm through repeated patterns and the interplay of light against concrete surfaces." }, { id: 2, title: "Peaceful Solitude", category: "Landscape", image: "https://images.unsplash.com/photo-1469474968028-56623f02e42e", description: "This minimalist landscape series documents the stillness found in remote locations, where the absence of human presence allows subtle natural details to emerge with remarkable clarity." }, { id: 3, title: "Ephemeral Motion", category: "Abstract", image: "https://images.unsplash.com/photo-1611241443322-78b19f53881a", description: "Using long exposure techniques, these images transform ordinary movement into graceful abstractions, revealing patterns invisible to the naked eye." }, { id: 4, title: "Fractured Light", category: "Experimental", image: "https://images.unsplash.com/photo-1502977249166-824b3a8a4d6d", description: "Shot through prisms and reflective surfaces, this experimental series explores how light can be manipulated to create alternative perceptions of familiar environments." }, { id: 5, title: "Transient Moments", category: "Street", image: "https://images.unsplash.com/photo-1516616370751-86d6bd8b0651", description: "Focusing on fleeting human interactions in public spaces, these candid captures reveal the unconscious choreography of urban life." }, { id: 6, title: "Geometric Shadows", category: "Urban", image: "https://images.unsplash.com/photo-1599751449918-7c71ad74efbc", description: "An exploration of how architectural elements cast complex shadows throughout the day, creating temporary geometric compositions on urban surfaces." } ]; // DOM Elements const modal = document.querySelector('.modal'); const modalImage = document.querySelector('.modal-image'); const modalTitle = document.querySelector('.modal-title'); const modalDescription = document.querySelector('.modal-description'); const modalClose = document.querySelector('.modal-close'); const modalPrev = document.querySelector('.modal-prev'); const modalNext = document.querySelector('.modal-next'); const portfolioGridItems = document.querySelectorAll('.portfolio-item'); const navLinks = document.querySelectorAll('nav a[data-section]'); const sections = document.querySelectorAll('.section'); const themeToggle = document.querySelector('.theme-toggle'); const ghostCursor = document.querySelector('.ghost-cursor'); // Current item index for modal navigation let currentIndex = 0; // Custom cursor document.addEventListener('mousemove', (e) => { requestAnimationFrame(() => { ghostCursor.style.transform = `translate(${e.clientX}px, ${e.clientY}px)`; }); }); document.addEventListener('mousedown', () => { ghostCursor.style.transform = 'translate(-50%, -50%) scale(0.9)'; ghostCursor.style.border = '1px solid rgba(255, 255, 255, 0.8)'; }); document.addEventListener('mouseup', () => { ghostCursor.style.transform = 'translate(-50%, -50%) scale(1)'; ghostCursor.style.border = '1px solid rgba(255, 255, 255, 0.5)'; }); // Interactive elements cursor effect document.querySelectorAll('a, button, .portfolio-item').forEach(item => { item.addEventListener('mouseenter', () => { ghostCursor.style.width = '40px'; ghostCursor.style.height = '40px'; ghostCursor.style.borderColor = 'rgba(255, 255, 255, 0.8)'; }); item.addEventListener('mouseleave', () => { ghostCursor.style.width = '30px'; ghostCursor.style.height = '30px'; ghostCursor.style.borderColor = 'rgba(255, 255, 255, 0.5)'; }); }); // Open modal when clicking on portfolio item portfolioGridItems.forEach((item, index) => { item.addEventListener('click', () => { const itemId = parseInt(item.dataset.id); const portfolioItem = portfolioItems.find(item => item.id === itemId); if (!portfolioItem) return; currentIndex = portfolioItems.indexOf(portfolioItem); updateModalContent(portfolioItem); modal.classList.add('active'); document.body.style.overflow = 'hidden'; }); }); // Update modal content function updateModalContent(item) { modalImage.style.opacity = '0'; modalImage.style.transform = 'scale(0.9)'; setTimeout(() => { modalImage.src = item.image; modalTitle.textContent = item.title; modalDescription.textContent = item.description; modalImage.style.opacity = '1'; modalImage.style.transform = 'scale(1)'; }, 300); } // Modal navigation modalNext.addEventListener('click', () => { currentIndex = (currentIndex + 1) % portfolioItems.length; updateModalContent(portfolioItems[currentIndex]); }); modalPrev.addEventListener('click', () => { currentIndex = (currentIndex - 1 + portfolioItems.length) % portfolioItems.length; updateModalContent(portfolioItems[currentIndex]); }); // Close modal modalClose.addEventListener('click', () => { modal.classList.remove('active'); document.body.style.overflow = ''; }); // Close modal with escape key document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && modal.classList.contains('active')) { modal.classList.remove('active'); document.body.style.overflow = ''; } }); // Navigation navLinks.forEach(link => { link.addEventListener('click', (e) => { e.preventDefault(); const targetSection = link.dataset.section; sections.forEach(section => { if (section.classList.contains(`${targetSection}-section`)) { section.style.display = 'block'; } else { section.style.display = 'none'; } }); }); }); // Theme toggle themeToggle.addEventListener('click', (e) => { e.preventDefault(); document.body.classList.toggle('light-theme'); themeToggle.textContent = document.body.classList.contains('light-theme') ? '●' : '○'; }); // Contact button functionality (prevent default to avoid form submission) document.querySelector('.contact-button')?.addEventListener('click', (e) => { e.preventDefault(); alert('Contact functionality would appear here in a real portfolio.'); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Dataflow Analytics Dashboard</title> <style> :root { --primary: #2c3e50; --secondary: #3498db; --tertiary: #1abc9c; --quaternary: #9b59b6; --light: #ecf0f1; --dark: #2c3e50; --success: #27ae60; --danger: #e74c3c; --warning: #f39c12; --grey: #95a5a6; --transition-speed: 0.3s; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; } body { background-color: #f5f7fa; color: var(--dark); height: 100vh; overflow: hidden; display: flex; flex-direction: column; } .dashboard { display: flex; height: 100%; overflow: hidden; } .sidebar { width: 70px; height: 100%; background-color: var(--primary); color: white; transition: width var(--transition-speed) cubic-bezier(0.25, 1, 0.5, 1); overflow: hidden; display: flex; flex-direction: column; z-index: 10; } .sidebar:hover { width: 220px; } .sidebar-header { padding: 20px 0; text-align: center; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .sidebar-logo { font-size: 1.2rem; font-weight: bold; white-space: nowrap; opacity: 0; transition: opacity var(--transition-speed); } .sidebar:hover .sidebar-logo { opacity: 1; } .sidebar-icon { display: inline-block; width: 70px; height: 24px; text-align: center; } .nav-menu { list-style: none; padding: 20px 0; flex: 1; } .nav-item { margin-bottom: 5px; position: relative; cursor: pointer; } .nav-item::before { content: ''; position: absolute; left: 0; width: 3px; height: 0; background-color: var(--tertiary); transition: height var(--transition-speed) cubic-bezier(0.25, 1, 0.5, 1); } .nav-item.active::before, .nav-item:hover::before { height: 100%; } .nav-link { display: flex; align-items: center; padding: 12px 20px; color: white; text-decoration: none; white-space: nowrap; transition: background-color var(--transition-speed); } .nav-link:hover { background-color: rgba(255, 255, 255, 0.1); } .nav-link.active { background-color: rgba(255, 255, 255, 0.15); } .nav-text { margin-left: 15px; opacity: 0; transition: opacity var(--transition-speed); } .sidebar:hover .nav-text { opacity: 1; } .main-content { flex: 1; overflow: hidden; display: flex; flex-direction: column; } .header { display: flex; justify-content: space-between; align-items: center; padding: 20px 30px; background-color: white; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); z-index: 5; } .header-title { font-weight: 600; font-size: 1.5rem; color: var(--primary); } .header-actions { display: flex; align-items: center; } .search-bar { position: relative; margin-right: 20px; } .search-input { background-color: #f5f7fa; border: none; border-radius: 20px; padding: 8px 15px 8px 35px; width: 200px; transition: width var(--transition-speed), box-shadow var(--transition-speed); } .search-input:focus { outline: none; width: 250px; box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.3); } .search-icon { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--grey); } .profile { display: flex; align-items: center; cursor: pointer; } .profile-avatar { width: 35px; height: 35px; border-radius: 50%; object-fit: cover; margin-right: 10px; background-color: var(--secondary); display: flex; align-items: center; justify-content: center; color: white; font-weight: bold; } .profile-name { font-size: 0.9rem; font-weight: 500; } .dashboard-content { flex: 1; padding: 20px 30px; overflow-y: auto; } .panels-container { position: relative; height: 100%; overflow: hidden; } .panel { position: absolute; top: 0; left: 0; width: 100%; height: 100%; padding-bottom: 30px; opacity: 0; transform: translateY(20px); pointer-events: none; transition: opacity var(--transition-speed), transform var(--transition-speed); overflow-y: auto; } .panel.active { opacity: 1; transform: translateY(0); pointer-events: all; } .panel-title { margin-bottom: 20px; color: var(--primary); font-weight: 600; display: flex; align-items: center; gap: 10px; } .panel-title-icon { color: var(--secondary); } .widgets-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin-bottom: 30px; } .widget { background-color: white; border-radius: 10px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); padding: 20px; transition: transform 0.2s, box-shadow 0.2s; } .widget:hover { transform: translateY(-3px); box-shadow: 0 6px 15px rgba(0, 0, 0, 0.08); } .widget-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; } .widget-title { font-size: 1rem; font-weight: 600; color: var(--dark); } .widget-actions { color: var(--grey); cursor: pointer; transition: color var(--transition-speed); } .widget-actions:hover { color: var(--secondary); } .widget-content { position: relative; } .metric { margin-bottom: 10px; } .metric-value { font-size: 2rem; font-weight: 700; color: var(--primary); margin-bottom: 5px; } .metric-label { font-size: 0.85rem; color: var(--grey); } .metric-trend { display: inline-flex; align-items: center; font-size: 0.85rem; font-weight: 600; margin-left: 10px; } .trend-up { color: var(--success); } .trend-down { color: var(--danger); } .chart-container { height: 150px; margin-top: 10px; position: relative; } .chart-container canvas { max-width: 100%; } .chart-legend { display: flex; gap: 15px; margin-top: 10px; font-size: 0.8rem; } .legend-item { display: flex; align-items: center; gap: 5px; } .legend-color { width: 10px; height: 10px; border-radius: 50%; } .table-widget { background-color: white; border-radius: 10px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); padding: 20px; margin-bottom: 20px; } .data-table { width: 100%; border-collapse: collapse; } .data-table th, .data-table td { padding: 12px 15px; text-align: left; border-bottom: 1px solid #f1f1f1; } .data-table th { font-weight: 600; color: var(--dark); background-color: #f9fafb; } .data-table tr:last-child td { border-bottom: none; } .data-table tbody tr { transition: background-color var(--transition-speed); } .data-table tbody tr:hover { background-color: #f9fafb; } .status-chip { display: inline-block; padding: 3px 8px; border-radius: 12px; font-size: 0.75rem; font-weight: 600; } .status-active { background-color: rgba(39, 174, 96, 0.2); color: var(--success); } .status-inactive { background-color: rgba(231, 76, 60, 0.2); color: var(--danger); } .status-pending { background-color: rgba(243, 156, 18, 0.2); color: var(--warning); } /* Progress Bars */ .progress-bar { height: 6px; background-color: #f1f1f1; border-radius: 3px; overflow: hidden; margin-top: 5px; } .progress-fill { height: 100%; border-radius: 3px; transition: width 1s cubic-bezier(0.25, 1, 0.5, 1); } /* Tooltip */ .tooltip { position: absolute; background-color: var(--dark); color: white; padding: 8px 10px; border-radius: 4px; font-size: 0.8rem; z-index: 100; pointer-events: none; opacity: 0; transition: opacity var(--transition-speed); white-space: nowrap; } .tooltip::after { content: ''; position: absolute; top: 100%; left: 50%; margin-left: -5px; border-width: 5px; border-style: solid; border-color: var(--dark) transparent transparent transparent; } @keyframes pulse { 0% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.1); opacity: 0.7; } 100% { transform: scale(1); opacity: 1; } } .notification-badge { position: absolute; top: -5px; right: -5px; background-color: var(--danger); color: white; border-radius: 50%; width: 18px; height: 18px; font-size: 0.7rem; display: flex; align-items: center; justify-content: center; animation: pulse 2s infinite; } /* Performance Mode Switcher */ .performance-switch { position: absolute; right: 30px; bottom: 30px; display: flex; align-items: center; background-color: white; border-radius: 20px; padding: 8px 15px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); z-index: 5; cursor: pointer; transition: transform var(--transition-speed), box-shadow var(--transition-speed); } .performance-switch:hover { transform: translateY(-3px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15); } .switch-icon { margin-right: 8px; color: var(--tertiary); } .switch-text { font-size: 0.85rem; font-weight: 600; color: var(--primary); } /* Loading States */ .loading-skeleton { background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; animation: loading 1.5s infinite; border-radius: 4px; height: 15px; margin-bottom: 10px; } @keyframes loading { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } /* Notifications */ .toast-notification { position: fixed; right: 20px; bottom: 20px; background-color: white; border-radius: 8px; padding: 15px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); display: flex; align-items: center; transform: translateX(calc(100% + 40px)); transition: transform var(--transition-speed) cubic-bezier(0.25, 1, 0.5, 1); z-index: 100; max-width: 300px; } .toast-notification.show { transform: translateX(0); } .toast-icon { margin-right: 12px; color: var(--tertiary); } .toast-content { flex: 1; } .toast-title { font-weight: 600; margin-bottom: 3px; font-size: 0.9rem; } .toast-message { font-size: 0.8rem; color: var(--grey); } .toast-close { color: var(--grey); cursor: pointer; margin-left: 10px; transition: color var(--transition-speed); } .toast-close:hover { color: var(--dark); } /* Responsive styles */ @media (max-width: 768px) { .widgets-grid { grid-template-columns: 1fr; } .header { flex-direction: column; align-items: flex-start; padding: 15px 20px; } .header-actions { margin-top: 10px; width: 100%; justify-content: space-between; } .search-bar { margin-right: 0; } .search-input { width: 150px; } .search-input:focus { width: 150px; } } @media (max-width: 480px) { .sidebar { width: 50px; } .sidebar:hover { width: 180px; } .sidebar-icon { width: 50px; } .panel-title { font-size: 1.2rem; } .metric-value { font-size: 1.5rem; } } /* Cool Pattern for Background */ .pattern-bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: radial-gradient(rgba(52, 152, 219, 0.05) 2px, transparent 2px); background-size: 20px 20px; pointer-events: none; z-index: -1; } /* Activity Timeline */ .timeline { position: relative; padding-left: 30px; margin-top: 20px; max-height: 280px; overflow-y: auto; } .timeline-line { position: absolute; left: 10px; top: 0; bottom: 0; width: 2px; background-color: #e0e0e0; } .timeline-item { position: relative; margin-bottom: 20px; } .timeline-item:last-child { margin-bottom: 0; } .timeline-dot { position: absolute; left: -30px; top: 0; width: 20px; height: 20px; border-radius: 50%; background-color: white; border: 2px solid var(--secondary); display: flex; align-items: center; justify-content: center; font-size: 0.7rem; } .timeline-content { background-color: #f9fafb; border-radius: 8px; padding: 15px; } .timeline-title { font-weight: 600; margin-bottom: 5px; } .timeline-time { font-size: 0.75rem; color: var(--grey); margin-bottom: 10px; } .timeline-description { font-size: 0.85rem; line-height: 1.5; } /* Usage donut chart */ .donut-container { position: relative; height: 140px; display: flex; align-items: center; justify-content: center; } .donut-chart { width: 100px; height: 100px; border-radius: 50%; background: conic-gradient( var(--tertiary) 0% 70%, #ecf0f1 70% 100% ); margin: 0 auto; position: relative; } .donut-chart::before { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 70px; height: 70px; background-color: white; border-radius: 50%; } .donut-label { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; font-weight: 700; font-size: 1.25rem; color: var(--primary); } .donut-sublabel { font-size: 0.75rem; color: var(--grey); font-weight: normal; } </style> </head> <body> <div class="dashboard"> <div class="sidebar"> <div class="sidebar-header"> <div class="sidebar-icon"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg> </div> <div class="sidebar-logo">Dataflow</div> </div> <ul class="nav-menu"> <li class="nav-item active" data-panel="overview"> <a href="#" class="nav-link active"> <span class="sidebar-icon"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect></svg> </span> <span class="nav-text">Overview</span> </a> </li> <li class="nav-item" data-panel="performance"> <a href="#" class="nav-link"> <span class="sidebar-icon"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg> </span> <span class="nav-text">Performance</span> </a> </li> <li class="nav-item" data-panel="users"> <a href="#" class="nav-link"> <span class="sidebar-icon"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg> </span> <span class="nav-text">Users</span> </a> </li> <li class="nav-item" data-panel="activity"> <a href="#" class="nav-link"> <span class="sidebar-icon"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12"></polyline><path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path></svg> </span> <span class="nav-text">Activity</span> </a> </li> <li class="nav-item" data-panel="settings"> <a href="#" class="nav-link"> <span class="sidebar-icon"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg> </span> <span class="nav-text">Settings</span> </a> </li> </ul> </div> <div class="main-content"> <div class="header"> <h1 class="header-title">Analytics Dashboard</h1> <div class="header-actions"> <div class="search-bar"> <span class="search-icon"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg> </span> <input type="text" class="search-input" placeholder="Search metrics, users..."> </div> <div class="profile"> <div class="profile-avatar">JD</div> <div class="profile-name">Jane Doe</div> </div> </div> </div> <div class="dashboard-content"> <div class="panels-container"> <!-- Overview Panel --> <div class="panel active" id="overview-panel"> <h2 class="panel-title"> <span class="panel-title-icon"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect></svg> </span> Dashboard Overview </h2> <div class="widgets-grid"> <div class="widget"> <div class="widget-header"> <div class="widget-title">Active Users</div> <div class="widget-actions"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg> </div> </div> <div class="widget-content"> <div class="metric"> <div class="metric-value">2,849</div> <div class="metric-label">Current active users <span class="metric-trend trend-up"> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="18 15 12 9 6 15"></polyline></svg> 14.2% </span> </div> </div> <div class="chart-container"> <canvas id="activeUsersChart"></canvas> </div> </div> </div> <div class="widget"> <div class="widget-header"> <div class="widget-title">API Requests</div> <div class="widget-actions"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg> </div> </div> <div class="widget-content"> <div class="metric"> <div class="metric-value">1.2M</div> <div class="metric-label">Requests in the last 24 hours <span class="metric-trend trend-up"> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="18 15 12 9 6 15"></polyline></svg> 8.7% </span> </div> </div> <div class="chart-container"> <canvas id="apiRequestsChart"></canvas> </div> </div> </div> <div class="widget"> <div class="widget-header"> <div class="widget-title">Server Resources</div> <div class="widget-actions"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg> </div> </div> <div class="widget-content"> <div class="metric"> <div class="metric-label">CPU Usage</div> <div class="metric-value" style="font-size: 1.2rem;">34%</div> <div class="progress-bar"> <div class="progress-fill" style="width: 34%; background-color: #3498db;"></div> </div> </div> <div class="metric" style="margin-top: 15px;"> <div class="metric-label">Memory Usage</div> <div class="metric-value" style="font-size: 1.2rem;">68%</div> <div class="progress-bar"> <div class="progress-fill" style="width: 68%; background-color: #9b59b6;"></div> </div> </div> <div class="metric" style="margin-top: 15px;"> <div class="metric-label">Disk I/O</div> <div class="metric-value" style="font-size: 1.2rem;">22%</div> <div class="progress-bar"> <div class="progress-fill" style="width: 22%; background-color: #1abc9c;"></div> </div> </div> </div> </div> <div class="widget"> <div class="widget-header"> <div class="widget-title">Data Processing</div> <div class="widget-actions"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg> </div> </div> <div class="widget-content"> <div class="donut-container"> <div class="donut-chart"></div> <div class="donut-label">72%<br><span class="donut-sublabel">Efficiency</span></div> </div> <div class="chart-legend" style="justify-content: center; margin-top: 20px;"> <div class="legend-item"> <div class="legend-color" style="background-color: var(--tertiary);"></div> <span>Processed</span> </div> <div class="legend-item"> <div class="legend-color" style="background-color: #ec
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>The Daily Pulse</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'); :root { --color-background: #f0f0f0; --color-primary: #0a3d62; --color-secondary: #e74c3c; --color-tertiary: #2ecc71; --color-text: #333; --color-light: #fff; --color-dark: #222; --transition-speed: 0.5s; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Source Sans Pro', sans-serif; color: var(--color-text); background-color: var(--color-background); overflow-x: hidden; width: 100%; height: 100vh; position: relative; } .container { max-width: 700px; height: 700px; margin: 0 auto; position: relative; overflow: hidden; } header { background-color: var(--color-primary); color: var(--color-light); padding: 1rem; position: relative; z-index: 10; display: flex; justify-content: space-between; align-items: center; border-bottom: 3px solid var(--color-secondary); } .logo { font-family: 'Playfair Display', serif; font-weight: 900; font-size: 1.8rem; letter-spacing: -1px; color: var(--color-light); text-decoration: none; position: relative; } .logo::after { content: ''; position: absolute; height: 8px; width: 8px; border-radius: 50%; background-color: var(--color-secondary); bottom: 8px; right: -10px; } nav { display: flex; } nav button { background: none; border: none; color: var(--color-light); font-size: 0.9rem; margin-left: 1rem; cursor: pointer; font-weight: 600; transition: color 0.3s; position: relative; } nav button::after { content: ''; position: absolute; bottom: -5px; left: 0; width: 0; height: 2px; background-color: var(--color-secondary); transition: width 0.3s ease; } nav button:hover::after { width: 100%; } .main-content { height: calc(700px - 130px); overflow: hidden; position: relative; } .articles-container { position: absolute; width: 100%; height: 100%; display: flex; transition: transform var(--transition-speed) cubic-bezier(0.65, 0, 0.35, 1); } .article { flex: 0 0 100%; padding: 1.5rem; position: relative; opacity: 0; transform: translateY(30px); transition: opacity 0.5s, transform 0.5s; height: 100%; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--color-primary) var(--color-background); } .article::-webkit-scrollbar { width: 6px; } .article::-webkit-scrollbar-track { background: var(--color-background); } .article::-webkit-scrollbar-thumb { background-color: var(--color-primary); border-radius: 3px; } .article.active { opacity: 1; transform: translateY(0); } .article-heading { font-family: 'Playfair Display', serif; font-size: 2rem; margin-bottom: 1rem; line-height: 1.2; color: var(--color-primary); font-weight: 700; position: relative; } .article-heading::after { content: ''; display: block; width: 60px; height: 3px; background-color: var(--color-secondary); margin-top: 10px; } .article-meta { display: flex; align-items: center; margin-bottom: 1.5rem; font-size: 0.9rem; color: #666; } .article-category { background-color: var(--color-primary); color: white; padding: 3px 10px; border-radius: 3px; margin-right: 15px; font-weight: 600; font-size: 0.8rem; } .article-date { font-style: italic; } .article-content p { margin-bottom: 1.2rem; line-height: 1.6; } .article-content p::first-letter { font-size: 3.5rem; font-family: 'Playfair Display', serif; font-weight: bold; float: left; line-height: 0.8; margin-right: 8px; margin-top: 4px; color: var(--color-primary); } .article-image { width: 100%; height: 200px; margin: 20px 0; overflow: hidden; position: relative; } .article-image img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; } .article-image:hover img { transform: scale(1.05); } .article-quote { font-family: 'Playfair Display', serif; font-size: 1.4rem; line-height: 1.4; font-style: italic; padding: 1rem 2rem; border-left: 4px solid var(--color-secondary); background-color: rgba(231, 76, 60, 0.05); margin: 2rem 0; } .article-multimedia { position: relative; margin: 1.5rem 0; padding: 1rem; background-color: rgba(10, 61, 98, 0.05); border-radius: 5px; } .multimedia-heading { font-family: 'Playfair Display', serif; font-size: 1.2rem; color: var(--color-primary); margin-bottom: 0.5rem; } .video-placeholder { width: 100%; height: 200px; background-color: var(--color-dark); display: flex; align-items: center; justify-content: center; cursor: pointer; position: relative; overflow: hidden; } .video-placeholder::before { content: ''; position: absolute; width: 0; height: 0; border-top: 25px solid transparent; border-left: 40px solid white; border-bottom: 25px solid transparent; transition: transform 0.3s; } .video-placeholder:hover::before { transform: scale(1.1); } .navigation-controls { display: flex; justify-content: space-between; padding: 1rem; background-color: var(--color-background); position: relative; z-index: 10; } .nav-btn { background-color: var(--color-primary); color: white; border: none; padding: 0.5rem 1rem; cursor: pointer; font-family: 'Source Sans Pro', sans-serif; font-weight: 600; border-radius: 3px; display: flex; align-items: center; transition: background-color 0.3s, transform 0.2s; } .nav-btn:hover { background-color: #0c4d7a; transform: translateY(-2px); } .nav-btn:active { transform: translateY(0); } .nav-btn.prev::before { content: '←'; margin-right: 8px; } .nav-btn.next::after { content: '→'; margin-left: 8px; } .page-indicator { display: flex; align-items: center; } .indicator-dot { width: 8px; height: 8px; background-color: #ccc; border-radius: 50%; margin: 0 5px; transition: background-color 0.3s, transform 0.3s; } .indicator-dot.active { background-color: var(--color-primary); transform: scale(1.5); } .transition-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--color-secondary); transform: translateX(-100%); z-index: 20; pointer-events: none; } @media (max-width: 600px) { .article-heading { font-size: 1.7rem; } .article { padding: 1rem; } .article-quote { font-size: 1.2rem; padding: 1rem; } .nav-btn { padding: 0.4rem 0.8rem; font-size: 0.9rem; } } /* Animated gradient background for special sections */ .trending-now { background: linear-gradient(135deg, rgba(10, 61, 98, 0.1), rgba(231, 76, 60, 0.1)); padding: 1rem; margin: 1.5rem 0; border-radius: 5px; position: relative; overflow: hidden; } .trending-now::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); animation: shine 3s infinite; } @keyframes shine { 0% { left: -100%; } 100% { left: 100%; } } .trending-title { font-family: 'Playfair Display', serif; color: var(--color-primary); font-size: 1.1rem; margin-bottom: 0.5rem; display: flex; align-items: center; } .trending-title::before { content: '⚡'; margin-right: 8px; } .trending-items { display: flex; overflow-x: auto; padding-bottom: 10px; scrollbar-width: thin; scrollbar-color: var(--color-primary) transparent; } .trending-items::-webkit-scrollbar { height: 4px; } .trending-items::-webkit-scrollbar-track { background: transparent; } .trending-items::-webkit-scrollbar-thumb { background-color: var(--color-primary); border-radius: 4px; } .trending-item { flex: 0 0 auto; margin-right: 15px; padding: 8px 12px; background-color: white; border-radius: 4px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); font-weight: 600; cursor: pointer; transition: transform 0.3s, box-shadow 0.3s; white-space: nowrap; } .trending-item:hover { transform: translateY(-3px); box-shadow: 0 4px 8px rgba(0,0,0,0.15); } /* Animations */ @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes wipeInRight { from { transform: translateX(-100%); } to { transform: translateX(0); } } @keyframes wipeInLeft { from { transform: translateX(100%); } to { transform: translateX(0); } } @keyframes wipeOutRight { from { transform: translateX(0); } to { transform: translateX(100%); } } @keyframes wipeOutLeft { from { transform: translateX(0); } to { transform: translateX(-100%); } } </style> </head> <body> <div class="container"> <header> <a href="#" class="logo">The Daily Pulse</a> <nav> <button data-category="politics">Politics</button> <button data-category="tech">Tech</button> <button data-category="culture">Culture</button> </nav> </header> <div class="main-content"> <div class="articles-container"> <article class="article active" data-index="0" data-category="politics"> <h2 class="article-heading">Supreme Court Ruling Sets Precedent on Digital Privacy Rights</h2> <div class="article-meta"> <span class="article-category">Politics</span> <span class="article-date">June 14, 2023</span> </div> <div class="article-content"> <p>Yesterday's landmark Supreme Court ruling has fundamentally altered how law enforcement can access digital communications, requiring specific warrants for each device rather than blanket surveillance permissions. The 6-3 decision establishes a new framework that legal experts suggest will reshape privacy law for decades to come.</p> <div class="article-image"> <img src="https://images.unsplash.com/photo-1575505586569-646b2ca898fc?ixlib=rb-1.2.1&auto=format&fit=crop&w=1050&q=80" alt="Supreme Court building"> </div> <p>Justice Elena Kagan, writing for the majority, emphasized that "the Fourth Amendment's protections must evolve alongside technology." The ruling explicitly rejects the previous "third-party doctrine" that allowed agencies to collect data held by service providers without constitutional scrutiny.</p> <div class="article-quote"> "We can no longer pretend that digital communications deserve less protection simply because they exist on servers rather than in filing cabinets." </div> <p>Privacy advocates celebrate the decision as a crucial victory, while law enforcement agencies express concern about investigative limitations. The Department of Justice has already announced plans to revise its digital evidence collection protocols to comply with the new requirements.</p> <div class="article-multimedia"> <h3 class="multimedia-heading">Analysis: Privacy in the Digital Age</h3> <div class="video-placeholder" data-video-id="privacy-analysis"></div> </div> <div class="trending-now"> <h4 class="trending-title">Trending Now</h4> <div class="trending-items"> <div class="trending-item">#DigitalRights</div> <div class="trending-item">#SupremeCourt</div> <div class="trending-item">#PrivacyLaw</div> <div class="trending-item">#FourthAmendment</div> <div class="trending-item">#DataProtection</div> </div> </div> <p>The ruling sets a 60-day implementation period, after which all digital surveillance must follow the new guidelines. Tech companies are reportedly already updating their law enforcement cooperation policies, with Google and Microsoft issuing statements welcoming the enhanced privacy protections.</p> </div> </article> <article class="article" data-index="1" data-category="tech"> <h2 class="article-heading">Quantum Computing Breakthrough Solves Previously Impossible Problem</h2> <div class="article-meta"> <span class="article-category">Technology</span> <span class="article-date">June 13, 2023</span> </div> <div class="article-content"> <p>Scientists at MIT's Quantum Computing Lab have demonstrated the first practical application of quantum supremacy, solving a complex protein-folding problem that would have taken traditional supercomputers centuries to calculate. The 512-qubit processor completed the calculation in just 17 minutes, potentially revolutionizing drug discovery and material science.</p> <div class="article-image"> <img src="https://images.unsplash.com/photo-1635070041078-e363dbe005cb?ixlib=rb-1.2.1&auto=format&fit=crop&w=1050&q=80" alt="Quantum computer"> </div> <p>Dr. Katherine Chen, lead researcher on the project, explained that this achievement marks a turning point. "We've moved beyond theoretical quantum advantages to solving real-world problems that have immediate applications in pharmaceutical research." The team used a novel error-correction algorithm that allows quantum systems to maintain coherence long enough to complete complex calculations.</p> <div class="article-quote"> "This isn't just an incremental improvement - it's a computational paradigm shift that will accelerate discovery in multiple scientific fields." </div> <p>Pharmaceutical companies are already partnering with the MIT team to apply the technology to drug development, potentially reducing the time from discovery to clinical trials by years. The quantum system excels particularly at modeling molecular interactions, which traditional computational methods struggle to simulate accurately.</p> <div class="article-multimedia"> <h3 class="multimedia-heading">Explained: How Quantum Computing Works</h3> <div class="video-placeholder" data-video-id="quantum-explained"></div> </div> <div class="trending-now"> <h4 class="trending-title">Trending Now</h4> <div class="trending-items"> <div class="trending-item">#QuantumSupremacy</div> <div class="trending-item">#MIT</div> <div class="trending-item">#FutureTech</div> <div class="trending-item">#DrugDiscovery</div> <div class="trending-item">#QuantumComputing</div> </div> </div> <p>Experts predict that this breakthrough could trigger a new wave of quantum computing investments. Google and IBM have already announced increased funding for their quantum research divisions, while venture capital firms report unprecedented interest in quantum computing startups. The race for quantum advantage in commercially valuable applications has definitively begun.</p> </div> </article> <article class="article" data-index="2" data-category="culture"> <h2 class="article-heading">Museums Embrace AR Technology to Revitalize Ancient Artifacts</h2> <div class="article-meta"> <span class="article-category">Culture</span> <span class="article-date">June 12, 2023</span> </div> <div class="article-content"> <p>The Metropolitan Museum of Art unveiled its revolutionary "TimePortal" exhibition yesterday, using advanced augmented reality to bring ancient artifacts to life. Visitors can now watch Greek statues move, see Egyptian hieroglyphics animate their stories, and witness Roman mosaics reconstruct themselves through specially designed AR headsets.</p> <div class="article-image"> <img src="https://images.unsplash.com/photo-1565060169194-19fabf63012c?ixlib=rb-1.2.1&auto=format&fit=crop&w=1050&q=80" alt="Museum exhibit with AR technology"> </div> <p>The $12 million project represents the largest investment in digital exhibition technology by any cultural institution globally. Curators worked with historians, anthropologists, and 3D animation experts to ensure historical accuracy while creating engaging interactive experiences that appeal to visitors of all ages.</p> <div class="article-quote"> "We're not just preserving history anymore - we're bringing it to life in ways previous generations could only imagine." </div> <p>Museum attendance has surged 247% since the exhibition opened, with particularly strong growth among younger demographics traditionally underrepresented in museum visitor statistics. The technology allows visitors to interact with historical narratives rather than merely observing artifacts, creating deeper engagement with cultural heritage.</p> <div class="article-multimedia"> <h3 class="multimedia-heading">Inside Look: The TimePortal Experience</h3> <div class="video-placeholder" data-video-id="timeportal-tour"></div> </div> <div class="trending-now"> <h4 class="trending-title">Trending Now</h4> <div class="trending-items"> <div class="trending-item">#TimePortal</div> <div class="trending-item">#AugmentedReality</div> <div class="trending-item">#MuseumInnovation</div> <div class="trending-item">#CulturalHeritage</div> <div class="trending-item">#MetMuseum</div> </div> </div> <p>The success has prompted seventeen other major museums worldwide to announce similar initiatives. Industry observers note that this technology may fundamentally transform how we experience cultural institutions, balancing educational content with immersive entertainment value. Critics warn about potential historical inaccuracies, but visitor surveys show significantly improved retention of historical information compared to traditional exhibits.</p> </div> </article> <article class="article" data-index="3" data-category="politics"> <h2 class="article-heading">Global Climate Agreement Introduces Carbon Border Taxes</h2> <div class="article-meta"> <span class="article-category">Politics</span> <span class="article-date">June 11, 2023</span> </div> <div class="article-content"> <p>After marathon negotiations, 143 nations have signed the Geneva Climate Accord that establishes the first global carbon pricing mechanism and introduces cross-border carbon taxes on imports from non-participating countries. The unprecedented agreement creates strong economic incentives for industrial decarbonization while addressing concerns about competitive disadvantages for early adopters.</p> <div class="article-image"> <img src="https://images.unsplash.com/photo-1532408840957-031d8034aeef?ixlib=rb-1.2.1&auto=format&fit=crop&w=1050&q=80" alt="Climate conference"> </div> <p>The core mechanism establishes a minimum carbon price of €45 per ton, scheduled to increase by €5 annually until 2035. Countries can implement this through direct taxation or cap-and-trade systems, with border adjustment taxes applied to imports from non-compliant nations to prevent "carbon leakage" - the relocation of carbon-intensive industries to regions with weaker regulations.</p> <div class="article-quote"> "This agreement fundamentally changes the economic calculus of the climate transition by ensuring that environmental responsibility becomes a competitive advantage rather than a burden." </div> <p>Industries most immediately affected include steel, cement, aluminum, and chemicals. Major exporters like China and India, which did not sign the accord, face potential trade barriers unless they implement comparable domestic carbon pricing. The EU estimates that carbon border taxes will generate €38 billion annually by 2025, which will fund clean energy transitions in developing economies.</p> <div class="article-multimedia"> <h3 class="multimedia-heading">Explained: How Carbon Border Taxes Work</h3> <div class="video-placeholder" data-video-id="carbon-tax-explained"></div> </div> <div class="trending-now"> <h4 class="trending-title">Trending Now</h4> <div class="trending-items"> <div class="trending-item">#GenevaAccord</div> <div class="trending-item">#CarbonPricing</div> <div class="trending-item">#ClimateAction</div> <div class="trending-item">#BorderTaxes</div> <div class="trending-item">#GreenTransition</div> </div> </div> <p>Business reactions have been mixed, with renewable energy companies and climate-tech startups celebrating while traditional heavy industries express concerns about implementation timelines. Stock markets showed significant volatility following the announcement, with clean energy indices surging 14% while coal and petroleum indices declined sharply.</p> </div> </article> </div> <div class="transition-overlay"></div> </div> <div class="navigation-controls"> <button class="nav-btn prev">Previous</button> <div class="page-indicator"> <span class="indicator-dot active" data-index="0"></span> <span class="indicator-dot" data-index="1"></span> <span class="indicator-dot" data-index="2"></span> <span class="indicator-dot" data-index="3"></span> </div> <button class="nav-btn next">Next</button> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const articlesContainer = document.querySelector('.articles-container'); const articles = document.querySelectorAll('.article'); const prevBtn = document.querySelector('.nav-btn.prev'); const nextBtn = document.querySelector('.nav-btn.next'); const indicators = document.querySelectorAll('.indicator-dot'); const categoryBtns = document.querySelectorAll('nav button'); const overlay = document.querySelector('.transition-overlay'); let currentIndex = 0; const totalArticles = articles.length; // Initialize updateArticleState(); // Event listeners prevBtn.addEventListener('click', () => navigateArticles('prev')); nextBtn.addEventListener('click', () => navigateArticles('next')); indicators.forEach(dot => { dot.addEventListener('click', function() { const targetIndex = parseInt(this.dataset.index); if (targetIndex !== currentIndex) { const direction = targetIndex > currentIndex ? 'next' : 'prev'; navigateArticles(direction, targetIndex); } }); }); categoryBtns.forEach(btn => { btn.addEventListener('click', function() { const category = this.dataset.category; // Find the first article with matching category let targetIndex = -1; articles.forEach((article, index) => { if (article.dataset.category === category && targetIndex === -1) { targetIndex = index; } }); if (targetIndex !== -1 && targetIndex !== currentIndex) { const direction = targetIndex > currentIndex ? 'next' : 'prev'; navigateArticles(direction, targetIndex); } }); }); // Video placeholders interaction const videoPlaceholders = document.querySelectorAll('.video-placeholder'); videoPlaceholders.forEach(placeholder => { placeholder.addEventListener('click', function() { const videoId = this.dataset.videoId; this.innerHTML = `<div style="background:#222;color:#fff;height:100%;display:flex;align-items:center;justify-content:center;font-weight:bold;">Video: ${videoId} would play here</div>`; }); }); function navigateArticles(direction, targetIndex = null) { // Disable buttons during transition prevBtn.disabled = true; nextBtn.disabled = true; // Determine target index if not explicitly provided if (targetIndex === null) { if (direction === 'next') { targetIndex = (currentIndex + 1) % totalArticles; } else { targetIndex = (currentIndex - 1 + totalArticles) % totalArticles; } } // Apply transition overlay effect const wipeAnimation = direction === 'next' ? { in: 'wipeInRight', out: 'wipeOutLeft' } : { in: 'wipeInLeft', out: 'wipeOutRight' }; // First animate the overlay to cover the content overlay.style.animation = `${wipeAnimation.in} 0.5s forwards`; setTimeout(() => { // Update current index currentIndex = targetIndex; updateArticleState(); // Then animate the overlay to reveal the new content overlay.style.animation = `${wipeAnimation.out} 0.5s forwards`; // Re-enable buttons after transition completes setTimeout(() => { prevBtn.disabled = false; nextBtn.disabled = false; }, 500); }, 500); } function updateArticleState() { // Update active article articles.forEach((article, index) => { if (index === currentIndex) { article.classList.add('active'); } else { article.classList.remove('active'); } }); // Update indicators indicators.forEach((dot, index) => { if (index === currentIndex) { dot.classList.add('active'); } else { dot.classList.remove('active'); } }); // Update nav button states prevBtn.disabled = false; nextBtn.disabled = false; } }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Serenity - Health & Wellness</title> <style> @import url('https://fonts.googleapis.com/css2?family=Raleway:wght@300;400;500;600&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Raleway', sans-serif; } :root { --primary-color: #a3d9d0; --secondary-color: #f8c7c7; --tertiary-color: #f8e8c7; --text-color: #566573; --bg-color: #f9f9f9; --card-bg: #ffffff; --shadow-color: rgba(163, 217, 208, 0.2); --transition-time: 1.2s; } body { background: var(--bg-color); color: var(--text-color); overflow-x: hidden; height: 100vh; width: 100%; } .container { max-width: 700px; margin: 0 auto; height: 700px; padding: 20px; display: flex; flex-direction: column; position: relative; overflow: hidden; } header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .logo { font-size: 1.8rem; font-weight: 500; letter-spacing: 1px; background: linear-gradient(135deg, var(--primary-color) 0%, var(--secondary-color) 100%); -webkit-background-clip: text; background-clip: text; color: transparent; transition: all var(--transition-time) ease; } nav ul { display: flex; list-style: none; } nav ul li { margin-left: 20px; cursor: pointer; position: relative; padding: 5px 0; transition: color 0.5s ease; } nav ul li::after { content: ''; position: absolute; width: 0; height: 2px; bottom: 0; left: 0; background: linear-gradient(to right, var(--primary-color), var(--secondary-color)); transition: width 0.5s ease; } nav ul li:hover::after, nav ul li.active::after { width: 100%; } nav ul li.active { font-weight: 500; } .content-wrapper { flex: 1; position: relative; overflow: hidden; } .page { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transform: translateY(20px); transition: opacity var(--transition-time) ease, transform var(--transition-time) ease; pointer-events: none; padding: 10px; display: flex; flex-direction: column; } .page.active { opacity: 1; transform: translateY(0); pointer-events: all; } .card { background: var(--card-bg); border-radius: 15px; box-shadow: 0 8px 16px var(--shadow-color); padding: 20px; margin-bottom: 20px; transition: transform 0.8s ease, box-shadow 0.8s ease; } .card:hover { transform: translateY(-5px); box-shadow: 0 12px 24px var(--shadow-color); } .card h3 { color: var(--primary-color); margin-bottom: 15px; font-weight: 500; } .card p { line-height: 1.6; margin-bottom: 15px; } .tips-wrapper { overflow: hidden; border-radius: 15px; height: 200px; position: relative; } .tips-slider { display: flex; transition: transform 1.5s cubic-bezier(0.37, 0, 0.63, 1); } .tip { min-width: 100%; padding: 20px; background: linear-gradient(135deg, rgba(163, 217, 208, 0.2) 0%, rgba(248, 199, 199, 0.2) 100%); border-radius: 15px; } .dashboard { flex: 1; display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; } .stat-card { background: var(--card-bg); border-radius: 15px; box-shadow: 0 8px 16px var(--shadow-color); padding: 20px; display: flex; flex-direction: column; align-items: center; justify-content: center; transition: transform 0.8s ease, box-shadow 0.8s ease; } .stat-card:hover { transform: translateY(-5px); box-shadow: 0 12px 24px var(--shadow-color); } .stat-card .value { font-size: 2rem; font-weight: 500; margin-bottom: 5px; color: var(--primary-color); } .stat-card .label { font-size: 0.9rem; color: var(--text-color); text-align: center; } .progress-container { width: 100%; height: 10px; background-color: rgba(163, 217, 208, 0.2); border-radius: 5px; overflow: hidden; margin-top: 10px; } .progress-bar { height: 100%; background: linear-gradient(to right, var(--primary-color), var(--secondary-color)); border-radius: 5px; width: 0; transition: width 1.5s cubic-bezier(0.37, 0, 0.63, 1); } .journal-entry { background: var(--card-bg); border-radius: 15px; padding: 20px; margin-bottom: 20px; box-shadow: 0 8px 16px var(--shadow-color); } .journal-entry h3 { color: var(--primary-color); margin-bottom: 10px; } textarea { width: 100%; min-height: 120px; border: 1px solid rgba(163, 217, 208, 0.3); border-radius: 8px; padding: 10px; resize: none; font-family: 'Raleway', sans-serif; color: var(--text-color); background-color: rgba(249, 249, 249, 0.8); transition: border 0.5s ease; } textarea:focus { outline: none; border: 1px solid var(--primary-color); } button { background: linear-gradient(135deg, var(--primary-color) 0%, var(--secondary-color) 100%); border: none; color: white; padding: 10px 20px; border-radius: 25px; cursor: pointer; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); transition: transform 0.3s ease, box-shadow 0.3s ease; } button:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15); } .mood-tracker { display: flex; justify-content: space-between; margin: 20px 0; } .mood { width: 50px; height: 50px; display: flex; justify-content: center; align-items: center; border-radius: 50%; background-color: rgba(163, 217, 208, 0.2); cursor: pointer; transition: transform 0.5s ease, background-color 0.5s ease; } .mood:hover, .mood.selected { transform: scale(1.1); background-color: var(--primary-color); color: white; } .breathing-circle { width: 150px; height: 150px; border-radius: 50%; background: linear-gradient(135deg, var(--primary-color) 0%, var(--secondary-color) 100%); margin: 20px auto; display: flex; justify-content: center; align-items: center; color: white; font-size: 0.9rem; box-shadow: 0 0 30px rgba(163, 217, 208, 0.5); animation: breathe 8s infinite ease-in-out; cursor: pointer; } @keyframes breathe { 0%, 100% { transform: scale(0.8); box-shadow: 0 0 30px rgba(163, 217, 208, 0.5); } 50% { transform: scale(1.1); box-shadow: 0 0 50px rgba(163, 217, 208, 0.8); } } .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; opacity: 0; pointer-events: none; transition: opacity var(--transition-time) ease; z-index: 1000; } .modal.active { opacity: 1; pointer-events: all; } .modal-content { background-color: var(--card-bg); padding: 30px; border-radius: 15px; width: 90%; max-width: 500px; transform: translateY(50px); transition: transform var(--transition-time) ease; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); } .modal.active .modal-content { transform: translateY(0); } .close-modal { position: absolute; top: 15px; right: 15px; font-size: 1.5rem; cursor: pointer; color: var(--text-color); transition: color 0.3s ease; } .close-modal:hover { color: var(--primary-color); } .date-streak { display: flex; justify-content: space-between; margin-top: 15px; margin-bottom: 15px; } .day { width: 30px; height: 30px; border-radius: 50%; display: flex; justify-content: center; align-items: center; font-size: 0.8rem; background-color: rgba(163, 217, 208, 0.2); transition: background 0.5s ease, transform 0.5s ease; } .day.active { background: linear-gradient(135deg, var(--primary-color) 0%, var(--secondary-color) 100%); color: white; transform: scale(1.1); } @media (max-width: 600px) { .dashboard { grid-template-columns: 1fr; } .logo { font-size: 1.5rem; } nav ul li { margin-left: 15px; font-size: 0.9rem; } } /* Water ripple effect */ .ripple { position: absolute; border-radius: 50%; background-color: rgba(248, 199, 199, 0.4); transform: scale(0); animation: ripple 1.5s linear; pointer-events: none; } @keyframes ripple { to { transform: scale(2); opacity: 0; } } /* Floating circles for ambience */ .ambient-circle { position: absolute; border-radius: 50%; pointer-events: none; z-index: -1; opacity: 0.5; animation: float 15s infinite ease-in-out; } @keyframes float { 0%, 100% { transform: translate(0, 0); } 25% { transform: translate(10px, 10px); } 50% { transform: translate(20px, 5px); } 75% { transform: translate(5px, 15px); } } </style> </head> <body> <div class="container"> <header> <div class="logo">Serenity</div> <nav> <ul> <li class="nav-link active" data-page="dashboard">Dashboard</li> <li class="nav-link" data-page="tips">Wellness Tips</li> <li class="nav-link" data-page="journal">Mindfulness</li> </ul> </nav> </header> <div class="content-wrapper"> <!-- Dashboard Page --> <div class="page active" id="dashboard"> <div class="card"> <h3>Welcome back, Sarah</h3> <p>Your wellness journey continues. Today is a perfect day to prioritize your wellbeing.</p> <div class="date-streak"> <div class="day active">M</div> <div class="day active">T</div> <div class="day active">W</div> <div class="day">T</div> <div class="day">F</div> <div class="day">S</div> <div class="day">S</div> </div> </div> <div class="dashboard"> <div class="stat-card"> <div class="value">7.2</div> <div class="label">Hours of sleep last night</div> <div class="progress-container"> <div class="progress-bar sleep-progress"></div> </div> </div> <div class="stat-card"> <div class="value">8</div> <div class="label">Glasses of water today</div> <div class="progress-container"> <div class="progress-bar water-progress"></div> </div> </div> <div class="stat-card"> <div class="value">5,234</div> <div class="label">Steps today</div> <div class="progress-container"> <div class="progress-bar steps-progress"></div> </div> </div> <div class="stat-card"> <div class="value">15</div> <div class="label">Minutes meditated</div> <div class="progress-container"> <div class="progress-bar meditation-progress"></div> </div> </div> </div> </div> <!-- Tips Page --> <div class="page" id="tips"> <div class="card"> <h3>Daily Wellness Tips</h3> <p>Swipe through these mindful practices to enhance your daily wellbeing.</p> </div> <div class="tips-wrapper"> <div class="tips-slider"> <div class="tip"> <h3>Morning Gratitude Practice</h3> <p>Before reaching for your phone, take 3 minutes to note three things you're grateful for. This simple practice activates your parasympathetic nervous system, reducing stress hormones by up to 23%.</p> </div> <div class="tip"> <h3>Mindful Hydration</h3> <p>For each glass of water, take three deep breaths before drinking. Studies show this paired practice improves oxygen flow by 10% and enhances absorption of H₂O molecules into cells.</p> </div> <div class="tip"> <h3>Digital Sunset Protocol</h3> <p>Set devices to night mode 2 hours before bed. This reduces blue light exposure by 80%, allowing your pineal gland to release melatonin naturally and improve sleep quality by 27%.</p> </div> </div> </div> <div class="card"> <h3>Breathing Exercise</h3> <p>Click the circle below and follow its rhythm - expand as it grows, exhale as it shrinks.</p> <div class="breathing-circle" id="breathingCircle"> <span>Tap to focus</span> </div> </div> </div> <!-- Journal Page --> <div class="page" id="journal"> <div class="card"> <h3>Mindfulness Journal</h3> <p>Record your thoughts and feelings to cultivate present-moment awareness.</p> </div> <div class="journal-entry"> <h3>How are you feeling today?</h3> <div class="mood-tracker"> <div class="mood" data-mood="1">😔</div> <div class="mood" data-mood="2">😐</div> <div class="mood" data-mood="3">🙂</div> <div class="mood" data-mood="4">😊</div> <div class="mood" data-mood="5">😄</div> </div> <textarea placeholder="What's on your mind today? Consider: What brought you joy? What challenged you? What are you grateful for?"></textarea> <div style="text-align: right; margin-top: 15px;"> <button id="saveJournal">Save Reflection</button> </div> </div> </div> </div> </div> <!-- Modal --> <div class="modal" id="breathingModal"> <div class="modal-content"> <span class="close-modal">×</span> <h3>Guided Breathing</h3> <p>Follow the circle's rhythm for a 1-minute mindful breathing session.</p> <div class="breathing-circle" style="margin: 30px auto;"> <span id="breathingText">Breathe in...</span> </div> <p id="breathingTimer">60 seconds remaining</p> </div> </div> <!-- Ambient floating circles --> <div class="ambient-circle" style="width: 100px; height: 100px; top: 10%; right: 5%; background-color: rgba(163, 217, 208, 0.1);"></div> <div class="ambient-circle" style="width: 150px; height: 150px; bottom: 5%; left: 10%; background-color: rgba(248, 199, 199, 0.1);"></div> <div class="ambient-circle" style="width: 80px; height: 80px; top: 40%; left: 20%; background-color: rgba(248, 232, 199, 0.1);"></div> <script> document.addEventListener('DOMContentLoaded', function() { // Navigation const navLinks = document.querySelectorAll('.nav-link'); const pages = document.querySelectorAll('.page'); navLinks.forEach(link => { link.addEventListener('click', function() { const pageId = this.getAttribute('data-page'); // Update active nav link navLinks.forEach(l => l.classList.remove('active')); this.classList.add('active'); // Show selected page with fade transition pages.forEach(page => { if (page.id === pageId) { setTimeout(() => { page.classList.add('active'); }, 300); } else { page.classList.remove('active'); } }); }); }); // Ripple effect on clicks document.addEventListener('click', function(e) { const ripple = document.createElement('div'); ripple.className = 'ripple'; ripple.style.left = e.clientX + 'px'; ripple.style.top = e.clientY + 'px'; document.body.appendChild(ripple); setTimeout(() => { ripple.remove(); }, 1500); }); // Progress bars animation setTimeout(() => { document.querySelector('.sleep-progress').style.width = '80%'; document.querySelector('.water-progress').style.width = '66%'; document.querySelector('.steps-progress').style.width = '45%'; document.querySelector('.meditation-progress').style.width = '30%'; }, 500); // Tips slider let currentTip = 0; const tipSlider = document.querySelector('.tips-slider'); const tips = document.querySelectorAll('.tip'); function nextTip() { currentTip = (currentTip + 1) % tips.length; tipSlider.style.transform = `translateX(-${currentTip * 100}%)`; } // Auto advance tips every 8 seconds setInterval(nextTip, 8000); // Make tips clickable to advance tipSlider.addEventListener('click', nextTip); // Mood selector const moods = document.querySelectorAll('.mood'); moods.forEach(mood => { mood.addEventListener('click', function() { moods.forEach(m => m.classList.remove('selected')); this.classList.add('selected'); }); }); // Save journal button effect const saveButton = document.getElementById('saveJournal'); saveButton.addEventListener('click', function() { this.innerText = 'Saved ✓'; setTimeout(() => { this.innerText = 'Save Reflection'; }, 2000); }); // Breathing exercise modal const breathingCircle = document.getElementById('breathingCircle'); const breathingModal = document.getElementById('breathingModal'); const closeModal = document.querySelector('.close-modal'); const breathingText = document.getElementById('breathingText'); const breathingTimer = document.getElementById('breathingTimer'); breathingCircle.addEventListener('click', function() { breathingModal.classList.add('active'); startBreathingExercise(); }); closeModal.addEventListener('click', function() { breathingModal.classList.remove('active'); clearInterval(breathingInterval); }); let breathingInterval; let secondsLeft = 60; function startBreathingExercise() { let breathingState = 'inhale'; // inhale, hold, exhale let breathingCount = 0; secondsLeft = 60; breathingInterval = setInterval(() => { breathingCount++; if (breathingCount <= 4) { breathingState = 'inhale'; breathingText.innerText = 'Breathe in...'; } else if (breathingCount <= 7) { breathingState = 'hold'; breathingText.innerText = 'Hold...'; } else if (breathingCount <= 12) { breathingState = 'exhale'; breathingText.innerText = 'Breathe out...'; } else { breathingCount = 0; } secondsLeft--; breathingTimer.innerText = `${secondsLeft} seconds remaining`; if (secondsLeft <= 0) { clearInterval(breathingInterval); breathingText.innerText = 'Complete'; breathingTimer.innerText = 'Well done!'; setTimeout(() => { breathingModal.classList.remove('active'); }, 3000); } }, 1000); } }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Nexus - Corporate Intranet Portal</title> <style> :root { --primary: #2A4B8D; --secondary: #3A6BC5; --accent: #18CDCA; --light: #F5F7FA; --dark: #212B36; --success: #28a745; --warning: #ffc107; --danger: #dc3545; --gray-100: #f8f9fa; --gray-200: #e9ecef; --gray-300: #dee2e6; --gray-400: #ced4da; --gray-500: #adb5bd; --gray-600: #6c757d; --gray-700: #495057; --gray-800: #343a40; --transition-fast: 0.2s; --transition-medium: 0.3s; --transition-slow: 0.5s; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background-color: var(--light); color: var(--dark); height: 700px; width: 100%; max-width: 700px; margin: 0 auto; overflow-x: hidden; } .container { display: grid; grid-template-columns: 200px 1fr; grid-template-rows: 60px 1fr; grid-template-areas: "header header" "sidebar main"; height: 100%; box-shadow: 0 5px 25px rgba(0, 0, 0, 0.1); } header { grid-area: header; background-color: var(--primary); color: white; display: flex; justify-content: space-between; align-items: center; padding: 0 20px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); z-index: 10; } .logo { display: flex; align-items: center; gap: 10px; } .logo-icon { width: 28px; height: 28px; background-color: var(--accent); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; color: var(--primary); } .logo-text { font-weight: 600; letter-spacing: 0.5px; } .user-menu { display: flex; align-items: center; gap: 15px; } .notifications { position: relative; cursor: pointer; } .notifications-badge { position: absolute; top: -5px; right: -5px; background-color: var(--danger); color: white; border-radius: 50%; width: 16px; height: 16px; font-size: 10px; display: flex; align-items: center; justify-content: center; font-weight: bold; } .user-avatar { width: 32px; height: 32px; border-radius: 50%; background-color: var(--accent); display: flex; align-items: center; justify-content: center; color: var(--primary); font-weight: bold; cursor: pointer; transition: transform var(--transition-fast); } .user-avatar:hover { transform: scale(1.1); } .sidebar { grid-area: sidebar; background-color: white; border-right: 1px solid var(--gray-300); padding: 20px 0; transition: transform var(--transition-medium); z-index: 5; } .nav-menu { list-style: none; } .nav-item { margin-bottom: 5px; } .nav-link { display: flex; align-items: center; padding: 10px 20px; color: var(--gray-700); text-decoration: none; border-left: 3px solid transparent; transition: all var(--transition-fast); font-weight: 500; } .nav-link.active { color: var(--primary); border-left-color: var(--primary); background-color: rgba(42, 75, 141, 0.05); } .nav-link:hover:not(.active) { background-color: var(--gray-100); color: var(--gray-800); } .nav-link i { margin-right: 10px; font-size: 18px; width: 20px; text-align: center; } main { grid-area: main; background-color: var(--gray-100); padding: 20px; overflow-y: auto; } .section { opacity: 0; transform: translateY(20px); transition: opacity var(--transition-medium), transform var(--transition-medium); } .section.active { opacity: 1; transform: translateY(0); } .section-header { margin-bottom: 20px; display: flex; align-items: center; justify-content: space-between; } .section-title { font-size: 24px; font-weight: 600; color: var(--dark); } .section-subtitle { color: var(--gray-600); margin-bottom: 20px; } .quick-access { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); grid-gap: 15px; margin-bottom: 30px; } .quick-access-item { background-color: white; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); padding: 15px; text-align: center; cursor: pointer; transition: all var(--transition-fast); border: 1px solid transparent; } .quick-access-item:hover { transform: translateY(-5px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); border-color: var(--accent); } .quick-access-icon { background-color: rgba(42, 75, 141, 0.1); width: 40px; height: 40px; border-radius: 8px; display: flex; align-items: center; justify-content: center; margin: 0 auto 10px; color: var(--primary); transition: all var(--transition-fast); } .quick-access-item:hover .quick-access-icon { background-color: var(--primary); color: white; } .quick-access-label { font-size: 14px; font-weight: 500; } .card { background-color: white; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); padding: 20px; margin-bottom: 20px; border-top: 3px solid var(--primary); transform: translateX(-10px); opacity: 0; transition: all var(--transition-medium); } .card.fade-in { opacity: 1; transform: translateX(0); } .card-title { font-size: 18px; font-weight: 600; margin-bottom: 15px; display: flex; align-items: center; } .card-title i { margin-right: 10px; color: var(--primary); } .announcements-list { list-style: none; } .announcement-item { padding: 10px 0; border-bottom: 1px solid var(--gray-200); } .announcement-item:last-child { border-bottom: none; } .announcement-title { font-weight: 500; margin-bottom: 5px; display: flex; align-items: center; gap: 8px; } .tag { font-size: 10px; padding: 2px 6px; border-radius: 4px; font-weight: bold; text-transform: uppercase; } .tag-urgent { background-color: var(--danger); color: white; } .tag-new { background-color: var(--accent); color: var(--dark); } .announcement-meta { font-size: 12px; color: var(--gray-600); margin-bottom: 5px; } .announcement-content { font-size: 14px; color: var(--gray-700); } .upcoming-events { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); grid-gap: 15px; } .event-card { background-color: white; border-radius: 8px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); overflow: hidden; transition: all var(--transition-fast); } .event-card:hover { transform: translateY(-5px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); } .event-date { background-color: var(--primary); color: white; padding: 8px 12px; text-align: center; font-weight: 600; } .event-details { padding: 12px; } .event-title { font-weight: 600; margin-bottom: 5px; font-size: 14px; } .event-info { font-size: 12px; color: var(--gray-600); display: flex; align-items: center; margin-bottom: 2px; } .event-info i { width: 14px; margin-right: 5px; } .search-bar { position: relative; margin-bottom: 20px; } .search-input { width: 100%; padding: 10px 15px 10px 40px; border: none; border-radius: 20px; background-color: white; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); font-size: 14px; transition: all var(--transition-fast); } .search-input:focus { outline: none; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } .search-icon { position: absolute; left: 15px; top: 50%; transform: translateY(-50%); color: var(--gray-500); } .task-card { display: flex; align-items: center; padding: 12px 15px; background-color: white; border-radius: 6px; margin-bottom: 10px; border-left: 3px solid var(--gray-400); transition: all var(--transition-fast); } .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-card:hover { transform: translateX(5px); box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } .task-checkbox { margin-right: 15px; } .task-checkbox input { display: none; } .task-checkbox label { display: inline-block; width: 18px; height: 18px; border: 2px solid var(--gray-400); border-radius: 50%; position: relative; cursor: pointer; transition: all var(--transition-fast); } .task-checkbox input:checked + label { background-color: var(--success); border-color: var(--success); } .task-checkbox input:checked + label:after { content: ''; position: absolute; top: 3px; left: 6px; width: 4px; height: 8px; border: solid white; border-width: 0 2px 2px 0; transform: rotate(45deg); } .task-content { flex: 1; } .task-title { font-weight: 500; margin-bottom: 2px; transition: all var(--transition-fast); } .task-checkbox input:checked ~ .task-content .task-title { text-decoration: line-through; color: var(--gray-500); } .task-meta { font-size: 12px; color: var(--gray-600); } .loading-indicator { position: fixed; top: 0; left: 0; width: 100%; height: 3px; background-color: var(--gray-200); z-index: 9999; } .loading-bar { height: 100%; width: 0; background-color: var(--accent); transition: width var(--transition-medium) ease-in-out; } .progress-indicator { display: flex; align-items: center; margin-top: 15px; } .progress-bar { flex: 1; height: 6px; background-color: var(--gray-200); border-radius: 3px; overflow: hidden; margin-right: 10px; } .progress-value { height: 100%; background: linear-gradient(90deg, var(--primary), var(--accent)); width: 0; transition: width var(--transition-medium) ease-in-out; } .progress-text { font-size: 12px; font-weight: 600; color: var(--gray-700); } .tooltip { position: absolute; background-color: var(--dark); color: white; padding: 5px 10px; border-radius: 4px; font-size: 12px; opacity: 0; transition: opacity var(--transition-fast); pointer-events: none; transform: translateY(-30px); white-space: nowrap; } .tooltip.visible { opacity: 0.9; } @media (max-width: 700px) { .container { grid-template-columns: 1fr; grid-template-areas: "header" "main"; } .sidebar { position: fixed; top: 60px; left: 0; width: 200px; height: calc(100% - 60px); transform: translateX(-100%); } .sidebar.active { transform: translateX(0); } .menu-toggle { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; cursor: pointer; } .sidebar-overlay { position: fixed; top: 60px; left: 0; width: 100%; height: calc(100% - 60px); background-color: rgba(0, 0, 0, 0.5); opacity: 0; transition: opacity var(--transition-medium); pointer-events: none; z-index: 2; } .sidebar-overlay.active { opacity: 1; pointer-events: auto; } .quick-access { grid-template-columns: repeat(2, 1fr); } .upcoming-events { grid-template-columns: 1fr; } } /* Animated Pulse Effect */ @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } .pulse { animation: pulse 2s infinite; } /* Section transitions */ .dashboard-section { display: none; opacity: 0; transform: translateX(20px); transition: opacity var(--transition-medium), transform var(--transition-medium); } .dashboard-section.active { display: block; opacity: 1; transform: translateX(0); } </style> </head> <body> <div class="loading-indicator"> <div class="loading-bar" id="loadingBar"></div> </div> <div class="container"> <header> <div class="logo"> <div class="logo-icon">N</div> <div class="logo-text">NEXUS</div> </div> <div class="user-menu"> <div class="notifications"> <i class="fas fa-bell"></i> <div class="notifications-badge">3</div> </div> <div class="user-avatar" id="userAvatar">JD</div> </div> </header> <div class="sidebar" id="sidebar"> <ul class="nav-menu"> <li class="nav-item"> <a href="#" class="nav-link active" data-section="dashboard"> <i class="fas fa-home"></i> Dashboard </a> </li> <li class="nav-item"> <a href="#" class="nav-link" data-section="tasks"> <i class="fas fa-tasks"></i> My Tasks </a> </li> <li class="nav-item"> <a href="#" class="nav-link" data-section="documents"> <i class="fas fa-file-alt"></i> Documents </a> </li> <li class="nav-item"> <a href="#" class="nav-link" data-section="calendar"> <i class="fas fa-calendar-alt"></i> Calendar </a> </li> <li class="nav-item"> <a href="#" class="nav-link" data-section="hr"> <i class="fas fa-users"></i> HR Portal </a> </li> <li class="nav-item"> <a href="#" class="nav-link" data-section="helpdesk"> <i class="fas fa-headset"></i> IT Helpdesk </a> </li> <li class="nav-item"> <a href="#" class="nav-link" data-section="resources"> <i class="fas fa-book"></i> Resources </a> </li> </ul> </div> <div class="sidebar-overlay" id="sidebarOverlay"></div> <main> <div class="dashboard-section active" id="dashboard"> <div class="section active"> <div class="section-header"> <h1 class="section-title">Welcome, Jane</h1> <div class="date">Tuesday, July 18, 2023</div> </div> <p class="section-subtitle">Your productivity dashboard shows 7 pending tasks and 3 upcoming meetings.</p> <div class="quick-access"> <div class="quick-access-item"> <div class="quick-access-icon"> <i class="fas fa-file-invoice"></i> </div> <div class="quick-access-label">Expense Reports</div> </div> <div class="quick-access-item"> <div class="quick-access-icon"> <i class="fas fa-calendar-check"></i> </div> <div class="quick-access-label">Book Meeting</div> </div> <div class="quick-access-item"> <div class="quick-access-icon"> <i class="fas fa-clipboard-list"></i> </div> <div class="quick-access-label">Project Tracker</div> </div> <div class="quick-access-item"> <div class="quick-access-icon"> <i class="fas fa-plane"></i> </div> <div class="quick-access-label">Travel Request</div> </div> </div> </div> <div class="card"> <h2 class="card-title"><i class="fas fa-bullhorn"></i> Announcements</h2> <ul class="announcements-list"> <li class="announcement-item"> <div class="announcement-title"> <span>Q3 Planning Session</span> <span class="tag tag-urgent">Urgent</span> </div> <div class="announcement-meta">From CEO Office • 2 hours ago</div> <div class="announcement-content">All department heads are required to submit Q3 planning documents by Friday. Strategic alignment session scheduled for Monday.</div> </li> <li class="announcement-item"> <div class="announcement-title"> <span>System Maintenance</span> <span class="tag tag-new">New</span> </div> <div class="announcement-meta">From IT Department • 1 day ago</div> <div class="announcement-content">Scheduled maintenance will occur this Saturday from 10PM to 2AM. Access to cloud resources will be limited during this time.</div> </li> </ul> </div> <div class="card"> <h2 class="card-title"><i class="fas fa-calendar"></i> Upcoming Events</h2> <div class="upcoming-events"> <div class="event-card"> <div class="event-date">Jul 20</div> <div class="event-details"> <div class="event-title">Product Launch Briefing</div> <div class="event-info"><i class="fas fa-clock"></i> 10:00 - 11:30 AM</div> <div class="event-info"><i class="fas fa-map-marker-alt"></i> Conference Room A</div> </div> </div> <div class="event-card"> <div class="event-date">Jul 22</div> <div class="event-details"> <div class="event-title">Team Building Event</div> <div class="event-info"><i class="fas fa-clock"></i> 2:00 - 5:00 PM</div> <div class="event-info"><i class="fas fa-map-marker-alt"></i> Central Park</div> </div> </div> </div> </div> </div> <div class="dashboard-section" id="tasks"> <div class="section"> <div class="section-header"> <h1 class="section-title">My Tasks</h1> </div> <p class="section-subtitle">Track and manage your assignments and deadlines.</p> <div class="search-bar"> <i class="fas fa-search search-icon"></i> <input type="text" class="search-input" placeholder="Search tasks..."> </div> <div class="task-list"> <div class="task-card priority-high"> <div class="task-checkbox"> <input type="checkbox" id="task1"> <label for="task1"></label> </div> <div class="task-content"> <div class="task-title">Finalize Q3 marketing strategy document</div> <div class="task-meta">Due: Tomorrow • Marketing</div> </div> </div> <div class="task-card priority-medium"> <div class="task-checkbox"> <input type="checkbox" id="task2"> <label for="task2"></label> </div> <div class="task-content"> <div class="task-title">Review product specifications for mobile app</div> <div class="task-meta">Due: Jul 21 • Product Development</div> </div> </div> <div class="task-card priority-low"> <div class="task-checkbox"> <input type="checkbox" id="task3"> <label for="task3"></label> </div> <div class="task-content"> <div class="task-title">Complete annual compliance training</div> <div class="task-meta">Due: Jul 30 • Human Resources</div> </div> </div> <div class="task-card priority-medium"> <div class="task-checkbox"> <input type="checkbox" id="task4"> <label for="task4"></label> </div> <div class="task-content"> <div class="task-title">Prepare presentation slides for client meeting</div> <div class="task-meta">Due: Jul 25 • Sales</div> </div> </div> </div> <div class="progress-indicator"> <div class="progress-bar"> <div class="progress-value" id="taskProgress"></div> </div> <div class="progress-text">1/4 completed</div> </div> </div> </div> <div class="dashboard-section" id="documents"> <div class="section"> <div class="section-header"> <h1 class="section-title">Documents</h1> </div> <p class="section-subtitle">Access, manage, and share important company files.</p> <div class="search-bar"> <i class="fas fa-search search-icon"></i> <input type="text" class="search-input" placeholder="Search documents..."> </div> <div class="card"> <h2 class="card-title"><i class="fas fa-star"></i> Recent Documents</h2> <!-- Content will be dynamically loaded --> <p style="text-align: center; padding: 30px; color: var(--gray-500);"> <i class="fas fa-spinner fa-pulse" style="font-size: 24px; margin-bottom: 10px;"></i><br> Loading documents... </p> </div> </div> </div> <div class="dashboard-section" id="calendar"> <div class="section"> <div class="section-header"> <h1 class="section-title">Calendar</h1> </div> <p class="section-subtitle">View and manage your schedule and appointments.</p> <div class="card"> <!-- Content will be dynamically loaded --> <p style="text-align: center; padding: 30px; color: var(--gray-500);"> <i class="fas fa-spinner fa-pulse" style="font-size: 24px; margin-bottom: 10px;"></i><br> Loading calendar... </p> </div> </div> </div> <div class="dashboard-section" id="hr"> <div class="section"> <div class="section-header"> <h1 class="section-title">HR Portal</h1> </div> <p class="section-subtitle">Access HR resources, benefits information, and company policies.</p> <div class="card"> <!-- Content will be dynamically loaded --> <p style="text-align: center; padding: 30px; color: var(--gray-500);"> <i class="fas fa-spinner fa-pulse" style="font-size: 24px; margin-bottom: 10px;"></i><br> Loading HR portal... </p> </div> </div> </div> <div class="dashboard-section" id="helpdesk"> <div class="section"> <div class="section-header"> <h1 class="section-title">IT Helpdesk</h1> </div> <p class="section-subtitle">Submit and track IT support tickets and requests.</p> <div class="card"> <!-- Content will be dynamically loaded --> <p style="text-align: center; padding: 30px; color: var(--gray-500);"> <i class="fas fa-spinner fa-pulse" style="font-size: 24px; margin-bottom: 10px;"></i><br> Loading helpdesk... </p> </div> </div> </div> <div class="dashboard-section" id="resources"> <div class="section"> <div class="section-header"> <h1 class="section-title">Resources</h1> </div> <p class="section-subtitle">Access training materials, guides, and company resources.</p> <div class="card"> <!-- Content will be dynamically loaded --> <p style="text-align: center; padding: 30px; color: var(--gray-500);"> <i class="fas fa-spinner fa-pulse" style="font-size: 24px; margin-bottom: 10px;"></i><br> Loading resources... </p> </div> </div> </div> </main> </div> <div class="tooltip" id="tooltip"></div> <script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script> <script> document.addEventListener('DOMContentLoaded', function() { // Loading bar animation const loadingBar = document.getElementById('loadingBar'); loadingBar.style.width = '30%'; setTimeout(() => { loadingBar.style.width = '60%'; }, 200); setTimeout(() => { loadingBar.style.width = '100%'; setTimeout(() => { document.querySelector('.loading-indicator').style.display = 'none'; }, 300); }, 500); // Card fade-in animation setTimeout(() => { const cards = document.querySelectorAll('.card'); cards.forEach((card, index) => { setTimeout(() => { card.classList.add('fade-in'); }, index * 100); }); }, 600); // Nav link click handler const navLinks = document.querySelectorAll('.nav-link'); navLinks.forEach(link => { link.addEventListener('click', function(e) { e.preventDefault(); // Update active link navLinks.forEach(navLink => { navLink.classList.remove('active'); }); this.classList.add('active'); // Show appropriate section const sectionId = this.getAttribute('data-section'); const sections = document.querySelectorAll('.dashboard-section'); sections.forEach(section => { section.classList.remove('active'); }); const targetSection = document.getElementById(sectionId); // Create loading effect loadingBar.style.width = '30%'; setTimeout(() => { loadingBar.style.width = '60%'; }, 100); setTimeout(() => { loadingBar.style.width = '100%'; setTimeout(() => { targetSection.classList.add('active'); document.querySelector('.loading-indicator').style.display = 'none'; // Fade in cards if present const cards = targetSection.querySelectorAll('.card'); cards.forEach((card, index) => { card.classList.remove('fade-in'); setTimeout(() => { card.classList.add('fade-in'); }, index * 100 + 100); }); }, 200); }, 300); // Close mobile menu if open if (window.innerWidth <= 700) { document.getElementById('sidebar').classList.remove('active'); document.getElementById('sidebarOverlay').classList.remove('active'); } }); }); // Task checkbox functionality const taskCheckboxes = document.querySelectorAll('.task-checkbox input'); taskCheckboxes.forEach(checkbox => { checkbox.addEventListener('change', updateTaskProgress); }); // Initial task progress update updateTaskProgress(); // Mobile menu toggle const userAvatar = document.getElementById('userAvatar'); const sidebar = document.getElementById('sidebar'); const sidebarOverlay = document.getElementById('sidebarOverlay'); userAvatar.addEventListener('click', function() { sidebar.classList.toggle('active'); sidebarOverlay.classList.toggle('active'); }); sidebarOverlay.addEventListener('click', function() { sidebar.classList.remove('active'); sidebarOverlay.classList.remove('active'); }); // Tooltip functionality const quickAccessItems = document.querySelectorAll('.quick-access-item'); const tooltip = document.getElementById('tooltip'); quickAccessItems.forEach(item => { item.addEventListener('mouseenter', function(e) { const label = this.querySelector('.quick-access-label').textContent; tooltip.textContent = `Quick access to ${label}`; const rect = this.getBoundingClientRect(); tooltip.style.left = `${rect.left + rect.width / 2 - tooltip.offsetWidth / 2}px`; tooltip.style.top = `${rect.top - 30}px`; tooltip.classList.add('visible'); }); item.addEventListener('mouseleave', function() { tooltip.classList.remove('visible'); }); // Add pulse effect to first quick access item if (item === quickAccessItems[0]) { setTimeout(() => { item.classList.add('pulse'); setTimeout(() => { item.classList.remove('pulse'); }, 6000); }, 2000); } }); // Responsive handlers window.addEventListener('resize', function() { if (window.innerWidth > 700) { sidebar.classList.remove('active'); sidebarOverlay.classList.remove('active'); } }); }); function updateTaskProgress() { const totalTasks = document.querySelectorAll('.task-checkbox input').length; const completedTasks = document.querySelectorAll('.task-checkbox input:checked').length; const progressBar = document.getElementById('taskProgress'); const progressText = document.querySelector('.progress-text'); const progressPercentage = totalTasks > 0 ? (completedTasks / totalTasks) * 100 : 0; progressBar.style.width = `${progressPercentage}%`; progressText.textContent = `${completedTasks}/${totalTasks} completed`; } </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Voyager - Experience the Journey</title> <style> :root { --primary-blue: #1a73e8; --deep-blue: #0d47a1; --light-blue: #bbdefb; --sunset-orange: #ff7043; --sunset-yellow: #ffb74d; --sunset-pink: #ff80ab; --text-dark: #263238; --text-light: #ffffff; --background: #f5f9ff; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Montserrat', sans-serif; } body { background-color: var(--background); height: 100vh; width: 100%; overflow: hidden; position: relative; color: var(--text-dark); } .container { width: 100%; height: 100%; display: flex; flex-direction: column; position: relative; overflow: hidden; padding: 20px; } header { display: flex; justify-content: space-between; align-items: center; padding: 15px 0; z-index: 100; } .logo { font-size: 24px; font-weight: 700; color: var(--primary-blue); display: flex; align-items: center; } .logo span { color: var(--sunset-orange); } .logo svg { margin-right: 8px; } nav { display: flex; gap: 25px; } nav a { text-decoration: none; color: var(--text-dark); font-weight: 500; font-size: 16px; position: relative; transition: color 0.3s; } nav a:hover { color: var(--primary-blue); } nav a::after { content: ''; position: absolute; width: 0; height: 2px; bottom: -5px; left: 0; background-color: var(--primary-blue); transition: width 0.3s ease; } nav a:hover::after { width: 100%; } main { flex: 1; display: flex; justify-content: center; align-items: center; overflow: hidden; position: relative; } .page { position: absolute; width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; transition: transform 0.8s cubic-bezier(0.68, -0.55, 0.27, 1.55); padding: 20px; } .page.active { transform: translateX(0) !important; } .home { transform: translateX(0); background: linear-gradient(135deg, rgba(187, 222, 251, 0.5), rgba(255, 183, 77, 0.2)); } .destination { transform: translateX(105%); background: linear-gradient(135deg, rgba(255, 183, 77, 0.3), rgba(255, 128, 171, 0.2)); } .booking { transform: translateX(105%); background: linear-gradient(135deg, rgba(255, 128, 171, 0.2), rgba(26, 115, 232, 0.3)); } .confirmation { transform: translateX(105%); background: linear-gradient(135deg, rgba(26, 115, 232, 0.3), rgba(187, 222, 251, 0.5)); } h1 { font-size: 36px; font-weight: 700; margin-bottom: 20px; background: linear-gradient(90deg, var(--primary-blue), var(--sunset-orange)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; text-align: center; } p { font-size: 18px; line-height: 1.6; margin-bottom: 30px; max-width: 600px; text-align: center; } .btn { padding: 12px 28px; border-radius: 50px; background: var(--primary-blue); color: var(--text-light); font-weight: 600; border: none; cursor: pointer; transition: all 0.3s ease; font-size: 16px; display: inline-flex; align-items: center; box-shadow: 0 4px 15px rgba(26, 115, 232, 0.3); } .btn:hover { background: var(--deep-blue); transform: translateY(-3px); box-shadow: 0 6px 20px rgba(26, 115, 232, 0.4); } .btn.secondary { background: var(--sunset-orange); box-shadow: 0 4px 15px rgba(255, 112, 67, 0.3); } .btn.secondary:hover { background: #f85a2a; box-shadow: 0 6px 20px rgba(255, 112, 67, 0.4); } .btn svg { margin-left: 8px; } .search-form { background: white; border-radius: 15px; padding: 25px; width: 100%; max-width: 600px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); margin-bottom: 30px; } .form-group { margin-bottom: 20px; } .form-group label { display: block; margin-bottom: 8px; font-weight: 500; color: var(--text-dark); } .form-group input, .form-group select { width: 100%; padding: 12px 15px; border: 2px solid var(--light-blue); border-radius: 8px; font-size: 16px; transition: border-color 0.3s; } .form-group input:focus, .form-group select:focus { border-color: var(--primary-blue); outline: none; } .form-row { display: flex; gap: 15px; } .form-row .form-group { flex: 1; } .destination-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; width: 100%; max-width: 600px; } .destination-card { background: white; border-radius: 15px; overflow: hidden; box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1); cursor: pointer; transition: all 0.3s ease; position: relative; } .destination-card:hover { transform: translateY(-10px) scale(1.02); box-shadow: 0 15px 35px rgba(0, 0, 0, 0.15); } .card-img { height: 180px; width: 100%; overflow: hidden; } .card-img img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; } .destination-card:hover .card-img img { transform: scale(1.1); } .card-content { padding: 15px; } .card-title { font-size: 18px; font-weight: 600; margin-bottom: 8px; color: var(--text-dark); } .card-price { color: var(--primary-blue); font-weight: 700; } .booking-summary { background: white; border-radius: 15px; padding: 25px; width: 100%; max-width: 600px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); margin-bottom: 30px; } .booking-info { display: flex; justify-content: space-between; margin-bottom: 15px; padding-bottom: 15px; border-bottom: 1px solid var(--light-blue); } .booking-info .label { font-weight: 500; color: var(--text-dark); } .booking-info .value { font-weight: 600; color: var(--primary-blue); } .total { display: flex; justify-content: space-between; margin-top: 20px; padding-top: 15px; border-top: 2px solid var(--light-blue); font-size: 20px; } .total .label { font-weight: 600; color: var(--text-dark); } .total .value { font-weight: 700; color: var(--sunset-orange); } .payment-options { display: flex; gap: 15px; margin-top: 20px; } .payment-option { flex: 1; padding: 12px; background: white; border: 2px solid var(--light-blue); border-radius: 8px; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.3s; } .payment-option.selected { border-color: var(--primary-blue); background: var(--light-blue); } .payment-option:hover { border-color: var(--primary-blue); } .confirmation-icon { width: 100px; height: 100px; background: linear-gradient(135deg, var(--primary-blue), var(--sunset-orange)); border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-bottom: 25px; box-shadow: 0 10px 25px rgba(26, 115, 232, 0.3); } .confirmation-icon svg { width: 50px; height: 50px; fill: white; } .booking-code { font-size: 24px; font-weight: 700; color: var(--primary-blue); margin: 15px 0; padding: 10px 25px; background: white; border-radius: 8px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); } .map-route { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: -1; } .map-route svg { width: 100%; height: 100%; } .route-dot { position: absolute; width: 15px; height: 15px; background: var(--sunset-orange); border-radius: 50%; z-index: 100; opacity: 0; filter: blur(2px); box-shadow: 0 0 10px var(--sunset-orange), 0 0 20px var(--sunset-orange); } .bubble { position: absolute; border-radius: 50%; background: rgba(255, 255, 255, 0.3); z-index: -1; opacity: 0.5; } @media (max-width: 768px) { h1 { font-size: 28px; } p { font-size: 16px; } .form-row { flex-direction: column; gap: 0; } nav { gap: 15px; } nav a { font-size: 14px; } .destination-cards { grid-template-columns: 1fr; } } @media (max-width: 480px) { header { flex-direction: column; align-items: flex-start; gap: 10px; } nav { margin-top: 10px; } h1 { font-size: 24px; } .btn { padding: 10px 20px; font-size: 14px; } } </style> </head> <body> <div class="container"> <header> <div class="logo"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C8.13 2 5 5.13 5 9C5 14.25 12 22 12 22C12 22 19 14.25 19 9C19 5.13 15.87 2 12 2ZM12 11.5C10.62 11.5 9.5 10.38 9.5 9C9.5 7.62 10.62 6.5 12 6.5C13.38 6.5 14.5 7.62 14.5 9C14.5 10.38 13.38 11.5 12 11.5Z" fill="#1a73e8"/> </svg> Voyager<span>.</span> </div> <nav> <a href="#" class="nav-item active">Home</a> <a href="#" class="nav-item">Explore</a> <a href="#" class="nav-item">Deals</a> <a href="#" class="nav-item">Contact</a> </nav> </header> <main> <div class="map-route"> <svg viewBox="0 0 700 700" fill="none" xmlns="http://www.w3.org/2000/svg"> <path id="route1" d="M350,600 Q500,500 650,350 T600,100" stroke="transparent" stroke-width="2" fill="none"/> <path id="route2" d="M150,600 Q250,450 350,350 T550,100" stroke="transparent" stroke-width="2" fill="none"/> <path id="route3" d="M100,300 Q200,350 350,250 T600,350" stroke="transparent" stroke-width="2" fill="none"/> </svg> </div> <div class="page home active"> <h1>Discover Your Perfect Journey</h1> <p>From hidden gems to world-famous landmarks, find and book unique travel experiences tailored just for you. Start your adventure with Voyager today.</p> <div class="search-form"> <div class="form-group"> <label for="destination">Where to?</label> <input type="text" id="destination" placeholder="City, country, or landmark"> </div> <div class="form-row"> <div class="form-group"> <label for="check-in">Check in</label> <input type="date" id="check-in"> </div> <div class="form-group"> <label for="check-out">Check out</label> <input type="date" id="check-out"> </div> </div> <div class="form-row"> <div class="form-group"> <label for="travelers">Travelers</label> <select id="travelers"> <option value="1">1 Adult</option> <option value="2">2 Adults</option> <option value="3">3 Adults</option> <option value="4">4 Adults</option> <option value="5">2 Adults, 1 Child</option> <option value="6">2 Adults, 2 Children</option> </select> </div> <div class="form-group"> <label for="room-type">Room Type</label> <select id="room-type"> <option value="standard">Standard</option> <option value="deluxe">Deluxe</option> <option value="suite">Suite</option> <option value="villa">Villa</option> </select> </div> </div> </div> <button class="btn search-btn"> Search Destinations <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 4L10.59 5.41L16.17 11H4V13H16.17L10.59 18.59L12 20L20 12L12 4Z" fill="white"/> </svg> </button> </div> <div class="page destination"> <h1>Choose Your Destination</h1> <p>We found these amazing places matching your preferences. Select one to continue your journey.</p> <div class="destination-cards"> <div class="destination-card" data-destination="Santorini"> <div class="card-img"> <img src="https://images.unsplash.com/photo-1570077188670-e3a8d3a5e89e?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="Santorini"> </div> <div class="card-content"> <div class="card-title">Santorini, Greece</div> <div class="card-price">$1,299 / person</div> </div> </div> <div class="destination-card" data-destination="Kyoto"> <div class="card-img"> <img src="https://images.unsplash.com/photo-1493976040374-85c8e12f0c0e?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="Kyoto"> </div> <div class="card-content"> <div class="card-title">Kyoto, Japan</div> <div class="card-price">$1,499 / person</div> </div> </div> </div> <button class="btn secondary back-btn" data-target="home"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right: 8px; margin-left: 0;"> <path d="M20 11H7.83L13.42 5.41L12 4L4 12L12 20L13.41 18.59L7.83 13H20V11Z" fill="white"/> </svg> Back to Search </button> </div> <div class="page booking"> <h1>Finalize Your Booking</h1> <p>You're almost there! Review your booking details and complete your payment.</p> <div class="booking-summary"> <div class="booking-info"> <span class="label">Destination:</span> <span class="value">Santorini, Greece</span> </div> <div class="booking-info"> <span class="label">Dates:</span> <span class="value">Jun 15 - Jun 22, 2023</span> </div> <div class="booking-info"> <span class="label">Travelers:</span> <span class="value">2 Adults</span> </div> <div class="booking-info"> <span class="label">Room Type:</span> <span class="value">Deluxe Suite</span> </div> <div class="total"> <span class="label">Total:</span> <span class="value">$2,598</span> </div> <div class="payment-options"> <div class="payment-option"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M20 4H4C2.89 4 2.01 4.89 2.01 6L2 18C2 19.11 2.89 20 4 20H20C21.11 20 22 19.11 22 18V6C22 4.89 21.11 4 20 4ZM20 18H4V12H20V18ZM20 8H4V6H20V8Z" fill="#1a73e8"/> </svg> </div> <div class="payment-option selected"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M20 4H4C2.89 4 2.01 4.89 2.01 6L2 18C2 19.11 2.89 20 4 20H20C21.11 20 22 19.11 22 18V6C22 4.89 21.11 4 20 4ZM20 18H4V6H20V18Z" fill="#1a73e8"/> <path d="M17 11H7V13H17V11Z" fill="#1a73e8"/> </svg> </div> <div class="payment-option"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M19 14V6C19 4.9 18.1 4 17 4H3C1.9 4 1 4.9 1 6V14C1 15.1 1.9 16 3 16H17C18.1 16 19 15.1 19 14ZM17 14H3V6H17V14ZM23 7V18C23 19.1 22.1 20 21 20H7C7 19.45 7.45 19 8 19H21V7C21 6.45 21.45 6 22 6C22.55 6 23 6.45 23 7Z" fill="#1a73e8"/> </svg> </div> </div> </div> <div style="display: flex; gap: 15px;"> <button class="btn secondary back-btn" data-target="destination"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right: 8px; margin-left: 0;"> <path d="M20 11H7.83L13.42 5.41L12 4L4 12L12 20L13.41 18.59L7.83 13H20V11Z" fill="white"/> </svg> Back </button> <button class="btn confirm-btn"> Confirm Booking <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 4L10.59 5.41L16.17 11H4V13H16.17L10.59 18.59L12 20L20 12L12 4Z" fill="white"/> </svg> </button> </div> </div> <div class="page confirmation"> <div class="confirmation-icon"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M9 16.17L4.83 12L3.41 13.41L9 19L21 7L19.59 5.59L9 16.17Z" fill="white"/> </svg> </div> <h1>Booking Confirmed!</h1> <p>Get ready for an amazing journey! Your trip to Santorini has been confirmed. All the details have been sent to your email.</p> <div class="booking-code">VOY-2348-GR</div> <button class="btn secondary" id="start-over"> Book Another Trip <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M17.65 6.35C16.2 4.9 14.21 4 12 4C7.58 4 4.01 7.58 4.01 12C4.01 16.42 7.58 20 12 20C15.73 20 18.84 17.45 19.73 14H17.65C16.83 16.33 14.61 18 12 18C8.69 18 6 15.31 6 12C6 8.69 8.69 6 12 6C13.66 6 15.14 6.69 16.22 7.78L13 11H20V4L17.65 6.35Z" fill="white"/> </svg> </button> </div> <div class="route-dot" id="routeDot"></div> </main> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Create floating bubbles createBubbles(); // Setup page transitions const searchBtn = document.querySelector('.search-btn'); const destinationCards = document.querySelectorAll('.destination-card'); const confirmBtn = document.querySelector('.confirm-btn'); const backBtns = document.querySelectorAll('.back-btn'); const startOverBtn = document.getElementById('start-over'); searchBtn.addEventListener('click', function() { transitionToPage('destination', 'route1'); }); destinationCards.forEach(card => { card.addEventListener('click', function() { transitionToPage('booking', 'route2'); }); }); confirmBtn.addEventListener('click', function() { transitionToPage('confirmation', 'route3'); }); backBtns.forEach(btn => { btn.addEventListener('click', function() { const target = this.getAttribute('data-target'); const currentPage = document.querySelector('.page.active'); const targetPage = document.querySelector(`.page.${target}`); currentPage.classList.remove('active'); targetPage.classList.add('active'); // Reset positioning currentPage.style.transform = 'translateX(105%)'; targetPage.style.transform = 'translateX(0)'; }); }); startOverBtn.addEventListener('click', function() { resetPages(); }); // Make form elements interactive const formInputs = document.querySelectorAll('input, select'); formInputs.forEach(input => { input.addEventListener('focus', function() { this.parentElement.style.boxShadow = '0 0 0 2px rgba(26, 115, 232, 0.3)'; }); input.addEventListener('blur', function() { this.parentElement.style.boxShadow = 'none'; }); }); // Make payment options interactive const paymentOptions = document.querySelectorAll('.payment-option'); paymentOptions.forEach(option => { option.addEventListener('click', function() { paymentOptions.forEach(opt => opt.classList.remove('selected')); this.classList.add('selected'); }); }); }); function transitionToPage(pageClass, routeId) { const currentPage = document.querySelector('.page.active'); const nextPage = document.querySelector(`.page.${pageClass}`); const routePath = document.getElementById(routeId); const routeDot = document.getElementById('routeDot'); // Get the route path data for animation const pathLength = routePath.getTotalLength(); let start = null; const duration = 800; // Match this with the CSS transition duration // First move the current page out currentPage.style.transform = 'translateX(-105%)'; // Animate dot along the path routePath.style.stroke = 'rgba(255, 112, 67, 0.3)'; routePath.style.strokeWidth = '8'; routePath.style.strokeDasharray = '8, 8'; routeDot.style.opacity = '1'; function animateDot(timestamp) { if (!start) start = timestamp; const progress = (timestamp - start) / duration; if (progress < 1) { // Get point at position const point = routePath.getPointAtLength(progress * pathLength); // Set dot position routeDot.style.left = `${point.x}px`; routeDot.style.top = `${point.y}px`; requestAnimationFrame(animateDot); } else { // Animation complete routeDot.style.opacity = '0'; routePath.style.stroke = 'transparent'; // Set the next page as active currentPage.classList.remove('active'); nextPage.classList.add('active'); nextPage.style.transform = 'translateX(0)'; } } requestAnimationFrame(animateDot); } function resetPages() { const pages = document.querySelectorAll('.page'); pages.forEach(page => { page.classList.remove('active'); page.style.transform = 'translateX(105%)'; }); const homePage = document.querySelector('.page.home'); homePage.classList.add('active'); homePage.style.transform = 'translateX(0)'; } function createBubbles() { const container = document.querySelector('.container'); const bubbleCount = 12; for (let i = 0; i < bubbleCount; i++) { const bubble = document.createElement('div'); bubble.classList.add('bubble'); // Random size between 50 and 150px const size = Math.random() * 100 + 50; bubble.style.width = `${size}px`; bubble.style.height = `${size}px`; // Random position bubble.style.left = `${Math.random() * 100}%`; bubble.style.top = `${Math.random() * 100}%`; // Random colors const colors = ['var(--light-blue)', 'var(--sunset-yellow)', 'var(--sunset-pink)']; bubble.style.background = colors[Math.floor(Math.random() * colors.length)]; bubble.style.opacity = '0.05'; // Random animation const duration = Math.random() * 20 + 10; bubble.style.animation = `float ${duration}s ease-in-out infinite`; container.appendChild(bubble); } } // Add keyframes for bubble float animation const style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = ` @keyframes float { 0% { transform: translateY(0) translateX(0); } 50% { transform: translateY(-20px) translateX(10px); } 100% { transform: translateY(0) translateX(0); } }`; document.getElementsByTagName('head')[0].appendChild(style); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>NeonFlix - Cinematic Experience</title> <style> :root { --bg-primary: #0d0d12; --bg-secondary: #16161e; --neon-pink: #ff2a6d; --neon-blue: #05d9e8; --neon-purple: #9d4edd; --text-primary: #f8f9fa; --transition-speed: 0.4s; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background-color: var(--bg-primary); color: var(--text-primary); overflow-x: hidden; width: 100%; height: 100vh; perspective: 1000px; } .container { width: 100%; max-width: 700px; margin: 0 auto; height: 700px; position: relative; overflow: hidden; } header { padding: 1.5rem; background-color: rgba(13, 13, 18, 0.8); backdrop-filter: blur(10px); position: fixed; top: 0; width: 100%; max-width: 700px; z-index: 100; display: flex; justify-content: space-between; align-items: center; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); } .logo { font-size: 1.8rem; font-weight: 700; background: linear-gradient(90deg, var(--neon-pink), var(--neon-blue)); -webkit-background-clip: text; background-clip: text; color: transparent; letter-spacing: 1px; text-shadow: 0 0 5px rgba(255, 42, 109, 0.3); } nav { display: flex; gap: 1rem; } .nav-item { cursor: pointer; padding: 0.5rem 0.8rem; border-radius: 4px; transition: all var(--transition-speed); position: relative; overflow: hidden; } .nav-item:hover { color: var(--neon-blue); } .nav-item:after { content: ''; position: absolute; bottom: 0; left: 0; width: 100%; height: 2px; background: var(--neon-blue); transform: scaleX(0); transform-origin: right; transition: transform var(--transition-speed); } .nav-item:hover:after { transform: scaleX(1); transform-origin: left; } .nav-item.active { color: var(--neon-pink); } .nav-item.active:after { background: var(--neon-pink); transform: scaleX(1); } main { padding-top: 6rem; position: relative; height: 100%; overflow-y: auto; overflow-x: hidden; scroll-behavior: smooth; } .section { position: absolute; width: 100%; height: calc(100% - 6rem); opacity: 0; transform: translateY(30px) scale(0.9) rotateX(10deg); transition: all 0.6s cubic-bezier(0.23, 1, 0.32, 1); pointer-events: none; padding: 1rem; overflow-y: auto; top: 6rem; } .section.active { opacity: 1; transform: translateY(0) scale(1) rotateX(0); pointer-events: all; z-index: 10; } h2 { font-size: 1.8rem; margin-bottom: 1.5rem; position: relative; display: inline-block; } h2::after { content: ''; position: absolute; bottom: -5px; left: 0; width: 60%; height: 3px; background: linear-gradient(90deg, var(--neon-pink), var(--neon-blue)); } .category-title { font-size: 1.2rem; margin: 1.5rem 0 1rem; color: var(--neon-blue); } .cards-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 1rem; margin-bottom: 2rem; } .card { background-color: var(--bg-secondary); border-radius: 12px; overflow: hidden; transition: all var(--transition-speed); position: relative; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); cursor: pointer; } .card:hover { transform: translateY(-10px); box-shadow: 0 10px 25px rgba(255, 42, 109, 0.3); } .card:hover::before { opacity: 1; } .card::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 2px solid transparent; border-radius: 12px; background: linear-gradient(90deg, var(--neon-pink), var(--neon-blue)) border-box; -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0); -webkit-mask-composite: destination-out; mask-composite: exclude; opacity: 0; transition: opacity var(--transition-speed); } .card-img { width: 100%; height: 250px; object-fit: cover; } .card-content { padding: 0.8rem; } .card-title { font-size: 1rem; font-weight: 600; margin-bottom: 0.3rem; } .card-info { font-size: 0.8rem; color: rgba(255, 255, 255, 0.7); display: flex; justify-content: space-between; } .feature-card { position: relative; width: 100%; height: 250px; border-radius: 12px; overflow: hidden; margin-bottom: 1.5rem; background-size: cover; background-position: center; } .feature-card::after { content: ''; position: absolute; bottom: 0; left: 0; width: 100%; height: 70%; background: linear-gradient(to top, rgba(13, 13, 18, 0.9), transparent); } .feature-content { position: absolute; bottom: 0; left: 0; width: 100%; padding: 1.5rem; z-index: 2; } .feature-title { font-size: 1.5rem; font-weight: 700; margin-bottom: 0.5rem; } .feature-desc { font-size: 0.9rem; margin-bottom: 1rem; max-width: 80%; } .feature-action { display: inline-block; background: var(--neon-pink); padding: 0.5rem 1.2rem; border-radius: 50px; color: var(--text-primary); font-weight: 600; cursor: pointer; transition: all var(--transition-speed); border: none; box-shadow: 0 0 15px rgba(255, 42, 109, 0.5); } .feature-action:hover { background: var(--neon-blue); box-shadow: 0 0 20px rgba(5, 217, 232, 0.7); transform: scale(1.05); } .search-container { position: relative; margin-bottom: 2rem; } .search-container input { width: 100%; padding: 0.8rem 1rem 0.8rem 3rem; border-radius: 8px; border: none; background-color: var(--bg-secondary); color: var(--text-primary); font-size: 1rem; transition: all var(--transition-speed); box-shadow: inset 0 0 0 2px transparent; } .search-container input:focus { outline: none; box-shadow: inset 0 0 0 2px var(--neon-blue); } .search-icon { position: absolute; left: 1rem; top: 50%; transform: translateY(-50%); color: rgba(255, 255, 255, 0.5); } /* Review Section Styles */ .review-card { background-color: var(--bg-secondary); border-radius: 12px; padding: 1.2rem; margin-bottom: 1rem; position: relative; transition: all var(--transition-speed); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); } .review-card:hover { transform: translateX(10px); box-shadow: -5px 5px 20px rgba(5, 217, 232, 0.2); } .reviewer { display: flex; align-items: center; margin-bottom: 0.8rem; } .reviewer-img { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; margin-right: 0.8rem; border: 2px solid var(--neon-pink); } .reviewer-name { font-weight: 600; } .reviewer-meta { font-size: 0.8rem; color: rgba(255, 255, 255, 0.7); } .review-title { font-size: 1.1rem; font-weight: 600; margin-bottom: 0.5rem; color: var(--neon-blue); } .review-content { font-size: 0.9rem; margin-bottom: 0.8rem; line-height: 1.5; } .rating { display: flex; margin-top: 0.5rem; color: var(--neon-pink); } /* Animated Background */ .bg-animation { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; opacity: 0.1; pointer-events: none; } .bg-line { position: absolute; height: 100%; width: 1px; opacity: 0.3; background-color: var(--neon-blue); top: 0; transform: translateX(-50%); animation: scanline 8s linear infinite; } @keyframes scanline { 0% { left: 0%; } 100% { left: 100%; } } .glow-point { position: absolute; pointer-events: none; width: 200px; height: 200px; background: radial-gradient(circle, var(--neon-pink) 0%, rgba(255, 42, 109, 0) 70%); border-radius: 50%; opacity: 0; top: 0; left: 0; transform: translate(-50%, -50%); z-index: -1; animation: pulse 4s ease infinite; } @keyframes pulse { 0% { opacity: 0.1; transform: translate(-50%, -50%) scale(0.8); } 50% { opacity: 0.2; transform: translate(-50%, -50%) scale(1); } 100% { opacity: 0.1; transform: translate(-50%, -50%) scale(0.8); } } /* Player Section Styles */ .player-container { position: relative; overflow: hidden; border-radius: 12px; margin-bottom: 1.5rem; background-color: #000; } .player-video { width: 100%; aspect-ratio: 16/9; object-fit: cover; } .player-controls { position: absolute; bottom: 0; left: 0; width: 100%; padding: 1rem; background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent); display: flex; align-items: center; justify-content: space-between; opacity: 0; transition: opacity var(--transition-speed); } .player-container:hover .player-controls { opacity: 1; } .player-progress { position: absolute; bottom: 0; left: 0; width: 100%; height: 3px; background-color: rgba(255, 255, 255, 0.2); z-index: 10; } .player-progress-bar { height: 100%; width: 35%; background-color: var(--neon-pink); position: relative; } .player-progress-handle { position: absolute; right: -6px; top: 50%; transform: translateY(-50%); width: 12px; height: 12px; border-radius: 50%; background-color: var(--neon-pink); box-shadow: 0 0 10px rgba(255, 42, 109, 0.8); } .player-btn { background: none; border: none; color: var(--text-primary); cursor: pointer; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; border-radius: 50%; transition: all var(--transition-speed); } .player-btn:hover { background-color: rgba(255, 255, 255, 0.1); } .player-play-btn { width: 50px; height: 50px; background-color: var(--neon-pink); border-radius: 50%; display: flex; align-items: center; justify-content: center; box-shadow: 0 0 20px rgba(255, 42, 109, 0.5); transition: all var(--transition-speed); } .player-play-btn:hover { transform: scale(1.1); background-color: var(--neon-blue); box-shadow: 0 0 20px rgba(5, 217, 232, 0.7); } .player-time { color: var(--text-primary); font-size: 0.8rem; margin: 0 1rem; } .progress-block { flex: 1; margin: 0 1rem; position: relative; } /* Media Queries */ @media (max-width: 600px) { .cards-container { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); } .feature-desc { max-width: 100%; } .logo { font-size: 1.5rem; } .nav-item { padding: 0.5rem; } h2 { font-size: 1.5rem; } } /* Loading Animation */ .loader { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--bg-primary); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 9999; transition: opacity 0.5s, visibility 0.5s; } .loader.hidden { opacity: 0; visibility: hidden; } .loader-spinner { width: 60px; height: 60px; position: relative; margin-bottom: 20px; } .loader-spinner:before, .loader-spinner:after { content: ''; position: absolute; border-radius: 50%; animation: pulse-loader 2s ease-in-out infinite; } .loader-spinner:before { width: 100%; height: 100%; background-color: var(--neon-pink); opacity: 0.7; animation-delay: 0s; } .loader-spinner:after { width: 100%; height: 100%; background-color: var(--neon-blue); opacity: 0.7; animation-delay: 1s; } @keyframes pulse-loader { 0% { transform: scale(0); opacity: 1; } 100% { transform: scale(1.5); opacity: 0; } } .loader-text { background: linear-gradient(90deg, var(--neon-pink), var(--neon-blue)); -webkit-background-clip: text; background-clip: text; color: transparent; font-size: 1.5rem; font-weight: bold; letter-spacing: 2px; } </style> </head> <body> <div class="loader"> <div class="loader-spinner"></div> <div class="loader-text">NeonFlix</div> </div> <div class="container"> <header> <div class="logo">NeonFlix</div> <nav> <div class="nav-item active" data-section="shows">Shows</div> <div class="nav-item" data-section="movies">Movies</div> <div class="nav-item" data-section="reviews">Reviews</div> </nav> </header> <main> <section id="shows" class="section active"> <div class="search-container"> <svg class="search-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/> </svg> <input type="text" placeholder="Search for shows..."> </div> <div class="feature-card" style="background-image: url('https://images.unsplash.com/photo-1627873649417-c67f701f1949?q=80&w=2070&auto=format&fit=crop')"> <div class="feature-content"> <div class="feature-title">Neon Shadows</div> <div class="feature-desc">A detective with a troubled past investigates a series of mysterious disappearances in a futuristic city ruled by corporate greed.</div> <button class="feature-action">Watch Now</button> </div> </div> <h2>Trending Shows</h2> <div class="cards-container"> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1626814026160-2237a95fc03e?q=80&w=2070&auto=format&fit=crop" alt="Cyber Dreams"> <div class="card-content"> <div class="card-title">Cyber Dreams</div> <div class="card-info"> <span>2023</span> <span>8.9 ★</span> </div> </div> </div> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1536440136628-849c177e76a1?q=80&w=1925&auto=format&fit=crop" alt="Electric Pulse"> <div class="card-content"> <div class="card-title">Electric Pulse</div> <div class="card-info"> <span>2022</span> <span>8.2 ★</span> </div> </div> </div> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1614741118887-7a4ee193a5fa?q=80&w=1974&auto=format&fit=crop" alt="Neon Quest"> <div class="card-content"> <div class="card-title">Neon Quest</div> <div class="card-info"> <span>2023</span> <span>9.1 ★</span> </div> </div> </div> </div> <h3 class="category-title">Continue Watching</h3> <div class="player-container"> <video class="player-video" poster="https://images.unsplash.com/photo-1605106702734-205df224ecce?q=80&w=2070&auto=format&fit=crop"> <source src="#" type="video/mp4"> </video> <div class="player-controls"> <button class="player-btn"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M.5 3.5A.5.5 0 0 1 1 3h2.5a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5zm5 0a.5.5 0 0 1 .5-.5h2.5a.5.5 0 0 1 0 1H6a.5.5 0 0 1-.5-.5zm5 0a.5.5 0 0 1 .5-.5H14a.5.5 0 0 1 0 1h-2.5a.5.5 0 0 1-.5-.5z"/> </svg> </button> <button class="player-btn"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"> <path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/> <path d="M11.354 5.646a.5.5 0 0 0-.708 0L8 8.293 5.354 5.646a.5.5 0 0 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0 0-.708z"/> </svg> </button> <div class="player-time">01:23</div> <div class="progress-block"> <div class="player-progress"> <div class="player-progress-bar"> <div class="player-progress-handle"></div> </div> </div> </div> <div class="player-time">35:47</div> <button class="player-play-btn"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 16 16"> <path d="m11.596 8.697-6.363 3.692c-.54.313-1.233-.066-1.233-.697V4.308c0-.63.692-1.01 1.233-.696l6.363 3.692a.802.802 0 0 1 0 1.393z"/> </svg> </button> <button class="player-btn"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16"> <path d="M11.536 14.01A8.473 8.473 0 0 0 14.026 8a8.473 8.473 0 0 0-2.49-6.01l-.708.707A7.476 7.476 0 0 1 13.025 8c0 2.071-.84 3.946-2.197 5.303l.708.707z"/> <path d="M10.121 12.596A6.48 6.48 0 0 0 12.025 8a6.48 6.48 0 0 0-1.904-4.596l-.707.707A5.483 5.483 0 0 1 11.025 8a5.483 5.483 0 0 1-1.61 3.89l.706.706z"/> <path d="M8.707 11.182A4.486 4.486 0 0 0 10.025 8a4.486 4.486 0 0 0-1.318-3.182L8 5.525A3.489 3.489 0 0 1 9.025 8 3.49 3.49 0 0 1 8 10.475l.707.707zM6.717 3.55A.5.5 0 0 1 7.22 4H8c0 1.097-.253 2.154-.725 3.097a6.486 6.486 0 0 1-1.455 2.051.5.5 0 0 1-.68-.708 5.5 5.5 0 0 0 1.235-1.741 9.792 9.792 0 0 0 .573-2.7.5.5 0 0 1 .494-.543h.364l-.004-.001z"/> <path d="M3.5 5a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-1 0v-5a.5.5 0 0 1 .5-.5zm2 0a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-1 0v-5a.5.5 0 0 1 .5-.5z"/> </svg> </button> </div> </div> <h3 class="category-title">Popular in Sci-Fi</h3> <div class="cards-container"> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1580982327559-c1202864eb05?q=80&w=1931&auto=format&fit=crop" alt="The Link"> <div class="card-content"> <div class="card-title">The Link</div> <div class="card-info"> <span>2023</span> <span>8.7 ★</span> </div> </div> </div> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1624213111452-35e8d3d5cc18?q=80&w=1942&auto=format&fit=crop" alt="Binary Dreams"> <div class="card-content"> <div class="card-title">Binary Dreams</div> <div class="card-info"> <span>2021</span> <span>7.8 ★</span> </div> </div> </div> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1604076913837-52ab5629fba9?q=80&w=1974&auto=format&fit=crop" alt="Quantum Loop"> <div class="card-content"> <div class="card-title">Quantum Loop</div> <div class="card-info"> <span>2022</span> <span>9.2 ★</span> </div> </div> </div> </div> </section> <section id="movies" class="section"> <div class="search-container"> <svg class="search-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/> </svg> <input type="text" placeholder="Search for movies..."> </div> <div class="feature-card" style="background-image: url('https://images.unsplash.com/photo-1534447677768-be436bb09401?q=80&w=2094&auto=format&fit=crop')"> <div class="feature-content"> <div class="feature-title">Eternal Echo</div> <div class="feature-desc">A revolutionary AI system becomes sentient and forms an unexpected bond with its creator, leading to a profound exploration of consciousness.</div> <button class="feature-action">Watch Now</button> </div> </div> <h2>New Releases</h2> <div class="cards-container"> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1529310399831-ed472b81d589?q=80&w=1974&auto=format&fit=crop" alt="Nebula Drift"> <div class="card-content"> <div class="card-title">Nebula Drift</div> <div class="card-info"> <span>2023</span> <span>9.3 ★</span> </div> </div> </div> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1637858868799-7f26a0640eb6?q=80&w=1920&auto=format&fit=crop" alt="Digital Horizon"> <div class="card-content"> <div class="card-title">Digital Horizon</div> <div class="card-info"> <span>2023</span> <span>8.5 ★</span> </div> </div> </div> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1506157786151-b8491531f063?q=80&w=2070&auto=format&fit=crop" alt="Paradox Gate"> <div class="card-content"> <div class="card-title">Paradox Gate</div> <div class="card-info"> <span>2023</span> <span>8.9 ★</span> </div> </div> </div> </div> <h3 class="category-title">Award Winners</h3> <div class="cards-container"> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1498036882173-b41c28a8ba34?q=80&w=2064&auto=format&fit=crop" alt="Silent Echo"> <div class="card-content"> <div class="card-title">Silent Echo</div> <div class="card-info"> <span>2022</span> <span>9.6 ★</span> </div> </div> </div> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1509343256512-d77a5cb3791b?q=80&w=2070&auto=format&fit=crop" alt="Temporal Shift"> <div class="card-content"> <div class="card-title">Temporal Shift</div> <div class="card-info"> <span>2021</span> <span>9.2 ★</span> </div> </div> </div> <div class="card"> <img class="card-img" src="https://images.unsplash.com/photo-1518770660439-4636190af475?q=80&w=2070&auto=format&fit=crop" alt="Aurora Nexus"> <div class="card-content"> <div class="card-title">Aurora Nexus</div> <div class="card-info"> <span>2022</span> <span>8.8 ★</span> </div> </div> </div> </div> </section> <section id="reviews" class="section"> <h2>Latest Reviews</h2> <div class="review-card"> <div class="reviewer"> <img src="https://images.unsplash.com/photo-1508214751196-bcfd4ca60f91?q=80&w=2070&auto=format&fit=crop" alt="Sarah Chen" class="reviewer-img"> <div> <div class="reviewer-name">Sarah Chen</div> <div class="reviewer-meta">Verified Critic • 2 days ago</div> </div> </div> <div class="review-title">"Neon Shadows" is a visual masterpiece</div> <div class="review-content"> The cinematography is breathtaking, with vibrant neon-lit scenes that perfectly capture the dystopian atmosphere. The lead performances are compelling, particularly Zhang's portrayal of Detective Vance. While the plot occasionally meanders, the stunning visuals and atmospheric soundtrack more than compensate. A must-watch for cyberpunk enthusiasts. </div> <div class="rating"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.