Spaces:
Running
Running
@import 'tailwindcss/base'; | |
@import 'tailwindcss/components'; | |
@import 'tailwindcss/utilities'; | |
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap'); | |
* { | |
box-sizing: border-box; | |
} | |
body { | |
margin: 0; | |
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', | |
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', | |
sans-serif; | |
-webkit-font-smoothing: antialiased; | |
-moz-osx-font-smoothing: grayscale; | |
} | |
/* Custom scrollbar */ | |
::-webkit-scrollbar { | |
width: 6px; | |
} | |
::-webkit-scrollbar-track { | |
@apply bg-gray-100 dark:bg-gray-800; | |
} | |
::-webkit-scrollbar-thumb { | |
@apply bg-gray-300 dark:bg-gray-600 rounded-full; | |
} | |
::-webkit-scrollbar-thumb:hover { | |
@apply bg-gray-400 dark:bg-gray-500; | |
} | |
/* Loading dots animation */ | |
.typing-indicator { | |
display: flex; | |
align-items: center; | |
gap: 4px; | |
} | |
.typing-indicator .dot { | |
width: 6px; | |
height: 6px; | |
border-radius: 50%; | |
background-color: currentColor; | |
opacity: 0.4; | |
animation: typing-dot 1.4s infinite ease-in-out; | |
} | |
.typing-indicator .dot:nth-child(1) { | |
animation-delay: 0s; | |
} | |
.typing-indicator .dot:nth-child(2) { | |
animation-delay: 0.2s; | |
} | |
.typing-indicator .dot:nth-child(3) { | |
animation-delay: 0.4s; | |
} | |
@keyframes typing-dot { | |
0%, 60%, 100% { | |
opacity: 0.4; | |
transform: scale(1); | |
} | |
30% { | |
opacity: 1; | |
transform: scale(1.2); | |
} | |
} | |
/* Message bubble animations */ | |
.message-enter { | |
opacity: 0; | |
transform: translateY(20px); | |
} | |
.message-enter-active { | |
opacity: 1; | |
transform: translateY(0); | |
transition: opacity 300ms ease-out, transform 300ms ease-out; | |
} | |
/* File upload hover effects */ | |
.file-drop-zone { | |
transition: all 0.2s ease-in-out; | |
} | |
.file-drop-zone:hover { | |
transform: translateY(-2px); | |
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1); | |
} | |
/* Gradient text */ | |
.gradient-text { | |
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | |
-webkit-background-clip: text; | |
-webkit-text-fill-color: transparent; | |
background-clip: text; | |
} | |
/* Glass morphism effect */ | |
.glass { | |
backdrop-filter: blur(16px) saturate(180%); | |
-webkit-backdrop-filter: blur(16px) saturate(180%); | |
background-color: rgba(255, 255, 255, 0.8); | |
border: 1px solid rgba(255, 255, 255, 0.125); | |
} | |
.glass.dark { | |
background-color: rgba(17, 24, 39, 0.8); | |
border: 1px solid rgba(75, 85, 99, 0.3); | |
} | |
/* Button hover effects */ | |
.btn-primary { | |
@apply bg-primary-600 hover:bg-primary-700 focus:ring-primary-500; | |
transition: all 0.2s ease-in-out; | |
} | |
.btn-primary:hover { | |
transform: translateY(-1px); | |
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3); | |
} | |
/* Code syntax highlighting overrides */ | |
.prose pre { | |
@apply bg-gray-900 dark:bg-gray-950; | |
} | |
.prose code { | |
@apply bg-gray-100 dark:bg-gray-800 text-gray-800 dark:text-gray-200 px-1 py-0.5 rounded text-sm; | |
} | |
/* Message content styling */ | |
.message-content { | |
@apply prose prose-sm max-w-none dark:prose-invert; | |
} | |
.message-content p:last-child { | |
margin-bottom: 0; | |
} | |
.message-content ul, .message-content ol { | |
@apply my-2; | |
} | |
.message-content li { | |
@apply my-1; | |
} | |
/* Enhanced Chat Input Styles */ | |
.chat-input-container { | |
background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.05) 100%); | |
backdrop-filter: blur(10px); | |
border-radius: 16px; | |
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | |
} | |
.chat-input-container:focus-within { | |
transform: translateY(-1px); | |
box-shadow: 0 20px 40px -12px rgba(0, 0, 0, 0.25); | |
} | |
.chat-input { | |
font-family: 'Inter', system-ui, -apple-system, sans-serif; | |
font-weight: 400; | |
line-height: 1.6; | |
letter-spacing: 0.01em; | |
} | |
.chat-input::placeholder { | |
font-weight: 400; | |
opacity: 0.6; | |
transition: opacity 0.3s ease; | |
} | |
.chat-input:focus::placeholder { | |
opacity: 0.4; | |
} | |
/* Enhanced scrollbar for textarea */ | |
.chat-input::-webkit-scrollbar { | |
width: 4px; | |
} | |
.chat-input::-webkit-scrollbar-track { | |
background: transparent; | |
} | |
.chat-input::-webkit-scrollbar-thumb { | |
background: rgba(156, 163, 175, 0.5); | |
border-radius: 2px; | |
} | |
.chat-input::-webkit-scrollbar-thumb:hover { | |
background: rgba(156, 163, 175, 0.8); | |
} | |
/* Input focus indicator animation */ | |
.input-focus-indicator { | |
transform-origin: left; | |
animation: expand 0.3s ease-out; | |
} | |
@keyframes expand { | |
from { | |
transform: scaleX(0); | |
} | |
to { | |
transform: scaleX(1); | |
} | |
} | |
/* Enhanced button glow effect */ | |
.btn-glow { | |
position: relative; | |
overflow: visible; | |
} | |
.btn-glow::before { | |
content: ''; | |
position: absolute; | |
inset: -2px; | |
border-radius: inherit; | |
background: linear-gradient(45deg, transparent, rgba(59, 130, 246, 0.3), transparent); | |
z-index: -1; | |
opacity: 0; | |
transition: opacity 0.3s ease; | |
} | |
.btn-glow:hover::before { | |
opacity: 1; | |
} | |
/* Smooth transitions for dark mode */ | |
* { | |
transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease; | |
} | |
/* Enhanced tooltip styling */ | |
.tooltip { | |
animation: tooltip-appear 0.2s ease-out; | |
} | |
@keyframes tooltip-appear { | |
from { | |
opacity: 0; | |
transform: translateX(-50%) translateY(4px); | |
} | |
to { | |
opacity: 1; | |
transform: translateX(-50%) translateY(0); | |
} | |
} | |
/* Floating effect for input container */ | |
.floating-input { | |
box-shadow: | |
0 10px 25px -5px rgba(0, 0, 0, 0.1), | |
0 4px 6px -2px rgba(0, 0, 0, 0.05); | |
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | |
} | |
.floating-input:hover { | |
box-shadow: | |
0 20px 40px -12px rgba(0, 0, 0, 0.15), | |
0 8px 16px -4px rgba(0, 0, 0, 0.1); | |
} | |
.floating-input:focus-within { | |
box-shadow: | |
0 25px 50px -12px rgba(59, 130, 246, 0.25), | |
0 10px 20px -5px rgba(0, 0, 0, 0.1); | |
} |