/* Additional custom styles for enhanced UX */ /* Loading spinner */ .spinner { border: 3px solid #f3f3f3; border-top: 3px solid var(--primary); border-radius: 50%; width: 40px; height: 40px; animation: spin 1s linear infinite; margin: 20px auto; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Toast notifications */ .toast { position: fixed; bottom: 20px; right: 20px; background: var(--card-bg); padding: 1rem 1.5rem; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.15); z-index: 1000; animation: slideIn 0.3s ease-out; } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* Progress bars */ .progress-bar { width: 100%; height: 8px; background: var(--border); border-radius: 4px; overflow: hidden; } .progress-fill { height: 100%; background: var(--primary); transition: width 0.3s ease; } /* Tooltips */ .tooltip { position: relative; display: inline-block; } .tooltip .tooltip-text { visibility: hidden; width: 200px; background-color: var(--text); color: white; text-align: center; border-radius: 6px; padding: 5px; position: absolute; z-index: 1; bottom: 125%; left: 50%; margin-left: -100px; opacity: 0; transition: opacity 0.3s; font-size: 0.875rem; } .tooltip:hover .tooltip-text { visibility: visible; opacity: 1; } /* Responsive tables */ .table-responsive { overflow-x: auto; } table { width: 100%; border-collapse: collapse; } table th, table td { padding: 0.75rem; text-align: left; border-bottom: 1px solid var(--border); } table th { background: var(--bg); font-weight: 600; color: var(--text); } /* Dark mode support (optional) */ @media (prefers-color-scheme: dark) { :root { --bg: #1f2937; --card-bg: #374151; --text: #f9fafb; --text-light: #9ca3af; --border: #4b5563; } }