@tailwind base; @tailwind components; @tailwind utilities; @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'); @layer base { html { font-family: 'Inter', system-ui, -apple-system, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body { @apply bg-neutral-50 text-neutral-800; } } @layer components { .btn-primary { @apply px-4 py-2 bg-primary-600 text-white rounded-lg font-medium hover:bg-primary-700 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed; } .btn-secondary { @apply px-4 py-2 bg-neutral-100 text-neutral-700 rounded-lg font-medium hover:bg-neutral-200 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-neutral-400 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed; } .btn-success { @apply px-4 py-2 bg-income-light text-income-dark rounded-lg font-medium border border-income-DEFAULT/30 hover:bg-income-DEFAULT hover:text-white transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-income-DEFAULT focus:ring-offset-2; } .btn-danger { @apply px-4 py-2 bg-expense-light text-expense-dark rounded-lg font-medium border border-expense-DEFAULT/30 hover:bg-expense-DEFAULT hover:text-white transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-expense-DEFAULT focus:ring-offset-2; } .card { @apply bg-white rounded-xl shadow-sm border border-neutral-100 transition-shadow duration-200 hover:shadow-md; } .input-field { @apply w-full px-4 py-2.5 border border-neutral-200 rounded-lg text-neutral-800 placeholder-neutral-400 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent transition-all duration-200; } .label { @apply block text-sm font-medium text-neutral-700 mb-1.5; } .stat-card { @apply card p-6 flex flex-col; } .stat-value { @apply text-2xl font-semibold text-neutral-900; } .stat-label { @apply text-sm text-neutral-500 mt-1; } .table-header { @apply px-4 py-3 text-left text-xs font-semibold text-neutral-500 uppercase tracking-wider; } .table-cell { @apply px-4 py-3 text-sm text-neutral-700; } } @layer utilities { .text-balance { text-wrap: balance; } } /* Smooth scroll behavior */ html { scroll-behavior: smooth; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { @apply bg-neutral-100 rounded-full; } ::-webkit-scrollbar-thumb { @apply bg-neutral-300 rounded-full hover:bg-neutral-400; } /* Animation keyframes */ @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideIn { from { opacity: 0; transform: translateX(-10px); } to { opacity: 1; transform: translateX(0); } } .animate-fadeIn { animation: fadeIn 0.3s ease-out forwards; } .animate-slideIn { animation: slideIn 0.3s ease-out forwards; }