agent-ui / frontend /style.css
lvwerra's picture
lvwerra HF Staff
Fix welcome notice spacing and style Important in theme color
72028e1
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
/* Accent colors (set per theme) */
--theme-border: #1b5e20;
--theme-bg: #e8f5e9;
--theme-hover-bg: #c8e6c9;
--theme-accent: #1b5e20;
--theme-accent-rgb: 27, 94, 32;
/* UI surface colors */
--bg-primary: #ffffff;
--bg-secondary: #f5f5f5;
--bg-tertiary: #fafafa;
--bg-input: #ffffff;
--bg-hover: #f0f0f0;
--bg-card: #ffffff;
/* Text colors */
--text-primary: #1a1a1a;
--text-secondary: #666666;
--text-muted: #999999;
/* Border colors */
--border-primary: #e0e0e0;
--border-subtle: #f0f0f0;
}
body {
font-family: 'JetBrains Mono', monospace;
background-color: var(--bg-primary);
color: var(--text-primary);
height: 100vh;
overflow: hidden;
}
.app-container {
display: flex;
flex-direction: column;
height: 100vh;
}
/* Tab Bar */
.tab-bar {
display: flex;
align-items: stretch;
background: var(--bg-primary);
padding: 0;
gap: 0;
overflow: hidden;
border-bottom: 1px solid var(--border-primary);
height: 25px;
position: relative;
z-index: 10;
}
.tab-bar-spacer {
flex: 1;
}
#dynamicTabs {
display: flex;
align-items: stretch;
min-width: 0;
flex: 0 1 auto;
overflow: hidden;
}
.tab {
display: flex;
align-items: center;
gap: 4px;
padding: 0 8px;
background: var(--bg-primary);
color: var(--text-muted);
cursor: pointer;
border: none;
white-space: nowrap;
transition: all 0.15s;
border-right: 1px solid var(--border-subtle);
font-size: 10px;
font-weight: 400;
letter-spacing: 0.5px;
position: relative;
flex-shrink: 1;
min-width: 36px;
overflow: hidden;
}
.tab:hover {
color: var(--text-primary);
}
.tab.active {
color: var(--theme-accent);
font-weight: 500;
}
.tab.active::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1.5px;
background: var(--theme-accent);
}
.tab-bar > .tab {
flex-shrink: 0;
}
.tab-title {
font-size: 10px;
font-weight: inherit;
overflow: hidden;
text-overflow: ellipsis;
}
.tab-close {
margin-left: 6px;
font-size: 11px;
opacity: 0;
transition: opacity 0.15s;
line-height: 1;
}
.tab:hover .tab-close {
opacity: 0.4;
}
.tab-close:hover {
opacity: 1 !important;
}
.tab-status {
width: 8px;
height: 8px;
position: relative;
margin-left: 2px;
}
.tab-status.generating {
animation: orbit-rotate 1.2s linear infinite;
}
.tab-status span {
position: absolute;
width: 2px;
height: 2px;
border-radius: 50%;
background: var(--theme-accent);
top: 50%;
left: 50%;
}
.tab-status span:nth-child(1) {
transform: translate(-50%, -50%) translateY(-3px);
}
.tab-status span:nth-child(2) {
transform: translate(-50%, -50%) rotate(120deg) translateY(-3px);
}
.tab-status span:nth-child(3) {
transform: translate(-50%, -50%) rotate(240deg) translateY(-3px);
}
@keyframes orbit-rotate {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.settings-btn,
.files-btn,
.debug-btn,
.sessions-btn {
background: transparent;
color: var(--text-muted);
border: none;
border-left: 1px solid var(--border-subtle);
padding: 0 8px;
font-size: 10px;
font-weight: 400;
letter-spacing: 0.3px;
flex-shrink: 0;
cursor: pointer;
transition: all 0.15s;
font-family: inherit;
}
.settings-btn:hover,
.files-btn:hover,
.debug-btn:hover,
.sessions-btn:hover {
color: var(--text-primary);
}
.settings-btn.active,
.files-btn.active,
.debug-btn.active,
.sessions-btn.active {
color: var(--theme-accent);
font-weight: 500;
}
.new-tab-wrapper {
position: static;
display: flex;
align-items: center;
flex-shrink: 0;
border-right: 1px solid var(--border-subtle);
}
.new-tab-btn {
background: transparent;
color: var(--text-muted);
border: none;
padding: 0 8px;
font-size: 13px;
cursor: pointer;
transition: all 0.15s;
font-family: inherit;
line-height: 1;
}
.new-tab-btn:hover {
color: var(--text-primary);
}
.new-tab-menu {
display: none;
position: fixed;
background: var(--bg-card);
border: 1px solid var(--border-primary);
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
z-index: 9999;
min-width: 180px;
}
.new-tab-menu.active {
display: block;
}
.menu-item {
padding: 8px 12px;
font-size: 10px;
font-weight: 400;
letter-spacing: 0.3px;
cursor: pointer;
border-bottom: 1px solid var(--border-subtle);
transition: all 0.15s;
color: var(--text-primary);
background: var(--bg-card);
}
.menu-item:last-child {
border-bottom: none;
}
.menu-item:hover {
background: var(--theme-accent);
color: var(--bg-primary);
}
/* Content Area */
.content-area {
flex: 1;
overflow: hidden;
position: relative;
z-index: 1;
transition: margin-right 0.3s ease;
display: flex;
}
.panel-open .content-area {
margin-right: 480px;
}
.files-panel-open .content-area {
margin-right: 320px;
}
/* Left Sidebar - Agents Overview */
.agents-sidebar {
width: var(--sidebar-width, 180px);
min-width: 140px;
max-width: 400px;
background: var(--bg-primary);
border-right: 1px solid var(--border-primary);
display: flex;
flex-direction: column;
overflow: visible;
position: relative;
z-index: 10;
flex-shrink: 0;
}
.sidebar-resize-handle {
position: absolute;
top: 0;
right: -3px;
width: 6px;
height: 100%;
cursor: col-resize;
z-index: 11;
}
.sidebar-content {
flex: 1;
overflow-y: auto;
overflow-x: clip;
padding: 8px 12px;
}
.sidebar-empty {
padding: 12px;
font-size: 10px;
color: var(--text-muted);
text-align: center;
}
/* Sidebar Legend */
.sidebar-legend {
padding: 8px 12px;
border-top: 1px solid var(--border-primary);
display: flex;
flex-wrap: wrap;
gap: 4px 12px;
font-size: 9px;
color: var(--text-muted);
}
.sidebar-legend span {
display: flex;
align-items: center;
gap: 4px;
}
.legend-square {
width: 5px;
height: 5px;
background: var(--theme-accent);
}
.legend-circle {
width: 5px;
height: 5px;
background: var(--theme-accent);
border-radius: 50%;
}
.legend-box {
width: 12px;
height: 6px;
background: var(--bg-card);
border: 1px solid var(--theme-accent);
border-radius: 1px;
}
/* Sidebar Controls */
.sidebar-controls {
padding: 6px 12px;
border-top: 1px solid var(--border-primary);
display: flex;
align-items: center;
gap: 8px;
}
.sidebar-controls-label {
font-size: 9px;
color: var(--text-muted);
white-space: nowrap;
}
.sidebar-checkbox {
display: flex;
align-items: center;
gap: 4px;
font-size: 9px;
color: var(--text-muted);
cursor: pointer;
user-select: none;
}
.sidebar-checkbox input[type="checkbox"] {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
width: 12px;
height: 12px;
margin: 0;
border: 1px solid var(--text-muted);
background: transparent;
cursor: pointer;
position: relative;
flex-shrink: 0;
}
.sidebar-checkbox input[type="checkbox"]:checked {
background: var(--theme-accent);
border-color: var(--theme-accent);
}
.sidebar-checkbox input[type="checkbox"]:checked::after {
content: '';
position: absolute;
left: 3px;
top: 1px;
width: 3px;
height: 6px;
border: solid var(--bg-primary);
border-width: 0 1.5px 1.5px 0;
transform: rotate(45deg);
}
/* Timeline Widget */
.tl-widget {
font-size: 11px;
color: var(--text-secondary);
margin-bottom: 10px;
}
.tl-widget:last-child {
margin-bottom: 0;
}
.tl-widget.active .tl-name {
color: var(--theme-accent);
}
/* Active tab indicator arrow — right side of workspace-block and agent-box */
.tl-widget.active > .workspace-block::before {
content: '';
position: absolute;
right: -8px;
top: 50%;
transform: translateY(-50%);
width: 0;
height: 0;
border-top: 4px solid transparent;
border-bottom: 4px solid transparent;
border-right: 5px solid var(--theme-accent);
}
.tl-widget.closed {
opacity: 0.5;
}
.tl-widget.closed .tl-name::after {
content: ' (closed)';
font-weight: normal;
font-size: 8px;
}
/* Workspace block - left edge aligned with vertical line */
.workspace-block {
display: flex;
align-items: stretch;
margin-bottom: 8px;
margin-left: 4px; /* Align left edge with vertical line at 4px */
position: relative;
border: 1px solid var(--theme-accent);
}
/* Line connecting workspace block to timeline */
.tl-widget.compact > .workspace-block::after {
content: '';
position: absolute;
left: -1px; /* Align with vertical line */
top: calc(100% + 1px); /* Start below the border */
width: 1px;
height: 8px;
background: var(--border-primary);
}
.workspace-label {
padding: 3px 6px;
font-size: 8px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
white-space: nowrap;
background: var(--theme-accent);
color: var(--bg-primary);
flex-shrink: 0;
}
.workspace-name {
padding: 3px 8px;
font-size: 9px;
background: var(--bg-tertiary);
color: var(--text-primary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1;
min-width: 0;
}
.tl-widget.closed .workspace-block {
opacity: 0.5;
}
/* Timeline - vertical line from first to last dot */
.tl {
position: relative;
margin-left: 2px;
padding-left: 16px;
}
/* The vertical line - centered on dots */
.tl::before {
content: '';
position: absolute;
left: 2px;
top: var(--line-top, 0);
height: var(--line-height, 0);
width: 1px;
background: var(--border-primary);
}
/* Row */
.tl-row {
position: relative;
margin-bottom: 4px;
}
.tl-row:last-child {
margin-bottom: 0;
}
/* Dot - sits on the vertical line */
.tl-dot {
position: absolute;
left: -16px;
top: -2px;
width: 5px;
height: 5px;
border-radius: 50%;
background: var(--theme-accent);
cursor: pointer;
transition: transform 0.1s;
z-index: 2;
}
.tl-dot:hover {
transform: scale(1.3);
}
/* User messages are square */
.tl-row.user .tl-dot {
border-radius: 0;
}
/* Generating dot animation */
.tl-dot.generating {
animation: pulse 1s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.4; }
}
/* Inline label next to dot — always visible, single line truncated */
.tl-label {
position: absolute;
left: -6px;
right: 0;
top: -5px;
font-size: 8px;
color: var(--text-muted);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Tool tag widget — colored label + description */
.tl-tool {
position: absolute;
left: -6px;
right: 0;
top: -6px;
display: flex;
align-items: center;
gap: 4px;
}
.tl-tool-tag {
font-size: 6px;
font-weight: 600;
letter-spacing: 0.3px;
background: var(--theme-accent);
color: var(--bg-primary);
padding: 1px 4px;
border-radius: 0;
white-space: nowrap;
flex-shrink: 0;
}
.tl-tool-text {
font-size: 8px;
color: var(--text-muted);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
min-width: 0;
}
/* On hover: show popup with full text for tool entries */
.tl-row.turn:hover .tl-tool {
z-index: 10;
right: auto;
max-width: calc(var(--sidebar-width, 180px) - 40px);
background: var(--bg-secondary);
border: 1px solid var(--border-primary);
border-radius: 3px;
padding: 3px 6px;
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
}
.tl-row.turn:hover .tl-tool-text {
white-space: normal;
word-break: break-word;
overflow: visible;
color: var(--text-primary);
}
/* On hover: show popup with full text */
.tl-row.turn:hover .tl-label {
z-index: 10;
white-space: normal;
word-break: break-word;
overflow: visible;
right: auto;
max-width: calc(var(--sidebar-width, 180px) - 40px);
color: var(--text-primary);
background: var(--bg-secondary);
border: 1px solid var(--border-primary);
border-radius: 3px;
padding: 3px 6px;
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
}
/* Horizontal connector to agent */
.tl-row.has-agent .tl-dot::after {
content: '';
position: absolute;
left: 5px;
top: 2px;
width: 11px;
height: 1px;
background: var(--theme-accent);
}
/* Agent box - compact style */
.agent-box {
display: flex;
align-items: stretch;
border: 1px solid var(--theme-accent);
overflow: hidden;
position: relative;
z-index: 1;
}
/* Active tab indicator arrow on agent-box */
.agent-box.active {
overflow: visible;
}
.agent-box.active::after {
content: '';
position: absolute;
right: -8px;
top: 50%;
transform: translateY(-50%);
width: 0;
height: 0;
border-top: 4px solid transparent;
border-bottom: 4px solid transparent;
border-right: 5px solid var(--theme-accent);
}
.agent-header {
display: flex;
align-items: center;
gap: 3px;
padding: 2px 4px;
margin: -1px 0 -1px -1px;
font-size: 8px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
white-space: nowrap;
background: var(--theme-accent);
color: var(--bg-primary);
flex-shrink: 0;
}
/* Collapse toggle - inside agent header, white arrow */
.agent-header .collapse-toggle {
width: 8px;
height: 8px;
padding: 10px;
margin: -10px;
box-sizing: content-box;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
flex-shrink: 0;
position: relative;
z-index: 1;
}
.agent-header .collapse-toggle::before {
content: '';
width: 0;
height: 0;
border-left: 3px solid transparent;
border-right: 3px solid transparent;
border-top: 4px solid var(--bg-primary);
transition: transform 0.2s;
}
.agent-header .collapse-toggle.collapsed::before {
transform: rotate(-90deg);
}
.agent-body {
padding: 2px 6px;
font-size: 9px;
background: var(--bg-tertiary);
border: none;
display: flex;
align-items: center;
color: var(--text-primary);
flex: 1;
min-width: 0;
}
.agent-body-text {
flex: 1;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.agent-status {
display: flex;
align-items: center;
gap: 4px;
margin-left: auto;
padding-left: 6px;
color: var(--text-muted);
font-size: 8px;
flex-shrink: 0;
}
/* Progress spinner */
.agent-progress {
width: 8px;
height: 8px;
position: relative;
animation: orbit-rotate 1.2s linear infinite;
}
.agent-progress span {
position: absolute;
width: 1.5px;
height: 1.5px;
border-radius: 50%;
background: var(--theme-accent);
top: 50%;
left: 50%;
}
.agent-progress span:nth-child(1) { transform: translate(-50%, -50%) translateY(-3px); }
.agent-progress span:nth-child(2) { transform: translate(-50%, -50%) rotate(120deg) translateY(-3px); }
.agent-progress span:nth-child(3) { transform: translate(-50%, -50%) rotate(240deg) translateY(-3px); }
/* Done checkmark */
.agent-done {
width: 8px;
height: 8px;
display: flex;
align-items: center;
justify-content: center;
}
.agent-done::before {
content: '';
width: 2px;
height: 5px;
border: 1px solid var(--theme-accent);
border-top: none;
border-left: none;
transform: rotate(45deg) translate(-1px, -1px);
}
/* Aborted agent - cross instead of checkmark */
.agent-done.aborted::before {
content: '×';
width: auto;
height: auto;
border: none;
transform: none;
font-size: 10px;
line-height: 1;
color: var(--text-secondary);
}
/* Simple turn - natural height from label, min-height fallback */
.tl-row.turn {
min-height: 12px;
}
.tl-turn-count {
font-size: 8px;
color: var(--text-muted);
white-space: nowrap;
position: absolute;
left: -6px;
top: -5px;
}
/* Nested timeline for sub-agents */
.tl-nested {
position: relative;
margin-left: -2px;
margin-top: 0;
}
.tl-nested .tl {
margin-left: 0;
padding-top: 6px;
}
/* Return row - positioned dynamically by JS to align with last nested dot */
.tl-row.tl-return {
position: relative;
}
/* Horizontal connector - positioned from dot's right edge, width set by JS */
.tl-return-connector {
position: absolute;
left: -11px; /* dot is at -16px, width 5px, so right edge is -11px */
top: 0;
height: 1px;
background: var(--border-primary);
}
/* Collapsible sub-agents */
.tl-nested.collapsed .tl-row,
.tl-nested.collapsed .tl-widget {
display: none;
}
.tl-nested.collapsed {
padding-bottom: 6px;
}
.tl-nested.collapsed .tl {
--line-height: 0 !important;
--line-top: 0 !important;
padding-top: 0;
min-height: 0;
}
.tl-nested.collapsed .tl::before {
display: none;
}
/* Main Content Area (right of sidebar) */
.main-content {
flex: 1;
min-width: 0;
overflow: hidden;
position: relative;
z-index: 1;
}
.tab-content {
display: none;
height: 100%;
overflow-y: auto;
padding: 20px;
}
.tab-content.active {
display: flex;
flex-direction: column;
}
/* Launcher Buttons */
.launcher-btn {
background: var(--bg-card);
border: 1px solid var(--border-primary);
color: var(--text-primary);
padding: 6px 12px;
font-family: inherit;
font-size: 10px;
font-weight: 500;
border-radius: 4px;
cursor: pointer;
transition: all 0.2s;
letter-spacing: 0.5px;
white-space: nowrap;
}
.launcher-btn:hover {
background: var(--theme-accent);
color: var(--bg-primary);
border-color: var(--theme-accent);
}
.launcher-btn:active {
transform: translateY(1px);
}
/* Agent Content */
.agent-interface {
height: 100%;
display: flex;
flex-direction: column;
}
.agent-interface > .agent-header {
background: var(--bg-secondary);
padding: 15px 20px;
border-bottom: 1px solid var(--border-primary);
display: none; /* Hidden for cleaner UI */
justify-content: space-between;
align-items: center;
gap: 20px;
}
.header-actions {
display: flex;
gap: 10px;
align-items: center;
}
.agent-type {
font-size: 10px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 1px;
}
.agent-interface > .agent-header h2 {
font-size: 14px;
font-weight: 500;
letter-spacing: 1px;
color: var(--text-primary);
margin-top: 4px;
}
.agent-interface > .agent-body {
flex: 1;
display: block;
align-items: initial;
background: var(--bg-primary);
padding: 20px;
overflow-y: auto;
}
.chat-container {
max-width: 1000px;
width: 100%;
margin: 0 auto;
font-size: 12px;
}
.jupyter-notebook-container {
width: 100%;
margin: 0;
max-width: 100%;
font-size: 13px;
}
.welcome-message {
color: var(--text-muted);
font-size: 13px;
line-height: 1.6;
max-width: 700px;
margin: 0 auto;
padding: 20px 20px;
}
.welcome-message p {
margin-bottom: 10px;
}
.welcome-message ul {
list-style: none;
padding-left: 0;
margin: 12px 0;
}
.welcome-message li {
margin: 8px 0;
padding-left: 20px;
position: relative;
}
.welcome-message li::before {
content: "•";
position: absolute;
left: 0;
color: var(--theme-accent);
}
.welcome-message strong {
color: var(--text-secondary);
font-weight: 500;
}
.welcome-diagram {
margin: 20px auto;
max-width: 280px;
}
/* Disable hover popups and click behaviors on static welcome diagram */
.welcome-diagram .tl-dot { cursor: default; }
.welcome-diagram .tl-dot:hover { transform: none; }
.welcome-diagram .tl-row.turn:hover .tl-label,
.welcome-diagram .tl-row.turn:hover .tl-tool {
background: none; border: none; box-shadow: none; padding: 0; border-radius: 0; z-index: auto;
}
.welcome-diagram .tl-row.turn:hover .tl-tool-text { color: var(--text-muted); white-space: nowrap; overflow: hidden; }
.welcome-diagram .tl-row.turn:hover .tl-label { color: var(--text-muted); white-space: nowrap; overflow: hidden; }
.welcome-diagram .tl-row.user:hover .tl-label { color: var(--text-primary); }
.welcome-diagram .agent-box { cursor: default; }
.welcome-diagram .collapse-toggle { cursor: default; }
/* Messages */
.message {
margin-bottom: 20px;
line-height: 1.6;
}
.message.user {
padding: 6px 12px;
background: rgba(var(--theme-accent-rgb), 0.12);
border-left: 2px solid var(--theme-accent);
color: var(--text-primary);
}
.message.assistant {
padding: 0;
color: var(--text-primary);
}
.message.assistant > .action-widget {
margin-left: 15px;
}
/* Unified message content styling for both user and assistant messages */
.message-content {
line-height: 1.6;
}
.message.assistant .message-content {
padding-left: 15px;
}
.message-content ul,
.message-content ol {
margin: 8px 0;
padding-left: 24px;
list-style-position: outside;
}
.message-content li {
margin-bottom: 4px;
}
.message-content code {
background: var(--border-primary);
padding: 2px 6px;
border-radius: 3px;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
}
.message-content pre {
background: var(--bg-tertiary);
color: var(--text-primary);
padding: 12px;
border-radius: 4px;
overflow-x: auto;
margin: 8px 0;
border: 1px solid var(--border-primary);
}
.message-content pre code {
background: transparent;
padding: 0;
color: inherit;
font-size: 12px;
}
.message-content p {
margin: 0 0 8px 0;
}
.message-content p:last-child {
margin-bottom: 0;
}
.message-content h1,
.message-content h2,
.message-content h3,
.message-content h4,
.message-content h5,
.message-content h6 {
margin: 12px 0 8px 0;
font-weight: 600;
}
.message-content h1:first-child,
.message-content h2:first-child,
.message-content h3:first-child,
.message-content h4:first-child,
.message-content h5:first-child,
.message-content h6:first-child {
margin-top: 0;
}
.message-content h1 { font-size: 1.5em; }
.message-content h2 { font-size: 1.3em; }
.message-content h3 { font-size: 1.15em; }
.message-content h4 { font-size: 1.05em; }
.message-content h5 { font-size: 1em; }
.message-content h6 { font-size: 0.95em; color: var(--text-secondary); }
/* Blockquotes */
.message-content blockquote {
margin: 8px 0;
padding: 8px 16px;
border-left: 4px solid var(--theme-accent, #4a9eff);
background: var(--bg-secondary);
color: var(--text-secondary);
}
.message-content blockquote p {
margin: 0;
}
/* Strikethrough */
.message-content del {
text-decoration: line-through;
color: var(--text-muted);
}
/* Horizontal rule */
.message-content hr {
border: none;
border-top: 1px solid var(--border-primary);
margin: 16px 0;
}
.message-content img {
max-width: 400px;
max-height: 400px;
height: auto;
margin: 8px 0;
border-radius: 3px;
cursor: pointer;
transition: opacity 0.2s;
}
.message-content img:hover {
opacity: 0.85;
}
/* LaTeX / KaTeX */
.message-content .katex-display {
margin: 12px 0;
overflow: visible;
}
.message-content .katex-error {
color: #c62828;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
}
.system-message {
padding: 8px 12px;
margin: 8px 0;
font-size: 11px;
color: var(--text-secondary);
text-align: center;
border-radius: 4px;
background: var(--bg-tertiary);
}
.message-content ul,
.message-content ol {
margin: 8px 0;
padding-left: 24px;
list-style-position: outside;
}
.message-content li {
margin-bottom: 4px;
white-space: normal;
}
.message-content h1,
.message-content h2,
.message-content h3 {
margin: 12px 0 8px 0;
font-weight: 500;
white-space: normal;
}
.message-content h1 {
font-size: 16px;
}
.message-content h2 {
font-size: 15px;
}
.message-content h3 {
font-size: 14px;
}
.message-content p {
margin: 0;
white-space: pre-wrap;
}
.message-content p:not(:last-child) {
margin-bottom: 8px;
}
.message-content code {
background: var(--border-primary);
padding: 2px 6px;
border-radius: 3px;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
}
.message-content pre {
background: var(--bg-tertiary);
color: var(--text-primary);
padding: 12px;
border-radius: 4px;
overflow-x: auto;
margin: 8px 0;
border: 1px solid var(--border-primary);
}
.message-content pre code {
background: transparent;
padding: 0;
color: inherit;
font-size: 12px;
}
/* Override Prism.js defaults (white text-shadow and semi-transparent backgrounds) */
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none !important;
}
pre code [class*="token"] {
background: transparent !important;
text-shadow: none !important;
}
/* Code Cell Styling */
.code-cell {
margin: 16px 0;
overflow: hidden;
}
.code-cell-label {
font-size: 10px;
font-weight: 600;
color: var(--bg-primary);
text-transform: uppercase;
letter-spacing: 0.5px;
padding: 6px 12px;
background: var(--theme-accent);
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
}
.code-cell-label:hover {
opacity: 0.9;
}
.code-cell-code {
background: var(--bg-tertiary);
padding: 0;
margin: 0;
border: 1px solid var(--border-primary);
border-top: none;
}
.code-cell-code pre {
margin: 0;
padding: 12px;
background: transparent;
}
.code-cell-code code {
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
color: var(--text-primary);
background: transparent;
}
.code-cell-output {
padding: 12px;
background: var(--bg-tertiary);
border-top: 1px solid var(--border-primary);
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
white-space: pre-wrap;
word-wrap: break-word;
color: var(--text-primary);
}
.code-cell-output.error {
background: #ffebee;
color: #c62828;
}
.code-cell-image {
padding: 12px;
background: var(--bg-tertiary);
border-top: 1px solid var(--border-primary);
}
.code-cell-image img {
max-width: 400px;
max-height: 400px;
height: auto;
border-radius: 4px;
cursor: pointer;
transition: opacity 0.2s;
}
.code-cell-image img:hover {
opacity: 0.85;
}
.code-cell-image svg {
max-width: 100%;
height: auto;
}
.figure-label {
font-size: 10px;
font-weight: 500;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 8px;
padding: 4px 8px;
background: var(--border-primary);
border-radius: 3px;
}
/* Tool cell label with spinner */
.code-cell-label {
display: flex;
align-items: center;
gap: 8px;
}
.code-cell-label .tool-spinner {
width: 12px;
height: 12px;
position: relative;
animation: orbit-rotate 1.2s linear infinite;
}
.code-cell-label .tool-spinner span {
position: absolute;
width: 3px;
height: 3px;
border-radius: 50%;
background: var(--bg-card);
top: 50%;
left: 50%;
}
.code-cell-label .tool-spinner span:nth-child(1) {
transform: translate(-50%, -50%) translateY(-4.5px);
}
.code-cell-label .tool-spinner span:nth-child(2) {
transform: translate(-50%, -50%) rotate(120deg) translateY(-4.5px);
}
.code-cell-label .tool-spinner span:nth-child(3) {
transform: translate(-50%, -50%) rotate(240deg) translateY(-4.5px);
}
/* Progress widget - shown while waiting for model response */
.progress-widget {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 20px;
font-size: 12px;
color: var(--text-muted);
}
.progress-widget .progress-spinner {
width: 14px;
height: 14px;
position: relative;
animation: orbit-rotate 1.2s linear infinite;
}
.progress-widget .progress-spinner span {
position: absolute;
width: 3px;
height: 3px;
border-radius: 50%;
background: var(--theme-accent);
top: 50%;
left: 50%;
}
.progress-widget .progress-spinner span:nth-child(1) {
transform: translate(-50%, -50%) translateY(-5px);
}
.progress-widget .progress-spinner span:nth-child(2) {
transform: translate(-50%, -50%) rotate(120deg) translateY(-5px);
}
.progress-widget .progress-spinner span:nth-child(3) {
transform: translate(-50%, -50%) rotate(240deg) translateY(-5px);
}
.progress-widget .progress-text {
font-family: 'JetBrains Mono', monospace;
letter-spacing: 0.5px;
}
.input-area {
padding: 10px 20px;
background: var(--bg-primary);
border-top: 1px solid var(--border-primary);
}
.input-container {
max-width: 900px;
margin: 0 auto;
display: flex;
gap: 12px;
align-items: flex-end;
}
.input-container textarea {
flex: 1;
padding: 10px 12px;
border: 1px solid var(--border-primary);
min-height: 38px;
max-height: 200px;
resize: none;
overflow-y: hidden;
border-radius: 4px;
font-family: inherit;
font-size: 13px;
background: var(--bg-secondary);
color: var(--text-primary);
outline: none;
transition: border-color 0.2s ease;
}
.input-container textarea:focus {
border-color: var(--theme-accent);
box-shadow: 0 0 0 1px var(--theme-accent);
}
.input-container textarea::placeholder {
color: var(--text-muted);
}
.input-container button {
padding: 10px 20px;
background: var(--bg-secondary);
border: 1px solid var(--border-primary);
color: var(--text-primary);
font-family: inherit;
font-size: 12px;
font-weight: 500;
border-radius: 4px;
cursor: pointer;
transition: all 0.2s;
letter-spacing: 0.5px;
}
.input-container button:hover {
background: var(--theme-accent);
color: var(--bg-primary);
border-color: var(--theme-accent);
}
.input-container button:active {
transform: translateY(1px);
}
/* Scrollbar styling — global */
*::-webkit-scrollbar {
width: 6px;
height: 6px;
}
*::-webkit-scrollbar-track {
background: var(--bg-secondary);
border-left: 1px solid var(--border-primary);
}
*::-webkit-scrollbar-thumb {
background: var(--text-muted);
border-radius: 0;
}
*::-webkit-scrollbar-thumb:hover {
background: var(--text-secondary);
}
/* Settings Interface */
.settings-interface {
height: 100%;
display: flex;
flex-direction: column;
background: var(--bg-card);
}
.settings-header {
background: var(--bg-secondary);
padding: 20px;
border-bottom: 1px solid var(--border-primary);
}
.settings-header h2 {
font-size: 18px;
font-weight: 500;
letter-spacing: 2px;
color: var(--text-primary);
}
.settings-body {
flex: 1;
padding: 16px;
overflow-y: auto;
max-width: 800px;
}
/* Collapsible settings groups */
.settings-group {
margin-bottom: 6px;
}
.settings-group-header {
display: flex;
align-items: center;
gap: 8px;
padding: 6px 12px;
background: var(--theme-accent);
cursor: pointer;
user-select: none;
}
.settings-group-header:hover {
opacity: 0.9;
}
.settings-group-title {
font-size: 10px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--bg-primary);
}
.settings-group-body {
padding: 12px 12px 4px;
border: 1px solid var(--border-primary);
border-top: none;
}
.settings-group.collapsed .settings-group-body {
display: none;
}
.settings-section {
margin-bottom: 16px;
}
.settings-label {
display: flex;
flex-direction: column;
gap: 2px;
margin-bottom: 6px;
}
.label-text {
font-size: 10px;
font-weight: 500;
color: var(--text-primary);
letter-spacing: 0.5px;
}
.label-description {
font-size: 9px;
color: var(--text-secondary);
font-weight: 300;
}
.settings-input {
width: 100%;
padding: 6px 8px;
border: 1px solid var(--border-primary);
border-radius: 0;
font-family: inherit;
font-size: 11px;
background: var(--bg-secondary);
color: var(--text-primary);
outline: none;
transition: border-color 0.15s ease;
-moz-appearance: textfield;
}
.settings-input::-webkit-outer-spin-button,
.settings-input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
.settings-input:focus {
border-color: var(--theme-accent);
background: var(--bg-card);
}
.settings-input::placeholder {
color: var(--text-muted);
}
.settings-textarea {
width: 100%;
padding: 6px 8px;
border: 1px solid var(--border-primary);
border-radius: 3px;
font-family: 'JetBrains Mono', monospace;
font-size: 10px;
background: var(--bg-tertiary);
color: var(--text-primary);
outline: none;
transition: border-color 0.15s ease;
resize: vertical;
min-height: 48px;
box-sizing: border-box;
}
.settings-textarea:focus {
border-color: var(--theme-accent);
background: var(--bg-card);
}
.settings-textarea::placeholder {
color: var(--text-muted);
}
/* Theme Color Picker */
.theme-color-picker {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(64px, 1fr));
gap: 6px;
margin-top: 6px;
}
.theme-option {
display: flex;
flex-direction: column;
align-items: center;
gap: 3px;
cursor: pointer;
padding: 4px;
border-radius: 3px;
border: 1.5px solid transparent;
transition: all 0.15s;
}
.theme-option:hover {
background: var(--bg-secondary);
}
.theme-option.selected {
border-color: var(--theme-accent);
background: var(--bg-secondary);
}
.theme-preview {
width: 36px;
height: 20px;
border-left: 3px solid;
border-radius: 2px;
box-shadow: 0 1px 2px rgba(0,0,0,0.1);
}
.theme-name {
font-size: 9px;
font-weight: 500;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.3px;
}
.theme-option.selected .theme-name {
color: var(--theme-accent);
}
.settings-actions {
display: flex;
gap: 8px;
margin-top: 16px;
}
.settings-save-btn,
.settings-cancel-btn {
padding: 6px 14px;
font-family: inherit;
font-size: 10px;
font-weight: 500;
border-radius: 3px;
cursor: pointer;
transition: all 0.15s;
letter-spacing: 0.3px;
border: 1px solid var(--border-primary);
}
.settings-save-btn {
background: var(--theme-accent);
color: var(--bg-primary);
border-color: var(--theme-accent);
}
.settings-save-btn:hover {
opacity: 0.85;
}
.settings-cancel-btn {
background: var(--bg-secondary);
color: var(--text-primary);
}
.settings-cancel-btn:hover {
background: var(--bg-hover);
}
.settings-status {
margin-top: 8px;
font-size: 10px;
padding: 6px 8px;
border-radius: 3px;
display: none;
}
.settings-status.success {
display: block;
background: var(--theme-bg);
color: var(--theme-accent);
border: 1px solid var(--theme-accent);
}
.settings-status.error {
display: block;
background: #ffebee;
color: #c62828;
border: 1px solid #c62828;
}
/* Task Widget (matches mock.html design) */
.action-widget {
margin: 12px 0;
overflow: hidden;
}
.action-widget-clickable {
cursor: pointer;
}
.action-widget-header {
display: flex;
align-items: center;
gap: 8px;
padding: 6px 12px;
background: var(--theme-accent);
transition: opacity 0.2s;
}
.action-widget-clickable:hover .action-widget-header {
opacity: 0.9;
}
.action-widget-type {
font-size: 10px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--bg-primary);
}
.action-widget-bar-right {
display: flex;
align-items: center;
gap: 12px;
margin-left: auto;
}
/* Orbiting Dots Indicator for action widget */
.action-widget .orbit-indicator {
width: 14px;
height: 14px;
position: relative;
animation: orbit-rotate 1.2s linear infinite;
}
.action-widget .orbit-indicator span {
position: absolute;
width: 3px;
height: 3px;
border-radius: 50%;
background: var(--bg-card);
top: 50%;
left: 50%;
}
.action-widget .orbit-indicator span:nth-child(1) {
transform: translate(-50%, -50%) translateY(-5px);
}
.action-widget .orbit-indicator span:nth-child(2) {
transform: translate(-50%, -50%) rotate(120deg) translateY(-5px);
}
.action-widget .orbit-indicator span:nth-child(3) {
transform: translate(-50%, -50%) rotate(240deg) translateY(-5px);
}
/* Done indicator - checkmark */
.action-widget .done-indicator {
width: 14px;
height: 14px;
position: relative;
display: flex;
align-items: center;
justify-content: center;
}
.action-widget .done-indicator::before {
content: '';
position: absolute;
width: 4px;
height: 7px;
border: 1.5px solid var(--bg-primary);
border-top: none;
border-left: none;
transform: rotate(45deg) translate(-1px, -1px);
}
/* Aborted action widget - cross instead of checkmark */
.action-widget .done-indicator.aborted::before {
content: '×';
width: auto;
height: auto;
border: none;
transform: none;
font-size: 12px;
line-height: 1;
color: var(--bg-primary);
}
/* Errored action widget - red background with exclamation */
.action-widget .done-indicator.errored {
background: #c62828;
}
.action-widget .done-indicator.errored::before {
content: '!';
width: auto;
height: auto;
border: none;
transform: none;
font-size: 11px;
font-weight: bold;
line-height: 1;
color: white;
}
.action-widget-body {
padding: 12px;
background: var(--bg-tertiary);
border: 1px solid var(--border-primary);
border-top: none;
}
.action-widget .section-label {
font-size: 9px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--text-muted);
margin-bottom: 4px;
}
.action-widget .section-content {
font-size: 12px;
line-height: 1.5;
color: var(--text-primary);
}
.action-widget .section-content ul,
.action-widget .section-content ol {
margin: 8px 0;
padding-left: 24px;
list-style-position: outside;
}
.action-widget .section-content li {
margin-bottom: 4px;
}
.action-widget .section-content img,
.action-widget img {
max-width: 400px !important;
max-height: 400px !important;
width: auto !important;
height: auto !important;
margin: 8px 0;
border-radius: 3px;
}
.action-widget-result {
padding: 12px;
font-size: 12px;
line-height: 1.6;
color: var(--text-primary);
background: var(--bg-card);
border-top: 1px solid var(--border-primary);
}
.action-widget-result ul,
.action-widget-result ol {
margin: 8px 0;
padding-left: 24px;
list-style-position: outside;
}
.action-widget-result li {
margin-bottom: 4px;
}
.action-widget-result h1,
.action-widget-result h2,
.action-widget-result h3 {
margin: 12px 0 8px 0;
font-weight: 500;
}
.action-widget-result h1 {
font-size: 14px;
}
.action-widget-result h2 {
font-size: 13px;
}
.action-widget-result h3 {
font-size: 12px;
}
.action-widget-result p {
margin-bottom: 8px;
}
.action-widget-result-header {
font-size: 11px;
font-weight: 600;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 8px;
padding-bottom: 6px;
border-bottom: 1px solid var(--border-primary);
}
.action-widget-result img {
max-width: 400px;
max-height: 400px;
height: auto;
margin: 8px 0;
border-radius: 3px;
cursor: pointer;
transition: opacity 0.2s;
}
.action-widget-result img:hover {
opacity: 0.85;
}
/* File transfer (upload/download) widget styles */
.transfer-paths {
margin: 0;
padding-left: 20px;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
}
.transfer-paths li {
margin: 4px 0;
color: var(--text-primary);
}
.transfer-output {
margin-top: 8px;
padding-top: 8px;
border-top: 1px solid var(--border-primary);
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
color: var(--text-secondary);
white-space: pre-wrap;
}
.transfer-output.error {
color: #c62828;
}
.transfer-path-link {
color: var(--theme-accent);
text-decoration: underline;
cursor: pointer;
}
.transfer-path-link:hover {
opacity: 0.8;
}
/* Result Preview in CODE agent */
.result-preview {
margin: 16px 0;
overflow: hidden;
}
.result-preview-label {
font-size: 10px;
font-weight: 600;
color: var(--bg-primary);
text-transform: uppercase;
letter-spacing: 0.5px;
padding: 6px 12px;
background: var(--theme-accent);
}
.result-preview-content {
padding: 12px 15px;
color: var(--text-primary);
line-height: 1.6;
font-size: 12px;
background: var(--bg-tertiary);
border: 1px solid var(--border-primary);
border-top: none;
}
.result-preview-content img {
max-height: 400px;
cursor: pointer;
transition: opacity 0.2s;
}
.result-preview-content img:hover {
opacity: 0.85;
}
@media (max-width: 1024px) {
.agent-types {
grid-template-columns: 1fr;
}
.settings-body {
padding: 20px;
}
}
/* Research Agent Styles */
.research-container,
.research-container.message.assistant {
margin-bottom: 16px;
margin-left: 0 !important;
padding: 0 !important;
padding-left: 0 !important;
display: flex;
flex-direction: column;
gap: 0;
overflow: hidden;
}
.research-container::before,
.research-container.message.assistant::before {
content: none !important;
display: none !important;
}
.research-body {
padding: 12px;
background: var(--bg-tertiary);
border: 1px solid var(--border-primary);
border-top: none;
line-height: 1.6;
}
.research-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 6px 12px;
background: var(--theme-accent);
min-height: 28px;
}
.research-header-title {
font-size: 10px;
font-weight: 600;
color: var(--bg-primary);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.queries-section-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
}
.queries-title {
font-size: 12px;
font-weight: 500;
color: var(--text-secondary);
}
.toggle-irrelevant-label {
display: flex;
align-items: center;
gap: 4px;
font-size: 11px;
color: var(--text-secondary);
cursor: pointer;
user-select: none;
}
.toggle-irrelevant-label input[type="checkbox"] {
margin: 0;
cursor: pointer;
}
.toggle-irrelevant-label span {
cursor: pointer;
}
.research-reasoning-section {
margin-top: 12px;
padding-top: 12px;
border-top: 1px solid var(--border-primary);
}
.research-reasoning {
font-size: 11px;
color: var(--text-secondary);
font-style: italic;
line-height: 1.5;
}
/* Tree structure for queries */
.queries-tree-container {
position: relative;
padding-left: 20px;
}
.queries-tree-container::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 1px;
background: var(--border-primary);
}
.query-tree {
position: relative;
padding-bottom: 8px;
}
.query-tree::before {
content: '';
position: absolute;
left: -20px;
top: 10px;
width: 12px;
height: 1px;
background: var(--border-primary);
}
.query-tree.last::after {
content: '';
position: absolute;
left: -20px;
top: 11px;
bottom: 0;
width: 1px;
background: var(--bg-secondary);
}
.query-node {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 4px;
}
.query-text {
font-size: 12px;
color: var(--text-primary);
font-weight: 500;
flex: 1;
}
.query-stats {
font-size: 10px;
white-space: nowrap;
margin-left: 8px;
}
.stat-relevant {
color: #2e7d32;
}
.stat-irrelevant {
color: var(--text-muted);
}
.stat-error {
color: #c62828;
}
.query-sources-tree {
position: relative;
padding-left: 20px;
}
.query-sources-tree::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 1px;
background: var(--border-primary);
}
/* Tree structure for sources */
.source-tree-node {
position: relative;
margin-bottom: 1px;
}
.source-tree-node::before {
content: '';
position: absolute;
left: -20px;
top: 10px;
width: 12px;
height: 1px;
background: var(--border-primary);
}
.source-tree-node.last::after {
content: '';
position: absolute;
left: -20px;
top: 11px;
bottom: 0;
width: 1px;
background: var(--bg-secondary);
}
.source-tree-line {
display: flex;
align-items: center;
gap: 5px;
padding: 3px 0;
}
.source-status {
font-size: 11px;
min-width: 12px;
text-align: center;
user-select: none;
flex-shrink: 0;
}
.source-status.status-relevant {
color: #2e7d32;
}
.source-status.status-irrelevant {
color: var(--text-muted);
}
.source-status.status-error {
color: #d32f2f;
}
.source-title {
font-size: 11px;
color: var(--text-primary);
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.source-controls {
display: flex;
gap: 3px;
align-items: center;
flex-shrink: 0;
}
.source-control-btn {
background: var(--bg-card);
border: 1px solid var(--border-primary);
border-radius: 2px;
padding: 0px 4px;
font-size: 10px;
line-height: 16px;
cursor: pointer;
color: var(--text-secondary);
text-decoration: none;
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 16px;
height: 16px;
transition: all 0.15s;
}
.source-control-btn:hover {
background: var(--bg-secondary);
border-color: var(--text-muted);
color: var(--text-primary);
}
.source-control-btn.toggle-btn {
font-weight: 600;
}
.source-control-btn.link-btn {
font-size: 11px;
}
.source-tree-content {
max-height: 0;
overflow: hidden;
opacity: 0;
transition: max-height 0.3s ease, opacity 0.2s ease, margin 0.2s ease;
font-size: 11px;
line-height: 1.5;
color: var(--text-secondary);
}
.source-tree-content.expanded {
max-height: 2000px;
opacity: 1;
margin-top: 4px;
margin-bottom: 6px;
padding: 6px 8px;
background: var(--bg-tertiary);
border-left: 2px solid var(--border-primary);
border-radius: 2px;
}
.source-tree-content ul,
.source-tree-content ol {
margin: 6px 0;
padding-left: 20px;
list-style-position: outside;
}
.source-tree-content li {
margin-bottom: 3px;
}
.source-tree-content h1,
.source-tree-content h2,
.source-tree-content h3 {
margin: 8px 0 4px 0;
font-weight: 500;
}
.source-tree-content h1 {
font-size: 12px;
}
.source-tree-content h2 {
font-size: 11px;
}
.source-tree-content h3 {
font-size: 11px;
}
.source-tree-content p {
margin-bottom: 6px;
}
.research-sources-section {
margin-bottom: 16px;
}
.research-progress-section {
padding-top: 12px;
border-top: 1px solid var(--border-subtle);
}
.progress-bar-container {
display: flex;
align-items: center;
gap: 12px;
}
.progress-bar {
flex: 1;
height: 6px;
background: var(--border-primary);
border-radius: 3px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: var(--theme-accent);
transition: width 0.3s ease;
}
.progress-text {
font-size: 11px;
color: var(--text-secondary);
white-space: nowrap;
}
.research-source {
margin: 6px 0;
border: 1px solid var(--border-primary);
border-radius: 3px;
background: var(--bg-card);
}
.research-source.irrelevant {
opacity: 0.6;
background: var(--bg-tertiary);
}
.research-source.error {
background: #fff5f5;
border-color: #ffcdd2;
}
.source-header {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 10px;
cursor: pointer;
user-select: none;
}
.source-header:hover {
background: var(--bg-tertiary);
}
.source-status-icon {
font-size: 12px;
min-width: 16px;
text-align: center;
}
.research-source.relevant .source-status-icon {
color: #2e7d32;
}
.research-source.irrelevant .source-status-icon {
color: var(--text-muted);
}
.research-source.error .source-status-icon {
color: #d32f2f;
}
.source-url {
color: #1976d2;
text-decoration: none;
font-size: 12px;
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.source-url:hover {
text-decoration: underline;
}
.source-toggle {
color: var(--text-muted);
font-size: 10px;
}
.source-analysis {
font-size: 12px;
line-height: 1.6;
color: var(--text-primary);
padding: 0 12px 12px 12px;
border-top: 1px solid var(--border-primary);
overflow-wrap: break-word;
word-wrap: break-word;
}
.source-analysis ul,
.source-analysis ol {
margin: 8px 0;
padding-left: 24px;
list-style-position: outside;
}
.source-analysis li {
margin-bottom: 4px;
}
.source-analysis h1,
.source-analysis h2,
.source-analysis h3 {
margin: 12px 0 8px 0;
font-weight: 500;
}
.source-analysis h1 {
font-size: 15px;
}
.source-analysis h2 {
font-size: 14px;
}
.source-analysis h3 {
font-size: 13px;
}
.source-analysis p {
margin-bottom: 8px;
}
.research-assessment {
margin: 20px 0;
padding: 15px;
background: var(--bg-card);
border: 1px solid var(--border-primary);
border-radius: 4px;
}
.assessment-status {
font-size: 14px;
font-weight: 500;
margin-bottom: 10px;
padding: 8px 12px;
border-radius: 3px;
}
.assessment-status.complete {
background: var(--theme-bg);
color: var(--theme-accent);
}
.assessment-status.continuing {
background: #fff3e0;
color: #f57c00;
}
.assessment-info {
font-size: 11px;
color: var(--text-secondary);
margin-bottom: 10px;
}
.missing-aspects {
margin-top: 12px;
padding: 10px 12px;
background: var(--bg-tertiary);
border-radius: 3px;
font-size: 12px;
}
.missing-aspects strong {
color: var(--text-secondary);
font-weight: 500;
display: block;
margin-bottom: 6px;
}
.missing-aspects ul {
list-style: none;
padding: 0;
margin: 0;
}
.missing-aspects li {
padding: 4px 0;
color: var(--text-primary);
padding-left: 16px;
position: relative;
}
.missing-aspects li::before {
content: "•";
position: absolute;
left: 0;
color: #f57c00;
}
.agent-result {
margin: 12px 0;
overflow: hidden;
}
.result-header {
padding: 6px 12px;
background: var(--theme-accent);
font-size: 10px;
font-weight: 600;
color: var(--bg-primary);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.result-content {
padding: 12px;
font-size: 12px;
line-height: 1.6;
color: var(--text-primary);
background: var(--bg-tertiary);
border: 1px solid var(--border-primary);
border-top: none;
}
.result-content h1,
.result-content h2,
.result-content h3 {
margin-top: 16px;
margin-bottom: 8px;
color: var(--text-primary);
font-weight: 500;
}
.result-content h1 {
font-size: 14px;
}
.result-content h2 {
font-size: 13px;
}
.result-content h3 {
font-size: 12px;
}
.result-content p {
margin-bottom: 12px;
}
.result-content ul,
.result-content ol {
margin-bottom: 12px;
padding-left: 24px;
}
.result-content li {
margin-bottom: 6px;
}
.result-content img {
max-width: 400px;
max-height: 400px;
height: auto;
margin: 8px 0;
border-radius: 3px;
}
.result-content strong {
font-weight: 500;
color: var(--text-primary);
}
.result-content a,
.result-preview-content a,
.source-analysis a,
.action-widget-result a {
color: var(--theme-accent);
text-decoration: underline;
}
.result-content a:visited,
.result-preview-content a:visited,
.source-analysis a:visited,
.action-widget-result a:visited {
color: color-mix(in srgb, var(--theme-accent) 60%, var(--text-muted));
}
/* Markdown tables */
.markdown-table,
.message-content table,
.result-preview-content table,
.action-widget-result table,
.action-widget .section-content table,
.result-content table {
border-collapse: collapse;
width: 100%;
margin: 12px 0;
font-size: 12px;
background: var(--bg-card);
border: 1px solid var(--border-primary);
table-layout: auto;
}
.markdown-table th,
.message-content table th,
.result-preview-content table th,
.action-widget-result table th,
.action-widget .section-content table th,
.result-content table th {
background: var(--bg-tertiary);
padding: 6px 8px;
text-align: left;
font-weight: 500;
color: var(--text-primary);
border-bottom: 2px solid var(--border-primary);
}
.markdown-table td,
.message-content table td,
.result-preview-content table td,
.action-widget-result table td,
.action-widget .section-content table td,
.result-content table td {
padding: 6px 8px;
border-bottom: 1px solid var(--border-subtle);
color: var(--text-primary);
vertical-align: top;
}
.markdown-table tr:last-child td,
.message-content table tr:last-child td,
.result-preview-content table tr:last-child td,
.action-widget-result table tr:last-child td,
.action-widget .section-content table tr:last-child td,
.result-content table tr:last-child td {
border-bottom: none;
}
.markdown-table tr:hover,
.message-content table tr:hover,
.result-preview-content table tr:hover,
.action-widget-result table tr:hover,
.action-widget .section-content table tr:hover,
.result-content table tr:hover {
background: var(--bg-tertiary);
}
.result-content code,
.result-preview-content code,
.action-widget-result code,
.action-widget .section-content code {
background: var(--bg-secondary);
padding: 2px 6px;
border-radius: 3px;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
}
/* Code blocks in reports, result previews, and action widgets */
.result-content pre,
.result-preview-content pre,
.action-widget-result pre,
.action-widget .section-content pre {
background: var(--bg-tertiary);
color: var(--text-primary);
padding: 12px;
border-radius: 4px;
overflow-x: auto;
margin: 8px 0;
border: 1px solid var(--border-primary);
}
.result-content pre code,
.result-preview-content pre code,
.action-widget-result pre code,
.action-widget .section-content pre code {
background: transparent;
padding: 0;
color: inherit;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
}
/* Debug Panel */
.debug-panel {
position: fixed;
top: 25px;
right: -450px;
width: 450px;
height: calc(100vh - 25px);
background: var(--bg-card);
border-left: 1px solid var(--border-primary);
z-index: 1000;
display: flex;
flex-direction: column;
transition: right 0.3s ease;
}
.debug-panel.active {
right: 0;
}
.debug-header {
padding: 6px 12px;
border-bottom: 1px solid var(--border-primary);
display: flex;
align-items: center;
gap: 8px;
background: var(--theme-accent);
}
.debug-header h3 {
margin: 0;
font-size: 10px;
font-weight: 500;
color: var(--bg-primary);
text-transform: uppercase;
letter-spacing: 0.5px;
flex: 1;
}
.debug-close {
background: none;
border: none;
font-size: 16px;
color: var(--bg-primary);
cursor: pointer;
padding: 0;
width: 20px;
height: 20px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 3px;
transition: background 0.15s;
}
.debug-close:hover {
background: rgba(255, 255, 255, 0.2);
}
.debug-body {
flex: 1;
overflow: hidden;
display: flex;
flex-direction: column;
}
.debug-content {
flex: 1;
padding: 0;
margin: 0;
overflow: auto;
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
line-height: 1.5;
background: var(--bg-card);
}
.debug-call-item {
border-bottom: 1px solid var(--border-primary);
}
.debug-call-item.expanded {
border-bottom: none;
}
.debug-call-header {
padding: 2px 10px;
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
line-height: 1.5;
transition: background 0.15s;
user-select: none;
}
.debug-call-header:hover {
background: var(--bg-secondary);
}
.debug-call-arrow {
color: var(--text-secondary);
font-size: 9px;
width: 10px;
display: inline-block;
}
.debug-call-title {
font-weight: 500;
font-size: 11px;
color: var(--text-primary);
flex: 1;
}
.debug-call-time {
color: var(--text-muted);
font-size: 9px;
}
.debug-call-content {
padding: 8px 12px;
overflow-x: auto;
font-size: 10px;
}
.debug-call-content pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
font-size: 10px;
}
.debug-section-label {
font-size: 10px;
font-weight: 600;
text-transform: uppercase;
color: var(--text-muted);
margin: 8px 0 4px 0;
letter-spacing: 0.5px;
}
.debug-section-label:first-child {
margin-top: 0;
}
.debug-image-placeholder {
background: var(--theme-bg);
color: var(--theme-accent);
padding: 1px 4px;
border-radius: 3px;
cursor: pointer;
position: relative;
display: inline;
}
.debug-image-tooltip {
display: none;
position: absolute;
bottom: 100%;
left: 0;
z-index: 1001;
padding: 4px;
background: var(--bg-card);
border: 1px solid var(--border-primary);
border-radius: 4px;
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}
.debug-image-tooltip img {
max-width: 200px;
max-height: 200px;
display: block;
}
/* Debug button uses same styling as settings/files buttons */
/* Settings Panel (side panel like debug) */
.settings-panel {
position: fixed;
top: 25px;
right: -480px;
width: 480px;
height: calc(100vh - 25px);
background: var(--bg-card);
border-left: 1px solid var(--border-primary);
z-index: 1000;
display: flex;
flex-direction: column;
transition: right 0.3s ease;
overflow-y: auto;
}
.settings-panel.active {
right: 0;
}
.settings-panel-header {
padding: 6px 12px;
border-bottom: 1px solid var(--border-primary);
display: flex;
justify-content: space-between;
align-items: center;
background: var(--theme-accent);
position: sticky;
top: 0;
z-index: 1;
}
.settings-panel-header h3 {
margin: 0;
font-size: 10px;
font-weight: 500;
color: var(--bg-primary);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.settings-path {
font-size: 9px;
color: var(--bg-primary);
opacity: 0.6;
font-weight: 400;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1;
margin: 0 12px;
}
.settings-panel-close {
background: none;
border: none;
font-size: 16px;
color: var(--bg-primary);
cursor: pointer;
padding: 0;
width: 20px;
height: 20px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 3px;
transition: background 0.15s;
}
.settings-panel-close:hover {
background: rgba(255, 255, 255, 0.2);
}
.settings-panel-body {
flex: 1;
padding: 12px;
overflow-y: auto;
}
/* Settings List (providers/models) */
.settings-list {
display: flex;
flex-direction: column;
gap: 4px;
margin-bottom: 8px;
}
.provider-item,
.model-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 5px 8px;
background: var(--bg-secondary);
border: 1px solid var(--border-primary);
border-radius: 3px;
font-size: 11px;
}
.provider-info,
.model-info {
display: flex;
flex-direction: column;
gap: 1px;
flex: 1;
min-width: 0;
}
.provider-name,
.model-name {
font-weight: 500;
font-size: 11px;
color: var(--text-primary);
}
.provider-endpoint,
.model-details {
font-size: 9px;
color: var(--text-secondary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.provider-actions,
.model-actions {
display: flex;
gap: 4px;
margin-left: 8px;
}
.provider-edit-btn,
.provider-delete-btn,
.model-edit-btn,
.model-delete-btn {
background: none;
border: none;
font-size: 12px;
color: var(--text-secondary);
cursor: pointer;
padding: 2px 4px;
border-radius: 2px;
transition: all 0.15s;
}
.provider-edit-btn:hover,
.model-edit-btn:hover {
background: var(--border-primary);
color: var(--text-primary);
}
.provider-delete-btn:hover,
.model-delete-btn:hover {
background: #ffebee;
color: #c62828;
}
.empty-list {
padding: 8px;
text-align: center;
color: var(--text-muted);
font-size: 10px;
font-style: italic;
background: var(--bg-tertiary);
border: 1px dashed var(--border-primary);
border-radius: 3px;
}
.settings-add-btn {
background: none;
border: 1px dashed var(--border-primary);
padding: 5px 10px;
font-family: inherit;
font-size: 10px;
color: var(--text-secondary);
cursor: pointer;
border-radius: 3px;
transition: all 0.15s;
width: 100%;
text-align: center;
}
.settings-add-btn:hover {
border-color: var(--theme-accent);
color: var(--theme-accent);
background: var(--theme-bg);
}
/* Settings Select (dropdowns) */
.settings-select {
width: 100%;
padding: 5px 24px 5px 8px;
border: 1px solid var(--border-primary);
border-radius: 0;
font-family: inherit;
font-size: 10px;
background: var(--bg-card);
color: var(--text-primary);
outline: none;
cursor: pointer;
transition: border-color 0.15s ease;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M6 8L2 4h8z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 6px center;
}
.settings-select:hover {
border-color: var(--theme-accent);
}
.settings-select:focus {
border-color: var(--theme-accent);
}
/* Notebook models grid */
.agent-models-grid {
display: grid;
grid-template-columns: 80px 1fr;
gap: 4px 8px;
align-items: center;
}
.agent-models-grid label {
font-size: 10px;
font-weight: 500;
color: var(--text-secondary);
letter-spacing: 0.3px;
}
/* Settings Dialog (modal) */
.settings-dialog-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 2000;
display: none;
align-items: center;
justify-content: center;
}
.settings-dialog-overlay.active {
display: flex;
}
.settings-dialog {
background: var(--bg-card);
border-radius: 6px;
width: 380px;
max-width: 90vw;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
overflow: hidden;
}
.settings-dialog-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 8px 12px;
background: var(--theme-accent);
}
.settings-dialog-header h3 {
margin: 0;
font-size: 10px;
font-weight: 500;
color: var(--bg-primary);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.settings-dialog-close {
background: none;
border: none;
font-size: 14px;
color: var(--bg-primary);
cursor: pointer;
padding: 0;
width: 20px;
height: 20px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 3px;
transition: background 0.15s;
}
.settings-dialog-close:hover {
background: rgba(255, 255, 255, 0.2);
}
.settings-dialog-body {
padding: 12px;
display: flex;
flex-direction: column;
gap: 10px;
}
.dialog-field {
display: flex;
flex-direction: column;
gap: 4px;
}
.dialog-label {
font-size: 9px;
font-weight: 500;
color: var(--text-secondary);
letter-spacing: 0.3px;
}
.dialog-hint {
font-size: 10px;
color: var(--text-muted);
font-style: italic;
}
.dialog-checkbox-label {
font-size: 11px;
color: var(--text-secondary);
display: flex;
align-items: center;
gap: 6px;
cursor: pointer;
}
.dialog-checkbox-label input[type="checkbox"] {
margin: 0;
}
.settings-dialog-actions {
display: flex;
gap: 6px;
padding: 8px 12px;
background: var(--bg-secondary);
border-top: 1px solid var(--border-primary);
justify-content: flex-end;
}
.settings-dialog-actions .settings-save-btn,
.settings-dialog-actions .settings-cancel-btn {
padding: 5px 12px;
font-size: 10px;
}
/* Files Panel (right side panel, like settings/debug) */
.files-panel {
position: fixed;
top: 25px;
right: -320px;
width: 320px;
height: calc(100vh - 25px);
background: var(--bg-card);
border-left: 1px solid var(--border-primary);
z-index: 1000;
display: flex;
flex-direction: column;
transition: right 0.3s ease;
}
.files-panel.active {
right: 0;
}
.files-panel-header {
padding: 6px 12px;
border-bottom: 1px solid var(--border-primary);
display: flex;
justify-content: space-between;
align-items: center;
background: var(--theme-accent);
gap: 8px;
}
.files-panel-header h3 {
margin: 0;
font-size: 10px;
font-weight: 500;
color: var(--bg-primary);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.files-panel-controls {
display: flex;
align-items: center;
gap: 6px;
margin-left: auto;
}
.files-show-hidden {
display: flex;
align-items: center;
gap: 4px;
font-size: 9px;
color: var(--bg-primary);
opacity: 0.8;
cursor: pointer;
}
.files-show-hidden input[type="checkbox"] {
appearance: none;
-webkit-appearance: none;
width: 12px;
height: 12px;
border: 1px solid var(--bg-primary);
border-radius: 2px;
background: transparent;
cursor: pointer;
position: relative;
opacity: 0.5;
}
.files-show-hidden input[type="checkbox"]:checked {
background: var(--bg-card);
border-color: var(--bg-primary);
opacity: 1;
}
.files-show-hidden input[type="checkbox"]:checked::after {
content: '✓';
position: absolute;
top: -2px;
left: 1px;
font-size: 10px;
color: var(--theme-accent);
font-weight: bold;
}
.files-upload-btn,
.files-refresh-btn {
background: none;
border: none;
color: var(--bg-primary);
font-size: 13px;
cursor: pointer;
padding: 2px 4px;
border-radius: 3px;
transition: background 0.15s;
}
.files-upload-btn:hover,
.files-refresh-btn:hover {
background: rgba(255, 255, 255, 0.2);
}
.files-panel-close {
background: none;
border: none;
font-size: 16px;
color: var(--bg-primary);
cursor: pointer;
padding: 0;
width: 20px;
height: 20px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 3px;
transition: background 0.15s;
}
.files-panel-close:hover {
background: rgba(255, 255, 255, 0.2);
}
.files-panel-body {
flex: 1;
padding: 6px 0;
overflow-y: auto;
font-size: 11px;
}
.files-loading {
padding: 12px;
color: var(--text-secondary);
text-align: center;
font-size: 10px;
}
.files-panel-legend {
padding: 6px 12px;
border-top: 1px solid var(--border-primary);
display: flex;
flex-wrap: wrap;
gap: 4px 12px;
font-size: 9px;
color: var(--text-muted);
flex-shrink: 0;
}
/* File Tree Styles - matching research tree pattern */
.file-tree-root {
padding: 6px 10px;
}
.file-tree-header {
font-size: 10px;
color: var(--text-secondary);
padding: 0 0 3px 0;
margin-bottom: 3px;
}
/* Container for tree items - has vertical line */
.file-tree-container {
position: relative;
padding-left: 20px;
}
.file-tree-container::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 1px;
background: var(--border-primary);
}
/* Individual tree item */
.file-tree-item {
position: relative;
margin-bottom: 1px;
}
/* Horizontal branch line */
.file-tree-item::before {
content: '';
position: absolute;
left: -20px;
top: 10px;
width: 12px;
height: 1px;
background: var(--border-primary);
}
/* Last item covers the vertical line below it */
.file-tree-item.last::after {
content: '';
position: absolute;
left: -20px;
top: 11px;
bottom: 0;
width: 1px;
background: var(--bg-card);
}
.file-tree-line {
display: flex;
align-items: center;
gap: 4px;
padding: 2px 0;
cursor: pointer;
user-select: none;
white-space: nowrap;
font-size: 11px;
color: var(--text-primary);
}
.file-tree-line:hover {
color: var(--theme-accent);
}
.file-tree-line:hover .file-tree-name {
text-decoration: underline;
}
.file-tree-icon {
font-size: 10px;
min-width: 12px;
text-align: center;
color: var(--theme-accent);
flex-shrink: 0;
}
.file-tree-item.file .file-tree-icon {
color: transparent;
}
.file-tree-name {
overflow: hidden;
text-overflow: ellipsis;
}
/* Children container - same pattern as parent */
.file-tree-children {
display: none;
position: relative;
padding-left: 20px;
}
.file-tree-children::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 1px;
background: var(--border-primary);
}
.file-tree-children.expanded {
display: block;
}
.file-tree-actions {
margin-left: auto;
flex-shrink: 0;
}
.file-tree-action-btn {
background: none;
border: none;
cursor: pointer;
font-size: 10px;
padding: 0 2px;
color: var(--text-muted);
}
.file-tree-action-btn:hover {
color: var(--theme-accent);
}
.file-tree-highlight {
background: rgba(var(--theme-accent-rgb), 0.15);
border-radius: 3px;
}
.file-tree-item.folder.drag-over > .file-tree-line {
background: rgba(var(--theme-accent-rgb), 0.15);
border-radius: 3px;
}
#fileTree.drag-over-root {
background: rgba(var(--theme-accent-rgb), 0.06);
}
/* Inline code file path links */
.file-path-link {
text-decoration: none;
cursor: pointer;
}
.file-path-link code {
border-color: var(--theme-accent) !important;
cursor: pointer;
}
.file-path-link:hover code {
background: rgba(var(--theme-accent-rgb), 0.1);
}
/* Retry Indicator */
.retry-indicator {
padding: 12px 16px;
margin: 8px 0;
background: #fff3e0;
border: 1px solid #ffb74d;
border-radius: 6px;
animation: retryPulse 2s ease-in-out infinite;
}
@keyframes retryPulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.7; }
}
.retry-content {
display: flex;
align-items: center;
gap: 12px;
}
.retry-spinner {
width: 20px;
height: 20px;
border: 2px solid #ffb74d;
border-top-color: #f57c00;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.retry-text {
flex: 1;
}
.retry-message {
font-size: 11px;
color: #e65100;
margin-bottom: 4px;
}
.retry-status {
font-size: 10px;
color: #f57c00;
font-weight: 500;
}
/* Session Selector (inside welcome message) */
.session-selector {
margin-top: 16px;
padding-top: 16px;
border-top: 1px solid var(--border-primary);
}
/* Welcome explanation section (below session selector) */
.welcome-explanation {
margin-top: 20px;
padding-top: 16px;
border-top: 1px solid var(--border-primary);
color: var(--text-secondary);
}
.session-selector-form {
display: flex;
gap: 20px;
align-items: flex-end;
}
.session-new {
flex: 1;
}
.session-existing {
flex: 1;
}
.session-new label,
.session-existing label {
display: block;
font-size: 10px;
font-weight: 600;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 6px;
}
.session-new-input {
display: flex;
gap: 6px;
}
.session-input-wrapper {
flex: 1;
position: relative;
display: flex;
}
.session-input-wrapper input {
flex: 1;
padding: 7px 28px 7px 10px;
border: 1px solid var(--border-primary);
border-radius: 4px;
font-size: 12px;
font-family: inherit;
height: 32px;
box-sizing: border-box;
background: var(--bg-input);
color: var(--text-primary);
}
.session-input-wrapper input:focus {
outline: none;
border-color: var(--theme-accent);
}
.session-regenerate-btn {
position: absolute;
right: 6px;
top: 50%;
transform: translateY(-50%);
background: transparent;
border: none;
color: var(--text-muted);
font-size: 13px;
cursor: pointer;
padding: 0;
line-height: 1;
transition: color 0.2s;
}
.session-regenerate-btn:hover {
color: var(--theme-accent);
}
.session-new-input button:not(.session-regenerate-btn) {
padding: 7px 14px;
background: var(--bg-secondary);
color: var(--text-primary);
border: 1px solid var(--border-primary);
border-radius: 4px;
font-size: 11px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
letter-spacing: 0.5px;
}
.session-new-input button:not(.session-regenerate-btn):hover {
background: var(--theme-accent);
color: var(--bg-primary);
border-color: var(--theme-accent);
}
.session-existing {
position: relative;
}
.session-existing::after {
content: '';
position: absolute;
right: 14px;
bottom: 13px;
width: 0;
height: 0;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 5px solid var(--text-muted);
pointer-events: none;
}
.session-existing select {
width: 100%;
padding: 7px 32px 7px 10px;
border: 1px solid var(--border-primary);
border-radius: 4px;
font-size: 12px;
font-family: inherit;
background: var(--bg-card);
color: var(--text-primary);
cursor: pointer;
height: 32px;
box-sizing: border-box;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
transition: border-color 0.2s ease;
}
.session-existing select:hover {
border-color: var(--theme-accent);
}
.session-existing select:focus {
outline: none;
border-color: var(--theme-accent);
}
/* Sessions Panel (right side) */
.sessions-panel {
position: fixed;
top: 25px;
right: -320px;
width: 320px;
height: calc(100vh - 25px);
background: var(--bg-card);
border-left: 1px solid var(--border-primary);
z-index: 1000;
display: flex;
flex-direction: column;
transition: right 0.3s ease;
}
.sessions-panel.active {
right: 0;
}
.sessions-panel-open .content-area {
margin-right: 320px;
}
.sessions-panel-header {
padding: 6px 12px;
border-bottom: 1px solid var(--border-primary);
display: flex;
justify-content: space-between;
align-items: center;
background: var(--theme-accent);
}
.sessions-panel-header h3 {
margin: 0;
font-size: 10px;
font-weight: 500;
color: var(--bg-primary);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.sessions-panel-close {
background: none;
border: none;
font-size: 16px;
color: var(--bg-primary);
cursor: pointer;
padding: 0;
width: 20px;
height: 20px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 3px;
transition: background 0.15s;
}
.sessions-panel-close:hover {
background: rgba(255, 255, 255, 0.2);
}
.sessions-panel-body {
flex: 1;
padding: 12px;
overflow-y: auto;
}
.sessions-panel-body label {
display: block;
font-size: 9px;
font-weight: 500;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.3px;
margin-bottom: 6px;
}
.sessions-current-name,
.sessions-new-input {
display: flex;
gap: 6px;
}
.sessions-current-name input,
.sessions-new-input input {
flex: 1;
padding: 5px 24px 5px 8px;
border: 1px solid var(--border-primary);
border-radius: 3px;
font-size: 11px;
font-family: inherit;
}
.sessions-new-input .session-input-wrapper {
width: 180px;
position: relative;
display: flex;
}
.sessions-new-input .session-input-wrapper input {
width: 100%;
flex: none;
}
.sessions-current-name input:focus,
.sessions-new-input input:focus {
outline: none;
border-color: var(--theme-accent);
}
.sessions-current-name button,
.sessions-new-input button:not(.session-regenerate-btn) {
padding: 5px 10px;
background: var(--theme-accent);
color: var(--bg-primary);
border: none;
border-radius: 3px;
font-size: 10px;
font-weight: 500;
cursor: pointer;
transition: opacity 0.15s;
flex-shrink: 0;
}
.sessions-current-name button:hover,
.sessions-new-input button:not(.session-regenerate-btn):hover {
opacity: 0.9;
}
.sessions-divider {
height: 1px;
background: var(--border-primary);
margin: 10px 0;
}
.sessions-list {
display: flex;
flex-direction: column;
gap: 3px;
}
.sessions-list-item {
padding: 5px 8px;
background: var(--bg-secondary);
border-radius: 3px;
cursor: pointer;
transition: background 0.15s;
display: flex;
justify-content: space-between;
align-items: center;
}
.sessions-list-item:hover {
background: var(--bg-hover);
}
.sessions-list-item.current {
background: var(--theme-accent-bg);
border: 1px solid var(--theme-accent);
}
.sessions-list-item-name {
font-size: 11px;
font-weight: 500;
color: var(--text-primary);
}
.sessions-list-item-date {
font-size: 9px;
color: var(--text-muted);
flex: 1;
text-align: right;
margin-right: 6px;
}
.sessions-delete-btn {
background: none;
border: none;
color: var(--text-muted);
font-size: 13px;
cursor: pointer;
padding: 0 2px;
line-height: 1;
transition: color 0.15s;
}
.sessions-delete-btn:hover {
color: #e53935;
}
.sessions-loading {
text-align: center;
color: var(--text-secondary);
font-size: 10px;
padding: 12px;
}
/* ==================== Dark theme shared overrides ==================== */
/* Dark themes: code/pre syntax colors */
[data-theme="terminal"] .message-content code,
[data-theme="terminal"] .action-widget-result code,
[data-theme="terminal"] .result-preview-content code { color: #33ff33; }
[data-theme="noir"] .message-content code,
[data-theme="noir"] .action-widget-result code,
[data-theme="noir"] .result-preview-content code { color: #d4d4d4; }
[data-theme="eclipse"] .message-content code,
[data-theme="eclipse"] .action-widget-result code,
[data-theme="eclipse"] .result-preview-content code { color: #a8c8f0; }
[data-theme="terminal"] .message-content pre,
[data-theme="terminal"] .message-content pre code { color: #33ff33; }
[data-theme="noir"] .message-content pre,
[data-theme="noir"] .message-content pre code { color: #d4d4d4; }
[data-theme="eclipse"] .message-content pre,
[data-theme="eclipse"] .message-content pre code { color: #c8daf0; }
/* Links */
.chat-container a { color: var(--theme-accent); text-decoration: underline; }
.chat-container a:visited { color: color-mix(in srgb, var(--theme-accent) 60%, var(--text-muted)); text-decoration: underline; }
/* Dark themes: links */
[data-theme="terminal"] .chat-container a { color: #33ff33; }
[data-theme="terminal"] .chat-container a:visited { color: #22aa22; }
[data-theme="noir"] .chat-container a { color: #cccccc; }
[data-theme="noir"] .chat-container a:visited { color: #999999; }
[data-theme="eclipse"] .chat-container a { color: #7ab0ff; }
[data-theme="eclipse"] .chat-container a:visited { color: #5a8acc; }
/* Dark themes: active dot glow */
[data-theme="terminal"] .tl-row.active .tl-dot { box-shadow: 0 0 4px #00ff00; }
[data-theme="noir"] .tl-row.active .tl-dot { box-shadow: 0 0 4px #ffffff40; }
[data-theme="eclipse"] .tl-row.active .tl-dot { box-shadow: 0 0 4px #5c9eff60; }
/* Dark themes: input caret */
[data-theme="terminal"] .input-container textarea { caret-color: #00ff00; }
[data-theme="noir"] .input-container textarea { caret-color: #e0e0e0; }
[data-theme="eclipse"] .input-container textarea { caret-color: #5c9eff; }
/* Dark themes: research tree lines (hardcoded #666/#888) */
[data-theme="terminal"] .query-tree-container::before,
[data-theme="terminal"] .query-tree::before,
[data-theme="terminal"] .source-tree-container::before,
[data-theme="terminal"] .source-tree-node::before,
[data-theme="noir"] .query-tree-container::before,
[data-theme="noir"] .query-tree::before,
[data-theme="noir"] .source-tree-container::before,
[data-theme="noir"] .source-tree-node::before,
[data-theme="eclipse"] .query-tree-container::before,
[data-theme="eclipse"] .query-tree::before,
[data-theme="eclipse"] .source-tree-container::before,
[data-theme="eclipse"] .source-tree-node::before {
background: var(--border-primary);
}
/* ============================================================
Agent Tool Cells (search, read, screenshot)
============================================================ */
.tool-cell {
margin: 16px 0;
overflow: hidden;
}
.tool-cell-label {
font-size: 10px;
font-weight: 600;
color: var(--bg-primary);
text-transform: uppercase;
letter-spacing: 0.5px;
padding: 6px 12px;
background: var(--theme-accent);
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
}
.tool-cell-label:hover {
opacity: 0.9;
}
.tool-cell-desc {
font-weight: 400;
text-transform: none;
letter-spacing: 0;
opacity: 0.8;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
min-width: 0;
}
.tool-cell-input {
background: var(--bg-tertiary);
padding: 10px 12px;
border: 1px solid var(--border-primary);
border-top: none;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
color: var(--text-primary);
word-break: break-all;
}
.tool-cell-output {
padding: 10px 12px;
background: var(--bg-tertiary);
border: 1px solid var(--border-primary);
border-top: none;
font-size: 12px;
}
.tool-cell-output .show-html-iframe {
width: 100%;
height: 400px;
border: 1px solid var(--border-primary);
border-radius: 4px;
background: var(--bg-primary);
}
.search-results-content {
display: flex;
flex-direction: column;
gap: 8px;
}
.search-result-item {
display: flex;
flex-direction: column;
gap: 1px;
}
.search-result-item a {
color: var(--accent-primary);
text-decoration: none;
font-weight: 500;
font-size: 12px;
}
.search-result-item a:hover {
text-decoration: underline;
}
.search-snippet {
color: var(--text-muted);
font-size: 11px;
line-height: 1.3;
}
.tool-cell-read-summary {
color: var(--text-muted);
font-size: 11px;
}
.read-content-toggle {
background: none;
border: 1px solid var(--border-color);
color: var(--accent-color);
font-size: 10px;
cursor: pointer;
padding: 1px 6px;
border-radius: 3px;
margin-left: 6px;
}
.read-content-toggle:hover {
background: var(--accent-color);
color: var(--bg-primary);
}
.read-content-body {
display: none;
max-height: 400px;
overflow-y: auto;
padding: 8px 10px;
margin-top: 6px;
border: 1px solid var(--border-color);
border-radius: 4px;
font-size: 12px;
line-height: 1.5;
background: var(--bg-primary);
}
.read-content-body.expanded {
display: block;
}
.screenshot-img {
max-width: 100%;
max-height: 400px;
border-radius: 2px;
}
.generated-img {
max-width: 100%;
border-radius: 4px;
cursor: pointer;
}
/* Widget collapse toggle — used in tool-cell, code-cell, action-widget headers */
.widget-collapse-toggle {
width: 14px;
height: 14px;
padding: 10px;
margin: -10px;
box-sizing: content-box;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
opacity: 0.6;
cursor: pointer;
transition: opacity 0.2s;
position: relative;
z-index: 1;
}
.widget-collapse-toggle:hover {
opacity: 1;
}
.widget-collapse-toggle::before {
content: '';
width: 0;
height: 0;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 5px solid var(--bg-primary);
transition: transform 0.2s;
}
.widget-collapse-toggle.collapsed::before {
transform: rotate(-90deg);
}
/* Collapsed state for tool-cell, code-cell, action-widget */
.tool-cell.collapsed > :not(.tool-cell-label),
.code-cell.collapsed > :not(.code-cell-label),
.action-widget.collapsed > :not(.action-widget-clickable):not(.action-widget-header) {
display: none;
}
/* Username overlay for multi-user mode */
.username-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.7);
display: flex;
align-items: center;
justify-content: center;
z-index: 10000;
}
.username-dialog {
background: var(--bg-primary);
border: 1px solid var(--border-primary);
padding: 32px;
text-align: center;
max-width: 320px;
width: 90%;
}
.username-dialog h2 {
margin: 0 0 8px;
font-size: 16px;
color: var(--theme-accent);
}
.username-dialog p {
margin: 0 0 20px;
font-size: 12px;
color: var(--text-secondary);
}
.username-dialog input {
width: 100%;
padding: 8px 12px;
font-family: 'JetBrains Mono', monospace;
font-size: 14px;
background: var(--bg-secondary);
border: 1px solid var(--border-primary);
color: var(--text-primary);
margin-bottom: 12px;
box-sizing: border-box;
-webkit-appearance: none;
appearance: none;
border-radius: 0;
}
.username-dialog input:focus {
outline: none;
border-color: var(--theme-accent);
}
.username-dialog button {
width: 100%;
padding: 8px;
background: var(--theme-accent);
color: var(--bg-primary);
border: none;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 1px;
cursor: pointer;
}
.username-dialog button:hover {
opacity: 0.9;
}
.username-warning {
font-size: 11px;
color: var(--text-secondary);
margin: -6px 0 10px;
text-align: left;
}
.username-dialog .username-notice {
margin: 24px 0 0;
font-size: 10px;
color: var(--text-muted);
line-height: 1.4;
}
.username-notice strong {
color: var(--theme-accent);
}
.username-notice a {
color: var(--theme-accent);
text-decoration: none;
}
.username-notice a:hover {
text-decoration: underline;
}
.user-indicator-block {
display: flex;
align-items: stretch;
margin: 8px 12px 0 16px;
border: 1px solid var(--theme-accent);
cursor: pointer;
}
.user-indicator-block:hover {
opacity: 0.8;
}
.user-indicator-name {
padding: 3px 8px;
font-size: 9px;
background: var(--bg-tertiary);
color: var(--text-primary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1;
min-width: 0;
}