vibespot 1.1.0 → 1.2.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.
package/ui/styles.css CHANGED
@@ -270,10 +270,218 @@ body { display: flex; }
270
270
  margin-top: 6px;
271
271
  }
272
272
 
273
+ /* "Continue where you left off" — recent projects card list */
274
+ .setup__recent {
275
+ margin-bottom: 28px;
276
+ }
277
+ .setup__recent-header {
278
+ display: flex;
279
+ align-items: baseline;
280
+ justify-content: space-between;
281
+ margin-bottom: 10px;
282
+ }
283
+ .setup__recent-title {
284
+ font-size: 12px;
285
+ font-weight: 500;
286
+ text-transform: uppercase;
287
+ letter-spacing: 0.06em;
288
+ color: var(--text-dim);
289
+ }
290
+ .setup__recent-all {
291
+ font-size: 12px;
292
+ background: none;
293
+ border: 0;
294
+ color: var(--accent);
295
+ cursor: pointer;
296
+ padding: 0;
297
+ font-family: inherit;
298
+ }
299
+ .setup__recent-all:hover { text-decoration: underline; }
300
+ .setup__recent-list {
301
+ display: grid;
302
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
303
+ gap: 8px;
304
+ }
305
+ .setup__recent-card {
306
+ display: flex;
307
+ align-items: center;
308
+ gap: 10px;
309
+ padding: 10px 12px;
310
+ background: var(--bg-input);
311
+ border: 1px solid var(--border);
312
+ border-radius: var(--radius);
313
+ color: var(--text);
314
+ font-family: var(--font);
315
+ text-align: left;
316
+ cursor: pointer;
317
+ transition: border-color 0.2s, background 0.2s, transform 0.1s;
318
+ }
319
+ .setup__recent-card:hover {
320
+ border-color: var(--accent);
321
+ background: var(--bg-hover);
322
+ }
323
+ .setup__recent-card:active { transform: translateY(1px); }
324
+ .setup__recent-card-bubble {
325
+ flex: 0 0 32px;
326
+ width: 32px;
327
+ height: 32px;
328
+ border-radius: 50%;
329
+ background: var(--accent-tint);
330
+ color: var(--accent);
331
+ display: flex;
332
+ align-items: center;
333
+ justify-content: center;
334
+ font-weight: 600;
335
+ font-size: 14px;
336
+ }
337
+ .setup__recent-card-text {
338
+ display: flex;
339
+ flex-direction: column;
340
+ min-width: 0;
341
+ }
342
+ .setup__recent-card-name {
343
+ font-size: 13px;
344
+ font-weight: 500;
345
+ white-space: nowrap;
346
+ overflow: hidden;
347
+ text-overflow: ellipsis;
348
+ }
349
+ .setup__recent-card-meta {
350
+ font-size: 11px;
351
+ color: var(--text-muted);
352
+ }
353
+
354
+ /* Primary "describe-it" prompt card */
355
+ .setup__prompt-card {
356
+ position: relative;
357
+ display: flex;
358
+ flex-direction: column;
359
+ background: var(--bg-input);
360
+ border: 1px solid var(--border);
361
+ border-radius: var(--radius-lg);
362
+ padding: 14px 14px 10px;
363
+ margin-bottom: 14px;
364
+ transition: border-color 0.2s, box-shadow 0.2s;
365
+ }
366
+ .setup__prompt-card:focus-within {
367
+ border-color: var(--accent-glow);
368
+ box-shadow: 0 0 0 3px var(--accent-tint);
369
+ }
370
+ .setup__prompt-input {
371
+ width: 100%;
372
+ min-height: 72px;
373
+ resize: vertical;
374
+ background: transparent;
375
+ border: 0;
376
+ outline: none;
377
+ color: var(--text);
378
+ font-family: var(--font);
379
+ font-size: 15px;
380
+ line-height: 1.5;
381
+ padding: 0;
382
+ }
383
+ .setup__prompt-input::placeholder { color: var(--text-muted); }
384
+ .setup__prompt-row {
385
+ display: flex;
386
+ align-items: center;
387
+ justify-content: space-between;
388
+ gap: 8px;
389
+ margin-top: 8px;
390
+ }
391
+ .setup__prompt-hint {
392
+ font-size: 11px;
393
+ color: var(--text-muted);
394
+ }
395
+ .setup__prompt-submit {
396
+ display: inline-flex;
397
+ align-items: center;
398
+ gap: 6px;
399
+ padding: 8px 16px;
400
+ font-size: 13px;
401
+ }
402
+ .setup__prompt-submit:disabled {
403
+ opacity: 0.5;
404
+ cursor: not-allowed;
405
+ }
406
+ .setup__prompt-submit-icon {
407
+ font-size: 11px;
408
+ line-height: 1;
409
+ transform: rotate(90deg);
410
+ display: inline-block;
411
+ }
412
+
413
+ /* Secondary "Start from Template" path */
414
+ .setup__secondary {
415
+ margin-bottom: 18px;
416
+ }
417
+ .setup__secondary-btn {
418
+ display: flex;
419
+ align-items: center;
420
+ gap: 12px;
421
+ width: 100%;
422
+ padding: 12px 16px;
423
+ background: transparent;
424
+ border: 1px dashed var(--border);
425
+ border-radius: var(--radius);
426
+ color: var(--text);
427
+ font-family: var(--font);
428
+ text-align: left;
429
+ cursor: pointer;
430
+ transition: border-color 0.2s, background 0.2s;
431
+ }
432
+ .setup__secondary-btn:hover {
433
+ border-color: var(--accent);
434
+ background: var(--accent-tint);
435
+ }
436
+ .setup__secondary-icon {
437
+ font-size: 18px;
438
+ color: var(--accent);
439
+ opacity: 0.85;
440
+ flex-shrink: 0;
441
+ }
442
+ .setup__secondary-label {
443
+ font-size: 14px;
444
+ font-weight: 500;
445
+ flex: 1;
446
+ }
447
+ .setup__secondary-meta {
448
+ font-size: 12px;
449
+ color: var(--text-muted);
450
+ }
451
+
452
+ /* "More ways to start" disclosure */
453
+ .setup__more {
454
+ margin-top: 4px;
455
+ }
456
+ .setup__more-toggle {
457
+ display: inline-flex;
458
+ align-items: center;
459
+ gap: 4px;
460
+ background: none;
461
+ border: 0;
462
+ padding: 4px 0;
463
+ color: var(--text-dim);
464
+ font-family: var(--font);
465
+ font-size: 13px;
466
+ cursor: pointer;
467
+ }
468
+ .setup__more-toggle:hover { color: var(--text); }
469
+ .setup__more-chevron {
470
+ display: inline-block;
471
+ font-size: 10px;
472
+ line-height: 1;
473
+ transition: transform 0.2s;
474
+ }
475
+ .setup__more-toggle--open .setup__more-chevron { transform: rotate(180deg); }
476
+ .setup__more-panel {
477
+ margin-top: 10px;
478
+ animation: panelSlideIn 0.15s ease-out;
479
+ }
480
+
273
481
  /* Action buttons grid */
274
482
  .setup__actions {
275
483
  display: grid;
276
- grid-template-columns: repeat(5, 1fr);
484
+ grid-template-columns: repeat(auto-fill, minmax(90px, 1fr));
277
485
  gap: 10px;
278
486
  margin-bottom: 16px;
279
487
  }
@@ -295,7 +503,7 @@ body { display: flex; }
295
503
  }
296
504
  .setup__action-btn:hover {
297
505
  border-color: var(--accent);
298
- background: var(--bg-card);
506
+ background: var(--bg-hover);
299
507
  }
300
508
  .setup__action-btn.active {
301
509
  border-color: var(--accent);
@@ -366,7 +574,7 @@ body { display: flex; }
366
574
  }
367
575
  .setup__pill:hover {
368
576
  border-color: var(--accent);
369
- background: var(--bg-card);
577
+ background: var(--bg-hover);
370
578
  }
371
579
  .setup__pill__meta {
372
580
  font-size: 11px;
@@ -463,7 +671,7 @@ body { display: flex; }
463
671
  .figma-summary__section-tag {
464
672
  font-size: 11px;
465
673
  padding: 2px 8px;
466
- background: var(--bg-card);
674
+ background: var(--bg-hover);
467
675
  border: 1px solid var(--border);
468
676
  border-radius: 10px;
469
677
  color: var(--text-muted);
@@ -632,6 +840,21 @@ body { display: flex; }
632
840
  margin-bottom: 36px;
633
841
  }
634
842
 
843
+ .dashboard__section--inverse {
844
+ padding: 14px;
845
+ background: var(--bg-panel);
846
+ border: 1px solid var(--border);
847
+ border-radius: var(--radius);
848
+ }
849
+
850
+ .dashboard__section--inverse .dashboard__section-header {
851
+ margin-bottom: 12px;
852
+ }
853
+
854
+ .dashboard__section--inverse .dashboard__section-hint {
855
+ flex: 1;
856
+ }
857
+
635
858
  .dashboard__section-header {
636
859
  display: flex;
637
860
  align-items: center;
@@ -665,86 +888,215 @@ body { display: flex; }
665
888
  padding: 16px 0;
666
889
  }
667
890
 
668
- /* Page type cards */
669
- .dashboard__page-types {
670
- display: grid;
671
- grid-template-columns: repeat(4, 1fr);
672
- gap: 12px;
673
- }
674
-
675
- .page-type-card {
891
+ /* Import analysis */
892
+ .inverse-summary {
676
893
  display: flex;
677
894
  flex-direction: column;
678
- align-items: center;
679
- gap: 8px;
680
- padding: 20px 12px;
681
- background: var(--bg-panel);
682
- border: 1px solid var(--border);
683
- border-radius: var(--radius);
684
- cursor: pointer;
685
- transition: all 0.15s ease;
686
- text-align: center;
687
- }
688
-
689
- .page-type-card:hover {
690
- border-color: var(--accent);
691
- background: var(--accent-tint);
895
+ gap: 12px;
692
896
  }
693
897
 
694
- .page-type-card__icon {
695
- color: var(--text-dim);
696
- transition: color 0.15s ease;
898
+ .inverse-summary__stats {
899
+ display: grid;
900
+ grid-template-columns: repeat(6, minmax(0, 1fr));
901
+ gap: 8px;
697
902
  }
698
903
 
699
- .page-type-card:hover .page-type-card__icon {
700
- color: var(--accent);
904
+ .inverse-stat {
905
+ min-width: 0;
906
+ padding: 10px 8px;
907
+ background: var(--bg-input);
908
+ border: 1px solid var(--border);
909
+ border-radius: var(--radius-sm);
701
910
  }
702
911
 
703
- .page-type-card__label {
704
- font-size: 13px;
705
- font-weight: 500;
912
+ .inverse-stat__value {
913
+ display: block;
914
+ font-family: var(--font-display);
915
+ font-size: 18px;
916
+ font-weight: 600;
706
917
  color: var(--text);
918
+ line-height: 1;
707
919
  }
708
920
 
709
- .page-type-card__desc {
921
+ .inverse-stat__label {
922
+ display: block;
923
+ margin-top: 5px;
710
924
  font-size: 11px;
711
925
  color: var(--text-dim);
712
- line-height: 1.3;
713
926
  }
714
927
 
715
- /* Template list */
716
- .dashboard__template-item {
928
+ .inverse-block {
717
929
  display: flex;
718
930
  align-items: center;
719
- gap: 10px;
720
- padding: 10px 12px;
721
- border: 1px solid var(--border);
722
- border-radius: var(--radius-sm);
723
- margin-bottom: 6px;
724
- transition: border-color 0.15s ease;
931
+ gap: 12px;
725
932
  }
726
933
 
727
- .dashboard__template-item:hover {
728
- border-color: var(--border-hover);
934
+ .inverse-block__label {
935
+ width: 80px;
936
+ flex-shrink: 0;
937
+ color: var(--text-dim);
938
+ font-size: 12px;
729
939
  }
730
940
 
731
- .dashboard__template-badge {
732
- font-size: 10px;
733
- font-weight: 600;
734
- text-transform: uppercase;
735
- padding: 2px 8px;
736
- border-radius: var(--radius-pill);
737
- background: var(--bg-hover);
738
- color: var(--text-dim);
941
+ .inverse-swatches,
942
+ .inverse-tags {
943
+ display: flex;
944
+ flex-wrap: wrap;
945
+ gap: 6px;
946
+ min-width: 0;
739
947
  }
740
948
 
741
- .dashboard__template-badge--landing_page { background: rgba(232,97,58,0.15); color: var(--accent); }
742
- .dashboard__template-badge--blog_post { background: rgba(59,130,246,0.15); color: #3b82f6; }
743
- .dashboard__template-badge--website_page { background: rgba(74,222,128,0.15); color: #4ade80; }
744
- .dashboard__template-badge--module_only { background: rgba(168,85,247,0.15); color: #a855f7; }
949
+ .inverse-swatch {
950
+ width: 24px;
951
+ height: 24px;
952
+ border: 1px solid var(--border);
953
+ border-radius: var(--radius-sm);
954
+ box-shadow: inset 0 0 0 1px rgba(255,255,255,0.12);
955
+ }
745
956
 
746
- .dashboard__template-label {
747
- flex: 1;
957
+ .inverse-tag {
958
+ max-width: 180px;
959
+ overflow: hidden;
960
+ text-overflow: ellipsis;
961
+ white-space: nowrap;
962
+ padding: 4px 8px;
963
+ background: var(--bg-input);
964
+ border: 1px solid var(--border);
965
+ border-radius: var(--radius-pill);
966
+ color: var(--text-dim);
967
+ font-size: 12px;
968
+ }
969
+
970
+ .inverse-findings {
971
+ display: flex;
972
+ flex-direction: column;
973
+ gap: 6px;
974
+ }
975
+
976
+ .inverse-findings--empty {
977
+ padding: 10px 12px;
978
+ background: var(--bg-input);
979
+ border: 1px solid var(--border);
980
+ border-radius: var(--radius-sm);
981
+ color: var(--text-dim);
982
+ font-size: 13px;
983
+ }
984
+
985
+ .inverse-finding {
986
+ display: grid;
987
+ grid-template-columns: 64px 1fr;
988
+ gap: 10px;
989
+ align-items: start;
990
+ padding: 9px 10px;
991
+ background: var(--bg-input);
992
+ border: 1px solid var(--border);
993
+ border-left-width: 3px;
994
+ border-radius: var(--radius-sm);
995
+ }
996
+
997
+ .inverse-finding--error { border-left-color: var(--error); }
998
+ .inverse-finding--warning { border-left-color: var(--warning); }
999
+ .inverse-finding--info { border-left-color: var(--accent); }
1000
+
1001
+ .inverse-finding__severity {
1002
+ color: var(--text-dim);
1003
+ font-size: 10px;
1004
+ font-weight: 600;
1005
+ text-transform: uppercase;
1006
+ }
1007
+
1008
+ .inverse-finding__message {
1009
+ min-width: 0;
1010
+ color: var(--text-dim);
1011
+ font-size: 12px;
1012
+ line-height: 1.4;
1013
+ }
1014
+
1015
+ .inverse-findings__more {
1016
+ color: var(--text-muted);
1017
+ font-size: 12px;
1018
+ }
1019
+
1020
+ /* Page type cards */
1021
+ .dashboard__page-types {
1022
+ display: grid;
1023
+ grid-template-columns: repeat(4, 1fr);
1024
+ gap: 12px;
1025
+ }
1026
+
1027
+ .page-type-card {
1028
+ display: flex;
1029
+ flex-direction: column;
1030
+ align-items: center;
1031
+ gap: 8px;
1032
+ padding: 20px 12px;
1033
+ background: var(--bg-panel);
1034
+ border: 1px solid var(--border);
1035
+ border-radius: var(--radius);
1036
+ cursor: pointer;
1037
+ transition: all 0.15s ease;
1038
+ text-align: center;
1039
+ }
1040
+
1041
+ .page-type-card:hover {
1042
+ border-color: var(--accent);
1043
+ background: var(--accent-tint);
1044
+ }
1045
+
1046
+ .page-type-card__icon {
1047
+ color: var(--text-dim);
1048
+ transition: color 0.15s ease;
1049
+ }
1050
+
1051
+ .page-type-card:hover .page-type-card__icon {
1052
+ color: var(--accent);
1053
+ }
1054
+
1055
+ .page-type-card__label {
1056
+ font-size: 13px;
1057
+ font-weight: 500;
1058
+ color: var(--text);
1059
+ }
1060
+
1061
+ .page-type-card__desc {
1062
+ font-size: 11px;
1063
+ color: var(--text-dim);
1064
+ line-height: 1.3;
1065
+ }
1066
+
1067
+ /* Template list */
1068
+ .dashboard__template-item {
1069
+ display: flex;
1070
+ align-items: center;
1071
+ gap: 10px;
1072
+ padding: 10px 12px;
1073
+ border: 1px solid var(--border);
1074
+ border-radius: var(--radius-sm);
1075
+ margin-bottom: 6px;
1076
+ transition: border-color 0.15s ease;
1077
+ }
1078
+
1079
+ .dashboard__template-item:hover {
1080
+ border-color: var(--border-hover);
1081
+ }
1082
+
1083
+ .dashboard__template-badge {
1084
+ font-size: 10px;
1085
+ font-weight: 600;
1086
+ text-transform: uppercase;
1087
+ padding: 2px 8px;
1088
+ border-radius: var(--radius-pill);
1089
+ background: var(--bg-hover);
1090
+ color: var(--text-dim);
1091
+ }
1092
+
1093
+ .dashboard__template-badge--landing_page { background: rgba(232,97,58,0.15); color: var(--accent); }
1094
+ .dashboard__template-badge--blog_post { background: rgba(59,130,246,0.15); color: #3b82f6; }
1095
+ .dashboard__template-badge--website_page { background: rgba(74,222,128,0.15); color: #4ade80; }
1096
+ .dashboard__template-badge--module_only { background: rgba(168,85,247,0.15); color: #a855f7; }
1097
+
1098
+ .dashboard__template-label {
1099
+ flex: 1;
748
1100
  font-size: 14px;
749
1101
  color: var(--text);
750
1102
  white-space: nowrap;
@@ -1016,6 +1368,17 @@ body { display: flex; }
1016
1368
  .dashboard__page-types {
1017
1369
  grid-template-columns: repeat(2, 1fr);
1018
1370
  }
1371
+ .inverse-summary__stats {
1372
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1373
+ }
1374
+ .inverse-block {
1375
+ align-items: flex-start;
1376
+ flex-direction: column;
1377
+ gap: 6px;
1378
+ }
1379
+ .inverse-block__label {
1380
+ width: auto;
1381
+ }
1019
1382
  }
1020
1383
 
1021
1384
  /* ================================================================
@@ -1462,6 +1825,36 @@ body { display: flex; }
1462
1825
  color: var(--accent);
1463
1826
  }
1464
1827
 
1828
+ .select-mode-toggle {
1829
+ display: inline-flex;
1830
+ align-items: center;
1831
+ gap: 6px;
1832
+ height: 32px;
1833
+ padding: 0 10px;
1834
+ margin-left: 8px;
1835
+ border: 1px solid var(--border);
1836
+ background: var(--bg-input);
1837
+ color: var(--text-muted);
1838
+ border-radius: var(--radius-pill);
1839
+ font-size: 12px;
1840
+ font-weight: 500;
1841
+ letter-spacing: 0.01em;
1842
+ cursor: pointer;
1843
+ transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease;
1844
+ }
1845
+ .select-mode-toggle:hover { color: var(--text-dim); border-color: var(--border-hover); }
1846
+ .select-mode-toggle[aria-pressed="true"] {
1847
+ background: var(--accent-dim);
1848
+ border-color: var(--accent);
1849
+ color: var(--accent);
1850
+ }
1851
+ .select-mode-toggle[disabled] {
1852
+ opacity: 0.45;
1853
+ cursor: not-allowed;
1854
+ }
1855
+
1856
+ .preview.preview--select-mode .browser-chrome__frame { cursor: crosshair; }
1857
+
1465
1858
  /* ================================================================
1466
1859
  LAYOUT (side-by-side chat + preview)
1467
1860
  ================================================================ */
@@ -1894,6 +2287,25 @@ body { display: flex; }
1894
2287
 
1895
2288
  .module-item__name { flex: 1; }
1896
2289
 
2290
+ /* Change indicator dot — shown next to modules edited in the last generation.
2291
+ Hidden by default; revealed via .module-item--changed (set by chat.js). */
2292
+ .module-item__changed-dot {
2293
+ width: 8px;
2294
+ height: 8px;
2295
+ border-radius: 50%;
2296
+ background: var(--accent);
2297
+ box-shadow: 0 0 0 3px var(--accent-glow);
2298
+ flex-shrink: 0;
2299
+ opacity: 0;
2300
+ transform: scale(0.4);
2301
+ transition: opacity 0.25s ease, transform 0.25s ease;
2302
+ pointer-events: none;
2303
+ }
2304
+ .module-item--changed .module-item__changed-dot {
2305
+ opacity: 1;
2306
+ transform: scale(1);
2307
+ }
2308
+
1897
2309
  .module-item__edit {
1898
2310
  opacity: 0;
1899
2311
  color: var(--accent);
@@ -1992,6 +2404,57 @@ body { display: flex; }
1992
2404
  line-height: 1.5;
1993
2405
  }
1994
2406
 
2407
+ /* Starter template grid (setup panel) */
2408
+ .starter-grid {
2409
+ display: grid;
2410
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
2411
+ gap: 10px;
2412
+ }
2413
+ .starter-card {
2414
+ display: flex;
2415
+ flex-direction: column;
2416
+ gap: 4px;
2417
+ padding: 14px;
2418
+ background: var(--bg-input);
2419
+ border: 1px solid var(--border);
2420
+ border-radius: var(--radius);
2421
+ cursor: pointer;
2422
+ transition: border-color 0.2s, background 0.2s;
2423
+ }
2424
+ .starter-card:hover {
2425
+ border-color: var(--accent);
2426
+ background: var(--bg-hover);
2427
+ }
2428
+ .starter-card.selected {
2429
+ border-color: var(--accent);
2430
+ background: var(--accent-bg, rgba(232, 97, 58, 0.08));
2431
+ }
2432
+ .starter-card__name {
2433
+ font-size: 13px;
2434
+ font-weight: 600;
2435
+ color: var(--text);
2436
+ }
2437
+ .starter-card__desc {
2438
+ font-size: 11px;
2439
+ color: var(--text-muted);
2440
+ line-height: 1.4;
2441
+ }
2442
+ .starter-card__meta {
2443
+ font-size: 10px;
2444
+ color: var(--text-muted);
2445
+ opacity: 0.7;
2446
+ margin-top: 2px;
2447
+ }
2448
+ .starter-create {
2449
+ margin-top: 12px;
2450
+ animation: panelSlideIn 0.15s ease-out;
2451
+ }
2452
+ .starter-create__label {
2453
+ font-size: 12px;
2454
+ color: var(--text-muted);
2455
+ margin: 0 0 8px;
2456
+ }
2457
+
1995
2458
  .chat__starters {
1996
2459
  display: flex;
1997
2460
  flex-wrap: wrap;
@@ -2016,6 +2479,82 @@ body { display: flex; }
2016
2479
  color: var(--accent-hover);
2017
2480
  }
2018
2481
 
2482
+ /* Rich starter button — two-line label + description, used in chat welcome */
2483
+ .chat__starters--rich {
2484
+ flex-direction: column;
2485
+ align-items: stretch;
2486
+ gap: 6px;
2487
+ max-width: 360px;
2488
+ margin: 0 auto;
2489
+ }
2490
+ .starter-btn--rich {
2491
+ display: flex;
2492
+ flex-direction: column;
2493
+ align-items: flex-start;
2494
+ gap: 2px;
2495
+ padding: 10px 14px;
2496
+ text-align: left;
2497
+ }
2498
+ .starter-btn--rich .starter-btn__label {
2499
+ font-size: 13px;
2500
+ font-weight: 600;
2501
+ color: var(--text);
2502
+ }
2503
+ .starter-btn--rich .starter-btn__desc {
2504
+ font-size: 11px;
2505
+ color: var(--text-muted);
2506
+ line-height: 1.4;
2507
+ }
2508
+ .starter-btn--rich:hover .starter-btn__label {
2509
+ color: var(--accent-hover);
2510
+ }
2511
+
2512
+ /* Smart suggestion chips — shown below the chat input after a generation */
2513
+ .chat__suggestions {
2514
+ display: flex;
2515
+ flex-wrap: wrap;
2516
+ gap: 6px;
2517
+ margin-bottom: 8px;
2518
+ animation: chatSuggestionsIn 0.18s ease-out;
2519
+ }
2520
+ .chat__suggestions.hidden {
2521
+ display: none;
2522
+ }
2523
+ .chat__suggestion-chip {
2524
+ display: inline-flex;
2525
+ align-items: center;
2526
+ gap: 4px;
2527
+ padding: 5px 10px;
2528
+ background: var(--bg-input);
2529
+ border: 1px solid var(--border);
2530
+ border-radius: 999px;
2531
+ color: var(--text);
2532
+ font-family: var(--font);
2533
+ font-size: 12px;
2534
+ line-height: 1.3;
2535
+ cursor: pointer;
2536
+ transition: border-color 0.2s, background 0.2s, color 0.2s;
2537
+ }
2538
+ .chat__suggestion-chip::before {
2539
+ content: "✨";
2540
+ font-size: 10px;
2541
+ opacity: 0.7;
2542
+ }
2543
+ .chat__suggestion-chip:hover {
2544
+ border-color: var(--accent-glow);
2545
+ background: var(--accent-tint);
2546
+ color: var(--accent-hover);
2547
+ }
2548
+ .chat__suggestion-chip:focus-visible {
2549
+ outline: 2px solid var(--accent-glow);
2550
+ outline-offset: 2px;
2551
+ }
2552
+
2553
+ @keyframes chatSuggestionsIn {
2554
+ from { opacity: 0; transform: translateY(2px); }
2555
+ to { opacity: 1; transform: translateY(0); }
2556
+ }
2557
+
2019
2558
  .chat__section-label {
2020
2559
  font-size: 11px;
2021
2560
  font-weight: 600;
@@ -2146,6 +2685,7 @@ body { display: flex; }
2146
2685
  font-size: 13.5px;
2147
2686
  line-height: 1.6;
2148
2687
  word-wrap: break-word;
2688
+ overflow: hidden;
2149
2689
  }
2150
2690
 
2151
2691
 
@@ -2207,107 +2747,360 @@ body { display: flex; }
2207
2747
  flex-shrink: 0;
2208
2748
  }
2209
2749
 
2210
- /* Agentic pipeline step progress */
2211
- .pipeline-steps {
2750
+ /* Agentic pipeline horizontal stepper */
2751
+ .pipeline-stepper {
2752
+ display: flex;
2753
+ align-items: flex-start;
2754
+ gap: 4px;
2755
+ padding: 6px 2px 4px;
2756
+ max-width: 100%;
2757
+ }
2758
+
2759
+ .pipeline-stage {
2212
2760
  display: flex;
2213
2761
  flex-direction: column;
2762
+ align-items: center;
2214
2763
  gap: 6px;
2215
- padding: 4px 0;
2764
+ flex: 1 1 0;
2765
+ min-width: 0;
2766
+ text-align: center;
2767
+ position: relative;
2216
2768
  }
2217
2769
 
2218
- .pipeline-step {
2770
+ .pipeline-stage__indicator {
2771
+ width: 32px;
2772
+ height: 32px;
2773
+ border-radius: 50%;
2219
2774
  display: flex;
2220
- align-items: flex-start;
2221
- gap: 6px;
2222
- font-size: 13px;
2775
+ align-items: center;
2776
+ justify-content: center;
2777
+ background: var(--surface-elevated, rgba(255,255,255,0.04));
2778
+ border: 1.5px solid var(--border);
2223
2779
  color: var(--text-muted);
2224
- flex-wrap: wrap;
2225
- margin-top: 6px;
2780
+ position: relative;
2781
+ transition: background 220ms ease, border-color 220ms ease, color 220ms ease, transform 220ms ease, box-shadow 220ms ease;
2782
+ }
2783
+
2784
+ .pipeline-stage__icon,
2785
+ .pipeline-stage__check {
2786
+ position: absolute;
2787
+ inset: 0;
2788
+ display: flex;
2789
+ align-items: center;
2790
+ justify-content: center;
2791
+ transition: opacity 220ms ease, transform 220ms ease;
2226
2792
  }
2227
2793
 
2228
- /* Steps inside the steps container don't need extra margin (container has gap) */
2229
- .pipeline-steps > .pipeline-step {
2230
- margin-top: 0;
2794
+ .pipeline-stage__icon svg,
2795
+ .pipeline-stage__check svg {
2796
+ width: 16px;
2797
+ height: 16px;
2231
2798
  }
2232
2799
 
2233
- .pipeline-step--active {
2234
- color: var(--accent);
2800
+ .pipeline-stage__check {
2801
+ opacity: 0;
2802
+ transform: scale(0.5);
2803
+ }
2804
+
2805
+ .pipeline-stage__label {
2806
+ font-size: 11.5px;
2807
+ color: var(--text-dim);
2235
2808
  font-weight: 500;
2809
+ white-space: nowrap;
2810
+ letter-spacing: 0.01em;
2811
+ transition: color 220ms ease;
2812
+ overflow: hidden;
2813
+ text-overflow: ellipsis;
2814
+ max-width: 100%;
2236
2815
  }
2237
2816
 
2238
- .pipeline-step--active .pipeline-step__icon {
2239
- animation: spin 0.8s linear infinite;
2240
- display: inline-block;
2817
+ /* Connector between stages — fills as progress advances */
2818
+ .pipeline-stage__connector {
2819
+ flex: 0 1 16px;
2820
+ height: 2px;
2821
+ margin-top: 15px; /* visually align with the indicator center (32px / 2 - 1) */
2822
+ background: var(--border);
2823
+ border-radius: 1px;
2824
+ position: relative;
2825
+ overflow: hidden;
2826
+ min-width: 4px;
2827
+ }
2828
+
2829
+ .pipeline-stage__connector::after {
2830
+ content: "";
2831
+ position: absolute;
2832
+ inset: 0;
2833
+ background: var(--accent);
2834
+ transform: scaleX(0);
2835
+ transform-origin: left center;
2836
+ transition: transform 420ms ease;
2837
+ }
2838
+
2839
+ .pipeline-stage__connector--filled::after {
2840
+ transform: scaleX(1);
2241
2841
  }
2242
2842
 
2243
- .pipeline-step--done {
2843
+ /* Active stage: pulsing accent ring + spinning icon */
2844
+ .pipeline-stage--active .pipeline-stage__indicator {
2845
+ border-color: var(--accent);
2846
+ color: var(--accent);
2847
+ background: var(--accent-tint, rgba(232,97,58,0.06));
2848
+ box-shadow: 0 0 0 0 var(--accent-glow, rgba(232,97,58,0.3));
2849
+ animation: pipelineStagePulse 1.6s ease-in-out infinite;
2850
+ }
2851
+
2852
+ .pipeline-stage--active .pipeline-stage__icon {
2853
+ animation: pipelineIconSpin 2.4s linear infinite;
2854
+ }
2855
+
2856
+ .pipeline-stage--active .pipeline-stage__label {
2857
+ color: var(--accent);
2858
+ }
2859
+
2860
+ @keyframes pipelineStagePulse {
2861
+ 0%, 100% { box-shadow: 0 0 0 0 var(--accent-glow, rgba(232,97,58,0.3)); }
2862
+ 50% { box-shadow: 0 0 0 6px transparent; }
2863
+ }
2864
+
2865
+ @keyframes pipelineIconSpin {
2866
+ to { transform: rotate(360deg); }
2867
+ }
2868
+
2869
+ /* Done stage: filled, swap icon for checkmark with a pop */
2870
+ .pipeline-stage--done .pipeline-stage__indicator {
2871
+ background: var(--success, #4ade80);
2872
+ border-color: var(--success, #4ade80);
2873
+ color: var(--bg-panel-solid, #131110);
2874
+ animation: pipelineStagePop 360ms cubic-bezier(0.34, 1.56, 0.64, 1);
2875
+ }
2876
+
2877
+ .pipeline-stage--done .pipeline-stage__icon {
2878
+ opacity: 0;
2879
+ transform: scale(0.5);
2880
+ }
2881
+
2882
+ .pipeline-stage--done .pipeline-stage__check {
2883
+ opacity: 1;
2884
+ transform: scale(1);
2885
+ }
2886
+
2887
+ .pipeline-stage--done .pipeline-stage__label {
2244
2888
  color: var(--success, #4ade80);
2245
2889
  }
2246
2890
 
2247
- .pipeline-step--done .pipeline-step__icon {
2248
- animation: none;
2249
- display: inline-block;
2891
+ @keyframes pipelineStagePop {
2892
+ 0% { transform: scale(0.92); }
2893
+ 60% { transform: scale(1.12); }
2894
+ 100% { transform: scale(1); }
2250
2895
  }
2251
2896
 
2252
- .pipeline-step--done .pipeline-step__icon::after {
2253
- content: "";
2897
+ /* Failed stage: red ring */
2898
+ .pipeline-stage--failed .pipeline-stage__indicator {
2899
+ background: var(--error, #ef4444);
2900
+ border-color: var(--error, #ef4444);
2901
+ color: #fff;
2254
2902
  }
2255
2903
 
2256
- .pipeline-step__decision {
2257
- width: 100%;
2904
+ .pipeline-stage--failed .pipeline-stage__label {
2905
+ color: var(--error, #ef4444);
2906
+ }
2907
+
2908
+ /* Detail line — current sub-label / decision */
2909
+ .pipeline-detail {
2910
+ font-size: 12px;
2911
+ color: var(--text-dim);
2912
+ padding: 2px 0 0;
2913
+ min-height: 1.4em;
2914
+ white-space: pre-line;
2915
+ }
2916
+
2917
+ .pipeline-detail--in {
2918
+ animation: pipelineDetailIn 220ms ease;
2919
+ }
2920
+
2921
+ @keyframes pipelineDetailIn {
2922
+ from { opacity: 0; transform: translateY(2px); }
2923
+ to { opacity: 1; transform: translateY(0); }
2924
+ }
2925
+
2926
+ .pipeline-detail-summary {
2258
2927
  font-size: 11.5px;
2259
2928
  color: var(--text-dim);
2260
- padding-left: 20px;
2261
- margin-top: 2px;
2929
+ padding: 4px 0 0;
2930
+ }
2931
+
2932
+ .pipeline-detail-summary > summary {
2933
+ cursor: pointer;
2934
+ user-select: none;
2935
+ }
2936
+
2937
+ .pipeline-detail-summary__row {
2938
+ padding: 3px 0 0 14px;
2262
2939
  white-space: pre-line;
2263
2940
  }
2264
2941
 
2265
- /* Module progress cards during parallel generation */
2942
+ /* Module progress cards during parallel generation — skeleton variant */
2266
2943
  .pipeline-modules {
2267
- display: flex;
2268
- flex-wrap: wrap;
2269
- gap: 6px;
2270
- padding: 6px 0 2px;
2944
+ display: grid;
2945
+ grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
2946
+ gap: 8px;
2947
+ padding: 8px 0 2px;
2271
2948
  }
2272
2949
 
2273
2950
  .pipeline-module-card {
2274
- display: inline-flex;
2275
- align-items: center;
2276
- gap: 4px;
2277
- padding: 3px 8px;
2278
- border-radius: 4px;
2951
+ position: relative;
2952
+ padding: 8px 10px;
2953
+ border-radius: 6px;
2279
2954
  font-size: 12px;
2280
- background: var(--surface-elevated, rgba(255,255,255,0.05));
2955
+ background: var(--surface-elevated, rgba(255,255,255,0.04));
2281
2956
  border: 1px solid var(--border);
2957
+ overflow: hidden;
2958
+ transition: border-color 220ms ease, background 220ms ease;
2959
+ }
2960
+
2961
+ .pipeline-module-card__head {
2962
+ display: flex;
2963
+ align-items: center;
2964
+ justify-content: space-between;
2965
+ gap: 6px;
2966
+ }
2967
+
2968
+ .pipeline-module-card__name {
2969
+ font-weight: 500;
2970
+ white-space: nowrap;
2971
+ overflow: hidden;
2972
+ text-overflow: ellipsis;
2973
+ }
2974
+
2975
+ .pipeline-module-card__status {
2976
+ font-size: 10.5px;
2977
+ text-transform: uppercase;
2978
+ letter-spacing: 0.04em;
2979
+ opacity: 0.75;
2980
+ flex: 0 0 auto;
2981
+ }
2982
+
2983
+ /* Mini progress bar — indeterminate during work, full on complete */
2984
+ .pipeline-module-card__progress {
2985
+ height: 2px;
2986
+ margin-top: 8px;
2987
+ background: var(--border);
2988
+ border-radius: 1px;
2989
+ overflow: hidden;
2990
+ }
2991
+
2992
+ .pipeline-module-card__progress-bar {
2993
+ height: 100%;
2994
+ width: 30%;
2995
+ background: var(--accent);
2996
+ border-radius: 1px;
2997
+ transform: translateX(-100%);
2998
+ }
2999
+
3000
+ /* Skeleton text rows — shown only while in flight */
3001
+ .pipeline-module-card__skeleton {
3002
+ margin-top: 8px;
3003
+ display: flex;
3004
+ flex-direction: column;
3005
+ gap: 5px;
3006
+ }
3007
+
3008
+ .pipeline-module-card__skeleton-row {
3009
+ height: 6px;
3010
+ border-radius: 3px;
3011
+ background: linear-gradient(
3012
+ 90deg,
3013
+ var(--border) 0%,
3014
+ var(--border-hover) 50%,
3015
+ var(--border) 100%
3016
+ );
3017
+ background-size: 200% 100%;
3018
+ animation: pipelineSkeletonShimmer 1.4s ease-in-out infinite;
3019
+ }
3020
+
3021
+ .pipeline-module-card__skeleton-row--lg { width: 90%; }
3022
+ .pipeline-module-card__skeleton-row--md { width: 75%; }
3023
+ .pipeline-module-card__skeleton-row--sm { width: 50%; }
3024
+
3025
+ @keyframes pipelineSkeletonShimmer {
3026
+ from { background-position: 200% 0; }
3027
+ to { background-position: -200% 0; }
3028
+ }
3029
+
3030
+ .pipeline-module-card--queued .pipeline-module-card__skeleton-row {
3031
+ animation-play-state: paused;
3032
+ opacity: 0.5;
2282
3033
  }
2283
3034
 
2284
- .pipeline-module-card--generating {
3035
+ .pipeline-module-card--generating,
3036
+ .pipeline-module-card--validating {
2285
3037
  border-color: var(--accent);
2286
- color: var(--accent);
3038
+ }
3039
+
3040
+ .pipeline-module-card--generating .pipeline-module-card__progress-bar,
3041
+ .pipeline-module-card--validating .pipeline-module-card__progress-bar,
3042
+ .pipeline-module-card--retrying .pipeline-module-card__progress-bar {
3043
+ animation: pipelineProgressIndeterminate 1.6s ease-in-out infinite;
3044
+ }
3045
+
3046
+ .pipeline-module-card--retrying {
3047
+ border-color: var(--warning, #f59e0b);
3048
+ }
3049
+
3050
+ .pipeline-module-card--retrying .pipeline-module-card__progress-bar {
3051
+ background: var(--warning, #f59e0b);
2287
3052
  }
2288
3053
 
2289
3054
  .pipeline-module-card--complete {
2290
3055
  border-color: var(--success, #4ade80);
3056
+ }
3057
+
3058
+ .pipeline-module-card--complete .pipeline-module-card__skeleton {
3059
+ display: none;
3060
+ }
3061
+
3062
+ .pipeline-module-card--complete .pipeline-module-card__progress {
3063
+ background: transparent;
3064
+ }
3065
+
3066
+ .pipeline-module-card--complete .pipeline-module-card__progress-bar {
3067
+ width: 100%;
3068
+ transform: translateX(0);
3069
+ background: var(--success, #4ade80);
3070
+ }
3071
+
3072
+ .pipeline-module-card--complete .pipeline-module-card__status {
2291
3073
  color: var(--success, #4ade80);
2292
3074
  }
2293
3075
 
2294
3076
  .pipeline-module-card--failed {
2295
3077
  border-color: var(--error, #ef4444);
2296
- color: var(--error, #ef4444);
2297
3078
  }
2298
3079
 
2299
- .pipeline-module-card--retrying {
2300
- border-color: var(--warning, #f59e0b);
2301
- color: var(--warning, #f59e0b);
3080
+ .pipeline-module-card--failed .pipeline-module-card__skeleton {
3081
+ display: none;
2302
3082
  }
2303
3083
 
2304
- .pipeline-module-card__name {
2305
- font-weight: 500;
3084
+ .pipeline-module-card--failed .pipeline-module-card__progress-bar {
3085
+ width: 100%;
3086
+ transform: translateX(0);
3087
+ background: var(--error, #ef4444);
2306
3088
  }
2307
3089
 
2308
- .pipeline-module-card__status {
2309
- font-size: 11px;
2310
- opacity: 0.8;
3090
+ .pipeline-module-card--failed .pipeline-module-card__status {
3091
+ color: var(--error, #ef4444);
3092
+ }
3093
+
3094
+ @keyframes pipelineProgressIndeterminate {
3095
+ 0% { transform: translateX(-100%); width: 30%; }
3096
+ 50% { width: 50%; }
3097
+ 100% { transform: translateX(330%); width: 30%; }
3098
+ }
3099
+
3100
+ /* Restored history view: hide skeleton + progress placeholders */
3101
+ .pipeline-modules--restored .pipeline-module-card__progress,
3102
+ .pipeline-modules--restored .pipeline-module-card__skeleton {
3103
+ display: none;
2311
3104
  }
2312
3105
 
2313
3106
  .pipeline-answer {
@@ -2325,21 +3118,73 @@ body { display: flex; }
2325
3118
  font-weight: 500;
2326
3119
  }
2327
3120
 
2328
- .pipeline-stats--partial {
2329
- color: var(--warning, #f59e0b);
3121
+ .pipeline-stats--partial {
3122
+ color: var(--warning, #f59e0b);
3123
+ }
3124
+
3125
+ .pipeline-footer {
3126
+ display: flex;
3127
+ justify-content: space-between;
3128
+ align-items: center;
3129
+ gap: 12px;
3130
+ padding: 6px 0 0;
3131
+ font-size: 12px;
3132
+ color: var(--text-muted, #999);
3133
+ font-variant-numeric: tabular-nums;
3134
+ }
3135
+
3136
+ .pipeline-timer {
3137
+ flex: 0 0 auto;
3138
+ }
3139
+
3140
+ .pipeline-estimate {
3141
+ flex: 0 0 auto;
3142
+ color: var(--text-dim);
2330
3143
  }
2331
3144
 
2332
- .pipeline-timer {
2333
- font-size: 12px;
2334
- color: var(--text-muted, #999);
2335
- padding: 6px 0 0;
3145
+ /* Mobile / narrow chat panes — flex-wrap stepper, single-column module grid */
3146
+ @media (max-width: 520px) {
3147
+ .pipeline-stepper {
3148
+ flex-wrap: wrap;
3149
+ row-gap: 12px;
3150
+ }
3151
+ .pipeline-stage {
3152
+ flex: 1 1 22%;
3153
+ min-width: 0;
3154
+ }
3155
+ .pipeline-stage__label {
3156
+ font-size: 10.5px;
3157
+ }
3158
+ .pipeline-stage__connector {
3159
+ flex: 0 0 8px;
3160
+ min-width: 8px;
3161
+ }
3162
+ .pipeline-modules {
3163
+ grid-template-columns: 1fr;
3164
+ }
3165
+ .pipeline-footer {
3166
+ flex-direction: column;
3167
+ align-items: flex-start;
3168
+ gap: 2px;
3169
+ }
2336
3170
  }
2337
3171
 
2338
- .pipeline-modules-restored {
2339
- display: flex;
2340
- flex-wrap: wrap;
2341
- gap: 6px;
2342
- padding: 6px 0;
3172
+ /* Reduced motion — disable spinners and shimmer */
3173
+ @media (prefers-reduced-motion: reduce) {
3174
+ .pipeline-stage--active .pipeline-stage__indicator,
3175
+ .pipeline-stage--active .pipeline-stage__icon,
3176
+ .pipeline-module-card__skeleton-row,
3177
+ .pipeline-module-card--generating .pipeline-module-card__progress-bar,
3178
+ .pipeline-module-card--validating .pipeline-module-card__progress-bar,
3179
+ .pipeline-module-card--retrying .pipeline-module-card__progress-bar,
3180
+ .pipeline-stage--done .pipeline-stage__indicator {
3181
+ animation: none !important;
3182
+ }
3183
+ .pipeline-stage__connector::after,
3184
+ .pipeline-detail--in {
3185
+ transition: none !important;
3186
+ animation: none !important;
3187
+ }
2343
3188
  }
2344
3189
 
2345
3190
  .chat-msg__meta {
@@ -4531,3 +5376,343 @@ body { display: flex; }
4531
5376
  }
4532
5377
  .plan-pane__discard:hover { opacity: 1; color: var(--danger, #d43); }
4533
5378
  .plan-pane__approve { font-weight: 600; }
5379
+
5380
+ /* ---- Plan-mode template picker ---- */
5381
+ .plan-templates {
5382
+ padding: 32px 24px 16px;
5383
+ max-width: 760px;
5384
+ margin: 0 auto;
5385
+ }
5386
+ .plan-templates__title {
5387
+ font-family: var(--font-display);
5388
+ font-size: 20px;
5389
+ font-weight: 600;
5390
+ margin: 0 0 8px;
5391
+ color: var(--text);
5392
+ }
5393
+ .plan-templates__hint {
5394
+ margin: 0 0 20px;
5395
+ color: var(--text-dim);
5396
+ font-size: 13px;
5397
+ line-height: 1.5;
5398
+ }
5399
+ .plan-templates__error {
5400
+ margin: 0 0 16px;
5401
+ padding: 10px 12px;
5402
+ background: rgba(239, 68, 68, 0.08);
5403
+ border: 1px solid rgba(239, 68, 68, 0.25);
5404
+ border-radius: var(--radius-sm);
5405
+ color: var(--error);
5406
+ font-size: 12px;
5407
+ }
5408
+ .plan-templates--loading .plan-templates__hint {
5409
+ text-align: center;
5410
+ padding: 32px 0;
5411
+ }
5412
+ .plan-templates__grid {
5413
+ display: grid;
5414
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
5415
+ gap: 10px;
5416
+ }
5417
+ .plan-template {
5418
+ display: flex;
5419
+ align-items: flex-start;
5420
+ gap: 12px;
5421
+ padding: 14px 14px;
5422
+ background: var(--bg-panel);
5423
+ border: 1px solid var(--border);
5424
+ border-radius: var(--radius);
5425
+ text-align: left;
5426
+ cursor: pointer;
5427
+ transition: background 0.15s ease, border-color 0.15s ease, transform 0.05s ease;
5428
+ color: var(--text);
5429
+ }
5430
+ .plan-template:hover {
5431
+ background: var(--bg-hover);
5432
+ border-color: var(--border-hover);
5433
+ }
5434
+ .plan-template:active { transform: translateY(1px); }
5435
+ .plan-template.is-loading {
5436
+ opacity: 0.55;
5437
+ pointer-events: none;
5438
+ }
5439
+ .plan-template__icon {
5440
+ display: inline-flex;
5441
+ align-items: center;
5442
+ justify-content: center;
5443
+ width: 36px;
5444
+ height: 36px;
5445
+ flex-shrink: 0;
5446
+ border-radius: 8px;
5447
+ background: var(--accent-tint);
5448
+ color: var(--accent);
5449
+ }
5450
+ .plan-template__icon svg {
5451
+ width: 18px;
5452
+ height: 18px;
5453
+ }
5454
+ .plan-template__body {
5455
+ display: flex;
5456
+ flex-direction: column;
5457
+ gap: 2px;
5458
+ min-width: 0;
5459
+ }
5460
+ .plan-template__label {
5461
+ font-weight: 600;
5462
+ font-size: 13px;
5463
+ color: var(--text);
5464
+ }
5465
+ .plan-template__desc {
5466
+ font-size: 12px;
5467
+ color: var(--text-dim);
5468
+ line-height: 1.4;
5469
+ }
5470
+ .plan-template--blank .plan-template__icon {
5471
+ background: rgba(255, 255, 255, 0.04);
5472
+ color: var(--text-dim);
5473
+ }
5474
+
5475
+ /* ============================================================
5476
+ Marketplace publication dialog (VIB-58)
5477
+ ============================================================ */
5478
+ .marketplace-dialog {
5479
+ width: 640px;
5480
+ max-width: 92vw;
5481
+ max-height: 82vh;
5482
+ display: flex;
5483
+ flex-direction: column;
5484
+ }
5485
+ .marketplace-body {
5486
+ flex: 1;
5487
+ overflow-y: auto;
5488
+ margin-top: 12px;
5489
+ padding-right: 4px;
5490
+ }
5491
+ .marketplace-summary {
5492
+ border-radius: var(--radius);
5493
+ padding: 12px 14px;
5494
+ margin-bottom: 14px;
5495
+ background: var(--bg-input);
5496
+ border: 1px solid var(--border);
5497
+ }
5498
+ .marketplace-summary--ok { border-color: rgba(50, 180, 100, 0.4); }
5499
+ .marketplace-summary--fail { border-color: rgba(220, 80, 80, 0.4); }
5500
+ .marketplace-summary__counts {
5501
+ margin-top: 6px;
5502
+ display: flex;
5503
+ flex-wrap: wrap;
5504
+ gap: 8px;
5505
+ }
5506
+ .marketplace-pill {
5507
+ font-size: 11px;
5508
+ padding: 2px 8px;
5509
+ border-radius: 999px;
5510
+ border: 1px solid var(--border);
5511
+ background: var(--bg-panel-solid);
5512
+ color: var(--text-muted);
5513
+ }
5514
+ .marketplace-pill--error { color: #d44; border-color: rgba(220, 80, 80, 0.5); }
5515
+ .marketplace-pill--warn { color: #d9a300; border-color: rgba(217, 163, 0, 0.5); }
5516
+ .marketplace-pill--info { color: var(--text-dim); }
5517
+ .marketplace-section { margin-top: 14px; }
5518
+ .marketplace-section h4 {
5519
+ margin: 0 0 6px;
5520
+ font-size: 12px;
5521
+ text-transform: uppercase;
5522
+ letter-spacing: 0.04em;
5523
+ color: var(--text-dim);
5524
+ }
5525
+ .marketplace-findings {
5526
+ list-style: none;
5527
+ margin: 0;
5528
+ padding: 0;
5529
+ display: flex;
5530
+ flex-direction: column;
5531
+ gap: 6px;
5532
+ }
5533
+ .marketplace-finding {
5534
+ border: 1px solid var(--border);
5535
+ border-radius: var(--radius);
5536
+ padding: 8px 10px;
5537
+ background: var(--bg-input);
5538
+ font-size: 13px;
5539
+ overflow-wrap: break-word;
5540
+ }
5541
+ .marketplace-finding--error { border-left: 3px solid #d44; }
5542
+ .marketplace-finding--warning { border-left: 3px solid #d9a300; }
5543
+ .marketplace-finding--info { border-left: 3px solid var(--border); }
5544
+ .marketplace-finding__file {
5545
+ display: inline-block;
5546
+ font-family: ui-monospace, monospace;
5547
+ font-size: 11px;
5548
+ color: var(--text-dim);
5549
+ margin-right: 6px;
5550
+ }
5551
+ .marketplace-finding__msg { color: var(--text); }
5552
+ .marketplace-finding__fix {
5553
+ margin-top: 4px;
5554
+ color: var(--text-muted);
5555
+ font-size: 12px;
5556
+ }
5557
+ .marketplace-fix-result {
5558
+ margin-bottom: 12px;
5559
+ font-size: 12px;
5560
+ color: var(--text-muted);
5561
+ }
5562
+ .marketplace-fix-result ul { margin: 4px 0 8px 18px; padding: 0; }
5563
+ .marketplace-listing-form {
5564
+ display: flex;
5565
+ flex-direction: column;
5566
+ gap: 10px;
5567
+ margin-top: 10px;
5568
+ }
5569
+ .marketplace-listing-form label {
5570
+ display: flex;
5571
+ flex-direction: column;
5572
+ gap: 4px;
5573
+ font-size: 12px;
5574
+ color: var(--text-muted);
5575
+ }
5576
+ .marketplace-listing-form input,
5577
+ .marketplace-listing-form select,
5578
+ .marketplace-listing-form textarea {
5579
+ background: var(--bg-input);
5580
+ border: 1px solid var(--border);
5581
+ border-radius: var(--radius);
5582
+ padding: 6px 8px;
5583
+ color: var(--text);
5584
+ font: inherit;
5585
+ }
5586
+ .marketplace-listing-form textarea { resize: vertical; }
5587
+
5588
+ /* ---------------------------------------------------------------- History Timeline */
5589
+ /* Compact horizontal version-history strip above the chat input. */
5590
+ .history-timeline {
5591
+ position: relative;
5592
+ display: flex;
5593
+ align-items: center;
5594
+ gap: 6px;
5595
+ padding: 6px 10px;
5596
+ border-top: 1px solid var(--border);
5597
+ background: var(--bg-panel-solid);
5598
+ flex-shrink: 0;
5599
+ min-height: 32px;
5600
+ max-height: 32px;
5601
+ }
5602
+ .history-timeline.hidden { display: none; }
5603
+
5604
+ .history-timeline__nav {
5605
+ display: inline-flex;
5606
+ align-items: center;
5607
+ justify-content: center;
5608
+ width: 22px;
5609
+ height: 22px;
5610
+ flex-shrink: 0;
5611
+ background: transparent;
5612
+ border: 1px solid var(--border);
5613
+ border-radius: var(--radius-sm);
5614
+ color: var(--text-dim);
5615
+ cursor: pointer;
5616
+ transition: background 0.12s, color 0.12s, border-color 0.12s;
5617
+ }
5618
+ .history-timeline__nav:hover:not(:disabled) {
5619
+ background: var(--bg-hover);
5620
+ color: var(--text);
5621
+ border-color: var(--border-hover);
5622
+ }
5623
+ .history-timeline__nav:disabled {
5624
+ opacity: 0.35;
5625
+ cursor: not-allowed;
5626
+ }
5627
+
5628
+ .history-timeline__track {
5629
+ flex: 1;
5630
+ display: flex;
5631
+ align-items: center;
5632
+ gap: 4px;
5633
+ overflow-x: auto;
5634
+ scrollbar-width: none;
5635
+ -ms-overflow-style: none;
5636
+ }
5637
+ .history-timeline__track::-webkit-scrollbar { display: none; }
5638
+
5639
+ .history-timeline__entry {
5640
+ display: inline-flex;
5641
+ align-items: center;
5642
+ gap: 5px;
5643
+ flex-shrink: 0;
5644
+ height: 20px;
5645
+ padding: 0 8px;
5646
+ background: var(--bg-input);
5647
+ border: 1px solid var(--border);
5648
+ border-radius: var(--radius-pill);
5649
+ color: var(--text-dim);
5650
+ font-size: 11px;
5651
+ line-height: 1;
5652
+ cursor: pointer;
5653
+ white-space: nowrap;
5654
+ max-width: 160px;
5655
+ overflow: hidden;
5656
+ text-overflow: ellipsis;
5657
+ transition: background 0.12s, color 0.12s, border-color 0.12s;
5658
+ }
5659
+ .history-timeline__entry:hover {
5660
+ background: var(--bg-hover);
5661
+ color: var(--text);
5662
+ border-color: var(--border-hover);
5663
+ }
5664
+ .history-timeline__entry--current {
5665
+ background: var(--accent-tint);
5666
+ border-color: var(--accent-glow);
5667
+ color: var(--text);
5668
+ }
5669
+ .history-timeline__entry--initial {
5670
+ font-style: italic;
5671
+ }
5672
+ .history-timeline__entry-dot {
5673
+ width: 6px;
5674
+ height: 6px;
5675
+ border-radius: 50%;
5676
+ background: var(--text-muted);
5677
+ flex-shrink: 0;
5678
+ }
5679
+ .history-timeline__entry--current .history-timeline__entry-dot {
5680
+ background: var(--accent);
5681
+ box-shadow: 0 0 0 2px var(--accent-glow);
5682
+ }
5683
+ .history-timeline__entry-label {
5684
+ overflow: hidden;
5685
+ text-overflow: ellipsis;
5686
+ }
5687
+
5688
+ .history-timeline__tooltip {
5689
+ position: absolute;
5690
+ bottom: calc(100% + 6px);
5691
+ left: 0;
5692
+ z-index: 50;
5693
+ max-width: 280px;
5694
+ padding: 8px 10px;
5695
+ background: var(--bg-panel-solid);
5696
+ border: 1px solid var(--border-hover);
5697
+ border-radius: var(--radius-sm);
5698
+ box-shadow: var(--shadow-sm);
5699
+ font-size: 11px;
5700
+ line-height: 1.4;
5701
+ color: var(--text);
5702
+ pointer-events: none;
5703
+ }
5704
+ .history-timeline__tooltip.hidden { display: none; }
5705
+ .history-timeline__tooltip-title {
5706
+ font-weight: 600;
5707
+ margin-bottom: 4px;
5708
+ word-break: break-word;
5709
+ }
5710
+ .history-timeline__tooltip-meta {
5711
+ color: var(--text-dim);
5712
+ font-size: 10px;
5713
+ }
5714
+ .history-timeline__tooltip-modules {
5715
+ margin-top: 4px;
5716
+ color: var(--text-dim);
5717
+ font-size: 10px;
5718
+ }