@jay-framework/aiditor 0.20.0 → 0.22.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.
@@ -289,7 +289,7 @@
289
289
  padding: 5px 8px;
290
290
  background: var(--harmony-bg-surface);
291
291
  border: 1px solid var(--harmony-border);
292
- border-radius: var(--harmony-radius-pill);
292
+ border-radius: 8px;
293
293
  box-shadow: 0 6px 28px rgba(22, 45, 61, 0.14), 0 2px 6px rgba(22, 45, 61, 0.06);
294
294
  }
295
295
 
@@ -463,19 +463,31 @@
463
463
  text-transform: uppercase;
464
464
  color: var(--harmony-text-muted);
465
465
  }
466
- .harmony-routes-panel-section-title + .harmony-routes-panel-item,
467
- .harmony-routes-panel-item + .harmony-routes-panel-section-title {
466
+ .harmony-routes-panel-section-title + .harmony-routes-panel-item-row,
467
+ .harmony-routes-panel-item-row + .harmony-routes-panel-section-title {
468
468
  margin-top: 4px;
469
469
  padding-top: 14px;
470
470
  border-top: 1px solid var(--harmony-border);
471
471
  }
472
+ .harmony-routes-panel-item-row {
473
+ display: flex;
474
+ align-items: center;
475
+ width: 100%;
476
+ }
477
+ .harmony-routes-panel-item-row:hover {
478
+ background: var(--harmony-bg-hover);
479
+ }
480
+ .harmony-routes-panel-item-row--selected {
481
+ background: var(--harmony-primary-soft);
482
+ }
472
483
  .harmony-routes-panel-item {
473
484
  display: flex;
474
485
  align-items: center;
475
486
  gap: 8px;
476
- width: 100%;
487
+ flex: 1;
488
+ min-width: 0;
477
489
  box-sizing: border-box;
478
- padding: 9px 16px;
490
+ padding: 9px 8px 9px 16px;
479
491
  border: none;
480
492
  background: transparent;
481
493
  color: var(--harmony-text);
@@ -485,10 +497,9 @@
485
497
  cursor: pointer;
486
498
  }
487
499
  .harmony-routes-panel-item:hover {
488
- background: var(--harmony-bg-hover);
500
+ background: transparent;
489
501
  }
490
502
  .harmony-routes-panel-item--selected {
491
- background: var(--harmony-primary-soft);
492
503
  color: var(--harmony-primary);
493
504
  font-weight: 600;
494
505
  }
@@ -506,6 +517,35 @@
506
517
  text-overflow: ellipsis;
507
518
  white-space: nowrap;
508
519
  }
520
+ .harmony-routes-panel-open-tab {
521
+ flex-shrink: 0;
522
+ display: inline-flex;
523
+ align-items: center;
524
+ justify-content: center;
525
+ width: 32px;
526
+ height: 32px;
527
+ margin-right: 8px;
528
+ padding: 0;
529
+ border: none;
530
+ border-radius: var(--harmony-radius-sm);
531
+ background: transparent;
532
+ color: var(--harmony-text-muted);
533
+ cursor: pointer;
534
+ transition: color 0.12s ease, background 0.12s ease;
535
+ }
536
+ .harmony-routes-panel-open-tab:hover {
537
+ color: var(--harmony-text);
538
+ background: transparent;
539
+ }
540
+ .harmony-routes-panel-open-tab:focus-visible {
541
+ outline: 2px solid var(--harmony-primary);
542
+ outline-offset: 1px;
543
+ }
544
+ .harmony-routes-panel-open-tab-icon {
545
+ display: block;
546
+ width: 18px;
547
+ height: 18px;
548
+ }
509
549
  .harmony-routes-panel-empty {
510
550
  margin: 0;
511
551
  padding: 16px;
@@ -1042,14 +1082,54 @@
1042
1082
  .harmony-url-bar-wrap { flex: 1; min-width: 0; }
1043
1083
  .url-bar-wrap { flex: 1; min-width: 200px; }
1044
1084
  .url-bar {
1085
+ display: flex;
1086
+ align-items: center;
1087
+ gap: 4px;
1045
1088
  font-size: 12px;
1046
1089
  font-family: var(--harmony-mono);
1047
1090
  color: var(--harmony-text-secondary);
1048
1091
  background: var(--harmony-bg-surface);
1049
1092
  border: 1px solid var(--harmony-border);
1050
1093
  border-radius: var(--harmony-radius-sm);
1051
- padding: 7px 12px;
1052
- word-break: break-all;
1094
+ padding: 4px 4px 4px 12px;
1095
+ }
1096
+ .url-bar-text {
1097
+ flex: 1;
1098
+ min-width: 0;
1099
+ overflow: hidden;
1100
+ text-overflow: ellipsis;
1101
+ white-space: nowrap;
1102
+ }
1103
+ .url-bar-open-tab {
1104
+ flex-shrink: 0;
1105
+ display: inline-flex;
1106
+ align-items: center;
1107
+ justify-content: center;
1108
+ width: 28px;
1109
+ height: 28px;
1110
+ padding: 0;
1111
+ border: none;
1112
+ border-radius: var(--harmony-radius-sm);
1113
+ background: transparent;
1114
+ color: var(--harmony-text-muted);
1115
+ cursor: pointer;
1116
+ transition: color 0.12s ease, background 0.12s ease;
1117
+ }
1118
+ .url-bar-open-tab:hover:not(:disabled) {
1119
+ color: var(--harmony-text);
1120
+ background: var(--harmony-bg-hover);
1121
+ }
1122
+ .url-bar-open-tab:disabled {
1123
+ opacity: 0.4;
1124
+ cursor: default;
1125
+ }
1126
+ .url-bar-open-tab:focus-visible {
1127
+ outline: 2px solid var(--harmony-primary);
1128
+ outline-offset: 1px;
1129
+ }
1130
+ .url-bar-open-tab .harmony-routes-panel-open-tab-icon {
1131
+ width: 24px;
1132
+ height: 24px;
1053
1133
  }
1054
1134
 
1055
1135
  .preview-loading { font-size: 13px; color: var(--harmony-text-muted); }
@@ -1298,6 +1378,19 @@
1298
1378
  .visual-attachment-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 160px; }
1299
1379
  .visual-attachment-remove-file { background: transparent; border: none; color: var(--harmony-text-muted); cursor: pointer; font-size: 14px; line-height: 1; padding: 0 4px; }
1300
1380
  .visual-attachment-remove-file:hover { color: var(--harmony-danger); }
1381
+ .visual-attachment-chip-actions {
1382
+ display: flex;
1383
+ flex-direction: column;
1384
+ align-items: center;
1385
+ gap: 2px;
1386
+ flex-shrink: 0;
1387
+ }
1388
+ .visual-attachment-number {
1389
+ font-size: 10px;
1390
+ font-weight: 600;
1391
+ color: var(--harmony-primary);
1392
+ line-height: 1;
1393
+ }
1301
1394
  .file-input-hidden { display: none; }
1302
1395
  .visual-error { font-size: 12px; color: var(--harmony-danger); }
1303
1396
  .visual-submit-error { font-size: 12px; color: var(--harmony-danger); margin: 0; padding: 0 2px; }
@@ -1576,11 +1669,21 @@
1576
1669
  max-height: 94vh;
1577
1670
  display: flex;
1578
1671
  flex-direction: column;
1579
- gap: 10px;
1580
- padding: 14px 16px;
1672
+ gap: 24px;
1673
+ padding: 32px 32px;
1581
1674
  overflow: hidden;
1582
1675
  box-shadow: var(--harmony-shadow-lg);
1583
1676
  }
1677
+ .video-review-panel { position: relative; }
1678
+ .video-review-header { align-items: flex-start; padding-right: 28px; }
1679
+ .video-review-panel .harmony-modal-close {
1680
+ position: absolute;
1681
+ top: 12px;
1682
+ right: 12px;
1683
+ z-index: 1;
1684
+ }
1685
+ .video-review-header, .snapshot-header { display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
1686
+ .snapshot-header { align-items: center; }
1584
1687
  .video-review-body {
1585
1688
  display: flex;
1586
1689
  flex-direction: column;
@@ -1588,23 +1691,25 @@
1588
1691
  min-height: 0;
1589
1692
  flex: 1 1 auto;
1590
1693
  }
1591
- .video-review-tools {
1592
- display: inline-flex;
1593
- flex-wrap: nowrap;
1594
- gap: 2px;
1595
- align-items: center;
1596
- width: fit-content;
1597
- }
1598
- .video-review-tools .visual-tool-btn {
1599
- padding: 7px 8px;
1600
- min-width: 28px;
1601
- }
1602
1694
  .video-review-capture-root {
1695
+ position: relative;
1603
1696
  flex: 0 1 auto;
1604
1697
  min-height: 0;
1605
1698
  max-height: min(56vh, 480px);
1606
1699
  overflow: hidden;
1607
1700
  }
1701
+ .video-review-toolbar-wrap {
1702
+ position: absolute;
1703
+ bottom: 12px;
1704
+ left: 50%;
1705
+ transform: translateX(-50%);
1706
+ z-index: 12;
1707
+ pointer-events: none;
1708
+ }
1709
+ .video-review-toolbar-wrap > * { pointer-events: auto; }
1710
+ .video-review-toolbar-wrap .annotate-dock {
1711
+ border-radius: 8px;
1712
+ }
1608
1713
  .video-review-capture-root .preview-frame {
1609
1714
  width: 100%;
1610
1715
  height: auto;
@@ -1612,11 +1717,15 @@
1612
1717
  max-height: min(56vh, 480px);
1613
1718
  object-fit: contain;
1614
1719
  display: block;
1720
+ border: 1px solid rgba(0, 0, 0, 0.2);
1721
+ border-radius: 8px;
1722
+ box-sizing: border-box;
1615
1723
  }
1616
1724
  .snapshot-panel { width: min(1200px, 96vw); overflow: hidden; }
1617
- .video-review-header, .snapshot-header { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
1618
1725
  .video-review-title, .snapshot-title { font-size: 15px; font-weight: 600; color: var(--harmony-text); margin: 0; }
1619
- .video-review-meta { font-size: 12px; color: var(--harmony-text-muted); }
1726
+ .video-review-title { font-size: 20px; }
1727
+ .video-review-subtitle { font-size: 16px; color: var(--harmony-text-secondary); margin: 4px 0 0; line-height: 1.35; }
1728
+ .video-review-time { flex-shrink: 0; font-size: 12px; color: var(--harmony-text-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
1620
1729
  .snapshot-tools { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
1621
1730
  .video-review-transport { display: flex; align-items: center; gap: 10px; width: 100%; }
1622
1731
  .video-play-pause-btn {
@@ -2001,8 +2110,6 @@
2001
2110
  gap: 0;
2002
2111
  flex: 1;
2003
2112
  min-height: 0;
2004
- border: 1px solid var(--harmony-border);
2005
- border-radius: var(--harmony-radius-md);
2006
2113
  overflow: hidden;
2007
2114
  }
2008
2115
  .add-menu-picker-sidebar {
@@ -2010,8 +2117,8 @@
2010
2117
  flex-direction: column;
2011
2118
  width: 168px;
2012
2119
  flex-shrink: 0;
2120
+ align-self: stretch;
2013
2121
  border-right: 1px solid var(--harmony-border);
2014
- background: var(--harmony-bg-subtle);
2015
2122
  overflow-y: auto;
2016
2123
  padding: 8px 6px;
2017
2124
  gap: 2px;
@@ -2127,7 +2234,7 @@
2127
2234
  display: flex;
2128
2235
  align-items: center;
2129
2236
  gap: 8px;
2130
- margin-bottom: 10px;
2237
+ margin-bottom: 0;
2131
2238
  min-width: 0;
2132
2239
  }
2133
2240
  .add-menu-picker-search-field {
@@ -2135,8 +2242,8 @@
2135
2242
  min-width: 0;
2136
2243
  display: flex;
2137
2244
  align-items: center;
2138
- gap: 8px;
2139
- padding: 8px 12px;
2245
+ gap: 6px;
2246
+ padding: 5px 10px;
2140
2247
  border: 1px solid var(--harmony-border);
2141
2248
  border-radius: 999px;
2142
2249
  background: var(--harmony-bg-surface);
@@ -2144,7 +2251,7 @@
2144
2251
  .add-menu-picker-search-icon {
2145
2252
  color: var(--harmony-text-muted);
2146
2253
  font-size: 30px;
2147
- line-height: 1;
2254
+ line-height: 0;
2148
2255
  flex-shrink: 0;
2149
2256
  }
2150
2257
  .add-menu-picker-search-input {
@@ -2187,14 +2294,137 @@
2187
2294
  padding-top: 0;
2188
2295
  }
2189
2296
  .add-menu-picker-browse-content {
2190
- display: grid;
2191
- grid-template-columns: repeat(auto-fill, minmax(168px, 1fr));
2297
+ display: flex;
2298
+ flex-direction: column;
2192
2299
  gap: 12px;
2193
2300
  overflow-y: auto;
2194
2301
  flex: 1;
2195
2302
  min-height: 0;
2196
- align-content: start;
2197
- grid-auto-rows: minmax(152px, auto);
2303
+ }
2304
+ .add-menu-folder-breadcrumb {
2305
+ display: flex;
2306
+ flex-wrap: wrap;
2307
+ align-items: center;
2308
+ gap: 2px;
2309
+ font-size: 13px;
2310
+ color: var(--harmony-text-secondary, #666);
2311
+ margin-bottom: 4px;
2312
+ }
2313
+ .add-menu-folder-breadcrumb-segment {
2314
+ background: none;
2315
+ border: none;
2316
+ padding: 0;
2317
+ color: var(--harmony-link, #116dff);
2318
+ cursor: pointer;
2319
+ font: inherit;
2320
+ }
2321
+ .add-menu-folder-breadcrumb-segment:hover {
2322
+ text-decoration: underline;
2323
+ }
2324
+ .add-menu-folder-breadcrumb-sep {
2325
+ color: var(--harmony-text-secondary, #666);
2326
+ pointer-events: none;
2327
+ }
2328
+ .add-menu-folder-breadcrumb-current {
2329
+ color: var(--harmony-text-primary, #162d3d);
2330
+ font-weight: 500;
2331
+ }
2332
+ .add-menu-folder-grid {
2333
+ display: grid;
2334
+ grid-template-columns: repeat(4, minmax(0, 1fr));
2335
+ gap: 6px;
2336
+ margin-bottom: 2px;
2337
+ }
2338
+ .add-menu-folder-card {
2339
+ display: flex;
2340
+ flex-direction: column;
2341
+ align-items: stretch;
2342
+ justify-content: flex-start;
2343
+ gap: 4px;
2344
+ padding: 6px;
2345
+ border: none;
2346
+ border-radius: 8px;
2347
+ background: transparent;
2348
+ cursor: pointer;
2349
+ text-align: center;
2350
+ min-height: 0;
2351
+ min-width: 0;
2352
+ font: inherit;
2353
+ color: inherit;
2354
+ }
2355
+ .add-menu-folder-card:hover {
2356
+ background: rgba(0, 0, 0, 0.05);
2357
+ }
2358
+ .add-menu-folder-card:active {
2359
+ background: rgba(0, 122, 255, 0.14);
2360
+ }
2361
+ /* viewBox is broken in jay-html (compiler emits viewbox); scale path via transform instead. */
2362
+ .add-menu-folder-card-preview {
2363
+ display: flex;
2364
+ align-items: center;
2365
+ }
2366
+ .add-menu-folder-card-preview svg {
2367
+ display: block;
2368
+ width: 95%;
2369
+ height: 100%;
2370
+ }
2371
+ .add-menu-folder-card-label {
2372
+ font-size: 11px;
2373
+ font-weight: 400;
2374
+ line-height: 1.25;
2375
+ word-break: break-word;
2376
+ display: -webkit-box;
2377
+ -webkit-line-clamp: 2;
2378
+ -webkit-box-orient: vertical;
2379
+ overflow: hidden;
2380
+ width: 100%;
2381
+ text-align: center;
2382
+ color: var(--harmony-text-primary, #162d3d);
2383
+ }
2384
+ .add-menu-folder-card-count {
2385
+ font-size: 10px;
2386
+ line-height: 1.2;
2387
+ color: var(--harmony-text-secondary, #666);
2388
+ text-align: center;
2389
+ }
2390
+ .add-menu-browse-band--small-strip {
2391
+ display: grid;
2392
+ grid-template-columns: repeat(4, minmax(0, 1fr));
2393
+ gap: 6px;
2394
+ }
2395
+ .add-menu-browse-band--medium-band {
2396
+ display: grid;
2397
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2398
+ gap: 8px;
2399
+ align-items: stretch;
2400
+ }
2401
+ .add-menu-browse-band--slots-3 {
2402
+ grid-template-columns: minmax(0, 1fr) minmax(0, 2fr) minmax(0, 1fr);
2403
+ align-items: start;
2404
+ }
2405
+ /* S|M|S — one small per side; avoid 2×2 quad + row stretch (tall narrow cards). */
2406
+ .add-menu-browse-band--slots-3 .add-menu-browse-quad {
2407
+ grid-template-columns: 1fr;
2408
+ grid-template-rows: 1fr;
2409
+ width: 100%;
2410
+ align-self: start;
2411
+ }
2412
+ .add-menu-browse-slot {
2413
+ min-width: 0;
2414
+ }
2415
+ .add-menu-browse-slot--large {
2416
+ grid-column: 1 / -1;
2417
+ }
2418
+ .add-menu-browse-quad {
2419
+ display: grid;
2420
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2421
+ grid-template-rows: repeat(2, minmax(0, 1fr));
2422
+ gap: 4px;
2423
+ min-height: 0;
2424
+ aspect-ratio: 1;
2425
+ }
2426
+ .add-menu-picker-browse-block {
2427
+ display: contents;
2198
2428
  }
2199
2429
  .add-menu-picker-browse-row {
2200
2430
  display: contents;
@@ -2206,13 +2436,32 @@
2206
2436
  color: var(--harmony-text-muted);
2207
2437
  text-transform: uppercase;
2208
2438
  letter-spacing: 0.04em;
2209
- grid-column: 1 / -1;
2210
2439
  }
2211
- .add-menu-picker-browse-content .add-menu-picker-component-card {
2212
- width: auto;
2440
+ .add-menu-picker-component-card--size-large .add-menu-picker-component-preview,
2441
+ .add-menu-picker-component-card--size-medium .add-menu-picker-component-preview {
2442
+ flex: 0 0 auto;
2443
+ width: 100%;
2444
+ height: auto;
2445
+ min-height: 0;
2446
+ aspect-ratio: 10 / 7;
2447
+ }
2448
+ .add-menu-picker-component-card--size-large .add-menu-picker-component-preview {
2449
+ aspect-ratio: 20 / 7;
2450
+ }
2451
+ .add-menu-picker-component-card--size-small .add-menu-picker-component-preview {
2452
+ flex: 0 0 auto;
2453
+ width: 100%;
2454
+ height: auto;
2455
+ min-height: 0;
2456
+ aspect-ratio: 1;
2457
+ }
2458
+ .add-menu-picker-browse-content .add-menu-picker-component-card,
2459
+ .add-menu-browse-band--small-strip .add-menu-picker-component-card,
2460
+ .add-menu-browse-band--medium-band .add-menu-picker-component-card {
2461
+ width: 100%;
2213
2462
  }
2214
2463
  .add-menu-picker-component-card {
2215
- min-height: 72px;
2464
+ min-height: 0;
2216
2465
  overflow: hidden;
2217
2466
  box-sizing: border-box;
2218
2467
  }
@@ -2228,7 +2477,11 @@
2228
2477
  text-align: left;
2229
2478
  }
2230
2479
  .add-menu-picker-component-card--preview {
2231
- min-height: 152px;
2480
+ min-height: 0;
2481
+ }
2482
+ .add-menu-picker-component-card--size-small.add-menu-picker-component-card--preview {
2483
+ padding: 6px;
2484
+ gap: 4px;
2232
2485
  }
2233
2486
  .add-menu-picker-component-card--info {
2234
2487
  min-height: 72px;
@@ -2246,20 +2499,35 @@
2246
2499
  border-radius: 6px;
2247
2500
  overflow: hidden;
2248
2501
  background: var(--harmony-bg-subtle);
2249
- border: 1px solid var(--harmony-border);
2502
+ }
2503
+ .add-menu-picker-component-card--preview .add-menu-picker-component-preview {
2504
+ border: none;
2250
2505
  }
2251
2506
  .add-menu-picker-component-thumb {
2252
2507
  display: block;
2253
2508
  width: 100%;
2254
2509
  height: 100%;
2255
- object-fit: contain;
2510
+ object-fit: cover;
2256
2511
  object-position: center;
2257
- padding: 6px;
2512
+ padding: 0;
2258
2513
  box-sizing: border-box;
2259
2514
  }
2260
2515
  .add-menu-picker-component-thumb--animated {
2261
2516
  transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
2262
2517
  }
2518
+ .add-menu-picker-component-thumb--gif {
2519
+ object-fit: cover;
2520
+ padding: 0;
2521
+ }
2522
+ .add-menu-picker-component-preview--html {
2523
+ padding: 0;
2524
+ border: none;
2525
+ background: transparent;
2526
+ }
2527
+ .add-menu-picker-component-preview--html > .am-preview {
2528
+ width: 100%;
2529
+ height: 100%;
2530
+ }
2263
2531
  @media (prefers-reduced-motion: no-preference) {
2264
2532
  .add-menu-picker-component-card--preview:hover .add-menu-picker-component-thumb--animated,
2265
2533
  .add-menu-picker-component-card--preview:focus-visible .add-menu-picker-component-thumb--animated {
@@ -2424,6 +2692,71 @@
2424
2692
  color: var(--harmony-text);
2425
2693
  border-bottom-color: var(--harmony-primary);
2426
2694
  }
2695
+ .add-page-tab--generating {
2696
+ color: var(--harmony-primary);
2697
+ }
2698
+ .add-page-brief-generating-overlay {
2699
+ position: absolute;
2700
+ inset: 0;
2701
+ z-index: 3;
2702
+ display: flex;
2703
+ flex-direction: column;
2704
+ align-items: center;
2705
+ justify-content: center;
2706
+ gap: 10px;
2707
+ background: rgba(255, 255, 255, 0.78);
2708
+ backdrop-filter: blur(6px);
2709
+ -webkit-backdrop-filter: blur(6px);
2710
+ border-radius: var(--harmony-radius-sm);
2711
+ pointer-events: auto;
2712
+ }
2713
+ .add-page-brief-generating-overlay .add-page-hint {
2714
+ margin: 0;
2715
+ font-size: 13px;
2716
+ color: var(--harmony-text-secondary);
2717
+ }
2718
+ .add-page-brief-generating-stop {
2719
+ flex: 0;
2720
+ padding: 4px 12px;
2721
+ font-size: 12px;
2722
+ }
2723
+ .add-page-textarea:disabled {
2724
+ opacity: 0.55;
2725
+ cursor: not-allowed;
2726
+ }
2727
+ .add-page-discard-confirm-overlay {
2728
+ position: absolute;
2729
+ inset: 0;
2730
+ z-index: 30;
2731
+ background: rgba(22, 45, 61, 0.45);
2732
+ display: flex;
2733
+ align-items: center;
2734
+ justify-content: center;
2735
+ padding: 24px;
2736
+ box-sizing: border-box;
2737
+ }
2738
+ .add-page-discard-confirm-dialog {
2739
+ background: var(--harmony-bg-surface);
2740
+ border: 1px solid var(--harmony-border);
2741
+ border-radius: var(--harmony-radius-lg);
2742
+ width: min(400px, 100%);
2743
+ padding: 20px 24px;
2744
+ box-shadow: var(--harmony-shadow-lg);
2745
+ display: flex;
2746
+ flex-direction: column;
2747
+ gap: 16px;
2748
+ }
2749
+ .add-page-discard-confirm-msg {
2750
+ margin: 0;
2751
+ font-size: 14px;
2752
+ line-height: 1.45;
2753
+ color: var(--harmony-text);
2754
+ }
2755
+ .add-page-discard-confirm-actions {
2756
+ display: flex;
2757
+ justify-content: flex-end;
2758
+ gap: 8px;
2759
+ }
2427
2760
  .add-page-tab-panel {
2428
2761
  display: flex;
2429
2762
  flex-direction: column;
@@ -2461,6 +2794,9 @@
2461
2794
  .asset-mention-autocomplete[hidden] {
2462
2795
  display: none !important;
2463
2796
  }
2797
+ .asset-mention-autocomplete--above {
2798
+ transform: translateY(-100%);
2799
+ }
2464
2800
  .asset-mention-header {
2465
2801
  display: flex;
2466
2802
  align-items: center;
@@ -2689,12 +3025,28 @@
2689
3025
  padding: 24px;
2690
3026
  box-sizing: border-box;
2691
3027
  }
3028
+ .add-page-brief-fill-popover-stack {
3029
+ display: flex;
3030
+ flex-direction: column;
3031
+ align-items: center;
3032
+ gap: 10px;
3033
+ width: min(420px, 100%);
3034
+ max-height: 90%;
3035
+ }
3036
+ .add-page-brief-fill-stop-confirm {
3037
+ align-self: center;
3038
+ max-width: 100%;
3039
+ white-space: normal;
3040
+ text-align: center;
3041
+ flex-wrap: wrap;
3042
+ justify-content: center;
3043
+ }
2692
3044
  .add-page-brief-fill-panel {
2693
3045
  background: var(--harmony-bg-surface);
2694
3046
  border: 1px solid var(--harmony-border);
2695
3047
  border-radius: var(--harmony-radius-md);
2696
- width: min(420px, 100%);
2697
- max-height: 90%;
3048
+ width: 100%;
3049
+ max-height: 100%;
2698
3050
  overflow: auto;
2699
3051
  padding: 14px 16px;
2700
3052
  display: flex;
@@ -2858,6 +3210,11 @@
2858
3210
  .add-page-dropzone .add-page-btn--compact {
2859
3211
  flex: 0 0 auto;
2860
3212
  }
3213
+ .add-page-dropzone--disabled {
3214
+ opacity: 0.45;
3215
+ cursor: not-allowed;
3216
+ pointer-events: none;
3217
+ }
2861
3218
  .add-page-chips { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
2862
3219
  .add-page-chip {
2863
3220
  display: flex;
@@ -3615,7 +3972,7 @@
3615
3972
  }
3616
3973
  .add-menu-dock-subhint {
3617
3974
  margin: 0;
3618
- padding: 8px 18px 0;
3975
+ padding: 2px 18px 6px;
3619
3976
  font-size: 12px;
3620
3977
  line-height: 1.35;
3621
3978
  color: var(--harmony-text-secondary);
@@ -3627,7 +3984,7 @@
3627
3984
  overflow: hidden;
3628
3985
  display: flex;
3629
3986
  flex-direction: column;
3630
- padding: 0 0 12px;
3987
+ padding: 0;
3631
3988
  }
3632
3989
  .add-menu-dock-body .add-menu-picker-browse {
3633
3990
  flex: 1;
@@ -3635,10 +3992,20 @@
3635
3992
  display: flex;
3636
3993
  flex-direction: column;
3637
3994
  overflow: hidden;
3995
+ padding: 0;
3996
+ gap: 0;
3997
+ }
3998
+ .add-menu-dock-body .add-menu-picker-search-row {
3999
+ padding: 0 16px 10px;
4000
+ margin-bottom: 0;
4001
+ border-bottom: 1px solid var(--harmony-border);
4002
+ flex-shrink: 0;
3638
4003
  }
3639
4004
  .add-menu-dock-body .add-menu-picker-browse-layout {
3640
4005
  flex: 1;
3641
4006
  min-height: 0;
4007
+ margin: 0;
4008
+ width: 100%;
3642
4009
  }
3643
4010
  .add-menu-picker-component-card--stage-place { cursor: grab; }
3644
4011
  .add-menu-picker-component-card--stage-place:active { cursor: grabbing; }
@@ -3772,6 +4139,7 @@ data:
3772
4139
  isSelected: boolean
3773
4140
  checkGlyph: string
3774
4141
  cssClass: string
4142
+ rowCssClass: string
3775
4143
  showPagesPanelEmptySearch: boolean
3776
4144
  showInstanceSwitcher: boolean
3777
4145
  showInstanceSwitcherMenu: boolean
@@ -3852,21 +4220,111 @@ data:
3852
4220
  subCategoryCountLabel: string
3853
4221
  isSelected: boolean
3854
4222
  cssClass: string
3855
- addMenuPickerBrowseRows:
4223
+ addMenuPickerBrowseBlocks:
4224
+ - blockKey: string
4225
+ kind: string
4226
+ showSectionHeader: boolean
4227
+ showBand: boolean
4228
+ sectionLabel: string
4229
+ bandKind: string
4230
+ bandCssClass: string
4231
+ showSmallStrip: boolean
4232
+ showMediumBand: boolean
4233
+ stripCells:
4234
+ - rowKey: string
4235
+ isSectionHeader: boolean
4236
+ label: string
4237
+ itemId: string
4238
+ isPickable: boolean
4239
+ showPickable: boolean
4240
+ showBrowseOnly: boolean
4241
+ isItemSelected: boolean
4242
+ cardCssClass: string
4243
+ showImage: boolean
4244
+ showGif: boolean
4245
+ showHtmlFragment: boolean
4246
+ imageUrl: string
4247
+ gifUrl: string
4248
+ posterUrl: string
4249
+ previewHtml: html-string
4250
+ showGifAutoplay: boolean
4251
+ showGifPoster: boolean
4252
+ showGifReducedInfoIcon: boolean
4253
+ showThumbnail: boolean
4254
+ showInfoIcon: boolean
4255
+ thumbnailUrl: string
4256
+ isAnimatedThumbnail: boolean
4257
+ thumbCssClass: string
4258
+ browseSize: string
4259
+ bandSlots:
4260
+ - slotKey: string
4261
+ slotKind: string
4262
+ slotCssClass: string
4263
+ showMediumSlot: boolean
4264
+ showLargeSlot: boolean
4265
+ showSmallQuad: boolean
4266
+ rowKey: string
4267
+ label: string
4268
+ itemId: string
4269
+ isPickable: boolean
4270
+ showPickable: boolean
4271
+ isItemSelected: boolean
4272
+ cardCssClass: string
4273
+ showImage: boolean
4274
+ showGif: boolean
4275
+ showHtmlFragment: boolean
4276
+ imageUrl: string
4277
+ gifUrl: string
4278
+ posterUrl: string
4279
+ previewHtml: html-string
4280
+ showGifAutoplay: boolean
4281
+ showGifPoster: boolean
4282
+ showGifReducedInfoIcon: boolean
4283
+ showThumbnail: boolean
4284
+ showInfoIcon: boolean
4285
+ thumbnailUrl: string
4286
+ isAnimatedThumbnail: boolean
4287
+ thumbCssClass: string
4288
+ browseSize: string
4289
+ quadRows:
4290
+ - rowKey: string
4291
+ label: string
4292
+ itemId: string
4293
+ isPickable: boolean
4294
+ showPickable: boolean
4295
+ isItemSelected: boolean
4296
+ cardCssClass: string
4297
+ showImage: boolean
4298
+ showGif: boolean
4299
+ showHtmlFragment: boolean
4300
+ imageUrl: string
4301
+ gifUrl: string
4302
+ posterUrl: string
4303
+ previewHtml: html-string
4304
+ showGifAutoplay: boolean
4305
+ showGifPoster: boolean
4306
+ showGifReducedInfoIcon: boolean
4307
+ showThumbnail: boolean
4308
+ showInfoIcon: boolean
4309
+ thumbnailUrl: string
4310
+ isAnimatedThumbnail: boolean
4311
+ thumbCssClass: string
4312
+ browseSize: string
4313
+ showAddMenuPickerBreadcrumb: boolean
4314
+ showAddMenuPickerFolderGrid: boolean
4315
+ showAddMenuPickerEmptyFolder: boolean
4316
+ addMenuPickerBrowseBreadcrumbSegments:
4317
+ - segmentKey: string
4318
+ navKey: string
4319
+ label: string
4320
+ isLast: boolean
4321
+ addMenuPickerBrowseFolderRows:
3856
4322
  - rowKey: string
3857
- isSectionHeader: boolean
4323
+ navKey: string
4324
+ segment: string
3858
4325
  label: string
3859
- itemId: string
3860
- isPickable: boolean
3861
- showPickable: boolean
3862
- showBrowseOnly: boolean
3863
- isItemSelected: boolean
3864
- cardCssClass: string
3865
- showThumbnail: boolean
3866
- showInfoIcon: boolean
3867
- thumbnailUrl: string
3868
- isAnimatedThumbnail: boolean
3869
- thumbCssClass: string
4326
+ itemCountLabel: string
4327
+ totalItemCount: number
3870
4328
  showPageInfoPanel: boolean
3871
4329
  pageInfoPanelLeft: number
3872
4330
  pageInfoPanelTop: number
@@ -3977,26 +4435,117 @@ data:
3977
4435
  subCategoryCountLabel: string
3978
4436
  isSelected: boolean
3979
4437
  cssClass: string
3980
- addMenuDockBrowseRows:
4438
+ addMenuDockBrowseBlocks:
4439
+ - blockKey: string
4440
+ kind: string
4441
+ showSectionHeader: boolean
4442
+ showBand: boolean
4443
+ sectionLabel: string
4444
+ bandKind: string
4445
+ bandCssClass: string
4446
+ showSmallStrip: boolean
4447
+ showMediumBand: boolean
4448
+ stripCells:
4449
+ - rowKey: string
4450
+ isSectionHeader: boolean
4451
+ label: string
4452
+ itemId: string
4453
+ isPickable: boolean
4454
+ showPickable: boolean
4455
+ showBrowseOnly: boolean
4456
+ isItemSelected: boolean
4457
+ cardCssClass: string
4458
+ showImage: boolean
4459
+ showGif: boolean
4460
+ showHtmlFragment: boolean
4461
+ imageUrl: string
4462
+ gifUrl: string
4463
+ posterUrl: string
4464
+ previewHtml: html-string
4465
+ showGifAutoplay: boolean
4466
+ showGifPoster: boolean
4467
+ showGifReducedInfoIcon: boolean
4468
+ showThumbnail: boolean
4469
+ showInfoIcon: boolean
4470
+ thumbnailUrl: string
4471
+ isAnimatedThumbnail: boolean
4472
+ thumbCssClass: string
4473
+ browseSize: string
4474
+ bandSlots:
4475
+ - slotKey: string
4476
+ slotKind: string
4477
+ slotCssClass: string
4478
+ showMediumSlot: boolean
4479
+ showLargeSlot: boolean
4480
+ showSmallQuad: boolean
4481
+ rowKey: string
4482
+ label: string
4483
+ itemId: string
4484
+ isPickable: boolean
4485
+ showPickable: boolean
4486
+ isItemSelected: boolean
4487
+ cardCssClass: string
4488
+ showImage: boolean
4489
+ showGif: boolean
4490
+ showHtmlFragment: boolean
4491
+ imageUrl: string
4492
+ gifUrl: string
4493
+ posterUrl: string
4494
+ previewHtml: html-string
4495
+ showGifAutoplay: boolean
4496
+ showGifPoster: boolean
4497
+ showGifReducedInfoIcon: boolean
4498
+ showThumbnail: boolean
4499
+ showInfoIcon: boolean
4500
+ thumbnailUrl: string
4501
+ isAnimatedThumbnail: boolean
4502
+ thumbCssClass: string
4503
+ browseSize: string
4504
+ quadRows:
4505
+ - rowKey: string
4506
+ label: string
4507
+ itemId: string
4508
+ isPickable: boolean
4509
+ showPickable: boolean
4510
+ isItemSelected: boolean
4511
+ cardCssClass: string
4512
+ showImage: boolean
4513
+ showGif: boolean
4514
+ showHtmlFragment: boolean
4515
+ imageUrl: string
4516
+ gifUrl: string
4517
+ posterUrl: string
4518
+ previewHtml: html-string
4519
+ showGifAutoplay: boolean
4520
+ showGifPoster: boolean
4521
+ showGifReducedInfoIcon: boolean
4522
+ showThumbnail: boolean
4523
+ showInfoIcon: boolean
4524
+ thumbnailUrl: string
4525
+ isAnimatedThumbnail: boolean
4526
+ thumbCssClass: string
4527
+ browseSize: string
4528
+ showAddMenuDockBreadcrumb: boolean
4529
+ showAddMenuDockFolderGrid: boolean
4530
+ showAddMenuDockEmptyFolder: boolean
4531
+ addMenuDockBrowseBreadcrumbSegments:
4532
+ - segmentKey: string
4533
+ navKey: string
4534
+ label: string
4535
+ isLast: boolean
4536
+ addMenuDockBrowseFolderRows:
3981
4537
  - rowKey: string
3982
- isSectionHeader: boolean
4538
+ navKey: string
4539
+ segment: string
3983
4540
  label: string
3984
- itemId: string
3985
- isPickable: boolean
3986
- showPickable: boolean
3987
- showBrowseOnly: boolean
3988
- isItemSelected: boolean
3989
- cardCssClass: string
3990
- showThumbnail: boolean
3991
- showInfoIcon: boolean
3992
- thumbnailUrl: string
3993
- isAnimatedThumbnail: boolean
3994
- thumbCssClass: string
4541
+ itemCountLabel: string
4542
+ totalItemCount: number
3995
4543
  showAddMenuDockSearchMode: boolean
3996
4544
  addMenuDockSearchSummary: string
3997
4545
  showAssetMentionPanel: boolean
3998
4546
  assetMentionLeft: number
3999
4547
  assetMentionTop: number
4548
+ assetMentionOpensAbove: boolean
4000
4549
  assetMentionHeaderTitle: string
4001
4550
  showAssetMentionHeaderBack: boolean
4002
4551
  showAssetMentionSearchField: boolean
@@ -4017,6 +4566,7 @@ data:
4017
4566
  toastMessage: string
4018
4567
  isPreviewMode: boolean
4019
4568
  previewUrlBar: string
4569
+ previewUrlBarOpenTabDisabled: boolean
4020
4570
  previewLoading: boolean
4021
4571
  previewError: string
4022
4572
  selectedPreviewPath: string
@@ -4083,6 +4633,7 @@ data:
4083
4633
  name: string
4084
4634
  thumbUrl: string
4085
4635
  annotationId: string
4636
+ numberLabel: string
4086
4637
  addMenuSectionOpen: boolean
4087
4638
  showAddMenuControls: boolean
4088
4639
  showMarkerAddMenuChips: boolean
@@ -4119,11 +4670,13 @@ data:
4119
4670
  name: string
4120
4671
  thumbUrl: string
4121
4672
  annotationId: string
4673
+ numberLabel: string
4122
4674
  recordingDraftAttachmentChips:
4123
4675
  - key: string
4124
4676
  name: string
4125
4677
  thumbUrl: string
4126
4678
  annotationId: string
4679
+ numberLabel: string
4127
4680
  showRecordingDraftPopover: boolean
4128
4681
  showVisualAnnotationsPanel: boolean
4129
4682
  showVisualSubmitError: boolean
@@ -4185,6 +4738,7 @@ data:
4185
4738
  name: string
4186
4739
  thumbUrl: string
4187
4740
  annotationId: string
4741
+ numberLabel: string
4188
4742
  addMenuSectionOpen: boolean
4189
4743
  showAddMenuControls: boolean
4190
4744
  showMarkerAddMenuChips: boolean
@@ -4272,6 +4826,7 @@ data:
4272
4826
  name: string
4273
4827
  thumbUrl: string
4274
4828
  annotationId: string
4829
+ numberLabel: string
4275
4830
  addMenuSectionOpen: boolean
4276
4831
  showAddMenuControls: boolean
4277
4832
  showMarkerAddMenuChips: boolean
@@ -4396,12 +4951,24 @@ data:
4396
4951
  briefFillContextNotes: string
4397
4952
  briefFillPopoverError: string
4398
4953
  showBriefFillPopoverError: boolean
4399
- briefFillDisabled: boolean
4954
+ briefFillContentDisabled: boolean
4955
+ briefFillDesignDisabled: boolean
4400
4956
  briefFillInputDisabled: boolean
4401
4957
  briefFillDropzoneClass: string
4402
4958
  addPageBriefFillGenerateDisabled: boolean
4403
- briefFillStatusHint: string
4404
- showBriefFillStatusHint: boolean
4959
+ contentTabGeneratingHint: string
4960
+ designTabGeneratingHint: string
4961
+ showContentTabGeneratingHint: boolean
4962
+ showDesignTabGeneratingHint: boolean
4963
+ contentGenError: string
4964
+ designGenError: string
4965
+ showContentTabGenError: boolean
4966
+ showDesignTabGenError: boolean
4967
+ addPageContentMdDisabled: boolean
4968
+ addPageDesignMdDisabled: boolean
4969
+ addPageReferencesDisabled: boolean
4970
+ addPageReferencesDropzoneClass: string
4971
+ showAddPageDiscardConfirm: boolean
4405
4972
  showBriefFillThumbnails: boolean
4406
4973
  addPageBriefFillThumbRows:
4407
4974
  - rowKey: string
@@ -4495,17 +5062,31 @@ data:
4495
5062
  </div>
4496
5063
  <div class="harmony-routes-panel-body">
4497
5064
  <p class="harmony-routes-panel-empty" if="showPagesPanelEmptySearch">No routes match your search.</p>
4498
- <button
4499
- type="button"
5065
+ <div
4500
5066
  forEach="filteredPageRouteRows"
4501
5067
  trackBy="url"
4502
- class="{cssClass}"
4503
- data-route-url="{url}"
4504
- data-routes-panel-route=""
5068
+ class="{rowCssClass}"
4505
5069
  >
4506
- <span class="harmony-routes-panel-check">{checkGlyph}</span>
4507
- <span class="harmony-routes-panel-item-label">{label}</span>
4508
- </button>
5070
+ <button
5071
+ type="button"
5072
+ class="{cssClass}"
5073
+ data-route-url="{url}"
5074
+ data-routes-panel-route=""
5075
+ >
5076
+ <span class="harmony-routes-panel-check">{checkGlyph}</span>
5077
+ <span class="harmony-routes-panel-item-label">{label}</span>
5078
+ </button>
5079
+ <button
5080
+ type="button"
5081
+ class="harmony-routes-panel-open-tab"
5082
+ data-route-url="{url}"
5083
+ data-routes-panel-open-tab=""
5084
+ aria-label="Open route in new tab"
5085
+ title="Open in new tab"
5086
+ >
5087
+ <span class="harmony-routes-panel-open-tab-icon" aria-hidden="true"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.25 5C11.6642 5 12 5.33579 12 5.75C12 6.16421 11.6642 6.5 11.25 6.5H7C6.72421 6.5 6.5 6.72421 6.5 7V17C6.5 17.2758 6.72421 17.5 7 17.5H17C17.2758 17.5 17.5 17.2758 17.5 17V12.75C17.5 12.3358 17.8358 12 18.25 12C18.6642 12 19 12.3358 19 12.75V17C19 18.1042 18.1042 19 17 19H7C5.89579 19 5 18.1042 5 17V7C5 5.89579 5.89579 5 7 5H11.25Z" fill="currentColor"/><path d="M18.25 5C18.6642 5 19 5.33579 19 5.75V9.25C19 9.66421 18.6642 10 18.25 10C17.8358 10 17.5 9.66421 17.5 9.25V7.56055L15.2803 9.78027C14.9874 10.0732 14.5126 10.0732 14.2197 9.78027C13.9268 9.48738 13.9268 9.01262 14.2197 8.71973L16.4395 6.5H14.75C14.3358 6.5 14 6.16421 14 5.75C14 5.33579 14.3358 5 14.75 5H18.25Z" fill="currentColor"/></svg></span>
5088
+ </button>
5089
+ </div>
4509
5090
  </div>
4510
5091
  </div>
4511
5092
  </div>
@@ -4607,7 +5188,19 @@ data:
4607
5188
  </button>
4608
5189
  </div>
4609
5190
  <div class="url-bar-wrap harmony-url-bar-wrap">
4610
- <div class="url-bar">{previewUrlBar}</div>
5191
+ <div class="url-bar">
5192
+ <span class="url-bar-text">{previewUrlBar}</span>
5193
+ <button
5194
+ type="button"
5195
+ class="url-bar-open-tab"
5196
+ ref="previewUrlBarOpenTabBtn"
5197
+ disabled="previewUrlBarOpenTabDisabled"
5198
+ aria-label="Open preview in new tab"
5199
+ title="Open in new tab"
5200
+ >
5201
+ <span class="harmony-routes-panel-open-tab-icon" aria-hidden="true"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.25 5C11.6642 5 12 5.33579 12 5.75C12 6.16421 11.6642 6.5 11.25 6.5H7C6.72421 6.5 6.5 6.72421 6.5 7V17C6.5 17.2758 6.72421 17.5 7 17.5H17C17.2758 17.5 17.5 17.2758 17.5 17V12.75C17.5 12.3358 17.8358 12 18.25 12C18.6642 12 19 12.3358 19 12.75V17C19 18.1042 18.1042 19 17 19H7C5.89579 19 5 18.1042 5 17V7C5 5.89579 5.89579 5 7 5H11.25Z" fill="currentColor"/><path d="M18.25 5C18.6642 5 19 5.33579 19 5.75V9.25C19 9.66421 18.6642 10 18.25 10C17.8358 10 17.5 9.66421 17.5 9.25V7.56055L15.2803 9.78027C14.9874 10.0732 14.5126 10.0732 14.2197 9.78027C13.9268 9.48738 13.9268 9.01262 14.2197 8.71973L16.4395 6.5H14.75C14.3358 6.5 14 6.16421 14 5.75C14 5.33579 14.3358 5 14.75 5H18.25Z" fill="currentColor"/></svg></span>
5202
+ </button>
5203
+ </div>
4611
5204
  </div>
4612
5205
  <div class="canvas-chrome-right harmony-breakpoint-tools" if="showVisualToolbar">
4613
5206
  <button type="button" class="{breakpointDesktopOn ? visual-tool-on} visual-tool-btn" ref="breakpointDesktopBtn" title="Desktop (1280px)"><svg width="16" height="13" viewBox="0 0 16 13" fill="none"><rect x="0.7" y="0.7" width="14.6" height="9.1" rx="1.1" stroke="currentColor" stroke-width="1.4"/><path d="M5.5 9.8v2M10.5 9.8v2M3.5 11.8h9" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg></button>
@@ -4687,13 +5280,16 @@ data:
4687
5280
  <div class="visual-attachment-chip">
4688
5281
  <img if="thumbUrl" class="visual-attachment-thumb" src="{thumbUrl}" alt="" />
4689
5282
  <span class="visual-attachment-name">{name}</span>
4690
- <button
4691
- type="button"
4692
- class="visual-attachment-remove-file"
4693
- data-annotation-id="{annotationId}"
4694
- data-att-key="{key}"
4695
- aria-label="Remove attachment"
4696
- >×</button>
5283
+ <div class="visual-attachment-chip-actions">
5284
+ <button
5285
+ type="button"
5286
+ class="visual-attachment-remove-file"
5287
+ data-annotation-id="{annotationId}"
5288
+ data-att-key="{key}"
5289
+ aria-label="Remove attachment"
5290
+ >×</button>
5291
+ <span class="visual-attachment-number">{numberLabel}</span>
5292
+ </div>
4697
5293
  </div>
4698
5294
  </div>
4699
5295
  </div>
@@ -4734,13 +5330,16 @@ data:
4734
5330
  <div class="visual-attachment-chip">
4735
5331
  <img if="thumbUrl" class="visual-attachment-thumb" src="{thumbUrl}" alt="" />
4736
5332
  <span class="visual-attachment-name">{name}</span>
4737
- <button
4738
- type="button"
4739
- class="visual-attachment-remove-file"
4740
- data-annotation-id="{annotationId}"
4741
- data-att-key="{key}"
4742
- aria-label="Remove attachment"
4743
- >×</button>
5333
+ <div class="visual-attachment-chip-actions">
5334
+ <button
5335
+ type="button"
5336
+ class="visual-attachment-remove-file"
5337
+ data-annotation-id="{annotationId}"
5338
+ data-att-key="{key}"
5339
+ aria-label="Remove attachment"
5340
+ >×</button>
5341
+ <span class="visual-attachment-number">{numberLabel}</span>
5342
+ </div>
4744
5343
  </div>
4745
5344
  </div>
4746
5345
  </div>
@@ -5012,9 +5611,14 @@ data:
5012
5611
  <div class="add-page-section-label">Content</div>
5013
5612
  <p class="add-page-hint">Behavior, plugins, contracts, interactions, copy.</p>
5014
5613
  <div class="add-page-textarea-wrap">
5015
- <textarea class="add-page-textarea" ref="addPageContentMd" placeholder="# Pricing page&#10;- Headless: none (static marketing page)&#10;- Show 3 tiers: Starter / Pro / Enterprise" value="{addPageContentMd}"></textarea>
5016
- <button type="button" class="add-page-fill-image-btn" ref="addPageFillContentFromImageBtn" title="Fill content from images to inspire the new page — page snapshot, Figma export, or any reference site" aria-label="Fill content from images" disabled="briefFillDisabled"><svg class="add-page-fill-image-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" overflow="visible" aria-hidden="true"><path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z" /><circle cx="12" cy="13" r="3" /></svg></button>
5614
+ <textarea class="add-page-textarea" ref="addPageContentMd" placeholder="# Pricing page&#10;- Headless: none (static marketing page)&#10;- Show 3 tiers: Starter / Pro / Enterprise" value="{addPageContentMd}" disabled="addPageContentMdDisabled"></textarea>
5615
+ <div class="add-page-brief-generating-overlay" if="showContentTabGeneratingHint">
5616
+ <p class="add-page-hint">{contentTabGeneratingHint}</p>
5617
+ <button type="button" class="add-page-btn add-page-btn-cancel add-page-brief-generating-stop" ref="addPageBriefFillStopContentBtn">Stop</button>
5618
+ </div>
5619
+ <button type="button" class="add-page-fill-image-btn" ref="addPageFillContentFromImageBtn" title="Fill content from images to inspire the new page — page snapshot, Figma export, or any reference site" aria-label="Fill content from images" disabled="briefFillContentDisabled"><svg class="add-page-fill-image-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" overflow="visible" aria-hidden="true"><path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z" /><circle cx="12" cy="13" r="3" /></svg></button>
5017
5620
  </div>
5621
+ <p class="add-page-field-error" if="showContentTabGenError">{contentGenError}</p>
5018
5622
  </div>
5019
5623
  </section>
5020
5624
  <section class="add-page-tab-panel" if="showAddPageDesignTab" role="tabpanel">
@@ -5022,21 +5626,26 @@ data:
5022
5626
  <div class="add-page-section-label">Design</div>
5023
5627
  <p class="add-page-hint">Layout, colors, typography, breakpoints.</p>
5024
5628
  <div class="add-page-textarea-wrap">
5025
- <textarea class="add-page-textarea" ref="addPageDesignMd" placeholder="- Match site header from home&#10;- Hero: centered H1, muted subtitle (#888)" value="{addPageDesignMd}"></textarea>
5026
- <button type="button" class="add-page-fill-image-btn" ref="addPageFillDesignFromImageBtn" title="Fill design from images to inspire the new page — page snapshot, Figma export, or any reference site" aria-label="Fill design from images" disabled="briefFillDisabled"><svg class="add-page-fill-image-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" overflow="visible" aria-hidden="true"><path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z" /><circle cx="12" cy="13" r="3" /></svg></button>
5629
+ <textarea class="add-page-textarea" ref="addPageDesignMd" placeholder="- Match site header from home&#10;- Hero: centered H1, muted subtitle (#888)" value="{addPageDesignMd}" disabled="addPageDesignMdDisabled"></textarea>
5630
+ <div class="add-page-brief-generating-overlay" if="showDesignTabGeneratingHint">
5631
+ <p class="add-page-hint">{designTabGeneratingHint}</p>
5632
+ <button type="button" class="add-page-btn add-page-btn-cancel add-page-brief-generating-stop" ref="addPageBriefFillStopDesignBtn">Stop</button>
5633
+ </div>
5634
+ <button type="button" class="add-page-fill-image-btn" ref="addPageFillDesignFromImageBtn" title="Fill design from images to inspire the new page — page snapshot, Figma export, or any reference site" aria-label="Fill design from images" disabled="briefFillDesignDisabled"><svg class="add-page-fill-image-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" overflow="visible" aria-hidden="true"><path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z" /><circle cx="12" cy="13" r="3" /></svg></button>
5027
5635
  </div>
5636
+ <p class="add-page-field-error" if="showDesignTabGenError">{designGenError}</p>
5028
5637
  <p class="add-page-hint" if="addPageShowDesignHint">Add a mock or screenshot for better layout fidelity.</p>
5029
5638
  </div>
5030
5639
  </section>
5031
5640
  <section class="add-page-references">
5032
5641
  <div class="add-page-references-row">
5033
- <div class="add-page-dropzone" ref="addPageReferenceDrop">
5642
+ <div class="{addPageReferencesDropzoneClass}" ref="addPageReferenceDrop">
5034
5643
  <span class="add-page-dropzone-text">Drop <strong>REFERENCES</strong> files here</span>
5035
5644
  <span class="add-page-dropzone-separator">or</span>
5036
- <button type="button" class="add-page-btn add-page-btn-cancel add-page-btn--compact" ref="addPageAttachReferenceBtn">Upload from Computer</button>
5645
+ <button type="button" class="add-page-btn add-page-btn-cancel add-page-btn--compact" ref="addPageAttachReferenceBtn" disabled="addPageReferencesDisabled">Upload from Computer</button>
5037
5646
  </div>
5038
5647
  </div>
5039
- <input type="file" class="add-page-hidden-file" ref="addPageReferenceFileInput" multiple />
5648
+ <input type="file" class="add-page-hidden-file" ref="addPageReferenceFileInput" multiple disabled="addPageReferencesDisabled" />
5040
5649
  <p class="add-page-hint" if="showAddPageUploadHint">{addPageUploadHint}</p>
5041
5650
  <div class="add-page-chips" ref="addPageAttachmentsList" if="showAddPageAttachments">
5042
5651
  <div class="add-page-chip" forEach="addPageAttachmentRows" trackBy="rowKey">
@@ -5060,28 +5669,38 @@ data:
5060
5669
  <button type="button" class="add-page-btn add-page-btn-primary" ref="addPageCreateBtn" disabled="addPageCreateDisabled">Create page</button>
5061
5670
  </div>
5062
5671
  <div class="add-page-brief-fill-popover" if="showBriefFillPopover" ref="addPageBriefFillPopover">
5063
- <div class="add-page-brief-fill-panel">
5064
- <div class="add-page-brief-fill-header">
5065
- <span class="add-page-brief-fill-title">Fill from image</span>
5066
- <button type="button" class="add-page-close" ref="addPageBriefFillCloseBtn" aria-label="Close">×</button>
5067
- </div>
5068
- <p class="add-page-hint">Add at least one screenshot. Optional notes help the AI (e.g. Image 1 = desktop, Image 2 = mobile).</p>
5069
- <label class="add-page-hint">Context notes
5070
- <textarea class="add-page-brief-fill-context" ref="addPageBriefFillContextNotes" placeholder="Route: /pricing&#10;Match header from home&#10;Image 2 = mobile frame" value="{briefFillContextNotes}" disabled="briefFillInputDisabled"></textarea>
5071
- </label>
5072
- <div class="{briefFillDropzoneClass}" ref="addPageBriefFillDropzone" tabindex="0">Paste (⌘V), drag-drop, or click to upload (max 5 images)</div>
5073
- <input type="file" class="add-page-hidden-file" ref="addPageBriefFillFileInput" accept="image/*" multiple disabled="briefFillInputDisabled" />
5074
- <div class="add-page-brief-fill-thumbs" ref="addPageBriefFillThumbnails" if="showBriefFillThumbnails">
5075
- <div class="add-page-brief-fill-thumb" forEach="addPageBriefFillThumbRows" trackBy="rowKey">
5076
- <img src="{thumbUrl}" alt="{name}" />
5077
- <button type="button" class="add-page-brief-fill-thumb-remove" data-brief-fill-remove="{index}" disabled="removeDisabled">×</button>
5672
+ <div class="add-page-brief-fill-popover-stack">
5673
+ <div class="add-page-brief-fill-panel">
5674
+ <div class="add-page-brief-fill-header">
5675
+ <span class="add-page-brief-fill-title">Fill from image</span>
5676
+ <button type="button" class="add-page-close" ref="addPageBriefFillCloseBtn" aria-label="Close">×</button>
5677
+ </div>
5678
+ <p class="add-page-hint">Add at least one screenshot. Optional notes help the AI (e.g. Image 1 = desktop, Image 2 = mobile).</p>
5679
+ <label class="add-page-hint">Context notes
5680
+ <textarea class="add-page-brief-fill-context" ref="addPageBriefFillContextNotes" placeholder="Route: /pricing&#10;Match header from home&#10;Image 2 = mobile frame" value="{briefFillContextNotes}" disabled="briefFillInputDisabled"></textarea>
5681
+ </label>
5682
+ <div class="{briefFillDropzoneClass}" ref="addPageBriefFillDropzone" tabindex="0">Paste (⌘V), drag-drop, or click to upload (max 5 images)</div>
5683
+ <input type="file" class="add-page-hidden-file" ref="addPageBriefFillFileInput" accept="image/*" multiple disabled="briefFillInputDisabled" />
5684
+ <div class="add-page-brief-fill-thumbs" ref="addPageBriefFillThumbnails" if="showBriefFillThumbnails">
5685
+ <div class="add-page-brief-fill-thumb" forEach="addPageBriefFillThumbRows" trackBy="rowKey">
5686
+ <img src="{thumbUrl}" alt="{name}" />
5687
+ <button type="button" class="add-page-brief-fill-thumb-remove" data-brief-fill-remove="{index}" disabled="removeDisabled">×</button>
5688
+ </div>
5689
+ </div>
5690
+ <p class="add-page-field-error" if="showBriefFillPopoverError">{briefFillPopoverError}</p>
5691
+ <div class="add-page-brief-fill-actions">
5692
+ <button type="button" class="add-page-btn add-page-btn-cancel" ref="addPageBriefFillCancelBtn">Cancel</button>
5693
+ <button type="button" class="add-page-btn add-page-btn-primary" ref="addPageBriefFillGenerateBtn" disabled="addPageBriefFillGenerateDisabled" style="flex:0">Generate</button>
5078
5694
  </div>
5079
5695
  </div>
5080
- <p class="add-page-field-error" if="showBriefFillPopoverError">{briefFillPopoverError}</p>
5081
- <p class="add-page-hint" if="showBriefFillStatusHint">{briefFillStatusHint}</p>
5082
- <div class="add-page-brief-fill-actions">
5083
- <button type="button" class="add-page-btn add-page-btn-cancel" ref="addPageBriefFillCancelBtn">Cancel</button>
5084
- <button type="button" class="add-page-btn add-page-btn-primary" ref="addPageBriefFillGenerateBtn" disabled="addPageBriefFillGenerateDisabled" style="flex:0">Generate</button>
5696
+ </div>
5697
+ </div>
5698
+ <div class="add-page-discard-confirm-overlay" if="showAddPageDiscardConfirm" ref="addPageDiscardConfirmOverlay" role="alertdialog" aria-modal="true" aria-live="polite" aria-label="Confirm discard Add Page draft">
5699
+ <div class="add-page-discard-confirm-dialog">
5700
+ <p class="add-page-discard-confirm-msg">Discard Add Page draft? Unsaved content, design notes, and attachments will be lost.</p>
5701
+ <div class="add-page-discard-confirm-actions">
5702
+ <button type="button" class="add-page-btn add-page-btn-cancel" ref="addPageDiscardDismissBtn">Keep editing</button>
5703
+ <button type="button" class="add-page-btn add-page-btn-primary" ref="addPageDiscardConfirmBtn" style="flex:0">Discard</button>
5085
5704
  </div>
5086
5705
  </div>
5087
5706
  </div>
@@ -5185,14 +5804,14 @@ data:
5185
5804
  if="showAddMenuDock"
5186
5805
  ref="addMenuDockPanel"
5187
5806
  role="dialog"
5188
- aria-label="Add elements"
5807
+ aria-label="+ Add Requests"
5189
5808
  style="left: {addMenuDockLeft}px; top: {addMenuDockTop}px;"
5190
5809
  >
5191
5810
  <div class="add-menu-dock-header" ref="addMenuDockHeader">
5192
- <span class="add-menu-dock-title">Add Elements</span>
5811
+ <span class="add-menu-dock-title">+ Add Requests</span>
5193
5812
  <button type="button" class="add-menu-picker-close" ref="addMenuDockCloseBtn" aria-label="Close">×</button>
5194
5813
  </div>
5195
- <p class="add-menu-dock-subhint">Drag elements onto the page preview to place them. Click reference items to add @mentions when a marker is focused.</p>
5814
+ <p class="add-menu-dock-subhint">Browse ready change requests from your plugins. Drag one onto the page preview to mark where it should apply, or click a reference item to @mention it in your instruction.</p>
5196
5815
  <div class="add-menu-dock-body">
5197
5816
  <p class="add-menu-picker-hint" if="showAddMenuDockLoading">Loading catalog…</p>
5198
5817
  <p class="add-menu-picker-hint" if="showAddMenuDockEmpty">No catalog items — install plugins and run setup.</p>
@@ -5222,17 +5841,44 @@ data:
5222
5841
  <button type="button" class="{cssClass}" forEach="addMenuDockSubCategoryFilterRows" trackBy="rowKey" data-add-menu-dock-subcategory="1" data-nav-key="{navKey}"><span>{label}</span><span class="add-menu-picker-subcategory-count" if="showSubCategoryCount">{subCategoryCountLabel}</span></button>
5223
5842
  </div>
5224
5843
  </div>
5225
- <div class="add-menu-picker-browse-content" if="showAddMenuDockComponents">
5226
- <div class="add-menu-picker-browse-row" forEach="addMenuDockBrowseRows" trackBy="rowKey">
5227
- <h3 class="add-menu-picker-section-title" if="isSectionHeader">{label}</h3>
5228
- <button type="button" class="{cardCssClass}" if="showPickable" data-add-menu-dock-item="1" data-item-id="{itemId}" title="{label}" aria-pressed="{isItemSelected}"><span class="add-menu-picker-component-preview" if="showThumbnail"><img class="{thumbCssClass}" src="{thumbnailUrl}" alt="" /></span><span class="add-menu-picker-component-info-icon" if="showInfoIcon" aria-hidden="true">▦</span><span class="add-menu-picker-component-title">{label}</span></button>
5229
- <div class="add-menu-picker-component-card add-menu-picker-component-card--browse-only" if="showBrowseOnly"><span class="add-menu-picker-component-title" title="{label}">{label}</span></div>
5844
+ <div class="add-menu-picker-browse-content" if="showAddMenuDockComponents" ref="addMenuDockBrowseContent">
5845
+ <nav class="add-menu-folder-breadcrumb" if="showAddMenuDockBreadcrumb" aria-label="Folder path">
5846
+ <span forEach="addMenuDockBrowseBreadcrumbSegments" trackBy="segmentKey">
5847
+ <button type="button" class="add-menu-folder-breadcrumb-segment" if="!isLast" data-add-menu-dock-breadcrumb="1" data-nav-key="{navKey}">{label}</button>
5848
+ <span class="add-menu-folder-breadcrumb-sep" if="!isLast">›</span>
5849
+ <span class="add-menu-folder-breadcrumb-current" if="isLast">{label}</span>
5850
+ </span>
5851
+ </nav>
5852
+ <div class="add-menu-folder-grid" if="showAddMenuDockFolderGrid">
5853
+ <button type="button" class="add-menu-folder-card" forEach="addMenuDockBrowseFolderRows" trackBy="rowKey" data-add-menu-dock-folder-nav="1" data-nav-key="{navKey}" title="{label} ({itemCountLabel})">
5854
+ <span class="add-menu-folder-card-preview" aria-hidden="true"><svg width="52" height="52" fill="none" xmlns="http://www.w3.org/2000/svg"><path transform="translate(-1,2) translate(-4.5,-5.5) scale(4)" d="M8.69043 6C9.30186 6.00015 9.86718 6.31743 10.1836 6.84473L10.8828 8.00098H16.2402C17.2043 8.0011 17.9902 8.78684 17.9902 9.75098V17.1914C17.9953 17.2112 18 17.2307 18 17.251C17.9997 17.665 17.6641 18.001 17.25 18.001H6.75C5.78595 18.001 5.00027 17.215 5 16.251V7.75098C5 6.78676 5.78579 6 6.75 6H8.69043Z" fill="#5aa8f0"/></svg></span>
5855
+ <span class="add-menu-folder-card-label">{label}</span>
5856
+ <span class="add-menu-folder-card-count">{itemCountLabel}</span>
5857
+ </button>
5858
+ </div>
5859
+ <div class="add-menu-picker-browse-block" forEach="addMenuDockBrowseBlocks" trackBy="blockKey">
5860
+ <h3 class="add-menu-picker-section-title" if="showSectionHeader">{sectionLabel}</h3>
5861
+ <div if="showBand" class="{bandCssClass}">
5862
+ <div forEach="stripCells" trackBy="rowKey">
5863
+ <button type="button" class="{cardCssClass}" if="showPickable" data-add-menu-dock-item="1" data-item-id="{itemId}" title="{label}" aria-pressed="{isItemSelected}"><span class="add-menu-picker-component-preview" if="showImage"><img class="{thumbCssClass}" src="{imageUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifAutoplay"><img class="add-menu-picker-component-thumb add-menu-picker-component-thumb--gif" src="{gifUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifPoster"><img class="add-menu-picker-component-thumb" src="{posterUrl}" alt="" /></span><div class="add-menu-picker-component-preview add-menu-picker-component-preview--html" if="showHtmlFragment">{previewHtml}</div><span class="add-menu-picker-component-info-icon" if="showInfoIcon" aria-hidden="true">▦</span><span class="add-menu-picker-component-title">{label}</span></button>
5864
+ </div>
5865
+ <div forEach="bandSlots" trackBy="slotKey" class="{slotCssClass}">
5866
+ <button type="button" class="{cardCssClass}" if="showMediumSlot" data-add-menu-dock-item="1" data-item-id="{itemId}" title="{label}" aria-pressed="{isItemSelected}"><span class="add-menu-picker-component-preview" if="showImage"><img class="{thumbCssClass}" src="{imageUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifAutoplay"><img class="add-menu-picker-component-thumb add-menu-picker-component-thumb--gif" src="{gifUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifPoster"><img class="add-menu-picker-component-thumb" src="{posterUrl}" alt="" /></span><div class="add-menu-picker-component-preview add-menu-picker-component-preview--html" if="showHtmlFragment">{previewHtml}</div><span class="add-menu-picker-component-info-icon" if="showInfoIcon" aria-hidden="true">▦</span><span class="add-menu-picker-component-title">{label}</span></button>
5867
+ <button type="button" class="{cardCssClass}" if="showLargeSlot" data-add-menu-dock-item="1" data-item-id="{itemId}" title="{label}" aria-pressed="{isItemSelected}"><span class="add-menu-picker-component-preview" if="showImage"><img class="{thumbCssClass}" src="{imageUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifAutoplay"><img class="add-menu-picker-component-thumb add-menu-picker-component-thumb--gif" src="{gifUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifPoster"><img class="add-menu-picker-component-thumb" src="{posterUrl}" alt="" /></span><div class="add-menu-picker-component-preview add-menu-picker-component-preview--html" if="showHtmlFragment">{previewHtml}</div><span class="add-menu-picker-component-info-icon" if="showInfoIcon" aria-hidden="true">▦</span><span class="add-menu-picker-component-title">{label}</span></button>
5868
+ <div class="add-menu-browse-quad" if="showSmallQuad">
5869
+ <div forEach="quadRows" trackBy="rowKey">
5870
+ <button type="button" class="{cardCssClass}" if="showPickable" data-add-menu-dock-item="1" data-item-id="{itemId}" title="{label}" aria-pressed="{isItemSelected}"><span class="add-menu-picker-component-preview" if="showImage"><img class="{thumbCssClass}" src="{imageUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifAutoplay"><img class="add-menu-picker-component-thumb add-menu-picker-component-thumb--gif" src="{gifUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifPoster"><img class="add-menu-picker-component-thumb" src="{posterUrl}" alt="" /></span><div class="add-menu-picker-component-preview add-menu-picker-component-preview--html" if="showHtmlFragment">{previewHtml}</div><span class="add-menu-picker-component-info-icon" if="showInfoIcon" aria-hidden="true">▦</span><span class="add-menu-picker-component-title">{label}</span></button>
5871
+ </div>
5872
+ </div>
5873
+ </div>
5874
+ </div>
5230
5875
  </div>
5231
5876
  <div class="add-menu-picker-load-more-row" if="showAddMenuDockLoadMore">
5232
5877
  <button type="button" class="harmony-btn-secondary add-menu-picker-load-more-btn" data-add-menu-dock-load-more="1">{addMenuDockLoadMoreLabel}</button>
5233
5878
  </div>
5234
5879
  </div>
5235
5880
  <p class="add-menu-picker-hint" if="showAddMenuDockNoComponents">No components in this group.</p>
5881
+ <p class="add-menu-picker-hint" if="showAddMenuDockEmptyFolder">No items in this folder.</p>
5236
5882
  <p class="add-menu-picker-hint" if="showAddMenuDockNoSearchResults">No elements match your search.</p>
5237
5883
  </div>
5238
5884
  </div>
@@ -5243,7 +5889,7 @@ data:
5243
5889
  <div class="aiditor-toast" if="showToastMessage" role="status" aria-live="polite">{toastMessage}</div>
5244
5890
 
5245
5891
  <div
5246
- class="asset-mention-autocomplete"
5892
+ class="{assetMentionOpensAbove ? asset-mention-autocomplete--above} asset-mention-autocomplete"
5247
5893
  if="showAssetMentionPanel"
5248
5894
  ref="assetMentionPanel"
5249
5895
  role="listbox"
@@ -5354,17 +6000,44 @@ data:
5354
6000
  </div>
5355
6001
  <button type="button" class="add-menu-picker-subcategory-scroll-btn" if="showAddMenuPickerSubCategoryScrollNext" data-add-menu-picker-subcategory-scroll="1" data-direction="next" aria-label="Scroll filters right">›</button>
5356
6002
  </div>
5357
- <div class="add-menu-picker-browse-content" if="showAddMenuPickerComponents">
5358
- <div class="add-menu-picker-browse-row" forEach="addMenuPickerBrowseRows" trackBy="rowKey">
5359
- <h3 class="add-menu-picker-section-title" if="isSectionHeader">{label}</h3>
5360
- <button type="button" class="{cardCssClass}" if="showPickable" data-add-menu-picker-item="1" data-item-id="{itemId}" title="{label}" aria-pressed="{isItemSelected}"><span class="add-menu-picker-component-preview" if="showThumbnail"><img class="{thumbCssClass}" src="{thumbnailUrl}" alt="" /></span><span class="add-menu-picker-component-info-icon" if="showInfoIcon" aria-hidden="true">▦</span><span class="add-menu-picker-component-title">{label}</span></button>
5361
- <div class="add-menu-picker-component-card add-menu-picker-component-card--browse-only" if="showBrowseOnly"><span class="add-menu-picker-component-title" title="{label}">{label}</span></div>
6003
+ <div class="add-menu-picker-browse-content" if="showAddMenuPickerComponents" ref="addMenuPickerBrowseContent">
6004
+ <nav class="add-menu-folder-breadcrumb" if="showAddMenuPickerBreadcrumb" aria-label="Folder path">
6005
+ <span forEach="addMenuPickerBrowseBreadcrumbSegments" trackBy="segmentKey">
6006
+ <button type="button" class="add-menu-folder-breadcrumb-segment" if="!isLast" data-add-menu-picker-breadcrumb="1" data-nav-key="{navKey}">{label}</button>
6007
+ <span class="add-menu-folder-breadcrumb-sep" if="!isLast">›</span>
6008
+ <span class="add-menu-folder-breadcrumb-current" if="isLast">{label}</span>
6009
+ </span>
6010
+ </nav>
6011
+ <div class="add-menu-folder-grid" if="showAddMenuPickerFolderGrid">
6012
+ <button type="button" class="add-menu-folder-card" forEach="addMenuPickerBrowseFolderRows" trackBy="rowKey" data-add-menu-picker-folder-nav="1" data-nav-key="{navKey}" title="{label} ({itemCountLabel})">
6013
+ <span class="add-menu-folder-card-preview" aria-hidden="true"><svg width="52" height="52" fill="none" xmlns="http://www.w3.org/2000/svg"><path transform="translate(-1,2) translate(-4.5,-5.5) scale(4)" d="M8.69043 6C9.30186 6.00015 9.86718 6.31743 10.1836 6.84473L10.8828 8.00098H16.2402C17.2043 8.0011 17.9902 8.78684 17.9902 9.75098V17.1914C17.9953 17.2112 18 17.2307 18 17.251C17.9997 17.665 17.6641 18.001 17.25 18.001H6.75C5.78595 18.001 5.00027 17.215 5 16.251V7.75098C5 6.78676 5.78579 6 6.75 6H8.69043Z" fill="#5aa8f0"/></svg></span>
6014
+ <span class="add-menu-folder-card-label">{label}</span>
6015
+ <span class="add-menu-folder-card-count">{itemCountLabel}</span>
6016
+ </button>
6017
+ </div>
6018
+ <div class="add-menu-picker-browse-block" forEach="addMenuPickerBrowseBlocks" trackBy="blockKey">
6019
+ <h3 class="add-menu-picker-section-title" if="showSectionHeader">{sectionLabel}</h3>
6020
+ <div if="showBand" class="{bandCssClass}">
6021
+ <div forEach="stripCells" trackBy="rowKey">
6022
+ <button type="button" class="{cardCssClass}" if="showPickable" data-add-menu-picker-item="1" data-item-id="{itemId}" title="{label}" aria-pressed="{isItemSelected}"><span class="add-menu-picker-component-preview" if="showImage"><img class="{thumbCssClass}" src="{imageUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifAutoplay"><img class="add-menu-picker-component-thumb add-menu-picker-component-thumb--gif" src="{gifUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifPoster"><img class="add-menu-picker-component-thumb" src="{posterUrl}" alt="" /></span><div class="add-menu-picker-component-preview add-menu-picker-component-preview--html" if="showHtmlFragment">{previewHtml}</div><span class="add-menu-picker-component-info-icon" if="showInfoIcon" aria-hidden="true">▦</span><span class="add-menu-picker-component-title">{label}</span></button>
6023
+ </div>
6024
+ <div forEach="bandSlots" trackBy="slotKey" class="{slotCssClass}">
6025
+ <button type="button" class="{cardCssClass}" if="showMediumSlot" data-add-menu-picker-item="1" data-item-id="{itemId}" title="{label}" aria-pressed="{isItemSelected}"><span class="add-menu-picker-component-preview" if="showImage"><img class="{thumbCssClass}" src="{imageUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifAutoplay"><img class="add-menu-picker-component-thumb add-menu-picker-component-thumb--gif" src="{gifUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifPoster"><img class="add-menu-picker-component-thumb" src="{posterUrl}" alt="" /></span><div class="add-menu-picker-component-preview add-menu-picker-component-preview--html" if="showHtmlFragment">{previewHtml}</div><span class="add-menu-picker-component-info-icon" if="showInfoIcon" aria-hidden="true">▦</span><span class="add-menu-picker-component-title">{label}</span></button>
6026
+ <button type="button" class="{cardCssClass}" if="showLargeSlot" data-add-menu-picker-item="1" data-item-id="{itemId}" title="{label}" aria-pressed="{isItemSelected}"><span class="add-menu-picker-component-preview" if="showImage"><img class="{thumbCssClass}" src="{imageUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifAutoplay"><img class="add-menu-picker-component-thumb add-menu-picker-component-thumb--gif" src="{gifUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifPoster"><img class="add-menu-picker-component-thumb" src="{posterUrl}" alt="" /></span><div class="add-menu-picker-component-preview add-menu-picker-component-preview--html" if="showHtmlFragment">{previewHtml}</div><span class="add-menu-picker-component-info-icon" if="showInfoIcon" aria-hidden="true">▦</span><span class="add-menu-picker-component-title">{label}</span></button>
6027
+ <div class="add-menu-browse-quad" if="showSmallQuad">
6028
+ <div forEach="quadRows" trackBy="rowKey">
6029
+ <button type="button" class="{cardCssClass}" if="showPickable" data-add-menu-picker-item="1" data-item-id="{itemId}" title="{label}" aria-pressed="{isItemSelected}"><span class="add-menu-picker-component-preview" if="showImage"><img class="{thumbCssClass}" src="{imageUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifAutoplay"><img class="add-menu-picker-component-thumb add-menu-picker-component-thumb--gif" src="{gifUrl}" alt="" /></span><span class="add-menu-picker-component-preview" if="showGifPoster"><img class="add-menu-picker-component-thumb" src="{posterUrl}" alt="" /></span><div class="add-menu-picker-component-preview add-menu-picker-component-preview--html" if="showHtmlFragment">{previewHtml}</div><span class="add-menu-picker-component-info-icon" if="showInfoIcon" aria-hidden="true">▦</span><span class="add-menu-picker-component-title">{label}</span></button>
6030
+ </div>
6031
+ </div>
6032
+ </div>
6033
+ </div>
5362
6034
  </div>
5363
6035
  <div class="add-menu-picker-load-more-row" if="showAddMenuPickerLoadMore">
5364
6036
  <button type="button" class="harmony-btn-secondary add-menu-picker-load-more-btn" data-add-menu-picker-load-more="1">{addMenuPickerLoadMoreLabel}</button>
5365
6037
  </div>
5366
6038
  </div>
5367
6039
  <p class="add-menu-picker-hint" if="showAddMenuPickerNoComponents">No components in this group.</p>
6040
+ <p class="add-menu-picker-hint" if="showAddMenuPickerEmptyFolder">No items in this folder.</p>
5368
6041
  <p class="add-menu-picker-hint" if="showAddMenuPickerNoSearchResults">No elements match your search.</p>
5369
6042
  </div>
5370
6043
  </div>
@@ -5405,7 +6078,7 @@ data:
5405
6078
  <div class="video-review-header">
5406
6079
  <div>
5407
6080
  <h2 class="video-review-title">Review recording</h2>
5408
- <p class="video-review-meta" if="videoReviewReady">{videoTimeLabel}</p>
6081
+ <p class="video-review-subtitle">Pause, mark spots on the frame, and add a short comment for each.</p>
5409
6082
  </div>
5410
6083
  <button type="button" class="harmony-modal-close" ref="videoReviewCloseBtn" aria-label="Close"><svg width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"><path d="M11.0214 0.219132C10.7292 -0.0730476 10.2555 -0.0730476 9.96334 0.219132L5.69238 4.49009L1.42142 0.219132C1.12924 -0.0730477 0.655524 -0.0730475 0.363345 0.219132C0.0743381 0.508139 0.0707425 0.97559 0.355269 1.26901L4.64238 5.69009L0.217383 10.1151C-0.0725663 10.405 -0.0725667 10.8751 0.217383 11.1651C0.507332 11.455 0.977433 11.455 1.26738 11.1651L5.69238 6.74009L10.1174 11.1651C10.4073 11.455 10.8774 11.455 11.1674 11.1651C11.4573 10.8751 11.4573 10.405 11.1674 10.1151L6.74238 5.69009L11.0295 1.26901C11.314 0.97559 11.3104 0.508138 11.0214 0.219132Z" fill="currentColor"/></svg></button>
5411
6084
  </div>
@@ -5413,12 +6086,14 @@ data:
5413
6086
  <p class="preview-error" if="videoReviewError">{videoReviewErrorText}</p>
5414
6087
  <!-- Must mount while preparing: refs.videoReviewPlayer must exist before videoReviewReady flips true. -->
5415
6088
  <div class="video-review-body" if="videoReviewPreparing || videoReviewReady">
5416
- <div class="video-review-tools">
5417
- <button type="button" class="{videoModalToolPointOn ? visual-tool-on} visual-tool-btn" ref="videoModalToolPointBtn" title="Add a point marker" aria-label="Add a point marker"><span class="tool-glyph" aria-hidden="true">⊚</span></button>
5418
- <button type="button" class="{videoModalToolAreaOn ? visual-tool-on} visual-tool-btn" ref="videoModalToolAreaBtn" title="Add an area marker" aria-label="Add an area marker"><span class="tool-glyph" aria-hidden="true">▢</span></button>
5419
- </div>
5420
6089
  <input type="file" class="file-input-hidden" ref="videoReviewAttachFileInput" multiple />
5421
6090
  <div class="preview-frame-wrap video-review-capture-root" ref="videoReviewCaptureRoot">
6091
+ <div class="video-review-toolbar-wrap">
6092
+ <div class="annotate-dock preview-visual-tools">
6093
+ <button type="button" class="{videoModalToolPointOn ? visual-tool-on} visual-tool-btn" ref="videoModalToolPointBtn" title="Add a point marker" aria-label="Add a point marker"><span class="tool-glyph" aria-hidden="true">⊚</span></button>
6094
+ <button type="button" class="{videoModalToolAreaOn ? visual-tool-on} visual-tool-btn" ref="videoModalToolAreaBtn" title="Add an area marker" aria-label="Add an area marker"><span class="tool-glyph" aria-hidden="true">▢</span></button>
6095
+ </div>
6096
+ </div>
5422
6097
  <video
5423
6098
  class="preview-frame"
5424
6099
  ref="videoReviewPlayer"
@@ -5499,13 +6174,16 @@ data:
5499
6174
  <div class="visual-attachment-chip">
5500
6175
  <img if="thumbUrl" class="visual-attachment-thumb" src="{thumbUrl}" alt="" />
5501
6176
  <span class="visual-attachment-name">{name}</span>
5502
- <button
5503
- type="button"
5504
- class="visual-attachment-remove-file"
5505
- data-annotation-id="{annotationId}"
5506
- data-att-key="{key}"
5507
- aria-label="Remove attachment"
5508
- >×</button>
6177
+ <div class="visual-attachment-chip-actions">
6178
+ <button
6179
+ type="button"
6180
+ class="visual-attachment-remove-file"
6181
+ data-annotation-id="{annotationId}"
6182
+ data-att-key="{key}"
6183
+ aria-label="Remove attachment"
6184
+ >×</button>
6185
+ <span class="visual-attachment-number">{numberLabel}</span>
6186
+ </div>
5509
6187
  </div>
5510
6188
  </div>
5511
6189
  </div>
@@ -5522,19 +6200,20 @@ data:
5522
6200
  <div class="video-review-transport">
5523
6201
  <button type="button" class="video-play-pause-btn" ref="videoPlayPauseBtn" title="Play or pause" aria-label="Play or pause">{videoPlayPauseGlyph}</button>
5524
6202
  <div class="video-timeline-wrap" ref="videoReviewTimelineWrap">
5525
- <input type="range" class="video-timeline" ref="videoTimeline" min="0" max="1000" value="0" step="1" />
5526
- <div class="video-timeline-markers" if="showVideoAnnotationsPanel">
5527
- <span
5528
- class="video-timeline-marker"
5529
- forEach="videoTimelineMarkers"
5530
- trackBy="key"
5531
- data-aiditor-timeline-marker=""
5532
- data-time-sec="{timeSec}"
5533
- style="left: {leftPct}%;"
5534
- title="{label}"
5535
- ></span>
5536
- </div>
6203
+ <input type="range" class="video-timeline" ref="videoTimeline" min="0" max="1000" value="0" step="1" />
6204
+ <div class="video-timeline-markers" if="showVideoAnnotationsPanel">
6205
+ <span
6206
+ class="video-timeline-marker"
6207
+ forEach="videoTimelineMarkers"
6208
+ trackBy="key"
6209
+ data-aiditor-timeline-marker=""
6210
+ data-time-sec="{timeSec}"
6211
+ style="left: {leftPct}%;"
6212
+ title="{label}"
6213
+ ></span>
6214
+ </div>
5537
6215
  </div>
6216
+ <span class="video-review-time" if="videoReviewReady">{videoTimeLabel}</span>
5538
6217
  </div>
5539
6218
  <p class="visual-submit-error" if="showVideoSubmitError">{videoSubmitError}</p>
5540
6219
  <p class="visual-submit-progress" if="showVideoSubmitProgress">{videoSubmitProgress}</p>
@@ -5640,13 +6319,16 @@ data:
5640
6319
  <div class="visual-attachment-chip">
5641
6320
  <img if="thumbUrl" class="visual-attachment-thumb" src="{thumbUrl}" alt="" />
5642
6321
  <span class="visual-attachment-name">{name}</span>
5643
- <button
5644
- type="button"
5645
- class="visual-attachment-remove-file"
5646
- data-annotation-id="{annotationId}"
5647
- data-att-key="{key}"
5648
- aria-label="Remove attachment"
5649
- >×</button>
6322
+ <div class="visual-attachment-chip-actions">
6323
+ <button
6324
+ type="button"
6325
+ class="visual-attachment-remove-file"
6326
+ data-annotation-id="{annotationId}"
6327
+ data-att-key="{key}"
6328
+ aria-label="Remove attachment"
6329
+ >×</button>
6330
+ <span class="visual-attachment-number">{numberLabel}</span>
6331
+ </div>
5650
6332
  </div>
5651
6333
  </div>
5652
6334
  </div>