@auxiora/dashboard 1.0.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/router.d.ts.map +1 -1
  2. package/dist/router.js +195 -49
  3. package/dist/router.js.map +1 -1
  4. package/dist/types.d.ts +66 -0
  5. package/dist/types.d.ts.map +1 -1
  6. package/dist/types.js.map +1 -1
  7. package/package.json +10 -4
  8. package/dist-ui/assets/index-BfY0i5jw.css +0 -1
  9. package/dist-ui/assets/index-CXpk9mvw.js +0 -60
  10. package/dist-ui/icon.svg +0 -59
  11. package/dist-ui/index.html +0 -20
  12. package/src/auth.ts +0 -83
  13. package/src/cloud-types.ts +0 -63
  14. package/src/index.ts +0 -5
  15. package/src/router.ts +0 -2494
  16. package/src/types.ts +0 -269
  17. package/tests/auth.test.ts +0 -51
  18. package/tests/cloud-router.test.ts +0 -249
  19. package/tests/desktop-router.test.ts +0 -151
  20. package/tests/router.test.ts +0 -388
  21. package/tests/trust-router.test.ts +0 -170
  22. package/tsconfig.json +0 -12
  23. package/tsconfig.tsbuildinfo +0 -1
  24. package/ui/index.html +0 -19
  25. package/ui/node_modules/.bin/browserslist +0 -17
  26. package/ui/node_modules/.bin/tsc +0 -17
  27. package/ui/node_modules/.bin/tsserver +0 -17
  28. package/ui/node_modules/.bin/vite +0 -17
  29. package/ui/package.json +0 -23
  30. package/ui/public/icon.svg +0 -59
  31. package/ui/src/App.tsx +0 -63
  32. package/ui/src/api.ts +0 -238
  33. package/ui/src/components/ActivityFeed.tsx +0 -123
  34. package/ui/src/components/BehaviorHealth.tsx +0 -105
  35. package/ui/src/components/DataTable.tsx +0 -39
  36. package/ui/src/components/Layout.tsx +0 -160
  37. package/ui/src/components/PasswordStrength.tsx +0 -31
  38. package/ui/src/components/SetupProgress.tsx +0 -26
  39. package/ui/src/components/StatusBadge.tsx +0 -12
  40. package/ui/src/components/ThemeSelector.tsx +0 -39
  41. package/ui/src/contexts/ThemeContext.tsx +0 -58
  42. package/ui/src/hooks/useApi.ts +0 -19
  43. package/ui/src/hooks/usePolling.ts +0 -8
  44. package/ui/src/main.tsx +0 -16
  45. package/ui/src/pages/AuditLog.tsx +0 -36
  46. package/ui/src/pages/Behaviors.tsx +0 -426
  47. package/ui/src/pages/Chat.tsx +0 -688
  48. package/ui/src/pages/Login.tsx +0 -64
  49. package/ui/src/pages/Overview.tsx +0 -56
  50. package/ui/src/pages/Sessions.tsx +0 -26
  51. package/ui/src/pages/SettingsAmbient.tsx +0 -185
  52. package/ui/src/pages/SettingsConnections.tsx +0 -201
  53. package/ui/src/pages/SettingsNotifications.tsx +0 -241
  54. package/ui/src/pages/SetupAppearance.tsx +0 -45
  55. package/ui/src/pages/SetupChannels.tsx +0 -143
  56. package/ui/src/pages/SetupComplete.tsx +0 -31
  57. package/ui/src/pages/SetupConnections.tsx +0 -80
  58. package/ui/src/pages/SetupDashboardPassword.tsx +0 -50
  59. package/ui/src/pages/SetupIdentity.tsx +0 -68
  60. package/ui/src/pages/SetupPersonality.tsx +0 -78
  61. package/ui/src/pages/SetupProvider.tsx +0 -65
  62. package/ui/src/pages/SetupVault.tsx +0 -50
  63. package/ui/src/pages/SetupWelcome.tsx +0 -19
  64. package/ui/src/pages/UnlockVault.tsx +0 -56
  65. package/ui/src/pages/Webhooks.tsx +0 -158
  66. package/ui/src/pages/settings/Appearance.tsx +0 -63
  67. package/ui/src/pages/settings/Channels.tsx +0 -138
  68. package/ui/src/pages/settings/Identity.tsx +0 -61
  69. package/ui/src/pages/settings/Personality.tsx +0 -54
  70. package/ui/src/pages/settings/PersonalityEditor.tsx +0 -577
  71. package/ui/src/pages/settings/Provider.tsx +0 -537
  72. package/ui/src/pages/settings/Security.tsx +0 -111
  73. package/ui/src/styles/global.css +0 -2308
  74. package/ui/src/styles/themes/index.css +0 -7
  75. package/ui/src/styles/themes/monolith.css +0 -125
  76. package/ui/src/styles/themes/nebula.css +0 -90
  77. package/ui/src/styles/themes/neon.css +0 -149
  78. package/ui/src/styles/themes/polar.css +0 -151
  79. package/ui/src/styles/themes/signal.css +0 -163
  80. package/ui/src/styles/themes/terra.css +0 -146
  81. package/ui/tsconfig.json +0 -14
  82. package/ui/vite.config.ts +0 -20
@@ -1,2308 +0,0 @@
1
- /* ═══════════════════════════════════════════════════════
2
- AUXIORA — Electric Minimal
3
- Swiss poster meets command center.
4
- One accent. Maximum contrast. Zero noise.
5
- ═══════════════════════════════════════════════════════ */
6
-
7
- @import url('https://fonts.googleapis.com/css2?family=Syne:wght@600;700;800&family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;1,9..40,400&family=JetBrains+Mono:wght@400;500&display=swap');
8
- @import './themes/index.css';
9
-
10
- :root {
11
- --bg-primary: #0a0a0a;
12
- --bg-secondary: #0f0f0f;
13
- --bg-card: #141414;
14
- --bg-hover: #1a1a1a;
15
- --text-primary: #f5f5f5;
16
- --text-secondary: #6b6b6b;
17
- --accent: #7c3aed;
18
- --accent-hover: #6d28d9;
19
- --accent-glow: rgba(124, 58, 237, 0.12);
20
- --accent-subtle: rgba(124, 58, 237, 0.08);
21
- --danger: #ef4444;
22
- --danger-hover: #dc2626;
23
- --success: #22c55e;
24
- --warning: #eab308;
25
- --border: rgba(255, 255, 255, 0.06);
26
- --border-strong: rgba(255, 255, 255, 0.1);
27
- --radius: 8px;
28
- --radius-lg: 12px;
29
- --font-display: 'Syne', sans-serif;
30
- --font-body: 'DM Sans', sans-serif;
31
- --font-mono: 'JetBrains Mono', monospace;
32
- --transition-fast: 120ms ease;
33
- --transition-base: 180ms ease;
34
- }
35
-
36
- /* ── Reset ─────────────────────────────────────── */
37
-
38
- * { margin: 0; padding: 0; box-sizing: border-box; }
39
-
40
- ::selection {
41
- background: var(--accent);
42
- color: white;
43
- }
44
-
45
- ::-webkit-scrollbar { width: 6px; height: 6px; }
46
- ::-webkit-scrollbar-track { background: transparent; }
47
- ::-webkit-scrollbar-thumb {
48
- background: rgba(255, 255, 255, 0.08);
49
- border-radius: 3px;
50
- }
51
- ::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.14); }
52
-
53
- body {
54
- font-family: var(--font-body);
55
- background: var(--bg-primary);
56
- color: var(--text-primary);
57
- line-height: 1.55;
58
- font-size: 14px;
59
- -webkit-font-smoothing: antialiased;
60
- -moz-osx-font-smoothing: grayscale;
61
- }
62
-
63
- /* ── Layout Shell ──────────────────────────────── */
64
-
65
- .layout {
66
- display: flex;
67
- min-height: 100vh;
68
- }
69
-
70
- /* ── Sidebar ───────────────────────────────────── */
71
-
72
- .sidebar {
73
- width: 220px;
74
- background: var(--bg-secondary);
75
- padding: 2rem 0.75rem 1.25rem;
76
- display: flex;
77
- flex-direction: column;
78
- border-right: 1px solid var(--border);
79
- flex-shrink: 0;
80
- }
81
-
82
- .sidebar-header h1 {
83
- font-family: var(--font-display);
84
- font-size: 1.1rem;
85
- font-weight: 800;
86
- color: var(--text-primary);
87
- margin-bottom: 2rem;
88
- padding: 0 0.75rem;
89
- letter-spacing: -0.02em;
90
- }
91
-
92
- .sidebar-header h1::before {
93
- content: '';
94
- display: inline-block;
95
- width: 8px;
96
- height: 8px;
97
- background: var(--accent);
98
- border-radius: 2px;
99
- margin-right: 0.5rem;
100
- vertical-align: middle;
101
- position: relative;
102
- top: -1px;
103
- }
104
-
105
- .nav-list {
106
- list-style: none;
107
- flex: 1;
108
- overflow-y: auto;
109
- }
110
-
111
- .nav-group { margin-bottom: 1.5rem; }
112
-
113
- .nav-group-label {
114
- font-family: var(--font-mono);
115
- font-size: 0.6rem;
116
- font-weight: 500;
117
- text-transform: uppercase;
118
- letter-spacing: 0.12em;
119
- color: var(--text-secondary);
120
- padding: 0 0.75rem;
121
- margin-bottom: 0.35rem;
122
- }
123
-
124
- .nav-link {
125
- display: flex;
126
- align-items: center;
127
- gap: 0.5rem;
128
- padding: 0.45rem 0.75rem;
129
- color: var(--text-secondary);
130
- text-decoration: none;
131
- border-radius: 6px;
132
- margin-bottom: 1px;
133
- font-size: 0.875rem;
134
- font-weight: 400;
135
- transition: color var(--transition-fast), background var(--transition-fast);
136
- }
137
-
138
- .nav-link:hover {
139
- color: var(--text-primary);
140
- background: var(--bg-hover);
141
- }
142
-
143
- .nav-link.active {
144
- color: var(--text-primary);
145
- background: var(--accent-subtle);
146
- font-weight: 500;
147
- }
148
-
149
- .nav-link.active::before {
150
- content: '';
151
- width: 3px;
152
- height: 16px;
153
- background: var(--accent);
154
- border-radius: 2px;
155
- margin-right: 0.25rem;
156
- flex-shrink: 0;
157
- }
158
-
159
- /* Channel status dots */
160
- .channel-dot {
161
- width: 6px;
162
- height: 6px;
163
- border-radius: 50%;
164
- flex-shrink: 0;
165
- margin-left: auto;
166
- transition: background var(--transition-base);
167
- }
168
-
169
- .channel-dot.connected { background: var(--success); }
170
- .channel-dot.disconnected { background: rgba(255, 255, 255, 0.1); }
171
-
172
- /* Status bar (sidebar) */
173
- .status-bar {
174
- padding: 0.75rem;
175
- background: var(--bg-card);
176
- border-radius: var(--radius);
177
- margin-bottom: 1rem;
178
- font-size: 0.75rem;
179
- border: 1px solid var(--border);
180
- }
181
-
182
- .status-item { margin-bottom: 0.2rem; color: var(--text-secondary); }
183
-
184
- /* Logout */
185
- .logout-btn {
186
- padding: 0.5rem 0.75rem;
187
- background: transparent;
188
- border: 1px solid var(--border);
189
- color: var(--text-secondary);
190
- border-radius: 6px;
191
- cursor: pointer;
192
- font-family: var(--font-body);
193
- font-size: 0.8rem;
194
- transition: all var(--transition-fast);
195
- }
196
-
197
- .logout-btn:hover {
198
- color: var(--danger);
199
- border-color: rgba(239, 68, 68, 0.3);
200
- background: rgba(239, 68, 68, 0.06);
201
- }
202
-
203
- /* ── Main Content ──────────────────────────────── */
204
-
205
- .content {
206
- flex: 1;
207
- padding: 2.5rem 3rem;
208
- overflow-y: auto;
209
- max-height: 100vh;
210
- }
211
-
212
- .page h2 {
213
- font-family: var(--font-display);
214
- font-size: 1.75rem;
215
- font-weight: 700;
216
- letter-spacing: -0.03em;
217
- margin-bottom: 1.75rem;
218
- color: var(--text-primary);
219
- }
220
-
221
- /* ── Status Grid (Overview) ────────────────────── */
222
-
223
- .status-grid {
224
- display: grid;
225
- grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
226
- gap: 1px;
227
- margin-bottom: 2rem;
228
- background: var(--border);
229
- border-radius: var(--radius-lg);
230
- overflow: hidden;
231
- border: 1px solid var(--border);
232
- }
233
-
234
- .status-card {
235
- background: var(--bg-card);
236
- padding: 1.25rem 1.5rem;
237
- }
238
-
239
- .status-card h3 {
240
- font-family: var(--font-mono);
241
- font-size: 0.65rem;
242
- font-weight: 500;
243
- text-transform: uppercase;
244
- letter-spacing: 0.1em;
245
- color: var(--text-secondary);
246
- margin-bottom: 0.6rem;
247
- }
248
-
249
- .status-card .value {
250
- font-family: var(--font-display);
251
- font-size: 1.5rem;
252
- font-weight: 700;
253
- color: var(--text-primary);
254
- letter-spacing: -0.02em;
255
- }
256
-
257
- .status-card .sub {
258
- font-size: 0.75rem;
259
- color: var(--text-secondary);
260
- margin-top: 0.15rem;
261
- }
262
-
263
- /* ── Mission Control ──────────────────────────────── */
264
-
265
- .mc-columns {
266
- display: grid;
267
- grid-template-columns: 2fr 3fr;
268
- gap: 1.5rem;
269
- min-height: 0;
270
- }
271
-
272
- .mc-section-title {
273
- font-family: var(--font-mono);
274
- font-size: 0.65rem;
275
- font-weight: 500;
276
- text-transform: uppercase;
277
- letter-spacing: 0.1em;
278
- color: var(--text-secondary);
279
- margin-bottom: 1rem;
280
- }
281
-
282
- /* Activity Feed */
283
- .activity-feed-list {
284
- max-height: 60vh;
285
- overflow-y: auto;
286
- display: flex;
287
- flex-direction: column;
288
- gap: 2px;
289
- }
290
-
291
- .activity-item {
292
- display: flex;
293
- align-items: center;
294
- gap: 0.6rem;
295
- padding: 0.5rem 0.75rem;
296
- border-radius: var(--radius);
297
- background: var(--bg-card);
298
- font-size: 0.82rem;
299
- animation: mc-fade-in var(--transition-base);
300
- }
301
-
302
- .activity-dot {
303
- width: 6px;
304
- height: 6px;
305
- border-radius: 50%;
306
- flex-shrink: 0;
307
- }
308
-
309
- .activity-label {
310
- flex: 1;
311
- color: var(--text-primary);
312
- white-space: nowrap;
313
- overflow: hidden;
314
- text-overflow: ellipsis;
315
- }
316
-
317
- .activity-time {
318
- font-family: var(--font-mono);
319
- font-size: 0.7rem;
320
- color: var(--text-secondary);
321
- flex-shrink: 0;
322
- }
323
-
324
- .activity-empty {
325
- color: var(--text-secondary);
326
- font-size: 0.82rem;
327
- padding: 1rem 0.75rem;
328
- }
329
-
330
- /* Behavior Health */
331
- .bh-list {
332
- display: flex;
333
- flex-direction: column;
334
- gap: 2px;
335
- }
336
-
337
- .bh-card {
338
- background: var(--bg-card);
339
- padding: 0.75rem;
340
- border-radius: var(--radius);
341
- }
342
-
343
- .bh-card-header {
344
- display: flex;
345
- align-items: center;
346
- gap: 0.5rem;
347
- }
348
-
349
- .bh-dot {
350
- width: 8px;
351
- height: 8px;
352
- border-radius: 50%;
353
- flex-shrink: 0;
354
- }
355
-
356
- .bh-action {
357
- flex: 1;
358
- font-size: 0.82rem;
359
- color: var(--text-primary);
360
- white-space: nowrap;
361
- overflow: hidden;
362
- text-overflow: ellipsis;
363
- }
364
-
365
- .bh-type-badge {
366
- font-family: var(--font-mono);
367
- font-size: 0.6rem;
368
- text-transform: uppercase;
369
- letter-spacing: 0.08em;
370
- color: var(--text-secondary);
371
- background: var(--bg-hover);
372
- padding: 0.15rem 0.4rem;
373
- border-radius: 3px;
374
- flex-shrink: 0;
375
- }
376
-
377
- .bh-card-meta {
378
- display: flex;
379
- gap: 0.75rem;
380
- margin-top: 0.35rem;
381
- font-size: 0.72rem;
382
- }
383
-
384
- .bh-health-label {
385
- font-weight: 500;
386
- }
387
-
388
- .bh-stat {
389
- color: var(--text-secondary);
390
- }
391
-
392
- .bh-result {
393
- margin-top: 0.35rem;
394
- font-size: 0.72rem;
395
- color: var(--text-secondary);
396
- line-height: 1.4;
397
- }
398
-
399
- .bh-empty {
400
- color: var(--text-secondary);
401
- font-size: 0.82rem;
402
- padding: 1rem 0;
403
- }
404
-
405
- @keyframes mc-fade-in {
406
- from { opacity: 0; transform: translateY(-4px); }
407
- to { opacity: 1; transform: translateY(0); }
408
- }
409
-
410
- /* ── Data Tables ───────────────────────────────── */
411
-
412
- .data-table {
413
- width: 100%;
414
- border-collapse: collapse;
415
- border-radius: var(--radius-lg);
416
- overflow: hidden;
417
- border: 1px solid var(--border);
418
- }
419
-
420
- .data-table th {
421
- text-align: left;
422
- padding: 0.75rem 1.25rem;
423
- background: var(--bg-secondary);
424
- color: var(--text-secondary);
425
- font-family: var(--font-mono);
426
- font-weight: 500;
427
- font-size: 0.65rem;
428
- text-transform: uppercase;
429
- letter-spacing: 0.1em;
430
- border-bottom: 1px solid var(--border);
431
- }
432
-
433
- .data-table td {
434
- padding: 0.7rem 1.25rem;
435
- border-top: 1px solid var(--border);
436
- font-size: 0.875rem;
437
- background: var(--bg-card);
438
- }
439
-
440
- .data-table tbody tr {
441
- transition: background var(--transition-fast);
442
- }
443
-
444
- .data-table tbody tr:hover td {
445
- background: var(--bg-hover);
446
- }
447
-
448
- .empty-row {
449
- text-align: center;
450
- color: var(--text-secondary);
451
- padding: 3rem !important;
452
- font-size: 0.85rem;
453
- }
454
-
455
- .actions-cell { white-space: nowrap; }
456
-
457
- /* ── Badges ────────────────────────────────────── */
458
-
459
- .badge {
460
- display: inline-block;
461
- padding: 0.15rem 0.5rem;
462
- border-radius: 4px;
463
- font-family: var(--font-mono);
464
- font-size: 0.65rem;
465
- font-weight: 500;
466
- letter-spacing: 0.03em;
467
- text-transform: uppercase;
468
- }
469
-
470
- .badge-green { background: rgba(34, 197, 94, 0.1); color: var(--success); }
471
- .badge-yellow { background: rgba(234, 179, 8, 0.1); color: var(--warning); }
472
- .badge-red { background: rgba(239, 68, 68, 0.1); color: var(--danger); }
473
- .badge-gray { background: rgba(255, 255, 255, 0.04); color: var(--text-secondary); }
474
-
475
- .badge-primary { background: var(--accent-glow); color: var(--accent); }
476
- .badge-fallback { background: rgba(234, 179, 8, 0.1); color: var(--warning); }
477
-
478
- .badge-pill {
479
- display: inline-block;
480
- padding: 0.1rem 0.4rem;
481
- border-radius: 4px;
482
- font-family: var(--font-mono);
483
- font-size: 0.6rem;
484
- font-weight: 500;
485
- text-transform: uppercase;
486
- letter-spacing: 0.03em;
487
- }
488
-
489
- /* ── Buttons ───────────────────────────────────── */
490
-
491
- .btn-sm {
492
- padding: 0.3rem 0.7rem;
493
- border: 1px solid var(--border-strong);
494
- background: transparent;
495
- color: var(--text-primary);
496
- border-radius: 6px;
497
- cursor: pointer;
498
- font-family: var(--font-body);
499
- font-size: 0.8rem;
500
- margin-right: 0.25rem;
501
- transition: all var(--transition-fast);
502
- }
503
-
504
- .btn-sm:hover {
505
- border-color: var(--accent);
506
- color: var(--accent);
507
- background: var(--accent-subtle);
508
- }
509
-
510
- .btn-danger { color: var(--danger); border-color: rgba(239, 68, 68, 0.3); }
511
- .btn-danger:hover { background: rgba(239, 68, 68, 0.08); border-color: var(--danger); }
512
-
513
- /* ── Filters ───────────────────────────────────── */
514
-
515
- .filters { margin-bottom: 1rem; }
516
-
517
- .filters select {
518
- padding: 0.4rem 0.75rem;
519
- background: var(--bg-card);
520
- border: 1px solid var(--border-strong);
521
- color: var(--text-primary);
522
- border-radius: 6px;
523
- font-family: var(--font-body);
524
- font-size: 0.85rem;
525
- cursor: pointer;
526
- transition: border-color var(--transition-fast);
527
- }
528
-
529
- .filters select:hover { border-color: var(--accent); }
530
- .filters select:focus { outline: none; border-color: var(--accent); }
531
-
532
- /* ── Login ─────────────────────────────────────── */
533
-
534
- .login-page {
535
- display: flex;
536
- justify-content: center;
537
- align-items: center;
538
- min-height: 100vh;
539
- background: var(--bg-primary);
540
- }
541
-
542
- .login-card {
543
- background: var(--bg-card);
544
- padding: 3rem;
545
- border-radius: var(--radius-lg);
546
- width: 380px;
547
- border: 1px solid var(--border);
548
- animation: cardEnter 0.4s ease both;
549
- }
550
-
551
- .login-card h1 {
552
- font-family: var(--font-display);
553
- font-size: 1.4rem;
554
- font-weight: 800;
555
- margin-bottom: 2rem;
556
- color: var(--text-primary);
557
- letter-spacing: -0.02em;
558
- }
559
-
560
- .login-card h1::before {
561
- content: '';
562
- display: block;
563
- width: 24px;
564
- height: 4px;
565
- background: var(--accent);
566
- border-radius: 2px;
567
- margin-bottom: 1rem;
568
- }
569
-
570
- .login-card input {
571
- width: 100%;
572
- padding: 0.7rem 0.85rem;
573
- margin-bottom: 1rem;
574
- background: var(--bg-primary);
575
- border: 1px solid var(--border-strong);
576
- color: var(--text-primary);
577
- border-radius: 6px;
578
- font-family: var(--font-body);
579
- font-size: 0.875rem;
580
- transition: border-color var(--transition-fast);
581
- }
582
-
583
- .login-card input:focus {
584
- outline: none;
585
- border-color: var(--accent);
586
- box-shadow: 0 0 0 3px var(--accent-glow);
587
- }
588
-
589
- .login-card input::placeholder { color: var(--text-secondary); }
590
-
591
- .login-card button {
592
- width: 100%;
593
- padding: 0.7rem;
594
- background: var(--accent);
595
- border: none;
596
- color: white;
597
- border-radius: 6px;
598
- cursor: pointer;
599
- font-family: var(--font-body);
600
- font-weight: 600;
601
- font-size: 0.875rem;
602
- transition: background var(--transition-fast), transform var(--transition-fast);
603
- }
604
-
605
- .login-card button:hover { background: var(--accent-hover); }
606
- .login-card button:active { transform: scale(0.98); }
607
- .login-card button:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }
608
-
609
- .error {
610
- color: var(--danger);
611
- font-size: 0.8rem;
612
- margin-top: 0.5rem;
613
- }
614
-
615
- /* ── Setup Wizard ──────────────────────────────── */
616
-
617
- .setup-page {
618
- display: flex;
619
- flex-direction: column;
620
- align-items: center;
621
- justify-content: center;
622
- min-height: 100vh;
623
- padding: 2rem;
624
- background: var(--bg-primary);
625
- }
626
-
627
- .setup-card {
628
- background: var(--bg-card);
629
- padding: 2.5rem;
630
- border-radius: var(--radius-lg);
631
- width: 100%;
632
- max-width: 560px;
633
- border: 1px solid var(--border);
634
- animation: cardEnter 0.35s ease both;
635
- }
636
-
637
- .setup-card h1 {
638
- font-family: var(--font-display);
639
- font-size: 1.5rem;
640
- font-weight: 700;
641
- color: var(--text-primary);
642
- margin-bottom: 0.4rem;
643
- letter-spacing: -0.02em;
644
- }
645
-
646
- .setup-card p.subtitle {
647
- color: var(--text-secondary);
648
- margin-bottom: 1.5rem;
649
- font-size: 0.9rem;
650
- }
651
-
652
- .setup-card label {
653
- display: block;
654
- color: var(--text-secondary);
655
- font-size: 0.8rem;
656
- margin-bottom: 0.3rem;
657
- font-weight: 500;
658
- }
659
-
660
- .setup-card input,
661
- .setup-card select,
662
- .setup-card textarea {
663
- width: 100%;
664
- padding: 0.65rem 0.85rem;
665
- margin-bottom: 1rem;
666
- background: var(--bg-primary);
667
- border: 1px solid var(--border-strong);
668
- color: var(--text-primary);
669
- border-radius: 6px;
670
- font-family: var(--font-body);
671
- font-size: 0.875rem;
672
- transition: border-color var(--transition-fast);
673
- }
674
-
675
- .setup-card input:focus,
676
- .setup-card select:focus,
677
- .setup-card textarea:focus {
678
- outline: none;
679
- border-color: var(--accent);
680
- box-shadow: 0 0 0 3px var(--accent-glow);
681
- }
682
-
683
- .setup-card input::placeholder,
684
- .setup-card textarea::placeholder { color: var(--text-secondary); }
685
-
686
- .setup-card textarea {
687
- resize: vertical;
688
- line-height: 1.5;
689
- }
690
-
691
- .setup-btn-primary,
692
- .setup-card button[type="submit"] {
693
- width: 100%;
694
- padding: 0.7rem;
695
- background: var(--accent);
696
- border: none;
697
- color: white;
698
- border-radius: 6px;
699
- cursor: pointer;
700
- font-family: var(--font-body);
701
- font-weight: 600;
702
- font-size: 0.9rem;
703
- transition: background var(--transition-fast), transform var(--transition-fast);
704
- }
705
-
706
- .setup-btn-primary:hover { background: var(--accent-hover); }
707
- .setup-btn-primary:active { transform: scale(0.98); }
708
- .setup-btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }
709
-
710
- .setup-btn-secondary {
711
- width: 100%;
712
- padding: 0.7rem;
713
- background: transparent;
714
- border: 1px solid var(--border-strong);
715
- color: var(--text-secondary);
716
- border-radius: 6px;
717
- cursor: pointer;
718
- font-family: var(--font-body);
719
- font-size: 0.875rem;
720
- margin-top: 0.5rem;
721
- transition: all var(--transition-fast);
722
- }
723
-
724
- .setup-btn-secondary:hover {
725
- color: var(--text-primary);
726
- border-color: var(--accent);
727
- background: var(--accent-subtle);
728
- }
729
-
730
- /* Setup progress */
731
- .setup-progress {
732
- display: flex;
733
- align-items: center;
734
- justify-content: center;
735
- margin-bottom: 2rem;
736
- gap: 0;
737
- }
738
-
739
- .setup-progress-step {
740
- width: 28px;
741
- height: 28px;
742
- border-radius: 50%;
743
- display: flex;
744
- align-items: center;
745
- justify-content: center;
746
- font-family: var(--font-mono);
747
- font-size: 0.7rem;
748
- font-weight: 500;
749
- border: 1px solid var(--border-strong);
750
- color: var(--text-secondary);
751
- background: var(--bg-secondary);
752
- transition: all var(--transition-base);
753
- }
754
-
755
- .setup-progress-step.active {
756
- border-color: var(--accent);
757
- color: var(--accent);
758
- background: var(--accent-glow);
759
- box-shadow: 0 0 0 4px var(--accent-subtle);
760
- }
761
-
762
- .setup-progress-step.completed {
763
- border-color: var(--accent);
764
- color: white;
765
- background: var(--accent);
766
- }
767
-
768
- .setup-progress-line {
769
- width: 32px;
770
- height: 1px;
771
- background: var(--border-strong);
772
- transition: background var(--transition-base);
773
- }
774
-
775
- .setup-progress-line.completed { background: var(--accent); }
776
-
777
- /* Password strength */
778
- .password-strength {
779
- height: 3px;
780
- border-radius: 2px;
781
- margin-bottom: 1rem;
782
- background: rgba(255, 255, 255, 0.04);
783
- }
784
-
785
- .password-strength-bar {
786
- height: 100%;
787
- border-radius: 2px;
788
- transition: width 0.3s ease, background 0.3s ease;
789
- }
790
-
791
- .password-strength-label {
792
- font-size: 0.7rem;
793
- font-family: var(--font-mono);
794
- margin-top: -0.75rem;
795
- margin-bottom: 0.75rem;
796
- letter-spacing: 0.03em;
797
- }
798
-
799
- /* Template grid (personality selection) */
800
- .template-grid {
801
- display: grid;
802
- grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
803
- gap: 0.75rem;
804
- margin-bottom: 1.5rem;
805
- }
806
-
807
- .template-card {
808
- background: var(--bg-primary);
809
- padding: 1rem;
810
- border-radius: var(--radius);
811
- border: 1px solid var(--border-strong);
812
- cursor: pointer;
813
- transition: all var(--transition-fast);
814
- }
815
-
816
- .template-card:hover {
817
- border-color: var(--accent);
818
- background: var(--accent-subtle);
819
- }
820
-
821
- .template-card.selected {
822
- border-color: var(--accent);
823
- background: var(--accent-glow);
824
- }
825
-
826
- .template-card.recommended {
827
- border-color: var(--accent);
828
- box-shadow: 0 0 0 1px var(--accent-glow);
829
- }
830
-
831
- .template-card h3 {
832
- font-family: var(--font-display);
833
- font-size: 0.85rem;
834
- font-weight: 600;
835
- margin-bottom: 0.25rem;
836
- }
837
-
838
- .template-card p {
839
- font-size: 0.75rem;
840
- color: var(--text-secondary);
841
- line-height: 1.4;
842
- }
843
-
844
- /* Channel cards (setup) */
845
- .channel-grid {
846
- display: grid;
847
- grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
848
- gap: 0.75rem;
849
- margin-bottom: 1.5rem;
850
- }
851
-
852
- .channel-card {
853
- background: var(--bg-primary);
854
- padding: 1rem;
855
- border-radius: var(--radius);
856
- border: 1px solid var(--border);
857
- }
858
-
859
- .channel-card-header {
860
- display: flex;
861
- justify-content: space-between;
862
- align-items: center;
863
- margin-bottom: 0.75rem;
864
- }
865
-
866
- .channel-card-header h3 {
867
- font-size: 0.9rem;
868
- font-weight: 500;
869
- }
870
-
871
- .channel-card-fields {
872
- padding-top: 0.75rem;
873
- border-top: 1px solid var(--border);
874
- }
875
-
876
- .channel-card-fields label {
877
- display: block;
878
- font-size: 0.75rem;
879
- color: var(--text-secondary);
880
- margin-bottom: 0.2rem;
881
- }
882
-
883
- .channel-card-fields input {
884
- width: 100%;
885
- padding: 0.45rem 0.6rem;
886
- margin-bottom: 0.75rem;
887
- background: var(--bg-card);
888
- border: 1px solid var(--border-strong);
889
- color: var(--text-primary);
890
- border-radius: 6px;
891
- font-family: var(--font-body);
892
- font-size: 0.8rem;
893
- }
894
-
895
- .channel-card-fields input:focus {
896
- outline: none;
897
- border-color: var(--accent);
898
- }
899
-
900
- /* Toggle switch */
901
- .toggle {
902
- position: relative;
903
- width: 36px;
904
- height: 20px;
905
- background: rgba(255, 255, 255, 0.08);
906
- border-radius: 10px;
907
- cursor: pointer;
908
- transition: background var(--transition-fast);
909
- }
910
-
911
- .toggle.active { background: var(--accent); }
912
-
913
- .toggle::after {
914
- content: '';
915
- position: absolute;
916
- top: 2px;
917
- left: 2px;
918
- width: 16px;
919
- height: 16px;
920
- background: white;
921
- border-radius: 50%;
922
- transition: transform var(--transition-fast);
923
- }
924
-
925
- .toggle.active::after { transform: translateX(16px); }
926
-
927
- /* Skip link */
928
- .skip-link {
929
- display: block;
930
- text-align: center;
931
- color: var(--text-secondary);
932
- font-size: 0.8rem;
933
- margin-top: 1rem;
934
- cursor: pointer;
935
- transition: color var(--transition-fast);
936
- }
937
-
938
- .skip-link:hover { color: var(--accent); }
939
-
940
- /* Setup complete */
941
- .setup-complete-check {
942
- font-size: 2.5rem;
943
- color: var(--success);
944
- margin-bottom: 1rem;
945
- }
946
-
947
- .setup-complete-buttons {
948
- display: flex;
949
- gap: 0.75rem;
950
- margin-top: 1.5rem;
951
- }
952
-
953
- .setup-complete-buttons button { flex: 1; }
954
-
955
- /* ── Settings Forms ────────────────────────────── */
956
-
957
- .settings-form { max-width: 560px; }
958
-
959
- .settings-form label {
960
- display: block;
961
- color: var(--text-secondary);
962
- font-size: 0.8rem;
963
- margin-bottom: 0.3rem;
964
- font-weight: 500;
965
- }
966
-
967
- .settings-form input,
968
- .settings-form select {
969
- width: 100%;
970
- padding: 0.65rem 0.85rem;
971
- margin-bottom: 1rem;
972
- background: var(--bg-card);
973
- border: 1px solid var(--border-strong);
974
- color: var(--text-primary);
975
- border-radius: 6px;
976
- font-family: var(--font-body);
977
- font-size: 0.875rem;
978
- transition: border-color var(--transition-fast);
979
- }
980
-
981
- .settings-form input:focus,
982
- .settings-form select:focus {
983
- outline: none;
984
- border-color: var(--accent);
985
- box-shadow: 0 0 0 3px var(--accent-glow);
986
- }
987
-
988
- .settings-form input::placeholder { color: var(--text-secondary); }
989
-
990
- .settings-section {
991
- margin-bottom: 2rem;
992
- padding-bottom: 2rem;
993
- border-bottom: 1px solid var(--border);
994
- }
995
-
996
- .settings-section:last-child { border-bottom: none; }
997
-
998
- .settings-section h3 {
999
- font-family: var(--font-display);
1000
- font-size: 1.1rem;
1001
- font-weight: 600;
1002
- margin-bottom: 1rem;
1003
- letter-spacing: -0.01em;
1004
- }
1005
-
1006
- .masked-key {
1007
- font-family: var(--font-mono);
1008
- color: var(--text-secondary);
1009
- font-size: 0.8rem;
1010
- margin-bottom: 0.5rem;
1011
- }
1012
-
1013
- .settings-success {
1014
- color: var(--success);
1015
- font-size: 0.8rem;
1016
- margin-top: 0.5rem;
1017
- font-weight: 500;
1018
- }
1019
-
1020
- .settings-btn {
1021
- padding: 0.6rem 1.5rem;
1022
- background: var(--accent);
1023
- border: none;
1024
- color: white;
1025
- border-radius: 6px;
1026
- cursor: pointer;
1027
- font-family: var(--font-body);
1028
- font-weight: 600;
1029
- font-size: 0.875rem;
1030
- transition: background var(--transition-fast), transform var(--transition-fast);
1031
- }
1032
-
1033
- .settings-btn:hover { background: var(--accent-hover); }
1034
- .settings-btn:active { transform: scale(0.98); }
1035
- .settings-btn:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }
1036
-
1037
- /* ── Create Forms ─────────────────────────────── */
1038
-
1039
- .create-form-toggle {
1040
- margin-bottom: 1rem;
1041
- }
1042
-
1043
- .create-form {
1044
- background: var(--bg-card);
1045
- border: 1px solid var(--border);
1046
- border-radius: var(--radius-lg);
1047
- padding: 1.5rem;
1048
- margin-bottom: 1.5rem;
1049
- max-width: 560px;
1050
- animation: cardEnter 0.25s ease both;
1051
- }
1052
-
1053
- .create-form label {
1054
- display: block;
1055
- color: var(--text-secondary);
1056
- font-size: 0.8rem;
1057
- margin-bottom: 0.3rem;
1058
- font-weight: 500;
1059
- }
1060
-
1061
- .create-form input,
1062
- .create-form select,
1063
- .create-form textarea {
1064
- width: 100%;
1065
- padding: 0.65rem 0.85rem;
1066
- margin-bottom: 1rem;
1067
- background: var(--bg-primary);
1068
- border: 1px solid var(--border-strong);
1069
- color: var(--text-primary);
1070
- border-radius: 6px;
1071
- font-family: var(--font-body);
1072
- font-size: 0.875rem;
1073
- transition: border-color var(--transition-fast);
1074
- }
1075
-
1076
- .create-form input:focus,
1077
- .create-form select:focus,
1078
- .create-form textarea:focus {
1079
- outline: none;
1080
- border-color: var(--accent);
1081
- box-shadow: 0 0 0 3px var(--accent-glow);
1082
- }
1083
-
1084
- .create-form input::placeholder,
1085
- .create-form textarea::placeholder { color: var(--text-secondary); }
1086
-
1087
- .create-form textarea {
1088
- resize: vertical;
1089
- font-family: var(--font-body);
1090
- line-height: 1.5;
1091
- }
1092
-
1093
- .create-form-group {
1094
- padding: 1rem;
1095
- margin-bottom: 1rem;
1096
- background: var(--bg-hover);
1097
- border-radius: var(--radius);
1098
- border: 1px solid var(--border);
1099
- }
1100
-
1101
- .create-form-group label {
1102
- margin-top: 0.5rem;
1103
- }
1104
-
1105
- .create-form-group label:first-child {
1106
- margin-top: 0;
1107
- }
1108
-
1109
- .form-hint {
1110
- margin-top: 0.75rem;
1111
- padding: 0.5rem 0.75rem;
1112
- font-size: 0.85rem;
1113
- color: var(--text-muted);
1114
- background: var(--bg-primary);
1115
- border-radius: var(--radius);
1116
- border: 1px dashed var(--border);
1117
- }
1118
-
1119
- .create-form-success {
1120
- background: rgba(34, 197, 94, 0.06);
1121
- border: 1px solid rgba(34, 197, 94, 0.2);
1122
- color: var(--success);
1123
- padding: 0.75rem 1rem;
1124
- border-radius: var(--radius);
1125
- margin-bottom: 1rem;
1126
- font-size: 0.85rem;
1127
- }
1128
-
1129
- .create-form-success code {
1130
- font-family: var(--font-mono);
1131
- font-size: 0.8rem;
1132
- background: rgba(34, 197, 94, 0.1);
1133
- padding: 0.15rem 0.4rem;
1134
- border-radius: 4px;
1135
- word-break: break-all;
1136
- }
1137
-
1138
- /* ── Provider Grid ─────────────────────────────── */
1139
-
1140
- .provider-grid {
1141
- display: grid;
1142
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
1143
- gap: 0.75rem;
1144
- margin-bottom: 2rem;
1145
- }
1146
-
1147
- .provider-card {
1148
- background: var(--bg-card);
1149
- border: 1px solid var(--border);
1150
- border-radius: var(--radius);
1151
- padding: 1.25rem;
1152
- cursor: pointer;
1153
- transition: all var(--transition-fast);
1154
- }
1155
-
1156
- .provider-card:hover { border-color: var(--border-strong); }
1157
-
1158
- .provider-card.configured {
1159
- border-color: rgba(34, 197, 94, 0.25);
1160
- }
1161
-
1162
- .provider-card.expanded {
1163
- border-color: var(--accent);
1164
- background: var(--bg-hover);
1165
- }
1166
-
1167
- .provider-card-header {
1168
- display: flex;
1169
- justify-content: space-between;
1170
- align-items: center;
1171
- margin-bottom: 0.5rem;
1172
- }
1173
-
1174
- .provider-card-header h3 {
1175
- font-size: 0.9rem;
1176
- font-weight: 500;
1177
- display: flex;
1178
- align-items: center;
1179
- gap: 0.5rem;
1180
- }
1181
-
1182
- .provider-card .status-dot {
1183
- width: 6px;
1184
- height: 6px;
1185
- border-radius: 50%;
1186
- display: inline-block;
1187
- }
1188
-
1189
- .provider-card .status-dot.active { background: var(--success); }
1190
- .provider-card .status-dot.inactive { background: rgba(255, 255, 255, 0.1); }
1191
-
1192
- .provider-card .provider-badges {
1193
- display: flex;
1194
- gap: 0.35rem;
1195
- }
1196
-
1197
- .provider-card .provider-model {
1198
- font-size: 0.75rem;
1199
- color: var(--text-secondary);
1200
- margin-top: 0.2rem;
1201
- font-family: var(--font-mono);
1202
- }
1203
-
1204
- .provider-expand {
1205
- margin-top: 1rem;
1206
- padding-top: 1rem;
1207
- border-top: 1px solid var(--border);
1208
- }
1209
-
1210
- .provider-expand label {
1211
- display: block;
1212
- font-size: 0.75rem;
1213
- color: var(--text-secondary);
1214
- margin-bottom: 0.2rem;
1215
- font-weight: 500;
1216
- }
1217
-
1218
- .provider-expand input,
1219
- .provider-expand select {
1220
- width: 100%;
1221
- padding: 0.5rem 0.65rem;
1222
- margin-bottom: 0.75rem;
1223
- background: var(--bg-primary);
1224
- border: 1px solid var(--border-strong);
1225
- color: var(--text-primary);
1226
- border-radius: 6px;
1227
- font-family: var(--font-body);
1228
- font-size: 0.8rem;
1229
- }
1230
-
1231
- .provider-expand input:focus,
1232
- .provider-expand select:focus {
1233
- outline: none;
1234
- border-color: var(--accent);
1235
- }
1236
-
1237
- .provider-expand .provider-actions {
1238
- display: flex;
1239
- gap: 0.5rem;
1240
- }
1241
-
1242
- .provider-expand .provider-actions button {
1243
- padding: 0.45rem 1rem;
1244
- border-radius: 6px;
1245
- cursor: pointer;
1246
- font-family: var(--font-body);
1247
- font-size: 0.8rem;
1248
- font-weight: 600;
1249
- border: none;
1250
- transition: all var(--transition-fast);
1251
- }
1252
-
1253
- .provider-expand .btn-save {
1254
- background: var(--accent);
1255
- color: white;
1256
- }
1257
-
1258
- .provider-expand .btn-save:hover { background: var(--accent-hover); }
1259
- .provider-expand .btn-save:disabled { opacity: 0.4; cursor: not-allowed; }
1260
-
1261
- .provider-expand .btn-remove {
1262
- background: transparent;
1263
- border: 1px solid rgba(239, 68, 68, 0.3);
1264
- color: var(--danger);
1265
- }
1266
-
1267
- .provider-expand .btn-remove:hover {
1268
- background: rgba(239, 68, 68, 0.08);
1269
- border-color: var(--danger);
1270
- }
1271
-
1272
- /* Routing config */
1273
- .routing-config {
1274
- display: flex;
1275
- gap: 1.25rem;
1276
- align-items: flex-end;
1277
- flex-wrap: wrap;
1278
- margin-bottom: 2rem;
1279
- padding: 1rem 1.25rem;
1280
- background: var(--bg-card);
1281
- border-radius: var(--radius);
1282
- border: 1px solid var(--border);
1283
- }
1284
-
1285
- .routing-config .routing-field {
1286
- flex: 1;
1287
- min-width: 180px;
1288
- }
1289
-
1290
- .routing-config label {
1291
- display: block;
1292
- font-size: 0.75rem;
1293
- color: var(--text-secondary);
1294
- margin-bottom: 0.25rem;
1295
- font-weight: 500;
1296
- }
1297
-
1298
- .routing-config select {
1299
- width: 100%;
1300
- padding: 0.5rem 0.65rem;
1301
- background: var(--bg-primary);
1302
- border: 1px solid var(--border-strong);
1303
- color: var(--text-primary);
1304
- border-radius: 6px;
1305
- font-family: var(--font-body);
1306
- font-size: 0.85rem;
1307
- }
1308
-
1309
- .routing-config button {
1310
- padding: 0.5rem 1.25rem;
1311
- background: var(--accent);
1312
- border: none;
1313
- color: white;
1314
- border-radius: 6px;
1315
- cursor: pointer;
1316
- font-family: var(--font-body);
1317
- font-weight: 600;
1318
- font-size: 0.85rem;
1319
- align-self: flex-end;
1320
- transition: background var(--transition-fast);
1321
- }
1322
-
1323
- .routing-config button:hover { background: var(--accent-hover); }
1324
- .routing-config button:disabled { opacity: 0.4; cursor: not-allowed; }
1325
-
1326
- /* Cost summary */
1327
- .cost-summary {
1328
- display: flex;
1329
- gap: 1px;
1330
- margin-bottom: 2rem;
1331
- flex-wrap: wrap;
1332
- background: var(--border);
1333
- border-radius: var(--radius-lg);
1334
- overflow: hidden;
1335
- border: 1px solid var(--border);
1336
- }
1337
-
1338
- .cost-summary .cost-box {
1339
- flex: 1;
1340
- min-width: 140px;
1341
- background: var(--bg-card);
1342
- padding: 1rem 1.25rem;
1343
- }
1344
-
1345
- .cost-summary .cost-box h4 {
1346
- font-family: var(--font-mono);
1347
- font-size: 0.6rem;
1348
- font-weight: 500;
1349
- text-transform: uppercase;
1350
- letter-spacing: 0.1em;
1351
- color: var(--text-secondary);
1352
- margin-bottom: 0.25rem;
1353
- }
1354
-
1355
- .cost-summary .cost-box .cost-value {
1356
- font-family: var(--font-display);
1357
- font-size: 1.25rem;
1358
- font-weight: 700;
1359
- letter-spacing: -0.02em;
1360
- }
1361
-
1362
- .cost-summary .cost-box.over-budget {
1363
- border-left: 2px solid var(--danger);
1364
- }
1365
-
1366
- .cost-summary .cost-box.over-budget .cost-value { color: var(--danger); }
1367
-
1368
- /* ── Chat scroll fix — chat manages its own scrolling ── */
1369
- .content:has(.chat-layout) { overflow: hidden; max-height: none; }
1370
- .content:has(.chat-container) { overflow: hidden; max-height: none; }
1371
-
1372
- /* ── Chat Layout ────────────────────────────── */
1373
-
1374
- .chat-layout {
1375
- display: flex;
1376
- height: calc(100vh - 6rem);
1377
- gap: 0;
1378
- }
1379
-
1380
- .chat-layout .chat-container {
1381
- flex: 1;
1382
- min-width: 0;
1383
- }
1384
-
1385
- /* ── Chat Sidebar ────────────────────────────── */
1386
-
1387
- .chat-sidebar {
1388
- width: 260px;
1389
- flex-shrink: 0;
1390
- display: flex;
1391
- flex-direction: column;
1392
- border-right: 1px solid var(--border);
1393
- background: var(--bg-surface);
1394
- transition: width 0.2s ease;
1395
- }
1396
-
1397
- .chat-sidebar.closed {
1398
- width: 48px;
1399
- }
1400
-
1401
- .chat-sidebar-header {
1402
- display: flex;
1403
- align-items: center;
1404
- gap: 0.5rem;
1405
- padding: 0.5rem;
1406
- border-bottom: 1px solid var(--border);
1407
- }
1408
-
1409
- .new-chat-btn {
1410
- flex: 1;
1411
- padding: 0.5rem 0.75rem;
1412
- border: 1px dashed var(--border);
1413
- border-radius: var(--radius);
1414
- background: transparent;
1415
- color: var(--text-primary);
1416
- cursor: pointer;
1417
- font-size: 0.85rem;
1418
- transition: all 0.15s ease;
1419
- }
1420
-
1421
- .new-chat-btn:hover {
1422
- border-color: var(--accent);
1423
- color: var(--accent);
1424
- background: color-mix(in srgb, var(--accent) 8%, transparent);
1425
- }
1426
-
1427
- .sidebar-toggle {
1428
- padding: 0.5rem;
1429
- border: none;
1430
- background: transparent;
1431
- color: var(--text-secondary);
1432
- cursor: pointer;
1433
- font-size: 1rem;
1434
- border-radius: var(--radius);
1435
- }
1436
-
1437
- .sidebar-toggle:hover {
1438
- background: var(--bg-hover);
1439
- }
1440
-
1441
- .sidebar-toggle-inline {
1442
- padding: 0.3rem 0.5rem;
1443
- border: none;
1444
- background: transparent;
1445
- color: var(--text-secondary);
1446
- cursor: pointer;
1447
- font-size: 0.9rem;
1448
- border-radius: var(--radius);
1449
- }
1450
-
1451
- .sidebar-toggle-inline:hover {
1452
- background: var(--bg-hover);
1453
- }
1454
-
1455
- .chat-sidebar-list {
1456
- flex: 1;
1457
- overflow-y: auto;
1458
- padding: 0.25rem 0;
1459
- }
1460
-
1461
- .chat-sidebar-item {
1462
- display: flex;
1463
- align-items: center;
1464
- justify-content: space-between;
1465
- padding: 0.6rem 0.75rem;
1466
- cursor: pointer;
1467
- border-left: 3px solid transparent;
1468
- transition: all 0.12s ease;
1469
- }
1470
-
1471
- .chat-sidebar-item:hover {
1472
- background: var(--bg-hover);
1473
- }
1474
-
1475
- .chat-sidebar-item.active {
1476
- background: color-mix(in srgb, var(--accent) 12%, transparent);
1477
- border-left-color: var(--accent);
1478
- }
1479
-
1480
- .chat-sidebar-title {
1481
- flex: 1;
1482
- font-size: 0.85rem;
1483
- color: var(--text-primary);
1484
- overflow: hidden;
1485
- text-overflow: ellipsis;
1486
- white-space: nowrap;
1487
- }
1488
-
1489
- .chat-sidebar-time {
1490
- font-size: 0.7rem;
1491
- color: var(--text-secondary);
1492
- margin-left: 0.5rem;
1493
- flex-shrink: 0;
1494
- }
1495
-
1496
- .chat-sidebar-empty {
1497
- text-align: center;
1498
- color: var(--text-secondary);
1499
- padding: 2rem 1rem;
1500
- font-size: 0.85rem;
1501
- }
1502
-
1503
- .chat-rename-input {
1504
- flex: 1;
1505
- padding: 0.25rem 0.4rem;
1506
- font-size: 0.85rem;
1507
- border: 1px solid var(--accent);
1508
- border-radius: var(--radius);
1509
- background: var(--bg-primary);
1510
- color: var(--text-primary);
1511
- outline: none;
1512
- }
1513
-
1514
- /* ── Chat Context Menu ────────────────────────── */
1515
-
1516
- .chat-context-menu {
1517
- background: var(--bg-surface);
1518
- border: 1px solid var(--border);
1519
- border-radius: var(--radius);
1520
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
1521
- z-index: 1000;
1522
- min-width: 120px;
1523
- padding: 0.25rem 0;
1524
- }
1525
-
1526
- .chat-context-menu button {
1527
- display: block;
1528
- width: 100%;
1529
- text-align: left;
1530
- padding: 0.5rem 0.75rem;
1531
- border: none;
1532
- background: transparent;
1533
- color: var(--text-primary);
1534
- cursor: pointer;
1535
- font-size: 0.85rem;
1536
- }
1537
-
1538
- .chat-context-menu button:hover {
1539
- background: var(--bg-hover);
1540
- }
1541
-
1542
- .chat-context-menu button.danger {
1543
- color: var(--status-error);
1544
- }
1545
-
1546
- .chat-context-menu button.danger:hover {
1547
- background: color-mix(in srgb, var(--status-error) 12%, transparent);
1548
- }
1549
-
1550
- .chat-status-right {
1551
- display: flex;
1552
- align-items: center;
1553
- gap: 0.5rem;
1554
- }
1555
-
1556
- /* ── Chat Interface ────────────────────────────── */
1557
-
1558
- .chat-container {
1559
- display: flex;
1560
- flex-direction: column;
1561
- height: calc(100vh - 4rem);
1562
- }
1563
-
1564
- .chat-status {
1565
- font-size: 0.8rem;
1566
- color: var(--text-secondary);
1567
- display: flex;
1568
- justify-content: space-between;
1569
- align-items: center;
1570
- padding: 0.5rem 0;
1571
- margin-bottom: 0.5rem;
1572
- border-bottom: 1px solid var(--border);
1573
- }
1574
-
1575
- .chat-status-left {
1576
- display: flex;
1577
- align-items: center;
1578
- gap: 0.6rem;
1579
- }
1580
-
1581
- .chat-status-dot {
1582
- width: 6px;
1583
- height: 6px;
1584
- border-radius: 50%;
1585
- background: var(--text-secondary);
1586
- flex-shrink: 0;
1587
- }
1588
-
1589
- .chat-status-dot[data-connected="true"] {
1590
- background: var(--success);
1591
- }
1592
-
1593
- .chat-agent-name {
1594
- font-family: var(--font-display);
1595
- font-weight: 600;
1596
- font-size: 0.85rem;
1597
- color: var(--text-primary);
1598
- letter-spacing: -0.01em;
1599
- }
1600
-
1601
- .chat-status-sep {
1602
- width: 1px;
1603
- height: 0.9rem;
1604
- background: var(--border);
1605
- flex-shrink: 0;
1606
- }
1607
-
1608
- .chat-status-label {
1609
- font-family: var(--font-body);
1610
- font-size: 0.8rem;
1611
- color: var(--text-secondary);
1612
- }
1613
-
1614
- .chat-status-label strong {
1615
- color: var(--text-primary);
1616
- font-weight: 600;
1617
- }
1618
-
1619
- .model-selector {
1620
- display: flex;
1621
- align-items: center;
1622
- gap: 0.5rem;
1623
- }
1624
-
1625
- .model-selector select {
1626
- padding: 0.25rem 0.5rem;
1627
- background: var(--bg-card);
1628
- border: 1px solid var(--border-strong);
1629
- color: var(--text-primary);
1630
- border-radius: 6px;
1631
- font-family: var(--font-body);
1632
- font-size: 0.75rem;
1633
- cursor: pointer;
1634
- transition: border-color var(--transition-fast);
1635
- }
1636
-
1637
- .model-selector select:hover { border-color: var(--accent); }
1638
- .model-selector select:focus { outline: none; border-color: var(--accent); }
1639
-
1640
- .model-label {
1641
- font-family: var(--font-mono);
1642
- font-size: 0.65rem;
1643
- color: var(--text-secondary);
1644
- margin-top: 0.2rem;
1645
- text-align: right;
1646
- letter-spacing: 0.02em;
1647
- }
1648
-
1649
- /* Messages */
1650
- .chat-messages {
1651
- flex: 1;
1652
- overflow-y: auto;
1653
- overflow-x: hidden;
1654
- padding: 1rem 0;
1655
- }
1656
-
1657
- .chat-message {
1658
- margin-bottom: 0.75rem;
1659
- max-width: 78%;
1660
- font-size: 0.9rem;
1661
- line-height: 1.55;
1662
- animation: messageIn 0.2s ease both;
1663
- }
1664
-
1665
- .chat-message.user {
1666
- margin-left: auto;
1667
- background: var(--accent);
1668
- color: white;
1669
- padding: 0.65rem 1rem;
1670
- border-radius: var(--radius) var(--radius) 2px var(--radius);
1671
- }
1672
-
1673
- .chat-message.assistant {
1674
- background: var(--bg-card);
1675
- padding: 0.65rem 1rem;
1676
- border-radius: var(--radius) var(--radius) var(--radius) 2px;
1677
- border: 1px solid var(--border);
1678
- }
1679
-
1680
- .chat-message.error {
1681
- background: rgba(239, 68, 68, 0.06);
1682
- color: var(--danger);
1683
- padding: 0.6rem 1rem;
1684
- border-radius: var(--radius);
1685
- font-size: 0.85rem;
1686
- border: 1px solid rgba(239, 68, 68, 0.15);
1687
- }
1688
-
1689
- /* Chat input */
1690
- .chat-input-area {
1691
- display: flex;
1692
- gap: 0.5rem;
1693
- padding: 1rem 0;
1694
- border-top: 1px solid var(--border);
1695
- }
1696
-
1697
- .chat-input-area > .chat-input-wrapper { flex: 1; }
1698
-
1699
- .chat-input-wrapper {
1700
- flex: 1;
1701
- position: relative;
1702
- }
1703
-
1704
- .chat-input-wrapper input {
1705
- width: 100%;
1706
- padding: 0.7rem 0.85rem;
1707
- background: var(--bg-card);
1708
- border: 1px solid var(--border-strong);
1709
- color: var(--text-primary);
1710
- border-radius: 6px;
1711
- font-family: var(--font-body);
1712
- font-size: 0.875rem;
1713
- transition: border-color var(--transition-fast);
1714
- }
1715
-
1716
- .chat-input-wrapper input:focus {
1717
- outline: none;
1718
- border-color: var(--accent);
1719
- box-shadow: 0 0 0 3px var(--accent-glow);
1720
- }
1721
-
1722
- .chat-input-wrapper input::placeholder { color: var(--text-secondary); }
1723
- .chat-input-wrapper input:disabled { opacity: 0.4; }
1724
-
1725
- .chat-input-area button {
1726
- padding: 0.7rem 1.5rem;
1727
- background: var(--accent);
1728
- border: none;
1729
- color: white;
1730
- border-radius: 6px;
1731
- cursor: pointer;
1732
- font-family: var(--font-body);
1733
- font-weight: 600;
1734
- font-size: 0.875rem;
1735
- transition: background var(--transition-fast), transform var(--transition-fast);
1736
- }
1737
-
1738
- .chat-input-area button:hover { background: var(--accent-hover); }
1739
- .chat-input-area button:active { transform: scale(0.97); }
1740
- .chat-input-area button:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }
1741
-
1742
- /* Slash command autocomplete */
1743
- .slash-autocomplete {
1744
- position: absolute;
1745
- bottom: 100%;
1746
- left: 0;
1747
- right: 0;
1748
- margin-bottom: 4px;
1749
- background: var(--bg-card);
1750
- border: 1px solid var(--border-strong);
1751
- border-radius: var(--radius);
1752
- max-height: 240px;
1753
- overflow-y: auto;
1754
- z-index: 10;
1755
- box-shadow: 0 -8px 32px rgba(0, 0, 0, 0.5);
1756
- }
1757
-
1758
- .slash-ac-item {
1759
- display: flex;
1760
- align-items: center;
1761
- gap: 0.75rem;
1762
- padding: 0.5rem 0.75rem;
1763
- cursor: pointer;
1764
- transition: background var(--transition-fast);
1765
- }
1766
-
1767
- .slash-ac-item:hover,
1768
- .slash-ac-item.selected {
1769
- background: var(--accent-subtle);
1770
- }
1771
-
1772
- .slash-ac-cmd {
1773
- font-family: var(--font-mono);
1774
- font-size: 0.8rem;
1775
- color: var(--accent);
1776
- white-space: nowrap;
1777
- min-width: 140px;
1778
- }
1779
-
1780
- .slash-ac-desc {
1781
- font-size: 0.75rem;
1782
- color: var(--text-secondary);
1783
- }
1784
-
1785
- /* ── Markdown (Chat Messages) ──────────────────── */
1786
-
1787
- .chat-markdown { line-height: 1.6; }
1788
-
1789
- .chat-markdown h2,
1790
- .chat-markdown h3,
1791
- .chat-markdown h4 {
1792
- margin: 0.75rem 0 0.35rem;
1793
- color: var(--text-primary);
1794
- font-family: var(--font-display);
1795
- letter-spacing: -0.01em;
1796
- }
1797
-
1798
- .chat-markdown h2 { font-size: 1.1rem; font-weight: 700; }
1799
- .chat-markdown h3 { font-size: 1rem; font-weight: 600; }
1800
- .chat-markdown h4 { font-size: 0.9rem; font-weight: 600; }
1801
-
1802
- .chat-markdown p { margin: 0.35rem 0; }
1803
-
1804
- .chat-markdown .code-block {
1805
- margin: 0.5rem 0;
1806
- border: 1px solid var(--border);
1807
- border-radius: var(--radius);
1808
- overflow: hidden;
1809
- }
1810
-
1811
- .chat-markdown .code-header {
1812
- display: flex;
1813
- align-items: center;
1814
- justify-content: space-between;
1815
- padding: 0.35rem 0.75rem;
1816
- background: var(--bg-secondary);
1817
- border-bottom: 1px solid var(--border);
1818
- font-size: 0.7rem;
1819
- }
1820
-
1821
- .chat-markdown .code-lang {
1822
- font-family: var(--font-mono);
1823
- color: var(--text-secondary);
1824
- text-transform: uppercase;
1825
- font-weight: 500;
1826
- letter-spacing: 0.08em;
1827
- font-size: 0.6rem;
1828
- }
1829
-
1830
- .chat-markdown .code-copy {
1831
- background: transparent;
1832
- border: 1px solid var(--border-strong);
1833
- color: var(--text-secondary);
1834
- font-family: var(--font-mono);
1835
- font-size: 0.6rem;
1836
- padding: 0.15rem 0.5rem;
1837
- border-radius: 4px;
1838
- cursor: pointer;
1839
- transition: all var(--transition-fast);
1840
- letter-spacing: 0.02em;
1841
- }
1842
-
1843
- .chat-markdown .code-copy:hover {
1844
- color: var(--accent);
1845
- border-color: var(--accent);
1846
- background: var(--accent-subtle);
1847
- }
1848
-
1849
- .chat-markdown pre {
1850
- background: var(--bg-primary);
1851
- padding: 0.75rem;
1852
- overflow-x: auto;
1853
- margin: 0;
1854
- font-size: 0.8rem;
1855
- line-height: 1.55;
1856
- }
1857
-
1858
- .chat-markdown code {
1859
- font-family: var(--font-mono);
1860
- font-size: 0.85em;
1861
- }
1862
-
1863
- .chat-markdown :not(pre) > code {
1864
- background: var(--accent-subtle);
1865
- color: var(--accent);
1866
- padding: 0.15rem 0.4rem;
1867
- border-radius: 4px;
1868
- font-size: 0.82em;
1869
- }
1870
-
1871
- .chat-markdown ul {
1872
- margin: 0.35rem 0;
1873
- padding-left: 1.25rem;
1874
- }
1875
-
1876
- .chat-markdown li { margin: 0.15rem 0; }
1877
-
1878
- .chat-markdown strong {
1879
- color: var(--text-primary);
1880
- font-weight: 600;
1881
- }
1882
-
1883
- .chat-markdown em {
1884
- font-style: italic;
1885
- color: var(--text-secondary);
1886
- }
1887
-
1888
- .chat-markdown hr {
1889
- border: none;
1890
- border-top: 1px solid var(--border);
1891
- margin: 0.75rem 0;
1892
- }
1893
-
1894
- /* ── Theme Selector ───────────────────────────── */
1895
-
1896
- .theme-grid {
1897
- display: grid;
1898
- grid-template-columns: repeat(3, 1fr);
1899
- gap: 1rem;
1900
- margin-top: 1rem;
1901
- }
1902
-
1903
- .theme-card {
1904
- background: var(--bg-card);
1905
- border: 2px solid var(--border);
1906
- border-radius: var(--radius-lg);
1907
- padding: 1rem;
1908
- cursor: pointer;
1909
- transition: border-color var(--transition-base), transform var(--transition-fast);
1910
- }
1911
-
1912
- .theme-card:hover {
1913
- border-color: var(--border-strong);
1914
- transform: translateY(-1px);
1915
- }
1916
-
1917
- .theme-card.selected {
1918
- border-color: var(--accent);
1919
- box-shadow: 0 0 0 1px var(--accent);
1920
- }
1921
-
1922
- .theme-swatches {
1923
- display: flex;
1924
- gap: 6px;
1925
- margin-bottom: 0.75rem;
1926
- }
1927
-
1928
- .theme-swatch {
1929
- width: 24px;
1930
- height: 24px;
1931
- border-radius: 50%;
1932
- border: 1px solid rgba(128, 128, 128, 0.2);
1933
- }
1934
-
1935
- .theme-info {
1936
- display: flex;
1937
- align-items: center;
1938
- gap: 0.5rem;
1939
- margin-bottom: 0.25rem;
1940
- }
1941
-
1942
- .theme-info h3 {
1943
- font-family: var(--font-display);
1944
- font-size: 0.9rem;
1945
- font-weight: 600;
1946
- color: var(--text-primary);
1947
- margin: 0;
1948
- }
1949
-
1950
- .theme-mode-badge {
1951
- font-family: var(--font-mono);
1952
- font-size: 0.55rem;
1953
- font-weight: 500;
1954
- text-transform: uppercase;
1955
- letter-spacing: 0.08em;
1956
- padding: 2px 6px;
1957
- border-radius: 4px;
1958
- }
1959
-
1960
- .theme-mode-badge.dark {
1961
- background: rgba(255, 255, 255, 0.08);
1962
- color: var(--text-secondary);
1963
- }
1964
-
1965
- .theme-mode-badge.light {
1966
- background: rgba(59, 130, 246, 0.1);
1967
- color: #3b82f6;
1968
- }
1969
-
1970
- .theme-description {
1971
- font-size: 0.75rem;
1972
- color: var(--text-secondary);
1973
- margin: 0;
1974
- }
1975
-
1976
- /* ── Animations ────────────────────────────────── */
1977
-
1978
- @keyframes cardEnter {
1979
- from {
1980
- opacity: 0;
1981
- transform: translateY(12px);
1982
- }
1983
- to {
1984
- opacity: 1;
1985
- transform: translateY(0);
1986
- }
1987
- }
1988
-
1989
- @keyframes messageIn {
1990
- from {
1991
- opacity: 0;
1992
- transform: translateY(6px);
1993
- }
1994
- to {
1995
- opacity: 1;
1996
- transform: translateY(0);
1997
- }
1998
- }
1999
-
2000
- /* ── Responsive ────────────────────────────────── */
2001
-
2002
- @media (max-width: 900px) {
2003
- .mc-columns {
2004
- grid-template-columns: 1fr;
2005
- }
2006
- }
2007
-
2008
- @media (max-width: 768px) {
2009
- .sidebar { display: none; }
2010
-
2011
- .content {
2012
- padding: 1.5rem;
2013
- }
2014
-
2015
- .status-grid {
2016
- grid-template-columns: repeat(2, 1fr);
2017
- }
2018
-
2019
- .chat-message { max-width: 90%; }
2020
- .chat-sidebar { width: 200px; }
2021
- .chat-sidebar.closed { width: 0; border-right: none; overflow: hidden; }
2022
-
2023
- .provider-grid,
2024
- .channel-grid {
2025
- grid-template-columns: 1fr;
2026
- }
2027
-
2028
- .theme-grid { grid-template-columns: repeat(2, 1fr); }
2029
- }
2030
-
2031
- @media (max-width: 480px) {
2032
- .content { padding: 1rem; }
2033
-
2034
- .status-grid {
2035
- grid-template-columns: 1fr;
2036
- }
2037
-
2038
- .page h2 {
2039
- font-size: 1.4rem;
2040
- }
2041
-
2042
- .theme-grid { grid-template-columns: 1fr; }
2043
- }
2044
-
2045
- /* ─── Personality Editor ─── */
2046
- .page .page-header {
2047
- display: flex;
2048
- justify-content: space-between;
2049
- align-items: center;
2050
- margin-bottom: 1.5rem;
2051
- }
2052
-
2053
- .editor-section {
2054
- margin-bottom: 2rem;
2055
- padding: 1.5rem;
2056
- background: var(--bg-card);
2057
- border: 1px solid var(--border);
2058
- border-radius: 12px;
2059
- }
2060
-
2061
- .editor-section h3 {
2062
- margin: 0 0 1rem;
2063
- font-size: 1rem;
2064
- color: var(--text-primary);
2065
- }
2066
-
2067
- .form-grid {
2068
- display: grid;
2069
- grid-template-columns: 1fr 1fr;
2070
- gap: 1rem;
2071
- }
2072
-
2073
- .form-field {
2074
- display: flex;
2075
- flex-direction: column;
2076
- gap: 0.35rem;
2077
- }
2078
-
2079
- .form-field.full-width {
2080
- grid-column: 1 / -1;
2081
- }
2082
-
2083
- .form-field label {
2084
- font-size: 0.8rem;
2085
- color: var(--text-secondary);
2086
- font-weight: 500;
2087
- }
2088
-
2089
- .field-hint {
2090
- font-size: 0.7rem;
2091
- color: var(--text-secondary);
2092
- opacity: 0.7;
2093
- margin-top: 0.15rem;
2094
- }
2095
-
2096
- /* Tone sliders */
2097
- .tone-sliders {
2098
- display: flex;
2099
- flex-direction: column;
2100
- gap: 1rem;
2101
- }
2102
-
2103
- .tone-slider-header {
2104
- display: flex;
2105
- justify-content: space-between;
2106
- align-items: center;
2107
- margin-bottom: 0.25rem;
2108
- }
2109
-
2110
- .tone-label {
2111
- font-size: 0.85rem;
2112
- color: var(--text-primary);
2113
- font-weight: 500;
2114
- }
2115
-
2116
- .tone-value {
2117
- font-size: 0.75rem;
2118
- color: var(--text-secondary);
2119
- font-variant-numeric: tabular-nums;
2120
- }
2121
-
2122
- .tone-slider-row {
2123
- display: flex;
2124
- align-items: center;
2125
- gap: 0.75rem;
2126
- }
2127
-
2128
- .tone-extreme {
2129
- font-size: 0.7rem;
2130
- color: var(--text-secondary);
2131
- min-width: 4rem;
2132
- }
2133
-
2134
- .tone-extreme:last-child {
2135
- text-align: right;
2136
- }
2137
-
2138
- .slider {
2139
- flex: 1;
2140
- height: 6px;
2141
- -webkit-appearance: none;
2142
- appearance: none;
2143
- background: var(--border);
2144
- border-radius: 3px;
2145
- outline: none;
2146
- }
2147
-
2148
- .slider::-webkit-slider-thumb {
2149
- -webkit-appearance: none;
2150
- appearance: none;
2151
- width: 16px;
2152
- height: 16px;
2153
- border-radius: 50%;
2154
- background: var(--accent);
2155
- cursor: pointer;
2156
- border: 2px solid var(--bg-card);
2157
- box-shadow: 0 1px 3px rgba(0,0,0,0.3);
2158
- }
2159
-
2160
- /* Tag input */
2161
- .tag-input-container {
2162
- display: flex;
2163
- flex-wrap: wrap;
2164
- gap: 0.35rem;
2165
- padding: 0.4rem;
2166
- border: 1px solid var(--border);
2167
- border-radius: 8px;
2168
- background: var(--bg-primary);
2169
- min-height: 38px;
2170
- align-items: center;
2171
- }
2172
-
2173
- .tag {
2174
- display: inline-flex;
2175
- align-items: center;
2176
- gap: 0.25rem;
2177
- padding: 0.15rem 0.5rem;
2178
- background: var(--accent);
2179
- color: #fff;
2180
- border-radius: 4px;
2181
- font-size: 0.75rem;
2182
- }
2183
-
2184
- .tag-remove {
2185
- background: none;
2186
- border: none;
2187
- color: inherit;
2188
- cursor: pointer;
2189
- padding: 0 0.15rem;
2190
- font-size: 0.7rem;
2191
- opacity: 0.7;
2192
- }
2193
-
2194
- .tag-remove:hover {
2195
- opacity: 1;
2196
- }
2197
-
2198
- .tag-input {
2199
- border: none;
2200
- background: transparent;
2201
- outline: none;
2202
- flex: 1;
2203
- min-width: 80px;
2204
- font-size: 0.85rem;
2205
- color: var(--text-primary);
2206
- }
2207
-
2208
- /* Catchphrase grid */
2209
- .catchphrase-grid {
2210
- display: flex;
2211
- flex-direction: column;
2212
- gap: 0.5rem;
2213
- }
2214
-
2215
- .catchphrase-row {
2216
- display: flex;
2217
- align-items: center;
2218
- gap: 0.75rem;
2219
- }
2220
-
2221
- .catchphrase-label {
2222
- min-width: 5rem;
2223
- font-size: 0.8rem;
2224
- color: var(--text-secondary);
2225
- text-transform: capitalize;
2226
- }
2227
-
2228
- .catchphrase-row input {
2229
- flex: 1;
2230
- }
2231
-
2232
- /* Custom instructions / SOUL editor */
2233
- .custom-instructions-textarea,
2234
- .soul-editor-textarea {
2235
- width: 100%;
2236
- resize: vertical;
2237
- font-family: inherit;
2238
- font-size: 0.85rem;
2239
- padding: 0.75rem;
2240
- border: 1px solid var(--border);
2241
- border-radius: 8px;
2242
- background: var(--bg-primary);
2243
- color: var(--text-primary);
2244
- transition: border-color var(--transition-fast);
2245
- }
2246
-
2247
- .custom-instructions-textarea:focus,
2248
- .soul-editor-textarea:focus {
2249
- outline: none;
2250
- border-color: var(--accent);
2251
- box-shadow: 0 0 0 3px var(--accent-glow);
2252
- }
2253
-
2254
- .soul-editor-textarea {
2255
- font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
2256
- font-size: 0.8rem;
2257
- }
2258
-
2259
- /* Section toggle */
2260
- .section-toggle {
2261
- background: none;
2262
- border: none;
2263
- color: var(--text-secondary);
2264
- font-size: 0.9rem;
2265
- cursor: pointer;
2266
- padding: 0;
2267
- font-weight: 500;
2268
- }
2269
-
2270
- .section-toggle:hover {
2271
- color: var(--text-primary);
2272
- }
2273
-
2274
- /* Editor footer */
2275
- .editor-footer {
2276
- position: sticky;
2277
- bottom: 0;
2278
- padding: 1rem 1.5rem;
2279
- background: var(--bg-primary);
2280
- border-top: 1px solid var(--border);
2281
- text-align: right;
2282
- margin: 0 -1.5rem;
2283
- }
2284
-
2285
- /* Form inputs inside editor-section (for elements not covered by .settings-form) */
2286
- .editor-section input[type="text"],
2287
- .editor-section select {
2288
- width: 100%;
2289
- padding: 0.65rem 0.85rem;
2290
- background: var(--bg-primary);
2291
- border: 1px solid var(--border-strong);
2292
- color: var(--text-primary);
2293
- border-radius: 6px;
2294
- font-family: var(--font-body);
2295
- font-size: 0.875rem;
2296
- transition: border-color var(--transition-fast);
2297
- }
2298
-
2299
- .editor-section input[type="text"]:focus,
2300
- .editor-section select:focus {
2301
- outline: none;
2302
- border-color: var(--accent);
2303
- box-shadow: 0 0 0 3px var(--accent-glow);
2304
- }
2305
-
2306
- .editor-section input[type="text"]::placeholder {
2307
- color: var(--text-secondary);
2308
- }