qwai-tech_obsidian-plugin-i.../styles.css
Leon Ward 8a845b310a fix(lint): clear all obsidianmd errors for marketplace (0 errors)
Brings the marketplace reviewer lint (eslint-plugin-obsidianmd 0.3.0) to 0 errors.

- no-static-styles-assignment (129): convert all inline setCssProps/style
  assignments to CSS classes in styles.css; genuinely dynamic values (textarea
  auto-resize height, dynamic badge/avatar colors, caller-supplied flex/width)
  use CSS custom properties, which the rule allows.
- prefer-get-language: main.ts now uses getLanguage() instead of
  localStorage.getItem('language') to detect Chinese.
- no-unsupported-api: getLanguage() needs Obsidian 1.8.7, so bump manifest
  minAppVersion (and versions.json for 0.0.14) from 1.7.2 to 1.8.7.
- no-console: drop two debug console.log calls in release e2e specs.
- test mock: add Node.prototype.instanceOf and getLanguage() to __mocks__/obsidian
  so the .instanceOf()/getLanguage() conversions work under jest.

86 warnings remain (prefer-active-doc, ui sentence-case) — addressed separately.
Verified: 0 lint errors, tsc clean, full suite 503 passed / 1 skipped, build OK.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 11:13:20 +08:00

5570 lines
110 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ========================================
* Design Tokens (subset from design-tokens.css)
* ======================================== */
:root {
/* Spacing */
--ia-spacing-4xs: 0.25rem; /* 4px */
--ia-spacing-3xs: 0.375rem; /* 6px */
--ia-spacing-2xs: 0.5rem; /* 8px */
--ia-spacing-xs: 0.75rem; /* 12px */
--ia-spacing-s: 1rem; /* 16px */
--ia-spacing-m: 1.5rem; /* 24px */
/* Font sizes */
--ia-font-size-3xs: 0.625rem; /* 10px */
--ia-font-size-2xs: 0.6875rem; /* 11px */
--ia-font-size-xs: 0.75rem; /* 12px */
--ia-font-size-s: 0.8125rem; /* 13px */
--ia-font-size-m: 0.875rem; /* 14px */
--ia-font-size-l: 1rem; /* 16px */
/* Border radius */
--ia-radius-s: 4px;
--ia-radius-base: 6px;
--ia-radius-m: 8px;
--ia-radius-l: 12px;
--ia-radius-full: 9999px;
/* Shadows */
--ia-shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
--ia-shadow-s: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
--ia-shadow-m: 0 4px 12px rgba(0, 0, 0, 0.12);
/* Transitions */
--ia-transition-fast: 150ms ease;
--ia-transition-base: 200ms ease;
--ia-transition-slow: 300ms ease;
}
/* Settings styles are bundled via main.ts import */
.ia-ribbon-chat-icon {
color: var(--interactive-accent);
transition: color var(--ia-transition-fast);
}
.ia-ribbon-chat-icon:hover {
color: var(--interactive-accent-hover, var(--interactive-accent));
}
/* Intelligence Assistant Settings Refresh */
.ia-setting-label--required {
position: relative;
padding-right: 6px;
font-weight: 600;
}
.ia-setting-label--required::after {
content: '*';
color: var(--text-error);
margin-left: 4px;
font-weight: 700;
font-size: 0.9em;
}
.ia-section-description {
margin: 0 0 12px 0;
color: var(--text-muted);
font-size: var(--ia-font-size-s);
line-height: 1.5;
}
.ia-section-description--spaced {
margin-bottom: 20px;
}
.ia-section-actions {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 12px;
flex-wrap: wrap;
}
.ia-section-actions--wrap {
justify-content: flex-start;
}
.ia-section-summary {
display: flex;
align-items: center;
gap: 8px;
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
}
.ia-section-summary-pill {
padding: 2px 8px;
border-radius: var(--ia-radius-full);
background: var(--background-secondary);
color: var(--text-muted);
font-size: var(--ia-font-size-2xs);
font-weight: 600;
}
.ia-empty-state {
margin-top: 16px;
padding: 24px;
text-align: center;
border-radius: 12px;
border: 1px dashed var(--background-modifier-border);
background: var(--background-secondary);
color: var(--text-muted);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
}
/* ─── CLI Detection Panel ──────────────────────────────────────── */
.ia-detection-panel {
margin-bottom: 16px;
}
.ia-detection-panel h4 {
margin: 0 0 8px;
font-size: var(--ia-font-size-sm);
}
.ia-detection-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 10px;
}
.ia-detection-card {
padding: 10px 12px;
border-radius: 8px;
border: 1px solid var(--background-modifier-border);
background: var(--background-secondary);
}
.ia-detection-card__header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 6px;
}
.ia-detection-card__name {
font-weight: 600;
font-size: var(--ia-font-size-sm);
}
.ia-detection-card__row {
display: flex;
gap: 4px;
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
line-height: 1.6;
}
.ia-detection-card__label {
flex-shrink: 0;
}
.ia-detection-card__value--ok {
color: var(--text-success);
}
.ia-detection-card__value--missing {
color: var(--text-faint);
}
.ia-detection-card__value--muted {
color: var(--text-muted);
font-size: var(--font-ui-smaller);
}
.ia-toolbar {
display: flex;
gap: 10px;
flex-wrap: wrap;
margin-bottom: 14px;
}
.ia-button {
padding: 6px 14px;
border-radius: 8px;
border: 1px solid transparent;
font-size: var(--ia-font-size-xs);
font-weight: 600;
background: var(--background-secondary);
color: var(--text-normal);
cursor: pointer;
transition: background 0.15s ease, color 0.15s ease, transform 0.15s ease, border-color 0.15s ease;
}
.ia-button:hover {
background: var(--background-secondary-alt);
}
.ia-button:disabled {
opacity: 0.6;
cursor: not-allowed;
}
.ia-button--primary {
background: var(--interactive-accent);
color: var(--text-on-accent);
border-color: var(--interactive-accent);
box-shadow: 0 6px 16px rgba(45, 105, 255, 0.25);
}
.ia-button--primary:hover {
transform: translateY(-1px);
}
.ia-button--ghost {
background: transparent;
border-color: var(--background-modifier-border);
}
.ia-button--ghost:hover {
border-color: var(--interactive-accent);
color: var(--interactive-accent);
}
.ia-button--danger {
background: rgba(255, 92, 87, 0.12);
color: #ff5c57;
border-color: rgba(255, 92, 87, 0.3);
}
.ia-button--danger:hover {
background: rgba(255, 92, 87, 0.2);
}
.ia-button--success {
background: rgba(76, 217, 100, 0.14);
color: #2f9e44;
border-color: rgba(76, 217, 100, 0.3);
}
.ia-button--success:hover {
background: rgba(76, 217, 100, 0.22);
}
.ia-table-container {
margin-top: 12px;
border: 1px solid var(--background-modifier-border);
border-radius: 12px;
overflow: hidden;
background: var(--background-primary);
box-shadow: 0 12px 32px rgba(15, 23, 42, 0.08);
}
.ia-table {
width: 100%;
border-collapse: collapse;
font-size: var(--ia-font-size-s);
}
.ia-table-head {
background: linear-gradient(135deg, rgba(59, 130, 246, 0.06) 0%, rgba(147, 197, 253, 0.04) 100%);
}
.ia-table-header {
padding: 12px 16px;
text-align: left;
text-transform: uppercase;
letter-spacing: 0.04em;
font-size: var(--ia-font-size-2xs);
font-weight: 700;
color: var(--text-muted);
border-bottom: 1px solid var(--background-modifier-border);
}
.ia-table-body tr {
border-bottom: 1px solid var(--background-modifier-border);
transition: background 0.2s ease;
}
.ia-table-body tr:last-child {
border-bottom: none;
}
.ia-table-body tr:hover {
background: var(--background-modifier-hover);
}
.ia-table-cell {
padding: 12px 16px;
vertical-align: top;
color: var(--text-normal);
}
.ia-table-cell--center {
text-align: center;
}
.ia-table-stack {
display: flex;
flex-direction: column;
gap: 4px;
}
.ia-provider-header {
display: flex;
align-items: center;
gap: 10px;
}
.ia-provider-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border-radius: 8px;
background: linear-gradient(135deg, rgba(59, 130, 246, 0.18) 0%, rgba(59, 130, 246, 0.05) 100%);
color: var(--interactive-accent);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.ia-provider-icon svg {
width: 16px;
height: 16px;
}
.ia-provider-name {
font-weight: 600;
color: var(--text-normal);
}
.ia-filter-bar {
display: flex;
align-items: center;
gap: 8px;
margin-left: auto;
width: 100%;
flex-wrap: nowrap;
}
.ia-filter-control {
padding: 6px 10px;
border-radius: 8px;
border: 1px solid var(--background-modifier-border);
background: var(--background-secondary);
color: var(--text-normal);
font-size: var(--ia-font-size-xs);
}
.ia-filter-control--compact {
min-width: 120px;
}
.ia-filter-search {
flex: 1 1 240px;
min-width: 180px;
}
.ia-filter-control:focus {
outline: none;
border-color: var(--interactive-accent);
box-shadow: 0 0 0 1px var(--interactive-accent);
}
.ia-model-meta {
display: flex;
gap: 8px;
flex-wrap: wrap;
align-items: center;
}
.ia-model-meta-separator {
color: var(--text-muted);
}
.ia-table-title {
font-weight: 600;
color: var(--text-normal);
}
.ia-table-subtext {
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
}
.ia-code {
font-family: var(--font-monospace);
font-size: var(--ia-font-size-2xs);
color: var(--text-faint);
}
.ia-count-badge {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 32px;
padding: 4px 10px;
border-radius: var(--ia-radius-full);
background: var(--background-secondary);
color: var(--text-muted);
font-weight: 600;
}
.ia-status-badge {
display: inline-flex;
align-items: center;
padding: 2px 10px;
border-radius: var(--ia-radius-full);
font-size: var(--ia-font-size-2xs);
font-weight: 600;
text-transform: none;
}
.ia-status-badge.is-success {
background: rgba(16, 185, 129, 0.18);
color: #0f9d7a;
}
.ia-status-badge.is-danger {
background: rgba(239, 68, 68, 0.18);
color: #d63b3b;
}
.ia-status-badge.is-warning {
background: rgba(250, 204, 21, 0.18);
color: #a16207;
}
.ia-status-badge.is-info {
background: rgba(59, 130, 246, 0.18);
color: #2563eb;
}
.ia-table-actions {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.ia-status {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 2px 10px;
border-radius: 10px;
background: var(--background-secondary);
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
}
.ia-status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--text-muted);
}
.ia-status-text {
font-weight: 600;
}
.ia-status.is-success {
background: rgba(34, 197, 94, 0.15);
color: #15803d;
}
.ia-status.is-success .ia-status-dot {
background: #16a34a;
}
.ia-status.is-warning {
background: rgba(250, 204, 21, 0.18);
color: #a16207;
}
.ia-status.is-warning .ia-status-dot {
background: #fbbf24;
}
.ia-status.is-error {
background: rgba(248, 113, 113, 0.18);
color: #b91c1c;
}
.ia-status.is-error .ia-status-dot {
background: #ef4444;
}
.ia-status.is-info {
background: rgba(59, 130, 246, 0.18);
color: #2563eb;
}
.ia-status.is-info .ia-status-dot {
background: #3b82f6;
}
.ia-table-input {
width: 100%;
border: 1px solid transparent;
background: transparent;
font-size: var(--ia-font-size-s);
color: var(--text-normal);
padding: 4px 6px;
border-radius: 6px;
transition: border-color 0.15s ease, background 0.15s ease;
}
.ia-table-input:hover {
background: var(--background-modifier-hover);
}
.ia-table-input:focus {
outline: none;
border-color: var(--interactive-accent);
background: rgba(59, 130, 246, 0.08);
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.12);
}
.ia-table-input--bold {
font-weight: 600;
}
.ia-table-input--mono {
font-family: var(--font-monospace);
font-size: var(--ia-font-size-xs);
}
.ia-table-badges {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.ia-tag {
display: inline-flex;
align-items: center;
padding: 3px 8px;
border-radius: var(--ia-radius-full);
font-size: var(--ia-font-size-2xs);
font-weight: 600;
text-transform: none;
background: var(--background-modifier-border);
color: var(--text-normal);
}
.ia-tag--success {
background: var(--background-modifier-success);
color: var(--text-on-accent);
}
.ia-tag--warning {
background: var(--background-modifier-border);
color: var(--text-warning);
}
.ia-tag--error {
background: var(--background-modifier-error);
color: var(--text-on-accent);
}
.table-subtext {
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
}
/* Test Result Container */
.test-result-container {
margin-top: 20px;
padding: 16px;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
}
.test-result-header {
font-size: var(--ia-font-size-m);
font-weight: 700;
margin-bottom: 12px;
display: flex;
align-items: center;
gap: 8px;
}
.test-result-content {
white-space: pre-wrap;
font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
font-size: var(--ia-font-size-xs);
line-height: 1.6;
padding: 12px;
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
max-height: 200px;
overflow: auto;
color: var(--text-normal);
}
.test-result-content::-webkit-scrollbar {
width: 6px;
height: 6px;
}
.test-result-content::-webkit-scrollbar-track {
background: transparent;
}
.test-result-content::-webkit-scrollbar-thumb {
background: var(--scrollbar-thumb-bg);
border-radius: 3px;
}
.test-result-content::-webkit-scrollbar-thumb:hover {
background: var(--scrollbar-active-thumb-bg);
}
/* Models Table Styles */
.models-table-container {
width: 100%;
overflow-x: auto;
margin-top: 16px;
}
.models-table {
width: 100%;
border-collapse: collapse;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
overflow: hidden;
}
.models-table thead {
background: var(--background-secondary);
position: sticky;
top: 0;
z-index: 10;
}
.models-table th {
padding: 12px 16px;
text-align: left;
font-size: var(--ia-font-size-xs);
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--text-muted);
border-bottom: 2px solid var(--background-modifier-border);
}
.models-table tbody tr {
border-bottom: 1px solid var(--background-modifier-border);
transition: background var(--ia-transition-fast);
}
.models-table tbody tr:hover {
background: var(--background-secondary);
}
.models-table tbody tr:last-child {
border-bottom: none;
}
.models-table td {
padding: 12px 16px;
font-size: var(--ia-font-size-s);
color: var(--text-normal);
vertical-align: middle;
}
.model-name-cell {
font-weight: 600;
color: var(--text-normal);
}
.model-id-subtext {
display: block;
font-size: var(--ia-font-size-2xs);
font-weight: 400;
color: var(--text-muted);
margin-top: 2px;
}
.provider-badge {
display: inline-block;
padding: 4px 8px;
font-size: var(--ia-font-size-2xs);
font-weight: 600;
border-radius: 4px;
background: var(--interactive-accent);
color: var(--text-on-accent);
}
.model-type-badge {
display: inline-block;
padding: 4px 8px;
font-size: var(--ia-font-size-2xs);
font-weight: 500;
border-radius: 4px;
margin-right: 4px;
background: var(--background-modifier-border);
color: var(--text-normal);
}
.capabilities-cell {
display: flex;
flex-wrap: wrap;
gap: 4px;
align-items: center;
}
.capability-tag {
display: inline-block;
padding: 3px 6px;
font-size: var(--ia-font-size-3xs);
font-weight: 500;
border-radius: 3px;
background: var(--background-modifier-hover);
color: var(--text-muted);
border: 1px solid var(--background-modifier-border);
}
.model-toggle {
width: 40px;
height: 22px;
position: relative;
display: inline-block;
cursor: pointer;
}
.model-toggle input {
opacity: 0;
width: 0;
height: 0;
}
.model-toggle-slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: var(--background-modifier-border);
transition: 0.3s;
border-radius: 22px;
}
.model-toggle-slider:before {
position: absolute;
content: "";
height: 16px;
width: 16px;
left: 3px;
bottom: 3px;
background-color: white;
transition: 0.3s;
border-radius: 50%;
}
.model-toggle input:checked + .model-toggle-slider {
background-color: var(--interactive-accent);
}
.model-toggle input:checked + .model-toggle-slider:before {
transform: translateX(18px);
}
.model-actions-cell {
display: flex;
gap: 6px;
align-items: center;
}
.model-action-btn {
padding: 6px 12px;
font-size: var(--ia-font-size-xs);
font-weight: 500;
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
background: var(--background-primary);
color: var(--text-normal);
cursor: pointer;
transition: all var(--ia-transition-fast);
white-space: nowrap;
}
.model-action-btn:hover {
background: var(--background-secondary);
border-color: var(--interactive-accent);
}
.model-action-btn.is-default {
background: var(--interactive-accent);
color: var(--text-on-accent);
border-color: var(--interactive-accent);
cursor: default;
}
.model-action-btn.is-default:hover {
background: var(--interactive-accent);
border-color: var(--interactive-accent);
}
/* Provider Table Styles */
.providers-table-container {
width: 100%;
overflow-x: auto;
margin-top: 16px;
}
.providers-table {
width: 100%;
border-collapse: collapse;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
overflow: hidden;
}
.providers-table thead {
background: var(--background-secondary);
}
.providers-table th {
padding: 12px 16px;
text-align: left;
font-size: var(--ia-font-size-xs);
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--text-muted);
border-bottom: 2px solid var(--background-modifier-border);
}
.providers-table tbody tr {
border-bottom: 1px solid var(--background-modifier-border);
transition: background var(--ia-transition-fast);
cursor: pointer;
}
.providers-table tbody tr:hover {
background: var(--background-secondary);
}
.providers-table tbody tr:last-child {
border-bottom: none;
}
.providers-table tbody tr.is-expanded {
background: var(--background-secondary);
}
.providers-table td {
padding: 12px 16px;
font-size: var(--ia-font-size-s);
color: var(--text-normal);
vertical-align: middle;
}
.provider-name-cell {
display: flex;
align-items: center;
gap: 8px;
font-weight: 600;
}
.provider-expand-icon {
font-size: var(--ia-font-size-3xs);
color: var(--text-muted);
transition: transform 0.2s ease;
}
.provider-expand-icon.is-expanded {
transform: rotate(90deg);
}
.provider-status-badge {
display: inline-block;
padding: 4px 8px;
font-size: var(--ia-font-size-2xs);
font-weight: 500;
border-radius: 4px;
}
.provider-status-badge.is-configured {
background: #dcfce7;
color: #166534;
}
.provider-status-badge.is-partial {
background: #fef3c7;
color: #92400e;
}
.provider-status-badge.is-unconfigured {
background: #fee2e2;
color: #991b1b;
}
.provider-actions-cell {
display: flex;
gap: 6px;
align-items: center;
}
.provider-action-btn {
padding: 6px 12px;
font-size: var(--ia-font-size-xs);
font-weight: 500;
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
background: var(--background-primary);
color: var(--text-normal);
cursor: pointer;
transition: all var(--ia-transition-fast);
white-space: nowrap;
}
.provider-action-btn:hover {
background: var(--background-secondary);
border-color: var(--interactive-accent);
}
.provider-action-btn.mod-danger {
color: #ef4444;
}
.provider-action-btn.mod-danger:hover {
background: #fef2f2;
border-color: #ef4444;
}
.provider-details-row {
display: none;
}
.provider-details-row.is-visible {
display: table-row;
}
.provider-details-cell {
padding: 0;
background: var(--background-secondary);
}
.provider-details-content {
padding: 20px 24px;
border-top: 1px solid var(--background-modifier-border);
}
.provider-details-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 16px;
}
/* Tools Table Styles */
.tools-table {
width: 100%;
border-collapse: collapse;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
overflow: hidden;
margin-top: 16px;
}
.tools-table thead {
background: var(--background-secondary);
border-bottom: 2px solid var(--background-modifier-border);
}
.tools-table th {
padding: 12px 16px;
text-align: left;
font-size: var(--ia-font-size-xs);
font-weight: 600;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.tools-table tbody tr {
border-bottom: 1px solid var(--background-modifier-border);
transition: background var(--ia-transition-fast);
}
.tools-table tbody tr:last-child {
border-bottom: none;
}
.tools-table tbody tr:hover {
background: var(--background-secondary);
}
.tools-table td {
padding: 14px 16px;
vertical-align: middle;
font-size: var(--ia-font-size-s);
}
.tool-name-cell {
display: flex;
flex-direction: column;
gap: 4px;
}
.tool-name-cell .tool-name {
font-weight: 600;
color: var(--text-normal);
font-size: var(--ia-font-size-s);
}
.tool-name-cell .tool-description {
font-size: var(--ia-font-size-2xs);
color: var(--text-muted);
line-height: 1.4;
}
.tool-tags-cell {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.tool-tag {
display: inline-block;
padding: 3px 8px;
background: var(--background-modifier-hover);
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
font-size: var(--ia-font-size-3xs);
font-weight: 500;
color: var(--text-normal);
white-space: nowrap;
}
.tool-provider-badge {
display: inline-block;
padding: 4px 10px;
background: var(--interactive-accent);
color: white;
border-radius: 4px;
font-size: var(--ia-font-size-2xs);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.3px;
}
.tool-toggle {
width: 40px;
height: 22px;
position: relative;
display: inline-block;
cursor: pointer;
}
.tool-toggle input {
opacity: 0;
width: 0;
height: 0;
}
.tool-toggle-slider {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: var(--background-modifier-border);
border-radius: 22px;
transition: 0.3s;
cursor: pointer;
}
.tool-toggle-slider:before {
position: absolute;
content: "";
height: 16px;
width: 16px;
left: 3px;
bottom: 3px;
background-color: white;
border-radius: 50%;
transition: 0.3s;
}
.tool-toggle input:checked + .tool-toggle-slider {
background-color: var(--interactive-accent);
}
.tool-toggle input:checked + .tool-toggle-slider:before {
transform: translateX(18px);
}
.tool-actions-cell {
display: flex;
gap: 8px;
justify-content: flex-end;
}
.tool-action-btn {
padding: 6px 12px;
font-size: var(--ia-font-size-2xs);
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
background: var(--background-primary);
color: var(--text-normal);
cursor: pointer;
transition: all var(--ia-transition-fast);
font-weight: 500;
}
.tool-action-btn:hover {
background: var(--background-modifier-hover);
border-color: var(--text-muted);
}
.tool-action-btn.is-danger {
color: var(--text-error);
border-color: var(--text-error);
}
.tool-action-btn.is-danger:hover {
background: var(--text-error);
color: white;
}
/* Enhanced expression helper styles */
.expression-helper-enhanced {
font-size: var(--ia-font-size-xs);
color: #94a3b8;
margin-top: 6px;
margin-bottom: 12px;
padding: 8px;
background: rgba(255, 255, 255, 0.05);
border-radius: 6px;
border-left: 3px solid #4f46e5;
}
.expression-helper-buttons {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-bottom: 10px;
}
.quick-insert-btn {
padding: 4px 10px;
font-size: var(--ia-font-size-2xs);
border: 1px solid #334155;
background: rgba(255, 255, 255, 0.05);
border-radius: 20px;
cursor: pointer;
margin: 2px;
color: #cbd5e1;
font-weight: 500;
transition: all 0.2s ease;
}
.quick-insert-btn:hover {
background: rgba(79, 70, 229, 0.2);
border-color: #4f46e5;
color: white;
transform: translateY(-1px);
}
.expression-helper-container {
margin-top: 18px;
padding: 16px;
border: 1px solid #334155;
border-radius: 8px;
background: rgba(0, 0, 0, 0.2);
max-height: 320px;
overflow-y: auto;
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
}
.expression-function-row {
display: flex;
align-items: center;
padding: 8px 12px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
transition: background 0.2s ease;
}
.expression-function-row:hover {
background: rgba(255, 255, 255, 0.05);
}
.expression-function-row:last-child {
border-bottom: none;
}
.function-name {
font-weight: 600;
margin-right: 10px;
color: #60a5fa;
min-width: 140px;
font-size: var(--ia-font-size-s);
}
.function-signature {
color: #94a3b8;
font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
font-size: var(--ia-font-size-xs);
flex: 1;
background: rgba(0, 0, 0, 0.3);
padding: 4px 8px;
border-radius: 4px;
}
.expression-helper-close-btn {
margin-top: 12px;
padding: 6px 12px;
font-size: var(--ia-font-size-xs);
border: 1px solid #334155;
border-radius: 6px;
background: rgba(255, 255, 255, 0.05);
color: #cbd5e1;
cursor: pointer;
transition: all 0.2s ease;
}
.expression-helper-close-btn:hover {
background: rgba(239, 68, 68, 0.2);
border-color: #ef4444;
color: white;
}
/* Enhanced Code Editor */
.enhanced-code-editor {
font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
min-height: 180px;
background: rgba(0, 0, 0, 0.2);
border: 1px solid #334155;
border-radius: 6px;
padding: 12px;
color: #e2e8f0;
font-size: 13px;
line-height: 1.6;
}
.enhanced-code-editor:focus {
border-color: #4f46e5;
box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.3);
}
/* Enhanced input validation states */
.config-panel-input.valid {
border-color: #10b981;
background: rgba(16, 185, 129, 0.05);
}
.config-panel-input.invalid {
border-color: #ef4444;
background: rgba(239, 68, 68, 0.05);
}
/* Message entrance animation */
@keyframes ia-fadeInUp {
from {
opacity: 0;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.ia-chat-message--entering {
animation: ia-fadeInUp 0.25s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
/* Chat Streaming Animations */
@keyframes typing {
0%, 60%, 100% {
opacity: 0.3;
transform: translateY(0);
}
30% {
opacity: 1;
transform: translateY(-8px);
}
}
@keyframes blink {
0%, 49% { opacity: 1; }
50%, 100% { opacity: 0; }
}
@keyframes ia-status-pulse {
0% {
opacity: 0.4;
transform: scale(0.9);
}
50% {
opacity: 1;
transform: scale(1.2);
}
100% {
opacity: 0.4;
transform: scale(0.9);
}
}
.thinking-indicator {
padding: 8px 0;
}
.ia-thinking-indicator {
display: flex;
align-items: center;
gap: 8px;
color: var(--text-muted);
font-style: italic;
}
.typing-dots {
display: flex;
gap: 4px;
font-size: 16px;
}
.typing-dots span {
animation: typing 1.4s infinite;
}
.typing-dots span:nth-child(2) {
animation-delay: 0.2s;
}
.typing-dots span:nth-child(3) {
animation-delay: 0.4s;
}
[data-message-status].is-visible {
display: inline-flex;
align-items: center;
gap: 6px;
}
.streaming-cursor {
color: var(--text-accent);
font-weight: bold;
margin-left: 2px;
}
[data-message-status] {
display: none;
font-size: var(--ia-font-size-3xs);
letter-spacing: 0.05em;
text-transform: uppercase;
color: var(--text-muted);
}
[data-message-status]::before {
content: '';
width: 6px;
height: 6px;
border-radius: 50%;
background: currentColor;
}
[data-message-status][data-state="streaming"]::before {
animation: ia-status-pulse 1.2s infinite;
background: var(--text-accent);
}
[data-message-status][data-state="complete"] {
color: var(--text-success);
}
[data-message-status][data-state="complete"]::before {
background: var(--text-success);
animation: none;
}
[data-message-status][data-state="error"],
[data-message-status].is-error {
color: var(--text-error);
}
[data-message-status][data-state="error"]::before {
background: var(--text-error);
animation: none;
}
.stop-generation-btn {
padding: 6px 12px;
border-radius: 6px;
border: 1px solid var(--text-error);
background: rgba(255, 0, 0, 0.1);
color: var(--text-error);
cursor: pointer;
font-size: var(--ia-font-size-xs);
font-weight: 600;
transition: all 0.2s ease;
display: inline-flex;
align-items: center;
gap: 4px;
}
.stop-generation-btn:hover {
background: var(--text-error);
color: white;
}
.stop-generation-btn:active {
transform: translateY(0);
}
/* Message Actions — base (overridden per role below) */
.message-actions {
display: flex;
gap: 2px;
opacity: 0;
transition: opacity 0.15s ease;
pointer-events: none;
}
.msg-action-btn {
padding: 3px 6px;
border: none;
background: transparent;
border-radius: 3px;
cursor: pointer;
transition: all 0.15s;
display: flex;
align-items: center;
gap: 2px;
font-size: var(--ia-font-size-2xs);
color: var(--text-muted);
}
.msg-action-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.msg-action-btn:active {
transform: translateY(0);
}
.msg-action-btn svg {
width: 14px;
height: 14px;
}
/* RAG Sources Display */
.rag-sources-container {
margin-top: 12px;
padding: 12px;
background: var(--background-primary);
border-radius: 6px;
border: 1px solid var(--background-modifier-border);
}
.rag-sources-header {
font-size: var(--ia-font-size-xs);
font-weight: 600;
color: var(--text-accent);
margin-bottom: 8px;
display: flex;
align-items: center;
gap: 6px;
}
.rag-sources-grid {
display: flex;
flex-direction: column;
gap: 8px;
}
.rag-source-card {
padding: 10px;
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
transition: all 0.2s ease;
cursor: pointer;
}
.rag-source-card:hover {
background: var(--background-modifier-hover);
border-color: var(--interactive-accent);
transform: translateY(-1px);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
}
.rag-source-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 6px;
}
.rag-source-title {
font-weight: 600;
font-size: var(--ia-font-size-s);
color: var(--text-normal);
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.rag-source-similarity {
font-size: var(--ia-font-size-2xs);
font-weight: 600;
padding: 2px 6px;
background: var(--background-primary);
border-radius: 10px;
min-width: 40px;
text-align: center;
flex-shrink: 0;
}
.rag-source-path {
font-size: var(--ia-font-size-2xs);
color: var(--text-muted);
margin-bottom: 6px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-break: break-all;
}
.rag-source-content {
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
line-height: 1.4;
background: var(--background-primary);
padding: 8px;
border-radius: 4px;
border-left: 2px solid var(--interactive-accent);
}
.rag-source-content:hover {
background: var(--background-secondary);
}
/* Enhanced RAG Settings Display */
.ia-rag-hero {
display: flex;
align-items: flex-start;
gap: 16px;
padding: 20px;
border-radius: 16px;
border: 1px solid var(--background-modifier-border);
background: linear-gradient(135deg, var(--background-modifier-border) 0%, var(--background-secondary) 100%);
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.05);
margin-bottom: 20px;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.ia-rag-hero::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, var(--interactive-accent), var(--interactive-accent-hover), var(--interactive-accent));
}
.ia-rag-hero.is-disabled {
opacity: 0.7;
background: var(--background-secondary);
}
.ia-rag-hero-icon {
display: flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 12px;
background: linear-gradient(135deg, var(--interactive-accent) 0%, var(--interactive-accent-hover) 100%);
color: var(--text-on-accent);
box-shadow: 0 6px 16px rgba(59, 130, 246, 0.3);
flex-shrink: 0;
}
.ia-rag-hero-icon svg {
width: 18px;
height: 18px;
}
.ia-rag-hero-body {
display: flex;
flex-direction: column;
gap: 8px;
flex: 1;
}
.ia-rag-hero-title {
margin: 0;
font-size: 18px;
font-weight: 700;
color: var(--text-normal);
}
.ia-rag-hero-text {
margin: 0;
color: var(--text-muted);
line-height: 1.6;
font-size: var(--ia-font-size-m);
}
.ia-rag-hero-meta {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-top: 8px;
}
.ia-rag-pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 12px;
border-radius: 20px;
background: var(--background-primary);
color: var(--text-muted);
font-size: var(--ia-font-size-xs);
font-weight: 600;
text-transform: capitalize;
border: 1px solid var(--background-modifier-border);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.02);
}
.ia-rag-section {
margin-top: 28px;
display: flex;
flex-direction: column;
gap: 16px;
}
.ia-rag-section-header {
display: flex;
align-items: center;
gap: 14px;
padding-bottom: 8px;
border-bottom: 1px solid var(--background-modifier-border);
}
.ia-rag-section-icon {
display: flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border-radius: 10px;
background: linear-gradient(135deg, var(--background-secondary) 0%, var(--background-primary) 100%);
color: var(--interactive-accent);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08), 0 2px 4px rgba(0, 0, 0, 0.03);
flex-shrink: 0;
}
.ia-rag-section-icon svg {
width: 14px;
height: 14px;
}
.ia-rag-section-text {
display: flex;
flex-direction: column;
gap: 4px;
flex: 1;
}
.ia-rag-section-title {
margin: 0;
font-size: 16px;
font-weight: 700;
color: var(--text-normal);
letter-spacing: -0.01em;
}
.ia-rag-section-subtitle {
margin: 0;
color: var(--text-muted);
font-size: var(--ia-font-size-s);
line-height: 1.5;
}
.ia-rag-card {
padding: 20px;
border-radius: 16px;
border: 1px solid var(--background-modifier-border);
background: var(--background-primary);
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.04);
display: flex;
flex-direction: column;
gap: 18px;
transition: box-shadow 0.3s ease;
position: relative;
overflow: hidden;
}
.ia-rag-card:hover {
box-shadow: 0 10px 24px rgba(0, 0, 0, 0.06);
}
.ia-rag-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, var(--background-modifier-border), transparent);
}
.ia-rag-metric-grid {
display: grid;
gap: 14px;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
margin-bottom: 8px;
}
.ia-rag-metric {
display: flex;
align-items: center;
gap: 14px;
padding: 16px;
border-radius: 12px;
border: 1px solid var(--background-modifier-border);
background: var(--background-primary);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
transition: all 0.3s ease;
}
.ia-rag-metric:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06);
transform: translateY(-2px);
border-color: var(--background-modifier-border-hover);
}
.ia-rag-metric-icon {
display: flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 12px;
background: linear-gradient(135deg, rgba(59, 130, 246, 0.15) 0%, rgba(59, 130, 246, 0.05) 100%);
color: var(--interactive-accent);
flex-shrink: 0;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.02);
}
.ia-rag-metric-icon svg {
width: 18px;
height: 18px;
}
.ia-rag-metric-body {
display: flex;
flex-direction: column;
gap: 3px;
flex: 1;
}
.ia-rag-metric-label {
font-size: var(--ia-font-size-2xs);
letter-spacing: 0.05em;
text-transform: uppercase;
color: var(--text-muted);
font-weight: 600;
margin: 0;
}
.ia-rag-metric-value {
font-size: 20px;
font-weight: 700;
color: var(--text-normal);
margin: 0;
letter-spacing: -0.01em;
}
.ia-rag-metric-note {
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
line-height: 1.5;
margin-top: 8px;
padding-top: 8px;
border-top: 1px dashed var(--background-modifier-border);
}
.ia-rag-actions {
display: flex;
flex-wrap: wrap;
gap: 12px;
padding-top: 8px;
border-top: 1px solid var(--background-modifier-border);
margin-top: 8px;
}
.ia-rag-file-list {
border: 1px solid var(--background-modifier-border);
border-radius: 12px;
padding: 16px;
background: var(--background-primary);
display: flex;
flex-direction: column;
gap: 10px;
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.02);
}
.ia-rag-file-list-title {
font-size: var(--ia-font-size-xs);
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-muted);
margin: 0 0 8px 0;
display: flex;
align-items: center;
gap: 8px;
}
.ia-rag-file-list-items {
margin: 0;
padding: 0;
list-style: none;
display: flex;
flex-direction: column;
gap: 6px;
font-size: var(--ia-font-size-s);
color: var(--text-muted);
max-height: 180px;
overflow-y: auto;
padding-right: 4px;
}
.ia-rag-file-list-items::-webkit-scrollbar {
width: 6px;
}
.ia-rag-file-list-items::-webkit-scrollbar-track {
background: var(--background-secondary);
border-radius: 3px;
}
.ia-rag-file-list-items::-webkit-scrollbar-thumb {
background: var(--background-modifier-border);
border-radius: 3px;
}
.ia-rag-file-list-items::-webkit-scrollbar-thumb:hover {
background: var(--background-modifier-border-hover);
}
.ia-rag-file-item {
color: var(--text-normal);
padding: 8px 10px;
border-radius: 6px;
background: var(--background-secondary);
border-left: 2px solid var(--interactive-accent);
transition: all 0.2s ease;
font-size: var(--ia-font-size-s);
}
.ia-rag-file-item:hover {
background: var(--background-modifier-hover);
transform: translateX(2px);
}
/* Web Search Results Display */
.web-results-container {
margin-top: 16px;
padding: 12px;
background: var(--background-secondary);
border-radius: 8px;
border: 1px solid var(--background-modifier-border);
}
.web-results-header {
font-size: var(--ia-font-size-s);
font-weight: 600;
color: var(--text-accent);
margin-bottom: 12px;
display: flex;
align-items: center;
gap: 6px;
}
.web-results-grid {
display: flex;
flex-direction: column;
gap: 10px;
}
.web-result-card {
padding: 12px;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
position: relative;
transition: all 0.2s ease;
}
.web-result-card:hover {
background: var(--background-secondary-alt);
border-color: var(--interactive-accent);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.web-result-title-container {
display: flex;
align-items: flex-start;
gap: 8px;
margin-bottom: 6px;
}
.web-result-rank {
font-size: var(--ia-font-size-2xs);
font-weight: 700;
color: var(--text-muted);
background: var(--background-modifier-border);
padding: 2px 6px;
border-radius: 3px;
flex-shrink: 0;
min-width: 20px;
text-align: center;
}
.web-result-title {
font-size: var(--ia-font-size-m);
font-weight: 600;
color: var(--text-accent);
text-decoration: none;
flex: 1;
line-height: 1.3;
}
.web-result-title:hover {
text-decoration: underline;
}
.web-result-source {
font-size: var(--ia-font-size-2xs);
color: var(--text-success);
margin-bottom: 8px;
margin-left: 28px;
}
.web-result-snippet {
font-size: var(--ia-font-size-xs);
color: var(--text-faint);
line-height: 1.5;
margin-left: 28px;
margin-bottom: 8px;
}
.web-result-open-btn {
position: absolute;
top: 12px;
right: 12px;
padding: 6px;
background: var(--background-modifier-border);
border: none;
border-radius: 4px;
cursor: pointer;
opacity: 0.6;
transition: all 0.2s ease;
}
.web-result-open-btn:hover {
opacity: 1;
background: var(--interactive-accent);
color: var(--text-on-accent);
}
.web-result-open-btn svg {
display: block;
}
/* Think/Reasoning Mode Badge */
.think-mode-badge {
font-size: var(--ia-font-size-2xs);
font-weight: 600;
color: var(--text-accent);
background: var(--background-modifier-border);
padding: 3px 8px;
border-radius: 4px;
margin-left: 8px;
display: inline-flex;
align-items: center;
gap: 4px;
}
/* Reasoning Content Display (DeepSeek R1) */
.reasoning-container {
margin-top: 16px;
padding: 12px;
background: var(--background-secondary);
border-radius: 8px;
border: 1px solid var(--background-modifier-border);
border-left: 3px solid var(--text-accent);
}
.reasoning-header {
font-size: var(--ia-font-size-s);
font-weight: 600;
color: var(--text-accent);
margin-bottom: 8px;
display: flex;
align-items: center;
gap: 6px;
user-select: none;
transition: opacity 0.2s ease;
}
.reasoning-header:hover {
opacity: 0.7;
}
.reasoning-content {
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
line-height: 1.6;
white-space: pre-wrap;
font-family: var(--font-monospace);
background: var(--background-primary);
padding: 12px;
border-radius: 6px;
max-height: 400px;
overflow-y: auto;
border: 1px solid var(--background-modifier-border);
}
/* RAG Stats Modal */
.rag-stats-modal {
max-width: 600px;
}
.rag-stats-summary {
margin-bottom: 20px;
padding: 16px;
background: var(--background-secondary);
border-radius: 8px;
}
.stat-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 0;
border-bottom: 1px solid var(--background-modifier-border);
}
.stat-row:last-child {
border-bottom: none;
}
.stat-label {
font-weight: 600;
color: var(--text-normal);
}
.stat-value {
font-weight: 700;
color: var(--text-accent);
font-size: 1.1em;
}
.rag-stats-files h4 {
margin-bottom: 12px;
color: var(--text-accent);
}
.rag-file-list {
max-height: 300px;
overflow-y: auto;
padding: 8px;
background: var(--background-secondary);
border-radius: 6px;
}
.rag-file-item {
padding: 8px;
margin-bottom: 4px;
background: var(--background-primary);
border-radius: 4px;
border-left: 3px solid var(--text-accent);
display: flex;
flex-direction: column;
gap: 4px;
transition: all 0.2s ease;
}
.rag-file-item:hover {
background: var(--background-secondary-alt);
transform: translateX(4px);
}
.rag-file-link {
color: var(--text-accent);
font-weight: 600;
cursor: pointer;
text-decoration: none;
font-size: var(--ia-font-size-s);
}
.rag-file-link:hover {
text-decoration: underline;
}
.rag-file-path {
font-size: var(--ia-font-size-2xs);
color: var(--text-muted);
font-family: var(--font-monospace);
}
.rag-no-files {
padding: 20px;
text-align: center;
color: var(--text-muted);
}
.rag-no-files p {
margin-bottom: 12px;
}
.rag-no-files ol {
text-align: left;
display: inline-block;
margin-top: 12px;
}
.modal-button-container {
margin-top: 20px;
text-align: right;
}
/* ═══════════════════════════════════════════
CHAT MESSAGES — Bubble Layout
═══════════════════════════════════════════ */
.chat-message,
.ia-chat-message {
margin-bottom: 0;
padding: 0;
background: transparent;
border-radius: 0;
border: none;
box-shadow: none;
transition: none;
}
/* Streaming indicator on the content bubble, not the wrapper */
.ia-chat-message--streaming .message-content {
outline: 1px solid rgba(59, 130, 246, 0.35);
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.08);
}
.message-user,
.ia-chat-message--user {
background: transparent;
}
.message-assistant,
.ia-chat-message--assistant {
background: transparent;
}
/* ── Avatars ── */
.message-avatar {
width: 26px;
height: 26px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
color: var(--text-muted);
background: var(--background-modifier-border);
}
.message-avatar svg {
fill: currentColor;
color: white;
width: 14px;
height: 14px;
}
.ia-provider-avatar svg {
width: 14px;
height: 14px;
}
/* ── Row layout (global: flex-end so avatars sit at bubble bottom) ── */
.message-row {
display: flex;
gap: 8px;
align-items: flex-end;
width: 100%;
max-width: 100%;
}
/* ── message-meta base ── */
.message-meta {
display: flex;
align-items: center;
gap: 4px;
flex-wrap: wrap;
}
.message-name {
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
}
.message-timestamp {
font-size: var(--ia-font-size-3xs);
color: var(--text-faint);
}
/* ── message-content base ── */
.message-content {
line-height: 1.5;
word-wrap: break-word;
font-size: var(--ia-font-size-s);
white-space: normal;
}
.message-body {
flex: 1;
min-width: 0;
}
/* ── footer / annotation base ── */
.ia-chat-message__footer,
.ia-chat-message__annotation {
font-size: var(--ia-font-size-3xs);
color: var(--text-faint);
}
/* ── copy button group ── */
.ia-chat-copy-group {
display: flex;
gap: 4px;
margin-left: auto;
}
.ia-chat-copy-btn {
padding: 2px 8px;
border-radius: 4px;
border: 1px solid var(--background-modifier-border);
background: transparent;
color: var(--text-muted);
font-size: var(--ia-font-size-2xs);
cursor: pointer;
}
.ia-chat-copy-btn:hover:not(:disabled) {
color: var(--text-normal);
background: var(--background-modifier-hover);
}
.ia-chat-copy-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
/* Agent Execution Trace Styles */
.agent-execution-trace-container,
.ia-agent-trace-container {
border-radius: 8px;
overflow: hidden;
border: 1px solid var(--background-modifier-border);
margin-bottom: 8px;
}
.agent-execution-trace-header,
.ia-agent-trace-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 8px 12px;
background: var(--background-secondary);
cursor: pointer;
user-select: none;
transition: background 0.15s;
}
.agent-execution-trace-header:hover,
.ia-agent-trace-header:hover {
background: var(--background-modifier-hover);
}
.agent-trace-icon {
font-size: var(--ia-font-size-xs);
transition: transform 0.2s ease;
color: var(--color-accent);
}
.agent-trace-title {
color: var(--color-accent);
font-weight: 600;
}
.agent-trace-count {
font-size: var(--ia-font-size-2xs);
padding: 2px 8px;
background: var(--background-modifier-border);
border-radius: 10px;
color: var(--text-muted);
}
.agent-execution-trace-content {
padding: 16px;
background: var(--background-primary);
display: flex;
flex-wrap: wrap; /* Allow wrapping */
gap: 12px;
max-height: 600px;
overflow-y: auto;
position: relative;
align-items: flex-start;
}
/* Single Unified Vertical Timeline Line - Fixed on the left */
.agent-execution-trace-content::before {
content: '';
position: absolute;
left: 20px; /* Aligned with avatar/icons */
top: 16px;
bottom: 16px;
width: 2px;
background: var(--background-modifier-border);
z-index: 0;
opacity: 0.5;
}
.agent-thinking-block {
width: 100%; /* Forces thinking blocks to their own row */
position: relative;
padding-left: 24px;
z-index: 1;
margin-bottom: 4px;
}
.agent-tool-call-card {
position: relative;
padding-left: 0; /* No individual indent needed if we use absolute icons */
z-index: 1;
margin-left: 24px; /* Space for the timeline dot */
}
/* Phase/Status Icons */
.agent-thinking-block__label-row::before,
.agent-tool-call__status-dot {
display: flex !important;
align-items: center;
justify-content: center;
width: 20px;
height: 20px;
border-radius: 50%;
background: var(--background-primary);
border: 2px solid var(--background-modifier-border);
font-size: 10px;
position: absolute;
z-index: 2;
}
.agent-thinking-block__label-row::before {
content: '🧠';
left: -24px; /* Relative to thinking block padding */
top: 0;
}
.agent-tool-call__status-dot {
left: -32px; /* Relative to tool call card margin */
top: 6px;
}
.agent-tool-call-card.is-success .agent-tool-call__status-dot {
background: rgba(34, 197, 94, 0.1);
border-color: rgba(34, 197, 94, 0.4);
color: rgb(34, 197, 94);
}
.agent-tool-call-card.is-error .agent-tool-call__status-dot {
background: rgba(239, 68, 68, 0.1);
border-color: rgba(239, 68, 68, 0.4);
color: rgb(239, 68, 68);
}
/* Card Styling - Compact and Clean */
.agent-thinking-block__content {
font-size: var(--ia-font-size-m);
line-height: 1.6;
color: var(--text-muted);
background: var(--background-secondary);
padding: 10px 14px;
border-radius: 8px;
border: 1px solid var(--background-modifier-border);
white-space: pre-wrap;
width: 100%;
}
.agent-tool-call-card {
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border) !important;
border-radius: 20px;
padding: 4px 14px;
cursor: pointer;
transition: all var(--ia-transition-fast);
display: inline-flex;
width: fit-content;
align-items: center;
min-height: 32px;
}
.agent-tool-call-card.is-expanded {
border-radius: 8px;
width: 100%;
display: flex;
flex-direction: column;
padding: 12px;
align-items: flex-start;
}
.agent-tool-call__title {
display: flex;
align-items: center;
gap: 8px;
}
.agent-tool-call__name {
font-family: var(--font-monospace);
font-weight: 600;
font-size: var(--ia-font-size-s);
}
.agent-tool-call__details {
width: 100%;
margin-top: 10px;
display: none;
}
.agent-tool-call-card.is-expanded .agent-tool-call__details {
display: block;
}
@keyframes ia-blink {
0%, 100% { opacity: 1; }
50% { opacity: 0.3; }
}
.agent-tool-call__pending {
padding: 6px 12px;
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
font-style: italic;
border-top: 1px solid var(--background-modifier-border);
}
.ia-write-proposals {
margin: 8px 0 10px;
order: 2;
}
.ia-write-proposals h5 {
margin: 0 0 6px;
color: var(--text-muted);
font-size: var(--ia-font-size-xs);
font-weight: 600;
text-transform: uppercase;
}
.ia-write-proposal-card {
border: 1px solid var(--background-modifier-border);
border-left: 3px solid var(--color-orange, var(--text-accent));
border-radius: var(--ia-radius-base);
background: var(--background-primary);
padding: 8px 10px;
margin-bottom: 8px;
}
.ia-write-proposal-card__header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 6px;
}
.ia-write-proposal-card__operation {
font-family: var(--font-monospace);
font-size: var(--ia-font-size-xs);
font-weight: 700;
color: var(--text-accent);
}
.ia-write-proposal-card__path {
font-family: var(--font-monospace);
font-size: var(--ia-font-size-xs);
color: var(--text-normal);
overflow-wrap: anywhere;
}
.ia-write-proposal-card__note {
color: var(--text-muted);
font-size: var(--ia-font-size-xs);
line-height: 1.4;
margin-bottom: 6px;
}
.ia-write-proposal-card__preview {
font-size: var(--ia-font-size-xs);
margin-bottom: 8px;
}
.ia-write-proposal-card__preview pre {
max-height: 220px;
overflow: auto;
white-space: pre-wrap;
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
border-radius: var(--ia-radius-small);
padding: 8px;
}
.ia-write-proposal-card__actions {
display: flex;
justify-content: flex-end;
}
.ia-write-proposal-card__actions button.is-applied {
color: var(--color-green, var(--text-accent));
}
/* Collapsible sections (Input / Output) within tool cards */
.agent-collapsible-section {
border-top: 1px solid var(--background-modifier-border);
}
.agent-collapsible-section__header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 12px;
cursor: pointer;
user-select: none;
background: var(--background-secondary);
font-size: var(--ia-font-size-xs);
font-weight: 600;
color: var(--text-muted);
transition: background var(--ia-transition-fast);
}
.agent-collapsible-section__header:hover {
background: var(--background-modifier-hover);
}
.agent-collapsible-section__body {
padding: 8px 12px;
font-family: var(--font-monospace);
font-size: var(--ia-font-size-xs);
white-space: pre-wrap;
word-break: break-all;
max-height: 300px;
overflow-y: auto;
background: var(--background-primary);
}
.agent-collapsible-section__body--error {
color: var(--text-error);
}
/* Agent Timeline */
.agent-execution-timeline {
position: relative;
padding-left: 40px;
}
.agent-execution-timeline::before {
content: '';
position: absolute;
left: 16px;
top: 0;
bottom: 0;
width: 2px;
background: linear-gradient(to bottom,
var(--text-accent) 0%,
var(--background-modifier-border) 100%);
}
.agent-step {
position: relative;
margin-bottom: 24px;
display: flex;
gap: 12px;
}
.agent-step-indicator {
position: absolute;
left: -32px;
top: 2px;
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
background: var(--background-primary);
border: 2px solid var(--background-modifier-border);
border-radius: 50%;
font-size: 16px;
z-index: 1;
}
.agent-step-thought .agent-step-indicator {
border-color: #9333EA;
background: linear-gradient(135deg, #9333EA 0%, #c084fc 100%);
}
.agent-step-action .agent-step-indicator {
border-color: #F59E0B;
background: linear-gradient(135deg, #F59E0B 0%, #fbbf24 100%);
}
.agent-step-observation .agent-step-indicator {
border-color: #10B981;
background: linear-gradient(135deg, #10B981 0%, #34d399 100%);
}
.agent-step-content {
flex: 1;
background: var(--background-secondary);
border-radius: 8px;
padding: 12px;
border-left: 3px solid var(--background-modifier-border);
transition: all 0.2s ease;
}
.agent-step--latest .agent-step-content {
background: var(--background-primary);
box-shadow: 0 0 0 1px rgba(59, 130, 246, 0.15);
}
.agent-step-thought .agent-step-content {
border-left-color: #9333EA;
}
.agent-step-action .agent-step-content {
border-left-color: #F59E0B;
}
.agent-step-observation .agent-step-content {
border-left-color: #10B981;
}
.agent-step-content:hover {
background: var(--background-modifier-hover);
transform: translateX(2px);
}
.agent-step-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 8px;
padding-bottom: 8px;
border-bottom: 1px solid var(--background-modifier-border);
}
.agent-step-type {
font-weight: 600;
font-size: var(--ia-font-size-xs);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.agent-step-thought .agent-step-type {
color: #9333EA;
}
.agent-step-action .agent-step-type {
color: #F59E0B;
}
.agent-step-observation .agent-step-type {
color: #10B981;
}
.agent-step-time {
font-size: var(--ia-font-size-2xs);
color: var(--text-muted);
font-family: var(--font-monospace);
}
.agent-step-body {
font-size: var(--ia-font-size-s);
line-height: 1.6;
color: var(--text-normal);
}
.agent-step-body pre {
background: var(--background-primary);
padding: 8px;
border-radius: 4px;
font-size: var(--ia-font-size-xs);
overflow-x: auto;
margin: 8px 0 0 0;
border: 1px solid var(--background-modifier-border);
}
.agent-step-body strong {
color: var(--text-accent);
font-weight: 600;
}
.agent-step-status {
margin-left: 8px;
font-size: var(--ia-font-size-3xs);
text-transform: uppercase;
letter-spacing: 0.05em;
padding: 2px 8px;
border-radius: var(--ia-radius-full);
}
.agent-step-status--pending {
background: var(--background-modifier-border);
color: var(--text-muted);
}
.agent-step-status--success {
background: rgba(16, 185, 129, 0.15);
color: #10B981;
}
.agent-step-status--error {
background: rgba(244, 63, 94, 0.15);
color: var(--text-error);
}
/* Agent Final Answer */
.agent-final-answer {
padding: 16px;
background: linear-gradient(135deg,
var(--background-secondary) 0%,
var(--background-primary) 100%);
border-radius: 8px;
border: 2px solid var(--text-accent);
margin-top: 16px;
}
.agent-final-answer h4 {
margin: 0 0 12px 0;
color: var(--text-accent);
font-size: var(--ia-font-size-m);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
display: flex;
align-items: center;
gap: 8px;
}
.agent-final-answer h4::before {
content: '✨';
font-size: 16px;
}
/* Provider Icon Styles */
.provider-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
margin-right: 8px;
}
.provider-icon svg {
width: 20px;
height: 20px;
}
.provider-name-text {
font-weight: 500;
}
/* ============================================
Chat View Styles
============================================ */
.intelligence-assistant-chat-container {
display: flex;
flex-direction: column;
height: 100%;
padding: 0;
}
.chat-main-layout {
display: flex;
height: 100%;
gap: 0;
position: relative;
}
.conversation-list-floating {
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 280px;
background: var(--background-secondary);
border-right: 1px solid var(--background-modifier-border);
box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1);
z-index: 100;
display: flex;
flex-direction: column;
transform: translateX(0);
transition: transform var(--ia-transition-slow), opacity var(--ia-transition-slow);
opacity: 1;
}
.conversation-list-floating.is-collapsed {
transform: translateX(-100%);
opacity: 0;
pointer-events: none;
}
.conversation-list-floating.is-open {
transform: translateX(0);
opacity: 1;
pointer-events: auto;
}
.conversation-list-header {
padding: 10px;
border-bottom: 1px solid var(--background-modifier-border);
display: flex;
justify-content: space-between;
align-items: center;
}
.conversation-list-header h3 {
margin: 0;
font-size: var(--ia-font-size-m);
font-weight: 600;
}
.conversation-header-buttons {
display: flex;
gap: 4px;
}
.pin-conversation-btn,
.new-conversation-btn {
color: var(--text-muted);
}
.pin-conversation-btn:hover,
.new-conversation-btn:hover {
color: var(--text-normal);
}
/* Search */
.conversation-search {
padding: 8px 10px;
position: relative;
}
.conversation-search-input {
width: 100%;
padding: 6px 10px 6px 30px;
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
background: var(--background-primary);
color: var(--text-normal);
font-size: var(--ia-font-size-xs);
outline: none;
}
.conversation-search-input:focus {
border-color: var(--interactive-accent);
}
.conversation-search-icon {
position: absolute;
left: 18px;
top: 50%;
transform: translateY(-50%);
color: var(--text-faint);
pointer-events: none;
}
.conversation-search-icon svg {
width: 14px;
height: 14px;
}
/* Date groups */
.conversation-date-group + .conversation-date-group {
margin-top: 4px;
}
.conversation-date-label {
padding: 6px 12px 2px;
font-size: var(--ia-font-size-2xs);
font-weight: 600;
color: var(--text-faint);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.conversation-list-content {
flex: 1;
overflow-y: auto;
}
.conversation-item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
padding: 8px 12px;
border-radius: 4px;
cursor: pointer;
transition: background-color var(--ia-transition-fast);
}
.conversation-item:hover {
background: var(--background-modifier-hover);
}
.conversation-item.active {
background: var(--background-modifier-hover);
}
.conversation-content {
flex: 1;
overflow: hidden;
min-width: 0;
pointer-events: none;
}
.conversation-title {
font-size: var(--ia-font-size-s);
color: var(--text-normal);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-weight: 500;
}
.conversation-info {
display: flex;
align-items: center;
gap: 4px;
margin-top: 2px;
font-size: var(--ia-font-size-3xs);
color: var(--text-muted);
overflow: hidden;
}
.conversation-info__mode {
flex-shrink: 0;
padding: 0 5px;
border-radius: 3px;
font-weight: 600;
line-height: 1.6;
}
.conversation-info__mode.is-chat {
background: rgba(var(--interactive-accent-rgb, 68, 123, 255), 0.12);
color: var(--interactive-accent);
}
.conversation-info__mode.is-agent {
background: rgba(var(--interactive-success-rgb, 15, 185, 129), 0.12);
color: var(--interactive-success, var(--color-green));
}
.conversation-info__mode.is-cli-agent {
background: rgba(168, 85, 247, 0.12);
color: rgb(168, 85, 247);
}
.conversation-info__sep {
color: var(--text-faint);
}
.conversation-info__agent,
.conversation-info__model,
.conversation-info__provider {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.conversation-meta {
font-size: var(--ia-font-size-3xs);
color: var(--text-muted);
margin-top: 2px;
}
.conversation-actions {
display: flex;
gap: 4px;
opacity: 0;
transition: opacity 0.2s;
pointer-events: auto;
}
.conversation-item:hover .conversation-actions {
opacity: 1;
}
.conversation-delete-btn {
padding: 4px 6px;
font-size: var(--ia-font-size-xs);
border: none;
background: transparent;
border-radius: 3px;
color: var(--text-error);
cursor: pointer;
}
.conversation-rename-btn {
padding: 4px 6px;
font-size: var(--ia-font-size-xs);
border: none;
background: transparent;
border-radius: 3px;
color: var(--text-muted);
cursor: pointer;
}
.conversation-rename-btn:hover {
color: var(--text-normal);
background: var(--background-modifier-hover);
}
.conversation-list-floating.is-pinned {
position: relative;
box-shadow: none;
}
.main-chat-area {
flex: 1;
width: 100%;
display: flex;
flex-direction: column;
padding: 10px;
position: relative;
}
.chat-header {
display: flex;
align-items: center;
gap: 12px;
padding: 12px;
border-bottom: 1px solid var(--background-modifier-border);
background: var(--background-secondary);
margin-bottom: 10px;
flex-wrap: wrap;
}
.model-selector {
display: flex;
align-items: center;
gap: 8px;
flex: 1;
}
.model-selector select {
flex: 1;
min-width: 150px;
padding: 6px 10px;
border-radius: 4px;
border: 1px solid var(--background-modifier-border);
background: var(--background-primary);
color: var(--text-normal);
font-size: 13px;
font-weight: 500;
}
.chat-messages {
flex: 1;
overflow-y: auto;
padding: 12px 16px;
display: flex;
flex-direction: column;
gap: 8px;
}
/* Empty conversation state */
.ia-chat-empty-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
flex: 1;
padding: 40px 20px;
text-align: center;
color: var(--text-muted);
}
.ia-chat-empty-state__icon {
margin-bottom: 16px;
color: var(--text-faint);
}
.ia-chat-empty-state__icon svg {
width: 48px;
height: 48px;
stroke-width: 1.5;
}
.ia-chat-empty-state__heading {
margin: 0 0 8px 0;
font-size: 16px;
font-weight: 600;
color: var(--text-normal);
}
.ia-chat-empty-state__subtext {
margin: 0;
font-size: var(--ia-font-size-s);
color: var(--text-muted);
max-width: 300px;
line-height: 1.5;
}
/* Scroll to bottom floating button */
.ia-scroll-to-bottom {
position: absolute;
bottom: 80px;
left: 50%;
transform: translateX(-50%);
width: 36px;
height: 36px;
border-radius: 50%;
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
z-index: 10;
transition: opacity var(--ia-transition-base), transform var(--ia-transition-base);
color: var(--text-muted);
}
.ia-scroll-to-bottom:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
transform: translateX(-50%) scale(1.1);
}
.ia-scroll-to-bottom svg {
width: 18px;
height: 18px;
}
.chat-message {
display: flex;
width: 100%;
}
/* ── Assistant message ── */
.message-assistant .message-row,
.ia-chat-message--assistant .message-row {
align-items: flex-end;
}
.message-assistant .message-avatar,
.ia-chat-message--assistant .message-avatar {
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
}
/* message-body is a transparent flex column — NOT the visual bubble */
.message-assistant .message-body,
.ia-chat-message--assistant .message-body {
display: flex;
flex-direction: column;
min-width: 0;
max-width: 100%;
padding: 0;
background: transparent;
border: none;
border-radius: 0;
overflow: visible;
}
.message-assistant .message-meta,
.ia-chat-message--assistant .message-meta {
order: 10;
display: flex;
flex-direction: column;
align-items: flex-start;
max-width: 100%;
}
.message-assistant .message-name,
.message-assistant .ia-chat-message__status,
.ia-chat-message--assistant .message-name,
.ia-chat-message--assistant .ia-chat-message__status {
display: none;
}
/* Content IS the visual bubble (order:3, appears after trace and reasoning) */
.message-assistant .message-content,
.ia-chat-message--assistant .message-content {
order: 3;
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
border-radius: 4px 16px 16px 16px;
padding: 8px 12px;
color: var(--text-normal);
}
/* Trace and reasoning traces stay at the top */
.message-assistant .agent-execution-trace-container,
.message-assistant .ia-agent-trace-container,
.ia-chat-message--assistant .agent-execution-trace-container,
.ia-chat-message--assistant .ia-agent-trace-container {
order: 1;
}
/* Reasoning and sections stay between trace and content */
.message-assistant .ia-chat-message__reasoning-section,
.ia-chat-message--assistant .ia-chat-message__reasoning-section {
order: 2;
}
.message-assistant .ia-chat-message__section,
.ia-chat-message--assistant .ia-chat-message__section {
order: 4;
}
.message-assistant .ia-write-proposals,
.ia-chat-message--assistant .ia-write-proposals {
order: 5;
}
/* Action bar — below content, hover reveal, order:20 */
.message-assistant .message-actions,
.ia-chat-message--assistant .message-actions {
order: 20;
display: flex;
gap: 2px;
max-height: 0;
overflow: hidden;
opacity: 0;
transition: max-height 0.15s ease, opacity 0.15s ease, margin-top 0.15s ease;
pointer-events: none;
margin-top: 0;
}
.message-assistant .message-body:hover .message-actions,
.ia-chat-message--assistant .message-body:hover .message-actions {
max-height: 60px;
opacity: 1;
pointer-events: auto;
margin-top: 4px;
}
/* Badges — below bubble, always visible (order:10) */
.message-assistant .ia-chat-message__badges,
.ia-chat-message--assistant .ia-chat-message__badges {
order: 10;
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-top: 5px;
}
/* Timestamp — after badges (order:11) */
.message-assistant .message-timestamp,
.ia-chat-message--assistant .message-timestamp {
order: 11;
font-size: var(--ia-font-size-3xs);
color: var(--text-faint);
margin-top: 2px;
margin-left: 0;
}
/* Token usage footer — last (order:12) */
.message-assistant .ia-chat-message__footer,
.message-assistant .ia-chat-message__annotation,
.ia-chat-message--assistant .ia-chat-message__footer,
.ia-chat-message--assistant .ia-chat-message__annotation {
order: 12;
display: block;
margin-top: 2px;
font-size: var(--ia-font-size-3xs);
color: var(--text-faint);
}
/* ── User message ── */
.message-user .message-row,
.ia-chat-message--user .message-row {
flex-direction: row-reverse;
}
.message-user .message-avatar,
.ia-chat-message--user .message-avatar {
background: var(--interactive-accent);
color: white;
}
/* Transparent flex column wrapper, right-aligned */
.message-user .message-body,
.ia-chat-message--user .message-body {
display: flex;
flex-direction: column;
align-items: flex-end;
flex: none;
min-width: 0;
max-width: 72%;
padding: 0;
background: transparent;
border: none;
border-radius: 0;
overflow: visible;
}
/* Hide name, badges, status — keep meta for timestamp only */
.message-user .message-name,
.message-user .ia-chat-message__badges,
.message-user .ia-chat-message__status,
.ia-chat-message--user .message-name,
.ia-chat-message--user .ia-chat-message__badges,
.ia-chat-message--user .ia-chat-message__status {
display: none;
}
/* meta row: timestamp only, right-aligned, below bubble */
.message-user .message-meta,
.ia-chat-message--user .message-meta {
display: flex;
justify-content: flex-end;
order: 10;
margin-top: 3px;
}
/* User timestamp always visible */
.message-user .message-timestamp,
.ia-chat-message--user .message-timestamp {
font-size: var(--ia-font-size-3xs);
color: var(--text-faint);
}
/* User content IS the bubble */
.message-user .message-content,
.ia-chat-message--user .message-content {
order: 1;
background: var(--interactive-accent);
color: var(--text-on-accent);
padding: 8px 12px;
border-radius: 16px 16px 4px 16px;
}
/* Copy action — right-aligned, hover reveal */
.message-user .message-actions,
.ia-chat-message--user .message-actions {
order: 2;
display: flex;
justify-content: flex-end;
gap: 2px;
max-height: none;
overflow: visible;
opacity: 0;
transition: opacity 0.15s ease;
pointer-events: none;
margin-top: 3px;
background: transparent;
}
.message-user .message-body:hover .message-actions,
.ia-chat-message--user .message-body:hover .message-actions {
opacity: 1;
pointer-events: auto;
}
/* Hide token footer for user messages */
.message-user .ia-chat-message__footer,
.message-user .ia-chat-message__annotation,
.ia-chat-message--user .ia-chat-message__footer,
.ia-chat-message--user .ia-chat-message__annotation {
display: none;
}
.message-tool {
padding: 12px;
margin: 12px 0;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
}
.tool-execution {
display: flex;
flex-direction: column;
gap: 8px;
}
.tool-args {
font-family: var(--font-monospace);
font-size: var(--ia-font-size-2xs);
color: var(--text-muted);
white-space: pre;
background: var(--background-secondary);
padding: 8px;
border-radius: 4px;
}
.tool-result {
margin-top: 8px;
padding: 8px;
border-radius: 4px;
}
.tool-success {
background: rgba(0, 255, 0, 0.1);
border-left: 3px solid var(--text-success);
}
.tool-error {
background: rgba(255, 0, 0, 0.1);
border-left: 3px solid var(--text-error);
}
.tool-result pre {
font-family: var(--font-monospace);
font-size: var(--ia-font-size-2xs);
margin: 4px 0 0 0;
white-space: pre-wrap;
}
.message-body,
.ia-chat-message__body,
.message-content,
.ia-chat-message__content {
user-select: text;
}
.message-actions,
.message-actions *,
.ia-chat-message__actions,
.ia-chat-message__actions * {
user-select: none;
}
.ia-chat-message__badges {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.ia-chat-message__badge {
display: inline-flex;
align-items: center;
gap: 2px;
padding: 1px 6px;
border-radius: var(--ia-radius-full);
border: none;
background: var(--background-modifier-border);
font-size: var(--ia-font-size-3xs);
color: var(--text-muted);
}
.ia-chat-message__badge-label {
display: none;
}
.ia-chat-message__badge-value {
color: var(--text-muted);
}
.message-content p {
margin: 0.2em 0;
}
.message-content p:first-child {
margin-top: 0;
}
.message-content p:last-child {
margin-bottom: 0;
}
.message-content p:empty {
display: none;
}
.message-content code {
background: var(--background-primary);
padding: 2px 6px;
border-radius: 4px;
font-family: var(--font-monospace);
font-size: 0.9em;
}
.message-content pre {
background: var(--background-primary);
padding: 12px;
border-radius: 6px;
overflow-x: auto;
margin: 8px 0;
}
.message-content pre code {
background: none;
padding: 0;
}
/* Code block with header */
.ia-code-block {
position: relative;
margin: 8px 0;
border-radius: 6px;
overflow: hidden;
border: 1px solid var(--background-modifier-border);
}
.ia-code-block pre {
margin: 0;
border-radius: 0;
border: none;
}
.ia-code-block__header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 4px 12px;
background: var(--background-secondary);
border-bottom: 1px solid var(--background-modifier-border);
font-size: var(--ia-font-size-2xs);
}
.ia-code-block__lang {
color: var(--text-muted);
text-transform: uppercase;
font-weight: 500;
letter-spacing: 0.03em;
}
.ia-code-block__copy {
padding: 2px 8px;
border: none;
background: transparent;
color: var(--text-muted);
font-size: var(--ia-font-size-2xs);
cursor: pointer;
border-radius: 3px;
transition: all 0.15s;
}
.ia-code-block__copy:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.ia-code-block__copy.is-copied {
color: var(--text-success);
}
.message-content ul, .message-content ol {
margin: 0.5em 0;
padding-left: 1.5em;
}
.message-content blockquote {
border-left: 3px solid var(--background-modifier-border);
padding-left: 12px;
margin: 8px 0;
opacity: 0.8;
}
.message-attachments {
margin-top: 6px;
display: flex;
flex-direction: column;
gap: 4px;
}
.attachment-item {
padding: 6px;
background: var(--background-modifier-border);
border-radius: 4px;
font-size: 0.85em;
}
.chat-input-container {
margin-top: 4px;
padding: 6px 10px 10px;
background: transparent;
border: none;
border-radius: 0;
display: flex;
flex-direction: column;
gap: 4px;
}
.chat-input-header {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
/* Toolbar Row B: single compact row with mode + model + agent/prompt + tokens */
.chat-toolbar-b {
display: none;
}
/* Inner row containers — flex pass-through to parent toolbar-b */
.chat-top-controls,
.chat-token-row {
display: flex;
flex: 1;
align-items: center;
flex-wrap: wrap;
gap: 8px;
}
.chat-action-row {
display: flex;
justify-content: space-between;
align-items: center;
gap: 12px;
margin: 6px 0 4px 0;
}
.chat-breadcrumb {
display: flex;
align-items: center;
gap: 6px;
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
}
.chat-breadcrumb-link {
color: var(--text-accent);
font-weight: 600;
cursor: pointer;
background: transparent;
border: none;
padding: 0;
}
.chat-breadcrumb-link:hover {
text-decoration: underline;
}
.chat-breadcrumb-current {
font-weight: 600;
color: var(--text-normal);
}
.chat-action-buttons {
display: flex;
align-items: center;
gap: 6px;
}
.chat-action-btn {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 4px 8px;
border-radius: 4px;
cursor: pointer;
font-size: var(--ia-font-size-xs);
font-weight: 500;
color: var(--text-muted);
background: transparent;
transition: all var(--ia-transition-fast);
}
.chat-action-btn:hover {
color: var(--text-normal);
background: var(--background-modifier-hover);
}
.chat-action-btn:active {
background: var(--background-modifier-active-hover);
}
.chat-action-icon {
display: flex;
align-items: center;
justify-content: center;
}
.chat-action-icon svg {
width: 14px;
height: 14px;
}
.chat-action-text {
white-space: nowrap;
}
.chat-breadcrumb-link.chat-action-btn {
color: var(--text-accent);
font-weight: 600;
}
.chat-breadcrumb-link.chat-action-btn:hover {
color: var(--text-accent-hover);
}
.chat-model-row {
display: flex;
flex: 1;
align-items: center;
flex-wrap: wrap;
gap: 8px;
}
.chat-model-controls {
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
position: relative;
}
.chat-model-select {
display: flex;
flex: 1;
align-items: center;
gap: 8px;
}
.chat-model-select .chat-label {
font-weight: 600;
}
.model-select {
flex: 1;
min-width: 120px;
max-width: 220px;
padding: 4px 8px;
font-size: var(--ia-font-size-xs);
border-radius: 6px;
border: 1px solid var(--background-modifier-border);
background: var(--background-primary);
}
.chat-param-group {
display: flex;
align-items: center;
gap: 8px;
}
.chat-agent-summary {
display: flex;
flex-direction: column;
gap: 6px;
padding-top: 6px;
border-top: 1px solid var(--background-modifier-border);
}
.chat-agent-summary-title {
font-size: var(--ia-font-size-xs);
font-weight: 600;
color: var(--text-muted);
}
.chat-agent-summary-details {
display: flex;
flex-wrap: wrap;
gap: 6px;
align-items: center;
}
.chat-agent-summary-text {
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
}
.chat-agent-chip {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 4px 10px;
border-radius: var(--ia-radius-full);
border: 1px dashed var(--background-modifier-border);
background: var(--background-primary);
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
}
.chat-agent-chip-label {
font-weight: 600;
color: var(--text-muted);
}
.chat-agent-chip-value {
color: var(--text-normal);
}
.chat-label {
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
font-weight: 600;
}
.chat-slider {
width: 120px;
}
.chat-param-value {
font-weight: 600;
color: var(--text-accent);
}
.chat-number-input {
width: 90px;
padding: 4px 8px;
border-radius: 6px;
border: 1px solid var(--background-modifier-border);
background: var(--background-primary);
}
.chat-token-chip {
font-size: var(--ia-font-size-2xs);
color: var(--text-faint);
padding: 2px 8px;
border-radius: var(--ia-radius-full);
background: transparent;
white-space: nowrap;
margin-left: auto;
}
/* Icon button style */
.ia-icon-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 26px;
height: 26px;
padding: 0;
border: none;
border-radius: 4px;
background: transparent;
color: var(--text-muted);
cursor: pointer;
transition: background var(--ia-transition-fast), color var(--ia-transition-fast);
}
.ia-icon-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.ia-icon-btn.is-active {
background: var(--background-modifier-hover);
color: var(--text-accent);
}
.ia-icon-btn svg {
width: 14px;
height: 14px;
}
/* Advanced params overlay */
.chat-params-container {
position: absolute;
top: 100%;
left: 0;
right: 0;
z-index: 20;
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
padding: 10px 12px;
margin-top: 4px;
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
box-shadow: var(--ia-shadow-m);
}
.chat-params-container.ia-hidden {
display: none;
}
.chat-select-group {
display: flex;
align-items: center;
gap: 6px;
}
.chat-header-actions {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
margin-left: auto;
}
.header-action-btn {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 4px 10px;
border: 1px solid transparent;
border-radius: var(--ia-radius-full);
background: var(--background-primary);
font-size: var(--ia-font-size-xs);
color: var(--text-muted);
cursor: pointer;
transition: background 0.2s ease, color 0.2s ease, border 0.2s ease;
}
.header-action-btn:hover:not(.is-disabled) {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.header-action-btn.is-active {
border-color: var(--interactive-accent);
background: var(--interactive-accent);
color: var(--background-primary);
}
.header-action-btn.is-disabled {
opacity: 0.5;
cursor: not-allowed;
}
.header-action-btn.is-link {
border-style: dashed;
background: transparent;
color: var(--text-normal);
}
.header-action-icon {
display: inline-flex;
align-items: center;
}
.header-action-icon svg {
width: 14px;
height: 14px;
}
.conversation-delete-btn svg {
width: 12px;
height: 12px;
}
.stop-generation-btn svg {
width: 14px;
height: 14px;
}
.header-action-status {
font-size: var(--ia-font-size-2xs);
color: var(--text-muted);
}
.chat-input-editor {
display: flex;
align-items: flex-end;
gap: 8px;
padding: 8px 10px;
}
/* ─── A3 Redesign: new header ─────────────────────────────────────────── */
.chat-header-simple {
display: flex;
align-items: center;
gap: 8px;
padding: 7px 10px;
border-bottom: 1px solid var(--background-modifier-border);
}
.chat-header-title {
flex: 1;
font-size: var(--ia-font-size-xs);
font-weight: 600;
color: var(--text-normal);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.chat-header-icon-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
min-width: 24px;
min-height: 24px;
background: none;
border: none;
box-shadow: none;
outline: none;
padding: 0;
font-size: 0;
line-height: 1;
cursor: pointer;
color: var(--text-muted);
border-radius: 4px;
flex-shrink: 0;
-webkit-appearance: none;
appearance: none;
}
.chat-header-icon-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.chat-header-icon-btn__icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 14px;
height: 14px;
line-height: 1;
}
.chat-header-icon-btn svg {
width: 14px;
height: 14px;
display: block;
}
.chat-agent-header-badge {
display: inline-flex;
align-items: center;
padding: 2px 8px;
border-radius: 10px;
background: #dcfce7;
color: #15803d;
font-size: var(--ia-font-size-2xs);
font-weight: 600;
white-space: nowrap;
flex-shrink: 0;
}
/* ─── A3 Redesign: new input box ──────────────────────────────────────── */
.chat-input-box {
border: 1.5px solid var(--background-modifier-border);
border-radius: 12px;
overflow: hidden;
background: var(--background-primary);
}
.chat-input-toolbar {
display: flex;
align-items: center;
gap: 4px;
padding: 6px 8px;
border-bottom: 1px solid var(--background-modifier-border-hover);
}
.chat-input-toolbar-spacer {
flex: 1;
}
.chat-input-pill-group {
display: flex;
align-items: center;
gap: 4px;
}
.chat-input-mode-pill,
.chat-input-model-pill,
.chat-input-agent-pill {
appearance: none;
-webkit-appearance: none;
border: none;
border-radius: 8px;
padding: 2px 8px;
font-size: var(--ia-font-size-2xs);
font-weight: 600;
cursor: pointer;
max-width: 120px;
overflow: hidden;
text-overflow: ellipsis;
}
.chat-input-mode-pill {
background: color-mix(in srgb, var(--interactive-accent) 15%, transparent);
color: var(--interactive-accent);
}
.chat-input-model-pill {
background: var(--background-modifier-hover);
color: var(--text-muted);
max-width: 140px;
}
.chat-input-agent-pill {
background: #dcfce7;
color: #15803d;
max-width: 150px;
}
.chat-input-toolbar-btn {
display: inline-flex;
align-items: center;
gap: 3px;
background: none;
border: none;
padding: 3px 6px;
cursor: pointer;
border-radius: 6px;
font-size: var(--ia-font-size-2xs);
color: var(--text-muted);
}
.chat-input-toolbar-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.chat-input-toolbar-btn.is-link {
border: 1.5px dashed var(--background-modifier-border);
color: var(--text-normal);
}
.chat-input-toolbar-btn.is-link:hover {
border-color: var(--interactive-accent);
color: var(--interactive-accent);
}
.chat-input-toolbar-btn.is-active {
background: #dcfce7;
color: #15803d;
}
.chat-input-toolbar-btn svg {
width: 13px;
height: 13px;
}
.chat-input-footer {
padding-top: 4px;
}
.input-bottom-controls {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
flex-wrap: wrap;
}
.bottom-left-controls {
display: flex;
align-items: center;
gap: 6px;
flex: 1;
flex-wrap: wrap;
}
.bottom-middle-controls {
display: flex;
align-items: center;
gap: 8px;
flex: 1;
flex-wrap: wrap;
}
.attachment-preview {
display: flex;
flex-wrap: wrap;
gap: 6px;
align-items: center;
}
.bottom-right-controls {
display: flex;
align-items: center;
gap: 8px;
margin-left: auto;
}
.mode-selector,
.prompt-selector,
.agent-selector {
padding: 3px 8px;
border: 1px solid var(--background-modifier-border);
border-radius: var(--ia-radius-full);
background: var(--background-primary);
color: var(--text-normal);
font-size: var(--ia-font-size-2xs);
cursor: pointer;
min-width: 100px;
transition: border-color 0.2s ease;
}
.mode-selector:focus,
.prompt-selector:focus,
.agent-selector:focus {
outline: none;
border-color: var(--interactive-accent);
box-shadow: 0 0 0 2px rgba(47, 194, 153, 0.15);
}
.toggle-btn {
display: flex;
align-items: center;
gap: 4px;
padding: 4px 10px;
border-radius: 12px;
border: 1px solid var(--background-modifier-border);
background: var(--background-primary);
color: var(--text-muted);
cursor: pointer;
font-size: var(--ia-font-size-2xs);
transition: all 0.2s ease;
outline: none;
}
.toggle-btn:hover {
background: var(--background-modifier-hover);
border-color: var(--interactive-accent);
}
.toggle-btn.active {
background: var(--interactive-accent);
color: white;
border-color: var(--interactive-accent);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.input-reference-area {
flex: 0 0 auto;
display: flex;
flex-wrap: wrap;
gap: 4px;
min-height: 28px;
padding: 8px 12px;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
transition: border-color 0.2s ease;
margin: 8px 10px 0 10px;
}
.reference-list {
display: flex;
flex-direction: column;
gap: 4px;
}
.reference-item {
display: flex;
align-items: center;
gap: 6px;
padding: 4px 8px;
background: var(--background-secondary);
border-radius: 4px;
font-size: var(--ia-font-size-xs);
}
.reference-icon {
flex-shrink: 0;
}
.reference-path {
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.reference-remove-btn {
padding: 0 4px;
border: none;
background: transparent;
color: var(--text-error);
cursor: pointer;
font-size: 16px;
line-height: 1;
}
.reference-remove-btn:hover {
background: var(--background-modifier-hover);
border-radius: 2px;
}
.message-references {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 8px;
}
.reference-badge {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 3px 8px;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 12px;
font-size: var(--ia-font-size-2xs);
color: var(--text-muted);
transition: all 0.2s;
}
.reference-badge:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
border-color: var(--interactive-accent);
}
.chat-input {
flex: 1;
min-height: 72px;
max-height: 200px;
padding: 14px 16px;
border: 1px solid transparent;
border-radius: 12px;
background: var(--background-primary);
color: var(--text-normal);
resize: none;
font-family: inherit;
font-size: var(--ia-font-size-s);
line-height: 1.6;
outline: none;
transition: border-color 0.2s, box-shadow 0.2s;
}
.chat-input:focus {
border-color: var(--interactive-accent);
box-shadow: 0 0 0 3px rgba(47, 194, 153, 0.15);
}
.chat-input::placeholder {
color: var(--text-muted);
}
/* Send button */
.ia-send-btn {
flex-shrink: 0;
width: 32px;
height: 32px;
border-radius: 8px;
border: none;
background: var(--background-modifier-border);
color: var(--text-muted);
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
margin: 0 4px 8px 0;
transition: background 0.15s ease, color 0.15s ease, transform 0.1s ease;
}
.ia-send-btn svg {
width: 18px;
height: 18px;
}
.ia-send-btn.is-active {
background: var(--interactive-accent);
color: var(--text-on-accent);
}
.ia-send-btn.is-active:hover {
filter: brightness(1.1);
transform: scale(1.05);
}
/* Send hint styling */
.ia-send-hint {
font-size: var(--ia-font-size-2xs);
color: var(--text-faint);
}
.ia-send-hint kbd {
display: inline-block;
padding: 1px 6px;
font-size: var(--ia-font-size-3xs);
font-family: var(--font-monospace);
color: var(--text-muted);
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
box-shadow: 0 1px 0 var(--background-modifier-border);
line-height: 1.4;
}
.attachment-preview-item {
display: flex;
align-items: center;
gap: 6px;
padding: 4px 8px;
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
font-size: var(--ia-font-size-2xs);
}
/* ---- chat header component classes ---- */
.ia-model-label {
font-weight: 500;
font-size: 13px;
}
.ia-model-actions {
display: flex;
align-items: center;
gap: 6px;
}
.ia-badge {
font-size: 11px;
color: var(--text-muted);
padding: 4px 8px;
background: var(--background-primary);
border-radius: 4px;
}
.ia-badge--ml {
margin-left: 8px;
}
/* ---- input controller attachment classes ---- */
.ia-attachment-preview-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
padding: 8px;
background: var(--background-secondary);
}
.ia-attachment-item {
display: flex;
align-items: center;
gap: 4px;
padding: 4px 8px;
background: var(--background-primary);
border-radius: 4px;
}
.ia-attachment-filename {
font-size: 0.9em;
}
.ia-attachment-remove-inline {
border: none;
background: transparent;
cursor: pointer;
}
@media (max-width: 720px) {
.chat-input-container {
padding: 12px;
}
.chat-input-footer {
padding-top: 8px;
}
.input-bottom-controls {
flex-direction: column;
align-items: stretch;
}
.bottom-right-controls {
margin-left: 0;
justify-content: flex-start;
}
}
/* Input error state (e.g. invalid JSON in CLI agent modal) */
.intelligence-assistant .ia-input--error,
.ia-input--error.ia-input--error {
border-color: var(--text-error);
outline: 1px solid var(--text-error);
}
/* Generic hidden utility class */
.ia-hidden {
display: none;
}
/* ── RAG tab stats ──────────────────────────────────────────────────────── */
.ia-rag-stats-title {
font-weight: bold;
margin-bottom: 8px;
}
.ia-stat-label {
font-size: 0.9em;
color: var(--text-muted);
}
.ia-stat-value {
font-weight: 600;
}
.ia-rag-empty-notice {
margin-top: 8px;
font-size: 0.9em;
color: var(--text-muted);
font-style: italic;
}
.ia-rag-stats-error {
color: var(--text-error);
}
/* ── Ollama model manager modal ─────────────────────────────────────────── */
.ia-server-status-online {
color: var(--text-success);
font-weight: 600;
}
.ia-server-status-meta {
color: var(--text-muted);
margin-left: 8px;
}
.ia-server-status-url {
color: var(--text-muted);
margin-left: 8px;
font-size: 0.9em;
}
.ia-pull-section-hint {
color: var(--text-muted);
font-size: 0.9em;
}
.ia-model-list-empty {
color: var(--text-muted);
font-style: italic;
}
.ia-model-name {
font-weight: 600;
margin-bottom: 4px;
}
.ia-model-capabilities {
color: var(--text-muted);
font-size: 0.9em;
}
/* ─── Settings Tab Shared Helpers ──────────────────────────────── */
/* Subheading used in settings tabs (e.g. web-search groups) */
.ia-settings-subheading {
margin-top: 1.5em;
}
/* Install SDK button inside a detection card (stacked layout) */
.ia-sdk-install-btn {
margin-top: 4px;
font-size: var(--font-ui-smaller);
}
/* Install / Update button shown inline inside a table cell */
.ia-sdk-install-btn--inline {
margin-left: 6px;
font-size: var(--font-ui-smaller);
}
/* Flex row used to align toggle + title inside a table action cell */
.ia-action-title-row {
display: flex;
align-items: center;
gap: 8px;
}
/* ── Usage tab ──────────────────────────────────────────────────────────── */
.ia-usage-stat-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
margin-bottom: 16px;
}
.ia-usage-stat-card {
padding: 12px 14px;
border-radius: var(--ia-radius-m);
border: 1px solid var(--background-modifier-border);
background: var(--background-secondary);
}
.ia-usage-stat-card__label {
font-size: var(--ia-font-size-3xs);
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-muted);
margin-bottom: 4px;
font-weight: 600;
}
.ia-usage-stat-card__value {
font-size: 20px;
font-weight: 700;
color: var(--text-normal);
line-height: 1;
font-variant-numeric: tabular-nums;
}
.ia-usage-stat-card__sub {
font-size: var(--ia-font-size-3xs);
color: var(--text-faint);
margin-top: 3px;
}
.ia-tab-bar {
display: flex;
border-bottom: 1px solid var(--background-modifier-border);
margin-bottom: 16px;
}
.ia-tab {
padding: 8px 14px;
font-size: var(--ia-font-size-xs);
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
border-bottom: 2px solid transparent;
margin-bottom: -1px;
transition: color var(--ia-transition-fast), border-color var(--ia-transition-fast);
}
.ia-tab:hover:not(.ia-tab--active) {
color: var(--text-normal);
}
.ia-tab--active {
color: var(--interactive-accent);
border-bottom-color: var(--interactive-accent);
font-weight: 600;
}
.ia-usage-section-hdr {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 8px;
}
.ia-usage-section-hdr h4 {
margin: 0;
font-size: var(--ia-font-size-2xs);
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--text-muted);
}
.ia-usage-section-hdr span {
font-size: var(--ia-font-size-3xs);
color: var(--text-faint);
}
.ia-table-cell--right {
text-align: right;
font-variant-numeric: tabular-nums;
color: var(--text-muted);
}
/* Info / usage box at the bottom of a settings tab */
.ia-info-box {
margin-top: 20px;
}
/* Button row at the bottom of a settings modal */
.ia-modal-footer {
display: flex;
justify-content: flex-end;
gap: 8px;
margin-top: 16px;
}
/* Cancel / secondary button in modal footer */
.ia-modal-btn {
padding: 6px 16px;
}
/* Primary / accent button in modal footer */
.ia-modal-btn--primary {
padding: 6px 16px;
background: var(--interactive-accent);
color: white;
border: none;
border-radius: 4px;
}
/* SDK install modal: estimated size hint below package name */
.ia-sdk-size-hint {
color: var(--text-muted);
font-size: var(--font-ui-smaller);
}
/* SDK install modal: status line (Starting… / Done! / Error) */
.ia-sdk-status {
margin-top: 12px;
font-weight: 600;
}
/* SDK install modal: scrollable log output pane */
.ia-sdk-log {
max-height: 200px;
overflow-y: auto;
background: var(--background-secondary);
padding: 8px;
border-radius: 4px;
font-size: var(--font-ui-smaller);
white-space: pre-wrap;
word-break: break-all;
margin-top: 8px;
}
/* SDK install modal: action bar (cancel / close button row) */
.ia-sdk-action-bar {
display: flex;
justify-content: flex-end;
gap: 8px;
margin-top: 12px;
}
/* Monospace textarea used for prompt content and service-key fields */
.ia-textarea--code {
width: 100%;
font-family: var(--font-monospace);
font-size: 12px;
}
/* Agent edit modal: custom prompt sub-section container */
.ia-custom-prompt-section {
margin-top: 12px;
}
/* ── Provider tab ───────────────────────────────────────────────────────── */
/* Security-warning banner at the top of the provider tab */
.ia-warning-box {
background-color: rgba(255, 100, 0, 0.1);
border-left: 4px solid #ff6400;
padding: 12px;
margin-bottom: 20px;
border-radius: 4px;
}
.ia-warning-title {
font-weight: bold;
margin-bottom: 8px;
display: block;
}
.ia-warning-text {
font-size: 0.9em;
line-height: 1.4;
}
.ia-warning-list {
margin-top: 8px;
margin-bottom: 0;
font-size: 0.85em;
}
/* Italic placeholder shown while checking the Ollama server */
.ia-text-italic {
font-style: italic;
}
/* Ollama server / version text states */
.ia-text-success {
color: var(--text-success);
}
.ia-text-muted {
color: var(--text-muted);
}
.ia-text-error {
color: var(--text-error);
}
/* ── Sub-tab navigation (RAG tab + LLM tab) ─────────────────────────────── */
/* Shared nav container used by both the RAG and LLM sub-tab strips */
.ia-rag-tab-nav,
.ia-llm-tab-nav {
display: flex;
gap: 8px;
margin-bottom: 20px;
border-bottom: 1px solid var(--background-modifier-border);
padding-bottom: 8px;
}
/* Base sub-tab button style */
.ia-rag-subtab-btn,
.ia-llm-subtab-btn {
padding: 8px 16px;
border: none;
background: transparent;
color: var(--text-normal);
border-radius: 4px;
cursor: pointer;
transition: all 0.2s;
}
/* Active state */
.ia-rag-subtab-btn--active,
.ia-llm-subtab-btn--active {
background: var(--interactive-accent);
color: var(--text-on-accent);
}
/* Hover only applied when the button is not active */
.ia-rag-subtab-btn:not(.ia-rag-subtab-btn--active):hover,
.ia-llm-subtab-btn:not(.ia-llm-subtab-btn--active):hover {
background: var(--background-modifier-hover);
}
/* ── RAG stats grid ─────────────────────────────────────────────────────── */
.ia-rag-stats {
margin-bottom: 16px;
padding: 12px;
background-color: var(--background-secondary);
border-radius: 4px;
}
.ia-rag-stats-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
}
.ia-stat-item {
display: flex;
flex-direction: column;
}
/* ── Image-picker modal (SearchableImageModal) ──────────────────────────── */
.ia-image-search-input {
width: 100%;
margin-bottom: 12px;
padding: 8px;
}
.ia-image-results {
max-height: 400px;
overflow-y: auto;
margin-bottom: 12px;
}
.ia-image-picker-buttons {
display: flex;
gap: 8px;
justify-content: flex-end;
}
/* image-item base: padding + radius + margin */
.image-item {
padding: 8px;
border-radius: 4px;
margin-bottom: 4px;
background: var(--background-secondary);
}
.ia-image-item--selected {
background: var(--interactive-accent);
color: var(--text-on-accent);
}
/* ── Attachment handler preview ─────────────────────────────────────────── */
/* Active (non-empty) state for the attachment container */
.ia-attachment-preview-active {
display: flex;
gap: 8px;
padding: 8px;
background: var(--background-secondary);
border-radius: 4px;
flex-wrap: wrap;
margin-bottom: 8px;
}
/* Individual attachment preview card */
.ia-attachment-card {
position: relative;
display: flex;
align-items: center;
gap: 8px;
padding: 8px;
background: var(--background-primary);
border-radius: 4px;
}
/* Thumbnail image inside an attachment card */
.ia-attachment-thumb {
width: 40px;
height: 40px;
object-fit: cover;
border-radius: 4px;
}
/* Remove button inside an attachment card */
.ia-attachment-remove-btn {
margin-left: auto;
padding: 0 6px;
border: none;
background: transparent;
font-size: 20px;
color: var(--text-error);
}
/* ── dom-helpers.ts shared widget classes ────────────────────────────────── */
/* Base button style (created by createButton()) */
.ia-dom-btn {
padding: 6px 12px;
border-radius: 4px;
border: 1px solid var(--background-modifier-border);
font-size: 13px;
}
.ia-dom-btn--sm {
padding: 4px 8px;
font-size: 11px;
}
.ia-dom-btn--primary {
background: var(--interactive-accent);
color: var(--text-on-accent);
font-weight: 500;
}
.ia-dom-btn--danger {
background: var(--background-modifier-error);
color: var(--text-error);
}
.ia-dom-btn--ghost {
background: var(--background-primary);
}
/* Base select style (created by createSelect()) */
.ia-dom-select {
padding: 6px 10px;
border-radius: 4px;
border: 1px solid var(--background-modifier-border);
background: var(--background-primary);
color: var(--text-normal);
font-size: 13px;
}
/* Label span (created by createLabel()) */
.ia-dom-label {
font-weight: 500;
font-size: 13px;
}
.ia-dom-label--normal {
color: var(--text-normal);
}
.ia-dom-label--muted {
color: var(--text-muted);
}
.ia-dom-label--accent {
color: var(--text-accent);
}
/* Badge/pill element (created by createBadge()) */
.ia-dom-badge {
font-size: 12px;
padding: 4px 8px;
border-radius: 4px;
font-weight: 500;
background: var(--background-primary);
color: var(--text-muted);
}
.ia-dom-badge--sm {
font-size: 11px;
padding: 2px 6px;
}
.ia-dom-badge--success {
background: var(--background-modifier-success);
color: var(--text-success);
}
.ia-dom-badge--warning {
background: var(--background-modifier-warning);
color: var(--text-warning);
}
.ia-dom-badge--error {
background: var(--background-modifier-error);
color: var(--text-error);
}
/* ── Ollama model manager modal layout ──────────────────────────────────── */
/* Header row (title + refresh button) in installed-models section */
.ia-modal-section-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
}
/* Scrollable installed-model list */
.ia-model-list {
max-height: 400px;
overflow-y: auto;
}
/* Single model row */
.ia-model-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px;
border-bottom: 1px solid var(--background-modifier-border);
}
/* Generic utility: pull element left with auto margin */
.ia-ml-auto {
margin-left: auto;
}
/* Generic small left margin */
.ia-ml-8 {
margin-left: 8px;
}
/* Flex column direction (toggled by createControlContainer when direction=column) */
.ia-flex-col {
flex-direction: column;
}
/* Full-width input */
.ia-full-width {
width: 100%;
}
/* Flex button bar at the bottom of an inline confirmation modal */
.ia-confirm-button-bar {
display: flex;
justify-content: flex-end;
gap: 8px;
margin-top: 12px;
}
/* ── Action button (copy/retry/etc) in message toolbar ───────────────────── */
.ia-action-btn {
padding: 2px 6px;
border: none;
background: transparent;
border-radius: 4px;
opacity: 0.6;
font-size: 14px;
}
.ia-action-btn:hover {
opacity: 1;
background: var(--background-modifier-hover);
}
/* ── Checkbox label ───────────────────────────────────────────────────────── */
.ia-checkbox-label {
margin-left: 4px;
}
/* ── Toggle button disabled state ────────────────────────────────────────── */
.toggle-btn.disabled {
opacity: 0.5;
cursor: not-allowed;
}
/* ── Status text inside a toggle button ──────────────────────────────────── */
.ia-toggle-status {
opacity: 0.7;
font-size: 0.8em;
margin-left: 4px;
}
/* ── Cursor utilities ────────────────────────────────────────────────────── */
.ia-cursor-not-allowed {
cursor: not-allowed;
}
.ia-cursor-help {
cursor: help;
}
/* ── Header actions visibility ───────────────────────────────────────────── */
.ia-header-actions--hidden {
display: none;
}
/* ── Modal search input ──────────────────────────────────────────────────── */
.ia-modal-search-input {
width: 100%;
padding: 8px;
margin-bottom: 10px;
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
}
/* ── Modal results container ─────────────────────────────────────────────── */
.ia-modal-results {
max-height: 400px;
overflow-y: auto;
}
/* ── Modal button row (space-between) ────────────────────────────────────── */
.ia-modal-btn-row {
display: flex;
justify-content: space-between;
margin-top: 10px;
}
/* ── Modal button row (flex-end) ─────────────────────────────────────────── */
.ia-modal-btn-row--end {
display: flex;
justify-content: flex-end;
margin-top: 10px;
}
/* ── Modal list item ─────────────────────────────────────────────────────── */
.ia-modal-list-item {
display: flex;
align-items: center;
padding: 6px;
border-bottom: 1px solid var(--background-modifier-border);
}
/* ── Modal list item selected state ──────────────────────────────────────── */
.ia-modal-item--selected {
background-color: var(--background-modifier-active);
}
/* ── Modal list icon ─────────────────────────────────────────────────────── */
.ia-modal-list-icon {
margin-right: 8px;
}
/* ── Flex-1 utility ──────────────────────────────────────────────────────── */
.ia-flex-1 {
flex: 1;
}
/* ── Margin-right utilities ──────────────────────────────────────────────── */
.ia-mr-10 {
margin-right: 10px;
}
/* ========================================
* Reasoning Block Redesign
* ======================================== */
.ia-chat-message__reasoning-section {
margin-top: 10px;
margin-bottom: 10px;
}
.ia-chat-message__summary {
cursor: pointer;
font-size: var(--ia-font-size-xs);
font-weight: 600;
color: var(--text-muted);
margin-bottom: 4px;
list-style: none;
display: flex;
align-items: center;
gap: 6px;
user-select: none;
}
.ia-chat-message__summary::-webkit-details-marker {
display: none;
}
.ia-chat-message__summary::before {
content: '▶';
font-size: 8px;
transition: transform 0.2s ease;
color: var(--text-faint);
}
details[open] .ia-chat-message__summary::before {
transform: rotate(90deg);
}
.ia-chat-message__reasoning {
background: var(--background-secondary-alt);
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
padding: 10px 14px;
font-size: var(--ia-font-size-m);
line-height: 1.7;
color: var(--text-muted);
margin-bottom: 8px;
}
.ia-chat-message__reasoning p {
margin-bottom: 0.8em;
}
.ia-chat-message__reasoning p:last-child {
margin-bottom: 0;
}
.ia-chat-message__reasoning-step {
margin-bottom: 12px;
padding-bottom: 12px;
border-bottom: 1px dashed var(--background-modifier-border);
}
.ia-chat-message__reasoning-step:last-child {
margin-bottom: 0;
padding-bottom: 0;
border-bottom: none;
}
.ia-chat-message__reasoning-step strong {
display: block;
margin-bottom: 4px;
color: var(--text-normal);
font-size: var(--ia-font-size-xs);
}
/* Batch Proposals */
.ia-write-proposal-card.is-batch {
border-left: 4px solid var(--interactive-accent);
}
.ia-write-proposal-card__batch-list {
margin-top: 10px;
padding: 8px;
background: var(--background-primary);
border-radius: 4px;
font-size: var(--ia-font-size-2xs);
}
.ia-write-proposal-card__batch-item {
display: flex;
gap: 8px;
}
.ia-write-proposal-card__batch-op {
font-weight: bold;
color: var(--text-accent);
text-transform: uppercase;
}
/* Agent task launcher */
.ia-agent-task-modal {
width: 600px;
max-width: 100%;
margin: 0 auto;
overflow-x: hidden;
}
.ia-agent-task-modal__field {
display: flex;
flex-direction: column;
gap: 8px;
margin-top: 14px;
}
.ia-agent-task-modal__label {
color: var(--text-normal);
font-weight: var(--font-semibold);
}
.ia-agent-task-modal__textarea {
width: 100%;
box-sizing: border-box;
min-height: 10rem;
max-height: 42vh;
padding: 10px 12px;
line-height: 1.5;
resize: vertical;
}
.ia-agent-task-modal__footer {
display: flex;
justify-content: flex-end;
gap: 12px;
margin-top: 24px;
padding-top: 16px;
border-top: 1px solid var(--background-modifier-border);
}
.chat-header-token-summary {
font-size: var(--ia-font-size-3xs);
color: var(--text-faint);
padding: 2px 8px;
background: var(--background-secondary-alt);
border: 1px solid var(--background-modifier-border);
border-radius: var(--ia-radius-full);
margin-left: 8px;
white-space: nowrap;
}
/* === marketplace-compliance: extracted inline styles ====================== */
/* ── chat-input / input-controller: textarea auto-resize ─────────────────── */
.ia-autoresize-textarea {
height: var(--ia-textarea-height, auto);
}
/* ── chat message-renderer: provider avatar background ───────────────────── */
.ia-chat-avatar--default-bg {
background: var(--background-modifier-border);
}
.ia-chat-avatar--provider-bg {
background: var(--ia-avatar-bg);
}
/* ── utils/dom-helpers: control container with dynamic flex/gap/align ────── */
.ia-dom-control-container {
gap: var(--ia-gap, 8px);
}
.ia-dom-control-container--align {
align-items: var(--ia-align);
}
.ia-dom-control-container--flex {
flex: var(--ia-flex);
}
.ia-dom-select--flex {
flex: var(--ia-flex);
}
.ia-dom-select--width {
width: var(--ia-width);
}
.ia-dom-label--weight {
font-weight: var(--ia-font-weight);
}
/* ── models-tab: capability badge dynamic background ─────────────────────── */
.ia-tag--dyn-bg {
background: var(--ia-badge-bg);
}
/* ── agents-tab: agent icon spacing ──────────────────────────────────────── */
.ia-agent-icon {
margin-right: 6px;
}
/* ── provider-config-modal / mcp-server-modal: input validation border ───── */
.ia-input-error {
border-color: var(--text-error);
}
/* ── cli-tools-section ───────────────────────────────────────────────────── */
.ia-cli-tools-toolbar {
display: flex;
gap: 8px;
margin-bottom: 16px;
}
.ia-cli-tools-param-item {
margin-bottom: 1em;
padding: 0.5em;
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
}
.ia-cli-tools-param-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.5em;
}
.ia-cli-tools-param-remove {
padding: 2px 6px;
}
.ia-cli-tools-preset-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 12px;
margin-bottom: 4px;
background: var(--background-secondary);
border-radius: 4px;
}
.ia-cli-tools-preset-command {
font-size: 11px;
color: var(--text-muted);
}
.ia-cli-tools-preset-add--disabled {
opacity: 0.5;
}
.ia-cli-tools-preset-footer {
margin-top: 16px;
text-align: right;
}
/* ── mcp-inspector-modal ─────────────────────────────────────────────────── */
.ia-mcpi-desc {
color: var(--text-muted);
}
.ia-mcpi-tabbar {
margin-bottom: 16px;
}
.ia-mcpi-tab {
flex: 1;
padding: 8px;
border: 1px solid var(--background-modifier-border);
background: var(--background-primary);
color: var(--text-normal);
}
.ia-mcpi-tab--no-left-border {
border-left: none;
}
.ia-mcpi-tab--first {
border-radius: 4px 0 0 4px;
}
.ia-mcpi-tab--last {
border-radius: 0 4px 4px 0;
}
.ia-mcpi-tab.ia-mcpi-tab--active {
background: var(--interactive-accent);
color: white;
}
.ia-mcpi-content {
min-height: 300px;
border: 1px solid var(--background-modifier-border);
border-radius: 0 4px 4px 4px;
padding: 16px;
}
.ia-mcpi-refresh-btn {
margin-top: 16px;
padding: 6px 12px;
background: var(--interactive-accent);
color: white;
border: none;
border-radius: 4px;
}
.ia-mcpi-table {
width: 100%;
border-collapse: collapse;
}
.ia-mcpi-status--muted {
color: var(--text-muted);
}
.ia-mcpi-status--success {
color: var(--text-success);
}
.ia-mcpi-status--error {
color: var(--text-error);
}
.ia-mcpi-action-btn {
padding: 4px 8px;
font-size: 12px;
color: white;
}
.ia-mcpi-action-btn--connect {
background: var(--interactive-accent);
}
.ia-mcpi-action-btn--disconnect {
background: var(--background-modifier-error);
}
.ia-mcpi-params-list {
margin: 0;
padding-left: 16px;
}
.ia-mcpi-log-container {
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
padding: 8px;
height: 200px;
overflow-y: auto;
background: var(--background-primary);
font-family: monospace;
font-size: 12px;
}
.ia-mcpi-test-section {
margin-top: 16px;
}
.ia-mcpi-selection-row {
gap: 8px;
margin-bottom: 12px;
align-items: center;
}
.ia-mcpi-select--flex {
flex: 1;
}
.ia-mcpi-params-box {
margin-bottom: 12px;
padding: 12px;
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
background: var(--background-secondary);
}
.ia-mcpi-param-row {
margin-bottom: 8px;
}
.ia-mcpi-param-label {
margin-bottom: 4px;
font-weight: 600;
}
.ia-mcpi-param-desc {
font-size: 0.9em;
color: var(--text-muted);
margin-bottom: 4px;
}
.ia-mcpi-param-input {
width: 100%;
}
.ia-mcpi-buttons-row {
gap: 8px;
margin-bottom: 12px;
}
.ia-mcpi-result-container {
margin-top: 12px;
padding: 12px;
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
background: var(--background-primary);
font-family: monospace;
font-size: 12px;
max-height: 300px;
overflow-y: auto;
}
.ia-mcpi-result-header {
margin-bottom: 8px;
font-weight: 600;
}
.ia-mcpi-result-header--success {
color: var(--text-success);
}
.ia-mcpi-result-header--error {
color: var(--text-error);
}
.ia-mcpi-result-error {
color: var(--text-error);
margin-bottom: 8px;
}
.ia-mcpi-result-pre {
white-space: pre-wrap;
word-break: break-word;
margin: 0;
}
.ia-mcpi-error-header {
color: var(--text-error);
font-weight: 600;
margin-bottom: 8px;
}