winncare / frontend /src /components /ChatView.module.css
esra2001's picture
initial
01a34c2
Raw
History Blame Contribute Delete
4.21 kB
.root {
display: flex;
flex-direction: column;
height: 100%;
gap: 12px;
}
.toolbar {
display: flex;
align-items: center;
gap: 12px;
flex-shrink: 0;
}
.docCount { font-size: .85rem; color: var(--muted); white-space: nowrap; }
.catFilter { max-width: 240px; }
.clearBtn {
background: transparent;
color: var(--muted);
font-size: .8rem;
padding: 5px 12px;
border: 1px solid var(--border);
margin-left: auto;
}
.clearBtn:hover { color: var(--error); border-color: var(--error); }
.thread {
flex: 1;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 12px;
padding: 4px 2px;
}
.empty {
color: var(--muted);
font-size: .9rem;
text-align: center;
margin-top: 60px;
}
.msg {
max-width: 82%;
padding: 12px 16px;
border-radius: 12px;
line-height: 1.55;
}
.user {
align-self: flex-end;
background: var(--primary);
color: #fff;
border-bottom-right-radius: 3px;
}
.assistant {
align-self: flex-start;
background: var(--surface);
border: 1px solid var(--border);
box-shadow: var(--shadow);
border-bottom-left-radius: 3px;
}
.senderName {
display: block;
font-size: .72rem;
font-weight: 700;
color: #1e4fa8;
margin-bottom: 4px;
letter-spacing: .3px;
}
.text { white-space: pre-wrap; }
/* ── Markdown renderer ── */
.markdown { font-size: .93rem; line-height: 1.65; }
.markdown p { margin: 0 0 8px; }
.markdown p:last-child { margin-bottom: 0; }
.markdown ul, .markdown ol { padding-left: 20px; margin: 6px 0 8px; }
.markdown li { margin-bottom: 3px; }
.markdown strong { font-weight: 700; color: #1e293b; }
.markdown em { font-style: italic; }
.markdown h1, .markdown h2, .markdown h3 {
font-weight: 700;
margin: 12px 0 4px;
color: #1e293b;
}
.markdown h1 { font-size: 1.05rem; }
.markdown h2 { font-size: 1rem; }
.markdown h3 { font-size: .95rem; }
.markdown code {
font-family: 'Consolas', 'Courier New', monospace;
font-size: .82rem;
background: #f1f5f9;
border: 1px solid #e2e8f0;
border-radius: 4px;
padding: 1px 5px;
}
.markdown pre {
background: #f8fafc;
border: 1px solid #e2e8f0;
border-radius: 6px;
padding: 10px 12px;
overflow-x: auto;
margin: 8px 0;
}
.markdown pre code {
background: none;
border: none;
padding: 0;
font-size: .82rem;
}
.markdown blockquote {
border-left: 3px solid #1e4fa8;
margin: 8px 0;
padding: 4px 12px;
color: var(--muted);
font-style: italic;
}
.markdown hr {
border: none;
border-top: 1px solid var(--border);
margin: 10px 0;
}
.markdown table { border-collapse: collapse; width: 100%; margin: 8px 0; font-size: .85rem; }
.markdown th, .markdown td { border: 1px solid var(--border); padding: 6px 10px; text-align: left; }
.markdown th { background: #f1f5f9; font-weight: 600; }
.meta {
margin-top: 8px;
display: flex;
flex-direction: column;
gap: 6px;
}
.citations {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.citation {
font-size: .75rem;
background: #f1f5f9;
border: 1px solid var(--border);
border-radius: 4px;
padding: 2px 7px;
color: var(--muted);
}
.pathBadge {
font-size: .72rem;
font-weight: 600;
align-self: flex-start;
padding: 2px 8px;
border-radius: 4px;
}
.pathBadge[data-path='vector'] { background: #dbeafe; color: #1d4ed8; }
.pathBadge[data-path='sql'] { background: #dcfce7; color: #166534; }
.sqlDetails { font-size: .8rem; }
.sqlDetails summary { cursor: pointer; color: var(--muted); }
.sqlDetails pre {
margin-top: 4px;
padding: 8px;
background: #f8fafc;
border: 1px solid var(--border);
border-radius: 6px;
overflow-x: auto;
font-size: .78rem;
}
.thinking {
color: var(--muted);
font-style: italic;
animation: pulse 1.2s ease-in-out infinite;
}
@keyframes pulse { 0%,100% { opacity: 1 } 50% { opacity: .4 } }
.inputRow {
display: flex;
gap: 8px;
flex-shrink: 0;
align-items: flex-end;
}
.textarea {
flex: 1;
resize: none;
line-height: 1.5;
}
.sendBtn {
background: var(--primary);
color: #fff;
font-weight: 600;
flex-shrink: 0;
padding: 10px 22px;
align-self: flex-end;
}
.sendBtn:hover:not(:disabled) { background: var(--primary-h); }
.sendBtn:disabled { opacity: .5; cursor: not-allowed; }