:root { --ollama-user-bg: var(--background-modifier-form-field); --ollama-assistant-bg: var(--background-primary-alt); --ollama-border: var(--background-modifier-border); --ollama-radius: var(--radius-m); --ollama-gap: var(--size-4-2); --ollama-log-debug: var(--text-muted); --ollama-log-info: var(--text-accent); --ollama-log-warn: var(--text-warning); --ollama-log-error: var(--text-error); --ollama-log-bg: var(--background-primary-alt); } /* Root chat view layout: flex column with input locked at bottom */ .ollama-chat-view-content { display: flex; flex-direction: column; height: 100%; overflow: hidden; } .ollama-new-chat-container { display: flex; flex-wrap: wrap; justify-content: flex-start; align-items: center; gap: var(--size-4-1); padding: var(--size-4-1) var(--size-4-2); flex-shrink: 0; } .ollama-chat-container { display: flex; flex-direction: column; gap: var(--ollama-gap); padding: var(--size-4-2); overflow-y: auto; flex: 1 1 auto; min-height: 0; user-select: text; -webkit-user-select: text; } .ollama-input-container { display: flex; gap: var(--size-4-1); padding: var(--size-4-2); border-top: 1px solid var(--ollama-border); background-color: var(--background-primary); align-items: flex-end; flex-shrink: 0; } .ollama-message { display: flex; flex-direction: column; gap: var(--size-4-1); padding: var(--size-4-2); border-radius: var(--ollama-radius); border: 1px solid var(--ollama-border); max-width: 90%; user-select: text; -webkit-user-select: text; } .ollama-message-user { align-self: flex-end; background-color: var(--ollama-user-bg); } .ollama-message-assistant { align-self: flex-start; background-color: var(--ollama-assistant-bg); } .ollama-message-header { display: flex; align-items: center; gap: var(--size-4-1); font-size: var(--font-smallest); font-weight: var(--font-semibold); text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-muted); } .ollama-message-role::before { display: inline-block; width: 1em; height: 1em; margin-right: var(--size-4-1); vertical-align: middle; } .ollama-message-user .ollama-message-role::before { content: '👤'; } .ollama-message-assistant .ollama-message-role::before { content: '🤖'; } .ollama-message-content { line-height: var(--line-height-normal); white-space: pre-wrap; word-break: break-word; user-select: text; -webkit-user-select: text; } .ollama-new-chat-container { display: flex; justify-content: flex-end; padding: var(--size-4-1) var(--size-4-2); } .ollama-new-chat-button { display: inline-flex; align-items: center; gap: var(--size-4-1); padding: var(--size-4-1) var(--size-4-2); font-size: var(--font-smallest); border-radius: var(--ollama-radius); border: 1px solid var(--ollama-border); background-color: var(--background-modifier-form-field); color: var(--text-normal); cursor: pointer; transition: background-color 0.15s ease; } .ollama-new-chat-button:hover { background-color: var(--background-modifier-hover); } .ollama-new-chat-button::before { content: '➕'; } .ollama-input { flex: 1; min-height: 4rem; max-height: 12rem; padding: var(--size-4-1) var(--size-4-2); border-radius: var(--ollama-radius); border: 1px solid var(--ollama-border); background-color: var(--background-modifier-form-field); color: var(--text-normal); resize: vertical; font-family: inherit; font-size: var(--font-ui-small); line-height: var(--line-height-normal); } .ollama-input:focus { outline: none; border-color: var(--interactive-accent); box-shadow: 0 0 0 2px var(--interactive-accent-translucent); } .ollama-send-button { display: inline-flex; align-items: center; justify-content: center; padding: var(--size-4-1) var(--size-4-3); border-radius: var(--ollama-radius); border: none; background-color: var(--interactive-accent); color: var(--text-on-accent); font-weight: var(--font-semibold); font-size: var(--font-ui-small); cursor: pointer; transition: filter 0.15s ease; white-space: nowrap; } .ollama-send-button:hover { filter: brightness(1.1); } .ollama-send-button:active { filter: brightness(0.95); } /* Stop button */ .ollama-stop-button { display: none; align-items: center; justify-content: center; padding: var(--size-4-1) var(--size-4-3); border-radius: var(--ollama-radius); border: none; background-color: var(--text-error); color: var(--text-on-accent); font-weight: var(--font-semibold); font-size: var(--font-ui-small); cursor: pointer; transition: filter 0.15s ease; white-space: nowrap; } .ollama-stop-button:hover { filter: brightness(1.1); } .ollama-stop-button:active { filter: brightness(0.95); } /* Thinking indicator */ .ollama-thinking-indicator { display: inline-flex; align-items: center; gap: var(--size-4-1); font-style: italic; color: var(--text-muted); } .ollama-thinking-indicator::before { content: ''; display: inline-block; width: 0.9em; height: 0.9em; border: 2px solid var(--text-muted); border-top-color: transparent; border-radius: 50%; animation: ollama-spin 1s linear infinite; } @keyframes ollama-spin { to { transform: rotate(360deg); } } /* Proposed Actions Preview */ .ollama-proposed-actions { margin-top: var(--size-4-2); padding: var(--size-4-2); border: 1px solid var(--ollama-border); border-radius: var(--ollama-radius); background-color: var(--background-primary); } .ollama-proposed-actions-header { font-weight: var(--font-semibold); font-size: var(--font-ui-small); margin-bottom: var(--size-4-2); color: var(--text-normal); } .ollama-proposed-action { margin-bottom: var(--size-4-2); padding: var(--size-4-1); border: 1px solid var(--ollama-border); border-radius: var(--ollama-radius); background-color: var(--background-primary-alt); } .ollama-action-description { font-weight: var(--font-medium); font-size: var(--font-ui-small); margin-bottom: var(--size-4-1); color: var(--text-normal); } .ollama-action-diff { display: flex; flex-direction: column; gap: var(--size-4-1); } .ollama-diff-before, .ollama-diff-after { margin: 0; padding: var(--size-4-1); border-radius: var(--ollama-radius); font-size: var(--font-smallest); font-family: var(--font-monospace); white-space: pre-wrap; word-break: break-word; max-height: 8rem; overflow-y: auto; } .ollama-diff-before { background-color: var(--background-modifier-error); color: var(--text-normal); } .ollama-diff-after { background-color: var(--background-modifier-success); color: var(--text-normal); } .ollama-action-buttons { display: flex; gap: var(--size-4-1); margin-top: var(--size-4-2); } .ollama-apply-button { padding: var(--size-4-1) var(--size-4-2); border-radius: var(--ollama-radius); border: none; background-color: var(--interactive-accent); color: var(--text-on-accent); font-weight: var(--font-semibold); font-size: var(--font-ui-small); cursor: pointer; transition: filter 0.15s ease; } .ollama-apply-button:hover { filter: brightness(1.1); } .ollama-cancel-button { padding: var(--size-4-1) var(--size-4-2); border-radius: var(--ollama-radius); border: 1px solid var(--ollama-border); background-color: var(--background-modifier-form-field); color: var(--text-normal); font-weight: var(--font-semibold); font-size: var(--font-ui-small); cursor: pointer; transition: background-color 0.15s ease; } .ollama-cancel-button:hover { background-color: var(--background-modifier-hover); } /* Agent Mode Selector */ .ollama-mode-selector { padding: var(--size-4-1) var(--size-4-2); border-radius: var(--ollama-radius); border: 1px solid var(--ollama-border); background-color: var(--background-modifier-form-field); color: var(--text-normal); font-size: var(--font-ui-small); cursor: pointer; } .ollama-mode-selector:focus { outline: none; border-color: var(--interactive-accent); } /* Model Selector */ .ollama-model-selector { padding: var(--size-4-1) var(--size-4-2); border-radius: var(--ollama-radius); border: 1px solid var(--ollama-border); background-color: var(--background-modifier-form-field); color: var(--text-normal); font-size: var(--font-ui-small); cursor: pointer; max-width: 10rem; overflow: hidden; text-overflow: ellipsis; } .ollama-model-selector:focus { outline: none; border-color: var(--interactive-accent); } /* Chat History Selector */ .ollama-history-selector { padding: var(--size-4-1) var(--size-4-2); border-radius: var(--ollama-radius); border: 1px solid var(--ollama-border); background-color: var(--background-modifier-form-field); color: var(--text-normal); font-size: var(--font-ui-small); cursor: pointer; max-width: 12rem; overflow: hidden; text-overflow: ellipsis; } .ollama-history-selector:focus { outline: none; border-color: var(--interactive-accent); } .ollama-history-delete-button { display: inline-flex; align-items: center; gap: var(--size-4-1); padding: var(--size-4-1) var(--size-4-2); font-size: var(--font-smallest); border-radius: var(--ollama-radius); border: 1px solid var(--ollama-border); background-color: var(--background-modifier-form-field); color: var(--text-normal); cursor: pointer; transition: background-color 0.15s ease; } .ollama-history-delete-button:hover { background-color: var(--background-modifier-error-hover); color: var(--text-error); } /* Show Logs Button */ .ollama-show-logs-button { display: inline-flex; align-items: center; gap: var(--size-4-1); padding: var(--size-4-1) var(--size-4-2); font-size: var(--font-smallest); border-radius: var(--ollama-radius); border: 1px solid var(--ollama-border); background-color: var(--background-modifier-form-field); color: var(--text-normal); cursor: pointer; transition: background-color 0.15s ease; } .ollama-show-logs-button:hover { background-color: var(--background-modifier-hover); } /* Logs Panel */ .ollama-logs-container { display: flex; flex-direction: column; gap: 2px; padding: var(--size-4-1) var(--size-4-2); max-height: 12rem; overflow-y: auto; background-color: var(--ollama-log-bg); border-top: 1px solid var(--ollama-border); border-bottom: 1px solid var(--ollama-border); font-family: var(--font-monospace); font-size: var(--font-smallest); } .ollama-log-row { display: flex; gap: var(--size-4-1); align-items: baseline; line-height: var(--line-height-tight); } .ollama-log-time { color: var(--text-faint); flex-shrink: 0; } .ollama-log-level { flex-shrink: 0; font-weight: var(--font-semibold); text-transform: uppercase; min-width: 3em; } .ollama-log-level-debug { color: var(--ollama-log-debug); } .ollama-log-level-info { color: var(--ollama-log-info); } .ollama-log-level-warn { color: var(--ollama-log-warn); } .ollama-log-level-error { color: var(--ollama-log-error); } .ollama-log-category { color: var(--text-muted); flex-shrink: 0; } .ollama-log-message { color: var(--text-normal); word-break: break-word; } /* Activity Indicator */ .ollama-activity-indicator { display: none; align-items: center; gap: var(--size-4-1); padding: var(--size-4-1) var(--size-4-1); font-size: var(--font-ui-small); color: var(--text-muted); white-space: nowrap; } .ollama-activity-dot { display: inline-block; width: 0.6rem; height: 0.6rem; border-radius: 50%; background-color: var(--interactive-accent); animation: ollama-pulse 1.2s ease-in-out infinite; flex-shrink: 0; } .ollama-activity-text { font-style: italic; } @keyframes ollama-pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.4; transform: scale(0.8); } } /* Disabled input/send during activity */ .ollama-input:disabled, .ollama-send-button:disabled { opacity: 0.6; cursor: not-allowed; }