/* Custom CSS for TradeFlow Bot - Glassmorphism & Animations */ /* Custom Font Import */ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap'); /* Root Variables */ :root { --primary: #0ea5e9; /* sky-500 */ --primary-dark: #0284c7; /* sky-600 */ --secondary: #8b5cf6; /* violet-500 */ --success: #10b981; /* emerald-500 */ --danger: #ef4444; /* red-500 */ --warning: #f59e0b; /* amber-500 */ } /* Base Styles */ body { font-family: 'Inter', sans-serif; } /* Glassmorphism Cards */ .glass-card { background: rgba(30, 41, 59, 0.6); /* slate-800 with opacity */ backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid rgba(148, 163, 184, 0.1); /* slate-400 with opacity */ box-shadow: 0 8px 32px rgba(2, 8, 20, 0.4); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .glass-card:hover { border-color: rgba(148, 163, 184, 0.2); box-shadow: 0 12px 40px rgba(2, 132, 199, 0.25); /* sky-600 with opacity */ transform: translateY(-2px); } /* Gradient Background */ .gradient-bg { background: linear-gradient(135deg, rgba(2, 6, 23, 0.9) 0%, rgba(15, 23, 42, 0.9) 100%); background-attachment: fixed; } /* Live Indicator Animation */ .live-indicator { color: var(--success); font-size: 0.75rem; font-weight: 700; letter-spacing: 0.1em; } .pulse-dot { width: 8px; height: 8px; background: var(--success); border-radius: 50%; animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(1.2); } } /* Custom Buttons */ .sky-button { background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%); color: white; transition: all 0.3s ease; position: relative; overflow: hidden; } .sky-button::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.6s; } .sky-button:hover::before { left: 100%; } .sky-button:hover { transform: translateY(-2px); box-shadow: 0 10px 25px rgba(14, 165, 233, 0.4); } /* Status Badges */ .status-badge { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem; font-weight: 600; letter-spacing: 0.05em; text-transform: uppercase; } .status-connected { background: rgba(16, 185, 129, 0.15); color: var(--success); border: 1px solid rgba(16, 185, 129, 0.3); } .status-disconnected { background: rgba(239, 68, 68, 0.15); color: var(--danger); border: 1px solid rgba(239, 68, 68, 0.3); } .status-pending { background: rgba(245, 158, 11, 0.15); color: var(--warning); border: 1px solid rgba(245, 158, 11, 0.3); } /* Scrollbar Styling */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: rgba(15, 23, 42, 0.5); } ::-webkit-scrollbar-thumb { background: var(--primary); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: var(--primary-dark); } /* Trading Signal Animation */ .signal-item { animation: slideIn 0.5s cubic-bezier(0.4, 0, 0.2, 1); border-left: 4px solid transparent; transition: all 0.3s ease; } .signal-item.buy { border-left-color: var(--success); } .signal-item.sell { border-left-color: var(--danger); } @keyframes slideIn { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } /* Exchange Status Card */ .exchange-status-item { transition: transform 0.3s ease, box-shadow 0.3s ease; } .exchange-status-item:hover { transform: translateX(5px); box-shadow: -4px 0 20px rgba(14, 165, 233, 0.2); } /* Table Row Hover */ tbody tr { transition: background-color 0.2s ease; } tbody tr:hover { background: rgba(30, 41, 59, 0.8); } /* Feather Icon Transitions */ .feather { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* Mobile Optimizations */ @media (max-width: 768px) { .glass-card { backdrop-filter: blur(8px); } .sky-button { padding: 0.75rem 1rem; } } /* Loading Skeleton */ .skeleton { background: linear-gradient(90deg, rgba(30, 41, 59, 0.4) 25%, rgba(51, 65, 85, 0.6) 50%, rgba(30, 41, 59, 0.4) 75%); background-size: 200% 100%; animation: loading 1.5s infinite; } @keyframes loading { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }