:root {
--vt-font-sans: var(--vscode-font-family);
--vt-font-mono: var(--vscode-editor-font-family);
}
body {
margin: 0;
min-height: 100vh;
font-family: var(--vt-font-sans);
color: var(--vscode-foreground);
background: transparent;
}
.chat-root {
display: flex;
flex-direction: column;
align-items: center;
min-height: 100vh;
padding: 0;
}
.chat-surface {
display: flex;
flex-direction: column;
width: min(820px, 100%);
margin: 0 auto;
padding: 0;
background: transparent;
box-shadow: none;
border: none;
}
.chat-header {
display: flex;
align-items: center;
justify-content: flex-start;
padding: 0.5rem 1rem;
border-bottom: 1px solid var(--vscode-panel-border);
background: transparent;
}
.chat-title {
display: flex;
align-items: baseline;
gap: 0.5rem;
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--vscode-descriptionForeground);
}
.chat-logo {
font-weight: 600;
font-size: 0.75rem;
}
.chat-status {
font-size: 0.75rem;
color: var(--vscode-descriptionForeground);
letter-spacing: 0.05em;
font-weight: 500;
min-height: 1.2em;
display: flex;
align-items: center;
gap: 0.35rem;
animation: status-pulse 2s ease-in-out infinite;
}
.chat-header-actions {
display: flex;
gap: 0.5rem;
margin-left: auto;
}
.chat-status:empty {
display: none;
}
@keyframes status-pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.7;
}
}
.chat-status.idle {
animation: none;
opacity: 0.6;
}
.chat-status.error {
color: var(--vscode-errorForeground);
animation: none;
}
.chat-status-indicators {
display: flex;
align-items: center;
gap: 0.75rem;
font-size: 0.7rem;
color: var(--vscode-descriptionForeground);
padding-left: 0.5rem;
border-left: 1px solid var(--vscode-panel-border);
margin-left: auto;
}
.status-indicator {
display: flex;
align-items: center;
gap: 0.25rem;
white-space: nowrap;
}
.status-indicator-dot {
display: inline-block;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--vscode-descriptionForeground);
}
.status-indicator-dot.active {
background: var(--vscode-notificationCenterHeader-background);
animation: dot-pulse 1.5s ease-in-out infinite;
}
.status-indicator-dot.success {
background: var(--vscode-testing-runAction);
}
.status-indicator-dot.error {
background: var(--vscode-errorForeground);
}
@keyframes dot-pulse {
0%, 100% {
opacity: 1;
transform: scale(1);
}
50% {
opacity: 0.6;
transform: scale(0.8);
}
}
.chat-transcript {
flex: 1;
display: flex;
flex-direction: column;
gap: 0.35rem;
padding: 0.75rem 1rem 1rem;
overflow-y: auto;
scroll-behavior: smooth;
background: transparent;
}
.chat-message-wrapper {
display: flex;
flex-direction: column;
gap: 0.1rem;
content-visibility: auto;
contain-intrinsic-size: auto 48px;
margin-bottom: 0.35rem;
}
.chat-message-wrapper.user {
align-items: flex-end;
}
.chat-message-wrapper.assistant,
.chat-message-wrapper.system,
.chat-message-wrapper.tool {
align-items: flex-start;
}
.chat-message-wrapper.assistant .chat-message {
font-style: italic;
opacity: 0.9;
}
.chat-message {
padding: 0;
font-size: 12px;
line-height: 1.45;
word-break: break-word;
background: transparent;
border: none;
color: var(--vscode-foreground);
text-align: left;
}
.chat-message p {
margin: 0.35rem 0;
white-space: pre-wrap;
word-wrap: break-word;
overflow-wrap: break-word;
line-height: 1.5;
}
.chat-message p:first-child {
margin-top: 0;
}
.chat-message p:last-child {
margin-bottom: 0;
}
.chat-message h1,
.chat-message h2,
.chat-message h3,
.chat-message h4,
.chat-message h5,
.chat-message h6 {
margin: 0.75rem 0 0.35rem 0;
font-weight: 600;
color: var(--vscode-foreground);
line-height: 1.4;
}
.chat-message h1 { font-size: 1.3rem; }
.chat-message h2 { font-size: 1.15rem; }
.chat-message h3 { font-size: 1.05rem; }
.chat-message h4 { font-size: 1rem; }
.chat-message h5 { font-size: 0.95rem; }
.chat-message h6 { font-size: 0.9rem; color: var(--vscode-descriptionForeground); }
.chat-message strong {
font-weight: 600;
color: var(--vscode-foreground);
}
.chat-message em {
font-style: italic;
color: var(--vscode-descriptionForeground);
}
.chat-message del {
text-decoration: line-through;
color: var(--vscode-descriptionForeground);
}
.chat-message code:not(.hljs) {
padding: 0.1rem 0.3rem;
background: var(--vscode-editorCodeLens-background);
border-radius: 3px;
font-family: var(--vt-font-mono);
font-size: 11px;
color: var(--vscode-editor-foreground);
}
.chat-message pre {
margin: 0.5rem 0;
padding: 0.75rem;
background: var(--vscode-editor-background);
border: 1px solid var(--vscode-panel-border);
border-radius: 6px;
overflow-x: auto;
font-family: var(--vt-font-mono);
font-size: 11px;
line-height: 1.5;
position: relative;
}
.chat-message pre::before {
content: attr(data-language);
position: absolute;
top: 0.25rem;
right: 2.5rem;
font-size: 10px;
color: var(--vscode-descriptionForeground);
opacity: 0;
transition: opacity 0.2s;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.chat-message pre:hover::before {
opacity: 0.7;
}
.chat-message pre code {
padding: 0;
background: transparent;
border-radius: 0;
color: inherit;
display: block;
}
.chat-message code.hljs {
padding: 0;
background: transparent;
border-radius: 0;
overflow: visible;
}
.code-block-wrapper {
position: relative;
margin: 0.5rem 0;
}
.code-block-wrapper pre {
padding-right: 2.75rem;
}
.code-block-actions {
display: flex;
gap: 0.25rem;
position: absolute;
top: 0.35rem;
right: 0.35rem;
opacity: 0;
transition: opacity 0.2s ease-in-out;
z-index: 10;
}
.code-block-wrapper:hover .code-block-actions {
opacity: 1;
}
.code-copy-button,
.code-block-actions button {
padding: 0.35rem 0.5rem;
background: var(--vscode-button-background);
color: var(--vscode-button-foreground);
border: 1px solid transparent;
border-radius: 3px;
cursor: pointer;
font-size: 10px;
font-weight: 500;
transition: all 0.2s ease;
min-width: 40px;
}
.code-copy-button:hover,
.code-block-actions button:hover {
background: var(--vscode-button-hoverBackground);
border-color: var(--vscode-button-border);
}
.code-copy-button:active,
.code-block-actions button:active {
background: var(--vscode-button-activeBackground);
opacity: 0.8;
}
.code-copy-button.copied {
background: var(--vscode-testing-runAction);
}
.chat-message ul,
.chat-message ol {
margin: 0.25rem 0;
padding-left: 1.5rem;
}
.chat-message li {
margin: 0.1rem 0;
}
.chat-message table {
margin: 0.5rem 0;
border-collapse: collapse;
font-size: 11px;
width: 100%;
}
.chat-message table th,
.chat-message table td {
padding: 0.5rem;
border: 1px solid var(--vscode-panel-border);
text-align: left;
}
.chat-message table th {
background: var(--vscode-editorCodeLens-background);
font-weight: 600;
}
.chat-message table tr:nth-child(even) {
background: rgba(127, 127, 127, 0.05);
}
.chat-message blockquote {
margin: 0.5rem 0;
padding-left: 0.75rem;
border-left: 3px solid var(--vscode-panel-border);
color: var(--vscode-descriptionForeground);
font-style: italic;
}
.chat-message a {
color: var(--vscode-textLink-foreground);
text-decoration: none;
cursor: pointer;
}
.chat-message a:hover {
text-decoration: underline;
}
.chat-message--tool {
font-family: var(--vt-font-mono);
font-size: 11px;
}
.chat-message--system {
font-size: 11px;
color: var(--vscode-descriptionForeground);
font-style: italic;
}
.chat-message--error {
font-size: 11px;
color: var(--vscode-errorForeground);
}
.chat-message-meta {
display: none;
gap: 0.35rem;
font-size: 10px;
color: var(--vscode-descriptionForeground);
}
.chat-message-wrapper:hover .chat-message-meta {
display: flex;
}
.chat-message-actions {
display: flex;
gap: 0.25rem;
margin-left: auto;
}
.chat-action-button {
padding: 0.1rem 0.25rem;
border: none;
background: transparent;
color: var(--vscode-descriptionForeground);
cursor: pointer;
font-size: 11px;
}
.chat-action-button:hover {
color: var(--vscode-foreground);
}
.chat-tool-badge,
.chat-hitl-badge {
display: inline-flex;
align-items: center;
gap: 0.25rem;
padding: 0.1rem 0.35rem;
border: 1px solid var(--vscode-panel-border);
border-radius: 999px;
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.chat-reasoning {
padding: 0.25rem 0;
font-size: 11px;
font-style: italic;
color: var(--vscode-disabledForeground);
border-left: none;
}
.chat-root[data-reasoning-visible="false"] .chat-reasoning {
display: none;
}
.chat-toggle {
border: 1px solid var(--vscode-panel-border);
border-radius: 999px;
background: transparent;
color: var(--vscode-descriptionForeground);
font-size: 11px;
padding: 0.2rem 0.6rem;
cursor: pointer;
transition: color 0.15s ease, border-color 0.15s ease;
}
.chat-toggle:hover {
color: var(--vscode-foreground);
border-color: var(--vscode-foreground);
}
.chat-toggle--active {
color: var(--vscode-foreground);
border-color: var(--vscode-foreground);
}
.chat-skeleton {
display: flex;
flex-direction: column;
gap: 0.3rem;
padding: 0.5rem 0;
}
.chat-skeleton-line {
height: 10px;
background: var(--vscode-panel-border);
opacity: 0.35;
}
.chat-composer {
display: flex;
flex-direction: column;
gap: 0.5rem;
padding: 0.75rem 1rem 1rem;
border-top: 1px solid var(--vscode-panel-border);
background: transparent;
position: sticky;
bottom: 0;
}
.chat-input {
min-height: 56px;
max-height: 200px;
padding: 0.5rem 0.75rem;
border: 1px solid var(--vscode-input-border);
background: transparent;
color: var(--vscode-input-foreground);
font-family: var(--vt-font-sans);
font-size: 12px;
line-height: 1.45;
resize: vertical;
}
.chat-input::placeholder {
color: var(--vscode-descriptionForeground);
}
.chat-actions {
display: flex;
gap: 0.4rem;
justify-content: flex-end;
}
.chat-button {
padding: 0.35rem 0.75rem;
border: 1px solid var(--vscode-input-border);
background: transparent;
color: var(--vscode-foreground);
cursor: pointer;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.chat-button:hover:not(:disabled) {
border-color: var(--vscode-foreground);
}
.chat-button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.chat-button--secondary {
opacity: 0.8;
}
.chat-empty-state {
margin: auto;
text-align: left;
color: var(--vscode-descriptionForeground);
font-size: 12px;
}
.codicon {
font-family: codicon;
font-size: inherit;
vertical-align: middle;
}
@media (max-width: 768px) {
.chat-header {
padding: 0.5rem 0.75rem;
}
.chat-transcript {
padding: 0.5rem 0.75rem;
}
.chat-composer {
padding: 0.5rem 0.75rem 0.75rem;
}
}