Dhanrajtz5rt's picture
Upload 5 files
8a825e9 verified
Raw History Blame Contribute Delete
28.4 kB
/* ═══════════════════════════════════════════════════
QWEN AI CHATBOT β€” PREMIUM CLAUDE-LIKE UI
Font: Lora (body) + JetBrains Mono (code) + Outfit (UI)
Theme: Deep slate dark, warm amber accents
═══════════════════════════════════════════════════ */
/* ── CSS Variables ──────────────────────────────────── */
:root {
--bg-base: #0f1117;
--bg-surface: #161b25;
--bg-elevated: #1e2533;
--bg-hover: #252d3d;
--bg-input: #1a2030;
--border: #2a3347;
--border-subtle: #1f2940;
--text-primary: #e8edf5;
--text-secondary: #8b9ab8;
--text-muted: #4e5d78;
--text-inverse: #0f1117;
--accent: #f0b429;
--accent-glow: rgba(240, 180, 41, 0.15);
--accent-dim: rgba(240, 180, 41, 0.08);
--think-bg: #1a1f10;
--think-border: #3d4a1f;
--think-text: #b8c88a;
--think-accent: #a8c428;
--user-bg: #1e2d4a;
--user-border: #2a4070;
--assistant-bg: #161b25;
--error-bg: #2a1a1a;
--error-text: #f87171;
--radius-sm: 6px;
--radius-md: 12px;
--radius-lg: 16px;
--radius-xl: 24px;
--sidebar-w: 260px;
--anim-fast: 0.15s;
--anim-mid: 0.25s;
--anim-slow: 0.4s;
--font-ui: 'Outfit', system-ui, sans-serif;
--font-prose: 'Lora', Georgia, serif;
--font-code: 'JetBrains Mono', 'Fira Code', monospace;
}
/* ── Reset + Base ───────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { font-size: 16px; height: 100%; }
body {
font-family: var(--font-ui);
background: var(--bg-base);
color: var(--text-primary);
height: 100vh;
display: flex;
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
/* Scrollbar */
::-webkit-scrollbar { width: 5px; height: 5px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 99px; }
::-webkit-scrollbar-thumb:hover { background: var(--text-muted); }
/* ── SIDEBAR ─────────────────────────────────────────── */
.sidebar {
width: var(--sidebar-w);
background: var(--bg-surface);
border-right: 1px solid var(--border-subtle);
display: flex;
flex-direction: column;
flex-shrink: 0;
transition: transform var(--anim-mid) ease, opacity var(--anim-mid) ease;
z-index: 50;
}
.sidebar.collapsed {
transform: translateX(calc(-1 * var(--sidebar-w)));
position: absolute;
height: 100%;
opacity: 0;
pointer-events: none;
}
.sidebar-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 16px 14px;
border-bottom: 1px solid var(--border-subtle);
}
.logo {
display: flex;
align-items: center;
gap: 8px;
}
.logo-mark {
width: 28px;
height: 28px;
color: var(--accent);
}
.logo-text {
font-family: var(--font-ui);
font-size: 17px;
font-weight: 600;
color: var(--text-primary);
letter-spacing: -0.02em;
}
.logo-accent { color: var(--accent); }
.new-chat-btn {
width: 30px;
height: 30px;
border: 1px solid var(--border);
background: var(--bg-elevated);
border-radius: var(--radius-sm);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
color: var(--text-secondary);
transition: all var(--anim-fast);
}
.new-chat-btn svg { width: 14px; height: 14px; }
.new-chat-btn:hover { background: var(--bg-hover); color: var(--text-primary); border-color: var(--accent); }
.sidebar-search {
display: flex;
align-items: center;
gap: 8px;
padding: 12px 14px;
border-bottom: 1px solid var(--border-subtle);
}
.sidebar-search svg { width: 14px; height: 14px; color: var(--text-muted); flex-shrink: 0; }
.sidebar-search input {
flex: 1;
background: none;
border: none;
outline: none;
font-family: var(--font-ui);
font-size: 13px;
color: var(--text-primary);
}
.sidebar-search input::placeholder { color: var(--text-muted); }
.chat-list {
flex: 1;
overflow-y: auto;
padding: 8px 8px;
}
.chat-item {
display: flex;
align-items: center;
gap: 10px;
padding: 9px 10px;
border-radius: var(--radius-md);
cursor: pointer;
transition: background var(--anim-fast);
group: true;
}
.chat-item:hover { background: var(--bg-hover); }
.chat-item.active { background: var(--accent-dim); }
.chat-item-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--text-muted);
flex-shrink: 0;
transition: background var(--anim-fast);
}
.chat-item.active .chat-item-dot { background: var(--accent); }
.chat-item-title {
font-size: 13px;
color: var(--text-secondary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
flex: 1;
}
.chat-item.active .chat-item-title { color: var(--text-primary); }
.chat-item-delete {
opacity: 0;
background: none;
border: none;
cursor: pointer;
color: var(--text-muted);
padding: 2px;
display: flex;
transition: opacity var(--anim-fast), color var(--anim-fast);
}
.chat-item:hover .chat-item-delete { opacity: 1; }
.chat-item-delete:hover { color: var(--error-text); }
.chat-item-delete svg { width: 13px; height: 13px; }
.sidebar-footer {
padding: 12px;
border-top: 1px solid var(--border-subtle);
display: flex;
flex-direction: column;
gap: 8px;
}
.settings-trigger {
display: flex;
align-items: center;
gap: 8px;
padding: 9px 10px;
border: none;
background: none;
color: var(--text-secondary);
cursor: pointer;
border-radius: var(--radius-sm);
font-family: var(--font-ui);
font-size: 13px;
width: 100%;
transition: background var(--anim-fast), color var(--anim-fast);
}
.settings-trigger svg { width: 15px; height: 15px; }
.settings-trigger:hover { background: var(--bg-hover); color: var(--text-primary); }
.model-badge {
display: flex;
align-items: center;
gap: 6px;
padding: 6px 10px;
background: var(--bg-elevated);
border-radius: var(--radius-sm);
font-size: 11px;
color: var(--text-muted);
font-family: var(--font-code);
}
.model-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--think-accent);
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.3; }
}
/* ── MAIN PANEL ──────────────────────────────────────── */
.main-panel {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
min-width: 0;
}
/* ── TOP BAR ─────────────────────────────────────────── */
.top-bar {
display: flex;
align-items: center;
gap: 12px;
padding: 12px 20px;
border-bottom: 1px solid var(--border-subtle);
background: var(--bg-surface);
flex-shrink: 0;
}
.sidebar-toggle {
background: none;
border: none;
cursor: pointer;
color: var(--text-secondary);
display: flex;
padding: 4px;
border-radius: var(--radius-sm);
transition: color var(--anim-fast), background var(--anim-fast);
}
.sidebar-toggle svg { width: 18px; height: 18px; }
.sidebar-toggle:hover { color: var(--text-primary); background: var(--bg-hover); }
.chat-title-wrap { flex: 1; }
.chat-title {
font-size: 14px;
font-weight: 500;
color: var(--text-secondary);
}
.top-bar-actions { display: flex; align-items: center; gap: 8px; }
.icon-btn {
display: flex;
align-items: center;
gap: 5px;
padding: 6px 10px;
background: none;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-muted);
cursor: pointer;
font-family: var(--font-ui);
font-size: 12px;
transition: all var(--anim-fast);
}
.icon-btn svg { width: 14px; height: 14px; }
.icon-btn:hover { background: var(--bg-hover); color: var(--text-primary); border-color: var(--text-muted); }
.icon-btn.active { color: var(--accent); border-color: var(--accent); background: var(--accent-dim); }
/* ── MESSAGES CONTAINER ──────────────────────────────── */
.messages-container {
flex: 1;
overflow-y: auto;
padding: 0;
scroll-behavior: smooth;
}
/* ── WELCOME SCREEN ──────────────────────────────────── */
.welcome-screen {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 70vh;
padding: 40px 20px;
animation: fadeUp var(--anim-slow) ease;
}
@keyframes fadeUp {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
.welcome-logo {
width: 72px;
height: 72px;
color: var(--accent);
margin-bottom: 24px;
animation: floatLogo 4s ease-in-out infinite;
}
@keyframes floatLogo {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-6px); }
}
.welcome-title {
font-family: var(--font-prose);
font-size: 32px;
font-weight: 500;
color: var(--text-primary);
margin-bottom: 10px;
letter-spacing: -0.03em;
}
.welcome-subtitle {
font-size: 15px;
color: var(--text-secondary);
text-align: center;
line-height: 1.6;
margin-bottom: 32px;
}
.suggestion-chips {
display: flex;
flex-wrap: wrap;
gap: 8px;
justify-content: center;
max-width: 600px;
}
.chip {
padding: 9px 16px;
background: var(--bg-elevated);
border: 1px solid var(--border);
border-radius: var(--radius-xl);
color: var(--text-secondary);
cursor: pointer;
font-family: var(--font-ui);
font-size: 13px;
transition: all var(--anim-fast);
}
.chip:hover {
background: var(--bg-hover);
border-color: var(--accent);
color: var(--text-primary);
transform: translateY(-1px);
}
/* ── MESSAGE BUBBLES ─────────────────────────────────── */
.messages-list {
padding: 20px 0;
max-width: 780px;
margin: 0 auto;
width: 100%;
padding-left: 24px;
padding-right: 24px;
}
.message-row {
display: flex;
gap: 14px;
margin-bottom: 28px;
animation: slideIn var(--anim-mid) ease;
}
@keyframes slideIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.message-row.user { flex-direction: row-reverse; }
.message-avatar {
width: 32px;
height: 32px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 13px;
font-weight: 600;
flex-shrink: 0;
margin-top: 2px;
}
.message-row.user .message-avatar {
background: linear-gradient(135deg, #2a4070, #3a5faa);
color: #a8c4f0;
font-size: 11px;
}
.message-row.assistant .message-avatar {
background: linear-gradient(135deg, #2a3020, #3d4a1f);
color: var(--think-accent);
}
.message-body { flex: 1; min-width: 0; }
.message-row.user .message-body {
display: flex;
flex-direction: column;
align-items: flex-end;
}
/* ── THINKING BLOCK ──────────────────────────────────── */
.thinking-block {
background: var(--think-bg);
border: 1px solid var(--think-border);
border-radius: var(--radius-md);
margin-bottom: 12px;
overflow: hidden;
}
.thinking-header {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 14px;
cursor: pointer;
user-select: none;
transition: background var(--anim-fast);
}
.thinking-header:hover { background: rgba(168, 196, 40, 0.05); }
.thinking-pulse {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--think-accent);
animation: pulse 1.5s ease infinite;
flex-shrink: 0;
}
.thinking-label {
font-size: 12px;
font-weight: 500;
color: var(--think-accent);
flex: 1;
font-family: var(--font-ui);
letter-spacing: 0.02em;
text-transform: uppercase;
}
.thinking-chevron {
color: var(--think-text);
transition: transform var(--anim-fast);
}
.thinking-chevron svg { width: 14px; height: 14px; }
.thinking-block.collapsed .thinking-chevron { transform: rotate(-90deg); }
.thinking-content {
padding: 0 14px 12px;
font-family: var(--font-code);
font-size: 12.5px;
color: var(--think-text);
line-height: 1.7;
white-space: pre-wrap;
word-break: break-word;
border-top: 1px solid var(--think-border);
max-height: 320px;
overflow-y: auto;
padding-top: 10px;
}
.thinking-block.collapsed .thinking-content { display: none; }
/* ── MESSAGE CONTENT ─────────────────────────────────── */
.user-bubble {
background: var(--user-bg);
border: 1px solid var(--user-border);
border-radius: var(--radius-lg) var(--radius-lg) 4px var(--radius-lg);
padding: 12px 16px;
max-width: 600px;
font-size: 15px;
color: var(--text-primary);
line-height: 1.65;
word-break: break-word;
}
.assistant-text {
font-family: var(--font-prose);
font-size: 15.5px;
line-height: 1.75;
color: var(--text-primary);
max-width: 100%;
word-break: break-word;
}
.assistant-text p { margin-bottom: 12px; }
.assistant-text p:last-child { margin-bottom: 0; }
.assistant-text h1, .assistant-text h2, .assistant-text h3 {
font-family: var(--font-ui);
font-weight: 600;
margin: 20px 0 10px;
color: var(--text-primary);
letter-spacing: -0.02em;
}
.assistant-text h1 { font-size: 20px; }
.assistant-text h2 { font-size: 17px; }
.assistant-text h3 { font-size: 15px; }
.assistant-text ul, .assistant-text ol {
margin: 10px 0;
padding-left: 22px;
}
.assistant-text li { margin-bottom: 4px; }
.assistant-text code {
font-family: var(--font-code);
font-size: 13px;
background: var(--bg-elevated);
border: 1px solid var(--border);
border-radius: 4px;
padding: 2px 6px;
color: var(--think-accent);
}
.assistant-text pre {
background: var(--bg-elevated);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 16px;
margin: 14px 0;
overflow-x: auto;
position: relative;
}
.assistant-text pre code {
background: none;
border: none;
padding: 0;
font-size: 13px;
color: var(--text-primary);
}
.assistant-text blockquote {
border-left: 3px solid var(--accent);
padding-left: 16px;
color: var(--text-secondary);
margin: 14px 0;
font-style: italic;
}
.assistant-text strong { font-weight: 600; color: var(--text-primary); }
.assistant-text em { font-style: italic; }
.assistant-text a { color: var(--accent); text-decoration: underline; }
.assistant-text hr { border: none; border-top: 1px solid var(--border); margin: 20px 0; }
/* ── STREAMING CURSOR ────────────────────────────────── */
.cursor-blink {
display: inline-block;
width: 2px;
height: 1em;
background: var(--accent);
vertical-align: text-bottom;
border-radius: 1px;
animation: blink 1s step-end infinite;
}
@keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }
/* ── MEDIA ATTACHMENTS ───────────────────────────────── */
.message-media { margin-bottom: 10px; }
.message-media img {
max-width: 100%;
max-height: 280px;
border-radius: var(--radius-md);
border: 1px solid var(--border);
object-fit: contain;
}
.message-media video {
max-width: 100%;
max-height: 280px;
border-radius: var(--radius-md);
border: 1px solid var(--border);
}
/* ── MESSAGE ACTIONS ─────────────────────────────────── */
.message-actions {
display: flex;
gap: 4px;
margin-top: 8px;
opacity: 0;
transition: opacity var(--anim-fast);
}
.message-row:hover .message-actions { opacity: 1; }
.msg-action-btn {
padding: 4px 8px;
background: none;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-muted);
cursor: pointer;
font-size: 11px;
font-family: var(--font-ui);
display: flex;
align-items: center;
gap: 4px;
transition: all var(--anim-fast);
}
.msg-action-btn svg { width: 11px; height: 11px; }
.msg-action-btn:hover { background: var(--bg-hover); color: var(--text-primary); border-color: var(--text-muted); }
/* ── INPUT AREA ──────────────────────────────────────── */
.input-area-wrapper {
padding: 16px 20px 20px;
background: var(--bg-base);
border-top: 1px solid var(--border-subtle);
flex-shrink: 0;
}
.attachments-preview {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 10px;
max-width: 780px;
margin-left: auto;
margin-right: auto;
}
.attachment-thumb {
position: relative;
border-radius: var(--radius-sm);
overflow: hidden;
border: 1px solid var(--border);
}
.attachment-thumb img,
.attachment-thumb video {
width: 72px;
height: 72px;
object-fit: cover;
display: block;
}
.attachment-thumb .remove-attach {
position: absolute;
top: 3px;
right: 3px;
width: 18px;
height: 18px;
border-radius: 50%;
background: rgba(0,0,0,0.7);
color: #fff;
border: none;
cursor: pointer;
font-size: 10px;
display: flex;
align-items: center;
justify-content: center;
}
.input-area {
max-width: 780px;
margin: 0 auto;
}
.input-box {
display: flex;
align-items: flex-end;
gap: 8px;
background: var(--bg-input);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
padding: 10px 12px;
transition: border-color var(--anim-fast), box-shadow var(--anim-fast);
}
.input-box:focus-within {
border-color: var(--accent);
box-shadow: 0 0 0 3px var(--accent-glow);
}
.attach-menu-wrap { position: relative; }
.attach-btn {
width: 34px;
height: 34px;
background: none;
border: none;
cursor: pointer;
color: var(--text-muted);
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--radius-sm);
transition: all var(--anim-fast);
flex-shrink: 0;
}
.attach-btn svg { width: 18px; height: 18px; }
.attach-btn:hover { color: var(--accent); background: var(--accent-dim); }
.attach-menu {
position: absolute;
bottom: calc(100% + 8px);
left: 0;
background: var(--bg-elevated);
border: 1px solid var(--border);
border-radius: var(--radius-md);
overflow: hidden;
min-width: 160px;
z-index: 100;
display: none;
box-shadow: 0 8px 32px rgba(0,0,0,0.4);
}
.attach-menu.open { display: block; animation: menuOpen var(--anim-fast) ease; }
@keyframes menuOpen {
from { opacity: 0; transform: translateY(6px); }
to { opacity: 1; transform: translateY(0); }
}
.attach-option {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 14px;
background: none;
border: none;
cursor: pointer;
color: var(--text-secondary);
font-family: var(--font-ui);
font-size: 13px;
width: 100%;
transition: all var(--anim-fast);
}
.attach-option svg { width: 15px; height: 15px; }
.attach-option:hover { background: var(--bg-hover); color: var(--text-primary); }
.message-input {
flex: 1;
background: none;
border: none;
outline: none;
resize: none;
font-family: var(--font-ui);
font-size: 15px;
color: var(--text-primary);
line-height: 1.5;
max-height: 200px;
overflow-y: auto;
padding: 4px 0;
}
.message-input::placeholder { color: var(--text-muted); }
.input-right {
display: flex;
align-items: center;
gap: 6px;
flex-shrink: 0;
}
.context-chip {
display: flex;
align-items: center;
gap: 4px;
padding: 5px 9px;
background: var(--bg-elevated);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
font-family: var(--font-code);
font-size: 11px;
color: var(--text-muted);
cursor: pointer;
transition: all var(--anim-fast);
user-select: none;
}
.context-chip svg { width: 12px; height: 12px; }
.context-chip:hover { border-color: var(--accent); color: var(--accent); background: var(--accent-dim); }
.send-btn {
width: 36px;
height: 36px;
background: var(--accent);
border: none;
border-radius: var(--radius-sm);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
color: var(--text-inverse);
transition: all var(--anim-fast);
flex-shrink: 0;
}
.send-btn svg { width: 15px; height: 15px; }
.send-btn:hover:not(:disabled) { background: #e0a020; transform: scale(1.05); }
.send-btn:disabled { background: var(--bg-elevated); color: var(--text-muted); cursor: not-allowed; transform: none; }
.disclaimer {
text-align: center;
font-size: 11px;
color: var(--text-muted);
margin-top: 10px;
font-family: var(--font-code);
}
/* ── SETTINGS PANEL ──────────────────────────────────── */
.settings-overlay {
position: fixed;
inset: 0;
background: rgba(0,0,0,0.5);
z-index: 200;
opacity: 0;
pointer-events: none;
transition: opacity var(--anim-mid);
backdrop-filter: blur(2px);
}
.settings-overlay.open { opacity: 1; pointer-events: all; }
.settings-panel {
position: fixed;
right: 0;
top: 0;
bottom: 0;
width: 380px;
background: var(--bg-surface);
border-left: 1px solid var(--border);
z-index: 201;
transform: translateX(100%);
transition: transform var(--anim-mid) ease;
display: flex;
flex-direction: column;
overflow-y: auto;
}
.settings-panel.open { transform: translateX(0); }
.settings-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 20px 16px;
border-bottom: 1px solid var(--border-subtle);
sticky: top;
}
.settings-header h2 {
font-size: 16px;
font-weight: 600;
color: var(--text-primary);
font-family: var(--font-ui);
}
.close-btn {
background: none;
border: none;
color: var(--text-muted);
cursor: pointer;
padding: 4px;
border-radius: var(--radius-sm);
display: flex;
transition: all var(--anim-fast);
}
.close-btn svg { width: 16px; height: 16px; }
.close-btn:hover { color: var(--text-primary); background: var(--bg-hover); }
.settings-section {
padding: 20px;
border-bottom: 1px solid var(--border-subtle);
}
.settings-label {
display: flex;
align-items: center;
gap: 7px;
font-size: 13px;
font-weight: 500;
color: var(--text-secondary);
margin-bottom: 12px;
font-family: var(--font-ui);
}
.settings-label svg { width: 14px; height: 14px; }
.settings-value {
margin-left: auto;
font-family: var(--font-code);
font-size: 12px;
color: var(--accent);
}
.system-prompt-textarea {
width: 100%;
background: var(--bg-input);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 12px;
font-family: var(--font-ui);
font-size: 13px;
color: var(--text-primary);
resize: vertical;
outline: none;
line-height: 1.6;
min-height: 100px;
transition: border-color var(--anim-fast);
}
.system-prompt-textarea:focus { border-color: var(--accent); }
.slider-track { margin-bottom: 8px; }
.slider {
width: 100%;
appearance: none;
height: 4px;
border-radius: 2px;
background: var(--bg-elevated);
outline: none;
cursor: pointer;
accent-color: var(--accent);
}
.slider-labels {
display: flex;
justify-content: space-between;
margin-top: 6px;
font-size: 10px;
color: var(--text-muted);
font-family: var(--font-code);
}
.settings-hint {
font-size: 11px;
color: var(--text-muted);
margin-top: 8px;
line-height: 1.5;
}
.toggle-row {
display: flex;
align-items: center;
justify-content: space-between;
}
.toggle-desc {
font-size: 13px;
color: var(--text-muted);
}
.toggle-switch {
position: relative;
width: 40px;
height: 22px;
flex-shrink: 0;
}
.toggle-switch input { opacity: 0; width: 0; height: 0; }
.toggle-knob {
position: absolute;
inset: 0;
background: var(--bg-elevated);
border: 1px solid var(--border);
border-radius: 99px;
cursor: pointer;
transition: background var(--anim-fast);
}
.toggle-knob::after {
content: '';
position: absolute;
top: 3px;
left: 3px;
width: 14px;
height: 14px;
border-radius: 50%;
background: var(--text-muted);
transition: transform var(--anim-fast), background var(--anim-fast);
}
.toggle-switch input:checked + .toggle-knob { background: var(--accent-dim); border-color: var(--accent); }
.toggle-switch input:checked + .toggle-knob::after { transform: translateX(18px); background: var(--accent); }
.apply-btn {
margin: 20px;
padding: 12px;
background: var(--accent);
border: none;
border-radius: var(--radius-md);
color: var(--text-inverse);
font-family: var(--font-ui);
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: background var(--anim-fast);
}
.apply-btn:hover { background: #e0a020; }
/* ── CONTEXT QUICK PANEL ─────────────────────────────── */
.context-quick-panel {
position: absolute;
background: var(--bg-elevated);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 12px;
z-index: 150;
display: none;
box-shadow: 0 8px 32px rgba(0,0,0,0.4);
animation: menuOpen var(--anim-fast) ease;
}
.context-quick-panel.open { display: block; }
.cqp-header {
font-size: 11px;
font-weight: 500;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.06em;
margin-bottom: 10px;
}
.cqp-presets {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.cqp-preset {
padding: 5px 12px;
background: var(--bg-hover);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-secondary);
cursor: pointer;
font-family: var(--font-code);
font-size: 12px;
transition: all var(--anim-fast);
}
.cqp-preset:hover, .cqp-preset.active {
background: var(--accent-dim);
border-color: var(--accent);
color: var(--accent);
}
/* ── LOADING INDICATOR ───────────────────────────────── */
.loading-dots {
display: flex;
align-items: center;
gap: 4px;
padding: 4px 0;
}
.loading-dots span {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--text-muted);
animation: dotBounce 1.2s infinite;
}
.loading-dots span:nth-child(2) { animation-delay: 0.2s; }
.loading-dots span:nth-child(3) { animation-delay: 0.4s; }
@keyframes dotBounce {
0%, 80%, 100% { transform: scale(0.7); opacity: 0.5; }
40% { transform: scale(1); opacity: 1; }
}
/* ── ERROR MESSAGE ───────────────────────────────────── */
.error-msg {
background: var(--error-bg);
border: 1px solid rgba(248, 113, 113, 0.3);
border-radius: var(--radius-md);
padding: 12px 16px;
color: var(--error-text);
font-size: 13px;
}
/* ── RESPONSIVE ──────────────────────────────────────── */
@media (max-width: 768px) {
.sidebar {
position: fixed;
height: 100%;
transform: translateX(calc(-1 * var(--sidebar-w)));
}
.sidebar.mobile-open {
transform: translateX(0);
opacity: 1;
pointer-events: all;
}
.settings-panel { width: 100%; }
.messages-list { padding-left: 16px; padding-right: 16px; }
.welcome-title { font-size: 24px; }
}
/* ── COPY CODE BUTTON ────────────────────────────────── */
.code-wrapper { position: relative; }
.copy-code-btn {
position: absolute;
top: 8px;
right: 8px;
padding: 4px 8px;
background: var(--bg-hover);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-muted);
cursor: pointer;
font-size: 11px;
font-family: var(--font-ui);
transition: all var(--anim-fast);
opacity: 0;
}
.code-wrapper:hover .copy-code-btn { opacity: 1; }
.copy-code-btn:hover { background: var(--bg-base); color: var(--text-primary); }