/* ── ChatPanel ────────────────────────────── */ .chat-panel { display: flex; flex-direction: column; flex: 1; min-width: 0; height: 100vh; } /* ── Header ── */ .chat-header { display: flex; align-items: center; justify-content: space-between; padding: 0.85rem 1.5rem; background: var(--glass); border-bottom: 1px solid var(--glass-border); backdrop-filter: blur(20px) saturate(1.6); -webkit-backdrop-filter: blur(20px) saturate(1.6); position: relative; z-index: 10; } .chat-title { display: flex; align-items: center; gap: 0.65rem; } .chat-logo { width: 32px; height: 32px; border-radius: 8px; background: linear-gradient(135deg, var(--accent), var(--accent-2)); display: flex; align-items: center; justify-content: center; font-size: 1rem; box-shadow: 0 0 16px var(--accent-glow); } .chat-title h1 { font-size: 1rem; font-weight: 600; color: var(--text-1); margin: 0; letter-spacing: -0.01em; } .chat-header-actions { display: flex; align-items: center; gap: 0.6rem; } .icon-btn { background: var(--glass); border: 1px solid var(--glass-border); border-radius: var(--radius-sm); color: var(--text-3); padding: 0.4rem; cursor: pointer; display: flex; align-items: center; transition: all 0.2s ease; } .icon-btn:hover { background: var(--hover-bg); color: var(--text-2); border-color: var(--hover-border); } .danger-btn:hover { background: rgba(248, 113, 113, 0.1); color: var(--danger); border-color: rgba(248, 113, 113, 0.2); } .status-badge { display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.72rem; font-weight: 500; text-transform: uppercase; letter-spacing: 0.06em; padding: 0.3rem 0.65rem; border-radius: 100px; background: rgba(52, 211, 153, 0.08); border: 1px solid rgba(52, 211, 153, 0.15); } .status-badge.disconnected { background: rgba(248, 113, 113, 0.08); border-color: rgba(248, 113, 113, 0.15); } /* ── Messages ── */ .messages-container { flex: 1; overflow-y: auto; padding: 1.5rem 2rem 1rem; max-width: 960px; margin: 0 auto; width: 100%; } /* ── Empty state ── */ .empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; text-align: center; gap: 0.3rem; animation: fadeIn 0.5s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } } .empty-icon { width: 72px; height: 72px; border-radius: 20px; background: linear-gradient(135deg, rgba(109, 92, 255, 0.12), rgba(56, 189, 248, 0.12)); border: 1px solid rgba(109, 92, 255, 0.15); display: flex; align-items: center; justify-content: center; font-size: 2rem; margin-bottom: 0.75rem; box-shadow: 0 0 40px rgba(109, 92, 255, 0.1); } .empty-state h2 { font-size: 1.6rem; font-weight: 700; color: var(--text-1); margin: 0; letter-spacing: -0.02em; } .empty-state p { max-width: 380px; font-size: 0.88rem; line-height: 1.55; color: var(--text-2); margin: 0.15rem 0 1.25rem; } .example-queries { display: flex; flex-wrap: wrap; gap: 0.5rem; justify-content: center; } .example-queries button { background: var(--glass); border: 1px solid var(--glass-border); border-radius: 100px; color: var(--text-2); padding: 0.5rem 1rem; font-size: 0.8rem; font-family: inherit; cursor: pointer; transition: all 0.25s ease; white-space: nowrap; } .example-queries button:hover { background: rgba(109, 92, 255, 0.1); border-color: rgba(109, 92, 255, 0.25); color: var(--text-1); transform: translateY(-1px); box-shadow: 0 4px 16px rgba(109, 92, 255, 0.12); } /* ── Thinking ── */ .thinking-indicator { display: inline-flex; align-items: center; gap: 0.5rem; color: var(--accent); font-size: 0.82rem; font-weight: 500; padding: 0.6rem 1rem; background: rgba(109, 92, 255, 0.06); border: 1px solid rgba(109, 92, 255, 0.12); border-radius: 100px; margin-bottom: 0.75rem; animation: fadeIn 0.3s ease; } .spin { animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* ── Input bar ── */ .input-bar { display: flex; align-items: flex-end; gap: 0.6rem; padding: 0.85rem 2rem 1.1rem; background: var(--glass); border-top: 1px solid var(--glass-border); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); max-width: 960px; margin: 0 auto; width: 100%; } .input-bar textarea { flex: 1; resize: none; border: 1px solid var(--glass-border); border-radius: var(--radius); background: var(--input-bg); color: var(--text-1); padding: 0.7rem 1rem; font-size: 0.9rem; font-family: inherit; line-height: 1.45; outline: none; transition: all 0.25s ease; } .input-bar textarea:focus { border-color: rgba(109, 92, 255, 0.4); box-shadow: 0 0 0 3px rgba(109, 92, 255, 0.08); background: var(--input-focus-bg); } .input-bar textarea::placeholder { color: var(--text-3); } .input-bar textarea:disabled { opacity: 0.35; cursor: not-allowed; } .send-btn { flex-shrink: 0; width: 2.6rem; height: 2.6rem; display: flex; align-items: center; justify-content: center; border: none; border-radius: var(--radius); background: linear-gradient(135deg, var(--accent), #8b5cf6); color: #fff; cursor: pointer; transition: all 0.25s ease; box-shadow: 0 2px 12px var(--accent-glow); } .send-btn:hover:not(:disabled) { filter: brightness(1.15); transform: translateY(-1px); box-shadow: 0 4px 20px var(--accent-glow); } .send-btn:active:not(:disabled) { transform: translateY(0); } .send-btn:disabled { opacity: 0.3; cursor: not-allowed; box-shadow: none; } .empty-warning { font-size: 0.78rem !important; color: var(--text-3) !important; opacity: 0.8; margin-top: -0.5rem !important; }