209 lines
4.1 KiB
CSS
209 lines
4.1 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
/* Import Leaflet CSS for maps */
|
|
@import 'leaflet/dist/leaflet.css';
|
|
|
|
/* Base styles */
|
|
@layer base {
|
|
html {
|
|
scroll-behavior: smooth;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Inter', system-ui, -apple-system, sans-serif;
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
}
|
|
|
|
/* Custom scrollbar */
|
|
::-webkit-scrollbar {
|
|
width: 6px;
|
|
height: 6px;
|
|
}
|
|
|
|
::-webkit-scrollbar-track {
|
|
@apply bg-gray-100;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
@apply bg-gray-300 rounded-full;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb:hover {
|
|
@apply bg-gray-400;
|
|
}
|
|
}
|
|
|
|
/* Component styles */
|
|
@layer components {
|
|
.btn {
|
|
@apply inline-flex items-center justify-center px-4 py-2 border border-transparent text-sm font-medium rounded-lg focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors duration-200;
|
|
}
|
|
|
|
.btn-primary {
|
|
@apply btn bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500;
|
|
}
|
|
|
|
.btn-secondary {
|
|
@apply btn bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500;
|
|
}
|
|
|
|
.btn-outline {
|
|
@apply btn border-gray-300 text-gray-700 bg-white hover:bg-gray-50 focus:ring-primary-500;
|
|
}
|
|
|
|
.btn-danger {
|
|
@apply btn bg-red-600 text-white hover:bg-red-700 focus:ring-red-500;
|
|
}
|
|
|
|
.btn-success {
|
|
@apply btn bg-grass-600 text-white hover:bg-grass-700 focus:ring-grass-500;
|
|
}
|
|
|
|
.input {
|
|
@apply block w-full px-3 py-2 border border-gray-300 rounded-lg shadow-sm placeholder-gray-400 focus:outline-none focus:ring-primary-500 focus:border-primary-500 sm:text-sm;
|
|
}
|
|
|
|
.input-error {
|
|
@apply input border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500;
|
|
}
|
|
|
|
.label {
|
|
@apply block text-sm font-medium text-gray-700 mb-1;
|
|
}
|
|
|
|
.card {
|
|
@apply bg-white rounded-lg shadow-sm border border-gray-200 p-6;
|
|
}
|
|
|
|
.card-header {
|
|
@apply border-b border-gray-200 pb-4 mb-4;
|
|
}
|
|
|
|
.nav-link {
|
|
@apply flex items-center px-3 py-2 text-sm font-medium rounded-lg transition-colors duration-200;
|
|
}
|
|
|
|
.nav-link-active {
|
|
@apply nav-link bg-primary-100 text-primary-700;
|
|
}
|
|
|
|
.nav-link-inactive {
|
|
@apply nav-link text-gray-600 hover:text-gray-900 hover:bg-gray-50;
|
|
}
|
|
|
|
.badge {
|
|
@apply inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium;
|
|
}
|
|
|
|
.badge-green {
|
|
@apply badge bg-grass-100 text-grass-800;
|
|
}
|
|
|
|
.badge-blue {
|
|
@apply badge bg-blue-100 text-blue-800;
|
|
}
|
|
|
|
.badge-yellow {
|
|
@apply badge bg-yellow-100 text-yellow-800;
|
|
}
|
|
|
|
.badge-red {
|
|
@apply badge bg-red-100 text-red-800;
|
|
}
|
|
|
|
.badge-gray {
|
|
@apply badge bg-gray-100 text-gray-800;
|
|
}
|
|
}
|
|
|
|
/* Utility styles */
|
|
@layer utilities {
|
|
.text-balance {
|
|
text-wrap: balance;
|
|
}
|
|
|
|
.animation-delay-200 {
|
|
animation-delay: 200ms;
|
|
}
|
|
|
|
.animation-delay-400 {
|
|
animation-delay: 400ms;
|
|
}
|
|
|
|
.animation-delay-600 {
|
|
animation-delay: 600ms;
|
|
}
|
|
|
|
.glass {
|
|
@apply bg-white/80 backdrop-blur-sm border border-white/20;
|
|
}
|
|
|
|
.scrollbar-hide {
|
|
-ms-overflow-style: none;
|
|
scrollbar-width: none;
|
|
}
|
|
|
|
.scrollbar-hide::-webkit-scrollbar {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
/* Loading animations */
|
|
.loading-dots {
|
|
display: inline-block;
|
|
}
|
|
|
|
.loading-dots::after {
|
|
content: '';
|
|
animation: dots 1.5s steps(4, end) infinite;
|
|
}
|
|
|
|
@keyframes dots {
|
|
0%, 20% { content: ''; }
|
|
40% { content: '.'; }
|
|
60% { content: '..'; }
|
|
80%, 100% { content: '...'; }
|
|
}
|
|
|
|
/* Map styles */
|
|
.mapboxgl-popup-content {
|
|
@apply rounded-lg shadow-lg;
|
|
}
|
|
|
|
.mapboxgl-popup-close-button {
|
|
@apply text-gray-400 hover:text-gray-600;
|
|
}
|
|
|
|
/* React Query loading states */
|
|
.query-loading {
|
|
@apply animate-pulse;
|
|
}
|
|
|
|
/* Mobile-specific styles */
|
|
@media (max-width: 640px) {
|
|
.mobile-full-width {
|
|
width: 100vw;
|
|
margin-left: calc(-50vw + 50%);
|
|
}
|
|
}
|
|
|
|
/* Print styles */
|
|
@media print {
|
|
.no-print {
|
|
display: none !important;
|
|
}
|
|
|
|
.print-break {
|
|
page-break-after: always;
|
|
}
|
|
}
|
|
|
|
/* Dark mode support (future enhancement) */
|
|
@media (prefers-color-scheme: dark) {
|
|
.dark-mode {
|
|
@apply bg-gray-900 text-white;
|
|
}
|
|
} |