Pranav_rs
force add frontend files
bc832fa
@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;
}
}