@dickpy/dsh-imagegen 1.5.4 → 1.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -485,7 +485,7 @@ window.__ModuleLoader__.load({
485
485
  "canvas.untitled": "未命名画布",
486
486
  "canvas.imageNode": "图片节点",
487
487
  "canvas.textNode": "文本节点",
488
- "canvas.fromGallery": "画廊图片",
488
+ "canvas.fromGallery": "素材库图片",
489
489
  "canvas.fromHistory": "历史图片",
490
490
  "canvas.project": "画布项目",
491
491
  "canvas.newCanvas": "新建画布",
@@ -493,7 +493,15 @@ window.__ModuleLoader__.load({
493
493
  "canvas.deleteCanvasConfirm": "再点一次确认删除",
494
494
  "canvas.rename": "重命名画布",
495
495
  "canvas.renameHint": "双击重命名",
496
- "canvas.background": "切换画布背景",
496
+ "canvas.background": "画布背景",
497
+ "canvas.backgroundDots": "点阵",
498
+ "canvas.backgroundLines": "网格线",
499
+ "canvas.backgroundDiagonal": "斜线",
500
+ "canvas.backgroundChecker": "棋盘格",
501
+ "canvas.backgroundBlank": "空白",
502
+ "canvas.backgroundUpload": "上传自定义背景…",
503
+ "canvas.backgroundRemove": "移除自定义背景",
504
+ "canvas.templateLibrary": "模板库(选择提示词生成文本+配置节点)",
497
505
  "canvas.undo": "撤销 (Ctrl+Z)",
498
506
  "canvas.redo": "重做 (Ctrl+Shift+Z)",
499
507
  "canvas.saving": "保存中…",
@@ -514,6 +522,7 @@ window.__ModuleLoader__.load({
514
522
  "canvas.generatingNode": "生成中…",
515
523
  "canvas.generateFailed": "生成失败",
516
524
  "canvas.retry": "重试",
525
+ "canvas.taskLost": "生成任务已丢失(服务重启),请重试",
517
526
  "canvas.emptyImageNode": "点击上传图片",
518
527
  "canvas.connectHint": "拖到其他节点建立连线",
519
528
  "canvas.resizeHint": "拖动调整大小(图片锁定比例)",
@@ -542,7 +551,11 @@ window.__ModuleLoader__.load({
542
551
  "canvas.close": "关闭",
543
552
  "canvas.tabUpload": "上传",
544
553
  "canvas.tabHistory": "历史记录",
545
- "canvas.tabGallery": "画廊",
554
+ "canvas.tabGallery": "素材库",
555
+ "canvas.imageMenuUpload": "上传本地图片",
556
+ "canvas.imageMenuAssets": "从素材库选择",
557
+ "canvas.imageMenuHistory": "从历史记录选择",
558
+ "canvas.imageMenuGenerate": "AI 生成新图",
546
559
  "canvas.tabGenerate": "AI 生成",
547
560
  "canvas.dropHint": "图片拖动到此处即可添加",
548
561
  "canvas.dropSub": "支持多选,PNG / JPG / WebP / GIF",
@@ -687,14 +700,18 @@ window.__ModuleLoader__.load({
687
700
  "history.ratio": "比例筛选",
688
701
  "history.allModels": "全部模型",
689
702
  "history.allRatios": "全部比例",
690
- "gallery.title": "画廊",
703
+ "gallery.title": "素材库",
691
704
  "gallery.categories": "分类",
692
- "gallery.all": "全部作品",
705
+ "gallery.all": "全部素材",
706
+ "gallery.upload": "上传素材",
707
+ "gallery.uploadModel": "本地上传",
708
+ "gallery.uploaded": "素材已入库",
709
+ "gallery.uploadHint": "把本地图保存进素材库,画布随时可用",
693
710
  "gallery.gpt": "gpt-image-2",
694
711
  "gallery.grok": "grok-imagine-image",
695
712
  "gallery.ratio": "画面比例",
696
713
  "gallery.tags": "标签",
697
- "gallery.filterHint": "按生成模式、模型和比例筛选画廊",
714
+ "gallery.filterHint": "按生成模式、模型和比例筛选素材",
698
715
  "gallery.count": "· 共 {count} 幅",
699
716
  "gallery.viewMode": "视图模式",
700
717
  "gallery.masonry": "瀑布流",
@@ -716,16 +733,16 @@ window.__ModuleLoader__.load({
716
733
  "gallery.downloadSelected": "下载所选",
717
734
  "gallery.exportJson": "导出 JSON",
718
735
  "gallery.select": "选择作品",
719
- "gallery.add": "加入画廊",
720
- "gallery.added": "已加入画廊",
721
- "gallery.already": "已在画廊中",
722
- "gallery.delete": "移出画廊",
736
+ "gallery.add": "加入素材库",
737
+ "gallery.added": "已加入素材库",
738
+ "gallery.already": "已在素材库中",
739
+ "gallery.delete": "移出素材库",
723
740
  "gallery.openFolder": "打开文件夹",
724
- "gallery.clear": "清空画廊",
741
+ "gallery.clear": "清空素材库",
725
742
  "gallery.openFolderHint": "在系统的文件管理器中打开图片保存目录(~/.dsh/dsh-imagegen)",
726
- "gallery.clearConfirm": "确定要清空整个画廊吗?此操作不可撤销。",
727
- "gallery.empty": "画廊还是空的,把喜欢的图片加入进来吧",
728
- "gallery.viewing": "画廊 · {time}",
743
+ "gallery.clearConfirm": "确定要清空整个素材库吗?此操作不可撤销。",
744
+ "gallery.empty": "素材库还是空的,把喜欢的图片加入进来吧",
745
+ "gallery.viewing": "素材库 · {time}",
729
746
  "preview.title": "图片预览",
730
747
  "preview.open": "点击预览",
731
748
  "preview.close": "关闭",
@@ -782,6 +799,8 @@ window.__ModuleLoader__.load({
782
799
  "settings.removeModel": "移除模型",
783
800
  "settings.optional": "可选",
784
801
  "settings.moreOptions": "更多设置",
802
+ "settings.localStoragePath": "本地图片存储目录",
803
+ "settings.localStoragePathHint": "生成历史、素材库和无限画布图片统一保存到此目录;留空使用默认的 ~/.dsh/dsh-imagegen。",
785
804
  "settings.storageTitle": "对象存储同步",
786
805
  "settings.storageEnabled": "启用对象存储同步",
787
806
  "settings.storageHint": "图片保存到本地后,异步上传一份到 S3 兼容对象存储(腾讯云 COS / 阿里云 OSS / 七牛云 S3 / MinIO / R2 等)",
@@ -795,8 +814,8 @@ window.__ModuleLoader__.load({
795
814
  "settings.storageAccessKeyHint": "S3 兼容密钥 ID(COS SecretId / OSS AccessKeyId / 七牛 AK)",
796
815
  "settings.storageSecretKey": "Secret Key",
797
816
  "settings.storageSecretKeyHint": "S3 兼容密钥,仅保存在本机设置文档",
798
- "settings.storageSyncGallery": "同步画廊图片",
799
- "settings.storageSyncGalleryHint": "加入画廊的图片自动上传",
817
+ "settings.storageSyncGallery": "同步素材库图片",
818
+ "settings.storageSyncGalleryHint": "加入素材库的图片自动上传",
800
819
  "settings.storageSyncHistory": "同步历史记录图片",
801
820
  "settings.storageSyncHistoryHint": "所有生成结果也一并上传(数量可能较大)",
802
821
  "settings.storageTest": "测试连接",
@@ -894,7 +913,7 @@ window.__ModuleLoader__.load({
894
913
  "channels.statusIncomplete": "配置未完成",
895
914
  "channels.edit": "编辑",
896
915
  "channels.delete": "删除",
897
- "channels.deleteConfirmTitle": "删除渠道「{name}」?该渠道的密钥将被移除;历史与画廊中的记录仍会保留。",
916
+ "channels.deleteConfirmTitle": "删除渠道「{name}」?该渠道的密钥将被移除;历史与素材库中的记录仍会保留。",
898
917
  "channels.confirm": "确认删除",
899
918
  "channels.cancel": "取消",
900
919
  "channels.editorTitle": "渠道",
@@ -965,7 +984,15 @@ window.__ModuleLoader__.load({
965
984
  "canvas.deleteCanvasConfirm": "Click again to confirm",
966
985
  "canvas.rename": "Rename canvas",
967
986
  "canvas.renameHint": "Double-click to rename",
968
- "canvas.background": "Cycle canvas background",
987
+ "canvas.background": "Canvas background",
988
+ "canvas.backgroundDots": "Dots",
989
+ "canvas.backgroundLines": "Grid lines",
990
+ "canvas.backgroundDiagonal": "Diagonal",
991
+ "canvas.backgroundChecker": "Checkerboard",
992
+ "canvas.backgroundBlank": "Blank",
993
+ "canvas.backgroundUpload": "Upload custom background…",
994
+ "canvas.backgroundRemove": "Remove custom background",
995
+ "canvas.templateLibrary": "Template library (pick a prompt to create text + config nodes)",
969
996
  "canvas.undo": "Undo (Ctrl+Z)",
970
997
  "canvas.redo": "Redo (Ctrl+Shift+Z)",
971
998
  "canvas.saving": "Saving…",
@@ -986,6 +1013,7 @@ window.__ModuleLoader__.load({
986
1013
  "canvas.generatingNode": "Generating…",
987
1014
  "canvas.generateFailed": "Generation failed",
988
1015
  "canvas.retry": "Retry",
1016
+ "canvas.taskLost": "Generation task lost (service restarted); please retry",
989
1017
  "canvas.emptyImageNode": "Click to upload an image",
990
1018
  "canvas.connectHint": "Drag onto another node to connect",
991
1019
  "canvas.resizeHint": "Drag to resize (image ratio locked)",
@@ -1014,7 +1042,11 @@ window.__ModuleLoader__.load({
1014
1042
  "canvas.close": "Close",
1015
1043
  "canvas.tabUpload": "Upload",
1016
1044
  "canvas.tabHistory": "History",
1017
- "canvas.tabGallery": "Gallery",
1045
+ "canvas.tabGallery": "Assets",
1046
+ "canvas.imageMenuUpload": "Upload local image",
1047
+ "canvas.imageMenuAssets": "Pick from assets",
1048
+ "canvas.imageMenuHistory": "Pick from history",
1049
+ "canvas.imageMenuGenerate": "Generate with AI",
1018
1050
  "canvas.tabGenerate": "AI generate",
1019
1051
  "canvas.dropHint": "Drop images here to add them",
1020
1052
  "canvas.dropSub": "Multiple files, PNG / JPG / WebP / GIF",
@@ -1159,9 +1191,13 @@ window.__ModuleLoader__.load({
1159
1191
  "history.ratio": "Ratio filter",
1160
1192
  "history.allModels": "All models",
1161
1193
  "history.allRatios": "All ratios",
1162
- "gallery.title": "Gallery",
1194
+ "gallery.title": "Assets",
1163
1195
  "gallery.categories": "Categories",
1164
- "gallery.all": "All works",
1196
+ "gallery.all": "All assets",
1197
+ "gallery.upload": "Upload",
1198
+ "gallery.uploadModel": "Local upload",
1199
+ "gallery.uploaded": "Asset saved",
1200
+ "gallery.uploadHint": "Save local images for reuse on the canvas",
1165
1201
  "gallery.gpt": "gpt-image-2",
1166
1202
  "gallery.grok": "grok-imagine-image",
1167
1203
  "gallery.ratio": "Aspect ratio",
@@ -1254,6 +1290,8 @@ window.__ModuleLoader__.load({
1254
1290
  "settings.removeModel": "Remove model",
1255
1291
  "settings.optional": "Optional",
1256
1292
  "settings.moreOptions": "More settings",
1293
+ "settings.localStoragePath": "Local image storage directory",
1294
+ "settings.localStoragePathHint": "History, assets and canvas images share this directory; leave empty for the default ~/.dsh/dsh-imagegen.",
1257
1295
  "settings.storageTitle": "Object storage sync",
1258
1296
  "settings.storageEnabled": "Enable object storage sync",
1259
1297
  "settings.storageHint": "After images land locally, mirror them to an S3-compatible store (Tencent COS / Alibaba OSS / Qiniu S3 / MinIO / R2 …)",
@@ -1438,7 +1476,15 @@ window.__ModuleLoader__.load({
1438
1476
  "canvas.deleteCanvasConfirm": "Нажмите ещё раз для подтверждения",
1439
1477
  "canvas.rename": "Переименовать холст",
1440
1478
  "canvas.renameHint": "Двойной клик — переименовать",
1441
- "canvas.background": "Сменить фон холста",
1479
+ "canvas.background": "Фон холста",
1480
+ "canvas.backgroundDots": "Точки",
1481
+ "canvas.backgroundLines": "Сетка",
1482
+ "canvas.backgroundDiagonal": "Диагональ",
1483
+ "canvas.backgroundChecker": "Шахматка",
1484
+ "canvas.backgroundBlank": "Пустой",
1485
+ "canvas.backgroundUpload": "Загрузить свой фон…",
1486
+ "canvas.backgroundRemove": "Убрать свой фон",
1487
+ "canvas.templateLibrary": "Библиотека шаблонов (выберите промпт — создадутся текстовый узел и узел конфигурации)",
1442
1488
  "canvas.undo": "Отменить (Ctrl+Z)",
1443
1489
  "canvas.redo": "Повторить (Ctrl+Shift+Z)",
1444
1490
  "canvas.saving": "Сохранение…",
@@ -1459,6 +1505,7 @@ window.__ModuleLoader__.load({
1459
1505
  "canvas.generatingNode": "Генерация…",
1460
1506
  "canvas.generateFailed": "Не удалось создать изображение",
1461
1507
  "canvas.retry": "Повторить",
1508
+ "canvas.taskLost": "Задача генерации потеряна (сервис перезапущен); повторите",
1462
1509
  "canvas.emptyImageNode": "Нажмите, чтобы загрузить изображение",
1463
1510
  "canvas.connectHint": "Потяните к другому узлу, чтобы соединить",
1464
1511
  "canvas.resizeHint": "Потяните, чтобы изменить размер (пропорции зафиксированы)",
@@ -1487,7 +1534,11 @@ window.__ModuleLoader__.load({
1487
1534
  "canvas.close": "Закрыть",
1488
1535
  "canvas.tabUpload": "Загрузка",
1489
1536
  "canvas.tabHistory": "История",
1490
- "canvas.tabGallery": "Галерея",
1537
+ "canvas.tabGallery": "Материалы",
1538
+ "canvas.imageMenuUpload": "Загрузить локальное изображение",
1539
+ "canvas.imageMenuAssets": "Выбрать из материалов",
1540
+ "canvas.imageMenuHistory": "Выбрать из истории",
1541
+ "canvas.imageMenuGenerate": "Создать через AI",
1491
1542
  "canvas.tabGenerate": "AI-генерация",
1492
1543
  "canvas.dropHint": "Перетащите изображения сюда",
1493
1544
  "canvas.dropSub": "Несколько файлов, PNG / JPG / WebP / GIF",
@@ -1632,9 +1683,13 @@ window.__ModuleLoader__.load({
1632
1683
  "history.ratio": "Фильтр по пропорциям",
1633
1684
  "history.allModels": "Все модели",
1634
1685
  "history.allRatios": "Все пропорции",
1635
- "gallery.title": "Галерея",
1686
+ "gallery.title": "Материалы",
1636
1687
  "gallery.categories": "Категории",
1637
- "gallery.all": "Все работы",
1688
+ "gallery.all": "Все материалы",
1689
+ "gallery.upload": "Загрузить",
1690
+ "gallery.uploadModel": "Локальный файл",
1691
+ "gallery.uploaded": "Материал добавлен",
1692
+ "gallery.uploadHint": "Сохраните локальные изображения для холста",
1638
1693
  "gallery.gpt": "gpt-image-2",
1639
1694
  "gallery.grok": "grok-imagine-image",
1640
1695
  "gallery.ratio": "Пропорции",
@@ -1727,6 +1782,8 @@ window.__ModuleLoader__.load({
1727
1782
  "settings.removeModel": "Удалить модель",
1728
1783
  "settings.optional": "необязательно",
1729
1784
  "settings.moreOptions": "Дополнительно",
1785
+ "settings.localStoragePath": "Локальная папка изображений",
1786
+ "settings.localStoragePathHint": "История, материалы и холст используют эту папку; пусто — ~/.dsh/dsh-imagegen.",
1730
1787
  "settings.storageTitle": "Синхронизация с объектным хранилищем",
1731
1788
  "settings.storageEnabled": "Включить синхронизацию",
1732
1789
  "settings.storageHint": "После сохранения локально изображения выгружаются в S3-совместимое хранилище (Tencent COS / Alibaba OSS / Qiniu S3 / MinIO / R2…)",
@@ -1945,51 +2002,51 @@ window.__ModuleLoader__.load({
1945
2002
  document.head.appendChild(tag);
1946
2003
  }
1947
2004
  var templates_module_css_default = {
1948
- "sourceTabCount": "o0mAxG_sourceTabCount",
1949
- "cardBody": "o0mAxG_cardBody",
1950
- "detailOverlay": "o0mAxG_detailOverlay",
1951
- "detailLink": "o0mAxG_detailLink",
1952
- "cardSource": "o0mAxG_cardSource",
1953
- "cardCategory": "o0mAxG_cardCategory",
2005
+ "shell": "o0mAxG_shell",
1954
2006
  "search": "o0mAxG_search",
1955
- "heading": "o0mAxG_heading",
1956
- "sourceTab": "o0mAxG_sourceTab",
1957
- "notice": "o0mAxG_notice",
1958
- "categoryRow": "o0mAxG_categoryRow",
1959
2007
  "card": "o0mAxG_card",
1960
- "detailPrompt": "o0mAxG_detailPrompt",
1961
- "detailActions": "o0mAxG_detailActions",
1962
- "spinner": "o0mAxG_spinner",
1963
2008
  "close": "o0mAxG_close",
1964
- "detailInfo": "o0mAxG_detailInfo",
1965
- "categoryPill": "o0mAxG_categoryPill",
1966
2009
  "favStar": "o0mAxG_favStar",
1967
- "state": "o0mAxG_state",
1968
- "sourceLink": "o0mAxG_sourceLink",
1969
- "detailMedia": "o0mAxG_detailMedia",
1970
- "detailTitle": "o0mAxG_detailTitle",
1971
- "headerActions": "o0mAxG_headerActions",
1972
- "thumbPlaceholder": "o0mAxG_thumbPlaceholder",
2010
+ "meta": "o0mAxG_meta",
2011
+ "sourceTab": "o0mAxG_sourceTab",
1973
2012
  "featuredBadge": "o0mAxG_featuredBadge",
1974
- "sourceTabs": "o0mAxG_sourceTabs",
1975
- "grid": "o0mAxG_grid",
2013
+ "cardBody": "o0mAxG_cardBody",
2014
+ "cardSource": "o0mAxG_cardSource",
2015
+ "footer": "o0mAxG_footer",
2016
+ "detailTitle": "o0mAxG_detailTitle",
1976
2017
  "thumbWrap": "o0mAxG_thumbWrap",
1977
- "shell": "o0mAxG_shell",
1978
- "cardTitle": "o0mAxG_cardTitle",
2018
+ "cardMeta": "o0mAxG_cardMeta",
2019
+ "heading": "o0mAxG_heading",
2020
+ "state": "o0mAxG_state",
2021
+ "detailPrompt": "o0mAxG_detailPrompt",
2022
+ "overlay": "o0mAxG_overlay",
2023
+ "dsh-imagegen-templates-spin": "o0mAxG_dsh-imagegen-templates-spin",
1979
2024
  "title": "o0mAxG_title",
1980
- "footer": "o0mAxG_footer",
1981
- "detailImage": "o0mAxG_detailImage",
2025
+ "headerActions": "o0mAxG_headerActions",
2026
+ "sourceTabs": "o0mAxG_sourceTabs",
1982
2027
  "attribution": "o0mAxG_attribution",
1983
- "toolbar": "o0mAxG_toolbar",
1984
- "thumb": "o0mAxG_thumb",
2028
+ "detailMeta": "o0mAxG_detailMeta",
2029
+ "categoryPill": "o0mAxG_categoryPill",
1985
2030
  "detail": "o0mAxG_detail",
1986
- "cardMeta": "o0mAxG_cardMeta",
1987
- "dsh-imagegen-templates-spin": "o0mAxG_dsh-imagegen-templates-spin",
1988
- "overlay": "o0mAxG_overlay",
2031
+ "categoryRow": "o0mAxG_categoryRow",
1989
2032
  "header": "o0mAxG_header",
2033
+ "detailInfo": "o0mAxG_detailInfo",
2034
+ "toolbar": "o0mAxG_toolbar",
2035
+ "thumbPlaceholder": "o0mAxG_thumbPlaceholder",
2036
+ "cardCategory": "o0mAxG_cardCategory",
2037
+ "detailOverlay": "o0mAxG_detailOverlay",
2038
+ "sourceLink": "o0mAxG_sourceLink",
2039
+ "notice": "o0mAxG_notice",
1990
2040
  "body": "o0mAxG_body",
1991
- "meta": "o0mAxG_meta",
1992
- "detailMeta": "o0mAxG_detailMeta"
2041
+ "thumb": "o0mAxG_thumb",
2042
+ "spinner": "o0mAxG_spinner",
2043
+ "detailMedia": "o0mAxG_detailMedia",
2044
+ "detailImage": "o0mAxG_detailImage",
2045
+ "cardTitle": "o0mAxG_cardTitle",
2046
+ "sourceTabCount": "o0mAxG_sourceTabCount",
2047
+ "detailLink": "o0mAxG_detailLink",
2048
+ "detailActions": "o0mAxG_detailActions",
2049
+ "grid": "o0mAxG_grid"
1993
2050
  };
1994
2051
  //#endregion
1995
2052
  //#region src/client/TemplateLibrary.tsx
@@ -2617,19 +2674,19 @@ window.__ModuleLoader__.load({
2617
2674
  document.head.appendChild(tag);
2618
2675
  }
2619
2676
  var inspiration_module_css_default = {
2620
- "wrap": "IgRnJG_wrap",
2621
- "dsh-imagegen-inspiration-spin": "IgRnJG_dsh-imagegen-inspiration-spin",
2622
- "thumbWrap": "IgRnJG_thumbWrap",
2623
- "title": "IgRnJG_title",
2624
- "grid": "IgRnJG_grid",
2677
+ "emptyIcon": "IgRnJG_emptyIcon",
2625
2678
  "emptyTitle": "IgRnJG_emptyTitle",
2626
- "tile": "IgRnJG_tile",
2679
+ "thumb": "IgRnJG_thumb",
2627
2680
  "emptyHint": "IgRnJG_emptyHint",
2628
- "spinner": "IgRnJG_spinner",
2681
+ "tile": "IgRnJG_tile",
2629
2682
  "thumbFallback": "IgRnJG_thumbFallback",
2630
- "emptyIcon": "IgRnJG_emptyIcon",
2683
+ "title": "IgRnJG_title",
2631
2684
  "thumbTitle": "IgRnJG_thumbTitle",
2632
- "thumb": "IgRnJG_thumb"
2685
+ "spinner": "IgRnJG_spinner",
2686
+ "grid": "IgRnJG_grid",
2687
+ "thumbWrap": "IgRnJG_thumbWrap",
2688
+ "dsh-imagegen-inspiration-spin": "IgRnJG_dsh-imagegen-inspiration-spin",
2689
+ "wrap": "IgRnJG_wrap"
2633
2690
  };
2634
2691
  //#endregion
2635
2692
  //#region src/client/InspirationGallery.tsx
@@ -2777,7 +2834,7 @@ window.__ModuleLoader__.load({
2777
2834
  }
2778
2835
  //#endregion
2779
2836
  //#region \0dsh-css:E:\dsh-plugin\src\client\canvas-workspace.module.css.mjs
2780
- const css$3 = "._0yZr2a_root{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family,inherit);user-select:none;border-radius:10px;flex-direction:column;flex:auto;display:flex;position:relative;overflow:hidden}._0yZr2a_selectCursor{cursor:default}._0yZr2a_panCursor{cursor:grab}._0yZr2a_panCursor:active{cursor:grabbing}._0yZr2a_topBar{border-bottom:1px solid var(--dsw-alias-border-l1);z-index:40;background:var(--dsw-alias-bg-layer-1);flex:none;align-items:center;gap:8px;padding:8px 12px;display:flex}._0yZr2a_projectSelect{border:1px solid var(--dsw-alias-border-l1);max-width:180px;height:30px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;padding:0 8px;font-size:12.5px}._0yZr2a_titleButton{height:30px;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;cursor:text;background:0 0;border:1px solid #0000;border-radius:8px;max-width:260px;padding:0 10px;font-size:13px;font-weight:600;overflow:hidden}._0yZr2a_titleButton:hover{border-color:var(--dsw-alias-border-l1)}._0yZr2a_titleInput{border:1px solid var(--dsw-alias-brand-primary);height:30px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;outline:none;width:240px;padding:0 10px;font-size:13px;font-weight:600}._0yZr2a_topBarSpacer{flex:1}._0yZr2a_saveState{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11.5px}._0yZr2a_saveState[data-state=error]{color:var(--dsw-alias-label-error)}._0yZr2a_saveState[data-state=saving]{color:var(--dsw-alias-state-warn-primary,var(--dsw-alias-label-secondary))}._0yZr2a_iconButton{width:30px;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;flex:none;justify-content:center;align-items:center;gap:5px;padding:0;display:inline-flex}._0yZr2a_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._0yZr2a_iconButton[data-active]{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 16%, transparent);color:var(--dsw-alias-brand-primary)}._0yZr2a_iconButton:disabled{opacity:.35;cursor:not-allowed}._0yZr2a_iconButton:disabled:hover{color:var(--dsw-alias-label-secondary);background:0 0}._0yZr2a_viewport{touch-action:none;flex:1;min-height:0;position:relative;overflow:hidden}._0yZr2a_grid{pointer-events:none;opacity:.5;position:absolute;inset:0}._0yZr2a_grid[data-mode=dots]{background-image:radial-gradient(circle, color-mix(in srgb, var(--dsw-alias-label-primary) 30%, transparent) 1.1px, transparent 1.4px)}._0yZr2a_grid[data-mode=lines]{background-image:linear-gradient(color-mix(in srgb, var(--dsw-alias-label-primary) 9%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--dsw-alias-label-primary) 9%, transparent) 1px, transparent 1px)}._0yZr2a_grid[data-mode=blank]{background-image:none}._0yZr2a_world{transform-origin:0 0;position:absolute;top:0;left:0}._0yZr2a_marquee{z-index:20;border:1px solid var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, transparent);pointer-events:none;border-radius:4px;position:absolute}._0yZr2a_node{border:1.5px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);cursor:grab;touch-action:none;border-radius:14px;flex-direction:column;display:flex;position:absolute;overflow:visible;box-shadow:0 8px 24px #0f172a1f}._0yZr2a_node:active{cursor:grabbing}._0yZr2a_nodeGlow{pointer-events:none;opacity:0;border-radius:18px;transition:opacity .15s;position:absolute;inset:-6px}._0yZr2a_nodeSelected{border-color:var(--dsw-alias-brand-primary);z-index:2}._0yZr2a_nodeSelected ._0yZr2a_nodeGlow{opacity:1;box-shadow:0 0 0 3px color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, transparent)}._0yZr2a_nodeRelated{border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, transparent)}._0yZr2a_nodeConnectTarget{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 4px color-mix(in srgb, var(--dsw-alias-brand-primary) 26%, transparent)}._0yZr2a_nodeHeader{color:var(--dsw-alias-label-secondary);cursor:inherit;flex:none;align-items:center;gap:6px;padding:7px 12px 5px;font-size:11.5px;display:flex}._0yZr2a_nodeTitle{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}._0yZr2a_nodeSize{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;margin-left:auto;font-size:10.5px}._0yZr2a_nodeSpinner{border:1.5px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 30%, transparent);border-top-color:var(--dsw-alias-brand-primary);border-radius:50%;flex:none;width:11px;height:11px;animation:.8s linear infinite _0yZr2a_canvasSpin}._0yZr2a_nodeBody{background:color-mix(in srgb, var(--dsw-alias-label-primary) 6%, transparent);pointer-events:none;border-radius:9px;flex:1;justify-content:center;align-items:center;min-height:0;margin:0 8px 8px;display:flex;overflow:hidden}._0yZr2a_nodeBody img{object-fit:contain;width:100%;height:100%;display:block}._0yZr2a_nodeState,._0yZr2a_nodeStateError{color:var(--dsw-alias-label-secondary);text-align:center;pointer-events:auto;flex-direction:column;align-items:center;gap:8px;padding:12px;font-size:12px;display:flex}._0yZr2a_nodeStateError{color:var(--dsw-alias-label-error)}._0yZr2a_nodeStateError button{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:7px;padding:4px 12px;font-size:12px}._0yZr2a_nodeEmpty{border:1.5px dashed color-mix(in srgb, var(--dsw-alias-label-primary) 24%, transparent);color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border-radius:9px;flex-direction:column;align-items:center;gap:8px;margin:6px;padding:14px;font-size:12px;display:flex}._0yZr2a_nodeEmpty:hover{border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-brand-primary)}._0yZr2a_textNode{cursor:default}._0yZr2a_imageNode ._0yZr2a_nodeBody{margin:6px}._0yZr2a_textArea{resize:none;min-height:0;color:var(--dsw-alias-label-primary);cursor:text;pointer-events:auto;background:0 0;border:none;outline:none;flex:1;margin:0 8px 8px;padding:4px 6px;font-size:13px;line-height:1.55}._0yZr2a_textArea::placeholder{color:var(--dsw-alias-label-tertiary)}._0yZr2a_dock{z-index:30;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 92%, transparent);backdrop-filter:blur(10px);border-radius:13px;align-items:center;gap:2px;padding:6px;display:flex;position:absolute;bottom:14px;left:50%;transform:translate(-50%);box-shadow:0 10px 30px #0f172a24}._0yZr2a_dock ._0yZr2a_iconButton{width:34px;height:34px}._0yZr2a_dockDivider{background:var(--dsw-alias-border-l1);width:1px;height:18px;margin:0 4px}._0yZr2a_composer{z-index:35;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 96%, transparent);backdrop-filter:blur(10px);border-radius:14px;flex-direction:column;gap:8px;width:560px;padding:10px;display:flex;position:absolute;box-shadow:0 16px 44px #0f172a2e}._0yZr2a_composerPrompt{resize:none;width:100%;min-height:38px;max-height:120px;color:var(--dsw-alias-label-primary);cursor:text;background:0 0;border:none;outline:none;padding:2px 4px;font-size:13px;line-height:1.5}._0yZr2a_composerPrompt::placeholder{color:var(--dsw-alias-label-tertiary)}._0yZr2a_composerMeta{display:flex}._0yZr2a_composerChip{border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, transparent);color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, transparent);border-radius:999px;align-items:center;gap:5px;padding:2px 9px;font-size:11px;display:inline-flex}._0yZr2a_composerControls{align-items:center;gap:6px;display:flex}._0yZr2a_composerControls select{border:1px solid var(--dsw-alias-border-l1);height:28px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:999px;min-width:0;max-width:128px;padding:0 8px;font-size:11.5px}._0yZr2a_composerSend{background:var(--dsw-alias-label-primary);width:34px;height:34px;color:var(--dsw-alias-bg-layer-1);cursor:pointer;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;margin-left:auto;display:inline-flex}._0yZr2a_composerSend:hover{opacity:.88}._0yZr2a_composerSend:disabled{opacity:.35;cursor:not-allowed}._0yZr2a_configNode{cursor:grab;padding:0 10px 10px}._0yZr2a_configNode ._0yZr2a_nodeHeader{padding:7px 2px 5px}._0yZr2a_configLinks{flex:none;margin:2px 0 8px;display:flex}._0yZr2a_configLinks ._0yZr2a_composerChip{padding:2px 8px;font-size:10.5px}._0yZr2a_configHint{min-height:0;color:var(--dsw-alias-label-tertiary);flex:1;margin:0;font-size:11px;line-height:1.55;overflow:auto}._0yZr2a_handle{background:var(--dsw-alias-bg-layer-1);border:2px solid var(--dsw-alias-brand-primary);opacity:0;cursor:crosshair;z-index:3;border-radius:50%;width:12px;height:12px;transition:opacity .12s,transform .12s;position:absolute;top:50%;transform:translateY(-50%)scale(.6)}._0yZr2a_handleLeft{left:-7px}._0yZr2a_handleRight{right:-7px}._0yZr2a_node:hover ._0yZr2a_handle,._0yZr2a_nodeSelected ._0yZr2a_handle,._0yZr2a_nodeConnectTarget ._0yZr2a_handle{opacity:1;transform:translateY(-50%)scale(1)}._0yZr2a_handle:hover{background:var(--dsw-alias-brand-primary)}._0yZr2a_resizeHandle{background:var(--dsw-alias-brand-primary);border:2px solid var(--dsw-alias-bg-layer-1);cursor:nwse-resize;z-index:3;border-radius:4px;width:14px;height:14px;position:absolute;bottom:-5px;right:-5px}._0yZr2a_hoverToolbar{border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 92%, transparent);opacity:0;pointer-events:none;z-index:4;border-radius:10px;gap:2px;padding:4px;transition:opacity .12s;display:flex;position:absolute;top:-36px;left:50%;transform:translate(-50%);box-shadow:0 8px 22px #0f172a24}._0yZr2a_node:hover ._0yZr2a_hoverToolbar,._0yZr2a_nodeSelected ._0yZr2a_hoverToolbar{opacity:1;pointer-events:auto}._0yZr2a_connectionLayer{pointer-events:none;z-index:0;position:absolute;overflow:visible}._0yZr2a_connectionPath{fill:none;stroke:color-mix(in srgb, var(--dsw-alias-label-primary) 38%, transparent);stroke-width:2px;stroke-opacity:.85;pointer-events:none}._0yZr2a_connectionActive{stroke:var(--dsw-alias-brand-primary);stroke-width:3px;stroke-opacity:1;filter:drop-shadow(0 0 6px color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, transparent))}._0yZr2a_connectionPreview{fill:none;stroke:var(--dsw-alias-brand-primary);stroke-width:2px;stroke-dasharray:5 5;pointer-events:none}._0yZr2a_emptyHint{text-align:center;color:var(--dsw-alias-label-tertiary);pointer-events:none;z-index:5;flex-direction:column;align-items:center;gap:6px;display:flex;position:absolute;top:44%;left:50%;transform:translate(-50%,-50%)}._0yZr2a_emptyHint strong{color:var(--dsw-alias-label-secondary);font-size:16px}._0yZr2a_emptyHint span{max-width:320px;font-size:12.5px;line-height:1.6}._0yZr2a_zoomDock{z-index:30;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 88%, transparent);backdrop-filter:blur(10px);border-radius:12px;align-items:center;gap:6px;padding:6px 8px;display:flex;position:absolute;bottom:14px;left:14px;box-shadow:0 10px 30px #0f172a1f}._0yZr2a_zoomDock input[type=range]{width:96px;accent-color:var(--dsw-alias-brand-primary)}._0yZr2a_zoomValue{text-align:right;width:40px;color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:11.5px}._0yZr2a_minimap{z-index:30;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 88%, transparent);backdrop-filter:blur(10px);border-radius:12px;width:220px;height:150px;position:absolute;bottom:62px;left:14px;overflow:hidden;box-shadow:0 10px 30px #0f172a1f}._0yZr2a_minimapCanvas{cursor:crosshair;width:100%;height:100%;position:relative}._0yZr2a_minimapNode{opacity:.8;border-radius:2px;position:absolute}._0yZr2a_minimapImage{background:var(--dsw-alias-brand-primary)}._0yZr2a_minimapText{background:color-mix(in srgb, var(--dsw-alias-label-primary) 40%, transparent)}._0yZr2a_minimapSelected{outline:1.5px solid var(--dsw-alias-brand-primary)}._0yZr2a_minimapViewport{border:1.5px solid var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent);pointer-events:none;border-radius:2px;position:absolute}._0yZr2a_inspectorRow{gap:8px;display:flex}._0yZr2a_inspectorRow>*{flex:1;min-width:0}._0yZr2a_contextMenu{z-index:90;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 96%, transparent);border-radius:11px;flex-direction:column;min-width:176px;padding:5px;display:flex;position:fixed;box-shadow:0 16px 40px #0f172a33}._0yZr2a_contextMenu button{color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:7px;align-items:center;gap:8px;padding:7px 10px;font-size:12.5px;display:flex}._0yZr2a_contextMenu button:hover{background:var(--dsw-alias-interactive-bg-hover)}._0yZr2a_contextMenu button[data-danger]{color:var(--dsw-alias-label-error)}._0yZr2a_errorToast{z-index:60;border:1px solid color-mix(in srgb, var(--dsw-alias-label-error) 35%, transparent);background:color-mix(in srgb, var(--dsw-alias-label-error) 12%, var(--dsw-alias-bg-layer-1));max-width:min(560px,80%);color:var(--dsw-alias-label-error);border-radius:10px;align-items:center;gap:10px;padding:9px 12px;font-size:12.5px;display:flex;position:absolute;bottom:18px;left:50%;transform:translate(-50%);box-shadow:0 12px 30px #0f172a2e}._0yZr2a_errorToast button{color:inherit;cursor:pointer;background:0 0;border:none;flex:none;padding:2px;display:inline-flex}._0yZr2a_modalBackdrop{z-index:70;background:color-mix(in srgb, var(--dsw-alias-label-primary) 32%, transparent);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._0yZr2a_picker{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:14px;flex-direction:column;width:min(720px,92%);max-height:84%;display:flex;overflow:hidden;box-shadow:0 24px 60px #0f172a42}._0yZr2a_pickerHeader{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:center;padding:12px 14px;font-size:14px;display:flex}._0yZr2a_pickerHeader button{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:18px}._0yZr2a_pickerTabs{gap:4px;padding:10px 14px 0;display:flex}._0yZr2a_pickerTabs button{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px 8px 0 0;padding:7px 12px;font-size:12.5px}._0yZr2a_pickerTabs button[data-active]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary)}._0yZr2a_pickerBody{flex:1;min-height:0;padding:14px;overflow:auto}._0yZr2a_pickerGrid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;display:grid}._0yZr2a_pickerCard{border:1.5px solid var(--dsw-alias-border-l1);cursor:pointer;text-align:left;color:var(--dsw-alias-label-primary);background:0 0;border-radius:10px;flex-direction:column;gap:6px;padding:6px;display:flex}._0yZr2a_pickerCard[data-selected]{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-alias-brand-primary) 25%, transparent)}._0yZr2a_pickerCard img{object-fit:cover;border-radius:7px;width:100%;height:110px}._0yZr2a_pickerCardPrompt{text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}._0yZr2a_pickerCard small{color:var(--dsw-alias-label-tertiary);font-size:10.5px}._0yZr2a_pickerFooter{color:var(--dsw-alias-label-secondary);justify-content:space-between;align-items:center;padding-top:12px;font-size:12.5px;display:flex}._0yZr2a_pickerFooter button,._0yZr2a_generateForm button{background:var(--dsw-alias-brand-primary);height:32px;color:var(--dsw-alias-bg-base,#fff);cursor:pointer;border:none;border-radius:8px;align-items:center;gap:6px;padding:0 16px;font-size:12.5px;font-weight:600;display:inline-flex}._0yZr2a_pickerFooter button:disabled,._0yZr2a_generateForm button:disabled{opacity:.45;cursor:not-allowed}._0yZr2a_uploadBox{border:1.5px dashed color-mix(in srgb, var(--dsw-alias-label-primary) 22%, transparent);min-height:220px;color:var(--dsw-alias-label-secondary);cursor:pointer;text-align:center;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:8px;display:flex}._0yZr2a_uploadBox:hover{border-color:var(--dsw-alias-brand-primary)}._0yZr2a_uploadBox input{display:none}._0yZr2a_uploadBox small{color:var(--dsw-alias-label-tertiary);font-size:11px}._0yZr2a_uploadIcon{color:var(--dsw-alias-brand-primary)}._0yZr2a_generateForm{flex-direction:column;gap:10px;display:flex}._0yZr2a_generateForm textarea{resize:vertical;border:1px solid var(--dsw-alias-border-l1);min-height:110px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:9px;outline:none;padding:8px 10px;font-size:12.5px}._0yZr2a_generateForm select{border:1px solid var(--dsw-alias-border-l1);height:30px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;padding:0 8px;font-size:12.5px}@keyframes _0yZr2a_canvasSpin{to{transform:rotate(360deg)}}";
2837
+ const css$3 = "._0yZr2a_root{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family,inherit);user-select:none;border-radius:10px;flex-direction:column;flex:auto;display:flex;position:relative;overflow:hidden}._0yZr2a_selectCursor{cursor:default}._0yZr2a_panCursor{cursor:grab}._0yZr2a_panCursor:active{cursor:grabbing}._0yZr2a_topBar{border-bottom:1px solid var(--dsw-alias-border-l1);z-index:40;background:var(--dsw-alias-bg-layer-1);flex:none;align-items:center;gap:8px;padding:8px 12px;display:flex}._0yZr2a_projectSelect{border:1px solid var(--dsw-alias-border-l1);max-width:180px;height:30px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;padding:0 8px;font-size:12.5px}._0yZr2a_titleButton{height:30px;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;cursor:text;background:0 0;border:1px solid #0000;border-radius:8px;max-width:260px;padding:0 10px;font-size:13px;font-weight:600;overflow:hidden}._0yZr2a_titleButton:hover{border-color:var(--dsw-alias-border-l1)}._0yZr2a_titleInput{border:1px solid var(--dsw-alias-brand-primary);height:30px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;outline:none;width:240px;padding:0 10px;font-size:13px;font-weight:600}._0yZr2a_topBarSpacer{flex:1}._0yZr2a_saveState{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11.5px}._0yZr2a_saveState[data-state=error]{color:var(--dsw-alias-label-error)}._0yZr2a_saveState[data-state=saving]{color:var(--dsw-alias-state-warn-primary,var(--dsw-alias-label-secondary))}._0yZr2a_iconButton{width:30px;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;flex:none;justify-content:center;align-items:center;gap:5px;padding:0;display:inline-flex}._0yZr2a_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._0yZr2a_iconButton[data-active]{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 16%, transparent);color:var(--dsw-alias-brand-primary)}._0yZr2a_iconButton:disabled{opacity:.35;cursor:not-allowed}._0yZr2a_iconButton:disabled:hover{color:var(--dsw-alias-label-secondary);background:0 0}._0yZr2a_viewport{touch-action:none;flex:1;min-height:0;position:relative;overflow:hidden}._0yZr2a_grid{pointer-events:none;opacity:.5;position:absolute;inset:0}._0yZr2a_grid[data-mode=dots]{background-image:radial-gradient(circle, color-mix(in srgb, var(--dsw-alias-label-primary) 30%, transparent) 1.1px, transparent 1.4px)}._0yZr2a_grid[data-mode=lines]{background-image:linear-gradient(color-mix(in srgb, var(--dsw-alias-label-primary) 9%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--dsw-alias-label-primary) 9%, transparent) 1px, transparent 1px)}._0yZr2a_grid[data-mode=blank]{background-image:none}._0yZr2a_grid[data-mode=diagonal]{background-image:repeating-linear-gradient(45deg, color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent) 0 1px, transparent 1px 16px)}._0yZr2a_grid[data-mode=checker]{background-image:conic-gradient(color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent) 90deg, transparent 90deg 180deg, color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent) 180deg 270deg, transparent 270deg);background-size:48px 48px}._0yZr2a_grid[data-mode=image]{background-image:none}._0yZr2a_gridScrim{background:var(--dsw-alias-bg-layer-1);opacity:.6;position:absolute;inset:0}._0yZr2a_backgroundMenu{z-index:45;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 96%, transparent);border-radius:11px;flex-direction:column;min-width:168px;padding:5px;display:flex;position:absolute;transform:translate(-50%,-100%);box-shadow:0 16px 40px #0f172a33}._0yZr2a_backgroundMenu button{color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:7px;justify-content:space-between;align-items:center;padding:7px 10px;font-size:12.5px;display:flex}._0yZr2a_backgroundMenu button:hover{background:var(--dsw-alias-interactive-bg-hover)}._0yZr2a_backgroundMenu button[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, transparent)}._0yZr2a_backgroundMenuDivider{background:var(--dsw-alias-border-l1);height:1px;margin:4px 6px}._0yZr2a_world{transform-origin:0 0;position:absolute;top:0;left:0}._0yZr2a_marquee{z-index:20;border:1px solid var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, transparent);pointer-events:none;border-radius:4px;position:absolute}._0yZr2a_node{border:1.5px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);cursor:grab;touch-action:none;border-radius:14px;flex-direction:column;display:flex;position:absolute;overflow:visible;box-shadow:0 8px 24px #0f172a1f}._0yZr2a_node:active{cursor:grabbing}._0yZr2a_nodeGlow{pointer-events:none;opacity:0;border-radius:18px;transition:opacity .15s;position:absolute;inset:-6px}._0yZr2a_nodeSelected{border-color:var(--dsw-alias-brand-primary);z-index:2}._0yZr2a_nodeSelected ._0yZr2a_nodeGlow{opacity:1;box-shadow:0 0 0 3px color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, transparent)}._0yZr2a_nodeRelated{border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, transparent)}._0yZr2a_nodeConnectTarget{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 4px color-mix(in srgb, var(--dsw-alias-brand-primary) 26%, transparent)}._0yZr2a_nodeHeader{color:var(--dsw-alias-label-secondary);cursor:inherit;flex:none;align-items:center;gap:6px;padding:7px 12px 5px;font-size:11.5px;display:flex}._0yZr2a_nodeTitle{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}._0yZr2a_nodeSize{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;margin-left:auto;font-size:10.5px}._0yZr2a_nodeSpinner{border:1.5px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 30%, transparent);border-top-color:var(--dsw-alias-brand-primary);border-radius:50%;flex:none;width:11px;height:11px;animation:.8s linear infinite _0yZr2a_canvasSpin}._0yZr2a_nodeBody{background:color-mix(in srgb, var(--dsw-alias-label-primary) 6%, transparent);pointer-events:none;border-radius:9px;flex:1;justify-content:center;align-items:center;min-height:0;margin:0 8px 8px;display:flex;overflow:hidden}._0yZr2a_nodeBody img{object-fit:contain;width:100%;height:100%;display:block}._0yZr2a_imageInfo{z-index:2;background:color-mix(in srgb, var(--dsw-alias-label-primary) 62%, transparent);color:var(--dsw-alias-bg-layer-1);pointer-events:none;backdrop-filter:blur(3px);text-overflow:ellipsis;white-space:nowrap;border-radius:6px;max-width:calc(100% - 90px);padding:3px 8px;font-size:10.5px;line-height:1.4;position:absolute;top:6px;overflow:hidden}._0yZr2a_imageInfoLeft{font-weight:600;left:6px}._0yZr2a_imageInfoRight{font-variant-numeric:tabular-nums;opacity:.85;left:auto;right:6px}._0yZr2a_nodeState,._0yZr2a_nodeStateError{color:var(--dsw-alias-label-secondary);text-align:center;pointer-events:auto;flex-direction:column;align-items:center;gap:8px;padding:12px;font-size:12px;display:flex}._0yZr2a_nodeStateError{color:var(--dsw-alias-label-error)}._0yZr2a_nodeStateError button{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:7px;padding:4px 12px;font-size:12px}._0yZr2a_nodeEmpty{border:1.5px dashed color-mix(in srgb, var(--dsw-alias-label-primary) 24%, transparent);color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border-radius:9px;flex-direction:column;align-items:center;gap:8px;margin:6px;padding:14px;font-size:12px;display:flex}._0yZr2a_nodeEmpty:hover{border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-brand-primary)}._0yZr2a_textNode{cursor:default}._0yZr2a_imageNode ._0yZr2a_nodeBody{margin:6px}._0yZr2a_textArea{resize:none;min-height:0;color:var(--dsw-alias-label-primary);cursor:text;pointer-events:auto;background:0 0;border:none;outline:none;flex:1;margin:0 8px 8px;padding:4px 6px;font-size:13px;line-height:1.55}._0yZr2a_textArea::placeholder{color:var(--dsw-alias-label-tertiary)}._0yZr2a_dock{z-index:30;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 92%, transparent);backdrop-filter:blur(10px);border-radius:13px;align-items:center;gap:2px;padding:6px;display:flex;position:absolute;bottom:14px;left:50%;transform:translate(-50%);box-shadow:0 10px 30px #0f172a24}._0yZr2a_dock ._0yZr2a_iconButton{border-radius:11px;width:40px;height:40px;transition:transform .18s cubic-bezier(.34,1.9,.64,1),background .15s,color .15s,box-shadow .18s;position:relative;overflow:hidden}._0yZr2a_dock ._0yZr2a_iconButton:before{content:\"\";background:linear-gradient(105deg, transparent, color-mix(in srgb, currentColor 26%, transparent), transparent);opacity:0;pointer-events:none;width:65%;position:absolute;top:-4px;bottom:-4px;left:-150%;transform:skew(-18deg)}._0yZr2a_dock ._0yZr2a_iconButton:not(:disabled):hover{transform:translateY(calc(-3px - var(--dock-lift,0px)));box-shadow:0 6px 14px color-mix(in srgb, var(--dsw-alias-label-primary) 20%, transparent)}._0yZr2a_dock ._0yZr2a_iconButton:not(:disabled):hover:before{animation:.55s forwards _0yZr2a_dockShine}._0yZr2a_dock ._0yZr2a_iconButton:not(:disabled):active{transform:translateY(-1px)scale(.96)}@keyframes _0yZr2a_dockShine{0%{opacity:1;left:-150%}to{opacity:1;left:170%}}._0yZr2a_dock ._0yZr2a_iconButton[data-active],._0yZr2a_dock ._0yZr2a_iconButton[data-active]:hover{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-1)}._0yZr2a_dockDivider{background:var(--dsw-alias-border-l1);width:1px;height:18px;margin:0 4px}._0yZr2a_composer{z-index:35;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 96%, transparent);backdrop-filter:blur(10px);border-radius:14px;flex-direction:column;gap:8px;width:560px;padding:10px;display:flex;position:absolute;box-shadow:0 16px 44px #0f172a2e}._0yZr2a_composerPrompt{resize:none;width:100%;min-height:38px;max-height:120px;color:var(--dsw-alias-label-primary);cursor:text;background:0 0;border:none;outline:none;padding:2px 4px;font-size:13px;line-height:1.5}._0yZr2a_composerPrompt::placeholder{color:var(--dsw-alias-label-tertiary)}._0yZr2a_composerMeta{display:flex}._0yZr2a_composerChip{border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, transparent);color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, transparent);border-radius:999px;align-items:center;gap:5px;padding:2px 9px;font-size:11px;display:inline-flex}._0yZr2a_composerControls{align-items:center;gap:6px;display:flex}._0yZr2a_composerControls select{border:1px solid var(--dsw-alias-border-l1);height:28px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:999px;min-width:0;max-width:128px;padding:0 8px;font-size:11.5px}._0yZr2a_composerSend{background:var(--dsw-alias-label-primary);width:34px;height:34px;color:var(--dsw-alias-bg-layer-1);cursor:pointer;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;margin-left:auto;display:inline-flex}._0yZr2a_composerSend:hover{opacity:.88}._0yZr2a_composerSend:disabled{opacity:.35;cursor:not-allowed}._0yZr2a_configNode{cursor:grab;padding:0 14px 14px}._0yZr2a_configNode ._0yZr2a_nodeHeader{padding:10px 2px 6px;font-size:12px}._0yZr2a_configLinks{flex:none;align-items:center;margin:4px 0 10px;display:flex}._0yZr2a_configLinks ._0yZr2a_composerChip{padding:3px 10px;font-size:11px}._0yZr2a_configHint{min-height:0;color:var(--dsw-alias-label-tertiary);flex:1;margin:0;font-size:11.5px;line-height:1.7;overflow:auto}._0yZr2a_handle{background:var(--dsw-alias-bg-layer-1);border:2px solid var(--dsw-alias-brand-primary);opacity:0;cursor:crosshair;z-index:3;border-radius:50%;width:12px;height:12px;transition:opacity .12s,transform .12s;position:absolute;top:50%;transform:translateY(-50%)scale(.6)}._0yZr2a_handleLeft{left:-7px}._0yZr2a_handleRight{right:-7px}._0yZr2a_node:hover ._0yZr2a_handle,._0yZr2a_nodeSelected ._0yZr2a_handle,._0yZr2a_nodeConnectTarget ._0yZr2a_handle{opacity:1;transform:translateY(-50%)scale(1)}._0yZr2a_handle:hover{background:var(--dsw-alias-brand-primary)}._0yZr2a_resizeHandle{background:var(--dsw-alias-brand-primary);border:2px solid var(--dsw-alias-bg-layer-1);cursor:nwse-resize;z-index:3;border-radius:4px;width:14px;height:14px;position:absolute;bottom:-5px;right:-5px}._0yZr2a_hoverToolbar{border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 92%, transparent);opacity:0;pointer-events:none;z-index:4;border-radius:10px;gap:2px;padding:4px;transition:opacity .12s;display:flex;position:absolute;top:-36px;left:50%;transform:translate(-50%);box-shadow:0 8px 22px #0f172a24}._0yZr2a_node:hover ._0yZr2a_hoverToolbar,._0yZr2a_nodeSelected ._0yZr2a_hoverToolbar{opacity:1;pointer-events:auto}._0yZr2a_connectionLayer{pointer-events:none;z-index:0;position:absolute;overflow:visible}._0yZr2a_connectionPath{fill:none;stroke:color-mix(in srgb, var(--dsw-alias-label-primary) 38%, transparent);stroke-width:2px;stroke-opacity:.85;pointer-events:none}._0yZr2a_connectionActive{stroke:var(--dsw-alias-brand-primary);stroke-width:3px;stroke-opacity:1;filter:drop-shadow(0 0 6px color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, transparent))}._0yZr2a_connectionPreview{fill:none;stroke:var(--dsw-alias-brand-primary);stroke-width:2px;stroke-dasharray:5 5;pointer-events:none}._0yZr2a_emptyHint{text-align:center;color:var(--dsw-alias-label-tertiary);pointer-events:none;z-index:5;flex-direction:column;align-items:center;gap:6px;display:flex;position:absolute;top:44%;left:50%;transform:translate(-50%,-50%)}._0yZr2a_emptyHint strong{color:var(--dsw-alias-label-secondary);font-size:16px}._0yZr2a_emptyHint span{max-width:320px;font-size:12.5px;line-height:1.6}._0yZr2a_zoomDock{z-index:30;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 88%, transparent);backdrop-filter:blur(10px);border-radius:12px;align-items:center;gap:6px;padding:6px 8px;display:flex;position:absolute;bottom:14px;left:14px;box-shadow:0 10px 30px #0f172a1f}._0yZr2a_zoomDock input[type=range]{width:96px;accent-color:var(--dsw-alias-brand-primary)}._0yZr2a_zoomValue{text-align:right;width:40px;color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:11.5px}._0yZr2a_minimap{z-index:30;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 88%, transparent);backdrop-filter:blur(10px);border-radius:12px;width:220px;height:150px;position:absolute;bottom:62px;left:14px;overflow:hidden;box-shadow:0 10px 30px #0f172a1f}._0yZr2a_minimapCanvas{cursor:crosshair;width:100%;height:100%;position:relative}._0yZr2a_minimapNode{opacity:.8;border-radius:2px;position:absolute}._0yZr2a_minimapImage{background:var(--dsw-alias-brand-primary)}._0yZr2a_minimapText{background:color-mix(in srgb, var(--dsw-alias-label-primary) 40%, transparent)}._0yZr2a_minimapSelected{outline:1.5px solid var(--dsw-alias-brand-primary)}._0yZr2a_minimapViewport{border:1.5px solid var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent);pointer-events:none;border-radius:2px;position:absolute}._0yZr2a_inspectorRow{gap:8px;display:flex}._0yZr2a_inspectorRow>*{flex:1;min-width:0}._0yZr2a_contextMenu{z-index:90;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 96%, transparent);border-radius:11px;flex-direction:column;min-width:176px;padding:5px;display:flex;position:fixed;box-shadow:0 16px 40px #0f172a33}._0yZr2a_contextMenu button{color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:7px;align-items:center;gap:8px;padding:7px 10px;font-size:12.5px;display:flex}._0yZr2a_contextMenu button:hover{background:var(--dsw-alias-interactive-bg-hover)}._0yZr2a_contextMenu button[data-danger]{color:var(--dsw-alias-label-error)}._0yZr2a_errorToast{z-index:60;border:1px solid color-mix(in srgb, var(--dsw-alias-label-error) 35%, transparent);background:color-mix(in srgb, var(--dsw-alias-label-error) 12%, var(--dsw-alias-bg-layer-1));max-width:min(560px,80%);color:var(--dsw-alias-label-error);border-radius:10px;align-items:center;gap:10px;padding:9px 12px;font-size:12.5px;display:flex;position:absolute;bottom:18px;left:50%;transform:translate(-50%);box-shadow:0 12px 30px #0f172a2e}._0yZr2a_errorToast button{color:inherit;cursor:pointer;background:0 0;border:none;flex:none;padding:2px;display:inline-flex}._0yZr2a_modalBackdrop{z-index:70;background:color-mix(in srgb, var(--dsw-alias-label-primary) 32%, transparent);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._0yZr2a_picker{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:14px;flex-direction:column;width:min(720px,92%);max-height:84%;display:flex;overflow:hidden;box-shadow:0 24px 60px #0f172a42}._0yZr2a_pickerHeader{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:center;padding:12px 14px;font-size:14px;display:flex}._0yZr2a_pickerHeader button{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:18px}._0yZr2a_pickerTabs{gap:4px;padding:10px 14px 0;display:flex}._0yZr2a_pickerTabs button{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px 8px 0 0;padding:7px 12px;font-size:12.5px}._0yZr2a_pickerTabs button[data-active]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary)}._0yZr2a_pickerBody{flex:1;min-height:0;padding:14px;overflow:auto}._0yZr2a_pickerGrid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;display:grid}._0yZr2a_pickerCard{border:1.5px solid var(--dsw-alias-border-l1);cursor:pointer;text-align:left;color:var(--dsw-alias-label-primary);background:0 0;border-radius:10px;flex-direction:column;gap:6px;padding:6px;display:flex}._0yZr2a_pickerCard[data-selected]{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-alias-brand-primary) 25%, transparent)}._0yZr2a_pickerCard img{object-fit:cover;border-radius:7px;width:100%;height:110px}._0yZr2a_pickerCardPrompt{text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}._0yZr2a_pickerCard small{color:var(--dsw-alias-label-tertiary);font-size:10.5px}._0yZr2a_pickerFooter{color:var(--dsw-alias-label-secondary);justify-content:space-between;align-items:center;padding-top:12px;font-size:12.5px;display:flex}._0yZr2a_pickerFooter button,._0yZr2a_generateForm button{background:var(--dsw-alias-brand-primary);height:32px;color:var(--dsw-alias-bg-base,#fff);cursor:pointer;border:none;border-radius:8px;align-items:center;gap:6px;padding:0 16px;font-size:12.5px;font-weight:600;display:inline-flex}._0yZr2a_pickerFooter button:disabled,._0yZr2a_generateForm button:disabled{opacity:.45;cursor:not-allowed}._0yZr2a_uploadBox{border:1.5px dashed color-mix(in srgb, var(--dsw-alias-label-primary) 22%, transparent);min-height:220px;color:var(--dsw-alias-label-secondary);cursor:pointer;text-align:center;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:8px;display:flex}._0yZr2a_uploadBox:hover{border-color:var(--dsw-alias-brand-primary)}._0yZr2a_uploadBox input{display:none}._0yZr2a_uploadBox small{color:var(--dsw-alias-label-tertiary);font-size:11px}._0yZr2a_uploadIcon{color:var(--dsw-alias-brand-primary)}._0yZr2a_generateForm{flex-direction:column;gap:10px;display:flex}._0yZr2a_generateForm textarea{resize:vertical;border:1px solid var(--dsw-alias-border-l1);min-height:110px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:9px;outline:none;padding:8px 10px;font-size:12.5px}._0yZr2a_generateForm select{border:1px solid var(--dsw-alias-border-l1);height:30px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:8px;padding:0 8px;font-size:12.5px}@keyframes _0yZr2a_canvasSpin{to{transform:rotate(360deg)}}";
2781
2838
  const tagId$3 = "@dickpy/dsh-imagegen/canvas-workspace.module.css";
2782
2839
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
2783
2840
  const tag = document.createElement("style");
@@ -2787,82 +2844,89 @@ window.__ModuleLoader__.load({
2787
2844
  document.head.appendChild(tag);
2788
2845
  }
2789
2846
  var canvas_workspace_module_css_default = {
2790
- "contextMenu": "_0yZr2a_contextMenu",
2791
- "projectSelect": "_0yZr2a_projectSelect",
2847
+ "titleInput": "_0yZr2a_titleInput",
2848
+ "configHint": "_0yZr2a_configHint",
2849
+ "connectionPreview": "_0yZr2a_connectionPreview",
2850
+ "minimapSelected": "_0yZr2a_minimapSelected",
2851
+ "imageNode": "_0yZr2a_imageNode",
2792
2852
  "nodeStateError": "_0yZr2a_nodeStateError",
2853
+ "nodeEmpty": "_0yZr2a_nodeEmpty",
2854
+ "connectionActive": "_0yZr2a_connectionActive",
2855
+ "dock": "_0yZr2a_dock",
2856
+ "imageInfoLeft": "_0yZr2a_imageInfoLeft",
2857
+ "titleButton": "_0yZr2a_titleButton",
2858
+ "composer": "_0yZr2a_composer",
2859
+ "zoomValue": "_0yZr2a_zoomValue",
2860
+ "errorToast": "_0yZr2a_errorToast",
2861
+ "textArea": "_0yZr2a_textArea",
2862
+ "generateForm": "_0yZr2a_generateForm",
2863
+ "uploadBox": "_0yZr2a_uploadBox",
2864
+ "composerPrompt": "_0yZr2a_composerPrompt",
2865
+ "world": "_0yZr2a_world",
2866
+ "pickerCardPrompt": "_0yZr2a_pickerCardPrompt",
2793
2867
  "emptyHint": "_0yZr2a_emptyHint",
2794
- "nodeSelected": "_0yZr2a_nodeSelected",
2795
- "minimapViewport": "_0yZr2a_minimapViewport",
2868
+ "minimapCanvas": "_0yZr2a_minimapCanvas",
2869
+ "backgroundMenuDivider": "_0yZr2a_backgroundMenuDivider",
2870
+ "pickerBody": "_0yZr2a_pickerBody",
2871
+ "pickerGrid": "_0yZr2a_pickerGrid",
2872
+ "node": "_0yZr2a_node",
2796
2873
  "hoverToolbar": "_0yZr2a_hoverToolbar",
2797
- "selectCursor": "_0yZr2a_selectCursor",
2874
+ "saveState": "_0yZr2a_saveState",
2875
+ "dockDivider": "_0yZr2a_dockDivider",
2876
+ "grid": "_0yZr2a_grid",
2877
+ "inspectorRow": "_0yZr2a_inspectorRow",
2878
+ "nodeSize": "_0yZr2a_nodeSize",
2879
+ "composerMeta": "_0yZr2a_composerMeta",
2880
+ "nodeHeader": "_0yZr2a_nodeHeader",
2881
+ "viewport": "_0yZr2a_viewport",
2798
2882
  "panCursor": "_0yZr2a_panCursor",
2799
- "connectionLayer": "_0yZr2a_connectionLayer",
2800
- "zoomDock": "_0yZr2a_zoomDock",
2801
- "dock": "_0yZr2a_dock",
2883
+ "minimapNode": "_0yZr2a_minimapNode",
2884
+ "topBarSpacer": "_0yZr2a_topBarSpacer",
2885
+ "minimap": "_0yZr2a_minimap",
2802
2886
  "minimapImage": "_0yZr2a_minimapImage",
2803
- "nodeConnectTarget": "_0yZr2a_nodeConnectTarget",
2887
+ "nodeTitle": "_0yZr2a_nodeTitle",
2888
+ "handleRight": "_0yZr2a_handleRight",
2804
2889
  "root": "_0yZr2a_root",
2805
- "dockDivider": "_0yZr2a_dockDivider",
2806
- "nodeEmpty": "_0yZr2a_nodeEmpty",
2807
- "minimapCanvas": "_0yZr2a_minimapCanvas",
2890
+ "connectionPath": "_0yZr2a_connectionPath",
2891
+ "composerChip": "_0yZr2a_composerChip",
2892
+ "nodeBody": "_0yZr2a_nodeBody",
2808
2893
  "picker": "_0yZr2a_picker",
2809
- "composerPrompt": "_0yZr2a_composerPrompt",
2810
- "pickerTabs": "_0yZr2a_pickerTabs",
2811
- "errorToast": "_0yZr2a_errorToast",
2812
- "resizeHandle": "_0yZr2a_resizeHandle",
2894
+ "textNode": "_0yZr2a_textNode",
2813
2895
  "pickerCard": "_0yZr2a_pickerCard",
2896
+ "pickerHeader": "_0yZr2a_pickerHeader",
2897
+ "resizeHandle": "_0yZr2a_resizeHandle",
2898
+ "dockShine": "_0yZr2a_dockShine",
2899
+ "selectCursor": "_0yZr2a_selectCursor",
2900
+ "backgroundMenu": "_0yZr2a_backgroundMenu",
2901
+ "uploadIcon": "_0yZr2a_uploadIcon",
2814
2902
  "nodeState": "_0yZr2a_nodeState",
2815
- "marquee": "_0yZr2a_marquee",
2816
- "minimap": "_0yZr2a_minimap",
2903
+ "nodeRelated": "_0yZr2a_nodeRelated",
2904
+ "configNode": "_0yZr2a_configNode",
2817
2905
  "handleLeft": "_0yZr2a_handleLeft",
2818
- "world": "_0yZr2a_world",
2819
- "connectionPreview": "_0yZr2a_connectionPreview",
2820
- "nodeSize": "_0yZr2a_nodeSize",
2821
- "saveState": "_0yZr2a_saveState",
2822
- "composerControls": "_0yZr2a_composerControls",
2823
- "uploadIcon": "_0yZr2a_uploadIcon",
2824
- "minimapText": "_0yZr2a_minimapText",
2825
- "inspectorRow": "_0yZr2a_inspectorRow",
2826
- "connectionPath": "_0yZr2a_connectionPath",
2827
- "pickerHeader": "_0yZr2a_pickerHeader",
2828
- "handleRight": "_0yZr2a_handleRight",
2829
- "configLinks": "_0yZr2a_configLinks",
2830
- "topBar": "_0yZr2a_topBar",
2831
- "pickerGrid": "_0yZr2a_pickerGrid",
2832
- "node": "_0yZr2a_node",
2833
- "viewport": "_0yZr2a_viewport",
2834
- "titleButton": "_0yZr2a_titleButton",
2835
- "nodeBody": "_0yZr2a_nodeBody",
2836
- "textArea": "_0yZr2a_textArea",
2906
+ "nodeConnectTarget": "_0yZr2a_nodeConnectTarget",
2837
2907
  "nodeSpinner": "_0yZr2a_nodeSpinner",
2838
- "nodeTitle": "_0yZr2a_nodeTitle",
2839
- "configHint": "_0yZr2a_configHint",
2840
- "nodeHeader": "_0yZr2a_nodeHeader",
2841
- "composer": "_0yZr2a_composer",
2842
- "connectionActive": "_0yZr2a_connectionActive",
2843
- "nodeGlow": "_0yZr2a_nodeGlow",
2844
- "canvasSpin": "_0yZr2a_canvasSpin",
2845
- "imageNode": "_0yZr2a_imageNode",
2908
+ "imageInfoRight": "_0yZr2a_imageInfoRight",
2909
+ "contextMenu": "_0yZr2a_contextMenu",
2846
2910
  "composerSend": "_0yZr2a_composerSend",
2847
- "zoomValue": "_0yZr2a_zoomValue",
2848
- "pickerBody": "_0yZr2a_pickerBody",
2849
- "uploadBox": "_0yZr2a_uploadBox",
2850
- "topBarSpacer": "_0yZr2a_topBarSpacer",
2851
- "minimapSelected": "_0yZr2a_minimapSelected",
2852
- "composerMeta": "_0yZr2a_composerMeta",
2853
- "handle": "_0yZr2a_handle",
2854
- "titleInput": "_0yZr2a_titleInput",
2855
- "pickerCardPrompt": "_0yZr2a_pickerCardPrompt",
2911
+ "projectSelect": "_0yZr2a_projectSelect",
2856
2912
  "pickerFooter": "_0yZr2a_pickerFooter",
2857
- "minimapNode": "_0yZr2a_minimapNode",
2858
- "grid": "_0yZr2a_grid",
2859
- "textNode": "_0yZr2a_textNode",
2860
- "composerChip": "_0yZr2a_composerChip",
2861
- "generateForm": "_0yZr2a_generateForm",
2913
+ "marquee": "_0yZr2a_marquee",
2914
+ "handle": "_0yZr2a_handle",
2862
2915
  "modalBackdrop": "_0yZr2a_modalBackdrop",
2916
+ "gridScrim": "_0yZr2a_gridScrim",
2917
+ "configLinks": "_0yZr2a_configLinks",
2918
+ "pickerTabs": "_0yZr2a_pickerTabs",
2919
+ "imageInfo": "_0yZr2a_imageInfo",
2920
+ "nodeSelected": "_0yZr2a_nodeSelected",
2921
+ "minimapViewport": "_0yZr2a_minimapViewport",
2863
2922
  "iconButton": "_0yZr2a_iconButton",
2864
- "nodeRelated": "_0yZr2a_nodeRelated",
2865
- "configNode": "_0yZr2a_configNode"
2923
+ "minimapText": "_0yZr2a_minimapText",
2924
+ "zoomDock": "_0yZr2a_zoomDock",
2925
+ "composerControls": "_0yZr2a_composerControls",
2926
+ "connectionLayer": "_0yZr2a_connectionLayer",
2927
+ "canvasSpin": "_0yZr2a_canvasSpin",
2928
+ "nodeGlow": "_0yZr2a_nodeGlow",
2929
+ "topBar": "_0yZr2a_topBar"
2866
2930
  };
2867
2931
  //#endregion
2868
2932
  //#region src/client/CanvasWorkspace.tsx
@@ -2884,6 +2948,10 @@ window.__ModuleLoader__.load({
2884
2948
  height: 150
2885
2949
  };
2886
2950
  const CONFIG_NODE_SIZE = {
2951
+ width: 320,
2952
+ height: 190
2953
+ };
2954
+ const LEGACY_CONFIG_NODE_SIZE = {
2887
2955
  width: 240,
2888
2956
  height: 96
2889
2957
  };
@@ -2960,6 +3028,19 @@ window.__ModuleLoader__.load({
2960
3028
  maxY: -Infinity
2961
3029
  });
2962
3030
  }
3031
+ /** Enlarge config nodes still stored at the pre-expansion default so the
3032
+ * roomier layout applies to existing canvases too. */
3033
+ function normalizeConfigNodeSizes(document) {
3034
+ const nodes = document.nodes.map((node) => node.type === "config" && node.width === LEGACY_CONFIG_NODE_SIZE.width && node.height === LEGACY_CONFIG_NODE_SIZE.height ? {
3035
+ ...node,
3036
+ width: CONFIG_NODE_SIZE.width,
3037
+ height: CONFIG_NODE_SIZE.height
3038
+ } : node);
3039
+ return nodes === document.nodes ? document : {
3040
+ ...document,
3041
+ nodes
3042
+ };
3043
+ }
2963
3044
  function summaryOf(document) {
2964
3045
  return {
2965
3046
  id: document.id,
@@ -2991,10 +3072,10 @@ window.__ModuleLoader__.load({
2991
3072
  y: node.y + node.height / 2
2992
3073
  };
2993
3074
  }
2994
- function ToolbarIcon({ name }) {
3075
+ function ToolbarIcon({ name, size = 16 }) {
2995
3076
  const common = {
2996
- width: 16,
2997
- height: 16,
3077
+ width: size,
3078
+ height: size,
2998
3079
  viewBox: "0 0 16 16",
2999
3080
  fill: "none",
3000
3081
  stroke: "currentColor",
@@ -3065,11 +3146,17 @@ window.__ModuleLoader__.load({
3065
3146
  });
3066
3147
  if (name === "background") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
3067
3148
  ...common,
3068
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
3069
- cx: "8",
3070
- cy: "8",
3071
- r: "5.5"
3072
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M8 2.5v11M2.5 8h11M4 4.3c2.4 1.9 5.6 1.9 8 0M4 11.7c2.4-1.9 5.6-1.9 8 0" })]
3149
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
3150
+ x: "2",
3151
+ y: "4.5",
3152
+ width: "10.5",
3153
+ height: "9",
3154
+ rx: "1.5"
3155
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M4.5 2h10a1.5 1.5 0 0 1 1.5 1.5V11M4.5 10.5l2.6-2.8 2.1 2.2 2.3-2.4 1.5 1.5" })]
3156
+ });
3157
+ if (name === "template") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
3158
+ ...common,
3159
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M8 3.6C6.9 2.5 5 2 2.5 2v10.6c2.5 0 4.4.5 5.5 1.6 1.1-1.1 3-1.6 5.5-1.6V2C11 2 9.1 2.5 8 3.6zM8 3.6V14" })
3073
3160
  });
3074
3161
  if (name === "download") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
3075
3162
  ...common,
@@ -3111,7 +3198,12 @@ window.__ModuleLoader__.load({
3111
3198
  title: props.label,
3112
3199
  disabled: props.disabled,
3113
3200
  onClick: props.onClick,
3114
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarIcon, { name: props.name })
3201
+ onMouseEnter: props.onMouseEnter,
3202
+ onMouseLeave: props.onMouseLeave,
3203
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarIcon, {
3204
+ name: props.name,
3205
+ size: props.size
3206
+ })
3115
3207
  });
3116
3208
  }
3117
3209
  function CanvasWorkspace(props) {
@@ -3133,6 +3225,44 @@ window.__ModuleLoader__.load({
3133
3225
  const [createMenu, setCreateMenu] = (0, react.useState)(null);
3134
3226
  const [minimapOpen, setMinimapOpen] = (0, react.useState)(true);
3135
3227
  const [pickerOpen, setPickerOpen] = (0, react.useState)(false);
3228
+ const [backgroundMenu, setBackgroundMenu] = (0, react.useState)(null);
3229
+ const [imageMenu, setImageMenu] = (0, react.useState)(null);
3230
+ const menuCloseTimer = (0, react.useRef)(null);
3231
+ const clearMenuCloseTimer = () => {
3232
+ if (menuCloseTimer.current !== null) {
3233
+ window.clearTimeout(menuCloseTimer.current);
3234
+ menuCloseTimer.current = null;
3235
+ }
3236
+ };
3237
+ const scheduleMenuClose = (0, react.useCallback)(() => {
3238
+ clearMenuCloseTimer();
3239
+ menuCloseTimer.current = window.setTimeout(() => {
3240
+ setBackgroundMenu(null);
3241
+ setImageMenu(null);
3242
+ }, 280);
3243
+ }, []);
3244
+ /** Open one dock menu anchored to its button (root-relative) and close the
3245
+ * other: the two menus are mutually exclusive. */
3246
+ const openDockMenu = (0, react.useCallback)((kind, button) => {
3247
+ clearMenuCloseTimer();
3248
+ const bounds = button.getBoundingClientRect();
3249
+ const rootRect = rootRef.current?.getBoundingClientRect();
3250
+ const screen = {
3251
+ x: bounds.left + bounds.width / 2 - (rootRect?.left ?? 0),
3252
+ y: bounds.top - (rootRect?.top ?? 0)
3253
+ };
3254
+ if (kind === "image") {
3255
+ setImageMenu(screen);
3256
+ setBackgroundMenu(null);
3257
+ } else {
3258
+ setBackgroundMenu(screen);
3259
+ setImageMenu(null);
3260
+ }
3261
+ }, []);
3262
+ const [libraryOpen, setLibraryOpen] = (0, react.useState)(false);
3263
+ const [pickerTab, setPickerTab] = (0, react.useState)("upload");
3264
+ const backgroundFileRef = (0, react.useRef)(null);
3265
+ const imageFileRef = (0, react.useRef)(null);
3136
3266
  const [renamingTitle, setRenamingTitle] = (0, react.useState)(false);
3137
3267
  const [confirmDeleteProject, setConfirmDeleteProject] = (0, react.useState)(false);
3138
3268
  const [saveState, setSaveState] = (0, react.useState)("loading");
@@ -3144,6 +3274,7 @@ window.__ModuleLoader__.load({
3144
3274
  const [composerQuality, setComposerQuality] = (0, react.useState)("auto");
3145
3275
  const [composerCount, setComposerCount] = (0, react.useState)(1);
3146
3276
  const [composerBusy, setComposerBusy] = (0, react.useState)(false);
3277
+ const rootRef = (0, react.useRef)(null);
3147
3278
  const viewportRef = (0, react.useRef)(null);
3148
3279
  const documentRef = (0, react.useRef)(null);
3149
3280
  const selectedIdsRef = (0, react.useRef)(selectedIds);
@@ -3156,6 +3287,8 @@ window.__ModuleLoader__.load({
3156
3287
  const syncedRef = (0, react.useRef)("");
3157
3288
  const processedTasks = (0, react.useRef)(/* @__PURE__ */ new Set());
3158
3289
  const processedImport = (0, react.useRef)("");
3290
+ const localTaskIds = (0, react.useRef)(/* @__PURE__ */ new Set());
3291
+ const mountedAtRef = (0, react.useRef)(Date.now());
3159
3292
  const internalClipboard = (0, react.useRef)(null);
3160
3293
  const pastRef = (0, react.useRef)([]);
3161
3294
  const futureRef = (0, react.useRef)([]);
@@ -3447,10 +3580,20 @@ window.__ModuleLoader__.load({
3447
3580
  setComposerBusy(true);
3448
3581
  try {
3449
3582
  let image;
3583
+ let images;
3450
3584
  let refName;
3451
3585
  if (baseAsset !== void 0) {
3452
3586
  image = await assetToDataUrl(baseAsset);
3453
3587
  refName = "canvas-reference.png";
3588
+ const extras = [];
3589
+ for (const reference of referenceImages.slice(1, 4)) {
3590
+ const asset = usableAsset(reference);
3591
+ if (asset === void 0) continue;
3592
+ try {
3593
+ extras.push(await assetToDataUrl(asset));
3594
+ } catch {}
3595
+ }
3596
+ if (extras.length > 0) images = extras;
3454
3597
  }
3455
3598
  const footprint = nodeSizeFromRatio(composerSize, IMAGE_NODE_SIZE);
3456
3599
  const request = {
@@ -3466,6 +3609,7 @@ window.__ModuleLoader__.load({
3466
3609
  image,
3467
3610
  refName
3468
3611
  },
3612
+ ...images === void 0 ? {} : { images },
3469
3613
  canvas: {
3470
3614
  canvasId: current.id,
3471
3615
  ...target === null ? {} : {
@@ -3476,6 +3620,7 @@ window.__ModuleLoader__.load({
3476
3620
  }
3477
3621
  };
3478
3622
  const task = await api.taskSubmit(request);
3623
+ localTaskIds.current.add(task.id);
3479
3624
  mutate((previous) => {
3480
3625
  const nodes = [...previous.nodes];
3481
3626
  const connections = [...previous.connections];
@@ -3535,47 +3680,154 @@ window.__ModuleLoader__.load({
3535
3680
  onOpenSettings,
3536
3681
  upstreamNodes
3537
3682
  ]);
3538
- (0, react.useEffect)(() => {
3539
- if (document === null) return;
3540
- const canvasTasks = tasks.filter((task) => task.request.canvas?.canvasId === document.id);
3541
- for (const task of canvasTasks) {
3542
- if (task.status !== "completed" && task.status !== "failed" && task.status !== "cancelled") continue;
3543
- if (processedTasks.current.has(task.id)) continue;
3544
- const targets = document.nodes.filter((node) => node.type === "image" && nodeMetadata(node).taskId === task.id && nodeMetadata(node).status === "generating");
3545
- if (targets.length === 0) continue;
3546
- processedTasks.current.add(task.id);
3547
- const sourceId = nodeMetadata(targets[0]).sourceNodeId;
3548
- const fail = (message) => {
3549
- updateNodes((nodes) => nodes.map((node) => node.type === "image" && nodeMetadata(node).taskId === task.id && nodeMetadata(node).status === "generating" ? {
3550
- ...node,
3551
- metadata: {
3552
- ...nodeMetadata(node),
3553
- status: "error",
3554
- error: message
3555
- }
3556
- } : node));
3557
- };
3558
- if (task.status !== "completed" || task.result === void 0 || task.result.images.length === 0) {
3559
- fail(task.error ?? tt("canvas.generateFailed"));
3560
- continue;
3561
- }
3562
- (async () => {
3563
- const assets = [];
3564
- for (const image of task.result.images) {
3565
- const dataUrl = imageDataUrl(image);
3566
- const dimensions = await readImageSize(dataUrl);
3567
- assets.push(await api.canvasUpload(dataUrl, dimensions.width, dimensions.height, {
3568
- origin: "generated",
3569
- originId: task.id
3570
- }));
3571
- }
3572
- updateDocument((previous) => {
3573
- const ordered = previous.nodes.filter((node) => node.type === "image" && nodeMetadata(node).taskId === task.id && nodeMetadata(node).status === "generating");
3574
- if (ordered.length === 0) return previous;
3575
- const last = ordered[ordered.length - 1];
3576
- const nodes = previous.nodes.map((node) => {
3577
- const index = ordered.indexOf(node);
3578
- if (index < 0) return node;
3683
+ /** Re-run a failed image node's generation from its recorded prompt/model,
3684
+ * re-deriving the edit base from the connected source config node. */
3685
+ const retryGeneration = (0, react.useCallback)(async (node) => {
3686
+ const current = documentRef.current;
3687
+ if (current === null || !connected) {
3688
+ setError(tt("canvas.needApi"));
3689
+ onOpenSettings?.();
3690
+ return;
3691
+ }
3692
+ const metadata = nodeMetadata(node);
3693
+ const prompt = (metadata.prompt ?? "").trim();
3694
+ if (prompt === "") {
3695
+ setError(tt("canvas.needPrompt"));
3696
+ return;
3697
+ }
3698
+ const model = imageModels.includes(metadata.model ?? "") ? metadata.model : imageModels[0] ?? "";
3699
+ if (model === "") {
3700
+ setError(tt("canvas.needModel"));
3701
+ return;
3702
+ }
3703
+ const sourceId = metadata.sourceNodeId;
3704
+ const references = sourceId === void 0 ? [] : upstreamNodes(current, sourceId).filter((item) => item.type === "image" && usableAsset(item) !== void 0);
3705
+ const baseAsset = references[0] !== void 0 ? usableAsset(references[0]) : void 0;
3706
+ try {
3707
+ let image;
3708
+ let images;
3709
+ let refName;
3710
+ if (baseAsset !== void 0) {
3711
+ image = await assetToDataUrl(baseAsset);
3712
+ refName = "canvas-reference.png";
3713
+ const extras = [];
3714
+ for (const reference of references.slice(1, 4)) {
3715
+ const asset = usableAsset(reference);
3716
+ if (asset === void 0) continue;
3717
+ try {
3718
+ extras.push(await assetToDataUrl(asset));
3719
+ } catch {}
3720
+ }
3721
+ if (extras.length > 0) images = extras;
3722
+ }
3723
+ const request = {
3724
+ mode: image === void 0 ? "text" : "edit",
3725
+ model,
3726
+ prompt,
3727
+ size: metadata.size ?? "auto",
3728
+ quality: metadata.quality ?? "auto",
3729
+ n: 1,
3730
+ detail: "",
3731
+ ...defaultChannelId === void 0 ? {} : { channelId: defaultChannelId },
3732
+ ...image === void 0 ? {} : {
3733
+ image,
3734
+ refName
3735
+ },
3736
+ ...images === void 0 ? {} : { images },
3737
+ canvas: {
3738
+ canvasId: current.id,
3739
+ sourceNodeId: references[0]?.id ?? sourceId,
3740
+ parentNodeId: node.id,
3741
+ placement: "right"
3742
+ }
3743
+ };
3744
+ const task = await api.taskSubmit(request);
3745
+ localTaskIds.current.add(task.id);
3746
+ patchNode(node.id, {
3747
+ status: "generating",
3748
+ error: void 0,
3749
+ taskId: task.id
3750
+ });
3751
+ setError(null);
3752
+ } catch (caught) {
3753
+ setError(caught instanceof Error ? caught.message : String(caught));
3754
+ }
3755
+ }, [
3756
+ api,
3757
+ connected,
3758
+ defaultChannelId,
3759
+ imageModels,
3760
+ onOpenSettings,
3761
+ patchNode,
3762
+ upstreamNodes
3763
+ ]);
3764
+ (0, react.useEffect)(() => {
3765
+ if (document === null) return;
3766
+ if (!(tasks.length > 0 || Date.now() - mountedAtRef.current > 8e3)) return;
3767
+ const feedIds = new Set(tasks.map((task) => task.id));
3768
+ if (document.nodes.filter((node) => {
3769
+ if (node.type !== "image" || nodeMetadata(node).status !== "generating") return false;
3770
+ const taskId = nodeMetadata(node).taskId;
3771
+ return taskId !== void 0 && !feedIds.has(taskId) && !localTaskIds.current.has(taskId);
3772
+ }).length === 0) return;
3773
+ updateNodes((nodes) => nodes.map((node) => {
3774
+ const taskId = node.type === "image" ? nodeMetadata(node).taskId : void 0;
3775
+ if (node.type !== "image" || nodeMetadata(node).status !== "generating" || taskId === void 0 || feedIds.has(taskId) || localTaskIds.current.has(taskId)) return node;
3776
+ return {
3777
+ ...node,
3778
+ metadata: {
3779
+ ...nodeMetadata(node),
3780
+ status: "error",
3781
+ error: tt("canvas.taskLost")
3782
+ }
3783
+ };
3784
+ }));
3785
+ }, [
3786
+ document,
3787
+ tasks,
3788
+ updateNodes
3789
+ ]);
3790
+ (0, react.useEffect)(() => {
3791
+ if (document === null) return;
3792
+ const canvasTasks = tasks.filter((task) => task.request.canvas?.canvasId === document.id);
3793
+ for (const task of canvasTasks) {
3794
+ if (task.status !== "completed" && task.status !== "failed" && task.status !== "cancelled") continue;
3795
+ if (processedTasks.current.has(task.id)) continue;
3796
+ const targets = document.nodes.filter((node) => node.type === "image" && nodeMetadata(node).taskId === task.id && nodeMetadata(node).status === "generating");
3797
+ if (targets.length === 0) continue;
3798
+ processedTasks.current.add(task.id);
3799
+ const sourceId = nodeMetadata(targets[0]).sourceNodeId;
3800
+ const fail = (message) => {
3801
+ updateNodes((nodes) => nodes.map((node) => node.type === "image" && nodeMetadata(node).taskId === task.id && nodeMetadata(node).status === "generating" ? {
3802
+ ...node,
3803
+ metadata: {
3804
+ ...nodeMetadata(node),
3805
+ status: "error",
3806
+ error: message
3807
+ }
3808
+ } : node));
3809
+ };
3810
+ if (task.status !== "completed" || task.result === void 0 || task.result.images.length === 0) {
3811
+ fail(task.error ?? tt("canvas.generateFailed"));
3812
+ continue;
3813
+ }
3814
+ (async () => {
3815
+ const assets = [];
3816
+ for (const image of task.result.images) {
3817
+ const dataUrl = imageDataUrl(image);
3818
+ const dimensions = await readImageSize(dataUrl);
3819
+ assets.push(await api.canvasUpload(dataUrl, dimensions.width, dimensions.height, {
3820
+ origin: "generated",
3821
+ originId: task.id
3822
+ }));
3823
+ }
3824
+ updateDocument((previous) => {
3825
+ const ordered = previous.nodes.filter((node) => node.type === "image" && nodeMetadata(node).taskId === task.id && nodeMetadata(node).status === "generating");
3826
+ if (ordered.length === 0) return previous;
3827
+ const last = ordered[ordered.length - 1];
3828
+ const nodes = previous.nodes.map((node) => {
3829
+ const index = ordered.indexOf(node);
3830
+ if (index < 0) return node;
3579
3831
  const asset = assets[index];
3580
3832
  return asset === void 0 ? {
3581
3833
  ...node,
@@ -3698,7 +3950,7 @@ window.__ModuleLoader__.load({
3698
3950
  const first = list[0] === void 0 ? await api.canvasCreate(tt("canvas.untitled")) : await api.canvasRead(list[0].id);
3699
3951
  if (disposed) return;
3700
3952
  setProjects(list[0] === void 0 ? [summaryOf(first)] : list);
3701
- setDocument(first);
3953
+ setDocument(normalizeConfigNodeSizes(first));
3702
3954
  syncedRef.current = JSON.stringify(first);
3703
3955
  setSaveState("saved");
3704
3956
  }).catch((caught) => {
@@ -3773,6 +4025,8 @@ window.__ModuleLoader__.load({
3773
4025
  if (event.key === "Escape") {
3774
4026
  setContextMenu(null);
3775
4027
  setCreateMenu(null);
4028
+ setBackgroundMenu(null);
4029
+ setImageMenu(null);
3776
4030
  if (!isEditingTarget(event.target)) {
3777
4031
  setSelectedIds(/* @__PURE__ */ new Set());
3778
4032
  setSelectedConnectionId(null);
@@ -3877,6 +4131,10 @@ window.__ModuleLoader__.load({
3877
4131
  const target = event.target instanceof Element ? event.target : null;
3878
4132
  setContextMenu(null);
3879
4133
  setCreateMenu(null);
4134
+ if (!target?.closest("[data-canvas-no-zoom]")) {
4135
+ setBackgroundMenu(null);
4136
+ setImageMenu(null);
4137
+ }
3880
4138
  const isBackground = target?.closest("[data-node-id],[data-connection-hit]") === null;
3881
4139
  if (event.button === 1 || event.button === 0 && (tool === "pan" || temporaryPanTool) && isBackground) {
3882
4140
  event.preventDefault();
@@ -4231,7 +4489,7 @@ window.__ModuleLoader__.load({
4231
4489
  const selectProject = (0, react.useCallback)(async (id) => {
4232
4490
  try {
4233
4491
  const next = await api.canvasRead(id);
4234
- setDocument(next);
4492
+ setDocument(normalizeConfigNodeSizes(next));
4235
4493
  setSelectedIds(/* @__PURE__ */ new Set());
4236
4494
  setSelectedConnectionId(null);
4237
4495
  syncedRef.current = JSON.stringify(next);
@@ -4278,12 +4536,80 @@ window.__ModuleLoader__.load({
4278
4536
  }, [document, selectedIds]);
4279
4537
  const cursorClass = tool === "pan" || temporaryPanTool ? canvas_workspace_module_css_default.panCursor : canvas_workspace_module_css_default.selectCursor;
4280
4538
  const backgroundMode = document?.background ?? "dots";
4281
- const cycleBackground = (0, react.useCallback)(() => {
4539
+ const setBackgroundMode = (0, react.useCallback)((mode) => {
4540
+ mutate((previous) => ({
4541
+ ...previous,
4542
+ background: mode,
4543
+ ...mode === "image" ? {} : { backgroundImage: void 0 }
4544
+ }));
4545
+ setBackgroundMenu(null);
4546
+ }, [mutate]);
4547
+ const uploadBackgroundImage = (0, react.useCallback)(async (file) => {
4548
+ try {
4549
+ const dataUrl = await new Promise((resolve, reject) => {
4550
+ const reader = new FileReader();
4551
+ reader.onload = () => resolve(String(reader.result));
4552
+ reader.onerror = () => reject(/* @__PURE__ */ new Error("读取图片失败"));
4553
+ reader.readAsDataURL(file);
4554
+ });
4555
+ const dimensions = await readImageSize(dataUrl);
4556
+ const asset = await api.canvasUpload(dataUrl, dimensions.width, dimensions.height, {
4557
+ origin: "upload",
4558
+ originId: "canvas-background"
4559
+ });
4560
+ mutate((previous) => ({
4561
+ ...previous,
4562
+ background: "image",
4563
+ backgroundImage: asset.url
4564
+ }));
4565
+ setBackgroundMenu(null);
4566
+ setError(null);
4567
+ } catch (caught) {
4568
+ setError(caught instanceof Error ? caught.message : String(caught));
4569
+ }
4570
+ }, [api, mutate]);
4571
+ const removeBackgroundImage = (0, react.useCallback)(() => {
4282
4572
  mutate((previous) => ({
4283
4573
  ...previous,
4284
- background: previous.background === "dots" ? "lines" : previous.background === "lines" ? "blank" : "dots"
4574
+ background: "dots",
4575
+ backgroundImage: void 0
4285
4576
  }));
4577
+ setBackgroundMenu(null);
4286
4578
  }, [mutate]);
4579
+ const applyTemplate = (0, react.useCallback)((prompt) => {
4580
+ const center = canvasCenter();
4581
+ const config = createConfigNode(center);
4582
+ const placed = {
4583
+ ...createTextNode(),
4584
+ x: Math.round(config.x - TEXT_NODE_SIZE.width - 80),
4585
+ y: Math.round(config.y + (config.height - TEXT_NODE_SIZE.height) / 2),
4586
+ metadata: {
4587
+ text: prompt,
4588
+ fontSize: 14
4589
+ }
4590
+ };
4591
+ mutate((previous) => ({
4592
+ ...previous,
4593
+ nodes: [
4594
+ ...previous.nodes,
4595
+ placed,
4596
+ config
4597
+ ],
4598
+ connections: [...previous.connections, {
4599
+ id: newId("edge"),
4600
+ fromNodeId: placed.id,
4601
+ toNodeId: config.id
4602
+ }]
4603
+ }));
4604
+ setSelectedIds(/* @__PURE__ */ new Set([config.id]));
4605
+ setSelectedConnectionId(null);
4606
+ setLibraryOpen(false);
4607
+ }, [
4608
+ canvasCenter,
4609
+ createConfigNode,
4610
+ createTextNode,
4611
+ mutate
4612
+ ]);
4287
4613
  const gridSize = GRID_SIZE * (document?.viewport.k ?? 1);
4288
4614
  const gridOffsetX = (document?.viewport.x ?? 0) % gridSize;
4289
4615
  const gridOffsetY = (document?.viewport.y ?? 0) % gridSize;
@@ -4351,9 +4677,25 @@ window.__ModuleLoader__.load({
4351
4677
  placeholder: tt("canvas.textPlaceholder"),
4352
4678
  onPointerDown: (event) => event.stopPropagation(),
4353
4679
  onChange: (event) => patchNode(node.id, { text: event.target.value })
4354
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4680
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4355
4681
  className: canvas_workspace_module_css_default.nodeBody,
4356
- children: isGenerating ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4682
+ children: [hasImage ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4683
+ "aria-hidden": "true",
4684
+ children: [metadata.model !== void 0 && metadata.model !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4685
+ className: `${canvas_workspace_module_css_default.imageInfo} ${canvas_workspace_module_css_default.imageInfoLeft}`,
4686
+ children: metadata.model
4687
+ }) : asset.origin === "gallery" || asset.origin === "history" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4688
+ className: `${canvas_workspace_module_css_default.imageInfo} ${canvas_workspace_module_css_default.imageInfoLeft}`,
4689
+ children: asset.origin === "gallery" ? tt("canvas.fromGallery") : tt("canvas.fromHistory")
4690
+ }) : null, asset !== void 0 && asset.width > 1 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4691
+ className: `${canvas_workspace_module_css_default.imageInfo} ${canvas_workspace_module_css_default.imageInfoRight}`,
4692
+ children: [
4693
+ asset.width,
4694
+ "×",
4695
+ asset.height
4696
+ ]
4697
+ }) : null]
4698
+ }) : null, isGenerating ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4357
4699
  className: canvas_workspace_module_css_default.nodeState,
4358
4700
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4359
4701
  className: canvas_workspace_module_css_default.spinner,
@@ -4363,11 +4705,10 @@ window.__ModuleLoader__.load({
4363
4705
  className: canvas_workspace_module_css_default.nodeStateError,
4364
4706
  children: [metadata.error ?? tt("canvas.generateFailed"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
4365
4707
  type: "button",
4366
- onClick: () => patchNode(node.id, {
4367
- status: "idle",
4368
- error: void 0
4369
- }),
4370
- children: tt("canvas.dismiss")
4708
+ onClick: () => {
4709
+ retryGeneration(node);
4710
+ },
4711
+ children: tt("canvas.retry")
4371
4712
  })]
4372
4713
  }) : hasImage ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
4373
4714
  src: asset.url,
@@ -4377,9 +4718,9 @@ window.__ModuleLoader__.load({
4377
4718
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
4378
4719
  type: "button",
4379
4720
  className: canvas_workspace_module_css_default.nodeEmpty,
4380
- onClick: () => setPickerOpen(true),
4721
+ onClick: () => imageFileRef.current?.click(),
4381
4722
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarIcon, { name: "image" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: tt("canvas.emptyImageNode") })]
4382
- })
4723
+ })]
4383
4724
  }),
4384
4725
  isSelected ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4385
4726
  className: canvas_workspace_module_css_default.resizeHandle,
@@ -4483,10 +4824,11 @@ window.__ModuleLoader__.load({
4483
4824
  if (!composerVisible || document === null || composerTarget === null) return null;
4484
4825
  const linkedCount = composerReferenceCount + composerTextCount;
4485
4826
  const k = document.viewport.k;
4486
- const centerX = document.viewport.x + (composerTarget.x + composerTarget.width / 2) * k;
4827
+ const topOffset = viewportRef.current?.offsetTop ?? 0;
4828
+ const centerX = topOffset * 0 + document.viewport.x + (composerTarget.x + composerTarget.width / 2) * k;
4487
4829
  const clampedX = Math.min(Math.max(centerX, 292), Math.max(292, viewportSize.width - 292));
4488
- const belowY = document.viewport.y + (composerTarget.y + composerTarget.height) * k + 14;
4489
- const top = belowY > viewportSize.height - 170 ? Math.max(64, document.viewport.y + composerTarget.y * k - 158) : belowY;
4830
+ const belowY = topOffset + document.viewport.y + (composerTarget.y + composerTarget.height) * k + 14;
4831
+ const top = belowY > viewportSize.height + topOffset - 170 ? Math.max(64, topOffset + document.viewport.y + composerTarget.y * k - 158) : belowY;
4490
4832
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4491
4833
  className: canvas_workspace_module_css_default.composer,
4492
4834
  "data-canvas-no-zoom": "",
@@ -4840,6 +5182,7 @@ window.__ModuleLoader__.load({
4840
5182
  };
4841
5183
  })();
4842
5184
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5185
+ ref: rootRef,
4843
5186
  className: canvas_workspace_module_css_default.root,
4844
5187
  "data-canvas-workspace": "",
4845
5188
  children: [
@@ -4900,23 +5243,6 @@ window.__ModuleLoader__.load({
4900
5243
  children: document?.title ?? ""
4901
5244
  }),
4902
5245
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: canvas_workspace_module_css_default.topBarSpacer }),
4903
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
4904
- name: "background",
4905
- label: tt("canvas.background"),
4906
- onClick: cycleBackground
4907
- }),
4908
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
4909
- name: "undo",
4910
- label: tt("canvas.undo"),
4911
- disabled: pastRef.current.length === 0,
4912
- onClick: undo
4913
- }),
4914
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
4915
- name: "redo",
4916
- label: tt("canvas.redo"),
4917
- disabled: futureRef.current.length === 0,
4918
- onClick: redo
4919
- }),
4920
5246
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4921
5247
  className: canvas_workspace_module_css_default.saveState,
4922
5248
  "data-state": saveState,
@@ -4957,12 +5283,17 @@ window.__ModuleLoader__.load({
4957
5283
  children: [
4958
5284
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4959
5285
  className: canvas_workspace_module_css_default.grid,
4960
- style: {
5286
+ style: backgroundMode === "image" && document?.backgroundImage ? {
5287
+ backgroundImage: `url(${document.backgroundImage})`,
5288
+ backgroundSize: "cover",
5289
+ backgroundPosition: "center"
5290
+ } : {
4961
5291
  backgroundSize: `${gridSize}px ${gridSize}px`,
4962
5292
  backgroundPosition: `${gridOffsetX}px ${gridOffsetY}px`
4963
5293
  },
4964
5294
  "data-mode": backgroundMode,
4965
- "aria-hidden": "true"
5295
+ "aria-hidden": "true",
5296
+ children: backgroundMode === "image" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: canvas_workspace_module_css_default.gridScrim }) : null
4966
5297
  }),
4967
5298
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4968
5299
  className: canvas_workspace_module_css_default.world,
@@ -4980,15 +5311,28 @@ window.__ModuleLoader__.load({
4980
5311
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4981
5312
  className: `${canvas_workspace_module_css_default.dock} ${cursorClass}`,
4982
5313
  "data-canvas-no-zoom": "",
5314
+ onPointerMove: (event) => {
5315
+ const buttons = [...event.currentTarget.querySelectorAll(".iconButton")];
5316
+ for (const button of buttons) {
5317
+ const rect = button.getBoundingClientRect();
5318
+ const distance = Math.abs(event.clientX - (rect.left + rect.width / 2)) / 40;
5319
+ button.style.setProperty("--dock-lift", `${Math.max(0, 4 - distance * 1.5)}px`);
5320
+ }
5321
+ },
5322
+ onPointerLeave: (event) => {
5323
+ for (const button of event.currentTarget.querySelectorAll(".iconButton")) button.style.removeProperty("--dock-lift");
5324
+ },
4983
5325
  children: [
4984
5326
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
4985
5327
  name: "select",
5328
+ size: 18,
4986
5329
  label: tt("canvas.toolSelect"),
4987
5330
  active: tool === "select",
4988
5331
  onClick: () => setTool("select")
4989
5332
  }),
4990
5333
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
4991
5334
  name: "pan",
5335
+ size: 18,
4992
5336
  label: tt("canvas.toolPan"),
4993
5337
  active: tool === "pan",
4994
5338
  onClick: () => setTool("pan")
@@ -4996,28 +5340,228 @@ window.__ModuleLoader__.load({
4996
5340
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: canvas_workspace_module_css_default.dockDivider }),
4997
5341
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
4998
5342
  name: "image",
5343
+ size: 18,
4999
5344
  label: tt("canvas.addImage"),
5000
- onClick: () => setPickerOpen(true)
5345
+ active: imageMenu !== null,
5346
+ onClick: (event) => openDockMenu("image", event.currentTarget),
5347
+ onMouseEnter: (event) => openDockMenu("image", event.currentTarget),
5348
+ onMouseLeave: scheduleMenuClose
5001
5349
  }),
5002
5350
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
5003
5351
  name: "text",
5352
+ size: 18,
5004
5353
  label: tt("canvas.addText"),
5005
5354
  onClick: () => placeNewNode(createTextNode())
5006
5355
  }),
5007
5356
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
5008
5357
  name: "sparkle",
5358
+ size: 18,
5009
5359
  label: tt("canvas.addConfigNode"),
5010
5360
  onClick: () => placeNewNode(createConfigNode())
5011
5361
  }),
5362
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
5363
+ name: "template",
5364
+ size: 18,
5365
+ label: tt("canvas.templateLibrary"),
5366
+ active: libraryOpen,
5367
+ onClick: () => setLibraryOpen((previous) => !previous)
5368
+ }),
5369
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: canvas_workspace_module_css_default.dockDivider }),
5370
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
5371
+ name: "background",
5372
+ size: 18,
5373
+ label: tt("canvas.background"),
5374
+ active: backgroundMenu !== null,
5375
+ onClick: (event) => openDockMenu("background", event.currentTarget),
5376
+ onMouseEnter: (event) => openDockMenu("background", event.currentTarget),
5377
+ onMouseLeave: scheduleMenuClose
5378
+ }),
5379
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
5380
+ name: "undo",
5381
+ size: 18,
5382
+ label: tt("canvas.undo"),
5383
+ disabled: pastRef.current.length === 0,
5384
+ onClick: undo
5385
+ }),
5386
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
5387
+ name: "redo",
5388
+ size: 18,
5389
+ label: tt("canvas.redo"),
5390
+ disabled: futureRef.current.length === 0,
5391
+ onClick: redo
5392
+ }),
5012
5393
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: canvas_workspace_module_css_default.dockDivider }),
5013
5394
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
5014
5395
  name: "trash",
5396
+ size: 18,
5015
5397
  label: tt("canvas.delete"),
5016
5398
  disabled: selectedIds.size === 0 && selectedConnectionId === null,
5017
5399
  onClick: deleteSelection
5018
5400
  })
5019
5401
  ]
5020
5402
  }),
5403
+ imageMenu !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5404
+ className: canvas_workspace_module_css_default.backgroundMenu,
5405
+ style: {
5406
+ left: imageMenu.x,
5407
+ top: imageMenu.y - 10
5408
+ },
5409
+ "data-canvas-no-zoom": "",
5410
+ role: "menu",
5411
+ onMouseEnter: clearMenuCloseTimer,
5412
+ onMouseLeave: scheduleMenuClose,
5413
+ children: [
5414
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
5415
+ type: "button",
5416
+ role: "menuitem",
5417
+ onClick: () => {
5418
+ imageFileRef.current?.click();
5419
+ setImageMenu(null);
5420
+ },
5421
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarIcon, {
5422
+ name: "image",
5423
+ size: 16
5424
+ }), tt("canvas.imageMenuUpload")]
5425
+ }),
5426
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
5427
+ type: "button",
5428
+ role: "menuitem",
5429
+ onClick: () => {
5430
+ setPickerTab("gallery");
5431
+ setPickerOpen(true);
5432
+ setImageMenu(null);
5433
+ },
5434
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarIcon, {
5435
+ name: "template",
5436
+ size: 16
5437
+ }), tt("canvas.imageMenuAssets")]
5438
+ }),
5439
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
5440
+ type: "button",
5441
+ role: "menuitem",
5442
+ onClick: () => {
5443
+ setPickerTab("history");
5444
+ setPickerOpen(true);
5445
+ setImageMenu(null);
5446
+ },
5447
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarIcon, {
5448
+ name: "undo",
5449
+ size: 16
5450
+ }), tt("canvas.imageMenuHistory")]
5451
+ }),
5452
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
5453
+ type: "button",
5454
+ role: "menuitem",
5455
+ onClick: () => {
5456
+ setPickerTab("generate");
5457
+ setPickerOpen(true);
5458
+ setImageMenu(null);
5459
+ },
5460
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarIcon, {
5461
+ name: "sparkle",
5462
+ size: 16
5463
+ }), tt("canvas.imageMenuGenerate")]
5464
+ })
5465
+ ]
5466
+ }) : null,
5467
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5468
+ ref: imageFileRef,
5469
+ type: "file",
5470
+ accept: "image/png,image/jpeg,image/webp,image/gif",
5471
+ multiple: true,
5472
+ hidden: true,
5473
+ onChange: (event) => {
5474
+ const files = [...event.target.files ?? []].filter((file) => file.type.startsWith("image/"));
5475
+ event.target.value = "";
5476
+ if (files.length === 0) return;
5477
+ const world = canvasCenter();
5478
+ Promise.all(files.map(async (file) => {
5479
+ const dataUrl = await new Promise((resolve, reject) => {
5480
+ const reader = new FileReader();
5481
+ reader.onload = () => resolve(String(reader.result));
5482
+ reader.onerror = () => reject(/* @__PURE__ */ new Error("读取图片失败"));
5483
+ reader.readAsDataURL(file);
5484
+ });
5485
+ const dimensions = await readImageSize(dataUrl);
5486
+ return api.canvasUpload(dataUrl, dimensions.width, dimensions.height, {
5487
+ origin: "upload",
5488
+ originId: file.name
5489
+ });
5490
+ })).then((assets) => {
5491
+ const current = documentRef.current;
5492
+ const selectedId = selectedIdsRef.current.size === 1 ? [...selectedIdsRef.current][0] : void 0;
5493
+ const selectedNode = current?.nodes.find((node) => node.id === selectedId);
5494
+ if (selectedNode?.type === "image" && usableAsset(selectedNode) === void 0 && assets[0] !== void 0) {
5495
+ mutate((previous) => ({
5496
+ ...previous,
5497
+ nodes: previous.nodes.map((node) => node.id === selectedNode.id ? {
5498
+ ...node,
5499
+ width: sizeForAsset(assets[0]).width,
5500
+ height: sizeForAsset(assets[0]).height,
5501
+ metadata: {
5502
+ ...nodeMetadata(node),
5503
+ asset: assets[0],
5504
+ status: "success",
5505
+ error: void 0
5506
+ }
5507
+ } : node)
5508
+ }));
5509
+ if (assets.length > 1) addAssets(assets.slice(1), world);
5510
+ } else addAssets(assets, world);
5511
+ }).catch((caught) => setError(caught instanceof Error ? caught.message : String(caught)));
5512
+ }
5513
+ }),
5514
+ backgroundMenu !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5515
+ className: canvas_workspace_module_css_default.backgroundMenu,
5516
+ style: {
5517
+ left: backgroundMenu.x,
5518
+ top: backgroundMenu.y - 10
5519
+ },
5520
+ "data-canvas-no-zoom": "",
5521
+ role: "menu",
5522
+ onMouseEnter: clearMenuCloseTimer,
5523
+ onMouseLeave: scheduleMenuClose,
5524
+ children: [
5525
+ [
5526
+ ["dots", tt("canvas.backgroundDots")],
5527
+ ["lines", tt("canvas.backgroundLines")],
5528
+ ["diagonal", tt("canvas.backgroundDiagonal")],
5529
+ ["checker", tt("canvas.backgroundChecker")],
5530
+ ["blank", tt("canvas.backgroundBlank")]
5531
+ ].map(([mode, label]) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5532
+ type: "button",
5533
+ role: "menuitem",
5534
+ "data-active": backgroundMode === mode ? "" : void 0,
5535
+ onClick: () => setBackgroundMode(mode),
5536
+ children: label
5537
+ }, mode)),
5538
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: canvas_workspace_module_css_default.backgroundMenuDivider }),
5539
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5540
+ type: "button",
5541
+ role: "menuitem",
5542
+ "data-active": backgroundMode === "image" ? "" : void 0,
5543
+ onClick: () => backgroundFileRef.current?.click(),
5544
+ children: tt("canvas.backgroundUpload")
5545
+ }),
5546
+ backgroundMode === "image" && document?.backgroundImage ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5547
+ type: "button",
5548
+ role: "menuitem",
5549
+ onClick: removeBackgroundImage,
5550
+ children: tt("canvas.backgroundRemove")
5551
+ }) : null,
5552
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5553
+ ref: backgroundFileRef,
5554
+ type: "file",
5555
+ accept: "image/png,image/jpeg,image/webp,image/gif",
5556
+ hidden: true,
5557
+ onChange: (event) => {
5558
+ const file = event.target.files?.[0];
5559
+ if (file !== void 0) uploadBackgroundImage(file);
5560
+ event.target.value = "";
5561
+ }
5562
+ })
5563
+ ]
5564
+ }) : null,
5021
5565
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5022
5566
  className: canvas_workspace_module_css_default.zoomDock,
5023
5567
  "data-canvas-no-zoom": "",
@@ -5051,6 +5595,11 @@ window.__ModuleLoader__.load({
5051
5595
  minimapOpen ? renderMinimap() : null,
5052
5596
  renderComposer(),
5053
5597
  renderContextMenu(),
5598
+ libraryOpen ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TemplateLibrary, {
5599
+ api,
5600
+ onClose: () => setLibraryOpen(false),
5601
+ onUse: applyTemplate
5602
+ }) : null,
5054
5603
  error !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5055
5604
  className: canvas_workspace_module_css_default.errorToast,
5056
5605
  role: "status",
@@ -5070,6 +5619,7 @@ window.__ModuleLoader__.load({
5070
5619
  defaultChannelId,
5071
5620
  canvasId: document?.id ?? "",
5072
5621
  connected,
5622
+ initialTab: pickerTab,
5073
5623
  onClose: () => setPickerOpen(false),
5074
5624
  onAssets: (assets) => {
5075
5625
  addAssets(assets);
@@ -5106,7 +5656,7 @@ window.__ModuleLoader__.load({
5106
5656
  }
5107
5657
  function ImagePicker(props) {
5108
5658
  const { api, history, gallery, imageModels, defaultChannelId, canvasId, connected, onClose, onAssets } = props;
5109
- const [tab, setTab] = (0, react.useState)("upload");
5659
+ const [tab, setTab] = (0, react.useState)(props.initialTab ?? "upload");
5110
5660
  const [selected, setSelected] = (0, react.useState)([]);
5111
5661
  const [dimensions, setDimensions] = (0, react.useState)({});
5112
5662
  const [prompt, setPrompt] = (0, react.useState)("");
@@ -5771,7 +6321,7 @@ window.__ModuleLoader__.load({
5771
6321
  const CHAT_IMAGE_EVENT = "dsh-imagegen:chat-images";
5772
6322
  //#endregion
5773
6323
  //#region \0dsh-css:E:\dsh-plugin\src\client\panel.module.css.mjs
5774
- const css$2 = "[data-pane=conversation],[class*=centerCol]{min-width:0;min-height:0;position:relative}[data-dsh-imagegen-view]{z-index:60;background:var(--dsw-alias-bg-base);grid-area:1/1;min-width:0;min-height:0;display:none;position:relative}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation],html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]{grid-template-columns:minmax(0, 1fr) 8px minmax(320px, clamp(320px, var(--dsh-imagegen-chat-width,36%), 70%));background:var(--dsw-alias-border-l1);grid-template-rows:minmax(0,1fr);gap:1px;overflow:hidden;display:grid!important}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-imagegen-view]{display:block}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-slot=conversation]{background:var(--dsw-alias-bg-base);grid-area:1/3;align-items:stretch;width:auto;min-width:0;min-height:0;overflow:hidden;display:flex!important}html[data-dsh-imagegen-active] [data-slot=conversation]>[data-phase]{flex:auto;align-self:stretch;width:100%;min-width:0;max-width:none}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-imagegen-chat-resizer]{grid-area:1/2}.Yvqh9W_chatResizer{z-index:70;width:8px;min-width:8px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-border-l1);cursor:col-resize;touch-action:none;justify-content:center;align-items:center;display:none;position:relative}.Yvqh9W_chatResizer:before{content:\"\";opacity:.55;background:currentColor;border-radius:3px;width:3px;height:36px}.Yvqh9W_chatResizer:hover,.Yvqh9W_chatResizer:focus-visible{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2);outline:none}html[data-dsh-imagegen-active] [data-dsh-imagegen-chat-resizer]{display:flex!important}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-imagegen-view]):not([data-slot=conversation]):not([data-dsh-imagegen-chat-resizer]),html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-imagegen-view]):not([data-slot=conversation]):not([data-dsh-imagegen-chat-resizer]),html[data-dsh-imagegen-active] [data-dsh-imagegen-sidebar-root]>:not([data-dsh-imagegen-session-tabs]):not([class*=logoRow]):not([class*=regionArea]):not([class*=footArea]){display:none!important}@media (width<=760px){html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation],html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]{grid-template-rows:minmax(0,1fr) minmax(340px,.9fr);grid-template-columns:minmax(0,1fr);overflow-y:auto}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-slot=conversation]{grid-area:2/1}html[data-dsh-imagegen-active] [data-dsh-imagegen-chat-resizer]{display:none!important}}.Yvqh9W_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}.Yvqh9W_entry:hover{background:var(--dsw-specific-sidebar-nav-item-hover);color:var(--dsw-alias-label-primary)}.Yvqh9W_entry[data-active]{background:var(--dsw-specific-sidebar-nav-item-active);color:var(--dsw-alias-label-primary);font-weight:600}.Yvqh9W_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.Yvqh9W_entryLabel{text-overflow:ellipsis;overflow:hidden}.Yvqh9W_sessionTabs{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:9px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:2px;width:100%;min-width:0;padding:3px;display:grid}.Yvqh9W_sessionTab{min-width:0;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;white-space:nowrap;background:0 0;border:0;border-radius:7px;justify-content:center;align-items:center;gap:6px;padding:0 8px;font-size:12px;display:inline-flex}[data-sidebar-collapsed] .Yvqh9W_sessionTabs{background:0 0;border:none;border-radius:0;flex-direction:column;gap:6px;width:auto;padding:0;display:flex}[data-sidebar-collapsed] .Yvqh9W_sessionTab{border-radius:9px;width:34px;height:34px;padding:0;font-size:0}[data-sidebar-collapsed] .Yvqh9W_sessionTabLabel{display:none}.Yvqh9W_sessionTab:hover,.Yvqh9W_sessionTab[data-active]{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-active)}.Yvqh9W_sessionTabIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.Yvqh9W_sessionTabLabel{text-overflow:ellipsis;min-width:0;overflow:hidden}[class*=regionArea]{min-height:0;position:relative}.Yvqh9W_sidebarHistoryHost{z-index:30;background:var(--dsw-alias-bg-base);min-width:0;min-height:0;padding:6px 4px;display:none;position:absolute;inset:0;overflow:hidden}html[data-dsh-imagegen-active] .Yvqh9W_sidebarHistoryHost{display:flex}.Yvqh9W_sidebarHistoryHost .Yvqh9W_history{background:0 0;border:0;border-radius:8px;width:100%;height:100%}[data-dsh-frame][data-sidebar-collapsed] .Yvqh9W_sidebarHistoryHost{display:none}[data-dsh-frame][data-sidebar-collapsed] .Yvqh9W_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] .Yvqh9W_entryLabel{display:none}.Yvqh9W_view{width:100%;min-width:0;min-height:0;overflow:hidden}.Yvqh9W_panel,.Yvqh9W_panel *,.Yvqh9W_panel :before,.Yvqh9W_panel :after{box-sizing:border-box}.Yvqh9W_panel{background:var(--dsw-alias-bg-base);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:10px;padding:14px 16px 16px;display:flex;position:relative;overflow:hidden}.Yvqh9W_panelHeader{flex:none;justify-content:space-between;align-items:center;gap:12px;display:flex;position:relative}.Yvqh9W_panelHeading{align-items:baseline;gap:10px;min-width:0;display:flex}.Yvqh9W_panelTitle{color:var(--dsw-alias-label-primary);white-space:nowrap;margin:0;font-size:16px;font-weight:700}.Yvqh9W_githubLink{width:22px;height:22px;color:var(--dsw-alias-label-secondary);border-radius:6px;flex:none;justify-content:center;align-items:center;text-decoration:none;transition:color .12s,background .12s;display:inline-flex}.Yvqh9W_githubLink:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_connectionStatus{border:1px solid var(--dsw-alias-label-error);height:28px;color:var(--dsw-alias-label-error);font:inherit;white-space:nowrap;background:0 0;border-radius:8px;flex:none;align-items:center;gap:6px;padding:0 10px;font-size:12px;line-height:1;display:inline-flex}.Yvqh9W_connectionStatus[data-connected=true]{border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary)}.Yvqh9W_connectionDot{background:currentColor;border-radius:50%;width:6px;height:6px}.Yvqh9W_updateBanner{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-primary);overflow-wrap:anywhere;border-radius:10px;flex:none;justify-content:space-between;align-items:center;gap:12px;padding:7px 10px 7px 12px;font-size:12px;line-height:1.5;display:flex}.Yvqh9W_updateBanner[data-kind=ok]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}.Yvqh9W_updateText{min-width:0}.Yvqh9W_updateActions{flex:none;align-items:center;gap:10px;display:inline-flex}.Yvqh9W_updateRelease{color:inherit;text-underline-offset:2px;white-space:nowrap;text-decoration:underline}@media (width<=700px){.Yvqh9W_panelHeader{align-items:flex-start}.Yvqh9W_panelHeading{flex-direction:column;align-items:flex-start;gap:2px}.Yvqh9W_updateBanner{flex-direction:column;align-items:flex-start}.Yvqh9W_updateActions{justify-content:space-between;width:100%}}.Yvqh9W_studio{flex:1;min-width:0;min-height:0;display:flex}.Yvqh9W_generation{gap:14px;width:100%;min-width:0;min-height:0;display:flex}.Yvqh9W_generation[data-workspace=canvas]{height:100%;display:flex}.Yvqh9W_generation[data-workspace=canvas]>.Yvqh9W_config,.Yvqh9W_generation[data-workspace=canvas]>.Yvqh9W_canvas{display:none!important}.Yvqh9W_config{width:clamp(240px, var(--dsh-imagegen-config-width,300px), 480px);flex-direction:column;flex:none;gap:12px;min-width:240px;max-width:480px;height:100%;min-height:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_configHeader{flex:none;justify-content:flex-end;min-height:28px;display:flex}.Yvqh9W_configToggle{border:1px solid var(--dsw-alias-border-l1);width:28px;height:28px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;border-radius:7px;justify-content:center;align-items:center;padding:0;display:inline-flex}.Yvqh9W_configToggle:hover,.Yvqh9W_configToggle:focus-visible{border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-brand-primary);outline:none}.Yvqh9W_config[data-collapsed=true]{gap:0;width:38px;min-width:38px;max-width:38px}.Yvqh9W_config[data-collapsed=true] .Yvqh9W_configHeader{justify-content:center}.Yvqh9W_config[data-collapsed=true]>:not(.Yvqh9W_configHeader){display:none}.Yvqh9W_configScroll{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:12px;min-height:0;padding-right:2px;display:flex;overflow-y:auto}.Yvqh9W_configScroll::-webkit-scrollbar{width:8px}.Yvqh9W_configScroll::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_canvas{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_taskTray{z-index:6;border:1px solid var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 92%, transparent);backdrop-filter:blur(10px);border-radius:9px;flex-direction:column;width:min(360px,100% - 24px);max-height:calc(100% - 24px);display:flex;position:absolute;top:12px;right:12px;overflow:hidden;box-shadow:0 8px 24px #0000001f}.Yvqh9W_taskTray[data-open=false]{width:auto;max-width:calc(100% - 24px)}.Yvqh9W_taskTrayHeader{min-height:34px;color:var(--dsw-alias-label-primary);border-bottom:1px solid var(--dsw-alias-border-l1);align-items:stretch;font-size:12px;font-weight:600;display:flex}.Yvqh9W_taskTray[data-open=false] .Yvqh9W_taskTrayHeader{border-bottom:0}.Yvqh9W_taskTrayToggle{min-width:0;color:inherit;cursor:pointer;font:inherit;font-size:inherit;font-weight:inherit;text-align:left;background:0 0;border:0;flex:1;align-items:center;gap:8px;padding:8px 10px;display:flex}.Yvqh9W_taskTrayToggle:hover{background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_taskTrayCount{min-width:18px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);text-align:center;border-radius:999px;padding:1px 5px;font-size:11px;font-weight:500}.Yvqh9W_taskTrayChevron{color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:12px;font-weight:400}.Yvqh9W_taskTrayClose{border:0;border-left:1px solid var(--dsw-alias-border-l1);width:32px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;background:0 0;font-size:17px}.Yvqh9W_taskTrayClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_taskTray[data-open=false] .Yvqh9W_taskTrayToggle{min-height:34px}.Yvqh9W_taskRows{min-height:0;overflow-y:auto}.Yvqh9W_taskTray[data-open=false] .Yvqh9W_taskRows{display:none}.Yvqh9W_taskRow{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:7px;padding:7px 10px;display:grid}.Yvqh9W_taskRow:first-of-type{border-top:0}.Yvqh9W_taskStatus{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px}.Yvqh9W_taskRow[data-status=running] .Yvqh9W_taskStatus{color:var(--dsw-alias-brand-primary)}.Yvqh9W_taskRow[data-status=failed] .Yvqh9W_taskStatus{color:var(--dsw-alias-label-error)}.Yvqh9W_taskPrompt{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.Yvqh9W_taskRow button{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border:0;border-radius:5px;padding:2px 7px;font-size:11px}.Yvqh9W_taskRow button:hover{color:var(--dsw-alias-brand-primary)}.Yvqh9W_configGuide{z-index:1100;background:#00000059;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.Yvqh9W_configGuideBody{border:1px solid var(--dsw-alias-border-l2);width:min(360px,100%);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border-radius:10px;flex-direction:column;gap:12px;padding:18px;display:flex;box-shadow:0 14px 40px #0003}.Yvqh9W_configGuideBody span{color:var(--dsw-alias-label-secondary);font-size:13px;line-height:1.55}.Yvqh9W_configGuideBody button{min-height:30px;color:var(--dsw-alias-bg-layer-1);background:var(--dsw-alias-brand-primary);cursor:pointer;font:inherit;border:0;border-radius:7px;align-self:flex-end;padding:0 12px;font-size:12px}.Yvqh9W_history{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;width:auto;min-width:0;max-width:none;min-height:0;display:flex;overflow:hidden}.Yvqh9W_historyHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;display:flex}.Yvqh9W_historyHeaderActions{flex:none;align-items:center;gap:6px;display:flex}.Yvqh9W_historyFilters{border-bottom:1px solid var(--dsw-alias-border-l1);grid-template-columns:1fr 1fr;gap:6px;padding:8px 10px;display:grid}.Yvqh9W_historySearch,.Yvqh9W_historyFilters select,.Yvqh9W_gallerySearch{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);min-width:0;min-height:29px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.Yvqh9W_historySearch{grid-column:1/-1}.Yvqh9W_gallerySearch{width:156px}.Yvqh9W_galleryTagInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:130px;min-height:29px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.Yvqh9W_galleryBulkButton{border:1px solid var(--dsw-alias-border-l2);min-height:29px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.Yvqh9W_galleryBulkButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryBulkButton:disabled{opacity:.45;cursor:default}.Yvqh9W_historyTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600}.Yvqh9W_historyNew{width:26px;height:26px;color:var(--dsw-alias-label-secondary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:7px;justify-content:center;align-items:center;padding:0;display:inline-flex}.Yvqh9W_historyNew:hover{color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_historyClear{font:inherit;color:var(--dsw-alias-label-tertiary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:999px;padding:2px 8px;font-size:11.5px}.Yvqh9W_historyClear:hover{color:var(--dsw-alias-label-error);border-color:var(--dsw-alias-label-error)}.Yvqh9W_historyList{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:8px;min-height:0;padding:10px;display:flex;overflow-y:auto}.Yvqh9W_historyList::-webkit-scrollbar{width:8px}.Yvqh9W_historyList::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_historyEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;font-size:12px;line-height:1.6;display:flex}.Yvqh9W_historyItem{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:10px;flex-direction:column;flex:none;gap:6px;padding:8px;display:flex}.Yvqh9W_historyItem:hover{border-color:var(--dsw-alias-border-l2)}.Yvqh9W_historyItem[data-active]{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_historyMain{font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:flex-start;gap:8px;min-width:0;padding:0;display:flex}.Yvqh9W_historyThumb{object-fit:cover;background:var(--dsw-alias-bg-base);border-radius:8px;flex:none;width:52px;height:52px}.Yvqh9W_historyThumbPlaceholder{background:var(--dsw-alias-bg-layer-3);border-radius:8px;flex:none;width:52px;height:52px}.Yvqh9W_historyInfo{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.Yvqh9W_historyPrompt{color:var(--dsw-alias-label-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.Yvqh9W_historyMeta{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.Yvqh9W_historyActions{justify-content:flex-end;gap:4px;display:flex}.Yvqh9W_historyIconAction{width:26px;height:24px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:7px;justify-content:center;align-items:center;padding:0;display:inline-flex}.Yvqh9W_historyIconAction:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.Yvqh9W_historyIconAction:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.Yvqh9W_historyIconAction:disabled{opacity:.5;cursor:default}.Yvqh9W_historyIconAction[data-danger]:hover{color:var(--dsw-alias-state-error);background:color-mix(in srgb, var(--dsw-alias-state-error) 10%, transparent)}.Yvqh9W_card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;flex:none;gap:10px;padding:12px;display:flex}.Yvqh9W_ecommerceWorkspace{flex-direction:column;gap:18px;max-width:760px;margin:0 auto;padding:10px 8px 18px;display:flex}.Yvqh9W_ecommerceSection{border:none;border-bottom:1px solid var(--dsw-alias-border-l1);background:0 0;border-radius:0;flex-direction:column;gap:10px;padding:0 0 16px;display:flex}.Yvqh9W_ecommerceSection:last-of-type{border-bottom:none;padding-bottom:4px}.Yvqh9W_ecommerceSection h3{align-items:baseline;gap:7px;margin:0 0 2px;font-size:14px;font-weight:650;display:flex}.Yvqh9W_ecommerceSectionHint{color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:400}.Yvqh9W_ecommerceSection input:not([type=checkbox]),.Yvqh9W_ecommerceSection select,.Yvqh9W_ecommerceSection textarea{box-sizing:border-box;width:100%;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);font:inherit;border-radius:9px;padding:9px 11px}.Yvqh9W_ecommerceSection input:not([type=checkbox]):focus-visible,.Yvqh9W_ecommerceSection select:focus-visible,.Yvqh9W_ecommerceSection textarea:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.Yvqh9W_ecommerceSection textarea{resize:vertical;min-height:68px;line-height:1.5}.Yvqh9W_ecommerceField{flex-direction:column;gap:5px;min-width:0;display:flex}.Yvqh9W_ecommerceFieldLabel{color:var(--dsw-alias-label-secondary);font-size:11.5px}.Yvqh9W_ecommerceParamGrid{grid-template-columns:1fr 1fr;gap:12px 10px;display:grid}.Yvqh9W_ecommerceUploadHero{border:1.5px dashed var(--dsw-alias-border-l2);min-height:78px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;text-align:center;background:0 0;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:12px;display:flex}.Yvqh9W_ecommerceUploadHero:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover)}.Yvqh9W_ecommerceUploadHero:focus-visible,.Yvqh9W_ecommerceAssetAdd:focus-visible,.Yvqh9W_ecommerceSlotCard:focus-visible,.Yvqh9W_ecommerceAdvancedToggle:focus-visible,.Yvqh9W_ecommerceAsset button:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.Yvqh9W_ecommerceUploadHero span{font-size:12px}.Yvqh9W_ecommerceUploadHero small{color:var(--dsw-alias-label-tertiary);font-size:10.5px}.Yvqh9W_ecommerceStructureGrid{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.Yvqh9W_ecommerceSlotCard{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);height:34px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;font-size:12px;display:flex;position:relative}.Yvqh9W_ecommerceSlotCard:hover{border-color:var(--dsw-alias-label-dimmed)}.Yvqh9W_ecommerceSlotCard[data-active]{background:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-base);font-weight:600}.Yvqh9W_ecommerceSlotCount{background:var(--dsw-alias-brand-primary);color:#fff;text-align:center;border-radius:8px;min-width:16px;height:16px;padding:0 4px;font-size:10px;font-weight:600;line-height:16px;position:absolute;top:-6px;right:-6px}.Yvqh9W_ecommerceRefRow{grid-template-columns:64px 1fr;align-items:center;gap:8px;display:grid}.Yvqh9W_ecommerceRefRow>span{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommercePrimaryAction{border-radius:999px;width:100%;height:38px;font-size:13.5px}.Yvqh9W_previewBadge{background:var(--dsw-alias-brand-primary);color:#fff;letter-spacing:.02em;border-radius:4px;margin-left:5px;padding:0 4px;font-size:9px;font-weight:700;line-height:13px}.Yvqh9W_ecommercePlanNote{color:var(--dsw-alias-label-secondary);font-size:11.5px;line-height:1.5}.Yvqh9W_ecommercePlanWarn{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);border-radius:6px;padding:6px 8px;font-size:11.5px;line-height:1.5}.Yvqh9W_ecommerceAssets{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.Yvqh9W_ecommerceAsset{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-3);border-radius:8px;flex-direction:column;gap:3px;padding:4px;display:flex;position:relative}.Yvqh9W_ecommerceAsset img{object-fit:cover;border-radius:5px;width:100%;height:44px}.Yvqh9W_ecommerceAsset select{width:100%;min-width:0;padding:2px;font-size:10px}.Yvqh9W_ecommerceAsset button{color:#fff;cursor:pointer;text-align:center;background:#0000008c;border:none;border-radius:50%;width:16px;height:16px;padding:0;font-size:11px;line-height:15px;position:absolute;top:7px;right:7px}.Yvqh9W_ecommerceAsset button:hover{background:#000c}.Yvqh9W_ecommerceAssetAdd{border:1.5px dashed var(--dsw-alias-border-l2);min-height:78px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:2px;display:flex}.Yvqh9W_ecommerceAssetAdd:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.Yvqh9W_ecommerceAssetAdd span{font-size:16px;line-height:1}.Yvqh9W_ecommerceAssetAdd small{font-size:10px}.Yvqh9W_ecommerceAdvancedToggle{width:100%;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:none;justify-content:space-between;align-items:center;padding:0;font-size:12.5px;display:flex}.Yvqh9W_ecommerceAdvancedToggle:hover{color:var(--dsw-alias-label-primary)}.Yvqh9W_ecommerceAdvancedChevron{font-size:11px}.Yvqh9W_ecommerceAdvancedBody{flex-direction:column;gap:8px;margin-top:8px;display:flex}.Yvqh9W_ecommerceFooterBody{flex-direction:column;gap:8px;display:flex}.Yvqh9W_ecommercePlanMini{border:1px solid var(--dsw-alias-brand-primary);border-radius:10px;flex-direction:column;gap:6px;padding:10px;display:flex}.Yvqh9W_ecommercePlanMini>strong{font-size:12.5px}.Yvqh9W_ecommercePlanList{flex-direction:column;gap:3px;max-height:116px;display:flex;overflow-y:auto}.Yvqh9W_ecommercePlanList>div{color:var(--dsw-alias-label-secondary);justify-content:space-between;gap:12px;font-size:11.5px;display:flex}.Yvqh9W_ecommercePlanBack{color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;background:0 0;border:none;padding:0;font-size:12px}.Yvqh9W_ecommercePlanBack:hover{color:var(--dsw-alias-label-primary)}.Yvqh9W_ecommerceFooterHint{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommerceResults{flex-direction:column;gap:14px;width:100%;margin:0 auto;padding:16px 18px;display:flex;overflow-y:auto}.Yvqh9W_ecommerceResultsHeader{justify-content:space-between;align-items:center;gap:12px;display:flex}.Yvqh9W_ecommerceResultsHeader h3{margin:0;font-size:15px}.Yvqh9W_ecommerceResultsHeader>div:first-child{align-items:baseline;gap:10px;display:flex}.Yvqh9W_ecommerceResultsHeader span{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommerceResultsActions{gap:8px;display:flex}.Yvqh9W_ecommerceResultsEmpty{color:var(--dsw-alias-label-tertiary);text-align:center;border:1.5px dashed var(--dsw-alias-border-l2);border-radius:12px;padding:32px 16px;font-size:13px}.Yvqh9W_ecommerceGroups{flex-direction:column;gap:16px;display:flex}.Yvqh9W_ecommerceGroup{background:0 0;border:none;border-radius:0;flex-direction:column;gap:8px;padding:0;display:flex}.Yvqh9W_ecommerceGroup>header{align-items:center;gap:10px;font-size:13px;display:flex}.Yvqh9W_ecommerceGroup>header strong{font-size:13px}.Yvqh9W_ecommerceGroup>header span{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommerceGroup>header button{margin-left:auto}.Yvqh9W_ecommerceGroupGrid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.Yvqh9W_ecommerceTaskCard{aspect-ratio:1;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-3);border-radius:10px;justify-content:center;align-items:center;width:100%;min-height:0;padding:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_ecommerceTaskCard[data-status=failed],.Yvqh9W_ecommerceTaskCard[data-status=cancelled]{color:var(--dsw-alias-label-tertiary);font-size:12px}.Yvqh9W_ecommerceTaskCard .Yvqh9W_imageCard{border:none;border-radius:0;width:100%;height:100%;margin:0}.Yvqh9W_ecommerceTaskCard .Yvqh9W_image{object-fit:cover;width:100%;height:100%}.Yvqh9W_ecommerceResultBadge{color:#fff;pointer-events:none;background:#0000008c;border-radius:999px;padding:0 7px;font-size:10px;line-height:16px;position:absolute;top:6px;left:6px}.Yvqh9W_ecommerceTaskActions{opacity:0;background:linear-gradient(#0000,#0000008c);justify-content:center;gap:4px;padding:10px 4px 5px;transition:opacity .12s;display:flex;position:absolute;bottom:0;left:0;right:0}.Yvqh9W_ecommerceTaskCard:hover .Yvqh9W_ecommerceTaskActions{opacity:1}.Yvqh9W_ecommerceActionChip{color:#111;cursor:pointer;white-space:nowrap;background:#ffffffeb;border:none;border-radius:6px;padding:0 6px;font-size:10px;font-weight:500;line-height:18px;text-decoration:none}.Yvqh9W_ecommerceActionChip:hover{background:#fff}.Yvqh9W_ecommerceActionChip:disabled{opacity:.5;cursor:default}.Yvqh9W_ecommerceTaskState{color:var(--dsw-alias-label-secondary);text-align:center;word-break:break-all;flex-direction:column;gap:3px;padding:10px 8px;font-size:11px;display:flex}.Yvqh9W_ecommerceTaskState b{color:var(--dsw-alias-label-primary);font-size:12px}.Yvqh9W_topNav{flex:none;justify-content:center;align-items:center;gap:2px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.Yvqh9W_topNavItem{height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:none;border-radius:999px;align-items:center;gap:4px;padding:0 14px;font-size:13px;display:inline-flex}.Yvqh9W_topNavItem,.Yvqh9W_topNavItem span{white-space:nowrap}.Yvqh9W_topNavItem:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.Yvqh9W_topNavItem[data-active]{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-base);font-weight:600}.Yvqh9W_topNavDivider{background:var(--dsw-alias-border-l2);width:1px;height:16px;margin:0 8px}.Yvqh9W_panelHeaderActions{align-items:center;gap:10px;display:inline-flex}.Yvqh9W_chatToggle{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;border-radius:999px;align-items:center;gap:5px;padding:0 10px;font-size:12px;display:inline-flex}.Yvqh9W_chatToggle:hover{color:var(--dsw-alias-label-primary)}.Yvqh9W_chatToggle[data-open=true]{color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}html[data-dsh-imagegen-chat-collapsed][data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation],html[data-dsh-imagegen-chat-collapsed][data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]{grid-template-columns:minmax(0,1fr)}html[data-dsh-imagegen-chat-collapsed][data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-slot=conversation],html[data-dsh-imagegen-chat-collapsed] [data-dsh-imagegen-chat-resizer]{display:none!important}.Yvqh9W_configResizer{cursor:col-resize;z-index:6;width:6px;height:100%;position:absolute;top:0;right:0}.Yvqh9W_configResizer:hover{background:linear-gradient(90deg, transparent, var(--dsw-alias-border-l2))}.Yvqh9W_config[data-collapsed=true] .Yvqh9W_configResizer{display:none}.Yvqh9W_modeRow{align-items:center;gap:8px;display:flex}.Yvqh9W_modePill{flex:1;justify-content:center;height:28px;font-size:12.5px}.Yvqh9W_modePill,.Yvqh9W_modePill span,.Yvqh9W_modePill div{white-space:nowrap;min-width:0}.Yvqh9W_uploadBox{min-height:128px;color:var(--dsw-alias-label-secondary);border:1.5px dashed var(--dsw-alias-border-l2);cursor:pointer;font:inherit;text-align:center;background:0 0;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:16px;font-size:12.5px;display:flex}.Yvqh9W_uploadBox:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover)}.Yvqh9W_uploadBox:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.Yvqh9W_uploadIcon{color:var(--dsw-alias-label-tertiary);display:inline-flex}.Yvqh9W_uploadHint{color:var(--dsw-alias-label-tertiary);font-size:11px}.Yvqh9W_reference{flex-direction:column;gap:8px;display:flex}.Yvqh9W_referenceImage{object-fit:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;width:100%;max-height:176px}.Yvqh9W_referenceActions{gap:8px;display:flex}.Yvqh9W_hiddenFile{display:none}.Yvqh9W_prompt{width:100%;min-height:120px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);resize:vertical;box-sizing:border-box;border-radius:10px;outline:none;padding:10px 12px;font-family:inherit;font-size:13px;line-height:1.6}.Yvqh9W_prompt:focus-visible{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_prompt::placeholder{color:var(--dsw-alias-label-tertiary)}.Yvqh9W_promptFooter{justify-content:space-between;align-items:center;gap:8px;margin-top:-6px;display:flex}.Yvqh9W_templatesButton{border:1px solid var(--dsw-alias-brand-primary);background:linear-gradient(135deg, color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent), color-mix(in srgb, var(--dsw-alias-brand-primary) 5%, transparent));height:26px;color:var(--dsw-alias-brand-primary);cursor:pointer;box-shadow:0 1px 0 color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, transparent);border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-family:inherit;font-size:12px;font-weight:600;transition:transform .12s,box-shadow .12s,background .12s;display:inline-flex}.Yvqh9W_templatesButton svg{flex:none}.Yvqh9W_templatesButton:hover{background:linear-gradient(135deg, color-mix(in srgb, var(--dsw-alias-brand-primary) 24%, transparent), color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, transparent));color:var(--dsw-alias-brand-primary);box-shadow:0 2px 6px color-mix(in srgb, var(--dsw-alias-brand-primary) 30%, transparent);transform:translateY(-1px)}.Yvqh9W_templatesButton:active{transform:translateY(0)}.Yvqh9W_enhanceButton{border:1px solid var(--dsw-alias-border-l2);height:26px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);font:inherit;cursor:pointer;border-radius:999px;margin-left:auto;padding:0 11px;font-size:12px}.Yvqh9W_enhanceButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_enhanceButton:disabled{opacity:.5;cursor:default}.Yvqh9W_promptCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:11px}.Yvqh9W_paramGroup{flex-direction:column;gap:8px;display:flex}.Yvqh9W_paramLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}.Yvqh9W_optionRow{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_optionGrid{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.Yvqh9W_optionPill{justify-content:center}.Yvqh9W_paramHint{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.45}.Yvqh9W_footer{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;flex:none;align-items:stretch;gap:8px;padding:10px 2px 0 0;display:flex}.Yvqh9W_modelWrap{flex-direction:column;gap:5px;min-width:0;display:flex}.Yvqh9W_modelLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}.Yvqh9W_modelSelect{width:100%;height:36px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;text-align:left;border-radius:18px;outline:none;justify-content:space-between;align-items:center;gap:8px;padding:0 12px;font-family:inherit;font-size:13px;display:flex}.Yvqh9W_modelSelect:focus-visible{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_modelSelect:disabled{opacity:.55;cursor:default}.Yvqh9W_modelMenu{min-width:0;display:block;position:relative}.Yvqh9W_modelMenuList{z-index:40;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;flex-direction:column;padding:4px;display:flex;position:absolute;bottom:calc(100% + 6px);left:0;right:0;overflow:hidden;box-shadow:0 -8px 24px #0000002e}.Yvqh9W_modelMenuItem{width:100%;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;white-space:nowrap;text-overflow:ellipsis;background:0 0;border:none;border-radius:8px;padding:7px 10px;font-size:13px;display:block;overflow:hidden}.Yvqh9W_modelMenuItem:hover{background:var(--dsw-alias-bg-hover)}.Yvqh9W_modelMenuItem[data-selected]{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1);font-weight:600}.Yvqh9W_generateButton{width:100%}.Yvqh9W_generateInner{align-items:center;gap:7px;display:inline-flex}.Yvqh9W_canvasState{text-align:center;color:var(--dsw-alias-label-tertiary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;display:flex}.Yvqh9W_canvasStateTitle{color:var(--dsw-alias-label-secondary);font-size:14px;font-weight:600}.Yvqh9W_canvasStateHint{max-width:380px;font-size:12px;line-height:1.6}.Yvqh9W_canvasEmptyIcon{color:var(--dsw-alias-label-tertiary);margin-bottom:4px;display:inline-flex}.Yvqh9W_canvasError{color:var(--dsw-alias-label-error);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-label-error);overflow-wrap:anywhere;border-radius:10px;flex:none;margin:14px;padding:10px 14px;font-size:12.5px;line-height:1.6}.Yvqh9W_canvasBody{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:10px;min-height:0;padding:14px;display:flex;overflow-y:auto}.Yvqh9W_canvasBody::-webkit-scrollbar{width:8px}.Yvqh9W_canvasBody::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_canvasMeta{color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:8px;font-size:12px;display:flex}.Yvqh9W_canvasHistoryTag{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:11px}.Yvqh9W_grid{flex:1;grid-template-rows:repeat(2,minmax(0,1fr));grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;min-height:0;display:grid}.Yvqh9W_grid[data-count=\"1\"] .Yvqh9W_imageCard{grid-area:1/1/3/3}.Yvqh9W_imageCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);cursor:zoom-in;border-radius:12px;flex-direction:column;min-height:0;margin:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_imageCard:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.Yvqh9W_image{object-fit:cover;background:var(--dsw-alias-bg-base);flex:1;width:100%;min-height:0;display:block}.Yvqh9W_imageCaption{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;border-top:1px solid var(--dsw-alias-border-l1);padding:7px 10px;font-size:11px;line-height:1.5;overflow:hidden}.Yvqh9W_download{color:#fff;opacity:0;backdrop-filter:blur(4px);background:#0f1218d1;border:1px solid #ffffff9e;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;text-decoration:none;transition:opacity .12s;position:absolute;top:8px;right:8px;box-shadow:0 2px 8px #00000047}.Yvqh9W_imageCard:hover .Yvqh9W_download{opacity:1}.Yvqh9W_download:hover{background:#0f1218f0}.Yvqh9W_download:focus-visible{opacity:1;outline-offset:2px;outline:2px solid #fff}.Yvqh9W_galleryAdd{font:inherit;color:#fff;cursor:pointer;opacity:0;backdrop-filter:blur(4px);background:#0f1218d1;border:1px solid #ffffff9e;border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;top:8px;left:8px;box-shadow:0 2px 8px #00000047}.Yvqh9W_imageCard:hover .Yvqh9W_galleryAdd{opacity:1}.Yvqh9W_galleryAdd:hover{background:#0f1218f0}.Yvqh9W_galleryAdd:focus-visible{opacity:1;outline-offset:2px;outline:2px solid #fff}.Yvqh9W_galleryAdd:disabled{opacity:.4;cursor:default}.Yvqh9W_conversationAdd{color:#fff;cursor:pointer;font:inherit;opacity:0;backdrop-filter:blur(4px);background:#0f1218d1;border:1px solid #ffffff9e;border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;top:38px;left:8px;box-shadow:0 2px 8px #00000047}.Yvqh9W_imageCard:hover .Yvqh9W_conversationAdd,.Yvqh9W_conversationAdd:focus-visible{opacity:1}.Yvqh9W_conversationAdd:hover{background:#0f1218f0}.Yvqh9W_conversationAdd:focus-visible{opacity:1;outline-offset:2px;outline:2px solid #fff}.Yvqh9W_conversationAdd:disabled{opacity:.4;cursor:default}.Yvqh9W_zoomHint{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);border:1px solid var(--dsw-alias-border-l2);opacity:0;backdrop-filter:blur(4px);pointer-events:none;border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;bottom:8px;left:8px}.Yvqh9W_imageCard:hover .Yvqh9W_zoomHint{opacity:1}.Yvqh9W_spinner,.Yvqh9W_bigSpinner{border:2px solid;border-top-color:#0000;border-radius:50%;flex:none;animation:.8s linear infinite Yvqh9W_dshImageGenSpin;display:inline-block}.Yvqh9W_spinner{width:11px;height:11px}.Yvqh9W_bigSpinner{width:30px;height:30px;color:var(--dsw-alias-state-business-primary);border-width:3px;margin-bottom:6px}.Yvqh9W_lightbox{z-index:1000;backdrop-filter:blur(6px);background:#000000b8;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.Yvqh9W_lightboxClose{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:50%;justify-content:center;align-items:center;width:38px;height:38px;display:inline-flex;position:absolute;top:16px;right:16px}.Yvqh9W_lightboxClose:hover{background:#ffffff42}.Yvqh9W_lightboxNav{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:50%;justify-content:center;align-items:center;width:42px;height:42px;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.Yvqh9W_lightboxNav:hover{background:#ffffff42}.Yvqh9W_lightboxNav[data-dir=prev]{left:max(20px,50% - 640px)}.Yvqh9W_lightboxNav[data-dir=next]{right:max(20px,50% - 640px)}.Yvqh9W_lightboxFigure{flex-direction:column;gap:10px;width:min(1100px,100vw - 160px);max-width:min(1100px,100vw - 160px);height:min(820px,100vh - 48px);min-height:0;margin:0;display:flex}.Yvqh9W_lightboxStage{background:#ffffff0a;border-radius:10px;flex:1;min-height:0;position:relative;overflow:auto}.Yvqh9W_lightboxScaleFrame{justify-content:center;align-items:center;min-width:100%;min-height:100%;display:flex}.Yvqh9W_lightboxImage{object-fit:contain;border-radius:10px;max-width:100%;max-height:100%;display:block;box-shadow:0 24px 80px #00000080}.Yvqh9W_lightboxTools{justify-content:center;align-items:center;gap:6px;display:flex}.Yvqh9W_lightboxTool,.Yvqh9W_lightboxZoomLevel,.Yvqh9W_lightboxCopy{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;justify-content:center;align-items:center;display:inline-flex}.Yvqh9W_lightboxTool,.Yvqh9W_lightboxZoomLevel{height:32px}.Yvqh9W_lightboxTool{border-radius:50%;width:32px}.Yvqh9W_lightboxZoomLevel{min-width:58px;font:inherit;font-variant-numeric:tabular-nums;border-radius:999px;padding:0 9px;font-size:12px}.Yvqh9W_lightboxTool:hover,.Yvqh9W_lightboxZoomLevel:hover,.Yvqh9W_lightboxCopy:hover{background:#ffffff42}.Yvqh9W_lightboxCaptionRow{align-items:flex-start;gap:8px;min-width:0;display:flex}.Yvqh9W_lightboxCaption{color:#ffffffe6;-webkit-line-clamp:3;-webkit-box-orient:vertical;flex:1;min-width:0;font-size:12px;line-height:1.6;display:-webkit-box;overflow:hidden}.Yvqh9W_lightboxCopy{min-height:28px;font:inherit;white-space:nowrap;border-radius:999px;flex:none;gap:5px;padding:4px 9px;font-size:12px}.Yvqh9W_lightboxMeta{justify-content:space-between;align-items:center;gap:12px;display:flex}.Yvqh9W_lightboxIndex{color:#fffc;font-variant-numeric:tabular-nums;font-size:12px}.Yvqh9W_lightboxActions{align-items:center;gap:8px;display:inline-flex}.Yvqh9W_lightboxDownload,.Yvqh9W_lightboxEdit{font:inherit;color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:999px;padding:4px 14px;font-size:12.5px;font-weight:500;text-decoration:none}.Yvqh9W_lightboxDownload:hover,.Yvqh9W_lightboxEdit:hover{background:#ffffff42}.Yvqh9W_lightboxEdit{color:#fff;background:#ffffff24;border:1px solid #ffffff47;border-radius:999px}@media (width<=720px){.Yvqh9W_lightbox{padding:16px}.Yvqh9W_lightboxFigure{width:calc(100vw - 32px);max-width:none}.Yvqh9W_lightboxNav[data-dir=prev]{left:20px}.Yvqh9W_lightboxNav[data-dir=next]{right:20px}.Yvqh9W_lightboxCaptionRow,.Yvqh9W_lightboxMeta{flex-direction:column;align-items:stretch}.Yvqh9W_lightboxCopy,.Yvqh9W_lightboxActions{align-self:flex-end}}@keyframes Yvqh9W_dshImageGenSpin{to{transform:rotate(360deg)}}.Yvqh9W_galleryToast{z-index:30;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);border:1px solid var(--dsw-alias-border-l2);backdrop-filter:blur(6px);pointer-events:none;border-radius:999px;align-items:center;gap:7px;padding:6px 16px;font-size:13px;font-weight:500;animation:.16s ease-out Yvqh9W_dshImageGenToastIn;display:inline-flex;position:absolute;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #00000038}@keyframes Yvqh9W_dshImageGenToastIn{0%{opacity:0;transform:translate(-50%,6px)}to{opacity:1;transform:translate(-50%)}}.Yvqh9W_conversationToast{z-index:30;border:1px solid var(--dsw-alias-border-l2);max-width:calc(100% - 32px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);pointer-events:none;backdrop-filter:blur(6px);border-radius:999px;align-items:center;gap:7px;padding:6px 16px;font-size:13px;font-weight:500;animation:.16s ease-out Yvqh9W_dshImageGenToastIn;display:inline-flex;position:absolute;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #00000038}@media (prefers-reduced-motion:reduce){.Yvqh9W_download,.Yvqh9W_spinner,.Yvqh9W_bigSpinner{transition:none;animation-duration:1.5s}}.Yvqh9W_config[data-gallery=true] .Yvqh9W_configScroll>:not(:first-child),.Yvqh9W_config[data-gallery=true] .Yvqh9W_footer,.Yvqh9W_canvas[data-gallery=true]>.Yvqh9W_canvasState,.Yvqh9W_canvas[data-gallery=true]>.Yvqh9W_canvasError,.Yvqh9W_canvas[data-gallery=true]>.Yvqh9W_canvasBody,.Yvqh9W_studio:has(.Yvqh9W_config[data-gallery=true])>.Yvqh9W_history{display:none}.Yvqh9W_config[data-gallery=true] .Yvqh9W_configScroll{flex:none;order:1;display:flex;overflow:visible}.Yvqh9W_config[data-gallery=true] .Yvqh9W_galleryFilters{flex:1;order:2;min-height:0}.Yvqh9W_galleryFilters{padding:18px 14px;overflow:hidden auto}.Yvqh9W_galleryFilterHeading{color:var(--dsw-alias-label-tertiary);margin:0 4px 10px;font-size:12px;font-weight:600}.Yvqh9W_galleryFilter{width:100%;min-height:34px;color:var(--dsw-alias-label-secondary);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:9px;justify-content:space-between;align-items:center;padding:0 10px;display:flex}.Yvqh9W_galleryFilter:hover,.Yvqh9W_galleryFilter[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent)}.Yvqh9W_galleryFilterCount{min-width:20px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);text-align:center;border-radius:999px;padding:1px 6px;font-size:11px}.Yvqh9W_galleryFilterDivider{background:var(--dsw-alias-border-l1);height:1px;margin:18px 4px}.Yvqh9W_galleryRatioList{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_galleryRatio{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;border:0;border-radius:999px;padding:6px 10px;font-size:12px}.Yvqh9W_galleryRatio[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 13%, transparent)}.Yvqh9W_galleryTagFilterList{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_galleryTagFilter{border:1px solid var(--dsw-alias-border-l1);min-width:0;max-width:100%;min-height:27px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border-radius:6px;align-items:center;gap:5px;padding:0 8px;font-size:11px;display:inline-flex}.Yvqh9W_galleryTagFilter span:first-child{text-overflow:ellipsis;white-space:nowrap;max-width:112px;overflow:hidden}.Yvqh9W_galleryTagFilter span:last-child{color:var(--dsw-alias-label-tertiary);font-size:10px}.Yvqh9W_galleryTagFilter:hover,.Yvqh9W_galleryTagFilter[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent)}.Yvqh9W_galleryFilterNote{color:var(--dsw-alias-label-quaternary);margin:20px 4px 0;font-size:11px;line-height:1.5}.Yvqh9W_galleryWorkspace{box-sizing:border-box;flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;padding:22px 24px 26px;display:flex;position:absolute;inset:0;overflow:hidden}.Yvqh9W_galleryToolbar{flex:none;justify-content:space-between;align-items:center;gap:16px;min-width:0;margin-bottom:18px;display:flex}.Yvqh9W_galleryHeading{color:var(--dsw-alias-label-primary);margin:0;font-size:20px;font-weight:700;display:inline}.Yvqh9W_galleryCount{color:var(--dsw-alias-label-tertiary);margin-left:8px;font-size:13px}.Yvqh9W_galleryToolbarActions{flex-wrap:wrap;align-items:center;gap:10px;min-width:0;display:flex}.Yvqh9W_gallerySelectMode,.Yvqh9W_galleryBulkButton,.Yvqh9W_gallerySelectionClear{border:1px solid var(--dsw-alias-border-l1);min-height:30px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:7px;padding:0 10px;font-size:12px}.Yvqh9W_gallerySelectMode:hover,.Yvqh9W_gallerySelectMode[data-active],.Yvqh9W_galleryBulkButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 38%, var(--dsw-alias-border-l1));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 11%, transparent)}.Yvqh9W_galleryBulkButton:disabled{cursor:not-allowed;opacity:.45}.Yvqh9W_gallerySelectionBar{border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 35%, var(--dsw-alias-border-l1));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 7%, var(--dsw-alias-bg-layer-1));border-radius:9px;flex:none;align-items:center;gap:10px;min-width:0;margin:-4px 0 16px;padding:10px 12px;display:flex}.Yvqh9W_gallerySelectionBar strong{color:var(--dsw-alias-brand-primary);flex:none;font-size:12px}.Yvqh9W_gallerySelectionClear{margin-left:auto}.Yvqh9W_gallerySelectionClear:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_galleryTagInput,.Yvqh9W_gallerySearch{border:1px solid var(--dsw-alias-border-l1);min-width:0;height:30px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);font:inherit;border-radius:7px;outline:none;padding:0 10px;font-size:12px}.Yvqh9W_galleryTagInput{flex:190px}.Yvqh9W_galleryTagInput:focus,.Yvqh9W_gallerySearch:focus{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryViewToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:9px;padding:3px;display:flex}.Yvqh9W_galleryViewToggle button,.Yvqh9W_gallerySort,.Yvqh9W_galleryClear{min-height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:7px;padding:0 10px;font-size:12px}.Yvqh9W_galleryViewToggle button[data-active],.Yvqh9W_galleryViewToggle button:hover,.Yvqh9W_gallerySort:hover,.Yvqh9W_galleryClear:hover{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 11%, transparent)}.Yvqh9W_gallerySort{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1)}.Yvqh9W_galleryClear{border:1px solid var(--dsw-alias-border-l1)}.Yvqh9W_compareControl{flex-direction:column;gap:6px;margin:0 0 10px;display:flex}.Yvqh9W_compareToggle,.Yvqh9W_compareModelChoices label{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.Yvqh9W_compareToggle input,.Yvqh9W_compareModelChoices input{accent-color:var(--dsw-alias-brand-primary)}.Yvqh9W_compareModelChoices{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_compareModelChoices label{border:1px solid var(--dsw-alias-border-l1);border-radius:5px;padding:4px 6px;font-size:10px}.Yvqh9W_comparisonBoard{z-index:4;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:8px;flex-direction:column;display:flex;position:absolute;inset:14px;overflow:hidden;box-shadow:0 8px 24px #0000001f}.Yvqh9W_comparisonBoard>header{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:center;padding:10px 12px;display:flex}.Yvqh9W_comparisonBoard>header div{align-items:baseline;gap:7px;display:flex}.Yvqh9W_comparisonBoard>header strong{color:var(--dsw-alias-label-primary);font-size:13px}.Yvqh9W_comparisonBoard>header span{color:var(--dsw-alias-label-tertiary);font-size:11px}.Yvqh9W_comparisonBoard>header button{border:1px solid var(--dsw-alias-border-l1);min-height:28px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border-radius:5px;padding:0 9px;font-size:11px}.Yvqh9W_comparisonGrid{flex:1;grid-template-rows:minmax(0,1fr);grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;min-height:0;padding:12px;display:grid;overflow:auto}.Yvqh9W_comparisonGrid article{flex-direction:column;gap:7px;min-width:0;height:100%;min-height:0;display:flex}.Yvqh9W_comparisonGrid article>strong{color:var(--dsw-alias-label-primary);font-size:12px}.Yvqh9W_comparisonImageButton{cursor:zoom-in;background:var(--dsw-alias-bg-base);border:0;flex:1;width:100%;min-height:0;padding:0;display:flex;overflow:hidden}.Yvqh9W_comparisonImageButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.Yvqh9W_comparisonGrid article>span{min-height:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);flex:1;place-items:center;font-size:12px;display:grid}.Yvqh9W_comparisonGrid img{object-fit:contain;background:var(--dsw-alias-bg-base);flex:1;width:100%;height:100%;min-height:0;max-height:none;display:block}.Yvqh9W_comparisonFullscreen{z-index:1200;background:#000000eb;padding:54px 24px 24px;position:fixed;inset:0;overflow:auto}.Yvqh9W_comparisonFullscreenGrid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));align-items:start;gap:18px;min-height:100%;display:grid}.Yvqh9W_comparisonFullscreen figure{min-width:0;margin:0}.Yvqh9W_comparisonFullscreen figcaption{color:#fff;margin-bottom:8px;font-size:13px;font-weight:600}.Yvqh9W_comparisonFullscreen img{background:#111;width:100%;margin-bottom:10px;display:block}.Yvqh9W_historyItem[data-comparison]{border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 55%, var(--dsw-alias-border-l1))}.Yvqh9W_galleryMasonry{box-sizing:border-box;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex:auto;grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:max-content;align-content:start;gap:16px;width:100%;min-width:0;max-width:100%;height:0;min-height:0;padding:2px 8px 16px 2px;display:grid;overflow:hidden scroll}.Yvqh9W_galleryMasonry::-webkit-scrollbar{width:8px}.Yvqh9W_galleryMasonry::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_galleryCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:14px;width:100%;margin:0;display:block;position:relative;overflow:hidden;box-shadow:0 5px 18px #18203612}.Yvqh9W_galleryCard[data-selected]{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-alias-brand-primary) 26%, transparent), 0 5px 18px #18203612}.Yvqh9W_gallerySelect{z-index:2;cursor:pointer;background:#00000094;border:1px solid #ffffffbf;border-radius:7px;place-items:center;width:26px;height:26px;display:grid;position:absolute;top:9px;right:9px}.Yvqh9W_gallerySelect input{width:16px;height:16px;accent-color:var(--dsw-alias-brand-primary);cursor:pointer;margin:0}.Yvqh9W_galleryImageButton{background:var(--dsw-alias-bg-base);cursor:zoom-in;border:0;width:100%;padding:0;display:block;position:relative}.Yvqh9W_galleryImageButton[data-selecting]{cursor:pointer}.Yvqh9W_galleryImage{aspect-ratio:4/3;object-fit:cover;width:100%;display:block}.Yvqh9W_galleryMasonry[data-view=masonry] .Yvqh9W_galleryCard:nth-child(3n+1) .Yvqh9W_galleryImage{aspect-ratio:4/5}.Yvqh9W_galleryMasonry[data-view=masonry] .Yvqh9W_galleryCard:nth-child(3n+2) .Yvqh9W_galleryImage{aspect-ratio:4/3}.Yvqh9W_galleryMasonry[data-view=masonry] .Yvqh9W_galleryCard:nth-child(3n) .Yvqh9W_galleryImage{aspect-ratio:3/4}.Yvqh9W_galleryBadge{color:#fff;backdrop-filter:blur(4px);background:#121724c2;border-radius:999px;padding:4px 9px;font-size:11px;position:absolute;top:10px;left:10px}.Yvqh9W_galleryCardActions{padding:8px 12px 0;display:flex}.Yvqh9W_galleryCardAction{border:1px solid var(--dsw-alias-border-l2);width:100%;min-width:0;min-height:28px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;white-space:nowrap;border-radius:7px;justify-content:center;align-items:center;gap:4px;padding:0 4px;font-size:10px;font-weight:500;display:inline-flex}.Yvqh9W_galleryCardAction:hover,.Yvqh9W_galleryCardAction:focus-visible{border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-brand-primary);outline:none}.Yvqh9W_galleryCardAction:disabled{cursor:wait;opacity:.55}.Yvqh9W_galleryCardFooter{align-items:center;gap:9px;min-width:0;padding:10px 12px;display:flex}.Yvqh9W_galleryAvatar{color:#fff;background:var(--dsw-alias-brand-primary);border-radius:50%;flex:none;place-items:center;width:27px;height:27px;font-size:12px;font-weight:700;display:grid}.Yvqh9W_galleryCardInfo{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.Yvqh9W_galleryCardInfo strong,.Yvqh9W_galleryCardInfo small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Yvqh9W_galleryCardInfo strong{color:var(--dsw-alias-label-primary);font-size:12px}.Yvqh9W_galleryCardInfo small{color:var(--dsw-alias-label-tertiary);font-size:10px}.Yvqh9W_galleryTags{flex-wrap:wrap;gap:4px;margin-top:4px;display:flex}.Yvqh9W_galleryTags button{max-width:96px;min-height:19px;color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent);cursor:pointer;font:inherit;text-overflow:ellipsis;white-space:nowrap;border:0;border-radius:4px;padding:1px 6px;font-size:10px;line-height:1.35;overflow:hidden}.Yvqh9W_galleryTags button:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 17%, transparent)}.Yvqh9W_galleryTags .Yvqh9W_galleryTagEdit{color:var(--dsw-alias-label-tertiary);background:0 0;flex:none}.Yvqh9W_galleryTagEditor{align-items:center;gap:6px;padding:0 12px 10px 48px;display:flex}.Yvqh9W_galleryTagEditor input{border:1px solid var(--dsw-alias-border-l2);min-width:0;height:27px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:6px;outline:none;flex:1;padding:0 8px;font-size:11px}.Yvqh9W_galleryTagEditor input:focus{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryTagEditor button{border:1px solid var(--dsw-alias-border-l2);height:27px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:6px;padding:0 8px;font-size:11px}.Yvqh9W_galleryTagEditor button[type=submit]{color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryRemove{width:24px;height:24px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:50%;flex:none;padding:0;font-size:18px}.Yvqh9W_galleryRemove:hover{color:var(--dsw-alias-state-error);background:var(--dsw-alias-bg-layer-2)}@media (width<=760px){.Yvqh9W_ecommerceParamGrid{grid-template-columns:1fr}.Yvqh9W_ecommerceStructureGrid,.Yvqh9W_ecommerceAssets{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=420px){.Yvqh9W_ecommerceWorkspace{padding-inline:2px}.Yvqh9W_ecommerceStructureGrid,.Yvqh9W_ecommerceAssets{grid-template-columns:1fr}}@media (width<=1100px){.Yvqh9W_galleryMasonry{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.Yvqh9W_studio{grid-template-rows:minmax(220px,36%) minmax(0,1fr);grid-template-columns:minmax(0,1fr);overflow-y:auto}.Yvqh9W_history{grid-area:1/1;min-height:220px}.Yvqh9W_generation{flex-direction:column;grid-area:2/1;min-height:0}.Yvqh9W_config{width:auto;max-width:none;height:auto;min-height:0}.Yvqh9W_config[data-gallery=true]{flex:none}.Yvqh9W_canvas{min-height:560px}.Yvqh9W_galleryToolbar{flex-direction:column;align-items:flex-start}.Yvqh9W_galleryToolbarActions{flex-wrap:wrap;width:100%}.Yvqh9W_galleryMasonry{grid-template-columns:1fr}}";
6324
+ const css$2 = "[data-pane=conversation],[class*=centerCol]{min-width:0;min-height:0;position:relative}[data-dsh-imagegen-view]{z-index:60;background:var(--dsw-alias-bg-base);grid-area:1/1;min-width:0;min-height:0;display:none;position:relative}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation],html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]{grid-template-columns:minmax(0, 1fr) 8px minmax(320px, clamp(320px, var(--dsh-imagegen-chat-width,36%), 70%));background:var(--dsw-alias-border-l1);grid-template-rows:minmax(0,1fr);gap:1px;overflow:hidden;display:grid!important}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-imagegen-view]{display:block}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-slot=conversation]{background:var(--dsw-alias-bg-base);grid-area:1/3;align-items:stretch;width:auto;min-width:0;min-height:0;overflow:hidden;display:flex!important}html[data-dsh-imagegen-active] [data-slot=conversation]>[data-phase]{flex:auto;align-self:stretch;width:100%;min-width:0;max-width:none}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-imagegen-chat-resizer]{grid-area:1/2}.Yvqh9W_chatResizer{z-index:70;width:8px;min-width:8px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-border-l1);cursor:col-resize;touch-action:none;justify-content:center;align-items:center;display:none;position:relative}.Yvqh9W_chatResizer:before{content:\"\";opacity:.55;background:currentColor;border-radius:3px;width:3px;height:36px}.Yvqh9W_chatResizer:hover,.Yvqh9W_chatResizer:focus-visible{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2);outline:none}html[data-dsh-imagegen-active] [data-dsh-imagegen-chat-resizer]{display:flex!important}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-imagegen-view]):not([data-slot=conversation]):not([data-dsh-imagegen-chat-resizer]),html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-imagegen-view]):not([data-slot=conversation]):not([data-dsh-imagegen-chat-resizer]),html[data-dsh-imagegen-active] [data-dsh-imagegen-sidebar-root]>:not([data-dsh-imagegen-session-tabs]):not([class*=logoRow]):not([class*=regionArea]):not([class*=footArea]){display:none!important}@media (width<=760px){html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation],html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]{grid-template-rows:minmax(0,1fr) minmax(340px,.9fr);grid-template-columns:minmax(0,1fr);overflow-y:auto}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-slot=conversation]{grid-area:2/1}html[data-dsh-imagegen-active] [data-dsh-imagegen-chat-resizer]{display:none!important}}.Yvqh9W_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}.Yvqh9W_entry:hover{background:var(--dsw-specific-sidebar-nav-item-hover);color:var(--dsw-alias-label-primary)}.Yvqh9W_entry[data-active]{background:var(--dsw-specific-sidebar-nav-item-active);color:var(--dsw-alias-label-primary);font-weight:600}.Yvqh9W_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.Yvqh9W_entryLabel{text-overflow:ellipsis;overflow:hidden}.Yvqh9W_sessionTabs{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:9px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:2px;width:100%;min-width:0;padding:3px;display:grid}.Yvqh9W_sessionTab{min-width:0;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;white-space:nowrap;background:0 0;border:0;border-radius:7px;justify-content:center;align-items:center;gap:6px;padding:0 8px;font-size:12px;display:inline-flex}[data-sidebar-collapsed] .Yvqh9W_sessionTabs{background:0 0;border:none;border-radius:0;flex-direction:column;gap:6px;width:auto;padding:0;display:flex}[data-sidebar-collapsed] .Yvqh9W_sessionTab{border-radius:9px;width:34px;height:34px;padding:0;font-size:0}[data-sidebar-collapsed] .Yvqh9W_sessionTabLabel{display:none}.Yvqh9W_sessionTab:hover,.Yvqh9W_sessionTab[data-active]{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-active)}.Yvqh9W_sessionTabIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.Yvqh9W_sessionTabLabel{text-overflow:ellipsis;min-width:0;overflow:hidden}[class*=regionArea]{min-height:0;position:relative}.Yvqh9W_sidebarHistoryHost{z-index:30;background:var(--dsw-alias-bg-base);min-width:0;min-height:0;padding:6px 4px;display:none;position:absolute;inset:0;overflow:hidden}html[data-dsh-imagegen-active] .Yvqh9W_sidebarHistoryHost{display:flex}.Yvqh9W_sidebarHistoryHost .Yvqh9W_history{background:0 0;border:0;border-radius:8px;width:100%;height:100%}[data-dsh-frame][data-sidebar-collapsed] .Yvqh9W_sidebarHistoryHost{display:none}[data-dsh-frame][data-sidebar-collapsed] .Yvqh9W_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] .Yvqh9W_entryLabel{display:none}.Yvqh9W_view{width:100%;min-width:0;min-height:0;overflow:hidden}.Yvqh9W_panel,.Yvqh9W_panel *,.Yvqh9W_panel :before,.Yvqh9W_panel :after{box-sizing:border-box}.Yvqh9W_panel{background:var(--dsw-alias-bg-base);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:10px;padding:14px 16px 16px;display:flex;position:relative;overflow:hidden}.Yvqh9W_panelHeader{flex:none;justify-content:space-between;align-items:center;gap:12px;display:flex;position:relative}.Yvqh9W_panelHeading{align-items:baseline;gap:10px;min-width:0;display:flex}.Yvqh9W_panelTitle{color:var(--dsw-alias-label-primary);white-space:nowrap;margin:0;font-size:16px;font-weight:700}.Yvqh9W_githubLink{width:22px;height:22px;color:var(--dsw-alias-label-secondary);border-radius:6px;flex:none;justify-content:center;align-items:center;text-decoration:none;transition:color .12s,background .12s;display:inline-flex}.Yvqh9W_githubLink:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_connectionStatus{border:1px solid var(--dsw-alias-label-error);height:28px;color:var(--dsw-alias-label-error);font:inherit;white-space:nowrap;background:0 0;border-radius:8px;flex:none;align-items:center;gap:6px;padding:0 10px;font-size:12px;line-height:1;display:inline-flex}.Yvqh9W_connectionStatus[data-connected=true]{border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary)}.Yvqh9W_connectionDot{background:currentColor;border-radius:50%;width:6px;height:6px}.Yvqh9W_updateBanner{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-primary);overflow-wrap:anywhere;border-radius:10px;flex:none;justify-content:space-between;align-items:center;gap:12px;padding:7px 10px 7px 12px;font-size:12px;line-height:1.5;display:flex}.Yvqh9W_updateBanner[data-kind=ok]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}.Yvqh9W_updateText{min-width:0}.Yvqh9W_updateActions{flex:none;align-items:center;gap:10px;display:inline-flex}.Yvqh9W_updateRelease{color:inherit;text-underline-offset:2px;white-space:nowrap;text-decoration:underline}@media (width<=700px){.Yvqh9W_panelHeader{align-items:flex-start}.Yvqh9W_panelHeading{flex-direction:column;align-items:flex-start;gap:2px}.Yvqh9W_updateBanner{flex-direction:column;align-items:flex-start}.Yvqh9W_updateActions{justify-content:space-between;width:100%}}.Yvqh9W_studio{flex:1;min-width:0;min-height:0;display:flex}.Yvqh9W_generation{gap:14px;width:100%;min-width:0;min-height:0;display:flex}.Yvqh9W_generation[data-workspace=canvas]{height:100%;display:flex}.Yvqh9W_generation[data-workspace=canvas]>.Yvqh9W_config,.Yvqh9W_generation[data-workspace=canvas]>.Yvqh9W_canvas{display:none!important}.Yvqh9W_config{width:clamp(240px, var(--dsh-imagegen-config-width,300px), 480px);flex-direction:column;flex:none;gap:12px;min-width:240px;max-width:480px;height:100%;min-height:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_configHeader{flex:none;justify-content:flex-end;min-height:28px;display:flex}.Yvqh9W_configToggle{border:1px solid var(--dsw-alias-border-l1);width:28px;height:28px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;border-radius:7px;justify-content:center;align-items:center;padding:0;display:inline-flex}.Yvqh9W_configToggle:hover,.Yvqh9W_configToggle:focus-visible{border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-brand-primary);outline:none}.Yvqh9W_config[data-collapsed=true]{gap:0;width:38px;min-width:38px;max-width:38px}.Yvqh9W_config[data-collapsed=true] .Yvqh9W_configHeader{justify-content:center}.Yvqh9W_config[data-collapsed=true]>:not(.Yvqh9W_configHeader){display:none}.Yvqh9W_configScroll{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:12px;min-height:0;padding-right:2px;display:flex;overflow-y:auto}.Yvqh9W_configScroll::-webkit-scrollbar{width:8px}.Yvqh9W_configScroll::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_canvas{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_taskTray{z-index:6;border:1px solid var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 92%, transparent);backdrop-filter:blur(10px);border-radius:9px;flex-direction:column;width:min(360px,100% - 24px);max-height:calc(100% - 24px);display:flex;position:absolute;top:12px;right:12px;overflow:hidden;box-shadow:0 8px 24px #0000001f}.Yvqh9W_taskTray[data-open=false]{width:auto;max-width:calc(100% - 24px)}.Yvqh9W_taskTrayHeader{min-height:34px;color:var(--dsw-alias-label-primary);border-bottom:1px solid var(--dsw-alias-border-l1);align-items:stretch;font-size:12px;font-weight:600;display:flex}.Yvqh9W_taskTray[data-open=false] .Yvqh9W_taskTrayHeader{border-bottom:0}.Yvqh9W_taskTrayToggle{min-width:0;color:inherit;cursor:pointer;font:inherit;font-size:inherit;font-weight:inherit;text-align:left;background:0 0;border:0;flex:1;align-items:center;gap:8px;padding:8px 10px;display:flex}.Yvqh9W_taskTrayToggle:hover{background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_taskTrayCount{min-width:18px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);text-align:center;border-radius:999px;padding:1px 5px;font-size:11px;font-weight:500}.Yvqh9W_taskTrayChevron{color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:12px;font-weight:400}.Yvqh9W_taskTrayClose{border:0;border-left:1px solid var(--dsw-alias-border-l1);width:32px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;background:0 0;font-size:17px}.Yvqh9W_taskTrayClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_taskTray[data-open=false] .Yvqh9W_taskTrayToggle{min-height:34px}.Yvqh9W_taskRows{min-height:0;overflow-y:auto}.Yvqh9W_taskTray[data-open=false] .Yvqh9W_taskRows{display:none}.Yvqh9W_taskRow{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:7px;padding:7px 10px;display:grid}.Yvqh9W_taskRow:first-of-type{border-top:0}.Yvqh9W_taskStatus{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px}.Yvqh9W_taskRow[data-status=running] .Yvqh9W_taskStatus{color:var(--dsw-alias-brand-primary)}.Yvqh9W_taskRow[data-status=failed] .Yvqh9W_taskStatus{color:var(--dsw-alias-label-error)}.Yvqh9W_taskPrompt{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.Yvqh9W_taskRow button{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border:0;border-radius:5px;padding:2px 7px;font-size:11px}.Yvqh9W_taskRow button:hover{color:var(--dsw-alias-brand-primary)}.Yvqh9W_configGuide{z-index:1100;background:#00000059;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.Yvqh9W_configGuideBody{border:1px solid var(--dsw-alias-border-l2);width:min(360px,100%);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border-radius:10px;flex-direction:column;gap:12px;padding:18px;display:flex;box-shadow:0 14px 40px #0003}.Yvqh9W_configGuideBody span{color:var(--dsw-alias-label-secondary);font-size:13px;line-height:1.55}.Yvqh9W_configGuideBody button{min-height:30px;color:var(--dsw-alias-bg-layer-1);background:var(--dsw-alias-brand-primary);cursor:pointer;font:inherit;border:0;border-radius:7px;align-self:flex-end;padding:0 12px;font-size:12px}.Yvqh9W_history{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;width:auto;min-width:0;max-width:none;min-height:0;display:flex;overflow:hidden}.Yvqh9W_historyHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;display:flex}.Yvqh9W_historyHeaderActions{flex:none;align-items:center;gap:6px;display:flex}.Yvqh9W_historyFilters{border-bottom:1px solid var(--dsw-alias-border-l1);grid-template-columns:1fr 1fr;gap:6px;padding:8px 10px;display:grid}.Yvqh9W_historySearch,.Yvqh9W_historyFilters select,.Yvqh9W_gallerySearch{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);min-width:0;min-height:29px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.Yvqh9W_historySearch{grid-column:1/-1}.Yvqh9W_gallerySearch{width:156px}.Yvqh9W_galleryTagInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:130px;min-height:29px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.Yvqh9W_galleryBulkButton{border:1px solid var(--dsw-alias-border-l2);min-height:29px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.Yvqh9W_galleryBulkButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryBulkButton:disabled{opacity:.45;cursor:default}.Yvqh9W_historyTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600}.Yvqh9W_historyNew{width:26px;height:26px;color:var(--dsw-alias-label-secondary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:7px;justify-content:center;align-items:center;padding:0;display:inline-flex}.Yvqh9W_historyNew:hover{color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_historyClear{font:inherit;color:var(--dsw-alias-label-tertiary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:999px;padding:2px 8px;font-size:11.5px}.Yvqh9W_historyClear:hover{color:var(--dsw-alias-label-error);border-color:var(--dsw-alias-label-error)}.Yvqh9W_historyList{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:8px;min-height:0;padding:10px;display:flex;overflow-y:auto}.Yvqh9W_historyList::-webkit-scrollbar{width:8px}.Yvqh9W_historyList::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_historyEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;font-size:12px;line-height:1.6;display:flex}.Yvqh9W_historyItem{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:10px;flex-direction:column;flex:none;gap:6px;padding:8px;display:flex}.Yvqh9W_historyItem:hover{border-color:var(--dsw-alias-border-l2)}.Yvqh9W_historyItem[data-active]{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_historyMain{font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:flex-start;gap:8px;min-width:0;padding:0;display:flex}.Yvqh9W_historyThumb{object-fit:cover;background:var(--dsw-alias-bg-base);border-radius:8px;flex:none;width:52px;height:52px}.Yvqh9W_historyThumbPlaceholder{background:var(--dsw-alias-bg-layer-3);border-radius:8px;flex:none;width:52px;height:52px}.Yvqh9W_historyInfo{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.Yvqh9W_historyPrompt{color:var(--dsw-alias-label-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.Yvqh9W_historyMeta{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.Yvqh9W_historyActions{justify-content:flex-end;gap:4px;display:flex}.Yvqh9W_historyIconAction{width:26px;height:24px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:7px;justify-content:center;align-items:center;padding:0;display:inline-flex}.Yvqh9W_historyIconAction:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.Yvqh9W_historyIconAction:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.Yvqh9W_historyIconAction:disabled{opacity:.5;cursor:default}.Yvqh9W_historyIconAction[data-danger]:hover{color:var(--dsw-alias-state-error);background:color-mix(in srgb, var(--dsw-alias-state-error) 10%, transparent)}.Yvqh9W_card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;flex:none;gap:10px;padding:12px;display:flex}.Yvqh9W_ecommerceWorkspace{flex-direction:column;gap:18px;max-width:760px;margin:0 auto;padding:10px 8px 18px;display:flex}.Yvqh9W_ecommerceSection{border:none;border-bottom:1px solid var(--dsw-alias-border-l1);background:0 0;border-radius:0;flex-direction:column;gap:10px;padding:0 0 16px;display:flex}.Yvqh9W_ecommerceSection:last-of-type{border-bottom:none;padding-bottom:4px}.Yvqh9W_ecommerceSection h3{align-items:baseline;gap:7px;margin:0 0 2px;font-size:14px;font-weight:650;display:flex}.Yvqh9W_ecommerceSectionHint{color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:400}.Yvqh9W_ecommerceSection input:not([type=checkbox]),.Yvqh9W_ecommerceSection select,.Yvqh9W_ecommerceSection textarea{box-sizing:border-box;width:100%;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);font:inherit;border-radius:9px;padding:9px 11px}.Yvqh9W_ecommerceSection input:not([type=checkbox]):focus-visible,.Yvqh9W_ecommerceSection select:focus-visible,.Yvqh9W_ecommerceSection textarea:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.Yvqh9W_ecommerceSection textarea{resize:vertical;min-height:68px;line-height:1.5}.Yvqh9W_ecommerceField{flex-direction:column;gap:5px;min-width:0;display:flex}.Yvqh9W_ecommerceFieldLabel{color:var(--dsw-alias-label-secondary);font-size:11.5px}.Yvqh9W_ecommerceParamGrid{grid-template-columns:1fr 1fr;gap:12px 10px;display:grid}.Yvqh9W_ecommerceUploadHero{border:1.5px dashed var(--dsw-alias-border-l2);min-height:78px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;text-align:center;background:0 0;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:12px;display:flex}.Yvqh9W_ecommerceUploadHero:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover)}.Yvqh9W_ecommerceUploadHero:focus-visible,.Yvqh9W_ecommerceAssetAdd:focus-visible,.Yvqh9W_ecommerceSlotCard:focus-visible,.Yvqh9W_ecommerceAdvancedToggle:focus-visible,.Yvqh9W_ecommerceAsset button:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.Yvqh9W_ecommerceUploadHero span{font-size:12px}.Yvqh9W_ecommerceUploadHero small{color:var(--dsw-alias-label-tertiary);font-size:10.5px}.Yvqh9W_ecommerceStructureGrid{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.Yvqh9W_ecommerceSlotCard{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);height:34px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;font-size:12px;display:flex;position:relative}.Yvqh9W_ecommerceSlotCard:hover{border-color:var(--dsw-alias-label-dimmed)}.Yvqh9W_ecommerceSlotCard[data-active]{background:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-base);font-weight:600}.Yvqh9W_ecommerceSlotCount{background:var(--dsw-alias-brand-primary);color:#fff;text-align:center;border-radius:8px;min-width:16px;height:16px;padding:0 4px;font-size:10px;font-weight:600;line-height:16px;position:absolute;top:-6px;right:-6px}.Yvqh9W_ecommerceRefRow{grid-template-columns:64px 1fr;align-items:center;gap:8px;display:grid}.Yvqh9W_ecommerceRefRow>span{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommercePrimaryAction{border-radius:999px;width:100%;height:38px;font-size:13.5px}.Yvqh9W_previewBadge{background:var(--dsw-alias-brand-primary);color:#fff;letter-spacing:.02em;border-radius:4px;margin-left:5px;padding:0 4px;font-size:9px;font-weight:700;line-height:13px}.Yvqh9W_ecommercePlanNote{color:var(--dsw-alias-label-secondary);font-size:11.5px;line-height:1.5}.Yvqh9W_ecommercePlanWarn{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);border-radius:6px;padding:6px 8px;font-size:11.5px;line-height:1.5}.Yvqh9W_ecommerceAssets{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.Yvqh9W_ecommerceAsset{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-3);border-radius:8px;flex-direction:column;gap:3px;padding:4px;display:flex;position:relative}.Yvqh9W_ecommerceAsset img{object-fit:cover;border-radius:5px;width:100%;height:44px}.Yvqh9W_ecommerceAsset select{width:100%;min-width:0;padding:2px;font-size:10px}.Yvqh9W_ecommerceAsset button{color:#fff;cursor:pointer;text-align:center;background:#0000008c;border:none;border-radius:50%;width:16px;height:16px;padding:0;font-size:11px;line-height:15px;position:absolute;top:7px;right:7px}.Yvqh9W_ecommerceAsset button:hover{background:#000c}.Yvqh9W_ecommerceAssetAdd{border:1.5px dashed var(--dsw-alias-border-l2);min-height:78px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:2px;display:flex}.Yvqh9W_ecommerceAssetAdd:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.Yvqh9W_ecommerceAssetAdd span{font-size:16px;line-height:1}.Yvqh9W_ecommerceAssetAdd small{font-size:10px}.Yvqh9W_ecommerceAdvancedToggle{width:100%;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:none;justify-content:space-between;align-items:center;padding:0;font-size:12.5px;display:flex}.Yvqh9W_ecommerceAdvancedToggle:hover{color:var(--dsw-alias-label-primary)}.Yvqh9W_ecommerceAdvancedChevron{font-size:11px}.Yvqh9W_ecommerceAdvancedBody{flex-direction:column;gap:8px;margin-top:8px;display:flex}.Yvqh9W_ecommerceFooterBody{flex-direction:column;gap:8px;display:flex}.Yvqh9W_ecommercePlanMini{border:1px solid var(--dsw-alias-brand-primary);border-radius:10px;flex-direction:column;gap:6px;padding:10px;display:flex}.Yvqh9W_ecommercePlanMini>strong{font-size:12.5px}.Yvqh9W_ecommercePlanList{flex-direction:column;gap:3px;max-height:116px;display:flex;overflow-y:auto}.Yvqh9W_ecommercePlanList>div{color:var(--dsw-alias-label-secondary);justify-content:space-between;gap:12px;font-size:11.5px;display:flex}.Yvqh9W_ecommercePlanBack{color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;background:0 0;border:none;padding:0;font-size:12px}.Yvqh9W_ecommercePlanBack:hover{color:var(--dsw-alias-label-primary)}.Yvqh9W_ecommerceFooterHint{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommerceResults{flex-direction:column;gap:14px;width:100%;margin:0 auto;padding:16px 18px;display:flex;overflow-y:auto}.Yvqh9W_ecommerceResultsHeader{justify-content:space-between;align-items:center;gap:12px;display:flex}.Yvqh9W_ecommerceResultsHeader h3{margin:0;font-size:15px}.Yvqh9W_ecommerceResultsHeader>div:first-child{align-items:baseline;gap:10px;display:flex}.Yvqh9W_ecommerceResultsHeader span{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommerceResultsActions{gap:8px;display:flex}.Yvqh9W_ecommerceResultsEmpty{color:var(--dsw-alias-label-tertiary);text-align:center;border:1.5px dashed var(--dsw-alias-border-l2);border-radius:12px;padding:32px 16px;font-size:13px}.Yvqh9W_ecommerceGroups{flex-direction:column;gap:16px;display:flex}.Yvqh9W_ecommerceGroup{background:0 0;border:none;border-radius:0;flex-direction:column;gap:8px;padding:0;display:flex}.Yvqh9W_ecommerceGroup>header{align-items:center;gap:10px;font-size:13px;display:flex}.Yvqh9W_ecommerceGroup>header strong{font-size:13px}.Yvqh9W_ecommerceGroup>header span{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommerceGroup>header button{margin-left:auto}.Yvqh9W_ecommerceGroupGrid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.Yvqh9W_ecommerceTaskCard{aspect-ratio:1;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-3);border-radius:10px;justify-content:center;align-items:center;width:100%;min-height:0;padding:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_ecommerceTaskCard[data-status=failed],.Yvqh9W_ecommerceTaskCard[data-status=cancelled]{color:var(--dsw-alias-label-tertiary);font-size:12px}.Yvqh9W_ecommerceTaskCard .Yvqh9W_imageCard{border:none;border-radius:0;width:100%;height:100%;margin:0}.Yvqh9W_ecommerceTaskCard .Yvqh9W_image{object-fit:cover;width:100%;height:100%}.Yvqh9W_ecommerceResultBadge{color:#fff;pointer-events:none;background:#0000008c;border-radius:999px;padding:0 7px;font-size:10px;line-height:16px;position:absolute;top:6px;left:6px}.Yvqh9W_ecommerceTaskActions{opacity:0;background:linear-gradient(#0000,#0000008c);justify-content:center;gap:4px;padding:10px 4px 5px;transition:opacity .12s;display:flex;position:absolute;bottom:0;left:0;right:0}.Yvqh9W_ecommerceTaskCard:hover .Yvqh9W_ecommerceTaskActions{opacity:1}.Yvqh9W_ecommerceActionChip{color:#111;cursor:pointer;white-space:nowrap;background:#ffffffeb;border:none;border-radius:6px;padding:0 6px;font-size:10px;font-weight:500;line-height:18px;text-decoration:none}.Yvqh9W_ecommerceActionChip:hover{background:#fff}.Yvqh9W_ecommerceActionChip:disabled{opacity:.5;cursor:default}.Yvqh9W_ecommerceTaskState{color:var(--dsw-alias-label-secondary);text-align:center;word-break:break-all;flex-direction:column;gap:3px;padding:10px 8px;font-size:11px;display:flex}.Yvqh9W_ecommerceTaskState b{color:var(--dsw-alias-label-primary);font-size:12px}.Yvqh9W_topNav{flex:none;justify-content:center;align-items:center;gap:2px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.Yvqh9W_topNavItem{height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:none;border-radius:999px;align-items:center;gap:4px;padding:0 14px;font-size:13px;display:inline-flex}.Yvqh9W_topNavItem,.Yvqh9W_topNavItem span{white-space:nowrap}.Yvqh9W_topNavItem:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.Yvqh9W_topNavItem[data-active]{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-base);font-weight:600}.Yvqh9W_topNavDivider{background:var(--dsw-alias-border-l2);width:1px;height:16px;margin:0 8px}.Yvqh9W_panelHeaderActions{align-items:center;gap:10px;display:inline-flex}.Yvqh9W_chatToggle{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;border-radius:999px;align-items:center;gap:5px;padding:0 10px;font-size:12px;display:inline-flex}.Yvqh9W_chatToggle:hover{color:var(--dsw-alias-label-primary)}.Yvqh9W_chatToggle[data-open=true]{color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}html[data-dsh-imagegen-chat-collapsed][data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation],html[data-dsh-imagegen-chat-collapsed][data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]{grid-template-columns:minmax(0,1fr)}html[data-dsh-imagegen-chat-collapsed][data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-slot=conversation],html[data-dsh-imagegen-chat-collapsed] [data-dsh-imagegen-chat-resizer]{display:none!important}.Yvqh9W_configResizer{cursor:col-resize;z-index:6;width:6px;height:100%;position:absolute;top:0;right:0}.Yvqh9W_configResizer:hover{background:linear-gradient(90deg, transparent, var(--dsw-alias-border-l2))}.Yvqh9W_config[data-collapsed=true] .Yvqh9W_configResizer{display:none}.Yvqh9W_modeRow{align-items:center;gap:8px;display:flex}.Yvqh9W_modePill{flex:1;justify-content:center;height:28px;font-size:12.5px}.Yvqh9W_modePill,.Yvqh9W_modePill span,.Yvqh9W_modePill div{white-space:nowrap;min-width:0}.Yvqh9W_uploadBox{min-height:128px;color:var(--dsw-alias-label-secondary);border:1.5px dashed var(--dsw-alias-border-l2);cursor:pointer;font:inherit;text-align:center;background:0 0;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:16px;font-size:12.5px;display:flex}.Yvqh9W_uploadBox:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover)}.Yvqh9W_uploadBox:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.Yvqh9W_uploadIcon{color:var(--dsw-alias-label-tertiary);display:inline-flex}.Yvqh9W_uploadHint{color:var(--dsw-alias-label-tertiary);font-size:11px}.Yvqh9W_reference{flex-direction:column;gap:8px;display:flex}.Yvqh9W_referenceImage{object-fit:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;width:100%;max-height:176px}.Yvqh9W_referenceActions{gap:8px;display:flex}.Yvqh9W_hiddenFile{display:none}.Yvqh9W_prompt{width:100%;min-height:120px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);resize:vertical;box-sizing:border-box;border-radius:10px;outline:none;padding:10px 12px;font-family:inherit;font-size:13px;line-height:1.6}.Yvqh9W_prompt:focus-visible{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_prompt::placeholder{color:var(--dsw-alias-label-tertiary)}.Yvqh9W_promptFooter{justify-content:space-between;align-items:center;gap:8px;margin-top:-6px;display:flex}.Yvqh9W_templatesButton{border:1px solid var(--dsw-alias-brand-primary);background:linear-gradient(135deg, color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent), color-mix(in srgb, var(--dsw-alias-brand-primary) 5%, transparent));height:26px;color:var(--dsw-alias-brand-primary);cursor:pointer;box-shadow:0 1px 0 color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, transparent);border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-family:inherit;font-size:12px;font-weight:600;transition:transform .12s,box-shadow .12s,background .12s;display:inline-flex}.Yvqh9W_templatesButton svg{flex:none}.Yvqh9W_templatesButton:hover{background:linear-gradient(135deg, color-mix(in srgb, var(--dsw-alias-brand-primary) 24%, transparent), color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, transparent));color:var(--dsw-alias-brand-primary);box-shadow:0 2px 6px color-mix(in srgb, var(--dsw-alias-brand-primary) 30%, transparent);transform:translateY(-1px)}.Yvqh9W_templatesButton:active{transform:translateY(0)}.Yvqh9W_enhanceButton{border:1px solid var(--dsw-alias-border-l2);height:26px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);font:inherit;cursor:pointer;border-radius:999px;margin-left:auto;padding:0 11px;font-size:12px}.Yvqh9W_enhanceButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_enhanceButton:disabled{opacity:.5;cursor:default}.Yvqh9W_promptCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:11px}.Yvqh9W_paramGroup{flex-direction:column;gap:8px;display:flex}.Yvqh9W_paramLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}.Yvqh9W_optionRow{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_optionGrid{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.Yvqh9W_optionPill{justify-content:center}.Yvqh9W_paramHint{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.45}.Yvqh9W_footer{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;flex:none;align-items:stretch;gap:8px;padding:10px 2px 0 0;display:flex}.Yvqh9W_modelWrap{flex-direction:column;gap:5px;min-width:0;display:flex}.Yvqh9W_modelLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}.Yvqh9W_modelSelect{width:100%;height:36px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;text-align:left;border-radius:18px;outline:none;justify-content:space-between;align-items:center;gap:8px;padding:0 12px;font-family:inherit;font-size:13px;display:flex}.Yvqh9W_modelSelect:focus-visible{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_modelSelect:disabled{opacity:.55;cursor:default}.Yvqh9W_modelMenu{min-width:0;display:block;position:relative}.Yvqh9W_modelMenuList{z-index:40;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;flex-direction:column;padding:4px;display:flex;position:absolute;bottom:calc(100% + 6px);left:0;right:0;overflow:hidden;box-shadow:0 -8px 24px #0000002e}.Yvqh9W_modelMenuItem{width:100%;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;white-space:nowrap;text-overflow:ellipsis;background:0 0;border:none;border-radius:8px;padding:7px 10px;font-size:13px;display:block;overflow:hidden}.Yvqh9W_modelMenuItem:hover{background:var(--dsw-alias-bg-hover)}.Yvqh9W_modelMenuItem[data-selected]{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1);font-weight:600}.Yvqh9W_generateButton{width:100%}.Yvqh9W_generateInner{align-items:center;gap:7px;display:inline-flex}.Yvqh9W_canvasState{text-align:center;color:var(--dsw-alias-label-tertiary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;display:flex}.Yvqh9W_canvasStateTitle{color:var(--dsw-alias-label-secondary);font-size:14px;font-weight:600}.Yvqh9W_canvasStateHint{max-width:380px;font-size:12px;line-height:1.6}.Yvqh9W_canvasEmptyIcon{color:var(--dsw-alias-label-tertiary);margin-bottom:4px;display:inline-flex}.Yvqh9W_canvasError{color:var(--dsw-alias-label-error);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-label-error);overflow-wrap:anywhere;border-radius:10px;flex:none;margin:14px;padding:10px 14px;font-size:12.5px;line-height:1.6}.Yvqh9W_canvasBody{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:10px;min-height:0;padding:14px;display:flex;overflow-y:auto}.Yvqh9W_canvasBody::-webkit-scrollbar{width:8px}.Yvqh9W_canvasBody::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_canvasMeta{color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:8px;font-size:12px;display:flex}.Yvqh9W_canvasHistoryTag{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:11px}.Yvqh9W_grid{flex:1;grid-template-rows:repeat(2,minmax(0,1fr));grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;min-height:0;display:grid}.Yvqh9W_grid[data-count=\"1\"] .Yvqh9W_imageCard{grid-area:1/1/3/3}.Yvqh9W_imageCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);cursor:zoom-in;border-radius:12px;flex-direction:column;min-height:0;margin:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_imageCard:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.Yvqh9W_image{object-fit:cover;background:var(--dsw-alias-bg-base);flex:1;width:100%;min-height:0;display:block}.Yvqh9W_imageCaption{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;border-top:1px solid var(--dsw-alias-border-l1);padding:7px 10px;font-size:11px;line-height:1.5;overflow:hidden}.Yvqh9W_download{color:#fff;opacity:0;backdrop-filter:blur(4px);background:#0f1218d1;border:1px solid #ffffff9e;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;text-decoration:none;transition:opacity .12s;position:absolute;top:8px;right:8px;box-shadow:0 2px 8px #00000047}.Yvqh9W_imageCard:hover .Yvqh9W_download{opacity:1}.Yvqh9W_download:hover{background:#0f1218f0}.Yvqh9W_download:focus-visible{opacity:1;outline-offset:2px;outline:2px solid #fff}.Yvqh9W_galleryAdd{font:inherit;color:#fff;cursor:pointer;opacity:0;backdrop-filter:blur(4px);background:#0f1218d1;border:1px solid #ffffff9e;border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;top:8px;left:8px;box-shadow:0 2px 8px #00000047}.Yvqh9W_imageCard:hover .Yvqh9W_galleryAdd{opacity:1}.Yvqh9W_galleryAdd:hover{background:#0f1218f0}.Yvqh9W_galleryAdd:focus-visible{opacity:1;outline-offset:2px;outline:2px solid #fff}.Yvqh9W_galleryAdd:disabled{opacity:.4;cursor:default}.Yvqh9W_conversationAdd{color:#fff;cursor:pointer;font:inherit;opacity:0;backdrop-filter:blur(4px);background:#0f1218d1;border:1px solid #ffffff9e;border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;top:38px;left:8px;box-shadow:0 2px 8px #00000047}.Yvqh9W_imageCard:hover .Yvqh9W_conversationAdd,.Yvqh9W_conversationAdd:focus-visible{opacity:1}.Yvqh9W_conversationAdd:hover{background:#0f1218f0}.Yvqh9W_conversationAdd:focus-visible{opacity:1;outline-offset:2px;outline:2px solid #fff}.Yvqh9W_conversationAdd:disabled{opacity:.4;cursor:default}.Yvqh9W_zoomHint{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);border:1px solid var(--dsw-alias-border-l2);opacity:0;backdrop-filter:blur(4px);pointer-events:none;border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;bottom:8px;left:8px}.Yvqh9W_imageCard:hover .Yvqh9W_zoomHint{opacity:1}.Yvqh9W_spinner,.Yvqh9W_bigSpinner{border:2px solid;border-top-color:#0000;border-radius:50%;flex:none;animation:.8s linear infinite Yvqh9W_dshImageGenSpin;display:inline-block}.Yvqh9W_spinner{width:11px;height:11px}.Yvqh9W_bigSpinner{width:30px;height:30px;color:var(--dsw-alias-state-business-primary);border-width:3px;margin-bottom:6px}.Yvqh9W_lightbox{z-index:1000;backdrop-filter:blur(6px);background:#000000b8;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.Yvqh9W_lightboxClose{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:50%;justify-content:center;align-items:center;width:38px;height:38px;display:inline-flex;position:absolute;top:16px;right:16px}.Yvqh9W_lightboxClose:hover{background:#ffffff42}.Yvqh9W_lightboxNav{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:50%;justify-content:center;align-items:center;width:42px;height:42px;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.Yvqh9W_lightboxNav:hover{background:#ffffff42}.Yvqh9W_lightboxNav[data-dir=prev]{left:max(20px,50% - 640px)}.Yvqh9W_lightboxNav[data-dir=next]{right:max(20px,50% - 640px)}.Yvqh9W_lightboxFigure{flex-direction:column;gap:10px;width:min(1100px,100vw - 160px);max-width:min(1100px,100vw - 160px);height:min(820px,100vh - 48px);min-height:0;margin:0;display:flex}.Yvqh9W_lightboxStage{background:#ffffff0a;border-radius:10px;flex:1;min-height:0;position:relative;overflow:auto}.Yvqh9W_lightboxScaleFrame{justify-content:center;align-items:center;min-width:100%;min-height:100%;display:flex}.Yvqh9W_lightboxImage{object-fit:contain;border-radius:10px;max-width:100%;max-height:100%;display:block;box-shadow:0 24px 80px #00000080}.Yvqh9W_lightboxTools{justify-content:center;align-items:center;gap:6px;display:flex}.Yvqh9W_lightboxTool,.Yvqh9W_lightboxZoomLevel,.Yvqh9W_lightboxCopy{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;justify-content:center;align-items:center;display:inline-flex}.Yvqh9W_lightboxTool,.Yvqh9W_lightboxZoomLevel{height:32px}.Yvqh9W_lightboxTool{border-radius:50%;width:32px}.Yvqh9W_lightboxZoomLevel{min-width:58px;font:inherit;font-variant-numeric:tabular-nums;border-radius:999px;padding:0 9px;font-size:12px}.Yvqh9W_lightboxTool:hover,.Yvqh9W_lightboxZoomLevel:hover,.Yvqh9W_lightboxCopy:hover{background:#ffffff42}.Yvqh9W_lightboxCaptionRow{align-items:flex-start;gap:8px;min-width:0;display:flex}.Yvqh9W_lightboxCaption{color:#ffffffe6;-webkit-line-clamp:3;-webkit-box-orient:vertical;flex:1;min-width:0;font-size:12px;line-height:1.6;display:-webkit-box;overflow:hidden}.Yvqh9W_lightboxCopy{min-height:28px;font:inherit;white-space:nowrap;border-radius:999px;flex:none;gap:5px;padding:4px 9px;font-size:12px}.Yvqh9W_lightboxMeta{justify-content:space-between;align-items:center;gap:12px;display:flex}.Yvqh9W_lightboxIndex{color:#fffc;font-variant-numeric:tabular-nums;font-size:12px}.Yvqh9W_lightboxActions{align-items:center;gap:8px;display:inline-flex}.Yvqh9W_lightboxDownload,.Yvqh9W_lightboxEdit{font:inherit;color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:999px;padding:4px 14px;font-size:12.5px;font-weight:500;text-decoration:none}.Yvqh9W_lightboxDownload:hover,.Yvqh9W_lightboxEdit:hover{background:#ffffff42}.Yvqh9W_lightboxEdit{color:#fff;background:#ffffff24;border:1px solid #ffffff47;border-radius:999px}@media (width<=720px){.Yvqh9W_lightbox{padding:16px}.Yvqh9W_lightboxFigure{width:calc(100vw - 32px);max-width:none}.Yvqh9W_lightboxNav[data-dir=prev]{left:20px}.Yvqh9W_lightboxNav[data-dir=next]{right:20px}.Yvqh9W_lightboxCaptionRow,.Yvqh9W_lightboxMeta{flex-direction:column;align-items:stretch}.Yvqh9W_lightboxCopy,.Yvqh9W_lightboxActions{align-self:flex-end}}@keyframes Yvqh9W_dshImageGenSpin{to{transform:rotate(360deg)}}.Yvqh9W_galleryToast{z-index:30;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);border:1px solid var(--dsw-alias-border-l2);backdrop-filter:blur(6px);pointer-events:none;border-radius:999px;align-items:center;gap:7px;padding:6px 16px;font-size:13px;font-weight:500;animation:.16s ease-out Yvqh9W_dshImageGenToastIn;display:inline-flex;position:absolute;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #00000038}@keyframes Yvqh9W_dshImageGenToastIn{0%{opacity:0;transform:translate(-50%,6px)}to{opacity:1;transform:translate(-50%)}}.Yvqh9W_conversationToast{z-index:30;border:1px solid var(--dsw-alias-border-l2);max-width:calc(100% - 32px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);pointer-events:none;backdrop-filter:blur(6px);border-radius:999px;align-items:center;gap:7px;padding:6px 16px;font-size:13px;font-weight:500;animation:.16s ease-out Yvqh9W_dshImageGenToastIn;display:inline-flex;position:absolute;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #00000038}@media (prefers-reduced-motion:reduce){.Yvqh9W_download,.Yvqh9W_spinner,.Yvqh9W_bigSpinner{transition:none;animation-duration:1.5s}}.Yvqh9W_config[data-gallery=true] .Yvqh9W_configScroll{flex:none;order:1;display:flex;overflow:visible}.Yvqh9W_config[data-gallery=true] .Yvqh9W_galleryFilters{flex:1;order:2;min-height:0}.Yvqh9W_galleryFilters{padding:18px 14px;overflow:hidden auto}.Yvqh9W_galleryFilterHeading{color:var(--dsw-alias-label-tertiary);margin:0 4px 10px;font-size:12px;font-weight:600}.Yvqh9W_galleryFilter{width:100%;min-height:34px;color:var(--dsw-alias-label-secondary);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:9px;justify-content:space-between;align-items:center;padding:0 10px;display:flex}.Yvqh9W_galleryFilter:hover,.Yvqh9W_galleryFilter[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent)}.Yvqh9W_galleryFilterCount{min-width:20px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);text-align:center;border-radius:999px;padding:1px 6px;font-size:11px}.Yvqh9W_galleryFilterDivider{background:var(--dsw-alias-border-l1);height:1px;margin:18px 4px}.Yvqh9W_galleryRatioList{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_galleryRatio{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;border:0;border-radius:999px;padding:6px 10px;font-size:12px}.Yvqh9W_galleryRatio[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 13%, transparent)}.Yvqh9W_galleryTagFilterList{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_galleryTagFilter{border:1px solid var(--dsw-alias-border-l1);min-width:0;max-width:100%;min-height:27px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border-radius:6px;align-items:center;gap:5px;padding:0 8px;font-size:11px;display:inline-flex}.Yvqh9W_galleryTagFilter span:first-child{text-overflow:ellipsis;white-space:nowrap;max-width:112px;overflow:hidden}.Yvqh9W_galleryTagFilter span:last-child{color:var(--dsw-alias-label-tertiary);font-size:10px}.Yvqh9W_galleryTagFilter:hover,.Yvqh9W_galleryTagFilter[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent)}.Yvqh9W_galleryFilterNote{color:var(--dsw-alias-label-quaternary);margin:20px 4px 0;font-size:11px;line-height:1.5}.Yvqh9W_galleryWorkspace{box-sizing:border-box;flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;padding:22px 24px 26px;display:flex;position:absolute;inset:0;overflow:hidden}.Yvqh9W_galleryToolbar{flex:none;justify-content:space-between;align-items:center;gap:16px;min-width:0;margin-bottom:18px;display:flex}.Yvqh9W_galleryHeading{color:var(--dsw-alias-label-primary);margin:0;font-size:20px;font-weight:700;display:inline}.Yvqh9W_galleryCount{color:var(--dsw-alias-label-tertiary);margin-left:8px;font-size:13px}.Yvqh9W_galleryToolbarActions{flex-wrap:wrap;align-items:center;gap:10px;min-width:0;display:flex}.Yvqh9W_gallerySelectMode,.Yvqh9W_galleryBulkButton,.Yvqh9W_gallerySelectionClear{border:1px solid var(--dsw-alias-border-l1);min-height:30px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:7px;padding:0 10px;font-size:12px}.Yvqh9W_gallerySelectMode:hover,.Yvqh9W_gallerySelectMode[data-active],.Yvqh9W_galleryBulkButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 38%, var(--dsw-alias-border-l1));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 11%, transparent)}.Yvqh9W_galleryBulkButton:disabled{cursor:not-allowed;opacity:.45}.Yvqh9W_gallerySelectionBar{border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 35%, var(--dsw-alias-border-l1));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 7%, var(--dsw-alias-bg-layer-1));border-radius:9px;flex:none;align-items:center;gap:10px;min-width:0;margin:-4px 0 16px;padding:10px 12px;display:flex}.Yvqh9W_gallerySelectionBar strong{color:var(--dsw-alias-brand-primary);flex:none;font-size:12px}.Yvqh9W_gallerySelectionClear{margin-left:auto}.Yvqh9W_gallerySelectionClear:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_galleryTagInput,.Yvqh9W_gallerySearch{border:1px solid var(--dsw-alias-border-l1);min-width:0;height:30px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);font:inherit;border-radius:7px;outline:none;padding:0 10px;font-size:12px}.Yvqh9W_galleryTagInput{flex:190px}.Yvqh9W_galleryTagInput:focus,.Yvqh9W_gallerySearch:focus{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryViewToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:9px;padding:3px;display:flex}.Yvqh9W_galleryViewToggle button,.Yvqh9W_gallerySort,.Yvqh9W_galleryClear{min-height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:7px;padding:0 10px;font-size:12px}.Yvqh9W_galleryViewToggle button[data-active],.Yvqh9W_galleryViewToggle button:hover,.Yvqh9W_gallerySort:hover,.Yvqh9W_galleryClear:hover{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 11%, transparent)}.Yvqh9W_gallerySort{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1)}.Yvqh9W_galleryClear{border:1px solid var(--dsw-alias-border-l1)}.Yvqh9W_compareControl{flex-direction:column;gap:6px;margin:0 0 10px;display:flex}.Yvqh9W_compareToggle,.Yvqh9W_compareModelChoices label{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.Yvqh9W_compareToggle input,.Yvqh9W_compareModelChoices input{accent-color:var(--dsw-alias-brand-primary)}.Yvqh9W_compareModelChoices{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_compareModelChoices label{border:1px solid var(--dsw-alias-border-l1);border-radius:5px;padding:4px 6px;font-size:10px}.Yvqh9W_comparisonBoard{z-index:4;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:8px;flex-direction:column;display:flex;position:absolute;inset:14px;overflow:hidden;box-shadow:0 8px 24px #0000001f}.Yvqh9W_comparisonBoard>header{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:center;padding:10px 12px;display:flex}.Yvqh9W_comparisonBoard>header div{align-items:baseline;gap:7px;display:flex}.Yvqh9W_comparisonBoard>header strong{color:var(--dsw-alias-label-primary);font-size:13px}.Yvqh9W_comparisonBoard>header span{color:var(--dsw-alias-label-tertiary);font-size:11px}.Yvqh9W_comparisonBoard>header button{border:1px solid var(--dsw-alias-border-l1);min-height:28px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border-radius:5px;padding:0 9px;font-size:11px}.Yvqh9W_comparisonGrid{flex:1;grid-template-rows:minmax(0,1fr);grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;min-height:0;padding:12px;display:grid;overflow:auto}.Yvqh9W_comparisonGrid article{flex-direction:column;gap:7px;min-width:0;height:100%;min-height:0;display:flex}.Yvqh9W_comparisonGrid article>strong{color:var(--dsw-alias-label-primary);font-size:12px}.Yvqh9W_comparisonImageButton{cursor:zoom-in;background:var(--dsw-alias-bg-base);border:0;flex:1;width:100%;min-height:0;padding:0;display:flex;overflow:hidden}.Yvqh9W_comparisonImageButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.Yvqh9W_comparisonGrid article>span{min-height:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);flex:1;place-items:center;font-size:12px;display:grid}.Yvqh9W_comparisonGrid img{object-fit:contain;background:var(--dsw-alias-bg-base);flex:1;width:100%;height:100%;min-height:0;max-height:none;display:block}.Yvqh9W_comparisonFullscreen{z-index:1200;background:#000000eb;padding:54px 24px 24px;position:fixed;inset:0;overflow:auto}.Yvqh9W_comparisonFullscreenGrid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));align-items:start;gap:18px;min-height:100%;display:grid}.Yvqh9W_comparisonFullscreen figure{min-width:0;margin:0}.Yvqh9W_comparisonFullscreen figcaption{color:#fff;margin-bottom:8px;font-size:13px;font-weight:600}.Yvqh9W_comparisonFullscreen img{background:#111;width:100%;margin-bottom:10px;display:block}.Yvqh9W_historyItem[data-comparison]{border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 55%, var(--dsw-alias-border-l1))}.Yvqh9W_galleryMasonry{box-sizing:border-box;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex:auto;grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:max-content;align-content:start;gap:16px;width:100%;min-width:0;max-width:100%;height:0;min-height:0;padding:2px 8px 16px 2px;display:grid;overflow:hidden scroll}.Yvqh9W_galleryMasonry::-webkit-scrollbar{width:8px}.Yvqh9W_galleryMasonry::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_galleryCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:14px;width:100%;margin:0;display:block;position:relative;overflow:hidden;box-shadow:0 5px 18px #18203612}.Yvqh9W_galleryCard[data-selected]{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-alias-brand-primary) 26%, transparent), 0 5px 18px #18203612}.Yvqh9W_gallerySelect{z-index:2;cursor:pointer;background:#00000094;border:1px solid #ffffffbf;border-radius:7px;place-items:center;width:26px;height:26px;display:grid;position:absolute;top:9px;right:9px}.Yvqh9W_gallerySelect input{width:16px;height:16px;accent-color:var(--dsw-alias-brand-primary);cursor:pointer;margin:0}.Yvqh9W_galleryImageButton{background:var(--dsw-alias-bg-base);cursor:zoom-in;border:0;width:100%;padding:0;display:block;position:relative}.Yvqh9W_galleryImageButton[data-selecting]{cursor:pointer}.Yvqh9W_galleryImage{aspect-ratio:4/3;object-fit:cover;width:100%;display:block}.Yvqh9W_galleryMasonry[data-view=masonry] .Yvqh9W_galleryCard:nth-child(3n+1) .Yvqh9W_galleryImage{aspect-ratio:4/5}.Yvqh9W_galleryMasonry[data-view=masonry] .Yvqh9W_galleryCard:nth-child(3n+2) .Yvqh9W_galleryImage{aspect-ratio:4/3}.Yvqh9W_galleryMasonry[data-view=masonry] .Yvqh9W_galleryCard:nth-child(3n) .Yvqh9W_galleryImage{aspect-ratio:3/4}.Yvqh9W_galleryBadge{color:#fff;backdrop-filter:blur(4px);background:#121724c2;border-radius:999px;padding:4px 9px;font-size:11px;position:absolute;top:10px;left:10px}.Yvqh9W_galleryCardActions{padding:8px 12px 0;display:flex}.Yvqh9W_galleryCardAction{border:1px solid var(--dsw-alias-border-l2);width:100%;min-width:0;min-height:28px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;white-space:nowrap;border-radius:7px;justify-content:center;align-items:center;gap:4px;padding:0 4px;font-size:10px;font-weight:500;display:inline-flex}.Yvqh9W_galleryCardAction:hover,.Yvqh9W_galleryCardAction:focus-visible{border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-brand-primary);outline:none}.Yvqh9W_galleryCardAction:disabled{cursor:wait;opacity:.55}.Yvqh9W_galleryCardFooter{align-items:center;gap:9px;min-width:0;padding:10px 12px;display:flex}.Yvqh9W_galleryAvatar{color:#fff;background:var(--dsw-alias-brand-primary);border-radius:50%;flex:none;place-items:center;width:27px;height:27px;font-size:12px;font-weight:700;display:grid}.Yvqh9W_galleryCardInfo{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.Yvqh9W_galleryCardInfo strong,.Yvqh9W_galleryCardInfo small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Yvqh9W_galleryCardInfo strong{color:var(--dsw-alias-label-primary);font-size:12px}.Yvqh9W_galleryCardInfo small{color:var(--dsw-alias-label-tertiary);font-size:10px}.Yvqh9W_galleryTags{flex-wrap:wrap;gap:4px;margin-top:4px;display:flex}.Yvqh9W_galleryTags button{max-width:96px;min-height:19px;color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent);cursor:pointer;font:inherit;text-overflow:ellipsis;white-space:nowrap;border:0;border-radius:4px;padding:1px 6px;font-size:10px;line-height:1.35;overflow:hidden}.Yvqh9W_galleryTags button:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 17%, transparent)}.Yvqh9W_galleryTags .Yvqh9W_galleryTagEdit{color:var(--dsw-alias-label-tertiary);background:0 0;flex:none}.Yvqh9W_galleryTagEditor{align-items:center;gap:6px;padding:0 12px 10px 48px;display:flex}.Yvqh9W_galleryTagEditor input{border:1px solid var(--dsw-alias-border-l2);min-width:0;height:27px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:6px;outline:none;flex:1;padding:0 8px;font-size:11px}.Yvqh9W_galleryTagEditor input:focus{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryTagEditor button{border:1px solid var(--dsw-alias-border-l2);height:27px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:6px;padding:0 8px;font-size:11px}.Yvqh9W_galleryTagEditor button[type=submit]{color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryRemove{width:24px;height:24px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:50%;flex:none;padding:0;font-size:18px}.Yvqh9W_galleryRemove:hover{color:var(--dsw-alias-state-error);background:var(--dsw-alias-bg-layer-2)}@media (width<=760px){.Yvqh9W_ecommerceParamGrid{grid-template-columns:1fr}.Yvqh9W_ecommerceStructureGrid,.Yvqh9W_ecommerceAssets{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=420px){.Yvqh9W_ecommerceWorkspace{padding-inline:2px}.Yvqh9W_ecommerceStructureGrid,.Yvqh9W_ecommerceAssets{grid-template-columns:1fr}}@media (width<=1100px){.Yvqh9W_galleryMasonry{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.Yvqh9W_studio{grid-template-rows:minmax(220px,36%) minmax(0,1fr);grid-template-columns:minmax(0,1fr);overflow-y:auto}.Yvqh9W_history{grid-area:1/1;min-height:220px}.Yvqh9W_generation{flex-direction:column;grid-area:2/1;min-height:0}.Yvqh9W_config{width:auto;max-width:none;height:auto;min-height:0}.Yvqh9W_config[data-gallery=true]{flex:none}.Yvqh9W_canvas{min-height:560px}.Yvqh9W_galleryToolbar{flex-direction:column;align-items:flex-start}.Yvqh9W_galleryToolbarActions{flex-wrap:wrap;width:100%}.Yvqh9W_galleryMasonry{grid-template-columns:1fr}}";
5775
6325
  const tagId$2 = "@dickpy/dsh-imagegen/panel.module.css";
5776
6326
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
5777
6327
  const tag = document.createElement("style");
@@ -5781,226 +6331,226 @@ window.__ModuleLoader__.load({
5781
6331
  document.head.appendChild(tag);
5782
6332
  }
5783
6333
  var panel_module_css_default = {
5784
- "lightboxFigure": "Yvqh9W_lightboxFigure",
5785
- "configResizer": "Yvqh9W_configResizer",
5786
- "conversationToast": "Yvqh9W_conversationToast",
5787
- "historyMain": "Yvqh9W_historyMain",
5788
- "taskPrompt": "Yvqh9W_taskPrompt",
5789
- "canvas": "Yvqh9W_canvas",
5790
- "historyThumb": "Yvqh9W_historyThumb",
5791
- "taskTrayToggle": "Yvqh9W_taskTrayToggle",
5792
- "taskRows": "Yvqh9W_taskRows",
5793
- "topNavDivider": "Yvqh9W_topNavDivider",
5794
- "lightboxIndex": "Yvqh9W_lightboxIndex",
5795
- "comparisonFullscreen": "Yvqh9W_comparisonFullscreen",
5796
- "galleryToolbarActions": "Yvqh9W_galleryToolbarActions",
5797
- "galleryCardInfo": "Yvqh9W_galleryCardInfo",
5798
- "historyActions": "Yvqh9W_historyActions",
5799
- "comparisonGrid": "Yvqh9W_comparisonGrid",
5800
- "galleryClear": "Yvqh9W_galleryClear",
5801
- "taskRow": "Yvqh9W_taskRow",
5802
- "referenceImage": "Yvqh9W_referenceImage",
5803
- "image": "Yvqh9W_image",
5804
- "canvasError": "Yvqh9W_canvasError",
5805
- "modelMenuList": "Yvqh9W_modelMenuList",
6334
+ "historyNew": "Yvqh9W_historyNew",
6335
+ "historyList": "Yvqh9W_historyList",
6336
+ "sessionTabs": "Yvqh9W_sessionTabs",
6337
+ "ecommerceAdvancedBody": "Yvqh9W_ecommerceAdvancedBody",
6338
+ "imageCard": "Yvqh9W_imageCard",
6339
+ "ecommerceFieldLabel": "Yvqh9W_ecommerceFieldLabel",
6340
+ "compareControl": "Yvqh9W_compareControl",
6341
+ "lightboxImage": "Yvqh9W_lightboxImage",
6342
+ "galleryTagEditor": "Yvqh9W_galleryTagEditor",
6343
+ "configToggle": "Yvqh9W_configToggle",
6344
+ "taskPrompt": "Yvqh9W_taskPrompt",
5806
6345
  "connectionDot": "Yvqh9W_connectionDot",
6346
+ "uploadIcon": "Yvqh9W_uploadIcon",
6347
+ "updateText": "Yvqh9W_updateText",
6348
+ "generateButton": "Yvqh9W_generateButton",
6349
+ "card": "Yvqh9W_card",
6350
+ "ecommerceWorkspace": "Yvqh9W_ecommerceWorkspace",
6351
+ "lightboxTool": "Yvqh9W_lightboxTool",
6352
+ "ecommerceResultsEmpty": "Yvqh9W_ecommerceResultsEmpty",
6353
+ "galleryViewToggle": "Yvqh9W_galleryViewToggle",
6354
+ "ecommerceAdvancedChevron": "Yvqh9W_ecommerceAdvancedChevron",
6355
+ "panelHeaderActions": "Yvqh9W_panelHeaderActions",
6356
+ "modelLabel": "Yvqh9W_modelLabel",
6357
+ "paramLabel": "Yvqh9W_paramLabel",
6358
+ "lightboxCaptionRow": "Yvqh9W_lightboxCaptionRow",
6359
+ "previewBadge": "Yvqh9W_previewBadge",
6360
+ "historyEmpty": "Yvqh9W_historyEmpty",
5807
6361
  "panel": "Yvqh9W_panel",
5808
- "ecommerceFooterBody": "Yvqh9W_ecommerceFooterBody",
5809
- "imageCard": "Yvqh9W_imageCard",
5810
- "uploadHint": "Yvqh9W_uploadHint",
5811
- "zoomHint": "Yvqh9W_zoomHint",
6362
+ "galleryCard": "Yvqh9W_galleryCard",
6363
+ "galleryImage": "Yvqh9W_galleryImage",
5812
6364
  "galleryCardActions": "Yvqh9W_galleryCardActions",
5813
- "ecommercePlanNote": "Yvqh9W_ecommercePlanNote",
5814
- "card": "Yvqh9W_card",
5815
- "canvasHistoryTag": "Yvqh9W_canvasHistoryTag",
5816
- "compareModelChoices": "Yvqh9W_compareModelChoices",
5817
- "historyNew": "Yvqh9W_historyNew",
5818
- "galleryBadge": "Yvqh9W_galleryBadge",
5819
- "galleryTags": "Yvqh9W_galleryTags",
6365
+ "promptFooter": "Yvqh9W_promptFooter",
5820
6366
  "ecommercePrimaryAction": "Yvqh9W_ecommercePrimaryAction",
5821
- "historyItem": "Yvqh9W_historyItem",
5822
- "config": "Yvqh9W_config",
5823
- "generation": "Yvqh9W_generation",
6367
+ "galleryTagFilterList": "Yvqh9W_galleryTagFilterList",
5824
6368
  "ecommerceSection": "Yvqh9W_ecommerceSection",
5825
- "ecommerceStructureGrid": "Yvqh9W_ecommerceStructureGrid",
6369
+ "ecommerceFooterHint": "Yvqh9W_ecommerceFooterHint",
6370
+ "comparisonFullscreenGrid": "Yvqh9W_comparisonFullscreenGrid",
6371
+ "sessionTabIcon": "Yvqh9W_sessionTabIcon",
6372
+ "taskTrayChevron": "Yvqh9W_taskTrayChevron",
6373
+ "ecommerceResultBadge": "Yvqh9W_ecommerceResultBadge",
6374
+ "ecommerceParamGrid": "Yvqh9W_ecommerceParamGrid",
5826
6375
  "updateRelease": "Yvqh9W_updateRelease",
5827
- "ecommercePlanBack": "Yvqh9W_ecommercePlanBack",
5828
- "optionGrid": "Yvqh9W_optionGrid",
5829
- "canvasStateTitle": "Yvqh9W_canvasStateTitle",
5830
- "dshImageGenSpin": "Yvqh9W_dshImageGenSpin",
5831
- "galleryRatioList": "Yvqh9W_galleryRatioList",
5832
- "chatToggle": "Yvqh9W_chatToggle",
5833
- "compareControl": "Yvqh9W_compareControl",
5834
- "configScroll": "Yvqh9W_configScroll",
5835
- "galleryImage": "Yvqh9W_galleryImage",
5836
- "previewBadge": "Yvqh9W_previewBadge",
5837
- "conversationAdd": "Yvqh9W_conversationAdd",
5838
- "ecommerceResultsHeader": "Yvqh9W_ecommerceResultsHeader",
5839
- "modelSelect": "Yvqh9W_modelSelect",
5840
- "generateInner": "Yvqh9W_generateInner",
6376
+ "optionPill": "Yvqh9W_optionPill",
6377
+ "download": "Yvqh9W_download",
5841
6378
  "entryIcon": "Yvqh9W_entryIcon",
5842
- "historyHeaderActions": "Yvqh9W_historyHeaderActions",
5843
- "ecommerceSlotCard": "Yvqh9W_ecommerceSlotCard",
5844
- "gallerySelectionBar": "Yvqh9W_gallerySelectionBar",
5845
- "ecommerceAdvancedChevron": "Yvqh9W_ecommerceAdvancedChevron",
5846
- "ecommerceSectionHint": "Yvqh9W_ecommerceSectionHint",
5847
- "sessionTabIcon": "Yvqh9W_sessionTabIcon",
5848
- "ecommerceResults": "Yvqh9W_ecommerceResults",
6379
+ "galleryCardFooter": "Yvqh9W_galleryCardFooter",
6380
+ "ecommerceUploadHero": "Yvqh9W_ecommerceUploadHero",
6381
+ "galleryRatioList": "Yvqh9W_galleryRatioList",
6382
+ "compareModelChoices": "Yvqh9W_compareModelChoices",
6383
+ "history": "Yvqh9W_history",
6384
+ "modelMenuItem": "Yvqh9W_modelMenuItem",
6385
+ "ecommercePlanList": "Yvqh9W_ecommercePlanList",
6386
+ "topNavItem": "Yvqh9W_topNavItem",
6387
+ "uploadBox": "Yvqh9W_uploadBox",
6388
+ "promptCount": "Yvqh9W_promptCount",
6389
+ "galleryAdd": "Yvqh9W_galleryAdd",
6390
+ "taskTrayToggle": "Yvqh9W_taskTrayToggle",
6391
+ "modelMenu": "Yvqh9W_modelMenu",
6392
+ "lightboxCopy": "Yvqh9W_lightboxCopy",
5849
6393
  "galleryFilter": "Yvqh9W_galleryFilter",
5850
- "galleryRatio": "Yvqh9W_galleryRatio",
5851
- "galleryToolbar": "Yvqh9W_galleryToolbar",
5852
- "ecommerceTaskState": "Yvqh9W_ecommerceTaskState",
5853
- "paramLabel": "Yvqh9W_paramLabel",
5854
- "galleryCount": "Yvqh9W_galleryCount",
5855
- "connectionStatus": "Yvqh9W_connectionStatus",
5856
- "hiddenFile": "Yvqh9W_hiddenFile",
5857
- "lightboxTool": "Yvqh9W_lightboxTool",
5858
- "galleryTagInput": "Yvqh9W_galleryTagInput",
5859
- "galleryHeading": "Yvqh9W_galleryHeading",
5860
- "canvasState": "Yvqh9W_canvasState",
5861
- "comparisonFullscreenGrid": "Yvqh9W_comparisonFullscreenGrid",
5862
- "historyFilters": "Yvqh9W_historyFilters",
5863
- "ecommercePlanWarn": "Yvqh9W_ecommercePlanWarn",
5864
- "footer": "Yvqh9W_footer",
5865
- "ecommerceTaskActions": "Yvqh9W_ecommerceTaskActions",
5866
6394
  "lightboxScaleFrame": "Yvqh9W_lightboxScaleFrame",
5867
- "lightboxCaptionRow": "Yvqh9W_lightboxCaptionRow",
5868
- "configGuide": "Yvqh9W_configGuide",
5869
- "topNav": "Yvqh9W_topNav",
5870
- "ecommerceGroupGrid": "Yvqh9W_ecommerceGroupGrid",
6395
+ "ecommerceAssetAdd": "Yvqh9W_ecommerceAssetAdd",
6396
+ "ecommerceAdvancedToggle": "Yvqh9W_ecommerceAdvancedToggle",
6397
+ "lightboxEdit": "Yvqh9W_lightboxEdit",
6398
+ "ecommerceSlotCount": "Yvqh9W_ecommerceSlotCount",
6399
+ "modeRow": "Yvqh9W_modeRow",
6400
+ "taskRow": "Yvqh9W_taskRow",
6401
+ "ecommercePlanNote": "Yvqh9W_ecommercePlanNote",
5871
6402
  "referenceActions": "Yvqh9W_referenceActions",
5872
- "ecommerceTaskCard": "Yvqh9W_ecommerceTaskCard",
5873
- "promptFooter": "Yvqh9W_promptFooter",
5874
- "promptCount": "Yvqh9W_promptCount",
5875
- "galleryWorkspace": "Yvqh9W_galleryWorkspace",
5876
- "galleryFilterDivider": "Yvqh9W_galleryFilterDivider",
5877
- "ecommerceWorkspace": "Yvqh9W_ecommerceWorkspace",
5878
- "canvasEmptyIcon": "Yvqh9W_canvasEmptyIcon",
5879
- "gallerySelectionClear": "Yvqh9W_gallerySelectionClear",
5880
- "grid": "Yvqh9W_grid",
5881
- "historyInfo": "Yvqh9W_historyInfo",
5882
- "galleryTagEdit": "Yvqh9W_galleryTagEdit",
5883
- "ecommerceGroups": "Yvqh9W_ecommerceGroups",
5884
- "galleryFilters": "Yvqh9W_galleryFilters",
5885
- "lightboxDownload": "Yvqh9W_lightboxDownload",
5886
- "lightboxMeta": "Yvqh9W_lightboxMeta",
5887
- "comparisonImageButton": "Yvqh9W_comparisonImageButton",
5888
- "ecommerceGroup": "Yvqh9W_ecommerceGroup",
5889
- "sessionTabLabel": "Yvqh9W_sessionTabLabel",
5890
- "ecommercePlanList": "Yvqh9W_ecommercePlanList",
6403
+ "lightboxTools": "Yvqh9W_lightboxTools",
6404
+ "gallerySort": "Yvqh9W_gallerySort",
6405
+ "ecommerceRefRow": "Yvqh9W_ecommerceRefRow",
6406
+ "galleryToolbarActions": "Yvqh9W_galleryToolbarActions",
6407
+ "view": "Yvqh9W_view",
6408
+ "galleryToast": "Yvqh9W_galleryToast",
6409
+ "ecommerceFooterBody": "Yvqh9W_ecommerceFooterBody",
6410
+ "uploadHint": "Yvqh9W_uploadHint",
6411
+ "taskStatus": "Yvqh9W_taskStatus",
5891
6412
  "panelTitle": "Yvqh9W_panelTitle",
5892
- "configToggle": "Yvqh9W_configToggle",
5893
- "lightboxImage": "Yvqh9W_lightboxImage",
5894
- "panelHeading": "Yvqh9W_panelHeading",
5895
- "updateText": "Yvqh9W_updateText",
5896
- "gallerySelect": "Yvqh9W_gallerySelect",
5897
- "modelMenuItem": "Yvqh9W_modelMenuItem",
5898
- "ecommerceAsset": "Yvqh9W_ecommerceAsset",
5899
- "compareToggle": "Yvqh9W_compareToggle",
5900
- "galleryBulkButton": "Yvqh9W_galleryBulkButton",
5901
- "entryLabel": "Yvqh9W_entryLabel",
5902
- "galleryCardAction": "Yvqh9W_galleryCardAction",
5903
- "taskTrayClose": "Yvqh9W_taskTrayClose",
5904
- "galleryTagFilterList": "Yvqh9W_galleryTagFilterList",
5905
- "updateActions": "Yvqh9W_updateActions",
5906
- "lightboxCopy": "Yvqh9W_lightboxCopy",
6413
+ "galleryTagInput": "Yvqh9W_galleryTagInput",
6414
+ "zoomHint": "Yvqh9W_zoomHint",
6415
+ "lightboxActions": "Yvqh9W_lightboxActions",
6416
+ "entry": "Yvqh9W_entry",
6417
+ "ecommerceGroups": "Yvqh9W_ecommerceGroups",
6418
+ "lightboxNav": "Yvqh9W_lightboxNav",
5907
6419
  "galleryFilterCount": "Yvqh9W_galleryFilterCount",
5908
- "lightboxTools": "Yvqh9W_lightboxTools",
5909
- "ecommerceResultsActions": "Yvqh9W_ecommerceResultsActions",
5910
- "modelWrap": "Yvqh9W_modelWrap",
5911
- "ecommerceResultBadge": "Yvqh9W_ecommerceResultBadge",
5912
- "ecommerceActionChip": "Yvqh9W_ecommerceActionChip",
5913
- "canvasStateHint": "Yvqh9W_canvasStateHint",
6420
+ "config": "Yvqh9W_config",
6421
+ "historyTitle": "Yvqh9W_historyTitle",
6422
+ "configResizer": "Yvqh9W_configResizer",
5914
6423
  "bigSpinner": "Yvqh9W_bigSpinner",
5915
- "historyThumbPlaceholder": "Yvqh9W_historyThumbPlaceholder",
5916
- "galleryToast": "Yvqh9W_galleryToast",
5917
- "historyEmpty": "Yvqh9W_historyEmpty",
5918
- "ecommercePlanMini": "Yvqh9W_ecommercePlanMini",
5919
- "panelHeaderActions": "Yvqh9W_panelHeaderActions",
5920
- "ecommerceResultsEmpty": "Yvqh9W_ecommerceResultsEmpty",
5921
- "sessionTabs": "Yvqh9W_sessionTabs",
5922
- "panelHeader": "Yvqh9W_panelHeader",
5923
- "taskTray": "Yvqh9W_taskTray",
5924
- "topNavItem": "Yvqh9W_topNavItem",
5925
- "ecommerceAdvancedToggle": "Yvqh9W_ecommerceAdvancedToggle",
5926
- "githubLink": "Yvqh9W_githubLink",
5927
- "ecommerceRefRow": "Yvqh9W_ecommerceRefRow",
5928
- "modeRow": "Yvqh9W_modeRow",
6424
+ "comparisonFullscreen": "Yvqh9W_comparisonFullscreen",
6425
+ "historyFilters": "Yvqh9W_historyFilters",
6426
+ "historyIconAction": "Yvqh9W_historyIconAction",
6427
+ "configScroll": "Yvqh9W_configScroll",
5929
6428
  "historyClear": "Yvqh9W_historyClear",
5930
- "ecommerceFieldLabel": "Yvqh9W_ecommerceFieldLabel",
5931
- "configGuideBody": "Yvqh9W_configGuideBody",
5932
- "historyTitle": "Yvqh9W_historyTitle",
5933
- "studio": "Yvqh9W_studio",
5934
- "historyList": "Yvqh9W_historyList",
5935
- "uploadBox": "Yvqh9W_uploadBox",
5936
- "ecommerceUploadHero": "Yvqh9W_ecommerceUploadHero",
5937
- "lightboxClose": "Yvqh9W_lightboxClose",
5938
- "lightbox": "Yvqh9W_lightbox",
5939
- "lightboxStage": "Yvqh9W_lightboxStage",
5940
- "canvasBody": "Yvqh9W_canvasBody",
5941
- "download": "Yvqh9W_download",
5942
- "galleryFilterHeading": "Yvqh9W_galleryFilterHeading",
5943
- "galleryCardFooter": "Yvqh9W_galleryCardFooter",
5944
- "galleryRemove": "Yvqh9W_galleryRemove",
5945
- "gallerySort": "Yvqh9W_gallerySort",
5946
- "ecommerceFooterHint": "Yvqh9W_ecommerceFooterHint",
5947
- "imageCaption": "Yvqh9W_imageCaption",
5948
- "galleryTagFilter": "Yvqh9W_galleryTagFilter",
6429
+ "templatesButton": "Yvqh9W_templatesButton",
6430
+ "enhanceButton": "Yvqh9W_enhanceButton",
6431
+ "historySearch": "Yvqh9W_historySearch",
6432
+ "ecommerceSectionHint": "Yvqh9W_ecommerceSectionHint",
6433
+ "ecommerceTaskActions": "Yvqh9W_ecommerceTaskActions",
6434
+ "canvasHistoryTag": "Yvqh9W_canvasHistoryTag",
6435
+ "chatResizer": "Yvqh9W_chatResizer",
6436
+ "gallerySearch": "Yvqh9W_gallerySearch",
6437
+ "historyItem": "Yvqh9W_historyItem",
5949
6438
  "prompt": "Yvqh9W_prompt",
5950
- "galleryTagEditor": "Yvqh9W_galleryTagEditor",
5951
6439
  "paramHint": "Yvqh9W_paramHint",
5952
- "galleryViewToggle": "Yvqh9W_galleryViewToggle",
5953
- "modelMenu": "Yvqh9W_modelMenu",
5954
- "historyPrompt": "Yvqh9W_historyPrompt",
5955
- "sidebarHistoryHost": "Yvqh9W_sidebarHistoryHost",
5956
- "ecommerceParamGrid": "Yvqh9W_ecommerceParamGrid",
5957
- "ecommerceField": "Yvqh9W_ecommerceField",
5958
- "ecommerceSlotCount": "Yvqh9W_ecommerceSlotCount",
5959
- "templatesButton": "Yvqh9W_templatesButton",
5960
- "paramGroup": "Yvqh9W_paramGroup",
5961
- "generateButton": "Yvqh9W_generateButton",
5962
- "ecommerceAdvancedBody": "Yvqh9W_ecommerceAdvancedBody",
5963
- "canvasMeta": "Yvqh9W_canvasMeta",
6440
+ "modelSelect": "Yvqh9W_modelSelect",
6441
+ "connectionStatus": "Yvqh9W_connectionStatus",
6442
+ "sessionTab": "Yvqh9W_sessionTab",
6443
+ "ecommerceSlotCard": "Yvqh9W_ecommerceSlotCard",
6444
+ "historyMain": "Yvqh9W_historyMain",
6445
+ "grid": "Yvqh9W_grid",
6446
+ "imageCaption": "Yvqh9W_imageCaption",
6447
+ "lightboxClose": "Yvqh9W_lightboxClose",
6448
+ "galleryFilterDivider": "Yvqh9W_galleryFilterDivider",
6449
+ "galleryFilterNote": "Yvqh9W_galleryFilterNote",
6450
+ "historyHeader": "Yvqh9W_historyHeader",
5964
6451
  "spinner": "Yvqh9W_spinner",
5965
- "chatResizer": "Yvqh9W_chatResizer",
5966
- "galleryCard": "Yvqh9W_galleryCard",
5967
- "galleryAvatar": "Yvqh9W_galleryAvatar",
5968
- "historyIconAction": "Yvqh9W_historyIconAction",
6452
+ "galleryHeading": "Yvqh9W_galleryHeading",
6453
+ "gallerySelectMode": "Yvqh9W_gallerySelectMode",
6454
+ "galleryClear": "Yvqh9W_galleryClear",
6455
+ "compareToggle": "Yvqh9W_compareToggle",
6456
+ "comparisonGrid": "Yvqh9W_comparisonGrid",
6457
+ "gallerySelect": "Yvqh9W_gallerySelect",
5969
6458
  "updateBanner": "Yvqh9W_updateBanner",
5970
- "history": "Yvqh9W_history",
5971
- "optionPill": "Yvqh9W_optionPill",
5972
- "comparisonBoard": "Yvqh9W_comparisonBoard",
5973
- "enhanceButton": "Yvqh9W_enhanceButton",
5974
- "taskTrayChevron": "Yvqh9W_taskTrayChevron",
6459
+ "galleryImageButton": "Yvqh9W_galleryImageButton",
6460
+ "reference": "Yvqh9W_reference",
6461
+ "galleryTagEdit": "Yvqh9W_galleryTagEdit",
6462
+ "configGuideBody": "Yvqh9W_configGuideBody",
6463
+ "ecommercePlanWarn": "Yvqh9W_ecommercePlanWarn",
6464
+ "studio": "Yvqh9W_studio",
6465
+ "ecommerceAssets": "Yvqh9W_ecommerceAssets",
6466
+ "ecommerceTaskCard": "Yvqh9W_ecommerceTaskCard",
6467
+ "taskTrayHeader": "Yvqh9W_taskTrayHeader",
6468
+ "historyInfo": "Yvqh9W_historyInfo",
6469
+ "ecommerceGroupGrid": "Yvqh9W_ecommerceGroupGrid",
6470
+ "topNavDivider": "Yvqh9W_topNavDivider",
6471
+ "modelWrap": "Yvqh9W_modelWrap",
6472
+ "optionGrid": "Yvqh9W_optionGrid",
6473
+ "generateInner": "Yvqh9W_generateInner",
6474
+ "lightboxFigure": "Yvqh9W_lightboxFigure",
6475
+ "lightboxStage": "Yvqh9W_lightboxStage",
6476
+ "dshImageGenToastIn": "Yvqh9W_dshImageGenToastIn",
6477
+ "taskRows": "Yvqh9W_taskRows",
6478
+ "ecommerceStructureGrid": "Yvqh9W_ecommerceStructureGrid",
6479
+ "lightboxMeta": "Yvqh9W_lightboxMeta",
6480
+ "ecommerceActionChip": "Yvqh9W_ecommerceActionChip",
5975
6481
  "historyMeta": "Yvqh9W_historyMeta",
6482
+ "galleryFilterHeading": "Yvqh9W_galleryFilterHeading",
6483
+ "lightbox": "Yvqh9W_lightbox",
6484
+ "lightboxCaption": "Yvqh9W_lightboxCaption",
6485
+ "canvasState": "Yvqh9W_canvasState",
6486
+ "conversationToast": "Yvqh9W_conversationToast",
6487
+ "galleryWorkspace": "Yvqh9W_galleryWorkspace",
6488
+ "galleryToolbar": "Yvqh9W_galleryToolbar",
6489
+ "canvasEmptyIcon": "Yvqh9W_canvasEmptyIcon",
6490
+ "galleryRatio": "Yvqh9W_galleryRatio",
6491
+ "ecommerceResults": "Yvqh9W_ecommerceResults",
6492
+ "hiddenFile": "Yvqh9W_hiddenFile",
6493
+ "ecommerceAsset": "Yvqh9W_ecommerceAsset",
6494
+ "canvasStateHint": "Yvqh9W_canvasStateHint",
6495
+ "ecommercePlanBack": "Yvqh9W_ecommercePlanBack",
6496
+ "galleryCount": "Yvqh9W_galleryCount",
6497
+ "chatToggle": "Yvqh9W_chatToggle",
6498
+ "canvasBody": "Yvqh9W_canvasBody",
6499
+ "conversationAdd": "Yvqh9W_conversationAdd",
6500
+ "comparisonBoard": "Yvqh9W_comparisonBoard",
6501
+ "paramGroup": "Yvqh9W_paramGroup",
6502
+ "lightboxZoomLevel": "Yvqh9W_lightboxZoomLevel",
6503
+ "galleryBadge": "Yvqh9W_galleryBadge",
6504
+ "ecommerceTaskState": "Yvqh9W_ecommerceTaskState",
6505
+ "ecommerceResultsHeader": "Yvqh9W_ecommerceResultsHeader",
6506
+ "comparisonImageButton": "Yvqh9W_comparisonImageButton",
6507
+ "ecommerceGroup": "Yvqh9W_ecommerceGroup",
6508
+ "gallerySelectionClear": "Yvqh9W_gallerySelectionClear",
6509
+ "referenceImage": "Yvqh9W_referenceImage",
6510
+ "historyActions": "Yvqh9W_historyActions",
6511
+ "optionRow": "Yvqh9W_optionRow",
6512
+ "image": "Yvqh9W_image",
6513
+ "galleryCardInfo": "Yvqh9W_galleryCardInfo",
6514
+ "sidebarHistoryHost": "Yvqh9W_sidebarHistoryHost",
5976
6515
  "taskTrayCount": "Yvqh9W_taskTrayCount",
5977
- "modelLabel": "Yvqh9W_modelLabel",
5978
- "lightboxCaption": "Yvqh9W_lightboxCaption",
5979
- "galleryImageButton": "Yvqh9W_galleryImageButton",
5980
- "galleryFilterNote": "Yvqh9W_galleryFilterNote",
5981
- "historyHeader": "Yvqh9W_historyHeader",
5982
- "ecommerceAssets": "Yvqh9W_ecommerceAssets",
6516
+ "canvasError": "Yvqh9W_canvasError",
6517
+ "ecommerceField": "Yvqh9W_ecommerceField",
6518
+ "galleryBulkButton": "Yvqh9W_galleryBulkButton",
6519
+ "canvasMeta": "Yvqh9W_canvasMeta",
6520
+ "galleryCardAction": "Yvqh9W_galleryCardAction",
6521
+ "sessionTabLabel": "Yvqh9W_sessionTabLabel",
6522
+ "taskTray": "Yvqh9W_taskTray",
6523
+ "lightboxDownload": "Yvqh9W_lightboxDownload",
6524
+ "githubLink": "Yvqh9W_githubLink",
6525
+ "gallerySelectionBar": "Yvqh9W_gallerySelectionBar",
6526
+ "topNav": "Yvqh9W_topNav",
6527
+ "footer": "Yvqh9W_footer",
6528
+ "updateActions": "Yvqh9W_updateActions",
6529
+ "modelMenuList": "Yvqh9W_modelMenuList",
6530
+ "historyHeaderActions": "Yvqh9W_historyHeaderActions",
5983
6531
  "modePill": "Yvqh9W_modePill",
5984
- "uploadIcon": "Yvqh9W_uploadIcon",
5985
- "reference": "Yvqh9W_reference",
5986
- "lightboxEdit": "Yvqh9W_lightboxEdit",
5987
- "dshImageGenToastIn": "Yvqh9W_dshImageGenToastIn",
5988
- "historySearch": "Yvqh9W_historySearch",
5989
- "lightboxNav": "Yvqh9W_lightboxNav",
5990
- "lightboxZoomLevel": "Yvqh9W_lightboxZoomLevel",
5991
- "entry": "Yvqh9W_entry",
5992
- "taskStatus": "Yvqh9W_taskStatus",
5993
- "configHeader": "Yvqh9W_configHeader",
5994
- "gallerySearch": "Yvqh9W_gallerySearch",
5995
- "ecommerceAssetAdd": "Yvqh9W_ecommerceAssetAdd",
6532
+ "entryLabel": "Yvqh9W_entryLabel",
6533
+ "canvasStateTitle": "Yvqh9W_canvasStateTitle",
6534
+ "ecommerceResultsActions": "Yvqh9W_ecommerceResultsActions",
6535
+ "lightboxIndex": "Yvqh9W_lightboxIndex",
6536
+ "galleryTagFilter": "Yvqh9W_galleryTagFilter",
6537
+ "configGuide": "Yvqh9W_configGuide",
6538
+ "dshImageGenSpin": "Yvqh9W_dshImageGenSpin",
6539
+ "galleryFilters": "Yvqh9W_galleryFilters",
5996
6540
  "galleryMasonry": "Yvqh9W_galleryMasonry",
5997
- "taskTrayHeader": "Yvqh9W_taskTrayHeader",
5998
- "sessionTab": "Yvqh9W_sessionTab",
5999
- "galleryAdd": "Yvqh9W_galleryAdd",
6000
- "lightboxActions": "Yvqh9W_lightboxActions",
6001
- "view": "Yvqh9W_view",
6002
- "optionRow": "Yvqh9W_optionRow",
6003
- "gallerySelectMode": "Yvqh9W_gallerySelectMode"
6541
+ "ecommercePlanMini": "Yvqh9W_ecommercePlanMini",
6542
+ "galleryTags": "Yvqh9W_galleryTags",
6543
+ "generation": "Yvqh9W_generation",
6544
+ "configHeader": "Yvqh9W_configHeader",
6545
+ "historyThumbPlaceholder": "Yvqh9W_historyThumbPlaceholder",
6546
+ "galleryAvatar": "Yvqh9W_galleryAvatar",
6547
+ "galleryRemove": "Yvqh9W_galleryRemove",
6548
+ "panelHeading": "Yvqh9W_panelHeading",
6549
+ "canvas": "Yvqh9W_canvas",
6550
+ "historyPrompt": "Yvqh9W_historyPrompt",
6551
+ "taskTrayClose": "Yvqh9W_taskTrayClose",
6552
+ "historyThumb": "Yvqh9W_historyThumb",
6553
+ "panelHeader": "Yvqh9W_panelHeader"
6004
6554
  };
6005
6555
  //#endregion
6006
6556
  //#region src/client/ImageGenPanel.tsx
@@ -6494,6 +7044,7 @@ window.__ModuleLoader__.load({
6494
7044
  const [galleryAdding, setGalleryAdding] = (0, react.useState)(false);
6495
7045
  const [galleryMessage, setGalleryMessage] = (0, react.useState)(null);
6496
7046
  const [galleryFilter, setGalleryFilter] = (0, react.useState)("all");
7047
+ const galleryUploadRef = (0, react.useRef)(null);
6497
7048
  const [galleryRatio, setGalleryRatio] = (0, react.useState)("all");
6498
7049
  const [galleryTagFilter, setGalleryTagFilter] = (0, react.useState)(null);
6499
7050
  const [galleryView, setGalleryView] = (0, react.useState)("masonry");
@@ -7201,6 +7752,50 @@ window.__ModuleLoader__.load({
7201
7752
  setGalleryAdding(false);
7202
7753
  }
7203
7754
  };
7755
+ /** Save local image files into the asset library so the canvas and studio
7756
+ * can reuse them later; entries dedupe by content host-side. */
7757
+ const uploadGalleryFiles = async (files) => {
7758
+ if (files.length === 0 || galleryAdding) return;
7759
+ setGalleryAdding(true);
7760
+ try {
7761
+ let entries;
7762
+ for (const file of files) {
7763
+ const dataUrl = await new Promise((resolve, reject) => {
7764
+ const reader = new FileReader();
7765
+ reader.onload = () => resolve(String(reader.result));
7766
+ reader.onerror = () => reject(new Error(tt("canvas.dropSub")));
7767
+ reader.readAsDataURL(file);
7768
+ });
7769
+ const separator = dataUrl.indexOf(",");
7770
+ entries = (await api.galleryAppend({
7771
+ id: "",
7772
+ createdAt: Date.now(),
7773
+ mode: "text",
7774
+ model: tt("gallery.uploadModel"),
7775
+ prompt: file.name.replace(/\.[a-z0-9]+$/i, ""),
7776
+ size: "auto",
7777
+ quality: "auto",
7778
+ detail: "",
7779
+ n: 1,
7780
+ images: [{
7781
+ b64: separator >= 0 ? dataUrl.slice(separator + 1) : dataUrl,
7782
+ mime: file.type || "image/png"
7783
+ }]
7784
+ })).entries;
7785
+ }
7786
+ if (entries !== void 0) {
7787
+ setGallery(entries);
7788
+ setGalleryMessage(tt("gallery.uploaded"));
7789
+ window.setTimeout(() => {
7790
+ setGalleryMessage(null);
7791
+ }, 2200);
7792
+ }
7793
+ } catch (caught) {
7794
+ setError(errorMessage(caught));
7795
+ } finally {
7796
+ setGalleryAdding(false);
7797
+ }
7798
+ };
7204
7799
  /** Put a generated image into the native conversation composer. */
7205
7800
  const addImageToConversation = async (image, index, actionKey = index) => {
7206
7801
  if (addingToConversation !== null) return;
@@ -7738,6 +8333,8 @@ window.__ModuleLoader__.load({
7738
8333
  })
7739
8334
  ]
7740
8335
  });
8336
+ const isGallery = workspace === "normal" && tab === "gallery";
8337
+ const isGeneration = workspace === "normal" && tab !== "gallery";
7741
8338
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7742
8339
  className: panel_module_css_default.panel,
7743
8340
  children: [
@@ -7920,7 +8517,7 @@ window.__ModuleLoader__.load({
7920
8517
  })
7921
8518
  })
7922
8519
  }),
7923
- workspace === "normal" && tab === "gallery" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8520
+ isGallery ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7924
8521
  className: panel_module_css_default.galleryFilters,
7925
8522
  children: [
7926
8523
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
@@ -8376,7 +8973,7 @@ window.__ModuleLoader__.load({
8376
8973
  })
8377
8974
  ]
8378
8975
  }) : null,
8379
- tab === "edit" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
8976
+ isGeneration && tab === "edit" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
8380
8977
  className: panel_module_css_default.card,
8381
8978
  children: [refImage === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
8382
8979
  type: "button",
@@ -8452,7 +9049,7 @@ window.__ModuleLoader__.load({
8452
9049
  }
8453
9050
  })]
8454
9051
  }) : null,
8455
- workspace === "normal" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
9052
+ isGeneration ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
8456
9053
  className: panel_module_css_default.card,
8457
9054
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
8458
9055
  className: panel_module_css_default.prompt,
@@ -8641,7 +9238,7 @@ window.__ModuleLoader__.load({
8641
9238
  children: tt("ecommerce.preview")
8642
9239
  })] })
8643
9240
  }) : null,
8644
- workspace === "ecommerce" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
9241
+ isGeneration ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
8645
9242
  className: panel_module_css_default.modelWrap,
8646
9243
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
8647
9244
  className: panel_module_css_default.modelLabel,
@@ -8689,8 +9286,8 @@ window.__ModuleLoader__.load({
8689
9286
  }, option))
8690
9287
  }) : null]
8691
9288
  })]
8692
- }),
8693
- workspace !== "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9289
+ }) : null,
9290
+ isGeneration ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8694
9291
  className: panel_module_css_default.compareControl,
8695
9292
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
8696
9293
  className: panel_module_css_default.compareToggle,
@@ -8714,7 +9311,7 @@ window.__ModuleLoader__.load({
8714
9311
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: option })] }, option))
8715
9312
  }) : null]
8716
9313
  }) : null,
8717
- workspace !== "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
9314
+ isGeneration ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8718
9315
  variant: "primary",
8719
9316
  size: "md",
8720
9317
  className: panel_module_css_default.generateButton,
@@ -8749,9 +9346,9 @@ window.__ModuleLoader__.load({
8749
9346
  }) : null,
8750
9347
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
8751
9348
  className: panel_module_css_default.canvas,
8752
- "data-gallery": workspace === "normal" && tab === "gallery" ? "true" : void 0,
9349
+ "data-gallery": isGallery ? "true" : void 0,
8753
9350
  children: [
8754
- workspace === "normal" && tab === "gallery" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9351
+ isGallery ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8755
9352
  className: panel_module_css_default.galleryWorkspace,
8756
9353
  children: [
8757
9354
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
@@ -8774,6 +9371,26 @@ window.__ModuleLoader__.load({
8774
9371
  placeholder: tt("gallery.search"),
8775
9372
  "aria-label": tt("gallery.search")
8776
9373
  }),
9374
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
9375
+ type: "button",
9376
+ className: panel_module_css_default.gallerySelectMode,
9377
+ disabled: galleryAdding,
9378
+ title: tt("gallery.uploadHint"),
9379
+ onClick: () => galleryUploadRef.current?.click(),
9380
+ children: galleryAdding ? "…" : tt("gallery.upload")
9381
+ }),
9382
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
9383
+ ref: galleryUploadRef,
9384
+ type: "file",
9385
+ accept: "image/png,image/jpeg,image/webp,image/gif",
9386
+ multiple: true,
9387
+ hidden: true,
9388
+ onChange: (event) => {
9389
+ const files = [...event.target.files ?? []];
9390
+ event.target.value = "";
9391
+ if (files.length > 0) uploadGalleryFiles(files);
9392
+ }
9393
+ }),
8777
9394
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
8778
9395
  type: "button",
8779
9396
  className: panel_module_css_default.gallerySelectMode,
@@ -9204,7 +9821,7 @@ window.__ModuleLoader__.load({
9204
9821
  }, group.label))
9205
9822
  })]
9206
9823
  }) : null,
9207
- (workspace === "ecommerce" || tab !== "gallery") && tasks.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
9824
+ !isGallery && tasks.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
9208
9825
  className: panel_module_css_default.taskTray,
9209
9826
  "data-open": taskTrayOpen ? "true" : "false",
9210
9827
  "aria-label": tt("tasks.title"),
@@ -9305,7 +9922,7 @@ window.__ModuleLoader__.load({
9305
9922
  })
9306
9923
  })]
9307
9924
  }) : null,
9308
- generating && comparison === null && workspace !== "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9925
+ generating && comparison === null && isGeneration ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9309
9926
  className: panel_module_css_default.canvasState,
9310
9927
  "data-generation-state": activeTask?.status ?? "submitting",
9311
9928
  role: "status",
@@ -9326,14 +9943,14 @@ window.__ModuleLoader__.load({
9326
9943
  role: "alert",
9327
9944
  children: tt("canvas.error", { error })
9328
9945
  }) : null,
9329
- !generating && !error && images.length === 0 && workspace !== "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InspirationGallery, {
9946
+ isGeneration && !generating && !error && images.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InspirationGallery, {
9330
9947
  api,
9331
9948
  onUse: (text) => {
9332
9949
  setPrompt(text);
9333
9950
  setError(null);
9334
9951
  }
9335
9952
  }) : null,
9336
- !generating && images.length > 0 && workspace !== "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9953
+ isGeneration && !generating && images.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9337
9954
  className: panel_module_css_default.canvasBody,
9338
9955
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9339
9956
  className: panel_module_css_default.canvasMeta,
@@ -10633,97 +11250,97 @@ window.__ModuleLoader__.load({
10633
11250
  document.head.appendChild(tag);
10634
11251
  }
10635
11252
  var settings_card_module_css_default = {
10636
- "modelFetch": "i1cc5G_modelFetch",
10637
- "sectionHeader": "i1cc5G_sectionHeader",
10638
- "sectionHint": "i1cc5G_sectionHint",
10639
- "field": "i1cc5G_field",
10640
- "failed": "i1cc5G_failed",
10641
- "name": "i1cc5G_name",
10642
- "presetInlineHeader": "i1cc5G_presetInlineHeader",
10643
- "modelChip": "i1cc5G_modelChip",
10644
- "editorField": "i1cc5G_editorField",
10645
- "invalid": "i1cc5G_invalid",
10646
- "channelName": "i1cc5G_channelName",
10647
- "notExposed": "i1cc5G_notExposed",
10648
- "modelRowRemove": "i1cc5G_modelRowRemove",
11253
+ "channelBadge": "i1cc5G_channelBadge",
11254
+ "inlineDisclosure": "i1cc5G_inlineDisclosure",
10649
11255
  "card": "i1cc5G_card",
10650
11256
  "modelCandidate": "i1cc5G_modelCandidate",
10651
- "presetInline": "i1cc5G_presetInline",
10652
- "editorBackdrop": "i1cc5G_editorBackdrop",
11257
+ "detectOk": "i1cc5G_detectOk",
11258
+ "spacer": "i1cc5G_spacer",
11259
+ "editorClose": "i1cc5G_editorClose",
10653
11260
  "modelCandidateLabel": "i1cc5G_modelCandidateLabel",
10654
- "channelMeta": "i1cc5G_channelMeta",
10655
- "hint": "i1cc5G_hint",
10656
- "pending": "i1cc5G_pending",
10657
- "textarea": "i1cc5G_textarea",
11261
+ "label": "i1cc5G_label",
11262
+ "editorField": "i1cc5G_editorField",
11263
+ "chevronOpen": "i1cc5G_chevronOpen",
11264
+ "input": "i1cc5G_input",
11265
+ "header": "i1cc5G_header",
11266
+ "save": "i1cc5G_save",
11267
+ "modelArrow": "i1cc5G_modelArrow",
11268
+ "presetRow": "i1cc5G_presetRow",
11269
+ "select": "i1cc5G_select",
11270
+ "name": "i1cc5G_name",
11271
+ "discard": "i1cc5G_discard",
11272
+ "channelSection": "i1cc5G_channelSection",
11273
+ "editorDivider": "i1cc5G_editorDivider",
11274
+ "versionRow": "i1cc5G_versionRow",
11275
+ "head": "i1cc5G_head",
11276
+ "badges": "i1cc5G_badges",
11277
+ "footer": "i1cc5G_footer",
10658
11278
  "editorTools": "i1cc5G_editorTools",
10659
- "body": "i1cc5G_body",
10660
- "chevron": "i1cc5G_chevron",
11279
+ "editorFooter": "i1cc5G_editorFooter",
11280
+ "editorBackdrop": "i1cc5G_editorBackdrop",
11281
+ "presetMeta": "i1cc5G_presetMeta",
11282
+ "channelDanger": "i1cc5G_channelDanger",
10661
11283
  "channelRow": "i1cc5G_channelRow",
10662
- "channelAdd": "i1cc5G_channelAdd",
10663
- "editorSectionHeader": "i1cc5G_editorSectionHeader",
10664
- "detectOk": "i1cc5G_detectOk",
10665
- "channelControls": "i1cc5G_channelControls",
10666
- "presetName": "i1cc5G_presetName",
10667
- "sectionDivider": "i1cc5G_sectionDivider",
10668
- "badge": "i1cc5G_badge",
10669
- "channelBadge": "i1cc5G_channelBadge",
10670
- "editorPanel": "i1cc5G_editorPanel",
10671
- "modelCandidateList": "i1cc5G_modelCandidateList",
10672
- "channelEmpty": "i1cc5G_channelEmpty",
11284
+ "channelDotWarn": "i1cc5G_channelDotWarn",
10673
11285
  "modelRow": "i1cc5G_modelRow",
10674
- "disclosure": "i1cc5G_disclosure",
10675
- "modelFetchRow": "i1cc5G_modelFetchRow",
10676
- "inlineDisclosure": "i1cc5G_inlineDisclosure",
10677
- "head": "i1cc5G_head",
10678
- "reset": "i1cc5G_reset",
10679
- "optionalContent": "i1cc5G_optionalContent",
10680
- "footer": "i1cc5G_footer",
11286
+ "modelRowInputs": "i1cc5G_modelRowInputs",
10681
11287
  "channelAction": "i1cc5G_channelAction",
10682
- "presetList": "i1cc5G_presetList",
10683
11288
  "presetHint": "i1cc5G_presetHint",
10684
- "badges": "i1cc5G_badges",
10685
- "versionRow": "i1cc5G_versionRow",
10686
- "channelMain": "i1cc5G_channelMain",
10687
- "modelChoices": "i1cc5G_modelChoices",
11289
+ "versionValue": "i1cc5G_versionValue",
10688
11290
  "sectionTitle": "i1cc5G_sectionTitle",
10689
- "editorDivider": "i1cc5G_editorDivider",
10690
- "select": "i1cc5G_select",
10691
- "modelRowInputs": "i1cc5G_modelRowInputs",
11291
+ "channelHost": "i1cc5G_channelHost",
11292
+ "channelName": "i1cc5G_channelName",
11293
+ "editorPanel": "i1cc5G_editorPanel",
11294
+ "reset": "i1cc5G_reset",
11295
+ "body": "i1cc5G_body",
11296
+ "failed": "i1cc5G_failed",
11297
+ "disclosure": "i1cc5G_disclosure",
11298
+ "optionalContent": "i1cc5G_optionalContent",
11299
+ "pending": "i1cc5G_pending",
11300
+ "addModel": "i1cc5G_addModel",
11301
+ "modelFetch": "i1cc5G_modelFetch",
10692
11302
  "channelAddRow": "i1cc5G_channelAddRow",
10693
- "modelRowBadges": "i1cc5G_modelRowBadges",
10694
- "modelBadge": "i1cc5G_modelBadge",
10695
- "channelSection": "i1cc5G_channelSection",
10696
- "description": "i1cc5G_description",
11303
+ "modelRows": "i1cc5G_modelRows",
11304
+ "presetInline": "i1cc5G_presetInline",
10697
11305
  "deleteConfirmText": "i1cc5G_deleteConfirmText",
10698
- "readOnly": "i1cc5G_readOnly",
10699
- "spacer": "i1cc5G_spacer",
10700
- "editorFooter": "i1cc5G_editorFooter",
10701
11306
  "versionLabel": "i1cc5G_versionLabel",
10702
- "headText": "i1cc5G_headText",
10703
- "modelSummary": "i1cc5G_modelSummary",
10704
- "save": "i1cc5G_save",
11307
+ "editorHeader": "i1cc5G_editorHeader",
11308
+ "textarea": "i1cc5G_textarea",
11309
+ "modelFetchRow": "i1cc5G_modelFetchRow",
11310
+ "modelCandidateList": "i1cc5G_modelCandidateList",
11311
+ "presetName": "i1cc5G_presetName",
10705
11312
  "channelDotReady": "i1cc5G_channelDotReady",
10706
- "presetMeta": "i1cc5G_presetMeta",
11313
+ "modelBadge": "i1cc5G_modelBadge",
11314
+ "channelMain": "i1cc5G_channelMain",
11315
+ "channelAdd": "i1cc5G_channelAdd",
11316
+ "notExposed": "i1cc5G_notExposed",
11317
+ "sectionHeader": "i1cc5G_sectionHeader",
11318
+ "modelRowBadges": "i1cc5G_modelRowBadges",
11319
+ "inputInvalid": "i1cc5G_inputInvalid",
11320
+ "hint": "i1cc5G_hint",
11321
+ "channelList": "i1cc5G_channelList",
11322
+ "badge": "i1cc5G_badge",
11323
+ "presetInlineHeader": "i1cc5G_presetInlineHeader",
11324
+ "readOnly": "i1cc5G_readOnly",
11325
+ "headText": "i1cc5G_headText",
11326
+ "modelRowRemove": "i1cc5G_modelRowRemove",
10707
11327
  "manualModelRow": "i1cc5G_manualModelRow",
10708
11328
  "textareaInvalid": "i1cc5G_textareaInvalid",
10709
- "editorHeader": "i1cc5G_editorHeader",
10710
- "presetRow": "i1cc5G_presetRow",
10711
- "inputInvalid": "i1cc5G_inputInvalid",
10712
- "addModel": "i1cc5G_addModel",
10713
- "channelDanger": "i1cc5G_channelDanger",
10714
- "modelArrow": "i1cc5G_modelArrow",
10715
- "input": "i1cc5G_input",
10716
- "discard": "i1cc5G_discard",
10717
- "chevronOpen": "i1cc5G_chevronOpen",
10718
- "header": "i1cc5G_header",
10719
- "channelHost": "i1cc5G_channelHost",
10720
- "versionValue": "i1cc5G_versionValue",
10721
- "channelDotWarn": "i1cc5G_channelDotWarn",
10722
- "label": "i1cc5G_label",
11329
+ "chevron": "i1cc5G_chevron",
11330
+ "modelChip": "i1cc5G_modelChip",
11331
+ "modelSummary": "i1cc5G_modelSummary",
11332
+ "description": "i1cc5G_description",
11333
+ "invalid": "i1cc5G_invalid",
11334
+ "sectionHint": "i1cc5G_sectionHint",
11335
+ "channelMeta": "i1cc5G_channelMeta",
11336
+ "editorSectionHeader": "i1cc5G_editorSectionHeader",
11337
+ "channelControls": "i1cc5G_channelControls",
11338
+ "sectionDivider": "i1cc5G_sectionDivider",
11339
+ "presetList": "i1cc5G_presetList",
11340
+ "modelChoices": "i1cc5G_modelChoices",
10723
11341
  "modelSection": "i1cc5G_modelSection",
10724
- "channelList": "i1cc5G_channelList",
10725
- "modelRows": "i1cc5G_modelRows",
10726
- "editorClose": "i1cc5G_editorClose"
11342
+ "field": "i1cc5G_field",
11343
+ "channelEmpty": "i1cc5G_channelEmpty"
10727
11344
  };
10728
11345
  //#endregion
10729
11346
  //#region src/client/SettingsCard.tsx
@@ -10755,6 +11372,7 @@ window.__ModuleLoader__.load({
10755
11372
  textField("promptApiUrl"),
10756
11373
  secretField("promptApiKey"),
10757
11374
  textField("promptModel"),
11375
+ textField("localStoragePath"),
10758
11376
  booleanField("storageEnabled"),
10759
11377
  textField("storageEndpoint"),
10760
11378
  textField("storageRegion"),
@@ -10778,6 +11396,7 @@ window.__ModuleLoader__.load({
10778
11396
  promptApiUrl: this.form.field("promptApiUrl"),
10779
11397
  promptApiKey: this.form.field("promptApiKey"),
10780
11398
  promptModel: this.form.field("promptModel"),
11399
+ localStoragePath: this.form.field("localStoragePath"),
10781
11400
  storageEnabled: this.form.field("storageEnabled"),
10782
11401
  storageEndpoint: this.form.field("storageEndpoint"),
10783
11402
  storageRegion: this.form.field("storageRegion"),
@@ -11294,6 +11913,20 @@ window.__ModuleLoader__.load({
11294
11913
  storageOpen ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11295
11914
  className: settings_card_module_css_default.optionalContent,
11296
11915
  children: [
11916
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ValueField, {
11917
+ id: "dsh-imagegen-settings-local-storage-path",
11918
+ label: t("settings.localStoragePath"),
11919
+ hint: t("settings.localStoragePathHint"),
11920
+ placeholder: "E:\\\\dsh-imagegen-data",
11921
+ ...fieldProps,
11922
+ ...state.localStoragePath,
11923
+ onEdit: (text) => {
11924
+ props.edit("localStoragePath", text);
11925
+ },
11926
+ onReset: () => {
11927
+ props.resetField("localStoragePath");
11928
+ }
11929
+ }),
11297
11930
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BooleanField, {
11298
11931
  id: "dsh-imagegen-settings-storage-enabled",
11299
11932
  label: t("settings.storageEnabled"),
@@ -12190,14 +12823,14 @@ window.__ModuleLoader__.load({
12190
12823
  }
12191
12824
  var image_toolview_module_css_default = {
12192
12825
  "error": "_3eGrYG_error",
12193
- "loading": "_3eGrYG_loading",
12194
12826
  "image": "_3eGrYG_image",
12827
+ "icon": "_3eGrYG_icon",
12828
+ "status": "_3eGrYG_status",
12195
12829
  "root": "_3eGrYG_root",
12196
- "header": "_3eGrYG_header",
12197
12830
  "message": "_3eGrYG_message",
12198
- "status": "_3eGrYG_status",
12199
12831
  "imageLink": "_3eGrYG_imageLink",
12200
- "icon": "_3eGrYG_icon",
12832
+ "header": "_3eGrYG_header",
12833
+ "loading": "_3eGrYG_loading",
12201
12834
  "images": "_3eGrYG_images"
12202
12835
  };
12203
12836
  //#endregion