/* Additional Custom Styles */ /* Smooth transitions for all interactive elements */ button, a, input, select { transition: all 0.2s ease-in-out; } /* Custom focus styles */ input:focus, select:focus, textarea:focus { outline: none; box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); } /* Calendar day hover effect */ .calendar-day { position: relative; overflow: hidden; } .calendar-day::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(135deg, transparent 0%, rgba(59, 130, 246, 0.03) 100%); opacity: 0; transition: opacity 0.3s ease; } .calendar-day:hover::before { opacity: 1; } /* Appointment card hover animation */ .calendar-day > div:last-child > div { transform: translateX(0); transition: transform 0.2s ease, opacity 0.2s ease; } .calendar-day:hover > div:last-child > div { transform: translateX(2px); } /* Sidebar text transition */ .sidebar-text { transition: opacity 0.2s ease, width 0.2s ease; } /* Custom scrollbar for webkit */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: #f1f5f9; } ::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: #94a3b8; } /* Mobile optimizations */ @media (max-width: 1024px) { .calendar-day { min-height: 80px; } .calendar-grid { gap: 0.5px; } } @media (max-width: 640px) { .calendar-day { min-height: 60px; padding: 0.25rem; } /* Stack appointments on mobile */ .calendar-day > div:last-child { display: none; } .calendar-day.active > div:last-child { display: block; } } /* Category button animations */ .category-btn { position: relative; overflow: hidden; } .category-btn::after { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; background: rgba(255, 255, 255, 0.2); border-radius: 50%; transform: translate(-50%, -50%); transition: width 0.3s ease, height 0.3s ease; } .category-btn:active::after { width: 200px; height: 200px; } /* Stats card hover effects */ .grid > div { transition: transform 0.2s ease, box-shadow 0.2s ease; } .grid > div:hover { transform: translateY(-2px); box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); } /* Modal animation improvements */ #addModal > div { transform: scale(0.95); opacity: 0; transition: transform 0.3s ease, opacity 0.3s ease; } #addModal:not(.hidden) > div { transform: scale(1); opacity: 1; } /* Loading state for buttons */ button.loading { position: relative; color: transparent; } button.loading::after { content: ''; position: absolute; width: 16px; height: 16px; top: 50%; left: 50%; margin-left: -8px; margin-top: -8px; border: 2px solid #ffffff; border-radius: 50%; border-top-color: transparent; animation: spinner 0.8s linear infinite; } @keyframes spinner { to { transform: rotate(360deg); } } /* Notification toast animation */ .fade-in { animation: slideIn 0.3s ease-out; } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }