@tailwind base; @tailwind components; @tailwind utilities; :root { --foreground-rgb: 0, 0, 0; --background-start-rgb: 214, 219, 220; --background-end-rgb: 255, 255, 255; } @media (prefers-color-scheme: dark) { :root { --foreground-rgb: 255, 255, 255; --background-start-rgb: 0, 0, 0; --background-end-rgb: 0, 0, 0; } } body { color: rgb(var(--foreground-rgb)); background: linear-gradient( to bottom, transparent, rgb(var(--background-end-rgb)) ) rgb(var(--background-start-rgb)); } /* Custom scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { @apply bg-gray-100 dark:bg-gray-700; } ::-webkit-scrollbar-thumb { @apply bg-gray-400 dark:bg-gray-500 rounded-full; } ::-webkit-scrollbar-thumb:hover { @apply bg-gray-500 dark:bg-gray-400; } /* Loading animations */ .loading-skeleton { background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; animation: loading 1.5s infinite; } .dark .loading-skeleton { background: linear-gradient(90deg, #374151 25%, #4b5563 50%, #374151 75%); background-size: 200% 100%; } @keyframes loading { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } /* Focus rings */ .focus-ring { @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-gray-800; } /* Button variants */ .btn-primary { @apply bg-primary-600 hover:bg-primary-700 text-white font-medium py-2 px-4 rounded-lg transition-colors duration-200 focus-ring; } .btn-secondary { @apply bg-gray-200 hover:bg-gray-300 dark:bg-gray-700 dark:hover:bg-gray-600 text-gray-900 dark:text-gray-100 font-medium py-2 px-4 rounded-lg transition-colors duration-200 focus-ring; } .btn-ghost { @apply hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-300 font-medium py-2 px-4 rounded-lg transition-colors duration-200 focus-ring; } .btn-danger { @apply bg-red-600 hover:bg-red-700 text-white font-medium py-2 px-4 rounded-lg transition-colors duration-200 focus-ring; } /* Card styles */ .card { @apply bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-6; } .card-compact { @apply bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4; } /* Input styles */ .input { @apply w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 focus-ring; } .input-error { @apply border-red-500 focus-visible:ring-red-500; } /* Status colors */ .status-new { @apply bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300; } .status-doing { @apply bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300; } .status-blocked { @apply bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-300; } .status-done { @apply bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300; } /* Priority colors */ .priority-low { @apply bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300; } .priority-medium { @apply bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-300; } .priority-high { @apply bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-300; } .priority-urgent { @apply bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-300; } /* Animations */ .slide-in-right { animation: slideInRight 0.3s ease-out; } .slide-in-left { animation: slideInLeft 0.3s ease-out; } @keyframes slideInRight { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } @keyframes slideInLeft { from { transform: translateX(-100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* Custom utilities */ .text-balance { text-wrap: balance; } .truncate-2 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .truncate-3 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; } /* Print styles */ @media print { .no-print { display: none !important; } body { background: white !important; color: black !important; } .card { border: 1px solid #ccc !important; box-shadow: none !important; } }