Credit cards have become an essential part of modern financial life, offering convenience and a range of benefits. From cashback rewards to travel perks, the right credit card can significantly enhance your purchasing power.
In this article, we will explore 10 credit card examples that cater to various needs and lifestyles. Whether you're a frequent traveler or a savvy shopper, there's a card out there for you.
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, elevate your credit card designs with Subframe's drag-and-drop interface and intuitive, responsive canvas. Create pixel-perfect UIs effortlessly, every time.
Loved by professionals, Subframe ensures your designs are both stunning and functional. Start for free today!
CODE6
Here's the code:
CODETEXT6
CODE7
Here's the code:
CODETEXT7
CODE8
Here's the code:
CODETEXT8
CODE9
Here's the code:
CODETEXT9
CODE10
Here's the code:
CODETEXT10
Ready to elevate your UI designs? With Subframe, you can create pixel-perfect interfaces, including credit card designs, in minutes. Our drag-and-drop editor ensures efficiency and precision.
Don't wait! Start for free and begin designing stunning UIs right away.
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> :root { --primary: #1a2a3a; --secondary: #2c4356; --accent: #3498db; --accent-light: #5dade2; --text: #e2e2e2; --text-dark: #a8b6c3; --success: #26a69a; --warning: #f39c12; --danger: #e74c3c; --background: #0f1923; --card-shadow: 0 8px 22px rgba(0, 0, 0, 0.2); --transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background-color: var(--background); color: var(--text); display: flex; justify-content: center; align-items: center; min-height: 700px; overflow-x: hidden; padding: 20px; } .container { width: 100%; max-width: 700px; padding: 20px; } header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 30px; } .logo { font-size: 1.8rem; font-weight: 700; color: var(--text); display: flex; align-items: center; } .logo svg { margin-right: 10px; fill: var(--accent); } .user-profile { width: 40px; height: 40px; border-radius: 50%; background-color: var(--accent); display: flex; align-items: center; justify-content: center; cursor: pointer; position: relative; overflow: hidden; transition: var(--transition); } .user-profile:hover { transform: scale(1.1); } .cards-container { width: 100%; display: grid; grid-template-columns: 1fr; gap: 20px; } .section-title { margin-bottom: 20px; font-weight: 500; font-size: 1.4rem; color: var(--text); display: flex; justify-content: space-between; align-items: center; } .add-card-btn { background-color: var(--accent); color: white; border: none; padding: 8px 16px; border-radius: 6px; font-size: 0.9rem; cursor: pointer; transition: var(--transition); display: flex; align-items: center; } .add-card-btn:hover { background-color: var(--accent-light); transform: translateY(-2px); } .add-card-btn svg { margin-right: 6px; } .credit-card { background: linear-gradient(135deg, var(--primary), var(--secondary)); border-radius: 16px; padding: 25px; position: relative; overflow: hidden; box-shadow: var(--card-shadow); transition: var(--transition); cursor: pointer; transform-style: preserve-3d; perspective: 1000px; height: 220px; } .credit-card:hover { transform: translateY(-10px) rotateY(5deg); box-shadow: 0 15px 30px rgba(0, 0, 0, 0.3); } .credit-card:hover .card-shine { opacity: 0.2; transform: translate(-50%, -50%) scale(1.5); } .card-chip { width: 50px; height: 40px; margin-bottom: 30px; position: relative; } .card-shine { position: absolute; width: 200%; height: 200%; background: radial-gradient(circle at center, rgba(255, 255, 255, 0.3) 0%, rgba(255, 255, 255, 0) 70%); top: 0; left: 0; transform: translate(-50%, -50%) scale(0); opacity: 0; pointer-events: none; transition: opacity 0.8s, transform 1.2s cubic-bezier(0.19, 1, 0.22, 1); } .card-top { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 40px; } .card-type { font-size: 0.8rem; color: var(--text-dark); text-transform: uppercase; display: flex; align-items: center; } .card-type-icon { margin-right: 8px; background-color: rgba(255, 255, 255, 0.1); width: 24px; height: 24px; border-radius: 50%; display: flex; align-items: center; justify-content: center; } .card-number { font-size: 1.3rem; letter-spacing: 2px; margin-bottom: 20px; font-weight: 500; } .card-info { display: flex; justify-content: space-between; font-size: 0.9rem; } .card-holder, .expiry { display: flex; flex-direction: column; } .label { color: var(--text-dark); font-size: 0.75rem; margin-bottom: 5px; } .value { font-weight: 500; } .card-details { max-height: 0; overflow: hidden; transition: max-height 0.5s ease-in-out; background-color: var(--secondary); border-radius: 12px; margin-top: 15px; } .card-expanded .card-details { max-height: 500px; box-shadow: var(--card-shadow); } .details-content { padding: 20px; } .tabs { display: flex; border-bottom: 1px solid rgba(255, 255, 255, 0.1); margin-bottom: 15px; } .tab { padding: 10px 20px; cursor: pointer; color: var(--text-dark); position: relative; transition: var(--transition); } .tab.active { color: var(--text); } .tab.active::after { content: ''; position: absolute; bottom: -1px; left: 0; width: 100%; height: 2px; background-color: var(--accent); } .tab-content { display: none; } .tab-content.active { display: block; } .rewards-list, .fees-list, .security-list { list-style: none; } .rewards-list li, .fees-list li, .security-list li { display: flex; align-items: center; margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid rgba(255, 255, 255, 0.05); } .rewards-list li:last-child, .fees-list li:last-child, .security-list li:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: none; } .reward-icon, .fee-icon, .security-icon { width: 36px; height: 36px; border-radius: 8px; display: flex; align-items: center; justify-content: center; margin-right: 15px; flex-shrink: 0; } .reward-icon { background-color: rgba(38, 166, 154, 0.2); color: var(--success); } .fee-icon { background-color: rgba(231, 76, 60, 0.2); color: var(--danger); } .security-icon { background-color: rgba(243, 156, 18, 0.2); color: var(--warning); } .item-details { flex-grow: 1; } .item-title { font-weight: 500; margin-bottom: 5px; } .item-description { font-size: 0.85rem; color: var(--text-dark); line-height: 1.4; } .card-actions { margin-top: 20px; display: flex; gap: 10px; } .action-button { padding: 10px 15px; border-radius: 8px; border: none; font-weight: 500; cursor: pointer; font-size: 0.9rem; display: flex; align-items: center; transition: var(--transition); } .action-button svg { margin-right: 8px; } .primary-action { background-color: var(--accent); color: white; flex-grow: 1; } .primary-action:hover { background-color: var(--accent-light); } .secondary-action { background-color: rgba(255, 255, 255, 0.1); color: var(--text); } .secondary-action:hover { background-color: rgba(255, 255, 255, 0.2); } .cards-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px; } .hidden-card { opacity: 0; transform: translateY(20px); animation: fadeIn 0.5s forwards; } @keyframes fadeIn { to { opacity: 1; transform: translateY(0); } } .pulse { animation: pulse 2s infinite; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(52, 152, 219, 0.4); } 70% { box-shadow: 0 0 0 10px rgba(52, 152, 219, 0); } 100% { box-shadow: 0 0 0 0 rgba(52, 152, 219, 0); } } /* Different card styles */ .credit-card.platinum { background: linear-gradient(135deg, #1a2a3a, #2c4356); } .credit-card.titanium { background: linear-gradient(135deg, #2c3e50, #3498db); } .credit-card.black { background: linear-gradient(135deg, #111111, #333333); } /* Card detail indicators */ .card-indicators { display: flex; margin-top: 15px; justify-content: flex-end; } .indicator { width: 8px; height: 8px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.3); margin-left: 5px; transition: var(--transition); } .indicator.active { background-color: var(--accent); transform: scale(1.2); } /* Responsive adjustments */ @media (max-width: 768px) { .cards-grid { grid-template-columns: 1fr; } .credit-card { height: 200px; } .card-number { font-size: 1.1rem; } .section-title { font-size: 1.2rem; } } /* Card flip animation */ .flip-container { perspective: 1000px; margin-bottom: 20px; } .card-flipper { transition: 0.6s; transform-style: preserve-3d; position: relative; } .card-front, .card-back { backface-visibility: hidden; position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .card-back { transform: rotateY(180deg); padding: 25px; display: flex; flex-direction: column; justify-content: space-between; } .card-back .magnetic-strip { height: 40px; background-color: rgba(0, 0, 0, 0.8); margin: 20px 0; } .card-back .cvv-container { display: flex; align-items: center; justify-content: flex-end; } .card-back .cvv-label { margin-right: 10px; font-size: 0.8rem; color: var(--text-dark); } .card-back .cvv-box { background-color: rgba(255, 255, 255, 0.9); color: var(--primary); padding: 5px 10px; border-radius: 4px; font-family: monospace; font-weight: bold; } .flip-container.flipped .card-flipper { transform: rotateY(180deg); } /* Toggle Switch */ .toggle-container { display: flex; align-items: center; margin-top: 20px; } .toggle-label { margin-right: 10px; font-size: 0.9rem; color: var(--text-dark); } .toggle-switch { position: relative; display: inline-block; width: 50px; height: 24px; border-radius: 12px; } .toggle-switch input { opacity: 0; width: 0; height: 0; } .toggle-slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(255,255,255,0.1); transition: .4s; border-radius: 24px; } .toggle-slider:before { position: absolute; content: ""; height: 18px; width: 18px; left: 3px; bottom: 3px; background-color: white; transition: .4s; border-radius: 50%; } input:checked + .toggle-slider { background-color: var(--accent); } input:checked + .toggle-slider:before { transform: translateX(26px); } /* Card Balance */ .card-balance { background-color: rgba(255, 255, 255, 0.1); border-radius: 8px; padding: 15px; margin-top: 15px; } .balance-title { font-size: 0.8rem; color: var(--text-dark); margin-bottom: 5px; } .balance-amount { font-size: 1.5rem; font-weight: 600; } .balance-details { display: flex; justify-content: space-between; margin-top: 10px; font-size: 0.85rem; } .limit-info, .available-info { display: flex; flex-direction: column; } .credit-limit, .available-credit { color: var(--text-dark); font-size: 0.75rem; } .limit-value, .available-value { font-weight: 500; } .limit-progress { width: 100%; height: 5px; background-color: rgba(255, 255, 255, 0.1); border-radius: 3px; margin-top: 8px; position: relative; overflow: hidden; } .progress-bar { position: absolute; height: 100%; background-color: var(--accent); border-radius: 3px; transition: width 1s ease-in-out; } /* Notification Badge */ .notification-badge { position: absolute; top: -5px; right: -5px; width: 16px; height: 16px; background-color: var(--danger); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.7rem; font-weight: bold; } /* Recent Transactions */ .recent-transactions { margin-top: 15px; } .transaction-title { font-size: 0.9rem; margin-bottom: 10px; color: var(--text); } .transaction-list { list-style: none; } .transaction-item { display: flex; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid rgba(255, 255, 255, 0.05); } .transaction-item:last-child { border-bottom: none; } .transaction-info { display: flex; } .transaction-icon { width: 32px; height: 32px; border-radius: 8px; background-color: rgba(255, 255, 255, 0.1); display: flex; align-items: center; justify-content: center; margin-right: 10px; } .transaction-details { display: flex; flex-direction: column; } .transaction-merchant { font-size: 0.85rem; font-weight: 500; } .transaction-date { font-size: 0.75rem; color: var(--text-dark); } .transaction-amount { font-weight: 500; } .amount-debit { color: var(--danger); } .amount-credit { color: var(--success); } </style> </head> <body> <div class="container"> <header> <div class="logo"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M4 8H20M8 12H9M15 12H16M6 16H18C19.1046 16 20 15.1046 20 14V8C20 6.89543 19.1046 6 18 6H6C4.89543 6 4 6.89543 4 8V14C4 15.1046 4.89543 16 6 16Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> WaveBank </div> <div class="user-profile"> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M20 21V19C20 17.9391 19.5786 16.9217 18.8284 16.1716C18.0783 15.4214 17.0609 15 16 15H8C6.93913 15 5.92172 15.4214 5.17157 16.1716C4.42143 16.9217 4 17.9391 4 19V21" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 11C14.2091 11 16 9.20914 16 7C16 4.79086 14.2091 3 12 3C9.79086 3 8 4.79086 8 7C8 9.20914 9.79086 11 12 11Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> <div class="notification-badge">2</div> </div> </header> <div class="section-title"> Your Cards <button class="add-card-btn"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 5V19M5 12H19" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> Add Card </button> </div> <div class="cards-container"> <div class="credit-card platinum active-card" id="card1"> <div class="card-shine"></div> <div class="card-top"> <div class="card-chip"> <svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect x="5" y="10" width="30" height="20" rx="2" fill="#E2E2E2" fill-opacity="0.2"/> <rect x="8" y="13" width="24" height="14" rx="1" stroke="#E2E2E2" stroke-opacity="0.4" stroke-width="1"/> <rect x="10" y="15" width="20" height="10" rx="1" stroke="#E2E2E2" stroke-opacity="0.4" stroke-width="1"/> </svg> </div> <div class="card-type"> <span class="card-type-icon"> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M2 9H22V20C22 20.5304 21.7893 21.0391 21.4142 21.4142C21.0391 21.7893 20.5304 22 20 22H4C3.46957 22 2.96086 21.7893 2.58579 21.4142C2.21071 21.0391 2 20.5304 2 20V9Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M22 9H2L4.8 2.9C4.93191 2.63733 5.14746 2.42136 5.41503 2.28235C5.6826 2.14334 5.9866 2.08872 6.29 2.13L19.71 2.88C20.0134 2.83872 20.3174 2.89334 20.585 3.03235C20.8525 3.17136 21.0681 3.38733 21.2 3.65L22 9Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </span> Platinum Rewards </div> </div> <div class="card-number">4256 •••• •••• 7890</div> <div class="card-info"> <div class="card-holder"> <span class="label">Card Holder</span> <span class="value">Alex Johnson</span> </div> <div class="expiry"> <span class="label">Expires</span> <span class="value">09/26</span> </div> </div> <div class="card-indicators"> <div class="indicator active"></div> <div class="indicator"></div> <div class="indicator"></div> </div> </div> <div class="card-details" id="cardDetails1"> <div class="details-content"> <div class="tabs"> <div class="tab active" data-tab="rewards">Rewards</div> <div class="tab" data-tab="fees">Fees</div> <div class="tab" data-tab="security">Security</div> </div> <div class="tab-content active" id="rewards"> <ul class="rewards-list"> <li> <div class="reward-icon"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2L14.8 8.1L22 9.3L17 13.8L18.5 21L12 17.6L5.5 21L7 13.8L2 9.3L9.2 8.1L12 2Z" fill="currentColor"/> </svg> </div> <div class="item-details"> <div class="item-title">5% Travel Cashback</div> <div class="item-description">Earn 5% back on flights, hotels, and rental cars. No foreign transaction fees.</div> </div> </li> <li> <div class="reward-icon"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 6C12.5523 6 13 5.55228 13 5C13 4.44772 12.5523 4 12 4C11.4477 4 11 4.44772 11 5C11 5.55228 11.4477 6 12 6Z" fill="currentColor"/> <path d="M12 20C12.5523 20 13 19.5523 13 19C13 18.4477 12.5523 18 12 18C11.4477 18 11 18.4477 11 19C11 19.5523 11.4477 20 12 20Z" fill="currentColor"/> <path d="M12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12C11 12.5523 11.4477 13 12 13Z" fill="currentColor"/> </svg> </div> <div class="item-details"> <div class="item-title">Priority Lounge Access</div> <div class="item-description">Complimentary access to 1,300+ airport lounges worldwide.</div> </div> </li> <li> <div class="reward-icon"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M15 9H9V17H15V9Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M9 13H15" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="item-details"> <div class="item-title">60,000 Bonus Points</div> <div class="item-description">Spend $3,000 in the first 3 months to earn 60,000 bonus points.</div> </div> </li> </ul> </div> <div class="tab-content" id="fees"> <ul class="fees-list"> <li> <div class="fee-icon"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M15 8H12C10.8954 8 10 8.89543 10 10C10 11.1046 10.8954 12 12 12H14C15.1046 12 16 12.8954 16 14C16 15.1046 15.1046 16 14 16H10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 6V8" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 16V18" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="item-details"> <div class="item-title">Annual Fee</div> <div class="item-description">$95, waived for the first year.</div> </div> </li> <li> <div class="fee-icon"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M22 12C22 6.5 17.5 2 12 2C6.5 2 2 6.5 2 12C2 17.5 6.5 22 12 22C17.5 22 22 17.5 22 12Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M15 9L9 15" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M9 9L15 15" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="item-details"> <div class="item-title">Foreign Transaction Fee</div> <div class="item-description">None - save money when traveling internationally.</div> </div> </li> <li> <div class="fee-icon"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M23 5L12 16L8 12" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M2 13L8 19L10 17" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="item-details"> <div class="item-title">APR</div> <div class="item-description">16.99% - 24.99% variable APR based on credit worthiness.</div> </div> </li> </ul> </div> <div class="tab-content" id="security"> <ul class="security-list"> <li> <div class="security-icon"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 22C12 22 20 18 20 12V5L12 2L4 5V12C4 18 12 22 12 22Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M9 12L11 14L15 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="item-details"> <div class="item-title">Fraud Protection</div> <div class="item-description">$0 liability guarantee for unauthorized purchases.</div> </div> </li> <li> <div class="security-icon"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M16 8L18 6M8 16L6 18M13 17C13.4474 17 13.8948 16.9055 14.3078 16.7203C14.7208 16.5352 15.0909 16.2631 15.3995 15.9201C15.708 15.577 15.9476 15.1694 16.1033 14.7259C16.259 14.2824 16.3276 13.8122 16.3051 13.342C16.2826 12.8717 16.1695 12.4107 15.9731 11.9844C15.7767 11.5581 15.5009 11.1747 15.1626 10.8576C14.8244 10.5404 14.4308 10.2955 14.0022 10.1361C13.5735 9.97666 13.1189 9.90588 12.6642 9.92703C12.2094 9.94818 11.7643 10.0607 11.3531 10.2591C10.9419 10.4575 10.573 10.7382 10.2696 11.0818C9.96621 11.4253 9.73468 11.8247 9.58778 12.2593C9.44087 12.694 9.38165 13.1539 9.414 13.614C9.44635 14.0742 9.56942 14.5221 9.77491 14.9315C9.9804 15.341 10.2645 15.7035 10.612 16M12 5V3M12 21V19M5 12H3M21 12H19" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="item-details"> <div class="item-title">Real-time Alerts</div> <div class="item-description">Instant notifications for purchases above $100.</div> </div> </li> <li> <div class="security-icon"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M4 19.5C4 18.837 4.26339 18.2011 4.73223 17.7322
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> :root { --primary: #6C5CE7; --secondary: #FD79A8; --accent: #00D2D3; --dark: #2D3436; --light: #FDFDFD; --success: #00B894; --warning: #FDCB6E; --error: #D63031; --card-width: 340px; --card-height: 200px; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } body { width: 100%; height: 100vh; display: flex; justify-content: center; align-items: center; background-color: #f9f9f9; overflow-x: hidden; padding: 20px; } .dashboard { width: 100%; max-width: 700px; height: 100%; max-height: 700px; background: var(--light); border-radius: 24px; box-shadow: 0 12px 32px rgba(0, 0, 0, 0.1); padding: 24px; display: flex; flex-direction: column; overflow: hidden; } .dashboard-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 24px; } .dashboard-title { font-size: 24px; font-weight: 700; color: var(--dark); } .user-profile { display: flex; align-items: center; gap: 12px; } .user-avatar { width: 40px; height: 40px; border-radius: 50%; background: var(--primary); display: flex; justify-content: center; align-items: center; color: white; font-weight: 700; font-size: 16px; } .user-name { font-weight: 600; font-size: 16px; color: var(--dark); } .card-section { margin-bottom: 24px; } .section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } .section-title { font-size: 18px; font-weight: 600; color: var(--dark); } .add-card-btn { background: var(--primary); color: white; border: none; border-radius: 8px; padding: 8px 16px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; } .add-card-btn:hover { background: #5d4edf; transform: translateY(-2px); } .card-container { perspective: 1000px; position: relative; width: var(--card-width); height: var(--card-height); margin: 0 auto; 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: 16px; box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); } .card.flipped { transform: rotateY(180deg); } .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: 16px; overflow: hidden; padding: 20px; } .card-front { background: linear-gradient(45deg, var(--primary), var(--secondary)); color: var(--light); display: flex; flex-direction: column; justify-content: space-between; } .card-back { background: linear-gradient(45deg, var(--secondary), var(--primary)); color: var(--light); transform: rotateY(180deg); display: flex; flex-direction: column; justify-content: space-between; } .card-chip { width: 50px; height: 40px; background: rgba(255, 255, 255, 0.2); border-radius: 8px; margin-bottom: 20px; position: relative; overflow: hidden; } .card-chip::before { content: ""; position: absolute; width: 100%; height: 50%; background: rgba(255, 255, 255, 0.1); top: 0; left: 0; } .card-chip::after { content: ""; position: absolute; width: 30%; height: 100%; background: rgba(255, 255, 255, 0.1); top: 0; left: 35%; } .card-number { font-size: 18px; letter-spacing: 2px; font-weight: 600; margin-bottom: 20px; } .card-details { display: flex; justify-content: space-between; align-items: flex-end; } .card-holder, .card-expires { display: flex; flex-direction: column; } .detail-label { font-size: 10px; text-transform: uppercase; opacity: 0.8; margin-bottom: 4px; } .detail-value { font-size: 14px; font-weight: 600; } .card-type { font-size: 20px; font-weight: 700; text-transform: uppercase; } .card-back .magnetic-strip { width: 100%; height: 40px; background: rgba(0, 0, 0, 0.8); margin: 20px 0; } .card-back .signature { background: rgba(255, 255, 255, 0.2); height: 40px; width: 80%; display: flex; align-items: center; padding: 0 10px; margin-bottom: 20px; } .card-back .signature .signature-text { font-family: 'Dancing Script', cursive; font-size: 20px; opacity: 0.9; } .card-back .cvv { display: flex; flex-direction: column; align-items: flex-end; } .tooltip { position: relative; display: inline-block; } .tooltip .tooltip-text { visibility: hidden; width: 200px; background-color: var(--dark); color: var(--light); text-align: center; border-radius: 6px; padding: 10px; position: absolute; z-index: 1; bottom: 125%; left: 50%; transform: translateX(-50%); opacity: 0; transition: opacity 0.3s, transform 0.3s; font-size: 12px; line-height: 1.4; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); transform-origin: bottom center; } .tooltip:hover .tooltip-text { visibility: visible; opacity: 1; transform: translateX(-50%) translateY(-10px); } .tooltip .tooltip-text::after { content: ""; position: absolute; top: 100%; left: 50%; margin-left: -5px; border-width: 5px; border-style: solid; border-color: var(--dark) transparent transparent transparent; } .stats-section { flex: 1; display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; overflow-y: auto; } .stat-card { background: white; border-radius: 16px; padding: 16px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); display: flex; flex-direction: column; transition: all 0.3s ease; cursor: pointer; } .stat-card:hover { transform: translateY(-5px); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1); } .stat-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .stat-title { font-size: 14px; font-weight: 600; color: var(--dark); } .stat-icon { width: 32px; height: 32px; border-radius: 8px; display: flex; justify-content: center; align-items: center; color: white; } .spending-icon { background: var(--primary); } .savings-icon { background: var(--success); } .limits-icon { background: var(--warning); } .transactions-icon { background: var(--secondary); } .stat-value { font-size: 24px; font-weight: 700; color: var(--dark); margin-bottom: 8px; } .stat-subtitle { font-size: 12px; color: #666; } .stat-trend { display: flex; align-items: center; font-size: 12px; margin-top: auto; } .trend-up { color: var(--success); } .trend-down { color: var(--error); } .trend-icon { margin-right: 4px; } .transactions-list { max-height: 150px; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; } .transaction-item { display: flex; justify-content: space-between; align-items: center; font-size: 12px; } .transaction-merchant { font-weight: 600; } .transaction-amount { font-weight: 600; } .transaction-date { font-size: 10px; color: #666; } @media (max-width: 600px) { .dashboard { padding: 16px; } .stats-section { grid-template-columns: 1fr; } .card-container { --card-width: 280px; --card-height: 160px; } .card-number { font-size: 14px; } .detail-value { font-size: 12px; } } /* Animations */ @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } .pulse { animation: pulse 2s infinite; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 10px; } ::-webkit-scrollbar-thumb { background: var(--primary); border-radius: 10px; } ::-webkit-scrollbar-thumb:hover { background: #555; } </style> </head> <body> <div class="dashboard"> <div class="dashboard-header"> <h1 class="dashboard-title">Card Management</h1> <div class="user-profile"> <span class="user-name">Alex Morgan</span> <div class="user-avatar">AM</div> </div> </div> <div class="card-section"> <div class="section-header"> <h2 class="section-title">Your Payment Card</h2> <button class="add-card-btn">+ Add New</button> </div> <div class="card-container"> <div class="card"> <div class="card-face card-front"> <div> <div class="card-chip"></div> <div class="card-number tooltip"> •••• •••• •••• 4587 <span class="tooltip-text">Masked for security. Click to view full card details.</span> </div> </div> <div class="card-details"> <div class="card-holder"> <span class="detail-label">Card Holder</span> <span class="detail-value">Alex Morgan</span> </div> <div class="card-expires"> <span class="detail-label">Expires</span> <span class="detail-value">12/24</span> </div> <div class="card-type">Visa</div> </div> </div> <div class="card-face card-back"> <div class="magnetic-strip"></div> <div class="signature"> <span class="signature-text">Alex Morgan</span> </div> <div class="cvv tooltip"> <span class="detail-label">CVV</span> <span class="detail-value">•••</span> <span class="tooltip-text">Your 3-digit security code on the back of your card. Used for online purchases.</span> </div> </div> </div> </div> </div> <div class="stats-section"> <div class="stat-card tooltip"> <div class="stat-header"> <span class="stat-title">Monthly Spending</span> <div class="stat-icon spending-icon">$</div> </div> <div class="stat-value">$1,847.32</div> <div class="stat-subtitle">Out of $3,000 monthly limit</div> <div class="stat-trend trend-up"> <span class="trend-icon">↑</span> 12% from last month </div> <span class="tooltip-text">Your card spending is on track. You've used 61% of your monthly limit with 9 days remaining.</span> </div> <div class="stat-card tooltip"> <div class="stat-header"> <span class="stat-title">Savings</span> <div class="stat-icon savings-icon">%</div> </div> <div class="stat-value">$348.59</div> <div class="stat-subtitle">Cashback & Rewards</div> <div class="stat-trend trend-up"> <span class="trend-icon">↑</span> 8% from last month </div> <span class="tooltip-text">You've earned 2% cashback on dining and 1.5% on all other purchases. Rewards are automatically applied to your statement.</span> </div> <div class="stat-card tooltip"> <div class="stat-header"> <span class="stat-title">Spending Limits</span> <div class="stat-icon limits-icon">!</div> </div> <div class="stat-value">$3,000</div> <div class="stat-subtitle">61% utilized</div> <div class="stat-trend"> <span class="trend-icon">↔</span> No change from previous limit </div> <span class="tooltip-text">Your current credit limit is $3,000. Based on your payment history, you may be eligible for an increase next month.</span> </div> <div class="stat-card"> <div class="stat-header"> <span class="stat-title">Recent Transactions</span> <div class="stat-icon transactions-icon">H</div> </div> <div class="transactions-list"> <div class="transaction-item tooltip"> <div> <div class="transaction-merchant">Spotify Premium</div> <div class="transaction-date">Today, 9:45 AM</div> </div> <div class="transaction-amount">$9.99</div> <span class="tooltip-text">Monthly subscription payment to Spotify Premium. Recurring on the 15th of each month.</span> </div> <div class="transaction-item tooltip"> <div> <div class="transaction-merchant">Urban Outfitters</div> <div class="transaction-date">Yesterday, 2:30 PM</div> </div> <div class="transaction-amount">$87.45</div> <span class="tooltip-text">In-store purchase at Urban Outfitters on Market Street. Earned 1.5% cashback ($1.31).</span> </div> <div class="transaction-item tooltip"> <div> <div class="transaction-merchant">Whole Foods Market</div> <div class="transaction-date">Jun 14, 6:12 PM</div> </div> <div class="transaction-amount">$64.23</div> <span class="tooltip-text">Grocery shopping at Whole Foods. Earned 1.5% cashback ($0.96).</span> </div> <div class="transaction-item tooltip"> <div> <div class="transaction-merchant">Uber Ride</div> <div class="transaction-date">Jun 13, 8:37 PM</div> </div> <div class="transaction-amount">$22.50</div> <span class="tooltip-text">Ride from Downtown to Mission District. Earned 1.5% cashback ($0.34).</span> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', () => { const card = document.querySelector('.card'); let isFlipping = false; card.addEventListener('click', () => { if (!isFlipping) { isFlipping = true; card.classList.toggle('flipped'); setTimeout(() => { isFlipping = false; }, 800); // Match the CSS transition duration } }); // Pulse animation for the add card button const addCardBtn = document.querySelector('.add-card-btn'); addCardBtn.addEventListener('mouseenter', () => { addCardBtn.classList.add('pulse'); }); addCardBtn.addEventListener('mouseleave', () => { addCardBtn.classList.remove('pulse'); }); // Prevent form submission const formElements = document.querySelectorAll('button, input, a'); formElements.forEach(element => { element.addEventListener('click', (e) => { if (element.tagName === 'A' || element.type === 'submit') { e.preventDefault(); } }); }); // Simulate data loading with a subtle animation const statValues = document.querySelectorAll('.stat-value'); statValues.forEach(value => { const finalValue = value.textContent; value.textContent = "Loading..."; setTimeout(() => { value.textContent = finalValue; value.style.transition = "color 0.5s ease"; value.style.color = "#6C5CE7"; setTimeout(() => { value.style.color = ""; }, 500); }, 500); }); // Make transactions interactive const transactionItems = document.querySelectorAll('.transaction-item'); transactionItems.forEach(item => { item.addEventListener('click', () => { // Add a subtle highlight effect item.style.backgroundColor = "rgba(108, 92, 231, 0.1)"; setTimeout(() => { item.style.backgroundColor = ""; }, 500); }); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Personal Finance Web Portal</title> <style> :root { --primary-color: #4a6cff; --secondary-color: #6c63ff; --tertiary-color: #5e37ff; --light-color: #f7f9ff; --dark-color: #252a41; --success-color: #25c596; --warning-color: #ff9254; --danger-color: #ff5b5b; --font-primary: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: var(--font-primary); background: linear-gradient(135deg, #f4f8ff 0%, #e7ecfd 100%); color: var(--dark-color); width: 100%; height: 100vh; display: flex; align-items: center; justify-content: center; overflow-x: hidden; } .credit-overview { width: 100%; max-width: 680px; min-height: 680px; background: rgba(255, 255, 255, 0.85); backdrop-filter: blur(10px); border-radius: 24px; padding: 2rem; box-shadow: 0 10px 40px rgba(65, 84, 180, 0.12); transition: all 0.3s ease; overflow: hidden; } .header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; } .header h1 { font-size: 1.6rem; font-weight: 700; color: var(--dark-color); } .header .date { font-size: 0.9rem; color: #7c83a1; font-weight: 500; } .credit-cards { display: grid; grid-template-columns: repeat(12, 1fr); gap: 1.2rem; margin-bottom: 2rem; } .credit-card { grid-column: span 6; position: relative; height: 190px; border-radius: 20px; padding: 1.5rem; overflow: hidden; cursor: pointer; transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); box-shadow: 0 4px 12px rgba(65, 84, 180, 0.08); } .credit-card.primary { background: linear-gradient(135deg, var(--primary-color) 0%, var(--secondary-color) 100%); color: white; } .credit-card.secondary { background: linear-gradient(135deg, var(--dark-color) 0%, #404973 100%); color: white; } .credit-card:hover { transform: translateY(-5px); box-shadow: 0 10px 20px rgba(65, 84, 180, 0.15); } .credit-card .card-details { position: relative; z-index: 2; } .credit-card .card-type { font-size: 0.8rem; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 0.5rem; opacity: 0.8; } .credit-card .card-number { font-size: 1.1rem; letter-spacing: 2px; margin-bottom: 1.5rem; font-weight: 600; } .credit-card .card-info { display: flex; justify-content: space-between; font-size: 0.85rem; } .credit-card .card-info span { display: block; margin-top: 0.3rem; font-weight: 600; font-size: 0.95rem; } .credit-card .card-chip { position: absolute; top: 0.8rem; right: 1.2rem; width: 40px; height: 30px; background: rgba(255, 255, 255, 0.2); border-radius: 5px; } .credit-card .card-pattern { position: absolute; bottom: 0; right: 0; width: 150px; height: 150px; background: radial-gradient(circle, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 70%); transform: translate(30%, 30%); z-index: 1; } .spending-overview { background: rgba(255, 255, 255, 0.6); border-radius: 20px; padding: 1.5rem; margin-bottom: 1.5rem; box-shadow: 0 4px 12px rgba(65, 84, 180, 0.05); } .spending-overview h2 { font-size: 1.15rem; margin-bottom: 1.2rem; color: var(--dark-color); } .chart-container { position: relative; height: 180px; margin: 0 auto; } .spending-legend { display: flex; justify-content: center; gap: 1.5rem; margin-top: 1rem; } .legend-item { display: flex; align-items: center; font-size: 0.85rem; color: #7c83a1; } .legend-item .color { width: 12px; height: 12px; border-radius: 50%; margin-right: 0.5rem; } .recent-transactions { background: rgba(255, 255, 255, 0.6); border-radius: 20px; padding: 1.5rem; box-shadow: 0 4px 12px rgba(65, 84, 180, 0.05); } .recent-transactions h2 { font-size: 1.15rem; margin-bottom: 1rem; display: flex; justify-content: space-between; align-items: center; } .recent-transactions h2 a { font-size: 0.85rem; color: var(--primary-color); text-decoration: none; font-weight: 500; transition: color 0.2s; } .recent-transactions h2 a:hover { color: var(--tertiary-color); } .transaction { display: flex; align-items: center; padding: 0.8rem 0; border-bottom: 1px solid rgba(124, 131, 161, 0.1); transition: all 0.2s; } .transaction:last-child { border-bottom: none; } .transaction:hover { background: rgba(255, 255, 255, 0.7); transform: translateX(4px); } .transaction-icon { width: 36px; height: 36px; border-radius: 50%; background: var(--light-color); display: flex; align-items: center; justify-content: center; margin-right: 1rem; flex-shrink: 0; } .transaction-details { flex-grow: 1; } .transaction-title { font-weight: 600; font-size: 0.95rem; margin-bottom: 0.2rem; } .transaction-date { font-size: 0.8rem; color: #7c83a1; } .transaction-amount { font-weight: 600; font-size: 0.95rem; } .amount-debit { color: var(--danger-color); } .amount-credit { color: var(--success-color); } .tooltip { position: absolute; background: rgba(255, 255, 255, 0.95); padding: 0.6rem 1rem; border-radius: 8px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); font-size: 0.85rem; pointer-events: none; opacity: 0; transform: translateY(10px); transition: all 0.2s ease; z-index: 100; } .tooltip.visible { opacity: 1; transform: translateY(0); } @media screen and (max-width: 768px) { .credit-cards { grid-template-columns: 1fr; gap: 1rem; } .credit-card { grid-column: span 12; height: 165px; } .credit-overview { padding: 1.5rem; border-radius: 20px; } } /* Animations */ @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(74, 108, 255, 0.4); } 70% { box-shadow: 0 0 0 10px rgba(74, 108, 255, 0); } 100% { box-shadow: 0 0 0 0 rgba(74, 108, 255, 0); } } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } } .floating { animation: float 6s ease-in-out infinite; } .pulse { animation: pulse 2s infinite; } /* Curved Path for Chart */ .chart-path { fill: none; stroke-width: 3; stroke-linecap: round; transition: all 0.3s ease; } .chart-path-primary { stroke: var(--primary-color); } .chart-path-secondary { stroke: var(--warning-color); } .chart-area { fill-opacity: 0.1; transition: all 0.3s ease; } .chart-area-primary { fill: var(--primary-color); } .chart-area-secondary { fill: var(--warning-color); } .chart-dot { fill: white; stroke-width: 2; transition: all 0.3s ease; cursor: pointer; } .chart-dot-primary { stroke: var(--primary-color); } .chart-dot-secondary { stroke: var(--warning-color); } .chart-dot:hover { r: 6; } .chart-axis { stroke: rgba(124, 131, 161, 0.2); stroke-width: 1; stroke-dasharray: 5, 5; } .chart-label { font-size: 0.7rem; fill: #7c83a1; text-anchor: middle; } </style> </head> <body> <div class="credit-overview"> <div class="header"> <h1>Credit Cards Overview</h1> <span class="date" id="current-date">June 14, 2024</span> </div> <div class="credit-cards"> <div class="credit-card primary"> <div class="card-chip"></div> <div class="card-pattern"></div> <div class="card-details"> <div class="card-type">Sapphire Reserve</div> <div class="card-number">**** **** **** 5241</div> <div class="card-info"> <div> Current Balance <span>$2,458.32</span> </div> <div> Available Credit <span>$7,541.68</span> </div> </div> </div> </div> <div class="credit-card secondary"> <div class="card-chip"></div> <div class="card-pattern"></div> <div class="card-details"> <div class="card-type">Platinum Rewards</div> <div class="card-number">**** **** **** 9173</div> <div class="card-info"> <div> Current Balance <span>$874.15</span> </div> <div> Available Credit <span>$5,125.85</span> </div> </div> </div> </div> </div> <div class="spending-overview"> <h2>Monthly Spending Trends</h2> <div class="chart-container" id="chart-container"> <svg width="100%" height="100%" id="spending-chart"></svg> </div> <div class="spending-legend"> <div class="legend-item"> <div class="color" style="background-color: var(--primary-color);"></div> <span>Sapphire Reserve</span> </div> <div class="legend-item"> <div class="color" style="background-color: var(--warning-color);"></div> <span>Platinum Rewards</span> </div> </div> </div> <div class="recent-transactions"> <h2> Recent Transactions <a href="#" class="view-all">View All</a> </h2> <div class="transactions-list"> <div class="transaction"> <div class="transaction-icon" style="background-color: rgba(74, 108, 255, 0.1);"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M21 10.8889H3V19.4444C3 19.857 3.16389 20.2527 3.45561 20.5444C3.74733 20.8361 4.143 21 4.55556 21H19.4444C19.857 21 20.2527 20.8361 20.5444 20.5444C20.8361 20.2527 21 19.857 21 19.4444V10.8889Z" stroke="#4A6CFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M3 10.8889L5.66667 3H18.3333L21 10.8889" stroke="#4A6CFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M9.88889 15.6667H14.1111" stroke="#4A6CFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="transaction-details"> <div class="transaction-title">Whole Foods Market</div> <div class="transaction-date">June 12, 2024</div> </div> <div class="transaction-amount amount-debit">-$87.45</div> </div> <div class="transaction"> <div class="transaction-icon" style="background-color: rgba(255, 146, 84, 0.1);"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M21 5.25L12 13.5L7.5 9.75L3 13.5" stroke="#FF9254" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M17.25 5.25H21V9" stroke="#FF9254" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M21 18.75H3V5.25" stroke="#FF9254" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="transaction-details"> <div class="transaction-title">Uber Ride</div> <div class="transaction-date">June 11, 2024</div> </div> <div class="transaction-amount amount-debit">-$32.50</div> </div> <div class="transaction"> <div class="transaction-icon" style="background-color: rgba(37, 197, 150, 0.1);"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 7.5V12L15 13.5" stroke="#25C596" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M21 12C21 13.1819 20.7672 14.3522 20.3149 15.4442C19.8626 16.5361 19.1997 17.5282 18.364 18.364C17.5282 19.1997 16.5361 19.8626 15.4442 20.3149C14.3522 20.7672 13.1819 21 12 21C10.8181 21 9.64778 20.7672 8.55585 20.3149C7.46392 19.8626 6.47177 19.1997 5.63604 18.364C4.80031 17.5282 4.13738 16.5361 3.68508 15.4442C3.23279 14.3522 3 13.1819 3 12C3 9.61305 3.94821 7.32387 5.63604 5.63604C7.32387 3.94821 9.61305 3 12 3C14.3869 3 16.6761 3.94821 18.364 5.63604C20.0518 7.32387 21 9.61305 21 12Z" stroke="#25C596" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="transaction-details"> <div class="transaction-title">Cash Back Reward</div> <div class="transaction-date">June 10, 2024</div> </div> <div class="transaction-amount amount-credit">+$45.82</div> </div> <div class="transaction"> <div class="transaction-icon" style="background-color: rgba(255, 91, 91, 0.1);"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M20.25 6.75H3.75C3.33579 6.75 3 7.08579 3 7.5V19.5C3 19.9142 3.33579 20.25 3.75 20.25H20.25C20.6642 20.25 21 19.9142 21 19.5V7.5C21 7.08579 20.6642 6.75 20.25 6.75Z" stroke="#FF5B5B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M16.5 6.75V5.25C16.5 4.85218 16.342 4.47064 16.0607 4.18934C15.7794 3.90804 15.3978 3.75 15 3.75H9C8.60218 3.75 8.22064 3.90804 7.93934 4.18934C7.65804 4.47064 7.5 4.85218 7.5 5.25V6.75" stroke="#FF5B5B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 15.75C14.0711 15.75 15.75 14.0711 15.75 12C15.75 9.92893 14.0711 8.25 12 8.25C9.92893 8.25 8.25 9.92893 8.25 12C8.25 14.0711 9.92893 15.75 12 15.75Z" stroke="#FF5B5B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="transaction-details"> <div class="transaction-title">Amazon.com</div> <div class="transaction-date">June 9, 2024</div> </div> <div class="transaction-amount amount-debit">-$129.99</div> </div> </div> </div> </div> <div class="tooltip" id="tooltip"></div> <script> // Set current date const currentDate = new Date(); const options = { year: 'numeric', month: 'long', day: 'numeric' }; document.getElementById('current-date').textContent = currentDate.toLocaleDateString('en-US', options); // Spending chart data const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']; const primaryCardData = [1280, 980, 1450, 890, 1650, 2458]; const secondaryCardData = [760, 850, 620, 940, 780, 874]; // Draw spending chart function drawChart() { const svg = document.getElementById('spending-chart'); const container = document.getElementById('chart-container'); const width = container.clientWidth; const height = container.clientHeight; const padding = 30; svg.setAttribute('width', width); svg.setAttribute('height', height); svg.innerHTML = ''; const maxValue = Math.max(...primaryCardData, ...secondaryCardData) * 1.1; const xStep = (width - padding * 2) / (months.length - 1); const yScale = (height - padding * 2) / maxValue; // Draw horizontal grid lines for (let i = 0; i <= 4; i++) { const y = height - padding - (i * (height - padding * 2) / 4); const line = document.createElementNS('http://www.w3.org/2000/svg', 'line'); line.setAttribute('x1', padding); line.setAttribute('y1', y); line.setAttribute('x2', width - padding); line.setAttribute('y2', y); line.setAttribute('class', 'chart-axis'); svg.appendChild(line); // Add labels const label = document.createElementNS('http://www.w3.org/2000/svg', 'text'); label.setAttribute('x', padding - 10); label.setAttribute('y', y + 4); label.setAttribute('class', 'chart-label'); label.setAttribute('text-anchor', 'end'); label.textContent = '$' + Math.round(maxValue * i / 4); svg.appendChild(label); } // Draw month labels months.forEach((month, i) => { const x = padding + i * xStep; const label = document.createElementNS('http://www.w3.org/2000/svg', 'text'); label.setAttribute('x', x); label.setAttribute('y', height - 10); label.setAttribute('class', 'chart-label'); label.textContent = month; svg.appendChild(label); }); // Primary card path let primaryPath = `M${padding},${height - padding - primaryCardData[0] * yScale}`; let primaryArea = primaryPath; for (let i = 1; i < months.length; i++) { const x = padding + i * xStep; const y = height - padding - primaryCardData[i] * yScale; primaryPath += ` L${x},${y}`; primaryArea += ` L${x},${y}`; } primaryArea += ` L${padding + (months.length - 1) * xStep},${height - padding} L${padding},${height - padding} Z`; // Create primary path const pathPrimary = document.createElementNS('http://www.w3.org/2000/svg', 'path'); pathPrimary.setAttribute('d', primaryPath); pathPrimary.setAttribute('class', 'chart-path chart-path-primary'); svg.appendChild(pathPrimary); // Create primary area const areaPrimary = document.createElementNS('http://www.w3.org/2000/svg', 'path'); areaPrimary.setAttribute('d', primaryArea); areaPrimary.setAttribute('class', 'chart-area chart-area-primary'); svg.appendChild(areaPrimary); // Secondary card path let secondaryPath = `M${padding},${height - padding - secondaryCardData[0] * yScale}`; let secondaryArea = secondaryPath; for (let i = 1; i < months.length; i++) { const x = padding + i * xStep; const y = height - padding - secondaryCardData[i] * yScale; secondaryPath += ` L${x},${y}`; secondaryArea += ` L${x},${y}`; } secondaryArea += ` L${padding + (months.length - 1) * xStep},${height - padding} L${padding},${height - padding} Z`; // Create secondary path const pathSecondary = document.createElementNS('http://www.w3.org/2000/svg', 'path'); pathSecondary.setAttribute('d', secondaryPath); pathSecondary.setAttribute('class', 'chart-path chart-path-secondary'); svg.appendChild(pathSecondary); // Create secondary area const areaSecondary = document.createElementNS('http://www.w3.org/2000/svg', 'path'); areaSecondary.setAttribute('d', secondaryArea); areaSecondary.setAttribute('class', 'chart-area chart-area-secondary'); svg.appendChild(areaSecondary); // Create data points with tooltips for (let i = 0; i < months.length; i++) { const x = padding + i * xStep; const y1 = height - padding - primaryCardData[i] * yScale; const y2 = height - padding - secondaryCardData[i] * yScale; // Primary card points const circlePrimary = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); circlePrimary.setAttribute('cx', x); circlePrimary.setAttribute('cy', y1); circlePrimary.setAttribute('r', 4); circlePrimary.setAttribute('class', 'chart-dot chart-dot-primary'); circlePrimary.setAttribute('data-value', primaryCardData[i]); circlePrimary.setAttribute('data-month', months[i]); circlePrimary.setAttribute('data-card', 'Sapphire Reserve'); svg.appendChild(circlePrimary); // Secondary card points const circleSecondary = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); circleSecondary.setAttribute('cx', x); circleSecondary.setAttribute('cy', y2); circleSecondary.setAttribute('r', 4); circleSecondary.setAttribute('class', 'chart-dot chart-dot-secondary'); circleSecondary.setAttribute('data-value', secondaryCardData[i]); circleSecondary.setAttribute('data-month', months[i]); circleSecondary.setAttribute('data-card', 'Platinum Rewards'); svg.appendChild(circleSecondary); } } // Tooltip logic function setupTooltip() { const tooltip = document.getElementById('tooltip'); const dots = document.querySelectorAll('.chart-dot'); dots.forEach(dot => { dot.addEventListener('mouseenter', (e) => { const card = e.target.getAttribute('data-card'); const month = e.target.getAttribute('data-month'); const value = e.target.getAttribute('data-value'); tooltip.innerHTML = `<strong>${card}</strong><br>${month}: $${parseFloat(value).toLocaleString()}`; tooltip.style.left = `${e.pageX - tooltip.offsetWidth / 2}px`; tooltip.style.top = `${e.pageY - tooltip.offsetHeight - 10}px`; tooltip.classList.add('visible'); e.target.setAttribute('r', 6); }); dot.addEventListener('mouseleave', (e) => { tooltip.classList.remove('visible'); e.target.setAttribute('r', 4); }); }); } // Credit card animation function setupCardAnimation() { const cards = document.querySelectorAll('.credit-card'); cards.forEach(card => { card.addEventListener('mouseenter', () => { card.classList.add('pulse'); }); card.addEventListener('mouseleave', () => { card.classList.remove('pulse'); }); }); } // Initialize window.addEventListener('load', () => { drawChart(); setupTooltip(); setupCardAnimation(); }); // Responsive chart window.addEventListener('resize', drawChart); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Éclat Rewards Card</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Times New Roman', serif; } body { display: flex; justify-content: center; align-items: center; min-height: 700px; background: linear-gradient(135deg, #f5f0e6, #e8d9c0); perspective: 1000px; overflow: hidden; } .container { width: 100%; max-width: 700px; height: 100%; max-height: 700px; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 20px; } .card-container { width: 400px; height: 250px; position: relative; transform-style: preserve-3d; transition: transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275); cursor: pointer; margin-bottom: 30px; } .card-container.flipped { transform: rotateY(180deg); } .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: 18px; overflow: hidden; box-shadow: 0 15px 35px rgba(50, 30, 10, 0.2); } .card-front { background: linear-gradient(135deg, #9a6b33, #d4a76a); padding: 25px; display: flex; flex-direction: column; justify-content: space-between; transform-style: preserve-3d; } .card-front::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: url("data:image/svg+xml,%3Csvg width='100' height='100' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z' fill='%23ffffff' fill-opacity='0.05' fill-rule='evenodd'/%3E%3C/svg%3E"), linear-gradient(135deg, #9a6b33, #d4a76a); border-radius: 18px; opacity: 0.8; } .card-back { background: linear-gradient(135deg, #8b5c2a, #c49959); transform: rotateY(180deg); padding: 25px; display: flex; flex-direction: column; } .card-back::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: url("data:image/svg+xml,%3Csvg width='80' height='80' viewBox='0 0 80 80' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.08'%3E%3Cpath d='M50 50c0-5.523 4.477-10 10-10s10 4.477 10 10-4.477 10-10 10c0 5.523-4.477 10-10 10s-10-4.477-10-10 4.477-10 10-10zM10 10c0-5.523 4.477-10 10-10s10 4.477 10 10-4.477 10-10 10c0 5.523-4.477 10-10 10S0 25.523 0 20s4.477-10 10-10zm10 8c4.418 0 8-3.582 8-8s-3.582-8-8-8-8 3.582-8 8 3.582 8 8 8zm40 40c4.418 0 8-3.582 8-8s-3.582-8-8-8-8 3.582-8 8 3.582 8 8 8z' /%3E%3C/g%3E%3C/g%3E%3C/svg%3E"), linear-gradient(135deg, #8b5c2a, #c49959); border-radius: 18px; opacity: 0.9; } .chip { width: 50px; height: 40px; background: linear-gradient(135deg, #d9c089, #e2cb9e); border-radius: 8px; position: relative; z-index: 2; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); margin-bottom: 20px; } .chip::before, .chip::after { content: ''; position: absolute; background: #a17c3d; opacity: 0.5; } .chip::before { width: 80%; height: 2px; top: 25%; left: 10%; } .chip::after { width: 60%; height: 2px; top: 55%; left: 20%; } .brand { display: flex; justify-content: flex-end; align-items: center; } .brand-name { font-size: 28px; font-weight: bold; color: #fff; letter-spacing: 2px; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); position: relative; z-index: 2; } .card-number { font-size: 18px; color: #fff; letter-spacing: 3px; margin: 10px 0; position: relative; z-index: 2; } .card-holder { display: flex; justify-content: space-between; position: relative; z-index: 2; } .holder-name, .expiry { color: #fff; font-size: 14px; } .holder-title, .expiry-title { text-transform: uppercase; font-size: 10px; opacity: 0.7; margin-bottom: 4px; } .rewards-section { height: 100%; display: flex; flex-direction: column; justify-content: space-between; } .rewards-header { color: #fff; font-size: 22px; margin-bottom: 15px; text-align: center; position: relative; z-index: 1; } .points-circle { width: 120px; height: 120px; border-radius: 50%; background: rgba(255, 255, 255, 0.15); backdrop-filter: blur(5px); display: flex; flex-direction: column; align-items: center; justify-content: center; margin: 0 auto; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); border: 1px solid rgba(255, 255, 255, 0.2); position: relative; z-index: 1; } .points-value { font-size: 32px; font-weight: bold; color: #fff; } .points-label { font-size: 16px; color: #fff; opacity: 0.8; } .rewards-benefits { display: flex; justify-content: space-between; margin-top: 20px; position: relative; z-index: 1; } .benefit { text-align: center; color: #fff; width: 30%; } .benefit-value { font-size: 18px; font-weight: bold; } .benefit-label { font-size: 11px; opacity: 0.8; } .flip-instruction { color: rgba(255, 255, 255, 0.7); text-align: center; font-size: 12px; margin-top: 5px; font-style: italic; position: relative; z-index: 1; } .rewards-categories { background: rgba(255, 255, 255, 0.1); border-radius: 12px; padding: 15px; margin-top: 20px; max-height: 350px; overflow-y: auto; } .category { margin-bottom: 20px; padding-bottom: 15px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .category:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: none; } .category-title { display: flex; align-items: center; margin-bottom: 10px; color: #fff; } .category-icon { margin-right: 10px; width: 24px; height: 24px; background: rgba(255, 255, 255, 0.2); border-radius: 50%; display: flex; align-items: center; justify-content: center; } .category-desc { color: rgba(255, 255, 255, 0.8); font-size: 13px; line-height: 1.4; } .shine { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient( 125deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.1) 10%, rgba(255, 255, 255, 0.2) 20%, rgba(255, 255, 255, 0) 30% ); transform: translateX(-100%); animation: shine 5s infinite; z-index: 3; border-radius: 18px; } @keyframes shine { 0% { transform: translateX(-100%); } 20%, 100% { transform: translateX(100%); } } .tap-instruction { font-size: 16px; color: #8b5c2a; margin-bottom: 20px; text-align: center; } @media (max-width: 480px) { .card-container { width: 300px; height: 190px; } .brand-name { font-size: 24px; } .card-number { font-size: 16px; } .points-circle { width: 100px; height: 100px; } .points-value { font-size: 28px; } .rewards-categories { margin-top: 10px; } } </style> </head> <body> <div class="container"> <p class="tap-instruction">Tap the card to view your rewards</p> <div class="card-container"> <div class="card-face card-front"> <div class="shine"></div> <div class="chip"></div> <div class="card-number">6281 9374 2156 8942</div> <div class="card-holder"> <div> <div class="holder-title">Card Holder</div> <div class="holder-name">JONATHAN EDWARDS</div> </div> <div> <div class="expiry-title">Expires</div> <div class="expiry">09/26</div> </div> </div> <div class="brand"> <div class="brand-name">ÉCLAT</div> </div> </div> <div class="card-face card-back"> <div class="rewards-section"> <h2 class="rewards-header">Éclat Rewards</h2> <div class="points-circle"> <div class="points-value">24,875</div> <div class="points-label">points</div> </div> <div class="rewards-benefits"> <div class="benefit"> <div class="benefit-value">3x</div> <div class="benefit-label">Dining</div> </div> <div class="benefit"> <div class="benefit-value">2x</div> <div class="benefit-label">Travel</div> </div> <div class="benefit"> <div class="benefit-value">1.5x</div> <div class="benefit-label">Everything Else</div> </div> </div> <p class="flip-instruction">Tap to return to card front</p> </div> </div> </div> <div class="rewards-categories"> <div class="category"> <div class="category-title"> <div class="category-icon">✈️</div> <strong>Annual Travel Credit</strong> </div> <div class="category-desc"> Receive $250 travel credit annually, applicable to airline fees, hotel stays, and car rentals. Next credit: January 2024. </div> </div> <div class="category"> <div class="category-title"> <div class="category-icon">🍽️</div> <strong>Culinary Collection</strong> </div> <div class="category-desc"> Earn 3x points at fine dining establishments, plus exclusive reservations at partner restaurants. 7,250 points earned this quarter. </div> </div> <div class="category"> <div class="category-title"> <div class="category-icon">🎭</div> <strong>Entertainment Access</strong> </div> <div class="category-desc"> Priority ticket purchasing for concerts, theater, and special events. Redeem 10,000 points for VIP upgrades. </div> </div> <div class="category"> <div class="category-title"> <div class="category-icon">🛍️</div> <strong>Luxury Shopping</strong> </div> <div class="category-desc"> 2x points at select luxury retailers and a complimentary personal shopping experience with 50,000+ annual spend. </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const cardContainer = document.querySelector('.card-container'); cardContainer.addEventListener('click', function() { this.classList.toggle('flipped'); }); // Tilt effect based on mouse position document.addEventListener('mousemove', function(e) { if (cardContainer.classList.contains('flipped')) return; const boundingRect = cardContainer.getBoundingClientRect(); const cardCenterX = boundingRect.left + boundingRect.width / 2; const cardCenterY = boundingRect.top + boundingRect.height / 2; const mouseX = e.clientX; const mouseY = e.clientY; const deltaX = (mouseX - cardCenterX) / (boundingRect.width / 2); const deltaY = (mouseY - cardCenterY) / (boundingRect.height / 2); const tiltX = deltaY * 10; // Tilt the card around the X axis const tiltY = -deltaX * 10; // Tilt the card around the Y axis cardContainer.style.transform = `perspective(1000px) rotateX(${tiltX}deg) rotateY(${tiltY}deg)`; }); // Reset card position when mouse leaves the container document.addEventListener('mouseleave', function() { if (!cardContainer.classList.contains('flipped')) { cardContainer.style.transform = 'perspective(1000px) rotateX(0) rotateY(0)'; } }); // Create shining effect for tap animation cardContainer.addEventListener('touchstart', function() { const shine = document.querySelector('.shine'); shine.style.animation = 'none'; setTimeout(() => { shine.style.animation = 'shine 5s infinite'; }, 10); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>SkyWander Payment Portal</title> <style> :root { --primary: #1a7fa0; --secondary: #01b4bc; --tertiary: #cbe9f0; --accent: #ff7d5c; --text: #333; --light: #ffffff; --shadow: rgba(13, 96, 111, 0.1); } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background: linear-gradient(135deg, #e0f7fa, #b2ebf2); height: 100vh; color: var(--text); overflow-x: hidden; } .payment-container { max-width: 680px; height: 680px; margin: 10px auto; position: relative; overflow-y: auto; overflow-x: hidden; border-radius: 15px; box-shadow: 0 15px 35px var(--shadow); background: var(--light); perspective: 1000px; scrollbar-width: none; } .payment-container::-webkit-scrollbar { display: none; } .parallax-bg { position: absolute; top: 0; left: 0; width: 100%; height: 180%; background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><rect width="100" height="100" fill="%23ffffff"/><path d="M0,50 Q25,30 50,50 T100,50" stroke="%231a7fa0" fill="none" stroke-width="1" opacity="0.2"/><path d="M0,60 Q25,40 50,60 T100,60" stroke="%2301b4bc" fill="none" stroke-width="1.5" opacity="0.15"/><path d="M0,70 Q25,50 50,70 T100,70" stroke="%23cbe9f0" fill="none" stroke-width="2" opacity="0.1"/></svg>') repeat; z-index: 0; transform-style: preserve-3d; pointer-events: none; } .header { padding: 30px 40px 20px; position: relative; z-index: 1; background: linear-gradient(180deg, var(--light) 0%, rgba(255, 255, 255, 0.95) 100%); } .logo { display: flex; align-items: center; margin-bottom: 20px; } .logo svg { width: 40px; height: 40px; margin-right: 12px; } .logo h1 { font-size: 24px; color: var(--primary); font-weight: 600; } .booking-summary { background: linear-gradient(135deg, var(--tertiary), #e6f7fb); border-radius: 12px; padding: 15px; margin-bottom: 20px; position: relative; z-index: 1; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05); } .booking-details { display: flex; justify-content: space-between; align-items: center; } .destination { display: flex; align-items: center; margin-bottom: 10px; } .destination-icon { background: var(--primary); width: 34px; height: 34px; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-right: 12px; color: white; } .destination-text { font-size: 16px; font-weight: 600; } .booking-date { font-size: 14px; color: #666; } .price { font-size: 22px; font-weight: 700; color: var(--primary); } .content { padding: 0 40px 40px; position: relative; z-index: 1; } h2 { margin-bottom: 20px; color: var(--primary); font-size: 20px; font-weight: 600; } .card-container { margin-bottom: 30px; position: relative; transition: transform 0.3s ease; } .card { background: linear-gradient(135deg, var(--primary), var(--secondary)); height: 200px; border-radius: 16px; padding: 25px; box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1); color: white; position: relative; overflow: hidden; transition: all 0.5s ease; transform-style: preserve-3d; } .card::before { content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: linear-gradient(45deg, rgba(255, 255, 255, 0.1), transparent); transform: rotate(45deg); pointer-events: none; } .card-chip { width: 50px; height: 40px; background: linear-gradient(135deg, #FFD700, #FFA500); border-radius: 8px; margin-bottom: 30px; position: relative; overflow: hidden; } .card-chip::after { content: ''; position: absolute; width: 30px; height: 20px; background: rgba(255, 255, 255, 0.2); top: 10px; left: 10px; border-radius: 3px; } .card-number { display: flex; justify-content: space-between; font-size: 18px; letter-spacing: 2px; margin-bottom: 25px; } .card-details { display: flex; justify-content: space-between; } .card-holder, .expiry { display: flex; flex-direction: column; } .label { font-size: 10px; opacity: 0.8; text-transform: uppercase; margin-bottom: 5px; } .value { font-size: 16px; letter-spacing: 1px; } .card-logo { position: absolute; right: 25px; bottom: 25px; width: 60px; height: 40px; opacity: 0.8; } .travel-benefits { position: absolute; width: 100%; height: 100%; top: 0; left: 0; background: rgba(26, 127, 160, 0.95); border-radius: 16px; padding: 25px; transform: translateY(100%); transition: transform 0.5s ease; z-index: 10; } .card-container:hover .travel-benefits { transform: translateY(0); } .benefits-header { font-size: 18px; font-weight: 600; margin-bottom: 15px; display: flex; align-items: center; } .benefits-header svg { margin-right: 10px; } .benefits-list { list-style-type: none; } .benefits-list li { margin-bottom: 10px; display: flex; align-items: center; } .benefits-list li svg { margin-right: 10px; flex-shrink: 0; } .form-group { margin-bottom: 20px; } label { display: block; margin-bottom: 8px; font-weight: 500; color: var(--primary); } input, select { width: 100%; padding: 12px 15px; border: 2px solid var(--tertiary); border-radius: 8px; font-size: 16px; transition: all 0.3s ease; background-color: white; } input:focus, select:focus { border-color: var(--secondary); box-shadow: 0 0 0 3px rgba(1, 180, 188, 0.2); outline: none; } .form-row { display: flex; gap: 15px; } .form-col { flex: 1; } .cvv-info { position: relative; display: inline-block; } .info-icon { display: inline-flex; width: 18px; height: 18px; background: var(--tertiary); border-radius: 50%; align-items: center; justify-content: center; color: var(--primary); font-size: 12px; font-weight: bold; margin-left: 5px; cursor: help; } .cvv-tooltip { position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); width: 200px; background: var(--primary); color: white; padding: 10px; border-radius: 8px; font-size: 12px; opacity: 0; visibility: hidden; transition: all 0.3s ease; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); z-index: 100; } .cvv-info:hover .cvv-tooltip { opacity: 1; visibility: visible; bottom: calc(100% + 10px); } .cvv-tooltip::after { content: ''; position: absolute; top: 100%; left: 50%; transform: translateX(-50%); border-width: 8px; border-style: solid; border-color: var(--primary) transparent transparent transparent; } .insurance-option { background: linear-gradient(135deg, #f8f9fa, #e9ecef); border-radius: 12px; padding: 15px; margin-bottom: 20px; border: 2px solid transparent; cursor: pointer; transition: all 0.3s ease; position: relative; overflow: hidden; } .insurance-option:hover { border-color: var(--secondary); background: linear-gradient(135deg, #e9f8fa, #d0f0f3); } .insurance-option.selected { border-color: var(--secondary); background: linear-gradient(135deg, #d0edf3, #c0e8ed); } .insurance-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .insurance-title { font-weight: 600; color: var(--primary); font-size: 16px; } .insurance-price { font-weight: 600; color: var(--accent); } .insurance-description { font-size: 14px; color: #666; } .insurance-coverage { margin-top: 10px; font-size: 13px; color: var(--primary); display: flex; align-items: center; } .info-dropdown { max-height: 0; overflow: hidden; transition: max-height 0.5s ease; margin-top: 5px; } .insurance-option.selected .info-dropdown { max-height: 200px; } .coverage-list { list-style-type: none; margin-top: 10px; } .coverage-list li { margin-bottom: 5px; font-size: 13px; color: #555; display: flex; align-items: center; } .coverage-list li::before { content: '✓'; color: var(--secondary); margin-right: 5px; font-weight: bold; } .btn { width: 100%; padding: 15px; background: var(--primary); color: white; border: none; border-radius: 8px; font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); position: relative; overflow: hidden; } .btn:hover { background: var(--secondary); transform: translateY(-2px); box-shadow: 0 7px 20px rgba(0, 0, 0, 0.15); } .btn:active { transform: translateY(0); box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1); } .btn::after { content: ''; position: absolute; width: 30px; height: 100%; top: 0; left: -50px; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); transform: skewX(-20deg); animation: shine 3s infinite; } @keyframes shine { 0% { left: -50px; } 20% { left: 150%; } 100% { left: 150%; } } .secure-badge { display: flex; justify-content: center; align-items: center; margin-top: 20px; color: #777; font-size: 14px; } .secure-badge svg { margin-right: 8px; } @media (max-width: 600px) { .payment-container { border-radius: 0; height: 100vh; margin: 0; } .header, .content { padding: 20px; } .form-row { flex-direction: column; gap: 10px; } .card { height: 180px; } .logo h1 { font-size: 20px; } } /* Animation for scroll */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } .animate { animation: fadeInUp 0.6s ease forwards; opacity: 0; } .animate-delay-1 { animation-delay: 0.1s; } .animate-delay-2 { animation-delay: 0.2s; } .animate-delay-3 { animation-delay: 0.3s; } .animate-delay-4 { animation-delay: 0.4s; } .checkbox-wrapper { display: flex; align-items: center; margin-bottom: 20px; } .custom-checkbox { width: 22px; height: 22px; border-radius: 6px; border: 2px solid var(--tertiary); display: inline-flex; align-items: center; justify-content: center; margin-right: 10px; cursor: pointer; transition: all 0.3s ease; flex-shrink: 0; } .custom-checkbox.checked { background: var(--secondary); border-color: var(--secondary); } .custom-checkbox svg { color: white; opacity: 0; transition: opacity 0.3s ease; } .custom-checkbox.checked svg { opacity: 1; } .checkbox-label { color: #555; font-size: 14px; cursor: pointer; } .checkbox-label a { color: var(--primary); text-decoration: none; font-weight: 500; } .checkbox-label a:hover { text-decoration: underline; } /* Ripple effect */ .ripple { position: absolute; border-radius: 50%; background: rgba(255, 255, 255, 0.5); transform: scale(0); animation: ripple 0.6s linear; pointer-events: none; } @keyframes ripple { to { transform: scale(4); opacity: 0; } } </style> </head> <body> <div class="payment-container"> <div class="parallax-bg"></div> <div class="header"> <div class="logo"> <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 2L4 7V17L12 22L20 17V7L12 2Z" stroke="#1a7fa0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M4 7L12 12L20 7" stroke="#1a7fa0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 22V12" stroke="#1a7fa0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M8 5L16 10" stroke="#01b4bc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> <h1>SkyWander</h1> </div> <div class="booking-summary animate"> <div class="booking-details"> <div> <div class="destination"> <div class="destination-icon"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M21 16V7.5C21 6.12 20.37 4.8 19.24 3.88C18.11 2.96 16.6 2.53 15.12 2.7C13.63 2.86 12.26 3.62 11.34 4.8C10.42 5.99 10 7.5 10 9V16M21 16H10M21 16C21.5304 16 22.0391 16.2107 22.4142 16.5858C22.7893 16.9609 23 17.4696 23 18C23 18.5304 22.7893 19.0391 22.4142 19.4142C22.0391 19.7893 21.5304 20 21 20H10M10 16V20M10 20C9.46957 20 8.96086 19.7893 8.58579 19.4142C8.21071 19.0391 8 18.5304 8 18C8 17.4696 8.21071 16.9609 8.58579 16.5858C8.96086 16.2107 9.46957 16 10 16" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M10 9V9.01" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <div class="destination-text">Bali to Tokyo</div> </div> <div class="booking-date">August 25 - September 5, 2023</div> </div> <div class="price">$1,248.00</div> </div> </div> </div> <div class="content"> <h2 class="animate animate-delay-1">Payment Details</h2> <div class="card-container animate animate-delay-2"> <div class="card"> <div class="card-chip"></div> <div class="card-number"> <span>****</span> <span>****</span> <span>****</span> <span>4321</span> </div> <div class="card-details"> <div class="card-holder"> <div class="label">Card Holder</div> <div class="value">JAMIE RODRIGUEZ</div> </div> <div class="expiry"> <div class="label">Expires</div> <div class="value">05/25</div> </div> </div> <div class="card-logo"> <svg viewBox="0 0 48 30" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect width="48" height="30" rx="4" fill="white" fill-opacity="0.1"/> <circle cx="18" cy="15" r="7" fill="#FFD700" fill-opacity="0.8"/> <circle cx="30" cy="15" r="7" fill="#ff7d5c" fill-opacity="0.8"/> <path d="M24 10C22.3431 10 21 11.3431 21 13V17C21 18.6569 22.3431 20 24 20" stroke="white" stroke-width="2"/> </svg> </div> </div> <div class="travel-benefits"> <div class="benefits-header"> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M16 21V5C16 4.46957 15.7893 3.96086 15.4142 3.58579C15.0391 3.21071 14.5304 3 14 3H10C9.46957 3 8.96086 3.21071 8.58579 3.58579C8.21071 3.96086 8 4.46957 8 5V21M4 7H20M4 11H20M12 7V21" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> Exclusive Travel Benefits </div> <ul class="benefits-list"> <li> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M9 11L12 14L22 4M21 12V19C21 19.5304 20.7893 20.0391 20.4142 20.4142C20.0391 20.7893 19.5304 21 19 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V5C3 4.46957 3.21071 3.96086 3.58579 3.58579C3.96086 3.21071 4.46957 3 5 3H16" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> Priority boarding on all flights </li> <li> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M9 11L12 14L22 4M21 12V19C21 19.5304 20.7893 20.0391 20.4142 20.4142C20.0391 20.7893 19.5304 21 19 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V5C3 4.46957 3.21071 3.96086 3.58579 3.58579C3.96086 3.21071 4.46957 3 5 3H16" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> Complimentary airport lounge access </li> <li> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M9 11L12 14L22 4M21 12V19C21 19.5304 20.7893 20.0391 20.4142 20.4142C20.0391 20.7893 19.5304 21 19 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V5C3 4.46957 3.21071 3.96086 3.58579 3.58579C3.96086 3.21071 4.46957 3 5 3H16" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> Free checked bag on all flights </li> <li> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M9 11L12 14L22 4M21 12V19C21 19.5304 20.7893 20.0391 20.4142 20.4142C20.0391 20.7893 19.5304 21 19 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V5C3 4.46957 3.21071 3.96086 3.58579 3.58579C3.96086 3.21071 4.46957 3 5 3H16" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> Earn 3x points on all travel purchases </li> <li> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M9 11L12 14L22 4M21 12V19C21 19.5304 20.7893 20.0391 20.4142 20.4142C20.0391 20.7893 19.5304 21 19 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V5C3 4.46957 3.21071 3.96086 3.58579 3.58579C3.96086 3.21071 4.46957 3 5 3H16" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> Travel concierge service 24/7 </li> </ul> </div> </div> <form id="payment-form" class="animate animate-delay-3"> <div class="form-group"> <label for="card-name">Cardholder Name</label> <input type="text" id="card-name" placeholder="As appears on your card"> </div> <div class="form-group"> <label for="card-number">Card Number</label> <input type="text" id="card-number" placeholder="1234 5678 9012 3456" maxlength="19"> </div> <div class="form-row"> <div class="form-col"> <label for="expiry">Expiration Date</label> <input type="text" id="expiry" placeholder="MM/YY" maxlength="5"> </div> <div class="form-col"> <label for="cvv"> CVV <span class="cvv-info"> <span class="info-icon">?</span> <span class="cvv-tooltip">The CVV is a 3 or 4 digit security code found on the back of your card (or front for American Express)</span> </span> </label> <input type="text" id="cvv" placeholder="123" maxlength="4"> </div> </div> <h2 class="animate animate-delay-4">Travel Protection</h2> <div class="insurance-option animate animate-delay-4" id="insurance-premium"> <div class="insurance-header"> <span class="insurance-title">Premium Protection</span> <span class="insurance-price">$89</span> </div> <div class="insurance-description"> Comprehensive coverage for trip cancellations, medical emergencies, and luggage loss. </div> <div class="insurance-coverage"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="#01b4bc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 16V12" stroke="#01b4bc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 8H12.01" stroke="#01b4bc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> <span style="margin-left: 5px;">View coverage details</span> </div> <div class="info-dropdown"> <ul class="coverage-list"> <li>Trip cancellation coverage up to $10,000</li> <li>Emergency medical coverage up to $50,000</li> <li>Lost luggage reimbursement up to $3,000</li> <li>Trip delay coverage up to $500 per day</li> <li>24/7 emergency assistance hotline</li> </ul> </div> </div> <div class="insurance-option animate animate-delay-4" id="insurance-basic"> <div class="insurance-header"> <span class="insurance-title">Basic Protection</span> <span class="insurance-price">$49</span> </div> <div class="insurance-description"> Essential coverage for trip cancellations and minor emergencies. </div> <div class="insurance-coverage"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="#01b4bc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 16V12" stroke="#01b4bc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 8H12.01" stroke="#01b4bc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> <span style="margin-left: 5px;">View coverage details</span> </div> <div class="info-dropdown"> <ul class="coverage-list"> <li>Trip cancellation coverage up to $5,000</li> <li>Emergency medical coverage up to $25,000</li> <li>Lost luggage reimbursement up to $1,000</li> <li>Trip delay coverage up to $200 per day</li> </ul> </div> </div> <div class="insurance-option animate animate-delay-4" id="insurance-none"> <div class="insurance-header"> <span class="insurance-title">No Protection</span> <span class="insurance-price">$0</span> </div> <div class="insurance-description"> Continue without travel protection coverage. </div> </div> <div class="checkbox-wrapper animate animate-delay-4"> <div class="custom-checkbox" id="terms-checkbox"> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M20 6L9 17L4 12" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/> </svg> </div> <label class="checkbox-label" for="terms-checkbox"> I agree to the <a href="#">Terms & Conditions</a> and <a href="#">Privacy Policy</a> </label> </div> <button type="button" class="btn animate animate-delay-4" id="submit-payment"> Complete Payment </button> <div class="secure-badge animate animate-delay-4"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="#777777" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 16V12" stroke="#777777" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12 8H12.01" stroke="#777777" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> Secured by 256-bit SSL encryption </div> </form> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Format card number with spaces const cardNumberInput = document.getElementById('card-number'); cardNumberInput.addEventListener('input', function(e) { let value = e.target.value.replace(/\s+/g, '').replace(/[^0-9]/gi, ''); let formattedValue = ''; for (let i = 0; i < value.length; i++) { if (i > 0 && i % 4 === 0) { formattedValue += ' '; } formattedValue += value[i]; } e.target.value = formattedValue; }); // Format expiry date with slash const expiryInput =
<html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> :root { --primary: #2A5C8F; --primary-light: #3C73B0; --secondary: #4EADAD; --accent: #FF8C42; --danger: #E64154; --success: #48B264; --gray-100: #F8F9FA; --gray-200: #E9ECEF; --gray-300: #DEE2E6; --gray-400: #CED4DA; --gray-500: #ADB5BD; --gray-600: #6C757D; --gray-700: #495057; --gray-800: #343A40; --gray-900: #212529; --shadow-sm: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); --shadow-md: 0 4px 6px rgba(0,0,0,0.1), 0 1px 3px rgba(0,0,0,0.08); --shadow-lg: 0 10px 25px rgba(0,0,0,0.1), 0 5px 10px rgba(0,0,0,0.05); --radius-sm: 4px; --radius-md: 8px; --radius-lg: 16px; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } body { background-color: #f5f7fa; color: var(--gray-800); font-size: 14px; line-height: 1.5; min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 20px; overflow-x: hidden; } .container { width: 100%; max-width: 700px; height: 700px; display: flex; flex-direction: column; gap: 20px; padding: 20px; background-color: white; border-radius: var(--radius-md); box-shadow: var(--shadow-md); overflow-y: auto; position: relative; } .header { display: flex; justify-content: space-between; align-items: center; padding-bottom: 16px; border-bottom: 1px solid var(--gray-200); } .header h1 { font-size: 20px; font-weight: 600; color: var(--gray-900); } .user-actions { display: flex; align-items: center; gap: 12px; } button { background: none; border: none; cursor: pointer; transition: all 0.2s ease; } .icon-button { display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 50%; background-color: var(--gray-100); color: var(--gray-700); } .icon-button:hover { background-color: var(--gray-200); color: var(--gray-900); } .primary-button { display: flex; align-items: center; gap: 8px; padding: 8px 16px; background-color: var(--primary); color: white; border-radius: var(--radius-sm); font-weight: 500; font-size: 14px; } .primary-button:hover { background-color: var(--primary-light); } .summary-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; margin-bottom: 20px; } .summary-card { background-color: white; border-radius: var(--radius-md); padding: 16px; box-shadow: var(--shadow-sm); border: 1px solid var(--gray-200); transition: all 0.3s ease; cursor: grab; } .summary-card:active { cursor: grabbing; } .summary-card:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); } .card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .card-title { color: var(--gray-700); font-size: 13px; font-weight: 500; } .card-value { font-size: 20px; font-weight: 600; color: var(--gray-900); } .card-trend { display: flex; align-items: center; gap: 4px; font-size: 13px; margin-top: 4px; } .positive { color: var(--success); } .negative { color: var(--danger); } .card-expanded { grid-column: span 2; transition: all 0.3s ease; } .expense-list { display: flex; flex-direction: column; gap: 12px; margin-top: 16px; } .expense-item { display: flex; justify-content: space-between; align-items: center; padding: 12px; border-radius: var(--radius-sm); background-color: var(--gray-100); transition: all 0.2s ease; } .expense-item:hover { background-color: var(--gray-200); } .expense-left { display: flex; align-items: center; gap: 12px; } .expense-icon { width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 16px; color: white; } .expense-details { display: flex; flex-direction: column; } .expense-title { font-weight: 500; color: var(--gray-800); } .expense-date { font-size: 12px; color: var(--gray-600); } .expense-amount { font-weight: 500; } .section-title { font-size: 16px; font-weight: 600; margin-bottom: 12px; color: var(--gray-800); } .category-spending { display: flex; gap: 12px; overflow-x: auto; padding-bottom: 8px; scrollbar-width: thin; scrollbar-color: var(--gray-400) var(--gray-100); } .category-spending::-webkit-scrollbar { height: 6px; } .category-spending::-webkit-scrollbar-thumb { background-color: var(--gray-400); border-radius: 6px; } .category-spending::-webkit-scrollbar-track { background-color: var(--gray-100); } .category-card { min-width: 120px; padding: 14px; background-color: white; border-radius: var(--radius-md); border: 1px solid var(--gray-200); box-shadow: var(--shadow-sm); transition: all 0.2s ease; } .category-card:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); } .category-icon { width: 36px; height: 36px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 18px; color: white; margin-bottom: 10px; } .category-title { font-size: 13px; font-weight: 500; color: var(--gray-700); margin-bottom: 4px; } .category-amount { font-size: 16px; font-weight: 600; color: var(--gray-900); } .credit-utilization { margin-top: 24px; position: relative; height: 80px; } .chart-container { width: 100%; height: 8px; background-color: var(--gray-200); border-radius: 4px; margin-top: 24px; overflow: hidden; position: relative; } .chart-fill { height: 100%; background: linear-gradient(90deg, var(--success), var(--accent), var(--danger)); border-radius: 4px; transition: width 1s ease-in-out; } .chart-marker { position: absolute; width: 12px; height: 12px; border-radius: 50%; background-color: white; border: 2px solid var(--primary); top: -2px; transform: translateX(-50%); z-index: 2; transition: left 1s ease-in-out; } .chart-labels { display: flex; justify-content: space-between; margin-top: 8px; font-size: 12px; color: var(--gray-600); } .draggable-area { background-color: rgba(42, 92, 143, 0.1); border: 2px dashed var(--primary); border-radius: var(--radius-md); display: flex; justify-content: center; align-items: center; height: 100px; color: var(--primary); font-weight: 500; margin-top: 16px; visibility: hidden; opacity: 0; transition: all 0.3s ease; } .draggable-area.active { visibility: visible; opacity: 1; } .card-actions { display: flex; justify-content: flex-end; gap: 4px; } .card-action-btn { padding: 4px; font-size: 12px; color: var(--gray-600); } .card-action-btn:hover { color: var(--primary); } .settings-panel { position: absolute; top: 0; right: -350px; width: 300px; height: 100%; background-color: white; box-shadow: var(--shadow-lg); padding: 20px; transition: all 0.3s ease; z-index: 10; } .settings-panel.open { right: 0; } .settings-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 24px; padding-bottom: 12px; border-bottom: 1px solid var(--gray-200); } .settings-title { font-size: 18px; font-weight: 600; } .settings-close { padding: 8px; font-size: 18px; color: var(--gray-700); } .settings-option { margin-bottom: 16px; } .settings-label { display: block; margin-bottom: 8px; font-weight: 500; color: var(--gray-700); } .settings-select { width: 100%; padding: 10px; border-radius: var(--radius-sm); border: 1px solid var(--gray-300); background-color: white; color: var(--gray-800); appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 10px center; background-size: 16px; } .toggle-switch { position: relative; display: inline-block; width: 44px; height: 24px; } .toggle-switch input { opacity: 0; width: 0; height: 0; } .toggle-slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: var(--gray-300); border-radius: 34px; transition: .4s; } .toggle-slider:before { position: absolute; content: ""; height: 18px; width: 18px; left: 3px; bottom: 3px; background-color: white; border-radius: 50%; transition: .4s; } input:checked + .toggle-slider { background-color: var(--primary); } input:checked + .toggle-slider:before { transform: translateX(20px); } .toggle-option { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .toggle-label { font-weight: 500; color: var(--gray-700); } .settings-footer { display: flex; justify-content: flex-end; margin-top: 24px; } /* Animations */ @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } @keyframes slideUp { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .chart-tooltip { position: absolute; background-color: var(--gray-800); color: white; padding: 8px 12px; border-radius: var(--radius-sm); font-size: 12px; visibility: hidden; opacity: 0; transition: all 0.2s ease; pointer-events: none; white-space: nowrap; z-index: 5; } .chart-tooltip:after { content: ""; position: absolute; bottom: -5px; left: 50%; transform: translateX(-50%); width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 5px solid var(--gray-800); } .animated-card { animation: slideUp 0.5s ease-out forwards; } .highlight-pulse { animation: pulse 0.6s ease-in-out; } @media (max-width: 600px) { .summary-grid { grid-template-columns: 1fr; } .card-expanded { grid-column: span 1; } } </style> </head> <body> <div class="container"> <div class="header"> <h1>Credit Cards Summary</h1> <div class="user-actions"> <button class="icon-button" id="filter-btn" title="Filter view"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polygon points="22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"></polygon> </svg> </button> <button class="icon-button" id="settings-btn" title="Settings"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="3"></circle> <path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path> </svg> </button> <button class="primary-button" id="add-card-btn"> <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"> <rect x="1" y="4" width="22" height="16" rx="2" ry="2"></rect> <line x1="1" y1="10" x2="23" y2="10"></line> </svg> Add Card </button> </div> </div> <div class="summary-grid" id="summary-grid"> <div class="summary-card animated-card" id="card-1" draggable="true" data-card-id="1"> <div class="card-header"> <span class="card-title">Total Balance</span> <div class="card-actions"> <button class="card-action-btn" data-action="expand"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="15 3 21 3 21 9"></polyline> <polyline points="9 21 3 21 3 15"></polyline> <line x1="21" y1="3" x2="14" y2="10"></line> <line x1="3" y1="21" x2="10" y2="14"></line> </svg> </button> </div> </div> <div class="card-value">$23,459.85</div> <div class="card-trend positive"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="23 6 13.5 15.5 8.5 10.5 1 18"></polyline> <polyline points="17 6 23 6 23 12"></polyline> </svg> <span>↑ 12% from last month</span> </div> </div> <div class="summary-card animated-card" id="card-2" draggable="true" data-card-id="2" style="animation-delay: 0.1s;"> <div class="card-header"> <span class="card-title">Available Credit</span> <div class="card-actions"> <button class="card-action-btn" data-action="expand"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="15 3 21 3 21 9"></polyline> <polyline points="9 21 3 21 3 15"></polyline> <line x1="21" y1="3" x2="14" y2="10"></line> <line x1="3" y1="21" x2="10" y2="14"></line> </svg> </button> </div> </div> <div class="card-value">$42,500.00</div> <div class="card-trend negative"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="23 18 13.5 8.5 8.5 13.5 1 6"></polyline> <polyline points="17 18 23 18 23 12"></polyline> </svg> <span>↓ 8% from last month</span> </div> </div> <div class="summary-card animated-card" id="card-3" draggable="true" data-card-id="3" style="animation-delay: 0.2s;"> <div class="card-header"> <span class="card-title">Monthly Spending</span> <div class="card-actions"> <button class="card-action-btn" data-action="expand"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="15 3 21 3 21 9"></polyline> <polyline points="9 21 3 21 3 15"></polyline> <line x1="21" y1="3" x2="14" y2="10"></line> <line x1="3" y1="21" x2="10" y2="14"></line> </svg> </button> </div> </div> <div class="card-value">$12,832.47</div> <div class="card-trend positive"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="23 6 13.5 15.5 8.5 10.5 1 18"></polyline> <polyline points="17 6 23 6 23 12"></polyline> </svg> <span>↑ 5% from last month</span> </div> </div> <div class="summary-card animated-card" id="card-4" draggable="true" data-card-id="4" style="animation-delay: 0.3s;"> <div class="card-header"> <span class="card-title">Reward Points</span> <div class="card-actions"> <button class="card-action-btn" data-action="expand"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="15 3 21 3 21 9"></polyline> <polyline points="9 21 3 21 3 15"></polyline> <line x1="21" y1="3" x2="14" y2="10"></line> <line x1="3" y1="21" x2="10" y2="14"></line> </svg> </button> </div> </div> <div class="card-value">32,587</div> <div class="card-trend positive"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="23 6 13.5 15.5 8.5 10.5 1 18"></polyline> <polyline points="17 6 23 6 23 12"></polyline> </svg> <span>↑ 15% from last month</span> </div> </div> </div> <div class="section-title">Credit Utilization</div> <div class="credit-utilization"> <div class="chart-container"> <div class="chart-fill" id="chart-fill" style="width: 35%;"></div> <div class="chart-marker" id="chart-marker" style="left: 35%;"></div> <div class="chart-tooltip" id="utilization-tooltip">35% utilization</div> </div> <div class="chart-labels"> <span>0%</span> <span>30%</span> <span>60%</span> <span>100%</span> </div> </div> <div class="section-title">Spending by Category</div> <div class="category-spending"> <div class="category-card"> <div class="category-icon" style="background-color: #FF8C42;"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M3 3h18v18H3zM12 8v8m-4-4h8"></path> </svg> </div> <div class="category-title">Healthcare</div> <div class="category-amount">$3,245.87</div> </div> <div class="category-card"> <div class="category-icon" style="background-color: #4EADAD;"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M9 20l-5.447-2.724A1 1 0 0 1 3 16.382V5.618a1 1 0 0 1 .553-.894L9 2m0 18V2m0 18l5.447-2.724A1 1 0 0 0 15 16.382V5.618a1 1 0 0 0-.553-.894L9 2"></path> </svg> </div> <div class="category-title">Travel</div> <div class="category-amount">$2,785.33</div> </div> <div class="category-card"> <div class="category-icon" style="background-color: #48B264;"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect x="5" y="2" width="14" height="20" rx="2" ry="2"></rect> <line x1="12" y1="18" x2="12.01" y2="18"></line> </svg> </div> <div class="category-title">Technology</div> <div class="category-amount">$1,986.42</div> </div> <div class="category-card"> <div class="category-icon" style="background-color: #2A5C8F;"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polyline points="22 12 16 12 14 15 10 15 8 12 2 12"></polyline> <path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path> </svg> </div> <div class="category-title">Office</div> <div class="category-amount">$1,498.75</div> </div> <div class="category-card"> <div class="category-icon" style="background-color: #E64154;"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon> </svg> </div> <div class="category-title">Utilities</div> <div class="category-amount">$935.18</div> </div> </div> <div class="section-title">Recent Transactions</div> <div class="expense-list"> <div class="expense-item"> <div class="expense-left"> <div class="expense-icon" style="background-color: #48B264;"> <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"> <rect x="5" y="2" width="14" height="20" rx="2" ry="2"></rect> <line x1="12" y1="18" x2="12.01" y2="18"></line> </svg> </div> <div class="expense-details"> <div class="expense-title">Apple Store</div> <div class="expense-date">Today, 2:34 PM</div> </div> </div> <div class="expense-amount">-$899.99</div> </div> <div class="expense-item"> <div class="expense-left"> <div class="expense-icon" style="background-color: #4EADAD;"> <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 20l-5.447-2.724A1 1 0 0 1 3 16.382V5.618a1 1 0 0 1 .553-.894L9 2m0 18V2m0 18l5.447-2.724A1 1 0 0 0 15 16.382V5.618a1 1 0 0 0-.553-.894L9 2"></path> </svg> </div> <div class="expense-details"> <div class="expense-title">Delta Airlines</div> <div class="expense-date">Yesterday, 11:20 AM</div> </div> </div> <div class="expense-amount">-$1,254.87</div> </div> <div class="expense-item"> <div class="expense-left"> <div class="expense-icon" style="background-color: #FF8C42;"> <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="M3 3h18v18H3zM12 8v8m-4-4h8"></path> </svg> </div> <div class="expense-details"> <div class="expense-title">CVS Pharmacy</div> <div class="expense-date">Jun 10, 3:45 PM</div> </div> </div> <div class="expense-amount">-$84.32</div> </div> </div> <div class="draggable-area" id="drop-area"> Drop card here to reorder </div> <div class="settings-panel" id="settings-panel"> <div class="settings-header"> <div class="settings-title">Card Settings</div> <button class="settings-close" id="settings-close"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <line x1="18" y1="6" x2="6" y2="18"></line> <line x1="6" y1="6" x2="18" y2="18"></line> </svg> </button> </div> <div class="settings-option"> <label class="settings-label">Default View</label> <select class="settings-select"> <option value="quarterly">Monthly Overview</option> <option value="monthly">Weekly Overview</option> <option value="weekly">Daily Overview</option> </select> </div> <div class="settings-option"> <label class="settings-label">Notifications</label> <div class="toggle-option"> <span class="toggle-label">Payment Due Alerts</span> <label
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> :root { --primary: #00f7ff; --secondary: #ff1cf7; --dark: #121212; --darker: #0a0a0a; --card-width: 360px; --card-height: 220px; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif; } body { background-color: var(--darker); color: white; display: flex; justify-content: center; align-items: center; min-height: 100vh; overflow-x: hidden; perspective: 1000px; } .container { width: 100%; max-width: 700px; padding: 20px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 30px; } .header { text-align: center; margin-bottom: 10px; } .header h1 { font-size: 2.5rem; background: linear-gradient(90deg, var(--primary), var(--secondary)); -webkit-background-clip: text; background-clip: text; color: transparent; margin-bottom: 10px; } .header p { color: #aaa; font-size: 1rem; max-width: 500px; } .card-container { position: relative; width: var(--card-width); height: var(--card-height); transform-style: preserve-3d; transition: transform 1s cubic-bezier(0.175, 0.885, 0.32, 1.275); } .card-container.flipped { transform: rotateY(180deg); } .card { position: absolute; width: 100%; height: 100%; border-radius: 18px; overflow: hidden; backface-visibility: hidden; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5); cursor: pointer; transition: transform 0.3s, box-shadow 0.3s; } .card:hover { transform: translateY(-10px); box-shadow: 0 15px 40px rgba(0, 0, 0, 0.7); } .card-front { background: var(--dark); display: flex; flex-direction: column; justify-content: space-between; padding: 20px; } .card-back { background: var(--dark); padding: 20px; transform: rotateY(180deg); } .card-background { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0.1; z-index: 0; } .card-pattern { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle at 20% 30%, rgba(0, 247, 255, 0.1) 0%, transparent 40%), radial-gradient(circle at 80% 80%, rgba(255, 28, 247, 0.12) 0%, transparent 40%); z-index: 1; } .card-chip { position: relative; width: 50px; height: 40px; border-radius: 8px; background: linear-gradient(135deg, #777, #444); z-index: 2; overflow: hidden; display: flex; align-items: center; justify-content: center; } .chip-effect { position: absolute; width: 100%; height: 100%; background: linear-gradient(90deg, transparent 25%, rgba(255, 255, 255, 0.1) 50%, transparent 75%); background-size: 200% 100%; animation: shimmer 2s infinite; } .card-chip::before { content: ''; position: absolute; width: 80%; height: 60%; border: 1px solid rgba(255, 255, 255, 0.3); border-radius: 4px; } .card-number { position: relative; z-index: 2; font-size: 1.3rem; letter-spacing: 2px; display: flex; justify-content: space-between; color: white; font-weight: 500; } .card-details { position: relative; z-index: 2; display: flex; justify-content: space-between; align-items: flex-end; } .card-details .left { display: flex; flex-direction: column; } .card-holder { font-size: 0.75rem; color: rgba(255, 255, 255, 0.6); margin-bottom: 4px; } .holder-name { font-size: 1rem; font-weight: 500; } .valid-thru { font-size: 0.75rem; color: rgba(255, 255, 255, 0.6); margin-bottom: 4px; } .expiry { font-size: 1rem; font-weight: 500; } .card-brand { height: 50px; display: flex; align-items: center; justify-content: center; } .neon-circle { position: absolute; width: 150px; height: 150px; border-radius: 50%; z-index: 0; filter: blur(40px); opacity: 0.3; transition: opacity 0.5s, transform 0.5s; } .neon-circle.primary { background: var(--primary); top: -50px; right: -50px; } .neon-circle.secondary { background: var(--secondary); bottom: -40px; left: -40px; } .card:hover .neon-circle { opacity: 0.5; transform: scale(1.2); } .card-back-strip { position: absolute; top: 30px; left: 0; width: 100%; height: 40px; background: rgba(0, 0, 0, 0.8); z-index: 2; } .card-back-cvv { position: absolute; top: 80px; left: 20px; right: 20px; height: 40px; background: rgba(255, 255, 255, 0.1); border-radius: 4px; z-index: 2; display: flex; align-items: center; justify-content: flex-end; padding-right: 10px; } .card-back-cvv .cvv-text { font-family: monospace; letter-spacing: 2px; } .card-back-info { position: absolute; bottom: 20px; left: 20px; right: 20px; color: rgba(255, 255, 255, 0.6); font-size: 0.7rem; z-index: 2; } .biometric-lock { position: absolute; bottom: 20px; right: 20px; width: 30px; height: 30px; border-radius: 50%; background: rgba(0, 0, 0, 0.3); border: 1px solid rgba(255, 255, 255, 0.1); display: flex; align-items: center; justify-content: center; z-index: 3; cursor: pointer; transition: all 0.3s; } .biometric-lock:hover { transform: scale(1.1); border-color: var(--primary); } .biometric-lock i { font-size: 1rem; color: var(--primary); } .card-actions { display: flex; gap: 15px; } .action-button { padding: 12px 25px; border-radius: 10px; background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.1); color: white; font-weight: 500; cursor: pointer; transition: all 0.3s; display: flex; align-items: center; gap: 8px; } .action-button:hover { background: rgba(255, 255, 255, 0.1); transform: translateY(-3px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); } .action-button.primary { background: linear-gradient(90deg, var(--primary), var(--primary)); color: var(--dark); } .action-button.primary:hover { background: linear-gradient(90deg, var(--primary), #a0ffff); } .status-alert { position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%) translateY(100px); padding: 15px 25px; border-radius: 10px; background: rgba(0, 0, 0, 0.8); backdrop-filter: blur(10px); color: white; box-shadow: 0 5px 20px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(255, 255, 255, 0.1); display: flex; align-items: center; gap: 10px; z-index: 100; opacity: 0; transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275), opacity 0.3s; } .status-alert.show { transform: translateX(-50%) translateY(0); opacity: 1; } .status-alert .icon { width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; background: var(--primary); color: var(--dark); border-radius: 50%; } .status-alert .text { display: flex; flex-direction: column; } .status-alert .title { font-weight: 600; font-size: 0.9rem; } .status-alert .subtitle { font-size: 0.8rem; opacity: 0.7; } .recent-activity { width: 100%; background: rgba(255, 255, 255, 0.03); border-radius: 12px; padding: 20px; max-width: 360px; } .recent-activity h3 { margin-bottom: 15px; font-size: 1.1rem; display: flex; align-items: center; gap: 8px; } .transaction { display: flex; justify-content: space-between; align-items: center; padding: 12px 0; border-bottom: 1px solid rgba(255, 255, 255, 0.05); } .transaction:last-child { border-bottom: none; } .transaction .left { display: flex; align-items: center; gap: 12px; } .transaction .icon { width: 36px; height: 36px; border-radius: 10px; background: rgba(255, 255, 255, 0.05); display: flex; align-items: center; justify-content: center; font-size: 1rem; } .transaction .details { display: flex; flex-direction: column; } .transaction .details .name { font-weight: 500; font-size: 0.9rem; } .transaction .details .time { font-size: 0.75rem; color: rgba(255, 255, 255, 0.5); } .transaction .amount { font-weight: 600; font-size: 0.9rem; } .transaction.debit .amount { color: #ff5e5e; } .transaction.credit .amount { color: #4cff5e; } .fingerprint-scan { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.8); backdrop-filter: blur(10px); display: flex; align-items: center; justify-content: center; z-index: 1000; opacity: 0; pointer-events: none; transition: opacity 0.3s; } .fingerprint-scan.active { opacity: 1; pointer-events: all; } .scan-content { display: flex; flex-direction: column; align-items: center; gap: 20px; } .scan-icon { width: 80px; height: 80px; border-radius: 50%; background: var(--dark); border: 1px solid rgba(255, 255, 255, 0.1); display: flex; align-items: center; justify-content: center; font-size: 2rem; color: var(--primary); position: relative; } .scan-pulse { position: absolute; width: 100%; height: 100%; border-radius: 50%; border: 2px solid var(--primary); animation: pulse 2s infinite; } .scan-text { font-size: 1.2rem; font-weight: 500; } .scan-cancel { padding: 10px 20px; border-radius: 8px; background: rgba(255, 255, 255, 0.1); border: none; color: white; cursor: pointer; transition: all 0.3s; margin-top: 20px; } .scan-cancel:hover { background: rgba(255, 255, 255, 0.2); } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } @keyframes pulse { 0% { transform: scale(1); opacity: 1; } 100% { transform: scale(1.5); opacity: 0; } } @media (max-width: 500px) { :root { --card-width: 300px; --card-height: 180px; } .card-number { font-size: 1rem; } .holder-name, .expiry { font-size: 0.9rem; } .recent-activity { max-width: 300px; } .header h1 { font-size: 2rem; } } </style> </head> <body> <div class="container"> <div class="header"> <h1>NexusPay</h1> <p>The future of finance at your fingertips</p> </div> <div class="card-container"> <div class="card card-front"> <div class="card-background"></div> <div class="card-pattern"></div> <div class="neon-circle primary"></div> <div class="neon-circle secondary"></div> <div class="card-top"> <div class="card-chip"> <div class="chip-effect"></div> </div> </div> <div class="card-number"> <span>4921</span> <span>8156</span> <span>XXXX</span> <span>7438</span> </div> <div class="card-details"> <div class="left"> <div class="card-holder">CARD HOLDER</div> <div class="holder-name">ALEX MORGAN</div> </div> <div class="right"> <div class="valid-thru">VALID THRU</div> <div class="expiry">05/26</div> </div> <div class="card-brand"> <svg width="60" height="40" viewBox="0 0 60 40" fill="none"> <path d="M52 8H40C35.6 8 32 11.6 32 16V24C32 28.4 35.6 32 40 32H52C56.4 32 60 28.4 60 24V16C60 11.6 56.4 8 52 8Z" fill="rgba(255,255,255,0.1)"/> <circle cx="46" cy="20" r="6" fill="var(--primary)" fill-opacity="0.8"/> <circle cx="46" cy="20" r="9" stroke="var(--primary)" stroke-opacity="0.4" stroke-width="2"/> </svg> </div> </div> <div class="biometric-lock" id="biometricLock"> <i>🔒</i> </div> </div> <div class="card card-back"> <div class="card-pattern"></div> <div class="neon-circle primary"></div> <div class="neon-circle secondary"></div> <div class="card-back-strip"></div> <div class="card-back-cvv"> <span class="cvv-text">***</span> </div> <div class="card-back-info"> This card is issued by NexusPay Inc. and remains the property of NexusPay. Use of this card is subject to the terms and conditions of your agreement with NexusPay. </div> </div> </div> <div class="card-actions"> <button class="action-button" id="lockButton"> <i>🔒</i> Lock Card </button> <button class="action-button primary" id="payButton"> <i>💳</i> Tap to Pay </button> </div> <div class="recent-activity"> <h3><i>⚡</i> Recent Activity</h3> <div class="transaction debit"> <div class="left"> <div class="icon">🛒</div> <div class="details"> <div class="name">Amazon Prime</div> <div class="time">Today, 2:34 PM</div> </div> </div> <div class="amount">-$14.99</div> </div> <div class="transaction debit"> <div class="left"> <div class="icon">☕</div> <div class="details"> <div class="name">Starbucks</div> <div class="time">Today, 9:15 AM</div> </div> </div> <div class="amount">-$5.75</div> </div> <div class="transaction credit"> <div class="left"> <div class="icon">💼</div> <div class="details"> <div class="name">Payroll Deposit</div> <div class="time">Yesterday</div> </div> </div> <div class="amount">+$2,450.00</div> </div> </div> </div> <div class="status-alert" id="statusAlert"> <div class="icon">✓</div> <div class="text"> <div class="title">Transaction Approved</div> <div class="subtitle">$14.99 at Amazon Prime</div> </div> </div> <div class="fingerprint-scan" id="fingerprintScan"> <div class="scan-content"> <div class="scan-icon"> <div class="scan-pulse"></div> 👆 </div> <div class="scan-text">Verify identity</div> <button class="scan-cancel" id="scanCancel">Cancel</button> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const card = document.querySelector('.card-container'); const statusAlert = document.getElementById('statusAlert'); const biometricLock = document.getElementById('biometricLock'); const lockButton = document.getElementById('lockButton'); const payButton = document.getElementById('payButton'); const fingerprintScan = document.getElementById('fingerprintScan'); const scanCancel = document.getElementById('scanCancel'); // Toggle card flip card.addEventListener('click', function(e) { if (e.target.id !== 'biometricLock' && !e.target.closest('#biometricLock')) { card.classList.toggle('flipped'); } }); // Show transaction alert function showAlert(title, subtitle) { statusAlert.querySelector('.title').textContent = title; statusAlert.querySelector('.subtitle').textContent = subtitle; statusAlert.classList.add('show'); setTimeout(() => { statusAlert.classList.remove('show'); }, 3000); } // Biometric verification function showBiometricScan() { fingerprintScan.classList.add('active'); // Simulate verification after 2 seconds setTimeout(() => { fingerprintScan.classList.remove('active'); showAlert('Identity Verified', 'Biometric authentication successful'); }, 2000); } biometricLock.addEventListener('click', function(e) { e.stopPropagation(); showBiometricScan(); }); scanCancel.addEventListener('click', function() { fingerprintScan.classList.remove('active'); }); lockButton.addEventListener('click', function() { showAlert('Card Locked', 'Your card has been temporarily locked'); }); payButton.addEventListener('click', function() { showBiometricScan(); }); // Hover effects for transactions const transactions = document.querySelectorAll('.transaction'); transactions.forEach(transaction => { transaction.addEventListener('mouseenter', function() { this.style.backgroundColor = 'rgba(255, 255, 255, 0.05)'; this.style.borderRadius = '8px'; this.style.transform = 'translateX(5px)'; this.style.transition = 'all 0.3s'; }); transaction.addEventListener('mouseleave', function() { this.style.backgroundColor = 'transparent'; this.style.transform = 'translateX(0)'; }); }); // Simulate notification after page load setTimeout(() => { showAlert('Transaction Approved', '$5.75 at Starbucks'); }, 2000); // Add hover effect to card for neon glow const cardFront = document.querySelector('.card-front'); cardFront.addEventListener('mousemove', function(e) { const rect = this.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; const xPercent = x / rect.width; const yPercent = y / rect.height; const primaryCircle = this.querySelector('.neon-circle.primary'); const secondaryCircle = this.querySelector('.neon-circle.secondary'); primaryCircle.style.transform = `translate(${(xPercent - 0.5) * 30}px, ${(yPercent - 0.5) * 30}px) scale(1.2)`; secondaryCircle.style.transform = `translate(${(xPercent - 0.5) * -30}px, ${(yPercent - 0.5) * -30}px) scale(1.2)`; }); cardFront.addEventListener('mouseleave', function() { const primaryCircle = this.querySelector('.neon-circle.primary'); const secondaryCircle = this.querySelector('.neon-circle.secondary'); primaryCircle.style.transform = ''; secondaryCircle.style.transform = ''; }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>FinSwipe Mobile Wallet</title> <style> :root { --primary-color: #6200ee; --secondary-color: #03dac6; --warning-color: #ff5252; --surface-color: #ffffff; --background-color: #f5f5f5; --text-primary: #333333; --text-secondary: #757575; --card-shadow: 0 8px 16px rgba(0, 0, 0, 0.1); --card-radius: 16px; --transition-speed: 0.3s; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif; } body { background-color: var(--background-color); color: var(--text-primary); height: 100vh; display: flex; justify-content: center; align-items: center; overflow: hidden; padding: 20px; } .wallet-container { width: 100%; max-width: 700px; height: 600px; position: relative; overflow: hidden; border-radius: 24px; background-color: var(--surface-color); box-shadow: 0 12px 24px rgba(0, 0, 0, 0.08); } .wallet-header { padding: 24px; display: flex; justify-content: space-between; align-items: center; background-color: var(--primary-color); color: white; } .wallet-header h1 { font-size: 1.5rem; font-weight: 500; } .avatar { width: 40px; height: 40px; border-radius: 50%; background-color: var(--secondary-color); display: flex; justify-content: center; align-items: center; font-weight: 600; color: var(--text-primary); } .cards-container { padding: 20px; overflow-x: hidden; position: relative; height: 220px; } .card { position: absolute; width: calc(100% - 40px); height: 200px; border-radius: var(--card-radius); padding: 24px; color: white; transition: transform var(--transition-speed) ease-out, opacity var(--transition-speed) ease-out; box-shadow: var(--card-shadow); display: flex; flex-direction: column; justify-content: space-between; user-select: none; cursor: pointer; overflow: hidden; } .card-top { display: flex; justify-content: space-between; align-items: flex-start; } .card-chip { width: 45px; height: 35px; background: linear-gradient(135deg, #ffcc00 0%, #d4af37 100%); border-radius: 6px; position: relative; } .card-chip::before, .card-chip::after { content: ''; position: absolute; background-color: rgba(0, 0, 0, 0.1); } .card-chip::before { top: 8px; left: 8px; right: 8px; height: 8px; border-radius: 2px; } .card-chip::after { top: 22px; left: 8px; right: 8px; height: 5px; border-radius: 2px; } .card-type { font-size: 1rem; font-weight: 600; } .card-middle { margin: 10px 0; } .card-number { font-size: 1.25rem; letter-spacing: 2px; margin-bottom: 10px; } .card-bottom { display: flex; justify-content: space-between; align-items: flex-end; } .card-holder { display: flex; flex-direction: column; } .card-holder-label { font-size: 0.75rem; text-transform: uppercase; opacity: 0.8; } .card-holder-name { font-size: 1rem; font-weight: 500; } .card-expiry { display: flex; flex-direction: column; align-items: flex-end; } .card-expiry-label { font-size: 0.75rem; text-transform: uppercase; opacity: 0.8; } .card-expiry-date { font-size: 1rem; font-weight: 500; } .card-1 { background: linear-gradient(135deg, #6200ee 0%, #9b51e0 100%); z-index: 3; } .card-2 { background: linear-gradient(135deg, #00bcd4 0%, #03dac6 100%); z-index: 2; transform: translateX(15px) translateY(15px) scale(0.95); opacity: 0.85; } .card-3 { background: linear-gradient(135deg, #ff9800 0%, #ff5722 100%); z-index: 1; transform: translateX(30px) translateY(30px) scale(0.9); opacity: 0.7; } .card-pattern { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0.07; background-image: radial-gradient(circle at 20% 30%, rgba(255, 255, 255, 0.3) 0%, transparent 10%), radial-gradient(circle at 70% 60%, rgba(255, 255, 255, 0.3) 0%, transparent 15%), radial-gradient(circle at 40% 80%, rgba(255, 255, 255, 0.3) 0%, transparent 12%), radial-gradient(circle at 80% 10%, rgba(255, 255, 255, 0.3) 0%, transparent 8%); } .card-logo { position: absolute; bottom: 20px; right: 20px; width: 60px; height: 40px; display: flex; justify-content: center; align-items: center; } .visa-logo { font-style: italic; font-weight: 800; font-size: 1.5rem; color: white; } .mastercard-logo { position: relative; } .mastercard-logo::before, .mastercard-logo::after { content: ''; position: absolute; width: 25px; height: 25px; border-radius: 50%; } .mastercard-logo::before { background-color: #ff5f00; left: -5px; z-index: 1; } .mastercard-logo::after { background-color: #eb001b; left: -17px; z-index: 0; } .amex-logo { font-weight: 800; font-size: 1rem; color: white; } .transactions-container { height: calc(100% - 320px); padding: 0 20px; overflow-y: auto; } .transactions-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; padding: 0 5px; } .transactions-header h2 { font-size: 1.2rem; font-weight: 500; color: var(--text-primary); } .transaction-filter { display: flex; align-items: center; } .filter-option { padding: 5px 12px; margin-left: 8px; border-radius: 16px; font-size: 0.8rem; cursor: pointer; transition: background-color 0.2s; background-color: #eeeeee; } .filter-option.active { background-color: var(--primary-color); color: white; } .transaction-item { display: flex; align-items: center; padding: 12px; margin: 8px 0; border-radius: 12px; background-color: white; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); transition: transform 0.2s; } .transaction-item:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } .transaction-icon { width: 48px; height: 48px; border-radius: 12px; display: flex; justify-content: center; align-items: center; margin-right: 12px; font-size: 1.5rem; color: white; } .transaction-details { flex: 1; } .transaction-title { font-weight: 500; margin-bottom: 4px; } .transaction-date { font-size: 0.8rem; color: var(--text-secondary); } .transaction-amount { font-weight: 600; } .transaction-amount.positive { color: #4caf50; } .transaction-amount.negative { color: var(--warning-color); } .icon-shopping { background-color: #4caf50; } .icon-food { background-color: #ff9800; } .icon-transport { background-color: #03a9f4; } .icon-health { background-color: #e91e63; } .wallet-nav { position: absolute; bottom: 0; width: 100%; height: 60px; display: flex; justify-content: space-around; align-items: center; background-color: white; box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05); } .nav-item { display: flex; flex-direction: column; align-items: center; padding: 8px 16px; cursor: pointer; transition: color 0.2s; color: var(--text-secondary); } .nav-item.active { color: var(--primary-color); } .nav-icon { font-size: 1.4rem; margin-bottom: 2px; } .nav-label { font-size: 0.7rem; text-transform: uppercase; } /* Card swipe animation */ .swipe-instruction { text-align: center; margin: 10px 0; color: var(--text-secondary); font-size: 0.9rem; opacity: 0.8; display: flex; align-items: center; justify-content: center; } .swipe-icon { display: inline-block; animation: swipeMotion 2s infinite; margin: 0 8px; } @keyframes swipeMotion { 0%, 100% { transform: translateX(-5px); } 50% { transform: translateX(5px); } } .tap-effect { position: absolute; width: 50px; height: 50px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.3); transform: scale(0); z-index: 10; pointer-events: none; } .card-summary { position: absolute; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.95); display: flex; flex-direction: column; justify-content: space-between; padding: 20px; z-index: 5; top: 100%; transition: top 0.4s ease-in-out; border-radius: var(--card-radius); } .summary-header { display: flex; justify-content: space-between; align-items: center; } .summary-title { font-size: 1.2rem; font-weight: 600; } .close-summary { width: 30px; height: 30px; border-radius: 50%; background-color: #f0f0f0; display: flex; justify-content: center; align-items: center; cursor: pointer; transition: background-color 0.2s; } .close-summary:hover { background-color: #e0e0e0; } .summary-content { flex: 1; padding: 20px 0; } .summary-stat { display: flex; justify-content: space-between; margin-bottom: 15px; padding-bottom: 15px; border-bottom: 1px solid #eeeeee; } .summary-stat:last-child { border-bottom: none; } .summary-label { color: var(--text-secondary); } .summary-value { font-weight: 500; } .summary-footer { display: flex; justify-content: space-between; } .summary-action { padding: 12px 24px; border-radius: 24px; font-weight: 500; text-align: center; cursor: pointer; transition: background-color 0.2s; } .action-primary { background-color: var(--primary-color); color: white; flex: 2; margin-right: 10px; } .action-secondary { background-color: #f0f0f0; color: var(--text-primary); flex: 1; } @media (max-width: 600px) { .wallet-container { width: 100%; height: 550px; border-radius: 16px; } .wallet-header h1 { font-size: 1.3rem; } .card { padding: 20px; height: 180px; } .cards-container { height: 200px; } .card-number { font-size: 1.1rem; } .transaction-item { padding: 10px; } .transaction-icon { width: 40px; height: 40px; font-size: 1.2rem; } .transactions-container { height: calc(100% - 300px); } } /* Credit Card Flip Animation */ .card-inner { position: relative; width: 100%; height: 100%; transition: transform 0.6s; transform-style: preserve-3d; } .card.flipped .card-inner { transform: rotateY(180deg); } .card-front, .card-back { position: absolute; width: 100%; height: 100%; -webkit-backface-visibility: hidden; backface-visibility: hidden; border-radius: var(--card-radius); } .card-back { transform: rotateY(180deg); padding: 20px; } .card-magnetic-strip { background-color: rgba(0, 0, 0, 0.7); height: 40px; margin: 20px 0; } .card-cvv-container { display: flex; align-items: center; justify-content: flex-end; margin-top: 10px; } .card-cvv-label { margin-right: 10px; font-size: 0.8rem; text-transform: uppercase; } .card-cvv { background-color: white; color: black; padding: 5px 10px; border-radius: 4px; font-size: 0.9rem; } /* Loader for transitions */ .card-loader { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; background-color: rgba(255, 255, 255, 0.8); z-index: 10; border-radius: var(--card-radius); opacity: 0; pointer-events: none; transition: opacity 0.3s; } .loader-spinner { width: 40px; height: 40px; border: 4px solid rgba(98, 0, 238, 0.3); border-top: 4px solid var(--primary-color); border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Notification badge */ .badge { position: absolute; top: -5px; right: -5px; background-color: var(--warning-color); color: white; border-radius: 50%; width: 18px; height: 18px; font-size: 0.7rem; display: flex; justify-content: center; align-items: center; } /* Accessibility focus states */ .card:focus, .transaction-item:focus, .nav-item:focus, .summary-action:focus, .close-summary:focus { outline: 2px solid var(--primary-color); outline-offset: 2px; } /* Scroll styles */ .transactions-container::-webkit-scrollbar { width: 6px; } .transactions-container::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 10px; } .transactions-container::-webkit-scrollbar-thumb { background: #ccc; border-radius: 10px; } .transactions-container::-webkit-scrollbar-thumb:hover { background: #aaa; } </style> </head> <body> <div class="wallet-container"> <div class="wallet-header"> <h1>FinSwipe Wallet</h1> <div class="avatar">JS</div> </div> <div class="cards-container"> <div class="card card-1" tabindex="0"> <div class="card-inner"> <div class="card-front"> <div class="card-pattern"></div> <div class="card-top"> <div class="card-chip"></div> <div class="card-type">Platinum</div> </div> <div class="card-middle"> <div class="card-number">**** **** **** 8523</div> </div> <div class="card-bottom"> <div class="card-holder"> <div class="card-holder-label">Card Holder</div> <div class="card-holder-name">Jordan Smith</div> </div> <div class="card-expiry"> <div class="card-expiry-label">Expires</div> <div class="card-expiry-date">05/26</div> </div> </div> <div class="card-logo"> <div class="visa-logo">VISA</div> </div> </div> <div class="card-back"> <div class="card-pattern"></div> <div class="card-magnetic-strip"></div> <div class="card-cvv-container"> <div class="card-cvv-label">CVV</div> <div class="card-cvv">***</div> </div> </div> </div> <div class="card-loader"> <div class="loader-spinner"></div> </div> <div class="card-summary"> <div class="summary-header"> <div class="summary-title">Platinum Visa</div> <div class="close-summary" tabindex="0">✕</div> </div> <div class="summary-content"> <div class="summary-stat"> <div class="summary-label">Current Balance</div> <div class="summary-value">$5,238.93</div> </div> <div class="summary-stat"> <div class="summary-label">Credit Limit</div> <div class="summary-value">$10,000.00</div> </div> <div class="summary-stat"> <div class="summary-label">Available Credit</div> <div class="summary-value">$4,761.07</div> </div> <div class="summary-stat"> <div class="summary-label">Payment Due</div> <div class="summary-value">$182.50 (Jun 15)</div> </div> <div class="summary-stat"> <div class="summary-label">Reward Points</div> <div class="summary-value">5,862 pts</div> </div> </div> <div class="summary-footer"> <div class="summary-action action-primary" tabindex="0">Make a Payment</div> <div class="summary-action action-secondary" tabindex="0">Lock Card</div> </div> </div> </div> <div class="card card-2" tabindex="0"> <div class="card-inner"> <div class="card-front"> <div class="card-pattern"></div> <div class="card-top"> <div class="card-chip"></div> <div class="card-type">Premium</div> </div> <div class="card-middle"> <div class="card-number">**** **** **** 4217</div> </div> <div class="card-bottom"> <div class="card-holder"> <div class="card-holder-label">Card Holder</div> <div class="card-holder-name">Jordan Smith</div> </div> <div class="card-expiry"> <div class="card-expiry-label">Expires</div> <div class="card-expiry-date">08/25</div> </div> </div> <div class="card-logo"> <div class="mastercard-logo">MC</div> </div> </div> <div class="card-back"> <div class="card-pattern"></div> <div class="card-magnetic-strip"></div> <div class="card-cvv-container"> <div class="card-cvv-label">CVV</div> <div class="card-cvv">***</div> </div> </div> </div> </div> <div class="card card-3" tabindex="0"> <div class="card-inner"> <div class="card-front"> <div class="card-pattern"></div> <div class="card-top"> <div class="card-chip"></div> <div class="card-type">Gold</div> </div> <div class="card-middle"> <div class="card-number">**** **** **** 6492</div> </div> <div class="card-bottom"> <div class="card-holder"> <div class="card-holder-label">Card Holder</div> <div class="card-holder-name">Jordan Smith</div> </div> <div class="card-expiry"> <div class="card-expiry-label">Expires</div> <div class="card-expiry-date">11/24</div> </div> </div> <div class="card-logo"> <div class="amex-logo">AMEX</div> </div> </div> <div class="card-back"> <div class="card-pattern"></div> <div class="card-magnetic-strip"></div> <div class="card-cvv-container"> <div class="card-cvv-label">CVV</div> <div class="card-cvv">****</div> </div> </div> </div> </div> </div> <div class="swipe-instruction"> <span>Swipe cards</span> <span class="swipe-icon">⟷</span> <span>or tap for details</span> </div> <div class="transactions-container"> <div class="transactions-header"> <h2>Recent Transactions</h2> <div class="transaction-filter"> <div class="filter-option active">All</div> <div class="filter-option">Income</div> <div class="filter-option">Expense</div> </div> </div> <div class="transaction-item" tabindex="0"> <div class="transaction-icon icon-shopping">🛒</div> <div class="transaction-details"> <div class="transaction-title">Whole Foods Market</div> <div class="transaction-date">Today, 11:42 AM</div> </div> <div class="transaction-amount negative">-$87.32</div> </div> <div class="transaction-item" tabindex="0"> <div class="transaction-icon icon-transport">🚗</div> <div class="transaction-details"> <div class="transaction-title">Uber Ride</div> <div class="transaction-date">Yesterday, 7:15 PM</div> </div> <div class="transaction-amount negative">-$24.50</div> </div> <div class="transaction-item" tabindex="0"> <div class="transaction-icon icon-food">🍲</div> <div class="transaction-details"> <div class="transaction-title">Urban Eats Cafe</div> <div class="transaction-date">Yesterday, 1:30 PM</div> </div> <div class="transaction-amount negative">-$32.75</div> </div> <div class="transaction-item" tabindex="0"> <div class="transaction-icon icon-health" style="background-color: #4caf50;">💼</div> <div class="transaction-details"> <div class="transaction-title">Salary Deposit</div> <div class="transaction-date">Jun 01, 9:00 AM</div> </div> <div class="transaction-amount positive">+$3,450.00</div> </div> <div class="transaction-item" tabindex="0"> <div class="transaction-icon icon-health">💊</div> <div class="transaction-details"> <div class="transaction-title">City Pharmacy</div> <div class="transaction-date">May 30, 2:45 PM</div> </div> <div class="transaction-amount negative">-$45.99</div> </div> </div> <div class="wallet-nav"> <div class="nav-item active"> <div class="nav-icon">💳</div> <div class="nav-label">Cards</div> </div> <div class="nav-item"> <div class="nav-icon">📊</div> <div class="nav-label">Analytics</div> </div> <div class="nav-item"> <div class="nav-icon" style="position: relative;"> 🔔 <div class="badge">2</div> </div> <div class="nav-label">Alerts</div> </div> <div class="nav-item"> <div class="nav-icon">⚙️</div> <div class="nav-label">Settings</div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Card swipe functionality const cardsContainer = document.querySelector('.cards-container'); const cards = document.querySelectorAll('.card'); let startX, moveX, currentCardIndex = 0; let isDragging = false; // Initialize touch events for cards cards.forEach((card, index) => { // Double click to flip card card.addEventListener('dblclick', function() { card.classList.toggle('flipped'); }); // Tap effect card.addEventListener('click', function(e) { // Don't show tap effect when flipping if (card.classList.contains('flipped')) return; // Don't open summary if we're dragging if (isDragging) return; // Create tap effect const tapEffect = document.createElement('div'); tapEffect.classList.add('tap-effect'); card.appendChild(tapEffect); // Position effect at click point const rect = card.getBoundingClientRect(); tapEffect.style.left = `${e.clientX - rect.left - 25}px`; tapEffect.style.top = `${e.clientY - rect.top - 25}px`; // Animate and remove requestAnimationFrame(() => { tapEffect.style.transform = 'scale(3)'; tapEffect.style.opacity = '0'; setTimeout(() => { tapEffect.remove(); }, 400); }); // Show card summary if it's the front card if (index === currentCardIndex) { const summary = card.querySelector('.card-summary'); if (summary) { summary.style.top = '0'; } } }); // Close summary when clicking the close button const closeBtn = card.querySelector('.close-summary'); if (closeBtn) { closeBtn.addEventListener('click', function(e) { e.stopPropagation(); const summary = card.querySelector('.card-summary'); summary.style.top = '100%'; }); } }); // Touch start cardsContainer.addEventListener('touchstart', handleTouchStart, false); cardsContainer.addEventListener('mousedown', handleMouseDown, false); // Touch move cardsContainer.addEventListener('touchmove', handleTouchMove, false); cardsContainer.addEventListener('mousemove', handleMouseMove, false); // Touch end cardsContainer.addEventListener('touchend', handleTouchEnd, false); cardsContainer.addEventListener('mouseup', handleMouseUp, false); cardsContainer.addEventListener('mouseleave', handleMouseUp, false); function handleTouchStart(e) { startX = e.touches[0].clientX; isDragging = true; } function handleMouseDown(e) { startX = e.clientX; isDragging = true; e.preventDefault(); // Prevent text selection } function handleTouchMove(e) { if (!isDragging) return; moveX = e.touches[0].clientX; const diffX = moveX - startX; // Only allow swiping if there's a significant movement if (Math.abs(diffX) > 20) { e.preventDefault(); // Prevent page scrolling when swiping cards } } function handleMouseMove(e) { if (!isDragging) return; moveX = e.clientX; } function handleTouchEnd() { if (!isDragging) return; handleSwipe(); isDragging = false; } function handleMouseUp() { if (!isDragging) return; handleSwipe(); isDragging = false; } function handleSwipe() { if (!moveX) return; const diffX = moveX - startX; // If swipe distance is significant if (Math.abs(diffX) > 50) { // Swipe right (previous card) if (diffX > 0 && currentCardIndex < cards.length - 1) { currentCardIndex++; arrangeCards(); } // Swipe left (next card) else if (diffX < 0 && currentCardIndex > 0) { currentCardIndex--; arrangeCards(); } } moveX = null; } function arrangeCards() { cards.forEach((card, index) => { if (index === currentCardIndex) { card.style.transform = ''; card.style.opacity = '1'; card.style.zIndex = '3'; } else if (index < currentCardIndex) { card.style.transform = `translateX(${15 * (index - currentCardIndex)}px) translateY(${15 * (index - currentCardIndex)}px) scale(${0.95 + 0.05 * (index - currentCardIndex)})`; card.style.opacity = `${0.7 + 0.15 * (index - currentCardIndex)}`; card.style.zIndex = `${2 - (currentCardIndex - index)}`; } else { card.style.transform = `translateX(${15 * (index - currentCardIndex)}px) translateY(${15 * (index - currentCardIndex)}px) scale(${0.95 - 0.05 * (index - currentCardIndex)})`; card.style.opacity = `${0.85 - 0.15 * (index - currentCardIndex)}`; card.style.zIndex = `${2 - (index - currentCardIndex)}`; } // Reset any flipped cards when rearranging card.classList.remove('flipped'); // Hide any open summaries const summary = card.querySelector('.card-summary'); if (summary) { summary.style.top = '100%'; } }); // Show loading animation when changing cards const currentCard = cards[currentCardIndex]; const loader = currentCard.querySelector('.card-loader'); if (loader) { loader.style.opacity = '1'; setTimeout(() => { loader.style.opacity = '0'; }, 600); } } // Filter functionality for transactions const filterOptions = document.querySelectorAll('.filter-option'); const transactions = document.querySelectorAll('.transaction-item'); filterOptions.forEach(option => { option.addEventListener('click', function() { // Update active state filterOptions.forEach(opt => opt.classList.remove('active')); this.classList.add('active'); const filter = this.textContent.toLowerCase(); transactions.forEach(transaction => { const amount = transaction.querySelector('.transaction-amount'); if (filter === 'all') { transaction.style.display = 'flex'; } else if (filter === 'income' && amount.classList.contains('positive')) { transaction.style.display = 'flex'; } else if (filter === 'expense' && amount.classList.contains('negative')) { transaction.style.display = 'flex'; } else { transaction.style.display = 'none'; } }); }); }); // Nav item clicks const navItems = document.querySelectorAll('.nav-item'); navItems.forEach(item => { item.addEventListener
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Insurance Claims Interface</title> <style> :root { --primary: #2c3e50; --secondary: #34495e; --accent: #3498db; --accent-alt: #2980b9; --success: #27ae60; --warning: #f39c12; --danger: #e74c3c; --light: #ecf0f1; --dark: #2c3e50; --shadow: rgba(0, 0, 0, 0.1); --card-radius: 12px; --transition: all 0.3s ease; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } body { background-color: #f5f8fa; color: var(--dark); display: flex; flex-direction: column; min-height: 100vh; padding: 1.5rem; overflow-x: hidden; } .container { max-width: 700px; margin: 0 auto; width: 100%; } header { margin-bottom: 1.5rem; } .header-content { display: flex; align-items: center; justify-content: space-between; } .logo { font-size: 1.5rem; font-weight: 700; color: var(--primary); display: flex; align-items: center; gap: 0.5rem; } .logo-icon { background-color: var(--accent); color: white; width: 32px; height: 32px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 1rem; } .nav-actions { display: flex; gap: 1rem; } .nav-btn { background: none; border: none; color: var(--primary); cursor: pointer; display: flex; align-items: center; gap: 0.5rem; font-size: 0.9rem; padding: 0.5rem; border-radius: 6px; transition: var(--transition); } .nav-btn:hover { background-color: rgba(44, 62, 80, 0.05); } .card-summary { background-color: white; border-radius: var(--card-radius); box-shadow: 0 4px 12px var(--shadow); padding: 1.5rem; margin-bottom: 1.5rem; position: relative; overflow: hidden; } .summary-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 1.5rem; } .summary-title { font-size: 1.2rem; font-weight: 600; margin-bottom: 0.25rem; color: var(--primary); } .summary-subtitle { font-size: 0.85rem; color: #64748b; } .card-info { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; margin-bottom: 1.5rem; } .info-item { position: relative; } .info-label { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; color: #64748b; margin-bottom: 0.25rem; } .info-value { font-size: 0.95rem; font-weight: 500; color: var(--dark); } .masked-card { display: flex; align-items: center; gap: 0.5rem; } .card-icon { font-size: 1.2rem; color: var(--accent); } .claims-list { margin-top: 2rem; } .claim-card { border-radius: var(--card-radius); background-color: white; box-shadow: 0 2px 8px var(--shadow); padding: 1.25rem; margin-bottom: 1rem; cursor: pointer; transition: var(--transition); border-left: 4px solid transparent; position: relative; overflow: hidden; } .claim-card:hover { transform: translateY(-2px); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12); } .claim-card.pending { border-left-color: var(--warning); } .claim-card.approved { border-left-color: var(--success); } .claim-card.denied { border-left-color: var(--danger); } .claim-card.new { border-left-color: var(--accent); } .claim-pattern { position: absolute; top: 0; right: 0; width: 100px; height: 100%; opacity: 0.05; pointer-events: none; transition: var(--transition); } .claim-card:hover .claim-pattern { opacity: 0.08; } .claim-header { display: flex; justify-content: space-between; align-items: flex-start; } .claim-title { font-weight: 600; color: var(--primary); margin-bottom: 0.25rem; } .claim-date { font-size: 0.8rem; color: #64748b; } .claim-status { font-size: 0.8rem; font-weight: 500; padding: 0.25rem 0.5rem; border-radius: 4px; text-transform: uppercase; } .status-pending { background-color: rgba(243, 156, 18, 0.1); color: var(--warning); } .status-approved { background-color: rgba(39, 174, 96, 0.1); color: var(--success); } .status-denied { background-color: rgba(231, 76, 60, 0.1); color: var(--danger); } .status-new { background-color: rgba(52, 152, 219, 0.1); color: var(--accent); } .claim-details { margin-top: 1rem; padding-top: 1rem; border-top: 1px solid #e2e8f0; font-size: 0.9rem; display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1rem; } .claim-detail-item { display: flex; flex-direction: column; } .claim-detail-label { font-size: 0.75rem; color: #64748b; margin-bottom: 0.25rem; } .claim-detail-value { font-weight: 500; } .claim-expanded { max-height: 0; overflow: hidden; transition: max-height 0.3s ease; } .claim-card.active .claim-expanded { max-height: 500px; } .claim-timeline { margin-top: 1.5rem; padding-left: 1.5rem; position: relative; } .claim-timeline::before { content: ''; position: absolute; left: 0; top: 8px; bottom: 8px; width: 2px; background-color: #e2e8f0; } .timeline-item { position: relative; padding-bottom: 1rem; } .timeline-item::before { content: ''; position: absolute; left: -1.5rem; top: 4px; width: 8px; height: 8px; border-radius: 50%; background-color: var(--accent); } .timeline-item.completed::before { background-color: var(--success); } .timeline-date { font-size: 0.7rem; color: #64748b; margin-bottom: 0.25rem; } .timeline-event { font-size: 0.85rem; } .action-button { background-color: var(--accent); color: white; border: none; padding: 0.75rem 1.25rem; border-radius: 6px; font-weight: 500; cursor: pointer; transition: var(--transition); display: flex; align-items: center; gap: 0.5rem; } .action-button:hover { background-color: var(--accent-alt); } .action-button-outline { background-color: transparent; color: var(--accent); border: 1px solid var(--accent); } .action-button-outline:hover { background-color: rgba(52, 152, 219, 0.1); } .claim-actions { display: flex; gap: 0.75rem; margin-top: 1.5rem; } .filter-section { display: flex; gap: 0.5rem; margin-bottom: 1.5rem; flex-wrap: wrap; } .filter-pill { padding: 0.5rem 1rem; background-color: white; border-radius: 20px; font-size: 0.85rem; color: var(--primary); border: 1px solid #e2e8f0; cursor: pointer; transition: var(--transition); } .filter-pill:hover, .filter-pill.active { background-color: var(--accent); color: white; border-color: var(--accent); } .section-title { font-size: 1.1rem; font-weight: 600; margin-bottom: 1rem; color: var(--primary); } .pulse { position: relative; } .pulse::after { content: ''; position: absolute; top: 0; right: -5px; width: 8px; height: 8px; background-color: var(--danger); border-radius: 50%; } .pulse::before { content: ''; position: absolute; top: -2px; right: -7px; width: 12px; height: 12px; background-color: var(--danger); border-radius: 50%; animation: pulse 1.5s infinite; opacity: 0.6; } @keyframes pulse { 0% { transform: scale(0.8); opacity: 0.8; } 70% { transform: scale(1.5); opacity: 0; } 100% { transform: scale(0.8); opacity: 0; } } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .fade-in { animation: fadeIn 0.5s ease-in-out; } .badge-premium { font-size: 0.7rem; background: linear-gradient(135deg, #3498db 0%, #2980b9 100%); color: white; padding: 0.25rem 0.5rem; border-radius: 4px; margin-left: 0.5rem; position: relative; overflow: hidden; text-transform: uppercase; font-weight: 600; letter-spacing: 0.05em; } .badge-premium::before { content: ''; position: absolute; top: -10px; left: -10px; width: 40px; height: 40px; background-color: rgba(255, 255, 255, 0.2); transform: rotate(45deg); animation: shimmer 2s infinite; } @keyframes shimmer { 0% { transform: translateX(-60px) rotate(45deg); } 100% { transform: translateX(200px) rotate(45deg); } } .spinner { width: 20px; height: 20px; border: 2px solid rgba(255, 255, 255, 0.3); border-radius: 50%; border-top-color: white; animation: spin 0.8s linear infinite; display: none; } @keyframes spin { to { transform: rotate(360deg); } } .loading .spinner { display: inline-block; } .loading .button-text { display: none; } .card-pattern { position: absolute; top: 0; right: 0; width: 150px; height: 100%; background: linear-gradient(45deg, transparent 49%, rgba(52, 152, 219, 0.03) 50%, rgba(52, 152, 219, 0.06) 100%); } .refresh-btn { background: none; border: none; color: var(--accent); cursor: pointer; display: flex; align-items: center; gap: 0.5rem; font-size: 0.85rem; transition: var(--transition); } .refresh-btn:hover { color: var(--accent-alt); } .refresh-icon { animation: none; transition: var(--transition); } .refresh-btn:hover .refresh-icon { animation: rotate 1s linear; } @keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* Tooltip */ .tooltip { position: relative; } .tooltip:hover::after { content: attr(data-tooltip); position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); background-color: var(--dark); color: white; padding: 0.5rem; border-radius: 4px; font-size: 0.75rem; white-space: nowrap; z-index: 10; margin-bottom: 0.5rem; } .tooltip:hover::before { content: ''; position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); border-width: 5px; border-style: solid; border-color: var(--dark) transparent transparent transparent; z-index: 10; } @media (max-width: 600px) { body { padding: 1rem; } .card-info { grid-template-columns: 1fr; gap: 1rem; } .claim-header { flex-direction: column; gap: 0.5rem; } .claim-details { grid-template-columns: 1fr; } .claim-actions { flex-direction: column; } .action-button { width: 100%; justify-content: center; } } </style> </head> <body> <div class="container"> <header> <div class="header-content"> <div class="logo"> <div class="logo-icon"> <i class="shield">S</i> </div> <span>SecureClaimPro</span> </div> <div class="nav-actions"> <button class="nav-btn pulse tooltip" data-tooltip="You have 2 notifications"> <i>📬</i> <span>Notifications</span> </button> <button class="nav-btn"> <i>👤</i> <span>Account</span> </button> </div> </div> </header> <div class="card-summary"> <div class="card-pattern"></div> <div class="summary-header"> <div> <h2 class="summary-title">Health Insurance Policy</h2> <p class="summary-subtitle">Premium Family Plan <span class="badge-premium">Gold Tier</span></p> </div> <button class="refresh-btn"> <i class="refresh-icon">🔄</i> <span>Refresh</span> </button> </div> <div class="card-info"> <div class="info-item"> <p class="info-label">Policy Number</p> <p class="info-value">HD-28573-9145</p> </div> <div class="info-item"> <p class="info-label">Payment Method</p> <p class="info-value masked-card"> <i class="card-icon">💳</i> •••• 4278 </p> </div> <div class="info-item"> <p class="info-label">Billing Period</p> <p class="info-value">May 1 - May 31, 2023</p> </div> <div class="info-item"> <p class="info-label">Next Payment</p> <p class="info-value">$185.50 on June 1, 2023</p> </div> </div> </div> <div class="filter-section"> <button class="filter-pill active" data-filter="all">All Claims</button> <button class="filter-pill" data-filter="pending">Pending</button> <button class="filter-pill" data-filter="approved">Approved</button> <button class="filter-pill" data-filter="denied">Denied</button> <button class="filter-pill" data-filter="new">New</button> </div> <div class="section-title">Recent Claims</div> <div class="claims-list"> <div class="claim-card new" data-category="new"> <div class="claim-pattern" style="background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjUiPgo8cmVjdCB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBmaWxsPSIjM2M5N2QzIj48L3JlY3Q+CjxwYXRoIGQ9Ik0wIDVMNSAwWk02IDRMNCA2Wk0tMSAxTDEgLTFaIiBzdHJva2U9IiMzNDk4ZGIiIHN0cm9rZS13aWR0aD0iMSI+PC9wYXRoPgo8L3N2Zz4=');"></div> <div class="claim-header"> <div> <h3 class="claim-title">Urgent Care Visit</h3> <p class="claim-date">Filed on May 18, 2023</p> </div> <span class="claim-status status-new">New</span> </div> <div class="claim-details"> <div class="claim-detail-item"> <span class="claim-detail-label">Claim ID</span> <span class="claim-detail-value">CLM-2023051803</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Provider</span> <span class="claim-detail-value">City Urgent Care</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Service Date</span> <span class="claim-detail-value">May 15, 2023</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Billed Amount</span> <span class="claim-detail-value">$325.00</span> </div> </div> <div class="claim-expanded"> <div class="claim-timeline"> <div class="timeline-item completed"> <p class="timeline-date">May 15, 2023 - 10:30 AM</p> <p class="timeline-event">Service provided at City Urgent Care</p> </div> <div class="timeline-item completed"> <p class="timeline-date">May 18, 2023 - 2:45 PM</p> <p class="timeline-event">Claim filed by provider</p> </div> <div class="timeline-item"> <p class="timeline-date">Estimated: May 25, 2023</p> <p class="timeline-event">Initial review completion</p> </div> </div> <div class="claim-actions"> <button class="action-button"> <span class="button-text">Upload Documents</span> <div class="spinner"></div> </button> <button class="action-button action-button-outline">View Details</button> </div> </div> </div> <div class="claim-card pending" data-category="pending"> <div class="claim-pattern" style="background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjUiPgo8cmVjdCB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBmaWxsPSIjZjM5YzEyIj48L3JlY3Q+CjxwYXRoIGQ9Ik0wIDVMNSAwWk02IDRMNCA2Wk0tMSAxTDEgLTFaIiBzdHJva2U9IiNmMzljMTIiIHN0cm9rZS13aWR0aD0iMSI+PC9wYXRoPgo8L3N2Zz4=');"></div> <div class="claim-header"> <div> <h3 class="claim-title">MRI Scan - Cervical Spine</h3> <p class="claim-date">Filed on May 10, 2023</p> </div> <span class="claim-status status-pending">Pending</span> </div> <div class="claim-details"> <div class="claim-detail-item"> <span class="claim-detail-label">Claim ID</span> <span class="claim-detail-value">CLM-2023051002</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Provider</span> <span class="claim-detail-value">Metro Imaging Center</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Service Date</span> <span class="claim-detail-value">May 8, 2023</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Billed Amount</span> <span class="claim-detail-value">$1,850.75</span> </div> </div> <div class="claim-expanded"> <div class="claim-timeline"> <div class="timeline-item completed"> <p class="timeline-date">May 8, 2023 - 1:15 PM</p> <p class="timeline-event">Service provided at Metro Imaging Center</p> </div> <div class="timeline-item completed"> <p class="timeline-date">May 10, 2023 - 9:30 AM</p> <p class="timeline-event">Claim filed by provider</p> </div> <div class="timeline-item completed"> <p class="timeline-date">May 12, 2023 - 11:20 AM</p> <p class="timeline-event">Initial review completed</p> </div> <div class="timeline-item"> <p class="timeline-date">Current Status</p> <p class="timeline-event">Additional information requested from provider</p> </div> </div> <div class="claim-actions"> <button class="action-button"> <span class="button-text">Submit Information</span> <div class="spinner"></div> </button> <button class="action-button action-button-outline">View Details</button> </div> </div> </div> <div class="claim-card approved" data-category="approved"> <div class="claim-pattern" style="background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjUiPgo8cmVjdCB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBmaWxsPSIjMjdhZTYwIj48L3JlY3Q+CjxwYXRoIGQ9Ik0wIDVMNSAwWk02IDRMNCA2Wk0tMSAxTDEgLTFaIiBzdHJva2U9IiMyN2FlNjAiIHN0cm9rZS13aWR0aD0iMSI+PC9wYXRoPgo8L3N2Zz4=');"></div> <div class="claim-header"> <div> <h3 class="claim-title">Annual Physical Checkup</h3> <p class="claim-date">Filed on April 25, 2023</p> </div> <span class="claim-status status-approved">Approved</span> </div> <div class="claim-details"> <div class="claim-detail-item"> <span class="claim-detail-label">Claim ID</span> <span class="claim-detail-value">CLM-2023042501</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Provider</span> <span class="claim-detail-value">Dr. Rodriguez Family Practice</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Service Date</span> <span class="claim-detail-value">April 22, 2023</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Billed Amount</span> <span class="claim-detail-value">$275.00</span> </div> </div> <div class="claim-expanded"> <div class="claim-timeline"> <div class="timeline-item completed"> <p class="timeline-date">April 22, 2023 - 9:00 AM</p> <p class="timeline-event">Service provided at Dr. Rodriguez Family Practice</p> </div> <div class="timeline-item completed"> <p class="timeline-date">April 25, 2023 - 2:15 PM</p> <p class="timeline-event">Claim filed by provider</p> </div> <div class="timeline-item completed"> <p class="timeline-date">April 28, 2023 - 10:45 AM</p> <p class="timeline-event">Initial review completed</p> </div> <div class="timeline-item completed"> <p class="timeline-date">May 2, 2023 - 3:30 PM</p> <p class="timeline-event">Claim approved - $275.00 fully covered (100%)</p> </div> <div class="timeline-item completed"> <p class="timeline-date">May 5, 2023 - 9:20 AM</p> <p class="timeline-event">Payment sent to provider</p> </div> </div> <div class="claim-actions"> <button class="action-button"> <span class="button-text">Download EOB</span> <div class="spinner"></div> </button> <button class="action-button action-button-outline">View Details</button> </div> </div> </div> <div class="claim-card denied" data-category="denied"> <div class="claim-pattern" style="background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjUiPgo8cmVjdCB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBmaWxsPSIjZTc0YzNjIj48L3JlY3Q+CjxwYXRoIGQ9Ik0wIDVMNSAwWk02IDRMNCA2Wk0tMSAxTDEgLTFaIiBzdHJva2U9IiNlNzRjM2MiIHN0cm9rZS13aWR0aD0iMSI+PC9wYXRoPgo8L3N2Zz4=');"></div> <div class="claim-header"> <div> <h3 class="claim-title">Dermatology Consultation</h3> <p class="claim-date">Filed on April 15, 2023</p> </div> <span class="claim-status status-denied">Denied</span> </div> <div class="claim-details"> <div class="claim-detail-item"> <span class="claim-detail-label">Claim ID</span> <span class="claim-detail-value">CLM-2023041505</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Provider</span> <span class="claim-detail-value">Advanced Dermatology Clinic</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Service Date</span> <span class="claim-detail-value">April 12, 2023</span> </div> <div class="claim-detail-item"> <span class="claim-detail-label">Billed Amount</span> <span class="claim-detail-value">$425.50</span> </div> </div> <div class="claim-expanded"> <div class="claim-timeline"> <div class="timeline-item completed"> <p class="timeline-date">April 12, 2023 - 2:30 PM</p> <p class="timeline-event">Service provided at Advanced Dermatology Clinic</p> </div> <div class="timeline-item completed"> <p class="timeline-date">April 15, 2023 - 11:10 AM</p> <p class="timeline-event">Claim filed by provider</p> </div> <div class="timeline-item completed"> <p class="timeline-date">April 18, 2023 - 9:15 AM</p> <p class="timeline-event">Initial review completed</p> </div> <div class="timeline-item completed"> <p class="timeline-date">April 20, 2023 - 4:45 PM</p> <p class="timeline-event">Claim denied - Service requires pre-authorization</p> </div> </div> <div class="claim-actions"> <button class="action-button"> <span class="button-text">Appeal Decision</span> <div class="spinner"></div> </button> <button class="action-button action-button-outline">View Details</button> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // Toggle claim card expanded sections const claimCards = document.querySelectorAll('.claim-card'); claimCards.forEach(card => { card.addEventListener('click', function() { const wasActive = this.classList.contains('active'); // Close all active cards first claimCards.forEach(c => { c.classList.remove('active'); }); // If the clicked card wasn't active, make it active if (!wasActive) { this.classList.add('active'); this.classList.add('fade-in'); // Remove the animation class after it completes setTimeout(() => { this.classList.remove('fade-in'); }, 500); } }); }); // Filter functionality const filterPills = document.querySelectorAll('.filter-pill'); filterPills.forEach(pill => { pill.addEventListener('click', function() { const filter = this.getAttribute('data-filter'); // Remove active class from all pills filterPills.forEach(p => { p.classList.remove('active'); }); // Add active class to clicked pill this.classList.add('active'); // Show/hide claims based on filter claimCards.forEach(card => { if (filter === 'all') { card.style.display = 'block'; } else { const category = card.getAttribute('data-category'); card.style.display = category === filter ? 'block' : 'none'; } }); }); }); // Action button loading state simulation const actionButtons = document.querySelectorAll('.action-button'); actionButtons.forEach(button => { button.addEventListener('click', function(e) { e.stopPropagation(); // Prevent card toggle // Only simulate loading if it's not the "View Details" button if (!this.classList.contains('action-button-outline')) { this.classList.add('loading'); // Simulate loading setTimeout(() => { this.classList.remove('loading'); }, 1500); } }); }); // Refresh button animation const refreshBtn = document.querySelector('.refresh-btn'); refreshBtn.addEventListener('click', function() { const icon = this.querySelector('.refresh-icon'); // Apply the animation icon.style.animation = 'rotate 1s linear'; // Remove animation after it completes setTimeout(() => { icon.style.animation = 'none'; }, 1000); }); }); </script> </body> </html>
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>NexusBank Virtual Card</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', 'SF Pro Display', Roboto, -apple-system, BlinkMacSystemFont, sans-serif; } :root { --primary: #6E45E1; --primary-hover: #7d58f2; --secondary: #FF5D8F; --tertiary: #5DFFBE; --dark: #15162C; --light: #F8F9FD; --transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); --card-shadow: 0 15px 35px rgba(14, 8, 45, 0.2); --btn-shadow: 0 6px 12px rgba(110, 69, 225, 0.25); } body { background: var(--light); height: 700px; display: flex; justify-content: center; align-items: center; overflow: hidden; width: 100%; } .container { width: 100%; max-width: 700px; padding: 20px; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; height: 100%; position: relative; overflow: hidden; } .header { width: 100%; display: flex; justify-content: space-between; align-items: center; margin-bottom: 30px; } .logo { font-weight: 700; font-size: 24px; color: var(--dark); display: flex; align-items: center; } .logo span { display: inline-block; width: 12px; height: 12px; border-radius: 50%; background: var(--primary); margin-right: 8px; position: relative; } .logo span:after { content: ''; position: absolute; width: 12px; height: 12px; border-radius: 50%; background: var(--secondary); right: -5px; top: -5px; opacity: 0.7; } .user-info { display: flex; align-items: center; } .avatar { width: 35px; height: 35px; border-radius: 50%; background: linear-gradient(135deg, var(--primary), var(--secondary)); display: flex; align-items: center; justify-content: center; color: white; font-weight: 600; margin-right: 10px; } .user-name { font-weight: 500; font-size: 14px; } .card-container { width: 100%; perspective: 1500px; margin-bottom: 30px; } .card { width: 100%; height: 220px; background: linear-gradient(135deg, #2E2E65, #37375D); background-size: 200% 200%; animation: gradientFlow 15s ease infinite; border-radius: 20px; box-shadow: var(--card-shadow); padding: 25px; color: white; position: relative; transform-style: preserve-3d; transition: transform 0.8s ease; cursor: pointer; overflow: hidden; } .card-front, .card-back { position: absolute; width: 100%; height: 100%; top: 0; left: 0; backface-visibility: hidden; padding: 25px; } .card-back { transform: rotateY(180deg); } .card.flipped { transform: rotateY(180deg); } .card:before { content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: radial-gradient(rgba(255, 255, 255, 0.1), transparent 60%); transform: rotate(-45deg); pointer-events: none; } .card-chip { width: 50px; height: 35px; background: linear-gradient(135deg, #FFD700, #FFA500); border-radius: 6px; margin-bottom: 25px; position: relative; overflow: hidden; } .card-chip:before { content: ''; position: absolute; width: 60%; height: 60%; background: #37375D; top: 20%; left: 20%; border-radius: 4px; } .card-chip:after { content: ''; position: absolute; width: 90%; height: 1px; background: rgba(255, 255, 255, 0.3); top: 50%; left: 5%; } .card-type { position: absolute; right: 25px; top: 25px; font-weight: 700; font-size: 22px; text-transform: uppercase; letter-spacing: 1px; color: rgba(255, 255, 255, 0.9); display: flex; align-items: center; } .card-type:before { content: ''; width: 25px; height: 25px; margin-right: 10px; background: linear-gradient(135deg, var(--primary), var(--secondary)); border-radius: 50%; display: inline-block; } .card-number { font-size: 22px; letter-spacing: 2px; font-weight: 500; margin-bottom: 25px; } .card-name, .card-expiry { font-size: 14px; color: rgba(255, 255, 255, 0.7); margin-bottom: 5px; } .card-name-value, .card-expiry-value { font-size: 16px; font-weight: 500; color: white; } .card-info { display: flex; justify-content: space-between; align-items: flex-end; } .card-security { background: rgba(255, 255, 255, 0.2); height: 40px; margin: 20px 0; position: relative; } .card-security:after { content: 'CVV'; position: absolute; right: 10px; top: 50%; transform: translateY(-50%); color: rgba(0, 0, 0, 0.5); font-size: 14px; font-weight: 600; } .card-back-logo { text-align: right; font-weight: 700; font-size: 18px; color: rgba(255, 255, 255, 0.9); margin-top: 25px; } .card-actions { width: 100%; display: flex; justify-content: center; gap: 15px; margin-bottom: 30px; } .btn { padding: 12px 24px; border-radius: 50px; border: none; font-size: 14px; font-weight: 600; cursor: pointer; transition: var(--transition); outline: none; display: flex; align-items: center; justify-content: center; } .btn-primary { background: var(--primary); color: white; box-shadow: var(--btn-shadow); } .btn-primary:hover { background: var(--primary-hover); transform: translateY(-2px); box-shadow: 0 8px 15px rgba(110, 69, 225, 0.35); } .btn-outline { background: transparent; color: var(--primary); border: 2px solid var(--primary); } .btn-outline:hover { background: rgba(110, 69, 225, 0.1); transform: translateY(-2px); } .btn i { margin-right: 8px; } .recent-transactions { width: 100%; background: white; border-radius: 20px; padding: 20px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05); transition: var(--transition); } .recent-transactions:hover { box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1); } .section-title { font-weight: 700; font-size: 18px; margin-bottom: 15px; color: var(--dark); } .transaction { display: flex; align-items: center; justify-content: space-between; padding: 15px 0; border-bottom: 1px solid rgba(0, 0, 0, 0.05); transition: var(--transition); } .transaction:last-child { border-bottom: none; } .transaction:hover { transform: translateX(5px); } .transaction-icon { width: 40px; height: 40px; border-radius: 10px; background: rgba(110, 69, 225, 0.1); display: flex; align-items: center; justify-content: center; margin-right: 15px; color: var(--primary); font-size: 16px; } .transaction-details { flex: 1; } .transaction-name { font-weight: 600; font-size: 14px; margin-bottom: 4px; color: var(--dark); } .transaction-date { font-size: 12px; color: #888; } .transaction-info { display: flex; align-items: center; } .transaction-amount { font-weight: 700; font-size: 16px; color: var(--dark); } .success-popup { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.7); background: white; border-radius: 20px; padding: 30px; text-align: center; box-shadow: 0 15px 45px rgba(0, 0, 0, 0.15); opacity: 0; visibility: hidden; transition: all 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); z-index: 100; width: 85%; max-width: 400px; } .success-popup.show { opacity: 1; visibility: visible; transform: translate(-50%, -50%) scale(1); } .success-icon { width: 70px; height: 70px; border-radius: 50%; background: linear-gradient(135deg, var(--tertiary), var(--primary)); display: flex; align-items: center; justify-content: center; margin: 0 auto 20px; color: white; font-size: 30px; } .success-title { font-weight: 700; font-size: 22px; margin-bottom: 10px; color: var(--dark); } .success-message { font-size: 14px; color: #666; margin-bottom: 25px; } .backdrop { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(5px); opacity: 0; visibility: hidden; transition: all 0.3s ease; z-index: 99; } .backdrop.show { opacity: 1; visibility: visible; } .card-glow { position: absolute; width: 150px; height: 150px; background: radial-gradient(circle, rgba(110, 69, 225, 0.4) 0%, transparent 70%); border-radius: 50%; pointer-events: none; opacity: 0; transition: opacity 0.3s ease; } @keyframes gradientFlow { 0% {background-position: 0% 50%;} 50% {background-position: 100% 50%;} 100% {background-position: 0% 50%;} } @keyframes pulse { 0% {transform: scale(1);} 50% {transform: scale(1.05);} 100% {transform: scale(1);} } .pulse { animation: pulse 1.5s infinite; } .card-element { opacity: 0; transform: translateY(10px); transition: all 0.6s ease; } .animate-in { opacity: 1; transform: translateY(0); } .notification-dot { position: absolute; width: 8px; height: 8px; background: var(--secondary); border-radius: 50%; top: 5px; right: 5px; } /* Responsive adjustments */ @media (max-width: 480px) { .card { height: 180px; padding: 20px; } .card-front, .card-back { padding: 20px; } .card-number { font-size: 18px; } .btn { padding: 10px 18px; font-size: 13px; } .recent-transactions { padding: 15px; } .transaction-icon { width: 35px; height: 35px; } } </style> </head> <body> <div class="container"> <div class="header"> <div class="logo"><span></span>NexusBank</div> <div class="user-info"> <div class="avatar">JD</div> <div class="user-name">Jane Doe</div> </div> </div> <div class="card-container"> <div class="card"> <div class="card-front"> <div class="card-chip card-element"></div> <div class="card-type card-element">Platinum</div> <div class="card-number card-element">•••• •••• •••• 4589</div> <div class="card-info"> <div class="card-holder card-element"> <div class="card-name">CARD HOLDER</div> <div class="card-name-value">JANE DOE</div> </div> <div class="card-expires card-element"> <div class="card-expiry">EXPIRES</div> <div class="card-expiry-value">09/26</div> </div> </div> </div> <div class="card-back"> <div class="card-security"></div> <div class="card-back-logo">NexusBank</div> </div> </div> <div class="card-glow"></div> </div> <div class="card-actions"> <button class="btn btn-primary" id="freezeCard"> <i>❄️</i> Freeze Card </button> <button class="btn btn-outline" id="virtualPayment"> <i>✨</i> Instant Pay </button> </div> <div class="recent-transactions"> <div class="section-title">Recent Transactions</div> <div class="transaction"> <div class="transaction-info"> <div class="transaction-icon">🛒</div> <div class="transaction-details"> <div class="transaction-name">Amazon.com</div> <div class="transaction-date">Today, 2:34 PM</div> </div> </div> <div class="transaction-amount">-$89.95</div> </div> <div class="transaction"> <div class="transaction-info"> <div class="transaction-icon">☕</div> <div class="transaction-details"> <div class="transaction-name">Starbucks</div> <div class="transaction-date">Yesterday, 9:15 AM</div> </div> </div> <div class="transaction-amount">-$5.75</div> </div> <div class="transaction"> <div class="transaction-info"> <div class="transaction-icon">🚕</div> <div class="transaction-details"> <div class="transaction-name">Uber</div> <div class="transaction-date">Oct 12, 8:45 PM</div> </div> </div> <div class="transaction-amount">-$22.50</div> </div> </div> <div class="success-popup" id="successPopup"> <div class="success-icon">✓</div> <div class="success-title">Payment Successful!</div> <div class="success-message">Your virtual payment has been processed securely. The merchant will receive confirmation shortly.</div> <button class="btn btn-primary" id="closePopup">Done</button> </div> <div class="backdrop" id="backdrop"></div> </div> <script> document.addEventListener('DOMContentLoaded', function() { const card = document.querySelector('.card'); const cardElements = document.querySelectorAll('.card-element'); const cardGlow = document.querySelector('.card-glow'); const freezeButton = document.getElementById('freezeCard'); const virtualPaymentButton = document.getElementById('virtualPayment'); const successPopup = document.getElementById('successPopup'); const backdrop = document.getElementById('backdrop'); const closePopupButton = document.getElementById('closePopup'); let isFrozen = false; // Animate card elements in with delay setTimeout(() => { cardElements.forEach((element, index) => { setTimeout(() => { element.classList.add('animate-in'); }, index * 150); }); }, 500); // Card flip functionality card.addEventListener('click', function() { this.classList.toggle('flipped'); }); // Card hover glow effect card.addEventListener('mousemove', function(e) { const rect = this.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; cardGlow.style.opacity = '1'; cardGlow.style.left = `${x}px`; cardGlow.style.top = `${y}px`; }); card.addEventListener('mouseleave', function() { cardGlow.style.opacity = '0'; }); // Touch support for mobile card.addEventListener('touchmove', function(e) { const touch = e.touches[0]; const rect = this.getBoundingClientRect(); const x = touch.clientX - rect.left; const y = touch.clientY - rect.top; cardGlow.style.opacity = '1'; cardGlow.style.left = `${x}px`; cardGlow.style.top = `${y}px`; }); card.addEventListener('touchend', function() { cardGlow.style.opacity = '0'; }); // Freeze card functionality freezeButton.addEventListener('click', function() { if (!isFrozen) { isFrozen = true; card.style.filter = 'brightness(0.8) saturate(0.8)'; card.style.boxShadow = '0 15px 35px rgba(14, 8, 45, 0.1)'; this.innerHTML = '<i>🔄</i> Unfreeze Card'; this.classList.remove('btn-primary'); this.classList.add('btn-outline'); // Show notification showNotification('Card frozen successfully. All transactions will be blocked until unfrozen.'); } else { isFrozen = false; card.style.filter = ''; card.style.boxShadow = ''; this.innerHTML = '<i>❄️</i> Freeze Card'; this.classList.remove('btn-outline'); this.classList.add('btn-primary'); // Show notification showNotification('Card unfrozen. You can now use it for transactions.'); } }); // Virtual payment functionality virtualPaymentButton.addEventListener('click', function() { if (isFrozen) { showNotification('Cannot make payments when card is frozen. Please unfreeze first.'); return; } this.classList.add('pulse'); setTimeout(() => { backdrop.classList.add('show'); successPopup.classList.add('show'); this.classList.remove('pulse'); }, 1000); }); // Close success popup closePopupButton.addEventListener('click', function() { backdrop.classList.remove('show'); successPopup.classList.remove('show'); }); // Show notification function function showNotification(message) { // Create notification element const notification = document.createElement('div'); notification.style.position = 'fixed'; notification.style.bottom = '-100px'; notification.style.left = '50%'; notification.style.transform = 'translateX(-50%)'; notification.style.padding = '15px 25px'; notification.style.background = 'rgba(21, 22, 44, 0.95)'; notification.style.color = 'white'; notification.style.borderRadius = '10px'; notification.style.boxShadow = '0 5px 15px rgba(0, 0, 0, 0.2)'; notification.style.transition = 'all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1)'; notification.style.zIndex = '1000'; notification.style.maxWidth = '80%'; notification.style.fontSize = '14px'; notification.style.textAlign = 'center'; notification.innerText = message; document.body.appendChild(notification); // Animate in setTimeout(() => { notification.style.bottom = '30px'; }, 100); // Animate out and remove setTimeout(() => { notification.style.bottom = '-100px'; setTimeout(() => { notification.remove(); }, 300); }, 4000); } // Add interactive effect to transactions const transactions = document.querySelectorAll('.transaction'); transactions.forEach(transaction => { transaction.addEventListener('mouseenter', function() { this.style.background = 'rgba(110, 69, 225, 0.05)'; this.style.borderRadius = '10px'; }); transaction.addEventListener('mouseleave', function() { this.style.background = ''; this.style.borderRadius = ''; }); transaction.addEventListener('click', function() { const amount = this.querySelector('.transaction-amount').innerText; const merchant = this.querySelector('.transaction-name').innerText; showNotification(`Transaction details: ${merchant} ${amount}`); }); }); }); </script> </body> </html>