@mokuyoaxis/dsh-iris 0.2.7 → 0.3.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/CHANGELOG.md +143 -1
  2. package/README.en.md +109 -311
  3. package/README.md +106 -309
  4. package/bin/dsh-iris.js +452 -92
  5. package/docs/AGENT_CORE_QUICKSTART.md +64 -0
  6. package/docs/AGENT_QUICKSTART.md +2 -0
  7. package/docs/ARCHITECTURE.md +13 -3
  8. package/docs/ARTIFACT_MANIFEST.md +4 -0
  9. package/docs/AUDIO_FLOWS.md +87 -0
  10. package/docs/BETA_SCOPE.md +42 -0
  11. package/docs/CONTACT_SHEET.md +62 -0
  12. package/docs/CORE_CONNECTIONS.md +101 -0
  13. package/docs/CORE_QUICKSTART.md +110 -0
  14. package/docs/CORE_RUNTIME_CONTRACT.md +7 -2
  15. package/docs/CORE_SERVICE.md +101 -0
  16. package/docs/CORE_SKILLS.md +35 -3
  17. package/docs/DSH_COMPATIBILITY.md +21 -1
  18. package/docs/DSH_CORE_MIGRATION.md +6 -0
  19. package/docs/DSH_RC2_ADAPTATION.md +1 -1
  20. package/docs/DSH_RUNTIME.md +6 -2
  21. package/docs/HEADLESS_CLI.md +30 -5
  22. package/docs/HOST_ADAPTER_CONTRACT.md +5 -3
  23. package/docs/IMAGE_FLOW.md +4 -0
  24. package/docs/IMAGE_GENERATION.md +127 -0
  25. package/docs/LOCAL_API.md +4 -2
  26. package/docs/LOCAL_API_CONTRACT.md +42 -15
  27. package/docs/LOCAL_CREATION.md +7 -1
  28. package/docs/LOCAL_OPERATIONS.md +46 -0
  29. package/docs/LOCAL_SELECTION.md +57 -0
  30. package/docs/LOCAL_WEB.md +207 -0
  31. package/docs/MCP.md +212 -0
  32. package/docs/MEDIA_SCHEDULING.md +72 -0
  33. package/docs/MUSIC.md +2 -0
  34. package/docs/NETWORK_RESOURCES.md +106 -0
  35. package/docs/NETWORK_ROUTING.md +103 -0
  36. package/docs/NETWORK_WORKBENCH.md +65 -0
  37. package/docs/PANEL_EXTENSIONS.md +64 -0
  38. package/docs/PLUGINS.md +193 -0
  39. package/docs/PLUGIN_DEVELOPMENT.md +39 -0
  40. package/docs/PLUGIN_STARTUP.md +113 -0
  41. package/docs/PROVIDER_ADAPTER_CONTRACT.md +8 -2
  42. package/docs/PROVIDER_CREDENTIALS.md +67 -0
  43. package/docs/PROVIDER_EXTENSIONS.md +82 -0
  44. package/docs/PROVIDER_HEALTH.md +5 -1
  45. package/docs/PROVIDER_NETWORK.md +45 -0
  46. package/docs/PROVIDER_PLUGIN_CONTRACT.md +24 -0
  47. package/docs/PROVIDER_SETTINGS.md +91 -0
  48. package/docs/PROVIDER_SUBMISSION_CONTRACT.md +8 -0
  49. package/docs/ROADMAP.md +18 -8
  50. package/docs/SECURITY.md +1 -1
  51. package/docs/SYNC_DELIVERY_RECOVERY.md +5 -1
  52. package/docs/VIDEO_FLOWS.md +89 -0
  53. package/docs/VISION_CLI.md +1 -1
  54. package/docs/VISION_MODEL.md +2 -0
  55. package/docs/WEB_PROTOTYPE.md +21 -6
  56. package/docs/WEB_RECOVERY.md +46 -0
  57. package/docs/WORKBENCH_ARTIFACTS.md +6 -0
  58. package/docs/WORKBENCH_LOGIN.md +63 -0
  59. package/docs/assets/screenshots/core-connections-preview.webp +0 -0
  60. package/docs/assets/screenshots/core-model-pools-preview.webp +0 -0
  61. package/docs/assets/screenshots/core-overview-preview.webp +0 -0
  62. package/docs/assets/screenshots/core-spectrum-preview.webp +0 -0
  63. package/docs/assets/screenshots/core-studio-dark-preview.webp +0 -0
  64. package/docs/assets/screenshots/core-studio-mobile-preview.webp +0 -0
  65. package/docs/assets/screenshots/core-studio-preview.webp +0 -0
  66. package/docs/releases/0.3.0-alpha.1.md +51 -0
  67. package/docs/releases/0.3.0-beta.1.md +34 -0
  68. package/docs/screenshots.md +41 -1
  69. package/lib/actions.js +56 -4
  70. package/lib/adapters.js +75 -49
  71. package/lib/api.js +23 -13
  72. package/lib/application-runtime.js +73 -17
  73. package/lib/application-writer.js +193 -0
  74. package/lib/audio-flow-input.js +37 -0
  75. package/lib/client.d.ts +3 -3
  76. package/lib/client.js +402 -72
  77. package/lib/comfyui-adapter.js +95 -0
  78. package/lib/comfyui-client.js +60 -0
  79. package/lib/comfyui-inspection.js +73 -0
  80. package/lib/comfyui-workflow.js +94 -0
  81. package/lib/command-service.js +18 -5
  82. package/lib/config.js +49 -10
  83. package/lib/configured-image-runtime.js +69 -0
  84. package/lib/connection-skill.js +98 -0
  85. package/lib/connection-template.js +23 -0
  86. package/lib/core-artifact-store.js +84 -28
  87. package/lib/core-bridge-selection.js +31 -0
  88. package/lib/core-bridge-tools.js +85 -0
  89. package/lib/core-capability-catalog.js +192 -0
  90. package/lib/core-connection-diagnostics.js +49 -0
  91. package/lib/core-connection-store.js +277 -0
  92. package/lib/core-connections.js +225 -0
  93. package/lib/core-delivery-cache.js +8 -3
  94. package/lib/core-maintenance.js +9 -3
  95. package/lib/core-runtime.js +2 -1
  96. package/lib/core-service-client.js +174 -0
  97. package/lib/core-tasks.js +113 -21
  98. package/lib/core-writer-lease.js +16 -0
  99. package/lib/creation-request-store.js +41 -64
  100. package/lib/doctor.js +2 -2
  101. package/lib/dsh-core-adapter.js +61 -9
  102. package/lib/dsh-host-adapter.js +4 -1
  103. package/lib/dsh-provider-config.js +1 -1
  104. package/lib/dsh-service-bridge.js +67 -0
  105. package/lib/execution-ownership.js +43 -0
  106. package/lib/flow-store.js +156 -14
  107. package/lib/generation-input.js +10 -1
  108. package/lib/headless-vision.js +7 -7
  109. package/lib/image-edit-input.js +1 -1
  110. package/lib/image-flow.js +97 -31
  111. package/lib/index.js +47 -22
  112. package/lib/local-api-projection.js +15 -6
  113. package/lib/local-api-token-directory.js +31 -0
  114. package/lib/local-api.js +861 -71
  115. package/lib/local-creation.js +96 -24
  116. package/lib/local-operations.js +36 -0
  117. package/lib/local-request-root.js +86 -0
  118. package/lib/local-web-assets.js +39 -0
  119. package/lib/mcp-bridge.js +58 -0
  120. package/lib/mcp-check.js +26 -0
  121. package/lib/mcp-config.js +42 -0
  122. package/lib/mcp-delivery.js +46 -0
  123. package/lib/mcp-http.js +174 -0
  124. package/lib/mcp-server.js +69 -0
  125. package/lib/media-scheduler.js +194 -0
  126. package/lib/model-directory-service.js +37 -10
  127. package/lib/model-directory.js +3 -3
  128. package/lib/models.js +2 -2
  129. package/lib/music-transport.js +6 -3
  130. package/lib/network-config-service.js +123 -0
  131. package/lib/network-config.js +127 -0
  132. package/lib/network-doctor.js +94 -0
  133. package/lib/network-management.js +51 -0
  134. package/lib/network-policy.js +19 -0
  135. package/lib/network-route-evidence.js +38 -0
  136. package/lib/network-routing.js +283 -0
  137. package/lib/operation-runner.js +281 -0
  138. package/lib/operation-store.js +216 -0
  139. package/lib/panel-extension.js +36 -0
  140. package/lib/plugin-contract.js +194 -0
  141. package/lib/plugin-execution.js +51 -0
  142. package/lib/plugin-launch.js +86 -0
  143. package/lib/plugin-operation-store.js +101 -0
  144. package/lib/plugin-operations.js +28 -0
  145. package/lib/plugin-registry.js +109 -0
  146. package/lib/plugin-selection.js +15 -0
  147. package/lib/plugin-source-image.js +5 -0
  148. package/lib/plugin-web-assets.js +54 -0
  149. package/lib/plugins.d.ts +307 -0
  150. package/lib/plugins.js +59 -0
  151. package/lib/provider-adapter.js +7 -3
  152. package/lib/provider-adapters.js +92 -22
  153. package/lib/provider-catalog.js +64 -36
  154. package/lib/provider-config-format.js +51 -0
  155. package/lib/provider-config-service.js +143 -31
  156. package/lib/provider-context.d.ts +90 -0
  157. package/lib/provider-context.js +42 -0
  158. package/lib/provider-credentials.js +97 -0
  159. package/lib/provider-diagnostics.js +56 -0
  160. package/lib/provider-extensions.js +29 -0
  161. package/lib/provider-health.js +18 -6
  162. package/lib/provider-monitor.js +81 -0
  163. package/lib/provider-network.js +52 -0
  164. package/lib/provider-protocol.js +73 -22
  165. package/lib/provider-registry.js +128 -0
  166. package/lib/provider-response.js +38 -0
  167. package/lib/provider-settings.js +136 -0
  168. package/lib/provider-task-runner.js +132 -43
  169. package/lib/provider-transport.js +16 -0
  170. package/lib/render.js +11 -1
  171. package/lib/scheduling-policy.js +66 -0
  172. package/lib/skill-installation.js +23 -11
  173. package/lib/tasks.js +3 -2
  174. package/lib/video-flow-input.js +16 -0
  175. package/lib/video-input.js +12 -5
  176. package/lib/vision-model-routing.js +5 -0
  177. package/lib/web/app.js +703 -0
  178. package/lib/web/appearance.js +111 -0
  179. package/lib/web/comfyui.js +146 -0
  180. package/lib/web/connections.js +516 -0
  181. package/lib/web/creation.js +359 -0
  182. package/lib/web/flow-view.js +34 -0
  183. package/lib/web/gallery.js +133 -0
  184. package/lib/web/index.html +344 -0
  185. package/lib/web/media-client.js +218 -0
  186. package/lib/web/network.js +232 -0
  187. package/lib/web/plugin-panel.js +223 -0
  188. package/lib/web/plugin-status.js +140 -0
  189. package/lib/web/plugin-surface.css +17 -0
  190. package/lib/web/providers.js +513 -0
  191. package/lib/web/recovery.js +105 -0
  192. package/lib/web/startup.js +18 -0
  193. package/lib/web/styles.css +571 -0
  194. package/lib/web/transport.js +101 -0
  195. package/lib/web/workbench-login.js +165 -0
  196. package/lib/workbench-artifacts.js +3 -2
  197. package/lib/workbench-auth-cli.js +47 -0
  198. package/lib/workbench-auth.js +200 -0
  199. package/package.json +24 -6
  200. package/plugins/contact-sheet/index.d.mts +4 -0
  201. package/plugins/contact-sheet/index.mjs +33 -0
  202. package/plugins/contact-sheet/web/board.css +14 -0
  203. package/plugins/contact-sheet/web/board.mjs +93 -0
  204. package/skills/iris-core/SKILL.md +8 -4
  205. package/skills/iris-core/references/cli.md +2 -2
  206. package/skills/iris-core/references/comfyui.md +69 -0
  207. package/skills/iris-core/references/tasks.md +2 -0
  208. package/templates/plugin-starter/LICENSE +21 -0
  209. package/templates/plugin-starter/README.md +74 -0
  210. package/templates/plugin-starter/assets/peach.png +0 -0
  211. package/templates/plugin-starter/assets/violet.png +0 -0
  212. package/templates/plugin-starter/index.mjs +27 -0
  213. package/templates/plugin-starter/package.json +18 -0
  214. package/templates/plugin-starter/scripts/core-cli.mjs +20 -0
  215. package/templates/plugin-starter/scripts/environment.mjs +65 -0
  216. package/templates/plugin-starter/scripts/mcp-probe.mjs +22 -0
  217. package/templates/plugin-starter/scripts/setup.mjs +42 -0
  218. package/templates/plugin-starter/scripts/smoke.mjs +76 -0
  219. package/templates/plugin-starter/web/board.css +27 -0
  220. package/templates/plugin-starter/web/board.mjs +160 -0
  221. package/templates/plugin-starter/web/png.mjs +23 -0
  222. package/templates/provider-starter/LICENSE +21 -0
  223. package/templates/provider-starter/README.md +50 -0
  224. package/templates/provider-starter/index.d.mts +5 -0
  225. package/templates/provider-starter/index.mjs +165 -0
  226. package/templates/provider-starter/package.json +13 -0
  227. package/templates/provider-starter/scripts/core-cli.mjs +22 -0
  228. package/templates/provider-starter/scripts/environment.mjs +122 -0
  229. package/templates/provider-starter/scripts/fixture.mjs +54 -0
  230. package/templates/provider-starter/scripts/mcp-probe.mjs +21 -0
  231. package/templates/provider-starter/scripts/protocol-smoke.mjs +48 -0
  232. package/templates/provider-starter/scripts/setup.mjs +44 -0
  233. package/templates/provider-starter/scripts/smoke.mjs +145 -0
  234. package/user_guide.md +5 -1
@@ -0,0 +1,571 @@
1
+ :root {
2
+ color-scheme: light;
3
+ --iris-gradient:linear-gradient(105deg,#45317D,#6F69B8,#BB78AD,#E59B76,#ED9C91,#F0D09C);
4
+ --page:#fdfcfe; --panel:#fff; --rail:#f8f7fb; --ink:#302a3d; --muted:#70697b;
5
+ --line:#e7e3ec; --soft:#f7f6fa; --accent:#45317D; --on-accent:#fff; --tint:#f0edf8;
6
+ --purple:#6F69B8; --warning:#7c5b1a; --error:#a3332d;
7
+ font:14px/1.6 Inter,-apple-system,BlinkMacSystemFont,"Noto Sans CJK SC","PingFang SC","Microsoft YaHei",sans-serif;
8
+ background:var(--page); color:var(--ink);
9
+ }
10
+ :root[data-theme="dark"] {
11
+ color-scheme:dark; --page:#1d1a24; --panel:#26222e; --rail:#211e29; --ink:#eeeaf5; --muted:#b7aec6;
12
+ --line:#40394c; --soft:#2e2838; --accent:#c5b8ee; --on-accent:#2a1d48; --tint:#382d4c;
13
+ --purple:#b8b2ef; --warning:#edc981; --error:#ffb4ab;
14
+ }
15
+ * { box-sizing:border-box; }
16
+ .network-grid { align-items:stretch; }
17
+ #network-stats { grid-template-columns:repeat(4,minmax(0,1fr)); }
18
+ #network-panel .badge { flex-shrink:0; white-space:nowrap; }
19
+ .network-grid .network-card { --network-color:#45317D; min-width:0; position:relative; padding:20px; background:linear-gradient(135deg,color-mix(in srgb,var(--network-color) 7%,var(--panel)),var(--panel) 80%); }
20
+ .network-card::before { content:""; display:block; width:34px; height:3px; border-radius:3px; background:var(--network-color); margin-bottom:18px; }
21
+ .network-grid [data-network-tone="1"] { --network-color:#6F69B8; }.network-grid [data-network-tone="2"] { --network-color:#BB78AD; }.network-grid [data-network-tone="3"] { --network-color:#E59B76; }.network-grid [data-network-tone="4"] { --network-color:#ED9C91; }.network-grid [data-network-tone="5"] { --network-color:#F0D09C; }
22
+ .network-kicker { color:var(--muted); font-size:12px; letter-spacing:.04em; }
23
+ .network-card h3 { margin:14px 0 6px; font-size:19px; overflow-wrap:anywhere; }
24
+ .network-route { font-weight:550; overflow-wrap:anywhere; margin-bottom:8px; }
25
+ .network-card-action { padding-left:0; margin-top:12px; }
26
+ .network-route-note { display:block; font-size:12px; color:var(--muted); overflow-wrap:anywhere; }
27
+ .network-link { margin-bottom:12px; }
28
+ .network-setup { padding:22px; margin-bottom:20px; }.network-setup button { margin:14px 0; }.network-setup pre { white-space:pre-wrap; overflow-wrap:anywhere; font-size:12px; }
29
+ .network-editor { max-width:850px; }.network-editor .field-label { display:flex; flex-direction:column; gap:5px; margin-bottom:12px; }.network-editor h3 { margin:18px 0 10px; }
30
+ .network-node-address { display:grid; grid-template-columns:100px minmax(0,1fr) 110px; gap:12px; }
31
+ .network-editor .mini-check { margin:10px 0; }.network-binding-name { font-size:18px; font-weight:600; margin-bottom:16px; overflow-wrap:anywhere; }
32
+ .network-candidates { display:grid; gap:8px; }.network-candidate { display:flex; align-items:center; flex-wrap:wrap; gap:5px; padding:8px 10px; border:1px solid var(--line); border-radius:9px; }.network-candidate>span { flex:1; min-width:120px; overflow-wrap:anywhere; }.network-candidate button { min-height:36px; padding:5px 8px; font-size:12px; }
33
+ .network-candidate-add { display:flex; gap:8px; margin:12px 0; }.network-candidate-add select { flex:1; }
34
+ #network-doctor { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); align-items:start; gap:20px; }
35
+ .network-doctor-card,.network-probe-card { padding:22px; min-width:0; }.network-facts { display:grid; grid-template-columns:minmax(90px,.65fr) minmax(0,1.4fr); gap:10px 16px; margin:20px 0; }.network-facts dt { color:var(--muted); }.network-facts dd { margin:0; overflow-wrap:anywhere; }
36
+ .network-probe-card .field-label { display:flex; flex-direction:column; gap:5px; margin:16px 0; }.network-probe-result { border-top:1px solid var(--line); padding-top:16px; margin-top:16px; overflow-wrap:anywhere; }.network-probe-result strong { display:block; margin-bottom:8px; }.network-other-row { display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin:12px 0; }.network-other-row span { flex:1; overflow-wrap:anywhere; }
37
+ #network-other-bindings { margin-top:20px; padding:18px; }
38
+ @media(max-width:950px) { #network-doctor { grid-template-columns:1fr; } }
39
+ @media(max-width:600px) { #network-stats { grid-template-columns:repeat(2,minmax(0,1fr)); }.network-node-address { grid-template-columns:minmax(0,1fr) minmax(0,1fr); }.network-node-address>label:nth-child(2) { grid-column:1/-1; grid-row:2; }.network-card,.network-doctor-card,.network-probe-card { padding:17px; }.network-facts { grid-template-columns:1fr; gap:3px; }.network-facts dd { margin-bottom:12px; } }
40
+ [hidden] { display:none!important; }
41
+ body,h1,h2,h3,p,figure { margin:0; }
42
+ button,input,select,textarea { font:inherit; min-width:0; }
43
+ button { cursor:pointer; touch-action:manipulation; }
44
+ button,.file-button { border:1px solid transparent; border-radius:8px; min-height:42px; padding:8px 14px; font-weight:550; background:var(--accent); color:var(--on-accent); }
45
+ button:hover:not(:disabled) { filter:brightness(.94); }
46
+ button:disabled { opacity:.5; cursor:default; }
47
+ button.quiet,.secondary { color:var(--ink); background:transparent; }
48
+ .secondary { border-color:var(--line); background:var(--panel); }
49
+ input:not([type="file"]):not([type="checkbox"]):not([type="range"]),select,textarea { color:var(--ink); background:var(--panel); border:1px solid var(--line); border-radius:8px; padding:9px 11px; max-width:100%; min-height:42px; }
50
+ input,select,textarea { accent-color:var(--accent); }
51
+ textarea { width:100%; resize:vertical; line-height:1.7; }
52
+ a { color:var(--accent); }
53
+ :focus-visible { outline:2px solid var(--purple); outline-offset:3px; }
54
+ #main-content:focus-visible { outline:none; }
55
+ button,input,textarea,select,summary { -webkit-tap-highlight-color:transparent; }
56
+ h1 { font-size:25px; font-weight:650; letter-spacing:-.6px; line-height:1.4; }
57
+ h2 { font-size:16px; font-weight:650; } h3 { font-size:14px; }
58
+ .muted,.field-note,.meta { color:var(--muted); }
59
+ .field-note { font-size:12px; margin-top:8px; overflow-wrap:anywhere; }
60
+ .skip-link { position:fixed; top:-90px; left:12px; z-index:10; padding:12px; background:var(--panel); }
61
+ .skip-link:focus { top:8px; }
62
+ .app-shell { display:grid; grid-template-columns:192px minmax(0,1fr); min-height:100dvh; }
63
+ .startup-screen { display:none; }
64
+ :root:is([data-startup="pending"],[data-startup="failed"]) .startup-screen { display:flex; position:fixed; inset:0; flex-direction:column; align-items:center; justify-content:center; gap:10px; background:var(--page); color:var(--muted); }
65
+ :root:is([data-startup="pending"],[data-startup="failed"]) .app-shell { display:none; }
66
+ .startup-brand { color:var(--ink); font-size:34px; font-weight:650; letter-spacing:-1px; }
67
+ .startup-brand span { background:var(--iris-gradient); background-clip:text; color:transparent; }
68
+ .startup-message,.startup-failure { font-size:13px; }
69
+ .startup-failure { display:none; text-align:center; }
70
+ .startup-failure a { display:inline-block; margin-top:12px; }
71
+ :root[data-startup="failed"] .startup-message { display:none; }
72
+ :root[data-startup="failed"] .startup-failure { display:block; }
73
+ body:not(.connected) .app-shell { grid-template-columns:minmax(0,1fr); }
74
+ body.connected .site-header { position:sticky; top:0; z-index:8; }
75
+ .provider-sections { margin-bottom:20px; }
76
+ .provider-pool-panel { padding:20px; max-width:1000px; }
77
+ .provider-pool-panel fieldset { border:0; padding:0; margin:0; min-width:0; }
78
+ .provider-footer { display:flex; align-items:center; flex-wrap:wrap; gap:10px; margin-top:18px; }
79
+ .provider-footer .field-note { flex-basis:100%; }
80
+ .provider-spectrum { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; margin:18px 0; }
81
+ .provider-spectrum-card { --spectrum-tone:#45317D; min-width:0; text-align:left; padding:16px; color:var(--ink); background:linear-gradient(125deg,color-mix(in srgb,var(--spectrum-tone) 7%,var(--panel)),var(--panel)); border:1px solid var(--line); border-top:3px solid color-mix(in srgb,var(--spectrum-tone) 65%,var(--line)); border-radius:12px; }
82
+ .provider-spectrum-card[data-tone="1"] { --spectrum-tone:#6F69B8; }.provider-spectrum-card[data-tone="2"] { --spectrum-tone:#BB78AD; }.provider-spectrum-card[data-tone="3"] { --spectrum-tone:#E59B76; }.provider-spectrum-card[data-tone="4"] { --spectrum-tone:#ED9C91; }.provider-spectrum-card[data-tone="5"] { --spectrum-tone:#F0D09C; }
83
+ .provider-spectrum-card strong,.provider-spectrum-card small { display:block; }.provider-spectrum-card small { font-size:11px; color:var(--muted); font-weight:400; margin-top:7px; }
84
+ .provider-health-details { padding:16px 20px; }.provider-health-details>summary { display:flex; justify-content:space-between; cursor:pointer; }
85
+ .provider-health-model { margin-top:14px; padding-top:14px; border-top:1px solid var(--line); min-width:0; }.provider-health-model strong { overflow-wrap:anywhere; }
86
+ .provider-check-heading { margin:26px 0 8px; }
87
+ .provider-monitor { padding:18px; min-width:0; }.provider-monitor h3 { overflow-wrap:anywhere; }.provider-monitor .field-note { margin:10px 0; }
88
+ .provider-monitor-options { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin-top:12px; font-size:12px; }.provider-monitor-options label { display:flex; align-items:center; gap:6px; }
89
+ .provider-rank-row { display:flex; align-items:center; flex-wrap:wrap; gap:6px; }.provider-rank-row label { flex:1; }.provider-rank-row button { font-size:11px; min-height:30px; padding:3px 9px; }
90
+ @media(max-width:640px) { .provider-spectrum { grid-template-columns:repeat(2,minmax(0,1fr)); gap:9px; }.provider-spectrum-card { padding:13px; }.provider-pool-panel { padding:16px; }.provider-sections { gap:3px; }.provider-sections button { padding-inline:9px; } }
91
+ .app-sidebar { position:sticky; top:0; height:100dvh; padding:28px 14px 18px; background:var(--rail); border-right:1px solid var(--line); display:flex; flex-direction:column; min-width:0; }
92
+ .brand { display:flex; align-items:center; gap:9px; color:var(--ink); text-decoration:none; padding:0 9px; font-size:30px; font-weight:700; letter-spacing:-1px; }
93
+ .brand-dot { color:var(--purple); }
94
+ .sidebar-label { color:var(--muted); font-size:12px; margin:32px 12px 9px; }
95
+ .workspace-nav { display:grid; gap:5px; }
96
+ .plugin-navigation { display:grid; gap:5px; border-top:1px solid var(--line); padding-top:8px; margin-top:5px; }
97
+ .plugin-slot { min-width:0; }
98
+ .plugins-panel { max-width:1040px; margin:0 auto 32px; }
99
+ .plugin-status-list { display:grid; gap:14px; margin:18px 0; }
100
+ .plugin-status-card { overflow:hidden; border-top:2px solid color-mix(in srgb,var(--purple) 35%,var(--line)); }
101
+ .plugin-status-card>summary { display:flex; align-items:center; gap:14px; padding:18px 20px; cursor:pointer; list-style:none; }
102
+ .plugin-status-card>summary::-webkit-details-marker { display:none; }
103
+ .plugin-status-mark { display:grid; place-items:center; width:40px; height:40px; border-radius:12px; flex-shrink:0; color:var(--accent); background:var(--tint); font-size:24px; }
104
+ .plugin-status-title { flex:1; min-width:0; }.plugin-status-title strong,.plugin-status-title small { display:block; overflow-wrap:anywhere; }.plugin-status-title small { color:var(--muted); font-size:12px; margin-top:4px; }
105
+ .plugin-state { display:inline-block; color:var(--accent); background:var(--tint); padding:3px 9px; border-radius:20px; font-size:11px; flex-shrink:0; }
106
+ .plugin-status-body { padding:0 20px 20px; }.plugin-identity { font-size:11px; color:var(--muted); overflow-wrap:anywhere; }
107
+ .plugin-contribution-status,.plugin-grants,.plugin-instances { list-style:none; padding:0; margin:12px 0; }
108
+ .plugin-contribution-status { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }
109
+ .plugin-contribution-status>li { min-width:0; padding:14px; border:1px solid var(--line); border-radius:10px; }.plugin-contribution-status strong { display:block; overflow-wrap:anywhere; }
110
+ .plugin-kind { display:block; color:var(--muted); font-size:11px; margin-bottom:4px; }.plugin-contribution-status .plugin-identity { margin-top:6px; }
111
+ .plugin-grant { padding:14px 0; border-bottom:1px solid var(--line); }.plugin-grant:last-child { border-bottom:0; }.plugin-grant-heading { margin-bottom:6px; overflow-wrap:anywhere; }.plugin-grant[data-status="version"]>.plugin-state,.plugin-grant[data-status="missing"]>.plugin-state { color:var(--warning); background:var(--soft); }
112
+ .plugin-instances { color:var(--muted); font-size:12px; margin:8px 0 0; }
113
+ .plugin-missing-section { padding:20px; margin:18px 0; }.plugin-status-footer { display:flex; gap:16px; align-items:center; justify-content:space-between; flex-wrap:wrap; margin:20px 0; }.plugin-status-footer p { max-width:650px; margin:0; }.plugin-status-help code { display:block; font-size:11px; overflow-wrap:anywhere; padding:8px 0; }
114
+ @media(max-width:640px) { .plugin-status-card>summary { flex-wrap:wrap; gap:10px; padding:15px; }.plugin-status-title { flex-basis:calc(100% - 60px); }.plugin-status-card>summary>.plugin-state { margin-left:50px; }.plugin-status-card>summary>.disclosure { margin-left:auto; }.plugin-status-body { padding:0 15px 15px; }.plugin-contribution-status { grid-template-columns:minmax(0,1fr); }.plugin-missing-section { padding:15px; } }
115
+ .plugin-slot.card { padding:20px; }
116
+ .plugin-settings-card { margin-bottom:12px; padding:16px; }
117
+ .plugin-history-item { padding:20px; margin:14px 0; }
118
+ .plugin-history-item h2 { overflow-wrap:anywhere; }
119
+ .plugin-history-item img { display:block; max-width:100%; max-height:500px; object-fit:contain; margin:16px 0; }
120
+ .plugin-settings-card>summary { display:flex; justify-content:space-between; align-items:center; cursor:pointer; }
121
+ .plugin-settings-card>.plugin-slot { padding-top:14px; }
122
+ .plugin-preview { margin-top:16px; border-top:1px solid var(--line); padding-top:12px; }
123
+ .plugin-preview-options { display:flex; flex-wrap:wrap; gap:12px; margin:12px 0; }
124
+ .plugin-preview-options label { display:grid; gap:5px; min-width:150px; flex:1; color:var(--muted); font-size:12px; }
125
+ @media(max-width:850px) { .workspace-nav .plugin-navigation { display:contents; } }
126
+ .nav-item { display:flex; align-items:center; gap:10px; width:100%; text-align:left; color:var(--muted); background:transparent; font-size:14px; min-height:44px; }
127
+ .nav-item svg { width:19px; height:19px; flex-shrink:0; fill:none; stroke:currentColor; stroke-width:1.65; stroke-linecap:round; stroke-linejoin:round; }
128
+ .nav-item>span:first-child { color:var(--purple); font-size:20px; min-width:21px; text-align:center; }
129
+ .nav-item[aria-current="page"] { color:var(--ink); background:var(--panel); border-color:var(--line); }
130
+ .count { font-size:12px; font-weight:400; color:var(--muted); }
131
+ .recent-panel { margin-top:26px; min-height:0; overflow:auto; }
132
+ .recent-panel>summary { padding-inline:8px; font-size:12px; }
133
+ #history-list { display:grid; gap:4px; }
134
+ .history-item { display:grid; grid-template-columns:18px minmax(0,1fr); gap:2px 6px; text-align:left; width:100%; background:transparent; color:var(--ink); padding:9px 8px; }
135
+ .history-item strong { font-size:12px; font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
136
+ .history-item small { grid-row:span 2; font-size:12px; color:var(--muted); }
137
+ .history-item span { grid-column:2; font-size:12px; color:var(--muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
138
+ .history-item[aria-current="true"] { background:var(--panel); border-color:var(--line); }
139
+ #history-empty { padding:10px 8px; font-size:12px; }
140
+ .sidebar-bottom { margin-top:auto; padding-top:18px; border-top:1px solid var(--line); display:flex; gap:9px; font-size:12px; }
141
+ .sidebar-bottom small { display:block; color:var(--muted); font-size:12px; }
142
+ .workspace-avatar { display:grid; place-items:center; width:32px; height:36px; background:var(--tint); color:var(--accent); border-radius:8px; font:italic 27px Georgia,serif; }
143
+ .main-area { min-width:0; position:relative; isolation:isolate; }
144
+ .main-area::before { content:""; position:fixed; z-index:-1; inset:0; pointer-events:none; background-image:var(--workspace-image,none); background-position:var(--background-position,center); background-size:cover; opacity:var(--background-opacity,.14); filter:blur(var(--background-blur,0px)); }
145
+ .site-header { min-height:60px; border-bottom:1px solid var(--line); display:flex; align-items:center; justify-content:space-between; gap:12px; padding:8px 26px; background:var(--panel); }
146
+ .breadcrumb { color:var(--muted); font-size:12px; } .breadcrumb>span { padding:0 10px; opacity:.6; } .breadcrumb strong { color:var(--ink); font-weight:500; }
147
+ .header-actions { display:flex; gap:4px; align-items:center; }
148
+ .badge { font-size:12px; font-weight:550; padding:4px 9px; border-radius:20px; background:var(--tint); color:var(--accent); }
149
+ main { padding:24px 26px 0; max-width:1600px; margin:auto; min-width:0; }
150
+ .card { background:var(--panel); border:1px solid var(--line); border-radius:13px; min-width:0; }
151
+ .eyebrow { font-size:12px; letter-spacing:1.5px; font-weight:500; color:var(--muted); margin-bottom:5px; }
152
+ .page-heading { display:flex; justify-content:space-between; align-items:center; gap:16px; margin:2px 0 22px; }
153
+ .page-heading>.secondary { flex-shrink:0; } .page-heading p.muted { font-size:13px; margin-top:7px; }
154
+ .page-heading>button { flex-shrink:0; white-space:nowrap; }
155
+ .overview-panel { max-width:1120px; margin:0 auto 32px; }
156
+ .overview-welcome { display:flex; justify-content:space-between; align-items:center; gap:24px; padding:26px 28px; position:relative; overflow:hidden; background:linear-gradient(115deg,var(--panel) 65%,var(--soft)); }
157
+ .overview-welcome::before { content:""; position:absolute; top:0; left:0; right:0; height:3px; background:var(--iris-gradient); }
158
+ .overview-welcome h1 { font-size:27px; letter-spacing:-.6px; }
159
+ .overview-welcome .muted { margin-top:8px; font-size:13px; }
160
+ .overview-welcome-actions { display:flex; flex-shrink:0; gap:8px; }
161
+ .overview-stats { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:16px; margin:18px 0 26px; }
162
+ .overview-stats>div { min-width:0; padding:4px 0 4px 16px; border-left:2px solid var(--line); }
163
+ .overview-stats dt { color:var(--muted); font-size:12px; }.overview-stats dd { margin:3px 0 0; font-size:21px; font-weight:600; line-height:1.5; }
164
+ .overview-stat-note { display:block; color:var(--muted); font-size:11px; margin-top:3px; }
165
+ .overview-section-heading { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:14px; }
166
+ .overview-section-heading h2 { font-size:17px; }.overview-section-heading p { font-size:12px; margin-top:3px; }
167
+ .overview-section-heading button { flex-shrink:0; font-size:12px; }
168
+ .overview-capabilities { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px; }
169
+ .overview-capability { --cap-tone:#45317D; padding:18px; display:flex; flex-direction:column; border-top-color:color-mix(in srgb,var(--cap-tone) 25%,var(--line)); }
170
+ .overview-capability[data-provider-tone="1"] { --cap-tone:#6F69B8; }.overview-capability[data-provider-tone="2"] { --cap-tone:#BB78AD; }
171
+ .overview-capability[data-provider-tone="3"] { --cap-tone:#E59B76; }.overview-capability[data-provider-tone="4"] { --cap-tone:#ED9C91; }.overview-capability[data-provider-tone="5"] { --cap-tone:#F0D09C; }
172
+ .overview-capability-heading { display:flex; gap:9px; align-items:center; }.overview-capability-heading h3 { font-size:15px; font-weight:600; }
173
+ .overview-capability-icon { display:grid; place-items:center; width:34px; height:34px; flex-shrink:0; border-radius:10px; background:color-mix(in srgb,var(--cap-tone) 10%,var(--panel)); color:color-mix(in srgb,var(--cap-tone) 50%,var(--ink)); }
174
+ .overview-capability-icon svg { width:19px; height:19px; fill:none; stroke:currentColor; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; }
175
+ .overview-entry { margin-left:auto; font-size:10px; color:var(--muted); background:var(--soft); padding:2px 7px; border-radius:5px; white-space:nowrap; }
176
+ .overview-capability-description { font-size:12px; color:var(--muted); margin:12px 0 14px; }
177
+ .overview-capability-facts { display:grid; grid-template-columns:auto minmax(0,1fr); gap:6px 12px; margin:0 0 14px; font-size:11px; }
178
+ .overview-capability-facts dt { color:var(--muted); }.overview-capability-facts dd { margin:0; overflow-wrap:anywhere; }
179
+ .overview-capability-actions { display:flex; flex-wrap:wrap; align-items:center; gap:6px; margin-top:auto; min-height:36px; }
180
+ .overview-capability-actions button { font-size:11px; padding:5px 10px; min-height:34px; }.overview-capability-actions .quiet { color:var(--accent); }
181
+ .overview-action-note { font-size:11px; color:var(--muted); }
182
+ .overview-capability-more { margin-top:12px; border-top:1px solid var(--line); padding-top:10px; }
183
+ .overview-capability-more summary { color:var(--muted); font-size:11px; font-weight:400; }.overview-capability-more p { font-size:11px; margin-top:9px; color:var(--muted); overflow-wrap:anywhere; }
184
+ .overview-command { font-family:ui-monospace,SFMono-Regular,Consolas,monospace; }.overview-evidence-time { display:block; font-size:10px; color:var(--muted); margin-top:9px; }
185
+ .overview-tools { margin-top:18px; padding:15px 18px; }.overview-tools>summary { font-size:13px; font-weight:500; }.overview-tools>summary small { font-size:11px; font-weight:400; color:var(--muted); margin-left:7px; }
186
+ .overview-tool-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:20px; padding:20px 0 3px; }
187
+ .overview-tool-grid h3 { font-size:12px; }.overview-tool-grid p,.overview-tool-grid code { display:block; font-size:11px; color:var(--muted); margin-top:6px; overflow-wrap:anywhere; }
188
+ .overview-notes { margin:16px 3px; }.overview-notes summary { font-size:11px; color:var(--muted); font-weight:400; }.overview-notes p { font-size:11px; color:var(--muted); margin-top:8px; max-width:760px; }
189
+ @media(max-width:1100px) { .overview-capabilities { grid-template-columns:repeat(2,minmax(0,1fr)); }.overview-welcome { padding:22px; flex-wrap:wrap; } }
190
+ @media(max-width:640px) {
191
+ .overview-welcome { padding:22px 18px; gap:18px; }.overview-welcome h1 { font-size:23px; }.overview-welcome-actions { width:100%; }.overview-welcome-actions button { flex:1; font-size:12px; }
192
+ .overview-stats { gap:9px; margin-bottom:22px; }.overview-stats>div { padding-left:9px; }.overview-stats dd { font-size:16px; }.overview-stat-note { font-size:10px; }
193
+ .overview-capabilities { grid-template-columns:1fr; gap:12px; }.overview-capability { padding:16px; }.overview-capability-actions button { min-height:40px; padding-inline:12px; }
194
+ .overview-tool-grid { grid-template-columns:1fr; gap:18px; }.overview-tools>summary small { display:none; }
195
+ }
196
+ .connection { max-width:500px; margin:7vh auto 12vh; padding:36px; position:relative; overflow:hidden; }
197
+ .connection::before { content:""; position:absolute; inset:0 0 auto; height:4px; background:var(--iris-gradient); }
198
+ .brand-dot { background:var(--iris-gradient); background-clip:text; color:transparent; }
199
+ .nav-item[aria-current="page"] { box-shadow:inset 3px 0 var(--accent); }
200
+ .eyebrow::before { content:""; display:inline-block; width:20px; height:3px; vertical-align:middle; margin-right:8px; border-radius:2px; background:var(--iris-gradient); }
201
+ .connection .eyebrow { color:var(--purple); } .connection h1 { font-size:29px; }
202
+ html[data-auth="password"] #login-help,html[data-auth="password"] #paste-panel { display:none; }
203
+ #password-form { display:grid; gap:9px; margin-top:22px; }
204
+ #password-form>label,#password-confirm-row>label { color:var(--ink); font-size:13px; font-weight:550; }
205
+ .password-row { display:flex; align-items:stretch; gap:6px; border:1px solid var(--line); border-radius:10px; padding-right:4px; background:var(--panel); }
206
+ .password-row:focus-within { outline:2px solid var(--purple); outline-offset:2px; }
207
+ .password-row input { min-width:0; flex:1; border:0; background:transparent; box-shadow:none; outline:0; }
208
+ .password-row button { font-size:12px; min-width:46px; }
209
+ #password-confirm-row { display:grid; gap:9px; margin-top:5px; }
210
+ #password-confirm { width:100%; }
211
+ #password-form .password-remember { display:flex; align-items:center; gap:9px; margin:8px 0 9px; font-weight:400; cursor:pointer; }
212
+ .password-remember input { width:16px; height:16px; accent-color:var(--accent); }
213
+ .password-remember small { color:var(--muted); margin-left:5px; font-weight:400; }
214
+ .password-help { margin-top:18px; color:var(--muted); font-size:12px; }
215
+ .password-help p { line-height:1.8; margin:6px 0 10px; }
216
+ .password-help code { display:block; overflow-wrap:anywhere; font-size:11px; }
217
+ .intro { margin:12px 0 24px; color:var(--muted); }
218
+ .file-button { display:block; text-align:center; position:relative; cursor:pointer; }
219
+ .file-button:focus-within,.image-drop:focus-within { outline:2px solid var(--purple); outline-offset:3px; }
220
+ .file-button input,.image-drop input { position:absolute; inset:0; width:100%; opacity:0; cursor:pointer; }
221
+ #token-help { font-size:12px; margin:12px 0 18px; }
222
+ summary { list-style:none; cursor:pointer; min-height:42px; display:flex; align-items:center; justify-content:space-between; gap:10px; font-size:13px; font-weight:550; }
223
+ summary::-webkit-details-marker { display:none; } .disclosure { color:var(--muted); font-size:12px; font-weight:400; white-space:nowrap; }
224
+ #connect-form { margin-top:8px; } #connect-form label { font-size:12px; color:var(--muted); }
225
+ .token-row { display:flex; gap:8px; margin-top:6px; } .token-row input { flex:1; }
226
+ .scope-note { font-size:12px; color:var(--muted); padding-top:18px; margin-top:12px; border-top:1px solid var(--line); }
227
+ #feedback,#creation-feedback,#connections-feedback { padding:10px 14px; border-radius:8px; background:var(--tint); overflow-wrap:anywhere; font-size:13px; }
228
+ #feedback,#connections-feedback { margin-bottom:16px; }
229
+ .error { color:var(--error)!important; }
230
+ .compact-details { padding:4px 15px; }
231
+ .compact-details summary small,.composer summary small { display:block; font-weight:400; color:var(--muted); font-size:12px; }
232
+ .compact-details p,.compact-details ul { font-size:12px; margin:10px 0; overflow-wrap:anywhere; }
233
+ .compact-details ul { padding-left:16px; max-height:180px; overflow:auto; }
234
+ #recovery-panel { margin-bottom:18px; }
235
+ #recovery-list { list-style:none; padding:0; max-height:300px; }
236
+ #recovery-list li { display:flex; flex-wrap:wrap; align-items:center; gap:8px; padding:8px 0; border-top:1px solid var(--line); }
237
+ .full { width:100%; margin-top:12px; }
238
+ .studio-grid { display:grid; grid-template-columns:minmax(0,1fr) 306px; gap:20px; align-items:start; }
239
+ .composer { grid-column:2; grid-row:1; padding-bottom:14px; }
240
+ .composer>summary { padding:14px 18px; border-bottom:1px solid var(--line); min-height:64px; font-size:14px; }
241
+ #edit-form { padding:0 18px; } fieldset { padding:0; margin:0; min-width:0; border:0; }
242
+ .field-label { display:flex; justify-content:space-between; gap:8px; margin:17px 0 8px; font-size:13px; font-weight:550; }
243
+ .field-label small { font-size:12px; font-weight:400; color:var(--muted); }
244
+ #model,#edit-size { width:100%; }
245
+ .comfy-studio,.comfy-preview { margin-top:14px; padding:12px; border:1px solid var(--line); border-radius:12px; background:var(--panel); min-width:0; }
246
+ .comfy-studio { position:relative; overflow:hidden; border-top:3px solid var(--purple); }
247
+ .comfy-studio::before { content:""; position:absolute; inset:0; pointer-events:none; background:var(--iris-gradient); opacity:0; animation:comfy-arrive .65s ease-out; }
248
+ @keyframes comfy-arrive { 0% { opacity:.14; transform:translateX(-75%); } 100% { opacity:0; transform:translateX(75%); } }
249
+ .comfy-studio h3,.comfy-preview h3 { font-size:13px; }
250
+ .comfy-group { margin-top:10px; border-top:1px solid var(--line); padding-top:3px; min-width:0; }
251
+ .comfy-group>summary { min-height:36px; gap:8px; font-size:12px; overflow-wrap:anywhere; }
252
+ .comfy-group>summary>span:first-child { min-width:0; overflow:hidden; text-overflow:ellipsis; }
253
+ .comfy-common,.comfy-parameter-grid { display:grid; gap:10px; margin-top:10px; }
254
+ .comfy-parameter-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
255
+ .comfy-parameter-grid .comfy-parameter:has(select),.comfy-parameter-grid .comfy-parameter:has(input[type=text]) { grid-column:1/-1; }
256
+ .comfy-parameter { display:grid; gap:4px; font-size:12px; min-width:0; margin-top:8px; overflow-wrap:anywhere; }
257
+ .comfy-parameter input:not([type=checkbox]),.comfy-parameter select,.comfy-parameter textarea { width:100%; min-height:36px; padding:6px 8px; font-size:13px; }
258
+ .comfy-parameter:has(input[type=checkbox]) { display:flex; align-items:center; justify-content:space-between; }
259
+ .comfy-lora { padding:5px 9px; border:1px solid var(--line); border-radius:9px; background:color-mix(in srgb,var(--purple) 5%,var(--panel)); }
260
+ .comfy-slot { display:grid; grid-template-columns:minmax(0,1fr) minmax(100px,1fr) 72px; gap:8px; align-items:center; padding:8px 0; border-bottom:1px solid var(--line); }
261
+ .comfy-slot .mini-check { overflow-wrap:anywhere; font-size:11px; }
262
+ .comfy-slot input:not([type=checkbox]),.comfy-slot select { width:100%; min-height:34px; padding:5px 7px; font-size:12px; }
263
+ .comfy-confirm { padding:12px; margin-top:12px; border:1px solid var(--line); border-radius:9px; background:var(--tint); font-size:12px; }
264
+ .comfy-record { padding-block:12px; border-bottom:1px solid var(--line); }
265
+ .comfy-record dl { display:grid; grid-template-columns:minmax(80px,1fr) minmax(0,2fr); gap:5px 14px; margin:10px 0; font-size:12px; }
266
+ .comfy-record dt { color:var(--muted); overflow-wrap:anywhere; }.comfy-record dd { margin:0; overflow-wrap:anywhere; white-space:pre-wrap; }
267
+ @media(max-width:640px) { .comfy-slot { grid-template-columns:minmax(0,1fr) 72px; }.comfy-slot .mini-check { grid-column:1/-1; } }
268
+ @media(prefers-reduced-motion:reduce) { .comfy-studio::before { animation:none; } }
269
+ .image-drop { display:flex; align-items:center; gap:10px; position:relative; border:1px dashed var(--line); border-radius:9px; padding:10px; background:var(--soft); min-height:73px; cursor:pointer; overflow:hidden; }
270
+ .image-drop.dragging { border-color:var(--purple); background:var(--tint); }
271
+ .image-drop>span:nth-of-type(1) { min-width:0; flex:1; }
272
+ .image-drop strong { display:block; font-size:13px; font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
273
+ .image-drop small { display:block; font-size:12px; color:var(--muted); margin-top:3px; }
274
+ .image-drop img { width:44px; height:52px; object-fit:cover; border-radius:5px; }
275
+ .upload-arrow { font-size:24px; color:var(--purple); }
276
+ #creation-help { text-align:center; min-height:38px; } #creation-feedback { margin-top:12px; }
277
+ .composer-note { font-size:12px; color:var(--muted); margin:14px 18px 0; border-top:1px solid var(--line); padding-top:12px; }
278
+ .tool-details { border-block:1px solid var(--line); padding:3px 0; margin-top:14px; }
279
+ .tool-details small { font-size:12px; color:var(--muted); font-weight:400; margin-left:6px; }
280
+ .viewer { grid-column:1; grid-row:1; padding:0 16px 12px; min-width:0; overflow:hidden; }
281
+ .canvas-toolbar { display:flex; flex-wrap:wrap; align-items:center; gap:8px; min-height:66px; }
282
+ .canvas-label { font-size:13px; font-weight:550; margin-right:auto; }
283
+ .view-switch { display:inline-flex; gap:2px; max-width:100%; border:1px solid var(--line); background:var(--soft); border-radius:8px; padding:3px; }
284
+ .view-switch button { min-height:36px; padding:5px 10px; font-size:12px; background:transparent; color:var(--muted); }
285
+ .view-switch button[aria-pressed="true"] { background:var(--panel); color:var(--ink); border-color:var(--line); }
286
+ .viewer-empty { min-height:440px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px; text-align:center; padding:24px; border-radius:9px; background:var(--soft); }
287
+ .viewer-empty h2 { font-size:20px; } .viewer-empty p { max-width:290px; font-size:13px; }
288
+ .empty-mark { font-size:50px; color:var(--purple); font-weight:300; }
289
+ #draft-preview { width:100%; max-height:420px; object-fit:contain; }
290
+ .viewer-empty:has(#draft-preview:not([hidden]))>:not(img) { display:none; }
291
+ .image-pair { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
292
+ #run-view[data-has-output="false"] .image-pair { grid-template-columns:minmax(0,1fr); }
293
+ #run-view[data-has-output="false"] #output-card { display:none; }
294
+ .image-card { min-width:0; border:1px solid var(--line); border-radius:9px; overflow:hidden; background:var(--soft); }
295
+ .image-card.is-selected { border-color:var(--accent); }
296
+ figcaption { display:flex; justify-content:space-between; align-items:center; gap:6px; padding:9px 10px; font-size:12px; }
297
+ .selected-label { font-size:12px; color:var(--accent); }
298
+ .image-stage { display:grid; place-items:center; position:relative; min-height:0; height:clamp(230px,28vw,380px); width:100%; padding:10px; background:radial-gradient(#d9d9dc .7px,transparent .7px) 0 0/10px 10px #f5f5f6; border:0; color:#64646a; border-radius:0; cursor:zoom-in; }
299
+ .image-stage img { width:100%; height:100%; min-height:0; object-fit:contain; border-radius:3px; }
300
+ .image-stage span { font-size:12px; overflow-wrap:anywhere; font-weight:400; }
301
+ #run-view[data-has-output="false"] .image-stage { height:clamp(300px,32vw,430px); }
302
+ .image-dimensions { text-align:center; font-size:12px; color:var(--muted); min-height:25px; padding:2px 0 6px; }
303
+ .choice-button { width:100%; border:0; border-top:1px solid var(--line); color:var(--ink); background:var(--panel); border-radius:0; min-height:44px; font-size:13px; }
304
+ .choice-button[aria-pressed="true"] { color:var(--accent); background:var(--tint); }
305
+ .run-heading { margin-top:14px; padding:12px; background:var(--soft); border-radius:9px; display:flex; align-items:center; justify-content:space-between; gap:12px; }
306
+ .run-heading h2 { font-size:15px; } #status-message { margin-top:3px; font-size:13px; }
307
+ #run-view[data-tone="warning"] #status-title { color:var(--warning); }
308
+ .result-actions { display:flex; gap:14px; justify-content:space-between; align-items:center; margin:14px 0 8px; }
309
+ .result-actions p { font-size:12px; color:var(--muted); } .result-actions button { flex-shrink:0; font-size:13px; }
310
+ .reuse-actions { display:flex; justify-content:space-between; align-items:center; gap:8px; flex-wrap:wrap; }
311
+ .meta { font-size:12px; overflow-wrap:anywhere; }
312
+ .run-details { margin-top:9px; padding-top:5px; border-top:1px solid var(--line); }
313
+ #prompt { font-size:13px; white-space:pre-wrap; overflow-wrap:anywhere; max-height:180px; overflow:auto; margin-top:7px; }
314
+ dl { display:grid; grid-template-columns:74px minmax(0,1fr); gap:8px 12px; font-size:12px; margin:12px 0; }
315
+ dt { color:var(--muted); } dd { margin:0; overflow-wrap:anywhere; } .run-details>p { font-size:12px; }
316
+ .overlay-stage { position:relative; height:clamp(300px,33vw,430px); background:#f5f5f6; border-radius:9px; overflow:hidden; }
317
+ :root[data-theme="dark"] .image-stage,:root[data-theme="dark"] .overlay-stage { background-color:#262628; }
318
+ .overlay-stage img { position:absolute; inset:0; width:100%; height:100%; object-fit:contain; }
319
+ #overlay-output { clip-path:inset(0 0 0 var(--split,50%)); }
320
+ .overlay-view label { display:flex; gap:12px; align-items:center; font-size:12px; padding:12px 0 0; } #compare-split { min-width:0; flex:1; min-height:32px; }
321
+ .gallery-toolbar { display:flex; gap:10px; align-items:center; justify-content:space-between; margin-bottom:15px; }
322
+ .gallery-filters span { font-size:12px; }
323
+ .gallery-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:18px; }
324
+ .gallery-card { display:block; width:100%; text-align:left; padding:0; border:1px solid var(--line); border-radius:12px; overflow:hidden; color:var(--ink); background:var(--panel); }
325
+ .gallery-cover { display:grid; place-items:center; height:clamp(180px,19vw,280px); background:var(--soft); position:relative; }
326
+ .gallery-cover img { width:100%; height:100%; object-fit:cover; }
327
+ .gallery-cover>span { font-size:13px; font-weight:400; color:var(--muted); position:absolute; }
328
+ .gallery-info { padding:12px 14px; } .gallery-info strong { display:block; font-size:13px; font-weight:550; }
329
+ .gallery-info p { color:var(--muted); font-size:12px; margin-top:5px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
330
+ .empty-collection { border:1px dashed var(--line); text-align:center; padding:70px 24px; border-radius:12px; }
331
+ .empty-collection>span { font-size:44px; color:var(--purple); } .empty-collection p { font-size:13px; margin-top:8px; }
332
+ #gallery-feedback { font-size:13px; margin-bottom:12px; } #gallery-more { display:block; margin:22px auto; }
333
+ .connections-heading { margin:2px 0 22px; } .connections-heading h1 { font-size:25px; } .connections-heading p.muted { font-size:13px; margin-top:7px; }
334
+ .connections-workspace { display:block; }
335
+ .connection-sidebar { padding:12px; } .section-heading { display:flex; justify-content:space-between; align-items:center; gap:8px; margin-bottom:8px; }
336
+ #connections-list { display:grid; gap:5px; max-height:480px; overflow:auto; }
337
+ .connection-item { display:grid; gap:2px; text-align:left; color:var(--ink); background:transparent; padding:10px 12px; }
338
+ .connection-item strong { font-size:13px; font-weight:550; overflow-wrap:anywhere; }
339
+ .connection-item small { font-size:12px; color:var(--muted); font-weight:400; }
340
+ .connection-item[aria-current="true"] { background:var(--tint); border-color:var(--line); }
341
+ #connections-empty { font-size:13px; padding:12px; }
342
+ .connection-editor { padding:22px; } .connection-editor>.section-heading { margin-bottom:12px; }
343
+ .connection-guide { margin:0 0 18px; padding:12px 16px; border:1px solid var(--line); border-radius:12px; background:var(--panel); }
344
+ .connection-guide ol { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); list-style:none; padding:0; margin:0; gap:12px; }
345
+ .connection-guide li { display:grid; gap:3px; font-size:12px; color:var(--muted); }
346
+ .connection-guide strong { color:var(--ink); font-size:13px; font-weight:550; }
347
+ .connection-guide .field-note { margin:10px 0 0; overflow-wrap:anywhere; }
348
+ .connection-editor h3 { margin:18px 0 9px; } .connection-editor fieldset>label { font-size:13px; display:block; margin-bottom:7px; }
349
+ .media-options { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; }
350
+ .check-option { display:flex; gap:9px; align-items:center; font-size:13px; cursor:pointer; padding:10px; border:1px solid var(--line); border-radius:9px; min-width:0; min-height:44px; }
351
+ .check-option:has(input:checked) { background:var(--tint); border-color:var(--accent); }
352
+ .check-option:has(input:disabled):not(:has(input:checked)) { opacity:.65; cursor:default; }
353
+ .check-option input { width:15px; height:15px; margin:0; flex-shrink:0; } .check-option span { overflow-wrap:anywhere; min-width:0; }
354
+ .check-option small { font-size:12px; display:block; color:var(--muted); font-weight:400; }
355
+ .scope-options,.connection-form-actions,.export-options,.export-actions { display:flex; flex-wrap:wrap; gap:8px; }
356
+ .connection-form-actions { align-items:center; margin-top:18px; } .connection-form-actions span { font-size:12px; }
357
+ .connection-steps { flex-wrap:wrap; column-gap:16px; row-gap:2px; }.connection-steps button:last-child { margin-left:auto; }
358
+ .connection-draft-note { margin:-8px 0 18px; padding:10px 12px; background:var(--soft); border-radius:8px; color:var(--warning); }
359
+ .connection-grant-review { margin-top:20px; padding:12px 14px; border-radius:10px; background:var(--soft); }.connection-grant-review p { font-size:12px; overflow-wrap:anywhere; margin-top:4px; }
360
+ .connection-next { margin:20px 0 10px; padding-top:16px; border-top:1px solid var(--line); }
361
+ .connection-evidence { padding:0; margin:20px 0; list-style:none; display:grid; gap:12px; }.connection-evidence>li { display:grid; grid-template-columns:30px minmax(0,1fr); gap:12px; padding:16px; border:1px solid var(--line); border-radius:11px; }.connection-evidence-number { display:grid; place-items:center; align-self:start; width:28px; height:28px; border-radius:9px; color:var(--accent); background:var(--tint); font-size:12px; }.connection-evidence h3 { font-size:13px; margin:3px 0; }.connection-check-issues,.connection-client-evidence,.connection-check-tools { padding-left:16px; font-size:12px; overflow-wrap:anywhere; margin:8px 0; }.connection-check-issues { color:var(--warning); }.connection-check-tools { max-height:200px; overflow:auto; font-family:monospace; }.connection-evidence [data-state="passed"] { color:var(--accent); }.connection-evidence [data-state="limited"] { color:var(--warning); }
362
+ @media(max-width:640px) { .connection-steps { gap:2px 13px; }.connection-steps button:last-child { margin-left:0; }.connection-evidence>li { padding:12px; gap:9px; } }
363
+ #connection-tools { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:6px; padding:6px 0 12px; }
364
+ .connection-section { border-top:1px solid var(--line); margin-top:22px; padding-top:3px; }
365
+ .export-options { align-items:end; margin:13px 0; } .export-options label { font-size:12px; color:var(--muted); }
366
+ .export-options select { display:block; margin-top:5px; } .export-actions { margin-top:5px; gap:3px; }
367
+ .export-actions button { font-size:13px; }
368
+ #connection-configuration,#connection-skill-preview { width:100%; font:12px/1.7 ui-monospace,monospace; margin-top:10px; }
369
+ .template-choice { display:flex; flex-wrap:wrap; align-items:center; gap:10px; font-size:12px; color:var(--muted); margin:12px 0; }
370
+ .template-choice select { max-width:100%; min-width:0; } .skill-install-command { display:block; font-size:12px; line-height:1.7; overflow-wrap:anywhere; }
371
+ #connection-template-note { overflow-wrap:anywhere; } #connection-facts { padding:12px 0; border-bottom:1px solid var(--line); }
372
+ #connection-revoke-confirm,#connection-delete-confirm { padding:12px 0; font-size:13px; } button.danger { color:var(--error); }
373
+ dialog { border:1px solid var(--line); border-radius:13px; padding:18px; width:min(1000px,94vw); max-height:92dvh; background:var(--panel); color:var(--ink); }
374
+ dialog::backdrop { background:#111b15bb; } dialog img { width:100%; height:68dvh; object-fit:contain; }
375
+ .appearance-dialog { width:min(480px,94vw); padding:24px; }
376
+ .appearance-dialog select,.provider-editor input:not([type="checkbox"]),.provider-editor select { width:100%; }
377
+ .appearance-dialog input[type="range"] { width:100%; min-height:32px; }
378
+ .iris-swatch { height:5px; border-radius:4px; background:var(--iris-gradient); margin:18px 0 12px; }
379
+ .appearance-dialog .file-button { font-size:13px; margin:10px 0; }
380
+ .providers-workspace { display:block; }
381
+ .provider-sidebar { padding:14px; }
382
+ #providers-list { display:grid; }
383
+ #providers-panel [data-provider-tone="0"] { --provider-color:#45317D; }
384
+ #providers-panel [data-provider-tone="1"] { --provider-color:#6F69B8; }
385
+ #providers-panel [data-provider-tone="2"] { --provider-color:#BB78AD; }
386
+ #providers-panel [data-provider-tone="3"] { --provider-color:#E59B76; }
387
+ #providers-panel [data-provider-tone="4"] { --provider-color:#ED9C91; }
388
+ #providers-panel [data-provider-tone="5"] { --provider-color:#F0D09C; }
389
+ #providers-list .provider-item { background:color-mix(in srgb,var(--provider-color) 6%,var(--panel)); border-color:color-mix(in srgb,var(--provider-color) 12%,var(--panel)); }
390
+ #providers-list .provider-item:hover:not(:disabled) { background:color-mix(in srgb,var(--provider-color) 9%,var(--panel)); filter:none; }
391
+ #providers-list .provider-item[aria-current="true"] { background:color-mix(in srgb,var(--provider-color) 12%,var(--panel)); border-color:color-mix(in srgb,var(--provider-color) 30%,var(--panel)); box-shadow:inset 3px 0 color-mix(in srgb,var(--provider-color) 55%,var(--panel)); }
392
+ #providers-empty { font-size:13px; padding:12px 0; }
393
+ .provider-editor { position:relative; overflow:hidden; padding:22px 24px; background:linear-gradient(180deg,color-mix(in srgb,var(--provider-color,var(--accent)) 5%,var(--panel)),var(--panel)) 0 0/100% 140px no-repeat,var(--panel); box-shadow:inset 0 3px color-mix(in srgb,var(--provider-color,var(--accent)) 25%,var(--panel)); }
394
+ .provider-heading { display:flex; align-items:center; flex-wrap:wrap; gap:8px; min-width:0; }
395
+ .provider-mode-pill { display:inline-flex; align-items:center; gap:5px; padding:4px 8px; border:1px solid color-mix(in srgb,var(--purple) 28%,var(--line)); border-radius:20px; color:var(--ink); background:color-mix(in srgb,var(--purple) 9%,var(--panel)); font-size:11px; font-weight:550; white-space:nowrap; }
396
+ .provider-mode-pill>span { color:var(--purple); }
397
+ .provider-editor.comfy-mode::before { content:""; position:absolute; inset:0 0 auto; height:3px; background:var(--iris-gradient); pointer-events:none; }
398
+ .provider-editor.comfy-mode::after { content:""; position:absolute; top:0; left:0; width:80%; height:240px; background:var(--iris-gradient); filter:blur(22px); opacity:0; pointer-events:none; animation:comfy-provider-sweep 1.25s ease-out; }
399
+ @keyframes comfy-provider-sweep { 0% { transform:translateX(-120%) skewX(-18deg); opacity:0; } 25% { opacity:.24; } 100% { transform:translateX(160%) skewX(-18deg); opacity:0; } }
400
+ .provider-editor #provider-state { background:color-mix(in srgb,var(--provider-color,var(--accent)) 10%,var(--panel)); color:var(--ink); }
401
+ .provider-two-fields { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; }
402
+ .provider-enabled { display:flex; align-items:center; gap:8px; margin-top:16px; font-size:13px; }
403
+ .provider-section { margin-top:24px; }
404
+ .provider-section h3 { font-size:14px; }
405
+ .provider-model-add { display:flex; gap:8px; margin:12px 0; }
406
+ .provider-model-add input { flex:1; }
407
+ .provider-model-add button { flex-shrink:0; }
408
+ .provider-model { border:1px solid var(--line); border-radius:10px; padding:12px; margin-top:12px; }
409
+ .provider-model h3 { overflow-wrap:anywhere; font-size:13px; }
410
+ .model-capabilities { display:flex; flex-wrap:wrap; gap:6px 14px; }
411
+ .mini-check { display:flex; align-items:center; gap:6px; font-size:12px; min-height:32px; cursor:pointer; overflow-wrap:anywhere; }
412
+ .mini-check input { flex-shrink:0; accent-color:var(--accent); }
413
+ .model-routing { border-top:1px solid var(--line); margin-top:8px; }
414
+ .model-routing summary { min-height:34px; font-size:12px; color:var(--muted); }
415
+ .model-routing .field-label { display:block; font-size:12px; margin:8px 0; }
416
+ .model-routing select { display:block; margin-top:5px; }
417
+ .inline-button { min-height:26px; padding:0 3px; font-size:12px; font-weight:400; }
418
+ .field-label:has(.inline-button) { align-items:center; }
419
+ .model-management { display:flex; justify-content:end; margin-top:5px; }
420
+ .function-policy { padding:12px 0; border-top:1px solid var(--line); }
421
+ .function-policy select { width:auto; min-height:36px; padding:5px 9px; font-size:12px; }
422
+ .provider-save-area { position:relative; border-top:1px solid var(--line); margin-top:22px; padding-top:12px; }
423
+ .provider-save-area::before { content:""; width:72px; height:3px; border-radius:3px; position:absolute; top:-2px; background:var(--iris-gradient); }
424
+ #provider-save { margin-top:16px; margin-right:10px; }
425
+ #provider-save-note { display:inline-block; }
426
+ .management-heading,.connections-workspace,.providers-workspace,#providers-feedback,#connections-feedback,#providers-reload-confirm { max-width:1120px; margin-left:auto; margin-right:auto; }
427
+ .management-heading { margin-bottom:26px; align-items:center; }
428
+ .management-heading h1 { font-size:24px; font-weight:600; letter-spacing:-.5px; }
429
+ .management-heading h1 .count { vertical-align:middle; margin-left:5px; }
430
+ .page-actions { display:flex; align-items:center; gap:6px; flex-shrink:0; }
431
+ .page-actions .secondary { background:var(--accent); color:var(--on-accent); border-color:transparent; }
432
+ #connections-list.service-grid,#providers-list.service-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(min(100%,285px),1fr)); gap:14px; max-height:none; overflow:visible; }
433
+ .service-card { display:flex; flex-direction:column; gap:8px; width:100%; min-height:195px; padding:20px; text-align:left; border:1px solid var(--line); border-radius:12px; color:var(--ink); background:var(--panel); font-weight:400; }
434
+ .service-card:hover:not(:disabled) { border-color:color-mix(in srgb,var(--accent) 40%,var(--line)); filter:none; box-shadow:0 4px 18px #302a3d08; }
435
+ .service-card[aria-current="true"] { border-color:color-mix(in srgb,var(--accent) 35%,var(--line)); background:var(--panel); }
436
+ .service-card-heading { display:flex; width:100%; align-items:center; justify-content:space-between; gap:10px; margin-bottom:3px; }
437
+ .service-mark { display:grid; place-items:center; min-width:38px; height:34px; border:1px solid var(--line); border-radius:8px; font:600 11px/1 ui-monospace,monospace; letter-spacing:.2px; background:var(--panel); color:var(--accent); }
438
+ .service-card strong { font-size:16px; font-weight:600; line-height:1.45; overflow-wrap:anywhere; }
439
+ .service-status { font-size:11px; font-weight:400; color:var(--muted); }
440
+ .service-endpoint { max-width:100%; font-size:12px; color:var(--muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
441
+ .service-meta { font-size:12px; color:var(--muted); }
442
+ .service-action { margin-top:auto; padding-top:8px; font-size:12px; color:var(--accent); }
443
+ .management-empty { min-height:325px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px; text-align:center; border:1px dashed var(--line); border-radius:14px; padding:30px 20px; background:var(--panel); }
444
+ .management-empty h2 { font-size:18px; font-weight:550; } .management-empty p { color:var(--muted); font-size:13px; max-width:360px; }
445
+ .empty-mark { display:grid; place-items:center; width:56px; height:56px; border-radius:14px; background:var(--tint); color:var(--accent); font:600 13px ui-monospace,monospace; margin-bottom:4px; }
446
+ .management-help { margin:20px 0; padding:0 4px; max-width:680px; }
447
+ .management-help summary { color:var(--muted); font-weight:400; font-size:12px; }
448
+ .management-help .connection-guide { margin:6px 0 0; }
449
+ .management-editor { max-width:840px; margin:0 auto; padding:24px 28px; }
450
+ .editor-heading { margin-bottom:18px; } .editor-heading>.section-heading { margin:12px 0 0; }
451
+ .back-button { min-height:30px; padding:3px 0; font-size:12px; font-weight:400; color:var(--muted)!important; }
452
+ .editor-tabs { display:flex; gap:18px; border-bottom:1px solid var(--line); margin-bottom:22px; }
453
+ .editor-tabs button { position:relative; min-height:40px; padding:8px 1px; border-radius:0; background:transparent; color:var(--muted); font-size:13px; font-weight:400; }
454
+ .editor-tabs button[aria-pressed="true"] { color:var(--ink); font-weight:550; }
455
+ .editor-tabs button[aria-pressed="true"]::after { content:""; position:absolute; bottom:-1px; left:0; right:0; height:2px; background:var(--accent); }
456
+ .management-editor .connection-section { margin-top:0; padding-top:0; border-top:0; }
457
+ .management-editor .provider-section { margin-top:0; }
458
+ .management-editor input:not([type="checkbox"]):not([type="file"]),.management-editor select { min-height:38px; }
459
+ .management-editor .field-label:first-child { margin-top:0; }
460
+ .management-editor .provider-two-fields { margin-top:16px; }
461
+ .management-editor .provider-save-area { padding:12px 0 0; }
462
+ .management-editor #provider-save-note { display:none; }
463
+ .inline-confirm { padding:12px 14px; margin-bottom:16px; border:1px solid var(--line); border-radius:8px; background:var(--soft); font-size:13px; }
464
+ #connection-view-settings #connection-name { width:100%; }
465
+ #connection-future { margin-top:10px; } #connection-future .media-options { padding-bottom:12px; }
466
+ #provider-directory { padding:12px; border-radius:9px; background:var(--soft); }
467
+ #provider-directory-list { max-height:235px; overflow:auto; margin-top:8px; }
468
+ .directory-item { display:flex; align-items:center; justify-content:space-between; gap:8px; font-size:12px; border-bottom:1px solid var(--line); }
469
+ .directory-item span { overflow-wrap:anywhere; min-width:0; }
470
+ .directory-item button { flex-shrink:0; font-size:12px; }
471
+ #providers-feedback { padding:10px 14px; margin-bottom:16px; border-radius:8px; background:var(--tint); overflow-wrap:anywhere; font-size:13px; }
472
+ .reload-confirm { padding:14px; margin-bottom:16px; font-size:13px; }
473
+ .reload-confirm p { margin-bottom:8px; }
474
+ :root[data-density="compact"] .site-header { min-height:50px; }
475
+ :root[data-density="compact"] main { padding-top:16px; }
476
+ :root[data-density="compact"] .page-heading { margin-bottom:14px; }
477
+ :root[data-density="compact"] .provider-editor { padding:16px 18px; }
478
+ :root[data-density="compact"] .field-label { margin-top:12px; }
479
+ :root[data-density="compact"] .provider-model { margin-top:8px; padding:10px; }
480
+ :root[data-density="compact"] .composer>summary { min-height:52px; }
481
+ footer { display:flex; justify-content:space-between; gap:12px; padding:24px 0; font-size:12px; color:var(--muted); }
482
+ @media (max-width:1100px) {
483
+ .app-shell { grid-template-columns:174px minmax(0,1fr); } main { padding:20px 20px 0; } .site-header { padding-inline:20px; }
484
+ .studio-grid { grid-template-columns:minmax(0,1fr) 288px; gap:14px; } .viewer { padding-inline:12px; }
485
+ .canvas-toolbar { gap:3px; } .canvas-label { flex-basis:100%; padding-top:10px; }
486
+ .gallery-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
487
+ }
488
+ @media (max-width:850px) {
489
+ .app-shell { grid-template-columns:minmax(0,1fr); grid-template-rows:auto 1fr; }
490
+ .app-sidebar { position:static; height:auto; border-right:0; border-bottom:1px solid var(--line); padding:12px 16px; flex-direction:row; gap:16px; flex-wrap:wrap; align-items:center; }
491
+ .brand { font-size:25px; padding:0; } .brand img { width:26px; height:26px; } .sidebar-label,.sidebar-bottom { display:none; }
492
+ .workspace-nav { display:flex; flex:1; justify-content:end; gap:3px; }
493
+ .nav-item { width:auto; justify-content:center; padding:8px 12px; }
494
+ .nav-item>span:first-child { display:none; }
495
+ .workspace-nav { flex-wrap:wrap; }
496
+ .recent-panel { width:100%; margin:0; } .recent-panel:not([open]) { max-height:44px; } #history-list { max-height:190px; overflow:auto; }
497
+ body[data-page="overview"] .recent-panel,body[data-page="connections"] .recent-panel,body[data-page="providers"] .recent-panel,body[data-page="plugins"] .recent-panel { display:none; }
498
+ .site-header { min-height:54px; } .breadcrumb { font-size:12px; }
499
+ }
500
+ @media (max-width:640px) {
501
+ .app-sidebar { gap:8px; padding:8px 14px; }
502
+ .brand>span,.nav-item svg { display:none; } .brand img { width:24px; height:24px; }
503
+ .workspace-nav { flex-wrap:wrap; gap:2px; min-width:0; }
504
+ .nav-item { font-size:12px; padding:6px 7px; gap:4px; white-space:nowrap; }
505
+ main { padding:18px 14px 0; } .site-header { padding:6px 14px; gap:6px; } .header-actions { gap:0; }
506
+ .header-actions button { padding-inline:9px; font-size:12px; } .badge { padding:4px 7px; }
507
+ .breadcrumb>span { padding:0 4px; } .page-heading { margin-bottom:16px; gap:12px; } h1 { font-size:23px; }
508
+ .page-heading p.muted { font-size:12px; } .page-heading button { font-size:12px; padding-inline:10px; }
509
+ .studio-grid { grid-template-columns:minmax(0,1fr); gap:14px; }
510
+ .composer { grid-column:1; grid-row:1; } .viewer { grid-column:1; grid-row:2; padding:0 12px 12px; }
511
+ .composer>summary { min-height:54px; padding:9px 16px; } #edit-form { padding-inline:16px; }
512
+ .canvas-toolbar { gap:6px; min-height:60px; } .canvas-label { flex-basis:auto; padding:0; font-size:12px; }
513
+ .viewer-empty { min-height:290px; } .viewer-empty h2 { font-size:18px; }
514
+ .image-pair { gap:8px; } .image-stage { height:240px; padding:5px; }
515
+ #run-view[data-has-output="false"] .image-stage { height:300px; } figcaption { padding:8px; gap:3px; }
516
+ .run-heading { flex-wrap:wrap; } .run-heading h2 { font-size:14px; } #status-message { font-size:12px; }
517
+ .result-actions { flex-wrap:wrap; gap:10px; } .result-actions p { width:100%; } .result-actions button { width:100%; }
518
+ .reuse-actions { gap:3px; } .reuse-actions .quiet { padding-inline:0; }
519
+ .gallery-grid { gap:12px; } .gallery-cover { height:190px; } .gallery-info { padding:10px; }
520
+ .gallery-toolbar { align-items:start; gap:5px; } #gallery-filters button { padding-inline:8px; }
521
+ .management-heading { gap:12px; align-items:flex-start; flex-direction:column; margin-bottom:20px; }
522
+ .management-heading h1 { font-size:22px; } .page-actions { align-self:stretch; justify-content:flex-end; }
523
+ .page-actions button { min-height:44px; } .management-editor { padding:18px 16px; }
524
+ .management-empty { min-height:260px; } .service-card { min-height:180px; padding:18px; }
525
+ .editor-tabs { gap:14px; } .editor-tabs button { min-height:44px; font-size:12px; }
526
+ .back-button { min-height:44px; } .management-editor input:not([type="checkbox"]):not([type="file"]),.management-editor select { min-height:44px; }
527
+ .connection-editor { padding:18px 16px; } .connections-heading h1 { font-size:23px; }
528
+ .connection-guide ol { grid-template-columns:1fr; gap:9px; } .connection-guide li { grid-template-columns:115px 1fr; align-items:baseline; gap:6px; }
529
+ .check-option { padding:8px; gap:6px; } .media-options { gap:6px; } .connection-form-actions { align-items:start; flex-direction:column; }
530
+ .connection-form-actions button { width:100%; } .connection { padding:26px 22px; margin-top:4vh; }
531
+ .connection h1 { font-size:25px; } footer span { display:none; }
532
+ .provider-editor { padding:18px 16px; }
533
+ .provider-two-fields { gap:10px; }
534
+ .provider-save-area>button { width:100%; }
535
+ .appearance-dialog { padding:20px; }
536
+ .site-header { flex-wrap:wrap; }
537
+ }
538
+ @media (max-width:520px) {
539
+ .provider-credentials-fields { grid-template-columns:1fr; }
540
+ }
541
+ @media (max-width:360px) {
542
+ .app-sidebar { gap:10px; padding-inline:14px; } .nav-item { padding-inline:9px; }
543
+ .brand { font-size:23px; } .site-header .breadcrumb { display:none; } .header-actions { width:100%; justify-content:end; }
544
+ .gallery-grid { grid-template-columns:minmax(0,1fr); } .gallery-cover { height:260px; }
545
+ .image-pair { grid-template-columns:minmax(0,1fr); } .image-stage { height:260px; }
546
+ .token-row { flex-wrap:wrap; } .token-row button { width:100%; }
547
+ .page-heading { align-items:start; flex-direction:column; gap:10px; }
548
+ }
549
+ @media (prefers-reduced-motion:reduce) { *,*::before,*::after { animation:none!important; scroll-behavior:auto!important; } }
550
+ /* Generation shares the canvas, with no empty source or comparison column. */
551
+ .creation-modes { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); margin-bottom:12px }
552
+ .creation-modes button { flex:1 }
553
+ #run-view[data-recipe="image-generate/v0"] .image-pair { grid-template-columns:minmax(0,1fr) }
554
+ /* Audio keeps the same workspace, with native controls and a quiet Iris accent. */
555
+ audio { display:block; width:100%; max-width:100%; min-width:0; margin-block:10px; }
556
+ .audio-result { margin:4px 0 22px; padding:clamp(16px,3vw,30px); border:1px solid var(--line); border-radius:12px; background:var(--panel); }
557
+ .audio-result-header { display:flex; align-items:center; gap:16px; margin-bottom:24px; }
558
+ .audio-result-header h3 { font-size:20px; font-weight:600; }
559
+ .audio-result-icon { display:grid; place-items:center; flex-shrink:0; width:62px; height:62px; color:var(--accent); background:var(--tint); border-radius:17px; font:36px Georgia,serif; }
560
+ .audio-result .field-label { margin-top:20px; }
561
+ .transcript-result { max-height:420px; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere; font:inherit; line-height:1.9; padding:18px; border:1px solid var(--line); border-radius:10px; background:var(--soft); }
562
+ .gallery-types { display:inline-flex; margin-bottom:18px; }
563
+ .gallery-audio-cover { height:138px; display:flex; align-items:center; justify-content:center; flex-direction:column; gap:6px; color:var(--accent); background:var(--tint); }
564
+ .gallery-audio-icon { font:40px Georgia,serif; }
565
+ .gallery-audio .export-actions { margin-top:12px; gap:4px; }
566
+ .gallery-audio .export-actions button { padding-inline:9px; font-size:12px; }
567
+ .gallery-audio .field-note { white-space:normal; }
568
+ @media(max-width:480px) { .audio-result-header { gap:12px; } .audio-result-header h3 { font-size:17px; } .audio-result-icon { width:48px; height:48px; } .transcript-result { padding:12px; } }
569
+ .video-result { padding: clamp(16px, 3vw, 28px); }
570
+ .video-result video, .gallery-audio video { display: block; width: 100%; max-height: 65vh; margin-block: 16px; border-radius: 16px; background: #16141c; object-fit: contain; }
571
+ .video-result video[hidden], .gallery-audio video[hidden] { display: none; }