In the ever-evolving world of digital design, finding the right tools to create stunning visuals can be a game-changer. Whether you're a seasoned designer or just starting, having access to high-quality clip examples can significantly enhance your projects.
This article will showcase ten exceptional clip examples that can elevate your design work. From intricate illustrations to sleek icons, these clips are sure to inspire and streamline your creative process.
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 designing pixel-perfect UI a breeze. Loved by designers and developers alike, it ensures your creative vision comes to life effortlessly.
Start for free and experience the magic of Subframe 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 transform your design process? With Subframe, you can create pixel-perfect UIs and stunning clips efficiently. Our drag-and-drop editor and beautifully crafted components make designing a breeze.
Don't wait! Start for free and bring your creative vision to life immediately. Sign up now and start creating right away!
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Waverly - AI Document Analysis Platform</title> <style> @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); :root { --primary: #6366F1; --primary-light: #818CF8; --secondary: #10B981; --secondary-light: #34D399; --dark: #111827; --gray: #4B5563; --light: #F9FAFB; --white: #FFFFFF; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Inter', sans-serif; background-color: var(--light); color: var(--dark); overflow-x: hidden; width: 100%; height: 100%; position: relative; } .container { max-width: 700px; margin: 0 auto; padding: 0 20px; position: relative; z-index: 5; height: 100%; overflow-y: auto; max-height: 700px; } /* Organic shapes with clip-path */ .bg-shape { position: absolute; z-index: 1; background: linear-gradient(135deg, var(--primary-light), var(--primary)); filter: blur(0); opacity: 0.9; transition: all 0.6s ease-out; } .bg-shape-1 { width: 450px; height: 450px; top: -150px; right: -150px; clip-path: polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%); animation: float 8s ease-in-out infinite; } .bg-shape-2 { width: 300px; height: 300px; bottom: -100px; left: -100px; background: linear-gradient(135deg, var(--secondary-light), var(--secondary)); clip-path: circle(50% at 50% 50%); animation: float 9s ease-in-out infinite reverse; } .bg-shape-3 { width: 200px; height: 200px; top: 40%; right: -50px; background: linear-gradient(135deg, var(--primary-light), var(--secondary-light)); clip-path: ellipse(25% 40% at 50% 50%); animation: float 7s ease-in-out infinite 1s; } /* Micro-interactions and animations */ @keyframes float { 0% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(-15px) rotate(5deg); } 100% { transform: translateY(0) rotate(0deg); } } .header { padding: 24px 0; display: flex; align-items: center; justify-content: space-between; } .logo { font-weight: 700; font-size: 24px; color: var(--primary); display: flex; align-items: center; gap: 8px; } .logo-icon { width: 32px; height: 32px; background: linear-gradient(135deg, var(--primary), var(--primary-light)); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: white; } .nav-links { display: flex; gap: 16px; } .nav-link { color: var(--gray); text-decoration: none; font-weight: 500; position: relative; padding: 6px 0; transition: color 0.3s; } .nav-link:hover { color: var(--primary); } .nav-link::after { content: ''; position: absolute; bottom: 0; left: 0; width: 0; height: 2px; background: var(--primary); transition: width 0.3s; } .nav-link:hover::after { width: 100%; } .hero { padding: 40px 0; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; } .hero-title { font-size: 2.5rem; font-weight: 700; margin-bottom: 16px; line-height: 1.2; background: linear-gradient(to right, var(--primary), var(--secondary)); -webkit-background-clip: text; background-clip: text; color: transparent; } .hero-subtitle { font-size: 1.1rem; color: var(--gray); margin-bottom: 32px; max-width: 600px; line-height: 1.5; } .cta-button { background: linear-gradient(135deg, var(--primary), var(--primary-light)); color: white; border: none; padding: 12px 24px; border-radius: 8px; font-weight: 600; font-size: 16px; cursor: pointer; transition: transform 0.3s, box-shadow 0.3s; box-shadow: 0 4px 6px rgba(99, 102, 241, 0.2); position: relative; overflow: hidden; } .cta-button:hover { transform: translateY(-2px); box-shadow: 0 7px 14px rgba(99, 102, 241, 0.3); } .cta-button:active { transform: translateY(0); } .cta-button::after { content: ''; position: absolute; top: 50%; left: 50%; width: 5px; height: 5px; background: rgba(255, 255, 255, 0.5); opacity: 0; border-radius: 100%; transform: scale(1, 1) translate(-50%); transform-origin: 50% 50%; } .cta-button:focus:not(:active)::after { animation: ripple 1s ease-out; } @keyframes ripple { 0% { transform: scale(0, 0); opacity: 0.5; } 100% { transform: scale(30, 30); opacity: 0; } } .features { padding: 40px 0; } .features-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; } .feature-card { background: var(--white); border-radius: 16px; padding: 24px; transition: transform 0.3s, box-shadow 0.3s; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05); cursor: pointer; position: relative; overflow: hidden; } .feature-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(to right, var(--primary), var(--secondary)); transform: scaleX(0); transform-origin: 0 50%; transition: transform 0.5s; } .feature-card:hover { transform: translateY(-5px); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08); } .feature-card:hover::before { transform: scaleX(1); } .feature-icon { width: 48px; height: 48px; background: linear-gradient(135deg, var(--primary-light), var(--primary)); border-radius: 12px; display: flex; align-items: center; justify-content: center; margin-bottom: 16px; color: white; font-size: 24px; } .feature-card:nth-child(even) .feature-icon { background: linear-gradient(135deg, var(--secondary-light), var(--secondary)); } .feature-title { font-size: 18px; font-weight: 600; margin-bottom: 8px; } .feature-description { color: var(--gray); font-size: 14px; line-height: 1.5; } .testimonials { padding: 40px 0; text-align: center; } .section-title { font-size: 24px; font-weight: 700; margin-bottom: 24px; position: relative; display: inline-block; } .section-title::after { content: ''; position: absolute; bottom: -8px; left: 50%; transform: translateX(-50%); width: 60px; height: 3px; background: linear-gradient(to right, var(--primary), var(--secondary)); border-radius: 3px; } .testimonial-card { background: var(--white); border-radius: 16px; padding: 24px; margin-top: 24px; position: relative; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); } .testimonial-card::before { content: '"'; position: absolute; top: -30px; left: 20px; font-size: 100px; color: var(--primary); opacity: 0.1; font-family: Georgia, serif; line-height: 1; } .quote { font-style: italic; color: var(--gray); line-height: 1.6; margin-bottom: 16px; } .author { display: flex; align-items: center; justify-content: center; gap: 12px; } .author-avatar { width: 48px; height: 48px; border-radius: 50%; object-fit: cover; border: 2px solid var(--primary-light); } .author-info { text-align: left; } .author-name { font-weight: 600; font-size: 16px; } .author-title { color: var(--gray); font-size: 14px; } .waitlist-section { padding: 40px 0; text-align: center; position: relative; } .waitlist-card { background: var(--white); border-radius: 16px; padding: 32px; box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12); position: relative; overflow: hidden; } .waitlist-card::before { content: ''; position: absolute; width: 200%; height: 200%; top: -50%; left: -50%; background: linear-gradient(45deg, rgba(99, 102, 241, 0.05) 0%, rgba(16, 185, 129, 0.05) 100%); animation: rotate 30s linear infinite; z-index: 0; } @keyframes rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .waitlist-title { font-size: 24px; font-weight: 700; margin-bottom: 16px; position: relative; z-index: 1; } .waitlist-description { color: var(--gray); margin-bottom: 24px; max-width: 500px; margin-left: auto; margin-right: auto; position: relative; z-index: 1; } .email-form { display: flex; max-width: 500px; margin: 0 auto; position: relative; z-index: 1; } .email-input { flex: 1; padding: 12px 16px; border: 2px solid #E5E7EB; border-radius: 8px 0 0 8px; font-size: 16px; outline: none; transition: border-color 0.3s; } .email-input:focus { border-color: var(--primary); } .submit-button { background: linear-gradient(135deg, var(--primary), var(--primary-light)); color: white; border: none; padding: 12px 24px; border-radius: 0 8px 8px 0; font-weight: 600; font-size: 16px; cursor: pointer; transition: transform 0.3s; } .submit-button:hover { transform: translateY(-2px); } .footer { padding: 20px 0; text-align: center; color: var(--gray); font-size: 14px; } /* Success message for form */ .success-message { display: none; background-color: #ECFDF5; color: var(--secondary); padding: 12px; border-radius: 8px; margin-top: 16px; animation: fadeIn 0.5s; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* Mobile responsiveness */ @media (max-width: 640px) { .features-grid { grid-template-columns: 1fr; } .hero-title { font-size: 2rem; } .nav-links { display: none; } .mobile-menu-button { display: block; } .email-form { flex-direction: column; } .email-input { border-radius: 8px; margin-bottom: 12px; } .submit-button { border-radius: 8px; width: 100%; } } .mobile-menu-button { display: none; background: none; border: none; color: var(--primary); font-size: 24px; cursor: pointer; } /* Utility classes */ .mt-4 { margin-top: 16px; } /* Custom cursor */ .custom-cursor { position: fixed; width: 20px; height: 20px; border-radius: 50%; background-color: rgba(99, 102, 241, 0.3); pointer-events: none; z-index: 9999; transform: translate(-50%, -50%); transition: width 0.3s, height 0.3s, background-color 0.3s; mix-blend-mode: difference; } .cursor-active { width: 50px; height: 50px; background-color: rgba(99, 102, 241, 0.1); } </style> </head> <body> <div class="custom-cursor"></div> <div class="bg-shape bg-shape-1"></div> <div class="bg-shape bg-shape-2"></div> <div class="bg-shape bg-shape-3"></div> <div class="container"> <header class="header"> <div class="logo"> <span class="logo-icon">W</span> Waverly </div> <nav> <div class="nav-links"> <a href="#features" class="nav-link">Features</a> <a href="#testimonials" class="nav-link">Testimonials</a> <a href="#waitlist" class="nav-link">Join Waitlist</a> </div> <button class="mobile-menu-button">☰</button> </nav> </header> <section class="hero"> <h1 class="hero-title">Transform Documents into Insights</h1> <p class="hero-subtitle">Waverly uses AI to analyze your documents, extract key data, and deliver actionable insights in seconds — not hours.</p> <button class="cta-button">Get Early Access</button> </section> <section class="features" id="features"> <div class="features-grid"> <div class="feature-card"> <div class="feature-icon">📊</div> <h3 class="feature-title">Smart Data Extraction</h3> <p class="feature-description">Our AI automatically identifies and extracts key metrics, dates, and figures from any document format.</p> </div> <div class="feature-card"> <div class="feature-icon">🔍</div> <h3 class="feature-title">Semantic Search</h3> <p class="feature-description">Ask questions in natural language and get precise answers from your document library instantly.</p> </div> <div class="feature-card"> <div class="feature-icon">🔄</div> <h3 class="feature-title">Version Comparison</h3> <p class="feature-description">Track changes across document versions with visual highlighting and summaries of what's changed.</p> </div> <div class="feature-card"> <div class="feature-icon">📱</div> <h3 class="feature-title">Multi-platform</h3> <p class="feature-description">Access your documents and insights anywhere, with native apps for web, iOS and Android.</p> </div> </div> </section> <section class="testimonials" id="testimonials"> <h2 class="section-title">What Our Beta Users Say</h2> <div class="testimonial-card"> <p class="quote">Waverly has completely changed how our legal team handles contract review. What used to take hours now takes minutes, with better accuracy than our manual process.</p> <div class="author"> <img src="https://randomuser.me/api/portraits/women/45.jpg" alt="Sarah Chen" class="author-avatar"> <div class="author-info"> <div class="author-name">Sarah Chen</div> <div class="author-title">Legal Operations Manager</div> </div> </div> </div> </section> <section class="waitlist-section" id="waitlist"> <div class="waitlist-card"> <h2 class="waitlist-title">Join Our Exclusive Beta</h2> <p class="waitlist-description">We're opening access to select users each week. Sign up now to secure your spot in line and be among the first to experience Waverly.</p> <form class="email-form" id="waitlist-form"> <input type="email" class="email-input" placeholder="Your email address" required> <button type="submit" class="submit-button">Join Waitlist</button> </form> <div class="success-message" id="success-message"> Thanks! You're on the list. We'll be in touch soon! </div> </div> </section> <footer class="footer"> <p>© 2023 Waverly AI • Made with ❤️ in San Francisco</p> </footer> </div> <script> // Custom cursor effect const cursor = document.querySelector('.custom-cursor'); const buttons = document.querySelectorAll('button, .feature-card, a'); document.addEventListener('mousemove', (e) => { cursor.style.left = e.clientX + 'px'; cursor.style.top = e.clientY + 'px'; }); buttons.forEach(button => { button.addEventListener('mouseenter', () => { cursor.classList.add('cursor-active'); }); button.addEventListener('mouseleave', () => { cursor.classList.remove('cursor-active'); }); }); // Scroll animation for shapes window.addEventListener('scroll', () => { const scrollY = window.scrollY; const shapes = document.querySelectorAll('.bg-shape'); shapes.forEach((shape, index) => { const speed = 0.05 * (index + 1); shape.style.transform = `translateY(${scrollY * speed}px)`; }); }); // Smooth scroll for navigation document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); document.querySelector(this.getAttribute('href')).scrollIntoView({ behavior: 'smooth' }); }); }); // Form submission const form = document.getElementById('waitlist-form'); const successMessage = document.getElementById('success-message'); form.addEventListener('submit', (e) => { e.preventDefault(); const email = form.querySelector('.email-input').value; // Validate email (simple validation) if (email && email.includes('@')) { // Show success message successMessage.style.display = 'block'; form.reset(); // Hide success message after 5 seconds setTimeout(() => { successMessage.style.display = 'none'; }, 5000); } }); // Mobile menu toggle const menuButton = document.querySelector('.mobile-menu-button'); const navLinks = document.querySelector('.nav-links'); menuButton.addEventListener('click', () => { navLinks.style.display = navLinks.style.display === 'flex' ? 'none' : 'flex'; }); // CTA button effect const ctaButton = document.querySelector('.cta-button'); ctaButton.addEventListener('click', () => { // Scroll to waitlist section document.getElementById('waitlist').scrollIntoView({ behavior: 'smooth' }); }); // Parallax effect for feature cards const featureCards = document.querySelectorAll('.feature-card'); featureCards.forEach(card => { card.addEventListener('mousemove', (e) => { const rect = card.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; const xc = rect.width / 2; const yc = rect.height / 2; const dx = x - xc; const dy = y - yc; card.style.transform = `perspective(1000px) rotateY(${dx / 20}deg) rotateX(${-dy / 20}deg) translateY(-5px)`; }); card.addEventListener('mouseleave', () => { card.style.transform = 'perspective(1000px) rotateY(0) rotateX(0) translateY(0)'; }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; } :root { --primary: #3a36e0; --secondary: #ff6b6b; --accent: #00d9ff; --background: #f8f9fc; --text: #2c3e50; --light: #ffffff; --transition: 0.3s ease; } body { background-color: var(--background); color: var(--text); height: 100vh; width: 100%; overflow-x: hidden; } .container { max-width: 700px; height: 700px; margin: 0 auto; padding: 20px; overflow-y: auto; position: relative; } .featured-products { display: grid; grid-template-columns: 1fr; gap: 30px; margin-top: 20px; } .header { text-align: center; margin-bottom: 30px; position: relative; } .header h1 { font-size: 2.5rem; margin-bottom: 10px; position: relative; display: inline-block; } .header h1::after { content: ''; position: absolute; bottom: -5px; left: 10%; width: 80%; height: 4px; background: linear-gradient(90deg, var(--primary), var(--accent)); clip-path: polygon(0 0, 100% 0, 90% 100%, 10% 100%); } .header p { color: #666; font-size: 1.1rem; max-width: 600px; margin: 0 auto; } .product-card { background: var(--light); border-radius: 12px; overflow: hidden; position: relative; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05); transition: transform var(--transition), box-shadow var(--transition); display: grid; grid-template-columns: 1fr 1.2fr; height: 280px; } .product-card:hover { transform: translateY(-5px); box-shadow: 0 15px 35px rgba(0, 0, 0, 0.1); } .product-image { position: relative; overflow: hidden; background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); height: 100%; } .product-image img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; clip-path: polygon(0 0, 100% 0, 85% 100%, 0 100%); } .product-card:hover .product-image img { transform: scale(1.05); } .product-info { padding: 25px; display: flex; flex-direction: column; justify-content: center; position: relative; z-index: 1; } .product-info::before { content: ''; position: absolute; top: 0; left: -40px; width: 60px; height: 100%; background: var(--light); clip-path: polygon(35% 0, 100% 0, 100% 100%, 0 100%); z-index: -1; } .tag { background: var(--secondary); color: var(--light); display: inline-block; padding: 5px 12px; border-radius: 20px; font-size: 0.75rem; font-weight: 600; margin-bottom: 15px; clip-path: polygon(5% 0, 100% 0, 95% 100%, 0% 100%); transition: background var(--transition); } .tag.new { background: var(--primary); } .tag.eco { background: #2ecc71; } .product-title { font-size: 1.4rem; margin-bottom: 10px; font-weight: 700; color: var(--text); } .product-desc { font-size: 0.95rem; color: #666; margin-bottom: 20px; line-height: 1.5; } .product-features { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 20px; } .feature { display: flex; align-items: center; font-size: 0.85rem; color: #555; } .feature svg { width: 16px; height: 16px; margin-right: 5px; fill: var(--primary); } .price-action { display: flex; justify-content: space-between; align-items: center; margin-top: auto; } .price { font-size: 1.5rem; font-weight: 700; color: var(--primary); } .btn { background: transparent; color: var(--primary); border: 2px solid var(--primary); padding: 8px 18px; border-radius: 25px; font-weight: 600; font-size: 0.9rem; cursor: pointer; transition: all var(--transition); clip-path: polygon(8% 0, 100% 0, 92% 100%, 0% 100%); display: inline-flex; align-items: center; gap: 5px; position: relative; overflow: hidden; } .btn svg { width: 16px; height: 16px; transition: transform var(--transition); } .btn::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: var(--primary); transition: all 0.4s ease; z-index: -1; clip-path: polygon(8% 0, 100% 0, 92% 100%, 0% 100%); } .btn:hover { color: var(--light); } .btn:hover::before { left: 0; } .btn:hover svg { transform: translateX(3px); } .price-cut { text-decoration: line-through; color: #999; font-size: 1rem; margin-right: 8px; } .shape-divider { position: absolute; bottom: 0; left: 0; width: 100%; overflow: hidden; line-height: 0; transform: rotate(180deg); z-index: -1; } .shape-divider svg { position: relative; display: block; width: calc(100% + 1.3px); height: 150px; } .shape-divider .shape-fill { fill: rgba(58, 54, 224, 0.05); } @media (max-width: 600px) { .product-card { grid-template-columns: 1fr; height: auto; } .product-image { height: 200px; } .product-image img { clip-path: polygon(0 0, 100% 0, 100% 85%, 0 100%); } .product-info::before { display: none; } .header h1 { font-size: 2rem; } .product-title { font-size: 1.2rem; } .product-info { padding: 20px; } } /* Custom Scrollbar */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: #f1f1f1; } ::-webkit-scrollbar-thumb { background: var(--primary); border-radius: 10px; } ::-webkit-scrollbar-thumb:hover { background: #2a28a7; } /* Animated background pattern */ .pattern-bg { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -2; opacity: 0.4; background-image: radial-gradient(var(--primary) 2px, transparent 2px), radial-gradient(var(--accent) 2px, transparent 2px); background-size: 40px 40px; background-position: 0 0, 20px 20px; animation: patternMove 20s linear infinite; } @keyframes patternMove { 0% { background-position: 0 0, 20px 20px; } 100% { background-position: 40px 40px, 60px 60px; } } </style> </head> <body> <div class="pattern-bg"></div> <div class="container"> <div class="header"> <h1>Our Premium Collection</h1> <p>Discover our cutting-edge tech products designed to transform your digital experience</p> </div> <div class="featured-products"> <div class="product-card" data-product-id="1"> <div class="product-image"> <img src="https://images.unsplash.com/photo-1585155770447-2f66e2a397b5?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=600&q=80" alt="XSound Pro Headphones"> </div> <div class="product-info"> <span class="tag new">NEW</span> <h2 class="product-title">XSound Pro Headphones</h2> <p class="product-desc">Immersive spatial audio with adaptive noise cancellation that adjusts to your environment in real-time.</p> <div class="product-features"> <span class="feature"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/> </svg> 40h Battery </span> <span class="feature"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/> </svg> Hi-Res Audio </span> <span class="feature"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/> </svg> Multi-device </span> </div> <div class="price-action"> <div class="price"> <span class="price-cut">$349</span>$299 </div> <button class="btn"> Details <svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8-8-8z"/> </svg> </button> </div> </div> </div> <div class="product-card" data-product-id="2"> <div class="product-image"> <img src="https://images.unsplash.com/photo-1544866092-1677b00c173f?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=600&q=80" alt="QuantumLite Smartwatch"> </div> <div class="product-info"> <span class="tag eco">ECO-FRIENDLY</span> <h2 class="product-title">QuantumLite Smartwatch</h2> <p class="product-desc">Advanced health metrics with a solar-powered battery that charges from any light source.</p> <div class="product-features"> <span class="feature"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/> </svg> 5ATM Waterproof </span> <span class="feature"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/> </svg> ECG Sensor </span> <span class="feature"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/> </svg> Solar Charging </span> </div> <div class="price-action"> <div class="price">$199</div> <button class="btn"> Details <svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8-8-8z"/> </svg> </button> </div> </div> </div> <div class="product-card" data-product-id="3"> <div class="product-image"> <img src="https://images.unsplash.com/photo-1600262302726-11606ae99ae6?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=600&q=80" alt="AeroGlide Ultra-thin Laptop"> </div> <div class="product-info"> <span class="tag">BESTSELLER</span> <h2 class="product-title">AeroGlide Ultra-thin Laptop</h2> <p class="product-desc">The thinnest laptop with 24-hour battery life and adaptive cooling that keeps performance optimal at all times.</p> <div class="product-features"> <span class="feature"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/> </svg> 16GB RAM </span> <span class="feature"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/> </svg> 1TB SSD </span> <span class="feature"> <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/> </svg> 4K Display </span> </div> <div class="price-action"> <div class="price"> <span class="price-cut">$1299</span>$1099 </div> <button class="btn"> Details <svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8-8-8z"/> </svg> </button> </div> </div> </div> </div> <div class="shape-divider"> <svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 120" preserveAspectRatio="none"> <path d="M321.39,56.44c58-10.79,114.16-30.13,172-41.86,82.39-16.72,168.19-17.73,250.45-.39C823.78,31,906.67,72,985.66,92.83c70.05,18.48,146.53,26.09,214.34,3V0H0V27.35A600.21,600.21,0,0,0,321.39,56.44Z" class="shape-fill"></path> </svg> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Add hover animation for product cards const productCards = document.querySelectorAll('.product-card'); productCards.forEach(card => { card.addEventListener('mouseenter', function() { // Create a subtle float animation this.style.transform = 'translateY(-8px)'; this.style.boxShadow = '0 20px 40px rgba(0, 0, 0, 0.15)'; // Animate tag const tag = this.querySelector('.tag'); if (tag) { tag.style.transform = 'translateX(5px)'; setTimeout(() => { tag.style.transform = 'translateX(0)'; }, 300); } }); card.addEventListener('mouseleave', function() { this.style.transform = 'translateY(0)'; this.style.boxShadow = '0 10px 30px rgba(0, 0, 0, 0.05)'; }); // Add click event for buttons const btn = card.querySelector('.btn'); if (btn) { btn.addEventListener('click', function(e) { e.preventDefault(); // Create a ripple effect const ripple = document.createElement('span'); ripple.classList.add('ripple'); this.appendChild(ripple); // Get product information const productId = card.getAttribute('data-product-id'); const productTitle = card.querySelector('.product-title').textContent; // Add a highlight animation to the card card.style.transition = 'box-shadow 0.3s ease'; card.style.boxShadow = '0 0 0 2px var(--primary)'; // Log the product interaction (in real scenario, this would trigger a modal or add to cart) console.log(`Product ${productId}: ${productTitle} details requested`); // Reset the highlight after a moment setTimeout(() => { card.style.boxShadow = '0 10px 30px rgba(0, 0, 0, 0.05)'; }, 800); // Clean up the ripple element setTimeout(() => { ripple.remove(); }, 600); }); } }); // Intersection Observer for animating products when they enter viewport 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 }); // Initially set products to be slightly below and fade in as they appear productCards.forEach((card, index) => { card.style.opacity = '0'; card.style.transform = 'translateY(20px)'; card.style.transition = 'opacity 0.5s ease, transform 0.5s ease'; card.style.transitionDelay = `${index * 0.1}s`; observer.observe(card); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Alex Rivera Photography - Portfolio</title> <style> :root { --color-dark: #0a0a0a; --color-light: #f5f5f5; --color-accent: #ff3e55; --color-secondary: #3e78ff; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; } body { background-color: var(--color-dark); color: var(--color-light); width: 100%; height: 100vh; overflow-x: hidden; } .container { width: 100%; max-width: 700px; margin: 0 auto; padding: 20px; height: 100%; position: relative; } .header { position: relative; width: 100%; height: 500px; overflow: hidden; margin-bottom: 20px; } .clipper { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; flex-wrap: wrap; } .clip-shape { position: absolute; overflow: hidden; transition: all 0.6s cubic-bezier(0.16, 1, 0.3, 1); } .clip-shape:hover { z-index: 5; filter: contrast(120%) brightness(110%); transform: scale(1.03); } .clip-shape-1 { width: 70%; height: 65%; top: 0; left: 0; clip-path: polygon(0 0, 90% 0, 100% 100%, 0 80%); } .clip-shape-2 { width: 40%; height: 45%; bottom: 0; left: 0; clip-path: polygon(0 0, 100% 30%, 90% 100%, 0 100%); } .clip-shape-3 { width: 50%; height: 60%; top: 0; right: 0; clip-path: polygon(0 20%, 100% 0, 100% 100%, 20% 100%); } .clip-shape-4 { width: 60%; height: 45%; bottom: 0; right: 0; clip-path: polygon(10% 0, 100% 0, 100% 100%, 0 100%); } .image-container { width: 100%; height: 100%; background-size: cover; background-position: center; transform: scale(1.05); transition: transform 0.8s cubic-bezier(0.16, 1, 0.3, 1); } .clip-shape:hover .image-container { transform: scale(1.12); } .title-container { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 10; text-align: center; mix-blend-mode: difference; pointer-events: none; } h1 { font-size: 3.5rem; font-weight: 900; letter-spacing: -1px; line-height: 1; margin-bottom: 1rem; color: var(--color-light); text-transform: uppercase; text-shadow: 0 0 20px rgba(0, 0, 0, 0.3); } .subtitle { font-size: 1.1rem; font-weight: 300; letter-spacing: 4px; text-transform: uppercase; color: var(--color-light); opacity: 0.9; } .nav { position: relative; width: 100%; display: flex; justify-content: center; gap: 1.5rem; margin-top: 2rem; padding: 1rem 0; z-index: 20; } .nav a { color: var(--color-light); text-decoration: none; font-size: 0.95rem; letter-spacing: 1px; text-transform: uppercase; font-weight: 500; position: relative; transition: color 0.3s ease; } .nav a::after { content: ''; position: absolute; bottom: -5px; left: 0; width: 0; height: 2px; background-color: var(--color-accent); transition: width 0.4s cubic-bezier(0.16, 1, 0.3, 1); } .nav a:hover { color: var(--color-accent); } .nav a:hover::after { width: 100%; } .scroll-indicator { position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); width: 30px; height: 50px; border: 2px solid var(--color-light); border-radius: 15px; display: flex; justify-content: center; opacity: 0.6; z-index: 20; transition: opacity 0.3s ease; } .scroll-indicator:hover { opacity: 1; } .scroll-dot { width: 6px; height: 6px; background-color: var(--color-light); border-radius: 50%; position: absolute; top: 10px; animation: scrollAnim 2s infinite; } @keyframes scrollAnim { 0% { transform: translateY(0); opacity: 1; } 50% { transform: translateY(15px); opacity: 0.3; } 100% { transform: translateY(0); opacity: 1; } } .label { position: absolute; bottom: 15px; left: 15px; background-color: rgba(0, 0, 0, 0.7); color: white; padding: 4px 8px; font-size: 0.7rem; border-radius: 3px; z-index: 5; opacity: 0; transform: translateY(10px); transition: all 0.3s ease; } .clip-shape:hover .label { opacity: 1; transform: translateY(0); } @media (max-width: 600px) { h1 { font-size: 2.5rem; } .subtitle { font-size: 0.85rem; letter-spacing: 2px; } .header { height: 400px; } .clip-shape-1 { width: 60%; height: 60%; } .clip-shape-2 { width: 50%; height: 40%; } .clip-shape-3 { width: 50%; height: 60%; } .clip-shape-4 { width: 60%; height: 40%; } .nav { gap: 1rem; } .nav a { font-size: 0.8rem; } } @media (max-width: 400px) { h1 { font-size: 2rem; } .subtitle { font-size: 0.75rem; } .header { height: 350px; } } </style> </head> <body> <div class="container"> <header class="header"> <div class="clipper"> <div class="clip-shape clip-shape-1"> <div class="image-container" id="image1"></div> <div class="label">NYC / Street Life</div> </div> <div class="clip-shape clip-shape-2"> <div class="image-container" id="image2"></div> <div class="label">Portraits / Intimacy</div> </div> <div class="clip-shape clip-shape-3"> <div class="image-container" id="image3"></div> <div class="label">Architecture / Form</div> </div> <div class="clip-shape clip-shape-4"> <div class="image-container" id="image4"></div> <div class="label">Abstract / Light</div> </div> </div> <div class="title-container"> <div class="subtitle">Vision through fragments</div> <h1>Alex Rivera</h1> <div class="nav"> <a href="#" class="nav-link">Portfolio</a> <a href="#" class="nav-link">About</a> <a href="#" class="nav-link">Exhibitions</a> <a href="#" class="nav-link">Contact</a> </div> </div> <div class="scroll-indicator"> <div class="scroll-dot"></div> </div> </header> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Images with urban/architectural photography themes const images = [ 'https://images.unsplash.com/photo-1514542124776-b1401b7dd173?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80', 'https://images.unsplash.com/photo-1532767153582-b1a0e5145009?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80', 'https://images.unsplash.com/photo-1496096265110-f83ad7f96608?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80', 'https://images.unsplash.com/photo-1477414956199-7dafc86a4f1a?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80' ]; // Set initial images for (let i = 1; i <= 4; i++) { document.getElementById(`image${i}`).style.backgroundImage = `url(${images[i-1]})`; } // Parallax effect on scroll window.addEventListener('scroll', function() { const offset = window.pageYOffset; document.querySelectorAll('.image-container').forEach((img, index) => { img.style.transform = `scale(1.05) translateY(${offset * (0.05 + index * 0.02)}px)`; }); }); // Add mouse move effect to the clips const header = document.querySelector('.header'); header.addEventListener('mousemove', function(e) { const { left, top, width, height } = this.getBoundingClientRect(); const x = (e.clientX - left) / width - 0.5; const y = (e.clientY - top) / height - 0.5; document.querySelectorAll('.clip-shape').forEach((shape, index) => { const factor = 5 + index * 2; shape.style.transform = `translateX(${x * factor}px) translateY(${y * factor}px)`; }); }); // Reset transform when mouse leaves header.addEventListener('mouseleave', function() { document.querySelectorAll('.clip-shape').forEach(shape => { shape.style.transform = 'translateX(0) translateY(0)'; }); }); // Prevent any form submission document.querySelectorAll('a').forEach(link => { link.addEventListener('click', (e) => { e.preventDefault(); }); }); // Add animated highlight to the title on hover const title = document.querySelector('h1'); title.addEventListener('mouseover', function() { this.style.textShadow = `0 0 5px var(--color-light), 0 0 20px var(--color-accent)`; }); title.addEventListener('mouseout', function() { this.style.textShadow = '0 0 20px rgba(0, 0, 0, 0.3)'; }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Organic Blog</title> <style> @import url('https://fonts.googleapis.com/css2?family=Caveat:wght@400;700&family=Montserrat:wght@300;400;600&display=swap'); :root { --primary: #5D4EF7; --secondary: #FE6C6C; --accent: #34D399; --dark: #222222; --light: #FCFCFA; --shadow: rgba(93, 78, 247, 0.15); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Montserrat', sans-serif; background-color: var(--light); color: var(--dark); overflow-x: hidden; width: 100%; height: 100vh; display: flex; justify-content: center; align-items: center; } .blog-container { width: 100%; max-width: 700px; height: 700px; padding: 30px; position: relative; overflow-y: auto; overflow-x: hidden; scrollbar-width: thin; scrollbar-color: var(--primary) var(--light); } .blog-container::-webkit-scrollbar { width: 6px; } .blog-container::-webkit-scrollbar-track { background: var(--light); } .blog-container::-webkit-scrollbar-thumb { background-color: var(--primary); border-radius: 20px; } header { margin-bottom: 40px; position: relative; } h1 { font-size: 2.5rem; font-weight: 600; color: var(--primary); margin-bottom: 15px; position: relative; z-index: 1; } .tagline { font-size: 1.2rem; color: var(--dark); opacity: 0.8; font-weight: 300; margin-bottom: 25px; } .header-doodle { position: absolute; top: -5px; right: -15px; width: 80px; height: 80px; background-color: var(--accent); opacity: 0.2; clip-path: polygon(52% 26%, 79% 7%, 91% 28%, 98% 54%, 80% 89%, 54% 94%, 25% 91%, 7% 70%, 10% 28%, 30% 17%); animation: rotate 20s infinite linear; z-index: 0; } @keyframes rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .blog-post { margin-bottom: 50px; position: relative; transition: all 0.3s ease; } .blog-post:hover { transform: translateY(-5px); } .blog-post-content { position: relative; padding: 25px; background-color: white; box-shadow: 0 5px 15px var(--shadow); transform-style: preserve-3d; transition: all 0.4s ease; } .post-1 .blog-post-content { clip-path: polygon(0% 0%, 98% 2%, 100% 97%, 4% 100%, 2% 22%); } .post-2 .blog-post-content { clip-path: polygon(2% 3%, 100% 0%, 97% 93%, 0% 100%, 3% 35%); } .post-3 .blog-post-content { clip-path: polygon(3% 1%, 97% 4%, 100% 95%, 1% 100%); } .blog-post-content::before { content: ''; position: absolute; left: -10px; top: -10px; width: 100%; height: 100%; background: repeating-linear-gradient( 45deg, var(--accent), var(--accent) 5px, transparent 5px, transparent 10px ); clip-path: inherit; z-index: -1; opacity: 0; transition: all 0.3s ease; transform: translateZ(-10px); } .blog-post:hover .blog-post-content::before { opacity: 0.2; } .post-title { font-size: 1.5rem; margin-bottom: 15px; color: var(--primary); font-weight: 600; position: relative; display: inline-block; } .post-title::after { content: ''; position: absolute; bottom: -5px; left: 0; width: 40%; height: 3px; background-color: var(--secondary); transition: width 0.3s ease; } .blog-post:hover .post-title::after { width: 100%; } .post-meta { display: flex; align-items: center; margin-bottom: 15px; font-size: 0.85rem; color: var(--dark); opacity: 0.7; } .post-meta span { margin-right: 15px; display: flex; align-items: center; } .post-meta i { margin-right: 5px; color: var(--secondary); } .post-excerpt { line-height: 1.6; margin-bottom: 20px; } .read-more { display: inline-block; color: var(--primary); font-weight: 600; text-decoration: none; position: relative; padding-bottom: 2px; cursor: pointer; } .read-more::after { content: ''; position: absolute; bottom: 0; left: 0; width: 100%; height: 2px; background-color: var(--primary); transform: scaleX(0); transform-origin: right; transition: transform 0.3s ease; } .read-more:hover::after { transform: scaleX(1); transform-origin: left; } .tag { display: inline-block; padding: 5px 10px; background-color: var(--light); border-radius: 20px; font-size: 0.8rem; margin-right: 8px; margin-top: 10px; transition: all 0.3s ease; position: relative; overflow: hidden; } .tag::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background-color: var(--primary); opacity: 0.1; transition: all 0.3s ease; } .tag:hover::before { left: 0; } .expanded-content { height: 0; overflow: hidden; transition: height 0.4s ease; line-height: 1.6; margin-top: 10px; } .handwriting { font-family: 'Caveat', cursive; color: var(--secondary); font-size: 1.3rem; transform: rotate(-3deg); position: absolute; bottom: -20px; right: 20px; z-index: 2; } .cursor-dot { width: 8px; height: 8px; background-color: var(--accent); border-radius: 50%; position: fixed; pointer-events: none; z-index: 9999; opacity: 0.7; transition: transform 0.1s ease; } .cursor-outline { width: 30px; height: 30px; border: 2px solid var(--primary); border-radius: 50%; position: fixed; pointer-events: none; z-index: 9998; opacity: 0.3; transition: transform 0.15s ease; } .blog-post-content.expanded { background-color: var(--light); } @media (max-width: 500px) { .blog-container { padding: 15px; } h1 { font-size: 1.8rem; } .tagline { font-size: 1rem; } .blog-post-content { padding: 20px; } .post-title { font-size: 1.3rem; } } </style> </head> <body> <div class="cursor-dot"></div> <div class="cursor-outline"></div> <div class="blog-container"> <header> <div class="header-doodle"></div> <h1>Sketched Thoughts</h1> <p class="tagline">Where ideas take organic shape, free from the constraints of rigid borders</p> </header> <div class="blog-post post-1"> <div class="blog-post-content"> <h2 class="post-title">Breaking Design Boundaries</h2> <div class="post-meta"> <span><i class="date">📅</i> June 18, 2023</span> <span><i class="author">👤</i> Maya Chen</span> </div> <p class="post-excerpt">The clip-path property has revolutionized how we think about content containers. No longer bound to rectangular boxes, our digital stories can now reflect the organic imperfection that makes human expression so compelling...</p> <a class="read-more">Continue reading</a> <div class="expanded-content"> <p>When we mimic hand-drawn borders with CSS clip-path, we're not just applying a visual trick – we're challenging the uniform grid that has dominated digital design for decades. These irregular shapes invite readers to pause and engage differently with content.</p> <p>Imperfection has always been the signature of human touch. By designing containers that appear sketched or torn from a notebook, we create digital spaces that feel crafted rather than generated, establishing an immediate emotional connection with readers.</p> <div class="tags"> <span class="tag">Web Design</span> <span class="tag">CSS Techniques</span> <span class="tag">Digital Storytelling</span> </div> </div> </div> <div class="handwriting">Break free from the box!</div> </div> <div class="blog-post post-2"> <div class="blog-post-content"> <h2 class="post-title">The Psychology of Irregular Shapes</h2> <div class="post-meta"> <span><i class="date">📅</i> June 24, 2023</span> <span><i class="author">👤</i> Thomas Wright</span> </div> <p class="post-excerpt">Research suggests that asymmetrical, organic forms capture attention more effectively than perfect geometry. Our brains are naturally drawn to the unexpected variation that comes with hand-drawn aesthetics...</p> <a class="read-more">Continue reading</a> <div class="expanded-content"> <p>The human eye naturally follows the irregular line of an organic shape, creating a more engaging visual journey than the predictable path of a rectangle. This extended visual processing translates directly to increased content retention.</p> <p>When we encounter something that appears handcrafted, we unconsciously assign it greater value and authenticity. By incorporating these organic containers into our blog layouts, we trigger this same perception, elevating the perceived worth of our digital content.</p> <div class="tags"> <span class="tag">Visual Psychology</span> <span class="tag">User Experience</span> <span class="tag">Cognitive Design</span> </div> </div> </div> <div class="handwriting">Minds love the unexpected!</div> </div> <div class="blog-post post-3"> <div class="blog-post-content"> <h2 class="post-title">Implementing Organic Containers</h2> <div class="post-meta"> <span><i class="date">📅</i> July 2, 2023</span> <span><i class="author">👤</i> Sophia Loren</span> </div> <p class="post-excerpt">Creating convincing hand-drawn containers is surprisingly straightforward with CSS clip-path. The polygon function allows us to define irregular borders using coordinate pairs, mimicking the natural variance of hand-drawn lines...</p> <a class="read-more">Continue reading</a> <div class="expanded-content"> <p>For the most natural appearance, use at least 8-10 coordinate points in your clip-path polygon, adding subtle variations rather than dramatic ones. Remember that real hand-drawn lines have small imperfections, not wild deviations.</p> <p>Layer multiple clip-path elements with slight offsets to create a sketched, multi-stroke effect. This technique adds depth and reinforces the hand-drawn aesthetic without complex SVG implementations.</p> <div class="tags"> <span class="tag">CSS Techniques</span> <span class="tag">Frontend Development</span> <span class="tag">Creative Coding</span> </div> </div> </div> <div class="handwriting">Let's build something unique!</div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Custom cursor effect const cursorDot = document.querySelector('.cursor-dot'); const cursorOutline = document.querySelector('.cursor-outline'); document.addEventListener('mousemove', function(e) { cursorDot.style.transform = `translate(${e.clientX}px, ${e.clientY}px)`; cursorOutline.style.transform = `translate(${e.clientX - 15}px, ${e.clientY - 15}px)`; }); document.addEventListener('mousedown', function() { cursorDot.style.transform += ' scale(0.5)'; cursorOutline.style.transform += ' scale(1.5)'; }); document.addEventListener('mouseup', function() { cursorDot.style.transform = cursorDot.style.transform.replace(' scale(0.5)', ''); cursorOutline.style.transform = cursorOutline.style.transform.replace(' scale(1.5)', ''); }); // Expandable content const readMoreLinks = document.querySelectorAll('.read-more'); readMoreLinks.forEach(link => { link.addEventListener('click', function() { const content = this.nextElementSibling; const blogPostContent = this.closest('.blog-post-content'); if (content.style.height === '0px' || content.style.height === '') { content.style.height = content.scrollHeight + 'px'; this.textContent = 'Read less'; blogPostContent.classList.add('expanded'); } else { content.style.height = '0px'; this.textContent = 'Continue reading'; blogPostContent.classList.remove('expanded'); } }); }); // Initialize expanded content height to 0 document.querySelectorAll('.expanded-content').forEach(content => { content.style.height = '0px'; }); // Animate blog posts on load const blogPosts = document.querySelectorAll('.blog-post'); blogPosts.forEach((post, index) => { setTimeout(() => { post.style.opacity = '1'; post.style.transform = 'translateY(0)'; }, 200 * index); }); // Tag hover effect const tags = document.querySelectorAll('.tag'); tags.forEach(tag => { tag.addEventListener('mouseenter', function() { this.style.color = 'var(--primary)'; }); tag.addEventListener('mouseleave', function() { this.style.color = 'var(--dark)'; }); }); // Create floating doodles on cursor click document.addEventListener('click', function(e) { if (e.target.closest('.blog-post-content') || e.target.closest('header')) { createDoodle(e.clientX, e.clientY); } }); function createDoodle(x, y) { const doodle = document.createElement('div'); doodle.style.position = 'absolute'; doodle.style.width = Math.random() * 30 + 20 + 'px'; doodle.style.height = Math.random() * 30 + 20 + 'px'; doodle.style.backgroundColor = 'var(--secondary)'; doodle.style.left = x + 'px'; doodle.style.top = y + 'px'; doodle.style.opacity = '0.1'; doodle.style.borderRadius = '50%'; doodle.style.pointerEvents = 'none'; doodle.style.zIndex = '0'; const randomClipPath = generateRandomClipPath(); doodle.style.clipPath = randomClipPath; document.body.appendChild(doodle); setTimeout(() => { doodle.style.transition = 'all 2s ease'; doodle.style.opacity = '0'; doodle.style.transform = `translate(${Math.random() * 100 - 50}px, ${Math.random() * -100 - 50}px) rotate(${Math.random() * 360}deg)`; }, 50); setTimeout(() => { document.body.removeChild(doodle); }, 2000); } function generateRandomClipPath() { const points = []; const numPoints = Math.floor(Math.random() * 4) + 8; for (let i = 0; i < numPoints; i++) { const angle = (i / numPoints) * Math.PI * 2; const radius = 50 + Math.random() * 15; const x = 50 + Math.cos(angle) * radius; const y = 50 + Math.sin(angle) * radius; points.push(`${x}% ${y}%`); } return `polygon(${points.join(', ')})`; } }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Financial Dashboard Interface</title> <style> :root { --primary: #2D3047; --secondary: #419D78; --tertiary: #E0A458; --light: #EDF5FC; --dark: #201A23; --danger: #D85963; --success: #58B368; --neutral: #A0A6B1; --shadow: rgba(0, 0, 0, 0.1); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; } body { background-color: #f5f7fa; color: var(--dark); overflow-x: hidden; height: 100vh; width: 100%; display: flex; justify-content: center; align-items: center; } .dashboard-container { width: 700px; height: 700px; padding: 1.5rem; background-color: #ffffff; border-radius: 8px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05); overflow: auto; display: flex; flex-direction: column; gap: 1.5rem; position: relative; } header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; } .user-profile { display: flex; align-items: center; gap: 12px; } .avatar { width: 40px; height: 40px; border-radius: 50%; background-color: var(--secondary); display: flex; justify-content: center; align-items: center; color: white; font-weight: 600; } .date-range { background-color: var(--light); padding: 0.5rem 1rem; border-radius: 20px; font-size: 0.85rem; font-weight: 500; color: var(--primary); cursor: pointer; transition: all 0.3s ease; } .date-range:hover { background-color: var(--primary); color: white; } h1 { font-size: 1.4rem; font-weight: 700; color: var(--primary); margin-bottom: 0.5rem; } .dashboard-grid { display: grid; grid-template-columns: repeat(12, 1fr); grid-template-rows: repeat(12, 1fr); gap: 1rem; height: 100%; } .card { background-color: white; border-radius: 4px; padding: 1.25rem; box-shadow: 0 4px 12px var(--shadow); transition: all 0.3s ease; position: relative; overflow: hidden; } .card:hover { transform: translateY(-5px); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); } .portfolio-value { grid-column: 1 / 9; grid-row: 1 / 5; clip-path: polygon(0 0, 100% 0%, 93% 100%, 0% 100%); background: linear-gradient(135deg, var(--primary), #3d4266); color: white; display: flex; flex-direction: column; justify-content: space-between; } .portfolio-value h2 { font-size: 1rem; font-weight: 600; margin-bottom: 0.5rem; opacity: 0.9; } .portfolio-value .value { font-size: 2.2rem; font-weight: 700; margin-bottom: 0.5rem; } .change { display: flex; align-items: center; gap: 8px; font-size: 0.9rem; font-weight: 500; } .change.positive { color: var(--success); } .change.negative { color: var(--danger); } .market-trends { grid-column: 9 / 13; grid-row: 1 / 5; clip-path: polygon(7% 0, 100% 0%, 100% 100%, 0% 100%); background-color: var(--light); display: flex; flex-direction: column; justify-content: space-between; } .trend-item { display: flex; justify-content: space-between; margin-bottom: 12px; } .trend-title { font-size: 0.85rem; font-weight: 600; color: var(--dark); } .trend-value { font-size: 0.85rem; font-weight: 700; } .asset-allocation { grid-column: 1 / 6; grid-row: 5 / 9; clip-path: polygon(0 0, 100% 0%, 93% 100%, 0% 100%); background-color: white; } .chart-container { width: 100%; height: 150px; position: relative; } .donut-chart { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .legend { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 0.5rem; } .legend-item { display: flex; align-items: center; gap: 6px; font-size: 0.75rem; } .legend-color { width: 10px; height: 10px; border-radius: 2px; } .recent-transactions { grid-column: 6 / 13; grid-row: 5 / 9; clip-path: polygon(0 0, 100% 0%, 100% 100%, 7% 100%); background-color: white; } .transaction-list { margin-top: 1rem; max-height: 140px; overflow-y: auto; } .transaction { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0; border-bottom: 1px solid rgba(0,0,0,0.05); } .transaction:last-child { border-bottom: none; } .transaction-details { display: flex; flex-direction: column; } .transaction-name { font-size: 0.85rem; font-weight: 600; color: var(--dark); } .transaction-date { font-size: 0.75rem; color: var(--neutral); } .transaction-amount { font-size: 0.9rem; font-weight: 600; } .amount-positive { color: var(--success); } .amount-negative { color: var(--danger); } .watchlist { grid-column: 1 / 7; grid-row: 9 / 13; clip-path: polygon(0 0, 100% 0%, 93% 100%, 0% 100%); background-color: white; } .stock-list { margin-top: 1rem; max-height: 140px; overflow-y: auto; } .stock-item { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0; border-bottom: 1px solid rgba(0,0,0,0.05); } .stock-item:last-child { border-bottom: none; } .stock-info { display: flex; align-items: center; gap: 10px; } .stock-icon { width: 28px; height: 28px; border-radius: 4px; background-color: var(--light); display: flex; justify-content: center; align-items: center; font-size: 0.8rem; font-weight: 700; color: var(--primary); } .stock-name { font-size: 0.85rem; font-weight: 600; color: var(--dark); } .stock-price { display: flex; flex-direction: column; align-items: flex-end; } .price-value { font-size: 0.85rem; font-weight: 600; } .price-change { font-size: 0.75rem; } .upcoming-payments { grid-column: 7 / 13; grid-row: 9 / 13; clip-path: polygon(0 0, 100% 0%, 100% 100%, 7% 100%); background-color: white; } .payment-list { margin-top: 1rem; max-height: 140px; overflow-y: auto; } .payment-item { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0; border-bottom: 1px solid rgba(0,0,0,0.05); } .payment-item:last-child { border-bottom: none; } .payment-info { display: flex; align-items: center; gap: 10px; } .payment-icon { width: 28px; height: 28px; border-radius: 4px; background-color: var(--light); display: flex; justify-content: center; align-items: center; font-size: 0.8rem; font-weight: 700; color: var(--tertiary); } .payment-name { font-size: 0.85rem; font-weight: 600; color: var(--dark); } .payment-date { font-size: 0.75rem; color: var(--neutral); } .payment-amount { font-size: 0.85rem; font-weight: 600; color: var(--primary); } .card h3 { font-size: 1rem; font-weight: 600; color: var(--primary); margin-bottom: 0.75rem; } .tooltip { position: absolute; background-color: var(--dark); color: white; padding: 0.5rem 0.75rem; border-radius: 4px; font-size: 0.75rem; z-index: 100; opacity: 0; transition: all 0.3s ease; pointer-events: none; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); max-width: 200px; } .tooltip::after { content: ''; position: absolute; bottom: -5px; left: 50%; transform: translateX(-50%); width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 5px solid var(--dark); } @media (max-width: 700px) { .dashboard-grid { grid-template-columns: 1fr; grid-template-rows: auto; gap: 1rem; } .portfolio-value, .market-trends, .asset-allocation, .recent-transactions, .watchlist, .upcoming-payments { grid-column: 1 / -1; grid-row: auto; clip-path: none; } .card { height: auto; } .dashboard-container { overflow-y: auto; } } @media (max-width: 500px) { header { flex-direction: column; align-items: flex-start; gap: 1rem; } .date-range { align-self: flex-start; } } /* Animation effects */ @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } @keyframes slideIn { from { transform: translateX(-30px); opacity: 0; } to { transform: translateX(0); opacity: 1; } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .portfolio-value { animation: slideIn 0.5s ease-out forwards; } .market-trends { animation: slideIn 0.5s ease-out 0.1s forwards; opacity: 0; animation-fill-mode: forwards; } .asset-allocation { animation: slideIn 0.5s ease-out 0.2s forwards; opacity: 0; animation-fill-mode: forwards; } .recent-transactions { animation: slideIn 0.5s ease-out 0.3s forwards; opacity: 0; animation-fill-mode: forwards; } .watchlist { animation: slideIn 0.5s ease-out 0.4s forwards; opacity: 0; animation-fill-mode: forwards; } .upcoming-payments { animation: slideIn 0.5s ease-out 0.5s forwards; opacity: 0; animation-fill-mode: forwards; } .highlight { animation: pulse 1s ease-in-out; } </style> </head> <body> <div class="dashboard-container"> <header> <div class="user-profile"> <div class="avatar">JD</div> <div> <h1>Alpha Insights</h1> <p>Welcome back, Jane Doe</p> </div> </div> <div class="date-range"> April 1 - April 30, 2023 </div> </header> <div class="dashboard-grid"> <div class="card portfolio-value"> <div> <h2>Total Portfolio Value</h2> <div class="value">$894,321.55</div> <div class="change positive"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M7 17L17 7M17 7H7M17 7V17" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> <span>+5.76% from last month</span> </div> </div> <div> <canvas id="portfolio-chart" width="300" height="80"></canvas> </div> </div> <div class="card market-trends"> <h3>Market Trends</h3> <div> <div class="trend-item"> <span class="trend-title">S&P 500</span> <span class="trend-value positive">+1.24%</span> </div> <div class="trend-item"> <span class="trend-title">Nasdaq</span> <span class="trend-value positive">+2.05%</span> </div> <div class="trend-item"> <span class="trend-title">10-Y Treasury</span> <span class="trend-value negative">-0.31%</span> </div> <div class="trend-item"> <span class="trend-title">Bitcoin</span> <span class="trend-value positive">+3.76%</span> </div> </div> </div> <div class="card asset-allocation"> <h3>Asset Allocation</h3> <div class="chart-container"> <canvas id="allocation-chart" class="donut-chart"></canvas> </div> <div class="legend"> <div class="legend-item"> <div class="legend-color" style="background-color: var(--secondary);"></div> <span>Stocks (42%)</span> </div> <div class="legend-item"> <div class="legend-color" style="background-color: var(--tertiary);"></div> <span>Bonds (28%)</span> </div> <div class="legend-item"> <div class="legend-color" style="background-color: var(--primary);"></div> <span>Real Estate (15%)</span> </div> <div class="legend-item"> <div class="legend-color" style="background-color: var(--danger);"></div> <span>Crypto (10%)</span> </div> <div class="legend-item"> <div class="legend-color" style="background-color: var(--neutral);"></div> <span>Cash (5%)</span> </div> </div> </div> <div class="card recent-transactions"> <h3>Recent Transactions</h3> <div class="transaction-list"> <div class="transaction"> <div class="transaction-details"> <span class="transaction-name">AAPL Purchase</span> <span class="transaction-date">April 28, 2023</span> </div> <span class="transaction-amount amount-negative">-$5,842.00</span> </div> <div class="transaction"> <div class="transaction-details"> <span class="transaction-name">MSFT Dividend</span> <span class="transaction-date">April 20, 2023</span> </div> <span class="transaction-amount amount-positive">+$763.22</span> </div> <div class="transaction"> <div class="transaction-details"> <span class="transaction-name">NVDA Sale</span> <span class="transaction-date">April 15, 2023</span> </div> <span class="transaction-amount amount-positive">+$12,451.87</span> </div> <div class="transaction"> <div class="transaction-details"> <span class="transaction-name">ETF Purchase</span> <span class="transaction-date">April 10, 2023</span> </div> <span class="transaction-amount amount-negative">-$8,500.00</span> </div> </div> </div> <div class="card watchlist"> <h3>Market Watchlist</h3> <div class="stock-list"> <div class="stock-item"> <div class="stock-info"> <div class="stock-icon">TSLA</div> <span class="stock-name">Tesla, Inc.</span> </div> <div class="stock-price"> <span class="price-value">$175.21</span> <span class="price-change positive">+2.34%</span> </div> </div> <div class="stock-item"> <div class="stock-info"> <div class="stock-icon">AMZN</div> <span class="stock-name">Amazon.com</span> </div> <div class="stock-price"> <span class="price-value">$105.45</span> <span class="price-change positive">+1.78%</span> </div> </div> <div class="stock-item"> <div class="stock-info"> <div class="stock-icon">META</div> <span class="stock-name">Meta Platforms</span> </div> <div class="stock-price"> <span class="price-value">$213.85</span> <span class="price-change negative">-0.92%</span> </div> </div> <div class="stock-item"> <div class="stock-info"> <div class="stock-icon">GOOG</div> <span class="stock-name">Alphabet Inc.</span> </div> <div class="stock-price"> <span class="price-value">$104.36</span> <span class="price-change positive">+3.15%</span> </div> </div> </div> </div> <div class="card upcoming-payments"> <h3>Upcoming Payment Schedules</h3> <div class="payment-list"> <div class="payment-item"> <div class="payment-info"> <div class="payment-icon">Q</div> <div> <div class="payment-name">Quarterly Taxes</div> <div class="payment-date">May 15, 2023</div> </div> </div> <div class="payment-amount">$12,450.00</div> </div> <div class="payment-item"> <div class="payment-info"> <div class="payment-icon">R</div> <div> <div class="payment-name">Roth IRA Contribution</div> <div class="payment-date">May 20, 2023</div> </div> </div> <div class="payment-amount">$1,750.00</div> </div> <div class="payment-item"> <div class="payment-info"> <div class="payment-icon">A</div> <div> <div class="payment-name">Advisory Fee</div> <div class="payment-date">June 1, 2023</div> </div> </div> <div class="payment-amount">$2,235.80</div> </div> </div> </div> </div> <div class="tooltip" id="tooltip"></div> </div> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script> document.addEventListener('DOMContentLoaded', function() { // Portfolio Chart const portfolioCtx = document.getElementById('portfolio-chart').getContext('2d'); const portfolioChart = new Chart(portfolioCtx, { type: 'line', data: { labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], datasets: [{ label: 'Portfolio Value', data: [820000, 835000, 845000, 860000, 875000, 890000, 894321.55], borderColor: 'rgba(255, 255, 255, 0.8)', backgroundColor: 'rgba(255, 255, 255, 0.1)', pointBackgroundColor: 'rgba(255, 255, 255, 1)', pointBorderColor: 'rgba(255, 255, 255, 1)', pointRadius: 0, pointHoverRadius: 4, tension: 0.4, fill: true }] }, options: { responsive: true, maintainAspectRatio: false, scales: { x: { display: false }, y: { display: false } }, plugins: { legend: { display: false }, tooltip: { backgroundColor: 'rgba(255, 255, 255, 0.9)', titleColor: '#2D3047', bodyColor: '#2D3047', cornerRadius: 4, displayColors: false, callbacks: { label: function(context) { return `$${context.raw.toLocaleString('en-US')}`; } } } }, interaction: { intersect: false, mode: 'index' } } }); // Asset Allocation Chart const allocationCtx = document.getElementById('allocation-chart').getContext('2d'); const allocationChart = new Chart(allocationCtx, { type: 'doughnut', data: { labels: ['Stocks', 'Bonds', 'Real Estate', 'Crypto', 'Cash'], datasets: [{ data: [42, 28, 15, 10, 5], backgroundColor: [ 'var(--secondary)', 'var(--tertiary)', 'var(--primary)', 'var(--danger)', 'var(--neutral)' ], borderWidth: 0, hoverOffset: 5 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { backgroundColor: 'rgba(32, 26, 35, 0.9)', titleColor: '#ffffff', bodyColor: '#ffffff', cornerRadius: 4, displayColors: false, callbacks: { label: function(context) { return `${context.label}: ${context.raw}%`; } } } }, cutout: '70%' } }); // Tooltip functionality const tooltip = document.getElementById('tooltip'); const cards = document.querySelectorAll('.card'); cards.forEach(card => { card.addEventListener('mouseenter', function(e) { card.classList.add('highlight'); let tooltipText = ''; if (card.classList.contains('portfolio-value')) { tooltipText = 'Your total portfolio value including all assets'; } else if (card.classList.contains('market-trends')) { tooltipText = 'Major market indices and their daily performance'; } else if (card.classList.contains('asset-allocation')) { tooltipText = 'How your portfolio is distributed across asset classes'; } else if (card.classList.contains('recent-transactions')) { tooltipText = 'Your most recent account activities'; } else if (card.classList.contains('watchlist')) { tooltipText = 'Stocks you're monitoring for investment opportunities'; } else if (card.classList.contains('upcoming-payments')) { tooltipText = 'Scheduled financial obligations coming up soon'; } tooltip.textContent = tooltipText; tooltip.style.opacity = '1'; const updateTooltipPosition = (e) => { const x = e.clientX; const y = e.clientY; tooltip.style.left = `${x + 10}px`; tooltip.style.top = `${y - 30}px`; }; updateTooltipPosition(e); card.addEventListener('mousemove', updateTooltipPosition); }); card.addEventListener('mouseleave', function() { card.classList.remove('highlight'); tooltip.style.opacity = '0'; }); }); // Add interactivity to date range const dateRange = document.querySelector('.date-range'); dateRange.addEventListener('click', function() { // Would typically show a date picker dialog this.textContent = 'May 1 - May 31, 2023'; // Simulate data refresh setTimeout(() => { // Update portfolio value document.querySelector('.portfolio-value .value').textContent = '$906,752.33'; document.querySelector('.portfolio-value .change').innerHTML = ` <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M7 17L17 7M17 7H7M17 7V17" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> <span>+1.39% from last month</span> `; // Update chart data portfolioChart.data.datasets[0].data = [820000, 835000, 845000, 860000, 875000, 890000, 894321.55, 906752.33]; portfolioChart.update(); // Highlight the change with animation document.querySelector('.portfolio-value').classList.add('highlight'); setTimeout(() => { document.querySelector('.portfolio-value').classList.remove('highlight'); }, 1000); }, 500); }); // Make stock items interactive const stockItems = document.querySelectorAll('.stock-item'); stockItems.forEach(item => { item.addEventListener('click', function() { // Would typically open detailed stock view this.classList.add('highlight'); setTimeout(() => { this.classList.remove('highlight'); }, 1000); }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Task Mist - Onboarding</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background-color: #f5f8fe; display: flex; justify-content: center; align-items: center; height: 100vh; overflow: hidden; perspective: 1000px; } .container { position: relative; width: 100%; max-width: 700px; height: 700px; display: flex; flex-direction: column; justify-content: center; align-items: center; overflow: hidden; } .onboarding-container { position: relative; width: 320px; height: 600px; background: white; border-radius: 24px; box-shadow: 0 25px 50px -12px rgba(31, 48, 199, 0.25); overflow: hidden; transition: transform 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55); } .onboarding-container:hover { transform: scale(1.02); } .slide { position: absolute; width: 100%; height: 100%; padding: 30px; display: flex; flex-direction: column; transform: translateX(100%); opacity: 0; transition: 0.5s ease-out; } .slide.active { transform: translateX(0); opacity: 1; } .shape-bg { position: absolute; top: 0; left: 0; width: 100%; height: 40%; z-index: 0; transition: all 0.6s ease-in-out; } .shape-1 { background: linear-gradient(135deg, #64AEFC, #1F30C7); clip-path: polygon(0 0, 100% 0, 100% 85%, 0 100%); } .shape-2 { background: linear-gradient(135deg, #FC6D64, #C71F51); clip-path: polygon(0 0, 100% 0, 100% 100%, 0 60%); } .shape-3 { background: linear-gradient(135deg, #64FCB5, #1FC796); clip-path: polygon(0 0, 100% 0, 100% 70%, 30% 100%, 0 70%); } .shape-4 { background: linear-gradient(135deg, #FCDC64, #C77D1F); clip-path: polygon(0 0, 70% 0, 100% 30%, 100% 100%, 0 70%); } .slide-content { position: relative; z-index: 1; display: flex; flex-direction: column; height: 100%; } .slide-image { margin-top: 60px; align-self: center; width: 220px; height: 190px; filter: drop-shadow(0 10px 15px rgba(0, 0, 0, 0.15)); transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out; opacity: 0; transform: translateY(20px); } .slide.active .slide-image { opacity: 1; transform: translateY(0); transition-delay: 0.2s; } .slide-title { margin-top: 25px; color: #333; font-size: 24px; font-weight: 700; text-align: center; transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out; opacity: 0; transform: translateY(20px); } .slide.active .slide-title { opacity: 1; transform: translateY(0); transition-delay: 0.3s; } .slide-desc { margin-top: 15px; color: #666; font-size: 16px; text-align: center; line-height: 1.5; transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out; opacity: 0; transform: translateY(20px); } .slide.active .slide-desc { opacity: 1; transform: translateY(0); transition-delay: 0.4s; } .navigation { margin-top: auto; display: flex; justify-content: space-between; align-items: center; width: 100%; padding-top: 25px; transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out; opacity: 0; } .slide.active .navigation { opacity: 1; transition-delay: 0.5s; } .nav-dots { display: flex; gap: 8px; } .dot { width: 8px; height: 8px; border-radius: 50%; background-color: #ddd; transition: all 0.3s ease; } .dot.active { width: 24px; border-radius: 4px; } .dot-1.active { background-color: #1F30C7; } .dot-2.active { background-color: #C71F51; } .dot-3.active { background-color: #1FC796; } .dot-4.active { background-color: #C77D1F; } .next-btn, .prev-btn, .start-btn { background: none; border: none; cursor: pointer; font-size: 16px; font-weight: 600; padding: 10px 15px; border-radius: 50px; transition: all 0.3s ease; } .next-btn { background-color: #1F30C7; color: white; box-shadow: 0 4px 10px rgba(31, 48, 199, 0.3); } .slide:nth-child(2) .next-btn { background-color: #C71F51; box-shadow: 0 4px 10px rgba(199, 31, 81, 0.3); } .slide:nth-child(3) .next-btn { background-color: #1FC796; box-shadow: 0 4px 10px rgba(31, 199, 150, 0.3); } .start-btn { background-color: #C77D1F; color: white; box-shadow: 0 4px 10px rgba(199, 125, 31, 0.3); } .prev-btn { color: #666; } .next-btn:hover, .start-btn:hover { transform: translateY(-2px); box-shadow: 0 6px 15px rgba(0, 0, 0, 0.2); } .prev-btn:hover { color: #333; } .floating-elements { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 2; } .floating-element { position: absolute; background-color: rgba(255, 255, 255, 0.7); border-radius: 50%; filter: blur(1px); animation: float 8s infinite ease-in-out; } .element-1 { width: 40px; height: 40px; top: 15%; left: 15%; animation-delay: 0s; } .element-2 { width: 25px; height: 25px; top: 25%; right: 15%; animation-delay: 1s; } .element-3 { width: 35px; height: 35px; bottom: 20%; left: 20%; animation-delay: 2s; } @keyframes float { 0%, 100% { transform: translateY(0) rotate(0deg); } 25% { transform: translateY(-15px) rotate(5deg); } 50% { transform: translateY(0) rotate(0deg); } 75% { transform: translateY(15px) rotate(-5deg); } } .progress-container { position: absolute; top: 20px; left: 20px; right: 20px; height: 4px; background-color: rgba(255, 255, 255, 0.3); border-radius: 2px; overflow: hidden; z-index: 3; } .progress-bar { height: 100%; width: 25%; background-color: white; border-radius: 2px; transition: width 0.4s ease; } @media (max-width: 500px) { .onboarding-container { width: 280px; height: 550px; } .slide { padding: 20px; } .slide-image { width: 180px; height: 160px; margin-top: 50px; } .slide-title { font-size: 20px; } .slide-desc { font-size: 14px; } } </style> </head> <body> <div class="container"> <div class="onboarding-container"> <div class="slide active"> <div class="shape-bg shape-1"></div> <div class="progress-container"> <div class="progress-bar" style="width: 25%"></div> </div> <div class="floating-elements"> <div class="floating-element element-1"></div> <div class="floating-element element-2"></div> <div class="floating-element element-3"></div> </div> <div class="slide-content"> <img src="https://assets.codepen.io/9277864/task-organize.svg" alt="Task Organization" class="slide-image"> <h1 class="slide-title">Fluid Task Management</h1> <p class="slide-desc">Break down complex projects into manageable tasks with our intuitive fluid interface. Drag, drop, and flow through your work.</p> <div class="navigation"> <div class="nav-dots"> <div class="dot dot-1 active"></div> <div class="dot dot-2"></div> <div class="dot dot-3"></div> <div class="dot dot-4"></div> </div> <button class="next-btn">Next</button> </div> </div> </div> <div class="slide"> <div class="shape-bg shape-2"></div> <div class="progress-container"> <div class="progress-bar" style="width: 50%"></div> </div> <div class="floating-elements"> <div class="floating-element element-1"></div> <div class="floating-element element-2"></div> <div class="floating-element element-3"></div> </div> <div class="slide-content"> <img src="https://assets.codepen.io/9277864/time-tracking.svg" alt="Time Tracking" class="slide-image"> <h1 class="slide-title">Smart Time Tracking</h1> <p class="slide-desc">Visualize how you spend your time with elegant data visualizations. Identify patterns and optimize your productivity flow.</p> <div class="navigation"> <button class="prev-btn">Back</button> <div class="nav-dots"> <div class="dot dot-1"></div> <div class="dot dot-2 active"></div> <div class="dot dot-3"></div> <div class="dot dot-4"></div> </div> <button class="next-btn">Next</button> </div> </div> </div> <div class="slide"> <div class="shape-bg shape-3"></div> <div class="progress-container"> <div class="progress-bar" style="width: 75%"></div> </div> <div class="floating-elements"> <div class="floating-element element-1"></div> <div class="floating-element element-2"></div> <div class="floating-element element-3"></div> </div> <div class="slide-content"> <img src="https://assets.codepen.io/9277864/collaboration.svg" alt="Team Collaboration" class="slide-image"> <h1 class="slide-title">Seamless Collaboration</h1> <p class="slide-desc">Connect team members with dynamic shared workspaces. Real-time updates flow naturally between collaborators.</p> <div class="navigation"> <button class="prev-btn">Back</button> <div class="nav-dots"> <div class="dot dot-1"></div> <div class="dot dot-2"></div> <div class="dot dot-3 active"></div> <div class="dot dot-4"></div> </div> <button class="next-btn">Next</button> </div> </div> </div> <div class="slide"> <div class="shape-bg shape-4"></div> <div class="progress-container"> <div class="progress-bar" style="width: 100%"></div> </div> <div class="floating-elements"> <div class="floating-element element-1"></div> <div class="floating-element element-2"></div> <div class="floating-element element-3"></div> </div> <div class="slide-content"> <img src="https://assets.codepen.io/9277864/insights.svg" alt="Task Insights" class="slide-image"> <h1 class="slide-title">Adaptive Insights</h1> <p class="slide-desc">Our AI analyzes your workflow patterns and suggests optimizations tailored to your unique productivity style.</p> <div class="navigation"> <button class="prev-btn">Back</button> <div class="nav-dots"> <div class="dot dot-1"></div> <div class="dot dot-2"></div> <div class="dot dot-3"></div> <div class="dot dot-4 active"></div> </div> <button class="start-btn">Get Started</button> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', () => { const slides = document.querySelectorAll('.slide'); const dots = document.querySelectorAll('.dot'); const nextBtns = document.querySelectorAll('.next-btn'); const prevBtns = document.querySelectorAll('.prev-btn'); const startBtn = document.querySelector('.start-btn'); let currentSlide = 0; // Mouse hover effect for the shape backgrounds const container = document.querySelector('.onboarding-container'); const shapes = document.querySelectorAll('.shape-bg'); container.addEventListener('mousemove', (e) => { const activeShape = slides[currentSlide].querySelector('.shape-bg'); if (!activeShape) return; const rect = container.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; const moveX = (x - rect.width / 2) / 30; const moveY = (y - rect.height / 2) / 30; activeShape.style.transform = `translate(${moveX}px, ${moveY}px)`; }); container.addEventListener('mouseleave', () => { const activeShape = slides[currentSlide].querySelector('.shape-bg'); if (activeShape) { activeShape.style.transform = 'translate(0, 0)'; } }); // Function to update slide visibility function showSlide(index) { slides.forEach((slide, i) => { slide.classList.toggle('active', i === index); }); dots.forEach((dot, i) => { dot.classList.toggle('active', i === index); }); currentSlide = index; } // Button click handlers nextBtns.forEach(btn => { btn.addEventListener('click', () => { if (currentSlide < slides.length - 1) { showSlide(currentSlide + 1); } }); }); prevBtns.forEach(btn => { btn.addEventListener('click', () => { if (currentSlide > 0) { showSlide(currentSlide - 1); } }); }); // Dot navigation dots.forEach((dot, index) => { dot.addEventListener('click', () => { showSlide(index); }); }); // Start button animation startBtn.addEventListener('click', () => { const container = document.querySelector('.onboarding-container'); container.style.transform = 'scale(0.8) translateY(-50px)'; container.style.opacity = '0'; setTimeout(() => { container.style.transform = 'scale(1) translateY(0)'; container.style.opacity = '1'; showSlide(0); }, 700); }); // Touch swipe functionality let touchStartX = 0; let touchEndX = 0; container.addEventListener('touchstart', (e) => { touchStartX = e.changedTouches[0].screenX; }); container.addEventListener('touchend', (e) => { touchEndX = e.changedTouches[0].screenX; handleSwipe(); }); function handleSwipe() { const swipeThreshold = 50; if (touchEndX < touchStartX - swipeThreshold && currentSlide < slides.length - 1) { // Swipe left - next slide showSlide(currentSlide + 1); } else if (touchEndX > touchStartX + swipeThreshold && currentSlide > 0) { // Swipe right - previous slide showSlide(currentSlide - 1); } } // Initialize the active slide showSlide(0); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>SoundSplash 2024 - Music Festival</title> <style> @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600;800&family=Poppins:wght@300;500;700&display=swap'); :root { --primary: #ff3e6c; --secondary: #4a11ff; --accent: #00e6c3; --dark: #121212; --light: #f8f8f8; --transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Poppins', sans-serif; background-color: var(--dark); color: var(--light); overflow-x: hidden; height: 100vh; width: 100%; position: relative; } .container { max-width: 700px; height: 700px; margin: 0 auto; padding: 20px; position: relative; overflow: hidden; display: flex; flex-direction: column; } /* Background Splash Shapes */ .splash { position: absolute; z-index: 0; opacity: 0.7; transition: var(--transition); } .splash-1 { top: -100px; left: -100px; width: 300px; height: 300px; background: var(--primary); clip-path: polygon(0% 15%, 15% 15%, 15% 0%, 85% 0%, 85% 15%, 100% 15%, 100% 85%, 85% 85%, 85% 100%, 15% 100%, 15% 85%, 0% 85%); animation: rotateAnimation 20s infinite alternate; } .splash-2 { bottom: -50px; right: -50px; width: 250px; height: 250px; background: var(--secondary); clip-path: circle(50% at 50% 50%); animation: pulseAnimation 8s infinite; } .splash-3 { top: 50%; left: 30%; width: 200px; height: 200px; background: var(--accent); clip-path: polygon(50% 0%, 0% 100%, 100% 100%); animation: floatAnimation 15s infinite alternate; } .splash-4 { bottom: 30%; right: 20%; width: 180px; height: 180px; background: var(--primary); clip-path: ellipse(25% 40% at 50% 50%); animation: shakeAnimation 12s infinite; } /* Header */ header { position: relative; z-index: 1; text-align: center; margin-bottom: 30px; } .logo { font-family: 'Montserrat', sans-serif; font-weight: 800; font-size: 3rem; background: linear-gradient(45deg, var(--primary), var(--secondary), var(--accent)); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; margin-bottom: 10px; position: relative; display: inline-block; } .logo::after { content: ''; position: absolute; bottom: 0; left: 0; width: 100%; height: 5px; background: linear-gradient(90deg, var(--primary), var(--secondary)); transform: scaleX(0); transform-origin: left; transition: var(--transition); } .logo:hover::after { transform: scaleX(1); } .tagline { font-size: 1.2rem; font-weight: 300; margin-bottom: 5px; opacity: 0.9; } .date { display: inline-block; background: var(--primary); color: var(--light); padding: 5px 15px; border-radius: 20px; font-weight: 600; margin-top: 5px; position: relative; overflow: hidden; } .date::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.2); transform: skewX(-20deg); transition: var(--transition); } .date:hover::before { left: 100%; } /* Main Content */ main { flex: 1; position: relative; z-index: 1; display: flex; flex-direction: column; justify-content: center; } .event-highlights { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; margin-bottom: 30px; } .highlight-card { background: rgba(30, 30, 30, 0.7); backdrop-filter: blur(10px); border-radius: 15px; padding: 20px; text-align: center; transition: var(--transition); border: 1px solid rgba(255, 255, 255, 0.1); cursor: pointer; position: relative; overflow: hidden; } .highlight-card:hover { transform: translateY(-5px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); background: rgba(40, 40, 40, 0.7); } .highlight-card::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 3px; background: linear-gradient(90deg, var(--primary), var(--secondary)); transform: scaleX(0); transform-origin: left; transition: var(--transition); } .highlight-card:hover::before { transform: scaleX(1); } .highlight-icon { font-size: 2rem; margin-bottom: 10px; } .highlight-title { font-weight: 600; margin-bottom: 5px; color: var(--accent); } .highlight-desc { font-size: 0.9rem; opacity: 0.8; } /* Lineup Section */ .lineup { margin-bottom: 30px; background: rgba(30, 30, 30, 0.5); backdrop-filter: blur(10px); border-radius: 15px; padding: 20px; border: 1px solid rgba(255, 255, 255, 0.1); } .lineup h2 { text-align: center; margin-bottom: 15px; font-family: 'Montserrat', sans-serif; font-weight: 700; color: var(--accent); position: relative; display: inline-block; left: 50%; transform: translateX(-50%); } .lineup h2::after { content: ''; position: absolute; bottom: -5px; left: 0; width: 100%; height: 2px; background: var(--accent); } .artists { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; } .artist { background: rgba(0, 0, 0, 0.3); padding: 8px 15px; border-radius: 20px; font-size: 0.9rem; transition: var(--transition); cursor: pointer; } .artist:hover { background: var(--secondary); transform: scale(1.05); } /* CTA Section */ .cta { text-align: center; margin-top: auto; position: relative; z-index: 1; } .cta-content { background: rgba(20, 20, 20, 0.8); backdrop-filter: blur(10px); border-radius: 15px; padding: 25px; margin-bottom: 20px; border: 1px solid rgba(255, 255, 255, 0.1); } .cta h2 { font-family: 'Montserrat', sans-serif; font-weight: 700; margin-bottom: 15px; color: var(--primary); } .cta p { margin-bottom: 20px; font-size: 1rem; line-height: 1.5; } .ticket-btn { display: inline-block; background: linear-gradient(45deg, var(--primary), var(--secondary)); color: var(--light); font-weight: 600; padding: 12px 30px; border-radius: 30px; text-decoration: none; text-transform: uppercase; letter-spacing: 1px; transition: var(--transition); border: none; cursor: pointer; position: relative; overflow: hidden; z-index: 1; } .ticket-btn::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(45deg, var(--secondary), var(--primary)); z-index: -1; opacity: 0; transition: var(--transition); } .ticket-btn:hover::before { opacity: 1; } .ticket-btn:hover { transform: translateY(-3px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3); } .newsletter { display: flex; margin-top: 20px; justify-content: center; } .email-input { padding: 10px 15px; border-radius: 25px 0 0 25px; border: none; background: rgba(255, 255, 255, 0.1); color: var(--light); width: 60%; font-family: 'Poppins', sans-serif; font-size: 0.9rem; transition: var(--transition); } .email-input:focus { outline: none; background: rgba(255, 255, 255, 0.15); box-shadow: 0 0 0 2px var(--accent); } .subscribe-btn { padding: 10px 15px; border-radius: 0 25px 25px 0; border: none; background: var(--accent); color: var(--dark); font-weight: 600; cursor: pointer; transition: var(--transition); } .subscribe-btn:hover { background: #00c9aa; } /* Countdown Timer */ .countdown { display: flex; justify-content: center; gap: 15px; margin: 20px 0; } .countdown-item { display: flex; flex-direction: column; align-items: center; background: rgba(0, 0, 0, 0.5); border-radius: 10px; padding: 10px; min-width: 60px; } .countdown-number { font-size: 1.5rem; font-weight: 700; color: var(--accent); font-family: 'Montserrat', sans-serif; } .countdown-label { font-size: 0.8rem; opacity: 0.7; } /* Animations */ @keyframes rotateAnimation { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @keyframes pulseAnimation { 0%, 100% { transform: scale(1); opacity: 0.7; } 50% { transform: scale(1.2); opacity: 0.5; } } @keyframes floatAnimation { 0% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(-20px) rotate(10deg); } 100% { transform: translateY(0) rotate(0deg); } } @keyframes shakeAnimation { 0%, 100% { transform: translateX(0); } 10%, 30%, 50%, 70%, 90% { transform: translateX(-10px); } 20%, 40%, 60%, 80% { transform: translateX(10px); } } /* Media Queries */ @media (max-width: 600px) { .event-highlights { grid-template-columns: 1fr; } .logo { font-size: 2.5rem; } .tagline { font-size: 1rem; } .countdown-item { min-width: 50px; padding: 8px; } .countdown-number { font-size: 1.2rem; } .countdown-label { font-size: 0.7rem; } } /* Tooltip for lineup */ .tooltip { position: absolute; background: var(--dark); color: var(--light); padding: 10px; border-radius: 5px; font-size: 0.8rem; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); pointer-events: none; opacity: 0; transition: opacity 0.3s; z-index: 100; max-width: 150px; text-align: center; } /* Modal for ticket purchase */ .modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.8); backdrop-filter: blur(5px); display: flex; justify-content: center; align-items: center; z-index: 1000; opacity: 0; visibility: hidden; transition: all 0.3s ease; } .modal { background: var(--dark); border-radius: 15px; padding: 30px; width: 90%; max-width: 500px; position: relative; transform: translateY(50px); transition: all 0.4s ease; border: 1px solid rgba(255, 255, 255, 0.1); } .modal-close { position: absolute; top: 15px; right: 15px; background: none; border: none; color: var(--light); font-size: 1.5rem; cursor: pointer; transition: var(--transition); } .modal-close:hover { color: var(--primary); transform: rotate(90deg); } .modal-title { font-family: 'Montserrat', sans-serif; font-weight: 700; margin-bottom: 20px; color: var(--primary); text-align: center; } .ticket-options { display: flex; flex-direction: column; gap: 15px; margin-bottom: 20px; } .ticket-option { background: rgba(40, 40, 40, 0.7); border-radius: 10px; padding: 15px; display: flex; justify-content: space-between; align-items: center; cursor: pointer; transition: var(--transition); border: 1px solid rgba(255, 255, 255, 0.05); } .ticket-option:hover { background: rgba(60, 60, 60, 0.7); transform: translateX(5px); } .ticket-option.selected { border-color: var(--accent); background: rgba(0, 230, 195, 0.1); } .ticket-name { font-weight: 600; } .ticket-price { color: var(--accent); font-weight: 700; } .modal-footer { text-align: center; margin-top: 20px; } .modal-overlay.active { opacity: 1; visibility: visible; } .modal-overlay.active .modal { transform: translateY(0); } /* Audio visualizer */ .visualizer-container { position: absolute; bottom: 0; left: 0; width: 100%; height: 40px; display: flex; justify-content: center; align-items: flex-end; padding: 0 20px; z-index: 2; } .bar { width: 5px; height: 5px; margin: 0 2px; background: var(--accent); border-radius: 5px 5px 0 0; transition: height 0.2s ease; } /* Success message */ .success-message { position: fixed; top: 20px; left: 50%; transform: translateX(-50%); background: var(--accent); color: var(--dark); padding: 10px 20px; border-radius: 30px; font-weight: 600; z-index: 1000; opacity: 0; visibility: hidden; transition: all 0.3s ease; } .success-message.active { opacity: 1; visibility: visible; animation: slideDown 0.5s forwards, fadeOut 0.5s forwards 2.5s; } @keyframes slideDown { 0% { transform: translate(-50%, -20px); } 100% { transform: translate(-50%, 0); } } @keyframes fadeOut { 0% { opacity: 1; } 100% { opacity: 0; visibility: hidden; } } /* Loading spinner */ .loading { display: inline-block; width: 20px; height: 20px; border: 3px solid rgba(255, 255, 255, 0.3); border-radius: 50%; border-top-color: var(--light); animation: spin 1s ease-in-out infinite; margin-left: 10px; display: none; } @keyframes spin { to { transform: rotate(360deg); } } </style> </head> <body> <div class="container"> <!-- Background Splash Elements --> <div class="splash splash-1"></div> <div class="splash splash-2"></div> <div class="splash splash-3"></div> <div class="splash splash-4"></div> <!-- Header --> <header> <h1 class="logo">SoundSplash</h1> <p class="tagline">Where Music Meets Imagination</p> <span class="date">August 15-17, 2024 • Coastal Park</span> </header> <!-- Main Content --> <main> <!-- Countdown --> <div class="countdown"> <div class="countdown-item"> <span id="days" class="countdown-number">00</span> <span class="countdown-label">Days</span> </div> <div class="countdown-item"> <span id="hours" class="countdown-number">00</span> <span class="countdown-label">Hours</span> </div> <div class="countdown-item"> <span id="minutes" class="countdown-number">00</span> <span class="countdown-label">Minutes</span> </div> <div class="countdown-item"> <span id="seconds" class="countdown-number">00</span> <span class="countdown-label">Seconds</span> </div> </div> <!-- Event Highlights --> <div class="event-highlights"> <div class="highlight-card"> <div class="highlight-icon">🎵</div> <h3 class="highlight-title">3 Epic Stages</h3> <p class="highlight-desc">Dive into different musical worlds with our thoughtfully curated stages.</p> </div> <div class="highlight-card"> <div class="highlight-icon">🍹</div> <h3 class="highlight-title">Craft Experiences</h3> <p class="highlight-desc">Artisan food, drinks, and immersive art installations throughout.</p> </div> <div class="highlight-card"> <div class="highlight-icon">🏕️</div> <h3 class="highlight-title">Beachside Camping</h3> <p class="highlight-desc">Fall asleep to the sound of waves at our exclusive camping zones.</p> </div> <div class="highlight-card"> <div class="highlight-icon">♻️</div> <h3 class="highlight-title">Eco-Conscious</h3> <p class="highlight-desc">Zero-waste initiatives and sustainable practices throughout the festival.</p> </div> </div> <!-- Lineup --> <div class="lineup"> <h2>Featured Artists</h2> <div class="artists"> <div class="artist" data-info="Headlining Friday with their chart-topping new album">Cosmic Rhythms</div> <div class="artist" data-info="Saturday's electronic music sensation from Berlin">Neon Pulse</div> <div class="artist" data-info="Sunday's closing act, known for epic live performances">Aurora Waves</div> <div class="artist" data-info="Hip-hop collective bringing fresh sounds from the underground">Verbal Alchemy</div> <div class="artist" data-info="Indie rock favorites with their infectious energy">Midnight Echo</div> <div class="artist" data-info="Beach stage DJ set that will keep you dancing till dawn">Ocean Beats</div> </div> </div> <!-- CTA Section --> <div class="cta"> <div class="cta-content"> <h2>Don't Miss the Beat!</h2> <p>Early bird tickets are 40% off until July 1st. Reserve your spot for the most vibrant festival experience of the year.</p> <button class="ticket-btn" id="ticketBtn">Get Your Tickets <span class="loading"></span></button> </div> <div class="newsletter"> <input type="email" class="email-input" placeholder="Your email for updates" id="emailInput"> <button class="subscribe-btn" id="subscribeBtn">Subscribe</button> </div> </div> </main> <!-- Audio Visualizer --> <div class="visualizer-container" id="visualizer"> <!-- Bars will be generated by JS --> </div> </div> <!-- Tooltip --> <div class="tooltip" id="tooltip"></div> <!-- Modal --> <div class="modal-overlay" id="modalOverlay"> <div class="modal"> <button class="modal-close" id="modalClose">×</button> <h2 class="modal-title">Choose Your Experience</h2> <div class="ticket-options"> <div class="ticket-option" data-value="standard"> <span class="ticket-name">Weekend Pass</span> <span class="ticket-price">$149</span> </div> <div class="ticket-option" data-value="vip"> <span class="ticket-name">VIP Experience</span> <span class="ticket-price">$299</span> </div> <div class="ticket-option" data-value="ultimate"> <span class="ticket-name">Ultimate Package</span> <span class="ticket-price">$499</span> </div> </div> <div class="modal-footer"> <button class="ticket-btn" id="confirmBtn">Reserve My Spot</button> </div> </div> </div> <!-- Success Message --> <div class="success-message" id="successMessage">Great! Check your email for details.</div> <script> document.addEventListener("DOMContentLoaded", function() { // Countdown Timer const countdownDate = new Date("August 15, 2024 10:00:00").getTime(); function updateCountdown() { const now = new Date().getTime(); const distance = countdownDate - now; const days = Math.floor(distance / (1000 * 60 * 60 * 24)); const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((distance % (1000 * 60)) / 1000); document.getElementById("days").innerText = days.toString().padStart(2, '0'); document.getElementById("hours").innerText = hours.toString().padStart(2, '0'); document.getElementById("minutes").innerText = minutes.toString().padStart(2, '0'); document.getElementById("seconds").innerText = seconds.toString().padStart(2, '0'); } setInterval(updateCountdown, 1000); updateCountdown(); // Audio Visualizer const visualizer = document.getElementById("visualizer"); const barCount = 20; for (let i = 0; i < barCount; i++) { const bar = document.createElement("div"); bar.className = "bar"; visualizer.appendChild(bar); } function animateVisualizer() { const bars = document.querySelectorAll(".bar"); bars.forEach(bar => { const height = Math.floor(Math.random() * 30) + 5; bar.style.height = `${height}px`; }); } setInterval(animateVisualizer, 200); // Tooltip for artists const tooltip = document.getElementById("tooltip"); const artists = document.querySelectorAll(".artist"); artists.forEach(artist => { artist.addEventListener("mouseenter", function(e) { const info = this.getAttribute("data-info"); tooltip.innerText = info; tooltip.style.left = `${e.pageX}px`; tooltip.style.top = `${e.pageY - 40}px`; tooltip.style.opacity = "1"; }); artist.addEventListener("mouseleave", function() { tooltip.style.opacity = "0"; }); artist.addEventListener("mousemove", function(e) { tooltip.style.left = `${e.pageX}px`; tooltip.style.top = `${e.pageY - 40}px`; }); }); // Modal Functionality const modalOverlay = document.getElementById("modalOverlay"); const ticketBtn = document.getElementById("ticketBtn"); const modalClose = document.getElementById("modalClose"); const ticketOptions = document.querySelectorAll(".ticket-option"); const confirmBtn = document.getElementById("confirmBtn"); const successMessage = document.getElementById("successMessage"); const loading = document.querySelector(".loading"); ticketBtn.addEventListener("click", function() { modalOverlay.classList.add("active"); }); modalClose.addEventListener("click", function() { modalOverlay.classList.remove("active"); }); ticketOptions.forEach(option => { option.addEventListener("click", function() { ticketOptions.forEach(opt => opt.classList.remove("selected")); this.classList.add("selected"); }); }); confirmBtn.addEventListener("click", function() { modalOverlay.classList.remove("active"); successMessage.classList.add("active"); setTimeout(() => { successMessage.classList.remove("active"); }, 3000); }); // Subscribe Button const subscribeBtn = document.getElementById("subscribeBtn"); const emailInput = document.getElementById("emailInput"); subscribeBtn.addEventListener("click", function() { if (emailInput.value.trim() === "") { emailInput.focus(); return; } subscribeBtn.innerHTML = 'Subscribing...'; setTimeout(() => { emailInput.value = ""; subscribeBtn.innerHTML = 'Subscribe'; successMessage.innerText = "You're on the list! Updates coming soon."; successMessage.classList.add("active"); setTimeout(() => { successMessage.classList.remove("active"); }, 3000); }, 1000); }); // Splash Animation Interaction const splashes = document.querySelectorAll(".splash"); document.addEventListener("mousemove", function(e) { const x = e.clientX / window.innerWidth; const y = e.clientY / window.innerHeight; splashes.forEach((splash, index) => { const speed = (index + 1) * 10; splash.style.transform = `translate(${x * speed}px, ${y * speed}px)`; }); }); // Hover effect for highlight cards const highlightCards = document.querySelectorAll(".highlight-card"); highlightCards.forEach(card => { card.addEventListener("mouseenter", function() { highlightCards.forEach(c => { if (c !== this) { c.style.opacity = "0.7"; c.style.transform = "scale(0.95)"; } }); }); card.addEventListener("mouseleave", function() { highlightCards.forEach(c => { c.style.opacity = "1"; c.style.transform = "scale(1)"; }); }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Digital Magazine Cover - NOVA</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Montserrat', sans-serif; } @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;600;700;900&family=Playfair+Display:wght@400;700;900&display=swap'); body { background-color: #f0f0f0; display: flex; justify-content: center; align-items: center; min-height: 700px; width: 100%; overflow: hidden; } .magazine-cover { position: relative; width: 700px; height: 700px; background: linear-gradient(135deg, #091e3a, #2f80ed); overflow: hidden; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3); color: white; } .magazine-logo { position: absolute; top: 20px; left: 20px; z-index: 10; font-family: 'Playfair Display', serif; font-weight: 900; font-size: 3rem; letter-spacing: -1px; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); user-select: none; } .logo-accent { color: #ffcc00; font-size: 3.5rem; font-style: italic; } .magazine-date { position: absolute; top: 25px; right: 25px; font-size: 0.8rem; font-weight: 300; letter-spacing: 2px; z-index: 10; } .content-container { position: relative; width: 100%; height: 100%; display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; } .cover-section { position: relative; overflow: hidden; transition: transform 0.4s ease, filter 0.5s ease; } .cover-section img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.75s ease; transform-origin: center center; filter: saturate(0.9) contrast(1.1); } .cover-section:hover img { transform: scale(1.05); } .cover-section:nth-child(1) { grid-row: 1 / 3; clip-path: polygon(0 0, 100% 0, 60% 100%, 0 100%); } .cover-section:nth-child(2) { clip-path: polygon(0 0, 100% 0, 100% 65%, 0 100%); } .cover-section:nth-child(3) { clip-path: polygon(0 35%, 100% 0, 100% 100%, 0 100%); } .content-title { position: absolute; z-index: 5; font-family: 'Playfair Display', serif; text-shadow: 0 2px 10px rgba(0, 0, 0, 0.6); transition: transform 0.5s cubic-bezier(0.17, 0.67, 0.83, 0.67); } .cover-section:hover .content-title { transform: translateY(-5px); } .cover-section:nth-child(1) .content-title { left: 30px; bottom: 200px; max-width: 280px; font-size: 2.3rem; font-weight: 900; } .cover-section:nth-child(2) .content-title { left: 30px; bottom: 80px; max-width: 240px; font-size: 1.6rem; font-weight: 700; } .cover-section:nth-child(3) .content-title { right: 30px; top: 80px; max-width: 240px; font-size: 1.6rem; font-weight: 700; text-align: right; } .content-teaser { position: absolute; z-index: 5; font-size: 0.9rem; font-weight: 300; line-height: 1.4; max-width: 240px; text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8); opacity: 0; transform: translateY(10px); transition: opacity 0.5s ease, transform 0.5s ease; } .cover-section:hover .content-teaser { opacity: 1; transform: translateY(0); } .cover-section:nth-child(1) .content-teaser { left: 30px; bottom: 160px; } .cover-section:nth-child(2) .content-teaser { left: 30px; bottom: 40px; } .cover-section:nth-child(3) .content-teaser { right: 30px; top: 140px; text-align: right; } .content-tag { position: absolute; font-size: 0.7rem; font-weight: 600; letter-spacing: 1px; padding: 5px 10px; border-radius: 3px; text-transform: uppercase; z-index: 5; background: rgba(255, 204, 0, 0.9); color: #000; transform: translateY(0); transition: transform 0.3s ease; } .cover-section:hover .content-tag { transform: translateY(-3px) rotate(-1deg); } .cover-section:nth-child(1) .content-tag { left: 30px; bottom: 310px; } .cover-section:nth-child(2) .content-tag { left: 30px; bottom: 140px; } .cover-section:nth-child(3) .content-tag { right: 30px; top: 40px; } .section-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(to bottom, rgba(0,0,0,0.1), rgba(0,0,0,0.6)); z-index: 2; opacity: 0.7; transition: opacity 0.3s ease; } .cover-section:hover .section-overlay { opacity: 0.5; } .hover-indicator { position: absolute; width: 50px; height: 50px; border-radius: 50%; background-color: rgba(255, 204, 0, 0.2); opacity: 0; transform: scale(0); z-index: 15; pointer-events: none; transition: transform 0.5s ease-out, opacity 0.5s ease-out; } .issue-tag { position: absolute; right: 20px; bottom: 20px; font-size: 0.75rem; font-weight: 700; color: #ffcc00; z-index: 10; padding: 5px 10px; border: 1px solid rgba(255, 204, 0, 0.5); text-transform: uppercase; letter-spacing: 2px; } @media (max-width: 700px) { .magazine-cover { width: 100%; height: auto; aspect-ratio: 1/1; } .magazine-logo { font-size: 2.5rem; } .logo-accent { font-size: 3rem; } .cover-section:nth-child(1) .content-title { font-size: 1.8rem; bottom: 150px; max-width: 220px; } .cover-section:nth-child(2) .content-title, .cover-section:nth-child(3) .content-title { font-size: 1.3rem; max-width: 200px; } .content-teaser { font-size: 0.8rem; max-width: 200px; } .content-tag { font-size: 0.6rem; } .cover-section:nth-child(1) .content-tag { bottom: 250px; } } </style> </head> <body> <div class="magazine-cover"> <div class="magazine-logo"> N<span class="logo-accent">Λ</span>VA </div> <div class="magazine-date">OCTOBER 2023</div> <div class="issue-tag">Frontiers Issue</div> <div class="content-container"> <div class="cover-section"> <div class="section-overlay"></div> <img src="https://images.unsplash.com/photo-1517373116369-9bdb8cdc9f62?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" alt="Neural interface technology"> <div class="content-tag">Technology</div> <h2 class="content-title">The Neural Revolution: Beyond Human Perception</h2> <p class="content-teaser">How brain-computer interfaces are transcending the limitations of human senses, allowing us to experience reality in unprecedented ways.</p> </div> <div class="cover-section"> <div class="section-overlay"></div> <img src="https://images.unsplash.com/photo-1550745165-9bc0b252726f?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" alt="Virtual reality environment"> <div class="content-tag">Innovation</div> <h2 class="content-title">Tomorrow's Cities: Designing Invisible Interactions</h2> <p class="content-teaser">The emerging field of ambient computing is reimagining urban spaces where technology fades into the background.</p> </div> <div class="cover-section"> <div class="section-overlay"></div> <img src="https://images.unsplash.com/photo-1581093196277-9f6e9a92ffd1?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" alt="Environmental technology"> <div class="content-tag">Sustainability</div> <h2 class="content-title">Climate Catalysts: The Quantum Computing Solution</h2> <p class="content-teaser">How quantum algorithms are revolutionizing climate modeling with unprecedented accuracy to drive targeted solutions.</p> </div> </div> <div class="hover-indicator"></div> </div> <script> document.addEventListener('DOMContentLoaded', () => { const coverSections = document.querySelectorAll('.cover-section'); const hoverIndicator = document.querySelector('.hover-indicator'); const magazineCover = document.querySelector('.magazine-cover'); // Create ripple effect on mouse move magazineCover.addEventListener('mousemove', (e) => { const rect = magazineCover.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; hoverIndicator.style.left = `${x - 25}px`; hoverIndicator.style.top = `${y - 25}px`; hoverIndicator.style.opacity = '1'; hoverIndicator.style.transform = 'scale(1.5)'; setTimeout(() => { hoverIndicator.style.opacity = '0'; hoverIndicator.style.transform = 'scale(0)'; }, 700); }); // Add interaction for cover sections coverSections.forEach((section, index) => { section.addEventListener('mouseover', () => { coverSections.forEach((s, i) => { if (i !== index) { s.style.filter = 'brightness(0.7)'; } else { s.style.filter = 'brightness(1.1)'; } }); }); section.addEventListener('mouseout', () => { coverSections.forEach(s => { s.style.filter = 'brightness(1)'; }); }); // Add touch support for mobile section.addEventListener('touchstart', () => { const teaserElement = section.querySelector('.content-teaser'); teaserElement.style.opacity = '1'; teaserElement.style.transform = 'translateY(0)'; coverSections.forEach((s, i) => { if (i !== index) { s.style.filter = 'brightness(0.7)'; } else { s.style.filter = 'brightness(1.1)'; } }); }); }); // Random subtle animation for the magazine logo const logoAccent = document.querySelector('.logo-accent'); function animateLogo() { logoAccent.style.transform = 'translateY(-2px)'; setTimeout(() => { logoAccent.style.transform = 'translateY(0)'; }, 500); } setInterval(animateLogo, 3000); // Add subtle parallax effect magazineCover.addEventListener('mousemove', (e) => { const xAxis = (window.innerWidth / 2 - e.pageX) / 20; const yAxis = (window.innerHeight / 2 - e.pageY) / 20; coverSections.forEach(section => { const img = section.querySelector('img'); img.style.transform = `scale(1.05) translate(${xAxis * 0.3}px, ${yAxis * 0.3}px)`; }); }); magazineCover.addEventListener('mouseleave', () => { coverSections.forEach(section => { const img = section.querySelector('img'); img.style.transform = 'scale(1)'; }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>SaaS Feature Cards</title> <style> :root { --primary: #4361ee; --primary-dark: #3a56d4; --secondary: #f72585; --tertiary: #7209b7; --success: #06d6a0; --warning: #ffd166; --bg: #f8f9fa; --dark: #2b2d42; --light: #ffffff; --shadow: 0 10px 30px rgba(0, 0, 0, 0.1); --transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; } body { background-color: var(--bg); color: var(--dark); display: flex; justify-content: center; align-items: center; min-height: 100vh; overflow-x: hidden; padding: 20px; } .container { max-width: 700px; width: 100%; margin: 0 auto; } .header { text-align: center; margin-bottom: 40px; } .header h1 { font-size: 2.5rem; margin-bottom: 15px; position: relative; display: inline-block; } .header h1::after { content: ""; position: absolute; width: 40%; height: 4px; background: var(--primary); bottom: -8px; left: 30%; clip-path: polygon(0 0, 100% 0, 90% 100%, 10% 100%); } .header p { font-size: 1.1rem; color: #555; max-width: 80%; margin: 0 auto; } .feature-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 30px; margin-top: 60px; perspective: 1000px; } .feature-card { position: relative; height: 220px; background: var(--light); box-shadow: var(--shadow); transition: var(--transition); cursor: pointer; overflow: hidden; z-index: 1; } .feature-card::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(67, 97, 238, 0.1), rgba(114, 9, 183, 0.1)); opacity: 0; transition: var(--transition); z-index: -1; } .feature-card:nth-child(1) { clip-path: polygon(0 0, 100% 0, 100% 85%, 0 100%); } .feature-card:nth-child(2) { clip-path: polygon(0 0, 100% 0, 100% 100%, 0 85%); } .feature-card:nth-child(3) { clip-path: polygon(0 0, 100% 15%, 100% 100%, 0 100%); } .feature-card:nth-child(4) { clip-path: polygon(0 15%, 100% 0, 100% 100%, 0 100%); } .feature-icon { position: absolute; top: 20px; left: 20px; width: 50px; height: 50px; background: var(--light); border-radius: 12px; display: flex; justify-content: center; align-items: center; font-size: 24px; color: var(--primary); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); transition: var(--transition); transform-origin: center; } .feature-content { padding: 80px 20px 20px; transition: var(--transition); } .feature-title { font-size: 1.2rem; margin-bottom: 10px; color: var(--dark); transition: var(--transition); } .feature-desc { font-size: 0.95rem; color: #666; line-height: 1.5; margin-bottom: 15px; opacity: 0.8; transition: var(--transition); } .feature-link { color: var(--primary); font-weight: 600; font-size: 0.9rem; text-decoration: none; display: flex; align-items: center; gap: 5px; transform: translateX(-5px); opacity: 0; transition: var(--transition); } .feature-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, var(--primary), var(--tertiary)); clip-path: circle(0% at 90% 10%); transition: all 0.6s cubic-bezier(0.19, 1, 0.22, 1); z-index: -1; } /* Hover Effects */ .feature-card:hover { transform: translateY(-10px) rotateX(5deg); box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15); } .feature-card:hover::before { opacity: 1; } .feature-card:hover .feature-overlay { clip-path: circle(150% at 90% 10%); } .feature-card:hover .feature-icon { background: var(--light); transform: scale(1.1) rotate(10deg); color: var(--secondary); box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2); } .feature-card:hover .feature-title, .feature-card:hover .feature-desc { color: var(--light); } .feature-card:hover .feature-link { transform: translateX(0); opacity: 1; color: var(--light); } /* Theme Toggle */ .theme-toggle { position: absolute; top: 20px; right: 20px; width: 50px; height: 25px; background: var(--light); border-radius: 25px; display: flex; align-items: center; padding: 5px; cursor: pointer; box-shadow: var(--shadow); z-index: 100; } .toggle-ball { width: 20px; height: 20px; background: var(--primary); border-radius: 50%; transition: var(--transition); } .dark-mode { --bg: #121212; --dark: #f8f9fa; --light: #2b2d42; --shadow: 0 10px 30px rgba(0, 0, 0, 0.3); } .dark-mode .toggle-ball { transform: translateX(25px); background: var(--secondary); } /* Badges and Accents */ .badge { position: absolute; bottom: 15px; right: 15px; background: var(--warning); color: var(--dark); padding: 3px 10px; font-size: 0.8rem; font-weight: 600; border-radius: 8px; clip-path: polygon(5% 0, 100% 0, 95% 100%, 0% 100%); transition: var(--transition); } .feature-card:hover .badge { transform: scale(1.1); background: var(--success); } /* Loading animation */ .loading-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: var(--bg); display: flex; justify-content: center; align-items: center; z-index: 1000; transition: opacity 0.6s ease-out; } .loading-overlay.hidden { opacity: 0; pointer-events: none; } .loader { width: 60px; height: 60px; border: 4px solid rgba(67, 97, 238, 0.2); border-radius: 50%; border-top: 4px solid var(--primary); animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Responsive */ @media (max-width: 600px) { .feature-grid { grid-template-columns: 1fr; } .header h1 { font-size: 2rem; } .header p { max-width: 100%; font-size: 1rem; } .feature-card { height: 200px; } } @media (max-width: 400px) { .header h1 { font-size: 1.8rem; } .feature-content { padding: 70px 15px 15px; } } </style> </head> <body> <div class="loading-overlay"> <div class="loader"></div> </div> <div class="theme-toggle" id="themeToggle"> <div class="toggle-ball"></div> </div> <div class="container"> <div class="header"> <h1>CloudScape Suite</h1> <p>Cutting-edge features that redefine your workflow experience</p> </div> <div class="feature-grid"> <div class="feature-card" data-aos="fade-up"> <div class="feature-overlay"></div> <div class="feature-icon"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M21 7.5L12 2L3 7.5M21 7.5L12 13M21 7.5V16.5L12 22M12 13L3 7.5M12 13V22M3 7.5V16.5L12 22" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="feature-content"> <h3 class="feature-title">Quantum Sync Engine</h3> <p class="feature-desc">Real-time data synchronization with zero latency across 200+ data centers worldwide.</p> <a href="#" class="feature-link">Learn more <span>→</span></a> </div> <div class="badge">New</div> </div> <div class="feature-card" data-aos="fade-up" data-aos-delay="100"> <div class="feature-overlay"></div> <div class="feature-icon"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M19.4 15C19.2669 15.3016 19.2272 15.6362 19.286 15.9606C19.3448 16.285 19.4995 16.5843 19.73 16.82L19.79 16.88C19.976 17.0657 20.1235 17.2863 20.2241 17.5291C20.3248 17.7719 20.3766 18.0322 20.3766 18.295C20.3766 18.5578 20.3248 18.8181 20.2241 19.0609C20.1235 19.3037 19.976 19.5243 19.79 19.71C19.6043 19.896 19.3837 20.0435 19.1409 20.1441C18.8981 20.2448 18.6378 20.2966 18.375 20.2966C18.1122 20.2966 17.8519 20.2448 17.6091 20.1441C17.3663 20.0435 17.1457 19.896 16.96 19.71L16.9 19.65C16.6643 19.4195 16.365 19.2648 16.0406 19.206C15.7162 19.1472 15.3816 19.1869 15.08 19.32C14.7842 19.4468 14.532 19.6572 14.3543 19.9255C14.1766 20.1938 14.0813 20.5082 14.08 20.83V21C14.08 21.5304 13.8693 22.0391 13.4942 22.4142C13.1191 22.7893 12.6104 23 12.08 23C11.5496 23 11.0409 22.7893 10.6658 22.4142C10.2907 22.0391 10.08 21.5304 10.08 21V20.91C10.0723 20.579 9.96512 20.258 9.77251 19.9887C9.5799 19.7194 9.31074 19.5143 9 19.4C8.69838 19.2669 8.36381 19.2272 8.03941 19.286C7.71502 19.3448 7.41568 19.4995 7.18 19.73L7.12 19.79C6.93425 19.976 6.71368 20.1235 6.47088 20.2241C6.22808 20.3248 5.96783 20.3766 5.705 20.3766C5.44217 20.3766 5.18192 20.3248 4.93912 20.2241C4.69632 20.1235 4.47575 19.976 4.29 19.79C4.10405 19.6043 3.95653 19.3837 3.85588 19.1409C3.75523 18.8981 3.70343 18.6378 3.70343 18.375C3.70343 18.1122 3.75523 17.8519 3.85588 17.6091C3.95653 17.3663 4.10405 17.1457 4.29 16.96L4.35 16.9C4.58054 16.6643 4.73519 16.365 4.794 16.0406C4.85282 15.7162 4.81312 15.3816 4.68 15.08C4.55324 14.7842 4.34276 14.532 4.07447 14.3543C3.80618 14.1766 3.49179 14.0813 3.17 14.08H3C2.46957 14.08 1.96086 13.8693 1.58579 13.4942C1.21071 13.1191 1 12.6104 1 12.08C1 11.5496 1.21071 11.0409 1.58579 10.6658C1.96086 10.2907 2.46957 10.08 3 10.08H3.09C3.42099 10.0723 3.742 9.96512 4.0113 9.77251C4.28059 9.5799 4.48572 9.31074 4.6 9C4.73312 8.69838 4.77282 8.36381 4.714 8.03941C4.65519 7.71502 4.50054 7.41568 4.27 7.18L4.21 7.12C4.02405 6.93425 3.87653 6.71368 3.77588 6.47088C3.67523 6.22808 3.62343 5.96783 3.62343 5.705C3.62343 5.44217 3.67523 5.18192 3.77588 4.93912C3.87653 4.69632 4.02405 4.47575 4.21 4.29C4.39575 4.10405 4.61632 3.95653 4.85912 3.85588C5.10192 3.75523 5.36217 3.70343 5.625 3.70343C5.88783 3.70343 6.14808 3.75523 6.39088 3.85588C6.63368 3.95653 6.85425 4.10405 7.04 4.29L7.1 4.35C7.33568 4.58054 7.63502 4.73519 7.95941 4.794C8.28381 4.85282 8.61838 4.81312 8.92 4.68H9C9.29577 4.55324 9.54802 4.34276 9.72569 4.07447C9.90337 3.80618 9.99872 3.49179 10 3.17V3C10 2.46957 10.2107 1.96086 10.5858 1.58579C10.9609 1.21071 11.4696 1 12 1C12.5304 1 13.0391 1.21071 13.4142 1.58579C13.7893 1.96086 14 2.46957 14 3V3.09C14.0013 3.41179 14.0966 3.72618 14.2743 3.99447C14.452 4.26276 14.7042 4.47324 15 4.6C15.3016 4.73312 15.6362 4.77282 15.9606 4.714C16.285 4.65519 16.5843 4.50054 16.82 4.27L16.88 4.21C17.0657 4.02405 17.2863 3.87653 17.5291 3.77588C17.7719 3.67523 18.0322 3.62343 18.295 3.62343C18.5578 3.62343 18.8181 3.67523 19.0609 3.77588C19.3037 3.87653 19.5243 4.02405 19.71 4.21C19.896 4.39575 20.0435 4.61632 20.1441 4.85912C20.2448 5.10192 20.2966 5.36217 20.2966 5.625C20.2966 5.88783 20.2448 6.14808 20.1441 6.39088C20.0435 6.63368 19.896 6.85425 19.71 7.04L19.65 7.1C19.4195 7.33568 19.2648 7.63502 19.206 7.95941C19.1472 8.28381 19.1869 8.61838 19.32 8.92V9C19.4468 9.29577 19.6572 9.54802 19.9255 9.72569C20.1938 9.90337 20.5082 9.99872 20.83 10H21C21.5304 10 22.0391 10.2107 22.4142 10.5858C22.7893 10.9609 23 11.4696 23 12C23 12.5304 22.7893 13.0391 22.4142 13.4142C22.0391 13.7893 21.5304 14 21 14H20.91C20.5882 14.0013 20.2738 14.0966 20.0055 14.2743C19.7372 14.452 19.5268 14.7042 19.4 15Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="feature-content"> <h3 class="feature-title">Neural Workflow Builder</h3> <p class="feature-desc">AI-powered automation that learns your preferences and builds adaptive workflows.</p> <a href="#" class="feature-link">Learn more <span>→</span></a> </div> <div class="badge">Pro</div> </div> <div class="feature-card" data-aos="fade-up" data-aos-delay="200"> <div class="feature-overlay"></div> <div class="feature-icon"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 6V12L16 14" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="feature-content"> <h3 class="feature-title">Shadow Vault Security</h3> <p class="feature-desc">Military-grade encryption with quantum-resistant protocols and zero-knowledge architecture.</p> <a href="#" class="feature-link">Learn more <span>→</span></a> </div> <div class="badge">Enhanced</div> </div> <div class="feature-card" data-aos="fade-up" data-aos-delay="300"> <div class="feature-overlay"></div> <div class="feature-icon"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M9 11L12 14L22 4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M21 12V19C21 19.5304 20.7893 20.0391 20.4142 20.4142C20.0391 20.7893 19.5304 21 19 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V5C3 4.46957 3.21071 3.96086 3.58579 3.58579C3.96086 3.21071 4.46957 3 5 3H16" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="feature-content"> <h3 class="feature-title">Prismatic Analytics</h3> <p class="feature-desc">Multi-dimensional data visualization with predictive insights and customizable dashboards.</p> <a href="#" class="feature-link">Learn more <span>→</span></a> </div> <div class="badge">Beta</div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Loading Animation setTimeout(() => { document.querySelector('.loading-overlay').classList.add('hidden'); }, 1500); // Theme Toggle const themeToggle = document.getElementById('themeToggle'); themeToggle.addEventListener('click', function() { document.body.classList.toggle('dark-mode'); }); // Card Animation on Scroll const featureCards = document.querySelectorAll('.feature-card'); const animateCards = () => { featureCards.forEach((card, index) => { setTimeout(() => { card.style.opacity = '0'; card.style.transform = 'translateY(20px)'; setTimeout(() => { card.style.transition = 'all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275)'; card.style.opacity = '1'; card.style.transform = 'translateY(0)'; }, 100); }, index * 150); }); }; // Initial animation setTimeout(animateCards, 1600); // Link Click Animation const featureLinks = document.querySelectorAll('.feature-link'); featureLinks.forEach(link => { link.addEventListener('click', function(e) { e.preventDefault(); const card = this.closest('.feature-card'); card.style.transform = 'scale(0.95)'; setTimeout(() => { card.style.transform = 'translateY(-10px) rotateX(5deg)'; }, 200); }); }); // Particle effect on card hover featureCards.forEach(card => { card.addEventListener('mousemove', function(e) { const rect = this.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; const icon = this.querySelector('.feature-icon'); const xOffset = (x / rect.width - 0.5) * 10; const yOffset = (y / rect.height - 0.5) * 10; icon.style.transform = `scale(1.1) rotate(10deg) translate(${xOffset}px, ${yOffset}px)`; }); card.addEventListener('mouseleave', function() { const icon = this.querySelector('.feature-icon'); icon.style.transform = ''; }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Terra Cucina - Artisanal Italian Restaurant</title> <style> @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700&family=Source+Sans+Pro:wght@300;400;600&display=swap'); :root { --color-ochre: #C38154; --color-cream: #F9EED7; --color-terracotta: #884A39; --color-sage: #617A55; --color-slate: #333333; } * { margin: 0; padding: 0; box-sizing: border-box; } html, body { font-family: 'Source Sans Pro', sans-serif; background-color: var(--color-cream); color: var(--color-slate); overflow-x: hidden; height: 100%; width: 100%; } .container { position: relative; width: 100%; height: 100%; overflow: hidden; } .hero { display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; width: 100%; height: 100%; padding: 20px; } .header { display: flex; justify-content: space-between; align-items: center; width: 100%; padding: 15px 20px; position: absolute; top: 0; left: 0; z-index: 20; } .logo { font-family: 'Playfair Display', serif; font-weight: 700; font-size: 28px; color: var(--color-terracotta); text-decoration: none; display: flex; align-items: center; } .logo-icon { margin-right: 8px; font-size: 24px; } .mobile-menu-toggle { display: none; background: none; border: none; font-size: 24px; color: var(--color-terracotta); cursor: pointer; } .nav-links { display: flex; gap: 25px; } .nav-links a { color: var(--color-slate); text-decoration: none; font-weight: 400; font-size: 16px; position: relative; transition: color 0.3s; } .nav-links a::after { content: ''; position: absolute; bottom: -5px; left: 0; width: 0; height: 2px; background-color: var(--color-ochre); transition: width 0.3s; } .nav-links a:hover { color: var(--color-ochre); } .nav-links a:hover::after { width: 100%; } .content { position: relative; z-index: 10; text-align: center; max-width: 550px; margin-top: 20px; } h1 { font-family: 'Playfair Display', serif; font-size: 56px; font-weight: 700; color: var(--color-terracotta); margin-bottom: 20px; line-height: 1.1; opacity: 0; transform: translateY(30px); animation: fadeUp 0.8s forwards 0.2s; } .accent { color: var(--color-ochre); position: relative; display: inline-block; } .accent::after { content: ''; position: absolute; bottom: 5px; left: 0; width: 100%; height: 8px; background-color: rgba(195, 129, 84, 0.2); z-index: -1; } .tagline { font-size: 18px; line-height: 1.6; margin-bottom: 30px; color: var(--color-slate); opacity: 0; transform: translateY(30px); animation: fadeUp 0.8s forwards 0.4s; } .cta-button { display: inline-block; padding: 16px 32px; background-color: var(--color-ochre); color: white; border: none; border-radius: 50px; font-weight: 600; font-size: 16px; cursor: pointer; text-decoration: none; transition: all 0.3s ease; position: relative; overflow: hidden; z-index: 1; margin-right: 15px; opacity: 0; transform: translateY(30px); animation: fadeUp 0.8s forwards 0.6s; } .cta-button:hover { transform: translateY(-3px); box-shadow: 0 10px 20px rgba(195, 129, 84, 0.3); } .cta-button:active { transform: translateY(-1px); box-shadow: 0 5px 10px rgba(195, 129, 84, 0.3); } .secondary-cta { display: inline-block; padding: 16px 32px; background: transparent; color: var(--color-terracotta); border: 1px solid var(--color-terracotta); border-radius: 50px; font-weight: 600; font-size: 16px; cursor: pointer; text-decoration: none; transition: all 0.3s ease; opacity: 0; transform: translateY(30px); animation: fadeUp 0.8s forwards 0.7s; } .secondary-cta:hover { background-color: rgba(136, 74, 57, 0.1); transform: translateY(-3px); } .shape { position: absolute; z-index: 1; } .shape-1 { top: -10%; right: -5%; width: 50%; height: 70%; background-color: rgba(195, 129, 84, 0.1); clip-path: ellipse(30% 40% at 70% 30%); animation: float 20s infinite alternate ease-in-out; } .shape-2 { bottom: -20%; left: -15%; width: 60%; height: 60%; background-color: rgba(97, 122, 85, 0.15); clip-path: polygon(25% 0%, 100% 0%, 75% 100%, 0% 100%); transform: rotate(-15deg); animation: float 15s infinite alternate-reverse ease-in-out; } .shape-3 { top: 50%; right: 25%; width: 200px; height: 200px; background-color: rgba(136, 74, 57, 0.1); clip-path: circle(50% at 50% 50%); animation: float 18s infinite alternate ease-in-out; } .shape-4 { bottom: 10%; right: -5%; width: 250px; height: 250px; background-color: rgba(249, 238, 215, 0.5); clip-path: ellipse(30% 40% at 70% 70%); animation: float 12s infinite alternate-reverse ease-in-out; } .food-image { position: absolute; bottom: 0; right: 0; width: 35%; height: auto; z-index: 5; opacity: 0; transform: translateX(50px); animation: fadeLeft 1s forwards 0.8s; } .food-image img { width: 100%; height: auto; filter: drop-shadow(0px 10px 20px rgba(0, 0, 0, 0.15)); } .floating-elements { position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden; pointer-events: none; z-index: 2; } .ingredient { position: absolute; width: 40px; height: 40px; background-size: contain; background-repeat: no-repeat; opacity: 0.6; animation: float 15s infinite alternate ease-in-out; } .basil { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40' fill='none'%3E%3Cpath d='M20 5C13.5 5 10 15 10 20C15 17.5 20 18 25 20C25 15 26.5 5 20 5Z' fill='%23617A55'/%3E%3Cpath d='M20 5C26.5 5 30 15 30 20C25 17.5 20 18 15 20C15 15 13.5 5 20 5Z' fill='%23617A55'/%3E%3Cpath d='M20 35C20 35 18 28 20 20C22 28 20 35 20 35Z' fill='%23617A55'/%3E%3C/svg%3E"); top: 15%; left: 20%; animation-duration: 20s; } .tomato { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40' fill='none'%3E%3Ccircle cx='20' cy='20' r='15' fill='%23C94C4C'/%3E%3Cpath d='M20 5C20 5 15 10 20 10C25 10 20 5 20 5Z' fill='%23617A55'/%3E%3C/svg%3E"); top: 70%; left: 10%; animation-duration: 25s; } .garlic { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40' fill='none'%3E%3Cpath d='M15 15C15 10 20 5 25 10C30 15 25 30 20 30C15 30 15 20 15 15Z' fill='%23F9EED7'/%3E%3C/svg%3E"); top: 40%; right: 20%; animation-duration: 18s; } .olive { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40' fill='none'%3E%3Cpath d='M25 20C25 26.0751 22.7614 31 20 31C17.2386 31 15 26.0751 15 20C15 13.9249 17.2386 9 20 9C22.7614 9 25 13.9249 25 20Z' fill='%23617A55'/%3E%3C/svg%3E"); bottom: 25%; right: 15%; animation-duration: 22s; } @keyframes float { 0% { transform: translate(0, 0) rotate(0deg); } 50% { transform: translate(10px, -10px) rotate(5deg); } 100% { transform: translate(-10px, 10px) rotate(-5deg); } } @keyframes fadeUp { to { opacity: 1; transform: translateY(0); } } @keyframes fadeLeft { to { opacity: 1; transform: translateX(0); } } .hours-tag { position: absolute; top: 120px; left: 20px; background-color: var(--color-ochre); color: white; padding: 8px 15px; border-radius: 50px; font-size: 14px; font-weight: 600; z-index: 10; display: flex; align-items: center; transform: translateY(-20px); opacity: 0; animation: fadeUp 0.8s forwards 1s; } .hours-tag svg { margin-right: 5px; } .awards-tag { position: absolute; bottom: 50px; left: 50px; background-color: rgba(255, 255, 255, 0.9); color: var(--color-terracotta); padding: 10px 20px; border-radius: 10px; font-size: 14px; font-weight: 600; z-index: 10; display: flex; align-items: center; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05); transform: translateY(20px); opacity: 0; animation: fadeUp 0.8s forwards 1.2s; } .awards-tag svg { margin-right: 8px; color: var(--color-ochre); } @media (max-width: 768px) { .header { padding: 15px; } .logo { font-size: 22px; } .nav-links { display: none; position: absolute; top: 70px; left: 0; width: 100%; flex-direction: column; background-color: white; padding: 20px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); z-index: 30; } .nav-links.active { display: flex; } .mobile-menu-toggle { display: block; } h1 { font-size: 40px; } .content { margin-top: 40px; padding: 0 10px; } .tagline { font-size: 16px; } .cta-button, .secondary-cta { width: 100%; margin-bottom: 10px; margin-right: 0; } .food-image { width: 70%; bottom: 0; right: -15%; } .hours-tag { top: 80px; left: 10px; } .awards-tag { bottom: 20px; left: 10px; } } </style> </head> <body> <div class="container"> <div class="hero"> <header class="header"> <a href="#" class="logo"> <span class="logo-icon">🍽️</span> Terra Cucina </a> <button class="mobile-menu-toggle" id="mobile-menu-toggle"> ☰ </button> <nav class="nav-links" id="nav-links"> <a href="#">Our Menu</a> <a href="#">Reservations</a> <a href="#">Our Story</a> <a href="#">Gallery</a> <a href="#">Contact</a> </nav> </header> <div class="content"> <h1>Artisanal Italian with a <span class="accent">seasonal twist</span></h1> <p class="tagline">Handcrafted pastas, wood-fired pizzas, and farm-to-table ingredients sourced from local Tuscan-inspired gardens. Experience the flavors of authentic Italian countryside in every bite.</p> <a href="#" class="cta-button" id="reservation-btn">Reserve a Table</a> <a href="#" class="secondary-cta">View Our Menu</a> </div> <div class="shape shape-1"></div> <div class="shape shape-2"></div> <div class="shape shape-3"></div> <div class="shape shape-4"></div> <div class="hours-tag"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="2"/> <path d="M12 7V12L15 15" stroke="currentColor" stroke-width="2" stroke-linecap="round"/> </svg> Open Today: 11:30 AM - 10:00 PM </div> <div class="awards-tag"> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2L15.09 8.26L22 9.27L17 14.14L18.18 21.02L12 17.77L5.82 21.02L7 14.14L2 9.27L8.91 8.26L12 2Z" fill="currentColor"/> </svg> 2023 Michelin Guide Recommendation </div> <div class="floating-elements"> <div class="ingredient basil"></div> <div class="ingredient tomato"></div> <div class="ingredient garlic"></div> <div class="ingredient olive"></div> </div> <div class="food-image"> <img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='400' viewBox='0 0 300 400' fill='none'%3E%3Cellipse cx='150' cy='365' rx='120' ry='15' fill='%23DDDDDD' fill-opacity='0.5'/%3E%3Cpath d='M230 180C230 235.228 195.228 280 150 280C104.772 280 70 235.228 70 180C70 124.772 104.772 80 150 80C195.228 80 230 124.772 230 180Z' fill='%23F0D5A8'/%3E%3Cpath d='M220 180C220 229.706 188.66 270 150 270C111.34 270 80 229.706 80 180C80 130.294 111.34 90 150 90C188.66 90 220 130.294 220 180Z' fill='%23C38154'/%3E%3Cpath d='M70 180H230V210C230 265.228 195.228 350 150 350C104.772 350 70 265.228 70 210V180Z' fill='%23884A39'/%3E%3Cpath d='M150 120C150 120 120 140 100 180M150 120C150 120 180 140 200 180' stroke='white' stroke-width='3'/%3E%3Cpath d='M120 200C120 200 140 220 150 220C160 220 180 200 180 200' stroke='white' stroke-width='3'/%3E%3Cpath d='M110 240C110 240 130 280 150 280C170 280 190 240 190 240' stroke='white' stroke-width='3'/%3E%3Cpath d='M130 300C130 300 140 320 150 320C160 320 170 300 170 300' stroke='white' stroke-width='2'/%3E%3Cpath d='M150 120L150.5 60C150.5 60 170 65 170 80C170 95 150 120 150 120Z' fill='%23617A55'/%3E%3Cpath d='M140 70C140 70 140 65 150 60C160 55 170 60 170 60' stroke='%23617A55' stroke-width='3'/%3E%3C/svg%3E" alt="Artisanal Pasta"> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Mobile menu toggle const mobileMenuToggle = document.getElementById('mobile-menu-toggle'); const navLinks = document.getElementById('nav-links'); mobileMenuToggle.addEventListener('click', function() { navLinks.classList.toggle('active'); }); // Reservation button hover effect const reservationBtn = document.getElementById('reservation-btn'); reservationBtn.addEventListener('mouseover', function() { this.innerHTML = "Book Your Experience"; }); reservationBtn.addEventListener('mouseout', function() { this.innerHTML = "Reserve a Table"; }); // Scroll animation for floating ingredients function animateIngredients() { const ingredients = document.querySelectorAll('.ingredient'); ingredients.forEach((ingredient, index) => { const delay = index * 0.5; const duration = 15 + index * 3; ingredient.style.animationDuration = `${duration}s`; ingredient.style.animationDelay = `${delay}s`; }); } animateIngredients(); // Parallax effect on shapes document.addEventListener('mousemove', function(e) { const shapes = document.querySelectorAll('.shape'); shapes.forEach((shape, index) => { const speed = (index + 1) * 0.03; const x = (window.innerWidth / 2 - e.clientX) * speed; const y = (window.innerHeight / 2 - e.clientY) * speed; shape.style.transform = `translate(${x}px, ${y}px)`; }); }); }); </script> </body> </html>