207 lines
4.4 KiB
CSS
207 lines
4.4 KiB
CSS
@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;
|
|
}
|
|
} |