Spaces:
Runtime error
Runtime error
| @tailwind base; | |
| @tailwind components; | |
| @tailwind utilities; | |
| @layer base { | |
| * { | |
| box-sizing: border-box; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| html { | |
| scroll-behavior: smooth; | |
| } | |
| body { | |
| @apply font-family-sans bg-slate-50 text-slate-900 transition-colors duration-300; | |
| } | |
| .dark body { | |
| @apply bg-slate-950 text-slate-50; | |
| } | |
| .font-family-sans { | |
| font-family: 'Inter', system-ui, sans-serif; | |
| } | |
| } | |
| @layer components { | |
| .gradient-text { | |
| @apply bg-gradient-to-r from-blue-600 to-sky-500 bg-clip-text text-transparent; | |
| } | |
| .gradient-text-green { | |
| @apply bg-gradient-to-r from-green-500 to-emerald-400 bg-clip-text text-transparent; | |
| } | |
| .glass-card { | |
| @apply bg-white/80 dark:bg-slate-900/80 backdrop-blur-sm border border-white/50 dark:border-slate-800/50 rounded-2xl shadow-card; | |
| } | |
| .section-tag { | |
| @apply inline-flex items-center gap-2 px-4 py-1.5 bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 rounded-full text-sm font-semibold tracking-wide; | |
| } | |
| .btn-primary { | |
| @apply px-6 py-3 bg-gradient-to-r from-blue-600 to-blue-500 text-white font-semibold rounded-xl shadow-lg shadow-blue-200 dark:shadow-none hover:shadow-xl hover:shadow-blue-300 hover:scale-105 transition-all duration-200 ease-out active:scale-95; | |
| } | |
| .btn-secondary { | |
| @apply px-6 py-3 bg-white dark:bg-slate-800 text-blue-600 dark:text-blue-400 font-semibold rounded-xl border-2 border-blue-100 dark:border-slate-700 hover:border-blue-300 dark:hover:border-blue-500 hover:bg-blue-50 dark:hover:bg-slate-700 transition-all duration-200 ease-out; | |
| } | |
| .btn-danger { | |
| @apply px-6 py-3 bg-gradient-to-r from-red-500 to-rose-500 text-white font-semibold rounded-xl shadow-lg shadow-red-200 dark:shadow-none hover:shadow-xl hover:shadow-red-300 hover:scale-105 transition-all duration-200 ease-out active:scale-95; | |
| } | |
| .chat-bubble-user { | |
| @apply bg-gradient-to-br from-blue-600 to-blue-500 text-white rounded-2xl rounded-br-sm px-4 py-3; | |
| } | |
| .chat-bubble-ai { | |
| @apply bg-white dark:bg-slate-800 border border-slate-100 dark:border-slate-700 text-slate-700 dark:text-slate-200 rounded-2xl rounded-bl-sm px-4 py-3 shadow-card; | |
| } | |
| .risk-badge-low { | |
| @apply inline-flex items-center gap-1.5 px-3 py-1 bg-green-50 dark:bg-green-900/30 text-green-700 dark:text-green-400 border border-green-200 dark:border-green-800 rounded-full text-xs font-semibold; | |
| } | |
| .risk-badge-medium { | |
| @apply inline-flex items-center gap-1.5 px-3 py-1 bg-amber-50 dark:bg-amber-900/30 text-amber-700 dark:text-amber-400 border border-amber-200 dark:border-amber-800 rounded-full text-xs font-semibold; | |
| } | |
| .risk-badge-high { | |
| @apply inline-flex items-center gap-1.5 px-3 py-1 bg-red-50 dark:bg-red-900/30 text-red-700 dark:text-red-400 border border-red-200 dark:border-red-800 rounded-full text-xs font-semibold; | |
| } | |
| } | |
| /* Leaflet custom styling */ | |
| .leaflet-container { | |
| border-radius: 1rem; | |
| font-family: 'Inter', sans-serif; | |
| } | |
| .leaflet-popup-content-wrapper { | |
| border-radius: 12px; | |
| box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15); | |
| padding: 4px; | |
| } | |
| .leaflet-popup-content { | |
| margin: 12px 16px; | |
| } | |
| /* Custom scrollbar */ | |
| ::-webkit-scrollbar { | |
| width: 6px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: #f1f5f9; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: #cbd5e1; | |
| border-radius: 3px; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| background: #94a3b8; | |
| } | |
| /* Loading shimmer effect */ | |
| .shimmer { | |
| background: linear-gradient(90deg, #f0f4f8 25%, #e2e8f0 50%, #f0f4f8 75%); | |
| background-size: 200% 100%; | |
| animation: shimmer 1.5s infinite; | |
| } | |
| @keyframes shimmer { | |
| 0% { | |
| background-position: -200% 0; | |
| } | |
| 100% { | |
| background-position: 200% 0; | |
| } | |
| } | |
| /* Microphone pulse animation */ | |
| .mic-pulse { | |
| animation: micPulse 1s ease-in-out infinite; | |
| } | |
| @keyframes micPulse { | |
| 0%, | |
| 100% { | |
| transform: scale(1); | |
| box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4); | |
| } | |
| 50% { | |
| transform: scale(1.05); | |
| box-shadow: 0 0 0 12px rgba(239, 68, 68, 0); | |
| } | |
| } | |
| /* Dot loading animation */ | |
| .dot-flashing { | |
| position: relative; | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| background-color: #94a3b8; | |
| color: #94a3b8; | |
| animation: dotFlashing 1s infinite linear alternate; | |
| animation-delay: 0.5s; | |
| } | |
| .dot-flashing::before, | |
| .dot-flashing::after { | |
| content: ''; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| background-color: #94a3b8; | |
| color: #94a3b8; | |
| } | |
| .dot-flashing::before { | |
| left: -14px; | |
| animation: dotFlashing 1s infinite alternate; | |
| animation-delay: 0s; | |
| } | |
| .dot-flashing::after { | |
| left: 14px; | |
| animation: dotFlashing 1s infinite alternate; | |
| animation-delay: 1s; | |
| } | |
| @keyframes dotFlashing { | |
| 0% { | |
| background-color: #94a3b8; | |
| } | |
| 50%, | |
| 100% { | |
| background-color: #e2e8f0; | |
| } | |
| } |