.ai-pulse-chat-container { display: flex; flex-direction: column; height: 100%; } .ai-pulse-messages-area { flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0; position: relative; } .ai-pulse-messages { flex: 1; overflow-y: auto; padding: 8px; padding-top: 56px; display: flex; flex-direction: column; gap: 6px; } .ai-pulse-message { padding: 8px 12px; border-radius: 8px; max-width: 85%; word-wrap: break-word; white-space: pre-wrap; user-select: text; -webkit-user-select: text; } .ai-pulse-message.user { align-self: flex-end; background-color: var(--interactive-accent); color: var(--text-on-accent); } .ai-pulse-message.user ::selection { background-color: rgba(255, 255, 255, 0.35); color: inherit; } .ai-pulse-message.user::selection { background-color: rgba(255, 255, 255, 0.35); color: inherit; } .ai-pulse-message.assistant { align-self: flex-start; background-color: var(--background-primary); border: 1px solid var(--background-modifier-border); } .ai-pulse-streaming { opacity: 0.85; } .ai-pulse-loading-icon { display: flex; align-items: center; color: var(--text-muted); } .ai-pulse-loading-icon svg { width: 20px; height: 20px; } .ai-pulse-message.error { color: var(--text-error); } /* ===== Input Row ===== */ .ai-pulse-input-row { display: flex; flex-direction: row; gap: 6px; padding: 8px; } .ai-pulse-input-row textarea { flex: 1; resize: vertical; background-color: var(--background-primary); border: 1px solid var(--background-modifier-border); color: var(--text-normal); border-radius: 4px; padding: 6px 8px; font-family: inherit; font-size: inherit; } .ai-pulse-input-row textarea:focus { border-color: var(--interactive-accent); outline: none; } /* ===== FAB / Speed Dial ===== */ .ai-pulse-fab { position: absolute; top: 8px; right: 12px; z-index: 10; display: flex; flex-direction: column; align-items: flex-end; gap: 8px; pointer-events: none; } .ai-pulse-fab > * { pointer-events: auto; } /* Main FAB trigger */ .ai-pulse-fab-trigger { width: 40px; height: 40px; border-radius: 50%; border: none; background-color: var(--interactive-accent); color: var(--text-on-accent); cursor: pointer; display: flex; align-items: center; justify-content: center; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.2s; } .ai-pulse-fab-trigger:hover { background-color: var(--interactive-accent-hover); } .ai-pulse-fab-trigger svg { width: 18px; height: 18px; } /* Rotate trigger when FAB is open */ .ai-pulse-fab:focus-within > .ai-pulse-fab-trigger { transform: rotate(90deg); } /* FAB action items (hidden by default) */ .ai-pulse-fab-action { display: flex; align-items: center; gap: 8px; visibility: hidden; opacity: 0; transform: scale(0.8); transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), visibility 0.2s cubic-bezier(0.4, 0, 0.2, 1), transform 0.2s cubic-bezier(0.4, 0, 0.2, 1); } /* Staggered delays */ .ai-pulse-fab-action:nth-child(2) { transition-delay: 30ms; } .ai-pulse-fab-action:nth-child(3) { transition-delay: 60ms; } .ai-pulse-fab-action:nth-child(4) { transition-delay: 90ms; } /* Reveal actions on focus-within */ .ai-pulse-fab:focus-within > .ai-pulse-fab-action { visibility: visible; opacity: 1; transform: scale(1); } /* FAB action label */ .ai-pulse-fab-label { padding: 3px 8px; border-radius: 4px; background-color: var(--background-secondary); color: var(--text-normal); font-size: 0.8em; white-space: nowrap; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15); } /* FAB action button (circle) */ .ai-pulse-fab-btn { width: 40px; height: 40px; border-radius: 50%; border: 1px solid var(--background-modifier-border); background-color: var(--background-secondary); color: var(--text-muted); cursor: pointer; display: flex; align-items: center; justify-content: center; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12); transition: background-color 0.2s, color 0.2s, border-color 0.2s; } .ai-pulse-fab-btn:hover { color: var(--text-normal); background-color: var(--background-modifier-hover); } .ai-pulse-fab-btn svg { width: 18px; height: 18px; } /* ===== Tool Call Bubbles ===== */ .ai-pulse-tool-call { align-self: flex-start; max-width: 85%; padding: 6px 10px; border-radius: 6px; background-color: var(--background-secondary-alt); border-left: 3px solid var(--interactive-accent); font-size: 0.85em; margin: 2px 0; user-select: text; -webkit-user-select: text; } .ai-pulse-tool-call-header { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; color: var(--text-muted); } .ai-pulse-tool-call-icon { display: flex; align-items: center; } .ai-pulse-tool-call-icon svg { width: 14px; height: 14px; } .ai-pulse-tool-call-name { font-weight: 600; } .ai-pulse-tool-call-summary { margin: 4px 0 2px 0; color: var(--text-normal); font-style: italic; } .ai-pulse-tool-call-result-summary { margin: 0 0 0 0; color: var(--text-muted); font-size: 0.9em; } /* Tool call error state */ .ai-pulse-tool-call.ai-pulse-tool-call-error { border-left-color: var(--text-error); } .ai-pulse-tool-call.ai-pulse-tool-call-error .ai-pulse-tool-call-header { color: var(--text-error); } .ai-pulse-tool-call.ai-pulse-tool-call-error .ai-pulse-tool-call-result-summary { color: var(--text-error); } /* ===== DaisyUI-inspired Collapse ===== */ .ai-pulse-collapse { display: grid; position: relative; overflow: hidden; border-radius: 6px; width: 100%; grid-template-rows: max-content 0fr; grid-template-columns: minmax(0, 1fr); transition: grid-template-rows 0.2s ease-out; margin-top: 2px; } .ai-pulse-collapse-toggle { position: absolute; opacity: 0; width: 0; height: 0; pointer-events: none; } .ai-pulse-collapse-title { grid-column-start: 1; grid-row-start: 1; position: relative; width: 100%; padding: 2px 28px 2px 0; cursor: pointer; color: var(--text-muted); font-size: 0.9em; user-select: none; transition: color 0.15s; } .ai-pulse-collapse-title:hover { color: var(--text-normal); } /* Collapse arrow indicator */ .ai-pulse-collapse-arrow > .ai-pulse-collapse-title::after { content: ""; position: absolute; top: 50%; right: 8px; width: 0.45em; height: 0.45em; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: translateY(-75%) rotate(45deg); transform-origin: 75% 75%; transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1); pointer-events: none; } /* Arrow rotates when open */ .ai-pulse-collapse-toggle:checked ~ .ai-pulse-collapse-title::after { transform: translateY(-25%) rotate(225deg); } /* Expand grid when checked */ .ai-pulse-collapse:has(.ai-pulse-collapse-toggle:checked) { grid-template-rows: max-content 1fr; } .ai-pulse-collapse-content { grid-column-start: 1; grid-row-start: 2; min-height: 0; overflow: hidden; transition: min-height 0.2s ease-out; } .ai-pulse-collapse-toggle:checked ~ .ai-pulse-collapse-content { min-height: fit-content; } .ai-pulse-collapse-content-inner { padding: 2px 0 4px 0; } .ai-pulse-tool-call-args, .ai-pulse-tool-call-result { margin: 2px 0; padding: 4px 6px; border-radius: 4px; background-color: var(--background-primary); white-space: pre-wrap; word-wrap: break-word; font-size: 0.9em; max-height: 150px; overflow-y: auto; } .ai-pulse-tool-call-result { color: var(--text-muted); } .ai-pulse-tool-call-label { font-weight: 600; color: var(--text-muted); font-size: 0.85em; margin: 6px 0 2px 0; } .ai-pulse-tool-call-label:first-child { margin-top: 0; } /* ===== Markdown in Assistant Bubbles ===== */ .ai-pulse-message.assistant.ai-pulse-markdown { white-space: normal; } .ai-pulse-message.assistant.ai-pulse-markdown p { margin: 0 0 0.4em 0; } .ai-pulse-message.assistant.ai-pulse-markdown p:last-child { margin-bottom: 0; } .ai-pulse-message.assistant.ai-pulse-markdown h1, .ai-pulse-message.assistant.ai-pulse-markdown h2, .ai-pulse-message.assistant.ai-pulse-markdown h3, .ai-pulse-message.assistant.ai-pulse-markdown h4, .ai-pulse-message.assistant.ai-pulse-markdown h5, .ai-pulse-message.assistant.ai-pulse-markdown h6 { margin: 0.4em 0 0.2em 0; font-size: 1em; line-height: 1.3; } .ai-pulse-message.assistant.ai-pulse-markdown h1 { font-size: 1.15em; } .ai-pulse-message.assistant.ai-pulse-markdown h2 { font-size: 1.1em; } .ai-pulse-message.assistant.ai-pulse-markdown h3 { font-size: 1.05em; } .ai-pulse-message.assistant.ai-pulse-markdown ul, .ai-pulse-message.assistant.ai-pulse-markdown ol { margin: 0.2em 0; padding-left: 1.4em; } .ai-pulse-message.assistant.ai-pulse-markdown li { margin: 0.1em 0; } .ai-pulse-message.assistant.ai-pulse-markdown pre { margin: 0.3em 0; padding: 6px 8px; border-radius: 4px; background-color: var(--background-secondary); overflow-x: auto; font-size: 0.9em; white-space: pre-wrap; word-wrap: break-word; } .ai-pulse-message.assistant.ai-pulse-markdown code { padding: 1px 4px; border-radius: 3px; background-color: var(--background-secondary); font-size: 0.9em; } .ai-pulse-message.assistant.ai-pulse-markdown pre code { padding: 0; background-color: transparent; font-size: inherit; } .ai-pulse-message.assistant.ai-pulse-markdown blockquote { margin: 0.3em 0; padding: 2px 8px; border-left: 3px solid var(--interactive-accent); color: var(--text-muted); } .ai-pulse-message.assistant.ai-pulse-markdown table { border-collapse: collapse; margin: 0.3em 0; font-size: 0.9em; width: 100%; } .ai-pulse-message.assistant.ai-pulse-markdown th, .ai-pulse-message.assistant.ai-pulse-markdown td { padding: 3px 6px; border: 1px solid var(--background-modifier-border); } .ai-pulse-message.assistant.ai-pulse-markdown th { background-color: var(--background-secondary); font-weight: 600; } .ai-pulse-message.assistant.ai-pulse-markdown hr { margin: 0.4em 0; border: none; border-top: 1px solid var(--background-modifier-border); } .ai-pulse-message.assistant.ai-pulse-markdown img { max-width: 100%; border-radius: 4px; } /* ===== Misc ===== */ .ai-pulse-tool-modal-desc { color: var(--text-muted); font-size: 0.9em; margin-bottom: 8px; } .ai-pulse-stop-btn { background-color: var(--text-error) !important; color: var(--text-on-accent) !important; border-color: var(--text-error) !important; } .ai-pulse-param-value { font-weight: 600; color: var(--text-normal); } .ai-pulse-ctx-max { font-size: 0.8em; color: var(--text-muted); margin-top: 4px; text-align: right; } .ai-pulse-ctx-max-warn { color: var(--text-error); } /* ===== Tool Approval Prompt ===== */ .ai-pulse-approval { align-self: flex-start; max-width: 85%; padding: 8px 12px; border-radius: 6px; background-color: var(--background-secondary-alt); border-left: 3px solid var(--text-warning); margin: 2px 0; } .ai-pulse-approval-header { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; color: var(--text-warning); } .ai-pulse-approval-icon { display: flex; align-items: center; } .ai-pulse-approval-icon svg { width: 16px; height: 16px; } .ai-pulse-approval-name { font-weight: 600; font-size: 0.9em; } .ai-pulse-approval-message { margin: 4px 0 8px 0; color: var(--text-normal); font-size: 0.9em; white-space: pre-wrap; } .ai-pulse-approval-buttons { display: flex; gap: 8px; } .ai-pulse-approval-approve, .ai-pulse-approval-decline { padding: 4px 16px; border-radius: 4px; border: none; cursor: pointer; font-size: 0.85em; font-weight: 500; transition: opacity 0.15s; } .ai-pulse-approval-approve { background-color: var(--interactive-accent); color: var(--text-on-accent); } .ai-pulse-approval-approve:hover { opacity: 0.85; } .ai-pulse-approval-decline { background-color: var(--background-modifier-border); color: var(--text-normal); } .ai-pulse-approval-decline:hover { opacity: 0.85; } .ai-pulse-approval-approve:disabled, .ai-pulse-approval-decline:disabled { opacity: 0.5; cursor: default; } .ai-pulse-approval-status { margin-top: 6px; font-size: 0.8em; font-weight: 600; } .ai-pulse-approval-approved .ai-pulse-approval-status { color: var(--interactive-accent); } .ai-pulse-approval-declined .ai-pulse-approval-status { color: var(--text-error); } .ai-pulse-approval-approved { border-left-color: var(--interactive-accent); } .ai-pulse-approval-declined { border-left-color: var(--text-error); } /* ===== Disabled Setting ===== */ .ai-pulse-setting-disabled { opacity: 0.5; pointer-events: none; } /* ===== Model Badge ===== */ .ai-pulse-model-badge { position: absolute; top: 8px; left: 12px; z-index: 10; height: 40px; padding: 0 14px; border-radius: 20px; background-color: var(--background-primary); color: var(--text-normal); border: 1px solid var(--background-modifier-border); font-size: 0.8em; font-weight: 500; display: flex; align-items: center; justify-content: center; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12); max-width: calc(100% - 80px); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; user-select: none; } .ai-pulse-model-badge-empty { color: var(--text-muted); font-style: italic; } /* ===== Batch Tool Approval Details ===== */ .ai-pulse-batch-list { margin: 4px 0; padding-left: 1.4em; list-style-type: disc; font-size: 0.9em; color: var(--text-normal); } .ai-pulse-batch-list li { margin: 2px 0; word-break: break-all; } .ai-pulse-batch-path { font-family: var(--font-monospace); font-size: 0.9em; } .ai-pulse-batch-file-header { margin-top: 8px !important; padding-bottom: 2px; border-bottom: 1px solid var(--background-modifier-border); font-size: 0.9em !important; color: var(--text-normal) !important; font-family: var(--font-monospace); } .ai-pulse-batch-file-header:first-child { margin-top: 0 !important; }