lvwerra HF Staff Claude Opus 4.6 commited on
Commit
b5bd59f
·
1 Parent(s): 179f9a1

Restructure settings into collapsible groups, fix dark theme hardcoded colors

Browse files

Settings panel reorganized into 5 collapsible sections: Agent Models,
Models & Providers, API Keys, Agent Settings, Theme.

Replace hardcoded color values (white, #666, #888, #fff, #bbb, rgba(255,...))
with CSS variables (var(--bg-primary), var(--border-primary), var(--text-muted),
var(--theme-accent)) for proper dark theme support. Style checkboxes, dropdowns,
number inputs, and panel headers/buttons to be theme-aware.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Files changed (3) hide show
  1. frontend/app.js +11 -0
  2. frontend/index.html +155 -131
  3. frontend/style.css +103 -30
frontend/app.js CHANGED
@@ -263,6 +263,17 @@ function initializeEventListeners() {
263
  });
264
  }
265
 
 
 
 
 
 
 
 
 
 
 
 
266
  // Double-click on collapse toggle: collapse/uncollapse all widgets in the same chat
267
  document.addEventListener('dblclick', (e) => {
268
  const toggle = e.target.closest('.widget-collapse-toggle');
 
263
  });
264
  }
265
 
266
+ // Settings group collapse/expand
267
+ document.addEventListener('click', (e) => {
268
+ const header = e.target.closest('.settings-group-header');
269
+ if (!header) return;
270
+ const group = header.closest('.settings-group');
271
+ if (!group) return;
272
+ group.classList.toggle('collapsed');
273
+ const toggle = header.querySelector('.widget-collapse-toggle');
274
+ if (toggle) toggle.classList.toggle('collapsed');
275
+ });
276
+
277
  // Double-click on collapse toggle: collapse/uncollapse all widgets in the same chat
278
  document.addEventListener('dblclick', (e) => {
279
  const toggle = e.target.closest('.widget-collapse-toggle');
frontend/index.html CHANGED
@@ -215,152 +215,176 @@
215
  </div>
216
  <div class="settings-panel-body" id="settingsPanelBody">
217
  <div class="settings-body">
218
- <!-- Providers Section -->
219
- <div class="settings-section">
220
- <label class="settings-label">
221
- <span class="label-text">PROVIDERS</span>
222
- <span class="label-description">API endpoints for LLM services (OpenAI, local vLLM, etc.)</span>
223
- </label>
224
- <div id="providers-list" class="settings-list"></div>
225
- <button type="button" class="settings-add-btn" onclick="showProviderDialog()">+ Add Provider</button>
226
- </div>
227
-
228
- <!-- Models Section -->
229
- <div class="settings-section">
230
- <label class="settings-label">
231
- <span class="label-text">MODELS</span>
232
- <span class="label-description">Models available from your providers</span>
233
- </label>
234
- <div id="models-list" class="settings-list"></div>
235
- <button type="button" class="settings-add-btn" onclick="showModelDialog()">+ Add Model</button>
236
- </div>
237
-
238
- <!-- Agent Model Selection -->
239
- <div class="settings-section">
240
- <label class="settings-label">
241
- <span class="label-text">AGENT MODELS</span>
242
- <span class="label-description">Select which model to use for each agent type</span>
243
- </label>
244
- <div class="agent-models-grid" id="agentModelsGrid">
245
- <!-- Generated dynamically from AGENT_REGISTRY -->
246
  </div>
247
  </div>
248
 
249
- <!-- Service API Keys -->
250
- <div class="settings-section">
251
- <label class="settings-label">
252
- <span class="label-text">E2B API KEY (OPTIONAL)</span>
253
- <span class="label-description">Required for code execution in CODE agents</span>
254
- </label>
255
- <input type="password" id="setting-e2b-key" class="settings-input" placeholder="Leave empty if not using code execution">
256
- </div>
257
-
258
- <div class="settings-section">
259
- <label class="settings-label">
260
- <span class="label-text">SERPER API KEY (OPTIONAL)</span>
261
- <span class="label-description">Required for web search in RESEARCH agents</span>
262
- </label>
263
- <input type="password" id="setting-serper-key" class="settings-input" placeholder="Leave empty if not using research">
264
- </div>
265
-
266
- <div class="settings-section">
267
- <label class="settings-label">
268
- <span class="label-text">HUGGINGFACE TOKEN (OPTIONAL)</span>
269
- <span class="label-description">Required for image generation in IMAGE agents</span>
270
- </label>
271
- <input type="password" id="setting-hf-token" class="settings-input" placeholder="Leave empty to use provider token">
272
- </div>
273
-
274
- <!-- Image Model Settings -->
275
- <div class="settings-section">
276
- <label class="settings-label">
277
- <span class="label-text">IMAGE GENERATION MODEL (OPTIONAL)</span>
278
- <span class="label-description">Model for text-to-image generation in IMAGE agents</span>
279
- </label>
280
- <select id="setting-image-gen-model" class="settings-select"></select>
281
- </div>
282
-
283
- <div class="settings-section">
284
- <label class="settings-label">
285
- <span class="label-text">IMAGE EDIT MODEL (OPTIONAL)</span>
286
- <span class="label-description">Model for image-to-image editing in IMAGE agents</span>
287
- </label>
288
- <select id="setting-image-edit-model" class="settings-select"></select>
289
- </div>
290
-
291
- <!-- Research Settings -->
292
- <div class="settings-section">
293
- <label class="settings-label">
294
- <span class="label-text">RESEARCH SUB-AGENT MODEL (OPTIONAL)</span>
295
- <span class="label-description">Smaller/faster model for analyzing web pages during research</span>
296
- </label>
297
- <select id="setting-research-sub-agent-model" class="settings-select"></select>
298
- </div>
299
-
300
- <div class="settings-section">
301
- <label class="settings-label">
302
- <span class="label-text">RESEARCH PARALLEL WORKERS (OPTIONAL)</span>
303
- <span class="label-description">Number of web pages to analyze in parallel (default: 8)</span>
304
- </label>
305
- <input type="number" id="setting-research-parallel-workers" class="settings-input" placeholder="8" min="1" max="20">
306
- </div>
307
-
308
- <div class="settings-section">
309
- <label class="settings-label">
310
- <span class="label-text">RESEARCH MAX WEBSITES (OPTIONAL)</span>
311
- <span class="label-description">Maximum number of websites to analyze per research session (default: 50)</span>
312
- </label>
313
- <input type="number" id="setting-research-max-websites" class="settings-input" placeholder="50" min="10" max="200">
314
  </div>
315
 
316
- <div class="settings-section">
317
- <label class="settings-label">
318
- <span class="label-text">THEME COLOR</span>
319
- <span class="label-description">Color theme for action widgets and accents</span>
320
- </label>
321
- <div class="theme-color-picker" id="theme-color-picker">
322
- <div class="theme-option" data-theme="forest">
323
- <div class="theme-preview" style="border-color: #1b5e20; background: #e8f5e9;"></div>
324
- <span class="theme-name">Forest</span>
325
- </div>
326
- <div class="theme-option" data-theme="sapphire">
327
- <div class="theme-preview" style="border-color: #0d47a1; background: #e3f2fd;"></div>
328
- <span class="theme-name">Sapphire</span>
329
  </div>
330
- <div class="theme-option" data-theme="ocean">
331
- <div class="theme-preview" style="border-color: #00796b; background: #e0f2f1;"></div>
332
- <span class="theme-name">Ocean</span>
 
 
 
333
  </div>
334
- <div class="theme-option" data-theme="midnight">
335
- <div class="theme-preview" style="border-color: #283593; background: #e8eaf6;"></div>
336
- <span class="theme-name">Midnight</span>
 
 
 
337
  </div>
338
- <div class="theme-option" data-theme="steel">
339
- <div class="theme-preview" style="border-color: #455a64; background: #eceff1;"></div>
340
- <span class="theme-name">Steel</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
341
  </div>
342
- <div class="theme-option" data-theme="depths">
343
- <div class="theme-preview" style="border-color: #01579b; background: #e3f2fd;"></div>
344
- <span class="theme-name">Depths</span>
 
 
 
345
  </div>
346
- <div class="theme-option" data-theme="ember">
347
- <div class="theme-preview" style="border-color: #b71c1c; background: #fbe9e7;"></div>
348
- <span class="theme-name">Ember</span>
 
 
 
349
  </div>
350
- <div class="theme-option" data-theme="noir">
351
- <div class="theme-preview" style="border-color: #888888; background: #111111;"></div>
352
- <span class="theme-name">Noir</span>
 
 
 
353
  </div>
354
- <div class="theme-option" data-theme="eclipse">
355
- <div class="theme-preview" style="border-color: #5c9eff; background: #0b1118;"></div>
356
- <span class="theme-name">Eclipse</span>
 
 
 
357
  </div>
358
- <div class="theme-option" data-theme="terminal">
359
- <div class="theme-preview" style="border-color: #00cc00; background: #0a0a0a;"></div>
360
- <span class="theme-name">Terminal</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  </div>
362
  </div>
363
- <input type="hidden" id="setting-theme-color" value="forest">
364
  </div>
365
 
366
  <div class="settings-actions">
 
215
  </div>
216
  <div class="settings-panel-body" id="settingsPanelBody">
217
  <div class="settings-body">
218
+ <!-- 1. Agent Models -->
219
+ <div class="settings-group">
220
+ <div class="settings-group-header">
221
+ <div class="widget-collapse-toggle"></div>
222
+ <span class="settings-group-title">Agent Models</span>
223
+ </div>
224
+ <div class="settings-group-body">
225
+ <div class="settings-section">
226
+ <div class="agent-models-grid" id="agentModelsGrid">
227
+ <!-- Generated dynamically from AGENT_REGISTRY -->
228
+ </div>
229
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  </div>
231
  </div>
232
 
233
+ <!-- 2. Models & Providers -->
234
+ <div class="settings-group collapsed">
235
+ <div class="settings-group-header">
236
+ <div class="widget-collapse-toggle collapsed"></div>
237
+ <span class="settings-group-title">Models & Providers</span>
238
+ </div>
239
+ <div class="settings-group-body">
240
+ <div class="settings-section">
241
+ <label class="settings-label">
242
+ <span class="label-text">PROVIDERS</span>
243
+ <span class="label-description">API endpoints for LLM services</span>
244
+ </label>
245
+ <div id="providers-list" class="settings-list"></div>
246
+ <button type="button" class="settings-add-btn" onclick="showProviderDialog()">+ Add Provider</button>
247
+ </div>
248
+ <div class="settings-section">
249
+ <label class="settings-label">
250
+ <span class="label-text">MODELS</span>
251
+ <span class="label-description">Models available from your providers</span>
252
+ </label>
253
+ <div id="models-list" class="settings-list"></div>
254
+ <button type="button" class="settings-add-btn" onclick="showModelDialog()">+ Add Model</button>
255
+ </div>
256
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
  </div>
258
 
259
+ <!-- 3. API Keys -->
260
+ <div class="settings-group collapsed">
261
+ <div class="settings-group-header">
262
+ <div class="widget-collapse-toggle collapsed"></div>
263
+ <span class="settings-group-title">API Keys</span>
264
+ </div>
265
+ <div class="settings-group-body">
266
+ <div class="settings-section">
267
+ <label class="settings-label">
268
+ <span class="label-text">E2B API KEY</span>
269
+ <span class="label-description">Required for code execution in CODE agents</span>
270
+ </label>
271
+ <input type="password" id="setting-e2b-key" class="settings-input" placeholder="Leave empty if not using code execution">
272
  </div>
273
+ <div class="settings-section">
274
+ <label class="settings-label">
275
+ <span class="label-text">SERPER API KEY</span>
276
+ <span class="label-description">Required for web search in RESEARCH agents</span>
277
+ </label>
278
+ <input type="password" id="setting-serper-key" class="settings-input" placeholder="Leave empty if not using research">
279
  </div>
280
+ <div class="settings-section">
281
+ <label class="settings-label">
282
+ <span class="label-text">HUGGINGFACE TOKEN</span>
283
+ <span class="label-description">Required for image generation in IMAGE agents</span>
284
+ </label>
285
+ <input type="password" id="setting-hf-token" class="settings-input" placeholder="Leave empty to use provider token">
286
  </div>
287
+ </div>
288
+ </div>
289
+
290
+ <!-- 4. Agent Settings -->
291
+ <div class="settings-group collapsed">
292
+ <div class="settings-group-header">
293
+ <div class="widget-collapse-toggle collapsed"></div>
294
+ <span class="settings-group-title">Agent Settings</span>
295
+ </div>
296
+ <div class="settings-group-body">
297
+ <div class="settings-section">
298
+ <label class="settings-label">
299
+ <span class="label-text">IMAGE GENERATION MODEL</span>
300
+ <span class="label-description">Model for text-to-image generation</span>
301
+ </label>
302
+ <select id="setting-image-gen-model" class="settings-select"></select>
303
  </div>
304
+ <div class="settings-section">
305
+ <label class="settings-label">
306
+ <span class="label-text">IMAGE EDIT MODEL</span>
307
+ <span class="label-description">Model for image-to-image editing</span>
308
+ </label>
309
+ <select id="setting-image-edit-model" class="settings-select"></select>
310
  </div>
311
+ <div class="settings-section">
312
+ <label class="settings-label">
313
+ <span class="label-text">RESEARCH SUB-AGENT MODEL</span>
314
+ <span class="label-description">Smaller/faster model for analyzing web pages during research</span>
315
+ </label>
316
+ <select id="setting-research-sub-agent-model" class="settings-select"></select>
317
  </div>
318
+ <div class="settings-section">
319
+ <label class="settings-label">
320
+ <span class="label-text">RESEARCH PARALLEL WORKERS</span>
321
+ <span class="label-description">Number of web pages to analyze in parallel (default: 8)</span>
322
+ </label>
323
+ <input type="number" id="setting-research-parallel-workers" class="settings-input" placeholder="8" min="1" max="20">
324
  </div>
325
+ <div class="settings-section">
326
+ <label class="settings-label">
327
+ <span class="label-text">RESEARCH MAX WEBSITES</span>
328
+ <span class="label-description">Max websites to analyze per session (default: 50)</span>
329
+ </label>
330
+ <input type="number" id="setting-research-max-websites" class="settings-input" placeholder="50" min="10" max="200">
331
  </div>
332
+ </div>
333
+ </div>
334
+
335
+ <!-- 5. Theme -->
336
+ <div class="settings-group collapsed">
337
+ <div class="settings-group-header">
338
+ <div class="widget-collapse-toggle collapsed"></div>
339
+ <span class="settings-group-title">Theme</span>
340
+ </div>
341
+ <div class="settings-group-body">
342
+ <div class="settings-section">
343
+ <div class="theme-color-picker" id="theme-color-picker">
344
+ <div class="theme-option" data-theme="forest">
345
+ <div class="theme-preview" style="border-color: #1b5e20; background: #e8f5e9;"></div>
346
+ <span class="theme-name">Forest</span>
347
+ </div>
348
+ <div class="theme-option" data-theme="sapphire">
349
+ <div class="theme-preview" style="border-color: #0d47a1; background: #e3f2fd;"></div>
350
+ <span class="theme-name">Sapphire</span>
351
+ </div>
352
+ <div class="theme-option" data-theme="ocean">
353
+ <div class="theme-preview" style="border-color: #00796b; background: #e0f2f1;"></div>
354
+ <span class="theme-name">Ocean</span>
355
+ </div>
356
+ <div class="theme-option" data-theme="midnight">
357
+ <div class="theme-preview" style="border-color: #283593; background: #e8eaf6;"></div>
358
+ <span class="theme-name">Midnight</span>
359
+ </div>
360
+ <div class="theme-option" data-theme="steel">
361
+ <div class="theme-preview" style="border-color: #455a64; background: #eceff1;"></div>
362
+ <span class="theme-name">Steel</span>
363
+ </div>
364
+ <div class="theme-option" data-theme="depths">
365
+ <div class="theme-preview" style="border-color: #01579b; background: #e3f2fd;"></div>
366
+ <span class="theme-name">Depths</span>
367
+ </div>
368
+ <div class="theme-option" data-theme="ember">
369
+ <div class="theme-preview" style="border-color: #b71c1c; background: #fbe9e7;"></div>
370
+ <span class="theme-name">Ember</span>
371
+ </div>
372
+ <div class="theme-option" data-theme="noir">
373
+ <div class="theme-preview" style="border-color: #888888; background: #111111;"></div>
374
+ <span class="theme-name">Noir</span>
375
+ </div>
376
+ <div class="theme-option" data-theme="eclipse">
377
+ <div class="theme-preview" style="border-color: #5c9eff; background: #0b1118;"></div>
378
+ <span class="theme-name">Eclipse</span>
379
+ </div>
380
+ <div class="theme-option" data-theme="terminal">
381
+ <div class="theme-preview" style="border-color: #00cc00; background: #0a0a0a;"></div>
382
+ <span class="theme-name">Terminal</span>
383
+ </div>
384
+ </div>
385
+ <input type="hidden" id="setting-theme-color" value="forest">
386
  </div>
387
  </div>
 
388
  </div>
389
 
390
  <div class="settings-actions">
frontend/style.css CHANGED
@@ -264,7 +264,7 @@ body {
264
 
265
  .menu-item:hover {
266
  background: var(--theme-accent);
267
- color: white;
268
  }
269
 
270
  /* Content Area */
@@ -388,9 +388,34 @@ body {
388
  }
389
 
390
  .sidebar-checkbox input[type="checkbox"] {
 
 
 
 
 
391
  margin: 0;
 
 
392
  cursor: pointer;
393
- accent-color: var(--theme-accent);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
394
  }
395
 
396
  /* Timeline Widget */
@@ -1540,11 +1565,48 @@ pre code [class*="token"] {
1540
 
1541
  .settings-body {
1542
  flex: 1;
1543
- padding: 40px;
1544
  overflow-y: auto;
1545
  max-width: 800px;
1546
  }
1547
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1548
  .settings-section {
1549
  margin-bottom: 16px;
1550
  }
@@ -1573,13 +1635,20 @@ pre code [class*="token"] {
1573
  width: 100%;
1574
  padding: 6px 8px;
1575
  border: 1px solid var(--border-primary);
1576
- border-radius: 3px;
1577
  font-family: inherit;
1578
  font-size: 11px;
1579
  background: var(--bg-secondary);
1580
  color: var(--text-primary);
1581
  outline: none;
1582
  transition: border-color 0.15s ease;
 
 
 
 
 
 
 
1583
  }
1584
 
1585
  .settings-input:focus {
@@ -1686,7 +1755,7 @@ pre code [class*="token"] {
1686
 
1687
  .settings-save-btn {
1688
  background: var(--theme-accent);
1689
- color: white;
1690
  border-color: var(--theme-accent);
1691
  }
1692
 
@@ -2138,7 +2207,7 @@ pre code [class*="token"] {
2138
  top: 0;
2139
  bottom: 0;
2140
  width: 1px;
2141
- background: #666;
2142
  }
2143
 
2144
  .query-tree {
@@ -2153,7 +2222,7 @@ pre code [class*="token"] {
2153
  top: 10px;
2154
  width: 12px;
2155
  height: 1px;
2156
- background: #666;
2157
  }
2158
 
2159
  .query-tree.last::after {
@@ -2210,7 +2279,7 @@ pre code [class*="token"] {
2210
  top: 0;
2211
  bottom: 0;
2212
  width: 1px;
2213
- background: #888;
2214
  }
2215
 
2216
  /* Tree structure for sources */
@@ -2226,7 +2295,7 @@ pre code [class*="token"] {
2226
  top: 10px;
2227
  width: 12px;
2228
  height: 1px;
2229
- background: #888;
2230
  }
2231
 
2232
  .source-tree-node.last::after {
@@ -2798,7 +2867,7 @@ pre code [class*="token"] {
2798
  margin: 0;
2799
  font-size: 10px;
2800
  font-weight: 500;
2801
- color: white;
2802
  text-transform: uppercase;
2803
  letter-spacing: 0.5px;
2804
  flex: 1;
@@ -2808,7 +2877,7 @@ pre code [class*="token"] {
2808
  background: none;
2809
  border: none;
2810
  font-size: 16px;
2811
- color: white;
2812
  cursor: pointer;
2813
  padding: 0;
2814
  width: 20px;
@@ -2977,14 +3046,15 @@ pre code [class*="token"] {
2977
  margin: 0;
2978
  font-size: 10px;
2979
  font-weight: 500;
2980
- color: white;
2981
  text-transform: uppercase;
2982
  letter-spacing: 0.5px;
2983
  }
2984
 
2985
  .settings-path {
2986
  font-size: 9px;
2987
- color: rgba(255, 255, 255, 0.6);
 
2988
  font-weight: 400;
2989
  overflow: hidden;
2990
  text-overflow: ellipsis;
@@ -2997,7 +3067,7 @@ pre code [class*="token"] {
2997
  background: none;
2998
  border: none;
2999
  font-size: 16px;
3000
- color: white;
3001
  cursor: pointer;
3002
  padding: 0;
3003
  width: 20px;
@@ -3133,7 +3203,7 @@ pre code [class*="token"] {
3133
  width: 100%;
3134
  padding: 5px 24px 5px 8px;
3135
  border: 1px solid var(--border-primary);
3136
- border-radius: 3px;
3137
  font-family: inherit;
3138
  font-size: 10px;
3139
  background: var(--bg-card);
@@ -3150,7 +3220,7 @@ pre code [class*="token"] {
3150
  }
3151
 
3152
  .settings-select:hover {
3153
- border-color: #bbb;
3154
  }
3155
 
3156
  .settings-select:focus {
@@ -3211,7 +3281,7 @@ pre code [class*="token"] {
3211
  margin: 0;
3212
  font-size: 10px;
3213
  font-weight: 500;
3214
- color: white;
3215
  text-transform: uppercase;
3216
  letter-spacing: 0.5px;
3217
  }
@@ -3220,7 +3290,7 @@ pre code [class*="token"] {
3220
  background: none;
3221
  border: none;
3222
  font-size: 14px;
3223
- color: white;
3224
  cursor: pointer;
3225
  padding: 0;
3226
  width: 20px;
@@ -3323,7 +3393,7 @@ pre code [class*="token"] {
3323
  margin: 0;
3324
  font-size: 10px;
3325
  font-weight: 500;
3326
- color: white;
3327
  text-transform: uppercase;
3328
  letter-spacing: 0.5px;
3329
  }
@@ -3340,7 +3410,8 @@ pre code [class*="token"] {
3340
  align-items: center;
3341
  gap: 4px;
3342
  font-size: 9px;
3343
- color: rgba(255, 255, 255, 0.8);
 
3344
  cursor: pointer;
3345
  }
3346
 
@@ -3349,16 +3420,18 @@ pre code [class*="token"] {
3349
  -webkit-appearance: none;
3350
  width: 12px;
3351
  height: 12px;
3352
- border: 1px solid rgba(255, 255, 255, 0.5);
3353
  border-radius: 2px;
3354
  background: transparent;
3355
  cursor: pointer;
3356
  position: relative;
 
3357
  }
3358
 
3359
  .files-show-hidden input[type="checkbox"]:checked {
3360
  background: var(--bg-card);
3361
- border-color: white;
 
3362
  }
3363
 
3364
  .files-show-hidden input[type="checkbox"]:checked::after {
@@ -3375,7 +3448,7 @@ pre code [class*="token"] {
3375
  .files-refresh-btn {
3376
  background: none;
3377
  border: none;
3378
- color: white;
3379
  font-size: 13px;
3380
  cursor: pointer;
3381
  padding: 2px 4px;
@@ -3392,7 +3465,7 @@ pre code [class*="token"] {
3392
  background: none;
3393
  border: none;
3394
  font-size: 16px;
3395
- color: white;
3396
  cursor: pointer;
3397
  padding: 0;
3398
  width: 20px;
@@ -3720,7 +3793,7 @@ pre code [class*="token"] {
3720
  transform: translateY(-50%);
3721
  background: transparent;
3722
  border: none;
3723
- color: #bbb;
3724
  font-size: 13px;
3725
  cursor: pointer;
3726
  padding: 0;
@@ -3787,7 +3860,7 @@ pre code [class*="token"] {
3787
  }
3788
 
3789
  .session-existing select:hover {
3790
- border-color: #bbb;
3791
  }
3792
 
3793
  .session-existing select:focus {
@@ -3831,7 +3904,7 @@ pre code [class*="token"] {
3831
  margin: 0;
3832
  font-size: 10px;
3833
  font-weight: 500;
3834
- color: white;
3835
  text-transform: uppercase;
3836
  letter-spacing: 0.5px;
3837
  }
@@ -3840,7 +3913,7 @@ pre code [class*="token"] {
3840
  background: none;
3841
  border: none;
3842
  font-size: 16px;
3843
- color: white;
3844
  cursor: pointer;
3845
  padding: 0;
3846
  width: 20px;
@@ -3909,7 +3982,7 @@ pre code [class*="token"] {
3909
  .sessions-new-input button:not(.session-regenerate-btn) {
3910
  padding: 5px 10px;
3911
  background: var(--theme-accent);
3912
- color: white;
3913
  border: none;
3914
  border-radius: 3px;
3915
  font-size: 10px;
@@ -4117,7 +4190,7 @@ pre code [class*="token"] {
4117
  height: 400px;
4118
  border: 1px solid var(--border-primary);
4119
  border-radius: 4px;
4120
- background: #fff;
4121
  }
4122
 
4123
  .search-results-content {
 
264
 
265
  .menu-item:hover {
266
  background: var(--theme-accent);
267
+ color: var(--bg-primary);
268
  }
269
 
270
  /* Content Area */
 
388
  }
389
 
390
  .sidebar-checkbox input[type="checkbox"] {
391
+ -webkit-appearance: none;
392
+ -moz-appearance: none;
393
+ appearance: none;
394
+ width: 12px;
395
+ height: 12px;
396
  margin: 0;
397
+ border: 1px solid var(--text-muted);
398
+ background: transparent;
399
  cursor: pointer;
400
+ position: relative;
401
+ flex-shrink: 0;
402
+ }
403
+
404
+ .sidebar-checkbox input[type="checkbox"]:checked {
405
+ background: var(--theme-accent);
406
+ border-color: var(--theme-accent);
407
+ }
408
+
409
+ .sidebar-checkbox input[type="checkbox"]:checked::after {
410
+ content: '';
411
+ position: absolute;
412
+ left: 3px;
413
+ top: 1px;
414
+ width: 3px;
415
+ height: 6px;
416
+ border: solid var(--bg-primary);
417
+ border-width: 0 1.5px 1.5px 0;
418
+ transform: rotate(45deg);
419
  }
420
 
421
  /* Timeline Widget */
 
1565
 
1566
  .settings-body {
1567
  flex: 1;
1568
+ padding: 16px;
1569
  overflow-y: auto;
1570
  max-width: 800px;
1571
  }
1572
 
1573
+ /* Collapsible settings groups */
1574
+ .settings-group {
1575
+ margin-bottom: 6px;
1576
+ }
1577
+
1578
+ .settings-group-header {
1579
+ display: flex;
1580
+ align-items: center;
1581
+ gap: 8px;
1582
+ padding: 6px 12px;
1583
+ background: var(--theme-accent);
1584
+ cursor: pointer;
1585
+ user-select: none;
1586
+ }
1587
+
1588
+ .settings-group-header:hover {
1589
+ opacity: 0.9;
1590
+ }
1591
+
1592
+ .settings-group-title {
1593
+ font-size: 10px;
1594
+ font-weight: 600;
1595
+ text-transform: uppercase;
1596
+ letter-spacing: 0.5px;
1597
+ color: var(--bg-primary);
1598
+ }
1599
+
1600
+ .settings-group-body {
1601
+ padding: 12px 12px 4px;
1602
+ border: 1px solid var(--border-primary);
1603
+ border-top: none;
1604
+ }
1605
+
1606
+ .settings-group.collapsed .settings-group-body {
1607
+ display: none;
1608
+ }
1609
+
1610
  .settings-section {
1611
  margin-bottom: 16px;
1612
  }
 
1635
  width: 100%;
1636
  padding: 6px 8px;
1637
  border: 1px solid var(--border-primary);
1638
+ border-radius: 0;
1639
  font-family: inherit;
1640
  font-size: 11px;
1641
  background: var(--bg-secondary);
1642
  color: var(--text-primary);
1643
  outline: none;
1644
  transition: border-color 0.15s ease;
1645
+ -moz-appearance: textfield;
1646
+ }
1647
+
1648
+ .settings-input::-webkit-outer-spin-button,
1649
+ .settings-input::-webkit-inner-spin-button {
1650
+ -webkit-appearance: none;
1651
+ margin: 0;
1652
  }
1653
 
1654
  .settings-input:focus {
 
1755
 
1756
  .settings-save-btn {
1757
  background: var(--theme-accent);
1758
+ color: var(--bg-primary);
1759
  border-color: var(--theme-accent);
1760
  }
1761
 
 
2207
  top: 0;
2208
  bottom: 0;
2209
  width: 1px;
2210
+ background: var(--border-primary);
2211
  }
2212
 
2213
  .query-tree {
 
2222
  top: 10px;
2223
  width: 12px;
2224
  height: 1px;
2225
+ background: var(--border-primary);
2226
  }
2227
 
2228
  .query-tree.last::after {
 
2279
  top: 0;
2280
  bottom: 0;
2281
  width: 1px;
2282
+ background: var(--border-primary);
2283
  }
2284
 
2285
  /* Tree structure for sources */
 
2295
  top: 10px;
2296
  width: 12px;
2297
  height: 1px;
2298
+ background: var(--border-primary);
2299
  }
2300
 
2301
  .source-tree-node.last::after {
 
2867
  margin: 0;
2868
  font-size: 10px;
2869
  font-weight: 500;
2870
+ color: var(--bg-primary);
2871
  text-transform: uppercase;
2872
  letter-spacing: 0.5px;
2873
  flex: 1;
 
2877
  background: none;
2878
  border: none;
2879
  font-size: 16px;
2880
+ color: var(--bg-primary);
2881
  cursor: pointer;
2882
  padding: 0;
2883
  width: 20px;
 
3046
  margin: 0;
3047
  font-size: 10px;
3048
  font-weight: 500;
3049
+ color: var(--bg-primary);
3050
  text-transform: uppercase;
3051
  letter-spacing: 0.5px;
3052
  }
3053
 
3054
  .settings-path {
3055
  font-size: 9px;
3056
+ color: var(--bg-primary);
3057
+ opacity: 0.6;
3058
  font-weight: 400;
3059
  overflow: hidden;
3060
  text-overflow: ellipsis;
 
3067
  background: none;
3068
  border: none;
3069
  font-size: 16px;
3070
+ color: var(--bg-primary);
3071
  cursor: pointer;
3072
  padding: 0;
3073
  width: 20px;
 
3203
  width: 100%;
3204
  padding: 5px 24px 5px 8px;
3205
  border: 1px solid var(--border-primary);
3206
+ border-radius: 0;
3207
  font-family: inherit;
3208
  font-size: 10px;
3209
  background: var(--bg-card);
 
3220
  }
3221
 
3222
  .settings-select:hover {
3223
+ border-color: var(--theme-accent);
3224
  }
3225
 
3226
  .settings-select:focus {
 
3281
  margin: 0;
3282
  font-size: 10px;
3283
  font-weight: 500;
3284
+ color: var(--bg-primary);
3285
  text-transform: uppercase;
3286
  letter-spacing: 0.5px;
3287
  }
 
3290
  background: none;
3291
  border: none;
3292
  font-size: 14px;
3293
+ color: var(--bg-primary);
3294
  cursor: pointer;
3295
  padding: 0;
3296
  width: 20px;
 
3393
  margin: 0;
3394
  font-size: 10px;
3395
  font-weight: 500;
3396
+ color: var(--bg-primary);
3397
  text-transform: uppercase;
3398
  letter-spacing: 0.5px;
3399
  }
 
3410
  align-items: center;
3411
  gap: 4px;
3412
  font-size: 9px;
3413
+ color: var(--bg-primary);
3414
+ opacity: 0.8;
3415
  cursor: pointer;
3416
  }
3417
 
 
3420
  -webkit-appearance: none;
3421
  width: 12px;
3422
  height: 12px;
3423
+ border: 1px solid var(--bg-primary);
3424
  border-radius: 2px;
3425
  background: transparent;
3426
  cursor: pointer;
3427
  position: relative;
3428
+ opacity: 0.5;
3429
  }
3430
 
3431
  .files-show-hidden input[type="checkbox"]:checked {
3432
  background: var(--bg-card);
3433
+ border-color: var(--bg-primary);
3434
+ opacity: 1;
3435
  }
3436
 
3437
  .files-show-hidden input[type="checkbox"]:checked::after {
 
3448
  .files-refresh-btn {
3449
  background: none;
3450
  border: none;
3451
+ color: var(--bg-primary);
3452
  font-size: 13px;
3453
  cursor: pointer;
3454
  padding: 2px 4px;
 
3465
  background: none;
3466
  border: none;
3467
  font-size: 16px;
3468
+ color: var(--bg-primary);
3469
  cursor: pointer;
3470
  padding: 0;
3471
  width: 20px;
 
3793
  transform: translateY(-50%);
3794
  background: transparent;
3795
  border: none;
3796
+ color: var(--text-muted);
3797
  font-size: 13px;
3798
  cursor: pointer;
3799
  padding: 0;
 
3860
  }
3861
 
3862
  .session-existing select:hover {
3863
+ border-color: var(--theme-accent);
3864
  }
3865
 
3866
  .session-existing select:focus {
 
3904
  margin: 0;
3905
  font-size: 10px;
3906
  font-weight: 500;
3907
+ color: var(--bg-primary);
3908
  text-transform: uppercase;
3909
  letter-spacing: 0.5px;
3910
  }
 
3913
  background: none;
3914
  border: none;
3915
  font-size: 16px;
3916
+ color: var(--bg-primary);
3917
  cursor: pointer;
3918
  padding: 0;
3919
  width: 20px;
 
3982
  .sessions-new-input button:not(.session-regenerate-btn) {
3983
  padding: 5px 10px;
3984
  background: var(--theme-accent);
3985
+ color: var(--bg-primary);
3986
  border: none;
3987
  border-radius: 3px;
3988
  font-size: 10px;
 
4190
  height: 400px;
4191
  border: 1px solid var(--border-primary);
4192
  border-radius: 4px;
4193
+ background: var(--bg-primary);
4194
  }
4195
 
4196
  .search-results-content {