@jay-framework/aiditor 0.19.7 → 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.
@@ -478,14 +478,17 @@ body {
478
478
  }
479
479
  .harmony-float-rail {
480
480
  position: absolute;
481
- inset: 0;
481
+ top: 16px;
482
+ left: 16px;
482
483
  z-index: 30;
484
+ display: flex;
485
+ flex-direction: column;
486
+ align-items: flex-start;
487
+ gap: 8px;
483
488
  pointer-events: none;
484
489
  }
485
490
  .harmony-add-btn {
486
- position: absolute;
487
- top: 16px;
488
- left: 16px;
491
+ position: static;
489
492
  display: inline-flex;
490
493
  align-items: center;
491
494
  justify-content: center;
@@ -523,6 +526,63 @@ body {
523
526
  inset 0 1px 2px rgba(22, 45, 61, 0.06),
524
527
  0 1px 2px rgba(22, 45, 61, 0.04);
525
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
+ }
526
586
  .harmony-stage-icon-btn {
527
587
  position: absolute;
528
588
  left: 20px;
@@ -1491,9 +1551,41 @@ body {
1491
1551
  flex-direction: column;
1492
1552
  gap: 10px;
1493
1553
  padding: 14px 16px;
1494
- overflow: auto;
1554
+ overflow: hidden;
1495
1555
  box-shadow: var(--harmony-shadow-lg);
1496
1556
  }
1557
+ .video-review-body {
1558
+ display: flex;
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;
1568
+ align-items: center;
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
+ }
1497
1589
  .snapshot-panel {
1498
1590
  width: min(1200px, 96vw);
1499
1591
  overflow: hidden;
@@ -1517,7 +1609,6 @@ body {
1517
1609
  font-size: 12px;
1518
1610
  color: var(--harmony-text-muted);
1519
1611
  }
1520
- .video-review-tools,
1521
1612
  .snapshot-tools {
1522
1613
  display: flex;
1523
1614
  flex-wrap: wrap;
@@ -1615,6 +1706,56 @@ body {
1615
1706
  opacity: 0.45;
1616
1707
  cursor: not-allowed;
1617
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
+ }
1618
1759
  .snapshot-close {
1619
1760
  background: none;
1620
1761
  border: none;
@@ -1772,36 +1913,120 @@ body {
1772
1913
  width: min(720px, 100%);
1773
1914
  max-height: min(85vh, 720px);
1774
1915
  }
1775
- .add-menu-picker-header {
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);
1776
1929
  display: flex;
1777
1930
  align-items: center;
1931
+ justify-content: center;
1932
+ padding: 24px;
1933
+ box-sizing: border-box;
1934
+ }
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;
1948
+ font-size: 14px;
1949
+ line-height: 1.45;
1950
+ color: var(--harmony-text);
1951
+ }
1952
+ .add-menu-picker-dismiss-confirm-actions {
1953
+ display: flex;
1954
+ justify-content: flex-end;
1778
1955
  gap: 8px;
1779
- padding: 14px 16px;
1956
+ }
1957
+ .add-menu-picker-dialog--full {
1958
+ width: 100%;
1959
+ height: 100%;
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);
1964
+ }
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 {
1971
+ display: flex;
1972
+ align-items: center;
1973
+ gap: 12px;
1974
+ padding: 20px 28px;
1780
1975
  border-bottom: 1px solid var(--harmony-border);
1781
- background: var(--harmony-bg-subtle);
1976
+ flex-shrink: 0;
1977
+ background: var(--harmony-bg-surface);
1782
1978
  }
1783
1979
  .add-menu-picker-title {
1784
1980
  flex: 1;
1785
- font-size: 14px;
1786
- font-weight: 600;
1981
+ font-size: 20px;
1982
+ font-weight: 700;
1787
1983
  color: var(--harmony-text);
1984
+ letter-spacing: -0.02em;
1788
1985
  }
1789
- .add-menu-picker-back,
1986
+ .add-menu-picker-header-back,
1790
1987
  .add-menu-picker-close {
1791
1988
  background: none;
1792
1989
  border: none;
1793
1990
  color: var(--harmony-text-muted);
1794
- font-size: 13px;
1795
1991
  cursor: pointer;
1796
1992
  line-height: 1;
1797
- padding: 4px 6px;
1993
+ padding: 4px;
1994
+ border-radius: var(--harmony-radius-sm);
1995
+ }
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;
1798
2010
  }
1799
2011
  .add-menu-picker-close {
1800
- font-size: 20px;
2012
+ font-size: 22px;
1801
2013
  }
1802
- .add-menu-picker-back:hover,
2014
+ .add-menu-picker-header-back:hover,
1803
2015
  .add-menu-picker-close:hover {
1804
2016
  color: var(--harmony-text);
2017
+ background: var(--harmony-bg-hover);
2018
+ }
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);
1805
2030
  }
1806
2031
  .add-menu-picker-body {
1807
2032
  padding: 12px 16px 16px;
@@ -2025,7 +2250,7 @@ body {
2025
2250
  }
2026
2251
  .add-menu-picker-search-icon {
2027
2252
  color: var(--harmony-text-muted);
2028
- font-size: 14px;
2253
+ font-size: 30px;
2029
2254
  line-height: 1;
2030
2255
  flex-shrink: 0;
2031
2256
  }
@@ -2039,6 +2264,10 @@ body {
2039
2264
  font-size: 13px;
2040
2265
  outline: none;
2041
2266
  }
2267
+ .add-menu-picker-search-input::-webkit-search-cancel-button {
2268
+ -webkit-appearance: none;
2269
+ display: none;
2270
+ }
2042
2271
  .add-menu-picker-search-input::placeholder {
2043
2272
  color: var(--harmony-text-muted);
2044
2273
  }
@@ -2047,10 +2276,10 @@ body {
2047
2276
  background: none;
2048
2277
  border: none;
2049
2278
  color: var(--harmony-text-muted);
2050
- font-size: 16px;
2279
+ font-size: 22px;
2051
2280
  line-height: 1;
2052
2281
  cursor: pointer;
2053
- padding: 0 2px;
2282
+ padding: 0 4px;
2054
2283
  }
2055
2284
  .add-menu-picker-search-clear:hover {
2056
2285
  color: var(--harmony-text);
@@ -2068,12 +2297,13 @@ body {
2068
2297
  }
2069
2298
  .add-menu-picker-browse-content {
2070
2299
  display: grid;
2071
- grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
2072
- gap: 10px;
2300
+ grid-template-columns: repeat(auto-fill, minmax(168px, 1fr));
2301
+ gap: 12px;
2073
2302
  overflow-y: auto;
2074
2303
  flex: 1;
2075
2304
  min-height: 0;
2076
2305
  align-content: start;
2306
+ grid-auto-rows: minmax(152px, auto);
2077
2307
  }
2078
2308
  .add-menu-picker-browse-row {
2079
2309
  display: contents;
@@ -2092,12 +2322,65 @@ body {
2092
2322
  }
2093
2323
  .add-menu-picker-component-card {
2094
2324
  min-height: 72px;
2325
+ overflow: hidden;
2326
+ box-sizing: border-box;
2095
2327
  }
2096
- .add-menu-picker-component-title {
2097
- font-weight: 500;
2328
+ .add-menu-picker-component-card--preview,
2329
+ .add-menu-picker-component-card--info {
2330
+ display: flex;
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;
2338
+ }
2339
+ .add-menu-picker-component-card--preview {
2340
+ min-height: 152px;
2341
+ }
2342
+ .add-menu-picker-component-card--info {
2343
+ min-height: 72px;
2344
+ justify-content: flex-start;
2345
+ padding: 10px 12px;
2346
+ gap: 0;
2347
+ }
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;
2098
2356
  overflow: hidden;
2099
- text-overflow: ellipsis;
2357
+ background: var(--harmony-bg-subtle);
2358
+ border: 1px solid var(--harmony-border);
2359
+ }
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;
2368
+ }
2369
+ .add-menu-picker-component-info-icon {
2370
+ display: none;
2371
+ }
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;
2100
2376
  white-space: nowrap;
2377
+ overflow: hidden;
2378
+ text-overflow: ellipsis;
2379
+ line-height: 1.35;
2380
+ font-size: 12px;
2381
+ }
2382
+ .add-menu-picker-component-title {
2383
+ font-weight: 500;
2101
2384
  max-width: 100%;
2102
2385
  }
2103
2386
  .add-menu-picker-component-card--browse-only {
@@ -2205,34 +2488,31 @@ body {
2205
2488
  letter-spacing: 0.4px;
2206
2489
  margin-bottom: 6px;
2207
2490
  }
2208
- .add-page-section-header-row {
2491
+ .add-page-tab-editor-actions {
2492
+ display: flex;
2493
+ justify-content: flex-end;
2494
+ flex-shrink: 0;
2495
+ margin-top: 8px;
2496
+ }
2497
+ .add-page-btn--compact {
2498
+ flex: 0 0 auto;
2499
+ padding: 6px 14px;
2500
+ font-size: 12px;
2501
+ min-width: 0;
2502
+ }
2503
+ .add-page-references-row {
2209
2504
  display: flex;
2210
2505
  align-items: center;
2211
- justify-content: space-between;
2212
2506
  gap: 8px;
2213
- margin-bottom: 6px;
2214
2507
  }
2215
- .add-page-section-header-row .add-page-section-label {
2216
- margin-bottom: 0;
2508
+ .add-page-references-row .add-page-dropzone {
2217
2509
  flex: 1;
2510
+ min-width: 0;
2511
+ margin: 0;
2218
2512
  }
2219
- .add-page-fill-from-image-btn {
2220
- background: var(--harmony-bg-subtle);
2221
- color: var(--harmony-primary);
2222
- border: 1px solid var(--harmony-border);
2223
- border-radius: var(--harmony-radius-sm);
2224
- padding: 4px 10px;
2225
- font-size: 11px;
2226
- font-weight: 600;
2227
- cursor: pointer;
2513
+ .add-page-references-row .add-page-btn--compact {
2228
2514
  flex-shrink: 0;
2229
- }
2230
- .add-page-fill-from-image-btn:hover {
2231
- background: var(--harmony-primary-soft);
2232
- }
2233
- .add-page-fill-from-image-btn:disabled {
2234
- opacity: 0.45;
2235
- cursor: not-allowed;
2515
+ white-space: nowrap;
2236
2516
  }
2237
2517
  .add-page-suggested-route {
2238
2518
  display: flex;
@@ -2388,8 +2668,15 @@ body {
2388
2668
  outline: none;
2389
2669
  box-shadow: 0 0 0 3px var(--harmony-primary-soft);
2390
2670
  }
2391
- .add-page-route-badge {
2392
- font-size: 10px;
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;
2393
2680
  color: var(--harmony-primary);
2394
2681
  background: var(--harmony-primary-soft);
2395
2682
  padding: 2px 8px;
@@ -2898,6 +3185,10 @@ body {
2898
3185
  opacity: 0.45;
2899
3186
  cursor: not-allowed;
2900
3187
  }
3188
+ .add-page-btn:disabled {
3189
+ opacity: 0.45;
3190
+ cursor: not-allowed;
3191
+ }
2901
3192
  .add-page-hidden-file {
2902
3193
  display: none;
2903
3194
  }
@@ -2933,6 +3224,714 @@ body {
2933
3224
  color: var(--harmony-text);
2934
3225
  border-color: var(--harmony-border-strong);
2935
3226
  }
2936
- .route-picker-stack {
2937
- display: contents;
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;
3311
+ }
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);
3317
+ }
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;
3341
+ border: none;
3342
+ border-radius: var(--harmony-radius-sm);
3343
+ background: transparent;
3344
+ color: var(--harmony-text-muted);
3345
+ cursor: pointer;
3346
+ flex-shrink: 0;
3347
+ overflow: visible;
3348
+ }
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 {
3360
+ display: flex;
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;
3388
+ gap: 6px;
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;
3428
+ color: var(--harmony-text-secondary);
3429
+ }
3430
+ .page-info-route-change-confirm-routes {
3431
+ margin: 0 0 16px;
3432
+ padding: 10px 12px;
3433
+ border-radius: var(--harmony-radius-sm);
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;
3440
+ }
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 {
3480
+ display: flex;
3481
+ flex-wrap: wrap;
3482
+ align-items: center;
3483
+ gap: 6px;
3484
+ }
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;
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 {
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 {
3602
+ display: flex;
3603
+ flex-direction: column;
3604
+ align-items: stretch;
3605
+ gap: 6px;
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;
3647
+ }
3648
+ .page-info-component-meta {
3649
+ display: flex;
3650
+ flex-wrap: wrap;
3651
+ align-items: center;
3652
+ gap: 6px;
3653
+ }
3654
+ .page-info-component-key {
3655
+ font-family: var(--harmony-mono);
3656
+ font-size: 10px;
3657
+ font-weight: 600;
3658
+ letter-spacing: 0.02em;
3659
+ text-transform: uppercase;
3660
+ color: var(--harmony-text-secondary);
3661
+ background: var(--harmony-bg-subtle);
3662
+ border: 1px solid var(--harmony-border);
3663
+ border-radius: var(--harmony-radius-pill);
3664
+ padding: 2px 8px;
3665
+ }
3666
+ .page-info-component-row--selected .page-info-component-key {
3667
+ background: rgba(255, 255, 255, 0.7);
3668
+ }
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;
3677
+ }
3678
+ .page-info-main-view {
3679
+ display: flex;
3680
+ flex-direction: column;
3681
+ gap: 14px;
3682
+ }
3683
+ .page-info-inspector {
3684
+ display: flex;
3685
+ flex-direction: column;
3686
+ gap: 10px;
3687
+ flex: 1;
3688
+ min-height: 0;
3689
+ padding-bottom: 24px;
3690
+ }
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);
3697
+ }
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);
3713
+ background: var(--harmony-bg-surface);
3714
+ border: 1px solid var(--harmony-border);
3715
+ font-size: 11px;
3716
+ }
3717
+ .page-info-tag-row.page-info-tag--used {
3718
+ border-color: rgba(0, 168, 98, 0.35);
3719
+ background: var(--harmony-success-soft);
3720
+ }
3721
+ .page-info-tag-path {
3722
+ font-family: var(--harmony-mono);
3723
+ font-size: 11px;
3724
+ color: var(--harmony-text);
3725
+ word-break: break-word;
3726
+ }
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;
3737
+ }
3738
+ .page-info-tag-status {
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 {
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;
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;
3761
+ }
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;
3770
+ }
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;
3777
+ background: var(--harmony-bg-surface);
3778
+ border: 1px solid var(--harmony-border);
3779
+ border-radius: var(--harmony-radius-lg);
3780
+ box-shadow: var(--harmony-shadow-lg);
3781
+ display: flex;
3782
+ flex-direction: column;
3783
+ overflow: hidden;
3784
+ pointer-events: auto;
3785
+ }
3786
+ .add-menu-dock-header {
3787
+ display: flex;
3788
+ align-items: center;
3789
+ gap: 8px;
3790
+ padding: 12px 14px;
3791
+ border-bottom: 1px solid var(--harmony-border);
3792
+ flex-shrink: 0;
3793
+ cursor: grab;
3794
+ user-select: none;
3795
+ }
3796
+ .add-menu-dock-header:active {
3797
+ cursor: grabbing;
3798
+ }
3799
+ .add-menu-dock-title {
3800
+ flex: 1;
3801
+ font-size: 18px;
3802
+ font-weight: 700;
3803
+ color: var(--harmony-text);
3804
+ letter-spacing: -0.02em;
3805
+ }
3806
+ .add-menu-dock-subhint {
3807
+ margin: 0;
3808
+ padding: 8px 18px 0;
3809
+ font-size: 12px;
3810
+ line-height: 1.35;
3811
+ color: var(--harmony-text-secondary);
3812
+ flex-shrink: 0;
3813
+ }
3814
+ .add-menu-dock-body {
3815
+ flex: 1;
3816
+ min-height: 0;
3817
+ overflow: hidden;
3818
+ display: flex;
3819
+ flex-direction: column;
3820
+ padding: 0 0 12px;
3821
+ }
3822
+ .add-menu-dock-body .add-menu-picker-browse {
3823
+ flex: 1;
3824
+ min-height: 0;
3825
+ display: flex;
3826
+ flex-direction: column;
3827
+ overflow: hidden;
3828
+ }
3829
+ .add-menu-dock-body .add-menu-picker-browse-layout {
3830
+ flex: 1;
3831
+ min-height: 0;
3832
+ }
3833
+ .add-menu-picker-component-card--stage-place {
3834
+ cursor: grab;
3835
+ }
3836
+ .add-menu-picker-component-card--stage-place:active {
3837
+ cursor: grabbing;
3838
+ }
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;
3891
+ background: var(--harmony-bg-surface);
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;
3899
+ }
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;
3914
+ }
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;
2938
3937
  }