Spaces:
Sleeping
Sleeping
| /* --- Root Constants & Variables --- */ | |
| :root { | |
| --bg-app: linear-gradient(180deg, #101116 0%, #1b1c24 100%); | |
| --bg-sidebar: rgba(15, 18, 29, 0.45); | |
| --bg-card: rgba(22, 28, 45, 0.4); | |
| --bg-input: rgba(15, 18, 30, 0.75); | |
| --border-color: rgba(255, 255, 255, 0.06); | |
| --border-glow: rgba(139, 92, 246, 0.2); | |
| --color-primary: #8b5cf6; /* Neon Purple */ | |
| --color-primary-glow: rgba(139, 92, 246, 0.4); | |
| --color-secondary: #3b82f6; /* Electric Blue */ | |
| --color-success: #10b981; /* Emerald Green */ | |
| --color-warning: #f59e0b; /* Amber */ | |
| --color-error: #ef4444; /* Coral Red */ | |
| --text-main: #f1f5f9; | |
| --text-muted: #94a3b8; | |
| --text-dark: #64748b; | |
| --font-sans: 'Plus Jakarta Sans', -apple-system, sans-serif; | |
| --font-display: 'Outfit', sans-serif; | |
| --font-mono: 'Fira Code', monospace; | |
| --transition-fast: 0.2s cubic-bezier(0.4, 0, 0.2, 1); | |
| --transition-smooth: 0.3s cubic-bezier(0.4, 0, 0.2, 1); | |
| --sidebar-width: 320px; | |
| } | |
| /* --- Base Resets & Typography --- */ | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| } | |
| body { | |
| background: var(--bg-app); | |
| color: var(--text-main); | |
| font-family: var(--font-sans); | |
| height: 100vh; | |
| overflow: hidden; | |
| line-height: 1.6; | |
| -webkit-font-smoothing: antialiased; | |
| position: relative; | |
| } | |
| /* --- Background Canvas & Gray Sun --- */ | |
| #sky-canvas { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100vw; | |
| height: 100vh; | |
| pointer-events: none; | |
| z-index: 1; | |
| } | |
| .gray-sun { | |
| position: absolute; | |
| top: 15%; | |
| right: 25%; | |
| width: 220px; | |
| height: 220px; | |
| border-radius: 50%; | |
| background: radial-gradient(circle, rgba(200, 205, 215, 0.15) 0%, rgba(148, 163, 184, 0.03) 45%, rgba(0, 0, 0, 0) 70%); | |
| box-shadow: 0 0 100px rgba(148, 163, 184, 0.05); | |
| pointer-events: none; | |
| z-index: 1; | |
| animation: float-sun 16s ease-in-out infinite alternate; | |
| } | |
| @keyframes float-sun { | |
| 0% { transform: translateY(0px) scale(0.98); opacity: 0.9; } | |
| 100% { transform: translateY(15px) scale(1.02); opacity: 1; } | |
| } | |
| /* --- Layout Structure --- */ | |
| .app-container { | |
| display: flex; | |
| width: 100vw; | |
| height: 100vh; | |
| } | |
| /* --- Sidebar Styling --- */ | |
| .sidebar { | |
| width: var(--sidebar-width); | |
| background-color: var(--bg-sidebar); | |
| backdrop-filter: blur(16px); | |
| border-right: 1px solid var(--border-color); | |
| display: flex; | |
| flex-direction: column; | |
| flex-shrink: 0; | |
| z-index: 10; | |
| } | |
| .sidebar-header { | |
| padding: 24px; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 16px; | |
| border-bottom: 1px solid var(--border-color); | |
| } | |
| .logo { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| font-family: var(--font-display); | |
| font-weight: 700; | |
| font-size: 20px; | |
| letter-spacing: -0.5px; | |
| } | |
| .icon-gradient { | |
| background: linear-gradient(135deg, var(--color-primary), var(--color-secondary)); | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| font-size: 24px; | |
| } | |
| .badge { | |
| font-size: 10px; | |
| padding: 2px 6px; | |
| border-radius: 6px; | |
| background: linear-gradient(135deg, var(--color-primary), var(--color-secondary)); | |
| color: white; | |
| vertical-align: middle; | |
| margin-left: 4px; | |
| font-weight: 600; | |
| letter-spacing: 0.5px; | |
| } | |
| .new-chat-btn { | |
| width: 100%; | |
| padding: 12px; | |
| border-radius: 12px; | |
| border: 1px solid var(--border-glow); | |
| background: linear-gradient(135deg, rgba(139, 92, 246, 0.1), rgba(59, 130, 246, 0.1)); | |
| color: var(--text-main); | |
| font-family: var(--font-display); | |
| font-weight: 600; | |
| font-size: 14px; | |
| cursor: pointer; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 8px; | |
| transition: var(--transition-smooth); | |
| } | |
| .new-chat-btn:hover { | |
| background: linear-gradient(135deg, rgba(139, 92, 246, 0.25), rgba(59, 130, 246, 0.25)); | |
| border-color: var(--color-primary); | |
| box-shadow: 0 0 12px var(--color-primary-glow); | |
| transform: translateY(-1px); | |
| } | |
| /* Status Panel */ | |
| .status-panel { | |
| margin: 16px 20px; | |
| padding: 16px; | |
| border-radius: 12px; | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-color); | |
| } | |
| .status-title { | |
| font-size: 10px; | |
| font-family: var(--font-display); | |
| font-weight: 700; | |
| color: var(--text-muted); | |
| letter-spacing: 1px; | |
| margin-bottom: 8px; | |
| } | |
| .status-indicator-container { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| margin-bottom: 8px; | |
| } | |
| .pulse-indicator { | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 50%; | |
| background-color: var(--color-warning); | |
| box-shadow: 0 0 8px var(--color-warning); | |
| } | |
| .pulse-indicator.ready { | |
| background-color: var(--color-success); | |
| box-shadow: 0 0 8px var(--color-success); | |
| animation: pulse 2s infinite; | |
| } | |
| .pulse-indicator.loading { | |
| background-color: var(--color-warning); | |
| box-shadow: 0 0 8px var(--color-warning); | |
| animation: flash 1s infinite alternate; | |
| } | |
| .pulse-indicator.error { | |
| background-color: var(--color-error); | |
| box-shadow: 0 0 8px var(--color-error); | |
| } | |
| .status-text { | |
| font-size: 13px; | |
| font-weight: 500; | |
| color: var(--text-main); | |
| } | |
| .hardware-info { | |
| font-size: 11px; | |
| color: var(--text-muted); | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| } | |
| /* Progress bar */ | |
| .progress-bar-container { | |
| width: 100%; | |
| height: 4px; | |
| background-color: rgba(255, 255, 255, 0.05); | |
| border-radius: 2px; | |
| margin-top: 12px; | |
| overflow: hidden; | |
| } | |
| .progress-bar-fill { | |
| height: 100%; | |
| width: 45%; | |
| background: linear-gradient(90deg, var(--color-primary), var(--color-secondary)); | |
| border-radius: 2px; | |
| animation: progress-loop 2s infinite ease-in-out; | |
| } | |
| @keyframes progress-loop { | |
| 0% { transform: translateX(-100%); } | |
| 100% { transform: translateX(250%); } | |
| } | |
| /* Sidebar Navigation Settings */ | |
| .sidebar-menu { | |
| flex-grow: 1; | |
| overflow-y: auto; | |
| padding: 0 20px; | |
| } | |
| .menu-section { | |
| margin-bottom: 28px; | |
| } | |
| .menu-label { | |
| display: block; | |
| font-size: 11px; | |
| font-family: var(--font-display); | |
| font-weight: 700; | |
| text-transform: uppercase; | |
| letter-spacing: 1px; | |
| color: var(--text-dark); | |
| margin-bottom: 12px; | |
| } | |
| .setting-item { | |
| margin-bottom: 16px; | |
| } | |
| .setting-item label { | |
| display: flex; | |
| justify-content: space-between; | |
| font-size: 12px; | |
| font-weight: 500; | |
| color: var(--text-muted); | |
| margin-bottom: 8px; | |
| } | |
| .setting-item input[type="range"] { | |
| width: 100%; | |
| accent-color: var(--color-primary); | |
| cursor: pointer; | |
| background: rgba(255,255,255,0.05); | |
| border-radius: 4px; | |
| height: 6px; | |
| } | |
| .setting-item textarea { | |
| width: 100%; | |
| height: 80px; | |
| padding: 8px 12px; | |
| border-radius: 8px; | |
| border: 1px solid var(--border-color); | |
| background-color: rgba(0,0,0,0.25); | |
| color: var(--text-main); | |
| font-family: var(--font-sans); | |
| font-size: 12px; | |
| resize: none; | |
| outline: none; | |
| transition: var(--transition-fast); | |
| } | |
| .setting-item textarea:focus { | |
| border-color: var(--color-primary-glow); | |
| box-shadow: 0 0 6px var(--border-glow); | |
| } | |
| .lang-tags { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 8px; | |
| } | |
| .lang-tag { | |
| font-size: 11px; | |
| padding: 6px 10px; | |
| border-radius: 8px; | |
| background-color: rgba(255, 255, 255, 0.03); | |
| border: 1px solid var(--border-color); | |
| color: var(--text-muted); | |
| font-weight: 500; | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| transition: var(--transition-fast); | |
| } | |
| .lang-tag i { | |
| font-size: 12px; | |
| } | |
| .lang-tag:hover { | |
| background-color: rgba(255, 255, 255, 0.06); | |
| color: var(--text-main); | |
| } | |
| /* Sidebar Footer */ | |
| .sidebar-footer { | |
| padding: 20px; | |
| border-top: 1px solid var(--border-color); | |
| } | |
| .user-profile { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| } | |
| .avatar { | |
| width: 36px; | |
| height: 36px; | |
| border-radius: 50%; | |
| background: linear-gradient(135deg, var(--color-primary), var(--color-secondary)); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 16px; | |
| color: white; | |
| } | |
| .user-details { | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .user-name { | |
| font-size: 13px; | |
| font-weight: 600; | |
| color: var(--text-main); | |
| } | |
| .user-role { | |
| font-size: 11px; | |
| color: var(--text-muted); | |
| } | |
| /* --- Main Chat Section --- */ | |
| .chat-area { | |
| flex-grow: 1; | |
| display: flex; | |
| flex-direction: column; | |
| background-color: transparent; | |
| position: relative; | |
| z-index: 5; | |
| } | |
| .chat-header { | |
| height: 70px; | |
| border-bottom: 1px solid var(--border-color); | |
| padding: 0 32px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| flex-shrink: 0; | |
| background-color: rgba(9, 11, 17, 0.5); | |
| backdrop-filter: blur(10px); | |
| } | |
| .chat-header h2 { | |
| font-family: var(--font-display); | |
| font-size: 16px; | |
| font-weight: 600; | |
| } | |
| .chat-header p { | |
| font-size: 11px; | |
| color: var(--text-muted); | |
| } | |
| .header-actions { | |
| display: flex; | |
| gap: 12px; | |
| } | |
| .icon-btn { | |
| width: 36px; | |
| height: 36px; | |
| border-radius: 10px; | |
| border: 1px solid var(--border-color); | |
| background-color: transparent; | |
| color: var(--text-muted); | |
| cursor: pointer; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| transition: var(--transition-fast); | |
| } | |
| .icon-btn:hover { | |
| background-color: rgba(255, 255, 255, 0.05); | |
| color: var(--color-error); | |
| border-color: rgba(239, 68, 68, 0.2); | |
| } | |
| /* Messages List */ | |
| .messages-container { | |
| flex-grow: 1; | |
| overflow-y: auto; | |
| padding: 32px; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 24px; | |
| } | |
| /* Welcome Screen styling */ | |
| .welcome-screen { | |
| max-width: 720px; | |
| margin: 40px auto; | |
| text-align: center; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| animation: fade-up 0.8s ease; | |
| } | |
| .welcome-icon { | |
| width: 64px; | |
| height: 64px; | |
| border-radius: 16px; | |
| background: linear-gradient(135deg, rgba(139, 92, 246, 0.1), rgba(59, 130, 246, 0.1)); | |
| border: 1px solid var(--border-glow); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 24px; | |
| color: var(--color-primary); | |
| margin-bottom: 24px; | |
| box-shadow: 0 0 20px rgba(139, 92, 246, 0.1); | |
| } | |
| .welcome-screen h1 { | |
| font-family: var(--font-display); | |
| font-weight: 700; | |
| font-size: 32px; | |
| margin-bottom: 12px; | |
| background: linear-gradient(90deg, #fff, var(--text-muted)); | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| .welcome-screen p { | |
| font-size: 15px; | |
| color: var(--text-muted); | |
| max-width: 580px; | |
| margin-bottom: 40px; | |
| line-height: 1.6; | |
| } | |
| .quick-prompts-grid { | |
| display: grid; | |
| grid-template-columns: repeat(2, 1fr); | |
| gap: 16px; | |
| width: 100%; | |
| } | |
| .prompt-card { | |
| background-color: var(--bg-card); | |
| border: 1px solid var(--border-color); | |
| padding: 18px; | |
| border-radius: 14px; | |
| text-align: left; | |
| cursor: pointer; | |
| transition: var(--transition-smooth); | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| } | |
| .prompt-card i { | |
| font-size: 18px; | |
| margin-bottom: 4px; | |
| } | |
| .text-blue { color: var(--color-secondary); } | |
| .text-purple { color: var(--color-primary); } | |
| .text-orange { color: #f97316; } | |
| .text-green { color: var(--color-success); } | |
| .prompt-card h3 { | |
| font-family: var(--font-display); | |
| font-size: 14px; | |
| font-weight: 600; | |
| } | |
| .prompt-card p { | |
| font-size: 12px; | |
| color: var(--text-dark); | |
| margin: 0; | |
| } | |
| .prompt-card:hover { | |
| border-color: var(--color-primary-glow); | |
| background-color: rgba(22, 28, 45, 0.8); | |
| transform: translateY(-2px); | |
| box-shadow: 0 4px 12px rgba(0,0,0,0.15); | |
| } | |
| /* Chat bubble aesthetics */ | |
| .message { | |
| display: flex; | |
| gap: 16px; | |
| max-width: 85%; | |
| animation: fade-in 0.4s ease; | |
| } | |
| .message.user { | |
| align-self: flex-end; | |
| flex-direction: row-reverse; | |
| } | |
| .message.assistant { | |
| align-self: flex-start; | |
| } | |
| .message-avatar { | |
| width: 34px; | |
| height: 34px; | |
| border-radius: 10px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 14px; | |
| color: white; | |
| flex-shrink: 0; | |
| margin-top: 4px; | |
| } | |
| .message.user .message-avatar { | |
| background-color: var(--color-secondary); | |
| } | |
| .message.assistant .message-avatar { | |
| background: linear-gradient(135deg, var(--color-primary), var(--color-secondary)); | |
| } | |
| .message-content { | |
| background-color: var(--bg-card); | |
| border: 1px solid var(--border-color); | |
| padding: 14px 20px; | |
| border-radius: 16px; | |
| font-size: 14px; | |
| color: var(--text-main); | |
| box-shadow: 0 2px 8px rgba(0,0,0,0.05); | |
| } | |
| .message.user .message-content { | |
| background: linear-gradient(135deg, rgba(59, 130, 246, 0.08), rgba(59, 130, 246, 0.03)); | |
| border-color: rgba(59, 130, 246, 0.15); | |
| border-top-right-radius: 4px; | |
| } | |
| .message.assistant .message-content { | |
| background: linear-gradient(135deg, rgba(139, 92, 246, 0.04), rgba(22, 28, 45, 0.6)); | |
| border-top-left-radius: 4px; | |
| } | |
| /* Chat Input Bar Footer */ | |
| .chat-footer { | |
| padding: 16px 32px 24px; | |
| background-color: transparent; | |
| flex-shrink: 0; | |
| } | |
| .input-form { | |
| max-width: 800px; | |
| margin: 0 auto; | |
| } | |
| .input-wrapper { | |
| position: relative; | |
| background-color: var(--bg-input); | |
| border: 1px solid var(--border-color); | |
| border-radius: 16px; | |
| padding: 8px 16px; | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| box-shadow: 0 4px 20px rgba(0,0,0,0.2); | |
| transition: var(--transition-smooth); | |
| } | |
| .input-wrapper:focus-within { | |
| border-color: var(--color-primary); | |
| box-shadow: 0 0 14px var(--color-primary-glow); | |
| } | |
| .input-wrapper textarea { | |
| flex-grow: 1; | |
| background: transparent; | |
| border: none; | |
| outline: none; | |
| color: var(--text-main); | |
| font-family: var(--font-sans); | |
| font-size: 14px; | |
| padding: 8px 0; | |
| resize: none; | |
| max-height: 200px; | |
| line-height: 1.5; | |
| } | |
| .input-wrapper textarea::placeholder { | |
| color: var(--text-dark); | |
| } | |
| .input-actions { | |
| display: flex; | |
| align-items: center; | |
| align-self: flex-end; | |
| margin-bottom: 4px; | |
| } | |
| .input-actions button { | |
| width: 36px; | |
| height: 36px; | |
| border-radius: 10px; | |
| background: linear-gradient(135deg, var(--color-primary), var(--color-secondary)); | |
| color: white; | |
| border: none; | |
| cursor: pointer; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 14px; | |
| transition: var(--transition-smooth); | |
| } | |
| .input-actions button:disabled { | |
| background: rgba(255, 255, 255, 0.03); | |
| border: 1px solid var(--border-color); | |
| color: var(--text-dark); | |
| cursor: not-allowed; | |
| } | |
| .input-actions button:hover:not(:disabled) { | |
| box-shadow: 0 0 10px var(--color-primary-glow); | |
| transform: scale(1.03); | |
| } | |
| .input-hint { | |
| font-size: 10px; | |
| color: var(--text-dark); | |
| text-align: center; | |
| margin-top: 8px; | |
| font-weight: 500; | |
| } | |
| .input-hint kbd { | |
| background-color: rgba(255, 255, 255, 0.05); | |
| border: 1px solid var(--border-color); | |
| padding: 2px 6px; | |
| border-radius: 4px; | |
| font-family: var(--font-sans); | |
| font-size: 9px; | |
| } | |
| /* --- Code & Markdown Formatting --- */ | |
| .message-content p { | |
| margin-bottom: 12px; | |
| } | |
| .message-content p:last-child { | |
| margin-bottom: 0; | |
| } | |
| .message-content ul, .message-content ol { | |
| margin-bottom: 12px; | |
| padding-left: 20px; | |
| } | |
| .message-content li { | |
| margin-bottom: 4px; | |
| } | |
| .message-content code:not(pre code) { | |
| background-color: rgba(255, 255, 255, 0.08); | |
| color: #e5c07b; | |
| padding: 2px 6px; | |
| border-radius: 4px; | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| } | |
| /* Code container styling */ | |
| .code-container { | |
| margin: 16px 0; | |
| border-radius: 12px; | |
| border: 1px solid var(--border-color); | |
| overflow: hidden; | |
| background-color: #1e1e24; | |
| } | |
| .code-header { | |
| background-color: rgba(0, 0, 0, 0.2); | |
| padding: 10px 16px; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.05); | |
| font-family: var(--font-display); | |
| font-size: 12px; | |
| font-weight: 600; | |
| color: var(--text-muted); | |
| } | |
| .code-header .lang-label { | |
| text-transform: uppercase; | |
| font-size: 10px; | |
| letter-spacing: 0.5px; | |
| color: var(--color-primary); | |
| } | |
| .copy-code-btn { | |
| background: transparent; | |
| border: none; | |
| color: var(--text-muted); | |
| cursor: pointer; | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| font-size: 11px; | |
| font-weight: 500; | |
| transition: var(--transition-fast); | |
| } | |
| .copy-code-btn:hover { | |
| color: var(--text-main); | |
| } | |
| .code-container pre { | |
| margin: 0 ; | |
| padding: 16px ; | |
| background: transparent ; | |
| font-family: var(--font-mono) ; | |
| font-size: 13px ; | |
| overflow-x: auto; | |
| } | |
| /* Custom Scrollbar */ | |
| ::-webkit-scrollbar { | |
| width: 8px; | |
| height: 8px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: transparent; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: rgba(255, 255, 255, 0.06); | |
| border-radius: 4px; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| background: rgba(255, 255, 255, 0.12); | |
| } | |
| /* Animations */ | |
| @keyframes pulse { | |
| 0% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.4); } | |
| 70% { transform: scale(1); box-shadow: 0 0 0 6px rgba(16, 185, 129, 0); } | |
| 100% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); } | |
| } | |
| @keyframes flash { | |
| 0% { opacity: 0.5; } | |
| 100% { opacity: 1; } | |
| } | |
| @keyframes fade-in { | |
| from { opacity: 0; transform: scale(0.98); } | |
| to { opacity: 1; transform: scale(1); } | |
| } | |
| @keyframes fade-up { | |
| from { opacity: 0; transform: translateY(12px); } | |
| to { opacity: 1; transform: translateY(0); } | |
| } | |
| /* Responsive adjustments */ | |
| @media(max-width: 900px) { | |
| .app-container { | |
| flex-direction: column; | |
| } | |
| .sidebar { | |
| width: 100%; | |
| height: auto; | |
| border-right: none; | |
| border-bottom: 1px solid var(--border-color); | |
| } | |
| .sidebar-menu { | |
| display: none; /* Collapsed in mobile for cleanliness */ | |
| } | |
| .quick-prompts-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| .chat-header { | |
| padding: 0 20px; | |
| } | |
| .messages-container { | |
| padding: 20px; | |
| } | |
| .message { | |
| max-width: 95%; | |
| } | |
| } | |