micro-models-agent 2.4.0 → 2.8.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.
@@ -1,3 +1,4 @@
1
+ /* ---- theme tokens (dark default; light override further below) ---- */
1
2
  :root {
2
3
  --bg: #12161d;
3
4
  --fg: #e6edf3;
@@ -144,6 +145,7 @@ body {
144
145
  font-size: 13px; display: flex; flex-direction: column; overflow: hidden;
145
146
  }
146
147
 
148
+ /* ---- topbar: new chat, sessions dropdown, tabstrip, settings ---- */
147
149
  .bar-top {
148
150
  display: flex; gap: 14px; align-items: center;
149
151
  padding: 8px 14px; background: var(--panel); border-bottom: 1px solid var(--border);
@@ -156,6 +158,7 @@ body {
156
158
  .icon-btn:hover { background: var(--hover-bg); color: var(--fg); }
157
159
  .icon-btn.primary { color: var(--accent); }
158
160
  #openSettings { margin-left: auto; margin-right: 6px; }
161
+ #toggleSidebar { display: none; }
159
162
  .conn { color: var(--dim-a); font-size: 11.5px; white-space: nowrap; }
160
163
  .tabstrip {
161
164
  display: flex; gap: 4px; align-items: center; overflow-x: auto;
@@ -176,7 +179,6 @@ body {
176
179
  .stab:hover { color: var(--fg); }
177
180
  .stab.on { background: var(--stab-on-bg); color: var(--fg); border-color: var(--border); }
178
181
  .stab .name { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
179
- .stab .sid { flex: 0 0 auto; color: var(--dim-b); font-size: 11px; }
180
182
  .stab .stab-x {
181
183
  flex: 0 0 auto; width: 18px; height: 18px; padding: 0; justify-content: center;
182
184
  color: var(--dim-b); border-radius: 3px; cursor: pointer;
@@ -216,6 +218,7 @@ body {
216
218
  .dd-menu .act { display: flex; align-items: center; gap: 8px; width: 100%; text-align: left; padding: 7px 8px; border-radius: 4px; cursor: pointer; color: var(--accent); font-size: 12.5px; }
217
219
  .dd-menu .act:hover { background: var(--accent-bg); }
218
220
 
221
+ /* ---- layout + chat feed (messages, cards, markdown, tool output) ---- */
219
222
  .layout { flex: 1; display: flex; min-height: 0; }
220
223
 
221
224
  /* chat */
@@ -239,6 +242,11 @@ body {
239
242
  .think-h .tog:hover { color: var(--dim-a); }
240
243
  .think-body { color: var(--dim-c); padding-left: 18px; white-space: pre-wrap; font-size: 12.5px; overflow-wrap: anywhere; }
241
244
  .think-body.hidden { display: none; }
245
+ .metaln {
246
+ color: var(--dim-c); padding-left: 26px; white-space: pre-wrap;
247
+ font-size: 12.5px; overflow-wrap: anywhere;
248
+ }
249
+ .metaln.warn { color: var(--yellow); }
242
250
  .act { display: flex; gap: 8px; min-width: 0; }
243
251
  .act .lab { white-space: nowrap; }
244
252
  .act .args { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
@@ -280,6 +288,69 @@ body.light .code { border: 1px solid var(--border); }
280
288
  .toolout .more { color: var(--dim-b); cursor: pointer; font-size: 12px; }
281
289
  .toolout .more:hover { color: var(--dim-a); }
282
290
 
291
+ /* markdown answers (streamed by md.js) — lines and glyphs, no boxes */
292
+ .md { color: var(--ans); overflow-wrap: anywhere; }
293
+ .md > * { flex-shrink: 0; }
294
+ .md p { margin: 4px 0; white-space: pre-wrap; }
295
+ .md h1, .md h2, .md h3, .md h4, .md h5, .md h6 {
296
+ color: var(--fg); font-weight: 600; line-height: 1.3; margin: 10px 0 4px;
297
+ }
298
+ .md h1 { font-size: 1.35em; }
299
+ .md h2 { font-size: 1.2em; }
300
+ .md h3 { font-size: 1.1em; }
301
+ .md h4, .md h5, .md h6 { font-size: 1em; }
302
+ .md h1:first-child, .md h2:first-child, .md h3:first-child { margin-top: 2px; }
303
+ .md ul, .md ol { margin: 4px 0; padding-left: 22px; }
304
+ .md li { margin: 1px 0; }
305
+ .md li > p { margin: 0; }
306
+ .md blockquote { margin: 4px 0; padding-left: 10px; border-left: 2px solid var(--pipe); color: var(--dim-a); }
307
+ .md hr { border: 0; border-top: 1px solid var(--rule); margin: 8px 0; }
308
+ .md a { color: var(--accent); text-decoration: none; }
309
+ .md a:hover { text-decoration: underline; }
310
+ .md img { max-width: 100%; border-radius: 4px; }
311
+ .md code {
312
+ background: var(--surface); color: var(--fg); padding: 1px 5px;
313
+ border-radius: 3px; font-size: .92em;
314
+ }
315
+ .md pre code { background: none; padding: 0; border-radius: 0; font-size: inherit; }
316
+ .md input[type="checkbox"] { margin-right: 4px; vertical-align: middle; }
317
+ .md table { border-collapse: collapse; margin: 6px 0; font-size: .95em; }
318
+ .md th { color: var(--fg); font-weight: 600; text-align: left; padding: 2px 14px 3px 0; }
319
+ .md td { color: var(--ans); padding: 2px 14px 3px 0; border-top: 1px solid var(--border-3); }
320
+
321
+ /* fenced code block: dim header (language · copy) + code body */
322
+ .codeblock { margin: 6px 0; background: var(--surface); border-radius: 4px; overflow: hidden; }
323
+ body.light .codeblock { border: 1px solid var(--border); }
324
+ .cb-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 3px 8px 3px 12px; font-size: 11.5px; color: var(--dim-b); }
325
+ .cb-lang { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
326
+ .cb-copy { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; padding: 0; border: 0; border-radius: 4px; background: transparent; color: var(--dim-b); cursor: pointer; }
327
+ .cb-copy .svg-icon { width: 14px; height: 14px; }
328
+ .cb-copy:hover:not(:disabled) { background: var(--hover-bg); color: var(--fg); }
329
+ .cb-copy:disabled { opacity: .3; cursor: default; }
330
+ .cb-copy.done { color: var(--green); }
331
+ .codeblock pre { margin: 0; padding: 6px 12px 10px; overflow-x: auto; max-height: 420px; overflow-y: auto; }
332
+ .codeblock code { display: block; white-space: pre; color: var(--fg); font-size: 12.5px; line-height: 1.55; }
333
+
334
+ /* highlight.js token palette — reuses the theme's semantic tokens */
335
+ .hljs-comment, .hljs-quote { color: var(--dim-b); font-style: italic; }
336
+ .hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-doctag { color: var(--red); }
337
+ .hljs-string, .hljs-attr, .hljs-attribute, .hljs-regexp, .hljs-link { color: var(--accent); }
338
+ .hljs-number, .hljs-symbol, .hljs-bullet { color: var(--accent); }
339
+ .hljs-title, .hljs-section, .hljs-selector-id, .hljs-selector-class { color: var(--purple); }
340
+ .hljs-built_in, .hljs-type, .hljs-class .hljs-title { color: var(--yellow); }
341
+ .hljs-variable, .hljs-template-variable, .hljs-params, .hljs-property { color: var(--fg); }
342
+ .hljs-meta { color: var(--dim-a); }
343
+ .hljs-tag, .hljs-name, .hljs-selector-pseudo { color: var(--green); }
344
+ .hljs-deletion { color: var(--red); }
345
+ .hljs-addition { color: var(--green); }
346
+ .hljs-emphasis { font-style: italic; }
347
+ .hljs-strong { font-weight: 700; }
348
+
349
+ /* per-message copy actions */
350
+ .msg-actions { display: flex; gap: 12px; margin: 3px 0 6px; }
351
+ .act-btn { font: inherit; font-size: 11.5px; color: var(--dim-b); background: none; border: 0; padding: 0; cursor: pointer; }
352
+ .act-btn:hover { color: var(--fg); }
353
+
283
354
  /* tool payload cards in chat */
284
355
  .imgcard {
285
356
  margin-left: 26px; max-width: 360px; border-radius: 4px; overflow: hidden;
@@ -298,14 +369,27 @@ body.light .code { border: 1px solid var(--border); }
298
369
  body.light .imgcard .ph { background: var(--ph-light); }
299
370
  .imgcard .cap { padding: 6px 10px; color: var(--dim-a); font-size: 12px; }
300
371
  .filecard {
301
- margin-left: 26px; padding: 7px 12px; border-radius: 4px;
372
+ margin-left: 26px; padding: 8px 12px; border-radius: 6px;
302
373
  background: var(--surface); border: 1px solid var(--border-2); color: var(--muted);
303
- display: flex; gap: 10px; align-items: baseline; font-size: 12.5px;
304
- max-width: 480px; min-width: 0;
374
+ display: flex; flex-direction: column; gap: 6px; align-items: stretch;
375
+ font-size: 12.5px; max-width: 480px; min-width: 0;
305
376
  }
377
+ .filecard .fc-top { display: flex; gap: 8px; align-items: baseline; min-width: 0; }
306
378
  .filecard .g { color: var(--cyan); flex: 0 0 auto; }
307
- .filecard .name { color: var(--fg); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
308
- .filecard .meta { color: var(--dim-b); margin-left: auto; flex: 0 0 auto; }
379
+ .filecard .name {
380
+ color: var(--fg); min-width: 0; overflow-wrap: anywhere; word-break: break-word;
381
+ }
382
+ .filecard .fc-bottom {
383
+ display: flex; gap: 10px; align-items: center; justify-content: space-between;
384
+ }
385
+ .filecard .lab { color: var(--dim-a); min-width: 0; overflow-wrap: anywhere; }
386
+ .filecard .fc-open {
387
+ flex: 0 0 auto; font: inherit; font-size: 12px; line-height: 1.4;
388
+ color: var(--accent); background: transparent; border: 1px solid var(--border-2);
389
+ border-radius: 4px; padding: 2px 10px; cursor: pointer; text-decoration: none;
390
+ }
391
+ .filecard .fc-open:hover { border-color: var(--accent); text-decoration: none; }
392
+ .filecard .fc-open:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
309
393
  .linkline { margin-left: 26px; min-width: 0; overflow-wrap: anywhere; }
310
394
  .linkline a { color: var(--accent); text-decoration: none; overflow-wrap: anywhere; word-break: break-word; }
311
395
  .linkline a:hover { text-decoration: underline; }
@@ -353,7 +437,7 @@ body.light .imgcard .ph { background: var(--ph-light); }
353
437
  }
354
438
  .empty .g { color: var(--green); }
355
439
 
356
- /* input */
440
+ /* ---- composer: selectors, attachments, input, autocomplete ---- */
357
441
  .input-area { margin: 14px 22px 16px; position: relative; }
358
442
  .selectors { display: flex; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
359
443
  .sel { position: relative; }
@@ -482,7 +566,7 @@ body.light .sel > button { border: 1px solid var(--border); }
482
566
  .input-area.dragover .composer { border-color: var(--accent); box-shadow: 0 0 0 2px var(--input-shadow); }
483
567
  @keyframes blink { 50% { opacity: 0; } }
484
568
 
485
- /* sidebar — sections with independent scroll */
569
+ /* ---- sidebar — plan / usage / environment sections ---- */
486
570
  .sb {
487
571
  width: 280px; min-width: 280px; display: flex; flex-direction: column;
488
572
  border-left: 1px solid var(--border); background: var(--sb-bg); min-height: 0;
@@ -527,6 +611,16 @@ body.light .kv b { color: var(--fg); }
527
611
  .kv .dim { color: var(--dim-a); }
528
612
  .kv .wn { color: var(--yellow); }
529
613
  body.light .kv .wn { color: var(--yellow); }
614
+ .kv-val { display: inline-flex; align-items: center; gap: 4px; min-width: 0; }
615
+ .kv-val b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
616
+ .copy-btn {
617
+ display: inline-flex; align-items: center; justify-content: center;
618
+ width: 18px; height: 18px; padding: 0; flex: 0 0 auto;
619
+ border: 0; border-radius: 3px; background: transparent;
620
+ color: var(--dim-b); cursor: pointer;
621
+ }
622
+ .copy-btn .svg-icon { width: 12px; height: 12px; }
623
+ .copy-btn:hover { color: var(--fg); background: var(--hover-bg); }
530
624
  /* Environment section: stacked items (name on top, dim value below). */
531
625
  #env .env-item { padding: 3px 0; }
532
626
  #env .env-k { color: var(--muted); font-size: 12px; }
@@ -534,7 +628,7 @@ body.light .kv .wn { color: var(--yellow); }
534
628
  .bar { height: 4px; background: var(--track); border-radius: 2px; margin-top: 6px; overflow: hidden; }
535
629
  .bar i { display: block; height: 100%; width: 0; background: var(--green-fill); transition: width .2s; }
536
630
 
537
- /* settings modal */
631
+ /* ---- settings modal + nested dialogs (provider, confirm) ---- */
538
632
  .overlay {
539
633
  display: none; position: fixed; inset: 0; z-index: 50;
540
634
  background: var(--overlay); align-items: center; justify-content: center;
@@ -572,6 +666,16 @@ body.light .kv .wn { color: var(--yellow); }
572
666
  .confirm-actions .linkbtn:hover { text-decoration: none; background: var(--hover-bg-2); }
573
667
  .confirm-actions .linkbtn.danger { border-color: var(--red-strong); color: var(--red-strong); }
574
668
  .confirm-actions .linkbtn.danger:hover { background: var(--x-hover-bg); }
669
+
670
+ /* nested provider add/edit dialog (opens above the settings modal) */
671
+ .overlay.overlay-nested { z-index: 60; }
672
+ .modal.modal-provider {
673
+ width: min(520px, 92vw); height: auto; max-height: 88vh; border-radius: 8px;
674
+ }
675
+ .provider-body { display: block; padding: 20px 22px 22px; overflow-y: auto; }
676
+ .provider-body .pform {
677
+ margin: 0; padding: 0; border: 0; background: none;
678
+ }
575
679
  .menu-col {
576
680
  width: 200px; min-width: 200px; padding: 12px 8px;
577
681
  border-right: 1px solid var(--border); overflow-y: auto;
@@ -707,23 +811,73 @@ body.light .toggle { background: var(--toggle-off); }
707
811
  .mem-add input { flex: 1 1 180px; min-width: 0; }
708
812
  .mem-add .linkbtn { flex: 0 0 auto; }
709
813
 
814
+ /* settings sections (models / providers) */
815
+ .settings-section { margin-bottom: 22px; }
816
+ .sec-head {
817
+ display: flex; align-items: baseline; gap: 10px;
818
+ padding: 0 0 6px; border-bottom: 1px solid var(--border-3);
819
+ }
820
+ .sec-title { font-size: 11.5px; text-transform: uppercase; letter-spacing: .05em; color: var(--dim-a); }
821
+ .sec-add {
822
+ margin-left: auto; display: inline-flex; align-items: center; gap: 5px;
823
+ font: inherit; font-size: 12px; color: var(--accent);
824
+ background: none; border: 0; padding: 2px 0; cursor: pointer;
825
+ }
826
+ .sec-add:hover { text-decoration: underline; }
827
+ .sec-add .svg-icon { width: 13px; height: 13px; }
828
+ .sec-body { padding-top: 8px; }
829
+
830
+ /* model catalog */
831
+ .model-list { max-height: 320px; overflow-y: auto; }
832
+ .model-item {
833
+ display: flex; align-items: center; gap: 10px;
834
+ padding: 6px 0; border-bottom: 1px solid var(--border-3);
835
+ font-size: 12.5px; color: var(--muted);
836
+ }
837
+ .model-item:last-child { border-bottom: none; }
838
+ .model-item .m-name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
839
+ .model-item.active .m-name { color: var(--purple); }
840
+ .model-item .m-meta { color: var(--dim-a); white-space: nowrap; flex: 0 0 auto; }
841
+
842
+ /* provider entries */
843
+ .provider-list { display: flex; flex-direction: column; }
844
+ .provider-item { padding: 8px 0; border-bottom: 1px solid var(--border-3); }
845
+ .provider-item:last-child { border-bottom: none; }
846
+ .provider-item .p-head { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
847
+ .provider-item .p-name { color: var(--fg); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
848
+ .provider-item .badge {
849
+ flex: 0 0 auto; font-size: 10.5px; text-transform: uppercase; letter-spacing: .04em;
850
+ color: var(--green); border: 1px solid var(--border-2); border-radius: 999px; padding: 1px 7px;
851
+ }
852
+ .provider-item .p-meta { color: var(--dim-a); font-size: 11.5px; margin-top: 2px; overflow-wrap: anywhere; }
853
+ .provider-item .p-actions { display: flex; gap: 12px; margin-top: 6px; }
854
+ .chip { font: inherit; font-size: 11.5px; color: var(--accent); background: none; border: 0; padding: 0; cursor: pointer; }
855
+ .chip:hover { text-decoration: underline; }
856
+ .chip.danger { color: var(--red-strong); }
857
+
710
858
  /* provider add/edit form */
711
- .add-provider { display: inline-block; padding: 8px 0; }
712
859
  .pform {
713
- margin-top: 10px; padding: 12px; border: 1px solid var(--border-2); border-radius: 6px;
860
+ margin-top: 12px; padding: 12px; border: 1px solid var(--border-2); border-radius: 6px;
714
861
  background: var(--surface);
715
862
  }
863
+ .pform-title { font-size: 12.5px; color: var(--fg); margin-bottom: 10px; }
716
864
  .pform-grid {
717
865
  display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
718
- gap: 8px 12px;
866
+ gap: 14px;
719
867
  }
720
- .pform-field { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
868
+ .pform-field { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
721
869
  .pform-field label { font-size: 11px; color: var(--dim-a); text-transform: uppercase; letter-spacing: .04em; }
722
- .pform-field input {
870
+ .pform-field input,
871
+ .pform-field select {
723
872
  background: var(--input-surface); border: 1px solid var(--border-2); border-radius: 4px;
724
- color: var(--fg); font: inherit; font-size: 12.5px; padding: 5px 8px; width: 100%; min-width: 0;
725
- }
726
- .pform-actions { display: flex; gap: 14px; align-items: center; padding-top: 10px; }
873
+ color: var(--fg); font: inherit; font-size: 12.5px; padding: 6px 8px; width: 100%; min-width: 0;
874
+ }
875
+ /* preset row sits above the field grid — keep it off the fields */
876
+ .provider-body .pform > .pform-field { margin-bottom: 16px; }
877
+ .pform-adv { margin-top: 18px; }
878
+ .pform-adv summary { cursor: pointer; font-size: 11.5px; color: var(--dim-a); text-transform: uppercase; letter-spacing: .04em; }
879
+ .pform-adv .pform-grid { margin-top: 12px; }
880
+ .pform-actions { display: flex; gap: 14px; align-items: center; padding-top: 22px; }
727
881
  .pform-actions .linkbtn.dim { color: var(--dim-a); }
728
882
  .settings-note { color: var(--dim-b); font-size: 11.5px; line-height: 1.7; padding: 8px 0 4px; }
729
883
 
@@ -831,13 +985,19 @@ button.toggle:disabled { opacity: .5; cursor: default; }
831
985
  @media (max-width: 760px) {
832
986
  .bar-top { gap: 8px; padding: 8px 10px; }
833
987
  .conn { display: none; }
988
+ /* Sidebar toggle lives next to settings; settings keeps the right edge. */
989
+ #toggleSidebar { display: inline-flex; }
990
+ #openSettings { margin-left: 0; }
834
991
  .layout { flex-direction: column; }
835
992
  .chat { min-height: 0; }
836
- .sb {
837
- width: 100%; min-width: 0; max-height: 42vh;
838
- border-left: none; border-top: 1px solid var(--border);
993
+ /* Phones: sidebar hidden, opens as an overlay drawer via body.sb-open. */
994
+ .sb { display: none; }
995
+ body.sb-open .sb {
996
+ display: flex; position: fixed; top: 41px; right: 0; bottom: 0; z-index: 45;
997
+ width: min(320px, 85vw); min-width: 0; max-height: none;
998
+ border-left: 1px solid var(--border); border-top: none;
999
+ box-shadow: var(--shadow-dd);
839
1000
  }
840
- .sec.usage-sec { max-height: 50%; }
841
1001
  .msgs { padding: 14px; }
842
1002
  .input-area { margin: 10px 14px 12px; }
843
1003
  .inp-meta { flex-wrap: wrap; gap: 8px; }
@@ -861,3 +1021,93 @@ button.toggle:disabled { opacity: .5; cursor: default; }
861
1021
  .input-area { margin: 8px 10px 10px; }
862
1022
  .msgs { padding: 12px 10px; }
863
1023
  }
1024
+
1025
+ /* --- First-run setup gate ---------------------------------------------------
1026
+ Full-screen wizard shown when the config is virgin. No boxed panels: rows,
1027
+ glyphs and dim separators per docs/design/ui/STYLE.md. `body.setup-active`
1028
+ hides the chat chrome so the wizard owns the viewport. */
1029
+ body.setup-active .bar-top,
1030
+ body.setup-active .layout { display: none; }
1031
+
1032
+ .setup-gate[hidden] { display: none; }
1033
+ .setup-gate {
1034
+ position: fixed; inset: 0; z-index: 60;
1035
+ background: var(--bg); color: var(--fg);
1036
+ overflow-y: auto;
1037
+ display: flex; justify-content: center;
1038
+ padding: 48px 20px;
1039
+ }
1040
+ .setup-wrap { width: 100%; max-width: 560px; }
1041
+ .setup-h { font-size: 20px; font-weight: 600; margin: 0 0 4px; }
1042
+ .setup-h .glyph { color: var(--accent); margin-right: 8px; }
1043
+ .setup-sub { color: var(--dim-a); font-size: 13px; margin: 0 0 22px; }
1044
+
1045
+ .setup-steps {
1046
+ display: flex; flex-wrap: wrap; gap: 4px;
1047
+ font-size: 12px; color: var(--dim-b); margin-bottom: 22px;
1048
+ }
1049
+ .setup-steps .s.on { color: var(--accent); }
1050
+ .setup-steps .s.done { color: var(--green); }
1051
+ .setup-steps .sep { color: var(--rule); }
1052
+
1053
+ .setup-step-title { font-size: 15px; font-weight: 600; margin: 0 0 4px; }
1054
+ .setup-hint { color: var(--dim-a); font-size: 12.5px; margin: 0 0 14px; line-height: 1.5; }
1055
+
1056
+ .setup-field { margin-bottom: 14px; }
1057
+ .setup-label { display: block; font-size: 12px; color: var(--dim-a); margin-bottom: 5px; }
1058
+ .setup-input {
1059
+ width: 100%; box-sizing: border-box;
1060
+ background: var(--inp-bg); color: var(--fg);
1061
+ border: 1px solid var(--border-2); border-radius: 7px;
1062
+ padding: 8px 10px; font-size: 13.5px; font-family: inherit;
1063
+ }
1064
+ .setup-input:focus-visible { outline: none; border-color: var(--inp-focus); box-shadow: 0 0 0 2px var(--input-shadow); }
1065
+
1066
+ .setup-opt {
1067
+ display: flex; width: 100%; box-sizing: border-box;
1068
+ align-items: baseline; gap: 8px; text-align: left;
1069
+ background: transparent; color: var(--fg);
1070
+ border: 1px solid var(--border); border-radius: 7px;
1071
+ padding: 9px 11px; margin-bottom: 7px;
1072
+ font-size: 13px; font-family: inherit; cursor: pointer;
1073
+ }
1074
+ .setup-opt:hover { background: var(--hover-bg); }
1075
+ .setup-opt .g { color: var(--dim-b); }
1076
+ .setup-opt .t { font-weight: 500; }
1077
+ .setup-opt .d { color: var(--dim-a); font-size: 12px; }
1078
+ .setup-opt.on { border-color: var(--accent); background: var(--accent-bg); }
1079
+ .setup-opt.on .g { color: var(--accent); }
1080
+
1081
+ .setup-row-inline { display: flex; gap: 8px; align-items: center; }
1082
+ .setup-row-inline .setup-input { flex: 1; }
1083
+
1084
+ .setup-actions { display: flex; gap: 10px; align-items: center; margin-top: 22px; }
1085
+ .setup-actions .spacer { flex: 1; }
1086
+ .setup-btn {
1087
+ background: var(--surface); color: var(--fg);
1088
+ border: 1px solid var(--border-2); border-radius: 7px;
1089
+ padding: 8px 15px; font-size: 13px; font-family: inherit; cursor: pointer;
1090
+ }
1091
+ .setup-btn:hover { background: var(--hover-bg); }
1092
+ .setup-btn.primary { background: var(--green-fill); border-color: var(--green-fill); color: #fff; }
1093
+ .setup-btn.primary:hover { filter: brightness(1.08); }
1094
+ .setup-btn:disabled { opacity: .5; cursor: default; }
1095
+ .setup-btn.link { background: none; border: none; color: var(--accent); padding: 8px 4px; }
1096
+
1097
+ .setup-msg { font-size: 12.5px; margin-top: 10px; min-height: 17px; }
1098
+ .setup-msg.ok { color: var(--green); }
1099
+ .setup-msg.warn { color: var(--yellow); }
1100
+ .setup-msg.err { color: var(--err); }
1101
+
1102
+ .setup-summary { margin-top: 6px; }
1103
+ .setup-summary .r { display: flex; gap: 12px; padding: 5px 0; border-bottom: 1px solid var(--border-3); font-size: 13px; }
1104
+ .setup-summary .k { color: var(--dim-a); width: 150px; flex: 0 0 auto; }
1105
+ .setup-summary .v { color: var(--fg); word-break: break-all; }
1106
+
1107
+ .setup-toggle { display: flex; align-items: center; gap: 9px; padding: 7px 0; font-size: 13px; cursor: pointer; }
1108
+ .setup-toggle input { accent-color: var(--green-fill); width: 15px; height: 15px; }
1109
+
1110
+ @media (max-width: 640px) {
1111
+ .setup-gate { padding: 24px 14px; }
1112
+ .setup-summary .k { width: 110px; }
1113
+ }