synthos 0.7.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/README.md +215 -65
  2. package/default-pages/application/page.html +42 -0
  3. package/default-pages/application/page.json +10 -0
  4. package/default-pages/elevenlabs_effects_studio/page.html +1363 -0
  5. package/default-pages/elevenlabs_effects_studio/page.json +11 -0
  6. package/default-pages/elevenlabs_voice_studio/page.html +801 -0
  7. package/default-pages/elevenlabs_voice_studio/page.json +11 -0
  8. package/default-pages/{json_tools.html → json_tools/page.html} +13 -11
  9. package/default-pages/json_tools/page.json +10 -0
  10. package/default-pages/my_notes/notes/a1b2c3d4-e5f6-7890-abcd-ef1234567890.json +5 -0
  11. package/default-pages/my_notes/page.html +132 -0
  12. package/default-pages/{my_notes.json → my_notes/page.json} +2 -2
  13. package/default-pages/neon_asteroids/files/Ambient_Space.mp3 +0 -0
  14. package/default-pages/neon_asteroids/files/Ambient_Space2.mp3 +0 -0
  15. package/default-pages/neon_asteroids/files/Ambient_Space3.mp3 +0 -0
  16. package/default-pages/neon_asteroids/files/Asteroid_Explosion.mp3 +0 -0
  17. package/default-pages/neon_asteroids/files/Hyperspace_Jump.mp3 +0 -0
  18. package/default-pages/neon_asteroids/files/Laser_Fire.mp3 +0 -0
  19. package/default-pages/neon_asteroids/files/Menu_Navigate.mp3 +0 -0
  20. package/default-pages/neon_asteroids/files/Power_Up_Collect.mp3 +0 -0
  21. package/default-pages/neon_asteroids/files/Saucer_Alert.mp3 +0 -0
  22. package/default-pages/neon_asteroids/files/Ship_Thrust.mp3 +0 -0
  23. package/default-pages/neon_asteroids/files/effects.json +74 -0
  24. package/default-pages/neon_asteroids/page.html +1822 -0
  25. package/default-pages/{neon_asteroids.json → neon_asteroids/page.json} +3 -3
  26. package/default-pages/oregon_trail/page.html +323 -0
  27. package/default-pages/oregon_trail/page.json +12 -0
  28. package/default-pages/retro_game_starter/page.html +1308 -0
  29. package/default-pages/retro_game_starter/page.json +12 -0
  30. package/default-pages/{sidebar_builder.html → sidebar_page/page.html} +12 -10
  31. package/default-pages/sidebar_page/page.json +10 -0
  32. package/default-pages/{solar_explorer.html → solar_explorer/page.html} +24 -29
  33. package/default-pages/{solar_explorer.json → solar_explorer/page.json} +4 -4
  34. package/default-pages/{solar_tutorial.html → solar_tutorial/page.html} +12 -10
  35. package/default-pages/solar_tutorial/page.json +10 -0
  36. package/default-pages/{two-panel_builder.html → two-panel_page/page.html} +13 -11
  37. package/default-pages/two-panel_page/page.json +10 -0
  38. package/default-pages/us_map/page.html +193 -0
  39. package/default-pages/us_map/page.json +12 -0
  40. package/default-pages/us_map_1850/page.html +326 -0
  41. package/default-pages/us_map_1850/page.json +12 -0
  42. package/default-pages/western_cities_1850/page.html +527 -0
  43. package/default-pages/western_cities_1850/page.json +12 -0
  44. package/default-themes/aurora-dawn.json +19 -0
  45. package/default-themes/aurora-dawn.v3.css +198 -0
  46. package/default-themes/aurora-dusk.json +19 -0
  47. package/default-themes/aurora-dusk.v3.css +200 -0
  48. package/default-themes/cosmos-dawn.json +19 -0
  49. package/default-themes/cosmos-dawn.v3.css +198 -0
  50. package/default-themes/cosmos-dusk.json +19 -0
  51. package/default-themes/cosmos-dusk.v3.css +200 -0
  52. package/default-themes/high-contrast-dark.json +19 -0
  53. package/default-themes/high-contrast-dark.v3.css +200 -0
  54. package/default-themes/high-contrast-light.json +19 -0
  55. package/default-themes/high-contrast-light.v3.css +198 -0
  56. package/default-themes/{nebula-dawn.css → nebula-dawn.v2.css} +134 -0
  57. package/default-themes/nebula-dawn.v3.css +199 -0
  58. package/default-themes/{nebula-dusk.css → nebula-dusk.v2.css} +128 -0
  59. package/default-themes/nebula-dusk.v3.css +201 -0
  60. package/default-themes/solar-flare-dawn.json +19 -0
  61. package/default-themes/solar-flare-dawn.v3.css +198 -0
  62. package/default-themes/solar-flare-dusk.json +19 -0
  63. package/default-themes/solar-flare-dusk.v3.css +200 -0
  64. package/dist/agents/a2a/a2aProvider.d.ts.map +1 -0
  65. package/dist/agents/a2a/a2aProvider.js +126 -0
  66. package/dist/agents/a2a/a2aProvider.js.map +1 -0
  67. package/dist/agents/discovery.d.ts.map +1 -0
  68. package/dist/agents/discovery.js +52 -0
  69. package/dist/agents/discovery.js.map +1 -0
  70. package/dist/agents/index.d.ts +7 -0
  71. package/dist/agents/index.d.ts.map +1 -0
  72. package/dist/agents/index.js +20 -0
  73. package/dist/agents/index.js.map +1 -0
  74. package/dist/agents/openclaw/gatewayManager.d.ts +117 -0
  75. package/dist/agents/openclaw/gatewayManager.d.ts.map +1 -0
  76. package/dist/agents/openclaw/gatewayManager.js +486 -0
  77. package/dist/agents/openclaw/gatewayManager.js.map +1 -0
  78. package/dist/agents/openclaw/openclawProvider.d.ts.map +1 -0
  79. package/dist/agents/openclaw/openclawProvider.js +237 -0
  80. package/dist/agents/openclaw/openclawProvider.js.map +1 -0
  81. package/dist/agents/openclaw/sshTunnelManager.d.ts +25 -0
  82. package/dist/agents/openclaw/sshTunnelManager.d.ts.map +1 -0
  83. package/dist/agents/openclaw/sshTunnelManager.js +359 -0
  84. package/dist/agents/openclaw/sshTunnelManager.js.map +1 -0
  85. package/dist/agents/types.d.ts.map +1 -0
  86. package/dist/agents/types.js +6 -0
  87. package/dist/agents/types.js.map +1 -0
  88. package/dist/builders/anthropic.d.ts +31 -0
  89. package/dist/builders/anthropic.d.ts.map +1 -0
  90. package/dist/builders/anthropic.js +227 -0
  91. package/dist/builders/anthropic.js.map +1 -0
  92. package/dist/builders/fireworksai.d.ts +9 -0
  93. package/dist/builders/fireworksai.d.ts.map +1 -0
  94. package/dist/builders/fireworksai.js +57 -0
  95. package/dist/builders/fireworksai.js.map +1 -0
  96. package/dist/builders/index.d.ts +13 -0
  97. package/dist/builders/index.d.ts.map +1 -0
  98. package/dist/builders/index.js +31 -0
  99. package/dist/builders/index.js.map +1 -0
  100. package/dist/builders/openai.d.ts +8 -0
  101. package/dist/builders/openai.d.ts.map +1 -0
  102. package/dist/builders/openai.js +87 -0
  103. package/dist/builders/openai.js.map +1 -0
  104. package/dist/builders/types.d.ts +54 -0
  105. package/dist/builders/types.d.ts.map +1 -0
  106. package/dist/builders/types.js +211 -0
  107. package/dist/builders/types.js.map +1 -0
  108. package/dist/connectors/index.d.ts.map +1 -1
  109. package/dist/connectors/index.js +3 -2
  110. package/dist/connectors/index.js.map +1 -1
  111. package/dist/connectors/registry.d.ts +2 -1
  112. package/dist/connectors/registry.d.ts.map +1 -1
  113. package/dist/connectors/registry.js +65 -96
  114. package/dist/connectors/registry.js.map +1 -1
  115. package/dist/connectors/types.d.ts.map +1 -1
  116. package/dist/customizer/Customizer.d.ts +57 -0
  117. package/dist/customizer/Customizer.d.ts.map +1 -0
  118. package/dist/customizer/Customizer.js +124 -0
  119. package/dist/customizer/Customizer.js.map +1 -0
  120. package/dist/customizer/index.d.ts.map +1 -0
  121. package/dist/customizer/index.js +9 -0
  122. package/dist/customizer/index.js.map +1 -0
  123. package/dist/files.d.ts +17 -0
  124. package/dist/files.d.ts.map +1 -1
  125. package/dist/files.js +75 -1
  126. package/dist/files.js.map +1 -1
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +1 -0
  129. package/dist/index.js.map +1 -1
  130. package/dist/init.d.ts +10 -6
  131. package/dist/init.d.ts.map +1 -1
  132. package/dist/init.js +97 -86
  133. package/dist/init.js.map +1 -1
  134. package/dist/migrations.d.ts.map +1 -1
  135. package/dist/migrations.js +142 -145
  136. package/dist/migrations.js.map +1 -1
  137. package/dist/models/anthropic.d.ts +24 -0
  138. package/dist/models/anthropic.d.ts.map +1 -0
  139. package/dist/models/anthropic.js +103 -0
  140. package/dist/models/anthropic.js.map +1 -0
  141. package/dist/models/chainOfThought.d.ts.map +1 -0
  142. package/dist/models/chainOfThought.js +45 -0
  143. package/dist/models/chainOfThought.js.map +1 -0
  144. package/dist/models/fireworksai.d.ts.map +1 -0
  145. package/dist/models/fireworksai.js +141 -0
  146. package/dist/models/fireworksai.js.map +1 -0
  147. package/dist/models/index.d.ts +7 -1
  148. package/dist/models/index.d.ts.map +1 -1
  149. package/dist/models/index.js +20 -1
  150. package/dist/models/index.js.map +1 -1
  151. package/dist/models/logCompletePrompt.d.ts.map +1 -0
  152. package/dist/models/logCompletePrompt.js +23 -0
  153. package/dist/models/logCompletePrompt.js.map +1 -0
  154. package/dist/models/openai.d.ts +24 -0
  155. package/dist/models/openai.d.ts.map +1 -0
  156. package/dist/models/openai.js +101 -0
  157. package/dist/models/openai.js.map +1 -0
  158. package/dist/models/providers.d.ts.map +1 -1
  159. package/dist/models/providers.js +12 -4
  160. package/dist/models/providers.js.map +1 -1
  161. package/dist/models/types.d.ts +53 -2
  162. package/dist/models/types.d.ts.map +1 -1
  163. package/dist/models/types.js +21 -0
  164. package/dist/models/types.js.map +1 -1
  165. package/dist/models/utils.d.ts.map +1 -0
  166. package/dist/models/utils.js +21 -0
  167. package/dist/models/utils.js.map +1 -0
  168. package/dist/pages.d.ts +30 -7
  169. package/dist/pages.d.ts.map +1 -1
  170. package/dist/pages.js +177 -55
  171. package/dist/pages.js.map +1 -1
  172. package/dist/scripts.d.ts.map +1 -1
  173. package/dist/scripts.js +4 -3
  174. package/dist/scripts.js.map +1 -1
  175. package/dist/service/createCompletePrompt.d.ts.map +1 -1
  176. package/dist/service/createCompletePrompt.js +9 -6
  177. package/dist/service/createCompletePrompt.js.map +1 -1
  178. package/dist/service/generateImage.d.ts.map +1 -1
  179. package/dist/service/generateImage.js +3 -3
  180. package/dist/service/generateImage.js.map +1 -1
  181. package/dist/service/server.d.ts.map +1 -1
  182. package/dist/service/server.js +39 -7
  183. package/dist/service/server.js.map +1 -1
  184. package/dist/service/transformPage.d.ts +47 -18
  185. package/dist/service/transformPage.d.ts.map +1 -1
  186. package/dist/service/transformPage.js +559 -270
  187. package/dist/service/transformPage.js.map +1 -1
  188. package/dist/service/useAgentRoutes.d.ts +5 -0
  189. package/dist/service/useAgentRoutes.d.ts.map +1 -0
  190. package/dist/service/useAgentRoutes.js +392 -0
  191. package/dist/service/useAgentRoutes.js.map +1 -0
  192. package/dist/service/useApiRoutes.d.ts.map +1 -1
  193. package/dist/service/useApiRoutes.js +380 -138
  194. package/dist/service/useApiRoutes.js.map +1 -1
  195. package/dist/service/useConnectorRoutes.d.ts.map +1 -1
  196. package/dist/service/useConnectorRoutes.js +20 -9
  197. package/dist/service/useConnectorRoutes.js.map +1 -1
  198. package/dist/service/useFileRoutes.d.ts +4 -0
  199. package/dist/service/useFileRoutes.d.ts.map +1 -0
  200. package/dist/service/useFileRoutes.js +122 -0
  201. package/dist/service/useFileRoutes.js.map +1 -0
  202. package/dist/service/usePageRoutes.d.ts.map +1 -1
  203. package/dist/service/usePageRoutes.js +660 -68
  204. package/dist/service/usePageRoutes.js.map +1 -1
  205. package/dist/service/useSharedDataRoutes.d.ts +4 -0
  206. package/dist/service/useSharedDataRoutes.d.ts.map +1 -0
  207. package/dist/service/useSharedDataRoutes.js +104 -0
  208. package/dist/service/useSharedDataRoutes.js.map +1 -0
  209. package/dist/service/useSharedFileRoutes.d.ts +4 -0
  210. package/dist/service/useSharedFileRoutes.d.ts.map +1 -0
  211. package/dist/service/useSharedFileRoutes.js +121 -0
  212. package/dist/service/useSharedFileRoutes.js.map +1 -0
  213. package/dist/settings.d.ts +3 -1
  214. package/dist/settings.d.ts.map +1 -1
  215. package/dist/settings.js +5 -8
  216. package/dist/settings.js.map +1 -1
  217. package/dist/synthos-cli.d.ts.map +1 -1
  218. package/dist/synthos-cli.js +4 -3
  219. package/dist/synthos-cli.js.map +1 -1
  220. package/dist/themes.d.ts +15 -0
  221. package/dist/themes.d.ts.map +1 -1
  222. package/dist/themes.js +106 -20
  223. package/dist/themes.js.map +1 -1
  224. package/migration-rules/v1-to-v2.md +193 -0
  225. package/migration-rules/v2-to-v3.md +481 -0
  226. package/package.json +15 -11
  227. package/required-pages/builder/page.html +43 -0
  228. package/required-pages/builder/page.json +10 -0
  229. package/required-pages/pages/page.html +924 -0
  230. package/required-pages/pages/page.json +10 -0
  231. package/required-pages/settings/page.html +1753 -0
  232. package/required-pages/settings/page.json +10 -0
  233. package/required-pages/synthos_apis/page.html +846 -0
  234. package/required-pages/synthos_apis/page.json +10 -0
  235. package/required-pages/{synthos_scripts.html → synthos_scripts/page.html} +13 -11
  236. package/required-pages/synthos_scripts/page.json +10 -0
  237. package/service-connectors/airtable/connector.json +27 -0
  238. package/service-connectors/alpha-vantage/connector.json +26 -0
  239. package/service-connectors/brave-search/connector.json +26 -0
  240. package/service-connectors/cloudinary/connector.json +27 -0
  241. package/service-connectors/deepl/connector.json +28 -0
  242. package/service-connectors/elevenlabs/connector.json +30 -0
  243. package/service-connectors/giphy/connector.json +27 -0
  244. package/service-connectors/github/connector.json +29 -0
  245. package/service-connectors/huggingface/connector.json +27 -0
  246. package/service-connectors/imgur/connector.json +29 -0
  247. package/service-connectors/instagram/connector.json +43 -0
  248. package/service-connectors/jira/connector.json +28 -0
  249. package/service-connectors/mapbox/connector.json +26 -0
  250. package/service-connectors/nasa/connector.json +27 -0
  251. package/service-connectors/newsapi/connector.json +27 -0
  252. package/service-connectors/notion/connector.json +28 -0
  253. package/service-connectors/open-exchange-rates/connector.json +27 -0
  254. package/service-connectors/openweathermap/connector.json +26 -0
  255. package/service-connectors/pexels/connector.json +27 -0
  256. package/service-connectors/resend/connector.json +29 -0
  257. package/service-connectors/rss2json/connector.json +27 -0
  258. package/service-connectors/sendgrid/connector.json +27 -0
  259. package/service-connectors/spoonacular/connector.json +28 -0
  260. package/service-connectors/stability-ai/connector.json +27 -0
  261. package/service-connectors/twilio/connector.json +28 -0
  262. package/service-connectors/unsplash/connector.json +27 -0
  263. package/service-connectors/wolfram-alpha/connector.json +26 -0
  264. package/service-connectors/youtube-data/connector.json +30 -0
  265. package/src/agents/a2a/a2aProvider.ts +110 -0
  266. package/src/agents/discovery.ts +74 -0
  267. package/src/agents/index.ts +6 -0
  268. package/src/agents/openclaw/gatewayManager.ts +570 -0
  269. package/src/agents/openclaw/openclawProvider.ts +259 -0
  270. package/src/agents/openclaw/sshTunnelManager.ts +393 -0
  271. package/src/agents/types.ts +82 -0
  272. package/src/builders/anthropic.ts +283 -0
  273. package/src/builders/fireworksai.ts +59 -0
  274. package/src/builders/index.ts +33 -0
  275. package/src/builders/openai.ts +89 -0
  276. package/src/builders/types.ts +261 -0
  277. package/src/connectors/index.ts +3 -1
  278. package/src/connectors/registry.ts +40 -96
  279. package/src/connectors/types.ts +25 -0
  280. package/src/customizer/Customizer.ts +151 -0
  281. package/src/customizer/index.ts +5 -0
  282. package/src/files.ts +71 -0
  283. package/src/index.ts +2 -1
  284. package/src/init.ts +138 -97
  285. package/src/migrations.ts +148 -145
  286. package/src/models/anthropic.ts +119 -0
  287. package/src/models/chainOfThought.ts +56 -0
  288. package/src/models/fireworksai.ts +143 -0
  289. package/src/models/index.ts +7 -1
  290. package/src/models/logCompletePrompt.ts +25 -0
  291. package/src/models/openai.ts +110 -0
  292. package/src/models/providers.ts +12 -3
  293. package/src/models/types.ts +97 -2
  294. package/src/models/utils.ts +16 -0
  295. package/src/pages.ts +176 -54
  296. package/src/scripts.ts +2 -2
  297. package/src/service/createCompletePrompt.ts +3 -1
  298. package/src/service/generateImage.ts +2 -2
  299. package/src/service/server.ts +39 -8
  300. package/src/service/transformPage.ts +605 -301
  301. package/src/service/useAgentRoutes.ts +428 -0
  302. package/src/service/useApiRoutes.ts +309 -45
  303. package/src/service/useConnectorRoutes.ts +21 -10
  304. package/src/service/useFileRoutes.ts +127 -0
  305. package/src/service/usePageRoutes.ts +736 -75
  306. package/src/service/useSharedDataRoutes.ts +106 -0
  307. package/src/service/useSharedFileRoutes.ts +126 -0
  308. package/src/settings.ts +8 -10
  309. package/src/synthos-cli.ts +4 -3
  310. package/src/themes.ts +103 -20
  311. package/static-files/favicon.svg +12 -0
  312. package/static-files/fluentlm-instructions.llmd +868 -0
  313. package/static-files/fluentlm-instructions.md +1595 -0
  314. package/static-files/fluentlm.css +4844 -0
  315. package/static-files/fluentlm.js +3602 -0
  316. package/static-files/fluentlm.min.css +1 -0
  317. package/static-files/fluentlm.min.js +1 -0
  318. package/static-files/helpers.v3.js +304 -0
  319. package/static-files/page.v3.js +1290 -0
  320. package/static-files/recommended-frameworks.llmd +81 -0
  321. package/static-files/recommended-frameworks.md +137 -0
  322. package/static-files/retro-game.js +877 -0
  323. package/static-files/shell.css +797 -0
  324. package/static-files/theme-dark.css +169 -0
  325. package/static-files/theme-light.css +169 -0
  326. package/tests/anthropic.spec.ts +84 -0
  327. package/tests/builders.spec.ts +139 -0
  328. package/tests/chainOfThought.spec.ts +108 -0
  329. package/tests/ensureScripts.spec.ts +82 -0
  330. package/tests/files.spec.ts +233 -0
  331. package/tests/fireworksai.spec.ts +92 -0
  332. package/tests/logCompletePrompt.spec.ts +74 -0
  333. package/tests/migrations.spec.ts +79 -1
  334. package/tests/openai.spec.ts +71 -0
  335. package/tests/pages.spec.ts +226 -1
  336. package/tests/providers.spec.ts +144 -0
  337. package/tests/scripts.spec.ts +209 -0
  338. package/tests/transformPage.spec.ts +456 -0
  339. package/tests/types.spec.ts +23 -0
  340. package/default-pages/app_builder.html +0 -40
  341. package/default-pages/app_builder.json +0 -1
  342. package/default-pages/json_tools.json +0 -1
  343. package/default-pages/my_notes.html +0 -33
  344. package/default-pages/neon_asteroids.html +0 -77
  345. package/default-pages/sidebar_builder.json +0 -1
  346. package/default-pages/solar_tutorial.json +0 -1
  347. package/default-pages/two-panel_builder.json +0 -1
  348. package/dist/connectors/index.d.ts +0 -3
  349. package/dist/connectors/types.d.ts +0 -61
  350. package/dist/index.d.ts +0 -7
  351. package/dist/migrations.d.ts +0 -11
  352. package/dist/models/providers.d.ts +0 -7
  353. package/dist/scripts.d.ts +0 -14
  354. package/dist/service/createCompletePrompt.d.ts +0 -5
  355. package/dist/service/debugLog.d.ts +0 -11
  356. package/dist/service/generateImage.d.ts +0 -32
  357. package/dist/service/index.d.ts +0 -8
  358. package/dist/service/modelInstructions.d.ts +0 -7
  359. package/dist/service/requiresSettings.d.ts +0 -3
  360. package/dist/service/server.d.ts +0 -4
  361. package/dist/service/useApiRoutes.d.ts +0 -4
  362. package/dist/service/useConnectorRoutes.d.ts +0 -4
  363. package/dist/service/useDataRoutes.d.ts +0 -4
  364. package/dist/service/usePageRoutes.d.ts +0 -5
  365. package/dist/synthos-cli.d.ts +0 -2
  366. package/images/home.png +0 -0
  367. package/images/page-management.png +0 -0
  368. package/images/settings.png +0 -0
  369. package/images/synthos-square.png +0 -0
  370. package/page-scripts/helpers-v2.js +0 -121
  371. package/page-scripts/page-v2.js +0 -615
  372. package/required-pages/builder.html +0 -74
  373. package/required-pages/builder.json +0 -1
  374. package/required-pages/pages.html +0 -196
  375. package/required-pages/pages.json +0 -1
  376. package/required-pages/settings.html +0 -841
  377. package/required-pages/settings.json +0 -1
  378. package/required-pages/synthos_apis.html +0 -272
  379. package/required-pages/synthos_apis.json +0 -1
  380. package/required-pages/synthos_scripts.json +0 -1
@@ -466,6 +466,7 @@ body.chat-collapsed .chat-toggle {
466
466
 
467
467
  .chat-input-wrapper .chat-input {
468
468
  width: 100%;
469
+ padding-left: 36px;
469
470
  padding-right: 36px;
470
471
  }
471
472
 
@@ -676,7 +677,140 @@ body.chat-collapsed .chat-toggle {
676
677
  font-style: italic;
677
678
  }
678
679
 
680
+ /* ---- Save Line ---- */
681
+ .save-line {
682
+ display: flex;
683
+ align-items: center;
684
+ gap: 10px;
685
+ margin: 8px 0 15px;
686
+ font-size: 11px;
687
+ color: var(--text-secondary);
688
+ opacity: 0.7;
689
+ }
690
+
691
+ .save-line::before,
692
+ .save-line::after {
693
+ content: '';
694
+ flex: 1;
695
+ height: 1px;
696
+ background: linear-gradient(90deg, transparent, var(--border-color), transparent);
697
+ }
698
+
699
+ .save-line-label {
700
+ white-space: nowrap;
701
+ letter-spacing: 0.5px;
702
+ }
703
+
679
704
  /* ---- Shared page rules ---- */
680
705
  #loadingOverlay { position: absolute; }
681
706
  .chat-submit:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
682
707
  .chat-input:disabled { opacity: 0.5; cursor: not-allowed; }
708
+
709
+ /* ---- Attach button (left side of input) ---- */
710
+ .attach-btn {
711
+ position: absolute;
712
+ left: 6px;
713
+ top: 50%;
714
+ transform: translateY(-50%);
715
+ background: transparent;
716
+ border: none;
717
+ color: var(--text-secondary);
718
+ cursor: pointer;
719
+ padding: 4px;
720
+ border-radius: 4px;
721
+ display: flex;
722
+ align-items: center;
723
+ justify-content: center;
724
+ transition: color 0.2s, background 0.2s;
725
+ z-index: 2;
726
+ }
727
+ .attach-btn:hover {
728
+ color: var(--accent-primary);
729
+ background: var(--accent-glow);
730
+ }
731
+ .light-mode .attach-btn {
732
+ color: var(--text-secondary);
733
+ }
734
+ .light-mode .attach-btn:hover {
735
+ color: var(--accent-primary);
736
+ }
737
+
738
+ /* ---- Attach popup menu ---- */
739
+ .attach-menu {
740
+ display: none;
741
+ flex-direction: column;
742
+ position: absolute;
743
+ bottom: calc(100% + 6px);
744
+ left: 0;
745
+ background: var(--bg-tertiary);
746
+ border: 1px solid var(--border-color);
747
+ border-radius: 8px;
748
+ box-shadow: 0 4px 12px rgba(0,0,0,0.12);
749
+ overflow: hidden;
750
+ z-index: 100;
751
+ min-width: 160px;
752
+ }
753
+ .attach-menu-item {
754
+ display: flex;
755
+ align-items: center;
756
+ gap: 8px;
757
+ padding: 8px 14px;
758
+ font-size: 13px;
759
+ color: var(--text-primary);
760
+ cursor: pointer;
761
+ transition: background 0.15s;
762
+ }
763
+ .attach-menu-item:hover {
764
+ background: var(--accent-glow);
765
+ }
766
+
767
+ /* ---- Attachment pills ---- */
768
+ .attachment-pills {
769
+ display: flex;
770
+ flex-wrap: wrap;
771
+ gap: 6px;
772
+ padding: 0 4px;
773
+ min-height: 0;
774
+ }
775
+ .attachment-pills:empty { display: none; }
776
+ .attachment-pill {
777
+ display: flex;
778
+ align-items: center;
779
+ gap: 6px;
780
+ background: var(--bg-tertiary);
781
+ border: 1px solid var(--border-color);
782
+ border-radius: 6px;
783
+ padding: 4px 8px;
784
+ max-width: 180px;
785
+ }
786
+ .attachment-pill-remove {
787
+ background: none;
788
+ border: none;
789
+ color: var(--text-secondary);
790
+ cursor: pointer;
791
+ font-size: 14px;
792
+ padding: 0 2px;
793
+ line-height: 1;
794
+ }
795
+ .attachment-pill-remove:hover {
796
+ color: #ff6b6b;
797
+ }
798
+
799
+ /* ---- Screenshot overlay ---- */
800
+ .screenshot-overlay {
801
+ position: absolute;
802
+ top: 0;
803
+ left: 0;
804
+ width: 100%;
805
+ height: 100%;
806
+ background: rgba(0,0,0,0.15);
807
+ cursor: crosshair;
808
+ z-index: 1000;
809
+ }
810
+ .screenshot-rect {
811
+ display: none;
812
+ position: absolute;
813
+ border: 2px solid red;
814
+ background: rgba(255,0,0,0.05);
815
+ pointer-events: none;
816
+ }
@@ -0,0 +1,199 @@
1
+ /* ==========================================================================
2
+ Nebula Dawn — Light Theme (v3)
3
+ Palette overrides + semantic tokens for FluentLM.
4
+ Rebrands from default blue to Nebula purple.
5
+ ========================================================================== */
6
+
7
+ :root,
8
+ .nebula-dawn {
9
+ /* -----------------------------------------------------------------------
10
+ PALETTE — Brand / Theme Colors (Nebula purple ramp)
11
+ ----------------------------------------------------------------------- */
12
+ --themePrimary: #764ba2;
13
+ --themeDark: #5a3580;
14
+ --themeDarkAlt: #663d91;
15
+ --themeDarker: #3b2054;
16
+ --themeSecondary: #9670b8;
17
+ --themeTertiary: #b49bce;
18
+ --themeLight: #d3c3e3;
19
+ --themeLighter: #e8ddf1;
20
+ --themeLighterAlt: #f5f1fa;
21
+
22
+ /* -----------------------------------------------------------------------
23
+ PALETTE — Neutrals (warm purple-tinted)
24
+ ----------------------------------------------------------------------- */
25
+ --neutralDark: #1e1830;
26
+ --neutralPrimary: #2d2640;
27
+ --neutralPrimaryAlt: #3d2e56;
28
+ --neutralSecondary: #6b4f8a;
29
+ --neutralSecondaryAlt: #5e4579;
30
+ --neutralTertiary: #8a7a9d;
31
+ --neutralTertiaryAlt: #a898b5;
32
+ --neutralQuaternary: #cbc0d6;
33
+ --neutralQuaternaryAlt: #d5cae0;
34
+ --neutralLight: #e8dff0;
35
+ --neutralLighter: #f0e6f6;
36
+ --neutralLighterAlt: #f7f2fa;
37
+ --white: #ffffff;
38
+
39
+ /* -----------------------------------------------------------------------
40
+ BODY / BACKGROUND
41
+ ----------------------------------------------------------------------- */
42
+ --bodyBackground: var(--white);
43
+ --bodyBackgroundHovered: var(--neutralLighter);
44
+ --bodyBackgroundChecked: var(--neutralLight);
45
+ --bodyStandoutBackground: var(--neutralLighterAlt);
46
+ --bodyFrameBackground: var(--white);
47
+ --bodyFrameDivider: var(--neutralLight);
48
+ --bodyDivider: var(--neutralLight);
49
+
50
+ /* -----------------------------------------------------------------------
51
+ TEXT
52
+ ----------------------------------------------------------------------- */
53
+ --bodyText: var(--neutralPrimary);
54
+ --bodyTextChecked: var(--neutralDark);
55
+ --bodySubtext: var(--neutralSecondary);
56
+ --disabledText: var(--neutralTertiary);
57
+ --disabledBodyText: var(--neutralTertiary);
58
+ --disabledSubtext: var(--neutralQuaternary);
59
+ --disabledBodySubtext: var(--neutralTertiaryAlt);
60
+
61
+ /* -----------------------------------------------------------------------
62
+ LINKS
63
+ ----------------------------------------------------------------------- */
64
+ --link: var(--themePrimary);
65
+ --linkHovered: var(--themeDarker);
66
+ --actionLink: var(--neutralPrimary);
67
+ --actionLinkHovered: var(--neutralDark);
68
+
69
+ /* -----------------------------------------------------------------------
70
+ BUTTONS — Default
71
+ ----------------------------------------------------------------------- */
72
+ --buttonBackground: var(--white);
73
+ --buttonBackgroundHovered: var(--neutralLighter);
74
+ --buttonBackgroundChecked: var(--neutralLight);
75
+ --buttonBackgroundCheckedHovered: var(--neutralQuaternaryAlt);
76
+ --buttonBackgroundPressed: var(--neutralLight);
77
+ --buttonBackgroundDisabled: var(--neutralLighter);
78
+ --buttonBorder: var(--neutralSecondaryAlt);
79
+ --buttonBorderDisabled: var(--neutralLighter);
80
+ --buttonText: var(--neutralPrimary);
81
+ --buttonTextHovered: var(--neutralDark);
82
+ --buttonTextChecked: var(--neutralDark);
83
+ --buttonTextCheckedHovered: var(--black);
84
+ --buttonTextPressed: var(--neutralDark);
85
+ --buttonTextDisabled: var(--neutralTertiary);
86
+
87
+ /* -----------------------------------------------------------------------
88
+ BUTTONS — Primary
89
+ ----------------------------------------------------------------------- */
90
+ --primaryButtonBackground: var(--themePrimary);
91
+ --primaryButtonBackgroundHovered: var(--themeDarkAlt);
92
+ --primaryButtonBackgroundPressed: var(--themeDark);
93
+ --primaryButtonBackgroundDisabled: var(--neutralLighter);
94
+ --primaryButtonBorder: transparent;
95
+ --primaryButtonText: var(--white);
96
+ --primaryButtonTextHovered: var(--white);
97
+ --primaryButtonTextPressed: var(--white);
98
+ --primaryButtonTextDisabled: var(--neutralQuaternary);
99
+
100
+ /* -----------------------------------------------------------------------
101
+ BUTTONS — Accent
102
+ ----------------------------------------------------------------------- */
103
+ --accentButtonBackground: var(--themePrimary);
104
+ --accentButtonText: var(--white);
105
+
106
+ /* -----------------------------------------------------------------------
107
+ INPUTS
108
+ ----------------------------------------------------------------------- */
109
+ --inputBackground: var(--white);
110
+ --inputBackgroundChecked: var(--themePrimary);
111
+ --inputBackgroundCheckedHovered: var(--themeDarkAlt);
112
+ --inputPlaceholderBackgroundChecked: var(--themeLighter);
113
+ --inputForegroundChecked: var(--white);
114
+ --inputBorder: var(--neutralSecondary);
115
+ --smallInputBorder: var(--neutralSecondary);
116
+ --inputBorderHovered: var(--neutralPrimary);
117
+ --inputFocusBorderAlt: var(--themePrimary);
118
+ --inputText: var(--neutralPrimary);
119
+ --inputTextHovered: var(--neutralDark);
120
+ --inputPlaceholderText: var(--neutralSecondary);
121
+ --inputIcon: var(--themePrimary);
122
+ --inputIconHovered: var(--themeDark);
123
+ --inputIconDisabled: var(--neutralTertiary);
124
+
125
+ /* -----------------------------------------------------------------------
126
+ LISTS
127
+ ----------------------------------------------------------------------- */
128
+ --listBackground: var(--white);
129
+ --listText: var(--neutralPrimary);
130
+ --listItemBackgroundHovered: var(--neutralLighter);
131
+ --listItemBackgroundChecked: var(--neutralLight);
132
+ --listItemBackgroundCheckedHovered: var(--neutralQuaternaryAlt);
133
+ --listHeaderBackgroundHovered: var(--neutralLighter);
134
+ --listHeaderBackgroundPressed: var(--neutralLight);
135
+
136
+ /* -----------------------------------------------------------------------
137
+ MENUS
138
+ ----------------------------------------------------------------------- */
139
+ --menuBackground: var(--white);
140
+ --menuDivider: var(--neutralTertiaryAlt);
141
+ --menuIcon: var(--themePrimary);
142
+ --menuHeader: var(--themePrimary);
143
+ --menuItemBackgroundHovered: var(--neutralLighter);
144
+ --menuItemBackgroundPressed: var(--neutralLight);
145
+ --menuItemText: var(--neutralPrimary);
146
+ --menuItemTextHovered: var(--neutralDark);
147
+
148
+ /* -----------------------------------------------------------------------
149
+ CARDS
150
+ ----------------------------------------------------------------------- */
151
+ --cardStandoutBackground: var(--white);
152
+ --cardShadow: var(--elevation4);
153
+ --cardShadowHovered: var(--elevation8);
154
+ --variantBorder: var(--neutralLight);
155
+ --variantBorderHovered: var(--neutralTertiaryAlt);
156
+
157
+ /* -----------------------------------------------------------------------
158
+ DISABLED / FOCUS
159
+ ----------------------------------------------------------------------- */
160
+ --disabledBackground: var(--neutralLighter);
161
+ --disabledBorder: var(--neutralLighter);
162
+ --focusBorder: var(--neutralSecondary);
163
+
164
+ /* -----------------------------------------------------------------------
165
+ STATUS — Backgrounds
166
+ ----------------------------------------------------------------------- */
167
+ --infoBackground: var(--neutralLighter);
168
+ --errorBackground: #FDE7E9;
169
+ --blockingBackground: #FDE7E9;
170
+ --warningBackground: #FFF4CE;
171
+ --severeWarningBackground: #FED9CC;
172
+ --successBackground: #DFF6DD;
173
+
174
+ /* -----------------------------------------------------------------------
175
+ STATUS — Icons
176
+ ----------------------------------------------------------------------- */
177
+ --infoIcon: var(--neutralSecondary);
178
+ --errorIcon: #A80000;
179
+ --blockingIcon: #FDE7E9;
180
+ --warningIcon: #797775;
181
+ --severeWarningIcon: var(--orange);
182
+ --successIcon: var(--green);
183
+
184
+ /* -----------------------------------------------------------------------
185
+ STATUS — Text
186
+ ----------------------------------------------------------------------- */
187
+ --errorText: var(--redDark);
188
+ --messageText: var(--neutralPrimary);
189
+ --messageLink: var(--themeDark);
190
+ --messageLinkHovered: var(--themeDarker);
191
+ --warningText: var(--neutralPrimary);
192
+ --successText: var(--green);
193
+
194
+ /* -----------------------------------------------------------------------
195
+ MISC
196
+ ----------------------------------------------------------------------- */
197
+ --defaultStateBackground: var(--neutralLighterAlt);
198
+ --overlayBackground: var(--blackTranslucent40);
199
+ }
@@ -466,6 +466,7 @@ body.chat-collapsed .chat-toggle {
466
466
 
467
467
  .chat-input-wrapper .chat-input {
468
468
  width: 100%;
469
+ padding-left: 36px;
469
470
  padding-right: 36px;
470
471
  }
471
472
 
@@ -668,7 +669,134 @@ body.chat-collapsed .chat-toggle {
668
669
  font-style: italic;
669
670
  }
670
671
 
672
+ /* ---- Save Line ---- */
673
+ .save-line {
674
+ display: flex;
675
+ align-items: center;
676
+ gap: 10px;
677
+ margin: 8px 0 15px;
678
+ font-size: 11px;
679
+ color: var(--text-secondary);
680
+ opacity: 0.7;
681
+ }
682
+
683
+ .save-line::before,
684
+ .save-line::after {
685
+ content: '';
686
+ flex: 1;
687
+ height: 1px;
688
+ background: linear-gradient(90deg, transparent, var(--border-color), transparent);
689
+ }
690
+
691
+ .save-line-label {
692
+ white-space: nowrap;
693
+ letter-spacing: 0.5px;
694
+ }
695
+
671
696
  /* ---- Shared page rules ---- */
672
697
  #loadingOverlay { position: absolute; }
673
698
  .chat-submit:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
674
699
  .chat-input:disabled { opacity: 0.5; cursor: not-allowed; }
700
+
701
+ /* ---- Attach button (left side of input) ---- */
702
+ .attach-btn {
703
+ position: absolute;
704
+ left: 6px;
705
+ top: 50%;
706
+ transform: translateY(-50%);
707
+ background: transparent;
708
+ border: none;
709
+ color: var(--text-secondary);
710
+ cursor: pointer;
711
+ padding: 4px;
712
+ border-radius: 4px;
713
+ display: flex;
714
+ align-items: center;
715
+ justify-content: center;
716
+ transition: color 0.2s, background 0.2s;
717
+ z-index: 2;
718
+ }
719
+ .attach-btn:hover {
720
+ color: var(--accent-primary);
721
+ background: var(--accent-glow);
722
+ }
723
+
724
+ /* ---- Attach popup menu ---- */
725
+ .attach-menu {
726
+ display: none;
727
+ flex-direction: column;
728
+ position: absolute;
729
+ bottom: calc(100% + 6px);
730
+ left: 0;
731
+ background: var(--bg-tertiary);
732
+ border: 1px solid var(--border-color);
733
+ border-radius: 8px;
734
+ box-shadow: 0 4px 16px rgba(0,0,0,0.3);
735
+ overflow: hidden;
736
+ z-index: 100;
737
+ min-width: 160px;
738
+ }
739
+ .attach-menu-item {
740
+ display: flex;
741
+ align-items: center;
742
+ gap: 8px;
743
+ padding: 8px 14px;
744
+ font-size: 13px;
745
+ color: var(--text-primary);
746
+ cursor: pointer;
747
+ transition: background 0.15s;
748
+ }
749
+ .attach-menu-item:hover {
750
+ background: var(--accent-glow);
751
+ }
752
+
753
+ /* ---- Attachment pills ---- */
754
+ .attachment-pills {
755
+ display: flex;
756
+ flex-wrap: wrap;
757
+ gap: 6px;
758
+ padding: 0 4px;
759
+ min-height: 0;
760
+ }
761
+ .attachment-pills:empty { display: none; }
762
+ .attachment-pill {
763
+ display: flex;
764
+ align-items: center;
765
+ gap: 6px;
766
+ background: var(--bg-tertiary);
767
+ border: 1px solid var(--border-color);
768
+ border-radius: 6px;
769
+ padding: 4px 8px;
770
+ max-width: 180px;
771
+ }
772
+ .attachment-pill-remove {
773
+ background: none;
774
+ border: none;
775
+ color: var(--text-secondary);
776
+ cursor: pointer;
777
+ font-size: 14px;
778
+ padding: 0 2px;
779
+ line-height: 1;
780
+ }
781
+ .attachment-pill-remove:hover {
782
+ color: #ff6b6b;
783
+ }
784
+
785
+ /* ---- Screenshot overlay ---- */
786
+ .screenshot-overlay {
787
+ position: absolute;
788
+ top: 0;
789
+ left: 0;
790
+ width: 100%;
791
+ height: 100%;
792
+ background: rgba(0,0,0,0.2);
793
+ cursor: crosshair;
794
+ z-index: 1000;
795
+ }
796
+ .screenshot-rect {
797
+ display: none;
798
+ position: absolute;
799
+ border: 2px solid red;
800
+ background: rgba(255,0,0,0.05);
801
+ pointer-events: none;
802
+ }
@@ -0,0 +1,201 @@
1
+ /* ==========================================================================
2
+ Nebula Dusk — Dark Theme (v3)
3
+ Palette overrides + semantic tokens for FluentLM.
4
+ Rebrands from default blue to Nebula purple, dark mode.
5
+ ========================================================================== */
6
+
7
+ .nebula-dusk {
8
+ /* -----------------------------------------------------------------------
9
+ PALETTE — Brand / Theme Colors (Nebula purple ramp)
10
+ ----------------------------------------------------------------------- */
11
+ --themePrimary: #764ba2;
12
+ --themeDark: #5a3580;
13
+ --themeDarkAlt: #663d91;
14
+ --themeDarker: #3b2054;
15
+ --themeSecondary: #9670b8;
16
+ --themeTertiary: #b49bce;
17
+ --themeLight: #d3c3e3;
18
+ --themeLighter: #e8ddf1;
19
+ --themeLighterAlt: #f5f1fa;
20
+
21
+ /* -----------------------------------------------------------------------
22
+ PALETTE — Neutrals (inverted for dark mode)
23
+ ----------------------------------------------------------------------- */
24
+ --black: #000000;
25
+ --neutralDarker: #0f0f23;
26
+ --neutralDark: #16213e;
27
+ --neutralPrimary: #1a1a2e;
28
+ --neutralPrimaryAlt: #222244;
29
+ --neutralSecondary: #2e2e52;
30
+ --neutralSecondaryAlt: #3a3a60;
31
+ --neutralTertiary: #5a5a80;
32
+ --neutralTertiaryAlt: #b794f6;
33
+ --neutralQuaternary: #7a7a9a;
34
+ --neutralQuaternaryAlt: #8a8aaa;
35
+ --neutralLight: #a0a0c0;
36
+ --neutralLighter: #e0e0e0;
37
+ --neutralLighterAlt: #f0f0f0;
38
+ --white: #ffffff;
39
+
40
+ /* -----------------------------------------------------------------------
41
+ BODY / BACKGROUND
42
+ ----------------------------------------------------------------------- */
43
+ --bodyBackground: var(--neutralPrimary);
44
+ --bodyBackgroundHovered: var(--neutralPrimaryAlt);
45
+ --bodyBackgroundChecked: var(--neutralSecondary);
46
+ --bodyStandoutBackground: var(--neutralDark);
47
+ --bodyFrameBackground: var(--neutralPrimary);
48
+ --bodyFrameDivider: var(--neutralSecondary);
49
+ --bodyDivider: var(--neutralSecondary);
50
+
51
+ /* -----------------------------------------------------------------------
52
+ TEXT
53
+ ----------------------------------------------------------------------- */
54
+ --bodyText: var(--neutralLighter);
55
+ --bodyTextChecked: var(--white);
56
+ --bodySubtext: var(--neutralTertiaryAlt);
57
+ --disabledText: var(--neutralSecondary);
58
+ --disabledBodyText: var(--neutralSecondary);
59
+ --disabledSubtext: var(--neutralSecondaryAlt);
60
+ --disabledBodySubtext: var(--neutralSecondary);
61
+
62
+ /* -----------------------------------------------------------------------
63
+ LINKS (Nebula purple instead of default blue)
64
+ ----------------------------------------------------------------------- */
65
+ --link: #b794f6;
66
+ --linkHovered: #d4b8ff;
67
+ --actionLink: var(--neutralLighter);
68
+ --actionLinkHovered: var(--white);
69
+
70
+ /* -----------------------------------------------------------------------
71
+ BUTTONS — Default
72
+ ----------------------------------------------------------------------- */
73
+ --buttonBackground: var(--neutralPrimary);
74
+ --buttonBackgroundHovered: var(--neutralPrimaryAlt);
75
+ --buttonBackgroundChecked: var(--neutralSecondary);
76
+ --buttonBackgroundCheckedHovered: var(--neutralSecondaryAlt);
77
+ --buttonBackgroundPressed: var(--neutralSecondary);
78
+ --buttonBackgroundDisabled: var(--neutralDark);
79
+ --buttonBorder: var(--neutralSecondaryAlt);
80
+ --buttonBorderDisabled: var(--neutralDark);
81
+ --buttonText: var(--neutralLighter);
82
+ --buttonTextHovered: var(--white);
83
+ --buttonTextChecked: var(--white);
84
+ --buttonTextCheckedHovered: var(--white);
85
+ --buttonTextPressed: var(--white);
86
+ --buttonTextDisabled: var(--neutralSecondary);
87
+
88
+ /* -----------------------------------------------------------------------
89
+ BUTTONS — Primary
90
+ ----------------------------------------------------------------------- */
91
+ --primaryButtonBackground: var(--themePrimary);
92
+ --primaryButtonBackgroundHovered: var(--themeDarkAlt);
93
+ --primaryButtonBackgroundPressed: var(--themeDark);
94
+ --primaryButtonBackgroundDisabled: var(--neutralDark);
95
+ --primaryButtonBorder: transparent;
96
+ --primaryButtonText: var(--white);
97
+ --primaryButtonTextHovered: var(--white);
98
+ --primaryButtonTextPressed: var(--white);
99
+ --primaryButtonTextDisabled: var(--neutralSecondary);
100
+
101
+ /* -----------------------------------------------------------------------
102
+ BUTTONS — Accent
103
+ ----------------------------------------------------------------------- */
104
+ --accentButtonBackground: var(--themePrimary);
105
+ --accentButtonText: var(--white);
106
+
107
+ /* -----------------------------------------------------------------------
108
+ INPUTS
109
+ ----------------------------------------------------------------------- */
110
+ --inputBackground: var(--neutralPrimary);
111
+ --inputBackgroundChecked: var(--themePrimary);
112
+ --inputBackgroundCheckedHovered: var(--themeDarkAlt);
113
+ --inputPlaceholderBackgroundChecked: var(--themeDark);
114
+ --inputForegroundChecked: var(--white);
115
+ --inputBorder: var(--neutralTertiary);
116
+ --smallInputBorder: var(--neutralTertiary);
117
+ --inputBorderHovered: var(--neutralLighter);
118
+ --inputFocusBorderAlt: var(--themeSecondary);
119
+ --inputText: var(--neutralLighter);
120
+ --inputTextHovered: var(--white);
121
+ --inputPlaceholderText: var(--neutralTertiaryAlt);
122
+ --inputIcon: var(--themeSecondary);
123
+ --inputIconHovered: var(--themePrimary);
124
+ --inputIconDisabled: var(--neutralSecondary);
125
+
126
+ /* -----------------------------------------------------------------------
127
+ LISTS
128
+ ----------------------------------------------------------------------- */
129
+ --listBackground: var(--neutralPrimary);
130
+ --listText: var(--neutralLighter);
131
+ --listItemBackgroundHovered: var(--neutralPrimaryAlt);
132
+ --listItemBackgroundChecked: var(--neutralSecondary);
133
+ --listItemBackgroundCheckedHovered: var(--neutralSecondaryAlt);
134
+ --listHeaderBackgroundHovered: var(--neutralPrimaryAlt);
135
+ --listHeaderBackgroundPressed: var(--neutralSecondary);
136
+
137
+ /* -----------------------------------------------------------------------
138
+ MENUS
139
+ ----------------------------------------------------------------------- */
140
+ --menuBackground: var(--neutralPrimary);
141
+ --menuDivider: var(--neutralSecondary);
142
+ --menuIcon: var(--themeSecondary);
143
+ --menuHeader: var(--themeSecondary);
144
+ --menuItemBackgroundHovered: var(--neutralPrimaryAlt);
145
+ --menuItemBackgroundPressed: var(--neutralSecondary);
146
+ --menuItemText: var(--neutralLighter);
147
+ --menuItemTextHovered: var(--white);
148
+
149
+ /* -----------------------------------------------------------------------
150
+ CARDS
151
+ In dark themes Fluent v8 drops shadows and uses borders instead.
152
+ ----------------------------------------------------------------------- */
153
+ --cardStandoutBackground: var(--neutralDark);
154
+ --cardShadow: none;
155
+ --cardShadowHovered: none;
156
+ --variantBorder: var(--neutralSecondary);
157
+ --variantBorderHovered: var(--neutralTertiary);
158
+
159
+ /* -----------------------------------------------------------------------
160
+ DISABLED / FOCUS
161
+ ----------------------------------------------------------------------- */
162
+ --disabledBackground: var(--neutralDark);
163
+ --disabledBorder: var(--neutralDark);
164
+ --focusBorder: var(--neutralTertiaryAlt);
165
+
166
+ /* -----------------------------------------------------------------------
167
+ STATUS — Backgrounds
168
+ ----------------------------------------------------------------------- */
169
+ --infoBackground: var(--neutralPrimary);
170
+ --errorBackground: #442726;
171
+ --blockingBackground: #442726;
172
+ --warningBackground: #433519;
173
+ --severeWarningBackground: #4F2A0F;
174
+ --successBackground: #393D1B;
175
+
176
+ /* -----------------------------------------------------------------------
177
+ STATUS — Icons
178
+ ----------------------------------------------------------------------- */
179
+ --infoIcon: var(--neutralTertiaryAlt);
180
+ --errorIcon: #F1707B;
181
+ --blockingIcon: #442726;
182
+ --warningIcon: var(--neutralTertiaryAlt);
183
+ --severeWarningIcon: #FCE100;
184
+ --successIcon: #92C353;
185
+
186
+ /* -----------------------------------------------------------------------
187
+ STATUS — Text
188
+ ----------------------------------------------------------------------- */
189
+ --errorText: #F1707B;
190
+ --messageText: var(--neutralLighter);
191
+ --messageLink: #b794f6;
192
+ --messageLinkHovered: #d4b8ff;
193
+ --warningText: var(--neutralLighter);
194
+ --successText: #92C353;
195
+
196
+ /* -----------------------------------------------------------------------
197
+ MISC
198
+ ----------------------------------------------------------------------- */
199
+ --defaultStateBackground: var(--neutralDark);
200
+ --overlayBackground: rgba(0, 0, 0, 0.6);
201
+ }