@tpitre/story-ui 3.10.3 → 3.10.4

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.
@@ -0,0 +1,1121 @@
1
+ /**
2
+ * StoryUIPanel CSS - Gemini-Inspired Design
3
+ *
4
+ * Clean, minimal interface inspired by Google Gemini
5
+ * Supports both light mode (default) and dark mode
6
+ * Uses CSS Layers for cascade control
7
+ */
8
+
9
+ @layer reset, base, theme, layout, components, utilities;
10
+
11
+ /* ============================================
12
+ LAYER: Reset
13
+ ============================================ */
14
+ @layer reset {
15
+ .sui-panel,
16
+ .sui-panel *,
17
+ .sui-panel *::before,
18
+ .sui-panel *::after {
19
+ box-sizing: border-box;
20
+ margin: 0;
21
+ padding: 0;
22
+ }
23
+
24
+ .sui-panel button {
25
+ font: inherit;
26
+ color: inherit;
27
+ background: none;
28
+ border: none;
29
+ cursor: pointer;
30
+ }
31
+
32
+ .sui-panel input,
33
+ .sui-panel select,
34
+ .sui-panel textarea {
35
+ font: inherit;
36
+ color: inherit;
37
+ }
38
+ }
39
+
40
+ /* ============================================
41
+ LAYER: Base
42
+ ============================================ */
43
+ @layer base {
44
+ .sui-panel {
45
+ font-family: var(--sui-font-family);
46
+ font-size: var(--sui-font-size-base);
47
+ line-height: var(--sui-line-height);
48
+ color: var(--sui-text-primary);
49
+ -webkit-font-smoothing: antialiased;
50
+ -moz-osx-font-smoothing: grayscale;
51
+ }
52
+
53
+ .sui-panel a {
54
+ color: var(--sui-accent);
55
+ text-decoration: none;
56
+ }
57
+
58
+ .sui-panel a:hover {
59
+ text-decoration: underline;
60
+ }
61
+
62
+ .sui-panel code {
63
+ font-family: var(--sui-font-mono);
64
+ font-size: 0.875em;
65
+ background: var(--sui-surface-tertiary);
66
+ padding: 0.125em 0.375em;
67
+ border-radius: 4px;
68
+ }
69
+
70
+ .sui-panel pre {
71
+ font-family: var(--sui-font-mono);
72
+ font-size: 13px;
73
+ line-height: 1.5;
74
+ overflow-x: auto;
75
+ }
76
+ }
77
+
78
+ /* ============================================
79
+ LAYER: Theme - Light Mode (Default)
80
+ ============================================ */
81
+ @layer theme {
82
+ .sui-panel {
83
+ color-scheme: light;
84
+
85
+ /* Typography - Gemini uses Google Sans, we use system fonts */
86
+ --sui-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
87
+ --sui-font-mono: ui-monospace, "SF Mono", "Cascadia Code", Menlo, monospace;
88
+ --sui-font-size-xs: 11px;
89
+ --sui-font-size-sm: 13px;
90
+ --sui-font-size-base: 15px;
91
+ --sui-font-size-lg: 17px;
92
+ --sui-font-size-xl: 20px;
93
+ --sui-font-size-2xl: 28px;
94
+ --sui-font-size-3xl: 44px;
95
+ --sui-line-height: 1.5;
96
+ --sui-font-weight-normal: 400;
97
+ --sui-font-weight-medium: 500;
98
+
99
+ /* Light mode colors - Gemini-inspired */
100
+ --sui-bg-primary: #ffffff;
101
+ --sui-bg-secondary: #f8f9fa;
102
+ --sui-bg-tertiary: #f1f3f4;
103
+ --sui-surface-primary: #ffffff;
104
+ --sui-surface-secondary: #f8f9fa;
105
+ --sui-surface-tertiary: #e8eaed;
106
+ --sui-surface-hover: rgba(0, 0, 0, 0.04);
107
+ --sui-surface-active: rgba(66, 133, 244, 0.12);
108
+
109
+ --sui-text-primary: #202124;
110
+ --sui-text-secondary: #5f6368;
111
+ --sui-text-tertiary: #80868b;
112
+ --sui-text-disabled: #9aa0a6;
113
+
114
+ --sui-accent: #1a73e8;
115
+ --sui-accent-hover: #1967d2;
116
+ --sui-accent-light: rgba(26, 115, 232, 0.08);
117
+ --sui-accent-text: #1a73e8;
118
+
119
+ --sui-success: #1e8e3e;
120
+ --sui-success-light: rgba(30, 142, 62, 0.08);
121
+ --sui-error: #d93025;
122
+ --sui-error-light: rgba(217, 48, 37, 0.08);
123
+ --sui-warning: #f9ab00;
124
+ --sui-warning-light: rgba(249, 171, 0, 0.08);
125
+
126
+ --sui-border: #dadce0;
127
+ --sui-border-light: #e8eaed;
128
+ --sui-border-focus: #1a73e8;
129
+
130
+ --sui-shadow-sm: 0 1px 2px rgba(60, 64, 67, 0.1);
131
+ --sui-shadow-md: 0 1px 3px rgba(60, 64, 67, 0.15), 0 4px 8px rgba(60, 64, 67, 0.1);
132
+ --sui-shadow-lg: 0 1px 3px rgba(60, 64, 67, 0.2), 0 8px 24px rgba(60, 64, 67, 0.15);
133
+
134
+ /* Spacing */
135
+ --sui-space-xs: 4px;
136
+ --sui-space-sm: 8px;
137
+ --sui-space-md: 12px;
138
+ --sui-space-lg: 16px;
139
+ --sui-space-xl: 24px;
140
+ --sui-space-2xl: 32px;
141
+ --sui-space-3xl: 48px;
142
+
143
+ /* Border radius */
144
+ --sui-radius-sm: 4px;
145
+ --sui-radius-md: 8px;
146
+ --sui-radius-lg: 12px;
147
+ --sui-radius-xl: 16px;
148
+ --sui-radius-2xl: 24px;
149
+ --sui-radius-full: 9999px;
150
+
151
+ /* Transitions */
152
+ --sui-transition-fast: 100ms ease;
153
+ --sui-transition-normal: 200ms ease;
154
+ --sui-transition-slow: 300ms ease;
155
+
156
+ /* Layout */
157
+ --sui-sidebar-width: 260px;
158
+ --sui-max-content-width: 768px;
159
+ --sui-input-height: 56px;
160
+ }
161
+
162
+ /* Dark mode */
163
+ .sui-panel--dark {
164
+ color-scheme: dark;
165
+
166
+ --sui-bg-primary: #1e1f20;
167
+ --sui-bg-secondary: #131314;
168
+ --sui-bg-tertiary: #282a2c;
169
+ --sui-surface-primary: #1e1f20;
170
+ --sui-surface-secondary: #282a2c;
171
+ --sui-surface-tertiary: #3c4043;
172
+ --sui-surface-hover: rgba(255, 255, 255, 0.08);
173
+ --sui-surface-active: rgba(138, 180, 248, 0.16);
174
+
175
+ --sui-text-primary: #e8eaed;
176
+ --sui-text-secondary: #9aa0a6;
177
+ --sui-text-tertiary: #80868b;
178
+ --sui-text-disabled: #5f6368;
179
+
180
+ --sui-accent: #8ab4f8;
181
+ --sui-accent-hover: #aecbfa;
182
+ --sui-accent-light: rgba(138, 180, 248, 0.16);
183
+ --sui-accent-text: #8ab4f8;
184
+
185
+ --sui-success: #81c995;
186
+ --sui-success-light: rgba(129, 201, 149, 0.16);
187
+ --sui-error: #f28b82;
188
+ --sui-error-light: rgba(242, 139, 130, 0.16);
189
+ --sui-warning: #fdd663;
190
+ --sui-warning-light: rgba(253, 214, 99, 0.16);
191
+
192
+ --sui-border: #3c4043;
193
+ --sui-border-light: #5f6368;
194
+ --sui-border-focus: #8ab4f8;
195
+
196
+ --sui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
197
+ --sui-shadow-md: 0 1px 3px rgba(0, 0, 0, 0.4), 0 4px 8px rgba(0, 0, 0, 0.3);
198
+ --sui-shadow-lg: 0 1px 3px rgba(0, 0, 0, 0.5), 0 8px 24px rgba(0, 0, 0, 0.4);
199
+ }
200
+ }
201
+
202
+ /* ============================================
203
+ LAYER: Layout
204
+ ============================================ */
205
+ @layer layout {
206
+ .sui-panel {
207
+ display: flex;
208
+ height: 100%;
209
+ width: 100%;
210
+ background: var(--sui-bg-primary);
211
+ transition: background-color var(--sui-transition-normal);
212
+ }
213
+
214
+ /* Sidebar */
215
+ .sui-sidebar {
216
+ width: var(--sui-sidebar-width);
217
+ background: var(--sui-bg-secondary);
218
+ border-right: 1px solid var(--sui-border);
219
+ display: flex;
220
+ flex-direction: column;
221
+ flex-shrink: 0;
222
+ transition: all var(--sui-transition-normal);
223
+ }
224
+
225
+ .sui-sidebar--collapsed {
226
+ width: 0;
227
+ border-right: none;
228
+ overflow: hidden;
229
+ }
230
+
231
+ .sui-sidebar__header {
232
+ padding: var(--sui-space-lg);
233
+ border-bottom: 1px solid var(--sui-border);
234
+ }
235
+
236
+ .sui-sidebar__content {
237
+ flex: 1;
238
+ overflow-y: auto;
239
+ padding: var(--sui-space-md);
240
+ }
241
+
242
+ .sui-sidebar__section-title {
243
+ color: var(--sui-text-tertiary);
244
+ font-size: var(--sui-font-size-xs);
245
+ font-weight: var(--sui-font-weight-medium);
246
+ text-transform: uppercase;
247
+ letter-spacing: 0.05em;
248
+ padding: var(--sui-space-sm) var(--sui-space-md);
249
+ margin-top: var(--sui-space-md);
250
+ }
251
+
252
+ .sui-sidebar__section-title:first-child {
253
+ margin-top: 0;
254
+ }
255
+
256
+ /* Main content */
257
+ .sui-main {
258
+ flex: 1;
259
+ display: flex;
260
+ flex-direction: column;
261
+ min-width: 0;
262
+ position: relative;
263
+ }
264
+
265
+ /* Header - compact status bar */
266
+ .sui-header {
267
+ display: flex;
268
+ align-items: center;
269
+ justify-content: space-between;
270
+ padding: var(--sui-space-md) var(--sui-space-xl);
271
+ border-bottom: 1px solid var(--sui-border);
272
+ background: var(--sui-bg-primary);
273
+ flex-shrink: 0;
274
+ gap: var(--sui-space-lg);
275
+ }
276
+
277
+ .sui-header__left {
278
+ display: flex;
279
+ align-items: center;
280
+ gap: var(--sui-space-md);
281
+ }
282
+
283
+ .sui-header__right {
284
+ display: flex;
285
+ align-items: center;
286
+ gap: var(--sui-space-md);
287
+ }
288
+
289
+ /* Chat area */
290
+ .sui-chat {
291
+ flex: 1;
292
+ overflow-y: auto;
293
+ display: flex;
294
+ flex-direction: column;
295
+ }
296
+
297
+ .sui-chat__content {
298
+ flex: 1;
299
+ max-width: var(--sui-max-content-width);
300
+ width: 100%;
301
+ margin: 0 auto;
302
+ padding: var(--sui-space-xl);
303
+ display: flex;
304
+ flex-direction: column;
305
+ gap: var(--sui-space-xl);
306
+ }
307
+
308
+ /* Input area - bottom fixed */
309
+ .sui-input-area {
310
+ padding: var(--sui-space-lg) var(--sui-space-xl) var(--sui-space-xl);
311
+ background: linear-gradient(transparent, var(--sui-bg-primary) 20%);
312
+ flex-shrink: 0;
313
+ }
314
+
315
+ .sui-input-area__inner {
316
+ max-width: var(--sui-max-content-width);
317
+ margin: 0 auto;
318
+ }
319
+ }
320
+
321
+ /* ============================================
322
+ LAYER: Components
323
+ ============================================ */
324
+ @layer components {
325
+ /* ---- Buttons ---- */
326
+ .sui-btn {
327
+ display: inline-flex;
328
+ align-items: center;
329
+ justify-content: center;
330
+ gap: var(--sui-space-sm);
331
+ padding: var(--sui-space-sm) var(--sui-space-lg);
332
+ border-radius: var(--sui-radius-full);
333
+ font-weight: var(--sui-font-weight-medium);
334
+ font-size: var(--sui-font-size-sm);
335
+ height: 36px;
336
+ transition: all var(--sui-transition-fast);
337
+ white-space: nowrap;
338
+ }
339
+
340
+ .sui-btn--primary {
341
+ background: var(--sui-accent);
342
+ color: white;
343
+ }
344
+
345
+ .sui-btn--primary:hover:not(:disabled) {
346
+ background: var(--sui-accent-hover);
347
+ box-shadow: var(--sui-shadow-md);
348
+ }
349
+
350
+ .sui-btn--secondary {
351
+ background: var(--sui-surface-tertiary);
352
+ color: var(--sui-text-primary);
353
+ }
354
+
355
+ .sui-btn--secondary:hover:not(:disabled) {
356
+ background: var(--sui-surface-hover);
357
+ }
358
+
359
+ .sui-btn--ghost {
360
+ background: transparent;
361
+ color: var(--sui-text-secondary);
362
+ }
363
+
364
+ .sui-btn--ghost:hover:not(:disabled) {
365
+ background: var(--sui-surface-hover);
366
+ color: var(--sui-text-primary);
367
+ }
368
+
369
+ .sui-btn--icon {
370
+ padding: var(--sui-space-sm);
371
+ width: 36px;
372
+ height: 36px;
373
+ border-radius: var(--sui-radius-full);
374
+ }
375
+
376
+ .sui-btn--icon-lg {
377
+ width: 44px;
378
+ height: 44px;
379
+ }
380
+
381
+ .sui-btn:disabled {
382
+ opacity: 0.5;
383
+ cursor: not-allowed;
384
+ }
385
+
386
+ .sui-btn--new-chat {
387
+ width: 100%;
388
+ background: var(--sui-accent);
389
+ color: white;
390
+ height: 40px;
391
+ border-radius: var(--sui-radius-lg);
392
+ font-size: var(--sui-font-size-base);
393
+ }
394
+
395
+ .sui-btn--new-chat:hover:not(:disabled) {
396
+ background: var(--sui-accent-hover);
397
+ transform: translateY(-1px);
398
+ box-shadow: var(--sui-shadow-md);
399
+ }
400
+
401
+ /* ---- Chat history items ---- */
402
+ .sui-chat-item {
403
+ display: flex;
404
+ align-items: center;
405
+ gap: var(--sui-space-md);
406
+ padding: var(--sui-space-md);
407
+ border-radius: var(--sui-radius-lg);
408
+ cursor: pointer;
409
+ transition: all var(--sui-transition-fast);
410
+ position: relative;
411
+ }
412
+
413
+ .sui-chat-item:hover {
414
+ background: var(--sui-surface-hover);
415
+ }
416
+
417
+ .sui-chat-item--active {
418
+ background: var(--sui-accent-light);
419
+ }
420
+
421
+ .sui-chat-item--active:hover {
422
+ background: var(--sui-accent-light);
423
+ }
424
+
425
+ .sui-chat-item__icon {
426
+ width: 20px;
427
+ height: 20px;
428
+ color: var(--sui-text-tertiary);
429
+ flex-shrink: 0;
430
+ }
431
+
432
+ .sui-chat-item__content {
433
+ flex: 1;
434
+ min-width: 0;
435
+ }
436
+
437
+ .sui-chat-item__title {
438
+ font-size: var(--sui-font-size-sm);
439
+ color: var(--sui-text-primary);
440
+ white-space: nowrap;
441
+ overflow: hidden;
442
+ text-overflow: ellipsis;
443
+ }
444
+
445
+ .sui-chat-item__meta {
446
+ font-size: var(--sui-font-size-xs);
447
+ color: var(--sui-text-tertiary);
448
+ margin-top: 2px;
449
+ }
450
+
451
+ .sui-chat-item__delete {
452
+ opacity: 0;
453
+ padding: var(--sui-space-xs);
454
+ border-radius: var(--sui-radius-full);
455
+ color: var(--sui-text-tertiary);
456
+ transition: all var(--sui-transition-fast);
457
+ }
458
+
459
+ .sui-chat-item:hover .sui-chat-item__delete {
460
+ opacity: 1;
461
+ }
462
+
463
+ .sui-chat-item__delete:hover {
464
+ background: var(--sui-error-light);
465
+ color: var(--sui-error);
466
+ }
467
+
468
+ /* ---- Orphan stories ---- */
469
+ .sui-orphan-item {
470
+ background: var(--sui-warning-light);
471
+ }
472
+
473
+ .sui-orphan-item--selected {
474
+ background: var(--sui-accent-light);
475
+ }
476
+
477
+ /* ---- Status indicator ---- */
478
+ .sui-status {
479
+ display: inline-flex;
480
+ align-items: center;
481
+ gap: 6px;
482
+ font-size: var(--sui-font-size-xs);
483
+ padding: var(--sui-space-xs) var(--sui-space-sm);
484
+ border-radius: var(--sui-radius-full);
485
+ background: var(--sui-surface-secondary);
486
+ }
487
+
488
+ .sui-status__dot {
489
+ width: 6px;
490
+ height: 6px;
491
+ border-radius: 50%;
492
+ }
493
+
494
+ .sui-status--connected .sui-status__dot {
495
+ background: var(--sui-success);
496
+ }
497
+
498
+ .sui-status--connected .sui-status__text {
499
+ color: var(--sui-success);
500
+ }
501
+
502
+ .sui-status--disconnected .sui-status__dot {
503
+ background: var(--sui-error);
504
+ }
505
+
506
+ .sui-status--disconnected .sui-status__text {
507
+ color: var(--sui-error);
508
+ }
509
+
510
+ /* ---- Header elements ---- */
511
+ .sui-header__title {
512
+ font-size: var(--sui-font-size-lg);
513
+ font-weight: var(--sui-font-weight-medium);
514
+ color: var(--sui-text-primary);
515
+ }
516
+
517
+ .sui-header__subtitle {
518
+ font-size: var(--sui-font-size-sm);
519
+ color: var(--sui-text-secondary);
520
+ }
521
+
522
+ /* ---- Selectors (dropdowns) ---- */
523
+ .sui-selector {
524
+ display: flex;
525
+ align-items: center;
526
+ gap: var(--sui-space-sm);
527
+ }
528
+
529
+ .sui-selector__label {
530
+ font-size: var(--sui-font-size-sm);
531
+ color: var(--sui-text-secondary);
532
+ }
533
+
534
+ .sui-selector__input {
535
+ background: var(--sui-surface-secondary);
536
+ border: 1px solid var(--sui-border);
537
+ border-radius: var(--sui-radius-md);
538
+ color: var(--sui-text-primary);
539
+ padding: var(--sui-space-xs) var(--sui-space-md);
540
+ font-size: var(--sui-font-size-sm);
541
+ cursor: pointer;
542
+ height: 32px;
543
+ min-width: 100px;
544
+ }
545
+
546
+ .sui-selector__input:focus {
547
+ outline: none;
548
+ border-color: var(--sui-border-focus);
549
+ box-shadow: 0 0 0 2px var(--sui-accent-light);
550
+ }
551
+
552
+ /* ---- Welcome/Empty state (Gemini-style) ---- */
553
+ .sui-welcome {
554
+ flex: 1;
555
+ display: flex;
556
+ flex-direction: column;
557
+ align-items: center;
558
+ justify-content: center;
559
+ text-align: center;
560
+ padding: var(--sui-space-3xl);
561
+ }
562
+
563
+ .sui-welcome__greeting {
564
+ font-size: var(--sui-font-size-3xl);
565
+ font-weight: var(--sui-font-weight-normal);
566
+ background: linear-gradient(135deg, var(--sui-accent) 0%, #9c27b0 50%, #e91e63 100%);
567
+ -webkit-background-clip: text;
568
+ -webkit-text-fill-color: transparent;
569
+ background-clip: text;
570
+ margin-bottom: var(--sui-space-lg);
571
+ line-height: 1.2;
572
+ }
573
+
574
+ .sui-welcome__subtitle {
575
+ font-size: var(--sui-font-size-lg);
576
+ color: var(--sui-text-secondary);
577
+ max-width: 500px;
578
+ }
579
+
580
+ .sui-welcome__suggestions {
581
+ display: flex;
582
+ flex-wrap: wrap;
583
+ gap: var(--sui-space-md);
584
+ margin-top: var(--sui-space-2xl);
585
+ justify-content: center;
586
+ max-width: 600px;
587
+ }
588
+
589
+ /* ---- Suggestion chips (Gemini-style) ---- */
590
+ .sui-chip {
591
+ display: inline-flex;
592
+ align-items: center;
593
+ gap: var(--sui-space-sm);
594
+ padding: var(--sui-space-md) var(--sui-space-lg);
595
+ background: var(--sui-surface-secondary);
596
+ border: 1px solid var(--sui-border);
597
+ border-radius: var(--sui-radius-2xl);
598
+ font-size: var(--sui-font-size-sm);
599
+ color: var(--sui-text-primary);
600
+ cursor: pointer;
601
+ transition: all var(--sui-transition-fast);
602
+ }
603
+
604
+ .sui-chip:hover {
605
+ background: var(--sui-surface-hover);
606
+ border-color: var(--sui-accent);
607
+ color: var(--sui-accent-text);
608
+ }
609
+
610
+ .sui-chip__icon {
611
+ width: 18px;
612
+ height: 18px;
613
+ color: var(--sui-text-tertiary);
614
+ }
615
+
616
+ .sui-chip:hover .sui-chip__icon {
617
+ color: var(--sui-accent-text);
618
+ }
619
+
620
+ /* ---- Messages ---- */
621
+ .sui-message {
622
+ animation: sui-fadeIn var(--sui-transition-normal);
623
+ }
624
+
625
+ @keyframes sui-fadeIn {
626
+ from {
627
+ opacity: 0;
628
+ transform: translateY(8px);
629
+ }
630
+ to {
631
+ opacity: 1;
632
+ transform: translateY(0);
633
+ }
634
+ }
635
+
636
+ .sui-message--user {
637
+ display: flex;
638
+ justify-content: flex-end;
639
+ }
640
+
641
+ .sui-message--ai {
642
+ display: flex;
643
+ justify-content: flex-start;
644
+ }
645
+
646
+ .sui-message__bubble {
647
+ max-width: 85%;
648
+ padding: var(--sui-space-md) var(--sui-space-lg);
649
+ border-radius: var(--sui-radius-2xl);
650
+ font-size: var(--sui-font-size-base);
651
+ line-height: 1.6;
652
+ }
653
+
654
+ .sui-message--user .sui-message__bubble {
655
+ background: var(--sui-accent);
656
+ color: white;
657
+ border-bottom-right-radius: var(--sui-radius-sm);
658
+ }
659
+
660
+ .sui-message--ai .sui-message__bubble {
661
+ background: var(--sui-surface-secondary);
662
+ color: var(--sui-text-primary);
663
+ border-bottom-left-radius: var(--sui-radius-sm);
664
+ }
665
+
666
+ .sui-message__images {
667
+ display: flex;
668
+ gap: var(--sui-space-sm);
669
+ margin-top: var(--sui-space-sm);
670
+ flex-wrap: wrap;
671
+ }
672
+
673
+ .sui-message__image {
674
+ max-width: 200px;
675
+ max-height: 150px;
676
+ border-radius: var(--sui-radius-lg);
677
+ object-fit: cover;
678
+ }
679
+
680
+ /* ---- Input form (Gemini-style pill) ---- */
681
+ .sui-input-form {
682
+ display: flex;
683
+ align-items: center;
684
+ gap: var(--sui-space-sm);
685
+ background: var(--sui-surface-secondary);
686
+ border: 1px solid var(--sui-border);
687
+ border-radius: var(--sui-radius-2xl);
688
+ padding: var(--sui-space-sm);
689
+ transition: all var(--sui-transition-fast);
690
+ }
691
+
692
+ .sui-input-form:focus-within {
693
+ border-color: var(--sui-border-focus);
694
+ box-shadow: 0 0 0 2px var(--sui-accent-light);
695
+ }
696
+
697
+ .sui-input-form__upload {
698
+ padding: var(--sui-space-sm);
699
+ border-radius: var(--sui-radius-full);
700
+ color: var(--sui-text-tertiary);
701
+ width: 40px;
702
+ height: 40px;
703
+ display: flex;
704
+ align-items: center;
705
+ justify-content: center;
706
+ flex-shrink: 0;
707
+ }
708
+
709
+ .sui-input-form__upload:hover:not(:disabled) {
710
+ background: var(--sui-surface-hover);
711
+ color: var(--sui-text-primary);
712
+ }
713
+
714
+ .sui-input-form__input {
715
+ flex: 1;
716
+ background: transparent;
717
+ border: none;
718
+ color: var(--sui-text-primary);
719
+ font-size: var(--sui-font-size-base);
720
+ padding: var(--sui-space-sm) var(--sui-space-sm);
721
+ min-height: 40px;
722
+ resize: none;
723
+ }
724
+
725
+ .sui-input-form__input::placeholder {
726
+ color: var(--sui-text-tertiary);
727
+ }
728
+
729
+ .sui-input-form__input:focus {
730
+ outline: none;
731
+ }
732
+
733
+ .sui-input-form__send {
734
+ background: var(--sui-accent);
735
+ color: white;
736
+ padding: var(--sui-space-sm);
737
+ border-radius: var(--sui-radius-full);
738
+ width: 40px;
739
+ height: 40px;
740
+ display: flex;
741
+ align-items: center;
742
+ justify-content: center;
743
+ flex-shrink: 0;
744
+ transition: all var(--sui-transition-fast);
745
+ }
746
+
747
+ .sui-input-form__send:hover:not(:disabled) {
748
+ background: var(--sui-accent-hover);
749
+ transform: scale(1.05);
750
+ }
751
+
752
+ .sui-input-form__send:disabled {
753
+ background: var(--sui-text-disabled);
754
+ }
755
+
756
+ /* ---- Image previews ---- */
757
+ .sui-image-preview {
758
+ display: flex;
759
+ align-items: center;
760
+ gap: var(--sui-space-sm);
761
+ padding: var(--sui-space-sm) var(--sui-space-md);
762
+ margin-bottom: var(--sui-space-sm);
763
+ flex-wrap: wrap;
764
+ }
765
+
766
+ .sui-image-preview__label {
767
+ display: flex;
768
+ align-items: center;
769
+ gap: var(--sui-space-xs);
770
+ font-size: var(--sui-font-size-sm);
771
+ color: var(--sui-text-secondary);
772
+ }
773
+
774
+ .sui-image-preview__item {
775
+ position: relative;
776
+ }
777
+
778
+ .sui-image-preview__img {
779
+ width: 48px;
780
+ height: 48px;
781
+ object-fit: cover;
782
+ border-radius: var(--sui-radius-md);
783
+ border: 2px solid var(--sui-border);
784
+ }
785
+
786
+ .sui-image-preview__remove {
787
+ position: absolute;
788
+ top: -6px;
789
+ right: -6px;
790
+ width: 20px;
791
+ height: 20px;
792
+ border-radius: 50%;
793
+ background: var(--sui-error);
794
+ color: white;
795
+ display: flex;
796
+ align-items: center;
797
+ justify-content: center;
798
+ font-size: 12px;
799
+ }
800
+
801
+ /* ---- Progress indicator ---- */
802
+ .sui-progress {
803
+ background: var(--sui-surface-secondary);
804
+ border-radius: var(--sui-radius-2xl);
805
+ padding: var(--sui-space-lg);
806
+ max-width: 100%;
807
+ }
808
+
809
+ .sui-progress__header {
810
+ display: flex;
811
+ align-items: center;
812
+ justify-content: space-between;
813
+ margin-bottom: var(--sui-space-sm);
814
+ }
815
+
816
+ .sui-progress__label {
817
+ font-weight: var(--sui-font-weight-medium);
818
+ color: var(--sui-text-primary);
819
+ font-size: var(--sui-font-size-sm);
820
+ }
821
+
822
+ .sui-progress__step {
823
+ font-size: var(--sui-font-size-xs);
824
+ color: var(--sui-text-tertiary);
825
+ }
826
+
827
+ .sui-progress__bar {
828
+ height: 4px;
829
+ background: var(--sui-surface-tertiary);
830
+ border-radius: var(--sui-radius-full);
831
+ overflow: hidden;
832
+ }
833
+
834
+ .sui-progress__fill {
835
+ height: 100%;
836
+ background: linear-gradient(90deg, var(--sui-accent), #9c27b0);
837
+ border-radius: var(--sui-radius-full);
838
+ transition: width var(--sui-transition-normal);
839
+ }
840
+
841
+ .sui-progress__retry {
842
+ margin-top: var(--sui-space-sm);
843
+ padding: var(--sui-space-xs) var(--sui-space-sm);
844
+ background: var(--sui-warning-light);
845
+ color: var(--sui-warning);
846
+ border-radius: var(--sui-radius-md);
847
+ font-size: var(--sui-font-size-xs);
848
+ display: inline-block;
849
+ }
850
+
851
+ /* ---- Drop overlay ---- */
852
+ .sui-drop-overlay {
853
+ position: absolute;
854
+ inset: 0;
855
+ background: var(--sui-accent-light);
856
+ border: 2px dashed var(--sui-accent);
857
+ border-radius: var(--sui-radius-lg);
858
+ display: flex;
859
+ align-items: center;
860
+ justify-content: center;
861
+ z-index: 100;
862
+ backdrop-filter: blur(4px);
863
+ }
864
+
865
+ .sui-drop-overlay__text {
866
+ display: flex;
867
+ flex-direction: column;
868
+ align-items: center;
869
+ gap: var(--sui-space-sm);
870
+ color: var(--sui-accent);
871
+ font-weight: var(--sui-font-weight-medium);
872
+ }
873
+
874
+ /* ---- Error message ---- */
875
+ .sui-error {
876
+ background: var(--sui-error-light);
877
+ color: var(--sui-error);
878
+ padding: var(--sui-space-md);
879
+ border-radius: var(--sui-radius-lg);
880
+ font-size: var(--sui-font-size-sm);
881
+ }
882
+
883
+ /* ---- Checkbox ---- */
884
+ .sui-checkbox {
885
+ width: 16px;
886
+ height: 16px;
887
+ accent-color: var(--sui-accent);
888
+ cursor: pointer;
889
+ }
890
+
891
+ /* ---- Code viewer ---- */
892
+ .sui-code-viewer {
893
+ margin-top: var(--sui-space-md);
894
+ border-radius: var(--sui-radius-lg);
895
+ overflow: hidden;
896
+ background: var(--sui-surface-tertiary);
897
+ border: 1px solid var(--sui-border);
898
+ }
899
+
900
+ .sui-code-viewer__toggle {
901
+ display: flex;
902
+ align-items: center;
903
+ justify-content: space-between;
904
+ padding: var(--sui-space-sm) var(--sui-space-md);
905
+ background: var(--sui-surface-secondary);
906
+ cursor: pointer;
907
+ font-size: var(--sui-font-size-sm);
908
+ color: var(--sui-text-secondary);
909
+ }
910
+
911
+ .sui-code-viewer__toggle:hover {
912
+ background: var(--sui-surface-hover);
913
+ }
914
+
915
+ .sui-code-viewer__header {
916
+ display: flex;
917
+ align-items: center;
918
+ justify-content: space-between;
919
+ padding: var(--sui-space-sm) var(--sui-space-md);
920
+ background: var(--sui-surface-secondary);
921
+ border-bottom: 1px solid var(--sui-border);
922
+ }
923
+
924
+ .sui-code-viewer__filename {
925
+ font-family: var(--sui-font-mono);
926
+ font-size: var(--sui-font-size-sm);
927
+ color: var(--sui-text-secondary);
928
+ }
929
+
930
+ .sui-code-viewer__copy {
931
+ padding: var(--sui-space-xs) var(--sui-space-sm);
932
+ font-size: var(--sui-font-size-xs);
933
+ background: var(--sui-accent-light);
934
+ color: var(--sui-accent-text);
935
+ border-radius: var(--sui-radius-md);
936
+ }
937
+
938
+ .sui-code-viewer__copy:hover {
939
+ background: var(--sui-accent);
940
+ color: white;
941
+ }
942
+
943
+ .sui-code-viewer__content {
944
+ padding: var(--sui-space-md);
945
+ overflow-x: auto;
946
+ max-height: 400px;
947
+ }
948
+
949
+ /* ---- Loading animation ---- */
950
+ .sui-loading-dots::after {
951
+ content: '';
952
+ animation: sui-dots 1.5s infinite;
953
+ }
954
+
955
+ @keyframes sui-dots {
956
+ 0%, 20% { content: '.'; }
957
+ 40% { content: '..'; }
958
+ 60%, 100% { content: '...'; }
959
+ }
960
+
961
+ /* ---- Typing indicator (Gemini-style) ---- */
962
+ .sui-typing {
963
+ display: flex;
964
+ align-items: center;
965
+ gap: 4px;
966
+ padding: var(--sui-space-sm);
967
+ }
968
+
969
+ .sui-typing__dot {
970
+ width: 8px;
971
+ height: 8px;
972
+ background: var(--sui-text-tertiary);
973
+ border-radius: 50%;
974
+ animation: sui-typing-bounce 1.4s infinite ease-in-out both;
975
+ }
976
+
977
+ .sui-typing__dot:nth-child(1) { animation-delay: -0.32s; }
978
+ .sui-typing__dot:nth-child(2) { animation-delay: -0.16s; }
979
+ .sui-typing__dot:nth-child(3) { animation-delay: 0s; }
980
+
981
+ @keyframes sui-typing-bounce {
982
+ 0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
983
+ 40% { transform: scale(1); opacity: 1; }
984
+ }
985
+
986
+ /* ---- Markdown content ---- */
987
+ .sui-markdown strong {
988
+ font-weight: var(--sui-font-weight-medium);
989
+ }
990
+
991
+ .sui-markdown em {
992
+ font-style: italic;
993
+ color: var(--sui-text-secondary);
994
+ }
995
+
996
+ .sui-markdown p {
997
+ margin-bottom: var(--sui-space-sm);
998
+ }
999
+
1000
+ .sui-markdown p:last-child {
1001
+ margin-bottom: 0;
1002
+ }
1003
+
1004
+ /* ---- Completion card ---- */
1005
+ .sui-completion {
1006
+ background: var(--sui-success-light);
1007
+ border-radius: var(--sui-radius-2xl);
1008
+ padding: var(--sui-space-lg);
1009
+ }
1010
+
1011
+ .sui-completion__header {
1012
+ display: flex;
1013
+ align-items: center;
1014
+ gap: var(--sui-space-sm);
1015
+ font-weight: var(--sui-font-weight-medium);
1016
+ color: var(--sui-success);
1017
+ }
1018
+
1019
+ .sui-completion__components {
1020
+ display: flex;
1021
+ flex-wrap: wrap;
1022
+ gap: var(--sui-space-xs);
1023
+ margin-top: var(--sui-space-sm);
1024
+ }
1025
+
1026
+ .sui-completion__tag {
1027
+ padding: 2px var(--sui-space-sm);
1028
+ background: var(--sui-accent-light);
1029
+ color: var(--sui-accent-text);
1030
+ border-radius: var(--sui-radius-full);
1031
+ font-size: var(--sui-font-size-xs);
1032
+ font-family: var(--sui-font-mono);
1033
+ }
1034
+
1035
+ .sui-completion__metrics {
1036
+ display: flex;
1037
+ gap: var(--sui-space-md);
1038
+ margin-top: var(--sui-space-md);
1039
+ font-size: var(--sui-font-size-sm);
1040
+ color: var(--sui-text-tertiary);
1041
+ }
1042
+
1043
+ /* ---- Toggle sidebar button ---- */
1044
+ .sui-toggle-sidebar {
1045
+ position: absolute;
1046
+ left: 0;
1047
+ top: 50%;
1048
+ transform: translateY(-50%);
1049
+ z-index: 10;
1050
+ background: var(--sui-surface-secondary);
1051
+ border: 1px solid var(--sui-border);
1052
+ border-left: none;
1053
+ border-radius: 0 var(--sui-radius-md) var(--sui-radius-md) 0;
1054
+ padding: var(--sui-space-sm);
1055
+ color: var(--sui-text-tertiary);
1056
+ cursor: pointer;
1057
+ transition: all var(--sui-transition-fast);
1058
+ }
1059
+
1060
+ .sui-toggle-sidebar:hover {
1061
+ color: var(--sui-text-primary);
1062
+ background: var(--sui-surface-hover);
1063
+ }
1064
+ }
1065
+
1066
+ /* ============================================
1067
+ LAYER: Utilities
1068
+ ============================================ */
1069
+ @layer utilities {
1070
+ .sui-sr-only {
1071
+ position: absolute;
1072
+ width: 1px;
1073
+ height: 1px;
1074
+ padding: 0;
1075
+ margin: -1px;
1076
+ overflow: hidden;
1077
+ clip: rect(0, 0, 0, 0);
1078
+ white-space: nowrap;
1079
+ border: 0;
1080
+ }
1081
+
1082
+ .sui-flex {
1083
+ display: flex;
1084
+ }
1085
+
1086
+ .sui-flex-1 {
1087
+ flex: 1;
1088
+ }
1089
+
1090
+ .sui-items-center {
1091
+ align-items: center;
1092
+ }
1093
+
1094
+ .sui-justify-between {
1095
+ justify-content: space-between;
1096
+ }
1097
+
1098
+ .sui-gap-sm {
1099
+ gap: var(--sui-space-sm);
1100
+ }
1101
+
1102
+ .sui-gap-md {
1103
+ gap: var(--sui-space-md);
1104
+ }
1105
+
1106
+ .sui-mt-md {
1107
+ margin-top: var(--sui-space-md);
1108
+ }
1109
+
1110
+ .sui-text-muted {
1111
+ color: var(--sui-text-tertiary);
1112
+ }
1113
+
1114
+ .sui-text-center {
1115
+ text-align: center;
1116
+ }
1117
+
1118
+ .sui-hidden {
1119
+ display: none;
1120
+ }
1121
+ }