@narumitw/pi-webui 0.20.2

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,781 @@
1
+ :root {
2
+ color-scheme: light;
3
+ font-family:
4
+ Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
5
+ font-size: 16px;
6
+ line-height: 1.5;
7
+ --background: #f6f7fa;
8
+ --surface: #ffffff;
9
+ --surface-secondary: #eef1f2;
10
+ --text: #17201d;
11
+ --muted: #5e6965;
12
+ --border: #d6ddd9;
13
+ --accent: #176b55;
14
+ --accent-hover: #105541;
15
+ --accent-soft: #e5f2ed;
16
+ --accent-text: #ffffff;
17
+ --danger: #a72f35;
18
+ --danger-soft: #fff0f1;
19
+ --focus: #2563eb;
20
+ --shadow: 0 10px 30px rgb(19 33 27 / 10%);
21
+ }
22
+
23
+ * {
24
+ box-sizing: border-box;
25
+ }
26
+
27
+ html {
28
+ min-width: 280px;
29
+ background: var(--background);
30
+ scroll-behavior: smooth;
31
+ }
32
+
33
+ body {
34
+ margin: 0;
35
+ min-height: 100vh;
36
+ color: var(--text);
37
+ background: var(--background);
38
+ }
39
+
40
+ button,
41
+ textarea,
42
+ input {
43
+ font: inherit;
44
+ }
45
+
46
+ button,
47
+ .button,
48
+ summary {
49
+ touch-action: manipulation;
50
+ }
51
+
52
+ .skip-link {
53
+ position: fixed;
54
+ top: 0.5rem;
55
+ left: 0.5rem;
56
+ z-index: 30;
57
+ padding: 0.6rem 0.8rem;
58
+ color: var(--accent-text);
59
+ background: var(--accent);
60
+ transform: translateY(-180%);
61
+ }
62
+
63
+ .skip-link:focus {
64
+ transform: none;
65
+ }
66
+
67
+ :focus-visible {
68
+ outline: 3px solid var(--focus);
69
+ outline-offset: 3px;
70
+ }
71
+
72
+ .session-header,
73
+ main,
74
+ footer {
75
+ width: min(100% - 2rem, 960px);
76
+ margin-inline: auto;
77
+ }
78
+
79
+ .session-header {
80
+ display: flex;
81
+ align-items: flex-end;
82
+ justify-content: space-between;
83
+ gap: 1.5rem;
84
+ padding-block: 1.5rem 1rem;
85
+ border-bottom: 1px solid var(--border);
86
+ }
87
+
88
+ .session-identity {
89
+ min-width: 0;
90
+ }
91
+
92
+ .eyebrow {
93
+ margin: 0 0 0.15rem;
94
+ color: var(--accent);
95
+ font-size: 0.75rem;
96
+ font-weight: 800;
97
+ letter-spacing: 0.09em;
98
+ text-transform: uppercase;
99
+ }
100
+
101
+ h1 {
102
+ margin: 0;
103
+ font-size: clamp(1.45rem, 3vw, 1.9rem);
104
+ line-height: 1.2;
105
+ overflow-wrap: anywhere;
106
+ }
107
+
108
+ .session-name,
109
+ .connection {
110
+ margin: 0.25rem 0 0;
111
+ color: var(--muted);
112
+ overflow-wrap: anywhere;
113
+ }
114
+
115
+ .session-controls {
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 0.5rem;
119
+ }
120
+
121
+ .connection {
122
+ flex: none;
123
+ padding: 0.35rem 0.65rem;
124
+ border: 1px solid var(--border);
125
+ border-radius: 999px;
126
+ background: var(--surface);
127
+ font-size: 0.875rem;
128
+ }
129
+
130
+ .session-details {
131
+ position: relative;
132
+ }
133
+
134
+ .session-details summary {
135
+ min-height: 44px;
136
+ padding: 0.6rem;
137
+ color: var(--muted);
138
+ cursor: pointer;
139
+ }
140
+
141
+ .session-details dl {
142
+ position: absolute;
143
+ z-index: 12;
144
+ top: calc(100% + 0.25rem);
145
+ right: 0;
146
+ width: min(28rem, 85vw);
147
+ margin: 0;
148
+ padding: 0.85rem 1rem;
149
+ border: 1px solid var(--border);
150
+ border-radius: 12px;
151
+ background: var(--surface);
152
+ box-shadow: var(--shadow);
153
+ }
154
+
155
+ .session-details dt {
156
+ color: var(--muted);
157
+ font-size: 0.78rem;
158
+ font-weight: 700;
159
+ }
160
+
161
+ .session-details dd {
162
+ margin: 0.2rem 0 0;
163
+ overflow-wrap: anywhere;
164
+ font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
165
+ font-size: 0.82rem;
166
+ }
167
+
168
+ main {
169
+ padding-block: 1rem 2rem;
170
+ }
171
+
172
+ .conversation {
173
+ min-height: min(55vh, 640px);
174
+ }
175
+
176
+ #transcript {
177
+ display: grid;
178
+ gap: 1.15rem;
179
+ margin: 0;
180
+ padding: 0;
181
+ list-style: none;
182
+ }
183
+
184
+ .empty-state {
185
+ display: grid;
186
+ min-height: 38vh;
187
+ place-content: center;
188
+ color: var(--muted);
189
+ text-align: center;
190
+ }
191
+
192
+ .empty-state strong {
193
+ color: var(--text);
194
+ font-size: 1.1rem;
195
+ }
196
+
197
+ .message {
198
+ width: min(100%, 78ch);
199
+ overflow-wrap: anywhere;
200
+ }
201
+
202
+ .message.assistant {
203
+ padding-inline: 0.1rem;
204
+ }
205
+
206
+ .message.user {
207
+ width: min(90%, 66ch);
208
+ margin-left: auto;
209
+ padding: 0.75rem 0.9rem;
210
+ border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--border));
211
+ border-radius: 14px;
212
+ background: var(--accent-soft);
213
+ }
214
+
215
+ .message.toolResult,
216
+ .message.other {
217
+ padding: 0.75rem 0.9rem;
218
+ border-left: 3px solid var(--border);
219
+ background: color-mix(in srgb, var(--surface-secondary) 55%, transparent);
220
+ }
221
+
222
+ .message.toolResult {
223
+ padding-block: 0.25rem 0.75rem;
224
+ }
225
+
226
+ .tool-result-disclosure > summary {
227
+ min-height: 44px;
228
+ padding-block: 0.55rem;
229
+ cursor: pointer;
230
+ }
231
+
232
+ .tool-result-disclosure[open] > summary {
233
+ margin-bottom: 0.35rem;
234
+ }
235
+
236
+ .message-heading {
237
+ margin-bottom: 0.35rem;
238
+ color: var(--muted);
239
+ font-size: 0.78rem;
240
+ font-weight: 750;
241
+ letter-spacing: 0.025em;
242
+ }
243
+
244
+ .message-body > :first-child,
245
+ .message-markdown > :first-child {
246
+ margin-top: 0;
247
+ }
248
+
249
+ .message-body > :last-child,
250
+ .message-markdown > :last-child {
251
+ margin-bottom: 0;
252
+ }
253
+
254
+ .message-text {
255
+ margin: 0.65rem 0;
256
+ white-space: pre-wrap;
257
+ }
258
+
259
+ .markdown-heading {
260
+ margin: 1.15rem 0 0.45rem;
261
+ font-size: 1.05rem;
262
+ line-height: 1.3;
263
+ }
264
+
265
+ .markdown-list {
266
+ margin: 0.55rem 0;
267
+ padding-left: 1.45rem;
268
+ }
269
+
270
+ .markdown-list li + li {
271
+ margin-top: 0.25rem;
272
+ }
273
+
274
+ .message-markdown blockquote {
275
+ margin: 0.7rem 0;
276
+ padding-left: 0.85rem;
277
+ border-left: 3px solid var(--border);
278
+ color: var(--muted);
279
+ }
280
+
281
+ .message-markdown a {
282
+ color: var(--accent);
283
+ text-underline-offset: 0.16em;
284
+ }
285
+
286
+ .message-markdown :not(pre) > code,
287
+ .tool-command {
288
+ padding: 0.1em 0.3em;
289
+ border-radius: 5px;
290
+ background: var(--surface-secondary);
291
+ font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
292
+ font-size: 0.9em;
293
+ }
294
+
295
+ .message-error,
296
+ .composer-error {
297
+ color: var(--danger);
298
+ }
299
+
300
+ .image-chip {
301
+ display: inline-flex;
302
+ min-height: 32px;
303
+ align-items: center;
304
+ margin-top: 0.65rem;
305
+ padding: 0.25rem 0.55rem;
306
+ border: 1px solid var(--border);
307
+ border-radius: 999px;
308
+ color: var(--muted);
309
+ font-size: 0.82rem;
310
+ }
311
+
312
+ details {
313
+ max-width: 100%;
314
+ }
315
+
316
+ .message > details,
317
+ .message-body > details,
318
+ .message-error {
319
+ margin-top: 0.65rem;
320
+ }
321
+
322
+ .message-body summary,
323
+ footer summary {
324
+ min-height: 44px;
325
+ padding-block: 0.6rem;
326
+ color: var(--muted);
327
+ cursor: pointer;
328
+ }
329
+
330
+ pre {
331
+ max-width: 100%;
332
+ margin: 0;
333
+ padding: 0.7rem;
334
+ overflow: auto;
335
+ border-radius: 8px;
336
+ background: var(--surface-secondary);
337
+ font:
338
+ 0.82rem / 1.45 ui-monospace,
339
+ SFMono-Regular,
340
+ Consolas,
341
+ monospace;
342
+ white-space: pre-wrap;
343
+ overflow-wrap: anywhere;
344
+ }
345
+
346
+ .tool {
347
+ margin-top: 0.7rem;
348
+ border: 1px solid var(--border);
349
+ border-radius: 11px;
350
+ background: var(--surface);
351
+ }
352
+
353
+ .tool summary {
354
+ display: grid;
355
+ min-height: 44px;
356
+ grid-template-columns: minmax(0, auto) minmax(0, 1fr);
357
+ align-items: center;
358
+ gap: 0.65rem;
359
+ padding: 0.65rem 0.8rem;
360
+ }
361
+
362
+ .tool summary::marker {
363
+ color: var(--muted);
364
+ }
365
+
366
+ .tool-command {
367
+ overflow: hidden;
368
+ color: var(--muted);
369
+ text-overflow: ellipsis;
370
+ white-space: nowrap;
371
+ }
372
+
373
+ .tool pre {
374
+ margin: 0 0.75rem 0.75rem;
375
+ }
376
+
377
+ .tool.failed {
378
+ border-color: color-mix(in srgb, var(--danger) 45%, var(--border));
379
+ }
380
+
381
+ .tool.failed summary {
382
+ color: var(--danger);
383
+ }
384
+
385
+ .thinking {
386
+ color: var(--muted);
387
+ }
388
+
389
+ .blocking-state {
390
+ display: grid;
391
+ gap: 0.1rem;
392
+ margin-block: 1rem;
393
+ padding: 0.85rem 1rem;
394
+ border: 1px solid color-mix(in srgb, var(--danger) 35%, var(--border));
395
+ border-left: 4px solid var(--danger);
396
+ border-radius: 10px;
397
+ background: var(--danger-soft);
398
+ }
399
+
400
+ .blocking-state[hidden] {
401
+ display: none;
402
+ }
403
+
404
+ .jump-latest {
405
+ position: sticky;
406
+ z-index: 8;
407
+ bottom: calc(var(--composer-height, 10rem) + 1rem);
408
+ display: block;
409
+ min-height: 44px;
410
+ margin: 0.5rem auto;
411
+ padding: 0.5rem 0.85rem;
412
+ border: 1px solid var(--border);
413
+ border-radius: 999px;
414
+ color: var(--text);
415
+ background: var(--surface);
416
+ box-shadow: 0 5px 18px rgb(19 33 27 / 12%);
417
+ cursor: pointer;
418
+ }
419
+
420
+ .jump-latest[hidden] {
421
+ display: none;
422
+ }
423
+
424
+ .composer {
425
+ position: sticky;
426
+ z-index: 7;
427
+ bottom: 0.65rem;
428
+ display: grid;
429
+ gap: 0.55rem;
430
+ margin-top: 1.25rem;
431
+ padding: 0.85rem;
432
+ border: 1px solid var(--border);
433
+ border-radius: 15px;
434
+ background: color-mix(in srgb, var(--surface) 96%, transparent);
435
+ box-shadow: var(--shadow);
436
+ backdrop-filter: blur(10px);
437
+ transition:
438
+ border-color 0.15s,
439
+ background 0.15s,
440
+ transform 0.15s;
441
+ }
442
+
443
+ .composer.drag-active {
444
+ border-color: var(--accent);
445
+ background: color-mix(in srgb, var(--accent) 8%, var(--surface));
446
+ transform: scale(1.004);
447
+ }
448
+
449
+ .composer > label:first-child {
450
+ font-weight: 750;
451
+ }
452
+
453
+ textarea {
454
+ width: 100%;
455
+ min-height: 48px;
456
+ max-height: 32vh;
457
+ padding: 0.7rem 0.75rem;
458
+ resize: none;
459
+ border: 1px solid var(--border);
460
+ border-radius: 9px;
461
+ color: var(--text);
462
+ background: var(--surface);
463
+ overflow-y: auto;
464
+ }
465
+
466
+ textarea:disabled {
467
+ opacity: 0.68;
468
+ }
469
+
470
+ .composer-bottom,
471
+ .composer-support,
472
+ .send-actions {
473
+ display: flex;
474
+ align-items: center;
475
+ gap: 0.55rem;
476
+ }
477
+
478
+ .composer-bottom {
479
+ justify-content: space-between;
480
+ }
481
+
482
+ .composer-support {
483
+ min-width: 0;
484
+ }
485
+
486
+ .image-hint {
487
+ color: var(--muted);
488
+ font-size: 0.82rem;
489
+ }
490
+
491
+ .composer-status,
492
+ .composer-error,
493
+ .attachment-status {
494
+ margin: 0;
495
+ font-size: 0.84rem;
496
+ }
497
+
498
+ .composer-status,
499
+ .attachment-status {
500
+ color: var(--muted);
501
+ }
502
+
503
+ .image-previews {
504
+ display: flex;
505
+ gap: 0.6rem;
506
+ margin: 0;
507
+ padding: 0;
508
+ overflow-x: auto;
509
+ list-style: none;
510
+ }
511
+
512
+ .image-previews:empty {
513
+ display: none;
514
+ }
515
+
516
+ .image-preview-item {
517
+ display: grid;
518
+ min-width: 270px;
519
+ grid-template-columns: 68px minmax(6rem, 1fr) auto;
520
+ align-items: center;
521
+ gap: 0.5rem;
522
+ padding: 0.4rem;
523
+ border: 1px solid var(--border);
524
+ border-radius: 10px;
525
+ background: var(--surface-secondary);
526
+ }
527
+
528
+ .attachment-preview {
529
+ display: grid;
530
+ width: 68px;
531
+ height: 68px;
532
+ min-height: 0;
533
+ place-items: center;
534
+ border: 0;
535
+ border-radius: 7px;
536
+ padding: 0;
537
+ background: var(--surface);
538
+ cursor: zoom-in;
539
+ }
540
+
541
+ .image-previews img {
542
+ width: 100%;
543
+ height: 100%;
544
+ max-width: 100%;
545
+ object-fit: contain;
546
+ border-radius: 7px;
547
+ }
548
+
549
+ .image-previews span {
550
+ overflow: hidden;
551
+ text-overflow: ellipsis;
552
+ white-space: nowrap;
553
+ }
554
+
555
+ .button,
556
+ button {
557
+ min-height: 44px;
558
+ padding: 0.55rem 0.85rem;
559
+ border: 1px solid transparent;
560
+ border-radius: 9px;
561
+ font-weight: 680;
562
+ text-decoration: none;
563
+ cursor: pointer;
564
+ }
565
+
566
+ .button {
567
+ display: inline-flex;
568
+ align-items: center;
569
+ justify-content: center;
570
+ }
571
+
572
+ .button.primary {
573
+ color: var(--accent-text);
574
+ background: var(--accent);
575
+ }
576
+
577
+ .button.primary:hover:not(:disabled) {
578
+ background: var(--accent-hover);
579
+ }
580
+
581
+ .button.secondary,
582
+ .remove-image {
583
+ border-color: var(--border);
584
+ color: var(--text);
585
+ background: var(--surface);
586
+ }
587
+
588
+ button:disabled,
589
+ .button.disabled,
590
+ .button.primary:disabled {
591
+ cursor: not-allowed;
592
+ opacity: 1;
593
+ color: var(--muted);
594
+ background: var(--surface-secondary);
595
+ border-color: var(--border);
596
+ }
597
+
598
+ .button.disabled {
599
+ pointer-events: none;
600
+ }
601
+
602
+ footer {
603
+ padding-block: 0 2rem;
604
+ color: var(--muted);
605
+ font-size: 0.875rem;
606
+ }
607
+
608
+ footer p {
609
+ margin-top: 0;
610
+ }
611
+
612
+ .image-preview-dialog {
613
+ width: min(96vw, 1400px);
614
+ max-width: none;
615
+ height: 94dvh;
616
+ max-height: none;
617
+ overflow: hidden;
618
+ border: 1px solid var(--border);
619
+ border-radius: 16px;
620
+ padding: 0;
621
+ color: var(--text);
622
+ background: var(--surface);
623
+ }
624
+
625
+ .image-preview-dialog::backdrop {
626
+ background: rgb(11 17 30 / 88%);
627
+ }
628
+
629
+ .image-preview-content {
630
+ display: grid;
631
+ height: 100%;
632
+ grid-template-rows: auto minmax(0, 1fr);
633
+ }
634
+
635
+ .image-preview-content header {
636
+ display: flex;
637
+ align-items: center;
638
+ justify-content: space-between;
639
+ gap: 1rem;
640
+ padding: 0.7rem 0.9rem;
641
+ border-bottom: 1px solid var(--border);
642
+ }
643
+
644
+ .image-preview-content h2 {
645
+ margin: 0;
646
+ overflow: hidden;
647
+ font-size: 1rem;
648
+ text-overflow: ellipsis;
649
+ white-space: nowrap;
650
+ }
651
+
652
+ .image-preview-dismiss {
653
+ display: grid;
654
+ width: 100%;
655
+ height: 100%;
656
+ min-height: 0;
657
+ place-items: center;
658
+ border: 0;
659
+ border-radius: 0;
660
+ padding: 1rem;
661
+ background: var(--surface-secondary);
662
+ cursor: zoom-out;
663
+ }
664
+
665
+ .image-preview-dismiss img {
666
+ width: 100%;
667
+ height: 100%;
668
+ min-height: 0;
669
+ object-fit: contain;
670
+ }
671
+
672
+ .visually-hidden {
673
+ position: absolute;
674
+ width: 1px;
675
+ height: 1px;
676
+ padding: 0;
677
+ overflow: hidden;
678
+ clip: rect(0, 0, 0, 0);
679
+ white-space: nowrap;
680
+ border: 0;
681
+ }
682
+
683
+ [hidden] {
684
+ display: none;
685
+ }
686
+
687
+ @media (max-width: 640px) {
688
+ .session-header,
689
+ main,
690
+ footer {
691
+ width: min(100% - 1rem, 960px);
692
+ }
693
+
694
+ .session-header {
695
+ align-items: flex-start;
696
+ padding-top: 1rem;
697
+ }
698
+
699
+ .session-controls {
700
+ align-items: flex-end;
701
+ flex-direction: column;
702
+ }
703
+
704
+ .connection {
705
+ max-width: 100%;
706
+ text-align: center;
707
+ }
708
+
709
+ .session-details dl {
710
+ right: 0;
711
+ }
712
+
713
+ .message.user {
714
+ width: 95%;
715
+ }
716
+
717
+ .tool summary {
718
+ grid-template-columns: minmax(0, 1fr);
719
+ gap: 0.25rem;
720
+ }
721
+
722
+ .composer {
723
+ bottom: 0.25rem;
724
+ padding: 0.7rem;
725
+ border-radius: 12px;
726
+ }
727
+
728
+ .composer-bottom {
729
+ flex-wrap: wrap;
730
+ }
731
+
732
+ .composer-support {
733
+ flex: 1 1 auto;
734
+ }
735
+
736
+ .image-hint {
737
+ display: none;
738
+ }
739
+
740
+ .send-actions {
741
+ flex: 0 1 auto;
742
+ }
743
+
744
+ .image-preview-item {
745
+ min-width: min(100%, 270px);
746
+ }
747
+ }
748
+
749
+ @media (prefers-color-scheme: dark) {
750
+ :root {
751
+ color-scheme: dark;
752
+ --background: #10131a;
753
+ --surface: #181d27;
754
+ --surface-secondary: #232a37;
755
+ --text: #edf1f8;
756
+ --muted: #aeb7c8;
757
+ --border: #394254;
758
+ --accent: #70c8ad;
759
+ --accent-hover: #8ad8c0;
760
+ --accent-soft: #183a31;
761
+ --accent-text: #10211b;
762
+ --danger: #ff9298;
763
+ --danger-soft: #321c1f;
764
+ --focus: #83adff;
765
+ --shadow: 0 12px 32px rgb(0 0 0 / 30%);
766
+ }
767
+ }
768
+
769
+ @media (prefers-reduced-motion: reduce) {
770
+ html {
771
+ scroll-behavior: auto;
772
+ }
773
+
774
+ *,
775
+ *::before,
776
+ *::after {
777
+ transition-duration: 0.01ms;
778
+ animation-duration: 0.01ms;
779
+ animation-iteration-count: 1;
780
+ }
781
+ }