@jay-framework/aiditor 0.19.6 → 0.20.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.
Files changed (28) hide show
  1. package/dist/actions/cancel-agent-task.jay-action +9 -0
  2. package/dist/actions/cancel-agent-task.jay-action.d.ts +8 -0
  3. package/dist/actions/check-aiditor-publish.jay-action +7 -0
  4. package/dist/actions/check-aiditor-publish.jay-action.d.ts +5 -0
  5. package/dist/actions/get-contract-inspector-tags.jay-action +9 -0
  6. package/dist/actions/get-contract-inspector-tags.jay-action.d.ts +6 -0
  7. package/dist/actions/get-page-assets.jay-action +10 -0
  8. package/dist/actions/get-page-assets.jay-action.d.ts +7 -0
  9. package/dist/actions/get-page-meta.jay-action +9 -0
  10. package/dist/actions/get-page-meta.jay-action.d.ts +6 -0
  11. package/dist/actions/run-aiditor-publish.jay-action +7 -0
  12. package/dist/actions/run-aiditor-publish.jay-action.d.ts +5 -0
  13. package/dist/actions/save-page-assets.jay-action +8 -0
  14. package/dist/actions/save-page-assets.jay-action.d.ts +5 -0
  15. package/dist/actions/save-page-meta.jay-action +8 -0
  16. package/dist/actions/save-page-meta.jay-action.d.ts +5 -0
  17. package/dist/actions/sync-detected-page-assets.jay-action +12 -0
  18. package/dist/actions/sync-detected-page-assets.jay-action.d.ts +10 -0
  19. package/dist/agent-kit-template/plugin/aiditor-add-menu.md +24 -0
  20. package/dist/index.client.d.ts +451 -210
  21. package/dist/index.client.js +9364 -1552
  22. package/dist/index.d.ts +176 -4
  23. package/dist/index.js +974 -86
  24. package/dist/pages/aiditor/page.css +2272 -594
  25. package/dist/pages/aiditor/page.jay-html +4310 -1374
  26. package/dist/pages/aiditor/page.jay-html.d.ts +1013 -0
  27. package/package.json +20 -7
  28. package/plugin.yaml +18 -0
@@ -23,11 +23,14 @@
23
23
  --harmony-shadow-sm: 0 1px 4px rgba(22, 45, 61, 0.06);
24
24
  --harmony-shadow-md: 0 4px 24px rgba(22, 45, 61, 0.1);
25
25
  --harmony-shadow-lg: 0 8px 40px rgba(22, 45, 61, 0.12);
26
+ --harmony-shadow-add-btn:
27
+ 0 1px 2px rgba(22, 45, 61, 0.05), 0 4px 14px rgba(22, 45, 61, 0.1),
28
+ 0 10px 28px rgba(22, 45, 61, 0.08);
26
29
  --harmony-radius-sm: 6px;
27
30
  --harmony-radius-md: 10px;
28
31
  --harmony-radius-lg: 16px;
29
32
  --harmony-radius-pill: 999px;
30
- --harmony-sidebar-width: 52px;
33
+ --harmony-sidebar-width: 72px;
31
34
  --harmony-global-bar-height: 52px;
32
35
  --harmony-secondary-bar-height: 44px;
33
36
  --harmony-font: "Madefor", "Helvetica Neue", Helvetica, Arial, sans-serif;
@@ -180,18 +183,31 @@ body {
180
183
  flex: 1;
181
184
  display: flex;
182
185
  flex-direction: column;
186
+ align-items: center;
183
187
  min-height: 0;
184
- padding: 20px 28px 72px;
185
- overflow: hidden;
188
+ padding: 20px 40px 72px;
189
+ overflow-x: visible;
190
+ overflow-y: hidden;
191
+ }
192
+
193
+ .canvas-stage-shell {
194
+ position: relative;
195
+ flex: 1;
196
+ display: flex;
197
+ flex-direction: column;
198
+ min-height: 0;
199
+ max-width: 100%;
200
+ align-self: center;
186
201
  }
187
202
 
188
203
  .canvas-window {
204
+ position: relative;
189
205
  flex: 1;
190
206
  display: flex;
191
207
  flex-direction: column;
192
208
  min-height: 0;
193
- max-width: 1280px;
194
209
  width: 100%;
210
+ max-width: 100%;
195
211
  margin: 0 auto;
196
212
  background: var(--harmony-bg-surface);
197
213
  border: 1px solid var(--harmony-border);
@@ -199,6 +215,38 @@ body {
199
215
  box-shadow: var(--harmony-shadow-md);
200
216
  overflow: hidden;
201
217
  }
218
+ .stage-resize-handle {
219
+ position: absolute;
220
+ top: 50%;
221
+ z-index: 12;
222
+ width: 10px;
223
+ height: 56px;
224
+ border: 1px solid var(--harmony-border-strong);
225
+ border-radius: var(--harmony-radius-pill);
226
+ background: var(--harmony-bg-surface);
227
+ box-shadow: var(--harmony-shadow-sm);
228
+ cursor: col-resize;
229
+ touch-action: none;
230
+ }
231
+ .stage-resize-handle::before {
232
+ content: "";
233
+ position: absolute;
234
+ top: 50%;
235
+ left: 50%;
236
+ width: 2px;
237
+ height: 20px;
238
+ margin: -10px 0 0 -1px;
239
+ border-radius: 1px;
240
+ background: var(--harmony-border-strong);
241
+ }
242
+ .stage-resize-handle-left {
243
+ left: 0;
244
+ transform: translate(calc(-100% - 8px), -50%);
245
+ }
246
+ .stage-resize-handle-right {
247
+ right: 0;
248
+ transform: translate(calc(100% + 8px), -50%);
249
+ }
202
250
 
203
251
  .canvas-chrome {
204
252
  flex-shrink: 0;
@@ -384,6 +432,10 @@ body {
384
432
  opacity: 0.5;
385
433
  cursor: not-allowed;
386
434
  }
435
+ .aiditor-publish-btn {
436
+ min-width: 88px;
437
+ border-radius: var(--harmony-radius-sm);
438
+ }
387
439
 
388
440
  .harmony-btn-secondary {
389
441
  background: var(--harmony-bg-surface);
@@ -416,13 +468,293 @@ body {
416
468
  /* inherits harmony-btn-secondary */
417
469
  }
418
470
 
419
- .harmony-editor-body,
420
- .harmony-sidebar,
471
+ /* ── Harmony floating rail (Add + settings) ── */
472
+ .harmony-editor-body {
473
+ flex: 1;
474
+ display: flex;
475
+ min-height: 0;
476
+ overflow: hidden;
477
+ position: relative;
478
+ }
479
+ .harmony-float-rail {
480
+ position: absolute;
481
+ top: 16px;
482
+ left: 16px;
483
+ z-index: 30;
484
+ display: flex;
485
+ flex-direction: column;
486
+ align-items: flex-start;
487
+ gap: 8px;
488
+ pointer-events: none;
489
+ }
490
+ .harmony-add-btn {
491
+ position: static;
492
+ display: inline-flex;
493
+ align-items: center;
494
+ justify-content: center;
495
+ gap: 4px;
496
+ padding: 8px 14px;
497
+ background: var(--harmony-bg-surface);
498
+ color: var(--harmony-text);
499
+ border: 1px solid var(--harmony-border);
500
+ border-radius: var(--harmony-radius-md);
501
+ box-shadow: var(--harmony-shadow-add-btn);
502
+ font-size: 13px;
503
+ font-weight: 600;
504
+ font-family: var(--harmony-font);
505
+ cursor: pointer;
506
+ white-space: nowrap;
507
+ line-height: 1.2;
508
+ pointer-events: auto;
509
+ }
510
+ .harmony-add-btn:hover {
511
+ background: var(--harmony-bg-hover);
512
+ border-color: var(--harmony-border-strong);
513
+ box-shadow:
514
+ 0 2px 4px rgba(22, 45, 61, 0.06),
515
+ 0 6px 18px rgba(22, 45, 61, 0.12),
516
+ 0 12px 32px rgba(22, 45, 61, 0.09);
517
+ }
518
+ .harmony-add-btn:disabled {
519
+ opacity: 0.5;
520
+ cursor: not-allowed;
521
+ }
522
+ .harmony-add-btn-open {
523
+ background: var(--harmony-bg-hover);
524
+ border-color: var(--harmony-border-strong);
525
+ box-shadow:
526
+ inset 0 1px 2px rgba(22, 45, 61, 0.06),
527
+ 0 1px 2px rgba(22, 45, 61, 0.04);
528
+ }
529
+ .harmony-stage-action-btn {
530
+ width: 40px;
531
+ min-width: 40px;
532
+ height: 40px;
533
+ padding: 0;
534
+ gap: 0;
535
+ overflow: hidden;
536
+ transition:
537
+ width 0.22s ease,
538
+ min-width 0.22s ease,
539
+ padding 0.22s ease,
540
+ gap 0.22s ease,
541
+ background 0.15s ease,
542
+ border-color 0.15s ease,
543
+ box-shadow 0.15s ease;
544
+ }
545
+ .harmony-stage-action-icon {
546
+ display: inline-flex;
547
+ align-items: center;
548
+ justify-content: center;
549
+ flex-shrink: 0;
550
+ width: 40px;
551
+ height: 40px;
552
+ color: var(--harmony-text);
553
+ }
554
+ .harmony-stage-action-icon svg {
555
+ display: block;
556
+ width: 24px;
557
+ height: 24px;
558
+ }
559
+ .harmony-stage-action-label {
560
+ display: inline-block;
561
+ max-width: 0;
562
+ opacity: 0;
563
+ overflow: hidden;
564
+ white-space: nowrap;
565
+ margin-left: 0;
566
+ transition:
567
+ max-width 0.22s ease,
568
+ opacity 0.18s ease,
569
+ margin-left 0.22s ease;
570
+ }
571
+ .harmony-stage-action-btn:hover,
572
+ .harmony-stage-action-btn:focus-visible,
573
+ .harmony-stage-action-btn.harmony-add-btn-open {
574
+ width: auto;
575
+ min-width: 40px;
576
+ padding-right: 14px;
577
+ gap: 2px;
578
+ }
579
+ .harmony-stage-action-btn:hover .harmony-stage-action-label,
580
+ .harmony-stage-action-btn:focus-visible .harmony-stage-action-label,
581
+ .harmony-stage-action-btn.harmony-add-btn-open .harmony-stage-action-label {
582
+ max-width: 12rem;
583
+ opacity: 1;
584
+ margin-left: -4px;
585
+ }
586
+ .harmony-stage-icon-btn {
587
+ position: absolute;
588
+ left: 20px;
589
+ bottom: 20px;
590
+ z-index: 25;
591
+ display: flex;
592
+ align-items: center;
593
+ justify-content: center;
594
+ width: auto;
595
+ height: auto;
596
+ padding: 4px;
597
+ background: none;
598
+ border: none;
599
+ box-shadow: none;
600
+ color: var(--harmony-text);
601
+ font-size: 22px;
602
+ line-height: 1;
603
+ cursor: pointer;
604
+ opacity: 0.72;
605
+ }
606
+ .harmony-stage-icon-btn:hover {
607
+ opacity: 1;
608
+ color: var(--harmony-text);
609
+ }
610
+ .harmony-stage-icon-btn:disabled {
611
+ opacity: 0.35;
612
+ cursor: not-allowed;
613
+ }
614
+ .harmony-add-flyout-backdrop {
615
+ display: none;
616
+ position: fixed;
617
+ inset: 0;
618
+ z-index: 34;
619
+ background: transparent;
620
+ }
621
+ .harmony-add-flyout-backdrop.harmony-add-flyout-visible {
622
+ display: block;
623
+ }
624
+ .harmony-add-flyout {
625
+ display: none;
626
+ position: absolute;
627
+ top: 56px;
628
+ left: 16px;
629
+ z-index: 35;
630
+ flex-direction: column;
631
+ gap: 8px;
632
+ padding: 0;
633
+ background: transparent;
634
+ border: none;
635
+ box-shadow: none;
636
+ min-width: 0;
637
+ }
638
+ .harmony-add-flyout.harmony-add-flyout-visible {
639
+ display: flex;
640
+ }
641
+ .harmony-add-flyout-item {
642
+ display: flex;
643
+ align-items: center;
644
+ gap: 12px;
645
+ width: 220px;
646
+ padding: 10px 12px;
647
+ background: var(--harmony-bg-surface);
648
+ color: var(--harmony-text);
649
+ border: 1px solid var(--harmony-border);
650
+ border-radius: var(--harmony-radius-md);
651
+ box-shadow: var(--harmony-shadow-md);
652
+ cursor: pointer;
653
+ text-align: left;
654
+ font-family: var(--harmony-font);
655
+ }
656
+ .harmony-add-flyout-item:hover {
657
+ border-color: var(--harmony-border-strong);
658
+ box-shadow: var(--harmony-shadow-lg);
659
+ }
660
+ .harmony-add-flyout-thumb {
661
+ flex-shrink: 0;
662
+ width: 40px;
663
+ height: 40px;
664
+ border-radius: var(--harmony-radius-sm);
665
+ border: 1px solid var(--harmony-border);
666
+ background-size: 24px 24px;
667
+ background-position: center;
668
+ background-repeat: no-repeat;
669
+ }
670
+ .harmony-add-flyout-thumb-pages {
671
+ background-color: #e8f0ff;
672
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' viewBox='0 0 24 24'%3E%3Crect x='4' y='3' width='16' height='18' rx='2' stroke='%23116dff' stroke-width='1.5'/%3E%3Cpath d='M8 8h8M8 12h8M8 16h5' stroke='%23116dff' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
673
+ }
674
+ .harmony-add-flyout-thumb-elements {
675
+ background-color: #fff4e8;
676
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' viewBox='0 0 24 24'%3E%3Crect x='4' y='4' width='7' height='7' rx='1.5' stroke='%23f5a623' stroke-width='1.5'/%3E%3Crect x='13' y='4' width='7' height='7' rx='1.5' stroke='%23f5a623' stroke-width='1.5'/%3E%3Crect x='4' y='13' width='7' height='7' rx='1.5' stroke='%23f5a623' stroke-width='1.5'/%3E%3Crect x='13' y='13' width='7' height='7' rx='1.5' stroke='%23f5a623' stroke-width='1.5'/%3E%3C/svg%3E");
677
+ }
678
+ .harmony-add-flyout-label {
679
+ font-size: 14px;
680
+ font-weight: 500;
681
+ color: var(--harmony-text);
682
+ }
683
+ .harmony-elements-panel {
684
+ position: absolute;
685
+ top: 0;
686
+ left: 0;
687
+ bottom: 0;
688
+ z-index: 32;
689
+ width: 280px;
690
+ display: flex;
691
+ flex-direction: column;
692
+ background: var(--harmony-bg-surface);
693
+ border-right: 1px solid var(--harmony-border);
694
+ box-shadow: var(--harmony-shadow-md);
695
+ }
696
+ .harmony-elements-panel-header {
697
+ flex-shrink: 0;
698
+ display: flex;
699
+ align-items: center;
700
+ justify-content: space-between;
701
+ gap: 8px;
702
+ padding: 14px 16px;
703
+ border-bottom: 1px solid var(--harmony-border);
704
+ }
705
+ .harmony-elements-panel-title {
706
+ font-size: 14px;
707
+ font-weight: 600;
708
+ color: var(--harmony-text);
709
+ }
710
+ .harmony-elements-panel-close {
711
+ background: none;
712
+ border: none;
713
+ color: var(--harmony-text-muted);
714
+ font-size: 20px;
715
+ cursor: pointer;
716
+ line-height: 1;
717
+ padding: 0 4px;
718
+ }
719
+ .harmony-elements-panel-close:hover {
720
+ color: var(--harmony-text);
721
+ }
722
+ .harmony-elements-panel-body {
723
+ flex: 1;
724
+ min-height: 0;
725
+ overflow-y: auto;
726
+ padding: 12px;
727
+ display: flex;
728
+ flex-direction: column;
729
+ gap: 8px;
730
+ }
731
+ .harmony-elements-panel-hint {
732
+ margin: 0;
733
+ font-size: 12px;
734
+ color: var(--harmony-text-secondary);
735
+ line-height: 1.45;
736
+ }
421
737
  .harmony-secondary-bar {
422
738
  display: none !important;
423
739
  }
424
740
  .harmony-workspace {
425
- display: contents;
741
+ flex: 1;
742
+ display: flex;
743
+ flex-direction: column;
744
+ min-width: 0;
745
+ min-height: 0;
746
+ overflow: hidden;
747
+ }
748
+ .sr-only {
749
+ position: absolute;
750
+ width: 1px;
751
+ height: 1px;
752
+ padding: 0;
753
+ margin: -1px;
754
+ overflow: hidden;
755
+ clip: rect(0, 0, 0, 0);
756
+ white-space: nowrap;
757
+ border: 0;
426
758
  }
427
759
  .preview-visual-tools {
428
760
  display: flex;
@@ -468,17 +800,31 @@ body {
468
800
  flex: 1;
469
801
  display: flex;
470
802
  flex-direction: column;
803
+ align-items: center;
471
804
  min-height: 0;
472
- padding: 20px 28px 72px;
805
+ padding: 20px 40px 72px;
473
806
  gap: 10px;
474
- overflow: hidden;
807
+ overflow-x: visible;
808
+ overflow-y: hidden;
809
+ }
810
+ .canvas-stage-shell {
811
+ position: relative;
812
+ flex: 1;
813
+ display: flex;
814
+ flex-direction: column;
815
+ min-height: 0;
816
+ max-width: 100%;
817
+ align-self: center;
475
818
  }
476
819
  .harmony-canvas-window,
477
820
  .canvas-window {
821
+ position: relative;
478
822
  flex: 1;
479
823
  display: flex;
480
824
  flex-direction: column;
481
825
  min-height: 0;
826
+ width: 100%;
827
+ max-width: 100%;
482
828
  background: var(--harmony-bg-surface);
483
829
  border: 1px solid var(--harmony-border);
484
830
  border-radius: var(--harmony-radius-lg);
@@ -563,16 +909,6 @@ body {
563
909
  border: none;
564
910
  display: block;
565
911
  }
566
- .preview-frame-tablet {
567
- align-self: center;
568
- width: 768px;
569
- max-width: 100%;
570
- }
571
- .preview-frame-mobile {
572
- align-self: center;
573
- width: 390px;
574
- max-width: 100%;
575
- }
576
912
 
577
913
  /* ── Visual annotations ── */
578
914
  .visual-overlay {
@@ -742,22 +1078,21 @@ body {
742
1078
  color: var(--harmony-danger);
743
1079
  border-color: var(--harmony-danger);
744
1080
  }
745
- .visual-annotation-run {
746
- background: var(--harmony-primary);
747
- color: #fff;
748
- border: none;
1081
+ .visual-annotation-minimize {
1082
+ display: inline-flex;
1083
+ align-items: center;
1084
+ justify-content: center;
1085
+ background: transparent;
1086
+ color: var(--harmony-text-muted);
1087
+ border: 1px solid var(--harmony-border);
749
1088
  border-radius: var(--harmony-radius-sm);
750
- padding: 4px 10px;
751
- font-size: 11px;
752
- font-weight: 600;
1089
+ padding: 4px 6px;
753
1090
  cursor: pointer;
1091
+ line-height: 0;
754
1092
  }
755
- .visual-annotation-run:hover {
756
- background: var(--harmony-primary-hover);
757
- }
758
- .visual-annotation-run:disabled {
759
- opacity: 0.45;
760
- cursor: not-allowed;
1093
+ .visual-annotation-minimize:hover {
1094
+ color: var(--harmony-primary);
1095
+ border-color: var(--harmony-primary);
761
1096
  }
762
1097
  .visual-annotation-instruction {
763
1098
  width: 100%;
@@ -865,7 +1200,6 @@ body {
865
1200
  }
866
1201
 
867
1202
  .video-record-btn {
868
- border-color: var(--harmony-primary) !important;
869
1203
  color: var(--harmony-primary) !important;
870
1204
  }
871
1205
  .video-record-active {
@@ -1217,20 +1551,52 @@ body {
1217
1551
  flex-direction: column;
1218
1552
  gap: 10px;
1219
1553
  padding: 14px 16px;
1220
- overflow: auto;
1221
- box-shadow: var(--harmony-shadow-lg);
1222
- }
1223
- .snapshot-panel {
1224
- width: min(1200px, 96vw);
1225
1554
  overflow: hidden;
1555
+ box-shadow: var(--harmony-shadow-lg);
1226
1556
  }
1227
- .video-review-header,
1228
- .snapshot-header {
1557
+ .video-review-body {
1229
1558
  display: flex;
1230
- justify-content: space-between;
1559
+ flex-direction: column;
1560
+ gap: 10px;
1561
+ min-height: 0;
1562
+ flex: 1 1 auto;
1563
+ }
1564
+ .video-review-tools {
1565
+ display: inline-flex;
1566
+ flex-wrap: nowrap;
1567
+ gap: 2px;
1231
1568
  align-items: center;
1232
- gap: 12px;
1233
- flex-wrap: wrap;
1569
+ width: fit-content;
1570
+ }
1571
+ .video-review-tools .visual-tool-btn {
1572
+ padding: 7px 8px;
1573
+ min-width: 28px;
1574
+ }
1575
+ .video-review-capture-root {
1576
+ flex: 0 1 auto;
1577
+ min-height: 0;
1578
+ max-height: min(56vh, 480px);
1579
+ overflow: hidden;
1580
+ }
1581
+ .video-review-capture-root .preview-frame {
1582
+ width: 100%;
1583
+ height: auto;
1584
+ min-height: 0;
1585
+ max-height: min(56vh, 480px);
1586
+ object-fit: contain;
1587
+ display: block;
1588
+ }
1589
+ .snapshot-panel {
1590
+ width: min(1200px, 96vw);
1591
+ overflow: hidden;
1592
+ }
1593
+ .video-review-header,
1594
+ .snapshot-header {
1595
+ display: flex;
1596
+ justify-content: space-between;
1597
+ align-items: center;
1598
+ gap: 12px;
1599
+ flex-wrap: wrap;
1234
1600
  }
1235
1601
  .video-review-title,
1236
1602
  .snapshot-title {
@@ -1243,7 +1609,6 @@ body {
1243
1609
  font-size: 12px;
1244
1610
  color: var(--harmony-text-muted);
1245
1611
  }
1246
- .video-review-tools,
1247
1612
  .snapshot-tools {
1248
1613
  display: flex;
1249
1614
  flex-wrap: wrap;
@@ -1341,6 +1706,56 @@ body {
1341
1706
  opacity: 0.45;
1342
1707
  cursor: not-allowed;
1343
1708
  }
1709
+ .harmony-modal-close {
1710
+ background: none;
1711
+ border: none;
1712
+ color: var(--harmony-text-muted);
1713
+ cursor: pointer;
1714
+ padding: 4px;
1715
+ line-height: 0;
1716
+ display: inline-flex;
1717
+ align-items: center;
1718
+ justify-content: center;
1719
+ border-radius: var(--harmony-radius-sm);
1720
+ flex-shrink: 0;
1721
+ }
1722
+ .harmony-modal-close:hover {
1723
+ color: var(--harmony-text);
1724
+ background: var(--harmony-bg-hover);
1725
+ }
1726
+ .video-review-close-confirm-overlay {
1727
+ position: fixed;
1728
+ inset: 0;
1729
+ z-index: 380;
1730
+ background: rgba(22, 45, 61, 0.45);
1731
+ display: flex;
1732
+ align-items: center;
1733
+ justify-content: center;
1734
+ padding: 24px;
1735
+ box-sizing: border-box;
1736
+ }
1737
+ .video-review-close-confirm-dialog {
1738
+ background: var(--harmony-bg-surface);
1739
+ border: 1px solid var(--harmony-border);
1740
+ border-radius: var(--harmony-radius-lg);
1741
+ width: min(400px, 100%);
1742
+ padding: 20px 24px;
1743
+ box-shadow: var(--harmony-shadow-lg);
1744
+ display: flex;
1745
+ flex-direction: column;
1746
+ gap: 16px;
1747
+ }
1748
+ .video-review-close-confirm-msg {
1749
+ margin: 0;
1750
+ font-size: 14px;
1751
+ line-height: 1.45;
1752
+ color: var(--harmony-text);
1753
+ }
1754
+ .video-review-close-confirm-actions {
1755
+ display: flex;
1756
+ justify-content: flex-end;
1757
+ gap: 8px;
1758
+ }
1344
1759
  .snapshot-close {
1345
1760
  background: none;
1346
1761
  border: none;
@@ -1447,14 +1862,19 @@ body {
1447
1862
  flex: 1;
1448
1863
  }
1449
1864
 
1450
- /* ── Add Page slideover ── */
1865
+ /* ── Add Page modal (Harmony-style centered dialog) ── */
1451
1866
  .add-page-overlay {
1452
1867
  position: fixed;
1453
1868
  inset: 0;
1454
1869
  z-index: 300;
1455
- background: rgba(22, 45, 61, 0.35);
1870
+ background: rgba(255, 255, 255, 0.72);
1871
+ backdrop-filter: blur(14px);
1872
+ -webkit-backdrop-filter: blur(14px);
1456
1873
  display: flex;
1457
- justify-content: flex-end;
1874
+ align-items: center;
1875
+ justify-content: center;
1876
+ padding: 40px 48px;
1877
+ box-sizing: border-box;
1458
1878
  }
1459
1879
  .project-settings-overlay {
1460
1880
  position: fixed;
@@ -1467,566 +1887,1108 @@ body {
1467
1887
  padding: 24px;
1468
1888
  box-sizing: border-box;
1469
1889
  }
1470
- .project-settings-dialog {
1890
+ .add-menu-picker-overlay {
1891
+ position: fixed;
1892
+ inset: 0;
1893
+ z-index: 360;
1894
+ background: rgba(22, 45, 61, 0.45);
1895
+ display: flex;
1896
+ align-items: center;
1897
+ justify-content: center;
1898
+ padding: 24px;
1899
+ box-sizing: border-box;
1900
+ }
1901
+ .add-menu-picker-dialog {
1471
1902
  background: var(--harmony-bg-surface);
1472
1903
  border: 1px solid var(--harmony-border);
1473
1904
  border-radius: var(--harmony-radius-lg);
1474
- width: min(520px, 100%);
1905
+ width: min(480px, 100%);
1475
1906
  max-height: min(80vh, 640px);
1476
1907
  display: flex;
1477
1908
  flex-direction: column;
1478
1909
  overflow: hidden;
1479
1910
  box-shadow: var(--harmony-shadow-lg);
1480
1911
  }
1481
- .project-settings-header {
1912
+ .add-menu-picker-dialog--browse {
1913
+ width: min(720px, 100%);
1914
+ max-height: min(85vh, 720px);
1915
+ }
1916
+ .add-menu-picker-overlay--full {
1917
+ padding: 16px;
1918
+ align-items: stretch;
1919
+ justify-content: stretch;
1920
+ background: rgba(255, 255, 255, 0.72);
1921
+ backdrop-filter: blur(14px);
1922
+ -webkit-backdrop-filter: blur(14px);
1923
+ }
1924
+ .add-menu-picker-dismiss-confirm-overlay {
1925
+ position: fixed;
1926
+ inset: 0;
1927
+ z-index: 380;
1928
+ background: rgba(22, 45, 61, 0.45);
1482
1929
  display: flex;
1483
1930
  align-items: center;
1484
- justify-content: space-between;
1485
- padding: 14px 16px;
1486
- border-bottom: 1px solid var(--harmony-border);
1487
- background: var(--harmony-bg-subtle);
1931
+ justify-content: center;
1932
+ padding: 24px;
1933
+ box-sizing: border-box;
1488
1934
  }
1489
- .project-settings-title {
1935
+ .add-menu-picker-dismiss-confirm-dialog {
1936
+ background: var(--harmony-bg-surface);
1937
+ border: 1px solid var(--harmony-border);
1938
+ border-radius: var(--harmony-radius-lg);
1939
+ width: min(400px, 100%);
1940
+ padding: 20px 24px;
1941
+ box-shadow: var(--harmony-shadow-lg);
1942
+ display: flex;
1943
+ flex-direction: column;
1944
+ gap: 16px;
1945
+ }
1946
+ .add-menu-picker-dismiss-confirm-msg {
1947
+ margin: 0;
1490
1948
  font-size: 14px;
1491
- font-weight: 600;
1949
+ line-height: 1.45;
1492
1950
  color: var(--harmony-text);
1493
1951
  }
1494
- .project-settings-close {
1495
- background: none;
1496
- border: none;
1497
- color: var(--harmony-text-muted);
1498
- font-size: 20px;
1499
- cursor: pointer;
1500
- line-height: 1;
1501
- }
1502
- .project-settings-body {
1503
- padding: 14px 16px;
1504
- overflow: auto;
1952
+ .add-menu-picker-dismiss-confirm-actions {
1505
1953
  display: flex;
1506
- flex-direction: column;
1507
- gap: 12px;
1954
+ justify-content: flex-end;
1955
+ gap: 8px;
1508
1956
  }
1509
- .add-page-slideover {
1510
- width: min(480px, 100vw);
1957
+ .add-menu-picker-dialog--full {
1958
+ width: 100%;
1511
1959
  height: 100%;
1512
- background: var(--harmony-bg-surface);
1513
- border-left: 1px solid var(--harmony-border);
1514
- display: flex;
1515
- flex-direction: column;
1516
- box-shadow: var(--harmony-shadow-lg);
1517
- position: relative;
1960
+ max-height: none;
1961
+ box-shadow:
1962
+ 0 24px 80px rgba(22, 45, 61, 0.16),
1963
+ 0 8px 24px rgba(22, 45, 61, 0.08);
1518
1964
  }
1519
- .add-page-header {
1965
+ .add-menu-picker-dialog--browse.add-menu-picker-dialog--full {
1966
+ width: 100%;
1967
+ height: 100%;
1968
+ max-height: none;
1969
+ }
1970
+ .add-menu-picker-header {
1520
1971
  display: flex;
1521
1972
  align-items: center;
1522
- gap: 8px;
1523
- padding: 14px 16px;
1973
+ gap: 12px;
1974
+ padding: 20px 28px;
1524
1975
  border-bottom: 1px solid var(--harmony-border);
1525
1976
  flex-shrink: 0;
1526
- background: var(--harmony-bg-subtle);
1977
+ background: var(--harmony-bg-surface);
1527
1978
  }
1528
- .add-page-title {
1529
- font-size: 14px;
1530
- font-weight: 600;
1531
- color: var(--harmony-text);
1979
+ .add-menu-picker-title {
1532
1980
  flex: 1;
1981
+ font-size: 20px;
1982
+ font-weight: 700;
1983
+ color: var(--harmony-text);
1984
+ letter-spacing: -0.02em;
1533
1985
  }
1534
- .add-page-close {
1986
+ .add-menu-picker-header-back,
1987
+ .add-menu-picker-close {
1535
1988
  background: none;
1536
1989
  border: none;
1537
1990
  color: var(--harmony-text-muted);
1538
- font-size: 20px;
1539
1991
  cursor: pointer;
1540
1992
  line-height: 1;
1541
- padding: 0 4px;
1993
+ padding: 4px;
1994
+ border-radius: var(--harmony-radius-sm);
1542
1995
  }
1543
- .add-page-close:hover {
1996
+ .add-menu-picker-header-back {
1997
+ display: inline-flex;
1998
+ align-items: center;
1999
+ justify-content: center;
2000
+ flex-shrink: 0;
2001
+ line-height: 0;
2002
+ overflow: visible;
2003
+ }
2004
+ .add-menu-picker-header-back-icon {
2005
+ display: block;
2006
+ flex-shrink: 0;
2007
+ width: 30px;
2008
+ height: 30px;
2009
+ color: black;
2010
+ }
2011
+ .add-menu-picker-close {
2012
+ font-size: 22px;
2013
+ }
2014
+ .add-menu-picker-header-back:hover,
2015
+ .add-menu-picker-close:hover {
1544
2016
  color: var(--harmony-text);
2017
+ background: var(--harmony-bg-hover);
1545
2018
  }
1546
- .add-page-body {
1547
- flex: 1;
2019
+ .add-menu-picker-back {
2020
+ background: none;
2021
+ border: none;
2022
+ color: var(--harmony-text-muted);
2023
+ font-size: 13px;
2024
+ cursor: pointer;
2025
+ line-height: 1;
2026
+ padding: 4px 6px;
2027
+ }
2028
+ .add-menu-picker-back:hover {
2029
+ color: var(--harmony-text);
2030
+ }
2031
+ .add-menu-picker-body {
2032
+ padding: 12px 16px 16px;
1548
2033
  overflow: auto;
1549
- padding: 14px 16px;
1550
2034
  display: flex;
1551
2035
  flex-direction: column;
1552
- gap: 16px;
2036
+ gap: 6px;
2037
+ flex: 1;
2038
+ min-height: 0;
1553
2039
  }
1554
- .add-page-section-label {
1555
- font-size: 11px;
1556
- font-weight: 600;
2040
+ .add-menu-picker-hint {
2041
+ font-size: 12px;
1557
2042
  color: var(--harmony-text-muted);
1558
- text-transform: uppercase;
1559
- letter-spacing: 0.4px;
1560
- margin-bottom: 6px;
2043
+ margin: 0;
1561
2044
  }
1562
- .add-page-section-header-row {
2045
+ .add-menu-picker-plugin-btn,
2046
+ .add-menu-picker-component-card {
1563
2047
  display: flex;
1564
- align-items: center;
1565
- justify-content: space-between;
1566
- gap: 8px;
1567
- margin-bottom: 6px;
1568
- }
1569
- .add-page-section-header-row .add-page-section-label {
1570
- margin-bottom: 0;
1571
- flex: 1;
1572
- }
1573
- .add-page-fill-from-image-btn {
1574
- background: var(--harmony-bg-subtle);
1575
- color: var(--harmony-primary);
2048
+ flex-direction: column;
2049
+ align-items: flex-start;
2050
+ gap: 2px;
2051
+ width: 100%;
2052
+ text-align: left;
2053
+ padding: 10px 12px;
1576
2054
  border: 1px solid var(--harmony-border);
1577
- border-radius: var(--harmony-radius-sm);
1578
- padding: 4px 10px;
1579
- font-size: 11px;
1580
- font-weight: 600;
2055
+ border-radius: var(--harmony-radius-md);
2056
+ background: var(--harmony-bg-surface);
2057
+ color: var(--harmony-text);
2058
+ font-family: var(--harmony-font);
2059
+ font-size: 13px;
1581
2060
  cursor: pointer;
1582
- flex-shrink: 0;
1583
2061
  }
1584
- .add-page-fill-from-image-btn:hover {
1585
- background: var(--harmony-primary-soft);
2062
+ .add-menu-picker-plugin-btn:hover,
2063
+ .add-menu-picker-component-card:hover {
2064
+ background: var(--harmony-bg-hover);
2065
+ border-color: var(--harmony-border-strong);
1586
2066
  }
1587
- .add-page-fill-from-image-btn:disabled {
1588
- opacity: 0.45;
1589
- cursor: not-allowed;
2067
+ .add-menu-picker-plugin-meta,
2068
+ .add-menu-picker-component-sub {
2069
+ font-size: 11px;
2070
+ color: var(--harmony-text-muted);
1590
2071
  }
1591
- .add-page-suggested-route {
2072
+ .add-menu-picker-browse {
2073
+ flex: 1;
2074
+ min-height: 0;
2075
+ display: flex;
2076
+ flex-direction: column;
2077
+ gap: 10px;
2078
+ }
2079
+ .add-menu-picker-plugin-tabs {
1592
2080
  display: flex;
1593
2081
  flex-wrap: wrap;
1594
- align-items: center;
1595
- gap: 8px;
1596
- background: var(--harmony-bg-subtle);
2082
+ gap: 6px;
2083
+ }
2084
+ .add-menu-picker-plugin-tab {
2085
+ padding: 6px 12px;
1597
2086
  border: 1px solid var(--harmony-border);
1598
- border-radius: var(--harmony-radius-sm);
1599
- padding: 8px 10px;
2087
+ border-radius: 999px;
2088
+ background: var(--harmony-bg-surface);
2089
+ color: var(--harmony-text-muted);
2090
+ font-family: var(--harmony-font);
1600
2091
  font-size: 12px;
1601
- color: var(--harmony-text-secondary);
1602
- margin-bottom: 8px;
2092
+ cursor: pointer;
1603
2093
  }
1604
- .add-page-suggested-route code {
1605
- font-family: var(--harmony-mono);
1606
- color: var(--harmony-primary);
2094
+ .add-menu-picker-plugin-tab:hover {
2095
+ background: var(--harmony-bg-hover);
2096
+ color: var(--harmony-text);
1607
2097
  }
1608
- .add-page-brief-fill-popover {
1609
- position: absolute;
1610
- inset: 0;
1611
- z-index: 10;
1612
- background: rgba(22, 45, 61, 0.4);
1613
- display: flex;
1614
- align-items: center;
1615
- justify-content: center;
1616
- padding: 16px;
1617
- box-sizing: border-box;
2098
+ .add-menu-picker-plugin-tab--selected {
2099
+ background: var(--harmony-bg-subtle);
2100
+ color: var(--harmony-text);
2101
+ font-weight: 600;
2102
+ border-color: var(--harmony-border-strong);
1618
2103
  }
1619
- .add-page-brief-fill-panel {
1620
- background: var(--harmony-bg-surface);
1621
- border: 1px solid var(--harmony-border);
1622
- border-radius: var(--harmony-radius-md);
1623
- width: min(420px, 100%);
1624
- max-height: 90%;
1625
- overflow: auto;
1626
- padding: 14px 16px;
2104
+ .add-menu-picker-browse-layout {
2105
+ display: flex;
2106
+ gap: 0;
2107
+ flex: 1;
2108
+ min-height: 0;
2109
+ border: 1px solid var(--harmony-border);
2110
+ border-radius: var(--harmony-radius-md);
2111
+ overflow: hidden;
2112
+ }
2113
+ .add-menu-picker-sidebar {
1627
2114
  display: flex;
1628
2115
  flex-direction: column;
1629
- gap: 10px;
1630
- box-shadow: var(--harmony-shadow-lg);
2116
+ width: 168px;
2117
+ flex-shrink: 0;
2118
+ border-right: 1px solid var(--harmony-border);
2119
+ background: var(--harmony-bg-subtle);
2120
+ overflow-y: auto;
2121
+ padding: 8px 6px;
2122
+ gap: 2px;
1631
2123
  }
1632
- .add-page-brief-fill-header {
2124
+ .add-menu-picker-category-btn {
1633
2125
  display: flex;
1634
2126
  align-items: center;
1635
2127
  justify-content: space-between;
1636
2128
  gap: 8px;
1637
- }
1638
- .add-page-brief-fill-title {
1639
- font-size: 13px;
1640
- font-weight: 600;
1641
- color: var(--harmony-text);
1642
- }
1643
- .add-page-brief-fill-context {
1644
2129
  width: 100%;
1645
- min-height: 64px;
1646
- background: var(--harmony-bg-surface);
1647
- color: var(--harmony-text);
1648
- border: 1px solid var(--harmony-border);
1649
- border-radius: var(--harmony-radius-sm);
1650
- padding: 8px;
1651
- font-size: 12px;
1652
- font-family: var(--harmony-mono);
1653
- resize: vertical;
1654
- box-sizing: border-box;
1655
- }
1656
- .add-page-brief-fill-dropzone {
1657
- border: 1px dashed var(--harmony-border-strong);
2130
+ text-align: left;
2131
+ padding: 8px 10px;
2132
+ border: none;
1658
2133
  border-radius: var(--harmony-radius-md);
1659
- padding: 14px;
1660
- text-align: center;
1661
- color: var(--harmony-text-muted);
1662
- font-size: 12px;
2134
+ background: transparent;
2135
+ color: var(--harmony-text);
2136
+ font-family: var(--harmony-font);
2137
+ font-size: 13px;
1663
2138
  cursor: pointer;
1664
2139
  }
1665
- .add-page-brief-fill-dropzone-disabled {
1666
- opacity: 0.45;
1667
- cursor: not-allowed;
1668
- pointer-events: none;
2140
+ .add-menu-picker-category-btn:hover {
2141
+ background: var(--harmony-bg-hover);
1669
2142
  }
1670
- .add-page-brief-fill-context:disabled {
1671
- opacity: 0.6;
1672
- cursor: not-allowed;
2143
+ .add-menu-picker-category-btn--selected {
2144
+ background: var(--harmony-bg-surface);
2145
+ font-weight: 600;
2146
+ box-shadow: inset 0 0 0 1px var(--harmony-border);
1673
2147
  }
1674
- .add-page-brief-fill-dropzone:focus {
1675
- outline: none;
1676
- border-color: var(--harmony-primary);
1677
- box-shadow: 0 0 0 3px var(--harmony-primary-soft);
2148
+ .add-menu-picker-category-count {
2149
+ font-size: 11px;
2150
+ color: var(--harmony-text-muted);
1678
2151
  }
1679
- .add-page-brief-fill-thumbs {
2152
+ .add-menu-picker-main {
2153
+ flex: 1;
2154
+ min-width: 0;
1680
2155
  display: flex;
1681
- flex-wrap: wrap;
1682
- gap: 8px;
1683
- }
1684
- .add-page-brief-fill-thumb {
1685
- position: relative;
1686
- width: 72px;
1687
- height: 72px;
1688
- border-radius: var(--harmony-radius-sm);
2156
+ flex-direction: column;
2157
+ padding: 14px 16px 16px;
1689
2158
  overflow: hidden;
1690
- border: 1px solid var(--harmony-border);
1691
- background: var(--harmony-bg-subtle);
1692
2159
  }
1693
- .add-page-brief-fill-thumb img {
1694
- width: 100%;
1695
- height: 100%;
1696
- object-fit: cover;
1697
- display: block;
1698
- }
1699
- .add-page-brief-fill-thumb-remove {
1700
- position: absolute;
1701
- top: 2px;
1702
- right: 2px;
1703
- background: rgba(22, 45, 61, 0.7);
1704
- color: #fff;
1705
- border: none;
1706
- border-radius: 3px;
1707
- width: 18px;
1708
- height: 18px;
1709
- font-size: 12px;
1710
- line-height: 1;
1711
- cursor: pointer;
1712
- padding: 0;
2160
+ .add-menu-picker-main-title {
2161
+ margin: 0 0 12px;
2162
+ font-size: 18px;
2163
+ font-weight: 600;
2164
+ color: var(--harmony-text);
1713
2165
  }
1714
- .add-page-brief-fill-actions {
2166
+ .add-menu-picker-subcategories {
1715
2167
  display: flex;
2168
+ flex-wrap: nowrap;
1716
2169
  gap: 8px;
1717
- justify-content: flex-end;
1718
- margin-top: 4px;
2170
+ overflow-x: auto;
2171
+ flex: 1;
2172
+ min-width: 0;
2173
+ scrollbar-width: none;
2174
+ -webkit-overflow-scrolling: touch;
1719
2175
  }
1720
- .add-page-route-row {
2176
+ .add-menu-picker-subcategories::-webkit-scrollbar {
2177
+ display: none;
2178
+ }
2179
+ .add-menu-picker-subcategory-scroll {
1721
2180
  display: flex;
1722
2181
  align-items: center;
1723
- gap: 8px;
1724
- flex-wrap: wrap;
2182
+ gap: 6px;
2183
+ margin-bottom: 14px;
2184
+ min-width: 0;
1725
2185
  }
1726
- .add-page-route-input {
1727
- flex: 1;
1728
- min-width: 160px;
1729
- background: var(--harmony-bg-surface);
1730
- color: var(--harmony-text);
2186
+ .add-menu-picker-subcategory-scroll-btn {
2187
+ flex-shrink: 0;
2188
+ width: 28px;
2189
+ height: 28px;
1731
2190
  border: 1px solid var(--harmony-border);
1732
2191
  border-radius: var(--harmony-radius-sm);
1733
- padding: 8px 10px;
1734
- font-size: 13px;
1735
- font-family: var(--harmony-mono);
1736
- box-sizing: border-box;
1737
- }
1738
- .add-page-route-input:focus {
1739
- border-color: var(--harmony-primary);
1740
- outline: none;
1741
- box-shadow: 0 0 0 3px var(--harmony-primary-soft);
1742
- }
1743
- .add-page-route-badge {
1744
- font-size: 10px;
1745
- color: var(--harmony-primary);
1746
- background: var(--harmony-primary-soft);
1747
- padding: 2px 8px;
1748
- border-radius: 4px;
2192
+ background: var(--harmony-bg-surface);
2193
+ color: var(--harmony-text-muted);
2194
+ font-size: 16px;
2195
+ line-height: 1;
2196
+ cursor: pointer;
2197
+ padding: 0;
1749
2198
  }
1750
- .add-page-field-error {
1751
- font-size: 12px;
1752
- color: var(--harmony-danger);
1753
- margin-top: 4px;
2199
+ .add-menu-picker-subcategory-scroll-btn:hover {
2200
+ color: var(--harmony-text);
2201
+ background: var(--harmony-bg-hover);
1754
2202
  }
1755
- .add-page-hint {
1756
- font-size: 12px;
2203
+ .add-menu-picker-subcategory-btn {
2204
+ display: inline-flex;
2205
+ align-items: center;
2206
+ gap: 6px;
2207
+ flex-shrink: 0;
2208
+ padding: 6px 12px;
2209
+ border: none;
2210
+ border-radius: 999px;
2211
+ background: transparent;
1757
2212
  color: var(--harmony-text-muted);
1758
- margin-top: 4px;
2213
+ font-family: var(--harmony-font);
2214
+ font-size: 13px;
2215
+ cursor: pointer;
2216
+ white-space: nowrap;
1759
2217
  }
1760
- .add-page-textarea {
1761
- width: 100%;
1762
- min-height: 120px;
1763
- background: var(--harmony-bg-surface);
2218
+ .add-menu-picker-subcategory-btn:hover {
1764
2219
  color: var(--harmony-text);
1765
- border: 1px solid var(--harmony-border);
1766
- border-radius: var(--harmony-radius-sm);
1767
- padding: 10px;
1768
- font-size: 12px;
1769
- font-family: var(--harmony-mono);
1770
- resize: vertical;
1771
- box-sizing: border-box;
1772
- outline: none;
2220
+ background: var(--harmony-bg-hover);
1773
2221
  }
1774
- .add-page-textarea:focus {
1775
- border-color: var(--harmony-primary);
1776
- box-shadow: 0 0 0 3px var(--harmony-primary-soft);
2222
+ .add-menu-picker-subcategory-btn--selected {
2223
+ background: var(--harmony-bg-subtle);
2224
+ color: var(--harmony-text);
2225
+ font-weight: 600;
2226
+ box-shadow: inset 0 0 0 1px var(--harmony-border);
1777
2227
  }
1778
- .add-page-dropzone {
1779
- border: 1px dashed var(--harmony-border-strong);
1780
- border-radius: var(--harmony-radius-md);
1781
- padding: 16px;
1782
- text-align: center;
1783
- color: var(--harmony-text-muted);
2228
+ .add-menu-picker-subcategory-count {
1784
2229
  font-size: 12px;
2230
+ color: var(--harmony-text-muted);
2231
+ font-weight: 400;
1785
2232
  }
1786
- .add-page-chips {
2233
+ .add-menu-picker-search-row {
1787
2234
  display: flex;
1788
- flex-direction: column;
1789
- gap: 6px;
1790
- margin-top: 8px;
2235
+ align-items: center;
2236
+ gap: 8px;
2237
+ margin-bottom: 10px;
2238
+ min-width: 0;
1791
2239
  }
1792
- .add-page-chip {
2240
+ .add-menu-picker-search-field {
2241
+ flex: 1;
2242
+ min-width: 0;
1793
2243
  display: flex;
1794
2244
  align-items: center;
1795
2245
  gap: 8px;
1796
- background: var(--harmony-bg-subtle);
2246
+ padding: 8px 12px;
1797
2247
  border: 1px solid var(--harmony-border);
1798
- border-radius: var(--harmony-radius-sm);
1799
- padding: 6px 8px;
1800
- font-size: 11px;
2248
+ border-radius: 999px;
2249
+ background: var(--harmony-bg-surface);
1801
2250
  }
1802
- .add-page-chip-name {
2251
+ .add-menu-picker-search-icon {
2252
+ color: var(--harmony-text-muted);
2253
+ font-size: 30px;
2254
+ line-height: 1;
2255
+ flex-shrink: 0;
2256
+ }
2257
+ .add-menu-picker-search-input {
1803
2258
  flex: 1;
1804
2259
  min-width: 0;
1805
- overflow: hidden;
1806
- text-overflow: ellipsis;
1807
- white-space: nowrap;
1808
- color: var(--harmony-text-secondary);
2260
+ border: none;
2261
+ background: transparent;
2262
+ color: var(--harmony-text);
2263
+ font-family: var(--harmony-font);
2264
+ font-size: 13px;
2265
+ outline: none;
1809
2266
  }
1810
- .add-page-chip-path {
1811
- font-size: 10px;
1812
- color: var(--harmony-text-muted);
1813
- font-family: var(--harmony-mono);
2267
+ .add-menu-picker-search-input::-webkit-search-cancel-button {
2268
+ -webkit-appearance: none;
2269
+ display: none;
1814
2270
  }
1815
- .add-page-chip select {
1816
- background: var(--harmony-bg-surface);
1817
- color: var(--harmony-text);
1818
- border: 1px solid var(--harmony-border);
1819
- border-radius: 4px;
1820
- font-size: 11px;
1821
- padding: 2px 4px;
2271
+ .add-menu-picker-search-input::placeholder {
2272
+ color: var(--harmony-text-muted);
1822
2273
  }
1823
- .add-page-chip-remove {
2274
+ .add-menu-picker-search-clear {
2275
+ flex-shrink: 0;
1824
2276
  background: none;
1825
2277
  border: none;
1826
2278
  color: var(--harmony-text-muted);
2279
+ font-size: 22px;
2280
+ line-height: 1;
1827
2281
  cursor: pointer;
1828
- font-size: 14px;
1829
2282
  padding: 0 4px;
1830
2283
  }
1831
- .add-page-chip-remove:hover {
1832
- color: var(--harmony-danger);
2284
+ .add-menu-picker-search-clear:hover {
2285
+ color: var(--harmony-text);
1833
2286
  }
1834
- .add-page-plugins {
1835
- border: 1px solid var(--harmony-border);
1836
- border-radius: var(--harmony-radius-md);
1837
- padding: 10px;
1838
- margin-top: 8px;
1839
- display: flex;
1840
- flex-direction: column;
1841
- gap: 12px;
1842
- max-height: 320px;
1843
- overflow: auto;
2287
+ .add-menu-picker-search-summary {
2288
+ margin: 0 0 12px;
2289
+ font-size: 13px;
2290
+ color: var(--harmony-text-muted);
1844
2291
  }
1845
- .add-menu-panel.add-page-plugins,
1846
- .annotation-add-menu-panel.add-menu-panel {
1847
- max-height: min(320px, 42vh);
1848
- overflow: hidden;
1849
- gap: 8px;
1850
- min-height: 0;
1851
- display: flex;
1852
- flex-direction: column;
2292
+ .add-menu-picker-browse-layout--search {
2293
+ border: none;
1853
2294
  }
1854
- .add-menu-panel .add-page-plugins-zone-title {
1855
- flex-shrink: 0;
2295
+ .add-menu-picker-browse-layout--search .add-menu-picker-main {
2296
+ padding-top: 0;
1856
2297
  }
1857
- .add-menu-panel .add-menu-panel-attached {
1858
- flex: 0 1 auto;
1859
- min-height: 0;
1860
- max-height: 120px;
2298
+ .add-menu-picker-browse-content {
2299
+ display: grid;
2300
+ grid-template-columns: repeat(auto-fill, minmax(168px, 1fr));
2301
+ gap: 12px;
1861
2302
  overflow-y: auto;
1862
- overflow-x: hidden;
1863
- -webkit-overflow-scrolling: touch;
1864
- }
1865
- .add-menu-panel .add-page-plugin-chips {
1866
- margin-top: 0;
1867
- }
1868
- .add-menu-panel .add-page-btn,
1869
- .add-menu-panel .add-page-manage-link,
1870
- .add-menu-panel .add-page-hint,
1871
- .add-menu-panel .add-page-field-error,
1872
- .add-menu-panel .add-menu-route-params,
1873
- .add-menu-panel .add-page-suggested-route,
1874
- .add-menu-panel .add-menu-route-confirm {
1875
- flex-shrink: 0;
1876
- }
1877
- .add-menu-panel .add-menu-popover {
1878
- flex-shrink: 0;
1879
- min-height: 180px;
1880
- max-height: min(240px, 36vh);
1881
- margin-top: 4px;
2303
+ flex: 1;
2304
+ min-height: 0;
2305
+ align-content: start;
2306
+ grid-auto-rows: minmax(152px, auto);
1882
2307
  }
1883
- .add-menu-panel .add-menu-nav {
1884
- min-height: 140px;
2308
+ .add-menu-picker-browse-row {
2309
+ display: contents;
1885
2310
  }
1886
- .add-page-plugins-zone-title {
1887
- font-size: 11px;
2311
+ .add-menu-picker-section-title {
2312
+ margin: 8px 0 4px;
2313
+ font-size: 13px;
1888
2314
  font-weight: 600;
1889
- color: var(--harmony-text-secondary);
2315
+ color: var(--harmony-text-muted);
1890
2316
  text-transform: uppercase;
1891
2317
  letter-spacing: 0.04em;
1892
- margin-bottom: 4px;
2318
+ grid-column: 1 / -1;
1893
2319
  }
1894
- .add-page-plugin-row {
2320
+ .add-menu-picker-browse-content .add-menu-picker-component-card {
2321
+ width: auto;
2322
+ }
2323
+ .add-menu-picker-component-card {
2324
+ min-height: 72px;
2325
+ overflow: hidden;
2326
+ box-sizing: border-box;
2327
+ }
2328
+ .add-menu-picker-component-card--preview,
2329
+ .add-menu-picker-component-card--info {
1895
2330
  display: flex;
1896
- align-items: center;
1897
- gap: 8px;
1898
- padding: 4px 0;
1899
- font-size: 11px;
1900
- border-bottom: 1px solid var(--harmony-border);
2331
+ flex-direction: column;
2332
+ align-items: stretch;
2333
+ gap: 6px;
2334
+ padding: 8px;
2335
+ min-height: 0;
2336
+ height: 100%;
2337
+ text-align: left;
1901
2338
  }
1902
- .add-page-plugin-row:last-child {
1903
- border-bottom: none;
2339
+ .add-menu-picker-component-card--preview {
2340
+ min-height: 152px;
1904
2341
  }
1905
- .add-page-plugin-label {
1906
- flex: 1;
1907
- color: var(--harmony-text-secondary);
2342
+ .add-menu-picker-component-card--info {
2343
+ min-height: 72px;
2344
+ justify-content: flex-start;
2345
+ padding: 10px 12px;
2346
+ gap: 0;
1908
2347
  }
1909
- .add-page-plugin-btn {
2348
+ .add-menu-picker-component-preview {
2349
+ display: flex;
2350
+ align-items: center;
2351
+ justify-content: center;
2352
+ width: 100%;
2353
+ height: 112px;
2354
+ flex: 0 0 112px;
2355
+ border-radius: 6px;
2356
+ overflow: hidden;
1910
2357
  background: var(--harmony-bg-subtle);
1911
- color: var(--harmony-text-secondary);
1912
2358
  border: 1px solid var(--harmony-border);
1913
- border-radius: var(--harmony-radius-sm);
1914
- padding: 2px 8px;
1915
- font-size: 10px;
1916
- cursor: pointer;
1917
- }
1918
- .add-page-plugin-btn:hover {
1919
- background: var(--harmony-bg-hover);
1920
- color: var(--harmony-text);
1921
2359
  }
1922
- .add-page-plugin-btn:disabled {
1923
- opacity: 0.45;
1924
- cursor: not-allowed;
2360
+ .add-menu-picker-component-thumb {
2361
+ display: block;
2362
+ width: 100%;
2363
+ height: 100%;
2364
+ object-fit: contain;
2365
+ object-position: center;
2366
+ padding: 6px;
2367
+ box-sizing: border-box;
1925
2368
  }
1926
- .add-page-plugin-btn-primary {
1927
- background: var(--harmony-primary);
1928
- color: #fff;
1929
- border-color: var(--harmony-primary);
2369
+ .add-menu-picker-component-info-icon {
2370
+ display: none;
1930
2371
  }
1931
- .add-page-setup-ok {
1932
- color: var(--harmony-success);
1933
- font-size: 10px;
2372
+ .add-menu-picker-component-card--preview .add-menu-picker-component-title,
2373
+ .add-menu-picker-component-card--info .add-menu-picker-component-title {
2374
+ width: 100%;
2375
+ flex-shrink: 0;
2376
+ white-space: nowrap;
2377
+ overflow: hidden;
2378
+ text-overflow: ellipsis;
2379
+ line-height: 1.35;
2380
+ font-size: 12px;
1934
2381
  }
1935
- .add-page-setup-warn {
1936
- color: var(--harmony-warning);
1937
- font-size: 10px;
2382
+ .add-menu-picker-component-title {
2383
+ font-weight: 500;
2384
+ max-width: 100%;
1938
2385
  }
1939
- .add-page-setup-error {
1940
- color: var(--harmony-danger);
1941
- font-size: 10px;
2386
+ .add-menu-picker-component-card--browse-only {
2387
+ opacity: 0.6;
2388
+ cursor: default;
1942
2389
  }
1943
- .add-page-plugin-contract {
1944
- padding-left: 0;
1945
- font-size: 11px;
1946
- color: var(--harmony-text-muted);
2390
+ .project-settings-dialog {
2391
+ background: var(--harmony-bg-surface);
2392
+ border: 1px solid var(--harmony-border);
2393
+ border-radius: var(--harmony-radius-lg);
2394
+ width: min(520px, 100%);
2395
+ max-height: min(80vh, 640px);
1947
2396
  display: flex;
1948
2397
  flex-direction: column;
1949
- gap: 4px;
1950
- margin-top: 6px;
2398
+ overflow: hidden;
2399
+ box-shadow: var(--harmony-shadow-lg);
1951
2400
  }
1952
- .add-page-plugin-contract-row {
2401
+ .project-settings-header {
1953
2402
  display: flex;
1954
2403
  align-items: center;
1955
- gap: 8px;
1956
- padding: 4px 0;
2404
+ justify-content: space-between;
2405
+ padding: 14px 16px;
1957
2406
  border-bottom: 1px solid var(--harmony-border);
2407
+ background: var(--harmony-bg-subtle);
1958
2408
  }
1959
- .add-page-plugin-contract-row:last-child {
1960
- border-bottom: none;
1961
- }
1962
- .add-page-plugin-contract-name {
1963
- flex: 1;
1964
- color: var(--harmony-text-secondary);
1965
- font-size: 11px;
2409
+ .project-settings-title {
2410
+ font-size: 14px;
2411
+ font-weight: 600;
2412
+ color: var(--harmony-text);
1966
2413
  }
1967
- .add-page-plugin-contract-added {
1968
- font-size: 10px;
1969
- color: var(--harmony-success);
2414
+ .project-settings-close {
2415
+ background: none;
2416
+ border: none;
2417
+ color: var(--harmony-text-muted);
2418
+ font-size: 20px;
2419
+ cursor: pointer;
2420
+ line-height: 1;
1970
2421
  }
1971
- .add-page-plugin-chips {
2422
+ .project-settings-body {
2423
+ padding: 14px 16px;
2424
+ overflow: auto;
1972
2425
  display: flex;
1973
- flex-wrap: wrap;
1974
- gap: 6px;
1975
- margin-top: 4px;
2426
+ flex-direction: column;
2427
+ gap: 12px;
1976
2428
  }
1977
- .add-page-plugin-chip {
1978
- background: var(--harmony-bg-subtle);
2429
+ .add-page-slideover {
2430
+ width: min(920px, 100%);
2431
+ max-height: min(88vh, 860px);
2432
+ height: auto;
2433
+ background: var(--harmony-bg-surface);
1979
2434
  border: 1px solid var(--harmony-border);
1980
- border-radius: var(--harmony-radius-sm);
1981
- padding: 2px 6px;
1982
- font-size: 10px;
1983
- color: var(--harmony-text-secondary);
2435
+ border-radius: var(--harmony-radius-lg);
2436
+ display: flex;
2437
+ flex-direction: column;
2438
+ box-shadow:
2439
+ 0 24px 80px rgba(22, 45, 61, 0.16),
2440
+ 0 8px 24px rgba(22, 45, 61, 0.08);
2441
+ position: relative;
2442
+ overflow: hidden;
2443
+ }
2444
+ .add-page-header {
1984
2445
  display: flex;
1985
2446
  align-items: center;
1986
- gap: 4px;
2447
+ gap: 12px;
2448
+ padding: 20px 28px;
2449
+ border-bottom: 1px solid var(--harmony-border);
2450
+ flex-shrink: 0;
2451
+ background: var(--harmony-bg-surface);
1987
2452
  }
1988
- .add-page-plugin-chip-remove {
2453
+ .add-page-title {
2454
+ font-size: 20px;
2455
+ font-weight: 700;
2456
+ color: var(--harmony-text);
2457
+ flex: 1;
2458
+ letter-spacing: -0.02em;
2459
+ }
2460
+ .add-page-close {
1989
2461
  background: none;
1990
2462
  border: none;
1991
2463
  color: var(--harmony-text-muted);
2464
+ font-size: 22px;
1992
2465
  cursor: pointer;
1993
- padding: 0 2px;
2466
+ line-height: 1;
2467
+ padding: 4px;
2468
+ border-radius: var(--harmony-radius-sm);
1994
2469
  }
1995
- .add-page-plugins-warn {
1996
- font-size: 11px;
1997
- color: var(--harmony-warning);
1998
- margin-top: 4px;
2470
+ .add-page-close:hover {
2471
+ color: var(--harmony-text);
2472
+ background: var(--harmony-bg-hover);
1999
2473
  }
2000
- .add-page-install-live {
2474
+ .add-page-body {
2475
+ flex: 1;
2476
+ overflow: auto;
2477
+ padding: 24px 28px;
2478
+ display: flex;
2479
+ flex-direction: column;
2480
+ gap: 20px;
2481
+ min-height: 0;
2482
+ }
2483
+ .add-page-section-label {
2001
2484
  font-size: 11px;
2485
+ font-weight: 600;
2002
2486
  color: var(--harmony-text-muted);
2487
+ text-transform: uppercase;
2488
+ letter-spacing: 0.4px;
2489
+ margin-bottom: 6px;
2003
2490
  }
2004
- .add-page-local-plugin-form {
2491
+ .add-page-tab-editor-actions {
2005
2492
  display: flex;
2006
- flex-direction: column;
2007
- gap: 6px;
2493
+ justify-content: flex-end;
2494
+ flex-shrink: 0;
2008
2495
  margin-top: 8px;
2009
- padding-top: 8px;
2010
- border-top: 1px solid var(--harmony-border);
2011
2496
  }
2012
- .add-page-local-plugin-form input {
2013
- background: var(--harmony-bg-surface);
2014
- color: var(--harmony-text);
2015
- border: 1px solid var(--harmony-border);
2016
- border-radius: var(--harmony-radius-sm);
2017
- padding: 4px 6px;
2018
- font-size: 11px;
2497
+ .add-page-btn--compact {
2498
+ flex: 0 0 auto;
2499
+ padding: 6px 14px;
2500
+ font-size: 12px;
2501
+ min-width: 0;
2019
2502
  }
2020
- .add-page-plugin-picker {
2021
- width: 100%;
2022
- background: var(--harmony-bg-surface);
2023
- color: var(--harmony-text);
2503
+ .add-page-references-row {
2504
+ display: flex;
2505
+ align-items: center;
2506
+ gap: 8px;
2507
+ }
2508
+ .add-page-references-row .add-page-dropzone {
2509
+ flex: 1;
2510
+ min-width: 0;
2511
+ margin: 0;
2512
+ }
2513
+ .add-page-references-row .add-page-btn--compact {
2514
+ flex-shrink: 0;
2515
+ white-space: nowrap;
2516
+ }
2517
+ .add-page-suggested-route {
2518
+ display: flex;
2519
+ flex-wrap: wrap;
2520
+ align-items: center;
2521
+ gap: 8px;
2522
+ background: var(--harmony-bg-subtle);
2024
2523
  border: 1px solid var(--harmony-border);
2025
2524
  border-radius: var(--harmony-radius-sm);
2525
+ padding: 8px 10px;
2026
2526
  font-size: 12px;
2027
- padding: 6px 8px;
2028
- margin-top: 6px;
2029
- }
2527
+ color: var(--harmony-text-secondary);
2528
+ margin-bottom: 8px;
2529
+ }
2530
+ .add-page-suggested-route code {
2531
+ font-family: var(--harmony-mono);
2532
+ color: var(--harmony-primary);
2533
+ }
2534
+ .add-page-brief-fill-popover {
2535
+ position: absolute;
2536
+ inset: 0;
2537
+ z-index: 10;
2538
+ background: rgba(255, 255, 255, 0.6);
2539
+ backdrop-filter: blur(8px);
2540
+ -webkit-backdrop-filter: blur(8px);
2541
+ display: flex;
2542
+ align-items: center;
2543
+ justify-content: center;
2544
+ padding: 24px;
2545
+ box-sizing: border-box;
2546
+ }
2547
+ .add-page-brief-fill-panel {
2548
+ background: var(--harmony-bg-surface);
2549
+ border: 1px solid var(--harmony-border);
2550
+ border-radius: var(--harmony-radius-md);
2551
+ width: min(420px, 100%);
2552
+ max-height: 90%;
2553
+ overflow: auto;
2554
+ padding: 14px 16px;
2555
+ display: flex;
2556
+ flex-direction: column;
2557
+ gap: 10px;
2558
+ box-shadow: var(--harmony-shadow-lg);
2559
+ }
2560
+ .add-page-brief-fill-header {
2561
+ display: flex;
2562
+ align-items: center;
2563
+ justify-content: space-between;
2564
+ gap: 8px;
2565
+ }
2566
+ .add-page-brief-fill-title {
2567
+ font-size: 13px;
2568
+ font-weight: 600;
2569
+ color: var(--harmony-text);
2570
+ }
2571
+ .add-page-brief-fill-context {
2572
+ width: 100%;
2573
+ min-height: 64px;
2574
+ background: var(--harmony-bg-surface);
2575
+ color: var(--harmony-text);
2576
+ border: 1px solid var(--harmony-border);
2577
+ border-radius: var(--harmony-radius-sm);
2578
+ padding: 8px;
2579
+ font-size: 12px;
2580
+ font-family: var(--harmony-mono);
2581
+ resize: vertical;
2582
+ box-sizing: border-box;
2583
+ }
2584
+ .add-page-brief-fill-dropzone {
2585
+ border: 1px dashed var(--harmony-border-strong);
2586
+ border-radius: var(--harmony-radius-md);
2587
+ padding: 14px;
2588
+ text-align: center;
2589
+ color: var(--harmony-text-muted);
2590
+ font-size: 12px;
2591
+ cursor: pointer;
2592
+ }
2593
+ .add-page-brief-fill-dropzone-disabled {
2594
+ opacity: 0.45;
2595
+ cursor: not-allowed;
2596
+ pointer-events: none;
2597
+ }
2598
+ .add-page-brief-fill-context:disabled {
2599
+ opacity: 0.6;
2600
+ cursor: not-allowed;
2601
+ }
2602
+ .add-page-brief-fill-dropzone:focus {
2603
+ outline: none;
2604
+ border-color: var(--harmony-primary);
2605
+ box-shadow: 0 0 0 3px var(--harmony-primary-soft);
2606
+ }
2607
+ .add-page-brief-fill-thumbs {
2608
+ display: flex;
2609
+ flex-wrap: wrap;
2610
+ gap: 8px;
2611
+ }
2612
+ .add-page-brief-fill-thumb {
2613
+ position: relative;
2614
+ width: 72px;
2615
+ height: 72px;
2616
+ border-radius: var(--harmony-radius-sm);
2617
+ overflow: hidden;
2618
+ border: 1px solid var(--harmony-border);
2619
+ background: var(--harmony-bg-subtle);
2620
+ }
2621
+ .add-page-brief-fill-thumb img {
2622
+ width: 100%;
2623
+ height: 100%;
2624
+ object-fit: cover;
2625
+ display: block;
2626
+ }
2627
+ .add-page-brief-fill-thumb-remove {
2628
+ position: absolute;
2629
+ top: 2px;
2630
+ right: 2px;
2631
+ background: rgba(22, 45, 61, 0.7);
2632
+ color: #fff;
2633
+ border: none;
2634
+ border-radius: 3px;
2635
+ width: 18px;
2636
+ height: 18px;
2637
+ font-size: 12px;
2638
+ line-height: 1;
2639
+ cursor: pointer;
2640
+ padding: 0;
2641
+ }
2642
+ .add-page-brief-fill-actions {
2643
+ display: flex;
2644
+ gap: 8px;
2645
+ justify-content: flex-end;
2646
+ margin-top: 4px;
2647
+ }
2648
+ .add-page-route-row {
2649
+ display: flex;
2650
+ align-items: center;
2651
+ gap: 8px;
2652
+ flex-wrap: wrap;
2653
+ }
2654
+ .add-page-route-input {
2655
+ flex: 1;
2656
+ min-width: 160px;
2657
+ background: var(--harmony-bg-surface);
2658
+ color: var(--harmony-text);
2659
+ border: 1px solid var(--harmony-border);
2660
+ border-radius: var(--harmony-radius-sm);
2661
+ padding: 8px 10px;
2662
+ font-size: 13px;
2663
+ font-family: var(--harmony-mono);
2664
+ box-sizing: border-box;
2665
+ }
2666
+ .add-page-route-input:focus {
2667
+ border-color: var(--harmony-primary);
2668
+ outline: none;
2669
+ box-shadow: 0 0 0 3px var(--harmony-primary-soft);
2670
+ }
2671
+ .add-page-route-input--error {
2672
+ border-color: var(--harmony-danger);
2673
+ }
2674
+ .add-page-route-input--error:focus {
2675
+ border-color: var(--harmony-danger);
2676
+ box-shadow: 0 0 0 3px var(--harmony-danger-soft);
2677
+ }
2678
+ .add-page-route-badge {
2679
+ font-size: 10px;
2680
+ color: var(--harmony-primary);
2681
+ background: var(--harmony-primary-soft);
2682
+ padding: 2px 8px;
2683
+ border-radius: 4px;
2684
+ }
2685
+ .add-page-field-error {
2686
+ font-size: 12px;
2687
+ color: var(--harmony-danger);
2688
+ margin-top: 4px;
2689
+ }
2690
+ .add-page-hint {
2691
+ font-size: 12px;
2692
+ color: var(--harmony-text-muted);
2693
+ margin-top: 4px;
2694
+ }
2695
+ .add-page-textarea {
2696
+ width: 100%;
2697
+ min-height: 120px;
2698
+ background: var(--harmony-bg-surface);
2699
+ color: var(--harmony-text);
2700
+ border: 1px solid var(--harmony-border);
2701
+ border-radius: var(--harmony-radius-sm);
2702
+ padding: 10px;
2703
+ font-size: 12px;
2704
+ font-family: var(--harmony-mono);
2705
+ resize: vertical;
2706
+ box-sizing: border-box;
2707
+ outline: none;
2708
+ }
2709
+ .add-page-textarea:focus {
2710
+ border-color: var(--harmony-primary);
2711
+ box-shadow: 0 0 0 3px var(--harmony-primary-soft);
2712
+ }
2713
+ .add-page-dropzone {
2714
+ border: 1px dashed var(--harmony-border-strong);
2715
+ border-radius: var(--harmony-radius-md);
2716
+ padding: 16px;
2717
+ text-align: center;
2718
+ color: var(--harmony-text-muted);
2719
+ font-size: 12px;
2720
+ }
2721
+ .add-page-chips {
2722
+ display: flex;
2723
+ flex-direction: column;
2724
+ gap: 6px;
2725
+ margin-top: 8px;
2726
+ }
2727
+ .add-page-chip {
2728
+ display: flex;
2729
+ align-items: center;
2730
+ gap: 8px;
2731
+ background: var(--harmony-bg-subtle);
2732
+ border: 1px solid var(--harmony-border);
2733
+ border-radius: var(--harmony-radius-sm);
2734
+ padding: 6px 8px;
2735
+ font-size: 11px;
2736
+ }
2737
+ .add-page-chip-name {
2738
+ flex: 1;
2739
+ min-width: 0;
2740
+ overflow: hidden;
2741
+ text-overflow: ellipsis;
2742
+ white-space: nowrap;
2743
+ color: var(--harmony-text-secondary);
2744
+ }
2745
+ .add-page-chip-path {
2746
+ font-size: 10px;
2747
+ color: var(--harmony-text-muted);
2748
+ font-family: var(--harmony-mono);
2749
+ }
2750
+ .add-page-chip select {
2751
+ background: var(--harmony-bg-surface);
2752
+ color: var(--harmony-text);
2753
+ border: 1px solid var(--harmony-border);
2754
+ border-radius: 4px;
2755
+ font-size: 11px;
2756
+ padding: 2px 4px;
2757
+ }
2758
+ .add-page-chip-remove {
2759
+ background: none;
2760
+ border: none;
2761
+ color: var(--harmony-text-muted);
2762
+ cursor: pointer;
2763
+ font-size: 14px;
2764
+ padding: 0 4px;
2765
+ }
2766
+ .add-page-chip-remove:hover {
2767
+ color: var(--harmony-danger);
2768
+ }
2769
+ .add-page-plugins {
2770
+ border: 1px solid var(--harmony-border);
2771
+ border-radius: var(--harmony-radius-md);
2772
+ padding: 10px;
2773
+ margin-top: 8px;
2774
+ display: flex;
2775
+ flex-direction: column;
2776
+ gap: 12px;
2777
+ max-height: 320px;
2778
+ overflow: auto;
2779
+ }
2780
+ .add-menu-panel.add-page-plugins,
2781
+ .annotation-add-menu-panel.add-menu-panel {
2782
+ max-height: min(320px, 42vh);
2783
+ overflow: hidden;
2784
+ gap: 8px;
2785
+ min-height: 0;
2786
+ display: flex;
2787
+ flex-direction: column;
2788
+ }
2789
+ .add-menu-panel .add-page-plugins-zone-title {
2790
+ flex-shrink: 0;
2791
+ }
2792
+ .add-menu-panel .add-menu-panel-attached {
2793
+ flex: 0 1 auto;
2794
+ min-height: 0;
2795
+ max-height: 120px;
2796
+ overflow-y: auto;
2797
+ overflow-x: hidden;
2798
+ -webkit-overflow-scrolling: touch;
2799
+ }
2800
+ .add-menu-panel .add-page-plugin-chips {
2801
+ margin-top: 0;
2802
+ }
2803
+ .annotation-add-menu-panel .add-page-plugin-chips,
2804
+ .add-menu-panel .add-page-plugin-chips {
2805
+ align-items: stretch;
2806
+ }
2807
+ .annotation-add-menu-panel .add-page-plugin-chip,
2808
+ .add-menu-panel .add-page-plugin-chip {
2809
+ width: 100%;
2810
+ max-width: 100%;
2811
+ box-sizing: border-box;
2812
+ }
2813
+ .add-menu-panel .add-page-btn,
2814
+ .add-menu-panel .add-page-manage-link,
2815
+ .add-menu-panel .add-page-hint,
2816
+ .add-menu-panel .add-page-field-error,
2817
+ .add-menu-panel .add-menu-route-params,
2818
+ .add-menu-panel .add-page-suggested-route,
2819
+ .add-menu-panel .add-menu-route-confirm {
2820
+ flex-shrink: 0;
2821
+ }
2822
+ .add-menu-panel .add-menu-popover {
2823
+ flex-shrink: 0;
2824
+ min-height: 180px;
2825
+ max-height: min(240px, 36vh);
2826
+ margin-top: 4px;
2827
+ }
2828
+ .add-menu-panel .add-menu-nav {
2829
+ min-height: 140px;
2830
+ }
2831
+ .add-page-plugins-zone-title {
2832
+ font-size: 11px;
2833
+ font-weight: 600;
2834
+ color: var(--harmony-text-secondary);
2835
+ text-transform: uppercase;
2836
+ letter-spacing: 0.04em;
2837
+ margin-bottom: 4px;
2838
+ }
2839
+ .add-page-plugin-row {
2840
+ display: flex;
2841
+ align-items: center;
2842
+ gap: 8px;
2843
+ padding: 4px 0;
2844
+ font-size: 11px;
2845
+ border-bottom: 1px solid var(--harmony-border);
2846
+ }
2847
+ .add-page-plugin-row:last-child {
2848
+ border-bottom: none;
2849
+ }
2850
+ .add-page-plugin-label {
2851
+ flex: 1;
2852
+ color: var(--harmony-text-secondary);
2853
+ }
2854
+ .add-page-plugin-btn {
2855
+ background: var(--harmony-bg-subtle);
2856
+ color: var(--harmony-text-secondary);
2857
+ border: 1px solid var(--harmony-border);
2858
+ border-radius: var(--harmony-radius-sm);
2859
+ padding: 2px 8px;
2860
+ font-size: 10px;
2861
+ cursor: pointer;
2862
+ }
2863
+ .add-page-plugin-btn:hover {
2864
+ background: var(--harmony-bg-hover);
2865
+ color: var(--harmony-text);
2866
+ }
2867
+ .add-page-plugin-btn:disabled {
2868
+ opacity: 0.45;
2869
+ cursor: not-allowed;
2870
+ }
2871
+ .add-page-plugin-btn-primary {
2872
+ background: var(--harmony-primary);
2873
+ color: #fff;
2874
+ border-color: var(--harmony-primary);
2875
+ }
2876
+ .add-page-setup-ok {
2877
+ color: var(--harmony-success);
2878
+ font-size: 10px;
2879
+ }
2880
+ .add-page-setup-warn {
2881
+ color: var(--harmony-warning);
2882
+ font-size: 10px;
2883
+ }
2884
+ .add-page-setup-error {
2885
+ color: var(--harmony-danger);
2886
+ font-size: 10px;
2887
+ }
2888
+ .add-page-plugin-contract {
2889
+ padding-left: 0;
2890
+ font-size: 11px;
2891
+ color: var(--harmony-text-muted);
2892
+ display: flex;
2893
+ flex-direction: column;
2894
+ gap: 4px;
2895
+ margin-top: 6px;
2896
+ }
2897
+ .add-page-plugin-contract-row {
2898
+ display: flex;
2899
+ align-items: center;
2900
+ gap: 8px;
2901
+ padding: 4px 0;
2902
+ border-bottom: 1px solid var(--harmony-border);
2903
+ }
2904
+ .add-page-plugin-contract-row:last-child {
2905
+ border-bottom: none;
2906
+ }
2907
+ .add-page-plugin-contract-name {
2908
+ flex: 1;
2909
+ color: var(--harmony-text-secondary);
2910
+ font-size: 11px;
2911
+ }
2912
+ .add-page-plugin-contract-added {
2913
+ font-size: 10px;
2914
+ color: var(--harmony-success);
2915
+ }
2916
+ .add-page-plugin-chips {
2917
+ display: flex;
2918
+ flex-wrap: wrap;
2919
+ gap: 6px;
2920
+ margin-top: 4px;
2921
+ }
2922
+ .add-page-plugin-chip {
2923
+ background: var(--harmony-bg-subtle);
2924
+ border: 1px solid var(--harmony-border);
2925
+ border-radius: var(--harmony-radius-sm);
2926
+ padding: 2px 6px;
2927
+ font-size: 10px;
2928
+ color: var(--harmony-text-secondary);
2929
+ display: inline-flex;
2930
+ align-items: center;
2931
+ gap: 4px;
2932
+ max-width: 100%;
2933
+ min-width: 0;
2934
+ }
2935
+ .add-page-plugin-chip-text {
2936
+ flex: 1 1 auto;
2937
+ min-width: 0;
2938
+ overflow: hidden;
2939
+ text-overflow: ellipsis;
2940
+ white-space: nowrap;
2941
+ }
2942
+ .add-page-plugin-chip-sub {
2943
+ color: var(--harmony-text-muted);
2944
+ margin-left: 4px;
2945
+ }
2946
+ .add-page-plugin-chip-remove,
2947
+ .add-page-plugin-chip-at {
2948
+ flex-shrink: 0;
2949
+ }
2950
+ .add-page-plugin-chip-remove {
2951
+ background: none;
2952
+ border: none;
2953
+ color: var(--harmony-text-muted);
2954
+ cursor: pointer;
2955
+ padding: 0 2px;
2956
+ }
2957
+ .add-page-plugins-warn {
2958
+ font-size: 11px;
2959
+ color: var(--harmony-warning);
2960
+ margin-top: 4px;
2961
+ }
2962
+ .add-page-install-live {
2963
+ font-size: 11px;
2964
+ color: var(--harmony-text-muted);
2965
+ }
2966
+ .add-page-local-plugin-form {
2967
+ display: flex;
2968
+ flex-direction: column;
2969
+ gap: 6px;
2970
+ margin-top: 8px;
2971
+ padding-top: 8px;
2972
+ border-top: 1px solid var(--harmony-border);
2973
+ }
2974
+ .add-page-local-plugin-form input {
2975
+ background: var(--harmony-bg-surface);
2976
+ color: var(--harmony-text);
2977
+ border: 1px solid var(--harmony-border);
2978
+ border-radius: var(--harmony-radius-sm);
2979
+ padding: 4px 6px;
2980
+ font-size: 11px;
2981
+ }
2982
+ .add-page-plugin-picker {
2983
+ width: 100%;
2984
+ background: var(--harmony-bg-surface);
2985
+ color: var(--harmony-text);
2986
+ border: 1px solid var(--harmony-border);
2987
+ border-radius: var(--harmony-radius-sm);
2988
+ font-size: 12px;
2989
+ padding: 6px 8px;
2990
+ margin-top: 6px;
2991
+ }
2030
2992
  .add-page-manage-link {
2031
2993
  font-size: 11px;
2032
2994
  color: var(--harmony-primary);
@@ -2034,226 +2996,942 @@ body {
2034
2996
  margin-top: 6px;
2035
2997
  background: none;
2036
2998
  border: none;
2037
- padding: 0;
2999
+ padding: 0;
3000
+ text-align: left;
3001
+ }
3002
+ .annotation-binding {
3003
+ margin-top: 6px;
3004
+ border-top: 1px solid var(--harmony-border);
3005
+ padding-top: 6px;
3006
+ }
3007
+ .annotation-add-menu {
3008
+ margin-top: 6px;
3009
+ border-top: 1px solid var(--harmony-border);
3010
+ padding-top: 6px;
3011
+ }
3012
+ .annotation-add-menu-toggle {
3013
+ background: none;
3014
+ border: none;
3015
+ color: var(--harmony-primary);
3016
+ font-size: 11px;
3017
+ cursor: pointer;
3018
+ padding: 0;
3019
+ text-align: left;
3020
+ }
3021
+ .annotation-add-menu-panel {
3022
+ display: flex;
3023
+ flex-direction: column;
3024
+ gap: 6px;
3025
+ margin-top: 6px;
3026
+ font-size: 11px;
3027
+ color: var(--harmony-text-secondary);
3028
+ }
3029
+ .change-request-add-menu {
3030
+ margin-top: 8px;
3031
+ padding: 10px 12px;
3032
+ border: 1px solid var(--harmony-border);
3033
+ border-radius: var(--harmony-radius-md);
3034
+ background: var(--harmony-bg-subtle);
3035
+ }
3036
+ .add-menu-route-params {
3037
+ display: flex;
3038
+ flex-wrap: wrap;
3039
+ align-items: center;
3040
+ gap: 6px;
3041
+ margin-top: 4px;
3042
+ }
3043
+ .add-menu-popover {
3044
+ border: 1px solid var(--harmony-border);
3045
+ border-radius: var(--harmony-radius-sm);
3046
+ padding: 8px;
3047
+ background: var(--harmony-bg-subtle);
3048
+ margin-top: 6px;
3049
+ display: flex;
3050
+ flex-direction: column;
3051
+ gap: 6px;
3052
+ min-height: 0;
3053
+ max-width: 100%;
3054
+ max-height: min(320px, 50vh);
3055
+ overflow: hidden;
3056
+ }
3057
+ .add-menu-popover-header {
3058
+ display: flex;
3059
+ justify-content: space-between;
3060
+ align-items: center;
3061
+ font-size: 11px;
3062
+ font-weight: 600;
3063
+ color: var(--harmony-text-secondary);
3064
+ border-bottom: 1px solid var(--harmony-border);
3065
+ padding-bottom: 4px;
3066
+ margin-bottom: 4px;
3067
+ flex-shrink: 0;
3068
+ }
3069
+ .add-menu-popover-header button {
3070
+ background: none;
3071
+ border: none;
3072
+ color: var(--harmony-text-muted);
3073
+ font-size: 14px;
3074
+ cursor: pointer;
3075
+ padding: 0 4px;
3076
+ }
3077
+ .add-menu-popover-header button:hover {
3078
+ color: var(--harmony-text);
3079
+ }
3080
+ .add-menu-nav {
3081
+ display: flex;
3082
+ flex-direction: column;
3083
+ gap: 4px;
3084
+ flex: 1;
3085
+ min-height: 0;
3086
+ overflow-y: auto;
3087
+ overflow-x: hidden;
3088
+ padding-right: 2px;
3089
+ -webkit-overflow-scrolling: touch;
3090
+ }
3091
+ .add-menu-nav-row {
3092
+ display: contents;
3093
+ }
3094
+ .add-menu-nav-btn {
3095
+ background: var(--harmony-bg-surface);
3096
+ color: var(--harmony-text-secondary);
3097
+ border: 1px solid var(--harmony-border);
3098
+ border-radius: var(--harmony-radius-sm);
3099
+ padding: 4px 8px;
3100
+ font-size: 11px;
3101
+ cursor: pointer;
3102
+ text-align: left;
3103
+ }
3104
+ .add-menu-nav-btn:hover {
3105
+ background: var(--harmony-bg-hover);
3106
+ color: var(--harmony-text);
3107
+ border-color: var(--harmony-primary);
3108
+ }
3109
+ .add-menu-item-btn {
3110
+ background: var(--harmony-primary);
3111
+ color: #fff;
3112
+ border: none;
3113
+ border-radius: var(--harmony-radius-sm);
3114
+ padding: 4px 8px;
3115
+ font-size: 11px;
3116
+ cursor: pointer;
2038
3117
  text-align: left;
2039
3118
  }
2040
- .annotation-binding {
2041
- margin-top: 6px;
2042
- border-top: 1px solid var(--harmony-border);
2043
- padding-top: 6px;
3119
+ .add-menu-item-btn:hover {
3120
+ background: var(--harmony-primary-hover);
3121
+ }
3122
+ .annotation-binding-preview {
3123
+ font-size: 10px;
3124
+ color: var(--harmony-success);
3125
+ margin: 0;
3126
+ }
3127
+ .annotation-binding-panel label {
3128
+ display: flex;
3129
+ flex-direction: column;
3130
+ gap: 2px;
3131
+ }
3132
+ .annotation-binding-panel select {
3133
+ background: var(--harmony-bg-surface);
3134
+ color: var(--harmony-text);
3135
+ border: 1px solid var(--harmony-border);
3136
+ border-radius: 4px;
3137
+ font-size: 11px;
3138
+ }
3139
+ .annotation-binding-scope-row {
3140
+ display: flex;
3141
+ gap: 10px;
3142
+ flex-wrap: wrap;
3143
+ }
3144
+ .annotation-binding-install {
3145
+ background: var(--harmony-primary);
3146
+ color: #fff;
3147
+ border: none;
3148
+ border-radius: var(--harmony-radius-sm);
3149
+ padding: 4px 8px;
3150
+ font-size: 10px;
3151
+ cursor: pointer;
3152
+ align-self: flex-start;
3153
+ }
3154
+ .add-page-footer {
3155
+ display: flex;
3156
+ gap: 12px;
3157
+ justify-content: flex-end;
3158
+ padding: 16px 28px 20px;
3159
+ border-top: 1px solid var(--harmony-border);
3160
+ flex-shrink: 0;
3161
+ background: var(--harmony-bg-surface);
3162
+ }
3163
+ .add-page-footer .add-page-btn {
3164
+ flex: 0 0 auto;
3165
+ min-width: 120px;
3166
+ }
3167
+ .add-page-btn {
3168
+ padding: 10px 20px;
3169
+ border-radius: var(--harmony-radius-pill);
3170
+ font-size: 13px;
3171
+ font-weight: 600;
3172
+ cursor: pointer;
3173
+ border: 1px solid var(--harmony-border);
3174
+ }
3175
+ .add-page-btn-cancel {
3176
+ background: var(--harmony-bg-surface);
3177
+ color: var(--harmony-text-secondary);
3178
+ }
3179
+ .add-page-btn-primary {
3180
+ background: var(--harmony-primary);
3181
+ color: #fff;
3182
+ border-color: var(--harmony-primary);
3183
+ }
3184
+ .add-page-btn-primary:disabled {
3185
+ opacity: 0.45;
3186
+ cursor: not-allowed;
3187
+ }
3188
+ .add-page-btn:disabled {
3189
+ opacity: 0.45;
3190
+ cursor: not-allowed;
3191
+ }
3192
+ .add-page-hidden-file {
3193
+ display: none;
3194
+ }
3195
+
3196
+ /* Legacy class aliases (kept for compatibility) */
3197
+ .main-panel {
3198
+ flex: 1;
3199
+ display: flex;
3200
+ flex-direction: column;
3201
+ min-height: 0;
3202
+ overflow: hidden;
3203
+ }
3204
+ .main-top-bar {
3205
+ display: none;
3206
+ }
3207
+ .preview-stack {
3208
+ display: contents;
3209
+ }
3210
+ .preview-url-row {
3211
+ display: none;
3212
+ }
3213
+ .reset-btn {
3214
+ background: var(--harmony-bg-surface);
3215
+ border: 1px solid var(--harmony-border);
3216
+ color: var(--harmony-text-secondary);
3217
+ cursor: pointer;
3218
+ font-size: 14px;
3219
+ padding: 8px 12px;
3220
+ border-radius: var(--harmony-radius-pill);
3221
+ line-height: 1;
3222
+ }
3223
+ .reset-btn:hover {
3224
+ color: var(--harmony-text);
3225
+ border-color: var(--harmony-border-strong);
3226
+ }
3227
+ .stage-place-toolbar {
3228
+ display: flex;
3229
+ align-items: center;
3230
+ gap: 10px;
3231
+ margin-bottom: 8px;
3232
+ padding: 6px 12px;
3233
+ background: var(--harmony-bg-surface);
3234
+ border: 1px solid var(--harmony-primary);
3235
+ border-radius: var(--harmony-radius-pill);
3236
+ font-size: 12px;
3237
+ color: var(--harmony-text);
3238
+ }
3239
+ .stage-place-toolbar-cancel {
3240
+ background: transparent;
3241
+ border: 1px solid var(--harmony-border);
3242
+ border-radius: 4px;
3243
+ padding: 2px 8px;
3244
+ font-size: 11px;
3245
+ cursor: pointer;
3246
+ }
3247
+
3248
+ /* ── Page info panel (DL #26) ── */
3249
+ .page-info-panel {
3250
+ position: fixed;
3251
+ z-index: 100;
3252
+ width: min(480px, calc(100vw - 48px));
3253
+ height: min(640px, calc(100vh - 100px));
3254
+ max-height: min(640px, calc(100vh - 100px));
3255
+ display: flex;
3256
+ flex-direction: column;
3257
+ background: var(--harmony-bg-surface);
3258
+ border: 1px solid var(--harmony-border);
3259
+ border-radius: var(--harmony-radius-lg);
3260
+ box-shadow: var(--harmony-shadow-lg);
3261
+ pointer-events: auto;
3262
+ overflow: hidden;
3263
+ font-family: var(--harmony-font);
3264
+ }
3265
+ .page-info-panel-header {
3266
+ display: flex;
3267
+ align-items: flex-start;
3268
+ justify-content: space-between;
3269
+ gap: 12px;
3270
+ padding: 14px 16px 12px;
3271
+ border-bottom: 1px solid var(--harmony-border);
3272
+ flex-shrink: 0;
3273
+ cursor: grab;
3274
+ user-select: none;
3275
+ background: var(--harmony-bg-surface);
3276
+ }
3277
+ .page-info-panel-header:active {
3278
+ cursor: grabbing;
3279
+ }
3280
+ .page-info-panel-header-text {
3281
+ display: flex;
3282
+ flex-direction: column;
3283
+ gap: 4px;
3284
+ min-width: 0;
3285
+ }
3286
+ .page-info-panel-title {
3287
+ font-size: 18px;
3288
+ font-weight: 700;
3289
+ color: var(--harmony-text);
3290
+ letter-spacing: -0.02em;
3291
+ line-height: 1.2;
3292
+ }
3293
+ .page-info-panel-subtitle {
3294
+ font-size: 12px;
3295
+ line-height: 1.35;
3296
+ color: var(--harmony-text-secondary);
3297
+ }
3298
+ .page-info-panel-body {
3299
+ flex: 1;
3300
+ min-height: 0;
3301
+ overflow: auto;
3302
+ padding: 14px 16px 16px;
3303
+ display: flex;
3304
+ flex-direction: column;
3305
+ gap: 14px;
3306
+ }
3307
+ .page-info-section {
3308
+ display: flex;
3309
+ flex-direction: column;
3310
+ gap: 8px;
2044
3311
  }
2045
- .annotation-add-menu {
2046
- margin-top: 6px;
2047
- border-top: 1px solid var(--harmony-border);
2048
- padding-top: 6px;
3312
+ .page-info-route-card {
3313
+ padding: 12px;
3314
+ border-radius: var(--harmony-radius-md);
3315
+ background: var(--harmony-bg-subtle);
3316
+ border: 1px solid var(--harmony-border);
2049
3317
  }
2050
- .annotation-add-menu-toggle {
2051
- background: none;
3318
+ .page-info-route-highlight {
3319
+ outline: 2px solid var(--harmony-primary);
3320
+ outline-offset: 2px;
3321
+ }
3322
+ .page-info-route-header {
3323
+ display: flex;
3324
+ align-items: center;
3325
+ justify-content: space-between;
3326
+ gap: 8px;
3327
+ }
3328
+ .page-info-route-actions {
3329
+ display: inline-flex;
3330
+ align-items: center;
3331
+ gap: 4px;
3332
+ flex-shrink: 0;
3333
+ }
3334
+ .page-info-route-icon-btn {
3335
+ display: inline-flex;
3336
+ align-items: center;
3337
+ justify-content: center;
3338
+ width: 18px;
3339
+ height: 28px;
3340
+ padding: 0;
2052
3341
  border: none;
2053
- color: var(--harmony-primary);
2054
- font-size: 11px;
3342
+ border-radius: var(--harmony-radius-sm);
3343
+ background: transparent;
3344
+ color: var(--harmony-text-muted);
2055
3345
  cursor: pointer;
2056
- padding: 0;
2057
- text-align: left;
3346
+ flex-shrink: 0;
3347
+ overflow: visible;
2058
3348
  }
2059
- .annotation-add-menu-panel {
3349
+ .page-info-route-icon-btn:hover {
3350
+ color: var(--harmony-text);
3351
+ background: var(--harmony-bg-hover);
3352
+ }
3353
+ .page-info-route-icon {
3354
+ display: block;
3355
+ width: 22px;
3356
+ height: 22px;
3357
+ overflow: visible;
3358
+ }
3359
+ .page-info-route-field {
2060
3360
  display: flex;
2061
- flex-direction: column;
3361
+ align-items: stretch;
3362
+ gap: 8px;
3363
+ }
3364
+ .page-info-route-field--error .page-info-route-value,
3365
+ .page-info-route-field--error .page-info-route-input {
3366
+ border-color: var(--harmony-danger);
3367
+ box-shadow: 0 0 0 1px rgba(220, 38, 38, 0.15);
3368
+ }
3369
+ .page-info-route-problem {
3370
+ display: inline-flex;
3371
+ align-items: center;
3372
+ justify-content: center;
3373
+ flex-shrink: 0;
3374
+ align-self: center;
3375
+ width: 28px;
3376
+ height: 28px;
3377
+ color: var(--harmony-danger);
3378
+ cursor: help;
3379
+ }
3380
+ .page-info-route-problem-icon {
3381
+ display: block;
3382
+ width: 20px;
3383
+ height: 20px;
3384
+ }
3385
+ .page-info-route-missing-params {
3386
+ display: flex;
3387
+ flex-wrap: wrap;
2062
3388
  gap: 6px;
2063
- margin-top: 6px;
2064
- font-size: 11px;
3389
+ margin-top: 8px;
3390
+ }
3391
+ .page-info-param-chip--add {
3392
+ cursor: pointer;
3393
+ border: 1px dashed var(--harmony-primary);
3394
+ background: var(--harmony-bg-surface);
3395
+ }
3396
+ .page-info-param-chip--add:hover {
3397
+ background: var(--harmony-primary-soft);
3398
+ }
3399
+ .page-info-route-change-confirm-overlay {
3400
+ position: fixed;
3401
+ inset: 0;
3402
+ z-index: 200;
3403
+ display: flex;
3404
+ align-items: center;
3405
+ justify-content: center;
3406
+ padding: 24px;
3407
+ background: rgba(15, 23, 42, 0.45);
3408
+ pointer-events: auto;
3409
+ }
3410
+ .page-info-route-change-confirm-dialog {
3411
+ width: min(480px, 100%);
3412
+ padding: 20px;
3413
+ border-radius: var(--harmony-radius-lg);
3414
+ background: var(--harmony-bg-surface);
3415
+ border: 1px solid var(--harmony-border);
3416
+ box-shadow: var(--harmony-shadow-lg);
3417
+ }
3418
+ .page-info-route-change-confirm-title {
3419
+ margin: 0 0 8px;
3420
+ font-size: 18px;
3421
+ font-weight: 700;
3422
+ color: var(--harmony-text);
3423
+ }
3424
+ .page-info-route-change-confirm-body {
3425
+ margin: 0 0 16px;
3426
+ font-size: 13px;
3427
+ line-height: 1.5;
2065
3428
  color: var(--harmony-text-secondary);
2066
3429
  }
2067
- .change-request-add-menu {
2068
- margin-top: 8px;
3430
+ .page-info-route-change-confirm-routes {
3431
+ margin: 0 0 16px;
2069
3432
  padding: 10px 12px;
2070
- border: 1px solid var(--harmony-border);
2071
- border-radius: var(--harmony-radius-md);
3433
+ border-radius: var(--harmony-radius-sm);
2072
3434
  background: var(--harmony-bg-subtle);
3435
+ font-family: var(--harmony-mono);
3436
+ font-size: 12px;
3437
+ line-height: 1.5;
3438
+ color: var(--harmony-text);
3439
+ word-break: break-all;
2073
3440
  }
2074
- .add-menu-route-params {
3441
+ .page-info-route-change-confirm-actions {
3442
+ display: flex;
3443
+ justify-content: flex-end;
3444
+ gap: 8px;
3445
+ }
3446
+ .page-info-route-value {
3447
+ flex: 1;
3448
+ min-width: 0;
3449
+ display: block;
3450
+ font-family: var(--harmony-mono);
3451
+ font-size: 12px;
3452
+ line-height: 1.4;
3453
+ color: var(--harmony-text);
3454
+ background: var(--harmony-bg-surface);
3455
+ border: 1px solid var(--harmony-border);
3456
+ border-radius: var(--harmony-radius-sm);
3457
+ padding: 8px 10px;
3458
+ word-break: break-all;
3459
+ }
3460
+ .page-info-route-input {
3461
+ width: 100%;
3462
+ box-sizing: border-box;
3463
+ font-family: var(--harmony-mono);
3464
+ font-size: 12px;
3465
+ padding: 8px 10px;
3466
+ border: 1px solid var(--harmony-border);
3467
+ border-radius: var(--harmony-radius-sm);
3468
+ background: var(--harmony-bg-surface);
3469
+ color: var(--harmony-text);
3470
+ }
3471
+ .page-info-route-input:focus {
3472
+ outline: none;
3473
+ border-color: var(--harmony-primary);
3474
+ box-shadow: 0 0 0 3px var(--harmony-primary-soft);
3475
+ }
3476
+ .page-info-planned-route {
3477
+ margin-top: 4px;
3478
+ }
3479
+ .page-info-route-params {
2075
3480
  display: flex;
2076
3481
  flex-wrap: wrap;
2077
3482
  align-items: center;
2078
3483
  gap: 6px;
2079
- margin-top: 4px;
2080
3484
  }
2081
- .add-menu-popover {
2082
- border: 1px solid var(--harmony-border);
2083
- border-radius: var(--harmony-radius-sm);
2084
- padding: 8px;
3485
+ .page-info-param-chip {
3486
+ font-family: var(--harmony-mono);
3487
+ font-size: 11px;
3488
+ padding: 2px 8px;
3489
+ border-radius: var(--harmony-radius-pill);
3490
+ background: var(--harmony-primary-soft);
3491
+ color: var(--harmony-primary);
3492
+ }
3493
+ .page-info-route-confirm {
3494
+ margin-top: 8px;
3495
+ padding-top: 10px;
3496
+ border-top: 1px solid var(--harmony-border);
3497
+ }
3498
+ .page-info-route-confirm-actions {
3499
+ display: flex;
3500
+ justify-content: flex-end;
3501
+ gap: 8px;
3502
+ margin-top: 8px;
3503
+ }
3504
+ .page-info-route-confirm-actions .harmony-btn-primary,
3505
+ .page-info-route-confirm-actions .harmony-btn-secondary {
3506
+ flex: 0 0 auto;
3507
+ min-width: 0;
3508
+ padding: 6px 12px;
3509
+ font-size: 12px;
3510
+ }
3511
+ .page-info-field-error {
3512
+ margin: 0;
3513
+ font-size: 12px;
3514
+ color: var(--harmony-danger);
3515
+ }
3516
+ .page-info-hint {
3517
+ margin: 0;
3518
+ font-size: 12px;
3519
+ line-height: 1.4;
3520
+ color: var(--harmony-text-secondary);
3521
+ }
3522
+ .page-info-hint.page-info-loading {
3523
+ font-style: italic;
3524
+ }
3525
+ .page-info-empty {
3526
+ margin: 0;
3527
+ padding: 12px;
3528
+ font-size: 12px;
3529
+ line-height: 1.45;
3530
+ color: var(--harmony-text-secondary);
3531
+ text-align: center;
3532
+ border: 1px dashed var(--harmony-border);
3533
+ border-radius: var(--harmony-radius-md);
3534
+ background: var(--harmony-bg-subtle);
3535
+ }
3536
+ .page-info-duplicate-warning {
3537
+ font-size: 12px;
3538
+ line-height: 1.4;
3539
+ color: #92400e;
3540
+ background: var(--harmony-warning-soft);
3541
+ border: 1px solid #fcd34d;
3542
+ border-radius: var(--harmony-radius-md);
3543
+ padding: 10px 12px;
3544
+ }
3545
+ .page-info-component-list {
3546
+ display: flex;
3547
+ flex-direction: column;
3548
+ gap: 6px;
3549
+ }
3550
+ .page-info-component-list {
3551
+ display: flex;
3552
+ flex-direction: column;
3553
+ gap: 8px;
3554
+ }
3555
+ .page-info-component-card {
3556
+ width: 100%;
3557
+ cursor: pointer;
3558
+ text-align: left;
3559
+ }
3560
+ .page-info-component-card .add-menu-picker-component-info-icon {
3561
+ display: flex;
3562
+ align-items: center;
3563
+ justify-content: center;
3564
+ width: 28px;
3565
+ height: 28px;
3566
+ flex-shrink: 0;
3567
+ border-radius: 6px;
2085
3568
  background: var(--harmony-bg-subtle);
3569
+ border: 1px solid var(--harmony-border);
3570
+ font-size: 14px;
3571
+ color: var(--harmony-primary);
3572
+ margin-bottom: 2px;
3573
+ }
3574
+ .page-info-component-subtitle {
3575
+ font-size: 11px;
3576
+ color: var(--harmony-text-muted);
3577
+ font-family: var(--harmony-mono);
3578
+ line-height: 1.35;
3579
+ margin-top: 2px;
3580
+ word-break: break-all;
3581
+ }
3582
+ .page-info-component-keyline {
2086
3583
  margin-top: 6px;
3584
+ font-family: var(--harmony-mono);
3585
+ font-size: 10px;
3586
+ font-weight: 600;
3587
+ letter-spacing: 0.02em;
3588
+ text-transform: uppercase;
3589
+ color: var(--harmony-text-secondary);
3590
+ }
3591
+ .page-info-component-card.add-menu-picker-component-card--selected
3592
+ .page-info-component-keyline {
3593
+ color: var(--harmony-primary);
3594
+ }
3595
+ .page-info-inspector-error {
3596
+ margin: 0;
3597
+ font-size: 12px;
3598
+ line-height: 1.4;
3599
+ color: var(--harmony-danger);
3600
+ }
3601
+ .page-info-component-row {
2087
3602
  display: flex;
2088
3603
  flex-direction: column;
3604
+ align-items: stretch;
2089
3605
  gap: 6px;
2090
- min-height: 0;
2091
- max-width: 100%;
2092
- max-height: min(320px, 50vh);
2093
- overflow: hidden;
3606
+ width: 100%;
3607
+ text-align: left;
3608
+ padding: 10px 12px;
3609
+ border: 1px solid var(--harmony-border);
3610
+ border-radius: var(--harmony-radius-md);
3611
+ background: var(--harmony-bg-surface);
3612
+ cursor: pointer;
3613
+ font: inherit;
3614
+ color: var(--harmony-text);
3615
+ transition:
3616
+ border-color 0.15s ease,
3617
+ background 0.15s ease,
3618
+ box-shadow 0.15s ease;
3619
+ }
3620
+ .page-info-component-row:hover {
3621
+ border-color: var(--harmony-border-strong);
3622
+ background: var(--harmony-bg-hover);
3623
+ }
3624
+ .page-info-component-row--selected {
3625
+ border-color: var(--harmony-primary);
3626
+ background: var(--harmony-primary-soft);
3627
+ box-shadow: var(--harmony-shadow-sm);
3628
+ }
3629
+ .page-info-component-main {
3630
+ display: flex;
3631
+ flex-direction: column;
3632
+ gap: 2px;
3633
+ min-width: 0;
3634
+ }
3635
+ .page-info-component-title {
3636
+ font-size: 13px;
3637
+ font-weight: 600;
3638
+ color: var(--harmony-text);
3639
+ line-height: 1.3;
3640
+ }
3641
+ .page-info-component-contract {
3642
+ font-size: 11px;
3643
+ color: var(--harmony-text-muted);
3644
+ font-family: var(--harmony-mono);
3645
+ line-height: 1.3;
3646
+ word-break: break-all;
2094
3647
  }
2095
- .add-menu-popover-header {
3648
+ .page-info-component-meta {
2096
3649
  display: flex;
2097
- justify-content: space-between;
3650
+ flex-wrap: wrap;
2098
3651
  align-items: center;
2099
- font-size: 11px;
3652
+ gap: 6px;
3653
+ }
3654
+ .page-info-component-key {
3655
+ font-family: var(--harmony-mono);
3656
+ font-size: 10px;
2100
3657
  font-weight: 600;
3658
+ letter-spacing: 0.02em;
3659
+ text-transform: uppercase;
2101
3660
  color: var(--harmony-text-secondary);
2102
- border-bottom: 1px solid var(--harmony-border);
2103
- padding-bottom: 4px;
2104
- margin-bottom: 4px;
2105
- flex-shrink: 0;
3661
+ background: var(--harmony-bg-subtle);
3662
+ border: 1px solid var(--harmony-border);
3663
+ border-radius: var(--harmony-radius-pill);
3664
+ padding: 2px 8px;
2106
3665
  }
2107
- .add-menu-popover-header button {
2108
- background: none;
2109
- border: none;
2110
- color: var(--harmony-text-muted);
2111
- font-size: 14px;
2112
- cursor: pointer;
2113
- padding: 0 4px;
3666
+ .page-info-component-row--selected .page-info-component-key {
3667
+ background: rgba(255, 255, 255, 0.7);
2114
3668
  }
2115
- .add-menu-popover-header button:hover {
2116
- color: var(--harmony-text);
3669
+ .page-info-duplicate-badge {
3670
+ font-size: 10px;
3671
+ font-weight: 600;
3672
+ color: #92400e;
3673
+ background: var(--harmony-warning-soft);
3674
+ border: 1px solid #fcd34d;
3675
+ border-radius: var(--harmony-radius-pill);
3676
+ padding: 2px 8px;
2117
3677
  }
2118
- .add-menu-nav {
3678
+ .page-info-main-view {
2119
3679
  display: flex;
2120
3680
  flex-direction: column;
2121
- gap: 4px;
3681
+ gap: 14px;
3682
+ }
3683
+ .page-info-inspector {
3684
+ display: flex;
3685
+ flex-direction: column;
3686
+ gap: 10px;
2122
3687
  flex: 1;
2123
3688
  min-height: 0;
2124
- overflow-y: auto;
2125
- overflow-x: hidden;
2126
- padding-right: 2px;
2127
- -webkit-overflow-scrolling: touch;
3689
+ padding-bottom: 24px;
2128
3690
  }
2129
- .add-menu-nav-row {
2130
- display: contents;
3691
+ .page-info-inspector-contract {
3692
+ margin: 0 0 8px;
3693
+ font-size: 12px;
3694
+ font-weight: 600;
3695
+ color: var(--harmony-text);
3696
+ font-family: var(--harmony-mono);
2131
3697
  }
2132
- .add-menu-nav-btn {
3698
+ .page-info-tag-list {
3699
+ list-style: none;
3700
+ margin: 0 0 12px;
3701
+ padding: 0;
3702
+ display: flex;
3703
+ flex-direction: column;
3704
+ gap: 4px;
3705
+ }
3706
+ .page-info-tag-row {
3707
+ display: grid;
3708
+ grid-template-columns: 1fr auto auto;
3709
+ gap: 6px 8px;
3710
+ align-items: center;
3711
+ padding: 8px 10px;
3712
+ border-radius: var(--harmony-radius-sm);
2133
3713
  background: var(--harmony-bg-surface);
2134
- color: var(--harmony-text-secondary);
2135
3714
  border: 1px solid var(--harmony-border);
2136
- border-radius: var(--harmony-radius-sm);
2137
- padding: 4px 8px;
2138
3715
  font-size: 11px;
2139
- cursor: pointer;
2140
- text-align: left;
2141
3716
  }
2142
- .add-menu-nav-btn:hover {
2143
- background: var(--harmony-bg-hover);
2144
- color: var(--harmony-text);
2145
- border-color: var(--harmony-primary);
3717
+ .page-info-tag-row.page-info-tag--used {
3718
+ border-color: rgba(0, 168, 98, 0.35);
3719
+ background: var(--harmony-success-soft);
2146
3720
  }
2147
- .add-menu-item-btn {
2148
- background: var(--harmony-primary);
2149
- color: #fff;
2150
- border: none;
2151
- border-radius: var(--harmony-radius-sm);
2152
- padding: 4px 8px;
3721
+ .page-info-tag-path {
3722
+ font-family: var(--harmony-mono);
2153
3723
  font-size: 11px;
2154
- cursor: pointer;
2155
- text-align: left;
3724
+ color: var(--harmony-text);
3725
+ word-break: break-word;
2156
3726
  }
2157
- .add-menu-item-btn:hover {
2158
- background: var(--harmony-primary-hover);
3727
+ .page-info-tag-kind-pill {
3728
+ font-size: 9px;
3729
+ font-weight: 700;
3730
+ letter-spacing: 0.04em;
3731
+ text-transform: uppercase;
3732
+ color: var(--harmony-text-muted);
3733
+ background: var(--harmony-bg-subtle);
3734
+ border-radius: var(--harmony-radius-pill);
3735
+ padding: 2px 6px;
3736
+ white-space: nowrap;
2159
3737
  }
2160
- .annotation-binding-preview {
3738
+ .page-info-tag-status {
2161
3739
  font-size: 10px;
3740
+ font-weight: 600;
3741
+ border-radius: var(--harmony-radius-pill);
3742
+ padding: 2px 8px;
3743
+ white-space: nowrap;
3744
+ }
3745
+ .page-info-tag-status--bound {
2162
3746
  color: var(--harmony-success);
3747
+ background: rgba(0, 168, 98, 0.12);
3748
+ }
3749
+ .page-info-tag-status--available {
3750
+ color: var(--harmony-text-muted);
3751
+ background: var(--harmony-bg-subtle);
3752
+ }
3753
+ .page-info-tag-sample {
3754
+ grid-column: 1 / -1;
2163
3755
  margin: 0;
3756
+ font-family: var(--harmony-mono);
3757
+ font-size: 10px;
3758
+ color: var(--harmony-text-secondary);
3759
+ word-break: break-all;
3760
+ background: transparent;
2164
3761
  }
2165
- .annotation-binding-panel label {
2166
- display: flex;
2167
- flex-direction: column;
2168
- gap: 2px;
3762
+
3763
+ /* ── + Add dock panel ── */
3764
+ .add-menu-dock-backdrop {
3765
+ position: fixed;
3766
+ inset: 0;
3767
+ z-index: 94;
3768
+ background: rgba(22, 45, 61, 0.12);
3769
+ pointer-events: auto;
2169
3770
  }
2170
- .annotation-binding-panel select {
3771
+ .add-menu-dock-panel {
3772
+ position: fixed;
3773
+ width: min(624px, calc(100vw - 48px));
3774
+ height: min(680px, calc(100vh - 120px));
3775
+ max-height: min(680px, calc(100vh - 120px));
3776
+ z-index: 95;
2171
3777
  background: var(--harmony-bg-surface);
2172
- color: var(--harmony-text);
2173
3778
  border: 1px solid var(--harmony-border);
2174
- border-radius: 4px;
2175
- font-size: 11px;
2176
- }
2177
- .annotation-binding-scope-row {
3779
+ border-radius: var(--harmony-radius-lg);
3780
+ box-shadow: var(--harmony-shadow-lg);
2178
3781
  display: flex;
2179
- gap: 10px;
2180
- flex-wrap: wrap;
2181
- }
2182
- .annotation-binding-install {
2183
- background: var(--harmony-primary);
2184
- color: #fff;
2185
- border: none;
2186
- border-radius: var(--harmony-radius-sm);
2187
- padding: 4px 8px;
2188
- font-size: 10px;
2189
- cursor: pointer;
2190
- align-self: flex-start;
3782
+ flex-direction: column;
3783
+ overflow: hidden;
3784
+ pointer-events: auto;
2191
3785
  }
2192
- .add-page-footer {
3786
+ .add-menu-dock-header {
2193
3787
  display: flex;
3788
+ align-items: center;
2194
3789
  gap: 8px;
2195
- padding: 12px 16px;
2196
- border-top: 1px solid var(--harmony-border);
3790
+ padding: 12px 14px;
3791
+ border-bottom: 1px solid var(--harmony-border);
2197
3792
  flex-shrink: 0;
2198
- background: var(--harmony-bg-subtle);
3793
+ cursor: grab;
3794
+ user-select: none;
2199
3795
  }
2200
- .add-page-btn {
3796
+ .add-menu-dock-header:active {
3797
+ cursor: grabbing;
3798
+ }
3799
+ .add-menu-dock-title {
2201
3800
  flex: 1;
2202
- padding: 10px;
2203
- border-radius: var(--harmony-radius-pill);
2204
- font-size: 13px;
2205
- font-weight: 600;
2206
- cursor: pointer;
2207
- border: 1px solid var(--harmony-border);
3801
+ font-size: 18px;
3802
+ font-weight: 700;
3803
+ color: var(--harmony-text);
3804
+ letter-spacing: -0.02em;
2208
3805
  }
2209
- .add-page-btn-cancel {
2210
- background: var(--harmony-bg-surface);
3806
+ .add-menu-dock-subhint {
3807
+ margin: 0;
3808
+ padding: 8px 18px 0;
3809
+ font-size: 12px;
3810
+ line-height: 1.35;
2211
3811
  color: var(--harmony-text-secondary);
3812
+ flex-shrink: 0;
2212
3813
  }
2213
- .add-page-btn-primary {
2214
- background: var(--harmony-primary);
2215
- color: #fff;
2216
- border-color: var(--harmony-primary);
2217
- }
2218
- .add-page-btn-primary:disabled {
2219
- opacity: 0.45;
2220
- cursor: not-allowed;
2221
- }
2222
- .add-page-hidden-file {
2223
- display: none;
2224
- }
2225
-
2226
- /* Legacy class aliases (kept for compatibility) */
2227
- .main-panel {
3814
+ .add-menu-dock-body {
2228
3815
  flex: 1;
3816
+ min-height: 0;
3817
+ overflow: hidden;
2229
3818
  display: flex;
2230
3819
  flex-direction: column;
3820
+ padding: 0 0 12px;
3821
+ }
3822
+ .add-menu-dock-body .add-menu-picker-browse {
3823
+ flex: 1;
2231
3824
  min-height: 0;
3825
+ display: flex;
3826
+ flex-direction: column;
2232
3827
  overflow: hidden;
2233
3828
  }
2234
- .main-top-bar {
2235
- display: none;
3829
+ .add-menu-dock-body .add-menu-picker-browse-layout {
3830
+ flex: 1;
3831
+ min-height: 0;
2236
3832
  }
2237
- .preview-stack {
2238
- display: contents;
3833
+ .add-menu-picker-component-card--stage-place {
3834
+ cursor: grab;
2239
3835
  }
2240
- .preview-url-row {
2241
- display: none;
3836
+ .add-menu-picker-component-card--stage-place:active {
3837
+ cursor: grabbing;
2242
3838
  }
2243
- .reset-btn {
3839
+
3840
+ /* ── Stage drop catcher overlay ── */
3841
+ .stage-drop-catcher {
3842
+ position: absolute;
3843
+ inset: 0;
3844
+ z-index: 10;
3845
+ cursor: grabbing;
3846
+ background: rgba(17, 109, 255, 0.08);
3847
+ outline: 2px dashed var(--harmony-primary);
3848
+ outline-offset: -2px;
3849
+ touch-action: none;
3850
+ }
3851
+ .stage-drop-catcher-hint {
3852
+ position: absolute;
3853
+ top: 12px;
3854
+ left: 50%;
3855
+ transform: translateX(-50%);
3856
+ padding: 6px 12px;
3857
+ background: rgba(22, 45, 61, 0.85);
3858
+ color: #fff;
3859
+ border-radius: 8px;
3860
+ font-size: 12px;
3861
+ pointer-events: none;
3862
+ white-space: nowrap;
3863
+ }
3864
+
3865
+ /* ── Stage drop ── */
3866
+ .visual-overlay.stage-drop-target-active {
3867
+ outline: 2px dashed var(--harmony-primary);
3868
+ outline-offset: -2px;
3869
+ }
3870
+ .stage-drop-ghost {
3871
+ position: fixed;
3872
+ z-index: 10000;
3873
+ transform: translate(-7px, -7px);
3874
+ pointer-events: none;
3875
+ display: flex;
3876
+ align-items: flex-start;
3877
+ gap: 8px;
3878
+ }
3879
+ .stage-drop-ghost-marker {
3880
+ flex: 0 0 auto;
3881
+ width: 14px;
3882
+ height: 14px;
3883
+ border-radius: 50%;
3884
+ background: var(--harmony-primary);
3885
+ border: 2px solid #fff;
3886
+ box-shadow: var(--harmony-shadow-sm);
3887
+ }
3888
+ .stage-drop-ghost-hint {
3889
+ max-width: 220px;
3890
+ padding: 6px 10px;
2244
3891
  background: var(--harmony-bg-surface);
2245
- border: 1px solid var(--harmony-border);
2246
- color: var(--harmony-text-secondary);
2247
- cursor: pointer;
2248
- font-size: 14px;
2249
- padding: 8px 12px;
2250
- border-radius: var(--harmony-radius-pill);
2251
- line-height: 1;
3892
+ border: 1px solid var(--harmony-primary);
3893
+ border-radius: 6px;
3894
+ font-size: 12px;
3895
+ line-height: 1.35;
3896
+ color: var(--harmony-text-primary);
3897
+ box-shadow: var(--harmony-shadow-sm);
3898
+ white-space: normal;
2252
3899
  }
2253
- .reset-btn:hover {
2254
- color: var(--harmony-text);
2255
- border-color: var(--harmony-border-strong);
3900
+ .stage-drop-banner {
3901
+ position: absolute;
3902
+ top: 8px;
3903
+ left: 50%;
3904
+ transform: translateX(-50%);
3905
+ z-index: 5;
3906
+ display: flex;
3907
+ align-items: center;
3908
+ gap: 8px;
3909
+ padding: 6px 10px;
3910
+ background: rgba(0, 0, 0, 0.75);
3911
+ color: #fff;
3912
+ border-radius: 8px;
3913
+ font-size: 12px;
2256
3914
  }
2257
- .route-picker-stack {
2258
- display: contents;
3915
+ .stage-drop-banner-cancel {
3916
+ background: transparent;
3917
+ border: 1px solid rgba(255, 255, 255, 0.5);
3918
+ color: #fff;
3919
+ border-radius: 4px;
3920
+ padding: 2px 8px;
3921
+ cursor: pointer;
3922
+ }
3923
+
3924
+ /* ── Toast ── */
3925
+ .aiditor-toast {
3926
+ position: fixed;
3927
+ bottom: 24px;
3928
+ left: 50%;
3929
+ transform: translateX(-50%);
3930
+ z-index: 120;
3931
+ padding: 10px 16px;
3932
+ background: rgba(0, 0, 0, 0.85);
3933
+ color: #fff;
3934
+ border-radius: 8px;
3935
+ font-size: 13px;
3936
+ pointer-events: none;
2259
3937
  }