Creating compelling text examples is essential for effective communication, whether you're designing a website, crafting an email, or writing a blog post. In this article, we will explore ten diverse text examples that can elevate your content.
From attention-grabbing headlines to persuasive calls to action, these examples will provide you with the inspiration and tools needed to enhance your writing. Let's dive in and discover how to make your text stand out.
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 easy for designers and developers to create pixel-perfect UI every time. Loved by professionals, Subframe ensures your text and design elements are always on point.
Start for free and experience the difference today!
CODE6
Here's the code:
CODETEXT6
CODE7
Here's the code:
CODETEXT7
CODE8
Here's the code:
CODETEXT8
CODE9
Here's the code:
CODETEXT9
CODE10
Here's the code:
CODETEXT10
Ready to elevate your UI design game? With Subframe, you can create pixel-perfect interfaces and stunning text elements 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>Corporate Dashboard</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif; } body { background-color: #ffffff; color: #333; height: 100vh; overflow: hidden; display: flex; flex-direction: column; } .dashboard-container { display: flex; height: 100%; width: 100%; max-width: 700px; max-height: 700px; margin: 0 auto; } .sidebar { width: 60px; background-color: #f8f9fa; height: 100%; padding: 20px 0; display: flex; flex-direction: column; align-items: center; border-right: 1px solid #eaeaea; transition: width 0.3s ease; overflow: hidden; z-index: 10; } .sidebar:hover { width: 180px; } .logo { color: #222; font-size: 24px; margin-bottom: 40px; font-weight: 700; display: flex; align-items: center; justify-content: center; width: 100%; } .logo span { margin-left: 15px; opacity: 0; transition: opacity 0.3s ease; white-space: nowrap; } .sidebar:hover .logo span, .sidebar:hover .nav-item span { opacity: 1; } .nav-item { display: flex; align-items: center; margin-bottom: 15px; cursor: pointer; padding: 10px 15px; border-radius: 8px; width: 85%; transition: all 0.2s ease; } .nav-item:hover { background-color: #f0f0f0; } .nav-item.active { background-color: #e9ecef; } .nav-item i { font-size: 18px; min-width: 30px; text-align: center; } .nav-item span { margin-left: 10px; opacity: 0; transition: opacity 0.3s ease; white-space: nowrap; } .content { flex: 1; padding: 25px; overflow-y: auto; position: relative; } .dashboard-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 30px; } .page-title { font-size: 28px; font-weight: 800; -webkit-text-stroke: 1px #000; letter-spacing: -0.5px; color: #222; position: relative; display: inline-block; } .page-title::after { content: ''; position: absolute; bottom: -8px; left: 0; width: 40px; height: 3px; background-color: #3a7bd5; border-radius: 2px; } .user-profile { display: flex; align-items: center; cursor: pointer; padding: 8px 12px; border-radius: 50px; transition: background-color 0.2s ease; } .user-profile:hover { background-color: #f5f5f5; } .user-avatar { width: 36px; height: 36px; border-radius: 50%; background-color: #3a7bd5; display: flex; align-items: center; justify-content: center; color: white; font-weight: 600; margin-right: 10px; } .user-name { font-weight: 500; font-size: 14px; } .overview-section { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin-bottom: 30px; } .metric-card { background-color: #fff; border-radius: 12px; padding: 20px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); transition: transform 0.3s ease, box-shadow 0.3s ease; cursor: pointer; position: relative; overflow: hidden; border: 1px solid #f0f0f0; } .metric-card:hover { transform: translateY(-5px); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1); } .metric-card::before { content: ''; position: absolute; top: 0; left: 0; width: 4px; height: 100%; background-color: #3a7bd5; opacity: 0; transition: opacity 0.3s ease; } .metric-card:hover::before { opacity: 1; } .metric-card h3 { font-size: 14px; font-weight: 600; margin-bottom: 15px; color: #555; } .metric-value { font-size: 28px; font-weight: 700; color: #222; -webkit-text-stroke: 0.5px #000; margin-bottom: 5px; } .metric-trend { display: flex; align-items: center; font-size: 12px; margin-top: 5px; } .metric-trend.positive { color: #28a745; } .metric-trend.negative { color: #dc3545; } .trend-icon { margin-right: 5px; } .charts-section { display: grid; grid-template-columns: 2fr 1fr; gap: 20px; margin-bottom: 30px; } .chart-card { background-color: #fff; border-radius: 12px; padding: 20px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); border: 1px solid #f0f0f0; height: 260px; position: relative; } .chart-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; } .chart-title { font-size: 16px; font-weight: 700; -webkit-text-stroke: 0.5px #000; color: #222; } .chart-action { display: flex; gap: 5px; } .chart-button { padding: 4px 8px; font-size: 12px; background-color: #f8f9fa; border: 1px solid #eaeaea; border-radius: 4px; cursor: pointer; transition: all 0.2s ease; } .chart-button:hover { background-color: #e9ecef; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); } .chart-button.active { background-color: #3a7bd5; color: white; border-color: #3a7bd5; } .chart-container { width: 100%; height: calc(100% - 40px); position: relative; } .donut-container { display: flex; height: 100%; align-items: center; justify-content: center; } .donut-chart { width: 140px; height: 140px; position: relative; } .donut-inner { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; } .donut-value { font-size: 24px; font-weight: 700; -webkit-text-stroke: 0.5px #000; color: #222; } .donut-label { font-size: 12px; color: #777; margin-top: 5px; } .donut-segments { display: flex; flex-direction: column; margin-left: 20px; gap: 10px; } .donut-segment { display: flex; align-items: center; } .segment-color { width: 12px; height: 12px; border-radius: 3px; margin-right: 8px; } .segment-name { font-size: 12px; color: #555; } .segment-value { margin-left: auto; font-weight: 600; font-size: 13px; } .footer-section { margin-top: auto; font-size: 12px; color: #999; text-align: center; padding: 10px 0; } /* Interactive hover glow effect */ .interactive { position: relative; cursor: pointer; } .interactive:hover::after { content: ''; position: absolute; top: -3px; left: -3px; right: -3px; bottom: -3px; background: radial-gradient(circle at center, rgba(58, 123, 213, 0.2), transparent 70%); border-radius: inherit; z-index: -1; opacity: 0; animation: glow 1s ease-in-out; } @keyframes glow { 0% { opacity: 0; transform: scale(0.9); } 50% { opacity: 0.5; } 100% { opacity: 0; transform: scale(1.1); } } /* Responsive styles */ @media (max-width: 576px) { .overview-section { grid-template-columns: 1fr; gap: 15px; } .charts-section { grid-template-columns: 1fr; } .sidebar { width: 50px; } .page-title { font-size: 22px; } .metric-value { font-size: 24px; } .chart-card { height: 220px; } } /* Animations */ @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .fade-in { animation: fadeIn 0.5s ease forwards; } .delay-1 { animation-delay: 0.1s; } .delay-2 { animation-delay: 0.2s; } .delay-3 { animation-delay: 0.3s; } .delay-4 { animation-delay: 0.4s; } .pulse { animation: pulse 2s infinite; } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } /* Custom progress bar styles */ .progress-bar { width: 100%; background-color: #f0f0f0; border-radius: 3px; height: 6px; margin-top: 5px; overflow: hidden; } .progress-fill { height: 100%; border-radius: 3px; transition: width 1s ease-in-out; } /* Interactive element with custom hover effect */ .hover-effect { transition: all 0.3s ease; position: relative; } .hover-effect:after { content: ''; position: absolute; width: 100%; transform: scaleX(0); height: 2px; bottom: -4px; left: 0; background-color: #3a7bd5; transform-origin: bottom right; transition: transform 0.3s ease-out; } .hover-effect:hover:after { transform: scaleX(1); transform-origin: bottom left; } </style> </head> <body> <div class="dashboard-container"> <div class="sidebar"> <div class="logo"> <i class="fas fa-analytics"></i> <span>NexusMetrics</span> </div> <div class="nav-item active"> <i class="fas fa-home"></i> <span>Dashboard</span> </div> <div class="nav-item"> <i class="fas fa-chart-line"></i> <span>Analytics</span> </div> <div class="nav-item"> <i class="fas fa-users"></i> <span>Customers</span> </div> <div class="nav-item"> <i class="fas fa-file-invoice-dollar"></i> <span>Revenue</span> </div> <div class="nav-item"> <i class="fas fa-cog"></i> <span>Settings</span> </div> </div> <div class="content"> <div class="dashboard-header"> <h1 class="page-title hover-effect">Executive Dashboard</h1> <div class="user-profile interactive"> <div class="user-avatar">JS</div> <div class="user-name">John Smith</div> </div> </div> <div class="overview-section"> <div class="metric-card interactive fade-in delay-1"> <h3>QUARTERLY REVENUE</h3> <div class="metric-value">$1.47M</div> <div class="metric-trend positive"> <span class="trend-icon">↑</span> 12.8% vs Q2 </div> </div> <div class="metric-card interactive fade-in delay-2"> <h3>ACTIVE USERS</h3> <div class="metric-value">24.3K</div> <div class="metric-trend positive"> <span class="trend-icon">↑</span> 8.4% vs last month </div> </div> <div class="metric-card interactive fade-in delay-3"> <h3>CUSTOMER ACQUISITION COST</h3> <div class="metric-value">$42.5</div> <div class="metric-trend negative"> <span class="trend-icon">↑</span> 4.2% vs target </div> </div> </div> <div class="charts-section"> <div class="chart-card fade-in delay-2"> <div class="chart-header"> <div class="chart-title hover-effect">Revenue Performance</div> <div class="chart-action"> <button class="chart-button">W</button> <button class="chart-button">M</button> <button class="chart-button active">Q</button> <button class="chart-button">Y</button> </div> </div> <div class="chart-container" id="revenue-chart"></div> </div> <div class="chart-card fade-in delay-3"> <div class="chart-header"> <div class="chart-title hover-effect">Revenue Source</div> </div> <div class="donut-container"> <div class="donut-chart" id="donut-chart"> <div class="donut-inner"> <div class="donut-value">$1.47M</div> <div class="donut-label">Total Revenue</div> </div> </div> <div class="donut-segments"> <div class="donut-segment"> <div class="segment-color" style="background-color: #3a7bd5;"></div> <div class="segment-name">Enterprise</div> <div class="segment-value">58%</div> </div> <div class="donut-segment"> <div class="segment-color" style="background-color: #00d2ff;"></div> <div class="segment-name">Mid-Market</div> <div class="segment-value">26%</div> </div> <div class="donut-segment"> <div class="segment-color" style="background-color: #f6d365;"></div> <div class="segment-name">SMB</div> <div class="segment-value">16%</div> </div> </div> </div> </div> </div> <div class="chart-card fade-in delay-4"> <div class="chart-header"> <div class="chart-title hover-effect">Target Achievement Progress</div> </div> <div style="margin-top: 20px;"> <div style="display: flex; justify-content: space-between; margin-bottom: 15px;"> <div> <div style="font-weight: 600; font-size: 14px;">Revenue</div> <div class="progress-bar"> <div class="progress-fill" id="revenue-progress" style="width: 0%; background-color: #3a7bd5;"></div> </div> <div style="display: flex; justify-content: space-between; font-size: 12px; margin-top: 4px;"> <span>$1.47M / $1.5M</span> <span>98%</span> </div> </div> <div> <div style="font-weight: 600; font-size: 14px;">New Customers</div> <div class="progress-bar"> <div class="progress-fill" id="customers-progress" style="width: 0%; background-color: #00d2ff;"></div> </div> <div style="display: flex; justify-content: space-between; font-size: 12px; margin-top: 4px;"> <span>312 / 350</span> <span>89%</span> </div> </div> <div> <div style="font-weight: 600; font-size: 14px;">Retention Rate</div> <div class="progress-bar"> <div class="progress-fill" id="retention-progress" style="width: 0%; background-color: #f6d365;"></div> </div> <div style="display: flex; justify-content: space-between; font-size: 12px; margin-top: 4px;"> <span>94% / 92%</span> <span>102%</span> </div> </div> </div> </div> </div> <div class="footer-section"> <p>Data refreshed: Today at 09:15 AM • Q3 2023 Reporting Period</p> </div> </div> </div> <script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script> document.addEventListener("DOMContentLoaded", function() { // Simulate loading progress bars setTimeout(() => { document.getElementById('revenue-progress').style.width = '98%'; document.getElementById('customers-progress').style.width = '89%'; document.getElementById('retention-progress').style.width = '102%'; }, 300); // Add interactive effects const interactiveElements = document.querySelectorAll('.interactive'); interactiveElements.forEach(el => { el.addEventListener('click', function() { this.classList.add('pulse'); setTimeout(() => { this.classList.remove('pulse'); }, 2000); }); }); // Set up Revenue Performance Chart const ctx = document.createElement('canvas'); document.getElementById('revenue-chart').appendChild(ctx); // Dummy revenue data const revenueLabels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']; const revenueData = [980, 1120, 1340, 1200, 1450, 1320, 1400, 1560, 1470]; const targetData = [1000, 1050, 1100, 1150, 1200, 1250, 1300, 1400, 1500]; // Create chart new Chart(ctx, { type: 'line', data: { labels: revenueLabels, datasets: [ { label: 'Actual Revenue ($K)', data: revenueData, borderColor: '#3a7bd5', backgroundColor: 'rgba(58, 123, 213, 0.1)', fill: true, tension: 0.4, borderWidth: 2, pointRadius: 3, pointBackgroundColor: '#fff', pointBorderColor: '#3a7bd5', pointBorderWidth: 2 }, { label: 'Target ($K)', data: targetData, borderColor: 'rgba(220, 53, 69, 0.5)', borderWidth: 2, borderDash: [5, 5], fill: false, tension: 0.4, pointRadius: 0 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: true, position: 'top', labels: { boxWidth: 12, font: { size: 11 } } } }, scales: { y: { beginAtZero: false, min: 800, ticks: { callback: function(value) { return '$' + value; }, font: { size: 10 } }, grid: { color: 'rgba(0, 0, 0, 0.05)' } }, x: { grid: { display: false }, ticks: { font: { size: 10 } } } } } }); // Setup Donut Chart const donutCanvas = document.createElement('canvas'); document.getElementById('donut-chart').insertBefore(donutCanvas, document.querySelector('.donut-inner')); new Chart(donutCanvas, { type: 'doughnut', data: { labels: ['Enterprise', 'Mid-Market', 'SMB'], datasets: [{ data: [58, 26, 16], backgroundColor: ['#3a7bd5', '#00d2ff', '#f6d365'], borderWidth: 0 }] }, options: { responsive: true, maintainAspectRatio: true, cutout: '75%', plugins: { legend: { display: false }, tooltip: { callbacks: { label: function(context) { return `${context.label}: ${context.raw}%`; } } } } } }); // Navigation item click effect const navItems = document.querySelectorAll('.nav-item'); navItems.forEach(item => { item.addEventListener('click', function() { navItems.forEach(nav => nav.classList.remove('active')); this.classList.add('active'); }); }); // Button click effect const chartButtons = document.querySelectorAll('.chart-button'); chartButtons.forEach(button => { button.addEventListener('click', function() { chartButtons.forEach(btn => btn.classList.remove('active')); this.classList.add('active'); }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Serene Living | Lifestyle Blog</title> <style> @import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@300;400;500;600;700&family=Lato:wght@300;400;700&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } :root { --primary-color: #f5e6e8; --secondary-color: #d5c6e0; --tertiary-color: #aaa1c8; --text-color: #444; --stroke-color: rgba(213, 198, 224, 0.7); --heading-font: 'Cormorant Garamond', serif; --body-font: 'Lato', sans-serif; } body { font-family: var(--body-font); color: var(--text-color); line-height: 1.6; background-color: #fff; overflow-x: hidden; max-width: 700px; margin: 0 auto; height: 100%; position: relative; } .container { width: 100%; padding: 20px; height: 700px; overflow-y: auto; scroll-behavior: smooth; scrollbar-width: thin; scrollbar-color: var(--tertiary-color) #fff; } .container::-webkit-scrollbar { width: 6px; } .container::-webkit-scrollbar-track { background: #fff; } .container::-webkit-scrollbar-thumb { background-color: var(--tertiary-color); border-radius: 10px; } header { text-align: center; padding: 20px 0 40px; position: relative; } .logo { font-family: var(--heading-font); font-size: 32px; font-weight: 700; margin-bottom: 10px; letter-spacing: 1px; position: relative; display: inline-block; color: var(--tertiary-color); } .logo::after { content: ""; position: absolute; width: 50px; height: 2px; background-color: var(--secondary-color); bottom: -5px; left: 50%; transform: translateX(-50%); } nav ul { display: flex; justify-content: center; list-style: none; margin-top: 20px; flex-wrap: wrap; } nav li { margin: 0 15px 10px; } nav a { text-decoration: none; color: var(--text-color); font-size: 14px; letter-spacing: 1px; text-transform: uppercase; position: relative; transition: all 0.3s ease; } nav a::after { content: ""; position: absolute; width: 0; height: 1px; background-color: var(--tertiary-color); bottom: -2px; left: 0; transition: width 0.3s ease; } nav a:hover { color: var(--tertiary-color); } nav a:hover::after { width: 100%; } .main-content { padding: 20px 0; } article { margin-bottom: 60px; opacity: 0; transform: translateY(20px); transition: opacity 0.8s ease, transform 0.8s ease; } article.visible { opacity: 1; transform: translateY(0); } h1, h2, h3 { font-family: var(--heading-font); margin-bottom: 20px; position: relative; display: inline-block; } h1 { font-size: 38px; -webkit-text-stroke: 1px var(--stroke-color); text-stroke: 1px var(--stroke-color); color: transparent; background-clip: text; -webkit-background-clip: text; background-image: linear-gradient(to right, var(--tertiary-color), var(--secondary-color)); transition: all 0.5s ease; } h2 { font-size: 28px; -webkit-text-stroke: 0.8px var(--stroke-color); text-stroke: 0.8px var(--stroke-color); color: transparent; background-clip: text; -webkit-background-clip: text; background-image: linear-gradient(to right, var(--tertiary-color), var(--secondary-color)); transition: all 0.5s ease; } h3 { font-size: 22px; color: var(--tertiary-color); transition: all 0.5s ease; } h1.enhanced, h2.enhanced { -webkit-text-stroke: 1.5px var(--stroke-color); text-stroke: 1.5px var(--stroke-color); } p { margin-bottom: 20px; font-size: 16px; line-height: 1.8; } .post-meta { font-size: 14px; color: #888; margin-bottom: 15px; font-style: italic; } .tags { display: flex; flex-wrap: wrap; margin-top: 20px; } .tag { background-color: var(--primary-color); color: var(--text-color); padding: 4px 12px; border-radius: 20px; font-size: 12px; margin-right: 8px; margin-bottom: 8px; transition: all 0.3s ease; } .tag:hover { background-color: var(--secondary-color); transform: translateY(-2px); } .featured-image { width: 100%; height: 250px; object-fit: cover; border-radius: 8px; margin-bottom: 20px; transition: transform 0.3s ease; } .featured-image:hover { transform: scale(1.02); } .newsletter { background-color: var(--primary-color); padding: 30px; border-radius: 8px; margin: 40px 0; text-align: center; } .newsletter h3 { color: var(--text-color); margin-bottom: 15px; } .newsletter-form { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-top: 20px; } .newsletter-form input { padding: 10px 15px; border: 1px solid var(--secondary-color); border-radius: 4px; font-family: var(--body-font); flex: 1; min-width: 200px; } .newsletter-form input:focus { outline: none; border-color: var(--tertiary-color); } .btn { background-color: var(--tertiary-color); color: white; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer; font-family: var(--body-font); transition: all 0.3s ease; } .btn:hover { background-color: #9590b4; transform: translateY(-2px); } .social-links { display: flex; justify-content: center; margin-top: 30px; gap: 20px; } .social-icon { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; background-color: var(--primary-color); border-radius: 50%; transition: all 0.3s ease; } .social-icon:hover { background-color: var(--secondary-color); transform: translateY(-3px); } .social-icon i { font-size: 18px; color: var(--text-color); } footer { text-align: center; padding: 30px 0; margin-top: 30px; border-top: 1px solid var(--primary-color); font-size: 14px; color: #888; } .reading-progress { position: fixed; top: 0; left: 0; width: 0%; height: 3px; background: linear-gradient(to right, var(--secondary-color), var(--tertiary-color)); z-index: 1000; transition: width 0.1s ease; } @media (max-width: 600px) { .logo { font-size: 28px; } h1 { font-size: 30px; } h2 { font-size: 24px; } h3 { font-size: 20px; } .featured-image { height: 200px; } .newsletter { padding: 20px; } nav ul { flex-direction: row; flex-wrap: wrap; } nav li { margin: 0 10px 8px; } } /* Floating element animation */ .floating-element { position: absolute; width: 100px; height: 100px; background-color: rgba(245, 230, 232, 0.3); border-radius: 50%; pointer-events: none; z-index: -1; animation: float 15s infinite ease-in-out; } .floating-element:nth-child(2) { width: 60px; height: 60px; background-color: rgba(213, 198, 224, 0.3); animation-delay: 2s; animation-duration: 18s; right: 10%; top: 30%; } .floating-element:nth-child(3) { width: 80px; height: 80px; background-color: rgba(170, 161, 200, 0.2); animation-delay: 5s; animation-duration: 12s; left: 15%; top: 60%; } @keyframes float { 0% { transform: translate(0, 0) rotate(0deg); } 25% { transform: translate(20px, 30px) rotate(5deg); } 50% { transform: translate(10px, -20px) rotate(10deg); } 75% { transform: translate(-20px, 10px) rotate(5deg); } 100% { transform: translate(0, 0) rotate(0deg); } } /* Quote styling */ blockquote { border-left: 3px solid var(--secondary-color); padding-left: 20px; margin: 30px 0; font-style: italic; color: #666; position: relative; } blockquote::before { content: """; font-size: 60px; font-family: var(--heading-font); color: var(--primary-color); position: absolute; left: -15px; top: -20px; z-index: -1; } </style> </head> <body> <div class="reading-progress"></div> <div class="container"> <div class="floating-element"></div> <div class="floating-element"></div> <div class="floating-element"></div> <header> <div class="logo">Serene Living</div> <nav> <ul> <li><a href="#home">Home</a></li> <li><a href="#lifestyle">Lifestyle</a></li> <li><a href="#wellness">Wellness</a></li> <li><a href="#home">Home Decor</a></li> <li><a href="#about">About</a></li> </ul> </nav> </header> <div class="main-content"> <article> <h1>Creating Calm in Everyday Spaces</h1> <div class="post-meta">May 15, 2023 • 8 min read • By Olivia Bennett</div> <img src="https://images.unsplash.com/photo-1565182999561-18d7dc61c393?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80" alt="Calm living space with natural light" class="featured-image"> <p>In today's fast-paced world, our homes should serve as sanctuaries from external chaos. The subtle art of creating calm isn't about extravagant renovations or following passing trends—it's about intentional choices that align with your authentic self.</p> <h2>The Gentle Power of Natural Light</h2> <p>Light isn't just functional; it's transformative. Consider how morning light streams through sheer curtains or how afternoon shadows create natural patterns across your walls. These ephemeral moments connect us to nature's rhythm and ground us in the present.</p> <p>When arranging your space, pay attention to how natural light travels throughout the day. Position reading nooks and meditation corners to capture gentle morning light, while creating cozy evening spaces with warm, dimmable lamps that mimic sunset's glow.</p> <blockquote> Light is the magical ingredient that makes or breaks a space; it forms the mood and essence of a home's atmosphere. </blockquote> <h3>Practical Ways to Enhance Natural Light</h3> <p>Replace heavy drapes with lightweight fabrics that filter rather than block light. Consider reflective surfaces like vintage mirrors or metallic accents to bounce light into darker corners. Even small changes—like relocating a houseplant that's blocking a window—can dramatically shift your space's energy.</p> <div class="tags"> <span class="tag">Mindful Living</span> <span class="tag">Natural Light</span> <span class="tag">Home Design</span> <span class="tag">Wellbeing</span> </div> </article> <article> <h2>Cultivating Morning Rituals for Centered Days</h2> <div class="post-meta">April 28, 2023 • 6 min read • By Olivia Bennett</div> <img src="https://images.unsplash.com/photo-1510784722307-15c2606ea770?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80" alt="Morning tea ritual by window" class="featured-image"> <p>The first moments after waking set the tone for everything that follows. By creating intentional morning practices, we establish a foundation of calm that carries us through inevitable daily challenges.</p> <p>Rather than reaching for your phone and immediately diving into others' needs and news, consider giving yourself the gift of ten dedicated minutes. This small yet significant boundary protects your emotional energy and creates space for self-connection.</p> <h3>A Morning Sequence Worth Trying</h3> <p>Begin with three deep breaths while still lying in bed, acknowledging the transition from sleep to wakefulness. Move to a dedicated corner where you've prepared the previous evening—perhaps with a journal, a special mug, or a small vase of fresh flowers. The ritual items themselves matter less than the consistency they represent.</p> <p>As you sip your chosen morning beverage, practice noticing—the changing quality of light, the temperature of your drink, the subtle movements of your breath. This simple awareness practice trains your brain to return to the present throughout your day.</p> <div class="tags"> <span class="tag">Morning Rituals</span> <span class="tag">Mindfulness</span> <span class="tag">Daily Practice</span> <span class="tag">Wellness</span> </div> </article> <div class="newsletter"> <h3>Join Our Gentle Journey</h3> <p>Receive thoughtful essays on creating meaningful rhythms in everyday life, delivered monthly to your inbox.</p> <form class="newsletter-form"> <input type="email" placeholder="Your email address" required> <button type="button" class="btn">Subscribe</button> </form> </div> <article> <h2>The Subtle Art of Seasonal Living</h2> <div class="post-meta">March 12, 2023 • 7 min read • By Olivia Bennett</div> <img src="https://images.unsplash.com/photo-1611843467160-25afb8df1074?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80" alt="Seasonal table setting with spring flowers" class="featured-image"> <p>Before calendars and digital schedules dominated our lives, humans lived in harmony with seasonal rhythms. There's profound wisdom in reconnecting with these natural cycles—allowing our homes, habits, and hearts to shift with the turning year.</p> <p>Rather than fighting against seasonal change, consider embracing it. Let your home reflect nature's current expression, whether through foraged branches in spring, open windows in summer, warm textiles in autumn, or candlelight in winter.</p> <h3>Creating a Seasonal Corner</h3> <p>Designate a small area of your home—perhaps a shelf, windowsill, or corner of your dining table—as a seasonal altar of sorts. This becomes a visual reminder of time's passage and nature's gifts. Rotate simple elements monthly: spring wildflowers, summer seashells, autumn leaves, winter evergreens.</p> <p>This practice encourages mindful collecting during outdoor walks and creates a beautiful conversation piece that connects you and your visitors to the world outside your walls.</p> <div class="tags"> <span class="tag">Seasonal Living</span> <span class="tag">Nature Connection</span> <span class="tag">Home Styling</span> <span class="tag">Slow Living</span> </div> </article> </div> <footer> <div class="social-links"> <a href="#" class="social-icon"><i>♥</i></a> <a href="#" class="social-icon"><i>✉</i></a> <a href="#" class="social-icon"><i>♠</i></a> </div> <p>© 2023 Serene Living • All rights reserved</p> </footer> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Initialize articles to visible on page load const articles = document.querySelectorAll('article'); articles.forEach(article => { setTimeout(() => { article.classList.add('visible'); }, 200); }); // Reading progress indicator const container = document.querySelector('.container'); const progressBar = document.querySelector('.reading-progress'); container.addEventListener('scroll', function() { const scrollTop = container.scrollTop; const scrollHeight = container.scrollHeight - container.clientHeight; const scrollPercentage = (scrollTop / scrollHeight) * 100; progressBar.style.width = scrollPercentage + '%'; // Check for headings in viewport and enhance text-stroke const headings = document.querySelectorAll('h1, h2'); headings.forEach(heading => { const rect = heading.getBoundingClientRect(); const isInViewport = rect.top >= 0 && rect.bottom <= window.innerHeight; if (isInViewport) { heading.classList.add('enhanced'); } else { heading.classList.remove('enhanced'); } }); }); // Prevent form submission const form = document.querySelector('form'); form.addEventListener('submit', function(e) { e.preventDefault(); }); // Button click animation const btn = document.querySelector('.btn'); btn.addEventListener('click', function() { const input = document.querySelector('input[type="email"]'); if (input.value) { this.textContent = 'Thank You!'; input.value = ''; setTimeout(() => { this.textContent = 'Subscribe'; }, 2000); } }); // Create interactive effect with floating elements const floatingElements = document.querySelectorAll('.floating-element'); container.addEventListener('mousemove', function(e) { const x = e.clientX / container.offsetWidth; const y = e.clientY / container.offsetHeight; floatingElements.forEach((element, index) => { const factor = (index + 1) * 10; element.style.transform = `translate(${x * factor - factor/2}px, ${y * factor - factor/2}px) rotate(${x * y * 20}deg)`; }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Ceremonial Event Invitation Platform</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Cormorant Garamond', serif; } @import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@300;400;500;600;700&family=Montserrat:wght@300;400;500;600&display=swap'); body { background: linear-gradient(135deg, #f5f5f5, #e9e9e9); display: flex; justify-content: center; align-items: center; min-height: 700px; width: 100%; overflow-x: hidden; color: #333; padding: 20px; } .container { width: 100%; max-width: 680px; height: 660px; background-color: #fff; border-radius: 12px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); overflow: hidden; position: relative; } .header { padding: 30px 40px 20px; text-align: center; background: linear-gradient(to right, #f8f8f8, #ffffff); border-bottom: 1px solid rgba(0, 0, 0, 0.05); position: relative; } .ceremonial-title { color: transparent; -webkit-text-stroke: 1px #b8a07e; font-size: 2.8rem; letter-spacing: 1px; margin-bottom: 10px; text-transform: uppercase; font-weight: 600; transform: translateY(-5px); opacity: 0; animation: fadeUp 0.8s forwards 0.2s; text-shadow: 2px 2px 4px rgba(184, 160, 126, 0.2); transition: all 0.3s ease; } .ceremonial-title:hover { -webkit-text-stroke: 1px #d4b78f; text-shadow: 3px 3px 6px rgba(184, 160, 126, 0.3); letter-spacing: 1.5px; } .subtitle { font-family: 'Montserrat', sans-serif; font-size: 0.95rem; color: #666; font-weight: 300; margin-bottom: 20px; transform: translateY(-5px); opacity: 0; animation: fadeUp 0.8s forwards 0.4s; } .content { padding: 30px 40px; height: calc(100% - 130px); overflow-y: auto; position: relative; } .invitation-tabs { display: flex; margin-bottom: 25px; position: relative; border-bottom: 1px solid rgba(0, 0, 0, 0.07); padding-bottom: 10px; transform: translateY(-5px); opacity: 0; animation: fadeUp 0.8s forwards 0.6s; } .tab { padding: 8px 15px; cursor: pointer; font-family: 'Montserrat', sans-serif; font-size: 0.85rem; color: #888; position: relative; transition: all 0.3s ease; } .tab.active { color: #b8a07e; font-weight: 500; } .tab-indicator { position: absolute; bottom: -10px; height: 2px; background: linear-gradient(to right, #b8a07e, #d4b78f); transition: all 0.3s ease; } .invitation-forms { position: relative; height: calc(100% - 50px); } .form { position: absolute; width: 100%; height: 100%; opacity: 0; pointer-events: none; transition: all 0.4s ease; transform: translateX(20px); } .form.active { opacity: 1; pointer-events: all; transform: translateX(0); } .form-group { margin-bottom: 20px; opacity: 0; transform: translateY(10px); } .form.active .form-group { animation: fadeUp 0.5s forwards; } .form.active .form-group:nth-child(1) { animation-delay: 0.1s; } .form.active .form-group:nth-child(2) { animation-delay: 0.2s; } .form.active .form-group:nth-child(3) { animation-delay: 0.3s; } .form.active .form-group:nth-child(4) { animation-delay: 0.4s; } .form.active .form-group:nth-child(5) { animation-delay: 0.5s; } label { display: block; font-family: 'Montserrat', sans-serif; font-size: 0.85rem; margin-bottom: 8px; color: #666; } input, select, textarea { width: 100%; padding: 12px 15px; border: 1px solid rgba(0, 0, 0, 0.1); border-radius: 6px; font-family: 'Montserrat', sans-serif; font-size: 0.9rem; transition: all 0.3s ease; background-color: #f9f9f9; } input:focus, select:focus, textarea:focus { outline: none; border-color: #b8a07e; box-shadow: 0 0 0 3px rgba(184, 160, 126, 0.1); background-color: #fff; } textarea { resize: none; height: 100px; } .color-options { display: flex; gap: 10px; margin-top: 10px; } .color-option { width: 25px; height: 25px; border-radius: 50%; cursor: pointer; position: relative; transition: all 0.3s ease; } .color-option:hover { transform: scale(1.1); } .color-option.selected::after { content: ''; position: absolute; width: 35px; height: 35px; border: 2px solid #b8a07e; border-radius: 50%; top: -5px; left: -5px; } .gold { background: linear-gradient(135deg, #d4b78f, #b8a07e); } .silver { background: linear-gradient(135deg, #e0e0e0, #c0c0c0); } .rose-gold { background: linear-gradient(135deg, #e7c6c6, #dba8a8); } .sapphire { background: linear-gradient(135deg, #5b7fb1, #3a5f9c); } .btn { padding: 12px 25px; background: linear-gradient(to right, #b8a07e, #d4b78f); color: white; border: none; border-radius: 6px; font-family: 'Montserrat', sans-serif; font-weight: 500; font-size: 0.9rem; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 3px 10px rgba(184, 160, 126, 0.2); position: relative; overflow: hidden; } .btn:hover { box-shadow: 0 5px 15px rgba(184, 160, 126, 0.3); transform: translateY(-2px); } .btn::after { content: ''; position: absolute; width: 30px; height: 100%; top: 0; left: -100px; background: linear-gradient(to right, transparent, rgba(255, 255, 255, 0.4), transparent); transform: skewX(-25deg); transition: all 0.5s ease; } .btn:hover::after { left: 100%; } .templates-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; margin-top: 10px; } .template { border-radius: 8px; overflow: hidden; box-shadow: 0 3px 10px rgba(0, 0, 0, 0.05); transition: all 0.3s ease; cursor: pointer; position: relative; } .template img { width: 100%; height: 120px; object-fit: cover; transition: all 0.3s ease; } .template-name { padding: 10px; font-size: 0.85rem; text-align: center; font-family: 'Montserrat', sans-serif; background: #f9f9f9; } .template:hover { transform: translateY(-3px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); } .template:hover img { filter: brightness(1.05); } .template.selected { box-shadow: 0 0 0 2px #b8a07e; } .template.selected::after { content: '✓'; position: absolute; top: 5px; right: 5px; width: 20px; height: 20px; background: #b8a07e; color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.7rem; } .preview-card { width: 100%; height: 150px; background: linear-gradient(135deg, #fafafa, #f3f3f3); border-radius: 8px; display: flex; align-items: center; justify-content: center; position: relative; overflow: hidden; margin-bottom: 20px; border: 1px dashed rgba(0, 0, 0, 0.1); } .preview-header { color: transparent; -webkit-text-stroke: 1px var(--accent-color, #b8a07e); font-size: 1.8rem; letter-spacing: 1px; text-transform: uppercase; text-shadow: 2px 2px 4px rgba(var(--accent-rgb, 184, 160, 126), 0.2); } .preview-subtext { position: absolute; bottom: 20px; font-size: 0.85rem; color: #888; font-family: 'Montserrat', sans-serif; } .preview-decoration { position: absolute; width: 100px; height: 100px; border: 1px solid var(--accent-color, #b8a07e); border-radius: 50%; opacity: 0.1; } .preview-decoration:nth-child(1) { top: -50px; left: -50px; } .preview-decoration:nth-child(2) { bottom: -60px; right: -60px; width: 120px; height: 120px; } .success-message { position: fixed; top: 20px; left: 50%; transform: translateX(-50%) translateY(-100px); background: #4caf50; color: white; padding: 15px 25px; border-radius: 6px; font-family: 'Montserrat', sans-serif; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); z-index: 1000; transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275); } .success-message.show { transform: translateX(-50%) translateY(0); } /* Decorative elements */ .decoration { position: absolute; background: linear-gradient(135deg, #b8a07e, #d4b78f); opacity: 0.05; border-radius: 50%; z-index: 0; } .decoration:nth-child(1) { width: 150px; height: 150px; top: -75px; left: -75px; } .decoration:nth-child(2) { width: 100px; height: 100px; bottom: 50px; right: -50px; } @keyframes fadeUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* Responsive Styles */ @media (max-width: 600px) { .ceremonial-title { font-size: 2.2rem; } .subtitle { font-size: 0.85rem; } .header, .content { padding: 20px; } .templates-grid { grid-template-columns: 1fr; } } /* Scrollbar styling */ .content::-webkit-scrollbar { width: 5px; } .content::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0.05); border-radius: 10px; } .content::-webkit-scrollbar-thumb { background: rgba(184, 160, 126, 0.3); border-radius: 10px; } .content::-webkit-scrollbar-thumb:hover { background: rgba(184, 160, 126, 0.5); } </style> </head> <body> <div class="container"> <div class="decoration"></div> <div class="decoration"></div> <div class="header"> <h1 class="ceremonial-title">Graceful Invites</h1> <p class="subtitle">Create exquisite invitations with delicate metallic touches</p> </div> <div class="content"> <div class="invitation-tabs"> <div class="tab active" data-tab="details">Event Details</div> <div class="tab" data-tab="design">Design Options</div> <div class="tab" data-tab="preview">Preview</div> <div class="tab-indicator"></div> </div> <div class="invitation-forms"> <!-- Event Details Tab --> <div class="form active" id="details-form"> <div class="form-group"> <label for="event-title">Event Title</label> <input type="text" id="event-title" placeholder="e.g. Annual Gala Dinner" value="Annual Charity Gala"> </div> <div class="form-group"> <label for="event-date">Event Date & Time</label> <input type="text" id="event-date" placeholder="e.g. September 15, 2023 at 7:00 PM" value="October 21, 2023 at 7:00 PM"> </div> <div class="form-group"> <label for="event-location">Event Location</label> <input type="text" id="event-location" placeholder="e.g. Grand Ballroom, Ritz Carlton" value="The Belvedere Ballroom, Westfield Hotel"> </div> <div class="form-group"> <label for="event-description">Event Description</label> <textarea id="event-description" placeholder="Enter event details, dress code, etc.">Join us for an elegant evening of fine dining and philanthropy as we raise funds for children's education. Black tie attire. RSVP required.</textarea> </div> <div class="form-group"> <button class="btn next-btn" data-next="design">Continue to Design Options</button> </div> </div> <!-- Design Options Tab --> <div class="form" id="design-form"> <div class="form-group"> <label>Select Accent Color</label> <div class="color-options"> <div class="color-option gold selected" data-color="#b8a07e" data-rgb="184, 160, 126"></div> <div class="color-option silver" data-color="#c0c0c0" data-rgb="192, 192, 192"></div> <div class="color-option rose-gold" data-color="#dba8a8" data-rgb="219, 168, 168"></div> <div class="color-option sapphire" data-color="#3a5f9c" data-rgb="58, 95, 156"></div> </div> </div> <div class="form-group"> <label>Select Template Style</label> <div class="templates-grid"> <div class="template selected" data-template="elegance"> <img src="https://images.unsplash.com/photo-1492684223066-81342ee5ff30?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Elegance template"> <div class="template-name">Elegance</div> </div> <div class="template" data-template="minimalist"> <img src="https://images.unsplash.com/photo-1515169067868-5387ec356754?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Minimalist template"> <div class="template-name">Minimalist</div> </div> <div class="template" data-template="floral"> <img src="https://images.unsplash.com/photo-1522748906645-95d8adfd52c7?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Floral template"> <div class="template-name">Floral</div> </div> <div class="template" data-template="geometric"> <img src="https://images.unsplash.com/photo-1559304822-9eb2813c9844?ixlib=rb-1.2.1&auto=format&fit=crop&w=400&q=80" alt="Geometric template"> <div class="template-name">Geometric</div> </div> </div> </div> <div class="form-group"> <div class="button-group" style="display: flex; gap: 10px;"> <button class="btn prev-btn" data-prev="details" style="background: #eaeaea; color: #666; box-shadow: none; flex: 1;">Back</button> <button class="btn next-btn" data-next="preview" style="flex: 2;">Preview Invitation</button> </div> </div> </div> <!-- Preview Tab --> <div class="form" id="preview-form"> <div class="form-group"> <div class="preview-card"> <div class="preview-decoration"></div> <div class="preview-decoration"></div> <h2 class="preview-header">Annual Charity Gala</h2> <p class="preview-subtext">October 21, 2023 • Westfield Hotel</p> </div> </div> <div class="form-group"> <label>Recipient Email Addresses</label> <textarea id="recipient-emails" placeholder="Enter email addresses separated by commas"></textarea> </div> <div class="form-group"> <label>Personal Message (Optional)</label> <textarea id="personal-message" placeholder="Add a personal message to your invitation"></textarea> </div> <div class="form-group"> <div class="button-group" style="display: flex; gap: 10px;"> <button class="btn prev-btn" data-prev="design" style="background: #eaeaea; color: #666; box-shadow: none; flex: 1;">Back</button> <button class="btn send-btn" style="flex: 2;">Send Invitations</button> </div> </div> </div> </div> </div> </div> <div class="success-message" id="success-message">Invitations sent successfully!</div> <script> document.addEventListener('DOMContentLoaded', function() { // Tab Navigation const tabs = document.querySelectorAll('.tab'); const forms = document.querySelectorAll('.form'); const tabIndicator = document.querySelector('.tab-indicator'); // Set initial tab indicator position const activeTab = document.querySelector('.tab.active'); tabIndicator.style.width = `${activeTab.offsetWidth}px`; tabIndicator.style.left = `${activeTab.offsetLeft}px`; tabs.forEach(tab => { tab.addEventListener('click', function() { const tabId = this.getAttribute('data-tab'); // Update active tab tabs.forEach(t => t.classList.remove('active')); this.classList.add('active'); // Update tab indicator tabIndicator.style.width = `${this.offsetWidth}px`; tabIndicator.style.left = `${this.offsetLeft}px`; // Show corresponding form forms.forEach(form => form.classList.remove('active')); document.getElementById(`${tabId}-form`).classList.add('active'); }); }); // Next and Previous buttons const nextButtons = document.querySelectorAll('.next-btn'); const prevButtons = document.querySelectorAll('.prev-btn'); nextButtons.forEach(button => { button.addEventListener('click', function() { const nextTab = this.getAttribute('data-next'); document.querySelector(`.tab[data-tab="${nextTab}"]`).click(); }); }); prevButtons.forEach(button => { button.addEventListener('click', function() { const prevTab = this.getAttribute('data-prev'); document.querySelector(`.tab[data-tab="${prevTab}"]`).click(); }); }); // Color Options const colorOptions = document.querySelectorAll('.color-option'); const previewCard = document.querySelector('.preview-card'); const previewHeader = document.querySelector('.preview-header'); colorOptions.forEach(option => { option.addEventListener('click', function() { // Remove selected class from all options colorOptions.forEach(opt => opt.classList.remove('selected')); // Add selected class to clicked option this.classList.add('selected'); // Update preview colors const color = this.getAttribute('data-color'); const rgb = this.getAttribute('data-rgb'); document.documentElement.style.setProperty('--accent-color', color); document.documentElement.style.setProperty('--accent-rgb', rgb); }); }); // Template Selection const templates = document.querySelectorAll('.template'); templates.forEach(template => { template.addEventListener('click', function() { templates.forEach(t => t.classList.remove('selected')); this.classList.add('selected'); }); }); // Preview Updates const eventTitle = document.getElementById('event-title'); const eventDate = document.getElementById('event-date'); const eventLocation = document.getElementById('event-location'); function updatePreview() { const titleText = eventTitle.value || 'Your Event Title'; const dateText = eventDate.value ? eventDate.value.split(' at')[0] : 'Date'; const locationText = eventLocation.value ? eventLocation.value.split(',')[0] : 'Location'; previewHeader.textContent = titleText; document.querySelector('.preview-subtext').textContent = `${dateText} • ${locationText}`; } eventTitle.addEventListener('input', updatePreview); eventDate.addEventListener('input', updatePreview); eventLocation.addEventListener('input', updatePreview); // Send Button const sendButton = document.querySelector('.send-btn'); const successMessage = document.getElementById('success-message'); sendButton.addEventListener('click', function() { successMessage.classList.add('show'); setTimeout(() => { successMessage.classList.remove('show'); }, 3000); }); // Input animation const inputs = document.querySelectorAll('input, textarea, select'); inputs.forEach(input => { input.addEventListener('focus', function() { this.parentElement.classList.add('focused'); }); input.addEventListener('blur', function() { this.parentElement.classList.remove('focused'); }); }); // Initialize preview updatePreview(); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>MONO | Premium Minimalist Home Goods</title> <style> :root { --primary-color: #121212; --bg-color: #f8f8f8; --accent-color: #FF4E50; --secondary-accent: #7BE0AD; --tertiary-accent: #5D9CEC; --text-color: #333; --stroke-width: 1px; --stroke-color: rgba(0, 0, 0, 0.7); --transition-speed: 0.3s; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Helvetica Neue', Arial, sans-serif; } body { background-color: var(--bg-color); color: var(--text-color); height: 100%; overflow-x: hidden; width: 100%; position: relative; } .container { max-width: 700px; margin: 0 auto; padding: 1.5rem; height: 700px; overflow-y: auto; scrollbar-width: none; } .container::-webkit-scrollbar { display: none; } header { padding: 1rem 0; display: flex; justify-content: space-between; align-items: center; position: sticky; top: 0; background-color: var(--bg-color); z-index: 100; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } .logo { font-size: 1.8rem; font-weight: 800; letter-spacing: -1px; color: var(--primary-color); } .nav-icons { display: flex; gap: 1.2rem; } .nav-icon { width: 24px; height: 24px; cursor: pointer; position: relative; transition: all var(--transition-speed) ease; } .nav-icon:hover { transform: scale(1.1); } .cart-count { position: absolute; top: -8px; right: -8px; background-color: var(--accent-color); color: white; border-radius: 50%; width: 18px; height: 18px; font-size: 0.7rem; display: flex; align-items: center; justify-content: center; font-weight: bold; } .filter-bar { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 1.5rem 0; } .filter-button { background-color: white; border: 1px solid rgba(0, 0, 0, 0.1); border-radius: 20px; padding: 0.4rem 1rem; font-size: 0.85rem; cursor: pointer; transition: all var(--transition-speed) ease; } .filter-button:hover, .filter-button.active { background-color: var(--primary-color); color: white; } .product-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; margin-bottom: 2rem; } .product-card { background-color: white; border-radius: 12px; overflow: hidden; box-shadow: 0 2px 15px rgba(0, 0, 0, 0.05); transition: all var(--transition-speed) ease; cursor: pointer; position: relative; } .product-card:hover { transform: translateY(-5px); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); } .product-image { width: 100%; height: 180px; object-fit: cover; transition: all 0.6s ease; } .product-card:hover .product-image { transform: scale(1.05); } .product-details { padding: 1rem; } h2 { font-size: 1.2rem; margin-bottom: 0.4rem; font-weight: 600; -webkit-text-stroke: var(--stroke-width) var(--stroke-color); color: transparent; transition: all var(--transition-speed) ease; } .product-card:hover h2 { color: var(--accent-color); -webkit-text-stroke: 0.5px rgba(255, 78, 80, 0.3); } .product-card:nth-child(3n):hover h2 { color: var(--secondary-accent); -webkit-text-stroke: 0.5px rgba(123, 224, 173, 0.3); } .product-card:nth-child(3n+1):hover h2 { color: var(--tertiary-accent); -webkit-text-stroke: 0.5px rgba(93, 156, 236, 0.3); } .price { font-weight: 700; font-size: 1.1rem; margin-top: 0.5rem; } .add-to-cart { background-color: var(--primary-color); border: none; color: white; padding: 0.4rem 0.8rem; border-radius: 5px; font-size: 0.85rem; cursor: pointer; margin-top: 0.8rem; transition: all var(--transition-speed) ease; } .add-to-cart:hover { background-color: var(--accent-color); } .product-badge { position: absolute; top: 10px; left: 10px; background-color: var(--primary-color); color: white; padding: 0.3rem 0.6rem; border-radius: 4px; font-size: 0.7rem; font-weight: 600; z-index: 10; opacity: 0; transform: translateY(-10px); transition: all var(--transition-speed) ease; } .product-card:hover .product-badge { opacity: 1; transform: translateY(0); } .cart-animation { position: fixed; width: 20px; height: 20px; background-color: var(--accent-color); border-radius: 50%; z-index: 1000; pointer-events: none; } @media (max-width: 500px) { .product-grid { grid-template-columns: 1fr; } :root { --stroke-width: 0.5px; } h2 { font-size: 1rem; } .filter-bar { gap: 0.3rem; } .filter-button { padding: 0.3rem 0.7rem; font-size: 0.8rem; } } .loading-screen { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--bg-color); display: flex; justify-content: center; align-items: center; z-index: 1000; transition: all 0.5s ease; } .loading-logo { font-size: 3rem; font-weight: 800; letter-spacing: -2px; color: var(--primary-color); position: relative; animation: pulse 1.5s infinite; } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } .fade-out { opacity: 0; pointer-events: none; } </style> </head> <body> <div class="loading-screen"> <div class="loading-logo">MONO</div> </div> <div class="container"> <header> <div class="logo">MONO</div> <div class="nav-icons"> <div class="nav-icon"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" /> </svg> </div> <div class="nav-icon"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" /> </svg> </div> <div class="nav-icon cart-icon"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" /> </svg> <span class="cart-count">0</span> </div> </div> </header> <div class="filter-bar"> <button class="filter-button active">All</button> <button class="filter-button">Kitchen</button> <button class="filter-button">Bedroom</button> <button class="filter-button">Living</button> <button class="filter-button">New</button> <button class="filter-button">Sale</button> </div> <div class="product-grid"> <div class="product-card"> <div class="product-badge">Best Seller</div> <img src="https://images.unsplash.com/photo-1602872030219-ad2b9a54315c?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="Matte Ceramic Vase" class="product-image"> <div class="product-details"> <h2>Matte Ceramic Vase</h2> <p>Minimalist design, perfect for modern spaces</p> <div class="price">$49.99</div> <button class="add-to-cart">Add to Cart</button> </div> </div> <div class="product-card"> <div class="product-badge">New</div> <img src="https://images.unsplash.com/photo-1585237017125-24baf8d7406f?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="Scandinavian Chair" class="product-image"> <div class="product-details"> <h2>Scandinavian Chair</h2> <p>Natural wood with premium upholstery</p> <div class="price">$349.99</div> <button class="add-to-cart">Add to Cart</button> </div> </div> <div class="product-card"> <div class="product-badge">Limited</div> <img src="https://images.unsplash.com/photo-1504198266287-1659872e6590?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="Geometric Table Lamp" class="product-image"> <div class="product-details"> <h2>Geometric Table Lamp</h2> <p>Matte black with brass accents</p> <div class="price">$129.99</div> <button class="add-to-cart">Add to Cart</button> </div> </div> <div class="product-card"> <div class="product-badge">Sale</div> <img src="https://images.unsplash.com/photo-1615874959474-d609969a20ed?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="Minimalist Concrete Planter" class="product-image"> <div class="product-details"> <h2>Concrete Planter</h2> <p>Raw finish with drainage system</p> <div class="price">$39.99</div> <button class="add-to-cart">Add to Cart</button> </div> </div> <div class="product-card"> <div class="product-badge">Handmade</div> <img src="https://images.unsplash.com/photo-1509281373149-e957c6296406?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="Woven Hemp Basket" class="product-image"> <div class="product-details"> <h2>Woven Hemp Basket</h2> <p>Artisanal storage solution for any room</p> <div class="price">$59.99</div> <button class="add-to-cart">Add to Cart</button> </div> </div> <div class="product-card"> <div class="product-badge">Exclusive</div> <img src="https://images.unsplash.com/photo-1581539250439-c96689b516dd?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="Marble Coffee Table" class="product-image"> <div class="product-details"> <h2>Marble Coffee Table</h2> <p>Italian marble with steel framework</p> <div class="price">$499.99</div> <button class="add-to-cart">Add to Cart</button> </div> </div> </div> </div> <script> // Loading screen animation document.addEventListener('DOMContentLoaded', function() { setTimeout(() => { document.querySelector('.loading-screen').classList.add('fade-out'); }, 1200); }); // Setup filter buttons const filterButtons = document.querySelectorAll('.filter-button'); filterButtons.forEach(button => { button.addEventListener('click', function() { filterButtons.forEach(btn => btn.classList.remove('active')); this.classList.add('active'); }); }); // Cart functionality let cartCount = 0; const cartCountElement = document.querySelector('.cart-count'); const addToCartButtons = document.querySelectorAll('.add-to-cart'); addToCartButtons.forEach(button => { button.addEventListener('click', function(e) { e.stopPropagation(); cartCount++; cartCountElement.textContent = cartCount; // Create and animate cart dot const buttonRect = this.getBoundingClientRect(); const cartIconRect = document.querySelector('.cart-icon').getBoundingClientRect(); const dot = document.createElement('div'); dot.className = 'cart-animation'; dot.style.left = `${buttonRect.left + buttonRect.width / 2}px`; dot.style.top = `${buttonRect.top + buttonRect.height / 2}px`; document.body.appendChild(dot); // Animate dot to cart setTimeout(() => { dot.style.transition = 'all 0.8s cubic-bezier(0.68, -0.55, 0.27, 1.55)'; dot.style.left = `${cartIconRect.left + cartIconRect.width / 2}px`; dot.style.top = `${cartIconRect.top + cartIconRect.height / 2}px`; dot.style.opacity = '0'; dot.style.transform = 'scale(0.5)'; // Remove dot after animation setTimeout(() => { document.body.removeChild(dot); }, 800); }, 10); }); }); // Product card click handler (would navigate to product page in a real app) const productCards = document.querySelectorAll('.product-card'); productCards.forEach(card => { card.addEventListener('click', function() { // Just visual feedback since we don't want page navigation in the embed this.style.transform = 'translateY(-3px) scale(0.98)'; setTimeout(() => { this.style.transform = ''; }, 200); }); }); // Responsive text-stroke adjustment function adjustTextStroke() { const width = window.innerWidth; const root = document.documentElement; if (width < 500) { root.style.setProperty('--stroke-width', '0.5px'); } else if (width < 700) { root.style.setProperty('--stroke-width', '0.75px'); } else { root.style.setProperty('--stroke-width', '1px'); } } // Call once on load and then on resize window.addEventListener('resize', adjustTextStroke); adjustTextStroke(); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Experimental Art Portfolio</title> <style> @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap'); :root { --bg-color: #111111; --text-color: #f1f1f1; --accent-color: #ff4f4f; --secondary-color: #4fc3ff; --tertiary-color: #ffb84f; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Space Grotesk', sans-serif; background-color: var(--bg-color); color: var(--text-color); overflow-x: hidden; width: 100%; height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; padding: 20px; } .portfolio-container { width: 100%; max-width: 660px; height: 660px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--accent-color) var(--bg-color); } .portfolio-container::-webkit-scrollbar { width: 8px; } .portfolio-container::-webkit-scrollbar-track { background: var(--bg-color); } .portfolio-container::-webkit-scrollbar-thumb { background-color: var(--accent-color); border-radius: 20px; } .header { margin-bottom: 40px; } .hand-drawn-title { font-size: 3.5rem; font-weight: 700; position: relative; display: inline-block; margin-bottom: 15px; padding: 10px 0; z-index: 1; } .hand-drawn-title::before { content: ""; position: absolute; width: calc(100% + 20px); height: calc(100% + 10px); top: -5px; left: -10px; background: none; border: 2.5px solid var(--accent-color); border-radius: 12px; z-index: -1; transition: all 0.4s ease; animation: wobble 10s infinite alternate ease-in-out; opacity: 0.8; } .hand-drawn-title:hover::before { border-color: var(--secondary-color); transform: skew(-5deg, 1deg) scale(1.05); } .subtitle { font-size: 1.2rem; font-weight: 400; margin-bottom: 10px; max-width: 500px; line-height: 1.4; position: relative; padding-bottom: 15px; } .subtitle::after { content: ""; position: absolute; width: 80px; height: 3px; background-color: var(--tertiary-color); bottom: 0; left: 0; border-radius: 5px; } .project-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 25px; width: 100%; } .project-card { position: relative; background-color: rgba(255, 255, 255, 0.05); border-radius: 15px; overflow: hidden; transition: transform 0.3s ease, box-shadow 0.3s ease; cursor: pointer; min-height: 300px; } .project-card:hover { transform: translateY(-5px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3); } .project-card img { width: 100%; height: 180px; object-fit: cover; border-radius: 12px 12px 0 0; transition: all 0.5s ease; } .project-card:hover img { transform: scale(1.05); filter: brightness(1.1); } .project-info { padding: 20px; } .project-title { font-size: 1.4rem; font-weight: 600; margin-bottom: 10px; position: relative; display: inline-block; overflow: hidden; z-index: 1; } .project-title::before { content: ""; position: absolute; width: 100%; height: 10px; bottom: 0; left: 0; background-color: var(--accent-color); opacity: 0.3; z-index: -1; transition: height 0.3s ease; border-radius: 4px; } .project-card:hover .project-title::before { height: 100%; opacity: 0.2; } .project-desc { font-size: 0.9rem; line-height: 1.5; color: #cccccc; } .project-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 15px; } .tag { padding: 5px 10px; background-color: rgba(255, 255, 255, 0.1); border-radius: 20px; font-size: 0.75rem; font-weight: 500; transition: background-color 0.3s ease; } .tag:hover { background-color: var(--accent-color); } .footer { margin-top: 40px; text-align: center; width: 100%; padding: 20px 0; border-top: 1px solid rgba(255, 255, 255, 0.1); } .contact-button { background: none; border: 1px solid var(--text-color); color: var(--text-color); padding: 12px 25px; border-radius: 30px; font-size: 1rem; font-weight: 500; cursor: pointer; transition: all 0.3s ease; position: relative; overflow: hidden; z-index: 1; font-family: 'Space Grotesk', sans-serif; } .contact-button::before { content: ""; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s ease; z-index: -1; } .contact-button:hover { border-color: var(--accent-color); color: var(--accent-color); } .contact-button:hover::before { left: 100%; } @keyframes wobble { 0%, 100% { transform: skew(0deg, 0deg); } 25% { transform: skew(2deg, 1deg); } 50% { transform: skew(-1deg, -1deg); } 75% { transform: skew(1deg, 2deg); } } .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.8); display: flex; align-items: center; justify-content: center; z-index: 999; opacity: 0; pointer-events: none; transition: opacity 0.3s ease; } .modal.active { opacity: 1; pointer-events: all; } .modal-content { position: relative; background-color: #1a1a1a; width: 80%; max-width: 600px; max-height: 80vh; border-radius: 15px; padding: 30px; overflow-y: auto; transform: translateY(20px); transition: transform 0.3s ease; } .modal.active .modal-content { transform: translateY(0); } .close-modal { position: absolute; top: 15px; right: 15px; width: 30px; height: 30px; border-radius: 50%; background-color: var(--accent-color); border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: background-color 0.3s ease; } .close-modal:hover { background-color: var(--secondary-color); } .close-modal::before, .close-modal::after { content: ""; position: absolute; width: 15px; height: 2px; background-color: var(--text-color); } .close-modal::before { transform: rotate(45deg); } .close-modal::after { transform: rotate(-45deg); } .modal-image { width: 100%; border-radius: 10px; margin-bottom: 20px; } .modal-title { font-size: 1.8rem; font-weight: 700; margin-bottom: 15px; position: relative; display: inline-block; } .modal-title::after { content: ""; position: absolute; width: 50%; height: 3px; background-color: var(--tertiary-color); bottom: -5px; left: 0; border-radius: 2px; } .modal-desc { margin-bottom: 20px; line-height: 1.6; } .process-section { margin-top: 20px; } .process-title { font-size: 1.2rem; font-weight: 600; margin-bottom: 10px; color: var(--secondary-color); } .process-steps { display: flex; gap: 15px; flex-wrap: wrap; margin-bottom: 20px; } .process-step { flex: 1; min-width: 120px; background-color: rgba(255, 255, 255, 0.05); padding: 15px; border-radius: 8px; } .step-number { font-size: 1.5rem; font-weight: 700; color: var(--tertiary-color); margin-bottom: 5px; } .step-desc { font-size: 0.9rem; } @media (max-width: 600px) { .hand-drawn-title { font-size: 2.8rem; } .project-grid { grid-template-columns: 1fr; } .modal-content { width: 90%; padding: 20px; } .process-steps { flex-direction: column; } } .texture-layer { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><g fill-opacity="0.05" fill="%23ffffff"><rect x="0" y="0" width="1" height="1"/><rect x="12" y="12" width="1" height="1"/><rect x="24" y="24" width="1" height="1"/><rect x="36" y="36" width="1" height="1"/><rect x="48" y="48" width="1" height="1"/><rect x="60" y="60" width="1" height="1"/><rect x="72" y="72" width="1" height="1"/><rect x="84" y="84" width="1" height="1"/><rect x="96" y="96" width="1" height="1"/></g></svg>'); pointer-events: none; z-index: 5; opacity: 0.5; } .hand-written { position: relative; display: inline-block; } .hand-written-stroke { position: absolute; width: 100%; height: 100%; top: 0; left: 0; z-index: -1; opacity: 0.8; pointer-events: none; overflow: visible; } .hand-written-stroke path { stroke: var(--accent-color); stroke-width: 3; fill: none; stroke-dasharray: 1000; stroke-dashoffset: 1000; animation: draw 2s forwards; transform-origin: center; transition: stroke 0.3s ease; } .hand-written:hover .hand-written-stroke path { stroke: var(--secondary-color); animation: wiggle 0.5s infinite alternate ease-in-out; } @keyframes draw { to { stroke-dashoffset: 0; } } @keyframes wiggle { 0% { transform: rotate(-1deg) scale(1.01); } 100% { transform: rotate(1deg) scale(1.02); } } </style> </head> <body> <div class="texture-layer"></div> <div class="portfolio-container"> <header class="header"> <h1 class="hand-drawn-title"> EXPER<span class="hand-written">I<svg class="hand-written-stroke"><path d="M0,50 Q25,30 50,50 T100,50"></path></svg></span>MENTAL V<span class="hand-written">I<svg class="hand-written-stroke"><path d="M0,50 Q25,20 50,50 T100,50"></path></svg></span>SUALS </h1> <p class="subtitle">Exploring the intersection of raw, hand-drawn aesthetics and digital precision—where imperfection becomes the focal point of expression.</p> </header> <main class="project-grid"> <div class="project-card" data-project="1"> <img src="https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2064&q=80" alt="Typographic Chaos"> <div class="project-info"> <h3 class="project-title">Typographic Chaos</h3> <p class="project-desc">Deconstructed letterforms that challenge legibility while creating visual rhythm through spontaneous stroke variations.</p> <div class="project-tags"> <span class="tag">Typography</span> <span class="tag">Mixed Media</span> </div> </div> </div> <div class="project-card" data-project="2"> <img src="https://images.unsplash.com/photo-1515405295579-ba7b45403062?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2080&q=80" alt="Textural Convergence"> <div class="project-info"> <h3 class="project-title">Textural Convergence</h3> <p class="project-desc">Exploring the tactile quality of handwritten scripts against digital surfaces—creating tension through contrasting textures.</p> <div class="project-tags"> <span class="tag">Texture</span> <span class="tag">Digital</span> </div> </div> </div> <div class="project-card" data-project="3"> <img src="https://images.unsplash.com/photo-1551913902-c92207136625?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2069&q=80" alt="Stroke Studies"> <div class="project-info"> <h3 class="project-title">Stroke Studies</h3> <p class="project-desc">An examination of pressure, velocity and medium—exploring how the imperfect hand creates meaning through inconsistency.</p> <div class="project-tags"> <span class="tag">Experimental</span> <span class="tag">Calligraphy</span> </div> </div> </div> <div class="project-card" data-project="4"> <img src="https://images.unsplash.com/photo-1614850715661-a548850d6c41?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80" alt="Layered Narratives"> <div class="project-info"> <h3 class="project-title">Layered Narratives</h3> <p class="project-desc">Overlapping text treatments create depth and complexity—revealing different stories depending on viewing distance and perspective.</p> <div class="project-tags"> <span class="tag">Layering</span> <span class="tag">Narrative</span> </div> </div> </div> </main> <footer class="footer"> <button class="contact-button">Get in Touch</button> </footer> </div> <div class="modal" id="projectModal"> <div class="modal-content"> <button class="close-modal"></button> <img class="modal-image" src="" alt="Project image"> <h2 class="modal-title"></h2> <p class="modal-desc"></p> <div class="process-section"> <h3 class="process-title">Process & Technique</h3> <div class="process-steps"> <div class="process-step"> <div class="step-number">01</div> <div class="step-desc">Hand-drawn studies on various textures</div> </div> <div class="process-step"> <div class="step-number">02</div> <div class="step-desc">Digital composition and layering</div> </div> <div class="process-step"> <div class="step-number">03</div> <div class="step-desc">Experimental printing techniques</div> </div> </div> </div> </div> </div> <script> // Project data const projectData = { 1: { title: "Typographic Chaos", image: "https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2064&q=80", description: "This series explores the tension between legibility and expression. Each piece begins with traditional typography that's progressively deconstructed through manual interventions—ink splashes, scratches, and gestural marks—that transform recognizable letters into abstract forms that hover between reading and seeing. The stroke variations capture the physicality of handwriting, with deliberate inconsistencies that create visual rhythm across the composition." }, 2: { title: "Textural Convergence", image: "https://images.unsplash.com/photo-1515405295579-ba7b45403062?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2080&q=80", description: "This project investigates the materiality of text through contrasting digital precision with analog imperfection. Each piece begins with hand-drawn elements on textured paper, which are then digitized and manipulated. The final works maintain the original tactile quality while introducing digital elements that create tension between the two approaches. The layering process reveals underlying textures when viewers interact with the piece—digital becomes physical and vice versa." }, 3: { title: "Stroke Studies", image: "https://images.unsplash.com/photo-1551913902-c92207136625?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2069&q=80", description: "This experimental series examines how the characteristics of hand-drawn strokes—pressure, velocity, tool, and medium—create meaning through inconsistency. Each piece explores a different combination of variables: dry brush on textured paper, reed pen with varying pressure, diluted ink with controlled pooling. The results challenge the notion of 'perfection' in typography by celebrating the nuances that emerge from the human hand's natural variations." }, 4: { title: "Layered Narratives", image: "https://images.unsplash.com/photo-1614850715661-a548850d6c41?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80", description: "This collection explores how layered text treatments can create depth and reveal different narratives depending on viewing distance and perspective. Each composition contains multiple stories that interact with each other—some visible from afar, others only revealed up close. The irregular stroke effects create visual texture that guides the viewer's eye through the piece, with animated elements that subtly shift to reveal underlying content when observed carefully." } }; // Modal functionality const modal = document.getElementById('projectModal'); const modalImage = modal.querySelector('.modal-image'); const modalTitle = modal.querySelector('.modal-title'); const modalDesc = modal.querySelector('.modal-desc'); const closeButton = modal.querySelector('.close-modal'); // Open modal when project card is clicked document.querySelectorAll('.project-card').forEach(card => { card.addEventListener('click', () => { const projectId = card.getAttribute('data-project'); const project = projectData[projectId]; modalImage.src = project.image; modalImage.alt = project.title; modalTitle.textContent = project.title; modalDesc.textContent = project.description; modal.classList.add('active'); document.body.style.overflow = 'hidden'; }); }); // Close modal when close button is clicked closeButton.addEventListener('click', () => { modal.classList.remove('active'); document.body.style.overflow = ''; }); // Close modal when clicking outside of modal content modal.addEventListener('click', (e) => { if (e.target === modal) { modal.classList.remove('active'); document.body.style.overflow = ''; } }); // Generate hand-drawn SVG paths for various elements document.querySelectorAll('.project-title').forEach(title => { title.classList.add('hand-written'); const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); svg.classList.add('hand-written-stroke'); const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); // Generate a random wobbly path for each title const randomPath = `M0,${50 + Math.random() * 10} ${Array.from({length: 3}, () => `Q${Math.random() * 30 + 10},${Math.random() * 40 + 30} ${Math.random() * 30 + 40},${Math.random() * 30 + 40}`).join(' ')} T100,${50 + Math.random() * 10}`; path.setAttribute('d', randomPath); svg.appendChild(path); title.appendChild(svg); }); // Contact button functionality (for demo purposes) document.querySelector('.contact-button').addEventListener('click', (e) => { e.preventDefault(); // For demonstration - in a real implementation this would open a contact form const button = e.target; const originalText = button.textContent; button.textContent = "Thanks for your interest!"; button.style.backgroundColor = "var(--accent-color)"; button.style.color = "var(--bg-color)"; setTimeout(() => { button.textContent = originalText; button.style.backgroundColor = ""; button.style.color = ""; }, 2000); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>LearnSphere | Educational Platform</title> <style> :root { --primary: #4B6BF5; --secondary: #FF8A65; --tertiary: #26C6DA; --dark: #2C3E50; --light: #ECF0F1; --success: #66BB6A; --shadow: rgba(0, 0, 0, 0.1); } * { 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); overflow-x: hidden; height: 100%; } .container { max-width: 700px; width: 100%; margin: 0 auto; padding: 20px; height: 700px; overflow-y: auto; position: relative; } .header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; padding-bottom: 15px; border-bottom: 2px solid var(--shadow); } .logo { display: flex; align-items: center; gap: 10px; } .logo-icon { font-size: 24px; color: var(--primary); } .logo-text { font-family: 'Chalkboard SE', 'Comic Sans MS', cursive; font-size: 24px; font-weight: bold; color: var(--primary); } nav ul { display: flex; list-style: none; gap: 15px; } nav a { text-decoration: none; color: var(--dark); font-weight: 500; transition: color 0.3s; position: relative; } nav a:hover { color: var(--primary); } nav a:hover::after { content: ''; position: absolute; width: 100%; height: 2px; background-color: var(--primary); bottom: -4px; left: 0; transform: scaleX(1); } .section-title { font-family: 'Chalkboard SE', 'Comic Sans MS', cursive; font-size: 28px; margin-bottom: 15px; color: var(--dark); position: relative; display: inline-block; -webkit-text-stroke: 1px var(--dark); text-stroke: 1px var(--dark); font-weight: bold; } .module-text { font-family: 'Chalkboard SE', 'Comic Sans MS', cursive; font-weight: 600; color: var(--dark); -webkit-text-stroke: 0.6px var(--dark); text-stroke: 0.6px var(--dark); } .module-card { background-color: white; border-radius: 12px; padding: 20px; margin-bottom: 15px; box-shadow: 0 4px 6px var(--shadow); transition: transform 0.3s, box-shadow 0.3s; cursor: pointer; position: relative; overflow: hidden; } .module-card:hover { transform: translateY(-5px); box-shadow: 0 8px 15px var(--shadow); } .module-card::before { content: ''; position: absolute; top: 0; left: 0; width: 5px; height: 100%; background-color: var(--primary); transition: width 0.3s; } .module-card:nth-child(2)::before { background-color: var(--secondary); } .module-card:nth-child(3)::before { background-color: var(--tertiary); } .module-card:hover::before { width: 8px; } .progress-bar { height: 6px; background-color: #e0e0e0; border-radius: 3px; margin-top: 10px; overflow: hidden; } .progress { height: 100%; background-color: var(--success); width: 0; transition: width 0.5s ease-in-out; } .module-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .module-header h3 { font-size: 18px; } .module-meta { display: flex; justify-content: space-between; font-size: 14px; color: #666; margin-top: 10px; } .module-badge { background-color: rgba(75, 107, 245, 0.1); color: var(--primary); padding: 4px 8px; border-radius: 20px; font-size: 12px; font-weight: bold; } .tabs { display: flex; margin-bottom: 20px; border-bottom: 1px solid var(--shadow); } .tab { padding: 10px 15px; cursor: pointer; transition: all 0.3s; position: relative; font-weight: 500; } .tab.active { color: var(--primary); } .tab.active::after { content: ''; position: absolute; bottom: -1px; left: 0; width: 100%; height: 3px; background-color: var(--primary); border-radius: 3px 3px 0 0; } .tab-content { display: none; animation: fadeIn 0.5s ease forwards; } .tab-content.active { display: block; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .recommendation-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 15px; margin-top: 15px; } .recommendation-item { background: white; border-radius: 8px; overflow: hidden; box-shadow: 0 3px 5px var(--shadow); transition: transform 0.3s; } .recommendation-item:hover { transform: scale(1.05); } .rec-image { height: 80px; background-color: var(--primary); display: flex; align-items: center; justify-content: center; color: white; font-size: 24px; } .recommendation-item:nth-child(2) .rec-image { background-color: var(--secondary); } .recommendation-item:nth-child(3) .rec-image { background-color: var(--tertiary); } .rec-info { padding: 10px; } .rec-info h4 { font-size: 14px; margin-bottom: 5px; } .rec-info p { font-size: 12px; color: #666; } .module-content { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: white; z-index: 100; padding: 20px; transform: translateY(100%); transition: transform 0.5s cubic-bezier(0.19, 1, 0.22, 1); overflow-y: auto; } .module-content.active { transform: translateY(0); } .module-close { position: absolute; top: 20px; right: 20px; background: none; border: none; font-size: 24px; cursor: pointer; color: var(--dark); } .module-nav { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; } .pencil-underline { position: relative; display: inline-block; } .pencil-underline::after { content: ''; position: absolute; bottom: -5px; left: 0; width: 100%; height: 4px; background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 60' preserveAspectRatio='none'%3E%3Cpath d='M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0' stroke='%234B6BF5' stroke-width='5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E") repeat-x; background-size: contain; } .notebook-paper { background-color: white; background-image: linear-gradient(#e1e1e1 1px, transparent 1px); background-size: 100% 25px; line-height: 25px; padding: 8px 15px; margin-top: 20px; border-left: 2px solid #FF8A65; border-radius: 0 8px 8px 0; } .highlight { background-color: rgba(255, 138, 101, 0.2); padding: 2px 0; } .concept-map { margin-top: 20px; background-color: white; border-radius: 8px; padding: 15px; box-shadow: 0 3px 8px rgba(0,0,0,0.08); } .resource-links { margin-top: 20px; } .resource-links a { display: block; margin-bottom: 10px; color: var(--primary); text-decoration: none; padding: 10px 15px; background-color: rgba(75, 107, 245, 0.1); border-radius: 8px; transition: background-color 0.3s; } .resource-links a:hover { background-color: rgba(75, 107, 245, 0.2); } .search-box { padding: 10px 15px; border: 1px solid #ddd; border-radius: 20px; width: 100%; margin-bottom: 20px; transition: box-shadow 0.3s; } .search-box:focus { outline: none; box-shadow: 0 0 0 2px rgba(75, 107, 245, 0.3); } @media (max-width: 500px) { .header { flex-direction: column; align-items: flex-start; gap: 10px; } nav ul { width: 100%; justify-content: space-between; } .recommendation-grid { grid-template-columns: repeat(2, 1fr); } } /* Chalk animations */ .chalk-animation { position: relative; overflow: hidden; display: inline-block; } .chalk-animation::before { content: attr(data-text); position: absolute; top: 0; left: 0; width: 100%; color: white; overflow: hidden; white-space: nowrap; animation: chalk 1s linear forwards; } @keyframes chalk { from { width: 0; } to { width: 100%; } } /* Circular progress indicator */ .circle-progress { width: 40px; height: 40px; border-radius: 50%; background: conic-gradient(var(--success) 0%, #e0e0e0 0%); display: flex; align-items: center; justify-content: center; position: relative; } .circle-progress::before { content: ''; width: 30px; height: 30px; background: white; border-radius: 50%; position: absolute; } .progress-text { position: relative; z-index: 1; font-size: 12px; font-weight: bold; } /* Page curl effect */ .page-curl { position: relative; } .page-curl::after { content: ""; position: absolute; bottom: 0; right: 0; width: 20px; height: 20px; background: linear-gradient(135deg, transparent 50%, rgba(0,0,0,0.05) 50%); border-radius: 0 0 5px 0; } </style> </head> <body> <div class="container"> <header class="header"> <div class="logo"> <span class="logo-icon">📚</span> <span class="logo-text">LearnSphere</span> </div> <nav> <ul> <li><a href="#" class="active">Dashboard</a></li> <li><a href="#">Library</a></li> <li><a href="#">Progress</a></li> </ul> </nav> </header> <input type="text" class="search-box" placeholder="Search for learning resources..."> <h1 class="section-title pencil-underline">My Learning Journey</h1> <div class="tabs"> <div class="tab active" data-tab="current">Current Modules</div> <div class="tab" data-tab="recommended">Recommended</div> <div class="tab" data-tab="completed">Completed</div> </div> <div class="tab-content active" id="current"> <div class="module-card" data-progress="65"> <div class="module-header"> <h3 class="module-text">Algebraic Expressions</h3> <div class="circle-progress"> <span class="progress-text">65%</span> </div> </div> <p>Master the fundamentals of algebraic expressions, equations, and inequalities with interactive exercises.</p> <div class="module-meta"> <span>Math • Grade 9</span> <span>Last accessed: Yesterday</span> </div> <div class="progress-bar"> <div class="progress" style="width: 65%;"></div> </div> </div> <div class="module-card page-curl" data-progress="30"> <div class="module-header"> <h3 class="module-text">Cell Biology Essentials</h3> <div class="circle-progress"> <span class="progress-text">30%</span> </div> </div> <p>Explore cell structures, functions, and processes through virtual microscopy and 3D models.</p> <div class="module-meta"> <span>Biology • Grade 10</span> <span>Last accessed: 3 days ago</span> </div> <div class="progress-bar"> <div class="progress" style="width: 30%;"></div> </div> </div> <div class="module-card" data-progress="10"> <div class="module-header"> <h3 class="module-text">Literary Analysis Techniques</h3> <div class="circle-progress"> <span class="progress-text">10%</span> </div> </div> <p>Develop critical reading skills by analyzing themes, characters, and narrative techniques in fiction.</p> <div class="module-meta"> <span>English • Grade 11</span> <span>Last accessed: Today</span> </div> <div class="progress-bar"> <div class="progress" style="width: 10%;"></div> </div> </div> </div> <div class="tab-content" id="recommended"> <p>Based on your learning patterns and progress, we recommend these modules:</p> <div class="recommendation-grid"> <div class="recommendation-item"> <div class="rec-image">📊</div> <div class="rec-info"> <h4>Statistics Fundamentals</h4> <p>Math • Grade 10</p> </div> </div> <div class="recommendation-item"> <div class="rec-image">🧪</div> <div class="rec-info"> <h4>Chemistry Lab Skills</h4> <p>Science • Grade 9</p> </div> </div> <div class="recommendation-item"> <div class="rec-image">📝</div> <div class="rec-info"> <h4>Essay Writing Mastery</h4> <p>English • Grade 10</p> </div> </div> <div class="recommendation-item"> <div class="rec-image">🌍</div> <div class="rec-info"> <h4>World Geography</h4> <p>Social Studies • Grade 9</p> </div> </div> </div> </div> <div class="tab-content" id="completed"> <div class="module-card"> <div class="module-header"> <h3 class="module-text">Fractions & Decimals</h3> <span class="module-badge">Completed</span> </div> <p>Operations with fractions and decimals, including conversion, addition, subtraction, multiplication, and division.</p> <div class="module-meta"> <span>Math • Grade 8</span> <span>Completed: June 12, 2023</span> </div> </div> <div class="module-card"> <div class="module-header"> <h3 class="module-text">Ancient Civilizations</h3> <span class="module-badge">Completed</span> </div> <p>Exploration of major ancient civilizations including Mesopotamia, Egypt, Greece, Rome, and China.</p> <div class="module-meta"> <span>History • Grade 9</span> <span>Completed: April 23, 2023</span> </div> </div> </div> <div class="module-content" id="module-view"> <button class="module-close">×</button> <div class="module-nav"> <h2 class="module-text">Algebraic Expressions</h2> <span>Module 3 of 8</span> </div> <h3 class="module-text">Today's Learning Objectives</h3> <ul class="notebook-paper"> <li>Identify and evaluate algebraic expressions</li> <li>Simplify expressions using order of operations</li> <li>Apply distributive property to expressions</li> <li>Combine like terms to simplify expressions</li> </ul> <h3 class="module-text">Key Concepts</h3> <div class="concept-map"> <p>An <span class="highlight">algebraic expression</span> is a mathematical phrase that contains variables, numbers, and operations.</p> <p>Example: <strong>2x + 3y - 5</strong></p> <p>The <span class="highlight">terms</span> of this expression are 2x, 3y, and -5.</p> <p>The <span class="highlight">coefficients</span> are 2 (for x) and 3 (for y).</p> <p>We simplify expressions by <span class="highlight">combining like terms</span> - terms with the same variables raised to the same powers.</p> </div> <h3 class="module-text">Additional Resources</h3> <div class="resource-links"> <a href="#">📹 Video: Simplifying Complex Algebraic Expressions</a> <a href="#">📝 Practice Worksheet: Distributive Property</a> <a href="#">🎮 Interactive Game: Algebra Puzzles</a> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Initialize progress circles document.querySelectorAll('.module-card').forEach(card => { const progress = card.getAttribute('data-progress'); if (progress) { const circle = card.querySelector('.circle-progress'); if (circle) { circle.style.background = `conic-gradient(var(--success) ${progress}%, #e0e0e0 0%)`; } } }); // Tab switching document.querySelectorAll('.tab').forEach(tab => { tab.addEventListener('click', function() { // Remove active class from all tabs document.querySelectorAll('.tab').forEach(t => { t.classList.remove('active'); }); // Add active class to clicked tab this.classList.add('active'); // Hide all tab content document.querySelectorAll('.tab-content').forEach(content => { content.classList.remove('active'); }); // Show corresponding tab content const tabId = this.getAttribute('data-tab'); document.getElementById(tabId).classList.add('active'); }); }); // Module card click to show details document.querySelectorAll('.module-card').forEach(card => { card.addEventListener('click', function() { const moduleView = document.getElementById('module-view'); moduleView.classList.add('active'); // Apply module transition animation document.querySelectorAll('.chalk-animation').forEach(el => { el.style.animation = 'none'; el.offsetHeight; // Trigger reflow el.style.animation = null; }); }); }); // Close module view document.querySelector('.module-close').addEventListener('click', function() { document.getElementById('module-view').classList.remove('active'); }); // Add chalk animation to module texts document.querySelectorAll('.module-text').forEach(el => { const text = el.textContent; el.setAttribute('data-text', text); el.classList.add('chalk-animation'); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Serif Authority | Digital Magazine</title> <style> @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); @import url('https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400;1,500;1,600;1,700;1,800&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'EB Garamond', serif; } :root { --primary-color: #1a1a1a; --accent-color: #bb9d64; --light-color: #f8f6f3; --medium-color: #e3e0d8; --dark-color: #333333; --highlight-color: #a46363; } body { background-color: var(--light-color); color: var(--primary-color); max-width: 700px; height: 700px; margin: 0 auto; overflow-x: hidden; overflow-y: auto; position: relative; } .magazine-container { padding: 20px; height: 100%; display: flex; flex-direction: column; } header { padding: 10px 0 20px; position: relative; border-bottom: 1px solid var(--medium-color); } .header-content { display: flex; justify-content: space-between; align-items: center; } .logo { font-family: 'Playfair Display', serif; font-weight: 800; font-size: 22px; position: relative; color: transparent; letter-spacing: 1px; } .logo-text { position: relative; } .logo-text::before, .logo-text::after { content: "SERIF AUTHORITY"; position: absolute; left: 0; top: 0; } .logo-text::before { -webkit-text-stroke: 2px var(--primary-color); color: transparent; } .logo-text::after { -webkit-text-stroke: 1px var(--accent-color); color: transparent; opacity: 0.85; transform: translateX(1px) translateY(1px); } .nav-menu { display: flex; gap: 20px; } .nav-item { font-size: 16px; cursor: pointer; position: relative; transition: all 0.3s ease; } .nav-item::after { content: ''; position: absolute; bottom: -5px; left: 0; width: 0; height: 1px; background-color: var(--accent-color); transition: width 0.3s ease; } .nav-item:hover { color: var(--accent-color); } .nav-item:hover::after { width: 100%; } .issue-info { font-style: italic; font-size: 14px; margin-top: 8px; opacity: 0.8; } main { flex: 1; padding: 20px 0; display: grid; grid-template-columns: 1fr 1fr; gap: 25px; overflow-y: auto; } .featured-article { grid-column: span 2; position: relative; overflow: hidden; border-radius: 4px; height: 230px; background-color: var(--medium-color); cursor: pointer; display: flex; align-items: flex-end; background-image: url('https://images.unsplash.com/photo-1614332287897-cdc485fa562d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80'); background-size: cover; background-position: center; transition: transform 0.5s ease; } .featured-article:hover { transform: scale(1.02); } .article-content { padding: 20px; position: relative; z-index: 2; width: 100%; background: linear-gradient(to top, rgba(0,0,0,0.8), transparent); } .featured-article::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.3); transition: background 0.3s ease; } .featured-article:hover::before { background: rgba(0,0,0,0.15); } .featured-tag { background-color: var(--accent-color); color: white; padding: 4px 10px; font-size: 12px; border-radius: 2px; display: inline-block; margin-bottom: 10px; text-transform: uppercase; letter-spacing: 1px; } .article-title { font-family: 'Playfair Display', serif; margin-bottom: 8px; position: relative; display: inline-block; transition: transform 0.3s ease; color: #fff; } .double-stroke-title { position: relative; color: transparent; } .double-stroke-title::before, .double-stroke-title::after { content: attr(data-text); position: absolute; left: 0; top: 0; } .double-stroke-title::before { -webkit-text-stroke: 1.5px #fff; color: transparent; } .double-stroke-title::after { -webkit-text-stroke: 0.5px var(--accent-color); color: transparent; opacity: 0.9; transform: translateX(1px) translateY(1px); } .excerpt { font-size: 16px; line-height: 1.5; color: #fff; opacity: 0.9; } .article-card { position: relative; background-color: white; border-radius: 4px; overflow: hidden; height: 200px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); cursor: pointer; transition: transform 0.3s ease, box-shadow 0.3s ease; display: flex; flex-direction: column; } .article-card:hover { transform: translateY(-5px); box-shadow: 0 10px 20px rgba(0,0,0,0.08); } .card-image { height: 100px; background-size: cover; background-position: center; } .card-content { padding: 15px; flex: 1; display: flex; flex-direction: column; justify-content: space-between; } .card-title { font-family: 'Playfair Display', serif; font-size: 18px; font-weight: 600; margin-bottom: 8px; position: relative; display: inline-block; transition: color 0.3s ease; } .article-card:hover .card-title { color: var(--accent-color); } .card-meta { font-size: 12px; color: var(--dark-color); display: flex; justify-content: space-between; align-items: center; margin-top: auto; } .category { color: var(--highlight-color); font-weight: 500; } footer { border-top: 1px solid var(--medium-color); padding: 15px 0; font-size: 14px; color: var(--dark-color); text-align: center; } .newsletter { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; } .newsletter-input { flex: 1; padding: 8px 12px; border: 1px solid var(--medium-color); border-radius: 4px; background-color: var(--light-color); font-family: 'EB Garamond', serif; font-size: 14px; } .newsletter-btn { background-color: var(--primary-color); color: white; border: none; padding: 8px 15px; border-radius: 4px; cursor: pointer; font-family: 'EB Garamond', serif; transition: background-color 0.3s ease; } .newsletter-btn:hover { background-color: var(--accent-color); } .social-links { display: flex; justify-content: center; gap: 15px; margin-top: 10px; } .social-icon { width: 24px; height: 24px; opacity: 0.7; transition: opacity 0.3s ease, transform 0.3s ease; cursor: pointer; } .social-icon:hover { opacity: 1; transform: scale(1.1); } /* Responsive adjustments */ @media (max-width: 650px) { main { grid-template-columns: 1fr; } .featured-article { grid-column: span 1; } .nav-menu { display: none; } .header-content { justify-content: center; } } /* Scrollbar styling */ ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: var(--light-color); } ::-webkit-scrollbar-thumb { background: var(--accent-color); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: var(--primary-color); } /* Custom animations */ @keyframes fadeUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .animate-fadeUp { animation: fadeUp 0.5s ease forwards; } .article-card, .featured-article { opacity: 0; } /* Reading progress bar */ .progress-container { position: fixed; top: 0; left: 0; width: 100%; height: 3px; background: transparent; z-index: 1000; } .progress-bar { height: 3px; background: var(--accent-color); width: 0%; } </style> </head> <body> <div class="progress-container"> <div class="progress-bar" id="progressBar"></div> </div> <div class="magazine-container"> <header> <div class="header-content"> <div class="logo"> <span class="logo-text">SERIF AUTHORITY</span> </div> <nav class="nav-menu"> <div class="nav-item">Features</div> <div class="nav-item">Reviews</div> <div class="nav-item">Design</div> <div class="nav-item">Archives</div> </nav> </div> <div class="issue-info">Volume 27 • September 2023 • The Typography Edition</div> </header> <main id="articles-container"> <article class="featured-article" data-delay="0"> <div class="article-content"> <div class="featured-tag">Cover Story</div> <h2 class="article-title"> <span class="double-stroke-title" data-text="The Revival of Serif Typography in Digital Media">The Revival of Serif Typography in Digital Media</span> </h2> <p class="excerpt">How classic typefaces are making a powerful comeback in user interfaces, branding, and editorial design.</p> </div> </article> <article class="article-card" data-delay="100"> <div class="card-image" style="background-image: url('https://images.unsplash.com/photo-1517694712202-14dd9538aa97?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80')"></div> <div class="card-content"> <h3 class="card-title">The Technical Art of Text Stroke Layering</h3> <div class="card-meta"> <span class="category">Techniques</span> <span class="read-time">6 min read</span> </div> </div> </article> <article class="article-card" data-delay="200"> <div class="card-image" style="background-image: url('https://images.unsplash.com/photo-1588600878108-578307a3cc9d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2076&q=80')"></div> <div class="card-content"> <h3 class="card-title">Conveying Authority Through Typography</h3> <div class="card-meta"> <span class="category">Psychology</span> <span class="read-time">8 min read</span> </div> </div> </article> <article class="article-card" data-delay="300"> <div class="card-image" style="background-image: url('https://images.unsplash.com/photo-1515378791036-0648a3ef77b2?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80')"></div> <div class="card-content"> <h3 class="card-title">Animation Subtleties: Guiding Attention Without Distraction</h3> <div class="card-meta"> <span class="category">Interface</span> <span class="read-time">5 min read</span> </div> </div> </article> <article class="article-card" data-delay="400"> <div class="card-image" style="background-image: url('https://images.unsplash.com/photo-1609921212029-bb5a28e60960?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80')"></div> <div class="card-content"> <h3 class="card-title">Case Study: The New York Times Digital Evolution</h3> <div class="card-meta"> <span class="category">Editorial</span> <span class="read-time">12 min read</span> </div> </div> </article> </main> <footer> <div class="newsletter"> <input type="email" class="newsletter-input" placeholder="Subscribe to our newsletter"> <button class="newsletter-btn">Subscribe</button> </div> <div>© 2023 Serif Authority Magazine. All rights reserved.</div> <div class="social-links"> <svg class="social-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.477 2 2 6.477 2 12C2 17.523 6.477 22 12 22C17.523 22 22 17.523 22 12C22 6.477 17.523 2 12 2Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M15 8H17V10H15V8Z" fill="currentColor"/> <path d="M7 10H9V16H11V10H13V8H11V7.5C11 7 11.5 6.5 12 6.5H13V4.5H11.5C9.5 4.5 9 6 9 7V8H7V10Z" fill="currentColor"/> </svg> <svg class="social-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.477 2 2 6.477 2 12C2 17.523 6.477 22 12 22C17.523 22 22 17.523 22 12C22 6.477 17.523 2 12 2Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M17.5 8.5L14 12L17.5 15.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M6.5 8.5H13.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M6.5 12H11.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M6.5 15.5H9.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </svg> <svg class="social-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.477 2 2 6.477 2 12C2 17.523 6.477 22 12 22C17.523 22 22 17.523 22 12C22 6.477 17.523 2 12 2Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M8 10V17" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M8 7V7.01" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 17V10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M16 17V13C16 11.9 15.1 11 14 11C12.9 11 12 11.9 12 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> </footer> </div> <script> document.addEventListener('DOMContentLoaded', () => { // Animate articles on load const articles = document.querySelectorAll('.article-card, .featured-article'); articles.forEach(article => { const delay = article.getAttribute('data-delay') || 0; setTimeout(() => { article.classList.add('animate-fadeUp'); article.style.opacity = 1; }, delay); }); // Hover effects for article titles with double stroke const doubleStrokeTitles = document.querySelectorAll('.double-stroke-title'); doubleStrokeTitles.forEach(title => { title.addEventListener('mouseover', () => { title.style.transform = 'translateY(-2px)'; }); title.addEventListener('mouseout', () => { title.style.transform = 'translateY(0)'; }); }); // Reading progress bar window.addEventListener('scroll', () => { const scrollTop = document.documentElement.scrollTop || document.body.scrollTop; const scrollHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight; const scrollPercent = (scrollTop / scrollHeight) * 100; document.getElementById('progressBar').style.width = scrollPercent + '%'; }); // Newsletter form const newsletterForm = document.querySelector('.newsletter'); const newsletterInput = document.querySelector('.newsletter-input'); const newsletterBtn = document.querySelector('.newsletter-btn'); newsletterBtn.addEventListener('click', () => { if (newsletterInput.value) { // Simulate submission without refreshing newsletterInput.value = ''; newsletterInput.placeholder = 'Thank you for subscribing!'; newsletterBtn.innerHTML = 'Subscribed!'; newsletterBtn.style.backgroundColor = '#4CAF50'; setTimeout(() => { newsletterInput.placeholder = 'Subscribe to our newsletter'; newsletterBtn.innerHTML = 'Subscribe'; newsletterBtn.style.backgroundColor = ''; }, 3000); } }); // Prevent default form submission newsletterForm.addEventListener('submit', (e) => { e.preventDefault(); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Adaptive Text-Stroke Interface</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { width: 100%; height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); overflow: hidden; padding: 20px; } .container { width: 100%; max-width: 650px; height: 660px; background-color: white; border-radius: 20px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); display: flex; flex-direction: column; padding: 30px; position: relative; overflow: hidden; } .app-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 25px; } .app-logo { font-size: 24px; font-weight: 700; color: #333; display: flex; align-items: center; } .logo-icon { width: 36px; height: 36px; background: #5e72e4; border-radius: 8px; margin-right: 10px; display: flex; align-items: center; justify-content: center; color: white; font-size: 18px; } .mode-selector { display: flex; background: #f4f6fa; border-radius: 30px; padding: 5px; } .mode-btn { padding: 8px 15px; border-radius: 20px; border: none; background: transparent; cursor: pointer; font-size: 14px; font-weight: 600; color: #7f8c9f; transition: all 0.3s ease; } .mode-btn.active { background: #5e72e4; color: white; box-shadow: 0 4px 12px rgba(94, 114, 228, 0.3); } .showcase { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; padding: 20px 0; } .adaptive-title { font-size: 44px; font-weight: 800; text-align: center; margin-bottom: 15px; position: relative; transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275); color: transparent; -webkit-text-stroke: 2px #333; } .subtitle { font-size: 16px; color: #7f8c9f; text-align: center; max-width: 400px; margin-bottom: 40px; line-height: 1.6; } .slider-container { width: 100%; max-width: 300px; margin-bottom: 30px; } .slider-label { display: flex; justify-content: space-between; margin-bottom: 10px; font-size: 14px; color: #7f8c9f; } .stroke-slider { width: 100%; height: 8px; background: #e9ecef; border-radius: 4px; outline: none; -webkit-appearance: none; } .stroke-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; border-radius: 50%; background: #5e72e4; cursor: pointer; box-shadow: 0 2px 6px rgba(94, 114, 228, 0.3); transition: all 0.2s ease; } .stroke-slider::-webkit-slider-thumb:hover { transform: scale(1.1); } .custom-input { margin-top: 20px; width: 100%; max-width: 300px; } .input-label { font-size: 14px; color: #7f8c9f; margin-bottom: 8px; display: block; } .text-input { width: 100%; padding: 12px 15px; border: 2px solid #e9ecef; border-radius: 8px; font-size: 14px; color: #333; transition: all 0.3s ease; } .text-input:focus { border-color: #5e72e4; outline: none; box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.2); } .color-picker-container { margin-top: 20px; display: flex; gap: 10px; justify-content: center; } .color-option { width: 30px; height: 30px; border-radius: 50%; cursor: pointer; transition: transform 0.2s ease; position: relative; border: 2px solid transparent; } .color-option:hover { transform: scale(1.1); } .color-option.active { border: 2px solid #5e72e4; } .overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.7); display: flex; align-items: center; justify-content: center; flex-direction: column; z-index: 10; opacity: 0; pointer-events: none; transition: opacity 0.3s ease; } .overlay.visible { opacity: 1; pointer-events: all; } .loading-spinner { width: 50px; height: 50px; border: 4px solid #f3f3f3; border-top: 4px solid #5e72e4; border-radius: 50%; animation: spin 1s linear infinite; margin-bottom: 15px; } .overlay-text { font-size: 16px; color: #333; font-weight: 600; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .mobile-frame { border: 10px solid #333; border-radius: 30px; padding: 15px; background-color: white; width: 100%; height: 400px; position: relative; overflow: hidden; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1); } .status-bar { display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 10px; color: #7f8c9f; } .app-content { height: 85%; display: flex; flex-direction: column; align-items: center; justify-content: center; background: #fafafa; border-radius: 12px; position: relative; overflow: hidden; } .wave { position: absolute; width: 100%; height: 60px; bottom: 0; left: 0; background: url('data:image/svg+xml;utf8,<svg viewBox="0 0 1440 320" xmlns="http://www.w3.org/2000/svg"><path fill="%235e72e4" fill-opacity="0.3" d="M0,224L40,213.3C80,203,160,181,240,186.7C320,192,400,224,480,213.3C560,203,640,149,720,138.7C800,128,880,160,960,186.7C1040,213,1120,235,1200,224C1280,213,1360,171,1400,149.3L1440,128L1440,320L1400,320C1360,320,1280,320,1200,320C1120,320,1040,320,960,320C880,320,800,320,720,320C640,320,560,320,480,320C400,320,320,320,240,320C160,320,80,320,40,320L0,320Z"></path></svg>') repeat-x; background-size: 100% 60px; } /* Animation keyframes */ @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } @keyframes fadeInUp { from { opacity: 0; transform: translate3d(0, 30px, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } } .fadeInUp { animation: fadeInUp 0.8s ease-out; } .mode-description { position: absolute; bottom: 20px; left: 0; width: 100%; text-align: center; font-size: 14px; color: #7f8c9f; padding: 10px; opacity: 0; transition: opacity 0.3s ease; } .mode-description.visible { opacity: 1; } /* Responsive adjustments */ @media (max-width: 600px) { .container { padding: 20px; } .adaptive-title { font-size: 36px; } .mobile-frame { height: 350px; } } </style> </head> <body> <div class="container"> <div class="app-header"> <div class="app-logo"> <div class="logo-icon">TS</div> <span>TextStroke</span> </div> <div class="mode-selector"> <button class="mode-btn active" data-mode="normal">Normal</button> <button class="mode-btn" data-mode="focus">Focus</button> <button class="mode-btn" data-mode="night">Night</button> </div> </div> <div class="showcase"> <div class="mobile-frame"> <div class="status-bar"> <span>9:41 AM</span> <span>📶 100%</span> </div> <div class="app-content"> <h1 class="adaptive-title">Your Journey</h1> <p class="subtitle">See how our adaptive interface adjusts to your interaction mode for optimal readability</p> <div class="wave"></div> </div> </div> <div class="slider-container fadeInUp"> <div class="slider-label"> <span>Stroke Weight</span> <span id="weight-value">2px</span> </div> <input type="range" min="1" max="6" value="2" class="stroke-slider" id="stroke-weight"> </div> <div class="custom-input fadeInUp"> <label class="input-label">Customize Title</label> <input type="text" class="text-input" id="custom-title" value="Your Journey" placeholder="Enter custom title"> </div> <div class="color-picker-container fadeInUp"> <div class="color-option active" data-color="#333" style="background-color: #333;"></div> <div class="color-option" data-color="#5e72e4" style="background-color: #5e72e4;"></div> <div class="color-option" data-color="#11cdef" style="background-color: #11cdef;"></div> <div class="color-option" data-color="#fb6340" style="background-color: #fb6340;"></div> <div class="color-option" data-color="#2dce89" style="background-color: #2dce89;"></div> </div> <div class="mode-description" id="normal-desc"> <strong>Normal Mode:</strong> Standard text stroke for everyday app usage </div> <div class="mode-description" id="focus-desc"> <strong>Focus Mode:</strong> Bold stroke for improved readability in active sessions </div> <div class="mode-description" id="night-desc"> <strong>Night Mode:</strong> Refined stroke for reduced eye strain in low-light environments </div> <div class="overlay" id="loading-overlay"> <div class="loading-spinner"></div> <p class="overlay-text">Adjusting interface...</p> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const adaptiveTitle = document.querySelector('.adaptive-title'); const strokeSlider = document.getElementById('stroke-weight'); const weightValue = document.getElementById('weight-value'); const customTitle = document.getElementById('custom-title'); const colorOptions = document.querySelectorAll('.color-option'); const modeBtns = document.querySelectorAll('.mode-btn'); const modeDescriptions = { 'normal': document.getElementById('normal-desc'), 'focus': document.getElementById('focus-desc'), 'night': document.getElementById('night-desc') }; const loadingOverlay = document.getElementById('loading-overlay'); let currentMode = 'normal'; let currentColor = '#333'; let currentWeight = 2; // Initialize updateTitle(); modeDescriptions.normal.classList.add('visible'); // Stroke weight slider strokeSlider.addEventListener('input', function() { currentWeight = this.value; weightValue.textContent = `${currentWeight}px`; updateTitle(); }); // Custom title input customTitle.addEventListener('input', function() { updateTitle(); }); // Color options colorOptions.forEach(option => { option.addEventListener('click', function() { colorOptions.forEach(o => o.classList.remove('active')); this.classList.add('active'); currentColor = this.dataset.color; updateTitle(); }); }); // Mode selection modeBtns.forEach(btn => { btn.addEventListener('click', function() { // Show loading overlay loadingOverlay.classList.add('visible'); setTimeout(() => { modeBtns.forEach(b => b.classList.remove('active')); this.classList.add('active'); // Hide all mode descriptions Object.values(modeDescriptions).forEach(desc => { desc.classList.remove('visible'); }); currentMode = this.dataset.mode; // Show current mode description modeDescriptions[currentMode].classList.add('visible'); // Adjust based on mode if (currentMode === 'focus') { strokeSlider.value = 4; currentWeight = 4; weightValue.textContent = '4px'; } else if (currentMode === 'night') { strokeSlider.value = 1; currentWeight = 1; weightValue.textContent = '1px'; } else { strokeSlider.value = 2; currentWeight = 2; weightValue.textContent = '2px'; } updateTitle(); // Hide loading overlay loadingOverlay.classList.remove('visible'); }, 800); }); }); function updateTitle() { const titleText = customTitle.value.trim() || 'Your Journey'; adaptiveTitle.textContent = titleText; // Apply stroke based on mode let strokeWidth = currentWeight; let textFillColor = 'transparent'; let textShadow = 'none'; if (currentMode === 'focus') { // Focus mode has slightly filled text for better visibility textFillColor = 'rgba(255,255,255,0.1)'; adaptiveTitle.style.animation = 'pulse 2s infinite'; } else if (currentMode === 'night') { // Night mode has a subtle glow textShadow = `0 0 8px ${currentColor}`; textFillColor = 'rgba(255,255,255,0.05)'; adaptiveTitle.style.animation = 'none'; } else { adaptiveTitle.style.animation = 'none'; } adaptiveTitle.style.webkitTextStroke = `${strokeWidth}px ${currentColor}`; adaptiveTitle.style.color = textFillColor; adaptiveTitle.style.textShadow = textShadow; } // Add some interactive behaviors adaptiveTitle.addEventListener('mouseover', function() { if (currentMode === 'normal') { this.style.transform = 'scale(1.05)'; } }); adaptiveTitle.addEventListener('mouseout', function() { if (currentMode === 'normal') { this.style.transform = 'scale(1)'; } }); // Handle window focus/blur to demonstrate responsive behavior window.addEventListener('blur', function() { if (currentMode === 'focus') { adaptiveTitle.style.opacity = '0.7'; } }); window.addEventListener('focus', function() { if (currentMode === 'focus') { adaptiveTitle.style.opacity = '1'; } }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>AUREUS | Timeless Elegance</title> <style> @import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@300;400;500;600&family=Montserrat:wght@200;300;400;500&display=swap'); :root { --gold-primary: #D4AF37; --gold-secondary: #B8860B; --dark-bg: #0A0A0A; --darker-bg: #050505; --text-color: #F2F2F2; --transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1); } * { margin: 0; padding: 0; box-sizing: border-box; } body { background-color: var(--dark-bg); color: var(--text-color); font-family: 'Montserrat', sans-serif; font-weight: 300; overflow-x: hidden; height: 100vh; width: 100%; } .container { width: 100%; max-width: 100%; height: 100%; position: relative; display: flex; flex-direction: column; overflow: hidden; } header { display: flex; justify-content: space-between; align-items: center; padding: 20px 30px; position: fixed; top: 0; left: 0; width: 100%; z-index: 100; backdrop-filter: blur(10px); background-color: rgba(10, 10, 10, 0.6); } .logo { font-family: 'Cormorant Garamond', serif; font-weight: 300; letter-spacing: 4px; font-size: 24px; position: relative; cursor: pointer; } .logo span { -webkit-text-stroke: 0.8px var(--gold-primary); color: transparent; transition: var(--transition); } .menu-toggle { width: 28px; height: 20px; position: relative; cursor: pointer; display: flex; flex-direction: column; justify-content: space-between; } .menu-toggle span { display: block; width: 100%; height: 1px; background-color: var(--text-color); transition: var(--transition); } .menu-toggle:hover span { background-color: var(--gold-primary); } .menu-toggle.active span:nth-child(1) { transform: translateY(9.5px) rotate(45deg); } .menu-toggle.active span:nth-child(2) { opacity: 0; } .menu-toggle.active span:nth-child(3) { transform: translateY(-9.5px) rotate(-45deg); } .menu { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--darker-bg); z-index: 90; display: flex; justify-content: center; align-items: center; opacity: 0; visibility: hidden; transition: var(--transition); } .menu.active { opacity: 1; visibility: visible; } .menu-items { list-style: none; text-align: center; } .menu-items li { margin: 20px 0; overflow: hidden; transform: translateY(20px); opacity: 0; transition: var(--transition); transition-delay: calc(var(--i) * 0.1s); } .menu.active .menu-items li { transform: translateY(0); opacity: 1; } .menu-items a { font-family: 'Cormorant Garamond', serif; font-size: 32px; text-decoration: none; color: var(--text-color); position: relative; display: inline-block; padding: 5px 10px; transition: var(--transition); } .menu-items a::after { content: ''; position: absolute; width: 0; height: 1px; bottom: 0; left: 50%; background-color: var(--gold-primary); transition: var(--transition); } .menu-items a:hover { -webkit-text-stroke: 0.5px var(--gold-primary); color: transparent; } .menu-items a:hover::after { width: 80%; left: 10%; } main { flex: 1; position: relative; padding-top: 80px; overflow-y: auto; overflow-x: hidden; scrollbar-width: none; -ms-overflow-style: none; } main::-webkit-scrollbar { display: none; } .hero { height: calc(100vh - 80px); display: flex; flex-direction: column; justify-content: center; align-items: center; position: relative; padding: 0 30px; text-align: center; } .hero::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle at center, rgba(212, 175, 55, 0.05) 0%, transparent 60%); pointer-events: none; } .hero h1 { font-family: 'Cormorant Garamond', serif; font-weight: 300; font-size: clamp(36px, 8vw, 72px); line-height: 1.2; letter-spacing: 2px; margin-bottom: 20px; position: relative; -webkit-text-stroke: 1px var(--gold-primary); color: transparent; opacity: 0; transform: translateY(30px); animation: fadeUp 1s forwards 0.5s; } .hero p { max-width: 560px; margin: 0 auto 40px; font-size: 16px; line-height: 1.8; opacity: 0; transform: translateY(30px); animation: fadeUp 1s forwards 0.8s; } .cta-btn { display: inline-block; padding: 12px 40px; background-color: transparent; border: 1px solid var(--gold-primary); color: var(--text-color); font-family: 'Montserrat', sans-serif; font-size: 14px; text-transform: uppercase; letter-spacing: 2px; text-decoration: none; cursor: pointer; transition: var(--transition); position: relative; overflow: hidden; opacity: 0; transform: translateY(30px); animation: fadeUp 1s forwards 1.1s; } .cta-btn::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background-color: var(--gold-primary); transition: var(--transition); z-index: -1; } .cta-btn:hover { color: var(--darker-bg); } .cta-btn:hover::before { left: 0; } .collections { padding: 80px 30px; } .section-title { font-family: 'Cormorant Garamond', serif; font-weight: 300; font-size: 36px; margin-bottom: 60px; position: relative; text-align: center; -webkit-text-stroke: 0.8px var(--gold-primary); color: transparent; } .section-title::after { content: ''; position: absolute; width: 60px; height: 1px; background-color: var(--gold-primary); bottom: -15px; left: 50%; transform: translateX(-50%); } .collection-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 30px; } .collection-item { position: relative; aspect-ratio: 1/1.2; overflow: hidden; cursor: pointer; } .collection-item img { width: 100%; height: 100%; object-fit: cover; transition: var(--transition); filter: grayscale(80%); } .collection-item:hover img { transform: scale(1.05); filter: grayscale(0%); } .collection-item .info { position: absolute; bottom: 0; left: 0; width: 100%; padding: 20px; background: linear-gradient(to top, rgba(5, 5, 5, 0.9), transparent); transform: translateY(100%); transition: var(--transition); } .collection-item:hover .info { transform: translateY(0); } .collection-item h3 { font-family: 'Cormorant Garamond', serif; font-weight: 400; font-size: 20px; margin-bottom: 8px; position: relative; } .collection-item p { font-size: 14px; opacity: 0.8; } .marquee { position: relative; width: 100%; height: 100px; overflow: hidden; margin: 40px 0; } .marquee-content { display: flex; position: absolute; width: max-content; animation: marquee 25s linear infinite; } .marquee-item { font-family: 'Cormorant Garamond', serif; font-size: 72px; font-weight: 300; padding: 0 30px; -webkit-text-stroke: 1px var(--gold-primary); color: transparent; white-space: nowrap; text-transform: uppercase; } .cursor { width: 20px; height: 20px; border: 1px solid var(--gold-primary); border-radius: 50%; position: fixed; transform: translate(-50%, -50%); pointer-events: none; transition: all 0.1s ease; transition-property: width, height, border; z-index: 9999; display: none; } .cursor-dot { width: 4px; height: 4px; background-color: var(--gold-primary); border-radius: 50%; position: fixed; transform: translate(-50%, -50%); pointer-events: none; z-index: 9999; display: none; } @keyframes marquee { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } } @keyframes fadeUp { to { opacity: 1; transform: translateY(0); } } /* Responsive styles */ @media (max-width: 768px) { .collection-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 20px; } .marquee-item { font-size: 48px; } .hero h1 { font-size: clamp(30px, 6vw, 48px); } .menu-items a { font-size: 24px; } } </style> </head> <body> <div class="cursor"></div> <div class="cursor-dot"></div> <div class="container"> <header> <div class="logo"> <span>AUREUS</span> </div> <div class="menu-toggle"> <span></span> <span></span> <span></span> </div> </header> <div class="menu"> <ul class="menu-items"> <li style="--i:0"><a href="#">Collections</a></li> <li style="--i:1"><a href="#">Heritage</a></li> <li style="--i:2"><a href="#">Atelier</a></li> <li style="--i:3"><a href="#">Journal</a></li> <li style="--i:4"><a href="#">Boutiques</a></li> </ul> </div> <main> <section class="hero"> <h1>Craftsmanship<br>Beyond Time</h1> <p>For a century, AUREUS has curated intimate luxury experiences through meticulous artistry and uncompromising dedication to excellence. Our heritage is not simply worn — it's embodied.</p> <a href="#" class="cta-btn">Discover the Legacy</a> </section> <div class="marquee"> <div class="marquee-content"> <div class="marquee-item">Timeless Elegance</div> <div class="marquee-item">Exquisite Craft</div> <div class="marquee-item">Heritage Redefined</div> <div class="marquee-item">Timeless Elegance</div> <div class="marquee-item">Exquisite Craft</div> </div> </div> <section class="collections"> <h2 class="section-title">Signature Collections</h2> <div class="collection-grid"> <div class="collection-item"> <img src="https://images.unsplash.com/photo-1600003014755-ba31aa59c4b6?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Lumière Collection"> <div class="info"> <h3>Lumière</h3> <p>Inspired by dawn's first light</p> </div> </div> <div class="collection-item"> <img src="https://images.unsplash.com/photo-1589891685391-a8098e813ea4?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Héritage Collection"> <div class="info"> <h3>Héritage</h3> <p>Our foundational masterpieces</p> </div> </div> <div class="collection-item"> <img src="https://images.unsplash.com/photo-1551374437-3b5329344ea2?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Éternité Collection"> <div class="info"> <h3>Éternité</h3> <p>Transcending generations</p> </div> </div> <div class="collection-item"> <img src="https://images.unsplash.com/photo-1580380853934-834251ec0e95?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80" alt="Crépuscule Collection"> <div class="info"> <h3>Crépuscule</h3> <p>Twilight's enigmatic allure</p> </div> </div> </div> </section> </main> </div> <script> // Custom cursor const cursor = document.querySelector('.cursor'); const cursorDot = document.querySelector('.cursor-dot'); if (window.innerWidth > 768) { cursor.style.display = 'block'; cursorDot.style.display = 'block'; document.addEventListener('mousemove', (e) => { cursor.style.left = e.clientX + 'px'; cursor.style.top = e.clientY + 'px'; cursorDot.style.left = e.clientX + 'px'; cursorDot.style.top = e.clientY + 'px'; }); document.addEventListener('mousedown', () => { cursor.style.transform = 'translate(-50%, -50%) scale(0.8)'; }); document.addEventListener('mouseup', () => { cursor.style.transform = 'translate(-50%, -50%) scale(1)'; }); } // Interactive elements cursor effect const interactiveElements = document.querySelectorAll('a, .collection-item, .menu-toggle, .logo'); interactiveElements.forEach(el => { el.addEventListener('mouseenter', () => { cursor.style.width = '50px'; cursor.style.height = '50px'; cursor.style.border = '1px solid var(--gold-primary)'; cursor.style.backgroundColor = 'rgba(212, 175, 55, 0.1)'; }); el.addEventListener('mouseleave', () => { cursor.style.width = '20px'; cursor.style.height = '20px'; cursor.style.border = '1px solid var(--gold-primary)'; cursor.style.backgroundColor = 'transparent'; }); }); // Menu toggle const menuToggle = document.querySelector('.menu-toggle'); const menu = document.querySelector('.menu'); menuToggle.addEventListener('click', () => { menuToggle.classList.toggle('active'); menu.classList.toggle('active'); }); // Text highlight on hover const logo = document.querySelector('.logo span'); logo.addEventListener('mouseenter', () => { logo.style.color = 'var(--gold-primary)'; logo.style.webkitTextStroke = '0px transparent'; }); logo.addEventListener('mouseleave', () => { logo.style.color = 'transparent'; logo.style.webkitTextStroke = '0.8px var(--gold-primary)'; }); // Subtle animation for collection items const collectionItems = document.querySelectorAll('.collection-item'); const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.style.opacity = '1'; entry.target.style.transform = 'translateY(0)'; } }); }, { threshold: 0.1 }); collectionItems.forEach(item => { item.style.opacity = '0'; item.style.transform = 'translateY(20px)'; item.style.transition = 'opacity 0.6s ease, transform 0.6s ease'; observer.observe(item); }); // Make marquee items responsive to mouse position const marqueeContent = document.querySelector('.marquee-content'); const marqueeItems = document.querySelectorAll('.marquee-item'); document.addEventListener('mousemove', (e) => { const x = e.clientX; const width = window.innerWidth; const percentage = x / width; const offset = -10 + percentage * 20; // -10px to +10px range marqueeContent.style.transform = `translateX(${offset}px)`; }); // Text hover effect for marquee items marqueeItems.forEach(item => { item.addEventListener('mouseenter', () => { item.style.color = 'var(--gold-primary)'; item.style.webkitTextStroke = '0px transparent'; }); item.addEventListener('mouseleave', () => { item.style.color = 'transparent'; item.style.webkitTextStroke = '1px var(--gold-primary)'; }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Voyageur - Book Your Adventure</title> <style> :root { --primary-blue: #0066FF; --primary-hover: #0052cc; --accent-color: #FF9500; --dark-blue: #001B44; --light-blue: #E6F0FF; --white: #FFFFFF; --light-gray: #F5F7FA; --medium-gray: #8A9AB0; --dark-gray: #3A4C60; --box-shadow: 0 10px 25px rgba(0, 102, 255, 0.1); --transition: all 0.3s cubic-bezier(0.25, 1, 0.5, 1); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Roboto, -apple-system, sans-serif; } body { background-color: var(--light-gray); color: var(--dark-gray); overflow-x: hidden; width: 100%; height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; padding: 20px; } .container { max-width: 650px; width: 100%; margin: 0 auto; overflow: hidden; background-color: var(--white); border-radius: 20px; box-shadow: var(--box-shadow); transition: var(--transition); } header { background: linear-gradient(135deg, var(--primary-blue), var(--dark-blue)); color: white; padding: 30px; border-radius: 20px 20px 0 0; position: relative; overflow: hidden; } .header-bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><path d="M0 0L100 100M100 0L0 100" stroke="rgba(255,255,255,0.05)" stroke-width="2"/></svg>'); background-size: 20px 20px; opacity: 0.3; } .logo { font-size: 28px; font-weight: 800; letter-spacing: -0.5px; margin-bottom: 5px; position: relative; display: inline-block; } .logo-text { position: relative; z-index: 2; color: white; } .logo-stroke { position: absolute; top: 2px; left: 2px; z-index: 1; -webkit-text-stroke: 3px var(--accent-color); color: transparent; } .tagline { font-size: 16px; opacity: 0.8; position: relative; } .search-section { padding: 25px; } .search-tabs { display: flex; gap: 5px; margin-bottom: 20px; } .tab { padding: 10px 15px; font-weight: 600; color: var(--medium-gray); cursor: pointer; border-bottom: 3px solid transparent; transition: var(--transition); } .tab.active { color: var(--primary-blue); border-bottom: 3px solid var(--primary-blue); } .tab:hover:not(.active) { color: var(--dark-gray); border-bottom: 3px solid var(--light-blue); } .search-form { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; } .form-group { position: relative; } .form-group.full { grid-column: span 2; } label { display: block; font-size: 13px; font-weight: 600; margin-bottom: 6px; color: var(--dark-gray); } input, select { width: 100%; padding: 12px 15px; border: 2px solid var(--light-blue); border-radius: 10px; font-size: 15px; transition: var(--transition); color: var(--dark-gray); background-color: var(--white); } input:focus, select:focus { outline: none; border-color: var(--primary-blue); box-shadow: 0 0 0 3px rgba(0, 102, 255, 0.1); } .icon { position: absolute; right: 15px; top: 38px; color: var(--medium-gray); } .search-btn { grid-column: span 2; padding: 15px; background-color: var(--primary-blue); color: white; border: none; border-radius: 10px; font-size: 16px; font-weight: 600; cursor: pointer; transition: var(--transition); display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 5px; } .search-btn:hover { background-color: var(--primary-hover); transform: translateY(-2px); box-shadow: 0 5px 15px rgba(0, 102, 255, 0.2); } .search-btn svg { transition: var(--transition); } .search-btn:hover svg { transform: translateX(4px); } .popular-section { padding: 0 25px 25px; } .section-title { display: flex; align-items: center; justify-content: space-between; margin-bottom: 15px; } .section-title h3 { font-weight: 700; color: var(--dark-blue); letter-spacing: -0.5px; } .see-all { color: var(--primary-blue); font-weight: 600; font-size: 14px; text-decoration: none; cursor: pointer; transition: var(--transition); } .see-all:hover { color: var(--primary-hover); text-decoration: underline; } .destinations { display: grid; grid-template-columns: repeat(3, 1fr); gap: 15px; } .destination-card { background-color: var(--white); border-radius: 12px; overflow: hidden; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05); transition: var(--transition); cursor: pointer; position: relative; } .destination-card:hover { transform: translateY(-5px); box-shadow: 0 12px 25px rgba(0, 0, 0, 0.1); } .destination-img { width: 100%; height: 110px; background-size: cover; background-position: center; } .destination-info { padding: 12px; } .destination-name { font-weight: 700; font-size: 15px; color: var(--dark-blue); margin-bottom: 4px; } .destination-price { color: var(--primary-blue); font-weight: 600; font-size: 13px; } .highlight-badge { position: absolute; top: 10px; right: 10px; background-color: var(--accent-color); color: white; font-size: 11px; font-weight: 600; padding: 3px 8px; border-radius: 20px; letter-spacing: 0.5px; } /* Mobile Responsive */ @media (max-width: 650px) { .container { border-radius: 15px; } header { padding: 20px; } .search-section, .popular-section { padding: 20px; } .search-form { grid-template-columns: 1fr; } .form-group.full { grid-column: span 1; } .search-btn { grid-column: span 1; } .destinations { grid-template-columns: repeat(2, 1fr); gap: 10px; } .destination-img { height: 90px; } } @media (max-width: 480px) { .destinations { grid-template-columns: 1fr; } .destination-img { height: 130px; } } /* Animation classes */ @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } .pulse { animation: pulse 1.5s infinite; } /* Interactive elements */ .switch-toggle { display: flex; align-items: center; justify-content: flex-end; margin-top: -25px; margin-bottom: 15px; } .switch-label { margin-right: 10px; font-size: 14px; font-weight: 600; color: var(--dark-gray); } .switch { position: relative; display: inline-block; width: 48px; height: 24px; } .switch input { opacity: 0; width: 0; height: 0; } .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: var(--medium-gray); transition: var(--transition); border-radius: 24px; } .slider:before { position: absolute; content: ""; height: 18px; width: 18px; left: 3px; bottom: 3px; background-color: white; transition: var(--transition); border-radius: 50%; } input:checked + .slider { background-color: var(--primary-blue); } input:checked + .slider:before { transform: translateX(24px); } /* Loading indicator */ .loading { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.9); z-index: 100; align-items: center; justify-content: center; border-radius: 20px; } .spinner { width: 40px; height: 40px; border: 4px solid rgba(0, 102, 255, 0.1); border-radius: 50%; border-top-color: var(--primary-blue); animation: spin 1s ease-in-out infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .tooltip { position: relative; display: inline-block; cursor: help; } .tooltip .tooltip-text { visibility: hidden; width: 200px; background-color: var(--dark-blue); color: white; text-align: center; border-radius: 6px; padding: 10px; position: absolute; z-index: 1; bottom: 125%; left: 50%; transform: translateX(-50%); opacity: 0; transition: opacity 0.3s; font-size: 13px; line-height: 1.4; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); } .tooltip .tooltip-text::after { content: ""; position: absolute; top: 100%; left: 50%; margin-left: -5px; border-width: 5px; border-style: solid; border-color: var(--dark-blue) transparent transparent transparent; } .tooltip:hover .tooltip-text { visibility: visible; opacity: 1; } </style> </head> <body> <div class="container"> <div class="loading"> <div class="spinner"></div> </div> <header> <div class="header-bg"></div> <div class="logo"> <span class="logo-text">Voyageur</span> <span class="logo-stroke">Voyageur</span> </div> <p class="tagline">Craft extraordinary journeys, not just trips</p> </header> <div class="search-section"> <div class="search-tabs"> <div class="tab active" data-tab="flights">Flights</div> <div class="tab" data-tab="hotels">Hotels</div> <div class="tab" data-tab="packages">Packages</div> <div class="tab" data-tab="experiences">Experiences</div> </div> <div class="switch-toggle"> <span class="switch-label">Round Trip</span> <label class="switch"> <input type="checkbox" id="trip-type"> <span class="slider"></span> </label> </div> <form class="search-form" id="search-form"> <div class="form-group"> <label for="from">From</label> <input type="text" id="from" placeholder="City or airport"> <span class="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="12" cy="12" r="10"></circle><polygon points="16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"></polygon></svg> </span> </div> <div class="form-group"> <label for="to">To</label> <input type="text" id="to" placeholder="City or airport"> <span class="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="12" cy="12" r="10"></circle><polygon points="16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"></polygon></svg> </span> </div> <div class="form-group"> <label for="depart">Depart</label> <input type="date" id="depart"> </div> <div class="form-group return-group"> <label for="return">Return</label> <input type="date" id="return"> </div> <div class="form-group"> <label for="passengers">Travelers</label> <select id="passengers"> <option value="1">1 Passenger</option> <option value="2">2 Passengers</option> <option value="3">3 Passengers</option> <option value="4">4+ Passengers</option> </select> </div> <div class="form-group"> <label for="class">Class</label> <select id="class"> <option value="economy">Economy</option> <option value="premium">Premium Economy</option> <option value="business">Business</option> <option value="first">First Class</option> </select> </div> <button type="button" class="search-btn" id="search-button"> Find Your Adventure <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" 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> </form> </div> <div class="popular-section"> <div class="section-title"> <h3>Trending Destinations</h3> <span class="see-all">View all</span> </div> <div class="destinations"> <div class="destination-card"> <div class="destination-img" style="background-image: url('https://images.unsplash.com/photo-1581351721010-8cf859cb14a4?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80');"></div> <div class="destination-info"> <div class="destination-name">Santorini, Greece</div> <div class="destination-price">From $599</div> </div> <div class="highlight-badge">30% OFF</div> </div> <div class="destination-card"> <div class="destination-img" style="background-image: url('https://images.unsplash.com/photo-1533106497176-45ae19e68ba2?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80');"></div> <div class="destination-info"> <div class="destination-name">Tokyo, Japan</div> <div class="destination-price">From $849</div> </div> </div> <div class="destination-card"> <div class="destination-img" style="background-image: url('https://images.unsplash.com/photo-1510253687831-9bbd7b13075b?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80');"></div> <div class="destination-info"> <div class="destination-name">Bali, Indonesia</div> <div class="destination-price">From $729</div> </div> <div class="highlight-badge tooltip"> DEAL <span class="tooltip-text">Limited time offer: Includes 5-star resort stay, airport transfers & breakfast</span> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Tab switching functionality const tabs = document.querySelectorAll('.tab'); tabs.forEach(tab => { tab.addEventListener('click', function() { tabs.forEach(t => t.classList.remove('active')); this.classList.add('active'); }); }); // Trip type toggle const tripToggle = document.getElementById('trip-type'); const returnGroup = document.querySelector('.return-group'); const switchLabel = document.querySelector('.switch-label'); tripToggle.addEventListener('change', function() { if (this.checked) { returnGroup.style.display = 'none'; switchLabel.textContent = 'One Way'; } else { returnGroup.style.display = 'block'; switchLabel.textContent = 'Round Trip'; } }); // Set default dates const today = new Date(); const nextWeek = new Date(today); nextWeek.setDate(today.getDate() + 7); const formatDate = (date) => { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; }; document.getElementById('depart').value = formatDate(today); document.getElementById('return').value = formatDate(nextWeek); // Search button functionality with loading state const searchButton = document.getElementById('search-button'); const loading = document.querySelector('.loading'); searchButton.addEventListener('click', function() { // Show loading spinner loading.style.display = 'flex'; // Validate inputs const from = document.getElementById('from').value; const to = document.getElementById('to').value; if (!from || !to) { setTimeout(() => { loading.style.display = 'none'; alert('Please enter both origin and destination cities.'); }, 500); return; } // Simulate search process setTimeout(() => { loading.style.display = 'none'; searchButton.classList.add('pulse'); searchButton.textContent = 'Awesome options found!'; // Reset after animation setTimeout(() => { searchButton.classList.remove('pulse'); searchButton.innerHTML = 'Find Your Adventure <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" 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>'; }, 2000); }, 1500); }); // Destination cards hover effect const cards = document.querySelectorAll('.destination-card'); cards.forEach(card => { card.addEventListener('mouseenter', function() { cards.forEach(c => { if (c !== this) { c.style.opacity = '0.7'; c.style.transform = 'scale(0.98)'; } }); }); card.addEventListener('mouseleave', function() { cards.forEach(c => { c.style.opacity = '1'; c.style.transform = ''; }); }); }); }); </script> </body> </html>