/* Keyframes */ @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideIn { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } } @keyframes spin { to { transform: rotate(360deg); } } @keyframes shimmer { 0% { background-position: -1000px 0; } 100% { background-position: 1000px 0; } } /* Animation Classes */ .fade-in { animation: fadeIn var(--transition-normal) forwards; } .slide-in { animation: slideIn var(--transition-normal) forwards; } .scale-in { animation: scaleIn var(--transition-normal) forwards; } /* Loading Spinner */ .loading-spinner { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.8); display: flex; align-items: center; justify-content: center; z-index: 3000; } .spinner { width: 50px; height: 50px; border: 3px solid var(--gray-200); border-top-color: var(--primary-color); border-radius: 50%; animation: spin 1s infinite linear; } /* Skeleton Loading */ .skeleton { background: linear-gradient(90deg, var(--gray-200) 25%, var(--gray-300) 37%, var(--gray-200) 63%); background-size: 400% 100%; animation: shimmer 1.4s infinite; } /* Notification System */ .notification-container { position: fixed; top: 1rem; right: 1rem; z-index: 2500; display: flex; flex-direction: column; gap: 0.5rem; } .notification { padding: 1rem 1.5rem; border-radius: var(--border-radius-md); background: var(--white); box-shadow: var(--shadow-md); display: flex; align-items: center; gap: 1rem; animation: slideIn var(--transition-normal); max-width: 300px; } .notification.success { border-left: 4px solid var(--success-color); } .notification.error { border-left: 4px solid var(--error-color); } .notification.info { border-left: 4px solid var(--primary-color); } /* Product Card Animations */ .product-card { opacity: 0; transform: translateY(20px); transition: all var(--transition-normal); } .product-card.visible { opacity: 1; transform: translateY(0); } .product-card:hover { transform: translateY(-10px); } /* Button Hover Effects */ .button-modern { position: relative; overflow: hidden; } .button-modern::after { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(to right, transparent 0%, rgba(255, 255, 255, 0.2) 50%, transparent 100%); transition: left 0.5s; } .button-modern:hover::after { left: 100%; } /* Cart Button Animation */ @keyframes bounce { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } } .cart-button.bounce { animation: bounce 0.5s; } /* Form Input Focus Effects */ .input-modern:focus { transform: translateY(-2px); } /* Image Hover Effects */ .product-image { overflow: hidden; } .product-image img { transition: transform var(--transition-normal); } .product-image:hover img { transform: scale(1.1); } /* Modal Animations */ @keyframes modalFadeIn { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } .modal.show .modal-content { animation: modalFadeIn var(--transition-normal); }