Spaces:
Runtime error
Runtime error
| /* Import MCP styles */ | |
| @import './styles/mcp.css'; | |
| @import './styles/mcp-settings.css'; | |
| @tailwind base; | |
| @tailwind components; | |
| @tailwind utilities; | |
| /* Enterprise Design System */ | |
| :root { | |
| /* Primary Brand Colors */ | |
| --primary-color: #2563eb; | |
| --primary-hover: #1d4ed8; | |
| --primary-light: #dbeafe; | |
| --primary-dark: #1e3a8a; | |
| /* Secondary Colors */ | |
| --secondary-color: #64748b; | |
| --secondary-hover: #475569; | |
| --secondary-light: #f1f5f9; | |
| /* Neutral Palette */ | |
| --text-color: #0f172a; | |
| --text-secondary: #334155; | |
| --text-muted: #64748b; | |
| --text-light: #94a3b8; | |
| --text-disabled: #cbd5e1; | |
| /* Background System */ | |
| --background-primary: #ffffff; | |
| --background-secondary: #f8fafc; | |
| --background-tertiary: #f1f5f9; | |
| --background-elevated: #ffffff; | |
| /* Border System */ | |
| --border-color: #e2e8f0; | |
| --border-light: #f1f5f9; | |
| --border-dark: #cbd5e1; | |
| --border-accent: #3b82f6; | |
| /* Status Colors */ | |
| --success-color: #059669; | |
| --success-light: #d1fae5; | |
| --warning-color: #d97706; | |
| --warning-light: #fef3c7; | |
| --error-color: #dc2626; | |
| --error-light: #fee2e2; | |
| --info-color: #0284c7; | |
| --info-light: #e0f2fe; | |
| /* Layout Variables */ | |
| --sidebar-width: 320px; | |
| --header-height: 64px; | |
| --border-radius: 8px; | |
| --border-radius-lg: 12px; | |
| --border-radius-xl: 16px; | |
| /* Shadow System */ | |
| --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); | |
| --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); | |
| --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); | |
| --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); | |
| /* Message Specific */ | |
| --reasoning-background: var(--background-tertiary); | |
| --user-message-bg: var(--primary-color); | |
| --user-message-color: #ffffff; | |
| --assistant-message-bg: var(--background-elevated); | |
| --assistant-message-color: var(--text-color); | |
| --hover-color: var(--background-secondary); | |
| --active-color: var(--primary-light); | |
| /* Responsive sidebar width */ | |
| --mobile-sidebar-width: 100%; | |
| --tablet-sidebar-width: 280px; | |
| /* Animation System */ | |
| --transition-fast: 150ms ease-out; | |
| --transition-normal: 250ms ease-out; | |
| --transition-slow: 350ms ease-out; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| body { | |
| font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; | |
| color: var(--text-color); | |
| line-height: 1.5; | |
| background-color: var(--background-color); | |
| } | |
| @layer components { | |
| /* App container */ | |
| .app-container { | |
| @apply flex flex-col h-screen w-full overflow-hidden; | |
| } | |
| /* Header styles */ | |
| .app-header { | |
| @apply flex justify-between items-center px-5 h-header border-b border-border bg-background; | |
| } | |
| .left-section { | |
| @apply flex items-center; | |
| } | |
| .right-section { | |
| @apply flex items-center gap-2.5; | |
| } | |
| .app-title { | |
| @apply text-xl font-semibold text-text; | |
| } | |
| } | |
| @layer components { | |
| /* Profile dropdown */ | |
| .profile-dropdown-container { | |
| @apply relative; | |
| } | |
| .profile-dropdown-button { | |
| @apply py-1.5 px-3 bg-background border border-border rounded text-sm text-text cursor-pointer flex items-center gap-1.5; | |
| } | |
| .profile-dropdown-menu { | |
| @apply absolute top-full right-0 w-[200px] bg-background border border-border rounded shadow-md z-10 mt-1.5; | |
| } | |
| .profile-option { | |
| @apply p-3 cursor-pointer transition-colors duration-200 text-sm; | |
| } | |
| .profile-option:hover { | |
| @apply bg-hover; | |
| } | |
| .profile-option.active { | |
| @apply bg-active font-medium; | |
| } | |
| } | |
| @layer components { | |
| .settings-button { | |
| @apply py-1.5 px-3 bg-background border border-border rounded text-sm text-text cursor-pointer; | |
| } | |
| .settings-button:hover { | |
| @apply bg-hover; | |
| } | |
| /* Main content area */ | |
| .app-content { | |
| @apply flex flex-1 overflow-hidden; | |
| } | |
| } | |
| @layer components { | |
| /* Sidebar */ | |
| .sidebar { | |
| @apply w-sidebar border-r border-border flex flex-col transition-[width] duration-300 ease-in-out bg-background; | |
| } | |
| .sidebar.collapsed { | |
| @apply w-[50px] overflow-hidden; | |
| } | |
| .sidebar.collapsed .chat-list { | |
| @apply hidden; | |
| } | |
| .sidebar.collapsed .sidebar-header h2 { | |
| @apply hidden; | |
| } | |
| .sidebar.collapsed .sidebar-header { | |
| @apply justify-center; | |
| } | |
| .sidebar-header { | |
| @apply flex justify-between items-center py-3 px-4 border-b border-border; | |
| } | |
| .sidebar.collapsed .sidebar-header { | |
| @apply py-3 px-[5px]; | |
| } | |
| .sidebar-header h2 { | |
| @apply text-sm font-semibold text-light-text m-0; | |
| } | |
| .toggle-sidebar-button { | |
| @apply bg-transparent border-0 text-base text-lightest-text cursor-pointer flex items-center justify-center z-10 w-6 h-6; | |
| } | |
| .toggle-sidebar-button:hover { | |
| @apply text-text; | |
| } | |
| /* Ensure the toggle button is always visible and clickable */ | |
| .sidebar.collapsed .toggle-sidebar-button { | |
| @apply opacity-100 visible; | |
| } | |
| /* Floating expand button that appears when sidebar is collapsed */ | |
| .expand-sidebar-button { | |
| @apply fixed left-[60px] top-[80px] bg-background border border-border rounded-full w-8 h-8 flex items-center justify-center cursor-pointer shadow-md z-20 opacity-0 invisible transition-all duration-300; | |
| } | |
| .sidebar.collapsed ~ .expand-sidebar-button { | |
| @apply opacity-100 visible; | |
| } | |
| .expand-sidebar-button:hover { | |
| @apply bg-hover text-text; | |
| } | |
| } | |
| @layer components { | |
| /* Chat list */ | |
| .chat-list { | |
| @apply flex-1 overflow-y-auto p-2.5; | |
| } | |
| .new-chat { | |
| @apply w-full py-2 px-3 bg-primary text-white border-none rounded cursor-pointer text-sm mb-4 transition-colors duration-200 flex items-center justify-center; | |
| } | |
| .new-chat:hover { | |
| @apply bg-primary-hover; | |
| } | |
| .chat-item { | |
| @apply flex justify-between items-center py-2 px-2.5 rounded cursor-pointer mb-0.5 transition-colors duration-200 text-sm text-light-text; | |
| } | |
| .chat-item:hover { | |
| @apply bg-hover; | |
| } | |
| .chat-item.active { | |
| @apply bg-active text-primary; | |
| } | |
| .chat-item.streaming { | |
| @apply border-l-2 border-blue-500; | |
| } | |
| .streaming-dot { | |
| @apply w-2 h-2 bg-blue-500 rounded-full; | |
| animation: pulse 1.5s infinite; | |
| } | |
| .delete-btn { | |
| @apply opacity-0 bg-transparent border-none text-lightest-text cursor-pointer text-xs transition-all duration-200 py-0.5 px-[5px]; | |
| } | |
| .chat-item:hover .delete-btn { | |
| @apply opacity-100; | |
| } | |
| .delete-btn:hover { | |
| @apply text-red-600; | |
| } | |
| .empty-state { | |
| @apply text-lightest-text text-center p-5 text-sm; | |
| } | |
| } | |
| @layer components { | |
| /* Main chat area */ | |
| .main-content { | |
| @apply flex-1 flex flex-col overflow-hidden bg-background; | |
| } | |
| /* Welcome screen */ | |
| .welcome-screen { | |
| @apply flex flex-col items-center justify-center h-full p-5 text-center; | |
| } | |
| .welcome-screen h2 { | |
| @apply text-2xl font-semibold mb-2.5 text-text; | |
| } | |
| .welcome-screen p { | |
| @apply text-light-text mb-5 text-sm; | |
| } | |
| .new-chat-button { | |
| @apply py-2.5 px-5 bg-primary text-white border-none rounded cursor-pointer text-sm transition-colors duration-200; | |
| } | |
| .new-chat-button:hover { | |
| @apply bg-primary-hover; | |
| } | |
| } | |
| @layer components { | |
| /* Chat window */ | |
| .chat-window { | |
| @apply flex flex-col h-full overflow-hidden; | |
| } | |
| .chat-messages { | |
| @apply flex-1 overflow-y-auto p-5 flex flex-col gap-6; | |
| } | |
| } | |
| @layer components { | |
| /* Message styles */ | |
| .message { | |
| @apply flex flex-col max-w-[800px] mx-auto w-full; | |
| } | |
| .message.user { | |
| @apply items-end; | |
| } | |
| .message.assistant { | |
| @apply items-start; | |
| } | |
| .reasoning-container { | |
| @apply w-full border border-border rounded-lg overflow-hidden mb-2.5 bg-reasoning-bg; | |
| } | |
| .reasoning-header { | |
| @apply flex justify-between items-center py-2 px-3 cursor-pointer text-[0.8125rem] text-light-text bg-[#f5f5f5] border-b border-border; | |
| } | |
| .toggle-icon { | |
| @apply text-[0.625rem]; | |
| } | |
| .reasoning-content { | |
| @apply p-3 text-[0.8125rem] whitespace-pre-wrap overflow-x-auto text-light-text max-h-[300px] overflow-y-auto; | |
| } | |
| .message-content { | |
| @apply py-3 px-4 rounded-md text-[0.9375rem] leading-normal break-words max-w-[90%] relative; | |
| } | |
| .message.user .message-content { | |
| @apply bg-user-message-bg text-user-message-color rounded-[6px_6px_0_6px]; | |
| } | |
| .message.assistant .message-content { | |
| @apply bg-assistant-message-bg text-assistant-message-color rounded-[6px_6px_6px_0]; | |
| } | |
| } | |
| @layer components { | |
| .copy-button { | |
| @apply absolute right-2 bottom-2 bg-white/80 border border-border rounded py-1 px-2 text-xs cursor-pointer opacity-0 transition-opacity duration-200; | |
| } | |
| .message-content:hover .copy-button { | |
| @apply opacity-100; | |
| } | |
| .copy-button.copied { | |
| @apply bg-emerald-500 text-white border-emerald-600; | |
| } | |
| .message.user .copy-button { | |
| @apply bg-white/90 text-light-text; | |
| } | |
| .message.user .copy-button:hover { | |
| @apply bg-white text-text; | |
| } | |
| .message.assistant .copy-button { | |
| @apply bg-[rgba(249,249,249,0.9)] text-text; | |
| } | |
| .message.assistant .copy-button:hover { | |
| @apply bg-background; | |
| } | |
| /* Add styles for markdown content */ | |
| .message-content p { | |
| @apply mb-4; | |
| } | |
| .message-content p:last-child { | |
| @apply mb-0; | |
| } | |
| .message-content pre { | |
| @apply bg-black/5 p-3 rounded overflow-x-auto my-4; | |
| } | |
| .message-content code { | |
| @apply bg-black/5 py-0.5 px-1 rounded font-mono; | |
| } | |
| .message-content pre code { | |
| @apply bg-transparent p-0; | |
| } | |
| .message-content ul, | |
| .message-content ol { | |
| @apply my-4 pl-8; | |
| } | |
| .message-content li { | |
| @apply my-2; | |
| } | |
| .message-content blockquote { | |
| @apply border-l-4 border-border my-4 pl-4 text-light-text; | |
| } | |
| .message-content img { | |
| @apply max-w-full h-auto my-4 rounded; | |
| } | |
| .message-content table { | |
| @apply border-collapse w-full my-4; | |
| } | |
| .message-content th, | |
| .message-content td { | |
| @apply border border-border p-2 text-left; | |
| } | |
| .message-content th { | |
| @apply bg-hover; | |
| } | |
| .message-time { | |
| @apply text-xs text-lightest-text mt-1; | |
| } | |
| } | |
| @layer components { | |
| /* Input area */ | |
| .chat-input { | |
| @apply flex p-4 border-t border-border gap-2.5 bg-background; | |
| } | |
| .message-input { | |
| @apply flex-1 py-3 px-4 border border-border rounded-md text-[0.9375rem] resize-none min-h-[24px] max-h-[200px] text-text outline-none transition-colors duration-200; | |
| } | |
| .message-input:focus { | |
| @apply border-primary; | |
| } | |
| .send-button { | |
| @apply px-5 bg-primary text-white border-none rounded-md cursor-pointer text-[0.9375rem] transition-colors duration-200 flex items-center justify-center; | |
| } | |
| .send-button:hover:not(:disabled) { | |
| @apply bg-primary-hover; | |
| } | |
| .send-button:disabled { | |
| @apply bg-slate-400 cursor-not-allowed opacity-70; | |
| } | |
| /* New chat button in chat window */ | |
| .new-chat-button { | |
| @apply flex items-center justify-center; | |
| } | |
| .new-chat-button:hover { | |
| @apply bg-green-600; | |
| } | |
| /* Floating new chat button */ | |
| .floating-new-chat { | |
| @apply fixed bottom-20 right-6 bg-green-500 hover:bg-green-600 text-white rounded-full w-12 h-12 flex items-center justify-center shadow-lg z-10; | |
| } | |
| @media (max-width: 768px) { | |
| .floating-new-chat { | |
| @apply bottom-24 right-4 w-10 h-10; | |
| } | |
| } | |
| /* Streaming indicator */ | |
| .streaming-indicator { | |
| @apply flex items-center justify-center py-2 px-4 my-4 bg-blue-50 rounded-md text-blue-600 w-max mx-auto; | |
| } | |
| .pulse-dot { | |
| @apply w-2 h-2 bg-blue-500 rounded-full; | |
| animation: pulse 1.5s infinite; | |
| } | |
| @keyframes pulse { | |
| 0% { | |
| transform: scale(0.95); | |
| box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.7); | |
| } | |
| 70% { | |
| transform: scale(1); | |
| box-shadow: 0 0 0 6px rgba(59, 130, 246, 0); | |
| } | |
| 100% { | |
| transform: scale(0.95); | |
| box-shadow: 0 0 0 0 rgba(59, 130, 246, 0); | |
| } | |
| } | |
| /* Loading cursor */ | |
| .loading-cursor { | |
| @apply inline-block w-0.5 h-[1.2em] bg-current ml-0.5 animate-blink align-text-bottom; | |
| } | |
| @keyframes blink { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0; } | |
| } | |
| } | |
| @layer components { | |
| /* Settings modal */ | |
| .settings-overlay { | |
| @apply fixed inset-0 bg-black/50 flex items-center justify-center z-[1000]; | |
| } | |
| .settings-modal { | |
| @apply bg-background rounded-lg w-[600px] max-w-[90%] max-h-[90vh] overflow-y-auto relative p-6 shadow-md; | |
| } | |
| .settings-panel h2 { | |
| @apply text-xl font-semibold mb-5 text-text; | |
| } | |
| .close-settings-button { | |
| @apply absolute top-4 right-4 bg-transparent border-none text-xl cursor-pointer text-lightest-text w-6 h-6 flex items-center justify-center rounded; | |
| } | |
| .close-settings-button:hover { | |
| @apply bg-hover text-text; | |
| } | |
| /* Profile management in settings */ | |
| .profiles-section { | |
| @apply mb-6 border-b border-border pb-5; | |
| } | |
| .profiles-header { | |
| @apply flex justify-between items-center mb-3; | |
| } | |
| .profiles-header h3 { | |
| @apply text-base font-semibold text-text; | |
| } | |
| .add-profile-button { | |
| @apply py-1 px-2 bg-transparent border border-border rounded text-sm text-text cursor-pointer transition-all duration-200; | |
| } | |
| .add-profile-button:hover { | |
| @apply bg-hover; | |
| } | |
| .profiles-list { | |
| @apply flex flex-wrap gap-2 mb-4; | |
| } | |
| .profile-item { | |
| @apply py-2 px-3 bg-background border border-border rounded text-sm cursor-pointer transition-all duration-200 flex items-center gap-2; | |
| } | |
| .profile-item:hover { | |
| @apply bg-hover; | |
| } | |
| .profile-item.active { | |
| @apply bg-active border-primary; | |
| } | |
| .delete-profile-button { | |
| @apply bg-transparent border-none text-lightest-text cursor-pointer text-base transition-colors duration-200 flex items-center justify-center w-5 h-5; | |
| } | |
| .delete-profile-button:hover { | |
| @apply text-red-600; | |
| } | |
| .current-profile-section h3 { | |
| @apply text-base font-semibold text-text mb-4; | |
| } | |
| .setting-item { | |
| @apply mb-4; | |
| } | |
| .setting-item label { | |
| @apply block mb-1.5 text-sm text-light-text; | |
| } | |
| .setting-item input { | |
| @apply w-full py-2 px-3 border border-border rounded text-sm transition-colors duration-200; | |
| } | |
| .setting-item input:focus { | |
| @apply outline-none border-primary; | |
| } | |
| .setting-hint { | |
| @apply mt-1; | |
| } | |
| .hint-toggle { | |
| @apply bg-transparent border-none text-primary cursor-pointer text-xs p-0 text-left; | |
| } | |
| .hint-content { | |
| @apply hidden mt-2 text-xs text-light-text bg-hover p-2 rounded; | |
| } | |
| .hint-content.expanded { | |
| @apply block; | |
| } | |
| .hint-content p { | |
| @apply mb-1.5; | |
| } | |
| .hint-content ul { | |
| @apply ml-5; | |
| } | |
| .hint-content li { | |
| @apply mb-1; | |
| } | |
| .settings-actions { | |
| @apply flex justify-end gap-2.5 mt-6; | |
| } | |
| .save-button { | |
| @apply py-2 px-4 bg-primary text-white border-none rounded cursor-pointer text-sm transition-colors duration-200; | |
| } | |
| .save-button:hover { | |
| @apply bg-primary-hover; | |
| } | |
| .cancel-button { | |
| @apply py-2 px-4 bg-transparent border border-border rounded cursor-pointer text-sm transition-all duration-200; | |
| } | |
| .cancel-button:hover { | |
| @apply bg-hover; | |
| } | |
| } | |
| @layer components { | |
| /* Error and notification styles */ | |
| .error-message { | |
| @apply fixed bottom-5 left-1/2 -translate-x-1/2 bg-red-100 text-red-600 py-2.5 px-5 rounded text-sm shadow-md z-[1000]; | |
| } | |
| .loading { | |
| @apply fixed bottom-5 left-1/2 -translate-x-1/2 bg-blue-50 text-blue-700 py-2.5 px-5 rounded text-sm shadow-md z-[1000]; | |
| } | |
| } | |
| @layer utilities { | |
| /* Custom scrollbar */ | |
| ::-webkit-scrollbar { | |
| @apply w-1.5 h-1.5; | |
| } | |
| ::-webkit-scrollbar-track { | |
| @apply bg-transparent; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| @apply bg-gray-300 rounded-sm; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| @apply bg-gray-400; | |
| } | |
| } | |
| /* Responsive styles */ | |
| @media (max-width: 768px) { | |
| .app-header { | |
| padding: 0 1rem; | |
| } | |
| .app-title { | |
| font-size: 1rem; | |
| } | |
| .sidebar { | |
| position: fixed; | |
| z-index: 50; | |
| height: 100%; | |
| width: 100%; | |
| left: -100%; | |
| transition: all 0.3s ease-in-out; | |
| } | |
| .sidebar.mobile-open { | |
| left: 0; | |
| } | |
| /* Make sure the collapsed sidebar is still visible on mobile */ | |
| .sidebar.collapsed { | |
| width: 50px; | |
| left: 0; | |
| } | |
| /* Hide the floating expand button on mobile as it's not needed */ | |
| .expand-sidebar-button { | |
| display: none; | |
| } | |
| .message-content { | |
| max-width: 100%; | |
| } | |
| .settings-modal { | |
| width: 95%; | |
| max-height: 80vh; | |
| } | |
| .profiles-list { | |
| flex-direction: column; | |
| gap: 0.5rem; | |
| } | |
| .chat-input { | |
| padding: 0.75rem; | |
| } | |
| .message-input { | |
| font-size: 0.875rem; | |
| } | |
| .send-button { | |
| padding: 0 1rem; | |
| } | |
| } | |
| /* Small mobile devices */ | |
| @media (max-width: 480px) { | |
| .app-header { | |
| height: 50px; | |
| } | |
| .right-section { | |
| gap: 0.5rem; | |
| } | |
| .profile-dropdown-button, | |
| .settings-button { | |
| padding: 0.25rem 0.5rem; | |
| font-size: 0.75rem; | |
| } | |
| .chat-messages { | |
| padding: 0.75rem; | |
| } | |
| .message-content { | |
| padding: 0.75rem; | |
| font-size: 0.875rem; | |
| } | |
| .welcome-screen h2 { | |
| font-size: 1.25rem; | |
| } | |
| } | |