@use 'variables'; @use 'components'; @use 'enhanced-animations'; /* Enhanced Ripple Effects */ .ripple-effect { position: absolute; border-radius: 50%; background: rgba(255, 255, 255, 0.6); transform: scale(0); animation: ripple 0.6s linear; pointer-events: none; } @keyframes ripple { to { transform: scale(4); opacity: 0; } } /* Enhanced Keyword Pills */ .enhanced-pill { animation: pillSlideIn 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; transform: translateY(20px) scale(0.8); opacity: 0; .pill-text { font-weight: 600; letter-spacing: 0.3px; } .remove-keyword { transition: all 0.2s ease; border-radius: 50%; width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; &:hover { background: rgba(255, 255, 255, 0.2); transform: scale(1.2); } } } @keyframes pillSlideIn { to { transform: translateY(0) scale(1); opacity: 1; } } /* Enhanced Toast Styles */ .enhanced-toast { display: flex; align-items: center; gap: 12px; font-weight: 600; letter-spacing: 0.3px; .toast-icon { font-size: 1.2rem; animation: toastIconBounce 0.6s ease-out; } .toast-message { flex: 1; } &.toast-left { border-left: 3px solid #ff6b6b; background: linear-gradient(135deg, rgba(255, 107, 107, 0.1), rgba(0, 0, 0, 0.9)); } &.toast-right { border-left: 3px solid #51cf66; background: linear-gradient(135deg, rgba(81, 207, 102, 0.1), rgba(0, 0, 0, 0.9)); } &.toast-up { border-left: 3px solid #339af0; background: linear-gradient(135deg, rgba(51, 154, 240, 0.1), rgba(0, 0, 0, 0.9)); } &.toast-down { border-left: 3px solid #ffb84d; background: linear-gradient(135deg, rgba(255, 184, 77, 0.1), rgba(0, 0, 0, 0.9)); } } @keyframes toastIconBounce { 0%, 20%, 60%, 100% { transform: translateY(0) scale(1); } 40% { transform: translateY(-10px) scale(1.1); } 80% { transform: translateY(-5px) scale(1.05); } } /* Enhanced Error and No Images States */ .enhanced-message, .enhanced-error { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 20px; padding: 40px; text-align: center; animation: messageSlideIn 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275); .no-images-icon, .error-icon { font-size: 4rem; animation: iconFloat 3s ease-in-out infinite; } .no-images-text, .error-text { font-size: 1.2rem; font-weight: 600; color: var(--text-color); margin-bottom: 10px; } .retry-btn { padding: 12px 24px; background: var(--gradient-physics-primary); color: white; border: none; border-radius: 25px; font-weight: 600; cursor: pointer; transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); &:hover { transform: translateY(-3px) scale(1.05); box-shadow: 0 10px 20px rgba(102, 126, 234, 0.3); } &:active { transform: translateY(-1px) scale(0.98); } } } @keyframes messageSlideIn { from { opacity: 0; transform: translateY(30px) scale(0.9); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes iconFloat { 0%, 100% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(-10px) rotate(5deg); } } /* Enhanced Button States */ .action-btn { position: relative; overflow: hidden; &::after { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; background: rgba(255, 255, 255, 0.3); border-radius: 50%; transform: translate(-50%, -50%); transition: all 0.3s ease-out; pointer-events: none; } &:active::after { width: 200px; height: 200px; } } /* Enhanced Filter Button States */ .filter-btn { position: relative; overflow: hidden; &::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s ease; } &:hover::before { left: 100%; } &.active { box-shadow: 0 0 20px rgba(102, 126, 234, 0.4); &::after { content: ''; position: absolute; top: 2px; left: 2px; right: 2px; bottom: 2px; border: 1px solid rgba(255, 255, 255, 0.3); border-radius: inherit; pointer-events: none; } } } /* Enhanced Container Hover Effects - Removed for cleaner UX */ /* Performance Optimizations */ .enhanced-card, .enhanced-hint, .enhanced-decision, .enhanced-pill, .enhanced-toast { will-change: transform, opacity; backface-visibility: hidden; transform-style: preserve-3d; } /* Accessibility Enhancements */ @media (prefers-reduced-motion: reduce) { .enhanced-card, .enhanced-hint, .enhanced-decision, .enhanced-pill, .enhanced-toast { animation: none !important; transition: none !important; } .ripple-effect { display: none; } } /* High Contrast Mode */ @media (prefers-contrast: high) { .enhanced-hint { background: rgba(0, 0, 0, 0.95); border-width: 3px; color: white; } .enhanced-decision { filter: contrast(1.5); } .enhanced-toast { background: rgba(0, 0, 0, 0.95) !important; border-width: 2px; } } /* Dark Mode Support */ @media (prefers-color-scheme: dark) { :root { --background-color: #1a1a1a; --card-background: #2d2d2d; --text-color: #ffffff; --light-color: #3a3a3a; --dark-color: #ffffff; } .enhanced-card::before { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); } .enhanced-hint { background: rgba(45, 45, 45, 0.95); color: white; } .enhanced-message, .enhanced-error { .no-images-text, .error-text { color: #ffffff; } } } /* Print Styles */ @media print { .enhanced-hint, .enhanced-decision, .ripple-effect, .enhanced-toast { display: none !important; } .enhanced-card { transform: none !important; filter: none !important; box-shadow: none !important; } } /* Settings Panel Styles */ .settings-panel { position: fixed; top: 50%; right: 20px; transform: translateY(-50%); width: 320px; background: var(--card-background); border-radius: var(--border-radius); box-shadow: var(--shadow); z-index: 1500; opacity: 0; visibility: hidden; transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); border: 1px solid rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); &.show { opacity: 1; visibility: visible; transform: translateY(-50%) scale(1); } .settings-header { display: flex; justify-content: space-between; align-items: center; padding: 20px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); h3 { margin: 0; font-size: 1.2rem; font-weight: 600; color: var(--text-color); } .close-settings { background: none; border: none; font-size: 1.5rem; cursor: pointer; color: var(--text-color); width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; transition: all 0.2s ease; &:hover { background: rgba(255, 255, 255, 0.1); transform: rotate(90deg); } } } .settings-content { padding: 20px; } .setting-group { margin-bottom: 20px; label { display: block; margin-bottom: 8px; font-weight: 500; color: var(--text-color); input[type="checkbox"] { margin-right: 8px; } } select { width: 100%; padding: 10px; border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 8px; background: var(--light-color); color: var(--text-color); font-size: 0.9rem; &:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 2px rgba(30, 144, 255, 0.2); } } input[type="checkbox"] { width: 18px; height: 18px; accent-color: var(--primary-color); } } .settings-actions { display: flex; gap: 10px; margin-top: 20px; button { flex: 1; padding: 10px; border: none; border-radius: 8px; font-weight: 600; cursor: pointer; transition: all 0.2s ease; &.apply-btn { background: var(--primary-color); color: white; &:hover { background: #1c86e3; transform: translateY(-2px); } } &.reset-btn { background: var(--light-color); color: var(--text-color); &:hover { background: #e0e0e0; transform: translateY(-2px); } } } } } /* Settings Toggle Button */ .settings-toggle { position: fixed; bottom: 80px; right: 20px; width: 50px; height: 50px; background: var(--primary-color); color: white; border: none; border-radius: 50%; cursor: pointer; z-index: 1400; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 12px rgba(30, 144, 255, 0.3); transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); &:hover { transform: scale(1.1) rotate(90deg); box-shadow: 0 6px 20px rgba(30, 144, 255, 0.4); } &:active { transform: scale(0.95); } svg { transition: transform 0.3s ease; } &:hover svg { transform: rotate(90deg); } } /* Mobile Responsive Settings */ @media (max-width: 768px) { .settings-panel { right: 10px; left: 10px; width: auto; top: 50%; transform: translateY(-50%); &.show { transform: translateY(-50%); } } .settings-toggle { bottom: 100px; right: 15px; width: 45px; height: 45px; } }