CSS · 2961 bytes Raw Blame History
1 @tailwind base;
2 @tailwind components;
3 @tailwind utilities;
4
5 @layer base {
6 html {
7 scroll-behavior: smooth;
8 }
9
10 body {
11 @apply bg-gray-50 text-gray-900 dark:bg-gray-900 dark:text-gray-100;
12 }
13
14 * {
15 @apply border-gray-200 dark:border-gray-700;
16 }
17 }
18
19 @layer components {
20 /* Button variants */
21 .btn {
22 @apply inline-flex items-center justify-center px-4 py-2 text-sm font-medium rounded-md border border-transparent transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2;
23 }
24
25 .btn-primary {
26 @apply bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500;
27 }
28
29 .btn-secondary {
30 @apply bg-gray-200 text-gray-900 hover:bg-gray-300 focus:ring-gray-500 dark:bg-gray-700 dark:text-gray-100 dark:hover:bg-gray-600;
31 }
32
33 .btn-danger {
34 @apply bg-red-600 text-white hover:bg-red-700 focus:ring-red-500;
35 }
36
37 .btn-outline {
38 @apply border-gray-300 text-gray-700 hover:bg-gray-50 focus:ring-primary-500 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800;
39 }
40
41 /* Input styles */
42 .input {
43 @apply block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-primary-500 focus:border-primary-500 sm:text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100;
44 }
45
46 /* Card styles */
47 .card {
48 @apply bg-white rounded-lg shadow border border-gray-200 dark:bg-gray-800 dark:border-gray-700;
49 }
50
51 .card-header {
52 @apply px-6 py-4 border-b border-gray-200 dark:border-gray-700;
53 }
54
55 .card-body {
56 @apply p-6;
57 }
58
59 /* Loading spinner */
60 .spinner {
61 @apply animate-spin rounded-full border-2 border-gray-300 border-t-primary-600;
62 }
63
64 /* File grid */
65 .file-grid {
66 @apply grid gap-4 grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6;
67 }
68
69 .file-list {
70 @apply divide-y divide-gray-200 dark:divide-gray-700;
71 }
72 }
73
74 @layer utilities {
75 /* Custom utilities */
76 .text-shadow {
77 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
78 }
79
80 .scrollbar-hide {
81 -ms-overflow-style: none;
82 scrollbar-width: none;
83 }
84
85 .scrollbar-hide::-webkit-scrollbar {
86 display: none;
87 }
88
89 /* Focus ring for accessibility */
90 .focus-ring {
91 @apply focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2;
92 }
93 }
94
95 /* Dark mode transitions */
96 * {
97 transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out;
98 }
99
100 /* Uppy overrides */
101 .uppy-Dashboard {
102 @apply rounded-lg border-2 border-dashed border-gray-300 dark:border-gray-600;
103 }
104
105 .uppy-Dashboard--isDragOver {
106 @apply border-primary-500 bg-primary-50 dark:bg-primary-900/20;
107 }
108
109 /* Progress bar animations */
110 @keyframes progress {
111 0% { transform: translateX(-100%); }
112 100% { transform: translateX(100%); }
113 }
114
115 .progress-indeterminate::before {
116 content: '';
117 @apply absolute inset-0 bg-gradient-to-r from-transparent via-primary-500 to-transparent;
118 animation: progress 1.5s infinite;
119 }