sidebud 0.1.0

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,1246 @@
1
+ /*
2
+ * Sidebud palette (docs/brand.md): charcoal #151718, ivory #FEF3E1, amber #FEB93E.
3
+ * Dark mirrors the phone (apps/mobile-app/src/constants/theme.ts) and is the default;
4
+ * light sets charcoal on ivory. Amber fills carry charcoal ink in both themes;
5
+ * `--amber-text` is amber that stays readable as text on the background.
6
+ */
7
+ :root,
8
+ [data-theme='dark'] {
9
+ color-scheme: dark;
10
+ --bg: #151718;
11
+ --sidebar: #101213;
12
+ --surface: #1f2223;
13
+ --raised: #292d2e;
14
+ --hover: #313637;
15
+ --border: #353a3b;
16
+ --border-soft: #25292a;
17
+ --text: #fef3e1;
18
+ --muted: #aba496;
19
+ --faint: #8a857a;
20
+ --amber: #feb93e;
21
+ --amber-hover: #ffc95f;
22
+ --amber-ink: #151718;
23
+ --amber-text: #feb93e;
24
+ --amber-soft: #feb93e1a;
25
+ --amber-line: #feb93e59;
26
+ --green: #7fd0a0;
27
+ --green-soft: #7fd0a01f;
28
+ --red: #ff7a68;
29
+ --red-soft: #ff7a681f;
30
+ --code-bg: #0e1011;
31
+ --code-text: #fef3e1;
32
+ --shadow: 0 1px 0 #fef3e108 inset, 0 8px 24px #00000033;
33
+ --focus: 0 0 0 3px #feb93e40;
34
+ }
35
+ [data-theme='light'] {
36
+ color-scheme: light;
37
+ --bg: #fdf8ef;
38
+ --sidebar: #f6eddc;
39
+ --surface: #fffdf9;
40
+ --raised: #f8f1e4;
41
+ --hover: #f1e7d4;
42
+ --border: #e3d7c1;
43
+ --border-soft: #ede3d0;
44
+ --text: #151718;
45
+ --muted: #5f5a50;
46
+ --faint: #8d8577;
47
+ --amber: #feb93e;
48
+ --amber-hover: #f5a91f;
49
+ --amber-ink: #151718;
50
+ --amber-text: #9a5f00;
51
+ --amber-soft: #feb93e29;
52
+ --amber-line: #d99a2a80;
53
+ --green: #1f7a52;
54
+ --green-soft: #1f7a521a;
55
+ --red: #b83d2e;
56
+ --red-soft: #b83d2e14;
57
+ --code-bg: #151718;
58
+ --code-text: #fef3e1;
59
+ --shadow: 0 1px 2px #15171808, 0 6px 18px #1517180d;
60
+ --focus: 0 0 0 3px #feb93e59;
61
+ }
62
+ :root {
63
+ font:
64
+ 14.5px/1.55 -apple-system,
65
+ BlinkMacSystemFont,
66
+ 'Segoe UI',
67
+ system-ui,
68
+ sans-serif;
69
+ color: var(--text);
70
+ background: var(--bg);
71
+ -webkit-font-smoothing: antialiased;
72
+ }
73
+ * {
74
+ box-sizing: border-box;
75
+ }
76
+ body {
77
+ margin: 0;
78
+ min-height: 100vh;
79
+ }
80
+ svg {
81
+ fill: none;
82
+ stroke: currentColor;
83
+ stroke-width: 1.8;
84
+ stroke-linecap: round;
85
+ stroke-linejoin: round;
86
+ }
87
+ ::selection {
88
+ background: var(--amber-line);
89
+ }
90
+
91
+ /* Shell */
92
+ .shell {
93
+ display: grid;
94
+ grid-template-columns: 250px minmax(0, 1fr);
95
+ min-height: 100vh;
96
+ /* Paint the sidebar column on the shell so it spans the full page height. */
97
+ background: linear-gradient(
98
+ to right,
99
+ var(--sidebar) 249px,
100
+ var(--border-soft) 249px 250px,
101
+ transparent 250px
102
+ );
103
+ }
104
+ .sidebar {
105
+ position: sticky;
106
+ top: 0;
107
+ height: 100vh;
108
+ display: flex;
109
+ flex-direction: column;
110
+ gap: 28px;
111
+ padding: 26px 16px 18px;
112
+ }
113
+ .content {
114
+ width: 100%;
115
+ max-width: 1360px;
116
+ padding: 44px 48px 64px;
117
+ }
118
+ .brand {
119
+ display: flex;
120
+ align-items: center;
121
+ gap: 12px;
122
+ padding: 0 8px;
123
+ }
124
+ .mark {
125
+ flex: 0 0 auto;
126
+ width: 40px;
127
+ height: 40px;
128
+ border-radius: 11px;
129
+ /* The icon's square is charcoal; a hairline keeps it distinct on either theme. */
130
+ box-shadow: 0 0 0 1px var(--border);
131
+ }
132
+ .brand h1 {
133
+ font-size: 17px;
134
+ letter-spacing: -0.01em;
135
+ margin: 0;
136
+ }
137
+ .brand small {
138
+ color: var(--amber-text);
139
+ }
140
+ h1 {
141
+ font-size: 15px;
142
+ line-height: 1.2;
143
+ margin: 2px 0 0;
144
+ font-weight: 650;
145
+ }
146
+ h2 {
147
+ font-size: 26px;
148
+ line-height: 1.2;
149
+ letter-spacing: -0.015em;
150
+ margin: 0 0 6px;
151
+ font-weight: 700;
152
+ }
153
+ h3 {
154
+ font-size: 15.5px;
155
+ line-height: 1.35;
156
+ margin: 0 0 4px;
157
+ font-weight: 650;
158
+ }
159
+ small {
160
+ font-size: 10.5px;
161
+ font-weight: 700;
162
+ letter-spacing: 0.1em;
163
+ text-transform: uppercase;
164
+ color: var(--faint);
165
+ }
166
+ nav {
167
+ display: grid;
168
+ gap: 2px;
169
+ }
170
+ nav a {
171
+ display: flex;
172
+ align-items: center;
173
+ gap: 11px;
174
+ padding: 9px 10px;
175
+ border-radius: 9px;
176
+ color: var(--muted);
177
+ text-decoration: none;
178
+ font-weight: 550;
179
+ white-space: nowrap;
180
+ transition:
181
+ background 0.12s,
182
+ color 0.12s;
183
+ }
184
+ nav a svg {
185
+ width: 18px;
186
+ height: 18px;
187
+ flex: 0 0 auto;
188
+ }
189
+ nav a:hover {
190
+ background: var(--raised);
191
+ color: var(--text);
192
+ }
193
+ nav a.nav-end {
194
+ margin-top: 12px;
195
+ position: relative;
196
+ }
197
+ nav a.nav-end::before {
198
+ content: '';
199
+ position: absolute;
200
+ top: -7px;
201
+ left: 10px;
202
+ right: 10px;
203
+ border-top: 1px solid var(--border-soft);
204
+ }
205
+ nav a.active {
206
+ background: var(--amber-soft);
207
+ color: var(--amber-text);
208
+ box-shadow: inset 0 0 0 1px var(--amber-line);
209
+ }
210
+ .sidebar-footer {
211
+ margin-top: auto;
212
+ display: flex;
213
+ align-items: center;
214
+ gap: 8px;
215
+ padding-top: 16px;
216
+ border-top: 1px solid var(--border-soft);
217
+ }
218
+ .local {
219
+ flex: 1;
220
+ min-width: 0;
221
+ display: flex;
222
+ align-items: center;
223
+ gap: 10px;
224
+ padding: 4px 8px;
225
+ }
226
+ .local strong,
227
+ .local span:not(.dot) {
228
+ display: block;
229
+ overflow: hidden;
230
+ text-overflow: ellipsis;
231
+ white-space: nowrap;
232
+ }
233
+ .local strong {
234
+ font-size: 13px;
235
+ font-weight: 600;
236
+ }
237
+ .local span:not(.dot) {
238
+ font-size: 12px;
239
+ color: var(--faint);
240
+ }
241
+ .dot {
242
+ flex: 0 0 auto;
243
+ width: 8px;
244
+ height: 8px;
245
+ border-radius: 50%;
246
+ background: var(--green);
247
+ box-shadow: 0 0 0 3px var(--green-soft);
248
+ }
249
+ .local-text {
250
+ flex: 1;
251
+ min-width: 0;
252
+ }
253
+ button.icon-button {
254
+ flex: 0 0 auto;
255
+ width: 28px;
256
+ height: 28px;
257
+ padding: 0;
258
+ display: grid;
259
+ place-items: center;
260
+ color: var(--faint);
261
+ background: transparent;
262
+ border-color: transparent;
263
+ }
264
+ button.icon-button:hover {
265
+ color: var(--text);
266
+ background: var(--raised);
267
+ }
268
+ .icon-button svg {
269
+ width: 15px;
270
+ height: 15px;
271
+ }
272
+ .local input.rename {
273
+ width: 100%;
274
+ padding: 4px 7px;
275
+ font-size: 13px;
276
+ font-weight: 600;
277
+ }
278
+ .local .rename-hint {
279
+ font-size: 11px;
280
+ }
281
+ button.theme-toggle {
282
+ flex: 0 0 auto;
283
+ width: 34px;
284
+ height: 34px;
285
+ padding: 0;
286
+ display: grid;
287
+ place-items: center;
288
+ color: var(--muted);
289
+ }
290
+ .theme-toggle svg {
291
+ width: 17px;
292
+ height: 17px;
293
+ }
294
+ [data-theme='dark'] .icon-moon,
295
+ [data-theme='light'] .icon-sun {
296
+ display: none;
297
+ }
298
+
299
+ /* Page content */
300
+ .section {
301
+ display: grid;
302
+ gap: 18px;
303
+ }
304
+ .section > div:first-child {
305
+ margin-bottom: 10px;
306
+ }
307
+ .section > div:first-child + div > h3:first-child {
308
+ margin-top: 0;
309
+ }
310
+ .section > div:not(.card):not(.grid):not(.default-agent) > h3 {
311
+ margin-top: 14px;
312
+ }
313
+ .lede {
314
+ color: var(--muted);
315
+ margin: 0;
316
+ max-width: 64ch;
317
+ }
318
+ .card {
319
+ background: var(--surface);
320
+ border: 1px solid var(--border);
321
+ border-radius: 14px;
322
+ padding: 22px 24px;
323
+ box-shadow: var(--shadow);
324
+ }
325
+ .card.muted {
326
+ border-style: dashed;
327
+ background: transparent;
328
+ box-shadow: none;
329
+ text-align: center;
330
+ padding: 28px;
331
+ }
332
+ .row {
333
+ display: flex;
334
+ align-items: center;
335
+ justify-content: space-between;
336
+ gap: 16px;
337
+ }
338
+ .row > h3 {
339
+ margin: 0;
340
+ }
341
+ .stack {
342
+ display: grid;
343
+ gap: 14px;
344
+ }
345
+ .stack > h3 {
346
+ margin: 0;
347
+ }
348
+ .stack > button {
349
+ justify-self: start;
350
+ }
351
+ .stack > h3 + .hint {
352
+ margin-top: -10px;
353
+ }
354
+ .grid {
355
+ display: grid;
356
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
357
+ gap: 16px;
358
+ }
359
+ .grid > .card {
360
+ display: flex;
361
+ flex-direction: column;
362
+ }
363
+ .grid > .card > .actions {
364
+ margin-top: auto;
365
+ padding-top: 16px;
366
+ }
367
+ .muted {
368
+ color: var(--muted);
369
+ }
370
+ .hint {
371
+ font-size: 13px;
372
+ color: var(--muted);
373
+ margin: 4px 0 0;
374
+ }
375
+ .error-text,
376
+ .hint.error-text {
377
+ color: var(--red);
378
+ }
379
+ .badge {
380
+ flex: 0 0 auto;
381
+ display: inline-flex;
382
+ align-items: center;
383
+ gap: 6px;
384
+ font-size: 12px;
385
+ font-weight: 600;
386
+ line-height: 1;
387
+ padding: 6px 10px;
388
+ border-radius: 999px;
389
+ background: var(--raised);
390
+ color: var(--muted);
391
+ white-space: nowrap;
392
+ }
393
+ .badge::before {
394
+ content: '';
395
+ width: 6px;
396
+ height: 6px;
397
+ border-radius: 50%;
398
+ background: currentColor;
399
+ opacity: 0.8;
400
+ }
401
+ .badge.good {
402
+ background: var(--green-soft);
403
+ color: var(--green);
404
+ }
405
+ .badge.warn {
406
+ background: var(--amber-soft);
407
+ color: var(--amber-text);
408
+ }
409
+ .badge.bad {
410
+ background: var(--red-soft);
411
+ color: var(--red);
412
+ }
413
+
414
+ /* Forms */
415
+ label {
416
+ display: grid;
417
+ gap: 7px;
418
+ font-size: 13px;
419
+ font-weight: 600;
420
+ color: var(--muted);
421
+ }
422
+ input,
423
+ select,
424
+ textarea {
425
+ font: inherit;
426
+ width: 100%;
427
+ padding: 10px 12px;
428
+ border: 1px solid var(--border);
429
+ border-radius: 10px;
430
+ background: var(--raised);
431
+ color: var(--text);
432
+ font-size: 14px;
433
+ font-weight: 400;
434
+ transition:
435
+ border-color 0.12s,
436
+ box-shadow 0.12s;
437
+ }
438
+ input::placeholder,
439
+ textarea::placeholder {
440
+ color: var(--faint);
441
+ }
442
+ input:focus,
443
+ select:focus,
444
+ textarea:focus {
445
+ outline: none;
446
+ border-color: var(--amber-line);
447
+ box-shadow: var(--focus);
448
+ }
449
+ select {
450
+ appearance: none;
451
+ padding-right: 36px;
452
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238a939e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
453
+ background-repeat: no-repeat;
454
+ background-position: right 11px center;
455
+ background-size: 16px;
456
+ cursor: pointer;
457
+ }
458
+ input[type='checkbox'],
459
+ input[type='radio'] {
460
+ width: 16px;
461
+ height: 16px;
462
+ margin: 0;
463
+ padding: 0;
464
+ accent-color: var(--amber-text);
465
+ cursor: pointer;
466
+ }
467
+ input[type='checkbox']:focus {
468
+ box-shadow: none;
469
+ }
470
+ textarea {
471
+ min-height: 100px;
472
+ resize: vertical;
473
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
474
+ font-size: 13px;
475
+ }
476
+ button {
477
+ font: inherit;
478
+ font-size: 13.5px;
479
+ font-weight: 600;
480
+ cursor: pointer;
481
+ border: 1px solid var(--border);
482
+ border-radius: 10px;
483
+ background: var(--raised);
484
+ color: var(--text);
485
+ padding: 8px 14px;
486
+ white-space: nowrap;
487
+ transition:
488
+ background 0.12s,
489
+ border-color 0.12s,
490
+ color 0.12s;
491
+ }
492
+ button:hover {
493
+ background: var(--hover);
494
+ }
495
+ button:focus-visible,
496
+ nav a:focus-visible,
497
+ summary:focus-visible {
498
+ outline: none;
499
+ box-shadow: var(--focus);
500
+ }
501
+ button.primary {
502
+ background: var(--amber);
503
+ border-color: var(--amber-text);
504
+ color: var(--amber-ink);
505
+ }
506
+ button.primary:hover {
507
+ background: var(--amber-hover);
508
+ border-color: var(--amber-hover);
509
+ }
510
+ button.danger {
511
+ background: transparent;
512
+ color: var(--red);
513
+ border-color: var(--border);
514
+ }
515
+ button.danger:hover {
516
+ background: var(--red-soft);
517
+ border-color: var(--red-soft);
518
+ }
519
+ button:disabled,
520
+ button:disabled:hover {
521
+ opacity: 0.5;
522
+ cursor: default;
523
+ background: var(--raised);
524
+ }
525
+ button.primary:disabled {
526
+ background: var(--amber);
527
+ }
528
+ .actions {
529
+ display: flex;
530
+ align-items: center;
531
+ gap: 8px;
532
+ flex-wrap: wrap;
533
+ margin-top: 16px;
534
+ }
535
+ .stack > .actions,
536
+ .setup-form .actions {
537
+ margin-top: 0;
538
+ }
539
+ .actions > input {
540
+ flex: 1 1 260px;
541
+ width: auto;
542
+ }
543
+ .divider {
544
+ border-top: 1px solid var(--border-soft);
545
+ margin: 18px 0;
546
+ }
547
+ .line {
548
+ border-top: 1px solid var(--border-soft);
549
+ padding: 14px 0;
550
+ }
551
+ .line:first-child {
552
+ border-top: 0;
553
+ padding-top: 0;
554
+ }
555
+ .pill {
556
+ display: inline-block;
557
+ font-size: 11.5px;
558
+ font-weight: 600;
559
+ padding: 2px 8px;
560
+ border-radius: 6px;
561
+ background: var(--raised);
562
+ color: var(--muted);
563
+ margin: 2px 3px 2px 0;
564
+ }
565
+ .code {
566
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
567
+ background: var(--raised);
568
+ border: 1px solid var(--border-soft);
569
+ color: var(--text);
570
+ border-radius: 6px;
571
+ padding: 1px 6px;
572
+ font-size: 12px;
573
+ overflow-wrap: anywhere;
574
+ }
575
+ pre {
576
+ overflow: auto;
577
+ margin: 4px 0;
578
+ background: var(--code-bg);
579
+ color: var(--code-text);
580
+ border: 1px solid var(--border-soft);
581
+ border-radius: 10px;
582
+ padding: 14px 16px;
583
+ font-size: 12.5px;
584
+ line-height: 1.7;
585
+ }
586
+
587
+ /* Status message */
588
+ #message:not(:empty) {
589
+ display: flex;
590
+ align-items: center;
591
+ gap: 10px;
592
+ padding: 12px 16px;
593
+ margin-bottom: 28px;
594
+ border-radius: 12px;
595
+ border: 1px solid var(--green-soft);
596
+ background: var(--green-soft);
597
+ color: var(--green);
598
+ font-weight: 550;
599
+ }
600
+ #message:not(:empty)::before {
601
+ content: '';
602
+ width: 7px;
603
+ height: 7px;
604
+ border-radius: 50%;
605
+ background: currentColor;
606
+ flex: 0 0 auto;
607
+ }
608
+ #message.error {
609
+ border-color: var(--red-soft);
610
+ background: var(--red-soft);
611
+ color: var(--red);
612
+ }
613
+ footer {
614
+ color: var(--faint);
615
+ font-size: 12px;
616
+ margin-top: 44px;
617
+ padding-top: 18px;
618
+ border-top: 1px solid var(--border-soft);
619
+ }
620
+
621
+ /* Disclosure */
622
+ .check {
623
+ display: flex;
624
+ align-items: center;
625
+ gap: 10px;
626
+ }
627
+ .check[hidden] {
628
+ display: none;
629
+ }
630
+ .check label {
631
+ display: inline;
632
+ color: var(--text);
633
+ font-weight: 500;
634
+ font-size: 14px;
635
+ }
636
+ label.check {
637
+ color: var(--muted);
638
+ font-weight: 500;
639
+ }
640
+ details {
641
+ border-top: 1px solid var(--border-soft);
642
+ padding-top: 14px;
643
+ margin-top: 6px;
644
+ }
645
+ .section > details {
646
+ border: 1px solid var(--border);
647
+ border-radius: 12px;
648
+ padding: 14px 18px;
649
+ margin: 0;
650
+ background: var(--surface);
651
+ }
652
+ summary {
653
+ cursor: pointer;
654
+ font-weight: 600;
655
+ color: var(--text);
656
+ list-style: none;
657
+ display: flex;
658
+ align-items: center;
659
+ gap: 8px;
660
+ border-radius: 6px;
661
+ }
662
+ summary::-webkit-details-marker {
663
+ display: none;
664
+ }
665
+ summary::before {
666
+ content: '';
667
+ width: 7px;
668
+ height: 7px;
669
+ border-right: 1.8px solid var(--faint);
670
+ border-bottom: 1.8px solid var(--faint);
671
+ transform: rotate(-45deg);
672
+ transition: transform 0.15s;
673
+ margin: 0 3px;
674
+ }
675
+ details[open] > summary::before {
676
+ transform: rotate(45deg);
677
+ }
678
+ details[open] > summary {
679
+ margin-bottom: 12px;
680
+ }
681
+ details p strong {
682
+ font-weight: 600;
683
+ }
684
+
685
+ /* Connection */
686
+ .pairing-qr {
687
+ width: min(240px, 100%);
688
+ height: auto;
689
+ padding: 12px;
690
+ background: #fff;
691
+ border-radius: 14px;
692
+ image-rendering: pixelated;
693
+ }
694
+
695
+ /* Phone layouts */
696
+ .tiles {
697
+ margin-top: 14px;
698
+ }
699
+ .tile {
700
+ display: grid;
701
+ grid-template-columns: minmax(0, 1fr) 130px auto auto;
702
+ align-items: center;
703
+ gap: 12px;
704
+ border-top: 1px solid var(--border-soft);
705
+ padding: 11px 0;
706
+ }
707
+ .tile .hint {
708
+ margin: 0;
709
+ font-size: 12px;
710
+ }
711
+ .tile select {
712
+ padding-top: 7px;
713
+ padding-bottom: 7px;
714
+ }
715
+ .tile > div:last-child {
716
+ display: flex;
717
+ gap: 4px;
718
+ }
719
+ .tile button {
720
+ width: 34px;
721
+ padding: 6px 0;
722
+ }
723
+ .executor-row {
724
+ display: flex;
725
+ justify-content: space-between;
726
+ align-items: center;
727
+ gap: 12px;
728
+ border-top: 1px solid var(--border-soft);
729
+ padding-top: 12px;
730
+ }
731
+
732
+ /* Execution */
733
+ .default-agent {
734
+ display: flex;
735
+ align-items: center;
736
+ justify-content: space-between;
737
+ gap: 20px;
738
+ padding: 24px 26px;
739
+ border-radius: 16px;
740
+ border: 1px solid var(--amber-line);
741
+ background:
742
+ radial-gradient(
743
+ 120% 140% at 0% 0%,
744
+ var(--amber-soft),
745
+ transparent 60%
746
+ ),
747
+ var(--surface);
748
+ box-shadow: var(--shadow);
749
+ }
750
+ .default-agent small {
751
+ color: var(--amber-text);
752
+ }
753
+ .default-agent h3 {
754
+ font-size: 24px;
755
+ letter-spacing: -0.01em;
756
+ margin: 6px 0 2px;
757
+ }
758
+ .default-agent p {
759
+ margin: 0;
760
+ color: var(--muted);
761
+ }
762
+ .section > .row {
763
+ margin-top: 8px;
764
+ }
765
+ .provider-tabs {
766
+ display: grid;
767
+ grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
768
+ gap: 8px;
769
+ }
770
+ button.provider-tab {
771
+ min-width: 0;
772
+ white-space: normal;
773
+ display: grid;
774
+ text-align: left;
775
+ gap: 3px;
776
+ padding: 12px 16px;
777
+ border-radius: 12px;
778
+ background: var(--surface);
779
+ color: var(--text);
780
+ }
781
+ .provider-tab span {
782
+ font-size: 12px;
783
+ font-weight: 500;
784
+ color: var(--faint);
785
+ }
786
+ button.provider-tab.selected {
787
+ border-color: var(--amber-line);
788
+ background: var(--amber-soft);
789
+ box-shadow: inset 0 0 0 1px var(--amber-line);
790
+ }
791
+ .provider-tab.selected strong,
792
+ .provider-tab.selected span {
793
+ color: var(--amber-text);
794
+ }
795
+ /* Agent rows flow into columns on wide screens instead of one long list. */
796
+ .agent-list {
797
+ display: grid;
798
+ grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));
799
+ column-gap: 40px;
800
+ }
801
+ .agent-choice {
802
+ min-width: 0;
803
+ display: flex;
804
+ justify-content: space-between;
805
+ align-items: center;
806
+ gap: 16px;
807
+ padding: 13px 0;
808
+ border-top: 1px solid var(--border-soft);
809
+ }
810
+ .agent-choice > div {
811
+ min-width: 0;
812
+ overflow-wrap: anywhere;
813
+ }
814
+ .agent-choice .hint {
815
+ margin-top: 2px;
816
+ }
817
+ .agent-choice.chosen strong {
818
+ color: var(--amber-text);
819
+ }
820
+ .agent-choice button {
821
+ flex-shrink: 0;
822
+ font-size: 12.5px;
823
+ padding: 6px 12px;
824
+ opacity: 0.85;
825
+ }
826
+ .agent-choice:hover button {
827
+ opacity: 1;
828
+ }
829
+ .empty-agents {
830
+ padding: 18px 0 4px;
831
+ margin: 0;
832
+ color: var(--muted);
833
+ }
834
+ .instance-status {
835
+ display: flex;
836
+ align-items: center;
837
+ gap: 12px;
838
+ font-size: 13px;
839
+ font-weight: 550;
840
+ }
841
+ .setup-form {
842
+ display: grid;
843
+ gap: 14px;
844
+ max-width: 560px;
845
+ padding-top: 4px;
846
+ }
847
+ .setup-form button {
848
+ justify-self: start;
849
+ }
850
+ .voice-preview {
851
+ display: flex;
852
+ align-items: center;
853
+ gap: 12px;
854
+ flex-wrap: wrap;
855
+ }
856
+ .voice-preview audio {
857
+ height: 36px;
858
+ max-width: 100%;
859
+ }
860
+
861
+ @media (max-width: 860px) {
862
+ .shell {
863
+ grid-template-columns: minmax(0, 1fr);
864
+ background: none;
865
+ }
866
+ .sidebar {
867
+ position: sticky;
868
+ z-index: 2;
869
+ height: auto;
870
+ gap: 14px;
871
+ padding: 14px 14px 10px;
872
+ background: var(--sidebar);
873
+ border-bottom: 1px solid var(--border-soft);
874
+ }
875
+ .brand {
876
+ padding: 0;
877
+ }
878
+ .brand small {
879
+ display: none;
880
+ }
881
+ nav {
882
+ display: flex;
883
+ flex-wrap: wrap;
884
+ gap: 4px;
885
+ padding-right: 44px;
886
+ }
887
+ .agent-list {
888
+ grid-template-columns: minmax(0, 1fr);
889
+ }
890
+ nav a {
891
+ padding: 7px 11px;
892
+ }
893
+ .sidebar-footer {
894
+ position: absolute;
895
+ top: 14px;
896
+ right: 14px;
897
+ margin: 0;
898
+ padding: 0;
899
+ border: 0;
900
+ }
901
+ .local {
902
+ display: none;
903
+ }
904
+ .content {
905
+ padding: 26px 16px 44px;
906
+ }
907
+ h2 {
908
+ font-size: 22px;
909
+ }
910
+ .card {
911
+ padding: 18px;
912
+ }
913
+ .row,
914
+ .default-agent,
915
+ .agent-choice {
916
+ align-items: flex-start;
917
+ flex-direction: column;
918
+ }
919
+ .tile {
920
+ grid-template-columns: minmax(0, 1fr) auto;
921
+ }
922
+ }
923
+
924
+ /* Keep form fields readable when the content column is wide. */
925
+ .stack > label,
926
+ .stack > .check,
927
+ .card > label {
928
+ max-width: 640px;
929
+ }
930
+ .empty-agents {
931
+ grid-column: 1 / -1;
932
+ }
933
+ .agent-actions {
934
+ display: flex;
935
+ align-items: center;
936
+ gap: 8px;
937
+ flex-shrink: 0;
938
+ }
939
+ .optional {
940
+ font-weight: 500;
941
+ color: var(--faint);
942
+ }
943
+ textarea.prompt-text,
944
+ #profile-prompt {
945
+ font-family: inherit;
946
+ font-size: 14px;
947
+ line-height: 1.55;
948
+ }
949
+ textarea.prompt-text {
950
+ min-height: 220px;
951
+ }
952
+ .stack > label:has(.prompt-text) {
953
+ max-width: none;
954
+ }
955
+
956
+ /* "…" menu for secondary card actions. */
957
+ details.menu {
958
+ position: relative;
959
+ border-top: 0;
960
+ padding-top: 0;
961
+ margin: 0 0 0 auto;
962
+ }
963
+ /* Pack cards: the agent button on its own row, then Share and the "…" menu. */
964
+ .pack-actions > button.primary {
965
+ flex: 1 0 100%;
966
+ }
967
+ details.menu > summary {
968
+ border: 1px solid var(--border);
969
+ border-radius: 10px;
970
+ background: var(--raised);
971
+ padding: 8px 12px;
972
+ line-height: 1;
973
+ font-size: 15px;
974
+ }
975
+ details.menu > summary::before {
976
+ display: none;
977
+ }
978
+ details.menu[open] > summary {
979
+ margin-bottom: 0;
980
+ }
981
+ details.menu .menu-list {
982
+ position: absolute;
983
+ z-index: 20;
984
+ bottom: calc(100% + 6px);
985
+ right: 0;
986
+ min-width: 200px;
987
+ display: flex;
988
+ flex-direction: column;
989
+ gap: 2px;
990
+ padding: 6px;
991
+ border: 1px solid var(--border);
992
+ border-radius: 12px;
993
+ background: var(--surface);
994
+ box-shadow: var(--shadow);
995
+ }
996
+ details.menu .menu-list button {
997
+ border: 0;
998
+ background: transparent;
999
+ text-align: left;
1000
+ padding: 8px 10px;
1001
+ }
1002
+ details.menu .menu-list button:hover:not(:disabled) {
1003
+ background: var(--raised);
1004
+ }
1005
+
1006
+
1007
+ /* Banners (pending restart, unfinished setup) */
1008
+ .banner {
1009
+ display: flex;
1010
+ align-items: center;
1011
+ justify-content: space-between;
1012
+ gap: 16px;
1013
+ margin-bottom: 18px;
1014
+ padding: 14px 18px;
1015
+ border: 1px solid var(--amber-line);
1016
+ border-radius: 14px;
1017
+ background: var(--amber-soft);
1018
+ }
1019
+ .banner .hint {
1020
+ margin: 2px 0 0;
1021
+ }
1022
+ a.button {
1023
+ display: inline-block;
1024
+ font-size: 13.5px;
1025
+ font-weight: 600;
1026
+ border-radius: 10px;
1027
+ padding: 8px 14px;
1028
+ background: var(--amber);
1029
+ color: var(--amber-ink);
1030
+ text-decoration: none;
1031
+ white-space: nowrap;
1032
+ }
1033
+ a.button:hover {
1034
+ background: var(--amber-hover);
1035
+ }
1036
+
1037
+ /* Setup */
1038
+ .setup-steps {
1039
+ display: flex;
1040
+ flex-wrap: wrap;
1041
+ gap: 6px;
1042
+ margin: 0;
1043
+ padding: 0;
1044
+ list-style: none;
1045
+ }
1046
+ .setup-steps button {
1047
+ display: flex;
1048
+ align-items: center;
1049
+ gap: 8px;
1050
+ background: transparent;
1051
+ border-color: var(--border-soft);
1052
+ color: var(--muted);
1053
+ }
1054
+ .setup-steps button.current {
1055
+ border-color: var(--amber-line);
1056
+ background: var(--amber-soft);
1057
+ color: var(--text);
1058
+ }
1059
+ .step-mark {
1060
+ display: inline-grid;
1061
+ place-items: center;
1062
+ width: 22px;
1063
+ height: 22px;
1064
+ flex: none;
1065
+ border-radius: 50%;
1066
+ background: var(--raised);
1067
+ font-size: 12px;
1068
+ }
1069
+ .done > .step-mark {
1070
+ background: var(--green-soft);
1071
+ color: var(--green);
1072
+ }
1073
+ .setup-grid {
1074
+ display: grid;
1075
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1076
+ gap: 16px;
1077
+ }
1078
+ .download-qr {
1079
+ width: min(200px, 100%);
1080
+ height: auto;
1081
+ padding: 10px;
1082
+ background: #fff;
1083
+ border-radius: 14px;
1084
+ image-rendering: pixelated;
1085
+ }
1086
+ .plain-steps {
1087
+ margin: 0;
1088
+ padding-left: 20px;
1089
+ }
1090
+ .plain-steps li + li {
1091
+ margin-top: 8px;
1092
+ }
1093
+ .setup-nav {
1094
+ display: flex;
1095
+ align-items: center;
1096
+ justify-content: space-between;
1097
+ gap: 12px;
1098
+ padding-top: 4px;
1099
+ }
1100
+ .setup-nav .actions {
1101
+ margin: 0;
1102
+ }
1103
+ .integration-options {
1104
+ display: grid;
1105
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
1106
+ gap: 10px;
1107
+ }
1108
+ .integration-option {
1109
+ display: flex;
1110
+ align-items: flex-start;
1111
+ gap: 12px;
1112
+ padding: 12px 14px;
1113
+ border: 1px solid var(--border-soft);
1114
+ border-radius: 12px;
1115
+ background: var(--raised);
1116
+ cursor: pointer;
1117
+ }
1118
+ .integration-option input {
1119
+ margin-top: 4px;
1120
+ }
1121
+ .integration-option.unavailable {
1122
+ opacity: 0.65;
1123
+ cursor: default;
1124
+ }
1125
+ .setup-summary {
1126
+ margin: 0;
1127
+ padding: 0;
1128
+ list-style: none;
1129
+ }
1130
+ .setup-summary li {
1131
+ display: flex;
1132
+ align-items: center;
1133
+ gap: 10px;
1134
+ padding: 8px 0;
1135
+ border-bottom: 1px solid var(--border-soft);
1136
+ }
1137
+ .setup-summary li button {
1138
+ margin-left: auto;
1139
+ }
1140
+ .setup-grid > .card {
1141
+ align-content: start;
1142
+ }
1143
+ .content a:not(.button) {
1144
+ color: var(--amber-text);
1145
+ }
1146
+ button.link { background: none; border: none; padding: 0; color: inherit; text-decoration: underline; cursor: pointer; font: inherit; }
1147
+ #voice-endpoint:empty {
1148
+ display: none;
1149
+ }
1150
+
1151
+ /* Setup finished */
1152
+ .setup-complete .row {
1153
+ justify-content: flex-start;
1154
+ align-items: flex-start;
1155
+ gap: 16px;
1156
+ }
1157
+ .setup-complete p {
1158
+ margin: 6px 0 0;
1159
+ }
1160
+ .done-badge {
1161
+ display: inline-grid;
1162
+ place-items: center;
1163
+ width: 44px;
1164
+ height: 44px;
1165
+ flex: none;
1166
+ border-radius: 50%;
1167
+ background: var(--green-soft);
1168
+ color: var(--green);
1169
+ font-size: 22px;
1170
+ font-weight: 700;
1171
+ }
1172
+ .manage-links {
1173
+ display: grid;
1174
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
1175
+ gap: 10px;
1176
+ }
1177
+ .content a.manage-link {
1178
+ display: grid;
1179
+ gap: 4px;
1180
+ padding: 12px 14px;
1181
+ border: 1px solid var(--border-soft);
1182
+ border-radius: 12px;
1183
+ background: var(--raised);
1184
+ color: var(--text);
1185
+ text-decoration: none;
1186
+ }
1187
+ .content a.manage-link:hover {
1188
+ background: var(--hover);
1189
+ }
1190
+
1191
+ /* Settings */
1192
+ .account-row {
1193
+ display: flex;
1194
+ align-items: center;
1195
+ gap: 12px;
1196
+ }
1197
+ .account-row .hint {
1198
+ margin: 0;
1199
+ }
1200
+ .avatar {
1201
+ flex: 0 0 auto;
1202
+ width: 38px;
1203
+ height: 38px;
1204
+ border-radius: 50%;
1205
+ display: grid;
1206
+ place-items: center;
1207
+ background: var(--amber);
1208
+ color: var(--amber-ink);
1209
+ font-weight: 700;
1210
+ }
1211
+ .device-code {
1212
+ display: grid;
1213
+ gap: 2px;
1214
+ justify-items: start;
1215
+ padding: 14px 18px;
1216
+ border: 1px dashed var(--amber-line);
1217
+ border-radius: 12px;
1218
+ background: var(--amber-soft);
1219
+ }
1220
+ .device-code strong {
1221
+ font: 700 26px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
1222
+ letter-spacing: 0.14em;
1223
+ color: var(--amber-text);
1224
+ }
1225
+ ol.steps {
1226
+ margin: 0;
1227
+ padding-left: 20px;
1228
+ }
1229
+ .segmented {
1230
+ display: inline-flex;
1231
+ gap: 4px;
1232
+ padding: 3px;
1233
+ border: 1px solid var(--border);
1234
+ border-radius: 11px;
1235
+ background: var(--raised);
1236
+ justify-self: start;
1237
+ }
1238
+ .segmented button {
1239
+ border-color: transparent;
1240
+ background: transparent;
1241
+ padding: 6px 16px;
1242
+ }
1243
+ .segmented button[aria-pressed='true'] {
1244
+ background: var(--amber);
1245
+ color: var(--amber-ink);
1246
+ }