Files
turftracker/frontend/src/index.css
Jake Kasper b3662ea35e update 2
2025-08-21 07:14:28 -05:00

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;
}
}