Flip cards are a dynamic and engaging way to present information on a website, offering an interactive experience for users. They can be used to reveal additional details, images, or actions with a simple flip.
In this article, we will explore 10 stunning flip card examples that showcase the versatility and creativity of this design element. Each example highlights unique features and functionalities that can inspire your next project.
CODE1
Here's the code:
CODETEXT1
CODE2
Here's the code:
CODETEXT2
CODE3
Here's the code:
CODETEXT3
CODE4
Here's the code:
CODETEXT4
CODE5
Here's the code:
CODETEXT5
Designers and developers love Subframe for its drag-and-drop interface and intuitive, responsive canvas, making it easy to create pixel-perfect UI every time. Whether you're crafting a flip card or any other UI element, Subframe ensures a seamless design experience.
Start for free and see why Subframe is the go-to tool for stunning, production-ready designs.
CODE6
Here's the code:
CODETEXT6
CODE7
Here's the code:
CODETEXT7
CODE8
Here's the code:
CODETEXT8
CODE9
Here's the code:
CODETEXT9
CODE10
Here's the code:
CODETEXT10
Ready to elevate your UI design game? With Subframe, you can create pixel-perfect UIs, including stunning flip cards, in minutes. Our drag-and-drop editor ensures efficiency and precision.
Don't wait—start for free and begin designing immediately. Experience the ease and power of Subframe today!
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> :root { --primary: #293241; --secondary: #ee6c4d; --light: #e0fbfc; --mid: #98c1d9; --dark: #3d5a80; --shadow: rgba(41, 50, 65, 0.1); --card-width: 300px; --card-height: 400px; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; } body { display: flex; justify-content: center; align-items: center; min-height: 700px; background-color: var(--light); overflow-x: hidden; padding: 30px 0; } .container { width: 100%; max-width: 700px; padding: 20px; display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 30px; justify-items: center; } .card-wrapper { width: var(--card-width); height: var(--card-height); perspective: 1000px; cursor: pointer; } .card { position: relative; width: 100%; height: 100%; transform-style: preserve-3d; transition: transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275); border-radius: 15px; box-shadow: 0 15px 35px var(--shadow); } .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: 15px; overflow: hidden; } .card-front { background-color: white; display: flex; flex-direction: column; align-items: center; justify-content: space-between; padding: 20px; } .card-back { background-color: var(--primary); color: white; transform: rotateY(180deg); padding: 30px; display: flex; flex-direction: column; justify-content: space-between; } .product-image { width: 100%; height: 230px; object-fit: contain; transition: transform 0.3s ease; } .card-front:hover .product-image { transform: scale(1.05); } .product-tag { position: absolute; top: 15px; left: 0; background-color: var(--secondary); color: white; padding: 6px 12px; font-size: 12px; font-weight: 600; text-transform: uppercase; border-radius: 0 4px 4px 0; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.1); } .product-info { width: 100%; } .product-title { font-size: 18px; font-weight: 600; margin-bottom: 5px; color: var(--primary); } .product-price { font-size: 22px; font-weight: 700; color: var(--secondary); display: flex; align-items: center; margin-top: 8px; } .product-price .original { font-size: 16px; color: #aaa; text-decoration: line-through; margin-left: 10px; } .product-category { font-size: 12px; color: var(--dark); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 5px; } .back-title { font-size: 22px; font-weight: 700; margin-bottom: 15px; color: var(--mid); } .product-description { font-size: 14px; line-height: 1.5; margin-bottom: 20px; color: var(--mid); } .product-features { margin-bottom: 20px; } .feature { display: flex; align-items: center; margin-bottom: 8px; font-size: 14px; color: var(--light); } .feature-icon { margin-right: 10px; width: 20px; height: 20px; background-color: var(--secondary); color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 10px; } .cta-button { background-color: var(--secondary); color: white; border: none; padding: 12px 20px; border-radius: 50px; font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 4px 15px rgba(238, 108, 77, 0.3); width: 100%; text-align: center; } .cta-button:hover { background-color: #ff7d5e; transform: translateY(-2px); box-shadow: 0 6px 20px rgba(238, 108, 77, 0.4); } .flip-hint { position: absolute; bottom: 15px; right: 15px; background-color: var(--dark); color: white; width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 14px; cursor: pointer; transition: transform 0.3s ease, background-color 0.3s ease; } .flip-hint:hover { background-color: var(--secondary); transform: rotate(180deg); } .card.is-flipped { transform: rotateY(180deg); } .rating { display: flex; align-items: center; margin-top: 5px; } .stars { display: flex; margin-right: 5px; } .star { color: gold; font-size: 14px; } .review-count { font-size: 12px; color: #777; } .back-to-front { position: absolute; top: 15px; right: 15px; color: var(--mid); cursor: pointer; font-size: 18px; width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; transition: transform 0.3s ease, color 0.3s ease; } .back-to-front:hover { color: var(--secondary); transform: rotate(-180deg); } .product-colors { display: flex; margin-top: 10px; } .color-option { width: 20px; height: 20px; border-radius: 50%; margin-right: 8px; cursor: pointer; border: 2px solid white; transition: transform 0.2s ease, box-shadow 0.2s ease; } .color-option:hover { transform: scale(1.2); box-shadow: 0 0 0 2px var(--secondary); } .stock-indicator { font-size: 12px; font-weight: 500; color: #4caf50; display: flex; align-items: center; margin-top: 5px; } .stock-indicator.low { color: #ff9800; } .stock-indicator i { margin-right: 5px; font-size: 10px; } @media (max-width: 600px) { .container { grid-template-columns: 1fr; } :root { --card-width: 280px; --card-height: 380px; } .card-front { padding: 15px; } .card-back { padding: 20px; } .product-image { height: 200px; } } /* Magic patterns */ .magic-pattern { position: absolute; top: 0; left: 0; right: 0; bottom: 0; opacity: 0.05; background-image: radial-gradient(var(--secondary) 2px, transparent 2px), radial-gradient(var(--secondary) 2px, transparent 2px); background-size: 30px 30px; background-position: 0 0, 15px 15px; z-index: 0; border-radius: 15px; } /* Filter interaction */ .filter-controls { display: flex; justify-content: center; margin-bottom: 20px; flex-wrap: wrap; gap: 10px; } .filter-btn { background-color: white; border: 1px solid var(--mid); color: var(--primary); padding: 6px 14px; border-radius: 20px; font-size: 13px; cursor: pointer; transition: all 0.3s ease; } .filter-btn:hover, .filter-btn.active { background-color: var(--primary); color: white; border-color: var(--primary); } .back-details { position: relative; z-index: 1; } /* Loader animation */ .loader-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--light); display: flex; justify-content: center; align-items: center; z-index: 9999; opacity: 1; transition: opacity 0.5s ease, visibility 0.5s ease; } .loader { width: 60px; height: 60px; border: 6px solid var(--mid); border-top: 6px solid var(--secondary); border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .hidden { opacity: 0; visibility: hidden; } </style> </head> <body> <div class="loader-container"> <div class="loader"></div> </div> <div class="container"> <div class="filter-controls"> <button class="filter-btn active" data-filter="all">All</button> <button class="filter-btn" data-filter="tech">Tech</button> <button class="filter-btn" data-filter="lifestyle">Lifestyle</button> <button class="filter-btn" data-filter="home">Home</button> </div> <div class="card-wrapper" data-category="tech"> <div class="card"> <div class="card-face card-front"> <div class="product-tag">New Release</div> <img src="https://images.unsplash.com/photo-1546868871-7041f2a55e12?ixlib=rb-4.0.3&auto=format&fit=crop&w=800&q=80" alt="SoundScape Pro X3" class="product-image"> <div class="product-info"> <div class="product-category">Audio Tech</div> <h3 class="product-title">SoundScape Pro X3</h3> <div class="rating"> <div class="stars"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> </div> <span class="review-count">(127)</span> </div> <div class="product-price">$249.99 <span class="original">$299.99</span></div> <div class="stock-indicator"><i>●</i> In Stock</div> <div class="product-colors"> <div class="color-option" style="background-color: #293241;"></div> <div class="color-option" style="background-color: #ffffff;"></div> <div class="color-option" style="background-color: #ee6c4d;"></div> </div> </div> <div class="flip-hint">↺</div> </div> <div class="card-face card-back"> <div class="magic-pattern"></div> <div class="back-details"> <h3 class="back-title">SoundScape Pro X3</h3> <p class="product-description">Our flagship noise-cancelling headphones with revolutionary 3D spatial audio. Experience studio-quality sound with 36 hours of battery life.</p> <div class="product-features"> <div class="feature"> <span class="feature-icon">✓</span> <span>40mm HD dynamic drivers</span> </div> <div class="feature"> <span class="feature-icon">✓</span> <span>Up to 36hr battery life</span> </div> <div class="feature"> <span class="feature-icon">✓</span> <span>Adaptive ANC technology</span> </div> <div class="feature"> <span class="feature-icon">✓</span> <span>Multipoint Bluetooth 5.2</span> </div> </div> <button class="cta-button">Add to Cart</button> </div> <div class="back-to-front">↺</div> </div> </div> </div> <div class="card-wrapper" data-category="lifestyle"> <div class="card"> <div class="card-face card-front"> <div class="product-tag">Best Seller</div> <img src="https://images.unsplash.com/photo-1576871337622-98d48d1cf531?ixlib=rb-4.0.3&auto=format&fit=crop&w=800&q=80" alt="CleanSkin Vibrating Facial Cleanser" class="product-image"> <div class="product-info"> <div class="product-category">Beauty Tech</div> <h3 class="product-title">CleanSkin Vibrating Facial Cleanser</h3> <div class="rating"> <div class="stars"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> </div> <span class="review-count">(94)</span> </div> <div class="product-price">$89.99 <span class="original">$119.99</span></div> <div class="stock-indicator low"><i>●</i> Only 5 left</div> <div class="product-colors"> <div class="color-option" style="background-color: #ffb6c1;"></div> <div class="color-option" style="background-color: #98c1d9;"></div> <div class="color-option" style="background-color: #e0fbfc;"></div> </div> </div> <div class="flip-hint">↺</div> </div> <div class="card-face card-back"> <div class="magic-pattern"></div> <div class="back-details"> <h3 class="back-title">CleanSkin Vibrating Facial Cleanser</h3> <p class="product-description">Dermatologist-developed silicone facial cleansing device with 5 intensity levels. Designed to remove 99.9% of dirt and oil while being gentle on skin.</p> <div class="product-features"> <div class="feature"> <span class="feature-icon">✓</span> <span>Sonic pulsation technology</span> </div> <div class="feature"> <span class="feature-icon">✓</span> <span>5 customizable intensity levels</span> </div> <div class="feature"> <span class="feature-icon">✓</span> <span>Medical-grade silicone</span> </div> <div class="feature"> <span class="feature-icon">✓</span> <span>IPX7 waterproof</span> </div> </div> <button class="cta-button">Add to Cart</button> </div> <div class="back-to-front">↺</div> </div> </div> </div> <div class="card-wrapper" data-category="home"> <div class="card"> <div class="card-face card-front"> <div class="product-tag">Limited</div> <img src="https://images.unsplash.com/photo-1599751449128-eb7249c3d6b1?ixlib=rb-4.0.3&auto=format&fit=crop&w=800&q=80" alt="AromaMist Essential Oil Diffuser" class="product-image"> <div class="product-info"> <div class="product-category">Home Wellness</div> <h3 class="product-title">AromaMist Essential Oil Diffuser</h3> <div class="rating"> <div class="stars"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> </div> <span class="review-count">(76)</span> </div> <div class="product-price">$59.99 <span class="original">$79.99</span></div> <div class="stock-indicator"><i>●</i> In Stock</div> <div class="product-colors"> <div class="color-option" style="background-color: #dcd6c8;"></div> <div class="color-option" style="background-color: #3d5a80;"></div> <div class="color-option" style="background-color: #a98467;"></div> </div> </div> <div class="flip-hint">↺</div> </div> <div class="card-face card-back"> <div class="magic-pattern"></div> <div class="back-details"> <h3 class="back-title">AromaMist Essential Oil Diffuser</h3> <p class="product-description">Elevate your space with this ultrasonic diffuser featuring handcrafted ceramic with LED mood lighting. Runs for up to 10 hours with auto shut-off.</p> <div class="product-features"> <div class="feature"> <span class="feature-icon">✓</span> <span>300ml large capacity tank</span> </div> <div class="feature"> <span class="feature-icon">✓</span> <span>7 color-changing LED lights</span> </div> <div class="feature"> <span class="feature-icon">✓</span> <span>Whisper-quiet operation</span> </div> <div class="feature"> <span class="feature-icon">✓</span> <span>3 timer settings + auto shut-off</span> </div> </div> <button class="cta-button">Add to Cart</button> </div> <div class="back-to-front">↺</div> </div> </div> </div> </div> <script> // Flip card functionality document.addEventListener('DOMContentLoaded', function() { const cards = document.querySelectorAll('.card'); const cardWrappers = document.querySelectorAll('.card-wrapper'); const flipHints = document.querySelectorAll('.flip-hint'); const backToFronts = document.querySelectorAll('.back-to-front'); const ctaButtons = document.querySelectorAll('.cta-button'); const loader = document.querySelector('.loader-container'); const filterButtons = document.querySelectorAll('.filter-btn'); // Hide loader after content loads setTimeout(() => { loader.classList.add('hidden'); }, 1000); // Card flip functionality flipHints.forEach((hint, index) => { hint.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); cards[index].classList.add('is-flipped'); }); }); backToFronts.forEach((back, index) => { back.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); cards[index].classList.remove('is-flipped'); }); }); // Whole card click functionality cards.forEach(card => { card.addEventListener('click', function() { this.classList.toggle('is-flipped'); }); }); // Handle CTA buttons without submission ctaButtons.forEach(button => { button.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); // Visual feedback for button click button.innerText = "Added ✓"; button.style.backgroundColor = "#4caf50"; setTimeout(() => { button.innerText = "Add to Cart"; button.style.backgroundColor = ""; }, 1000); }); }); // Filtering functionality filterButtons.forEach(button => { button.addEventListener('click', function() { // Update active button styling filterButtons.forEach(btn => btn.classList.remove('active')); this.classList.add('active'); const filter = this.getAttribute('data-filter'); // Filter cards cardWrappers.forEach(card => { if (filter === 'all' || card.getAttribute('data-category') === filter) { card.style.display = 'block'; } else { card.style.display = 'none'; } }); }); }); // Color option functionality const colorOptions = document.querySelectorAll('.color-option'); colorOptions.forEach(option => { option.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); // Get all siblings in the same color group const siblings = Array.from(option.parentElement.children); // Reset all options siblings.forEach(sib => { sib.style.transform = ''; sib.style.boxShadow = ''; }); // Highlight selected option option.style.transform = 'scale(1.2)'; option.style.boxShadow = `0 0 0 2px var(--secondary)`; }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>TechSummit 2024 - Schedule</title> <style> /* Base Styles */ :root { --primary: #2e3b82; --secondary: #48cae4; --accent: #fb8500; --light: #f8f9fa; --dark: #212529; --success: #20c997; --gradient: linear-gradient(135deg, var(--primary), var(--secondary)); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } body { background-color: #f5f7fa; background-image: radial-gradient(#e0e8ff 1px, transparent 1px); background-size: 20px 20px; color: var(--dark); display: flex; flex-direction: column; align-items: center; justify-content: flex-start; min-height: 100vh; padding: 20px; overflow-x: hidden; } .container { width: 100%; max-width: 700px; height: 700px; display: flex; flex-direction: column; overflow-y: auto; padding: 10px; scroll-behavior: smooth; } h1 { color: var(--primary); margin-bottom: 5px; font-weight: 800; font-size: 2rem; background: var(--gradient); -webkit-background-clip: text; background-clip: text; color: transparent; text-align: center; } h2 { color: var(--dark); font-size: 1.2rem; margin-bottom: 20px; text-align: center; font-weight: 500; } /* Filter / Day Navigation */ .day-nav { display: flex; justify-content: center; gap: 10px; margin-bottom: 25px; flex-wrap: wrap; } .day-btn { padding: 8px 16px; background: white; border: 1px solid #e5e7eb; border-radius: 20px; font-size: 0.9rem; font-weight: 600; color: var(--dark); cursor: pointer; transition: all 0.3s ease; box-shadow: 0 2px 5px rgba(0,0,0,0.05); } .day-btn:hover { box-shadow: 0 4px 10px rgba(0,0,0,0.1); transform: translateY(-2px); } .day-btn.active { background: var(--gradient); color: white; border-color: transparent; } /* Session Cards */ .schedule { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin-bottom: 20px; } .day-schedule { display: none; } .day-schedule.active { display: grid; } .session-card { perspective: 1000px; height: 200px; cursor: pointer; position: relative; } .card-inner { position: relative; width: 100%; height: 100%; transform-style: preserve-3d; transition: transform 0.8s cubic-bezier(0.34, 1.56, 0.64, 1); box-shadow: 0 5px 15px rgba(0,0,0,0.1); border-radius: 12px; } .session-card:hover .card-inner { transform: rotateY(5deg); box-shadow: 0 10px 20px rgba(0,0,0,0.15); } .session-card.flipped .card-inner { transform: rotateY(180deg); } .card-front, .card-back { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: 12px; display: flex; flex-direction: column; padding: 20px; overflow: hidden; } .card-front { background: white; border-left: 4px solid var(--primary); justify-content: space-between; } .card-front::before { content: ''; position: absolute; top: 0; right: 0; width: 30px; height: 30px; background: var(--accent); clip-path: polygon(0 0, 100% 0, 100% 100%); opacity: 0.8; } .card-back { background: var(--gradient); color: white; transform: rotateY(180deg); justify-content: flex-start; overflow-y: auto; } .session-time { font-size: 0.9rem; color: var(--accent); display: flex; align-items: center; font-weight: 600; margin-bottom: 5px; } .session-time svg { margin-right: 5px; } .session-title { font-size: 1.2rem; font-weight: 700; margin-bottom: 10px; line-height: 1.3; } .session-room { font-size: 0.85rem; color: #6b7280; display: flex; align-items: center; } .session-room svg { margin-right: 5px; } .flip-indicator { display: flex; align-items: center; justify-content: center; margin-top: 15px; color: #9ca3af; font-size: 0.8rem; } .flip-indicator svg { margin-left: 5px; animation: pulse 2s infinite; } .speaker { display: flex; align-items: center; margin-bottom: 15px; } .speaker-avatar { width: 40px; height: 40px; border-radius: 50%; background: rgba(255,255,255,0.3); margin-right: 10px; display: flex; align-items: center; justify-content: center; overflow: hidden; } .speaker-info { flex: 1; } .speaker-name { font-weight: 600; font-size: 1rem; } .speaker-title { font-size: 0.8rem; opacity: 0.8; } .session-abstract { font-size: 0.9rem; line-height: 1.5; overflow-y: auto; flex: 1; margin-top: 10px; } .back-to-front { display: flex; align-items: center; justify-content: center; font-size: 0.8rem; margin-top: 10px; color: rgba(255,255,255,0.8); } .back-to-front svg { margin-left: 5px; transform: rotate(180deg); } /* Tag Styling */ .tag { display: inline-block; padding: 3px 8px; background: rgba(255,255,255,0.2); border-radius: 12px; font-size: 0.7rem; font-weight: 600; margin-right: 5px; margin-bottom: 5px; white-space: nowrap; } .tag-row { display: flex; flex-wrap: wrap; margin-bottom: 5px; } /* Animation */ @keyframes pulse { 0% { transform: translateX(0); } 50% { transform: translateX(3px); } 100% { transform: translateX(0); } } /* Loading indicator */ .loading { display: flex; align-items: center; justify-content: center; height: 100px; } .dot { width: 10px; height: 10px; border-radius: 50%; background-color: var(--primary); margin: 0 5px; animation: bounce 1.5s infinite ease-in-out; } .dot:nth-child(2) { animation-delay: 0.2s; background-color: var(--secondary); } .dot:nth-child(3) { animation-delay: 0.4s; background-color: var(--accent); } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } /* Responsive adjustments */ @media (max-width: 600px) { h1 { font-size: 1.5rem; } h2 { font-size: 1rem; } .schedule { grid-template-columns: 1fr; } .container { padding: 5px; } .day-btn { padding: 6px 12px; font-size: 0.8rem; } } /* Scrollbar styling */ ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: rgba(0,0,0,0.05); border-radius: 10px; } ::-webkit-scrollbar-thumb { background: var(--secondary); border-radius: 10px; } ::-webkit-scrollbar-thumb:hover { background: var(--primary); } </style> </head> <body> <div class="container"> <h1>TechSummit 2024</h1> <h2>June 15-17 • San Francisco</h2> <div class="day-nav"> <button class="day-btn active" data-day="day1">Day 1: Innovation</button> <button class="day-btn" data-day="day2">Day 2: AI & ML</button> <button class="day-btn" data-day="day3">Day 3: Future Tech</button> </div> <div class="day-schedule active" id="day1"> <div class="schedule"> <div class="session-card"> <div class="card-inner"> <div class="card-front"> <div> <div class="session-time"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> 9:00 AM - 10:00 AM </div> <h3 class="session-title">Opening Keynote: Tech in the Age of Disruption</h3> <div class="tag-row"> <span class="tag" style="background-color: rgba(72, 202, 228, 0.2); color: #2e3b82;">Keynote</span> <span class="tag" style="background-color: rgba(251, 133, 0, 0.2); color: #fb8500;">Main Stage</span> </div> </div> <div> <div class="session-room"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg> Grand Ballroom </div> <div class="flip-indicator"> Tap for details <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> <div class="card-back"> <div class="speaker"> <div class="speaker-avatar"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg> </div> <div class="speaker-info"> <div class="speaker-name">Dr. Maya Robertson</div> <div class="speaker-title">CTO, Quantum Industries</div> </div> </div> <div class="session-abstract"> Join Dr. Maya Robertson as she explores how emerging technologies are reshaping industries at an unprecedented pace. She'll share insights on how organizations can position themselves to thrive amid constant disruption and what leaders should prioritize in the coming year. With examples from quantum computing, biotech, and sustainable energy, this keynote will set the tone for the entire conference. </div> <div class="back-to-front"> Back to schedule <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> </div> <div class="session-card"> <div class="card-inner"> <div class="card-front"> <div> <div class="session-time"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> 10:30 AM - 12:00 PM </div> <h3 class="session-title">Web3 & Blockchain: Beyond the Hype</h3> <div class="tag-row"> <span class="tag" style="background-color: rgba(32, 201, 151, 0.2); color: #20c997;">Workshop</span> <span class="tag" style="background-color: rgba(251, 133, 0, 0.2); color: #fb8500;">Interactive</span> </div> </div> <div> <div class="session-room"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg> Horizon Room, East Wing </div> <div class="flip-indicator"> Tap for details <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> <div class="card-back"> <div class="speaker"> <div class="speaker-avatar"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg> </div> <div class="speaker-info"> <div class="speaker-name">Alex Tanaka</div> <div class="speaker-title">Founder, BlockMatrix</div> </div> </div> <div class="session-abstract"> This hands-on workshop cuts through the noise surrounding blockchain and Web3 technologies. You'll explore practical applications beyond cryptocurrencies, including smart contracts, decentralized identity, and supply chain transparency. We'll set up a test environment and walk through building a simple dApp. Come prepared with a laptop and basic JavaScript knowledge – leave with practical skills and a deeper understanding of blockchain's true potential. </div> <div class="back-to-front"> Back to schedule <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> </div> <div class="session-card"> <div class="card-inner"> <div class="card-front"> <div> <div class="session-time"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> 1:00 PM - 2:30 PM </div> <h3 class="session-title">Sustainable Tech: Green Innovations Changing the World</h3> <div class="tag-row"> <span class="tag" style="background-color: rgba(72, 202, 228, 0.2); color: #2e3b82;">Panel</span> <span class="tag" style="background-color: rgba(32, 201, 151, 0.2); color: #20c997;">Climate Tech</span> </div> </div> <div> <div class="session-room"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg> Summit Hall </div> <div class="flip-indicator"> Tap for details <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> <div class="card-back"> <div class="speaker"> <div class="speaker-avatar"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg> </div> <div class="speaker-info"> <div class="speaker-name">Multiple Speakers</div> <div class="speaker-title">Industry Leaders in Climate Tech</div> </div> </div> <div class="session-abstract"> Climate innovators from four continents discuss how technology is addressing our planet's most pressing environmental challenges. From carbon capture breakthroughs to energy-efficient computing and circular economy platforms, this panel showcases tangible solutions making a difference today. The discussion will include firsthand accounts of implementing sustainable tech solutions in both developing and developed nations, with audience Q&A to follow. </div> <div class="back-to-front"> Back to schedule <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> </div> <div class="session-card"> <div class="card-inner"> <div class="card-front"> <div> <div class="session-time"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> 3:00 PM - 4:30 PM </div> <h3 class="session-title">The Evolution of DevOps: From CI/CD to GitOps and Beyond</h3> <div class="tag-row"> <span class="tag" style="background-color: rgba(72, 202, 228, 0.2); color: #2e3b82;">Technical</span> <span class="tag" style="background-color: rgba(251, 133, 0, 0.2); color: #fb8500;">Advanced</span> </div> </div> <div> <div class="session-room"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg> Tech Lab, West Wing </div> <div class="flip-indicator"> Tap for details <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> <div class="card-back"> <div class="speaker"> <div class="speaker-avatar"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg> </div> <div class="speaker-info"> <div class="speaker-name">Priya Sharma</div> <div class="speaker-title">Principal DevOps Engineer, CloudNative Systems</div> </div> </div> <div class="session-abstract"> Trace the transformation of DevOps from its early days to cutting-edge practices of today. We'll analyze real-world case studies from organizations that successfully evolved their pipelines, examining pitfalls and breakthroughs. Topics include infrastructure-as-code maturity models, security integration in modern pipelines, and DevOps in regulated environments. You'll leave with an actionable roadmap for your organization's DevOps evolution. </div> <div class="back-to-front"> Back to schedule <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> </div> </div> </div> <div class="day-schedule" id="day2"> <div class="schedule"> <div class="session-card"> <div class="card-inner"> <div class="card-front"> <div> <div class="session-time"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> 9:00 AM - 10:00 AM </div> <h3 class="session-title">Responsible AI: Ethics in the Age of Generative Models</h3> <div class="tag-row"> <span class="tag" style="background-color: rgba(72, 202, 228, 0.2); color: #2e3b82;">Keynote</span> <span class="tag" style="background-color: rgba(251, 133, 0, 0.2); color: #fb8500;">AI Ethics</span> </div> </div> <div> <div class="session-room"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg> Grand Ballroom </div> <div class="flip-indicator"> Tap for details <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> <div class="card-back"> <div class="speaker"> <div class="speaker-avatar"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg> </div> <div class="speaker-info"> <div class="speaker-name">Dr. Rashid Johnson</div> <div class="speaker-title">Chair, Global AI Ethics Council</div> </div> </div> <div class="session-abstract"> With generative AI transforming society at an unprecedented pace, Dr. Johnson examines the ethical frameworks needed to guide its development. Drawing from his work with governments and tech giants, he'll present concrete approaches to mitigating algorithmic bias, ensuring transparency in AI systems, and creating governance models that balance innovation with public good. A must-attend for anyone building or deploying AI systems. </div> <div class="back-to-front"> Back to schedule <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> </div> <div class="session-card"> <div class="card-inner"> <div class="card-front"> <div> <div class="session-time"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> 10:30 AM - 12:00 PM </div> <h3 class="session-title">Building Production-Grade LLM Applications</h3> <div class="tag-row"> <span class="tag" style="background-color: rgba(32, 201, 151, 0.2); color: #20c997;">Workshop</span> <span class="tag" style="background-color: rgba(72, 202, 228, 0.2); color: #2e3b82;">Hands-on</span> </div> </div> <div> <div class="session-room"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg> Developer Lab </div> <div class="flip-indicator"> Tap for details <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> <div class="card-back"> <div class="speaker"> <div class="speaker-avatar"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg> </div> <div class="speaker-info"> <div class="speaker-name">Lin Wei</div> <div class="speaker-title">ML Engineer, VectorAI</div> </div> </div> <div class="session-abstract"> Move beyond simple API calls to building robust LLM applications. This code-intensive workshop covers prompt engineering techniques, fine-tuning models for specific domains, and implementing retrieval-augmented generation (RAG) for improved accuracy. We'll address hallucination mitigation, cost optimization, and performance monitoring in production. By the end, you'll have deployed a working LLM application with proper guardrails and evaluation metrics. </div> <div class="back-to-front"> Back to schedule <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"></path></svg> </div> </div> </div> </div> <div class="session-card"> <div class="card-inner"> <div class="card-front"> <div> <div class="session-time"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> 1:00 PM - 2:30 PM </div> <h3 class="session-title">Computer Vision at Scale: From Prototypes to Planetary Solutions</h3> <div class="tag-row"> <span class="tag" style="background-color: rgba(72, 202, 228, 0.2); color: #2e3b82;">Technical</span> <span class="tag" style="background-color: rgba(251, 133, 0, 0.2); color: #fb8500;">Case Study</span> </div> </div> <div> <div class="session-room"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Data Dashboard Summary Flip Cards</title> <style> :root { --primary-color: #1a1a1a; --secondary-color: #2a2a2a; --accent-blue: #3498db; --accent-green: #2ecc71; --accent-orange: #e67e22; --accent-purple: #9b59b6; --accent-red: #e74c3c; --text-color: #f5f5f5; --text-secondary: #aaaaaa; --card-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); --transition-speed: 0.6s; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background-color: var(--primary-color); color: var(--text-color); display: flex; flex-direction: column; align-items: center; justify-content: flex-start; min-height: 100vh; padding: 20px; overflow-x: hidden; max-width: 700px; margin: 0 auto; } .dashboard-header { text-align: center; margin-bottom: 25px; width: 100%; position: relative; } .dashboard-header h1 { font-size: 28px; margin-bottom: 10px; background: linear-gradient(to right, var(--accent-blue), var(--accent-purple)); -webkit-background-clip: text; background-clip: text; color: transparent; position: relative; display: inline-block; } .dashboard-header h1::after { content: ''; position: absolute; bottom: -5px; left: 0; width: 100%; height: 2px; background: linear-gradient(to right, var(--accent-blue), var(--accent-purple)); transform: scaleX(0); transform-origin: left; animation: headerLineAnimate 1.5s ease-out forwards; } @keyframes headerLineAnimate { to { transform: scaleX(1); } } .dashboard-header p { color: var(--text-secondary); font-size: 14px; max-width: 600px; margin: 0 auto; } .time-selector { display: flex; justify-content: center; margin-bottom: 20px; gap: 2px; background: var(--secondary-color); padding: 5px; border-radius: 20px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } .time-selector button { background: transparent; border: none; color: var(--text-secondary); padding: 8px 15px; border-radius: 15px; cursor: pointer; transition: all 0.3s ease; font-size: 13px; } .time-selector button.active { background: var(--accent-blue); color: white; box-shadow: 0 2px 10px rgba(52, 152, 219, 0.3); } .cards-container { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; width: 100%; padding-bottom: 20px; } .card { background-color: var(--secondary-color); border-radius: 12px; height: 250px; perspective: 1000px; cursor: pointer; position: relative; box-shadow: var(--card-shadow); transition: transform 0.3s ease; } .card:hover { transform: translateY(-5px); } .card-inner { position: relative; width: 100%; height: 100%; text-align: center; transition: transform var(--transition-speed); transform-style: preserve-3d; } .card.flipped .card-inner { transform: rotateY(180deg); } .card-front, .card-back { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: 12px; display: flex; flex-direction: column; justify-content: space-between; padding: 20px; overflow: hidden; } .card-front { background-color: var(--secondary-color); z-index: 2; } .card-back { background-color: var(--secondary-color); transform: rotateY(180deg); } .card-title { font-size: 18px; margin-bottom: 10px; position: relative; z-index: 1; color: var(--text-color); text-align: left; display: flex; align-items: center; gap: 6px; } .card-title svg { width: 18px; height: 18px; } .metric-value { font-size: 36px; font-weight: bold; margin: 15px 0; position: relative; z-index: 1; } .metric-trend { display: flex; align-items: center; justify-content: center; gap: 5px; font-size: 14px; padding: 4px 10px; border-radius: 20px; width: fit-content; margin: 0 auto; } .positive-trend { background-color: rgba(46, 204, 113, 0.2); color: var(--accent-green); } .negative-trend { background-color: rgba(231, 76, 60, 0.2); color: var(--accent-red); } .neutral-trend { background-color: rgba(52, 152, 219, 0.2); color: var(--accent-blue); } .metric-info { text-align: left; font-size: 13px; color: var(--text-secondary); margin-top: 15px; } .card-footer { display: flex; justify-content: space-between; align-items: center; width: 100%; font-size: 12px; color: var(--text-secondary); border-top: 1px solid rgba(255, 255, 255, 0.1); padding-top: 10px; } /* Card backgrounds and accents */ .revenue .metric-value { color: var(--accent-blue); } .users .metric-value { color: var(--accent-green); } .conversion .metric-value { color: var(--accent-orange); } .engagement .metric-value { color: var(--accent-purple); } /* Shape backgrounds for cards */ .shape-bg { position: absolute; top: 0; right: 0; width: 150px; height: 150px; opacity: 0.07; z-index: 0; } .revenue .shape-bg { background: var(--accent-blue); border-radius: 72% 28% 70% 30% / 30% 54% 46% 70%; } .users .shape-bg { background: var(--accent-green); border-radius: 59% 41% 41% 59% / 37% 25% 75% 63%; } .conversion .shape-bg { background: var(--accent-orange); border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; } .engagement .shape-bg { background: var(--accent-purple); border-radius: 41% 59% 28% 72% / 65% 29% 71% 35%; } /* Chart containers */ .chart-container { width: 100%; height: 160px; margin-top: 10px; position: relative; } /* Flip indicator */ .flip-indicator { position: absolute; bottom: 12px; right: 12px; font-size: 12px; color: var(--text-secondary); display: flex; align-items: center; gap: 5px; padding: 4px 8px; background: rgba(255, 255, 255, 0.05); border-radius: 10px; opacity: 0.7; transition: opacity 0.3s ease; z-index: 10; } .card:hover .flip-indicator { opacity: 1; } .rotate-icon { animation: rotate 1.5s infinite; display: inline-block; font-size: 12px; } @keyframes rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Tooltip */ .tooltip { position: absolute; background: rgba(26, 26, 26, 0.95); color: white; padding: 8px 12px; border-radius: 5px; font-size: 12px; z-index: 100; opacity: 0; pointer-events: none; transition: opacity 0.3s ease; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); max-width: 200px; backdrop-filter: blur(4px); } /* Responsive adjustments */ @media (max-width: 700px) { .cards-container { grid-template-columns: 1fr; } .dashboard-header h1 { font-size: 24px; } .card { height: 220px; } } @media (max-width: 400px) { body { padding: 15px 10px; } .time-selector button { padding: 6px 10px; font-size: 12px; } } /* Loading animation */ .loading-dot { display: inline-block; width: 5px; height: 5px; border-radius: 50%; background-color: currentColor; margin: 0 2px; animation: dot-pulse 1.5s infinite ease-in-out; } .loading-dot:nth-child(2) { animation-delay: 0.2s; } .loading-dot:nth-child(3) { animation-delay: 0.4s; } @keyframes dot-pulse { 0%, 100% { transform: scale(0.8); opacity: 0.6; } 50% { transform: scale(1.2); opacity: 1; } } </style> </head> <body> <div class="dashboard-header"> <h1>Executive Analytics</h1> <p>Real-time performance metrics and KPIs for key business areas</p> </div> <div class="time-selector"> <button data-period="day">Day</button> <button data-period="week" class="active">Week</button> <button data-period="month">Month</button> <button data-period="quarter">Quarter</button> </div> <div class="cards-container"> <div class="card revenue"> <div class="card-inner"> <div class="card-front"> <div class="shape-bg"></div> <div class="card-title"> <svg viewBox="0 0 24 24" fill="currentColor"> <path d="M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4M11,17V16H9V14H13V13H10A1,1 0 0,1 9,12V9A1,1 0 0,1 10,8H11V7H13V8H15V10H11V11H14A1,1 0 0,1 15,12V15A1,1 0 0,1 14,16H13V17H11Z" /> </svg> Revenue </div> <div class="metric-value">$847,382</div> <div class="metric-trend positive-trend"> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"> <path d="M7,15L12,10L17,15H7Z" /> </svg> 12.8% vs last week </div> <div class="metric-info">Weekly revenue exceeding forecast by 8.3%</div> <div class="card-footer"> <span>Updated 18 minutes ago</span> <span>Data source: Stripe</span> </div> <div class="flip-indicator"> <span class="rotate-icon">↻</span> <span>Tap for details</span> </div> </div> <div class="card-back"> <div class="card-title">Revenue Breakdown</div> <div class="chart-container" id="revenueChart"></div> <div class="metric-info"> <strong>Top sources:</strong> Direct Sales (42%), Subscriptions (35%), Enterprise (23%) </div> <div class="card-footer"> <span>Key insight: Subscription growth accelerating</span> </div> </div> </div> </div> <div class="card users"> <div class="card-inner"> <div class="card-front"> <div class="shape-bg"></div> <div class="card-title"> <svg viewBox="0 0 24 24" fill="currentColor"> <path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z" /> </svg> Active Users </div> <div class="metric-value">32,694</div> <div class="metric-trend positive-trend"> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"> <path d="M7,15L12,10L17,15H7Z" /> </svg> 7.3% vs last week </div> <div class="metric-info">DAU/MAU ratio improved to 58% this week</div> <div class="card-footer"> <span>Updated 4 minutes ago</span> <span>Data source: Analytics</span> </div> <div class="flip-indicator"> <span class="rotate-icon">↻</span> <span>Tap for details</span> </div> </div> <div class="card-back"> <div class="card-title">User Segments</div> <div class="chart-container" id="usersChart"></div> <div class="metric-info"> <strong>Retention:</strong> 7-day (92%), 30-day (78%), 90-day (64%) </div> <div class="card-footer"> <span>Key insight: Mobile users growing 2x faster</span> </div> </div> </div> </div> <div class="card conversion"> <div class="card-inner"> <div class="card-front"> <div class="shape-bg"></div> <div class="card-title"> <svg viewBox="0 0 24 24" fill="currentColor"> <path d="M17,17H15V13H17M13,17H11V7H13M9,17H7V10H9M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z" /> </svg> Conversion Rate </div> <div class="metric-value">5.8%</div> <div class="metric-trend neutral-trend"> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"> <path d="M19,13H5V11H19V13Z" /> </svg> 0.2% vs last week </div> <div class="metric-info">Desktop conversion outperforming mobile by 1.7x</div> <div class="card-footer"> <span>Updated 22 minutes ago</span> <span>Data source: CRM</span> </div> <div class="flip-indicator"> <span class="rotate-icon">↻</span> <span>Tap for details</span> </div> </div> <div class="card-back"> <div class="card-title">Conversion Funnel</div> <div class="chart-container" id="conversionChart"></div> <div class="metric-info"> <strong>Abandonment points:</strong> Checkout (43%), Registration (28%), Pricing (17%) </div> <div class="card-footer"> <span>Key insight: A/B test on checkout +14% lift</span> </div> </div> </div> </div> <div class="card engagement"> <div class="card-inner"> <div class="card-front"> <div class="shape-bg"></div> <div class="card-title"> <svg viewBox="0 0 24 24" fill="currentColor"> <path d="M12,15C12.81,15 13.5,14.7 14.11,14.11C14.7,13.5 15,12.81 15,12C15,11.19 14.7,10.5 14.11,9.89C13.5,9.3 12.81,9 12,9C11.19,9 10.5,9.3 9.89,9.89C9.3,10.5 9,11.19 9,12C9,12.81 9.3,13.5 9.89,14.11C10.5,14.7 11.19,15 12,15M12,2C14.75,2 17.1,3 19.05,4.95C21,6.9 22,9.25 22,12V13.45C22,14.45 21.65,15.3 21,16C20.3,16.67 19.5,17 18.5,17C17.3,17 16.31,16.5 15.56,15.5C14.56,16.5 13.38,17 12,17C10.63,17 9.45,16.5 8.46,15.54C7.5,14.55 7,13.38 7,12C7,10.63 7.5,9.45 8.46,8.46C9.45,7.5 10.63,7 12,7C13.38,7 14.55,7.5 15.54,8.46C16.5,9.45 17,10.63 17,12V13.45C17,13.86 17.16,14.22 17.46,14.53C17.76,14.84 18.11,15 18.5,15C18.92,15 19.27,14.84 19.57,14.53C19.87,14.22 20,13.86 20,13.45V12C20,9.81 19.23,7.93 17.65,6.35C16.07,4.77 14.19,4 12,4C9.81,4 7.93,4.77 6.35,6.35C4.77,7.93 4,9.81 4,12C4,14.19 4.77,16.07 6.35,17.65C7.93,19.23 9.81,20 12,20H17V22H12C9.25,22 6.9,21 4.95,19.05C3,17.1 2,14.75 2,12C2,9.25 3,6.9 4.95,4.95C6.9,3 9.25,2 12,2Z" /> </svg> Engagement </div> <div class="metric-value">18.7m</div> <div class="metric-trend negative-trend"> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"> <path d="M7,9L12,14L17,9H7Z" /> </svg> 3.2% vs last week </div> <div class="metric-info">Average session duration: 14.6 minutes</div> <div class="card-footer"> <span>Updated 7 minutes ago</span> <span>Data source: Analytics</span> </div> <div class="flip-indicator"> <span class="rotate-icon">↻</span> <span>Tap for details</span> </div> </div> <div class="card-back"> <div class="card-title">Engagement Distribution</div> <div class="chart-container" id="engagementChart"></div> <div class="metric-info"> <strong>Top features:</strong> Dashboard (32%), Reports (28%), Notifications (21%) </div> <div class="card-footer"> <span>Key insight: Feature discovery needs improvement</span> </div> </div> </div> </div> </div> <div class="tooltip" id="tooltip"></div> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script> // DOM Elements const cards = document.querySelectorAll('.card'); const timeButtons = document.querySelectorAll('.time-selector button'); const tooltip = document.getElementById('tooltip'); // Initialize cards and attach event listeners cards.forEach(card => { card.addEventListener('click', () => { card.classList.toggle('flipped'); }); }); // Time period selector functionality timeButtons.forEach(button => { button.addEventListener('click', () => { // Remove active class from all buttons timeButtons.forEach(btn => btn.classList.remove('active')); // Add active class to clicked button button.classList.add('active'); // Update data based on the selected time period updateDashboardData(button.dataset.period); }); }); // Tooltip functionality function showTooltip(e, text) { tooltip.textContent = text; tooltip.style.opacity = 1; tooltip.style.left = `${e.pageX + 10}px`; tooltip.style.top = `${e.pageY + 10}px`; } function hideTooltip() { tooltip.style.opacity = 0; } // Create charts for the back of cards function createCharts() { // Revenue Chart const revenueCtx = document.createElement('canvas'); document.getElementById('revenueChart').appendChild(revenueCtx); new Chart(revenueCtx, { type: 'line', data: { labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], datasets: [{ label: 'Revenue', data: [120000, 132000, 121000, 184000, 190000, 112000, 133000], borderColor: '#3498db', backgroundColor: 'rgba(52, 152, 219, 0.1)', tension: 0.4, fill: true }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { mode: 'index', intersect: false, callbacks: { label: function(context) { return `$${context.raw.toLocaleString()}`; } } } }, scales: { y: { ticks: { callback: function(value) { return '$' + (value / 1000) + 'k'; }, color: '#aaaaaa' }, grid: { color: 'rgba(255, 255, 255, 0.05)' } }, x: { ticks: { color: '#aaaaaa' }, grid: { display: false } } } } }); // Users Chart const usersCtx = document.createElement('canvas'); document.getElementById('usersChart').appendChild(usersCtx); new Chart(usersCtx, { type: 'bar', data: { labels: ['New', 'Returning', 'Power Users', 'Inactive'], datasets: [{ label: 'User Segments', data: [8654, 12470, 7320, 4250], backgroundColor: [ 'rgba(46, 204, 113, 0.7)', 'rgba(46, 204, 113, 0.5)', 'rgba(46, 204, 113, 0.3)', 'rgba(46, 204, 113, 0.1)' ], borderRadius: 4 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false } }, scales: { y: { ticks: { color: '#aaaaaa' }, grid: { color: 'rgba(255, 255, 255, 0.05)' } }, x: { ticks: { color: '#aaaaaa' }, grid: { display: false } } } } }); // Conversion Chart const conversionCtx = document.createElement('canvas'); document.getElementById('conversionChart').appendChild(conversionCtx); new Chart(conversionCtx, { type: 'doughnut', data: { labels: ['Visit', 'View Product', 'Add to Cart', 'Checkout', 'Purchase'], datasets: [{ data: [100, 67, 42, 23, 5.8], backgroundColor: [ 'rgba(230, 126, 34, 0.9)', 'rgba(230, 126, 34, 0.7)', 'rgba(230, 126, 34, 0.5)', 'rgba(230, 126, 34, 0.3)', 'rgba(230, 126, 34, 0.2)' ], borderWidth: 0 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'right', labels: { color: '#aaaaaa', font: { size: 10 }, boxWidth: 10 } } }, cutout: '65%' } }); // Engagement Chart const engagementCtx = document.createElement('canvas'); document.getElementById('engagementChart').appendChild(engagementCtx); new Chart(engagementCtx, { type: 'radar', data: { labels: ['Dashboard', 'Reports', 'Settings', 'Profile', 'Notifications', 'Search'], datasets: [{ label: 'Current Week', data: [85, 72, 40, 56, 68, 35], backgroundColor: 'rgba(155, 89, 182, 0.2)', borderColor: 'rgba(155, 89, 182, 0.7)', pointBackgroundColor: 'rgba(155, 89, 182, 1)' }, { label: 'Previous Week', data: [78, 68, 50, 52, 75, 42], backgroundColor: 'rgba(155, 89, 182, 0.05)', borderColor: 'rgba(155, 89, 182, 0.3)', pointBackgroundColor: 'rgba(155, 89, 182, 0.5)' }] }, options: { responsive: true, maintainAspectRatio: false, scales: { r: { angleLines: { color: 'rgba(255, 255, 255, 0.05)' }, grid: { color: 'rgba(255, 255, 255, 0.05)' }, pointLabels: { color: '#aaaaaa', font: { size: 10 } }, ticks: { backdropColor: 'transparent', color: '#aaaaaa', stepSize: 20 } } }, plugins: { legend: { display: false } } } }); } // Update dashboard data based on time period function updateDashboardData(period) { // Show loading state document.querySelectorAll('.metric-value').forEach(el => { const originalValue = el.textContent; el.dataset.originalValue = originalValue; el.innerHTML = '<span class="loading-dot"></span><span class="loading-dot"></span><span class="loading-dot"></span>'; }); // Simulate API call delay setTimeout(() => { // Revenue update const revenueMap = { 'day': '$128,953', 'week': '$847,382', 'month': '$3,542,197', 'quarter': '$10,935,612' }; // Users update const usersMap = { 'day': '12,483', 'week': '32,694', 'month': '87,523', 'quarter': '142,956' }; // Conversion update const conversionMap = { 'day': '6.2%', 'week': '5.8%', 'month': '5.3%', 'quarter': '5.5%' }; // Engagement update const engagementMap = { 'day': '2.3m', 'week': '18.7m', 'month': '74.2m', 'quarter': '215.6m' }; // Update values document.querySelector('.revenue .metric-value').textContent = revenueMap[period]; document.querySelector('.users .metric-value').textContent = usersMap[period]; document.querySelector('.conversion .metric-value').textContent = conversionMap[period]; document.querySelector('.engagement .metric-value').textContent = engagementMap[period]; // Update trends based on time period updateTrends(period); }, 800); } // Update trend indicators based on time period function updateTrends(period) { // Map of trend values for different periods const trendData = { 'revenue': { 'day': { value: '8.4%', type: 'positive' }, 'week': { value: '12.8%', type: 'positive' }, 'month': { value: '5.2%', type: 'positive' }, 'quarter': { value: '3.7%', type: 'positive' } }, 'users': { 'day': { value: '4.1%', type: 'positive' }, 'week': { value: '7.3%', type: 'positive' }, 'month': { value: '8.9%', type: 'positive' }, 'quarter': { value: '10.4%', type: 'positive' } }, 'conversion': { 'day': { value: '0.5%', type: 'positive' }, 'week': { value: '0.2%', type: 'neutral' }, 'month': { value: '-0.3%', type: 'negative' }, 'quarter': { value: '1.2%', type: 'positive' } }, 'engagement': { 'day': { value: '2.7%', type: 'positive' }, 'week': { value: '-3.2%', type: 'negative' }, 'month': { value: '6.5%', type: 'positive' }, 'quarter': { value: '4.9%', type: 'positive' } } }; // Update each trend indicator Object.keys(trendData).forEach(key => { const trendElement = document.querySelector(`.${key} .metric-trend`); const data = trendData[key][period]; // Update class trendElement.className = `metric-trend ${data.type}-trend`; // Update icon let iconPath = ''; if (data.type === 'positive') { iconPath = '<path d="M7,15L12,10L17,15H7Z" />'; } else if (data.type === 'negative') { iconPath = '<path d="M7,9L12,14L17,9H7Z" />'; } else { iconPath = '<path d="M19,13H5V11H19V13Z" />'; } // Update content trendElement.innerHTML = ` <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"> ${iconPath} </svg> ${data.value} vs last ${period} `; }); } // Initialize the dashboard document.addEventListener('DOMContentLoaded', () => { createCharts(); // Apply hover effects for chart elements document.querySelectorAll('.chart-container').forEach(container => { container.addEventListener('mousemove', e => { // Add interactive effect when hovering over charts const rect = container.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; // Calculate highlight effect const highlight = `radial-gradient(circle 80px at ${x}px ${y}px, rgba(255, 255, 255, 0.08), transparent)`; container.style.backgroundImage = highlight; }); container.addEventListener('mouseleave', () => { container.style.backgroundImage = 'none'; }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Travel Destination Flip Cards</title> <style> @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700&family=Montserrat:wght@300;400;600&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } :root { --primary: #ff7e5f; --primary-light: #feb47b; --secondary: #3a7bd5; --secondary-light: #00d2ff; --dark: #2c3e50; --light: #f9f9f9; --card-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07); --card-radius: 12px; --transition-time: 0.6s; } body { font-family: 'Montserrat', sans-serif; background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); height: 100vh; display: flex; justify-content: center; align-items: center; overflow-x: hidden; color: var(--dark); } .container { max-width: 700px; width: 100%; padding: 20px; height: 700px; display: flex; flex-direction: column; justify-content: center; align-items: center; } .title { text-align: center; margin-bottom: 30px; width: 100%; } .title h1 { font-family: 'Playfair Display', serif; font-size: 2.5rem; color: var(--dark); margin-bottom: 10px; position: relative; display: inline-block; } .title h1::after { content: ''; position: absolute; width: 50%; height: 4px; background: linear-gradient(to right, var(--primary), var(--primary-light)); bottom: -10px; left: 25%; border-radius: 4px; } .title p { color: #555; font-size: 1rem; max-width: 600px; margin: 20px auto 0; } .cards-container { display: grid; grid-template-columns: repeat(2, 1fr); grid-gap: 25px; width: 100%; max-width: 100%; perspective: 1000px; } .card { position: relative; height: 250px; transform-style: preserve-3d; transition: transform var(--transition-time) cubic-bezier(0.4, 0, 0.2, 1); border-radius: var(--card-radius); box-shadow: var(--card-shadow); cursor: pointer; overflow: hidden; } .card:hover { transform: translateY(-10px); } .card.flipped { transform: rotateY(180deg); } .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: var(--card-radius); overflow: hidden; display: flex; flex-direction: column; } .card-front { background-position: center; background-size: cover; color: white; text-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); } .card-front::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(to bottom, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.7)); z-index: 1; } .card-front-content { padding: 20px; position: relative; z-index: 2; display: flex; flex-direction: column; justify-content: flex-end; height: 100%; } .card-category { text-transform: uppercase; font-size: 0.7rem; letter-spacing: 2px; font-weight: 600; color: var(--primary-light); margin-bottom: 8px; position: relative; display: inline-block; width: fit-content; } .card-category::after { content: ''; position: absolute; width: 30px; height: 2px; background-color: var(--primary); bottom: -4px; left: 0; } .card-title { font-family: 'Playfair Display', serif; font-size: 1.6rem; margin-bottom: 8px; } .card-location { display: flex; align-items: center; font-size: 0.8rem; } .card-location svg { width: 14px; height: 14px; margin-right: 6px; fill: var(--primary-light); } .card-back { background: white; transform: rotateY(180deg); padding: 20px; display: flex; flex-direction: column; justify-content: space-between; } .card-info { flex: 1; display: flex; flex-direction: column; } .card-info h3 { margin-bottom: 12px; font-family: 'Playfair Display', serif; color: var(--dark); font-size: 1.4rem; } .card-info p { font-size: 0.9rem; line-height: 1.5; color: #555; margin-bottom: 10px; } .card-highlights { display: flex; flex-wrap: wrap; margin: 12px 0; } .highlight { background-color: rgba(255, 126, 95, 0.1); color: var(--primary); padding: 4px 10px; border-radius: 20px; font-size: 0.75rem; margin-right: 8px; margin-bottom: 8px; font-weight: 600; } .card-footer { display: flex; justify-content: space-between; align-items: center; margin-top: 15px; } .price { font-size: 1.3rem; font-weight: 600; color: var(--dark); } .price span { font-size: 0.8rem; font-weight: 400; color: #777; } .btn { background: linear-gradient(to right, var(--primary), var(--primary-light)); color: white; border: none; padding: 8px 18px; border-radius: 25px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; font-size: 0.9rem; box-shadow: 0 4px 12px rgba(255, 126, 95, 0.3); position: relative; overflow: hidden; } .btn::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.3) 50%, rgba(255,255,255,0) 100%); transition: all 0.5s ease; } .btn:hover { transform: translateY(-3px); box-shadow: 0 6px 15px rgba(255, 126, 95, 0.4); } .btn:hover::before { left: 100%; } .dots-nav { display: flex; justify-content: center; margin-top: 30px; width: 100%; } .dot { width: 10px; height: 10px; border-radius: 50%; background-color: rgba(0, 0, 0, 0.2); margin: 0 5px; cursor: pointer; transition: all 0.3s ease; } .dot.active { background-color: var(--primary); transform: scale(1.3); } @media (max-width: 650px) { .cards-container { grid-template-columns: 1fr; } .title h1 { font-size: 2rem; } .card { height: 220px; } } /* Custom scrollbar */ .card-info::-webkit-scrollbar { width: 4px; } .card-info::-webkit-scrollbar-track { background: #f1f1f1; } .card-info::-webkit-scrollbar-thumb { background: var(--primary-light); border-radius: 10px; } /* Floating animation for the cards */ @keyframes floating { 0% { transform: translateY(0px); } 50% { transform: translateY(-8px); } 100% { transform: translateY(0px); } } .card:not(.flipped):hover { animation: floating 3s ease-in-out infinite; } /* Pulse effect for the highlight */ @keyframes pulse { 0% { opacity: 1; } 50% { opacity: 0.7; } 100% { opacity: 1; } } .highlight:hover { animation: pulse 1.5s infinite; } /* Sun rays effect on hover */ .card-front::after { content: ''; position: absolute; top: -150%; left: -50%; width: 200%; height: 200%; background: radial-gradient(circle, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0) 70%); opacity: 0; transition: opacity 0.5s ease; z-index: 1; } .card:hover .card-front::after { opacity: 1; } </style> </head> <body> <div class="container"> <div class="title"> <h1>Discover Paradise</h1> <p>Explore our handpicked destinations and plan your dream getaway with exclusive insights and special offers.</p> </div> <div class="cards-container"> <div class="card"> <div class="card-face card-front" style="background-image: url('https://images.unsplash.com/photo-1516483638261-f4dbaf036963?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80')"> <div class="card-front-content"> <span class="card-category">Cultural Escape</span> <h2 class="card-title">Amalfi Coast</h2> <div class="card-location"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"> <path d="M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"></path> </svg> Southern Italy </div> </div> </div> <div class="card-face card-back"> <div class="card-info"> <h3>Amalfi Coast Getaway</h3> <p>Experience the Mediterranean charm of Italy's most picturesque coastline. Cliffside villages, azure waters, and authentic cuisine await.</p> <div class="card-highlights"> <span class="highlight">Historic Towns</span> <span class="highlight">Mediterranean Cuisine</span> <span class="highlight">Scenic Drives</span> </div> <p>Best time to visit: April to October</p> </div> <div class="card-footer"> <div class="price">€1,299 <span>/ person</span></div> <button class="btn">Book Now</button> </div> </div> </div> <div class="card"> <div class="card-face card-front" style="background-image: url('https://images.unsplash.com/photo-1578321272176-9fcd51d2c82b?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80')"> <div class="card-front-content"> <span class="card-category">Tropical Paradise</span> <h2 class="card-title">Bali</h2> <div class="card-location"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"> <path d="M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"></path> </svg> Indonesia </div> </div> </div> <div class="card-face card-back"> <div class="card-info"> <h3>Balinese Retreat</h3> <p>Immerse yourself in Bali's spiritual tranquility with lush rice terraces, sacred temples, and vibrant coral reefs for ultimate relaxation.</p> <div class="card-highlights"> <span class="highlight">Yoga Retreats</span> <span class="highlight">Temple Tours</span> <span class="highlight">Surf Paradise</span> </div> <p>Best time to visit: May to September</p> </div> <div class="card-footer"> <div class="price">$1,099 <span>/ person</span></div> <button class="btn">Book Now</button> </div> </div> </div> <div class="card"> <div class="card-face card-front" style="background-image: url('https://images.unsplash.com/photo-1492714485642-3be45f46ae76?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80')"> <div class="card-front-content"> <span class="card-category">Urban Adventure</span> <h2 class="card-title">Tokyo</h2> <div class="card-location"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"> <path d="M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"></path> </svg> Japan </div> </div> </div> <div class="card-face card-back"> <div class="card-info"> <h3>Tokyo Explorer Package</h3> <p>Navigate the fascinating intersection of tradition and futuristic innovation in Japan's electric capital with insider access to local hotspots.</p> <div class="card-highlights"> <span class="highlight">Robot Cafés</span> <span class="highlight">Ancient Temples</span> <span class="highlight">Street Food Tour</span> </div> <p>Best time to visit: March to May, September to November</p> </div> <div class="card-footer"> <div class="price">¥145,000 <span>/ person</span></div> <button class="btn">Book Now</button> </div> </div> </div> <div class="card"> <div class="card-face card-front" style="background-image: url('https://images.unsplash.com/photo-1568634426658-0d48a2480e8c?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80')"> <div class="card-front-content"> <span class="card-category">Wildlife Safari</span> <h2 class="card-title">Serengeti</h2> <div class="card-location"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"> <path d="M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"></path> </svg> Tanzania </div> </div> </div> <div class="card-face card-back"> <div class="card-info"> <h3>Great Migration Safari</h3> <p>Witness the breathtaking wildebeest migration across the savanna in a luxurious eco-friendly camp experience with expert guides.</p> <div class="card-highlights"> <span class="highlight">Big Five</span> <span class="highlight">Hot Air Balloon</span> <span class="highlight">Luxury Camp</span> </div> <p>Best time to visit: June to October (Migration season)</p> </div> <div class="card-footer"> <div class="price">$2,499 <span>/ person</span></div> <button class="btn">Book Now</button> </div> </div> </div> </div> <div class="dots-nav"> <span class="dot active" data-slide="0"></span> <span class="dot" data-slide="1"></span> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const cards = document.querySelectorAll('.card'); const dots = document.querySelectorAll('.dot'); const cardsContainer = document.querySelector('.cards-container'); let currentSlide = 0; const slidesCount = 2; // We have 2 pages with 2 cards each // Card flip functionality cards.forEach(card => { card.addEventListener('click', function() { this.classList.toggle('flipped'); }); }); // Navigation dots functionality dots.forEach(dot => { dot.addEventListener('click', function() { const slideIndex = parseInt(this.getAttribute('data-slide')); goToSlide(slideIndex); }); }); function goToSlide(index) { if (index === currentSlide) return; // Update current slide currentSlide = index; // Update dots dots.forEach((dot, i) => { dot.classList.toggle('active', i === currentSlide); }); // First reset any flipped cards cards.forEach(card => { card.classList.remove('flipped'); }); // Move cards view const offset = currentSlide * -100; cardsContainer.style.transform = `translateX(${offset}%)`; cardsContainer.style.transition = 'transform 0.5s ease'; } // Initialize touch swipe let touchStartX = 0; let touchEndX = 0; cardsContainer.addEventListener('touchstart', e => { touchStartX = e.changedTouches[0].screenX; }); cardsContainer.addEventListener('touchend', e => { touchEndX = e.changedTouches[0].screenX; handleSwipe(); }); function handleSwipe() { const swipeThreshold = 50; if (touchEndX < touchStartX - swipeThreshold && currentSlide < slidesCount - 1) { // Swipe left goToSlide(currentSlide + 1); } else if (touchEndX > touchStartX + swipeThreshold && currentSlide > 0) { // Swipe right goToSlide(currentSlide - 1); } } // Add shining effect on hover cards.forEach(card => { card.addEventListener('mousemove', function(e) { const cardRect = this.getBoundingClientRect(); const x = e.clientX - cardRect.left; const y = e.clientY - cardRect.top; const centerX = cardRect.width / 2; const centerY = cardRect.height / 2; const angleX = (centerY - y) / 20; const angleY = (x - centerX) / 20; this.style.transform = `rotateX(${angleX}deg) rotateY(${angleY}deg)`; // Add shine effect const shine = this.querySelector('.card-front::after'); if (shine) { const percentage = (x / cardRect.width) * 100; shine.style.backgroundPosition = `${percentage}% ${percentage}%`; } }); card.addEventListener('mouseleave', function() { this.style.transform = ''; }); }); // Prevent form submission behavior const buttons = document.querySelectorAll('.btn'); buttons.forEach(btn => { btn.addEventListener('click', function(e) { e.stopPropagation(); // Prevent card flip when clicking the button // Here you would typically handle the booking logic // Add visual feedback for the click without page refresh const originalText = this.innerText; this.innerText = "Processing..."; setTimeout(() => { this.innerText = "✓ Reserved"; this.style.background = "linear-gradient(to right, #4CAF50, #8BC34A)"; setTimeout(() => { this.innerText = originalText; this.style.background = ""; }, 2000); }, 800); }); }); // Make responsive function handleResponsive() { if (window.innerWidth <= 650) { cardsContainer.style.gridTemplateColumns = '1fr'; } else { cardsContainer.style.gridTemplateColumns = 'repeat(2, 1fr)'; } } // Initial call and event listener for responsive design handleResponsive(); window.addEventListener('resize', handleResponsive); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Digital Museum Artwork Flip Cards</title> <style> @import url('https://fonts.googleapis.com/css2?family=Work+Sans:wght@300;400;500;600&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } :root { --primary-color: #f7f5f2; --secondary-color: #eae7e0; --text-color: #2a2a2a; --accent-color: #c9b8a8; --shadow-color: rgba(0, 0, 0, 0.08); --card-transition: 0.85s cubic-bezier(0.23, 1, 0.32, 1); } body { font-family: 'Work Sans', sans-serif; background-color: var(--primary-color); color: var(--text-color); min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; padding: 20px; overflow-x: hidden; } .container { width: 100%; max-width: 700px; max-height: 700px; overflow-y: auto; padding: 20px 0; scrollbar-width: thin; scrollbar-color: var(--accent-color) var(--primary-color); } .container::-webkit-scrollbar { width: 6px; } .container::-webkit-scrollbar-track { background: var(--primary-color); } .container::-webkit-scrollbar-thumb { background-color: var(--accent-color); border-radius: 10px; } header { text-align: center; margin-bottom: 30px; position: relative; } h1 { font-weight: 500; font-size: 28px; letter-spacing: 0.5px; margin-bottom: 10px; position: relative; display: inline-block; } h1::after { content: ''; position: absolute; bottom: -8px; left: 50%; transform: translateX(-50%); width: 40px; height: 2px; background-color: var(--accent-color); } .subtitle { font-weight: 300; font-size: 14px; color: #666; max-width: 450px; margin: 0 auto; } .filter-container { display: flex; justify-content: center; margin-bottom: 25px; overflow-x: auto; white-space: nowrap; -ms-overflow-style: none; scrollbar-width: none; padding: 5px; } .filter-container::-webkit-scrollbar { display: none; } .filter-btn { background-color: transparent; border: 1px solid var(--accent-color); color: var(--text-color); padding: 6px 15px; margin: 0 5px; border-radius: 20px; font-size: 13px; cursor: pointer; transition: all 0.3s ease; font-weight: 400; } .filter-btn:hover, .filter-btn.active { background-color: var(--accent-color); color: white; } .cards-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 25px; perspective: 1000px; } .card-wrapper { height: 360px; position: relative; transform-style: preserve-3d; transition: transform var(--card-transition); cursor: pointer; } .card-wrapper.flipped { transform: rotateY(180deg); } .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: 12px; overflow: hidden; box-shadow: 0 5px 15px var(--shadow-color); transform-style: preserve-3d; } .card-front { background-color: white; display: flex; flex-direction: column; justify-content: flex-end; } .card-back { background-color: var(--secondary-color); transform: rotateY(180deg); padding: 25px; display: flex; flex-direction: column; justify-content: space-between; } .artwork-image { width: 100%; height: 100%; object-fit: cover; position: absolute; top: 0; left: 0; z-index: 1; transition: all 0.5s ease; } .artwork-caption { position: relative; z-index: 2; padding: 15px; background: linear-gradient(to top, rgba(0,0,0,0.7) 0%, rgba(0,0,0,0) 100%); color: white; transition: transform 0.3s ease; } .card-wrapper:hover .artwork-image { transform: scale(1.05); } .artwork-title { font-size: 18px; font-weight: 500; margin-bottom: 4px; } .artwork-artist { font-size: 14px; font-weight: 300; opacity: 0.9; } .back-header { margin-bottom: 15px; } .back-title { font-size: 20px; font-weight: 500; margin-bottom: 5px; } .back-artist { font-size: 16px; font-weight: 400; color: #444; } .back-year { font-size: 14px; font-weight: 300; color: #666; margin-top: 3px; } .back-description { font-size: 14px; line-height: 1.5; font-weight: 300; flex-grow: 1; } .back-footer { margin-top: 20px; display: flex; justify-content: space-between; align-items: center; font-size: 13px; } .artwork-medium { font-style: italic; color: #555; } .back-location { display: flex; align-items: center; } .location-dot { width: 8px; height: 8px; background-color: var(--accent-color); border-radius: 50%; margin-right: 5px; } .flip-icon { position: absolute; bottom: 15px; right: 15px; width: 30px; height: 30px; background-color: rgba(255, 255, 255, 0.9); border-radius: 50%; display: flex; align-items: center; justify-content: center; z-index: 3; opacity: 0; transition: opacity 0.3s ease; } .card-wrapper:hover .flip-icon { opacity: 1; } .flip-icon svg { width: 15px; height: 15px; fill: var(--text-color); } @media (max-width: 600px) { .cards-container { grid-template-columns: 1fr; } .card-wrapper { height: 320px; } header { margin-bottom: 20px; } h1 { font-size: 24px; } .subtitle { font-size: 13px; } } .loader-wrapper { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: var(--primary-color); display: flex; justify-content: center; align-items: center; z-index: 999; transition: opacity 0.5s ease, visibility 0.5s ease; } .loader { width: 40px; height: 40px; border: 3px solid var(--secondary-color); border-radius: 50%; border-top-color: var(--accent-color); animation: spin 1s ease-in-out infinite; } @keyframes spin { to { transform: rotate(360deg); } } .fade-out { opacity: 0; visibility: hidden; } .appear { animation: fadeIn 0.8s forwards; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } </style> </head> <body> <div class="loader-wrapper"> <div class="loader"></div> </div> <div class="container"> <header> <h1>ARTÉFACT</h1> <p class="subtitle">Explore a curated selection of masterpieces from the world's most prestigious museums through our interactive digital exhibition.</p> </header> <div class="filter-container"> <button class="filter-btn active" data-filter="all">All</button> <button class="filter-btn" data-filter="impressionism">Impressionism</button> <button class="filter-btn" data-filter="renaissance">Renaissance</button> <button class="filter-btn" data-filter="surrealism">Surrealism</button> <button class="filter-btn" data-filter="modernism">Modernism</button> </div> <div class="cards-container"> <!-- Cards will be dynamically generated here --> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Artwork data const artworks = [ { id: 1, title: "The Starry Night", artist: "Vincent van Gogh", year: "1889", image: "https://uploads6.wikiart.org/images/vincent-van-gogh/the-starry-night-1889.jpg", description: "Painted during his stay at the asylum of Saint-Paul-de-Mausole, this masterpiece represents Van Gogh's view from his room window, transformed through his emotional and psychological lens.", medium: "Oil on canvas", location: "MoMA, New York", category: "impressionism" }, { id: 2, title: "The Persistence of Memory", artist: "Salvador Dalí", year: "1931", image: "https://uploads5.wikiart.org/images/salvador-dali/the-persistence-of-memory-1931.jpg", description: "Often called 'Melting Clocks', this iconic surrealist work explores the fluidity of time. Dalí once claimed it was inspired by watching Camembert cheese melt in the sun.", medium: "Oil on canvas", location: "MoMA, New York", category: "surrealism" }, { id: 3, title: "The Birth of Venus", artist: "Sandro Botticelli", year: "1485", image: "https://uploads7.wikiart.org/images/sandro-botticelli/the-birth-of-venus-1485.jpg", description: "Depicts the goddess Venus arriving at the shore after her birth. The painting is one of the most celebrated mythological works of the Early Renaissance, blending classical myth with Christian symbolism.", medium: "Tempera on canvas", location: "Uffizi Gallery, Florence", category: "renaissance" }, { id: 4, title: "Les Demoiselles d'Avignon", artist: "Pablo Picasso", year: "1907", image: "https://uploads6.wikiart.org/images/pablo-picasso/the-girls-of-avignon-1907.jpg", description: "A revolutionary work that broke from traditional perspective and representation, signaling the birth of Cubism. The five figures are depicted in a confrontational manner that was shocking to contemporary viewers.", medium: "Oil on canvas", location: "MoMA, New York", category: "modernism" }, { id: 5, title: "Water Lilies", artist: "Claude Monet", year: "1919", image: "https://uploads0.wikiart.org/images/claude-monet/water-lilies-1919-4.jpg", description: "Part of Monet's extensive Water Lilies series painted in his garden at Giverny. This immersive depiction of his water garden showcases his mastery of light, reflection, and color.", medium: "Oil on canvas", location: "Metropolitan Museum, New York", category: "impressionism" }, { id: 6, title: "The Creation of Adam", artist: "Michelangelo", year: "1512", image: "https://uploads8.wikiart.org/00142/images/michelangelo/the-creation-of-adam-1.jpg", description: "The iconic fresco from the Sistine Chapel ceiling depicting God's gift of life to Adam. The nearly touching fingers have become one of the most recognized symbols of Renaissance art.", medium: "Fresco", location: "Sistine Chapel, Vatican City", category: "renaissance" } ]; const cardsContainer = document.querySelector('.cards-container'); const filterButtons = document.querySelectorAll('.filter-btn'); let currentFilter = 'all'; // Create cards function function createCards(filter = 'all') { cardsContainer.innerHTML = ''; const filtered = filter === 'all' ? artworks : artworks.filter(artwork => artwork.category === filter); filtered.forEach((artwork, index) => { const delay = index * 100; const cardHTML = ` <div class="card-wrapper" data-id="${artwork.id}" data-category="${artwork.category}" style="animation-delay: ${delay}ms"> <div class="card-face card-front"> <img src="${artwork.image}" alt="${artwork.title}" class="artwork-image"> <div class="artwork-caption"> <h3 class="artwork-title">${artwork.title}</h3> <p class="artwork-artist">${artwork.artist}</p> </div> <div class="flip-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> <path d="M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v3H10v2h7.01v3L21 9z"/> </svg> </div> </div> <div class="card-face card-back"> <div class="back-header"> <h3 class="back-title">${artwork.title}</h3> <p class="back-artist">${artwork.artist}</p> <p class="back-year">${artwork.year}</p> </div> <p class="back-description">${artwork.description}</p> <div class="back-footer"> <span class="artwork-medium">${artwork.medium}</span> <div class="back-location"> <div class="location-dot"></div> <span>${artwork.location}</span> </div> </div> </div> </div> `; cardsContainer.insertAdjacentHTML('beforeend', cardHTML); }); // Add the appear class with a delay setTimeout(() => { document.querySelectorAll('.card-wrapper').forEach(card => { card.classList.add('appear'); }); }, 100); } // Initialize with all cards setTimeout(() => { createCards(); // Remove loader document.querySelector('.loader-wrapper').classList.add('fade-out'); }, 800); // Filter functionality filterButtons.forEach(button => { button.addEventListener('click', function() { const filter = this.getAttribute('data-filter'); if (filter !== currentFilter) { // Update active button filterButtons.forEach(btn => btn.classList.remove('active')); this.classList.add('active'); // Update cards createCards(filter); currentFilter = filter; } }); }); // Card flip functionality cardsContainer.addEventListener('click', function(e) { const cardWrapper = e.target.closest('.card-wrapper'); if (cardWrapper) { cardWrapper.classList.toggle('flipped'); } }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Corporate Testimonial Flip Cards</title> <style> :root { --primary-color: #1a5f7a; --secondary-color: #2d8bae; --accent-color: #f8b042; --light-color: #f5f7fa; --dark-color: #2c3e50; --shadow: 0 10px 30px rgba(0, 0, 0, 0.1); --transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); } * { box-sizing: border-box; margin: 0; padding: 0; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background-color: var(--light-color); color: var(--dark-color); display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 700px; padding: 20px; overflow-x: hidden; } .container { max-width: 680px; width: 100%; margin: 0 auto; } header { text-align: center; margin-bottom: 30px; position: relative; } header::after { content: ''; position: absolute; bottom: -10px; left: 50%; transform: translateX(-50%); width: 80px; height: 4px; background: var(--accent-color); border-radius: 2px; } h1 { color: var(--primary-color); font-size: 1.8rem; font-weight: 600; margin-bottom: 10px; } p.subtitle { color: var(--dark-color); font-size: 1rem; opacity: 0.8; max-width: 600px; margin: 0 auto; } .testimonials-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 30px; padding: 10px 0; margin-top: 20px; } .testimonial-card { background-color: white; height: 250px; perspective: 1000px; border-radius: 12px; box-shadow: var(--shadow); cursor: pointer; position: relative; overflow: hidden; } .testimonial-card::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 6px; background: linear-gradient(90deg, var(--primary-color), var(--secondary-color)); z-index: 5; opacity: 0; transition: opacity 0.3s ease; } .testimonial-card:hover::before { opacity: 1; } .card-inner { position: relative; width: 100%; height: 100%; text-align: center; transition: var(--transition); transform-style: preserve-3d; } .testimonial-card.flipped .card-inner { transform: rotateY(180deg); } .card-front, .card-back { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: 12px; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 25px; } .card-front { background-color: white; } .card-back { background-color: white; transform: rotateY(180deg); text-align: left; justify-content: space-between; } .profile-img { width: 80px; height: 80px; border-radius: 50%; object-fit: cover; border: 3px solid var(--light-color); box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); margin-bottom: 15px; transition: transform 0.3s ease; } .testimonial-card:hover .profile-img { transform: scale(1.05); } .quote-icon { color: var(--accent-color); font-size: 24px; margin-bottom: 10px; opacity: 0.5; } .short-quote { font-style: italic; font-weight: 500; color: var(--dark-color); margin-bottom: 10px; line-height: 1.4; max-width: 90%; } .name { font-weight: 600; color: var(--primary-color); margin-bottom: 5px; } .position { font-size: 0.8rem; color: var(--dark-color); opacity: 0.7; } .full-testimonial { font-size: 0.9rem; line-height: 1.5; margin-bottom: 20px; color: var(--dark-color); font-weight: 400; } .company-logo { max-width: 120px; max-height: 40px; margin-top: 10px; opacity: 0.8; transition: opacity 0.3s ease; } .company-logo:hover { opacity: 1; } .flip-indicator { position: absolute; bottom: 15px; right: 15px; background-color: var(--secondary-color); color: white; width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; border-radius: 50%; font-size: 14px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); opacity: 0.7; transition: all 0.2s ease; } .testimonial-card:hover .flip-indicator { opacity: 1; transform: rotate(45deg); } .rating { display: flex; margin-top: 5px; margin-bottom: 10px; } .star { color: var(--accent-color); font-size: 14px; margin: 0 1px; } .back-header { align-self: flex-start; display: flex; align-items: center; margin-bottom: 15px; } .back-header .profile-img { width: 40px; height: 40px; margin-bottom: 0; margin-right: 10px; } .back-header .name-title { text-align: left; } .back-header .name { margin-bottom: 2px; font-size: 0.9rem; } .back-header .position { font-size: 0.7rem; } .back-footer { align-self: flex-end; text-align: right; width: 100%; display: flex; justify-content: space-between; align-items: center; } .read-more { font-size: 0.75rem; color: var(--secondary-color); text-decoration: none; font-weight: 600; display: inline-flex; align-items: center; } .read-more-icon { margin-left: 5px; transition: transform 0.2s ease; } .read-more:hover .read-more-icon { transform: translateX(3px); } .flip-back { background-color: var(--light-color); color: var(--primary-color); border: none; padding: 5px 10px; border-radius: 4px; font-size: 0.7rem; font-weight: 600; cursor: pointer; transition: all 0.2s ease; } .flip-back:hover { background-color: var(--primary-color); color: white; } @media (max-width: 700px) { .testimonials-grid { grid-template-columns: 1fr; gap: 20px; } h1 { font-size: 1.5rem; } .testimonial-card { height: 230px; } } .pulse { animation: pulse 2s infinite; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(45, 139, 174, 0.4); } 70% { box-shadow: 0 0 0 10px rgba(45, 139, 174, 0); } 100% { box-shadow: 0 0 0 0 rgba(45, 139, 174, 0); } } /* Pattern Background */ .pattern { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: -1; opacity: 0.03; background: linear-gradient(30deg, var(--primary-color) 12%, transparent 12.5%, transparent 87%, var(--primary-color) 87.5%, var(--primary-color)), linear-gradient(150deg, var(--primary-color) 12%, transparent 12.5%, transparent 87%, var(--primary-color) 87.5%, var(--primary-color)), linear-gradient(30deg, var(--primary-color) 12%, transparent 12.5%, transparent 87%, var(--primary-color) 87.5%, var(--primary-color)), linear-gradient(150deg, var(--primary-color) 12%, transparent 12.5%, transparent 87%, var(--primary-color) 87.5%, var(--primary-color)), linear-gradient(60deg, var(--secondary-color) 25%, transparent 25.5%, transparent 75%, var(--secondary-color) 75%, var(--secondary-color)), linear-gradient(60deg, var(--secondary-color) 25%, transparent 25.5%, transparent 75%, var(--secondary-color) 75%, var(--secondary-color)); background-size: 40px 70px; background-position: 0 0, 0 0, 20px 35px, 20px 35px, 0 0, 20px 35px; } </style> </head> <body> <div class="pattern"></div> <div class="container"> <header> <h1>What Our Clients Are Saying</h1> <p class="subtitle">Discover how our solutions transformed operations for industry leaders worldwide</p> </header> <div class="testimonials-grid"> <div class="testimonial-card"> <div class="card-inner"> <div class="card-front"> <img src="https://randomuser.me/api/portraits/women/33.jpg" alt="Sarah Mitchell" class="profile-img"> <div class="quote-icon">❝</div> <p class="short-quote">Reduced our operational costs by 37% in the first quarter alone.</p> <h3 class="name">Sarah Mitchell</h3> <p class="position">CFO, Nexus Technologies</p> <div class="rating"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> </div> <div class="flip-indicator pulse">↔</div> </div> <div class="card-back"> <div class="back-header"> <img src="https://randomuser.me/api/portraits/women/33.jpg" alt="Sarah Mitchell" class="profile-img"> <div class="name-title"> <h3 class="name">Sarah Mitchell</h3> <p class="position">CFO, Nexus Technologies</p> </div> </div> <p class="full-testimonial">"After implementing the enterprise solution, we reduced our operational costs by 37% in the first quarter alone. The dashboard analytics provided insights we never knew we needed, helping us optimize workflows across five departments simultaneously. The ROI exceeded our expectations by 3x."</p> <div class="back-footer"> <a href="#" class="read-more">Full case study <span class="read-more-icon">→</span></a> <img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIGhlaWdodD0iNTAiPjxyZWN0IHdpZHRoPSIyMDAiIGhlaWdodD0iNTAiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMjAgMjVoMTYwdjJIMjB6IiBmaWxsPSIjMWE1ZjdhIi8+PHBhdGggZD0iTTYwIDEyaDgwdjZoLTgweiIgZmlsbD0iIzFhNWY3YSIvPjxwYXRoIGQ9Ik03MCAxOGg2MHYyMGgtNjB6IiBmaWxsPSIjMWE1ZjdhIi8+PHRleHQgeD0iMTAwIiB5PSIzMiIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjZmZmIj5ORVhVUyBURUNIPC90ZXh0Pjwvc3ZnPg==" alt="Nexus Technologies" class="company-logo"> </div> </div> </div> </div> <div class="testimonial-card"> <div class="card-inner"> <div class="card-front"> <img src="https://randomuser.me/api/portraits/men/54.jpg" alt="David Kessler" class="profile-img"> <div class="quote-icon">❝</div> <p class="short-quote">The platform handled our 327% growth without a single performance issue.</p> <h3 class="name">David Kessler</h3> <p class="position">CTO, Elevate Dynamics</p> <div class="rating"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> </div> <div class="flip-indicator pulse">↔</div> </div> <div class="card-back"> <div class="back-header"> <img src="https://randomuser.me/api/portraits/men/54.jpg" alt="David Kessler" class="profile-img"> <div class="name-title"> <h3 class="name">David Kessler</h3> <p class="position">CTO, Elevate Dynamics</p> </div> </div> <p class="full-testimonial">"During our Series C funding growth phase, the platform handled our 327% user increase without a single performance issue. The scalable architecture supported 18.3 million concurrent requests during our product launch. The integration took only 14 days vs. the 60 days we had allocated."</p> <div class="back-footer"> <a href="#" class="read-more">Full case study <span class="read-more-icon">→</span></a> <img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIGhlaWdodD0iNTAiPjxyZWN0IHdpZHRoPSIyMDAiIGhlaWdodD0iNTAiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMzMgMTBsMjAgMzBoOTRsMjAtMzB6IiBmaWxsPSIjMmQ4YmFlIi8+PHRleHQgeD0iMTAwIiB5PSIzMCIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjZmZmIj5FTEVWQVRFPC90ZXh0Pjwvc3ZnPg==" alt="Elevate Dynamics" class="company-logo"> </div> </div> </div> </div> <div class="testimonial-card"> <div class="card-inner"> <div class="card-front"> <img src="https://randomuser.me/api/portraits/women/44.jpg" alt="Abigail Chen" class="profile-img"> <div class="quote-icon">❝</div> <p class="short-quote">Streamlined compliance reporting from 40 hours to just 3.5 hours weekly.</p> <h3 class="name">Abigail Chen</h3> <p class="position">Compliance Director, Meridian Financial</p> <div class="rating"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> </div> <div class="flip-indicator pulse">↔</div> </div> <div class="card-back"> <div class="back-header"> <img src="https://randomuser.me/api/portraits/women/44.jpg" alt="Abigail Chen" class="profile-img"> <div class="name-title"> <h3 class="name">Abigail Chen</h3> <p class="position">Compliance Director, Meridian Financial</p> </div> </div> <p class="full-testimonial">"In the heavily regulated financial sector, your compliance automation suite streamlined our reporting from 40 hours to just 3.5 hours weekly. The audit-ready documentation feature has helped us pass three regulatory reviews with zero findings. My team now focuses on strategy rather than paperwork."</p> <div class="back-footer"> <a href="#" class="read-more">Full case study <span class="read-more-icon">→</span></a> <img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIGhlaWdodD0iNTAiPjxyZWN0IHdpZHRoPSIyMDAiIGhlaWdodD0iNTAiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMDAiIGN5PSIyNSIgcj0iMjAiIGZpbGw9IiMxYTVmN2EiLz48cmVjdCB4PSI0MCIgeT0iMjAiIHdpZHRoPSIxMjAiIGhlaWdodD0iMTAiIGZpbGw9IiMxYTVmN2EiLz48dGV4dCB4PSIxMDAiIHk9IjI5IiBmb250LWZhbWlseT0iQXJpYWwiIGZvbnQtc2l6ZT0iOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2ZmZiI+TUVSSURJQU48L3RleHQ+PC9zdmc+" alt="Meridian Financial" class="company-logo"> </div> </div> </div> </div> <div class="testimonial-card"> <div class="card-inner"> <div class="card-front"> <img src="https://randomuser.me/api/portraits/men/78.jpg" alt="Marcus Johnson" class="profile-img"> <div class="quote-icon">❝</div> <p class="short-quote">Improved conversion rates by 41% through personalized customer journeys.</p> <h3 class="name">Marcus Johnson</h3> <p class="position">Marketing Director, Pulse Retail</p> <div class="rating"> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> <span class="star">★</span> </div> <div class="flip-indicator pulse">↔</div> </div> <div class="card-back"> <div class="back-header"> <img src="https://randomuser.me/api/portraits/men/78.jpg" alt="Marcus Johnson" class="profile-img"> <div class="name-title"> <h3 class="name">Marcus Johnson</h3> <p class="position">Marketing Director, Pulse Retail</p> </div> </div> <p class="full-testimonial">"The customer analytics platform improved our conversion rates by 41% through personalized customer journeys. The AI-powered recommendation engine increased average order value by $27.80. We've been able to decrease customer acquisition costs by 22% while improving retention by 35%."</p> <div class="back-footer"> <a href="#" class="read-more">Full case study <span class="read-more-icon">→</span></a> <img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIGhlaWdodD0iNTAiPjxyZWN0IHdpZHRoPSIyMDAiIGhlaWdodD0iNTAiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNNTAgMTBsMTAwIDBsMCAxMGwtMTAwIDB6IiBmaWxsPSIjZjhiMDQyIi8+PHBhdGggZD0iTTUwIDMwbDEwMCAwbDAgMTBsLTEwMCAweiIgZmlsbD0iI2Y4YjA0MiIvPjx0ZXh0IHg9IjEwMCIgeT0iMjgiIGZvbnQtZmFtaWx5PSJBcmlhbCIgZm9udC1zaXplPSIxNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzFhNWY3YSIgZm9udC13ZWlnaHQ9ImJvbGQiPlBVTFNFPC90ZXh0Pjwvc3ZnPg==" alt="Pulse Retail" class="company-logo"> </div> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const cards = document.querySelectorAll('.testimonial-card'); cards.forEach(card => { card.addEventListener('click', function() { this.classList.toggle('flipped'); }); // Add keyboard accessibility card.addEventListener('keydown', function(e) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); this.classList.toggle('flipped'); } }); // Make cards focusable card.setAttribute('tabindex', '0'); }); // Prevent default behavior for read more links to avoid page refresh const readMoreLinks = document.querySelectorAll('.read-more'); readMoreLinks.forEach(link => { link.addEventListener('click', function(e) { e.preventDefault(); // Here you would normally navigate to the case study // For this demo, we'll just log a message console.log('Opening case study...'); }); }); // Add animation to indicate interactivity setTimeout(() => { const firstCard = document.querySelector('.testimonial-card'); if (firstCard) { firstCard.classList.add('flipped'); setTimeout(() => { firstCard.classList.remove('flipped'); }, 1500); } }, 1000); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> :root { --primary-color: #e67e22; --accent-color: #d35400; --background-color: #fff9f0; --text-color: #3e3e3e; --light-accent: #ffeacf; --shadow-color: rgba(0, 0, 0, 0.1); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Montserrat', sans-serif; } body { background-color: var(--background-color); display: flex; flex-direction: column; align-items: center; justify-content: flex-start; min-height: 100vh; color: var(--text-color); padding: 20px; overflow-x: hidden; position: relative; } .title-container { text-align: center; margin-bottom: 20px; position: relative; width: 100%; } h1 { font-size: 2.5rem; margin-bottom: 10px; color: var(--accent-color); font-family: 'Caveat', cursive; letter-spacing: 1px; position: relative; display: inline-block; } h1::after { content: ""; position: absolute; width: 80%; height: 3px; background: repeating-linear-gradient(90deg, var(--primary-color), var(--primary-color) 5px, transparent 5px, transparent 12px); bottom: -8px; left: 10%; border-radius: 3px; } p.subtitle { font-size: 1rem; color: var(--text-color); max-width: 500px; margin: 0 auto; font-style: italic; } .cards-container { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 25px; width: 100%; max-width: 700px; margin-top: 20px; perspective: 1000px; } .recipe-card { position: relative; height: 350px; width: 100%; transform-style: preserve-3d; transition: transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275); cursor: pointer; border-radius: 15px; box-shadow: 0 10px 20px var(--shadow-color); } .recipe-card.flipped { transform: rotateY(180deg); } .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: 15px; overflow: hidden; display: flex; flex-direction: column; justify-content: flex-start; } .card-front { background-color: white; color: var(--text-color); position: relative; } .card-back { background-color: var(--light-accent); transform: rotateY(180deg); padding: 20px; overflow-y: auto; } .card-image { width: 100%; height: 220px; object-fit: cover; } .card-content { padding: 15px; position: relative; } .card-title { font-size: 1.4rem; color: var(--accent-color); margin-bottom: 5px; font-weight: bold; font-family: 'Caveat', cursive; } .card-desc { font-size: 0.9rem; color: var(--text-color); line-height: 1.3; } .flip-hint { position: absolute; top: 15px; right: 15px; background-color: rgba(255, 255, 255, 0.9); color: var(--accent-color); padding: 5px 10px; border-radius: 20px; font-size: 0.8rem; border: 1px dashed var(--primary-color); transition: all 0.3s ease; animation: pulse 2s infinite; z-index: 2; } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } .recipe-section { margin-bottom: 15px; } .recipe-section h3 { color: var(--accent-color); margin-bottom: 8px; font-family: 'Caveat', cursive; font-size: 1.3rem; position: relative; display: inline-block; } .recipe-section h3::after { content: ""; position: absolute; bottom: -4px; left: 0; width: 100%; height: 2px; background: repeating-linear-gradient(90deg, var(--primary-color), var(--primary-color) 4px, transparent 4px, transparent 8px); } .ingredients-list { list-style-type: none; padding-left: 5px; } .ingredients-list li { position: relative; padding-left: 20px; margin-bottom: 5px; font-size: 0.9rem; line-height: 1.4; } .ingredients-list li::before { content: "•"; position: absolute; left: 0; color: var(--primary-color); font-size: 1.2rem; } .instructions-list { list-style-position: inside; padding-left: 5px; counter-reset: instruction; } .instructions-list li { margin-bottom: 10px; font-size: 0.9rem; line-height: 1.4; counter-increment: instruction; position: relative; padding-left: 28px; } .instructions-list li::before { content: counter(instruction); position: absolute; left: 0; top: 0; background-color: var(--primary-color); color: white; font-size: 0.8rem; width: 20px; height: 20px; border-radius: 50%; display: flex; align-items: center; justify-content: center; } .cooking-time { display: flex; align-items: center; margin-top: 5px; font-size: 0.85rem; color: var(--accent-color); } .cooking-time svg { margin-right: 5px; width: 16px; height: 16px; } .difficulty { display: inline-block; padding: 3px 10px; font-size: 0.75rem; border-radius: 12px; background-color: var(--primary-color); color: white; position: absolute; top: 15px; left: 15px; z-index: 2; } .category-tag { position: absolute; bottom: 15px; right: 15px; padding: 3px 10px; background-color: rgba(255, 255, 255, 0.9); border-radius: 12px; font-size: 0.75rem; color: var(--accent-color); } .return-button { margin-top: 10px; font-size: 0.8rem; color: var(--primary-color); background: none; border: none; text-decoration: underline; cursor: pointer; align-self: flex-end; } .decorative-elements { position: absolute; width: 100%; height: 100%; pointer-events: none; z-index: -1; } .decorative-elements::before { content: ""; position: absolute; width: 100px; height: 100px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23e67e22' opacity='0.1'%3E%3Cpath d='M18 4v16H6V4h12m1-2H5c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-5 5H8v2h6V7zm0 4H8v2h6v-2zm0 4H8v2h6v-2z'/%3E%3C/svg%3E"); background-repeat: no-repeat; top: 20px; right: 20px; opacity: 0.2; } .filter-container { display: flex; gap: 10px; margin-bottom: 20px; flex-wrap: wrap; justify-content: center; } .filter-button { background-color: white; border: 2px solid var(--primary-color); color: var(--primary-color); padding: 8px 15px; border-radius: 20px; cursor: pointer; font-size: 0.9rem; transition: all 0.3s ease; } .filter-button:hover, .filter-button.active { background-color: var(--primary-color); color: white; } .tip-box { background-color: rgba(255, 255, 255, 0.8); border-left: 4px solid var(--primary-color); padding: 10px; margin-top: 10px; font-size: 0.85rem; border-radius: 0 5px 5px 0; } .tip-box strong { color: var(--accent-color); } .doodle { position: absolute; opacity: 0.1; z-index: -1; } .doodle.spoon { width: 60px; height: 60px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23d35400'%3E%3Cpath d='M8.1 13.34l2.83-2.83L3.91 3.5c-1.56 1.56-1.56 4.09 0 5.66l4.19 4.18zm6.78-1.81c1.53.71 3.68.21 5.27-1.38 1.91-1.91 2.28-4.65.81-6.12-1.46-1.46-4.2-1.1-6.12.81-1.59 1.59-2.09 3.74-1.38 5.27L3.7 19.87l1.41 1.41L12 14.41l6.88 6.88 1.41-1.41L13.41 13l1.47-1.47z'/%3E%3C/svg%3E"); top: 50px; left: 30px; transform: rotate(15deg); } .doodle.fork { width: 50px; height: 50px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23d35400'%3E%3Cpath d='M11 9H9V2H7v7H5V2H3v7c0 2.12 1.66 3.84 3.75 3.97V22h2.5V12.97C11.34 12.84 13 11.12 13 9V2h-2v7zm5-3v8h2.5v8H21V2c-2.76 0-5 2.24-5 4z'/%3E%3C/svg%3E"); bottom: 40px; right: 50px; transform: rotate(-20deg); } @media (max-width: 600px) { .cards-container { grid-template-columns: 1fr; } h1 { font-size: 2rem; } .filter-container { flex-direction: row; overflow-x: auto; padding-bottom: 10px; justify-content: flex-start; width: 100%; } .filter-button { flex: 0 0 auto; } } /* Fancy animations */ @keyframes float { 0% { transform: translateY(0px) rotate(0deg); } 50% { transform: translateY(-10px) rotate(5deg); } 100% { transform: translateY(0px) rotate(0deg); } } .recipe-card:hover:not(.flipped) { animation: float 3s ease infinite; box-shadow: 0 15px 30px var(--shadow-color); } .card-back::after { content: ""; position: absolute; top: 0; right: 0; width: 80px; height: 80px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23e67e22' opacity='0.1'%3E%3Cpath d='M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 4h12v16H6V4z'/%3E%3Cpath d='M8 6h8v2H8zm0 4h8v2H8zm0 4h8v2H8z'/%3E%3C/svg%3E"); background-repeat: no-repeat; opacity: 0.15; pointer-events: none; } .card-front::before { content: ""; position: absolute; bottom: 0; left: 0; right: 0; height: 80px; background: linear-gradient(to top, rgba(0,0,0,0.3), transparent); z-index: 1; border-radius: 0 0 15px 15px; } @keyframes wiggle { 0%, 100% { transform: rotate(0deg); } 25% { transform: rotate(1deg); } 75% { transform: rotate(-1deg); } } .ingredients-list li:hover { animation: wiggle 0.5s ease; color: var(--accent-color); } .instructions-list li:hover::before { background-color: var(--accent-color); transform: scale(1.2); transition: all 0.3s ease; } </style> <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600&family=Caveat:wght@600&display=swap" rel="stylesheet"> </head> <body> <div class="decorative-elements"> <div class="doodle spoon"></div> <div class="doodle fork"></div> </div> <div class="title-container"> <h1>Seasonal Kitchen</h1> <p class="subtitle">Discover recipes that celebrate the best of each season's harvest</p> </div> <div class="filter-container"> <button class="filter-button active" data-filter="all">All</button> <button class="filter-button" data-filter="summer">Summer</button> <button class="filter-button" data-filter="fall">Fall</button> <button class="filter-button" data-filter="vegetarian">Vegetarian</button> </div> <div class="cards-container"> <!-- Summer Caprese Salad --> <div class="recipe-card" data-category="summer vegetarian"> <div class="card-face card-front"> <span class="difficulty">Easy</span> <span class="flip-hint">Tap for recipe</span> <img src="https://images.unsplash.com/photo-1595587870672-c79b47875c6a?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" alt="Summer Caprese Salad" class="card-image"> <div class="card-content"> <h2 class="card-title">Summer Caprese Salad</h2> <p class="card-desc">A vibrant celebration of summer tomatoes with fresh mozzarella and basil.</p> <div class="cooking-time"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm.5-13H11v6l5.2 3.2.8-1.3-4.5-2.7V7z"></path></svg> 15 minutes </div> </div> <span class="category-tag">Summer</span> </div> <div class="card-face card-back"> <div class="recipe-section"> <h3>Ingredients</h3> <ul class="ingredients-list"> <li>3 large heirloom tomatoes, sliced</li> <li>250g fresh buffalo mozzarella, torn</li> <li>Fresh basil leaves (1 small bunch)</li> <li>3 tbsp extra virgin olive oil</li> <li>2 tsp balsamic glaze</li> <li>Flaky sea salt and black pepper</li> </ul> </div> <div class="recipe-section"> <h3>Instructions</h3> <ol class="instructions-list"> <li>Arrange tomato slices on a platter</li> <li>Tear the mozzarella and scatter over tomatoes</li> <li>Tuck basil leaves throughout the arrangement</li> <li>Drizzle with olive oil and balsamic glaze</li> <li>Season with flaky salt and freshly cracked pepper</li> </ol> </div> <div class="tip-box"> <strong>Chef's Tip:</strong> For the best flavor, let the salad sit at room temperature for 15 minutes before serving. </div> </div> </div> <!-- Autumn Squash Soup --> <div class="recipe-card" data-category="fall vegetarian"> <div class="card-face card-front"> <span class="difficulty">Medium</span> <span class="flip-hint">Tap for recipe</span> <img src="https://images.unsplash.com/photo-1476718406336-bb5a9690ee2a?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" alt="Autumn Squash Soup" class="card-image"> <div class="card-content"> <h2 class="card-title">Autumn Squash Soup</h2> <p class="card-desc">A velvety butternut soup with warm spices and a hint of maple—autumn in a bowl.</p> <div class="cooking-time"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm.5-13H11v6l5.2 3.2.8-1.3-4.5-2.7V7z"></path></svg> 45 minutes </div> </div> <span class="category-tag">Fall</span> </div> <div class="card-face card-back"> <div class="recipe-section"> <h3>Ingredients</h3> <ul class="ingredients-list"> <li>1 large butternut squash, peeled and cubed</li> <li>1 onion, chopped</li> <li>2 cloves garlic, minced</li> <li>1 apple, cored and chopped</li> <li>4 cups vegetable broth</li> <li>1/2 tsp cinnamon</li> <li>1/4 tsp nutmeg</li> <li>2 tbsp maple syrup</li> <li>1/2 cup heavy cream</li> <li>Salt and pepper to taste</li> <li>Toasted pumpkin seeds for garnish</li> </ul> </div> <div class="recipe-section"> <h3>Instructions</h3> <ol class="instructions-list"> <li>Sauté onion and garlic until fragrant</li> <li>Add squash, apple, spices, and broth</li> <li>Simmer until squash is tender (25-30 min)</li> <li>Blend until smooth with an immersion blender</li> <li>Stir in maple syrup and cream</li> <li>Season to taste and garnish with pumpkin seeds</li> </ol> </div> <div class="tip-box"> <strong>Chef's Tip:</strong> For a dairy-free version, substitute coconut milk for the heavy cream. </div> </div> </div> <!-- Summer Berry Pavlova --> <div class="recipe-card" data-category="summer vegetarian"> <div class="card-face card-front"> <span class="difficulty">Advanced</span> <span class="flip-hint">Tap for recipe</span> <img src="https://images.unsplash.com/photo-1464305795204-6f5bbfc7fb81?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" alt="Summer Berry Pavlova" class="card-image"> <div class="card-content"> <h2 class="card-title">Summer Berry Pavlova</h2> <p class="card-desc">A cloud-like meringue topped with whipped cream and a medley of fresh summer berries.</p> <div class="cooking-time"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm.5-13H11v6l5.2 3.2.8-1.3-4.5-2.7V7z"></path></svg> 2 hours </div> </div> <span class="category-tag">Summer</span> </div> <div class="card-face card-back"> <div class="recipe-section"> <h3>Ingredients</h3> <ul class="ingredients-list"> <li>4 large egg whites, room temperature</li> <li>1 cup granulated sugar</li> <li>1 tsp cornstarch</li> <li>1 tsp white vinegar</li> <li>1/2 tsp vanilla extract</li> <li>1 cup heavy cream</li> <li>2 tbsp powdered sugar</li> <li>2 cups mixed summer berries (strawberries, blueberries, raspberries)</li> <li>Fresh mint leaves for garnish</li> </ul> </div> <div class="recipe-section"> <h3>Instructions</h3> <ol class="instructions-list"> <li>Preheat oven to 300°F (150°C)</li> <li>Beat egg whites until soft peaks form</li> <li>Gradually add sugar, beating until glossy</li> <li>Fold in cornstarch, vinegar, and vanilla</li> <li>Shape into a 9-inch circle on parchment paper</li> <li>Reduce oven to 250°F and bake for 1.5 hours</li> <li>Turn off oven and let cool completely inside</li> <li>Whip cream with powdered sugar</li> <li>Top pavlova with cream and fresh berries</li> </ol> </div> <div class="tip-box"> <strong>Chef's Tip:</strong> Make sure your mixing bowl is completely grease-free for the best meringue. </div> </div> </div> <!-- Harvest Roasted Vegetables --> <div class="recipe-card" data-category="fall vegetarian"> <div class="card-face card-front"> <span class="difficulty">Easy</span> <span class="flip-hint">Tap for recipe</span> <img src="https://images.unsplash.com/photo-1510629640437-fdc0cba37dfb?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1000&q=80" alt="Harvest Roasted Vegetables" class="card-image"> <div class="card-content"> <h2 class="card-title">Harvest Roasted Vegetables</h2> <p class="card-desc">A colorful medley of fall vegetables caramelized to perfection with herbs and maple glaze.</p> <div class="cooking-time"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm.5-13H11v6l5.2 3.2.8-1.3-4.5-2.7V7z"></path></svg> 40 minutes </div> </div> <span class="category-tag">Fall</span> </div> <div class="card-face card-back"> <div class="recipe-section"> <h3>Ingredients</h3> <ul class="ingredients-list"> <li>2 cups Brussels sprouts, halved</li> <li>2 cups butternut squash, cubed</li> <li>2 medium sweet potatoes, cubed</li> <li>1 red onion, cut into wedges</li> <li>2 parsnips, sliced</li> <li>3 tbsp olive oil</li> <li>2 tbsp maple syrup</li> <li>1 tbsp fresh thyme leaves</li> <li>1 tbsp fresh rosemary, chopped</li> <li>Salt and pepper to taste</li> <li>1/3 cup toasted pecans, chopped</li> </ul> </div> <div class="recipe-section"> <h3>Instructions</h3> <ol class="instructions-list"> <li>Preheat oven to 425°F (220°C)</li> <li>Toss vegetables with oil, maple syrup, herbs, salt and pepper</li> <li>Spread in a single layer on two baking sheets</li> <li>Roast for 30-35 minutes, turning halfway through</li> <li>Vegetables should be tender and caramelized</li> <li>Sprinkle with toasted pecans before serving</li> </ol> </div> <div class="tip-box"> <strong>Chef's Tip:</strong> For even roasting, make sure vegetables are cut into similar sizes and don't overcrowd the pan. </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', () => { // Flip card functionality const cards = document.querySelectorAll('.recipe-card'); cards.forEach(card => { card.addEventListener('click', () => { card.classList.toggle('flipped'); }); }); // Category filter functionality const filterButtons = document.querySelectorAll('.filter-button'); filterButtons.forEach(button => { button.addEventListener('click', () => { // Remove active class from all buttons filterButtons.forEach(b => b.classList.remove('active')); // Add active class to clicked button button.classList.add('active'); // Get filter value const filterValue = button.getAttribute('data-filter'); // Show/hide cards based on filter cards.forEach(card => { if (filterValue === 'all') { card.style.display = 'block'; } else { if (card.getAttribute('data-category').includes(filterValue)) { card.style.display = 'block'; } else { card.style.display = 'none'; } } }); }); }); // Initialize a staggered animation for cards cards.forEach((card, index) => { setTimeout(() => { card.style.opacity = '0'; card.style.transform = 'translateY(20px)'; card.style.transition = 'opacity 0.5s ease, transform 0.5s ease'; setTimeout(() => { card.style.opacity = '1'; card.style.transform = 'translateY(0)'; }, 100); }, index * 150); }); }); </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: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { display: flex; justify-content: center; align-items: center; min-height: 100vh; background-color: #f8f9fa; overflow-x: hidden; padding: 20px; } .container { width: 100%; max-width: 660px; height: 660px; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; gap: 20px; padding: 20px; } .app-header { text-align: center; margin-bottom: 10px; } .app-header h1 { color: #0066ff; font-size: 28px; font-weight: 700; margin-bottom: 10px; } .app-header p { color: #555; font-size: 16px; max-width: 600px; line-height: 1.5; } .cards-container { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; width: 100%; max-width: 660px; } .flip-card { background-color: transparent; width: 100%; height: 220px; perspective: 1000px; cursor: pointer; position: relative; } .flip-card-inner { position: relative; width: 100%; height: 100%; text-align: center; transition: transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275); transform-style: preserve-3d; box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1); border-radius: 16px; } .flip-card.flipped .flip-card-inner { transform: rotateY(180deg); } .flip-card-front, .flip-card-back { position: absolute; width: 100%; height: 100%; -webkit-backface-visibility: hidden; backface-visibility: hidden; border-radius: 16px; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 20px; } .flip-card-front { background: linear-gradient(135deg, var(--primary-color) 0%, var(--secondary-color) 100%); color: white; } .flip-card-back { background-color: white; color: #333; transform: rotateY(180deg); overflow: auto; } .flip-card:nth-child(1) { --primary-color: #4f46e5; --secondary-color: #818cf8; } .flip-card:nth-child(2) { --primary-color: #0284c7; --secondary-color: #38bdf8; } .flip-card:nth-child(3) { --primary-color: #16a34a; --secondary-color: #4ade80; } .flip-card:nth-child(4) { --primary-color: #ea580c; --secondary-color: #fb923c; } .card-icon { font-size: 50px; margin-bottom: 15px; background: rgba(255, 255, 255, 0.2); width: 80px; height: 80px; border-radius: 50%; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15); } .card-title { font-size: 18px; font-weight: 600; margin-bottom: 5px; } .card-subtitle { font-size: 14px; opacity: 0.9; } .card-back-title { font-size: 18px; color: var(--primary-color); font-weight: 600; margin-bottom: 15px; } .card-back-content { font-size: 14px; line-height: 1.6; text-align: left; margin-bottom: 20px; } .step { display: flex; align-items: flex-start; margin-bottom: 10px; text-align: left; } .step-number { background-color: var(--primary-color); color: white; width: 25px; height: 25px; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-right: 10px; flex-shrink: 0; } .step-text { font-size: 14px; line-height: 1.5; } .flip-hint { position: absolute; bottom: 10px; text-align: center; width: 100%; font-size: 12px; color: rgba(255, 255, 255, 0.8); display: flex; align-items: center; justify-content: center; } .flip-hint-back { position: absolute; bottom: 10px; text-align: center; width: 100%; font-size: 12px; color: var(--primary-color); opacity: 0.8; display: flex; align-items: center; justify-content: center; } .hint-icon { margin-left: 4px; font-size: 14px; animation: bounce 1.5s infinite; } @keyframes bounce { 0%, 20%, 50%, 80%, 100% { transform: translateY(0); } 40% { transform: translateY(-3px); } 60% { transform: translateY(-2px); } } .progress-container { width: 100%; max-width: 660px; height: 6px; background-color: #e0e0e0; border-radius: 3px; margin-top: 5px; margin-bottom: 10px; overflow: hidden; } .progress-bar { height: 100%; background: linear-gradient(to right, #4f46e5, #16a34a); width: 0; transition: width 0.5s ease; border-radius: 3px; } .progress-text { font-size: 14px; color: #666; margin-bottom: 5px; text-align: right; width: 100%; } @media (max-width: 640px) { .cards-container { grid-template-columns: 1fr; } .flip-card { height: 180px; } .card-icon { width: 60px; height: 60px; font-size: 35px; } } /* Animation when card appears */ .flip-card { opacity: 0; transform: translateY(30px); animation: fadeInUp 0.6s forwards; } .flip-card:nth-child(1) { animation-delay: 0.1s; } .flip-card:nth-child(2) { animation-delay: 0.2s; } .flip-card:nth-child(3) { animation-delay: 0.3s; } .flip-card:nth-child(4) { animation-delay: 0.4s; } @keyframes fadeInUp { to { opacity: 1; transform: translateY(0); } } /* Ripple effect on tap */ .ripple { position: absolute; border-radius: 50%; background-color: rgba(255, 255, 255, 0.4); transform: scale(0); animation: ripple 0.6s linear; pointer-events: none; } @keyframes ripple { to { transform: scale(4); opacity: 0; } } .swipe-indicator { position: absolute; width: 60px; height: 60px; border-radius: 50%; pointer-events: none; background-color: rgba(255, 255, 255, 0.2); opacity: 0; } /* Skip tutorial button */ .skip-button { color: #555; background: none; border: none; font-size: 14px; margin-top: 5px; cursor: pointer; padding: 5px 10px; border-radius: 15px; transition: all 0.3s ease; text-decoration: underline; opacity: 0.7; } .skip-button:hover { opacity: 1; background-color: rgba(0, 0, 0, 0.05); } </style> </head> <body> <div class="container"> <div class="app-header"> <h1>Welcome to Fitness Tracker Pro</h1> <p>Discover these essential features to make the most of your fitness journey. Tap or swipe cards to learn more.</p> </div> <div class="progress-container"> <div class="progress-text">0% completed</div> <div class="progress-bar"></div> </div> <div class="cards-container"> <div class="flip-card"> <div class="flip-card-inner"> <div class="flip-card-front"> <div class="card-icon">📊</div> <h3 class="card-title">Activity Tracking</h3> <p class="card-subtitle">Real-time workout monitoring</p> <div class="flip-hint">Tap to learn more <span class="hint-icon">↓</span></div> </div> <div class="flip-card-back"> <h3 class="card-back-title">Activity Tracking</h3> <p class="card-back-content">Our advanced sensors track every movement with precision, giving you detailed insights about your workouts.</p> <div class="step"> <div class="step-number">1</div> <div class="step-text">Swipe right on the homepage to access the activity panel</div> </div> <div class="step"> <div class="step-number">2</div> <div class="step-text">Tap "Start" before your workout and choose your activity type</div> </div> <div class="step"> <div class="step-number">3</div> <div class="step-text">Get live metrics including heart rate, pace, and calorie burn</div> </div> <div class="flip-hint-back">Tap to flip back <span class="hint-icon">↓</span></div> </div> </div> </div> <div class="flip-card"> <div class="flip-card-inner"> <div class="flip-card-front"> <div class="card-icon">🥗</div> <h3 class="card-title">Nutrition Planner</h3> <p class="card-subtitle">Smart meal tracking & planning</p> <div class="flip-hint">Tap to learn more <span class="hint-icon">↓</span></div> </div> <div class="flip-card-back"> <h3 class="card-back-title">Nutrition Planner</h3> <p class="card-back-content">Easily track meals and balance your diet with our AI-powered nutrition assistant.</p> <div class="step"> <div class="step-number">1</div> <div class="step-text">Snap a photo of your meal or search our database of 500,000+ foods</div> </div> <div class="step"> <div class="step-number">2</div> <div class="step-text">Set macro goals based on your fitness objectives</div> </div> <div class="step"> <div class="step-number">3</div> <div class="step-text">Get personalized meal suggestions to meet your daily targets</div> </div> <div class="flip-hint-back">Tap to flip back <span class="hint-icon">↓</span></div> </div> </div> </div> <div class="flip-card"> <div class="flip-card-inner"> <div class="flip-card-front"> <div class="card-icon">👥</div> <h3 class="card-title">Social Challenges</h3> <p class="card-subtitle">Compete with friends & community</p> <div class="flip-hint">Tap to learn more <span class="hint-icon">↓</span></div> </div> <div class="flip-card-back"> <h3 class="card-back-title">Social Challenges</h3> <p class="card-back-content">Make fitness fun by joining challenges and competing with friends or the global community.</p> <div class="step"> <div class="step-number">1</div> <div class="step-text">Access the Challenges tab from your profile dashboard</div> </div> <div class="step"> <div class="step-number">2</div> <div class="step-text">Join existing challenges or create custom ones for your friend group</div> </div> <div class="step"> <div class="step-number">3</div> <div class="step-text">Earn badges and rewards as you achieve challenge milestones</div> </div> <div class="flip-hint-back">Tap to flip back <span class="hint-icon">↓</span></div> </div> </div> </div> <div class="flip-card"> <div class="flip-card-inner"> <div class="flip-card-front"> <div class="card-icon">🏆</div> <h3 class="card-title">Goal Setting</h3> <p class="card-subtitle">Smart targets with progress tracking</p> <div class="flip-hint">Tap to learn more <span class="hint-icon">↓</span></div> </div> <div class="flip-card-back"> <h3 class="card-back-title">Goal Setting</h3> <p class="card-back-content">Set SMART fitness goals and track your progress with detailed analytics and insights.</p> <div class="step"> <div class="step-number">1</div> <div class="step-text">Navigate to the Goals section in your dashboard menu</div> </div> <div class="step"> <div class="step-number">2</div> <div class="step-text">Choose from preset goals or create custom targets for weight, strength, or endurance</div> </div> <div class="step"> <div class="step-number">3</div> <div class="step-text">Review your weekly progress reports and adjust goals as needed</div> </div> <div class="flip-hint-back">Tap to flip back <span class="hint-icon">↓</span></div> </div> </div> </div> </div> <button class="skip-button">Skip tutorial</button> </div> <script> document.addEventListener('DOMContentLoaded', function() { const flipCards = document.querySelectorAll('.flip-card'); const progressBar = document.querySelector('.progress-bar'); const progressText = document.querySelector('.progress-text'); const skipButton = document.querySelector('.skip-button'); let flippedCards = 0; let touchStartX = 0; let touchStartY = 0; // Update progress bar function updateProgress() { const totalCards = flipCards.length; const progress = (flippedCards / totalCards) * 100; progressBar.style.width = `${progress}%`; progressText.textContent = `${Math.round(progress)}% completed`; } // Create ripple effect function createRipple(event, element) { const ripple = document.createElement('span'); ripple.classList.add('ripple'); const rect = element.getBoundingClientRect(); // Calculate position relative to the element let x, y; if (event.type === 'touchstart') { x = event.touches[0].clientX - rect.left; y = event.touches[0].clientY - rect.top; } else { x = event.clientX - rect.left; y = event.clientY - rect.top; } ripple.style.left = `${x}px`; ripple.style.top = `${y}px`; element.appendChild(ripple); // Remove ripple after animation setTimeout(() => { ripple.remove(); }, 600); } // Handle flip card interaction flipCards.forEach(card => { card.addEventListener('click', function(e) { const inner = this.querySelector('.flip-card-inner'); const frontFace = this.querySelector('.flip-card-front'); // Add ripple effect if (e.target.closest('.flip-card-front')) { createRipple(e, frontFace); } // Toggle flip state this.classList.toggle('flipped'); // Update progress when flipped first time if (this.classList.contains('flipped') && !this.dataset.hasBeenFlipped) { flippedCards++; this.dataset.hasBeenFlipped = true; updateProgress(); } }); // Touch events for swipe detection card.addEventListener('touchstart', function(e) { touchStartX = e.touches[0].clientX; touchStartY = e.touches[0].clientY; }); card.addEventListener('touchmove', function(e) { if (!touchStartX || !touchStartY) return; const touchEndX = e.touches[0].clientX; const touchEndY = e.touches[0].clientY; const diffX = touchStartX - touchEndX; const diffY = touchStartY - touchEndY; // If horizontal swipe is greater than vertical swipe if (Math.abs(diffX) > Math.abs(diffY)) { e.preventDefault(); // Prevent scrolling // Swipe right or left based on direction if (Math.abs(diffX) > 50) { // Threshold this.classList.toggle('flipped'); // Update progress when flipped first time if (this.classList.contains('flipped') && !this.dataset.hasBeenFlipped) { flippedCards++; this.dataset.hasBeenFlipped = true; updateProgress(); } // Reset touchStart values touchStartX = 0; touchStartY = 0; } } }); }); // Skip tutorial button skipButton.addEventListener('click', function() { flipCards.forEach(card => { if (!card.dataset.hasBeenFlipped) { card.dataset.hasBeenFlipped = true; flippedCards++; } }); updateProgress(); // Animation to show completion progressBar.style.transition = "width 0.8s ease, background 0.8s ease"; progressBar.style.background = "linear-gradient(to right, #4caf50, #8bc34a)"; // Show a simulated "completed" message setTimeout(() => { progressText.textContent = "Tutorial completed!"; skipButton.textContent = "Continue to app"; }, 800); }); // Initialize progress updateProgress(); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Team Member Bio Flip Cards</title> <style> :root { --primary: #3a506b; --secondary: #1c2541; --accent: #5bc0be; --light: #f8f9fa; --dark: #0b132b; --text-color: #333; --card-shadow: 0 10px 20px rgba(0, 0, 0, 0.1); --transition-duration: 0.6s; } * { 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: var(--light); color: var(--text-color); min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 20px; overflow-x: hidden; } .container { max-width: 700px; width: 100%; height: 700px; overflow-y: auto; padding: 20px; scroll-behavior: smooth; } .container::-webkit-scrollbar { width: 6px; } .container::-webkit-scrollbar-track { background: var(--light); } .container::-webkit-scrollbar-thumb { background-color: var(--accent); border-radius: 20px; } h1 { color: var(--primary); margin-bottom: 10px; font-size: 2rem; text-align: center; position: relative; } h1::after { content: ""; position: absolute; bottom: -10px; left: 50%; transform: translateX(-50%); width: 80px; height: 3px; background-color: var(--accent); border-radius: 3px; } p.subtitle { text-align: center; margin-bottom: 40px; color: #666; font-size: 1.1rem; } .team-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 30px; margin-top: 30px; } .card-container { perspective: 1000px; height: 280px; } .card { position: relative; width: 100%; height: 100%; transform-style: preserve-3d; transition: transform var(--transition-duration) cubic-bezier(0.23, 1, 0.32, 1); border-radius: 12px; box-shadow: var(--card-shadow); cursor: pointer; } .card:hover { transform: translateY(-5px); box-shadow: 0 15px 30px rgba(0, 0, 0, 0.15); } .card.flipped { transform: rotateY(180deg); } .card-front, .card-back { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: 12px; overflow: hidden; display: flex; flex-direction: column; } .card-front { background-color: var(--primary); color: var(--light); align-items: center; justify-content: flex-end; padding-bottom: 20px; } .card-back { background-color: var(--light); transform: rotateY(180deg); padding: 20px; display: flex; flex-direction: column; justify-content: space-between; border: 1px solid rgba(0, 0, 0, 0.1); } .profile-img { width: 120px; height: 120px; border-radius: 50%; object-fit: cover; border: 4px solid rgba(255, 255, 255, 0.2); filter: saturate(1.1); margin-bottom: 15px; transition: transform 0.3s ease; } .card:hover .profile-img { transform: scale(1.05); } .card-front h2 { font-size: 1.2rem; margin-bottom: 5px; font-weight: 600; } .card-front p { font-size: 0.9rem; opacity: 0.8; } .card-back h2 { font-size: 1.2rem; color: var(--secondary); margin-bottom: 10px; position: relative; padding-bottom: 10px; } .card-back h2::after { content: ""; position: absolute; bottom: 0; left: 0; width: 40px; height: 2px; background-color: var(--accent); } .bio { font-size: 0.85rem; line-height: 1.5; color: #555; margin-bottom: 15px; flex-grow: 1; } .social-links { display: flex; gap: 12px; margin-top: 10px; } .social-links a { display: flex; align-items: center; justify-content: center; width: 30px; height: 30px; border-radius: 50%; background-color: var(--primary); color: white; text-decoration: none; font-size: 0.9rem; transition: all 0.3s ease; } .social-links a:hover { background-color: var(--accent); transform: translateY(-3px); } .skill-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; } .skill-tag { background-color: rgba(91, 192, 190, 0.1); color: var(--accent); font-size: 0.7rem; padding: 3px 8px; border-radius: 12px; font-weight: 500; } .flip-icon { position: absolute; top: 10px; right: 10px; background-color: rgba(255, 255, 255, 0.2); width: 25px; height: 25px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.8rem; color: white; transition: transform 0.3s ease; } .card-back .flip-icon { background-color: rgba(58, 80, 107, 0.1); color: var(--primary); } .card:hover .flip-icon { transform: rotate(45deg); } .pattern { position: absolute; top: 0; left: 0; width: 100%; height: 40%; background-image: radial-gradient(circle at 10px 10px, rgba(255, 255, 255, 0.1) 2px, transparent 0); background-size: 20px 20px; z-index: 0; } .card-back .pattern { background-image: radial-gradient(circle at 10px 10px, rgba(91, 192, 190, 0.1) 2px, transparent 0); } .department { position: absolute; top: 15px; left: 15px; font-size: 0.7rem; background-color: rgba(0, 0, 0, 0.2); padding: 3px 8px; border-radius: 12px; letter-spacing: 0.5px; } @media (max-width: 480px) { .team-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 20px; } .card-container { height: 250px; } .profile-img { width: 90px; height: 90px; } h1 { font-size: 1.5rem; } p.subtitle { font-size: 0.9rem; margin-bottom: 20px; } } /* Animation for card entrance */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .card-container { animation: fadeInUp 0.6s ease forwards; opacity: 0; } .card-container:nth-child(1) { animation-delay: 0.1s; } .card-container:nth-child(2) { animation-delay: 0.2s; } .card-container:nth-child(3) { animation-delay: 0.3s; } .card-container:nth-child(4) { animation-delay: 0.4s; } .card-container:nth-child(5) { animation-delay: 0.5s; } .card-container:nth-child(6) { animation-delay: 0.6s; } .card-container:nth-child(7) { animation-delay: 0.7s; } .card-container:nth-child(8) { animation-delay: 0.8s; } </style> </head> <body> <div class="container"> <h1>Meet Our Team</h1> <p class="subtitle">The talented individuals behind our success</p> <div class="team-grid"> <div class="card-container"> <div class="card"> <div class="card-front"> <div class="pattern"></div> <span class="department">Engineering</span> <div class="flip-icon">↺</div> <img src="https://randomuser.me/api/portraits/women/23.jpg" alt="Sarah Chen" class="profile-img"> <h2>Sarah Chen</h2> <p>Lead Software Architect</p> </div> <div class="card-back"> <div class="pattern"></div> <div class="flip-icon">↺</div> <div> <h2>Sarah Chen</h2> <p class="bio">Pioneering our microservices architecture with 10+ years of experience in scalable systems. Mentors our junior engineers and leads our internal tech talks.</p> <div class="skill-tags"> <span class="skill-tag">Go</span> <span class="skill-tag">Kubernetes</span> <span class="skill-tag">AWS</span> </div> </div> <div class="social-links"> <a href="#" aria-label="LinkedIn"><i>in</i></a> <a href="#" aria-label="GitHub"><i>gh</i></a> <a href="#" aria-label="Twitter"><i>tw</i></a> </div> </div> </div> </div> <div class="card-container"> <div class="card"> <div class="card-front"> <div class="pattern"></div> <span class="department">Design</span> <div class="flip-icon">↺</div> <img src="https://randomuser.me/api/portraits/men/32.jpg" alt="Miguel Sanchez" class="profile-img"> <h2>Miguel Sanchez</h2> <p>UX/UI Design Director</p> </div> <div class="card-back"> <div class="pattern"></div> <div class="flip-icon">↺</div> <div> <h2>Miguel Sanchez</h2> <p class="bio">Former IDEO designer who transformed our product experience. Specializes in accessibility-first design and has spoken at multiple UX conferences.</p> <div class="skill-tags"> <span class="skill-tag">Figma</span> <span class="skill-tag">Design Systems</span> <span class="skill-tag">A11y</span> </div> </div> <div class="social-links"> <a href="#" aria-label="LinkedIn"><i>in</i></a> <a href="#" aria-label="Dribbble"><i>dr</i></a> <a href="#" aria-label="Behance"><i>be</i></a> </div> </div> </div> </div> <div class="card-container"> <div class="card"> <div class="card-front"> <div class="pattern"></div> <span class="department">Product</span> <div class="flip-icon">↺</div> <img src="https://randomuser.me/api/portraits/women/67.jpg" alt="Aisha Johnson" class="profile-img"> <h2>Aisha Johnson</h2> <p>Senior Product Manager</p> </div> <div class="card-back"> <div class="pattern"></div> <div class="flip-icon">↺</div> <div> <h2>Aisha Johnson</h2> <p class="bio">Data-driven PM with a knack for user research. Led our platform's international expansion, increasing user adoption by 78% in emerging markets.</p> <div class="skill-tags"> <span class="skill-tag">Strategy</span> <span class="skill-tag">Analytics</span> <span class="skill-tag">Growth</span> </div> </div> <div class="social-links"> <a href="#" aria-label="LinkedIn"><i>in</i></a> <a href="#" aria-label="Medium"><i>m</i></a> <a href="#" aria-label="ProductHunt"><i>ph</i></a> </div> </div> </div> </div> <div class="card-container"> <div class="card"> <div class="card-front"> <div class="pattern"></div> <span class="department">Marketing</span> <div class="flip-icon">↺</div> <img src="https://randomuser.me/api/portraits/men/76.jpg" alt="Raj Patel" class="profile-img"> <h2>Raj Patel</h2> <p>Content Strategy Lead</p> </div> <div class="card-back"> <div class="pattern"></div> <div class="flip-icon">↺</div> <div> <h2>Raj Patel</h2> <p class="bio">Former journalist who now crafts our brand narrative. His SEO-optimized content strategy increased organic traffic by 145% in 12 months.</p> <div class="skill-tags"> <span class="skill-tag">SEO</span> <span class="skill-tag">Copywriting</span> <span class="skill-tag">Analytics</span> </div> </div> <div class="social-links"> <a href="#" aria-label="LinkedIn"><i>in</i></a> <a href="#" aria-label="Twitter"><i>tw</i></a> <a href="#" aria-label="WordPress"><i>wp</i></a> </div> </div> </div> </div> <div class="card-container"> <div class="card"> <div class="card-front"> <div class="pattern"></div> <span class="department">Finance</span> <div class="flip-icon">↺</div> <img src="https://randomuser.me/api/portraits/women/45.jpg" alt="Elena Rodriguez" class="profile-img"> <h2>Elena Rodriguez</h2> <p>Financial Controller</p> </div> <div class="card-back"> <div class="pattern"></div> <div class="flip-icon">↺</div> <div> <h2>Elena Rodriguez</h2> <p class="bio">CPA with expertise in tech industry finance. Optimized our procurement process saving 22% annually and led our recent Series C funding round.</p> <div class="skill-tags"> <span class="skill-tag">FP&A</span> <span class="skill-tag">Investments</span> <span class="skill-tag">Compliance</span> </div> </div> <div class="social-links"> <a href="#" aria-label="LinkedIn"><i>in</i></a> <a href="#" aria-label="Research Gate"><i>rg</i></a> <a href="#" aria-label="Website"><i>🌐</i></a> </div> </div> </div> </div> <div class="card-container"> <div class="card"> <div class="card-front"> <div class="pattern"></div> <span class="department">Customer Success</span> <div class="flip-icon">↺</div> <img src="https://randomuser.me/api/portraits/men/54.jpg" alt="James Kim" class="profile-img"> <h2>James Kim</h2> <p>Client Relations Director</p> </div> <div class="card-back"> <div class="pattern"></div> <div class="flip-icon">↺</div> <div> <h2>James Kim</h2> <p class="bio">Relationship guru who reduced our enterprise churn rate by 67%. Implements creative client education programs and developed our VIP account strategy.</p> <div class="skill-tags"> <span class="skill-tag">Account Mgmt</span> <span class="skill-tag">Retention</span> <span class="skill-tag">Training</span> </div> </div> <div class="social-links"> <a href="#" aria-label="LinkedIn"><i>in</i></a> <a href="#" aria-label="Slack"><i>sl</i></a> <a href="#" aria-label="Email"><i>✉</i></a> </div> </div> </div> </div> <div class="card-container"> <div class="card"> <div class="card-front"> <div class="pattern"></div> <span class="department">Operations</span> <div class="flip-icon">↺</div> <img src="https://randomuser.me/api/portraits/women/33.jpg" alt="Maya Williams" class="profile-img"> <h2>Maya Williams</h2> <p>Operations Manager</p> </div> <div class="card-back"> <div class="pattern"></div> <div class="flip-icon">↺</div> <div> <h2>Maya Williams</h2> <p class="bio">Six Sigma Black Belt who streamlined our entire supply chain. Implemented our remote-first work policy and leads our sustainability initiatives.</p> <div class="skill-tags"> <span class="skill-tag">Process Optim.</span> <span class="skill-tag">Logistics</span> <span class="skill-tag">Lean</span> </div> </div> <div class="social-links"> <a href="#" aria-label="LinkedIn"><i>in</i></a> <a href="#" aria-label="Twitter"><i>tw</i></a> <a href="#" aria-label="Medium"><i>m</i></a> </div> </div> </div> </div> <div class="card-container"> <div class="card"> <div class="card-front"> <div class="pattern"></div> <span class="department">Research</span> <div class="flip-icon">↺</div> <img src="https://randomuser.me/api/portraits/men/22.jpg" alt="David Okafor" class="profile-img"> <h2>David Okafor</h2> <p>Data Science Lead</p> </div> <div class="card-back"> <div class="pattern"></div> <div class="flip-icon">↺</div> <div> <h2>David Okafor</h2> <p class="bio">PhD in machine learning who built our predictive analytics engine. Published in top AI journals and maintains our open-source contribution program.</p> <div class="skill-tags"> <span class="skill-tag">ML/AI</span> <span class="skill-tag">Python</span> <span class="skill-tag">TensorFlow</span> </div> </div> <div class="social-links"> <a href="#" aria-label="LinkedIn"><i>in</i></a> <a href="#" aria-label="GitHub"><i>gh</i></a> <a href="#" aria-label="Google Scholar"><i>gs</i></a> </div> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const cards = document.querySelectorAll('.card'); cards.forEach(card => { card.addEventListener('click', function() { this.classList.toggle('flipped'); }); // Allow flip icon to be specifically clicked const flipIcons = card.querySelectorAll('.flip-icon'); flipIcons.forEach(icon => { icon.addEventListener('click', function(e) { e.stopPropagation(); // Prevent double toggling card.classList.toggle('flipped'); }); }); }); // Add mouse parallax effect to profile images const profileImgs = document.querySelectorAll('.profile-img'); document.addEventListener('mousemove', function(e) { const x = e.clientX / window.innerWidth - 0.5; const y = e.clientY / window.innerHeight - 0.5; profileImgs.forEach(img => { if (!img.closest('.card').classList.contains('flipped')) { img.style.transform = `translate(${x * 10}px, ${y * 10}px) scale(1)`; } }); }); // Reset transform when mouse leaves window document.addEventListener('mouseleave', function() { profileImgs.forEach(img => { img.style.transform = 'translate(0, 0) scale(1)'; }); }); // Add focus states for keyboard navigation cards.forEach(card => { card.setAttribute('tabindex', '0'); card.addEventListener('keypress', function(e) { if (e.key === 'Enter' || e.key === ' ') { this.classList.toggle('flipped'); } }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Promotional Offer Flip Cards</title> <style> @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@600;700;800&family=Poppins:wght@400;500;600&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Poppins', sans-serif; background-color: #f8f9fa; display: flex; justify-content: center; align-items: center; min-height: 700px; padding: 20px; perspective: 1000px; } .container { width: 100%; max-width: 700px; display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 25px; padding: 15px; } .flip-card { width: 100%; height: 200px; position: relative; transform-style: preserve-3d; transition: transform 0.8s cubic-bezier(0.34, 1.56, 0.64, 1); } .flip-card.flipped { transform: rotateY(180deg); } .flip-card-front, .flip-card-back { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: 18px; overflow: hidden; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); padding: 25px; display: flex; flex-direction: column; justify-content: space-between; } .flip-card-front { background-size: 400% 400%; animation: gradientBG 15s ease infinite; color: white; position: relative; z-index: 1; } .flip-card-front::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.2); z-index: -1; } .card-1 .flip-card-front { background: linear-gradient(-45deg, #FF416C, #FF4B2B, #FF9A8B, #FF416C); } .card-2 .flip-card-front { background: linear-gradient(-45deg, #4158D0, #C850C0, #FFCC70, #4158D0); } .card-3 .flip-card-front { background: linear-gradient(-45deg, #0093E9, #80D0C7, #00DBDE, #0093E9); } .card-4 .flip-card-front { background: linear-gradient(-45deg, #8EC5FC, #E0C3FC, #D9AFD9, #8EC5FC); } @keyframes gradientBG { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } .flip-card-back { background: white; transform: rotateY(180deg); color: #333; } .flip-card-title { font-family: 'Montserrat', sans-serif; font-weight: 800; font-size: 1.6rem; line-height: 1.2; margin-bottom: 10px; position: relative; } .flip-card-subtitle { font-size: 1rem; font-weight: 500; opacity: 0.9; margin-bottom: 5px; } .discount-badge { position: absolute; top: -5px; right: -5px; background: #fff; color: #333; border-radius: 50%; width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 1.2rem; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15); transform: rotate(10deg); animation: pulse 2s infinite; } @keyframes pulse { 0% { transform: rotate(10deg) scale(1); } 50% { transform: rotate(10deg) scale(1.1); } 100% { transform: rotate(10deg) scale(1); } } .flip-badge { font-size: 0.8rem; background: rgba(255, 255, 255, 0.25); padding: 5px 10px; border-radius: 20px; align-self: flex-start; backdrop-filter: blur(5px); margin-top: 10px; display: inline-flex; align-items: center; cursor: pointer; transition: all 0.3s ease; } .flip-badge:hover { background: rgba(255, 255, 255, 0.4); transform: translateY(-2px); } .flip-badge svg { width: 16px; height: 16px; margin-right: 5px; } .back-title { font-family: 'Montserrat', sans-serif; font-weight: 700; font-size: 1.2rem; margin-bottom: 10px; color: #333; } .conditions { list-style: none; margin-bottom: 15px; font-size: 0.9rem; } .conditions li { margin-bottom: 5px; display: flex; align-items: center; } .conditions li::before { content: "•"; color: #ff416c; font-weight: bold; margin-right: 8px; } .cta-button { background: #333; color: white; border: none; padding: 10px 15px; border-radius: 25px; font-family: 'Poppins', sans-serif; font-weight: 600; cursor: pointer; transition: all 0.3s ease; display: inline-flex; align-items: center; justify-content: center; width: 100%; margin-top: auto; } .card-1 .cta-button { background: linear-gradient(to right, #FF416C, #FF4B2B); } .card-2 .cta-button { background: linear-gradient(to right, #4158D0, #C850C0); } .card-3 .cta-button { background: linear-gradient(to right, #0093E9, #80D0C7); } .card-4 .cta-button { background: linear-gradient(to right, #8EC5FC, #E0C3FC); } .cta-button:hover { transform: translateY(-3px); box-shadow: 0 7px 15px rgba(0, 0, 0, 0.1); } .expiry { font-size: 0.8rem; opacity: 0.7; font-style: italic; margin-top: 10px; text-align: center; } .flip-back-badge { font-size: 0.8rem; background: #f1f1f1; padding: 5px 10px; border-radius: 20px; display: inline-flex; align-items: center; align-self: flex-start; cursor: pointer; transition: all 0.3s ease; margin-bottom: 10px; } .flip-back-badge:hover { background: #e5e5e5; transform: translateY(-2px); } .flip-back-badge svg { width: 16px; height: 16px; margin-right: 5px; } .confetti { position: absolute; width: 10px; height: 10px; background-color: #f0f; opacity: 0; z-index: 10; } @media (max-width: 768px) { .container { grid-template-columns: 1fr; } .flip-card { height: 180px; } .flip-card-title { font-size: 1.4rem; } } @media (max-width: 480px) { .container { padding: 10px; } .flip-card { height: 170px; } .flip-card-front, .flip-card-back { padding: 15px; } .flip-card-title { font-size: 1.3rem; } .discount-badge { width: 40px; height: 40px; font-size: 1rem; } } </style> </head> <body> <div class="container"> <div class="flip-card card-1"> <div class="flip-card-front"> <div> <h2 class="flip-card-title">Summer Flash Sale</h2> <p class="flip-card-subtitle">Premium subscription at half price</p> </div> <div class="discount-badge">50%</div> <span class="flip-badge"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 9l3 3m0 0l-3 3m3-3H8m13 0a9 9 0 11-18 0 9 9 0 0118 0z" /> </svg> Tap for details </span> </div> <div class="flip-card-back"> <span class="flip-back-badge"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18" /> </svg> Back </span> <h3 class="back-title">Summer Flash Sale Terms</h3> <ul class="conditions"> <li>New users only</li> <li>Valid for 3-month subscription</li> <li>Auto-renews at regular price</li> </ul> <button class="cta-button">Claim Your 50% Off</button> <p class="expiry">Offer ends July 31, 2024</p> </div> </div> <div class="flip-card card-2"> <div class="flip-card-front"> <div> <h2 class="flip-card-title">Early Bird Access</h2> <p class="flip-card-subtitle">New product launch exclusive</p> </div> <div class="discount-badge">24h</div> <span class="flip-badge"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 9l3 3m0 0l-3 3m3-3H8m13 0a9 9 0 11-18 0 9 9 0 0118 0z" /> </svg> Tap for details </span> </div> <div class="flip-card-back"> <span class="flip-back-badge"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18" /> </svg> Back </span> <h3 class="back-title">Early Bird Offer</h3> <ul class="conditions"> <li>24-hour priority access</li> <li>Includes exclusive bonus content</li> <li>Limited to first 100 customers</li> </ul> <button class="cta-button">Get Priority Access</button> <p class="expiry">Countdown: 24 hours remaining</p> </div> </div> <div class="flip-card card-3"> <div class="flip-card-front"> <div> <h2 class="flip-card-title">Free Delivery Week</h2> <p class="flip-card-subtitle">On all orders, no minimum</p> </div> <div class="discount-badge">FREE</div> <span class="flip-badge"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 9l3 3m0 0l-3 3m3-3H8m13 0a9 9 0 11-18 0 9 9 0 0118 0z" /> </svg> Tap for details </span> </div> <div class="flip-card-back"> <span class="flip-back-badge"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18" /> </svg> Back </span> <h3 class="back-title">Free Delivery Details</h3> <ul class="conditions"> <li>Standard shipping only</li> <li>Domestic orders only</li> <li>Cannot be combined with other offers</li> </ul> <button class="cta-button">Shop Now</button> <p class="expiry">Offer valid June 15-22, 2024</p> </div> </div> <div class="flip-card card-4"> <div class="flip-card-front"> <div> <h2 class="flip-card-title">Loyalty Reward</h2> <p class="flip-card-subtitle">Double points this weekend</p> </div> <div class="discount-badge">2X</div> <span class="flip-badge"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 9l3 3m0 0l-3 3m3-3H8m13 0a9 9 0 11-18 0 9 9 0 0118 0z" /> </svg> Tap for details </span> </div> <div class="flip-card-back"> <span class="flip-back-badge"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18" /> </svg> Back </span> <h3 class="back-title">Double Points Weekend</h3> <ul class="conditions"> <li>Member account required</li> <li>Online and in-store purchases</li> <li>Points credited within 48 hours</li> </ul> <button class="cta-button">Activate Double Points</button> <p class="expiry">Saturday & Sunday only</p> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const flipCards = document.querySelectorAll('.flip-card'); // Set up flip card functionality flipCards.forEach(card => { const frontSide = card.querySelector('.flip-badge'); const backSide = card.querySelector('.flip-back-badge'); const ctaButton = card.querySelector('.cta-button'); frontSide.addEventListener('click', () => { card.classList.add('flipped'); }); backSide.addEventListener('click', () => { card.classList.remove('flipped'); }); // Add confetti effect on CTA button click ctaButton.addEventListener('click', (e) => { createConfetti(e.clientX, e.clientY); // Show clicked feedback ctaButton.textContent = "Offer Activated!"; ctaButton.style.backgroundColor = "#28a745"; // Reset after 2 seconds setTimeout(() => { ctaButton.textContent = ctaButton.textContent.replace("Offer Activated!", ctaButton.textContent.includes("50%") ? "Claim Your 50% Off" : ctaButton.textContent.includes("Priority") ? "Get Priority Access" : ctaButton.textContent.includes("Shop") ? "Shop Now" : "Activate Double Points"); ctaButton.style.backgroundColor = ""; // Flip card back to front setTimeout(() => { card.classList.remove('flipped'); }, 1000); }, 2000); }); }); // Create confetti animation function createConfetti(x, y) { const colors = ['#ff416c', '#4158D0', '#0093E9', '#8EC5FC', '#FFCC70', '#FF9A8B']; for (let i = 0; i < 50; i++) { const confetti = document.createElement('div'); confetti.className = 'confetti'; document.body.appendChild(confetti); // Random position around click const startX = x; const startY = y; // Random color confetti.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)]; // Random size const size = Math.random() * 10 + 5; confetti.style.width = `${size}px`; confetti.style.height = `${size}px`; // Random rotation confetti.style.transform = `rotate(${Math.random() * 360}deg)`; // Animation const animationDuration = Math.random() * 2 + 1; const distance = Math.random() * 150 + 50; const angle = Math.random() * Math.PI * 2; confetti.style.left = `${startX}px`; confetti.style.top = `${startY}px`; // Use animation for better performance confetti.animate([ { transform: `translate(0, 0) rotate(0deg)`, opacity: 1 }, { transform: `translate(${Math.cos(angle) * distance}px, ${Math.sin(angle) * distance - 100}px) rotate(${Math.random() * 360}deg)`, opacity: 0 } ], { duration: animationDuration * 1000, easing: 'cubic-bezier(0.1, 0.8, 0.2, 1)' }); // Remove confetti after animation setTimeout(() => { confetti.remove(); }, animationDuration * 1000); } } // Add subtle hover effect to cards flipCards.forEach(card => { card.addEventListener('mouseenter', () => { if (!card.classList.contains('flipped')) { card.style.transform = 'translateY(-5px) scale(1.02)'; card.style.boxShadow = '0 15px 30px rgba(0,0,0,0.1)'; } }); card.addEventListener('mouseleave', () => { if (!card.classList.contains('flipped')) { card.style.transform = ''; card.style.boxShadow = ''; } }); }); }); </script> </body> </html>