legate 0.1.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 (317) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +345 -0
  4. data/bin/legate +13 -0
  5. data/examples/00_quickstart.rb +51 -0
  6. data/examples/01_simple_agent.rb +105 -0
  7. data/examples/02_multi_tool_agent.rb +140 -0
  8. data/examples/03_custom_tool.rb +93 -0
  9. data/examples/04_agent_instructions.rb +84 -0
  10. data/examples/05_state_and_sessions.rb +91 -0
  11. data/examples/06_callbacks.rb +186 -0
  12. data/examples/07_async_jobs.rb +112 -0
  13. data/examples/08_loop_agent.rb +197 -0
  14. data/examples/09_sequential_workflow.rb +40 -0
  15. data/examples/10_parallel_workflow.rb +34 -0
  16. data/examples/11_agent_delegation.rb +24 -0
  17. data/examples/12_http_client_tool.rb +156 -0
  18. data/examples/13_authentication.rb +220 -0
  19. data/examples/14_mcp_client.rb +154 -0
  20. data/examples/15_mcp_server.rb +79 -0
  21. data/examples/16_webhooks.rb +91 -0
  22. data/examples/README_sequential_agents.md +164 -0
  23. data/examples/advanced/auth/cookie_auth_tool.rb +146 -0
  24. data/examples/advanced/auth/custom_auth_flows_example.rb +626 -0
  25. data/examples/advanced/auth/excon_middleware.rb +317 -0
  26. data/examples/advanced/auth/excon_middleware_auth.rb +399 -0
  27. data/examples/advanced/auth/fiber_auth_example.rb +281 -0
  28. data/examples/advanced/auth/fiber_oidc_example.rb +403 -0
  29. data/examples/advanced/auth/httpbin_bearer_tool.rb +159 -0
  30. data/examples/advanced/auth/oauth2_auth.rb +419 -0
  31. data/examples/advanced/auth/oidc_auth.rb +514 -0
  32. data/examples/advanced/auth/openweather_api.rb +251 -0
  33. data/examples/advanced/auth/openweather_tool.rb +153 -0
  34. data/examples/advanced/auth/query_param_middleware_test.rb +138 -0
  35. data/examples/advanced/auth/service_account.rb +135 -0
  36. data/examples/advanced/auth/test_with_httpbin.rb +202 -0
  37. data/examples/advanced/auth/token_lifecycle_example.rb +428 -0
  38. data/examples/advanced/callback_monitoring.rb +679 -0
  39. data/examples/advanced/mas/fixed_delegation_example.rb +191 -0
  40. data/examples/advanced/mas/loop_workflow.rb +28 -0
  41. data/examples/advanced/mas/mock_planner.rb +77 -0
  42. data/examples/advanced/mas/proper_delegation_example.rb +276 -0
  43. data/examples/advanced/mcp/legate_mcp_server_resource_example.rb +182 -0
  44. data/examples/advanced/mcp/mcp_resource_server_example.rb +309 -0
  45. data/examples/advanced/mcp/mcp_server_async.rb +76 -0
  46. data/examples/advanced/mcp/mcp_server_async_tools.rb +122 -0
  47. data/examples/advanced/mcp/mcp_server_legate_agent.rb +95 -0
  48. data/examples/advanced/mcp/mcp_server_rack.rb +89 -0
  49. data/examples/advanced/random_calculator.rb +104 -0
  50. data/examples/advanced/sleep_agent.rb +153 -0
  51. data/examples/advanced/webhooks/webhook_e2e_runner.rb +110 -0
  52. data/examples/advanced/webhooks/webhook_receiver_agent.rb +58 -0
  53. data/examples/advanced/workflows/task_refinement_loop_agent.rb +278 -0
  54. data/examples/advanced/workflows/travel_planner_auto_sequential.rb +444 -0
  55. data/examples/advanced/workflows/travel_planner_parallel.rb +656 -0
  56. data/examples/advanced/workflows/travel_planner_sequential.rb +512 -0
  57. data/examples/tools/oauth2_example.rb +136 -0
  58. data/examples/tools/sleepy_tool.rb +42 -0
  59. data/lib/legate/activity_log.rb +71 -0
  60. data/lib/legate/agent.rb +959 -0
  61. data/lib/legate/agent_code_generator.rb +185 -0
  62. data/lib/legate/agent_definition.rb +812 -0
  63. data/lib/legate/agentic/decision.rb +49 -0
  64. data/lib/legate/agentic/loop.rb +134 -0
  65. data/lib/legate/agentic.rb +5 -0
  66. data/lib/legate/agents/loop_agent.rb +248 -0
  67. data/lib/legate/agents/parallel_agent.rb +163 -0
  68. data/lib/legate/agents/sequential_agent.rb +190 -0
  69. data/lib/legate/agents.rb +14 -0
  70. data/lib/legate/auth/config.rb +148 -0
  71. data/lib/legate/auth/coordinator.rb +218 -0
  72. data/lib/legate/auth/coordinators/oauth2_coordinator.rb +99 -0
  73. data/lib/legate/auth/coordinators/oidc_coordinator.rb +68 -0
  74. data/lib/legate/auth/coordinators/service_account_coordinator.rb +122 -0
  75. data/lib/legate/auth/credential.rb +157 -0
  76. data/lib/legate/auth/encryption.rb +108 -0
  77. data/lib/legate/auth/error.rb +94 -0
  78. data/lib/legate/auth/exchanged_credential.rb +180 -0
  79. data/lib/legate/auth/excon_middleware.rb +285 -0
  80. data/lib/legate/auth/http_client_utils.rb +364 -0
  81. data/lib/legate/auth/manager.rb +531 -0
  82. data/lib/legate/auth/manager_store.rb +394 -0
  83. data/lib/legate/auth/middleware_factory.rb +290 -0
  84. data/lib/legate/auth/runner.rb +279 -0
  85. data/lib/legate/auth/scheme.rb +125 -0
  86. data/lib/legate/auth/schemes/api_key.rb +212 -0
  87. data/lib/legate/auth/schemes/google_service_account.rb +108 -0
  88. data/lib/legate/auth/schemes/http_bearer.rb +98 -0
  89. data/lib/legate/auth/schemes/oauth2.rb +396 -0
  90. data/lib/legate/auth/schemes/openid_connect.rb +346 -0
  91. data/lib/legate/auth/schemes/service_account.rb +388 -0
  92. data/lib/legate/auth/schemes.rb +40 -0
  93. data/lib/legate/auth/token_manager.rb +362 -0
  94. data/lib/legate/auth/token_store.rb +86 -0
  95. data/lib/legate/auth/tool_context_extension.rb +97 -0
  96. data/lib/legate/auth/tool_integration.rb +188 -0
  97. data/lib/legate/auth/url_guard.rb +81 -0
  98. data/lib/legate/auth.rb +453 -0
  99. data/lib/legate/callbacks/callback_context.rb +71 -0
  100. data/lib/legate/cli/agent_commands.rb +950 -0
  101. data/lib/legate/cli/auth_commands.rb +520 -0
  102. data/lib/legate/cli/base_command.rb +24 -0
  103. data/lib/legate/cli/deployment_commands.rb +934 -0
  104. data/lib/legate/cli/output_helper.rb +108 -0
  105. data/lib/legate/cli/session_commands.rb +138 -0
  106. data/lib/legate/cli/skaffold_commands.rb +223 -0
  107. data/lib/legate/cli/tool_commands.rb +261 -0
  108. data/lib/legate/cli/web_commands.rb +182 -0
  109. data/lib/legate/cli.rb +40 -0
  110. data/lib/legate/configuration/webhooks.rb +113 -0
  111. data/lib/legate/configuration.rb +39 -0
  112. data/lib/legate/definition_store.rb +23 -0
  113. data/lib/legate/errors.rb +118 -0
  114. data/lib/legate/event.rb +161 -0
  115. data/lib/legate/gemini_ai_beta_patch.rb +39 -0
  116. data/lib/legate/generators/agent_generator.rb +412 -0
  117. data/lib/legate/generators/code_validator.rb +48 -0
  118. data/lib/legate/generators/legate/install_generator.rb +35 -0
  119. data/lib/legate/generators/legate/templates/create_legate_tables.rb.tt +36 -0
  120. data/lib/legate/generators/legate/templates/initializer.rb +18 -0
  121. data/lib/legate/generators/runtime_tool_loader.rb +76 -0
  122. data/lib/legate/generators/tool_generator.rb +408 -0
  123. data/lib/legate/generators.rb +11 -0
  124. data/lib/legate/global_definition_registry.rb +506 -0
  125. data/lib/legate/global_tool_manager.rb +135 -0
  126. data/lib/legate/llm/adapter.rb +69 -0
  127. data/lib/legate/llm/gemini.rb +172 -0
  128. data/lib/legate/llm/ollama.rb +80 -0
  129. data/lib/legate/llm.rb +34 -0
  130. data/lib/legate/mcp/client.rb +320 -0
  131. data/lib/legate/mcp/connection/sse.rb +292 -0
  132. data/lib/legate/mcp/connection/stdio.rb +273 -0
  133. data/lib/legate/mcp/connection_manager.rb +103 -0
  134. data/lib/legate/mcp/server/legate_agent_adapter.rb +170 -0
  135. data/lib/legate/mcp/server/legate_direct_agent_adapter.rb +140 -0
  136. data/lib/legate/mcp/server/legate_tool_adapter.rb +119 -0
  137. data/lib/legate/mcp/tool_wrapper.rb +138 -0
  138. data/lib/legate/mcp/util/schema_converter.rb +134 -0
  139. data/lib/legate/mcp.rb +23 -0
  140. data/lib/legate/plan_executor.rb +375 -0
  141. data/lib/legate/planner.rb +839 -0
  142. data/lib/legate/rails/railtie.rb +43 -0
  143. data/lib/legate/rails.rb +9 -0
  144. data/lib/legate/redaction.rb +32 -0
  145. data/lib/legate/session.rb +299 -0
  146. data/lib/legate/session_service/active_record.rb +300 -0
  147. data/lib/legate/session_service/base.rb +68 -0
  148. data/lib/legate/session_service/event_broadcast.rb +74 -0
  149. data/lib/legate/session_service/in_memory.rb +188 -0
  150. data/lib/legate/tool/metadata_dsl.rb +122 -0
  151. data/lib/legate/tool.rb +276 -0
  152. data/lib/legate/tool_code_generator.rb +103 -0
  153. data/lib/legate/tool_context.rb +350 -0
  154. data/lib/legate/tool_loader.rb +39 -0
  155. data/lib/legate/tool_registry.rb +73 -0
  156. data/lib/legate/tool_result.rb +61 -0
  157. data/lib/legate/tools/agent_tool.rb +187 -0
  158. data/lib/legate/tools/base/http_client.rb +319 -0
  159. data/lib/legate/tools/base/safe_url.rb +56 -0
  160. data/lib/legate/tools/base_async_job_tool.rb +91 -0
  161. data/lib/legate/tools/calculator.rb +89 -0
  162. data/lib/legate/tools/cat_facts.rb +81 -0
  163. data/lib/legate/tools/check_job_status_tool.rb +48 -0
  164. data/lib/legate/tools/current_time_tool.rb +64 -0
  165. data/lib/legate/tools/echo.rb +43 -0
  166. data/lib/legate/tools/http_request_tool.rb +105 -0
  167. data/lib/legate/tools/random_number_tool.rb +64 -0
  168. data/lib/legate/tools/read_webpage_tool.rb +92 -0
  169. data/lib/legate/tools/sleepy_tool.rb +74 -0
  170. data/lib/legate/tools/webhook_tool.rb +146 -0
  171. data/lib/legate/version.rb +5 -0
  172. data/lib/legate/web/app.rb +984 -0
  173. data/lib/legate/web/public/css/main.css +4980 -0
  174. data/lib/legate/web/public/images/favicon-256.png +0 -0
  175. data/lib/legate/web/public/images/favicon-32.png +0 -0
  176. data/lib/legate/web/public/images/legate-logo-dark.png +0 -0
  177. data/lib/legate/web/public/images/legate-logo-light.png +0 -0
  178. data/lib/legate/web/public/js/legate.js +616 -0
  179. data/lib/legate/web/public/styles/main.scss +4402 -0
  180. data/lib/legate/web/routes/agent_authentication_routes.rb +530 -0
  181. data/lib/legate/web/routes/agent_definition_routes.rb +803 -0
  182. data/lib/legate/web/routes/agent_generator_routes.rb +80 -0
  183. data/lib/legate/web/routes/agent_interaction_routes.rb +734 -0
  184. data/lib/legate/web/routes/agent_runtime_routes.rb +323 -0
  185. data/lib/legate/web/routes/api_routes.rb +56 -0
  186. data/lib/legate/web/routes/authentication_routes.rb +1541 -0
  187. data/lib/legate/web/routes/core_routes.rb +111 -0
  188. data/lib/legate/web/routes/documentation_routes.rb +220 -0
  189. data/lib/legate/web/routes/tool_generator_routes.rb +81 -0
  190. data/lib/legate/web/routes/tools_ui_routes.rb +207 -0
  191. data/lib/legate/web/sass_compiler.rb +73 -0
  192. data/lib/legate/web/views/_active_session_info.slim +25 -0
  193. data/lib/legate/web/views/_activity_list.slim +55 -0
  194. data/lib/legate/web/views/_agent_card.slim +56 -0
  195. data/lib/legate/web/views/_agent_generator_modal.slim +382 -0
  196. data/lib/legate/web/views/_agent_status_controls.slim +71 -0
  197. data/lib/legate/web/views/_agent_tool_table.slim +74 -0
  198. data/lib/legate/web/views/_chat_message.slim +95 -0
  199. data/lib/legate/web/views/_display_agent_configuration.slim +26 -0
  200. data/lib/legate/web/views/_display_agent_description.slim +11 -0
  201. data/lib/legate/web/views/_display_agent_fallback.slim +15 -0
  202. data/lib/legate/web/views/_display_agent_hierarchy.slim +93 -0
  203. data/lib/legate/web/views/_display_agent_instruction.slim +17 -0
  204. data/lib/legate/web/views/_display_agent_mcp.slim +13 -0
  205. data/lib/legate/web/views/_display_agent_model.slim +17 -0
  206. data/lib/legate/web/views/_display_agent_name.slim +42 -0
  207. data/lib/legate/web/views/_display_agent_output_key.slim +26 -0
  208. data/lib/legate/web/views/_display_agent_type.slim +65 -0
  209. data/lib/legate/web/views/_edit_agent_configuration.slim +74 -0
  210. data/lib/legate/web/views/_edit_agent_description.slim +16 -0
  211. data/lib/legate/web/views/_edit_agent_fallback.slim +25 -0
  212. data/lib/legate/web/views/_edit_agent_hierarchy.slim +98 -0
  213. data/lib/legate/web/views/_edit_agent_instruction.slim +49 -0
  214. data/lib/legate/web/views/_edit_agent_mcp.slim +33 -0
  215. data/lib/legate/web/views/_edit_agent_model.slim +23 -0
  216. data/lib/legate/web/views/_edit_agent_output_key.slim +36 -0
  217. data/lib/legate/web/views/_edit_agent_tools.slim +40 -0
  218. data/lib/legate/web/views/_edit_agent_type.slim +67 -0
  219. data/lib/legate/web/views/_session_error.slim +4 -0
  220. data/lib/legate/web/views/_skeleton.slim +69 -0
  221. data/lib/legate/web/views/_tool_card.slim +9 -0
  222. data/lib/legate/web/views/_tool_generator_modal.slim +311 -0
  223. data/lib/legate/web/views/agent.slim +436 -0
  224. data/lib/legate/web/views/agent_auth.slim +562 -0
  225. data/lib/legate/web/views/agents.slim +369 -0
  226. data/lib/legate/web/views/auth.slim +112 -0
  227. data/lib/legate/web/views/auth_credential_detail.slim +327 -0
  228. data/lib/legate/web/views/auth_credentials.slim +261 -0
  229. data/lib/legate/web/views/auth_debug.slim +94 -0
  230. data/lib/legate/web/views/auth_mapping_detail.slim +151 -0
  231. data/lib/legate/web/views/auth_mapping_new.slim +123 -0
  232. data/lib/legate/web/views/auth_mappings.slim +120 -0
  233. data/lib/legate/web/views/auth_scheme_detail.slim +274 -0
  234. data/lib/legate/web/views/auth_schemes.slim +259 -0
  235. data/lib/legate/web/views/auth_test.slim +418 -0
  236. data/lib/legate/web/views/chat.slim +192 -0
  237. data/lib/legate/web/views/docs_index.slim +105 -0
  238. data/lib/legate/web/views/docs_show.slim +105 -0
  239. data/lib/legate/web/views/error_404.slim +5 -0
  240. data/lib/legate/web/views/index.slim +148 -0
  241. data/lib/legate/web/views/layout.slim +144 -0
  242. data/lib/legate/web/views/tool_detail.slim +87 -0
  243. data/lib/legate/web/views/tools.slim +50 -0
  244. data/lib/legate/web/webhook_listener.rb +367 -0
  245. data/lib/legate/web.rb +9 -0
  246. data/lib/legate.rb +220 -0
  247. data/public/docs/advanced/callbacks.md +828 -0
  248. data/public/docs/advanced/mcp_schema_conversion.md +59 -0
  249. data/public/docs/authentication/api_reference/config.md +210 -0
  250. data/public/docs/authentication/api_reference/credential.md +246 -0
  251. data/public/docs/authentication/api_reference/encryption.md +218 -0
  252. data/public/docs/authentication/api_reference/exchanged_credential.md +271 -0
  253. data/public/docs/authentication/api_reference/excon_middleware.md +175 -0
  254. data/public/docs/authentication/api_reference/index.md +30 -0
  255. data/public/docs/authentication/api_reference/scheme.md +250 -0
  256. data/public/docs/authentication/api_reference/schemes/api_key.md +175 -0
  257. data/public/docs/authentication/api_reference/schemes/google_service_account.md +221 -0
  258. data/public/docs/authentication/api_reference/schemes/http_bearer.md +169 -0
  259. data/public/docs/authentication/api_reference/schemes/oauth2.md +343 -0
  260. data/public/docs/authentication/api_reference/schemes/oidc.md +73 -0
  261. data/public/docs/authentication/api_reference/schemes/openid_connect.md +311 -0
  262. data/public/docs/authentication/api_reference/schemes/service_account.md +287 -0
  263. data/public/docs/authentication/api_reference/token_manager.md +221 -0
  264. data/public/docs/authentication/api_reference/token_store.md +146 -0
  265. data/public/docs/authentication/api_reference/tool_context_extension.md +166 -0
  266. data/public/docs/authentication/guides/api_key.md +190 -0
  267. data/public/docs/authentication/guides/bearer.md +172 -0
  268. data/public/docs/authentication/guides/configuration.md +255 -0
  269. data/public/docs/authentication/guides/custom_flow.md +523 -0
  270. data/public/docs/authentication/guides/index.md +24 -0
  271. data/public/docs/authentication/guides/migration.md +435 -0
  272. data/public/docs/authentication/guides/oauth2.md +252 -0
  273. data/public/docs/authentication/guides/oidc.md +241 -0
  274. data/public/docs/authentication/guides/overview.md +155 -0
  275. data/public/docs/authentication/guides/secure_storage.md +301 -0
  276. data/public/docs/authentication/guides/service_account.md +228 -0
  277. data/public/docs/authentication/guides/token_lifecycle.md +295 -0
  278. data/public/docs/authentication/guides/web_ui_integration.md +504 -0
  279. data/public/docs/authentication/index.md +58 -0
  280. data/public/docs/authentication/troubleshooting/credential_storage.md +550 -0
  281. data/public/docs/authentication/troubleshooting/environment_variables.md +540 -0
  282. data/public/docs/authentication/troubleshooting/index.md +11 -0
  283. data/public/docs/authentication/troubleshooting/oauth2_issues.md +220 -0
  284. data/public/docs/authentication/troubleshooting/oidc_issues.md +412 -0
  285. data/public/docs/authentication/troubleshooting/token_refresh.md +338 -0
  286. data/public/docs/cli/legate_cli_usage.md +363 -0
  287. data/public/docs/core_concepts/legate_agent_lifecycle.md +124 -0
  288. data/public/docs/core_concepts/legate_architecture_overview.md +110 -0
  289. data/public/docs/core_concepts/legate_configuration.md +116 -0
  290. data/public/docs/core_concepts/legate_definition_store.md +102 -0
  291. data/public/docs/core_concepts/legate_planner.md +94 -0
  292. data/public/docs/core_concepts/legate_session_service.md +104 -0
  293. data/public/docs/error_handling/legate_error_handling.md +122 -0
  294. data/public/docs/examples.md +199 -0
  295. data/public/docs/getting_started.md +111 -0
  296. data/public/docs/guides/agentic_agents.md +137 -0
  297. data/public/docs/guides/ai_code_generators.md +437 -0
  298. data/public/docs/guides/auto_loading.md +326 -0
  299. data/public/docs/guides/configuring_agent_webhooks.md +219 -0
  300. data/public/docs/guides/http_client_usage.md +264 -0
  301. data/public/docs/guides/llm_providers.md +137 -0
  302. data/public/docs/guides/mcp_client_integration.md +232 -0
  303. data/public/docs/guides/mcp_server_exposure.md +206 -0
  304. data/public/docs/guides/rails_integration.md +128 -0
  305. data/public/docs/guides/sending_outbound_webhooks.md +227 -0
  306. data/public/docs/guides/streaming.md +112 -0
  307. data/public/docs/guides/webhooks.md +288 -0
  308. data/public/docs/introduction.md +51 -0
  309. data/public/docs/multi_agent_systems/advanced_features.md +57 -0
  310. data/public/docs/multi_agent_systems/agent_delegation.md +190 -0
  311. data/public/docs/multi_agent_systems/agent_hierarchy.md +49 -0
  312. data/public/docs/multi_agent_systems/state_management.md +47 -0
  313. data/public/docs/multi_agent_systems/workflow_agents.md +72 -0
  314. data/public/docs/tools/legate_built_in_tools.md +332 -0
  315. data/public/docs/tools/legate_tools_and_registry.md +263 -0
  316. data/public/docs/web_ui/legate_web_ui.md +137 -0
  317. metadata +823 -0
@@ -0,0 +1,4980 @@
1
+ @charset "UTF-8";
2
+ /* ========================================
3
+ CSS VARIABLES - THEME SYSTEM
4
+ ======================================== */
5
+ :root {
6
+ /* --- Brand Colors (Ruby Theme) --- */
7
+ --color-primary: hsl(348, 83%, 47%); /* Ruby red - main actions */
8
+ --color-primary-rgb: 219, 39, 77; /* RGB for rgba() usage */
9
+ --color-primary-dark: hsl(348, 83%, 40%); /* Ruby darker - hover */
10
+ --color-primary-hover: hsl(348, 83%, 42%); /* Hover state */
11
+ --color-primary-light: hsl(348, 83%, 95%); /* Ruby tint - backgrounds */
12
+ --color-accent: hsl(38, 92%, 50%); /* Warm gold - brand accent */
13
+ --color-accent-light: hsl(38, 92%, 94%); /* Gold tint */
14
+ /* --- Semantic Colors --- */
15
+ --color-success: hsl(152, 68%, 40%);
16
+ --color-success-light: hsl(152, 68%, 94%);
17
+ --color-warning: hsl(38, 92%, 50%);
18
+ --color-warning-light: hsl(38, 92%, 94%);
19
+ --color-danger: hsl(0, 72%, 51%);
20
+ --color-danger-light: hsl(0, 72%, 95%);
21
+ --color-info: hsl(201, 96%, 46%);
22
+ --color-info-light: hsl(201, 96%, 94%);
23
+ /* --- Neutral Colors (Light Mode) --- */
24
+ --color-bg-primary: #faf8f5; /* warm paper */
25
+ --color-bg-secondary: #ffffff;
26
+ --color-bg-tertiary: #f3efe9; /* warm tint */
27
+ --color-bg-elevated: #ffffff;
28
+ --color-text-primary: #1a202c;
29
+ --color-text-secondary: #4a5568;
30
+ --color-text-muted: #718096;
31
+ --color-text-inverse: #ffffff;
32
+ --color-border: #e2e8f0;
33
+ --color-border-light: #edf2f7;
34
+ --color-border-dark: #cbd5e0;
35
+ /* --- Shadows --- */
36
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
37
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08);
38
+ --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12);
39
+ --shadow-hover: 0 12px 28px rgba(0, 0, 0, 0.15);
40
+ /* --- Transitions --- */
41
+ --transition-fast: 150ms ease;
42
+ --transition-normal: 250ms ease;
43
+ --transition-slow: 350ms ease;
44
+ /* --- App shell --- */
45
+ --sidebar-width: 244px;
46
+ /* --- Border Radii --- */
47
+ --radius-sm: 6px;
48
+ --radius-md: 10px;
49
+ --radius-lg: 14px;
50
+ --radius-full: 9999px;
51
+ /* --- Font Families --- */
52
+ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
53
+ --font-headline: 'Space Grotesk', 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
54
+ --font-mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
55
+ }
56
+
57
+ /* --- Dark Mode Variables --- */
58
+ [data-theme=dark] {
59
+ --color-primary: hsl(348, 80%, 60%); /* Ruby red for dark mode */
60
+ --color-primary-rgb: 230, 92, 117; /* RGB for rgba() usage */
61
+ --color-primary-dark: hsl(348, 80%, 50%);
62
+ --color-primary-hover: hsl(348, 80%, 55%); /* Hover state */
63
+ --color-primary-light: hsl(348, 50%, 20%);
64
+ --color-accent: hsl(38, 92%, 55%); /* Warm gold for dark mode */
65
+ --color-accent-light: hsl(38, 50%, 20%);
66
+ --color-success: hsl(152, 68%, 50%);
67
+ --color-success-light: hsl(152, 40%, 18%);
68
+ --color-warning: hsl(38, 92%, 55%);
69
+ --color-warning-light: hsl(38, 50%, 18%);
70
+ --color-danger: hsl(0, 72%, 60%);
71
+ --color-danger-light: hsl(0, 50%, 18%);
72
+ --color-info: hsl(201, 96%, 55%);
73
+ --color-info-light: hsl(201, 50%, 18%);
74
+ --color-bg-primary: #0f1419;
75
+ --color-bg-secondary: #1a1f26;
76
+ --color-bg-tertiary: #242b33;
77
+ --color-bg-elevated: #2d343d;
78
+ --color-text-primary: #e7e9ea;
79
+ --color-text-secondary: #9ca3af;
80
+ --color-text-muted: #9ca3af; /* Fixed: improved contrast for accessibility */
81
+ --color-text-inverse: #1a202c;
82
+ --color-border: #2f3943;
83
+ --color-border-light: #242b33;
84
+ --color-border-dark: #3d4852;
85
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
86
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
87
+ --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);
88
+ --shadow-hover: 0 12px 28px rgba(0, 0, 0, 0.6);
89
+ }
90
+
91
+ /* ========================================
92
+ BASE STYLES
93
+ ======================================== */
94
+ /* --- General Theme Adjustments --- */
95
+ body {
96
+ background-color: var(--color-bg-primary);
97
+ color: var(--color-text-secondary);
98
+ font-family: var(--font-sans);
99
+ -webkit-font-smoothing: antialiased;
100
+ -moz-osx-font-smoothing: grayscale;
101
+ transition: background-color var(--transition-normal), color var(--transition-normal);
102
+ }
103
+
104
+ h1.title, h2.title, h3.title, h4.title, h5.title, h6.title {
105
+ font-family: var(--font-headline);
106
+ font-weight: 600;
107
+ color: var(--color-text-primary);
108
+ letter-spacing: -0.025em;
109
+ }
110
+
111
+ .subtitle {
112
+ color: var(--color-text-muted);
113
+ }
114
+
115
+ /* --- Navbar --- */
116
+ .navbar.is-white {
117
+ background-color: var(--color-bg-secondary) !important;
118
+ border-bottom: 1px solid var(--color-border);
119
+ transition: background-color var(--transition-normal), border-color var(--transition-normal);
120
+ }
121
+
122
+ /* Dark mode navbar */
123
+ [data-theme=dark] .navbar.is-white {
124
+ background-color: var(--color-bg-secondary) !important;
125
+ }
126
+
127
+ .navbar-item, .navbar-link {
128
+ font-weight: 500;
129
+ color: var(--color-text-secondary) !important;
130
+ transition: all var(--transition-fast);
131
+ }
132
+
133
+ /* Dark mode navbar text - ensure high contrast */
134
+ [data-theme=dark] .navbar-item,
135
+ [data-theme=dark] .navbar-link {
136
+ color: #e7e9ea !important;
137
+ }
138
+
139
+ [data-theme=dark] .navbar-item:hover:not(.is-active) {
140
+ color: #ffffff !important;
141
+ }
142
+
143
+ strong.has-text-link { /* Navbar Brand */
144
+ font-weight: 700;
145
+ font-size: 1.2em;
146
+ color: var(--color-primary) !important;
147
+ }
148
+
149
+ /* --- Brand logo lockup (theme-swapped) --- */
150
+ .brand-logo {
151
+ padding-top: 0;
152
+ padding-bottom: 0;
153
+ }
154
+
155
+ .brand-logo:hover {
156
+ background-color: transparent !important;
157
+ }
158
+
159
+ .brand-logo-img {
160
+ height: 30px;
161
+ width: auto;
162
+ max-height: none; /* override Bulma's navbar img cap (1.75rem) */
163
+ display: block;
164
+ }
165
+
166
+ .brand-logo-dark {
167
+ display: none;
168
+ }
169
+
170
+ [data-theme=dark] .brand-logo-light {
171
+ display: none;
172
+ }
173
+
174
+ [data-theme=dark] .brand-logo-dark {
175
+ display: block;
176
+ }
177
+
178
+ /* ========================================
179
+ APP SHELL — LEFT SIDEBAR
180
+ Fixed left rail on desktop; off-canvas drawer on touch.
181
+ ======================================== */
182
+ .sidebar {
183
+ position: fixed;
184
+ top: 0;
185
+ left: 0;
186
+ bottom: 0;
187
+ width: var(--sidebar-width);
188
+ display: flex;
189
+ flex-direction: column;
190
+ background-color: var(--color-bg-secondary);
191
+ border-right: 1px solid var(--color-border);
192
+ z-index: 30;
193
+ transition: transform var(--transition-normal), background-color var(--transition-normal), border-color var(--transition-normal);
194
+ }
195
+
196
+ .sidebar-brand {
197
+ padding: 1.25rem 1.25rem 1rem;
198
+ border-bottom: 1px solid var(--color-border-light);
199
+ }
200
+
201
+ .sidebar-brand .brand-logo {
202
+ padding: 0;
203
+ display: inline-block;
204
+ }
205
+
206
+ .sidebar-brand .brand-logo-img {
207
+ height: 34px;
208
+ }
209
+
210
+ .sidebar-tagline {
211
+ margin-top: 0.6rem;
212
+ font-size: 0.68rem;
213
+ font-weight: 600;
214
+ letter-spacing: 0.18em;
215
+ text-transform: uppercase;
216
+ color: var(--color-accent);
217
+ }
218
+
219
+ .sidebar-nav {
220
+ flex: 1 1 auto;
221
+ padding: 1rem 0.75rem;
222
+ overflow-y: auto;
223
+ }
224
+
225
+ .sidebar-link {
226
+ display: flex;
227
+ align-items: center;
228
+ gap: 0.75rem;
229
+ padding: 0.6rem 0.85rem;
230
+ margin-bottom: 0.2rem;
231
+ border-radius: var(--radius-md);
232
+ color: var(--color-text-secondary);
233
+ font-weight: 500;
234
+ transition: background-color var(--transition-fast), color var(--transition-fast);
235
+ }
236
+
237
+ .sidebar-link .icon {
238
+ color: var(--color-text-muted);
239
+ transition: color var(--transition-fast);
240
+ }
241
+
242
+ .sidebar-link:hover {
243
+ background-color: var(--color-bg-tertiary);
244
+ color: var(--color-text-primary);
245
+ }
246
+
247
+ .sidebar-link:hover .icon {
248
+ color: var(--color-text-primary);
249
+ }
250
+
251
+ .sidebar-link.is-active {
252
+ background-color: var(--color-primary-light);
253
+ color: var(--color-primary);
254
+ }
255
+
256
+ .sidebar-link.is-active .icon {
257
+ color: var(--color-primary);
258
+ }
259
+
260
+ .sidebar-footer {
261
+ padding: 0.85rem 1rem;
262
+ border-top: 1px solid var(--color-border-light);
263
+ display: flex;
264
+ align-items: center;
265
+ gap: 0.65rem;
266
+ }
267
+
268
+ .sidebar-ghlink {
269
+ display: inline-flex;
270
+ align-items: center;
271
+ gap: 0.4rem;
272
+ font-size: 0.85rem;
273
+ color: var(--color-text-muted);
274
+ transition: color var(--transition-fast);
275
+ }
276
+
277
+ .sidebar-ghlink:hover {
278
+ color: var(--color-text-primary);
279
+ }
280
+
281
+ /* --- Content offset by the fixed sidebar --- */
282
+ .app-content {
283
+ margin-left: var(--sidebar-width);
284
+ min-height: 100vh;
285
+ }
286
+
287
+ .footer {
288
+ margin-left: var(--sidebar-width);
289
+ }
290
+
291
+ /* --- Mobile top bar + off-canvas drawer (hidden on desktop) --- */
292
+ .mobile-topbar {
293
+ display: none;
294
+ }
295
+
296
+ .sidebar-backdrop {
297
+ display: none;
298
+ }
299
+
300
+ @media screen and (max-width: 1023px) {
301
+ .sidebar {
302
+ transform: translateX(-100%);
303
+ z-index: 40;
304
+ box-shadow: var(--shadow-lg);
305
+ }
306
+ .sidebar.is-active {
307
+ transform: translateX(0);
308
+ }
309
+ .app-content, .footer {
310
+ margin-left: 0;
311
+ }
312
+ .mobile-topbar {
313
+ display: flex;
314
+ align-items: center;
315
+ justify-content: space-between;
316
+ position: sticky;
317
+ top: 0;
318
+ z-index: 25;
319
+ padding: 0.6rem 1rem;
320
+ background-color: var(--color-bg-secondary);
321
+ border-bottom: 1px solid var(--color-border);
322
+ }
323
+ .mobile-topbar .brand-logo {
324
+ padding: 0;
325
+ }
326
+ .mobile-topbar .brand-logo-img {
327
+ height: 26px;
328
+ }
329
+ .sidebar-backdrop.is-active {
330
+ display: block;
331
+ position: fixed;
332
+ inset: 0;
333
+ background: rgba(0, 0, 0, 0.45);
334
+ z-index: 35;
335
+ }
336
+ .sidebar-burger {
337
+ background: transparent;
338
+ border: none;
339
+ cursor: pointer;
340
+ width: 2.5rem;
341
+ height: 2.5rem;
342
+ color: var(--color-text-primary);
343
+ }
344
+ .sidebar-burger span {
345
+ display: block;
346
+ width: 18px;
347
+ height: 2px;
348
+ margin: 3px auto;
349
+ background: currentColor;
350
+ border-radius: 2px;
351
+ }
352
+ }
353
+ /* Active state for current section */
354
+ .navbar-item.is-active {
355
+ background-color: var(--color-primary-light) !important;
356
+ color: var(--color-primary) !important;
357
+ font-weight: 600;
358
+ position: relative;
359
+ }
360
+ .navbar-item.is-active::after {
361
+ content: "";
362
+ position: absolute;
363
+ bottom: 0;
364
+ left: 50%;
365
+ transform: translateX(-50%);
366
+ width: 70%;
367
+ height: 3px;
368
+ background: var(--color-primary);
369
+ border-radius: 3px 3px 0 0;
370
+ }
371
+
372
+ /* Hover state - make it darker than active state */
373
+ .navbar-item:hover:not(.is-active) {
374
+ background-color: var(--color-bg-tertiary) !important;
375
+ color: var(--color-text-primary) !important;
376
+ }
377
+
378
+ /* Theme toggle button */
379
+ .theme-toggle {
380
+ background: transparent;
381
+ border: none;
382
+ cursor: pointer;
383
+ padding: 0.5rem;
384
+ border-radius: var(--radius-sm);
385
+ color: var(--color-text-secondary);
386
+ transition: all var(--transition-fast);
387
+ display: flex;
388
+ align-items: center;
389
+ justify-content: center;
390
+ }
391
+ .theme-toggle:hover {
392
+ background: var(--color-bg-tertiary);
393
+ color: var(--color-text-primary);
394
+ }
395
+ .theme-toggle i {
396
+ font-size: 1.1rem;
397
+ }
398
+
399
+ /* Navbar burger for mobile */
400
+ .navbar-burger span {
401
+ background-color: var(--color-text-primary);
402
+ transition: background-color var(--transition-fast);
403
+ }
404
+
405
+ .navbar-menu {
406
+ background: var(--color-bg-secondary);
407
+ }
408
+ @media screen and (max-width: 1023px) {
409
+ .navbar-menu {
410
+ border-top: 1px solid var(--color-border);
411
+ box-shadow: var(--shadow-lg);
412
+ }
413
+ }
414
+
415
+ /* --- Cards & Boxes --- */
416
+ .card, .box {
417
+ background-color: var(--color-bg-secondary) !important;
418
+ box-shadow: var(--shadow-md);
419
+ border: 1px solid var(--color-border);
420
+ border-radius: var(--radius-lg);
421
+ transition: transform var(--transition-normal), box-shadow var(--transition-normal), background-color var(--transition-normal), border-color var(--transition-normal);
422
+ }
423
+
424
+ /* Ensure dark mode applies to boxes */
425
+ [data-theme=dark] .card,
426
+ [data-theme=dark] .box {
427
+ background-color: var(--color-bg-secondary) !important;
428
+ border-color: var(--color-border) !important;
429
+ }
430
+
431
+ .card:hover, .box:hover {
432
+ transform: translateY(-6px);
433
+ box-shadow: var(--shadow-hover);
434
+ }
435
+
436
+ /* Dashboard hero section gradient */
437
+ .content.has-text-centered.mb-6 {
438
+ padding: 2rem 1rem 3rem;
439
+ margin: -1.5rem -1.5rem 2rem -1.5rem;
440
+ background: linear-gradient(135deg, rgba(220, 38, 38, 0.03) 0%, transparent 50%, rgba(245, 158, 11, 0.03) 100%);
441
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
442
+ }
443
+
444
+ [data-theme=dark] .content.has-text-centered.mb-6 {
445
+ background: linear-gradient(135deg, rgba(220, 38, 38, 0.08) 0%, transparent 50%, rgba(245, 158, 11, 0.05) 100%);
446
+ }
447
+
448
+ .box:not(:last-child), .card:not(:last-child) {
449
+ margin-bottom: 1.75rem;
450
+ }
451
+
452
+ /* ========================================
453
+ HERO WELCOME SECTION
454
+ ======================================== */
455
+ .hero-welcome {
456
+ position: relative;
457
+ padding: 2rem 2.25rem;
458
+ border-radius: var(--radius-lg);
459
+ background: linear-gradient(120deg, hsl(348, 83%, 44%) 0%, hsl(348, 76%, 36%) 55%, hsl(348, 72%, 28%) 100%);
460
+ color: white;
461
+ overflow: hidden;
462
+ box-shadow: var(--shadow-lg);
463
+ }
464
+ .hero-welcome::before {
465
+ content: "";
466
+ position: absolute;
467
+ inset: 0;
468
+ background-image: radial-gradient(circle at 88% 18%, rgba(255, 255, 255, 0.1) 0%, transparent 45%), radial-gradient(circle at 15% 120%, rgba(0, 0, 0, 0.12) 0%, transparent 50%);
469
+ pointer-events: none;
470
+ }
471
+ .hero-welcome .hero-content {
472
+ position: relative;
473
+ z-index: 1;
474
+ display: flex;
475
+ align-items: center;
476
+ justify-content: space-between;
477
+ gap: 1.5rem;
478
+ flex-wrap: wrap;
479
+ }
480
+ .hero-welcome .hero-main {
481
+ display: flex;
482
+ align-items: center;
483
+ gap: 1.25rem;
484
+ min-width: 0;
485
+ }
486
+ .hero-welcome .hero-badge {
487
+ flex: 0 0 auto;
488
+ width: 3.5rem;
489
+ height: 3.5rem;
490
+ display: flex;
491
+ align-items: center;
492
+ justify-content: center;
493
+ font-size: 1.6rem;
494
+ border-radius: var(--radius-md);
495
+ background: rgba(255, 255, 255, 0.14);
496
+ border: 1px solid rgba(255, 255, 255, 0.22);
497
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15);
498
+ animation: gem-float 3.5s ease-in-out infinite;
499
+ }
500
+ .hero-welcome .hero-eyebrow {
501
+ font-family: var(--font-mono);
502
+ font-size: 0.7rem;
503
+ font-weight: 600;
504
+ letter-spacing: 0.14em;
505
+ text-transform: uppercase;
506
+ opacity: 0.78;
507
+ margin-bottom: 0.15rem;
508
+ }
509
+ .hero-welcome .hero-title {
510
+ font-family: var(--font-headline);
511
+ font-size: 1.85rem;
512
+ font-weight: 700;
513
+ line-height: 1.1;
514
+ margin-bottom: 0.3rem;
515
+ text-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
516
+ letter-spacing: -0.02em;
517
+ }
518
+ .hero-welcome .hero-subtitle {
519
+ font-size: 1rem;
520
+ opacity: 0.9;
521
+ margin-bottom: 0;
522
+ line-height: 1.45;
523
+ }
524
+ .hero-welcome .hero-actions {
525
+ display: flex;
526
+ gap: 0.75rem;
527
+ flex-wrap: wrap;
528
+ flex-shrink: 0;
529
+ }
530
+ .hero-welcome .button.is-hero-primary {
531
+ background: white;
532
+ color: hsl(348, 83%, 42%);
533
+ border: none;
534
+ font-weight: 600;
535
+ box-shadow: 0 4px 14px rgba(0, 0, 0, 0.15);
536
+ }
537
+ .hero-welcome .button.is-hero-primary:hover {
538
+ background: #f8f8f8;
539
+ transform: translateY(-2px);
540
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2);
541
+ }
542
+ .hero-welcome .button.is-hero-secondary {
543
+ background: rgba(255, 255, 255, 0.15);
544
+ color: white;
545
+ border: 1px solid rgba(255, 255, 255, 0.3);
546
+ backdrop-filter: blur(4px);
547
+ }
548
+ .hero-welcome .button.is-hero-secondary:hover {
549
+ background: rgba(255, 255, 255, 0.25);
550
+ border-color: rgba(255, 255, 255, 0.5);
551
+ }
552
+ .hero-welcome .hero-pronounce {
553
+ display: inline-flex;
554
+ align-items: center;
555
+ gap: 0.5rem;
556
+ margin-top: 0.75rem;
557
+ padding: 0.25rem 0.7rem 0.25rem 0.55rem;
558
+ border-radius: 999px;
559
+ background: rgba(255, 255, 255, 0.12);
560
+ border: 1px solid rgba(255, 255, 255, 0.2);
561
+ color: white;
562
+ cursor: pointer;
563
+ font-size: 0.82rem;
564
+ line-height: 1.2;
565
+ transition: background var(--transition-fast), border-color var(--transition-fast), transform var(--transition-fast);
566
+ }
567
+ .hero-welcome .hero-pronounce:hover {
568
+ background: rgba(255, 255, 255, 0.2);
569
+ border-color: rgba(255, 255, 255, 0.4);
570
+ }
571
+ .hero-welcome .hero-pronounce:active {
572
+ transform: scale(0.97);
573
+ }
574
+ .hero-welcome .hero-pronounce .respell {
575
+ display: inline-flex;
576
+ align-items: baseline;
577
+ gap: 0.4rem;
578
+ }
579
+ .hero-welcome .hero-pronounce .respell strong {
580
+ font-weight: 700;
581
+ }
582
+ .hero-welcome .hero-pronounce .respell .phon {
583
+ font-family: var(--font-mono);
584
+ font-size: 0.75rem;
585
+ opacity: 0.85;
586
+ }
587
+ .hero-welcome .hero-pronounce .pronounce-wink {
588
+ opacity: 0.9;
589
+ font-style: italic;
590
+ }
591
+ .hero-welcome .hero-pronounce .pronounce-speaker {
592
+ opacity: 0.85;
593
+ font-size: 0.8rem;
594
+ }
595
+ .hero-welcome .hero-pronounce.is-saying .pronounce-speaker {
596
+ animation: pronounce-wiggle 0.5s ease-in-out 1;
597
+ }
598
+ @media screen and (max-width: 768px) {
599
+ .hero-welcome .hero-content {
600
+ align-items: flex-start;
601
+ }
602
+ .hero-welcome .hero-actions {
603
+ width: 100%;
604
+ }
605
+ .hero-welcome .hero-pronounce .pronounce-wink {
606
+ display: none;
607
+ }
608
+ }
609
+
610
+ @keyframes gem-float {
611
+ 0%, 100% {
612
+ transform: translateY(0);
613
+ }
614
+ 50% {
615
+ transform: translateY(-5px);
616
+ }
617
+ }
618
+ @keyframes pronounce-wiggle {
619
+ 0%, 100% {
620
+ transform: rotate(0) scale(1);
621
+ }
622
+ 25% {
623
+ transform: rotate(-12deg) scale(1.2);
624
+ }
625
+ 75% {
626
+ transform: rotate(12deg) scale(1.2);
627
+ }
628
+ }
629
+ [data-theme=dark] .hero-welcome {
630
+ background: linear-gradient(135deg, hsl(348, 65%, 35%) 0%, hsl(348, 55%, 25%) 50%, hsl(348, 50%, 18%) 100%);
631
+ }
632
+ [data-theme=dark] .hero-welcome .button.is-hero-primary {
633
+ background: rgba(255, 255, 255, 0.95);
634
+ color: hsl(348, 70%, 45%);
635
+ }
636
+
637
+ /* ========================================
638
+ ACTIVITY STREAM
639
+ ======================================== */
640
+ .activity-stream-box {
641
+ background: var(--color-bg-secondary);
642
+ border: 1px solid var(--color-border-light);
643
+ }
644
+
645
+ .activity-list .activity-item {
646
+ display: flex;
647
+ align-items: center;
648
+ padding: 0.875rem 0;
649
+ border-bottom: 1px solid var(--color-border-light);
650
+ }
651
+ .activity-list .activity-item:last-child {
652
+ border-bottom: none;
653
+ }
654
+ .activity-list .activity-item:first-child {
655
+ padding-top: 0;
656
+ }
657
+ .activity-list .activity-icon {
658
+ width: 36px;
659
+ height: 36px;
660
+ display: flex;
661
+ align-items: center;
662
+ justify-content: center;
663
+ background: var(--color-bg-tertiary);
664
+ border-radius: 50%;
665
+ margin-right: 0.875rem;
666
+ flex-shrink: 0;
667
+ }
668
+ .activity-list .activity-icon i {
669
+ font-size: 0.9rem;
670
+ }
671
+ .activity-list .activity-text {
672
+ flex: 1;
673
+ color: var(--color-text-secondary);
674
+ font-size: 0.9rem;
675
+ }
676
+ .activity-list .activity-text strong {
677
+ color: var(--color-text-primary);
678
+ font-weight: 600;
679
+ }
680
+ .activity-list .activity-time {
681
+ font-size: 0.75rem;
682
+ color: var(--color-text-muted);
683
+ white-space: nowrap;
684
+ margin-left: 1rem;
685
+ }
686
+
687
+ [data-theme=dark] .activity-stream-box {
688
+ background: var(--color-bg-secondary);
689
+ border-color: var(--color-border);
690
+ }
691
+
692
+ /* Dashboard cards with accent borders */
693
+ .dashboard-card {
694
+ position: relative;
695
+ overflow: hidden;
696
+ display: flex;
697
+ flex-direction: column;
698
+ }
699
+ .dashboard-card .card-content {
700
+ flex: 1;
701
+ }
702
+ .dashboard-card::before {
703
+ content: "";
704
+ position: absolute;
705
+ top: 0;
706
+ left: 0;
707
+ right: 0;
708
+ height: 4px;
709
+ background: var(--color-primary);
710
+ transition: height var(--transition-fast);
711
+ }
712
+ .dashboard-card:hover::before {
713
+ height: 5px;
714
+ }
715
+ .dashboard-card {
716
+ /* Card footer styling */
717
+ }
718
+ .dashboard-card .card-footer {
719
+ border-top: 1px solid var(--color-border-light);
720
+ background: var(--color-bg-tertiary);
721
+ }
722
+ .dashboard-card .card-footer .card-footer-item {
723
+ padding: 0.75rem;
724
+ color: var(--color-text-secondary);
725
+ font-size: 0.9rem;
726
+ transition: all var(--transition-fast);
727
+ display: flex;
728
+ align-items: center;
729
+ justify-content: center;
730
+ }
731
+ .dashboard-card .card-footer .card-footer-item:hover {
732
+ background: var(--color-bg-secondary);
733
+ color: var(--color-primary);
734
+ }
735
+ .dashboard-card .card-footer .card-footer-item.quick-action {
736
+ flex: 0 0 auto;
737
+ width: 48px;
738
+ border-left: 1px solid var(--color-border-light);
739
+ color: var(--color-text-muted);
740
+ }
741
+ .dashboard-card .card-footer .card-footer-item.quick-action:hover {
742
+ background: var(--color-primary-light);
743
+ color: var(--color-primary);
744
+ }
745
+ .dashboard-card {
746
+ /* Icon hover animation */
747
+ }
748
+ .dashboard-card .icon.is-large {
749
+ transition: transform var(--transition-normal);
750
+ }
751
+ .dashboard-card:hover .icon.is-large {
752
+ transform: scale(1.1);
753
+ }
754
+
755
+ /* Equal height cards on welcome page (scoped to index dashboard only) */
756
+ .index-dashboard-cards {
757
+ display: flex;
758
+ align-items: stretch;
759
+ }
760
+
761
+ .index-dashboard-cards .column {
762
+ display: flex;
763
+ }
764
+
765
+ .index-dashboard-cards .card {
766
+ width: 100%;
767
+ display: flex;
768
+ flex-direction: column;
769
+ position: relative;
770
+ }
771
+
772
+ .index-dashboard-cards .card-content {
773
+ flex: 1;
774
+ display: flex;
775
+ flex-direction: column;
776
+ align-items: center;
777
+ text-align: center;
778
+ justify-content: space-between;
779
+ padding-bottom: 30px;
780
+ }
781
+
782
+ .index-dashboard-cards .card-content .buttons {
783
+ bottom: 30px;
784
+ left: 0;
785
+ right: 0;
786
+ }
787
+
788
+ /* ========================================
789
+ AGENT HERO HEADER
790
+ ======================================== */
791
+ .agent-header-hero {
792
+ background: linear-gradient(135deg, var(--color-bg-secondary) 0%, var(--color-bg-tertiary) 100%);
793
+ border: 1px solid var(--color-border);
794
+ border-radius: var(--radius-lg);
795
+ padding: 1.25rem 1.5rem;
796
+ position: relative;
797
+ overflow: hidden;
798
+ }
799
+
800
+ /* Subtle decorative element */
801
+ .agent-header-hero::before {
802
+ content: "";
803
+ position: absolute;
804
+ top: 0;
805
+ right: 0;
806
+ width: 200px;
807
+ height: 200px;
808
+ background: radial-gradient(circle, var(--color-primary) 0%, transparent 70%);
809
+ opacity: 0.05;
810
+ pointer-events: none;
811
+ }
812
+
813
+ /* Top row: Name/badges on left, status/action on right */
814
+ .agent-header-top-row {
815
+ display: flex !important;
816
+ flex-direction: row !important;
817
+ justify-content: space-between;
818
+ align-items: flex-start;
819
+ gap: 1.5rem;
820
+ flex-wrap: nowrap;
821
+ }
822
+
823
+ .agent-header-identity {
824
+ flex: 1 1 auto;
825
+ min-width: 200px;
826
+ }
827
+
828
+ .agent-header-actions {
829
+ flex: 0 0 auto;
830
+ display: flex;
831
+ align-items: flex-start;
832
+ }
833
+
834
+ /* Agent Identity (Name + Badges) */
835
+ .agent-hero-identity {
836
+ /* Container for name and badges */
837
+ }
838
+
839
+ .agent-hero-name {
840
+ font-size: 1.75rem;
841
+ font-weight: 700;
842
+ color: var(--color-text-primary);
843
+ margin-bottom: 0.5rem;
844
+ line-height: 1.2;
845
+ }
846
+
847
+ .agent-hero-badges {
848
+ display: flex;
849
+ flex-wrap: wrap;
850
+ gap: 0.5rem;
851
+ align-items: center;
852
+ }
853
+
854
+ .agent-hero-badges .tag {
855
+ font-weight: 500;
856
+ padding: 0.4em 0.7em;
857
+ font-size: 0.85rem;
858
+ }
859
+
860
+ .agent-model-badge {
861
+ background: var(--color-bg-tertiary) !important;
862
+ color: var(--color-text-secondary) !important;
863
+ border: 1px solid var(--color-border);
864
+ }
865
+
866
+ /* Agent Status Controls - Horizontal Row */
867
+ .agent-header-controls {
868
+ display: flex;
869
+ align-items: center;
870
+ }
871
+
872
+ .agent-status-action-row {
873
+ display: flex;
874
+ align-items: center;
875
+ gap: 0.75rem;
876
+ }
877
+
878
+ .agent-status-badge {
879
+ font-weight: 600;
880
+ padding: 0.5em 1em !important;
881
+ font-size: 0.9rem;
882
+ }
883
+
884
+ .agent-status-badge .icon {
885
+ margin-right: 0.35em;
886
+ }
887
+
888
+ /* Render the status icon as a small dot, not a big filled circle */
889
+ .agent-status-badge .icon i {
890
+ font-size: 0.5em;
891
+ }
892
+
893
+ /* Animated pulse for running status */
894
+ .agent-status-badge.is-running .icon i {
895
+ animation: status-pulse 2s ease-in-out infinite;
896
+ }
897
+
898
+ @keyframes status-pulse {
899
+ 0%, 100% {
900
+ opacity: 1;
901
+ }
902
+ 50% {
903
+ opacity: 0.5;
904
+ }
905
+ }
906
+ .agent-action-btn {
907
+ font-weight: 600;
908
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast);
909
+ }
910
+
911
+ .agent-action-btn:hover:not(:disabled) {
912
+ transform: translateY(-1px);
913
+ box-shadow: var(--shadow-sm);
914
+ }
915
+
916
+ /* Quick Actions Dropdown */
917
+ .agent-quick-actions-dropdown {
918
+ margin-left: 0.5rem;
919
+ }
920
+
921
+ .agent-quick-actions-btn {
922
+ padding: 0.5rem 0.75rem;
923
+ border: 1px solid var(--color-border);
924
+ background: var(--color-bg-secondary);
925
+ color: var(--color-text-secondary);
926
+ transition: all var(--transition-fast);
927
+ }
928
+
929
+ .agent-quick-actions-btn:hover {
930
+ background: var(--color-bg-tertiary);
931
+ color: var(--color-text-primary);
932
+ border-color: var(--color-border-dark);
933
+ }
934
+
935
+ .agent-quick-actions-dropdown .dropdown-menu {
936
+ min-width: 200px;
937
+ }
938
+
939
+ .agent-quick-actions-dropdown .dropdown-content {
940
+ background: var(--color-bg-primary);
941
+ border: 1px solid var(--color-border);
942
+ border-radius: var(--radius-md);
943
+ box-shadow: var(--shadow-lg);
944
+ padding: 0.5rem 0;
945
+ }
946
+
947
+ .agent-quick-actions-dropdown .dropdown-item {
948
+ display: flex;
949
+ align-items: center;
950
+ gap: 0.75rem;
951
+ padding: 0.6rem 1rem;
952
+ color: var(--color-text-primary);
953
+ font-size: 0.9rem;
954
+ transition: background-color var(--transition-fast);
955
+ }
956
+
957
+ .agent-quick-actions-dropdown .dropdown-item:hover {
958
+ background: var(--color-bg-secondary);
959
+ }
960
+
961
+ .agent-quick-actions-dropdown .dropdown-item .icon {
962
+ color: var(--color-text-muted);
963
+ }
964
+
965
+ .agent-quick-actions-dropdown .dropdown-item:hover .icon {
966
+ color: var(--color-text-secondary);
967
+ }
968
+
969
+ .agent-quick-actions-dropdown .dropdown-item.has-text-danger {
970
+ color: var(--color-danger);
971
+ }
972
+
973
+ .agent-quick-actions-dropdown .dropdown-item.has-text-danger:hover {
974
+ background: rgba(var(--color-danger-rgb, 220, 53, 69), 0.1);
975
+ }
976
+
977
+ .agent-quick-actions-dropdown .dropdown-item.has-text-danger .icon {
978
+ color: var(--color-danger);
979
+ }
980
+
981
+ .agent-quick-actions-dropdown .dropdown-divider {
982
+ background-color: var(--color-border-light);
983
+ margin: 0.5rem 0;
984
+ }
985
+
986
+ /* Description - inside header */
987
+ .agent-header-description {
988
+ margin-top: 1rem;
989
+ padding-top: 1rem;
990
+ border-top: 1px solid var(--color-border-light);
991
+ }
992
+
993
+ /* Stats Bar */
994
+ .agent-stats-bar {
995
+ display: flex !important;
996
+ flex-direction: row !important;
997
+ flex-wrap: nowrap;
998
+ align-items: center;
999
+ gap: 0;
1000
+ margin-top: 1rem;
1001
+ background: var(--color-bg-tertiary);
1002
+ margin-left: -1.5rem;
1003
+ margin-right: -1.5rem;
1004
+ margin-bottom: -1.25rem;
1005
+ padding: 0.75rem 1.5rem;
1006
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
1007
+ border-top: 1px solid var(--color-border-light);
1008
+ }
1009
+
1010
+ .agent-stat {
1011
+ display: flex;
1012
+ flex-direction: column;
1013
+ align-items: center;
1014
+ justify-content: center;
1015
+ gap: 0.25rem;
1016
+ padding: 0.5rem 2rem;
1017
+ border-right: 1px solid var(--color-border-dark);
1018
+ font-size: 0.9rem;
1019
+ color: var(--color-text-secondary);
1020
+ text-decoration: none;
1021
+ transition: color var(--transition-fast), background-color var(--transition-fast);
1022
+ text-align: center;
1023
+ }
1024
+
1025
+ a.agent-stat {
1026
+ cursor: pointer;
1027
+ border-radius: var(--radius-sm);
1028
+ }
1029
+
1030
+ a.agent-stat:hover {
1031
+ background: var(--color-bg-secondary);
1032
+ }
1033
+
1034
+ .agent-stat:last-child {
1035
+ border-right: none;
1036
+ }
1037
+
1038
+ .agent-stat:first-child {
1039
+ padding-left: 0;
1040
+ }
1041
+
1042
+ a.agent-stat:hover {
1043
+ color: var(--color-primary);
1044
+ }
1045
+
1046
+ a.agent-stat:hover .icon {
1047
+ color: var(--color-primary);
1048
+ }
1049
+
1050
+ .agent-stat .icon {
1051
+ color: var(--color-text-muted);
1052
+ flex-shrink: 0;
1053
+ transition: color var(--transition-fast);
1054
+ }
1055
+
1056
+ a.agent-stat:hover .icon {
1057
+ color: var(--color-primary);
1058
+ }
1059
+
1060
+ .agent-stat-value {
1061
+ font-weight: 700;
1062
+ font-size: 1.1rem;
1063
+ color: var(--color-text-primary);
1064
+ line-height: 1.2;
1065
+ }
1066
+
1067
+ .agent-stat-label {
1068
+ color: var(--color-text-muted);
1069
+ font-size: 0.7rem;
1070
+ text-transform: uppercase;
1071
+ letter-spacing: 0.05em;
1072
+ }
1073
+
1074
+ /* Collapsible Agent Details - Simplified */
1075
+ .agent-details-collapsible {
1076
+ margin-top: 1rem;
1077
+ padding-top: 0.75rem;
1078
+ border-top: 1px solid var(--color-border-light);
1079
+ }
1080
+
1081
+ .agent-details-summary {
1082
+ cursor: pointer;
1083
+ display: flex;
1084
+ align-items: center;
1085
+ gap: 0.5rem;
1086
+ font-size: 0.9rem;
1087
+ color: var(--color-text-secondary);
1088
+ font-weight: 500;
1089
+ user-select: none;
1090
+ transition: color var(--transition-fast);
1091
+ }
1092
+
1093
+ .agent-details-summary:hover {
1094
+ color: var(--color-text-primary);
1095
+ }
1096
+
1097
+ .agent-details-summary .icon {
1098
+ transition: transform var(--transition-fast);
1099
+ }
1100
+
1101
+ .agent-details-collapsible[open] .agent-details-summary .icon {
1102
+ transform: rotate(90deg);
1103
+ }
1104
+
1105
+ .agent-details-content {
1106
+ padding-top: 0.75rem;
1107
+ padding-left: 1.5rem;
1108
+ }
1109
+
1110
+ .agent-stat {
1111
+ display: flex;
1112
+ flex-direction: column;
1113
+ align-items: center;
1114
+ text-align: center;
1115
+ }
1116
+
1117
+ .agent-stat-value {
1118
+ font-size: 1.25rem;
1119
+ font-weight: 700;
1120
+ color: var(--color-text-primary);
1121
+ }
1122
+
1123
+ .agent-stat-label {
1124
+ font-size: 0.75rem;
1125
+ color: var(--color-text-muted);
1126
+ text-transform: uppercase;
1127
+ letter-spacing: 0.5px;
1128
+ }
1129
+
1130
+ /* Description Section */
1131
+ .agent-header-description {
1132
+ margin-top: 1.25rem;
1133
+ padding-top: 1.25rem;
1134
+ border-top: 1px solid var(--color-border);
1135
+ }
1136
+
1137
+ .agent-header-description p.subtitle {
1138
+ line-height: 1.5;
1139
+ color: var(--color-text-secondary);
1140
+ margin-bottom: 0 !important;
1141
+ }
1142
+
1143
+ .agent-header-description button.is-ghost {
1144
+ vertical-align: top;
1145
+ margin-left: 0.25rem;
1146
+ }
1147
+
1148
+ .agent-header-description form {
1149
+ width: 100%;
1150
+ }
1151
+
1152
+ .agent-header-description form .textarea {
1153
+ width: 100%;
1154
+ min-height: 6em;
1155
+ }
1156
+
1157
+ .agent-header-description form .field.is-grouped {
1158
+ margin-top: 0.75rem;
1159
+ }
1160
+
1161
+ .agent-header-description form .label.is-small {
1162
+ margin-bottom: 0.25rem;
1163
+ color: var(--color-text-muted);
1164
+ font-weight: normal;
1165
+ }
1166
+
1167
+ /* Collapsible Agent Details */
1168
+ .agent-details-collapsible {
1169
+ margin-top: 1.25rem;
1170
+ padding-top: 1rem;
1171
+ border-top: 1px solid var(--color-border);
1172
+ }
1173
+
1174
+ .agent-details-summary {
1175
+ cursor: pointer;
1176
+ display: flex;
1177
+ align-items: center;
1178
+ gap: 0.5rem;
1179
+ padding: 0.5rem 0;
1180
+ color: var(--color-text-secondary);
1181
+ font-weight: 500;
1182
+ user-select: none;
1183
+ transition: color var(--transition-fast);
1184
+ }
1185
+
1186
+ .agent-details-summary:hover {
1187
+ color: var(--color-text-primary);
1188
+ }
1189
+
1190
+ .agent-details-summary .icon {
1191
+ transition: transform var(--transition-fast);
1192
+ }
1193
+
1194
+ .agent-details-collapsible[open] .agent-details-summary .icon {
1195
+ transform: rotate(90deg);
1196
+ }
1197
+
1198
+ .agent-details-content {
1199
+ padding-top: 1rem;
1200
+ }
1201
+
1202
+ /* Legacy support (keep old class for any remaining references) */
1203
+ .agent-header-box {
1204
+ border: 1px solid var(--color-border);
1205
+ background-color: var(--color-bg-secondary);
1206
+ }
1207
+
1208
+ /* ========================================
1209
+ EXECUTE TAB - TERMINAL STYLE
1210
+ ======================================== */
1211
+ .execute-tab-layout {
1212
+ display: flex;
1213
+ flex-direction: column;
1214
+ gap: 1.5rem;
1215
+ }
1216
+
1217
+ .execute-input-section {
1218
+ width: 100%;
1219
+ }
1220
+
1221
+ .execute-result-section {
1222
+ width: 100%;
1223
+ }
1224
+
1225
+ /* Code Editor Textarea */
1226
+ .is-code-editor {
1227
+ font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace !important;
1228
+ font-size: 0.875rem;
1229
+ line-height: 1.5;
1230
+ background-color: var(--color-bg-tertiary);
1231
+ border: 1px solid var(--color-border);
1232
+ color: var(--color-text-primary);
1233
+ tab-size: 2;
1234
+ }
1235
+
1236
+ .is-code-editor::placeholder {
1237
+ color: var(--color-text-muted);
1238
+ font-style: italic;
1239
+ }
1240
+
1241
+ .is-code-editor:focus {
1242
+ border-color: var(--color-primary);
1243
+ box-shadow: 0 0 0 2px rgba(var(--color-primary-rgb), 0.15);
1244
+ }
1245
+
1246
+ /* Terminal Window */
1247
+ .terminal-window {
1248
+ background: #1e1e2e;
1249
+ border-radius: var(--radius-md);
1250
+ overflow: hidden;
1251
+ box-shadow: var(--shadow-lg);
1252
+ display: flex;
1253
+ flex-direction: column;
1254
+ min-height: 350px;
1255
+ }
1256
+
1257
+ .terminal-header {
1258
+ display: flex;
1259
+ align-items: center;
1260
+ gap: 0.75rem;
1261
+ padding: 0.75rem 1rem;
1262
+ background: #181825;
1263
+ border-bottom: 1px solid #313244;
1264
+ }
1265
+
1266
+ .terminal-buttons {
1267
+ display: flex;
1268
+ gap: 0.5rem;
1269
+ }
1270
+
1271
+ .terminal-btn {
1272
+ width: 12px;
1273
+ height: 12px;
1274
+ border-radius: 50%;
1275
+ }
1276
+
1277
+ .terminal-btn-close {
1278
+ background: #f38ba8;
1279
+ }
1280
+
1281
+ .terminal-btn-minimize {
1282
+ background: #f9e2af;
1283
+ }
1284
+
1285
+ .terminal-btn-maximize {
1286
+ background: #a6e3a1;
1287
+ }
1288
+
1289
+ .terminal-title {
1290
+ font-size: 0.75rem;
1291
+ color: #6c7086;
1292
+ font-weight: 500;
1293
+ text-transform: uppercase;
1294
+ letter-spacing: 0.5px;
1295
+ }
1296
+
1297
+ .terminal-body {
1298
+ flex: 1;
1299
+ padding: 1rem;
1300
+ font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace;
1301
+ font-size: 0.85rem;
1302
+ line-height: 1.6;
1303
+ color: #cdd6f4;
1304
+ overflow-y: auto;
1305
+ overflow-x: hidden;
1306
+ word-break: break-word;
1307
+ /* Notification styling inside terminal */
1308
+ }
1309
+ .terminal-body .notification {
1310
+ background: #313244;
1311
+ border: 1px solid #45475a;
1312
+ border-radius: var(--radius-md);
1313
+ color: #cdd6f4;
1314
+ margin: 0;
1315
+ padding: 1rem;
1316
+ }
1317
+ .terminal-body .notification.is-success {
1318
+ background: linear-gradient(135deg, #1a332a 0%, #1e3d30 100%);
1319
+ border-color: #2d5a45;
1320
+ }
1321
+ .terminal-body .notification.is-success p strong {
1322
+ color: #a6e3a1;
1323
+ }
1324
+ .terminal-body .notification.is-danger {
1325
+ background: linear-gradient(135deg, #3a1a1a 0%, #4a2020 100%);
1326
+ border-color: #5a2d2d;
1327
+ }
1328
+ .terminal-body .notification.is-danger p strong {
1329
+ color: #f38ba8;
1330
+ }
1331
+ .terminal-body .notification.is-warning {
1332
+ background: linear-gradient(135deg, #33291a 0%, #3d3020 100%);
1333
+ border-color: #5a4a2d;
1334
+ }
1335
+ .terminal-body .notification.is-warning p strong {
1336
+ color: #f9e2af;
1337
+ }
1338
+ .terminal-body .notification.is-info {
1339
+ background: linear-gradient(135deg, #1e2a4a 0%, #243050 100%);
1340
+ border-color: #3d4f7a;
1341
+ }
1342
+ .terminal-body .notification.is-info p strong {
1343
+ color: #89dceb;
1344
+ }
1345
+ .terminal-body .notification p {
1346
+ margin-bottom: 0.5rem;
1347
+ color: #cdd6f4;
1348
+ }
1349
+ .terminal-body .notification p strong {
1350
+ font-weight: 600;
1351
+ display: block;
1352
+ margin-bottom: 0.5rem;
1353
+ font-size: 0.9rem;
1354
+ text-transform: uppercase;
1355
+ letter-spacing: 0.05em;
1356
+ }
1357
+ .terminal-body .notification pre {
1358
+ background: rgba(0, 0, 0, 0.3);
1359
+ border: 1px solid rgba(255, 255, 255, 0.1);
1360
+ border-radius: var(--radius-sm);
1361
+ padding: 1rem;
1362
+ margin: 0;
1363
+ overflow-x: auto;
1364
+ white-space: pre-wrap;
1365
+ word-break: break-word;
1366
+ font-size: 0.85rem;
1367
+ line-height: 1.7;
1368
+ color: #cdd6f4;
1369
+ max-height: 400px;
1370
+ overflow-y: auto;
1371
+ }
1372
+ .terminal-body .notification pre.has-text-danger {
1373
+ color: #f38ba8;
1374
+ }
1375
+
1376
+ .terminal-placeholder {
1377
+ color: #6c7086;
1378
+ font-style: italic;
1379
+ }
1380
+
1381
+ /* Terminal content styling */
1382
+ .terminal-body > p {
1383
+ margin-bottom: 0.5rem;
1384
+ }
1385
+
1386
+ .terminal-body > code {
1387
+ background: #313244;
1388
+ padding: 0.125rem 0.375rem;
1389
+ border-radius: 3px;
1390
+ color: #f5c2e7;
1391
+ }
1392
+
1393
+ .terminal-body > pre {
1394
+ background: #11111b;
1395
+ padding: 0.75rem;
1396
+ border-radius: var(--radius-sm);
1397
+ overflow-x: auto;
1398
+ white-space: pre-wrap;
1399
+ word-break: break-word;
1400
+ margin: 0.5rem 0;
1401
+ }
1402
+
1403
+ /* JSON syntax highlighting (basic) */
1404
+ .terminal-body .json-key {
1405
+ color: #89b4fa;
1406
+ }
1407
+
1408
+ .terminal-body .json-string {
1409
+ color: #a6e3a1;
1410
+ }
1411
+
1412
+ .terminal-body .json-number {
1413
+ color: #fab387;
1414
+ }
1415
+
1416
+ .terminal-body .json-boolean {
1417
+ color: #f5c2e7;
1418
+ }
1419
+
1420
+ /* Execute button styles */
1421
+ .execute-input-box {
1422
+ background: var(--color-bg-secondary);
1423
+ }
1424
+
1425
+ .execute-input-box .title {
1426
+ display: flex;
1427
+ align-items: center;
1428
+ }
1429
+
1430
+ #execute-task-button {
1431
+ min-width: 140px;
1432
+ font-weight: 600;
1433
+ }
1434
+
1435
+ #execute-task-button:disabled {
1436
+ opacity: 0.6;
1437
+ }
1438
+
1439
+ /* Responsive adjustments */
1440
+ @media screen and (max-width: 768px) {
1441
+ .agent-header-top-row {
1442
+ flex-direction: column;
1443
+ gap: 1rem;
1444
+ }
1445
+ .agent-header-actions {
1446
+ width: 100%;
1447
+ }
1448
+ .agent-status-action-row {
1449
+ justify-content: space-between;
1450
+ width: 100%;
1451
+ }
1452
+ .agent-stats-bar {
1453
+ flex-wrap: wrap;
1454
+ gap: 0.5rem;
1455
+ }
1456
+ .agent-stat {
1457
+ border-right: none;
1458
+ padding: 0.5rem 0;
1459
+ flex: 1 1 auto;
1460
+ min-width: 100px;
1461
+ justify-content: center;
1462
+ }
1463
+ .agent-hero-name {
1464
+ font-size: 1.5rem;
1465
+ }
1466
+ }
1467
+ /* --- Custom Rounded Tabs --- */
1468
+ /* ========================================
1469
+ CUSTOM ROUNDED TABS - POLISHED
1470
+ ======================================== */
1471
+ /* Modern underline tabs (ruby active underline, no boxes) */
1472
+ .custom-rounded-tabs-container {
1473
+ background-color: transparent;
1474
+ padding: 0;
1475
+ margin-bottom: 1.5rem;
1476
+ border-bottom: 1px solid var(--color-border);
1477
+ overflow-x: auto;
1478
+ position: relative;
1479
+ }
1480
+
1481
+ .custom-rounded-tabs-container .tabs {
1482
+ margin-bottom: 0 !important;
1483
+ }
1484
+
1485
+ .custom-rounded-tabs-container .tabs ul {
1486
+ border-bottom: none;
1487
+ align-items: flex-end;
1488
+ flex-wrap: nowrap;
1489
+ gap: 0.25rem;
1490
+ }
1491
+
1492
+ .custom-rounded-tabs-container .tabs li {
1493
+ margin: 0;
1494
+ }
1495
+
1496
+ .custom-rounded-tabs-container .tabs li a {
1497
+ border: none;
1498
+ border-bottom: 2px solid transparent;
1499
+ border-radius: 0;
1500
+ background-color: transparent;
1501
+ color: var(--color-text-muted);
1502
+ padding: 0.8rem 1.1rem;
1503
+ margin-bottom: -1px; /* overlap the container's bottom rail */
1504
+ min-height: 44px;
1505
+ display: flex;
1506
+ align-items: center;
1507
+ gap: 0.5rem;
1508
+ font-weight: 500;
1509
+ font-size: 0.9rem;
1510
+ white-space: nowrap;
1511
+ box-shadow: none;
1512
+ transition: color var(--transition-fast), border-color var(--transition-fast);
1513
+ }
1514
+
1515
+ .custom-rounded-tabs-container .tabs li a:hover {
1516
+ background-color: transparent;
1517
+ color: var(--color-text-primary);
1518
+ border-bottom-color: var(--color-border-dark);
1519
+ }
1520
+
1521
+ .custom-rounded-tabs-container .tabs li.is-active a {
1522
+ background-color: transparent;
1523
+ color: var(--color-primary);
1524
+ border-bottom-color: var(--color-primary);
1525
+ font-weight: 600;
1526
+ box-shadow: none;
1527
+ }
1528
+
1529
+ /* Icon styling */
1530
+ .custom-rounded-tabs-container .tabs li a .icon {
1531
+ color: inherit;
1532
+ font-size: 0.85em;
1533
+ }
1534
+
1535
+ .custom-rounded-tabs-container .tabs li.is-active a .icon {
1536
+ color: var(--color-primary);
1537
+ }
1538
+
1539
+ .custom-rounded-tabs-container .tabs li .tab-external-icon {
1540
+ font-size: 0.68em;
1541
+ opacity: 0.55;
1542
+ margin-left: 0.15rem;
1543
+ }
1544
+
1545
+ /* ========================================
1546
+ CONFIG PANEL (agent detail → Config tab)
1547
+ ======================================== */
1548
+ .config-panel .config-field {
1549
+ padding: 0.95rem 0;
1550
+ border-top: 1px solid var(--color-border-light);
1551
+ }
1552
+
1553
+ .config-panel .config-field:first-of-type {
1554
+ padding-top: 0;
1555
+ border-top: none;
1556
+ }
1557
+
1558
+ .config-panel .config-field:last-of-type {
1559
+ padding-bottom: 0;
1560
+ }
1561
+
1562
+ .config-field-row {
1563
+ display: flex;
1564
+ align-items: center;
1565
+ justify-content: space-between;
1566
+ gap: 1rem;
1567
+ }
1568
+
1569
+ .config-field-main {
1570
+ display: flex;
1571
+ align-items: center;
1572
+ gap: 0.85rem;
1573
+ min-width: 0;
1574
+ flex-wrap: wrap;
1575
+ }
1576
+
1577
+ .config-field-head {
1578
+ display: flex;
1579
+ align-items: center;
1580
+ justify-content: space-between;
1581
+ gap: 1rem;
1582
+ margin-bottom: 0.5rem;
1583
+ }
1584
+
1585
+ .config-label {
1586
+ font-size: 0.68rem;
1587
+ font-weight: 700;
1588
+ letter-spacing: 0.07em;
1589
+ text-transform: uppercase;
1590
+ color: var(--color-text-muted);
1591
+ flex: none;
1592
+ min-width: 150px;
1593
+ }
1594
+
1595
+ .config-field-head .config-label {
1596
+ min-width: 0;
1597
+ }
1598
+
1599
+ .config-value {
1600
+ color: var(--color-text-primary);
1601
+ font-size: 0.92rem;
1602
+ }
1603
+
1604
+ .config-empty {
1605
+ color: var(--color-text-muted);
1606
+ font-style: italic;
1607
+ font-size: 0.9rem;
1608
+ margin: 0;
1609
+ }
1610
+
1611
+ .config-edit-btn {
1612
+ display: inline-flex;
1613
+ align-items: center;
1614
+ justify-content: center;
1615
+ width: 1.9rem;
1616
+ height: 1.9rem;
1617
+ flex: none;
1618
+ border: 1px solid var(--color-border);
1619
+ border-radius: var(--radius-md);
1620
+ background: transparent;
1621
+ color: var(--color-text-muted);
1622
+ cursor: pointer;
1623
+ font-size: 0.8rem;
1624
+ transition: all var(--transition-fast);
1625
+ }
1626
+
1627
+ .config-edit-btn:hover {
1628
+ color: var(--color-primary);
1629
+ border-color: var(--color-primary);
1630
+ background: var(--color-primary-light);
1631
+ }
1632
+
1633
+ .config-code {
1634
+ font-family: var(--font-mono);
1635
+ font-size: 0.78rem;
1636
+ line-height: 1.5;
1637
+ background: var(--color-bg-tertiary);
1638
+ border: 1px solid var(--color-border);
1639
+ border-radius: var(--radius-sm);
1640
+ padding: 0.7rem 0.85rem;
1641
+ color: var(--color-text-secondary);
1642
+ white-space: pre-wrap;
1643
+ word-break: break-word;
1644
+ margin: 0;
1645
+ overflow-x: auto;
1646
+ }
1647
+
1648
+ /* AI agent generator — review form */
1649
+ .agent-gen-review-banner {
1650
+ display: flex;
1651
+ align-items: center;
1652
+ gap: 0.5rem;
1653
+ padding: 0.6rem 0.85rem;
1654
+ background: var(--color-primary-light);
1655
+ color: var(--color-primary);
1656
+ border-radius: var(--radius-md);
1657
+ font-weight: 500;
1658
+ font-size: 0.9rem;
1659
+ }
1660
+
1661
+ .agent-gen-tools {
1662
+ display: grid;
1663
+ grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
1664
+ gap: 0.45rem 0.85rem;
1665
+ padding: 0.75rem;
1666
+ border: 1px solid var(--color-border);
1667
+ border-radius: var(--radius-md);
1668
+ background: var(--color-bg-tertiary);
1669
+ max-height: 170px;
1670
+ overflow-y: auto;
1671
+ }
1672
+
1673
+ .agent-gen-tool-item {
1674
+ display: inline-flex;
1675
+ align-items: center;
1676
+ gap: 0.45rem;
1677
+ font-size: 0.85rem;
1678
+ }
1679
+
1680
+ .agent-gen-tool-item input[type=checkbox] {
1681
+ accent-color: var(--color-primary);
1682
+ }
1683
+
1684
+ .agent-gen-tool-name {
1685
+ font-family: var(--font-mono);
1686
+ font-size: 0.8rem;
1687
+ }
1688
+
1689
+ .agent-gen-code-details summary {
1690
+ cursor: pointer;
1691
+ font-weight: 600;
1692
+ color: var(--color-text-secondary);
1693
+ font-size: 0.85rem;
1694
+ }
1695
+
1696
+ .agent-gen-code-details[open] summary {
1697
+ margin-bottom: 0.4rem;
1698
+ }
1699
+
1700
+ .agent-gen-suggested {
1701
+ display: flex;
1702
+ flex-direction: column;
1703
+ gap: 0.5rem;
1704
+ }
1705
+
1706
+ .agent-gen-suggested-item {
1707
+ display: flex;
1708
+ align-items: center;
1709
+ justify-content: space-between;
1710
+ gap: 0.75rem;
1711
+ padding: 0.6rem 0.75rem;
1712
+ border: 1px solid var(--color-border);
1713
+ border-radius: var(--radius-md);
1714
+ background: var(--color-bg-secondary);
1715
+ }
1716
+
1717
+ .agent-gen-suggested-info {
1718
+ display: flex;
1719
+ flex-direction: column;
1720
+ gap: 0.1rem;
1721
+ min-width: 0;
1722
+ }
1723
+
1724
+ .agent-gen-suggested-name {
1725
+ font-family: var(--font-mono);
1726
+ font-size: 0.82rem;
1727
+ font-weight: 600;
1728
+ color: var(--color-primary);
1729
+ }
1730
+
1731
+ .agent-gen-suggested-desc {
1732
+ font-size: 0.8rem;
1733
+ color: var(--color-text-muted);
1734
+ }
1735
+
1736
+ .agent-gen-build-btn {
1737
+ flex: none;
1738
+ }
1739
+
1740
+ /* Tool generator — live install box */
1741
+ .tool-install-box {
1742
+ padding: 0.85rem 1rem;
1743
+ border: 1px solid var(--color-border);
1744
+ border-radius: var(--radius-md);
1745
+ background: var(--color-bg-tertiary);
1746
+ }
1747
+
1748
+ .tool-install-confirm {
1749
+ display: flex;
1750
+ gap: 0.5rem;
1751
+ align-items: flex-start;
1752
+ font-size: 0.88rem;
1753
+ }
1754
+
1755
+ .tool-install-confirm input[type=checkbox] {
1756
+ accent-color: var(--color-primary);
1757
+ margin-top: 0.2rem;
1758
+ }
1759
+
1760
+ .tool-install-disabled {
1761
+ color: var(--color-text-muted);
1762
+ }
1763
+
1764
+ /* Tab content — no outer panel; the inner cards provide their own framing */
1765
+ #tab-content {
1766
+ background-color: transparent;
1767
+ border: none;
1768
+ border-radius: 0;
1769
+ padding: 0;
1770
+ margin-bottom: 1.5rem;
1771
+ }
1772
+
1773
+ /* Tab content fade transition */
1774
+ #tab-content > .content-tab {
1775
+ animation: tabFadeIn 0.2s ease-out;
1776
+ }
1777
+
1778
+ @keyframes tabFadeIn {
1779
+ from {
1780
+ opacity: 0;
1781
+ transform: translateY(-4px);
1782
+ }
1783
+ to {
1784
+ opacity: 1;
1785
+ transform: translateY(0);
1786
+ }
1787
+ }
1788
+ /* Respect reduced motion preference */
1789
+ @media (prefers-reduced-motion: reduce) {
1790
+ #tab-content > .content-tab {
1791
+ animation: none;
1792
+ }
1793
+ }
1794
+ /* --- Tab Content Spacing --- */
1795
+ #tab-content > .content-tab > .box,
1796
+ #tab-content > .content-tab > .columns {
1797
+ margin-top: 0;
1798
+ }
1799
+
1800
+ /* --- Tables --- */
1801
+ .table-container {
1802
+ background: var(--color-bg-secondary);
1803
+ border: 1px solid var(--color-border);
1804
+ border-radius: var(--radius-lg);
1805
+ overflow: visible; /* Ensure both axes allow overflow for dropdown */
1806
+ transition: background-color var(--transition-normal), border-color var(--transition-normal);
1807
+ }
1808
+
1809
+ .table {
1810
+ background-color: transparent;
1811
+ font-size: 0.9rem;
1812
+ border-radius: var(--radius-md);
1813
+ }
1814
+
1815
+ .table thead th {
1816
+ background: var(--color-bg-tertiary);
1817
+ color: var(--color-text-secondary);
1818
+ font-size: 0.75rem;
1819
+ text-transform: uppercase;
1820
+ letter-spacing: 0.05em;
1821
+ font-weight: 600;
1822
+ border-bottom-width: 2px;
1823
+ border-color: var(--color-border);
1824
+ padding: 0.875rem 1rem;
1825
+ }
1826
+
1827
+ .table td, .table th {
1828
+ vertical-align: middle;
1829
+ padding: 0.875rem 1rem;
1830
+ border-color: var(--color-border);
1831
+ color: var(--color-text-primary);
1832
+ }
1833
+
1834
+ .table.is-striped tbody tr:nth-child(even) {
1835
+ background-color: var(--color-bg-tertiary);
1836
+ }
1837
+
1838
+ .table.is-hoverable tbody tr:hover {
1839
+ background-color: var(--color-primary-light);
1840
+ }
1841
+
1842
+ /* Dark mode table adjustments */
1843
+ [data-theme=dark] .table {
1844
+ background-color: transparent !important;
1845
+ }
1846
+
1847
+ [data-theme=dark] .table thead th {
1848
+ background-color: var(--color-bg-tertiary) !important;
1849
+ color: var(--color-text-secondary) !important;
1850
+ }
1851
+
1852
+ [data-theme=dark] .table td,
1853
+ [data-theme=dark] .table th {
1854
+ color: var(--color-text-primary) !important;
1855
+ border-color: var(--color-border) !important;
1856
+ background-color: transparent !important;
1857
+ }
1858
+
1859
+ [data-theme=dark] .table tbody {
1860
+ background-color: var(--color-bg-secondary) !important;
1861
+ }
1862
+
1863
+ [data-theme=dark] .table tbody tr {
1864
+ background-color: var(--color-bg-secondary) !important;
1865
+ }
1866
+
1867
+ [data-theme=dark] .table.is-striped tbody tr:nth-child(even) {
1868
+ background-color: var(--color-bg-tertiary) !important;
1869
+ }
1870
+
1871
+ [data-theme=dark] .table.is-striped tbody tr:nth-child(odd) {
1872
+ background-color: var(--color-bg-secondary) !important;
1873
+ }
1874
+
1875
+ [data-theme=dark] .table.is-hoverable tbody tr:hover {
1876
+ background-color: rgba(220, 38, 38, 0.15) !important; /* Ruby red tint */
1877
+ }
1878
+
1879
+ /* Table row hover accent - left border indicator */
1880
+ /* Only apply to specific tables (agents, tools) to avoid breaking documentation tables */
1881
+ /* Using box-shadow instead of ::before to avoid table layout issues with position:relative on tr */
1882
+ #agent-list-table tbody tr,
1883
+ .tools-table tbody tr {
1884
+ transition: box-shadow var(--transition-fast);
1885
+ }
1886
+ #agent-list-table tbody tr:hover,
1887
+ .tools-table tbody tr:hover {
1888
+ box-shadow: inset 3px 0 0 0 var(--color-primary);
1889
+ }
1890
+
1891
+ /* ========================================
1892
+ INLINE ACTION BUTTONS (Gmail/Notion style)
1893
+ ======================================== */
1894
+ .actions-cell {
1895
+ text-align: right;
1896
+ white-space: nowrap;
1897
+ width: 1%;
1898
+ }
1899
+
1900
+ /* (Removed dead `.inline-actions` + `.action-btn` icon-button rules — they
1901
+ styled the old agents table row, which was replaced by the .agent-card grid
1902
+ and its dedicated `.legion-action` buttons.) */
1903
+ /* Dark mode table container */
1904
+ [data-theme=dark] .table-container {
1905
+ background-color: var(--color-bg-secondary) !important;
1906
+ border-color: var(--color-border) !important;
1907
+ }
1908
+
1909
+ /* Dark mode for outlined buttons */
1910
+ [data-theme=dark] .button.is-outlined,
1911
+ [data-theme=dark] .button.is-link.is-outlined {
1912
+ background-color: transparent !important;
1913
+ border-color: var(--color-primary) !important;
1914
+ color: var(--color-primary) !important;
1915
+ }
1916
+
1917
+ [data-theme=dark] .button.is-outlined:hover,
1918
+ [data-theme=dark] .button.is-link.is-outlined:hover {
1919
+ background-color: var(--color-primary) !important;
1920
+ color: #ffffff !important;
1921
+ }
1922
+
1923
+ /* Dark mode for Bulma background helpers */
1924
+ [data-theme=dark] .has-background-info-light,
1925
+ [data-theme=dark] .has-background-light,
1926
+ [data-theme=dark] .has-background-white {
1927
+ background-color: var(--color-bg-tertiary) !important;
1928
+ }
1929
+
1930
+ /* ========================================
1931
+ KEYBOARD SHORTCUT HINTS
1932
+ ======================================== */
1933
+ .search-with-shortcut {
1934
+ position: relative;
1935
+ }
1936
+ .search-with-shortcut input {
1937
+ padding-right: 3.5rem !important;
1938
+ }
1939
+ .search-with-shortcut .keyboard-hint {
1940
+ position: absolute;
1941
+ right: 10px;
1942
+ top: 50%;
1943
+ transform: translateY(-50%);
1944
+ pointer-events: none;
1945
+ transition: opacity var(--transition-fast);
1946
+ z-index: 4;
1947
+ }
1948
+ .search-with-shortcut .keyboard-hint kbd {
1949
+ font-family: var(--font-mono);
1950
+ font-size: 0.65rem;
1951
+ padding: 3px 6px;
1952
+ background: var(--color-bg-tertiary);
1953
+ border-radius: 4px;
1954
+ color: var(--color-text-muted);
1955
+ border: 1px solid var(--color-border);
1956
+ box-shadow: 0 1px 0 var(--color-border-light);
1957
+ }
1958
+ .search-with-shortcut input:focus ~ .keyboard-hint,
1959
+ .search-with-shortcut input:not(:placeholder-shown) ~ .keyboard-hint {
1960
+ opacity: 0;
1961
+ }
1962
+
1963
+ @media (max-width: 768px), (hover: none) {
1964
+ .search-with-shortcut .keyboard-hint {
1965
+ display: none !important;
1966
+ }
1967
+ .search-with-shortcut input {
1968
+ padding-right: 2.5rem !important;
1969
+ }
1970
+ }
1971
+ [data-theme=dark] .search-with-shortcut .keyboard-hint kbd {
1972
+ background: var(--color-bg-elevated);
1973
+ border-color: var(--color-border-dark);
1974
+ color: var(--color-text-secondary);
1975
+ }
1976
+
1977
+ /* ========================================
1978
+ BREADCRUMB NAVIGATION
1979
+ ======================================== */
1980
+ .breadcrumb {
1981
+ background: transparent;
1982
+ padding: 0;
1983
+ }
1984
+ .breadcrumb ul {
1985
+ align-items: center;
1986
+ }
1987
+ .breadcrumb li {
1988
+ display: flex;
1989
+ align-items: center;
1990
+ }
1991
+ .breadcrumb a {
1992
+ color: var(--color-primary);
1993
+ display: flex;
1994
+ align-items: center;
1995
+ gap: 0.35rem;
1996
+ transition: color var(--transition-fast);
1997
+ }
1998
+ .breadcrumb a:hover {
1999
+ color: var(--color-primary-dark);
2000
+ }
2001
+ .breadcrumb a .icon {
2002
+ font-size: 0.85em;
2003
+ }
2004
+ .breadcrumb li.is-active a {
2005
+ color: var(--color-text-secondary);
2006
+ font-weight: 500;
2007
+ cursor: default;
2008
+ }
2009
+ .breadcrumb li.is-active a:hover {
2010
+ color: var(--color-text-secondary);
2011
+ }
2012
+ .breadcrumb li + li::before {
2013
+ color: var(--color-text-muted);
2014
+ content: "/";
2015
+ }
2016
+
2017
+ /* Dark mode breadcrumb */
2018
+ [data-theme=dark] .breadcrumb a {
2019
+ color: var(--color-primary) !important;
2020
+ }
2021
+
2022
+ [data-theme=dark] .breadcrumb li.is-active a {
2023
+ color: var(--color-text-primary) !important;
2024
+ }
2025
+
2026
+ [data-theme=dark] .breadcrumb li + li::before {
2027
+ color: var(--color-text-muted) !important;
2028
+ }
2029
+
2030
+ /* Dark mode TOC */
2031
+ [data-theme=dark] .toc-item a {
2032
+ color: var(--color-text-secondary) !important;
2033
+ }
2034
+
2035
+ [data-theme=dark] .toc-item a:hover {
2036
+ color: var(--color-primary) !important;
2037
+ }
2038
+
2039
+ [data-theme=dark] .toc-container .has-text-weight-bold {
2040
+ color: var(--color-text-primary) !important;
2041
+ }
2042
+
2043
+ /* --- Forms & Panels --- */
2044
+ .create-agent-details summary {
2045
+ font-size: 1.1em;
2046
+ font-weight: 600;
2047
+ padding: 0.75em 1em;
2048
+ background-color: var(--color-bg-tertiary);
2049
+ border-bottom: 1px solid var(--color-border);
2050
+ border-radius: var(--radius-md) var(--radius-md) 0 0;
2051
+ margin: -1.25rem -1.25rem 0 -1.25rem;
2052
+ color: var(--color-text-primary) !important;
2053
+ }
2054
+
2055
+ /* Dark mode: ensure create agent details summary is readable */
2056
+ [data-theme=dark] .create-agent-details summary,
2057
+ [data-theme=dark] .create-agent-details summary strong {
2058
+ color: #e7e9ea !important;
2059
+ }
2060
+
2061
+ .create-agent-details[open] summary {
2062
+ border-bottom-left-radius: 0;
2063
+ border-bottom-right-radius: 0;
2064
+ }
2065
+
2066
+ .create-agent-details > .mt-4 {
2067
+ padding-top: 1.5rem;
2068
+ }
2069
+
2070
+ .create-agent-details summary::marker {
2071
+ color: var(--color-primary);
2072
+ }
2073
+
2074
+ .create-agent-details summary .icon {
2075
+ color: var(--color-primary);
2076
+ vertical-align: middle;
2077
+ }
2078
+
2079
+ .panel.tool-selection-panel .panel-heading {
2080
+ background-color: var(--color-bg-tertiary);
2081
+ font-weight: 600;
2082
+ color: var(--color-text-primary);
2083
+ }
2084
+
2085
+ .panel.tool-selection-panel .panel-block {
2086
+ background-color: var(--color-bg-secondary);
2087
+ border-color: var(--color-border);
2088
+ }
2089
+
2090
+ .panel.tool-selection-panel .panel-block label.is-clickable:hover {
2091
+ background-color: var(--color-bg-tertiary);
2092
+ }
2093
+
2094
+ /* --- Parameter Lists (Tools Page) --- */
2095
+ dl.parameters-list dt, dl.parameters-list-detailed dt {
2096
+ font-weight: 600;
2097
+ margin-bottom: 0.2em;
2098
+ color: var(--color-text-primary);
2099
+ }
2100
+
2101
+ dl.parameters-list dd, dl.parameters-list-detailed dd {
2102
+ margin-left: 1.5em;
2103
+ margin-bottom: 0.8em;
2104
+ color: var(--color-text-secondary);
2105
+ font-size: 0.95em;
2106
+ }
2107
+
2108
+ /* --- CodeMirror --- */
2109
+ /* Dark theme for code editors - provides visual separation from UI */
2110
+ .CodeMirror {
2111
+ border: 1px solid #313244;
2112
+ border-radius: var(--radius-md);
2113
+ font-size: 0.9em;
2114
+ height: auto;
2115
+ font-family: var(--font-mono);
2116
+ background-color: #1e1e2e !important;
2117
+ color: #cdd6f4 !important;
2118
+ }
2119
+
2120
+ .CodeMirror-gutters {
2121
+ background-color: #181825 !important;
2122
+ border-right: 1px solid #313244;
2123
+ }
2124
+
2125
+ .CodeMirror-linenumber {
2126
+ color: #6c7086 !important;
2127
+ }
2128
+
2129
+ .CodeMirror-cursor {
2130
+ border-left: 2px solid #f5e0dc !important;
2131
+ }
2132
+
2133
+ .CodeMirror-selected {
2134
+ background: #45475a !important;
2135
+ }
2136
+
2137
+ .CodeMirror-focused .CodeMirror-selected {
2138
+ background: #45475a !important;
2139
+ }
2140
+
2141
+ .CodeMirror-readonly .CodeMirror-cursor {
2142
+ display: none !important;
2143
+ }
2144
+
2145
+ /* CodeMirror syntax highlighting - Catppuccin-inspired */
2146
+ .cm-s-default .cm-keyword {
2147
+ color: #cba6f7;
2148
+ }
2149
+
2150
+ .cm-s-default .cm-atom {
2151
+ color: #fab387;
2152
+ }
2153
+
2154
+ .cm-s-default .cm-number {
2155
+ color: #fab387;
2156
+ }
2157
+
2158
+ .cm-s-default .cm-def {
2159
+ color: #89b4fa;
2160
+ }
2161
+
2162
+ .cm-s-default .cm-variable {
2163
+ color: #cdd6f4;
2164
+ }
2165
+
2166
+ .cm-s-default .cm-variable-2 {
2167
+ color: #f38ba8;
2168
+ }
2169
+
2170
+ .cm-s-default .cm-variable-3 {
2171
+ color: #f9e2af;
2172
+ }
2173
+
2174
+ .cm-s-default .cm-property {
2175
+ color: #89dceb;
2176
+ }
2177
+
2178
+ .cm-s-default .cm-operator {
2179
+ color: #94e2d5;
2180
+ }
2181
+
2182
+ .cm-s-default .cm-comment {
2183
+ color: #6c7086;
2184
+ font-style: italic;
2185
+ }
2186
+
2187
+ .cm-s-default .cm-string {
2188
+ color: #a6e3a1;
2189
+ }
2190
+
2191
+ .cm-s-default .cm-string-2 {
2192
+ color: #a6e3a1;
2193
+ }
2194
+
2195
+ .cm-s-default .cm-meta {
2196
+ color: #f9e2af;
2197
+ }
2198
+
2199
+ .cm-s-default .cm-qualifier {
2200
+ color: #f9e2af;
2201
+ }
2202
+
2203
+ .cm-s-default .cm-builtin {
2204
+ color: #f38ba8;
2205
+ }
2206
+
2207
+ .cm-s-default .cm-bracket {
2208
+ color: #cdd6f4;
2209
+ }
2210
+
2211
+ .cm-s-default .cm-tag {
2212
+ color: #f38ba8;
2213
+ }
2214
+
2215
+ .cm-s-default .cm-attribute {
2216
+ color: #fab387;
2217
+ }
2218
+
2219
+ .cm-s-default .cm-error {
2220
+ color: #f38ba8;
2221
+ background: #45475a;
2222
+ }
2223
+
2224
+ /* Match border to dark mode when UI is dark */
2225
+ [data-theme=dark] .CodeMirror {
2226
+ border-color: var(--color-border);
2227
+ }
2228
+
2229
+ pre[style*="background-color: #fafafa;"] {
2230
+ border: 1px solid var(--color-border);
2231
+ font-size: 0.95em;
2232
+ background-color: var(--color-bg-tertiary) !important;
2233
+ }
2234
+
2235
+ /* --- Chat --- */
2236
+ /* Chat status box (agent status display) */
2237
+ .chat-status-box {
2238
+ background-color: var(--color-bg-tertiary);
2239
+ transition: background-color var(--transition-normal);
2240
+ }
2241
+
2242
+ /* ========================================
2243
+ CHAT INTERFACE - FULL HEIGHT EXPERIENCE
2244
+ ======================================== */
2245
+ /* Chat main container with flex layout */
2246
+ .chat-container-box {
2247
+ display: flex;
2248
+ flex-direction: column;
2249
+ min-height: 550px;
2250
+ height: 60vh;
2251
+ max-height: 700px;
2252
+ border-radius: var(--radius-lg);
2253
+ overflow: hidden;
2254
+ background: var(--color-bg-secondary);
2255
+ }
2256
+
2257
+ /* Chat log container */
2258
+ #chat-log-container {
2259
+ flex: 1;
2260
+ overflow-y: auto;
2261
+ padding: 1.25rem;
2262
+ background-color: var(--color-bg-tertiary);
2263
+ transition: background-color var(--transition-normal);
2264
+ }
2265
+
2266
+ /* Empty state styling */
2267
+ #chat-log-container > p.has-text-grey-light {
2268
+ padding: 3rem 1rem;
2269
+ font-size: 1rem;
2270
+ }
2271
+
2272
+ /* Chat form container at bottom - prominent styling */
2273
+ .chat-form-container {
2274
+ padding: 1rem 1.25rem;
2275
+ background: linear-gradient(180deg, var(--color-bg-secondary) 0%, var(--color-bg-tertiary) 100%);
2276
+ border-top: 1px solid var(--color-border);
2277
+ transition: background-color var(--transition-normal);
2278
+ }
2279
+
2280
+ /* Chat input field styling */
2281
+ .chat-form-container .input {
2282
+ border-radius: var(--radius-full) !important; /* Override Bulma's has-addons */
2283
+ padding-left: 1.25rem;
2284
+ padding-right: 1.25rem;
2285
+ height: 48px;
2286
+ font-size: 0.95rem;
2287
+ background: var(--color-bg-primary);
2288
+ border: 2px solid var(--color-border);
2289
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
2290
+ }
2291
+
2292
+ .chat-form-container .input:focus {
2293
+ border-color: var(--color-primary);
2294
+ box-shadow: 0 0 0 3px rgba(var(--color-primary-rgb), 0.15);
2295
+ }
2296
+
2297
+ .chat-form-container .input::placeholder {
2298
+ color: var(--color-text-muted);
2299
+ }
2300
+
2301
+ /* Add gap between input and send button */
2302
+ .chat-form-container .field.has-addons {
2303
+ gap: 0.75rem;
2304
+ }
2305
+
2306
+ /* Send button styling */
2307
+ .chat-form-container #send-button {
2308
+ height: 48px;
2309
+ min-width: 100px;
2310
+ border-radius: var(--radius-full);
2311
+ font-weight: 600;
2312
+ font-size: 0.95rem;
2313
+ background: var(--color-primary);
2314
+ border-color: var(--color-primary);
2315
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast), background-color var(--transition-fast);
2316
+ }
2317
+
2318
+ .chat-form-container #send-button:hover:not(:disabled) {
2319
+ transform: translateY(-1px);
2320
+ box-shadow: var(--shadow-md);
2321
+ background: var(--color-primary-hover);
2322
+ }
2323
+
2324
+ .chat-form-container #send-button:disabled {
2325
+ opacity: 0.5;
2326
+ cursor: not-allowed;
2327
+ }
2328
+
2329
+ /* Chat status help text */
2330
+ #chat-status-help-container {
2331
+ text-align: center;
2332
+ }
2333
+
2334
+ #chat-status-help-container .help {
2335
+ margin-top: 0.5rem;
2336
+ }
2337
+
2338
+ .message {
2339
+ display: flex;
2340
+ flex-direction: column;
2341
+ max-width: 85%;
2342
+ width: fit-content;
2343
+ margin-bottom: 1rem;
2344
+ clear: both;
2345
+ }
2346
+
2347
+ .message.user-message {
2348
+ float: left;
2349
+ max-width: 75%;
2350
+ border-radius: 15px 15px 15px 0 !important;
2351
+ }
2352
+
2353
+ .message.agent-message {
2354
+ float: right;
2355
+ max-width: 85%;
2356
+ border-radius: 15px !important;
2357
+ overflow: hidden;
2358
+ }
2359
+
2360
+ .message.user-message .message-header,
2361
+ .message.agent-message .message-header {
2362
+ border-bottom: none;
2363
+ border-radius: 15px 15px 0 0;
2364
+ padding: 0.5em 1em;
2365
+ display: flex;
2366
+ align-items: center;
2367
+ }
2368
+
2369
+ .message.agent-message .message-header button {
2370
+ margin-left: auto;
2371
+ }
2372
+
2373
+ .message.user-message .message-body {
2374
+ border-radius: 0 0 15px 15px;
2375
+ border-width: 0 1px 1px 1px;
2376
+ padding: 0.75em 1em;
2377
+ word-break: break-word;
2378
+ }
2379
+
2380
+ .message.agent-message .message-body {
2381
+ border-radius: 0 0 15px 15px;
2382
+ border-width: 0 1px 1px 1px;
2383
+ padding: 0.75em 1em;
2384
+ word-break: break-word;
2385
+ }
2386
+
2387
+ .message.user-message.is-link .message-header {
2388
+ background-color: #3273dc;
2389
+ color: white;
2390
+ }
2391
+
2392
+ .message.user-message.is-link .message-body {
2393
+ border-color: #3273dc;
2394
+ background-color: #f0f5fc;
2395
+ }
2396
+
2397
+ /* Agent message variants */
2398
+ .message.agent-message.is-light {
2399
+ background-color: #e9ecef;
2400
+ border: 1px solid #ced4da;
2401
+ }
2402
+
2403
+ .message.agent-message.is-light .message-header {
2404
+ background-color: #ced4da;
2405
+ color: #495057;
2406
+ }
2407
+
2408
+ .message.agent-message.is-light .message-body {
2409
+ border-color: #ced4da;
2410
+ background-color: #e9ecef;
2411
+ color: #363636;
2412
+ }
2413
+
2414
+ .message.agent-message.is-success {
2415
+ background-color: #eaf7ec;
2416
+ border-color: #9fd8a0;
2417
+ }
2418
+
2419
+ .message.agent-message.is-success .message-header {
2420
+ background-color: #9fd8a0;
2421
+ color: #256c3b;
2422
+ }
2423
+
2424
+ .message.agent-message.is-success .message-body {
2425
+ border-color: #9fd8a0;
2426
+ background-color: #eaf7ec;
2427
+ }
2428
+
2429
+ .message.agent-message.is-danger {
2430
+ background-color: #fdecea;
2431
+ border-color: #f6a3a1;
2432
+ }
2433
+
2434
+ .message.agent-message.is-danger .message-header {
2435
+ background-color: #f6a3a1;
2436
+ color: #b71c1c;
2437
+ }
2438
+
2439
+ .message.agent-message.is-danger .message-body {
2440
+ border-color: #f6a3a1;
2441
+ background-color: #fdecea;
2442
+ }
2443
+
2444
+ .message.agent-message.is-warning {
2445
+ background-color: #fffbeb;
2446
+ border-color: #ffe58a;
2447
+ }
2448
+
2449
+ .message.agent-message.is-warning .message-header {
2450
+ background-color: #ffe58a;
2451
+ color: #7a4f01;
2452
+ }
2453
+
2454
+ .message.agent-message.is-warning .message-body {
2455
+ border-color: #ffe58a;
2456
+ background-color: #fffbeb;
2457
+ }
2458
+
2459
+ /* Execution Plan Details Styles (within chat message body) */
2460
+ /* --- Blended tool-call timeline (agent execution plan) --- */
2461
+ .message-body .execution-plan-details {
2462
+ margin-top: 0.85rem;
2463
+ border-top: 1px solid var(--color-border-light);
2464
+ padding-top: 0.75rem;
2465
+ }
2466
+
2467
+ .message-body .execution-plan-summary {
2468
+ cursor: pointer;
2469
+ font-family: var(--font-headline);
2470
+ font-weight: 600;
2471
+ color: var(--color-text-secondary);
2472
+ font-size: 0.8rem;
2473
+ letter-spacing: 0.01em;
2474
+ }
2475
+
2476
+ .message-body .execution-plan-summary:hover {
2477
+ color: var(--color-text-primary);
2478
+ }
2479
+
2480
+ /* Gold hairline connecting the tool-call steps */
2481
+ .message-body .execution-plan-steps {
2482
+ margin-top: 0.85rem;
2483
+ margin-left: 0.3rem;
2484
+ padding-left: 1.1rem;
2485
+ border-left: 2px solid var(--color-accent);
2486
+ }
2487
+
2488
+ .message-body .execution-plan-step {
2489
+ position: relative;
2490
+ margin-bottom: 0.75rem;
2491
+ padding: 0.65rem 0.8rem;
2492
+ background: var(--color-bg-tertiary);
2493
+ border: 1px solid var(--color-border);
2494
+ border-radius: var(--radius-md);
2495
+ }
2496
+
2497
+ .message-body .execution-plan-step:last-child {
2498
+ margin-bottom: 0;
2499
+ }
2500
+
2501
+ /* Status dot sitting on the gold connector */
2502
+ .message-body .execution-plan-step::before {
2503
+ content: "";
2504
+ position: absolute;
2505
+ left: calc(-1.1rem - 1px);
2506
+ top: 1rem;
2507
+ width: 9px;
2508
+ height: 9px;
2509
+ border-radius: 50%;
2510
+ background: var(--color-success);
2511
+ box-shadow: 0 0 0 3px var(--color-bg-secondary);
2512
+ transform: translateX(-50%);
2513
+ }
2514
+
2515
+ .message-body .step-title {
2516
+ font-family: var(--font-mono);
2517
+ font-weight: 600;
2518
+ font-size: 0.8rem;
2519
+ color: var(--color-text-primary);
2520
+ margin-bottom: 0.45rem;
2521
+ }
2522
+
2523
+ .message-body .step-params-label, .message-body .step-result-label {
2524
+ font-size: 0.68rem;
2525
+ text-transform: uppercase;
2526
+ letter-spacing: 0.06em;
2527
+ color: var(--color-text-muted);
2528
+ margin-bottom: 0.2rem;
2529
+ }
2530
+
2531
+ .message-body .step-params-pre, .message-body .step-result-pre {
2532
+ font-family: var(--font-mono);
2533
+ font-size: 0.76rem;
2534
+ line-height: 1.5;
2535
+ white-space: pre-wrap;
2536
+ word-break: break-word;
2537
+ background: var(--color-bg-secondary);
2538
+ border: 1px solid var(--color-border);
2539
+ color: var(--color-text-secondary);
2540
+ padding: 0.55rem 0.65rem;
2541
+ border-radius: var(--radius-sm);
2542
+ margin-bottom: 0.5rem;
2543
+ }
2544
+
2545
+ .message-body .step-result-pre {
2546
+ margin-bottom: 0;
2547
+ }
2548
+
2549
+ /* Raw JSON container */
2550
+ .message-body .raw-json-container {
2551
+ display: none;
2552
+ margin-top: 0.6rem;
2553
+ border-top: 1px dashed var(--color-border);
2554
+ padding-top: 0.5rem;
2555
+ }
2556
+
2557
+ .message-body .raw-json-pre {
2558
+ white-space: pre-wrap;
2559
+ word-break: break-word;
2560
+ font-family: var(--font-mono);
2561
+ font-size: 0.74rem;
2562
+ color: var(--color-text-muted);
2563
+ }
2564
+
2565
+ /* --- Chat header bar (agent name + model + status) --- */
2566
+ .chat-header {
2567
+ display: flex;
2568
+ align-items: center;
2569
+ gap: 1rem;
2570
+ padding: 0.85rem 1.1rem;
2571
+ background: var(--color-bg-secondary);
2572
+ border: 1px solid var(--color-border);
2573
+ border-radius: var(--radius-lg);
2574
+ }
2575
+
2576
+ .chat-back {
2577
+ display: inline-flex;
2578
+ align-items: center;
2579
+ justify-content: center;
2580
+ width: 2rem;
2581
+ height: 2rem;
2582
+ flex: none;
2583
+ border-radius: var(--radius-md);
2584
+ border: 1px solid var(--color-border);
2585
+ color: var(--color-text-muted);
2586
+ }
2587
+
2588
+ .chat-back:hover {
2589
+ background: var(--color-bg-tertiary);
2590
+ color: var(--color-text-primary);
2591
+ }
2592
+
2593
+ .chat-header-titles {
2594
+ display: flex;
2595
+ align-items: center;
2596
+ gap: 0.7rem;
2597
+ flex-wrap: wrap;
2598
+ }
2599
+
2600
+ .chat-agent-name {
2601
+ margin: 0;
2602
+ font-family: var(--font-headline);
2603
+ font-weight: 600;
2604
+ font-size: 1.15rem;
2605
+ color: var(--color-text-primary);
2606
+ }
2607
+
2608
+ .chat-header-status {
2609
+ margin-left: auto;
2610
+ text-align: right;
2611
+ flex: none;
2612
+ }
2613
+
2614
+ /* Slim session-info bar under the header */
2615
+ .chat-session-bar {
2616
+ font-size: 0.8rem;
2617
+ color: var(--color-text-muted);
2618
+ }
2619
+
2620
+ .chat-session-bar p {
2621
+ margin: 0;
2622
+ }
2623
+
2624
+ .chat-header-status p {
2625
+ margin: 0;
2626
+ display: flex;
2627
+ align-items: center;
2628
+ justify-content: flex-end;
2629
+ gap: 0.4rem;
2630
+ }
2631
+
2632
+ /* ========================================
2633
+ CHAT — REBUILT 3-ZONE SHELL
2634
+ header · transcript+composer · Run Details inspector
2635
+ ======================================== */
2636
+ .chat-shell {
2637
+ display: grid;
2638
+ grid-template-columns: minmax(0, 1fr) 300px;
2639
+ gap: 1.25rem;
2640
+ height: calc(100vh - 7rem);
2641
+ min-height: 520px;
2642
+ }
2643
+
2644
+ .chat-main {
2645
+ display: flex;
2646
+ flex-direction: column;
2647
+ min-height: 0;
2648
+ background: var(--color-bg-secondary);
2649
+ border: 1px solid var(--color-border);
2650
+ border-radius: var(--radius-lg);
2651
+ overflow: hidden;
2652
+ }
2653
+
2654
+ /* Header sits flush at the top of the main column */
2655
+ .chat-main .chat-header {
2656
+ flex: none;
2657
+ border: none;
2658
+ border-bottom: 1px solid var(--color-border);
2659
+ border-radius: 0;
2660
+ background: var(--color-bg-secondary);
2661
+ }
2662
+
2663
+ .chat-header-actions {
2664
+ display: flex;
2665
+ align-items: center;
2666
+ gap: 0.6rem;
2667
+ margin-left: auto;
2668
+ }
2669
+
2670
+ .chat-header-actions #agent-chat-panel-status-display p {
2671
+ margin: 0;
2672
+ }
2673
+
2674
+ .chat-header-actions .tag.is-rounded.is-success {
2675
+ background: var(--color-success-light);
2676
+ color: var(--color-success);
2677
+ font-weight: 600;
2678
+ }
2679
+
2680
+ .chat-header-actions .tag.is-rounded.is-danger {
2681
+ background: var(--color-bg-tertiary);
2682
+ color: var(--color-text-muted);
2683
+ font-weight: 600;
2684
+ }
2685
+
2686
+ .chat-new-session-btn {
2687
+ display: inline-flex;
2688
+ align-items: center;
2689
+ gap: 0.4rem;
2690
+ height: 2.1rem;
2691
+ padding: 0 0.85rem;
2692
+ border: 1px solid var(--color-primary);
2693
+ border-radius: var(--radius-md);
2694
+ background: var(--color-primary);
2695
+ color: #fff;
2696
+ font-size: 0.82rem;
2697
+ font-weight: 600;
2698
+ cursor: pointer;
2699
+ transition: background-color var(--transition-fast);
2700
+ }
2701
+
2702
+ .chat-new-session-btn:hover {
2703
+ background: var(--color-primary-hover);
2704
+ color: #fff;
2705
+ }
2706
+
2707
+ /* Sessions dropdown */
2708
+ .chat-sessions-btn {
2709
+ display: inline-flex;
2710
+ align-items: center;
2711
+ gap: 0.4rem;
2712
+ height: 2.1rem;
2713
+ padding: 0 0.75rem;
2714
+ border: 1px solid var(--color-border);
2715
+ border-radius: var(--radius-md);
2716
+ background: transparent;
2717
+ color: var(--color-text-secondary);
2718
+ font-size: 0.82rem;
2719
+ font-weight: 500;
2720
+ cursor: pointer;
2721
+ transition: all var(--transition-fast);
2722
+ }
2723
+
2724
+ .chat-sessions-btn:hover {
2725
+ background: var(--color-bg-tertiary);
2726
+ color: var(--color-text-primary);
2727
+ }
2728
+
2729
+ .chat-sessions-dropdown .dropdown-menu {
2730
+ min-width: 280px;
2731
+ }
2732
+
2733
+ .chat-sessions-dropdown .dropdown-content {
2734
+ background: var(--color-bg-elevated);
2735
+ border: 1px solid var(--color-border);
2736
+ box-shadow: var(--shadow-lg);
2737
+ padding: 0.4rem;
2738
+ }
2739
+
2740
+ .chat-session-current {
2741
+ padding: 0.5rem 0.6rem;
2742
+ }
2743
+
2744
+ .chat-session-line {
2745
+ display: flex;
2746
+ align-items: center;
2747
+ justify-content: space-between;
2748
+ }
2749
+
2750
+ .chat-session-tag {
2751
+ font-size: 0.66rem;
2752
+ font-weight: 700;
2753
+ letter-spacing: 0.06em;
2754
+ text-transform: uppercase;
2755
+ color: var(--color-accent);
2756
+ }
2757
+
2758
+ .chat-session-del {
2759
+ border: none;
2760
+ background: transparent;
2761
+ color: var(--color-text-muted);
2762
+ cursor: pointer;
2763
+ padding: 0.2rem 0.35rem;
2764
+ border-radius: var(--radius-sm);
2765
+ }
2766
+
2767
+ .chat-session-del:hover {
2768
+ color: var(--color-danger);
2769
+ background: var(--color-danger-light);
2770
+ }
2771
+
2772
+ .chat-session-summary {
2773
+ margin: 0.25rem 0 0;
2774
+ font-size: 0.8rem;
2775
+ color: var(--color-text-secondary);
2776
+ }
2777
+
2778
+ .chat-session-switch {
2779
+ margin: 0;
2780
+ }
2781
+
2782
+ .chat-session-switch-btn {
2783
+ display: flex;
2784
+ align-items: center;
2785
+ gap: 0.5rem;
2786
+ width: 100%;
2787
+ text-align: left;
2788
+ border: none;
2789
+ background: transparent;
2790
+ cursor: pointer;
2791
+ padding: 0.5rem 0.6rem;
2792
+ border-radius: var(--radius-sm);
2793
+ font-size: 0.8rem;
2794
+ color: var(--color-text-secondary);
2795
+ }
2796
+
2797
+ .chat-session-switch-btn:hover {
2798
+ background: var(--color-bg-tertiary);
2799
+ color: var(--color-text-primary);
2800
+ }
2801
+
2802
+ .chat-session-switch-btn .icon {
2803
+ color: var(--color-text-muted);
2804
+ }
2805
+
2806
+ /* Transcript */
2807
+ .chat-transcript {
2808
+ flex: 1 1 auto;
2809
+ min-height: 0;
2810
+ overflow-y: auto;
2811
+ padding: 1.5rem;
2812
+ background: var(--color-bg-tertiary);
2813
+ }
2814
+
2815
+ /* Empty state — modest + centered, not a giant void */
2816
+ .chat-empty-state {
2817
+ height: 100%;
2818
+ display: flex;
2819
+ flex-direction: column;
2820
+ align-items: center;
2821
+ justify-content: center;
2822
+ text-align: center;
2823
+ gap: 0.4rem;
2824
+ }
2825
+
2826
+ .chat-empty-emblem {
2827
+ width: 3.25rem;
2828
+ height: 3.25rem;
2829
+ border-radius: var(--radius-full);
2830
+ display: flex;
2831
+ align-items: center;
2832
+ justify-content: center;
2833
+ background: var(--color-primary-light);
2834
+ color: var(--color-primary);
2835
+ font-size: 1.25rem;
2836
+ margin-bottom: 0.5rem;
2837
+ }
2838
+
2839
+ .chat-empty-title {
2840
+ font-family: var(--font-headline);
2841
+ font-weight: 600;
2842
+ color: var(--color-text-primary);
2843
+ margin: 0;
2844
+ }
2845
+
2846
+ .chat-empty-hint {
2847
+ font-size: 0.88rem;
2848
+ color: var(--color-text-muted);
2849
+ margin: 0;
2850
+ }
2851
+
2852
+ /* Composer */
2853
+ .chat-composer {
2854
+ flex: none;
2855
+ padding: 0.9rem 1.1rem;
2856
+ border-top: 1px solid var(--color-border);
2857
+ background: var(--color-bg-secondary);
2858
+ }
2859
+
2860
+ .chat-composer-row {
2861
+ display: flex;
2862
+ align-items: stretch;
2863
+ gap: 0.6rem;
2864
+ }
2865
+
2866
+ .chat-input-wrap {
2867
+ position: relative;
2868
+ flex: 1 1 auto;
2869
+ }
2870
+
2871
+ .chat-composer .input {
2872
+ height: 2.75rem;
2873
+ border-radius: var(--radius-full);
2874
+ padding-left: 1.1rem;
2875
+ padding-right: 1.1rem;
2876
+ background: var(--color-bg-primary);
2877
+ border: 1px solid var(--color-border);
2878
+ font-size: 0.92rem;
2879
+ }
2880
+
2881
+ .chat-composer .input:focus {
2882
+ border-color: var(--color-primary);
2883
+ box-shadow: 0 0 0 3px rgba(var(--color-primary-rgb), 0.15);
2884
+ }
2885
+
2886
+ .chat-composer #send-button {
2887
+ height: 2.75rem;
2888
+ min-width: 5.5rem;
2889
+ border-radius: var(--radius-full);
2890
+ font-weight: 600;
2891
+ background: var(--color-primary);
2892
+ border-color: var(--color-primary);
2893
+ }
2894
+
2895
+ .chat-composer #send-button:hover:not(:disabled) {
2896
+ background: var(--color-primary-hover);
2897
+ }
2898
+
2899
+ .chat-composer #send-button:disabled {
2900
+ opacity: 0.5;
2901
+ }
2902
+
2903
+ .chat-input-spinner {
2904
+ position: absolute;
2905
+ right: 1rem;
2906
+ top: 50%;
2907
+ transform: translateY(-50%);
2908
+ pointer-events: none;
2909
+ }
2910
+
2911
+ #chat-status-help-container {
2912
+ text-align: center;
2913
+ }
2914
+
2915
+ /* --- Run Details inspector --- */
2916
+ .chat-inspector {
2917
+ align-self: start;
2918
+ display: flex;
2919
+ flex-direction: column;
2920
+ gap: 1.25rem;
2921
+ padding: 1.15rem 1.15rem 1.35rem;
2922
+ background: var(--color-bg-secondary);
2923
+ border: 1px solid var(--color-border);
2924
+ border-radius: var(--radius-lg);
2925
+ position: sticky;
2926
+ top: 1rem;
2927
+ }
2928
+
2929
+ .inspector-title {
2930
+ font-family: var(--font-headline);
2931
+ font-weight: 600;
2932
+ font-size: 1rem;
2933
+ color: var(--color-text-primary);
2934
+ margin: 0;
2935
+ padding-bottom: 0.85rem;
2936
+ border-bottom: 1px solid var(--color-border-light);
2937
+ }
2938
+
2939
+ .inspector-section {
2940
+ display: flex;
2941
+ flex-direction: column;
2942
+ gap: 0.4rem;
2943
+ }
2944
+
2945
+ .inspector-label {
2946
+ font-size: 0.68rem;
2947
+ font-weight: 700;
2948
+ letter-spacing: 0.07em;
2949
+ text-transform: uppercase;
2950
+ color: var(--color-text-muted);
2951
+ }
2952
+
2953
+ .inspector-session-id {
2954
+ display: flex;
2955
+ align-items: center;
2956
+ gap: 0.4rem;
2957
+ background: var(--color-bg-tertiary);
2958
+ border: 1px solid var(--color-border);
2959
+ border-radius: var(--radius-sm);
2960
+ padding: 0.4rem 0.55rem;
2961
+ }
2962
+
2963
+ .inspector-session-mono {
2964
+ font-family: var(--font-mono);
2965
+ font-size: 0.74rem;
2966
+ color: var(--color-text-secondary);
2967
+ overflow: hidden;
2968
+ text-overflow: ellipsis;
2969
+ white-space: nowrap;
2970
+ flex: 1 1 auto;
2971
+ }
2972
+
2973
+ .inspector-copy {
2974
+ border: none;
2975
+ background: transparent;
2976
+ color: var(--color-text-muted);
2977
+ cursor: pointer;
2978
+ padding: 0.15rem 0.3rem;
2979
+ border-radius: var(--radius-sm);
2980
+ flex: none;
2981
+ }
2982
+
2983
+ .inspector-copy:hover {
2984
+ color: var(--color-primary);
2985
+ background: var(--color-primary-light);
2986
+ }
2987
+
2988
+ .inspector-meta-row {
2989
+ display: flex;
2990
+ align-items: center;
2991
+ justify-content: space-between;
2992
+ font-size: 0.8rem;
2993
+ }
2994
+
2995
+ .inspector-meta-key {
2996
+ color: var(--color-text-muted);
2997
+ }
2998
+
2999
+ .inspector-meta-val {
3000
+ color: var(--color-text-primary);
3001
+ font-weight: 500;
3002
+ }
3003
+
3004
+ .inspector-tools {
3005
+ display: flex;
3006
+ flex-wrap: wrap;
3007
+ gap: 0.4rem;
3008
+ }
3009
+
3010
+ .inspector-empty {
3011
+ font-size: 0.82rem;
3012
+ color: var(--color-text-muted);
3013
+ font-style: italic;
3014
+ margin: 0;
3015
+ }
3016
+
3017
+ /* --- Message bubbles (scoped to transcript; auth pages keep Bulma .message) --- */
3018
+ .chat-transcript .message {
3019
+ display: inline-block;
3020
+ max-width: 80%;
3021
+ background: transparent;
3022
+ box-shadow: none;
3023
+ border-radius: 0 !important;
3024
+ margin-bottom: 1.1rem !important;
3025
+ clear: both;
3026
+ }
3027
+
3028
+ .chat-transcript .message.user-message {
3029
+ float: right !important;
3030
+ max-width: 76% !important;
3031
+ }
3032
+
3033
+ .chat-transcript .message.agent-message {
3034
+ float: left !important;
3035
+ max-width: 88% !important;
3036
+ }
3037
+
3038
+ .chat-transcript .message .message-header {
3039
+ background: transparent !important;
3040
+ color: var(--color-text-muted) !important;
3041
+ box-shadow: none !important;
3042
+ border: none !important;
3043
+ border-radius: 0 !important;
3044
+ padding: 0 0.3rem 0.25rem !important;
3045
+ min-height: 0 !important;
3046
+ font-size: 0.7rem !important;
3047
+ font-weight: 600 !important;
3048
+ }
3049
+
3050
+ .chat-transcript .message.user-message .message-header {
3051
+ justify-content: flex-end;
3052
+ }
3053
+
3054
+ .chat-transcript .message .message-header p {
3055
+ color: inherit !important;
3056
+ }
3057
+
3058
+ .chat-transcript .message .message-body {
3059
+ background: var(--color-bg-secondary) !important;
3060
+ color: var(--color-text-primary) !important;
3061
+ border: 1px solid var(--color-border) !important;
3062
+ border-radius: var(--radius-lg) !important;
3063
+ padding: 0.7rem 1rem !important;
3064
+ font-size: 0.9rem;
3065
+ line-height: 1.5;
3066
+ }
3067
+
3068
+ .chat-transcript .user-message .message-body {
3069
+ background: var(--color-primary-light) !important;
3070
+ border-color: transparent !important;
3071
+ border-bottom-right-radius: var(--radius-sm) !important;
3072
+ }
3073
+
3074
+ .chat-transcript .agent-message .message-body {
3075
+ border-bottom-left-radius: var(--radius-sm) !important;
3076
+ }
3077
+
3078
+ .chat-transcript .agent-message.is-danger .message-body {
3079
+ background: var(--color-danger-light) !important;
3080
+ border-color: var(--color-danger) !important;
3081
+ }
3082
+
3083
+ /* Kill Bulma's colored message-header bars in chat (repeated class beats the
3084
+ .is-success/.is-light/dark variants on specificity). Bodies keep their tint. */
3085
+ .chat-transcript .message.agent-message .message-header.message-header,
3086
+ .chat-transcript .message.user-message .message-header.message-header {
3087
+ background: transparent !important;
3088
+ color: var(--color-text-muted) !important;
3089
+ box-shadow: none !important;
3090
+ }
3091
+
3092
+ /* Stack the inspector below the chat on narrow screens */
3093
+ @media screen and (max-width: 1023px) {
3094
+ .chat-shell {
3095
+ grid-template-columns: 1fr;
3096
+ height: auto;
3097
+ }
3098
+ .chat-main {
3099
+ height: 70vh;
3100
+ min-height: 480px;
3101
+ }
3102
+ .chat-inspector {
3103
+ position: static;
3104
+ }
3105
+ }
3106
+ .chat-status-label {
3107
+ color: var(--color-text-muted);
3108
+ font-weight: 600;
3109
+ font-size: 0.8rem;
3110
+ }
3111
+
3112
+ /* OOB swap injects .tag.is-success / .is-danger — render them as pills */
3113
+ .chat-header-status .tag.is-success {
3114
+ background: var(--color-success-light);
3115
+ color: var(--color-success);
3116
+ border-radius: var(--radius-full);
3117
+ font-weight: 600;
3118
+ }
3119
+
3120
+ .chat-header-status .tag.is-danger {
3121
+ background: var(--color-bg-tertiary);
3122
+ color: var(--color-text-muted);
3123
+ border-radius: var(--radius-full);
3124
+ font-weight: 600;
3125
+ }
3126
+
3127
+ /* --- Dark Mode Chat Message Variants --- */
3128
+ [data-theme=dark] .message.user-message.is-link .message-header {
3129
+ background-color: #4f6dba;
3130
+ color: #ffffff;
3131
+ }
3132
+
3133
+ [data-theme=dark] .message.user-message.is-link .message-body {
3134
+ border-color: #4f6dba;
3135
+ background-color: #1e2a4a;
3136
+ color: #e7e9ea;
3137
+ }
3138
+
3139
+ /* Dark mode: Agent message - Light */
3140
+ [data-theme=dark] .message.agent-message.is-light {
3141
+ background-color: #2a3038;
3142
+ border-color: #3d4450;
3143
+ }
3144
+
3145
+ [data-theme=dark] .message.agent-message.is-light .message-header {
3146
+ background-color: #3d4450;
3147
+ color: #e7e9ea;
3148
+ }
3149
+
3150
+ [data-theme=dark] .message.agent-message.is-light .message-body {
3151
+ border-color: #3d4450;
3152
+ background-color: #2a3038;
3153
+ color: #e7e9ea;
3154
+ }
3155
+
3156
+ /* Dark mode: Agent message - Success */
3157
+ [data-theme=dark] .message.agent-message.is-success {
3158
+ background-color: #1a332a;
3159
+ border-color: #2d5a45;
3160
+ }
3161
+
3162
+ [data-theme=dark] .message.agent-message.is-success .message-header {
3163
+ background-color: #2d5a45;
3164
+ color: #a6e3a1;
3165
+ }
3166
+
3167
+ [data-theme=dark] .message.agent-message.is-success .message-body {
3168
+ border-color: #2d5a45;
3169
+ background-color: #1a332a;
3170
+ color: #e7e9ea;
3171
+ }
3172
+
3173
+ /* Dark mode: Agent message - Danger */
3174
+ [data-theme=dark] .message.agent-message.is-danger {
3175
+ background-color: #3a1a1a;
3176
+ border-color: #5a2d2d;
3177
+ }
3178
+
3179
+ [data-theme=dark] .message.agent-message.is-danger .message-header {
3180
+ background-color: #5a2d2d;
3181
+ color: #f38ba8;
3182
+ }
3183
+
3184
+ [data-theme=dark] .message.agent-message.is-danger .message-body {
3185
+ border-color: #5a2d2d;
3186
+ background-color: #3a1a1a;
3187
+ color: #e7e9ea;
3188
+ }
3189
+
3190
+ /* Dark mode: Agent message - Warning */
3191
+ [data-theme=dark] .message.agent-message.is-warning {
3192
+ background-color: #33291a;
3193
+ border-color: #5a4a2d;
3194
+ }
3195
+
3196
+ [data-theme=dark] .message.agent-message.is-warning .message-header {
3197
+ background-color: #5a4a2d;
3198
+ color: #f9e2af;
3199
+ }
3200
+
3201
+ [data-theme=dark] .message.agent-message.is-warning .message-body {
3202
+ border-color: #5a4a2d;
3203
+ background-color: #33291a;
3204
+ color: #e7e9ea;
3205
+ }
3206
+
3207
+ /* Dark mode: Execution plan details */
3208
+ [data-theme=dark] .message-body .execution-plan-details {
3209
+ border-top-color: #3d4450;
3210
+ }
3211
+
3212
+ [data-theme=dark] .message-body .execution-plan-summary {
3213
+ color: #e7e9ea;
3214
+ }
3215
+
3216
+ [data-theme=dark] .message-body .execution-plan-steps {
3217
+ border-left-color: #4f5b66;
3218
+ }
3219
+
3220
+ [data-theme=dark] .message-body .step-params-label,
3221
+ [data-theme=dark] .message-body .step-result-label {
3222
+ color: #9ca3af;
3223
+ }
3224
+
3225
+ [data-theme=dark] .message-body .step-params-pre,
3226
+ [data-theme=dark] .message-body .step-result-pre {
3227
+ background-color: #1e2128;
3228
+ color: #e7e9ea;
3229
+ }
3230
+
3231
+ [data-theme=dark] .message-body .raw-json-container {
3232
+ border-top-color: #4f5b66;
3233
+ }
3234
+
3235
+ [data-theme=dark] .message-body .raw-json-pre {
3236
+ color: #9ca3af;
3237
+ }
3238
+
3239
+ /* --- Dark Mode Tags & Badges --- */
3240
+ /* Make tags less jarring in dark mode */
3241
+ [data-theme=dark] .tag:not(.is-success):not(.is-danger):not(.is-warning):not(.is-info):not(.is-primary):not(.is-link) {
3242
+ background-color: var(--color-bg-tertiary);
3243
+ color: var(--color-text-primary);
3244
+ border: 1px solid var(--color-border);
3245
+ }
3246
+
3247
+ [data-theme=dark] .tag.is-light {
3248
+ background-color: var(--color-bg-tertiary) !important;
3249
+ color: var(--color-text-primary) !important;
3250
+ }
3251
+
3252
+ /* Dark mode success tag */
3253
+ [data-theme=dark] .tag.is-success {
3254
+ background-color: #2d5a45;
3255
+ color: #a6e3a1;
3256
+ }
3257
+
3258
+ [data-theme=dark] .tag.is-success.is-light {
3259
+ background-color: #1a332a !important;
3260
+ color: #a6e3a1 !important;
3261
+ }
3262
+
3263
+ /* ========================================
3264
+ STATUS BADGE ANIMATIONS
3265
+ ======================================== */
3266
+ /* Pulse animation for running status badges */
3267
+ @keyframes status-pulse {
3268
+ 0%, 100% {
3269
+ box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.4);
3270
+ }
3271
+ 50% {
3272
+ box-shadow: 0 0 0 6px rgba(34, 197, 94, 0);
3273
+ }
3274
+ }
3275
+ .tag.is-success.is-running,
3276
+ .tag.is-success.status-running {
3277
+ animation: status-pulse 2s ease-in-out infinite;
3278
+ }
3279
+
3280
+ /* Dark mode pulse */
3281
+ [data-theme=dark] .tag.is-success.is-running,
3282
+ [data-theme=dark] .tag.is-success.status-running {
3283
+ animation: status-pulse-dark 2s ease-in-out infinite;
3284
+ }
3285
+
3286
+ @keyframes status-pulse-dark {
3287
+ 0%, 100% {
3288
+ box-shadow: 0 0 0 0 rgba(166, 227, 161, 0.3);
3289
+ }
3290
+ 50% {
3291
+ box-shadow: 0 0 0 6px rgba(166, 227, 161, 0);
3292
+ }
3293
+ }
3294
+ /* Respect reduced motion preference */
3295
+ @media (prefers-reduced-motion: reduce) {
3296
+ .tag.is-success.is-running,
3297
+ .tag.is-success.status-running {
3298
+ animation: none;
3299
+ }
3300
+ }
3301
+ /* Dark mode danger tag */
3302
+ [data-theme=dark] .tag.is-danger {
3303
+ background-color: #5a2d2d;
3304
+ color: #f38ba8;
3305
+ }
3306
+
3307
+ [data-theme=dark] .tag.is-danger.is-light {
3308
+ background-color: #3a1a1a !important;
3309
+ color: #f38ba8 !important;
3310
+ }
3311
+
3312
+ /* Dark mode warning tag */
3313
+ [data-theme=dark] .tag.is-warning {
3314
+ background-color: #5a4a2d;
3315
+ color: #f9e2af;
3316
+ }
3317
+
3318
+ [data-theme=dark] .tag.is-warning.is-light {
3319
+ background-color: #33291a !important;
3320
+ color: #f9e2af !important;
3321
+ }
3322
+
3323
+ /* Dark mode info tag */
3324
+ [data-theme=dark] .tag.is-info {
3325
+ background-color: #1e3a5f;
3326
+ color: #89dceb;
3327
+ }
3328
+
3329
+ /* Dark mode notifications */
3330
+ [data-theme=dark] .notification {
3331
+ background-color: var(--color-bg-tertiary);
3332
+ color: var(--color-text-primary);
3333
+ }
3334
+
3335
+ [data-theme=dark] .notification.is-warning {
3336
+ background-color: #33291a;
3337
+ color: #f9e2af;
3338
+ }
3339
+
3340
+ [data-theme=dark] .notification.is-warning.is-light {
3341
+ background-color: #33291a !important;
3342
+ color: #f9e2af !important;
3343
+ }
3344
+
3345
+ [data-theme=dark] .notification.is-danger {
3346
+ background-color: #3a1a1a;
3347
+ color: #f38ba8;
3348
+ }
3349
+
3350
+ [data-theme=dark] .notification.is-danger.is-light {
3351
+ background-color: #3a1a1a !important;
3352
+ color: #f38ba8 !important;
3353
+ }
3354
+
3355
+ [data-theme=dark] .notification.is-success {
3356
+ background-color: #1a332a;
3357
+ color: #a6e3a1;
3358
+ }
3359
+
3360
+ [data-theme=dark] .notification.is-info {
3361
+ background-color: #1e3a5f;
3362
+ color: #89dceb;
3363
+ }
3364
+
3365
+ [data-theme=dark] .notification.is-info.is-light {
3366
+ background-color: #1e3a5f !important;
3367
+ color: #89dceb !important;
3368
+ }
3369
+
3370
+ .chat-input-form {
3371
+ margin-top: 1rem;
3372
+ }
3373
+
3374
+ /* Button hover/focus states */
3375
+ .button {
3376
+ border-radius: var(--radius-md);
3377
+ font-weight: 500;
3378
+ transition: all var(--transition-fast);
3379
+ }
3380
+ .button:hover:not(:disabled) {
3381
+ transform: translateY(-1px);
3382
+ }
3383
+ .button:active:not(:disabled) {
3384
+ transform: translateY(0);
3385
+ }
3386
+
3387
+ .button:focus, .button.is-focused {
3388
+ box-shadow: 0 0 0 3px var(--color-primary-light);
3389
+ }
3390
+
3391
+ .button.is-link, .button.is-primary {
3392
+ background-color: var(--color-primary);
3393
+ border-color: transparent;
3394
+ }
3395
+ .button.is-link:hover, .button.is-primary:hover {
3396
+ background-color: var(--color-primary-dark);
3397
+ }
3398
+
3399
+ /* Bulma generates `.button.is-primary[disabled]` (attr-selector, higher
3400
+ specificity) at its turquoise $primary, which beat our override on disabled
3401
+ buttons. Match that specificity so disabled primary buttons stay ruby. */
3402
+ .button.is-link[disabled], .button.is-primary[disabled],
3403
+ fieldset[disabled] .button.is-link, fieldset[disabled] .button.is-primary {
3404
+ background-color: var(--color-primary);
3405
+ border-color: transparent;
3406
+ }
3407
+
3408
+ /* Light variants — ruby tint instead of Bulma's default blue */
3409
+ .button.is-link.is-light, .button.is-primary.is-light {
3410
+ background-color: var(--color-primary-light);
3411
+ color: var(--color-primary);
3412
+ border-color: transparent;
3413
+ }
3414
+
3415
+ .button.is-link.is-light:hover, .button.is-primary.is-light:hover {
3416
+ background-color: rgba(var(--color-primary-rgb), 0.2);
3417
+ color: var(--color-primary);
3418
+ }
3419
+
3420
+ /* Outlined link/primary buttons → ruby (Bulma left is-primary outline turquoise) */
3421
+ .button.is-link.is-outlined,
3422
+ .button.is-primary.is-outlined {
3423
+ color: var(--color-primary);
3424
+ border-color: var(--color-primary);
3425
+ background-color: transparent;
3426
+ }
3427
+
3428
+ .button.is-link.is-outlined:hover,
3429
+ .button.is-primary.is-outlined:hover {
3430
+ background-color: var(--color-primary);
3431
+ border-color: var(--color-primary);
3432
+ color: #fff;
3433
+ }
3434
+
3435
+ /* Bulma's $primary is turquoise; our brand primary is ruby. Retone the text-color
3436
+ variant so `has-text-primary` icons/labels match the brand (fixes the teal
3437
+ icons across the auth pages). */
3438
+ .has-text-primary {
3439
+ color: var(--color-primary) !important;
3440
+ }
3441
+
3442
+ /* Info-light tags (scheme/credential types, model badges, etc.) → neutral chip
3443
+ instead of Bulma's blue, for brand consistency. */
3444
+ .tag.is-info.is-light {
3445
+ background-color: var(--color-bg-tertiary);
3446
+ color: var(--color-text-secondary);
3447
+ }
3448
+
3449
+ /* Info notifications (auth empty-state boxes, etc.) → soft neutral card instead
3450
+ of Bulma's saturated blue. Warning/danger/success notifications keep their tint. */
3451
+ .notification.is-info {
3452
+ background-color: var(--color-bg-tertiary);
3453
+ color: var(--color-text-primary);
3454
+ border: 1px solid var(--color-border);
3455
+ }
3456
+
3457
+ .notification.is-info .title {
3458
+ color: var(--color-text-primary);
3459
+ }
3460
+
3461
+ /* Agent detail → Auth tab status row */
3462
+ .auth-tab-status-row {
3463
+ display: flex;
3464
+ align-items: center;
3465
+ gap: 1.25rem;
3466
+ padding: 0.85rem 1rem;
3467
+ background: var(--color-bg-tertiary);
3468
+ border: 1px solid var(--color-border);
3469
+ border-radius: var(--radius-md);
3470
+ }
3471
+
3472
+ .auth-tab-status-value {
3473
+ display: inline-flex;
3474
+ align-items: center;
3475
+ gap: 0.5rem;
3476
+ font-weight: 500;
3477
+ color: var(--color-text-primary);
3478
+ }
3479
+
3480
+ .auth-tab-status-value br {
3481
+ display: none;
3482
+ }
3483
+
3484
+ .auth-tab-status-value .icon.is-large {
3485
+ width: 1.5rem;
3486
+ height: 1.5rem;
3487
+ }
3488
+
3489
+ .auth-tab-status-value .fa-2x {
3490
+ font-size: 1.1em;
3491
+ }
3492
+
3493
+ /* Brand text links in content tables + doc lists (were Bulma blue) */
3494
+ td a:not(.button):not(.tag),
3495
+ a.doc-title,
3496
+ .content a:not(.button) {
3497
+ color: var(--color-primary);
3498
+ }
3499
+
3500
+ td a:not(.button):not(.tag):hover,
3501
+ a.doc-title:hover,
3502
+ .content a:not(.button):hover {
3503
+ color: var(--color-primary-dark);
3504
+ text-decoration: underline;
3505
+ }
3506
+
3507
+ .button.is-success:hover {
3508
+ background-color: hsl(152, 68%, 35%);
3509
+ }
3510
+
3511
+ .button.is-danger:hover {
3512
+ background-color: hsl(0, 72%, 45%);
3513
+ }
3514
+
3515
+ /* AI Generate Button - Prominent styling */
3516
+ .button.ai-generate-btn {
3517
+ background: linear-gradient(135deg, #c8102e 0%, #9d0c24 45%, #c7a14a 100%);
3518
+ background-size: 200% 200%;
3519
+ color: white;
3520
+ border: none;
3521
+ font-weight: 600;
3522
+ box-shadow: 0 4px 15px rgba(200, 16, 46, 0.35);
3523
+ transition: all 0.3s ease;
3524
+ animation: gradient-shift 3s ease infinite;
3525
+ }
3526
+ .button.ai-generate-btn .icon {
3527
+ color: white;
3528
+ }
3529
+ .button.ai-generate-btn:hover {
3530
+ transform: translateY(-2px);
3531
+ box-shadow: 0 6px 20px rgba(200, 16, 46, 0.45);
3532
+ color: white;
3533
+ }
3534
+ .button.ai-generate-btn:active {
3535
+ transform: translateY(0);
3536
+ }
3537
+
3538
+ @keyframes gradient-shift {
3539
+ 0% {
3540
+ background-position: 0% 50%;
3541
+ }
3542
+ 50% {
3543
+ background-position: 100% 50%;
3544
+ }
3545
+ 100% {
3546
+ background-position: 0% 50%;
3547
+ }
3548
+ }
3549
+ [data-theme=dark] .button.ai-generate-btn {
3550
+ box-shadow: 0 4px 15px rgba(200, 16, 46, 0.28);
3551
+ }
3552
+ [data-theme=dark] .button.ai-generate-btn:hover {
3553
+ box-shadow: 0 6px 20px rgba(200, 16, 46, 0.38);
3554
+ }
3555
+
3556
+ .button.is-light {
3557
+ background-color: var(--color-bg-tertiary);
3558
+ color: var(--color-text-primary);
3559
+ border-color: var(--color-border);
3560
+ }
3561
+ .button.is-light:hover {
3562
+ background-color: var(--color-border);
3563
+ }
3564
+
3565
+ /* --- Form Inputs --- */
3566
+ .input, .textarea, .select select {
3567
+ background-color: var(--color-bg-secondary);
3568
+ border-color: var(--color-border);
3569
+ border-radius: var(--radius-md);
3570
+ color: var(--color-text-primary);
3571
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
3572
+ }
3573
+ .input::placeholder, .textarea::placeholder, .select select::placeholder {
3574
+ color: var(--color-text-muted);
3575
+ }
3576
+ .input:focus, .textarea:focus, .select select:focus {
3577
+ border-color: var(--color-primary);
3578
+ box-shadow: 0 0 0 3px var(--color-primary-light);
3579
+ }
3580
+
3581
+ .label {
3582
+ font-weight: 600;
3583
+ font-size: 0.875rem;
3584
+ color: var(--color-text-primary);
3585
+ }
3586
+
3587
+ .help {
3588
+ color: var(--color-text-muted);
3589
+ }
3590
+
3591
+ /* --- Footer --- */
3592
+ .footer {
3593
+ background-color: var(--color-bg-primary);
3594
+ border-top: 1px solid var(--color-border);
3595
+ padding: 2rem 1.5rem 2.5rem;
3596
+ transition: background-color var(--transition-normal), border-color var(--transition-normal);
3597
+ }
3598
+ .footer .content {
3599
+ color: var(--color-text-muted);
3600
+ }
3601
+ .footer strong {
3602
+ color: var(--color-primary);
3603
+ font-weight: 600;
3604
+ }
3605
+ .footer .footer-links {
3606
+ margin-top: 0.5rem;
3607
+ }
3608
+ .footer .footer-links a {
3609
+ color: var(--color-text-muted);
3610
+ margin: 0 0.75rem;
3611
+ transition: color var(--transition-fast);
3612
+ }
3613
+ .footer .footer-links a:hover {
3614
+ color: var(--color-primary);
3615
+ }
3616
+
3617
+ /* --- HTMX Indicator --- */
3618
+ .htmx-indicator {
3619
+ display: none;
3620
+ }
3621
+
3622
+ .htmx-request .htmx-indicator {
3623
+ display: inline;
3624
+ }
3625
+
3626
+ .htmx-request.htmx-indicator {
3627
+ display: inline;
3628
+ }
3629
+
3630
+ /* --- Documentation Markdown Styling --- */
3631
+ .box .content {
3632
+ /* Typography improvements */
3633
+ line-height: 1.6;
3634
+ color: var(--color-text-primary);
3635
+ /* Heading styling */
3636
+ }
3637
+ .box .content h1, .box .content h2, .box .content h3, .box .content h4, .box .content h5, .box .content h6 {
3638
+ margin-top: 1.5em;
3639
+ margin-bottom: 0.75em;
3640
+ color: #333;
3641
+ font-weight: 600;
3642
+ line-height: 1.25;
3643
+ }
3644
+ .box .content h1 {
3645
+ font-size: 2em;
3646
+ padding-bottom: 0.3em;
3647
+ border-bottom: 1px solid #eaecef;
3648
+ }
3649
+ .box .content h2 {
3650
+ font-size: 1.5em;
3651
+ padding-bottom: 0.3em;
3652
+ border-bottom: 1px solid #eaecef;
3653
+ }
3654
+ .box .content h3 {
3655
+ font-size: 1.25em;
3656
+ }
3657
+ .box .content h4 {
3658
+ font-size: 1em;
3659
+ }
3660
+ .box .content {
3661
+ /* List styling */
3662
+ }
3663
+ .box .content ul, .box .content ol {
3664
+ padding-left: 1.5em;
3665
+ margin-bottom: 1.5em;
3666
+ }
3667
+ .box .content ul li, .box .content ol li {
3668
+ margin-bottom: 0.5em;
3669
+ }
3670
+ .box .content ul ul, .box .content ul ol, .box .content ol ul, .box .content ol ol {
3671
+ margin-top: 0.5em;
3672
+ margin-bottom: 0.5em;
3673
+ }
3674
+ .box .content {
3675
+ /* Paragraph spacing */
3676
+ }
3677
+ .box .content p {
3678
+ margin-bottom: 1.25em;
3679
+ }
3680
+ .box .content p:last-child {
3681
+ margin-bottom: 0;
3682
+ }
3683
+ .box .content {
3684
+ /* Code blocks with enhanced styling */
3685
+ }
3686
+ .box .content pre {
3687
+ background-color: #f8f9fa;
3688
+ border-radius: 8px;
3689
+ padding: 1.25em;
3690
+ margin: 1.5em 0;
3691
+ border: 1px solid #e1e4e8;
3692
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
3693
+ position: relative;
3694
+ overflow-x: auto;
3695
+ /* When using highlight.js */
3696
+ }
3697
+ .box .content pre.hljs {
3698
+ padding: 0;
3699
+ background: transparent;
3700
+ }
3701
+ .box .content pre code {
3702
+ padding: 0;
3703
+ margin: 0;
3704
+ background-color: transparent;
3705
+ border-radius: 0;
3706
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
3707
+ font-size: 0.9em;
3708
+ line-height: 1.5;
3709
+ color: #24292e;
3710
+ tab-size: 2;
3711
+ }
3712
+ .box .content pre {
3713
+ /* Language label */
3714
+ }
3715
+ .box .content pre[data-lang]::before {
3716
+ content: attr(data-lang);
3717
+ position: absolute;
3718
+ top: 0;
3719
+ right: 0;
3720
+ font-size: 0.7em;
3721
+ font-weight: 600;
3722
+ color: var(--color-text-muted);
3723
+ background-color: var(--color-bg-elevated);
3724
+ border: 1px solid var(--color-border);
3725
+ padding: 0.2em 0.6em;
3726
+ border-radius: 0 var(--radius-md) 0 var(--radius-sm);
3727
+ text-transform: uppercase;
3728
+ }
3729
+ .box .content {
3730
+ /* Inline code with improved contrast (token-based → adapts to light + dark) */
3731
+ }
3732
+ .box .content :not(pre) > code {
3733
+ padding: 0.2em 0.45em;
3734
+ margin: 0 0.1em;
3735
+ font-size: 0.85em;
3736
+ font-family: var(--font-mono);
3737
+ background-color: var(--color-primary-light);
3738
+ border-radius: var(--radius-sm);
3739
+ color: var(--color-primary);
3740
+ font-weight: 500;
3741
+ }
3742
+ .box .content {
3743
+ /* Blockquotes */
3744
+ }
3745
+ .box .content blockquote {
3746
+ margin-left: 0;
3747
+ padding: 0.25em 1em;
3748
+ color: var(--color-text-secondary);
3749
+ background-color: var(--color-bg-tertiary);
3750
+ border-left: 0.25em solid var(--color-accent);
3751
+ border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
3752
+ }
3753
+ .box .content blockquote p {
3754
+ margin-bottom: 0;
3755
+ }
3756
+ .box .content blockquote p + p {
3757
+ margin-top: 1em;
3758
+ }
3759
+ .box .content {
3760
+ /* Tables */
3761
+ }
3762
+ .box .content table {
3763
+ width: 100%;
3764
+ border-collapse: collapse;
3765
+ margin-bottom: 1.5em;
3766
+ overflow: auto;
3767
+ display: block;
3768
+ }
3769
+ .box .content table th, .box .content table td {
3770
+ padding: 0.5em 1em;
3771
+ border: 1px solid #dfe2e5;
3772
+ }
3773
+ .box .content table th {
3774
+ font-weight: 600;
3775
+ background-color: #f6f8fa;
3776
+ }
3777
+ .box .content table tr:nth-child(even) {
3778
+ background-color: #f8f9fa;
3779
+ }
3780
+ .box .content table tr:hover {
3781
+ background-color: #f1f4f8;
3782
+ }
3783
+ .box .content {
3784
+ /* Horizontal rule */
3785
+ }
3786
+ .box .content hr {
3787
+ height: 0.25em;
3788
+ padding: 0;
3789
+ margin: 24px 0;
3790
+ background-color: #e1e4e8;
3791
+ border: 0;
3792
+ }
3793
+ .box .content {
3794
+ /* Links */
3795
+ }
3796
+ .box .content a {
3797
+ color: #0366d6;
3798
+ text-decoration: none;
3799
+ }
3800
+ .box .content a:hover {
3801
+ text-decoration: underline;
3802
+ }
3803
+ .box .content {
3804
+ /* Images */
3805
+ }
3806
+ .box .content img {
3807
+ max-width: 100%;
3808
+ box-sizing: border-box;
3809
+ border-radius: 3px;
3810
+ }
3811
+ .box .content {
3812
+ /* Badges/Labels */
3813
+ }
3814
+ .box .content .badge, .box .content [class^=badge-] {
3815
+ display: inline-block;
3816
+ padding: 0.25em 0.4em;
3817
+ font-size: 0.75em;
3818
+ font-weight: 600;
3819
+ line-height: 1;
3820
+ text-align: center;
3821
+ white-space: nowrap;
3822
+ vertical-align: baseline;
3823
+ border-radius: 0.25rem;
3824
+ margin: 0 0.25em;
3825
+ }
3826
+
3827
+ /* Specific styling for webhook documentation */
3828
+ .box .content pre {
3829
+ position: relative;
3830
+ }
3831
+ .box .content pre.language-ruby::before, .box .content pre[data-lang=ruby]::before {
3832
+ content: "ruby";
3833
+ }
3834
+ .box .content pre.language-ruby code, .box .content pre[data-lang=ruby] code {
3835
+ color: #905;
3836
+ }
3837
+ .box .content .parameter-name {
3838
+ font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
3839
+ font-weight: 600;
3840
+ color: #0366d6;
3841
+ }
3842
+
3843
+ /* --- Documentation Index Table --- */
3844
+ .documentation-index-table thead th {
3845
+ background-color: #f8f9fa;
3846
+ border-bottom: 2px solid #e9ecef;
3847
+ color: #495057;
3848
+ font-weight: 600;
3849
+ padding: 1rem 0.75rem;
3850
+ }
3851
+ .documentation-index-table td {
3852
+ padding: 0.9rem 0.75rem;
3853
+ vertical-align: middle;
3854
+ }
3855
+ .documentation-index-table tr:hover {
3856
+ background-color: #f0f4f8 !important;
3857
+ transition: background-color 0.2s ease;
3858
+ }
3859
+ .documentation-index-table.is-striped tr:nth-child(even) {
3860
+ background-color: #f9fafb;
3861
+ }
3862
+ .documentation-index-table.is-striped tr:nth-child(odd) {
3863
+ background-color: #ffffff;
3864
+ }
3865
+ .documentation-index-table .doc-title {
3866
+ font-weight: 500;
3867
+ color: #3273dc;
3868
+ }
3869
+ .documentation-index-table .doc-title:hover {
3870
+ text-decoration: underline;
3871
+ }
3872
+ .documentation-index-table .doc-summary {
3873
+ color: #6c757d;
3874
+ max-width: 50em;
3875
+ white-space: normal;
3876
+ line-height: 1.5;
3877
+ }
3878
+ .documentation-index-table .action-column {
3879
+ width: 100px;
3880
+ }
3881
+
3882
+ /* --- Agent List Enhancements --- */
3883
+ tr.is-newly-added {
3884
+ animation: highlight-new-row 2s ease-out;
3885
+ }
3886
+
3887
+ @keyframes highlight-new-row {
3888
+ 0% {
3889
+ background-color: hsl(171, 100%, 41%); /* Bulma's $primary color */
3890
+ color: hsl(0, 0%, 96%); /* Bulma's $primary-invert color */
3891
+ }
3892
+ 20% {
3893
+ background-color: hsl(171, 100%, 41%);
3894
+ color: hsl(0, 0%, 96%);
3895
+ }
3896
+ 100% {
3897
+ background-color: transparent; /* Or initial row color if striped */
3898
+ color: inherit;
3899
+ }
3900
+ }
3901
+ /* --- Empty State Styling --- */
3902
+ .empty-state {
3903
+ padding: 2rem 1rem;
3904
+ text-align: center;
3905
+ }
3906
+ .empty-state .icon.is-large {
3907
+ font-size: 3rem;
3908
+ color: var(--color-text-muted);
3909
+ opacity: 0.4;
3910
+ }
3911
+ .empty-state .title {
3912
+ color: var(--color-text-secondary);
3913
+ }
3914
+ .empty-state .subtitle {
3915
+ color: var(--color-text-muted);
3916
+ }
3917
+
3918
+ [data-theme=dark] .empty-state .icon.is-large {
3919
+ color: var(--color-text-muted);
3920
+ }
3921
+ [data-theme=dark] .empty-state .title {
3922
+ color: var(--color-text-secondary) !important;
3923
+ }
3924
+ [data-theme=dark] .empty-state .subtitle {
3925
+ color: var(--color-text-muted) !important;
3926
+ }
3927
+
3928
+ /* ========================================
3929
+ SKELETON LOADING COMPONENTS
3930
+ ======================================== */
3931
+ /* Base skeleton styles */
3932
+ .skeleton {
3933
+ background: linear-gradient(90deg, var(--color-bg-tertiary) 0%, var(--color-bg-secondary) 40%, var(--color-bg-secondary) 60%, var(--color-bg-tertiary) 100%);
3934
+ background-size: 300% 100%;
3935
+ animation: skeleton-shimmer 1.8s ease-in-out infinite;
3936
+ border-radius: var(--radius-sm);
3937
+ }
3938
+
3939
+ @keyframes skeleton-shimmer {
3940
+ 0% {
3941
+ background-position: 100% 0;
3942
+ }
3943
+ 100% {
3944
+ background-position: -100% 0;
3945
+ }
3946
+ }
3947
+ /* Skeleton text variants */
3948
+ .skeleton-text {
3949
+ height: 1rem;
3950
+ margin-bottom: 0.625rem;
3951
+ width: 100%;
3952
+ }
3953
+ .skeleton-text:last-child {
3954
+ margin-bottom: 0;
3955
+ }
3956
+ .skeleton-text.skeleton-short {
3957
+ width: 50%;
3958
+ }
3959
+ .skeleton-text.skeleton-medium {
3960
+ width: 75%;
3961
+ }
3962
+
3963
+ .skeleton-title {
3964
+ height: 1.5rem;
3965
+ width: 40%;
3966
+ margin-bottom: 1rem;
3967
+ }
3968
+
3969
+ /* Skeleton badge */
3970
+ .skeleton-badge {
3971
+ height: 1.75rem;
3972
+ width: 85px;
3973
+ border-radius: var(--radius-full);
3974
+ }
3975
+
3976
+ /* Skeleton avatar */
3977
+ .skeleton-avatar {
3978
+ width: 40px;
3979
+ height: 40px;
3980
+ border-radius: 50%;
3981
+ flex-shrink: 0;
3982
+ }
3983
+ .skeleton-avatar.skeleton-avatar-small {
3984
+ width: 32px;
3985
+ height: 32px;
3986
+ }
3987
+
3988
+ /* Skeleton icon (for status indicators) */
3989
+ .skeleton-icon {
3990
+ width: 48px;
3991
+ height: 48px;
3992
+ border-radius: 50%;
3993
+ }
3994
+
3995
+ /* Skeleton card */
3996
+ .skeleton-card {
3997
+ padding: 1.5rem;
3998
+ background: var(--color-bg-secondary);
3999
+ border: 1px solid var(--color-border);
4000
+ border-radius: var(--radius-md);
4001
+ }
4002
+
4003
+ /* Skeleton table row */
4004
+ .skeleton-row td {
4005
+ padding: 1rem;
4006
+ }
4007
+
4008
+ /* Skeleton chat interface */
4009
+ .skeleton-chat-container {
4010
+ padding: 1rem;
4011
+ background: var(--color-bg-tertiary);
4012
+ border-radius: var(--radius-md);
4013
+ min-height: 300px;
4014
+ }
4015
+
4016
+ .skeleton-message {
4017
+ display: flex;
4018
+ align-items: flex-start;
4019
+ gap: 0.75rem;
4020
+ margin-bottom: 1.25rem;
4021
+ }
4022
+ .skeleton-message.skeleton-message-left {
4023
+ justify-content: flex-start;
4024
+ }
4025
+ .skeleton-message.skeleton-message-right {
4026
+ justify-content: flex-end;
4027
+ }
4028
+ .skeleton-message.skeleton-message-right .skeleton-message-content {
4029
+ max-width: 60%;
4030
+ }
4031
+
4032
+ .skeleton-message-content {
4033
+ max-width: 70%;
4034
+ padding: 1rem;
4035
+ background: var(--color-bg-secondary);
4036
+ border-radius: var(--radius-md);
4037
+ }
4038
+ .skeleton-message-content .skeleton-text {
4039
+ margin-bottom: 0.5rem;
4040
+ }
4041
+ .skeleton-message-content .skeleton-text:last-child {
4042
+ margin-bottom: 0;
4043
+ }
4044
+
4045
+ .skeleton-chat-input {
4046
+ display: flex;
4047
+ gap: 0.75rem;
4048
+ margin-top: 1.5rem;
4049
+ padding-top: 1rem;
4050
+ border-top: 1px solid var(--color-border);
4051
+ }
4052
+
4053
+ .skeleton-input {
4054
+ flex: 1;
4055
+ height: 2.5rem;
4056
+ border-radius: var(--radius-md);
4057
+ }
4058
+
4059
+ .skeleton-button {
4060
+ width: 100px;
4061
+ height: 2.5rem;
4062
+ border-radius: var(--radius-md);
4063
+ }
4064
+
4065
+ /* Dark mode skeleton adjustments */
4066
+ [data-theme=dark] .skeleton {
4067
+ background: linear-gradient(90deg, var(--color-bg-tertiary) 0%, var(--color-bg-elevated) 40%, var(--color-bg-elevated) 60%, var(--color-bg-tertiary) 100%);
4068
+ background-size: 300% 100%;
4069
+ }
4070
+
4071
+ [data-theme=dark] .skeleton-card {
4072
+ background: var(--color-bg-secondary);
4073
+ border-color: var(--color-border);
4074
+ }
4075
+
4076
+ [data-theme=dark] .skeleton-chat-container {
4077
+ background: var(--color-bg-tertiary);
4078
+ }
4079
+
4080
+ [data-theme=dark] .skeleton-message-content {
4081
+ background: var(--color-bg-secondary);
4082
+ }
4083
+
4084
+ /* Respect reduced motion preference */
4085
+ @media (prefers-reduced-motion: reduce) {
4086
+ .skeleton {
4087
+ animation: none;
4088
+ background: var(--color-bg-tertiary);
4089
+ }
4090
+ }
4091
+ /* ========================================
4092
+ FORM SECTION GROUPING
4093
+ ======================================== */
4094
+ .form-section {
4095
+ background: var(--color-bg-secondary);
4096
+ border: 1px solid var(--color-border);
4097
+ border-radius: var(--radius-md);
4098
+ margin-bottom: 1.5rem;
4099
+ overflow: hidden;
4100
+ }
4101
+ .form-section:last-child {
4102
+ margin-bottom: 0;
4103
+ }
4104
+
4105
+ .form-section-header {
4106
+ display: flex;
4107
+ align-items: center;
4108
+ gap: 0.5rem;
4109
+ padding: 0.875rem 1.25rem;
4110
+ background: var(--color-bg-tertiary);
4111
+ border-bottom: 1px solid var(--color-border);
4112
+ font-weight: 600;
4113
+ font-size: 0.95rem;
4114
+ color: var(--color-text-primary);
4115
+ }
4116
+ .form-section-header .icon {
4117
+ color: var(--color-primary);
4118
+ font-size: 0.9rem;
4119
+ }
4120
+
4121
+ .form-section-content {
4122
+ padding: 1.25rem;
4123
+ }
4124
+ .form-section-content > .field:last-child,
4125
+ .form-section-content > .columns:last-child {
4126
+ margin-bottom: 0;
4127
+ }
4128
+ .form-section-content .columns {
4129
+ margin-bottom: 0;
4130
+ }
4131
+ .form-section-content .columns:not(:last-child) {
4132
+ margin-bottom: 0.75rem;
4133
+ }
4134
+ .form-section-content .column > .field {
4135
+ margin-bottom: 0;
4136
+ }
4137
+
4138
+ /* Collapsible sections */
4139
+ .form-section.is-collapsible .form-section-header {
4140
+ cursor: pointer;
4141
+ user-select: none;
4142
+ transition: background-color var(--transition-fast);
4143
+ }
4144
+ .form-section.is-collapsible .form-section-header:hover {
4145
+ background: var(--color-border-light);
4146
+ }
4147
+ .form-section.is-collapsible .form-section-header .collapse-icon {
4148
+ margin-left: auto;
4149
+ transition: transform var(--transition-fast);
4150
+ }
4151
+ .form-section.is-collapsible .form-section-header .collapse-icon i {
4152
+ font-size: 0.75rem;
4153
+ color: var(--color-text-muted);
4154
+ }
4155
+ .form-section.is-collapsible.is-collapsed .form-section-header .collapse-icon {
4156
+ transform: rotate(-90deg);
4157
+ }
4158
+ .form-section.is-collapsible.is-collapsed .form-section-content {
4159
+ display: none;
4160
+ }
4161
+
4162
+ /* Dark mode form sections */
4163
+ [data-theme=dark] .form-section {
4164
+ background: var(--color-bg-secondary);
4165
+ border-color: var(--color-border);
4166
+ }
4167
+
4168
+ [data-theme=dark] .form-section-header {
4169
+ background: var(--color-bg-tertiary);
4170
+ border-color: var(--color-border);
4171
+ color: var(--color-text-primary);
4172
+ }
4173
+
4174
+ [data-theme=dark] .form-section.is-collapsible .form-section-header:hover {
4175
+ background: var(--color-bg-elevated);
4176
+ }
4177
+
4178
+ /* Form section within details (create agent) */
4179
+ .create-agent-details .form-section {
4180
+ border: 1px solid var(--color-border-light);
4181
+ }
4182
+ .create-agent-details .form-section:first-child {
4183
+ margin-top: 0.5rem;
4184
+ }
4185
+
4186
+ .create-agent-details .form-section-header {
4187
+ background: var(--color-bg-primary);
4188
+ }
4189
+
4190
+ [data-theme=dark] .create-agent-details .form-section-header {
4191
+ background: var(--color-bg-tertiary);
4192
+ }
4193
+
4194
+ /* ===== Tools Card Grid ===== */
4195
+ .tools-card-grid {
4196
+ display: grid;
4197
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
4198
+ gap: 1.25rem;
4199
+ }
4200
+
4201
+ .tool-card {
4202
+ background: var(--color-bg-primary);
4203
+ border: 1px solid var(--color-border);
4204
+ border-radius: var(--radius-md);
4205
+ padding: 1.25rem;
4206
+ display: flex;
4207
+ flex-direction: column;
4208
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast);
4209
+ }
4210
+
4211
+ .tool-card:hover {
4212
+ transform: translateY(-2px);
4213
+ box-shadow: var(--shadow-md);
4214
+ border-color: var(--color-primary);
4215
+ }
4216
+
4217
+ .tool-card-header {
4218
+ display: flex;
4219
+ justify-content: space-between;
4220
+ align-items: flex-start;
4221
+ margin-bottom: 0.75rem;
4222
+ }
4223
+
4224
+ .tool-card-icon {
4225
+ width: 42px;
4226
+ height: 42px;
4227
+ background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-hover) 100%);
4228
+ border-radius: var(--radius-sm);
4229
+ display: flex;
4230
+ align-items: center;
4231
+ justify-content: center;
4232
+ }
4233
+
4234
+ .tool-card-icon .icon {
4235
+ color: white;
4236
+ }
4237
+
4238
+ .tool-card-meta {
4239
+ display: flex;
4240
+ align-items: center;
4241
+ gap: 0.5rem;
4242
+ }
4243
+
4244
+ .tool-card-body {
4245
+ flex: 1;
4246
+ margin-bottom: 1rem;
4247
+ }
4248
+
4249
+ .tool-card-title {
4250
+ font-size: 1.1rem;
4251
+ font-weight: 600;
4252
+ color: var(--color-text-primary);
4253
+ margin-bottom: 0.5rem;
4254
+ line-height: 1.3;
4255
+ }
4256
+
4257
+ .tool-card-title a {
4258
+ color: inherit;
4259
+ text-decoration: none;
4260
+ transition: color var(--transition-fast);
4261
+ }
4262
+
4263
+ .tool-card-title a:hover {
4264
+ color: var(--color-primary);
4265
+ }
4266
+
4267
+ .tool-card-description {
4268
+ font-size: 0.9rem;
4269
+ color: var(--color-text-secondary);
4270
+ line-height: 1.5;
4271
+ display: -webkit-box;
4272
+ -webkit-line-clamp: 3;
4273
+ -webkit-box-orient: vertical;
4274
+ overflow: hidden;
4275
+ }
4276
+
4277
+ .tool-card-footer {
4278
+ border-top: 1px solid var(--color-border-light);
4279
+ padding-top: 0.75rem;
4280
+ margin-top: auto;
4281
+ }
4282
+
4283
+ .tool-card-params {
4284
+ display: flex;
4285
+ align-items: center;
4286
+ gap: 0.5rem;
4287
+ font-size: 0.85rem;
4288
+ color: var(--color-text-secondary);
4289
+ cursor: pointer;
4290
+ position: relative;
4291
+ }
4292
+
4293
+ .tool-param-count {
4294
+ font-weight: 500;
4295
+ }
4296
+
4297
+ .tool-param-details {
4298
+ display: none;
4299
+ position: absolute;
4300
+ bottom: 100%;
4301
+ left: 0;
4302
+ right: 0;
4303
+ background: var(--color-bg-elevated);
4304
+ border: 1px solid var(--color-border);
4305
+ border-radius: var(--radius-sm);
4306
+ padding: 0.75rem;
4307
+ margin-bottom: 0.5rem;
4308
+ box-shadow: var(--shadow-lg);
4309
+ z-index: 10;
4310
+ max-height: 200px;
4311
+ overflow-y: auto;
4312
+ }
4313
+
4314
+ .tool-card-params:hover .tool-param-details {
4315
+ display: block;
4316
+ }
4317
+
4318
+ .tool-param {
4319
+ display: flex;
4320
+ align-items: center;
4321
+ gap: 0.5rem;
4322
+ padding: 0.25rem 0;
4323
+ font-size: 0.8rem;
4324
+ }
4325
+
4326
+ .tool-param:not(:last-child) {
4327
+ border-bottom: 1px solid var(--color-border-light);
4328
+ padding-bottom: 0.5rem;
4329
+ margin-bottom: 0.25rem;
4330
+ }
4331
+
4332
+ .tool-param code {
4333
+ background: var(--color-bg-code);
4334
+ padding: 0.15rem 0.4rem;
4335
+ border-radius: var(--radius-xs);
4336
+ font-family: var(--font-mono);
4337
+ font-size: 0.75rem;
4338
+ color: var(--color-primary);
4339
+ }
4340
+
4341
+ .tool-param-type {
4342
+ color: var(--color-text-muted);
4343
+ font-size: 0.75rem;
4344
+ }
4345
+
4346
+ /* Tools Empty State */
4347
+ .tools-empty-state {
4348
+ text-align: center;
4349
+ padding: 3rem 2rem;
4350
+ background: var(--color-bg-secondary);
4351
+ border-radius: var(--radius-md);
4352
+ border: 2px dashed var(--color-border);
4353
+ }
4354
+
4355
+ .tools-empty-icon {
4356
+ margin-bottom: 1rem;
4357
+ }
4358
+
4359
+ .tools-empty-title {
4360
+ font-size: 1.25rem;
4361
+ font-weight: 600;
4362
+ color: var(--color-text-primary);
4363
+ margin-bottom: 0.5rem;
4364
+ }
4365
+
4366
+ .tools-empty-text {
4367
+ color: var(--color-text-secondary);
4368
+ margin-bottom: 0.5rem;
4369
+ }
4370
+
4371
+ .tools-empty-hint {
4372
+ font-size: 0.85rem;
4373
+ color: var(--color-text-muted);
4374
+ max-width: 400px;
4375
+ margin: 0 auto;
4376
+ }
4377
+
4378
+ /* MCP Errors Section */
4379
+ .tools-mcp-errors {
4380
+ background: var(--color-bg-secondary);
4381
+ border-radius: var(--radius-md);
4382
+ padding: 1rem;
4383
+ border: 1px solid var(--color-border);
4384
+ }
4385
+
4386
+ .tools-mcp-errors-title {
4387
+ font-size: 0.9rem;
4388
+ font-weight: 600;
4389
+ color: var(--color-text-secondary);
4390
+ margin-bottom: 0.75rem;
4391
+ display: flex;
4392
+ align-items: center;
4393
+ }
4394
+
4395
+ /* Dark mode adjustments */
4396
+ [data-theme=dark] .tool-card {
4397
+ background: var(--color-bg-secondary);
4398
+ }
4399
+
4400
+ [data-theme=dark] .tool-card:hover {
4401
+ background: var(--color-bg-tertiary);
4402
+ }
4403
+
4404
+ [data-theme=dark] .tool-param-details {
4405
+ background: var(--color-bg-tertiary);
4406
+ }
4407
+
4408
+ [data-theme=dark] .tools-empty-state {
4409
+ background: var(--color-bg-tertiary);
4410
+ }
4411
+
4412
+ [data-theme=dark] .tools-mcp-errors {
4413
+ background: var(--color-bg-tertiary);
4414
+ }
4415
+
4416
+ /* Responsive: Single column on mobile */
4417
+ @media screen and (max-width: 768px) {
4418
+ .tools-card-grid {
4419
+ grid-template-columns: 1fr;
4420
+ }
4421
+ }
4422
+ /* ===============================================
4423
+ AI Code Generator Modal Styles
4424
+ =============================================== */
4425
+ .code-preview-container {
4426
+ background-color: #f6f8fa;
4427
+ border: 1px solid #e1e4e8;
4428
+ border-radius: 6px;
4429
+ overflow: hidden;
4430
+ }
4431
+ .code-preview-container pre {
4432
+ margin: 0;
4433
+ padding: 1rem;
4434
+ background: transparent !important;
4435
+ border: none;
4436
+ overflow-x: auto;
4437
+ }
4438
+ .code-preview-container pre code {
4439
+ font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
4440
+ font-size: 0.875rem;
4441
+ line-height: 1.6;
4442
+ white-space: pre;
4443
+ display: block;
4444
+ background: transparent !important;
4445
+ padding: 0 !important;
4446
+ }
4447
+ .code-preview-container pre code.hljs {
4448
+ background: transparent !important;
4449
+ padding: 0 !important;
4450
+ }
4451
+
4452
+ [data-theme=dark] .code-preview-container {
4453
+ background-color: #0d1117;
4454
+ border-color: #30363d;
4455
+ }
4456
+ [data-theme=dark] .code-preview-container pre {
4457
+ background: transparent !important;
4458
+ }
4459
+ [data-theme=dark] .code-preview-container pre code {
4460
+ color: #e6edf3;
4461
+ background: transparent !important;
4462
+ }
4463
+ [data-theme=dark] .code-preview-container pre code.hljs {
4464
+ background: transparent !important;
4465
+ }
4466
+
4467
+ /* Generator modal specific styles */
4468
+ #agent-generator-modal .modal-card-body,
4469
+ #tool-generator-modal .modal-card-body {
4470
+ position: relative;
4471
+ }
4472
+ #agent-generator-modal textarea.textarea,
4473
+ #tool-generator-modal textarea.textarea {
4474
+ font-family: inherit;
4475
+ resize: vertical;
4476
+ min-height: 120px;
4477
+ }
4478
+ #agent-generator-modal .notification,
4479
+ #tool-generator-modal .notification {
4480
+ margin-bottom: 0;
4481
+ }
4482
+
4483
+ /* ========================================
4484
+ COMMAND CONSOLE — AGENTS DASHBOARD
4485
+ Stat strip + "Deployed Legion" card grid.
4486
+ ======================================== */
4487
+ /* App content sits left-aligned next to the rail (not centered) */
4488
+ .app-content .container {
4489
+ max-width: 1200px;
4490
+ margin-left: 0;
4491
+ }
4492
+
4493
+ /* --- Stat strip --- */
4494
+ .stat-strip {
4495
+ display: grid;
4496
+ grid-template-columns: repeat(3, 1fr);
4497
+ gap: 1rem;
4498
+ }
4499
+
4500
+ .stat-card {
4501
+ display: flex;
4502
+ align-items: center;
4503
+ gap: 0.9rem;
4504
+ padding: 1rem 1.15rem;
4505
+ background-color: var(--color-bg-secondary);
4506
+ border: 1px solid var(--color-border);
4507
+ border-radius: var(--radius-lg);
4508
+ box-shadow: var(--shadow-sm);
4509
+ }
4510
+
4511
+ .stat-icon {
4512
+ display: flex;
4513
+ align-items: center;
4514
+ justify-content: center;
4515
+ width: 2.6rem;
4516
+ height: 2.6rem;
4517
+ border-radius: var(--radius-md);
4518
+ font-size: 1.05rem;
4519
+ color: var(--color-primary);
4520
+ background-color: var(--color-primary-light);
4521
+ }
4522
+
4523
+ .stat-icon.is-accent {
4524
+ color: var(--color-accent);
4525
+ background-color: var(--color-accent-light);
4526
+ }
4527
+
4528
+ .stat-icon.is-info {
4529
+ color: var(--color-info);
4530
+ background-color: var(--color-info-light);
4531
+ }
4532
+
4533
+ .stat-value {
4534
+ font-family: var(--font-headline);
4535
+ font-size: 1.6rem;
4536
+ font-weight: 700;
4537
+ line-height: 1.1;
4538
+ color: var(--color-text-primary);
4539
+ }
4540
+
4541
+ .stat-suffix {
4542
+ font-size: 1rem;
4543
+ font-weight: 500;
4544
+ color: var(--color-text-muted);
4545
+ }
4546
+
4547
+ .stat-label {
4548
+ font-size: 0.78rem;
4549
+ color: var(--color-text-muted);
4550
+ text-transform: uppercase;
4551
+ letter-spacing: 0.06em;
4552
+ }
4553
+
4554
+ /* --- Legion section header --- */
4555
+ .legion-section {
4556
+ margin-top: 0.5rem;
4557
+ }
4558
+
4559
+ .legion-header {
4560
+ display: flex;
4561
+ align-items: center;
4562
+ justify-content: space-between;
4563
+ gap: 1rem;
4564
+ margin-bottom: 1.1rem;
4565
+ flex-wrap: wrap;
4566
+ }
4567
+
4568
+ .legion-header-left {
4569
+ display: flex;
4570
+ align-items: baseline;
4571
+ gap: 0.6rem;
4572
+ }
4573
+
4574
+ .legion-count {
4575
+ font-family: var(--font-mono);
4576
+ font-size: 0.85rem;
4577
+ color: var(--color-text-muted);
4578
+ padding: 0.1rem 0.5rem;
4579
+ border: 1px solid var(--color-border);
4580
+ border-radius: var(--radius-full);
4581
+ }
4582
+
4583
+ .legion-count:empty {
4584
+ display: none;
4585
+ }
4586
+
4587
+ .legion-header-right .search-with-shortcut {
4588
+ min-width: 280px;
4589
+ }
4590
+
4591
+ /* --- Card grid --- */
4592
+ .legion-grid {
4593
+ display: grid;
4594
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
4595
+ gap: 1.1rem;
4596
+ }
4597
+
4598
+ .agent-card {
4599
+ position: relative;
4600
+ display: flex;
4601
+ flex-direction: column;
4602
+ padding: 1.15rem 1.2rem 1rem;
4603
+ background-color: var(--color-bg-secondary);
4604
+ border: 1px solid var(--color-border);
4605
+ border-left: 3px solid var(--color-border);
4606
+ border-radius: var(--radius-lg);
4607
+ box-shadow: var(--shadow-sm);
4608
+ transition: box-shadow var(--transition-fast), border-color var(--transition-fast), transform var(--transition-fast);
4609
+ }
4610
+
4611
+ .agent-card:hover {
4612
+ box-shadow: var(--shadow-md);
4613
+ transform: translateY(-1px);
4614
+ }
4615
+
4616
+ /* Green left accent bar when the agent is running (command-console cue) */
4617
+ .agent-card.is-running {
4618
+ border-left-color: var(--color-success);
4619
+ }
4620
+
4621
+ .agent-card-head {
4622
+ display: flex;
4623
+ align-items: flex-start;
4624
+ justify-content: space-between;
4625
+ gap: 0.75rem;
4626
+ }
4627
+
4628
+ .agent-card-titles {
4629
+ display: flex;
4630
+ align-items: center;
4631
+ gap: 0.5rem;
4632
+ flex-wrap: wrap;
4633
+ }
4634
+
4635
+ .agent-card-name {
4636
+ font-family: var(--font-headline);
4637
+ font-weight: 600;
4638
+ font-size: 1.05rem;
4639
+ color: var(--color-text-primary);
4640
+ }
4641
+
4642
+ .agent-card-name:hover {
4643
+ color: var(--color-primary);
4644
+ }
4645
+
4646
+ .agent-type-chip {
4647
+ font-size: 0.62rem;
4648
+ font-weight: 600;
4649
+ letter-spacing: 0.05em;
4650
+ text-transform: uppercase;
4651
+ padding: 0.12rem 0.45rem;
4652
+ border-radius: var(--radius-full);
4653
+ color: var(--color-text-muted);
4654
+ background-color: var(--color-bg-tertiary);
4655
+ }
4656
+
4657
+ /* Status pill */
4658
+ .status-pill {
4659
+ display: inline-flex;
4660
+ align-items: center;
4661
+ gap: 0.4rem;
4662
+ flex: none;
4663
+ font-size: 0.72rem;
4664
+ font-weight: 600;
4665
+ padding: 0.2rem 0.6rem;
4666
+ border-radius: var(--radius-full);
4667
+ }
4668
+
4669
+ .status-pill .status-dot {
4670
+ width: 7px;
4671
+ height: 7px;
4672
+ border-radius: 50%;
4673
+ background: currentColor;
4674
+ }
4675
+
4676
+ /* Running = green (healthy/active), idle = muted grey. Stop action stays red. */
4677
+ .status-pill.is-running {
4678
+ color: var(--color-success);
4679
+ background-color: var(--color-success-light);
4680
+ box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.15);
4681
+ }
4682
+
4683
+ .status-pill.is-idle {
4684
+ color: var(--color-text-muted);
4685
+ background-color: var(--color-bg-tertiary);
4686
+ }
4687
+
4688
+ .agent-card-desc {
4689
+ margin: 0.7rem 0 0.85rem;
4690
+ font-size: 0.88rem;
4691
+ color: var(--color-text-secondary);
4692
+ line-height: 1.45;
4693
+ display: -webkit-box;
4694
+ -webkit-line-clamp: 2;
4695
+ -webkit-box-orient: vertical;
4696
+ overflow: hidden;
4697
+ }
4698
+
4699
+ .agent-card-meta {
4700
+ margin-bottom: 0.7rem;
4701
+ }
4702
+
4703
+ .mono-chip {
4704
+ display: inline-flex;
4705
+ align-items: center;
4706
+ gap: 0.4rem;
4707
+ font-family: var(--font-mono);
4708
+ font-size: 0.74rem;
4709
+ color: var(--color-text-secondary);
4710
+ padding: 0.2rem 0.55rem;
4711
+ border: 1px solid var(--color-border);
4712
+ border-radius: var(--radius-sm);
4713
+ background-color: var(--color-bg-tertiary);
4714
+ }
4715
+
4716
+ .mono-chip .icon {
4717
+ color: var(--color-text-muted);
4718
+ }
4719
+
4720
+ .agent-card-tools {
4721
+ display: flex;
4722
+ flex-wrap: wrap;
4723
+ gap: 0.4rem;
4724
+ margin-bottom: 1rem;
4725
+ }
4726
+
4727
+ .tool-chip {
4728
+ font-family: var(--font-mono);
4729
+ font-size: 0.72rem;
4730
+ color: var(--color-primary);
4731
+ padding: 0.18rem 0.5rem;
4732
+ border-radius: var(--radius-sm);
4733
+ background-color: var(--color-primary-light);
4734
+ transition: background-color var(--transition-fast);
4735
+ }
4736
+
4737
+ .tool-chip:hover {
4738
+ background-color: rgba(var(--color-primary-rgb), 0.2);
4739
+ color: var(--color-primary);
4740
+ }
4741
+
4742
+ .tool-chip.is-empty {
4743
+ color: var(--color-text-muted);
4744
+ background-color: var(--color-bg-tertiary);
4745
+ font-style: italic;
4746
+ }
4747
+
4748
+ /* Card footer actions */
4749
+ .agent-card-foot {
4750
+ display: flex;
4751
+ align-items: center;
4752
+ gap: 0.5rem;
4753
+ margin-top: auto;
4754
+ padding-top: 0.85rem;
4755
+ border-top: 1px solid var(--color-border-light);
4756
+ }
4757
+
4758
+ /* Dedicated card-action class — intentionally NOT the legacy `.action-btn`
4759
+ (which is a fixed 32x32 icon box) so text buttons size to their content. */
4760
+ .legion-action {
4761
+ display: inline-flex;
4762
+ align-items: center;
4763
+ justify-content: center;
4764
+ gap: 0.4rem;
4765
+ flex: 0 0 auto;
4766
+ white-space: nowrap;
4767
+ height: 2rem;
4768
+ padding: 0 0.8rem;
4769
+ font-size: 0.8rem;
4770
+ font-weight: 600;
4771
+ line-height: 1;
4772
+ border-radius: var(--radius-md);
4773
+ border: 1px solid var(--color-border);
4774
+ background-color: transparent;
4775
+ color: var(--color-text-secondary);
4776
+ cursor: pointer;
4777
+ text-decoration: none;
4778
+ transition: all var(--transition-fast);
4779
+ }
4780
+
4781
+ .legion-action i {
4782
+ font-size: 0.8rem;
4783
+ }
4784
+
4785
+ .legion-action:hover {
4786
+ background-color: var(--color-bg-tertiary);
4787
+ color: var(--color-text-primary);
4788
+ }
4789
+
4790
+ .legion-action:active {
4791
+ transform: scale(0.97);
4792
+ }
4793
+
4794
+ /* Square icon-only variant (details / delete) */
4795
+ .legion-action.is-icon {
4796
+ width: 2rem;
4797
+ padding: 0;
4798
+ color: var(--color-text-muted);
4799
+ }
4800
+
4801
+ .legion-action.is-details {
4802
+ margin-left: auto;
4803
+ }
4804
+
4805
+ .legion-action.is-icon.is-danger:hover {
4806
+ color: var(--color-danger);
4807
+ border-color: var(--color-danger);
4808
+ background-color: var(--color-danger-light);
4809
+ }
4810
+
4811
+ /* Primary run / destructive stop */
4812
+ .legion-action.is-run {
4813
+ border-color: transparent;
4814
+ background-color: var(--color-primary);
4815
+ color: #fff;
4816
+ }
4817
+
4818
+ .legion-action.is-run:hover {
4819
+ background-color: var(--color-primary-hover);
4820
+ color: #fff;
4821
+ }
4822
+
4823
+ .legion-action.is-stop {
4824
+ color: var(--color-danger);
4825
+ border-color: var(--color-danger);
4826
+ }
4827
+
4828
+ .legion-action.is-stop:hover {
4829
+ background-color: var(--color-danger);
4830
+ color: #fff;
4831
+ }
4832
+
4833
+ /* Newly-added card flash */
4834
+ .agent-card.is-newly-added {
4835
+ animation: cardFlashIn var(--transition-slow) ease;
4836
+ }
4837
+
4838
+ @keyframes cardFlashIn {
4839
+ from {
4840
+ opacity: 0;
4841
+ transform: translateY(6px);
4842
+ box-shadow: 0 0 0 3px var(--color-primary-light);
4843
+ }
4844
+ to {
4845
+ opacity: 1;
4846
+ transform: translateY(0);
4847
+ }
4848
+ }
4849
+ /* Empty state */
4850
+ .legion-empty {
4851
+ text-align: center;
4852
+ padding: 3rem 1rem;
4853
+ border: 1px dashed var(--color-border);
4854
+ border-radius: var(--radius-lg);
4855
+ background-color: var(--color-bg-secondary);
4856
+ }
4857
+
4858
+ @media screen and (max-width: 768px) {
4859
+ .stat-strip {
4860
+ grid-template-columns: 1fr;
4861
+ }
4862
+ .legion-header-right .search-with-shortcut {
4863
+ min-width: 0;
4864
+ width: 100%;
4865
+ }
4866
+ .legion-header-right {
4867
+ width: 100%;
4868
+ }
4869
+ }
4870
+ /* ========================================
4871
+ DOCUMENTATION CONTENT (rendered markdown)
4872
+ Token-based so it reads well in BOTH light and dark — Bulma's defaults
4873
+ leave markdown headings dark and code blocks light, which broke dark mode.
4874
+ ======================================== */
4875
+ .documentation-content .content h1,
4876
+ .documentation-content .content h2,
4877
+ .documentation-content .content h3,
4878
+ .documentation-content .content h4,
4879
+ .documentation-content .content h5,
4880
+ .documentation-content .content h6 {
4881
+ font-family: var(--font-headline);
4882
+ color: var(--color-text-primary) !important;
4883
+ letter-spacing: -0.01em;
4884
+ }
4885
+
4886
+ .documentation-content .content h1 {
4887
+ font-size: 1.85rem;
4888
+ }
4889
+
4890
+ .documentation-content .content h2 {
4891
+ font-size: 1.4rem;
4892
+ margin-top: 2.25rem;
4893
+ padding-bottom: 0.4rem;
4894
+ border-bottom: 1px solid var(--color-border);
4895
+ }
4896
+
4897
+ .documentation-content .content h3 {
4898
+ font-size: 1.15rem;
4899
+ margin-top: 1.6rem;
4900
+ }
4901
+
4902
+ .documentation-content .content p,
4903
+ .documentation-content .content li {
4904
+ color: var(--color-text-secondary);
4905
+ }
4906
+
4907
+ .documentation-content .content strong {
4908
+ color: var(--color-text-primary);
4909
+ }
4910
+
4911
+ .documentation-content .content a {
4912
+ color: var(--color-primary);
4913
+ }
4914
+
4915
+ .documentation-content .content a:hover {
4916
+ text-decoration: underline;
4917
+ }
4918
+
4919
+ .documentation-content .content hr {
4920
+ background-color: var(--color-border);
4921
+ }
4922
+
4923
+ /* Inline code */
4924
+ .documentation-content .content code {
4925
+ font-family: var(--font-mono);
4926
+ font-size: 0.85em;
4927
+ background: var(--color-primary-light);
4928
+ color: var(--color-primary);
4929
+ padding: 0.12em 0.4em;
4930
+ border-radius: var(--radius-sm);
4931
+ }
4932
+
4933
+ /* Code blocks — own dark/light surface via tokens; readable even if the
4934
+ highlight.js theme is light/absent (base text color comes from the block). */
4935
+ .documentation-content .content pre {
4936
+ background: var(--color-bg-tertiary);
4937
+ border: 1px solid var(--color-border);
4938
+ border-radius: var(--radius-md);
4939
+ color: var(--color-text-primary);
4940
+ padding: 1rem 1.1rem;
4941
+ font-size: 0.85rem;
4942
+ }
4943
+
4944
+ .documentation-content .content pre code,
4945
+ .documentation-content .content pre code.hljs {
4946
+ background: transparent !important;
4947
+ color: inherit;
4948
+ padding: 0;
4949
+ font-size: inherit;
4950
+ }
4951
+
4952
+ /* Blockquotes + tables */
4953
+ .documentation-content .content blockquote {
4954
+ border-left: 3px solid var(--color-accent);
4955
+ background: var(--color-bg-tertiary);
4956
+ color: var(--color-text-secondary);
4957
+ border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
4958
+ }
4959
+
4960
+ .documentation-content .content table th {
4961
+ color: var(--color-text-primary);
4962
+ }
4963
+
4964
+ .documentation-content .content table th,
4965
+ .documentation-content .content table td {
4966
+ border-color: var(--color-border) !important;
4967
+ }
4968
+
4969
+ /* In dark mode, keep highlight.js syntax colors legible on the dark block:
4970
+ force a light base so any spans the light theme left dark stay readable. */
4971
+ [data-theme=dark] .documentation-content .content pre {
4972
+ background: #11151b;
4973
+ color: #c9d1d9;
4974
+ }
4975
+
4976
+ [data-theme=dark] .documentation-content .content pre code,
4977
+ [data-theme=dark] .documentation-content .content pre code .hljs-comment,
4978
+ [data-theme=dark] .documentation-content .content pre code .hljs-meta {
4979
+ color: inherit;
4980
+ }