@sleep2agi/agent-network-dashboard 0.5.7-preview.3 → 0.5.7-preview.30

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 (273) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +0 -1
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/diagnostics/route-bundle-stats.json +48 -48
  5. package/.next/fallback-build-manifest.json +3 -3
  6. package/.next/prerender-manifest.json +3 -3
  7. package/.next/routes-manifest.json +0 -6
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/_not-found.html +3 -3
  18. package/.next/server/app/_not-found.rsc +15 -15
  19. package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  20. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  21. package/.next/server/app/_not-found.segments/_index.segment.rsc +8 -8
  22. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  23. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  24. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  25. package/.next/server/app/admin/page.js.nft.json +1 -1
  26. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app/admin.html +3 -3
  28. package/.next/server/app/admin.rsc +17 -17
  29. package/.next/server/app/admin.segments/_full.segment.rsc +17 -17
  30. package/.next/server/app/admin.segments/_head.segment.rsc +4 -4
  31. package/.next/server/app/admin.segments/_index.segment.rsc +8 -8
  32. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  33. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +4 -4
  34. package/.next/server/app/admin.segments/admin.segment.rsc +3 -3
  35. package/.next/server/app/index.html +3 -3
  36. package/.next/server/app/index.rsc +17 -17
  37. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  38. package/.next/server/app/index.segments/_full.segment.rsc +17 -17
  39. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  40. package/.next/server/app/index.segments/_index.segment.rsc +8 -8
  41. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  42. package/.next/server/app/login/page.js.nft.json +1 -1
  43. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  44. package/.next/server/app/login.html +2 -2
  45. package/.next/server/app/login.rsc +17 -17
  46. package/.next/server/app/login.segments/_full.segment.rsc +17 -17
  47. package/.next/server/app/login.segments/_head.segment.rsc +4 -4
  48. package/.next/server/app/login.segments/_index.segment.rsc +8 -8
  49. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  50. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  51. package/.next/server/app/login.segments/login.segment.rsc +3 -3
  52. package/.next/server/app/logs/page.js.nft.json +1 -1
  53. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  54. package/.next/server/app/logs.html +3 -3
  55. package/.next/server/app/logs.rsc +17 -17
  56. package/.next/server/app/logs.segments/_full.segment.rsc +17 -17
  57. package/.next/server/app/logs.segments/_head.segment.rsc +4 -4
  58. package/.next/server/app/logs.segments/_index.segment.rsc +8 -8
  59. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  60. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +4 -4
  61. package/.next/server/app/logs.segments/logs.segment.rsc +3 -3
  62. package/.next/server/app/messages/page.js.nft.json +1 -1
  63. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  64. package/.next/server/app/messages.html +3 -3
  65. package/.next/server/app/messages.rsc +17 -17
  66. package/.next/server/app/messages.segments/_full.segment.rsc +17 -17
  67. package/.next/server/app/messages.segments/_head.segment.rsc +4 -4
  68. package/.next/server/app/messages.segments/_index.segment.rsc +8 -8
  69. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  70. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +4 -4
  71. package/.next/server/app/messages.segments/messages.segment.rsc +3 -3
  72. package/.next/server/app/node/page.js.nft.json +1 -1
  73. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/node.html +3 -3
  75. package/.next/server/app/node.rsc +17 -17
  76. package/.next/server/app/node.segments/_full.segment.rsc +17 -17
  77. package/.next/server/app/node.segments/_head.segment.rsc +4 -4
  78. package/.next/server/app/node.segments/_index.segment.rsc +8 -8
  79. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +4 -4
  81. package/.next/server/app/node.segments/node.segment.rsc +3 -3
  82. package/.next/server/app/nodes/page.js.nft.json +1 -1
  83. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/nodes.html +3 -3
  85. package/.next/server/app/nodes.rsc +17 -17
  86. package/.next/server/app/nodes.segments/_full.segment.rsc +17 -17
  87. package/.next/server/app/nodes.segments/_head.segment.rsc +4 -4
  88. package/.next/server/app/nodes.segments/_index.segment.rsc +8 -8
  89. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  90. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +4 -4
  91. package/.next/server/app/nodes.segments/nodes.segment.rsc +3 -3
  92. package/.next/server/app/page.js.nft.json +1 -1
  93. package/.next/server/app/page_client-reference-manifest.js +1 -1
  94. package/.next/server/app/server-logs/page.js.nft.json +1 -1
  95. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  96. package/.next/server/app/server-logs.html +3 -3
  97. package/.next/server/app/server-logs.rsc +17 -17
  98. package/.next/server/app/server-logs.segments/_full.segment.rsc +17 -17
  99. package/.next/server/app/server-logs.segments/_head.segment.rsc +4 -4
  100. package/.next/server/app/server-logs.segments/_index.segment.rsc +8 -8
  101. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  102. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +4 -4
  103. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +3 -3
  104. package/.next/server/app/servers/page.js.nft.json +1 -1
  105. package/.next/server/app/servers/page_client-reference-manifest.js +1 -1
  106. package/.next/server/app/servers.html +3 -3
  107. package/.next/server/app/servers.rsc +17 -17
  108. package/.next/server/app/servers.segments/_full.segment.rsc +17 -17
  109. package/.next/server/app/servers.segments/_head.segment.rsc +4 -4
  110. package/.next/server/app/servers.segments/_index.segment.rsc +8 -8
  111. package/.next/server/app/servers.segments/_tree.segment.rsc +2 -2
  112. package/.next/server/app/servers.segments/servers/__PAGE__.segment.rsc +4 -4
  113. package/.next/server/app/servers.segments/servers.segment.rsc +3 -3
  114. package/.next/server/app/settings/networks/page.js.nft.json +1 -1
  115. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  116. package/.next/server/app/settings/networks.html +3 -3
  117. package/.next/server/app/settings/networks.rsc +17 -17
  118. package/.next/server/app/settings/networks.segments/_full.segment.rsc +17 -17
  119. package/.next/server/app/settings/networks.segments/_head.segment.rsc +4 -4
  120. package/.next/server/app/settings/networks.segments/_index.segment.rsc +8 -8
  121. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  122. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +4 -4
  123. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +3 -3
  124. package/.next/server/app/settings/networks.segments/settings.segment.rsc +3 -3
  125. package/.next/server/app/settings/page.js.nft.json +1 -1
  126. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  127. package/.next/server/app/settings/tokens/page.js.nft.json +1 -1
  128. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  129. package/.next/server/app/settings/tokens.html +3 -3
  130. package/.next/server/app/settings/tokens.rsc +17 -17
  131. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +17 -17
  132. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +4 -4
  133. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +8 -8
  134. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  135. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +4 -4
  136. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +3 -3
  137. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +3 -3
  138. package/.next/server/app/settings.html +3 -3
  139. package/.next/server/app/settings.rsc +17 -17
  140. package/.next/server/app/settings.segments/_full.segment.rsc +17 -17
  141. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  142. package/.next/server/app/settings.segments/_index.segment.rsc +8 -8
  143. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  144. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  145. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  146. package/.next/server/app/tasks/[id]/page.js.nft.json +1 -1
  147. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  148. package/.next/server/app/tasks/page.js.nft.json +1 -1
  149. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  150. package/.next/server/app/tasks.html +3 -3
  151. package/.next/server/app/tasks.rsc +17 -17
  152. package/.next/server/app/tasks.segments/_full.segment.rsc +17 -17
  153. package/.next/server/app/tasks.segments/_head.segment.rsc +4 -4
  154. package/.next/server/app/tasks.segments/_index.segment.rsc +8 -8
  155. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  156. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +4 -4
  157. package/.next/server/app/tasks.segments/tasks.segment.rsc +3 -3
  158. package/.next/server/app-paths-manifest.json +0 -1
  159. package/.next/server/chunks/ssr/[root-of-the-server]__030vg4n._.js +1 -1
  160. package/.next/server/chunks/ssr/[root-of-the-server]__030vg4n._.js.map +1 -1
  161. package/.next/server/chunks/ssr/[root-of-the-server]__0fhoq8i._.js +1 -1
  162. package/.next/server/chunks/ssr/[root-of-the-server]__0fhoq8i._.js.map +1 -1
  163. package/.next/server/chunks/ssr/[root-of-the-server]__0lu1wok._.js +2 -2
  164. package/.next/server/chunks/ssr/[root-of-the-server]__0lu1wok._.js.map +1 -1
  165. package/.next/server/chunks/ssr/[root-of-the-server]__0nw~zhp._.js +1 -1
  166. package/.next/server/chunks/ssr/[root-of-the-server]__0nw~zhp._.js.map +1 -1
  167. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +1 -1
  168. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +1 -1
  169. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +3 -3
  170. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  171. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  172. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  173. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  174. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  175. package/.next/server/chunks/ssr/agent-network-dashboard_app_0i3759l._.js +1 -1
  176. package/.next/server/chunks/ssr/agent-network-dashboard_app_0i3759l._.js.map +1 -1
  177. package/.next/server/chunks/ssr/agent-network-dashboard_app_0xgney8._.js +1 -1
  178. package/.next/server/chunks/ssr/agent-network-dashboard_app_0xgney8._.js.map +1 -1
  179. package/.next/server/chunks/ssr/agent-network-dashboard_app_10hjgv4._.js +1 -1
  180. package/.next/server/chunks/ssr/agent-network-dashboard_app_10hjgv4._.js.map +1 -1
  181. package/.next/server/chunks/ssr/agent-network-dashboard_app_1153xeb._.js +2 -2
  182. package/.next/server/chunks/ssr/agent-network-dashboard_app_1153xeb._.js.map +1 -1
  183. package/.next/server/chunks/ssr/agent-network-dashboard_app_12l4oto._.js +1 -1
  184. package/.next/server/chunks/ssr/agent-network-dashboard_app_12l4oto._.js.map +1 -1
  185. package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0r7kb.o._.js +9 -0
  186. package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0r7kb.o._.js.map +1 -0
  187. package/.next/server/chunks/ssr/agent-network-dashboard_app_server-logs_page_tsx_0dg.l_8._.js +1 -1
  188. package/.next/server/chunks/ssr/agent-network-dashboard_app_server-logs_page_tsx_0dg.l_8._.js.map +1 -1
  189. package/.next/server/chunks/ssr/agent-network-dashboard_app_tasks_page_tsx_0mwxy4z._.js +1 -1
  190. package/.next/server/chunks/ssr/agent-network-dashboard_app_tasks_page_tsx_0mwxy4z._.js.map +1 -1
  191. package/.next/server/middleware-build-manifest.js +3 -3
  192. package/.next/server/pages/404.html +3 -3
  193. package/.next/server/pages/500.html +1 -1
  194. package/.next/server/server-reference-manifest.js +1 -1
  195. package/.next/server/server-reference-manifest.json +1 -1
  196. package/.next/static/chunks/0.054rbp43q.y.js +1 -0
  197. package/.next/static/chunks/{181u38qblp8lz.js → 00b-ysl~m~dr~.js} +1 -1
  198. package/.next/static/chunks/{0jp~cs9-zkmqa.js → 00b4y77vxfabl.js} +1 -1
  199. package/.next/static/chunks/{15qxef.ilfysw.js → 03g.reu.n2vy-.js} +3 -3
  200. package/.next/static/chunks/0_8ca180mv271.css +1 -0
  201. package/.next/static/chunks/{0a.9~-nf0gpec.js → 0_eddxjio~tei.js} +1 -1
  202. package/.next/static/chunks/0_jpzi2lg4hja.js +1 -0
  203. package/.next/static/chunks/0bdp8t8hnj6tn.js +1 -0
  204. package/.next/static/chunks/0fkd-56.k2ts..js +1 -0
  205. package/.next/static/chunks/{0im751o4n61c7.js → 0hv6izw.g6cnm.js} +1 -1
  206. package/.next/static/chunks/{05uk96gc~9mni.js → 0ti3v67ixu43p.js} +1 -1
  207. package/.next/static/chunks/{0561vp5-q5.zp.js → 0ymogrg8t82.8.js} +1 -1
  208. package/.next/static/chunks/0z6y49-j~z6nf.js +7 -0
  209. package/.next/static/chunks/{0nqm.7w9_inwd.js → 0~eyvw9.ips4y.js} +2 -2
  210. package/.next/static/chunks/{0xqeurx5nvu76.js → 11noxrjsvu.~m.js} +1 -1
  211. package/.next/static/chunks/{0.66f3.rtcybb.js → 136r0ae9ihgvo.js} +1 -1
  212. package/.next/trace +2 -2
  213. package/.next/trace-build +1 -1
  214. package/.next/types/routes.d.ts +1 -2
  215. package/.next/types/validator.ts +0 -9
  216. package/app/admin/page.tsx +1 -1
  217. package/app/components/AgentCard.tsx +19 -9
  218. package/app/components/AppShell.tsx +7 -1
  219. package/app/components/ChatPopover.tsx +1 -1
  220. package/app/components/CommandCenter.tsx +12 -2
  221. package/app/components/CommandPalette.tsx +1 -1
  222. package/app/components/DispatchPanel.tsx +7 -4
  223. package/app/components/HealthBanner.tsx +10 -2
  224. package/app/components/HelpOverlay.tsx +0 -3
  225. package/app/components/MobileNav.tsx +26 -19
  226. package/app/components/Sidebar.tsx +12 -11
  227. package/app/components/TaskChatPanel.tsx +19 -5
  228. package/app/components/TaskDrawer.tsx +3 -1
  229. package/app/components/ThemeSwitcher.tsx +10 -79
  230. package/app/components/UserBar.tsx +3 -3
  231. package/app/globals.css +76 -707
  232. package/app/layout.tsx +27 -1
  233. package/app/lib/hooks.ts +0 -5
  234. package/app/login/page.tsx +3 -3
  235. package/app/logs/page.tsx +6 -2
  236. package/app/messages/page.tsx +19 -12
  237. package/app/node/page.tsx +2 -2
  238. package/app/nodes/page.tsx +12 -6
  239. package/app/page.tsx +0 -24
  240. package/app/server-logs/page.tsx +10 -3
  241. package/app/settings/networks/page.tsx +3 -3
  242. package/app/settings/page.tsx +31 -83
  243. package/app/settings/tokens/page.tsx +1 -1
  244. package/app/tasks/page.tsx +13 -9
  245. package/bin/start.js +0 -0
  246. package/package.json +1 -1
  247. package/public/manifest.webmanifest +24 -0
  248. package/public/robots.txt +7 -0
  249. package/.next/server/app/api/hub/license/route/app-paths-manifest.json +0 -3
  250. package/.next/server/app/api/hub/license/route/build-manifest.json +0 -9
  251. package/.next/server/app/api/hub/license/route/server-reference-manifest.json +0 -4
  252. package/.next/server/app/api/hub/license/route.js +0 -7
  253. package/.next/server/app/api/hub/license/route.js.map +0 -5
  254. package/.next/server/app/api/hub/license/route.js.nft.json +0 -1
  255. package/.next/server/app/api/hub/license/route_client-reference-manifest.js +0 -3
  256. package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_license_route_actions_0a4.fuh.js +0 -3
  257. package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_license_route_actions_0a4.fuh.js.map +0 -1
  258. package/.next/server/chunks/[root-of-the-server]__0rovr5-._.js +0 -3
  259. package/.next/server/chunks/[root-of-the-server]__0rovr5-._.js.map +0 -1
  260. package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0s5uqlp._.js +0 -9
  261. package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0s5uqlp._.js.map +0 -1
  262. package/.next/static/chunks/03~5pxwbxxw-b.js +0 -1
  263. package/.next/static/chunks/0eggl7f36vd8m.js +0 -1
  264. package/.next/static/chunks/0h_gdeiy~s92j.css +0 -1
  265. package/.next/static/chunks/0inql3s9ldyx5.js +0 -1
  266. package/.next/static/chunks/0xze0l75jjpwr.js +0 -1
  267. package/.next/static/chunks/15-ltfhot3b4n.js +0 -7
  268. package/app/api/hub/license/route.ts +0 -33
  269. package/app/components/BroadcastBar.tsx +0 -84
  270. package/app/components/InboxPanel.tsx +0 -36
  271. /package/.next/static/{cssa52keEzN4TEvVJY7V3 → 6N4r8gyt9Ff-j4i3EYFaz}/_buildManifest.js +0 -0
  272. /package/.next/static/{cssa52keEzN4TEvVJY7V3 → 6N4r8gyt9Ff-j4i3EYFaz}/_clientMiddlewareManifest.js +0 -0
  273. /package/.next/static/{cssa52keEzN4TEvVJY7V3 → 6N4r8gyt9Ff-j4i3EYFaz}/_ssgManifest.js +0 -0
package/app/globals.css CHANGED
@@ -4,13 +4,9 @@ html,
4
4
  body {
5
5
  max-width: 100%;
6
6
  overflow-x: hidden;
7
- }
8
-
9
- * {
7
+ }* {
10
8
  box-sizing: border-box;
11
- }
12
-
13
- /* ────────────────────────────────────────────────────
9
+ }/* ────────────────────────────────────────────────────
14
10
  Design tokens — switch via [data-theme="..."] on <html>
15
11
  See ThemeProvider for runtime selection.
16
12
  ──────────────────────────────────────────────────── */
@@ -35,504 +31,50 @@ body {
35
31
  --scrollbar-hover: #3a3a5a;
36
32
  --code-bg: #1a1a3a;
37
33
  color-scheme: dark;
38
- }
39
-
40
- [data-theme="light"] {
41
- --bg: #f6f7f9;
42
- --bg-secondary: #ffffff;
43
- --bg-elevated: #eef0f4;
44
- --fg: #0f1419;
45
- --fg-muted: #525a66;
46
- --fg-dim: #8a94a3;
47
- --border: #e3e6eb;
48
- --border-hover: #c8cdd6;
49
- --accent: #009e7e;
50
- --accent-fg: #ffffff;
51
- --success: #059669;
52
- --warning: #d97706;
53
- --danger: #dc2626;
54
- --info: #0284c7;
55
- --scrollbar: #d4d8df;
56
- --scrollbar-hover: #a1a8b5;
57
- --code-bg: #eef0f4;
58
- color-scheme: light;
59
- }
60
-
61
- [data-theme="mint"] {
62
- --bg: #f0fdf4;
63
- --bg-secondary: #ffffff;
64
- --bg-elevated: #dcfce7;
65
- --fg: #052e16;
66
- --fg-muted: #166534;
67
- --fg-dim: #4ade80;
68
- --border: #bbf7d0;
69
- --border-hover: #86efac;
70
- --accent: #16a34a;
71
- --accent-fg: #ffffff;
72
- --success: #16a34a;
73
- --warning: #ca8a04;
74
- --danger: #dc2626;
75
- --info: #0891b2;
76
- --scrollbar: #bbf7d0;
77
- --scrollbar-hover: #86efac;
78
- --code-bg: #dcfce7;
79
- color-scheme: light;
80
- }
81
-
82
- [data-theme="sunset"] {
83
- --bg: #1a0f1f;
84
- --bg-secondary: #2d1633;
85
- --bg-elevated: #3f1d47;
86
- --fg: #fde68a;
87
- --fg-muted: #fbbf24;
88
- --fg-dim: #b45309;
89
- --border: #581c87;
90
- --border-hover: #7e22ce;
91
- --accent: #f97316;
92
- --accent-fg: #ffffff;
93
- --success: #84cc16;
94
- --warning: #facc15;
95
- --danger: #f43f5e;
96
- --info: #ec4899;
97
- --scrollbar: #581c87;
98
- --scrollbar-hover: #7e22ce;
99
- --code-bg: #2d1633;
100
- color-scheme: dark;
101
- }
102
-
103
- @theme inline {
34
+ }@theme inline {
104
35
  --color-background: var(--bg);
105
36
  --color-foreground: var(--fg);
106
37
  --font-mono: var(--font-geist-mono);
107
- }
108
-
109
- html, body {
38
+ }html,
39
+ body {
110
40
  background: var(--bg);
111
41
  color: var(--fg);
112
- }
113
-
114
- body {
42
+ }body {
115
43
  font-family: var(--font-mono), ui-monospace, monospace;
116
44
  transition: background-color 0.2s ease, color 0.2s ease;
117
- }
118
-
119
- /* Smooth scrollbar — themed */
120
- .scrollbar-thin::-webkit-scrollbar { width: 4px; height: 4px; }
121
- .scrollbar-thin::-webkit-scrollbar-track { background: transparent; }
122
- .scrollbar-thin::-webkit-scrollbar-thumb {
45
+ }/* Smooth scrollbar — themed */
46
+ .scrollbar-thin::-webkit-scrollbar { width: 4px; height: 4px; }.scrollbar-thin::-webkit-scrollbar-track { background: transparent; }.scrollbar-thin::-webkit-scrollbar-thumb {
123
47
  background: var(--scrollbar);
124
48
  border-radius: 4px;
125
- }
126
- .scrollbar-thin::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-hover); }
127
-
128
- /* Fade in animation */
49
+ }.scrollbar-thin::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-hover); }/* Fade in animation */
129
50
  @keyframes fade-in {
130
51
  from { opacity: 0; transform: translateY(-4px); }
131
52
  to { opacity: 1; transform: translateY(0); }
132
- }
133
- .animate-fade-in {
53
+ }.animate-fade-in {
134
54
  animation: fade-in 0.3s ease-out;
135
- }
136
-
137
- /* Mobile touch targets */
55
+ }/* Mobile touch targets */
138
56
  @media (max-width: 640px) {
139
57
  select, input[type="text"], button {
140
58
  min-height: 44px;
141
59
  }
142
- }
143
-
144
- /* Safe area for notched devices */
60
+ }/* Safe area for notched devices */
145
61
  @supports (padding-bottom: env(safe-area-inset-bottom)) {
146
62
  body {
147
63
  padding-bottom: env(safe-area-inset-bottom);
148
64
  }
149
- }
150
-
151
- /* ────────────────────────────────────────────────────
152
- Compatibility shims — gradually replace hard-coded
153
- #0a0a1a / zinc-9xx / etc. in components with var()
154
- over time. These rules let the existing components
155
- pick up the active theme even before they are
156
- migrated.
157
- ──────────────────────────────────────────────────── */
158
-
159
- /* page-level dark backgrounds → use --bg */
160
- [data-theme="light"] .bg-\[\#050510\],
161
- [data-theme="light"] .bg-\[\#080814\],
162
- [data-theme="light"] .bg-\[\#0a0a14\],
163
- [data-theme="light"] .bg-\[\#0a0a15\],
164
- [data-theme="light"] .bg-\[\#0a0a1a\],
165
- [data-theme="light"] .bg-\[\#0d0d1a\],
166
- [data-theme="light"] .bg-\[\#11112a\],
167
- [data-theme="light"] .bg-\[\#11111c\],
168
- [data-theme="light"] .bg-\[\#161630\],
169
- [data-theme="light"] .bg-\[\#161640\],
170
- [data-theme="mint"] .bg-\[\#050510\],
171
- [data-theme="mint"] .bg-\[\#080814\],
172
- [data-theme="mint"] .bg-\[\#0a0a14\],
173
- [data-theme="mint"] .bg-\[\#0a0a15\],
174
- [data-theme="mint"] .bg-\[\#0a0a1a\],
175
- [data-theme="mint"] .bg-\[\#0d0d1a\],
176
- [data-theme="mint"] .bg-\[\#11112a\],
177
- [data-theme="mint"] .bg-\[\#11111c\],
178
- [data-theme="mint"] .bg-\[\#161630\],
179
- [data-theme="mint"] .bg-\[\#161640\] {
180
- background-color: var(--bg) !important;
181
- }
182
-
183
- /* card / elevated backgrounds (incl. opacity variants) */
184
- [data-theme="light"] .bg-\[\#111128\],
185
- [data-theme="light"] .bg-\[\#111128\]\/80,
186
- [data-theme="light"] .bg-\[\#1a1a2a\],
187
- [data-theme="light"] .bg-\[\#1a1a3a\],
188
- [data-theme="mint"] .bg-\[\#111128\],
189
- [data-theme="mint"] .bg-\[\#111128\]\/80,
190
- [data-theme="mint"] .bg-\[\#1a1a2a\],
191
- [data-theme="mint"] .bg-\[\#1a1a3a\] {
192
- background-color: var(--bg-secondary) !important;
193
- }
194
-
195
- /* hover / input field backgrounds */
196
- [data-theme="light"] .bg-\[\#2a2a4a\],
197
- [data-theme="mint"] .bg-\[\#2a2a4a\] {
198
- background-color: var(--bg-elevated) !important;
199
- }
200
-
201
- /* hardcoded borders */
202
- [data-theme="light"] .border-\[\#111128\],
203
- [data-theme="light"] .border-\[\#1a1a2a\],
204
- [data-theme="light"] .border-\[\#2a2a4a\],
205
- [data-theme="light"] .border-\[\#3a3a5a\],
206
- [data-theme="mint"] .border-\[\#111128\],
207
- [data-theme="mint"] .border-\[\#1a1a2a\],
208
- [data-theme="mint"] .border-\[\#2a2a4a\],
209
- [data-theme="mint"] .border-\[\#3a3a5a\] {
210
- border-color: var(--border) !important;
211
- }
212
-
213
- /* dark-tuned gradient buttons → flat brand color in light themes */
214
- [data-theme="light"] [class*="from-cyan-"][class*="to-blue-"],
215
- [data-theme="light"] [class*="from-cyan-"][class*="to-emerald-"],
216
- [data-theme="light"] [class*="from-emerald-"][class*="to-cyan-"],
217
- [data-theme="light"] [class*="from-blue-"][class*="to-cyan-"] {
218
- background: var(--accent) !important;
219
- color: var(--accent-fg) !important;
220
- }
221
- [data-theme="light"] [class*="from-cyan-"][class*="to-blue-"]:hover,
222
- [data-theme="light"] [class*="from-cyan-"][class*="to-emerald-"]:hover,
223
- [data-theme="light"] [class*="from-emerald-"][class*="to-cyan-"]:hover,
224
- [data-theme="light"] [class*="from-blue-"][class*="to-cyan-"]:hover {
225
- background: #00b894 !important;
226
- filter: brightness(1.05);
227
- }
228
- [data-theme="light"] .text-gray-100,
229
- [data-theme="light"] .text-gray-200,
230
- [data-theme="light"] .text-gray-300,
231
- [data-theme="light"] .text-gray-100\/90,
232
- [data-theme="mint"] .text-gray-100,
233
- [data-theme="mint"] .text-gray-200,
234
- [data-theme="mint"] .text-gray-300,
235
- [data-theme="mint"] .text-gray-100\/90 {
236
- color: var(--fg) !important;
237
- }
238
- [data-theme="light"] .text-gray-400,
239
- [data-theme="light"] .text-gray-500,
240
- [data-theme="light"] .text-gray-600,
241
- [data-theme="light"] .placeholder-gray-600::placeholder,
242
- [data-theme="mint"] .text-gray-400,
243
- [data-theme="mint"] .text-gray-500,
244
- [data-theme="mint"] .text-gray-600,
245
- [data-theme="mint"] .placeholder-gray-600::placeholder {
246
- color: var(--fg-muted) !important;
247
- }
248
- [data-theme="light"] .text-white,
249
- [data-theme="mint"] .text-white {
250
- color: var(--fg) !important;
251
- }
252
-
253
- [data-theme="light"] .text-zinc-100,
254
- [data-theme="light"] .text-zinc-200,
255
- [data-theme="light"] .text-white,
256
- [data-theme="mint"] .text-zinc-100,
257
- [data-theme="mint"] .text-zinc-200,
258
- [data-theme="mint"] .text-white {
259
- color: var(--fg) !important;
260
- }
261
-
262
- [data-theme="light"] .text-zinc-400,
263
- [data-theme="light"] .text-zinc-500,
264
- [data-theme="mint"] .text-zinc-400,
265
- [data-theme="mint"] .text-zinc-500 {
266
- color: var(--fg-muted) !important;
267
- }
268
-
269
- [data-theme="light"] .bg-zinc-900,
270
- [data-theme="light"] .bg-zinc-950,
271
- [data-theme="light"] .bg-black,
272
- [data-theme="mint"] .bg-zinc-900,
273
- [data-theme="mint"] .bg-zinc-950,
274
- [data-theme="mint"] .bg-black {
275
- background-color: var(--bg-secondary) !important;
276
- }
277
-
278
- [data-theme="light"] .bg-zinc-800,
279
- [data-theme="mint"] .bg-zinc-800 {
280
- background-color: var(--bg-elevated) !important;
281
- }
282
-
283
- [data-theme="light"] .border-zinc-700,
284
- [data-theme="light"] .border-zinc-800,
285
- [data-theme="light"] .border-white\/10,
286
- [data-theme="light"] .border-white\/5,
287
- [data-theme="mint"] .border-zinc-700,
288
- [data-theme="mint"] .border-zinc-800,
289
- [data-theme="mint"] .border-white\/10,
290
- [data-theme="mint"] .border-white\/5 {
291
- border-color: var(--border) !important;
292
- }
293
-
294
- /* Light theme: additional zinc shades + accent colors override */
295
- [data-theme="light"] .bg-zinc-700,
296
- [data-theme="light"] .bg-zinc-600,
297
- [data-theme="mint"] .bg-zinc-700,
298
- [data-theme="mint"] .bg-zinc-600 {
299
- background-color: var(--bg-elevated) !important;
300
- }
301
- [data-theme="light"] .text-zinc-300,
302
- [data-theme="light"] .text-zinc-600,
303
- [data-theme="mint"] .text-zinc-300,
304
- [data-theme="mint"] .text-zinc-600 {
305
- color: var(--fg-muted) !important;
306
- }
307
- [data-theme="light"] .text-zinc-700,
308
- [data-theme="light"] .text-zinc-800,
309
- [data-theme="mint"] .text-zinc-700,
310
- [data-theme="mint"] .text-zinc-800 {
311
- color: var(--fg) !important;
312
- }
313
-
314
- /* Light theme: emerald / cyan / indigo accents → unified brand emerald */
315
- [data-theme="light"] .text-emerald-400,
316
- [data-theme="light"] .text-emerald-300,
317
- [data-theme="light"] .text-cyan-400,
318
- [data-theme="light"] .text-cyan-300,
319
- [data-theme="light"] .text-indigo-400 {
320
- color: var(--accent) !important;
321
- }
322
-
323
- /* Light theme: every "-300/400" accent text color needs a darker mid-tone
324
- variant. The default Tailwind `-300/-400` shades are designed for dark
325
- backgrounds — putting them on white gives "barely visible" text (the
326
- problem Vincent flagged: "浅色下很多字体看不见"). Map each family to its
327
- `-700` equivalent so contrast against white card is ≥ AA. */
328
- [data-theme="light"] .text-green-400,
329
- [data-theme="light"] .text-green-300,
330
- [data-theme="mint"] .text-green-400,
331
- [data-theme="mint"] .text-green-300 { color: #047857 !important; }
332
-
333
- [data-theme="light"] .text-yellow-400,
334
- [data-theme="light"] .text-yellow-300,
335
- [data-theme="mint"] .text-yellow-400,
336
- [data-theme="mint"] .text-yellow-300 { color: #92400e !important; }
337
-
338
- [data-theme="light"] .text-amber-400,
339
- [data-theme="light"] .text-amber-300,
340
- [data-theme="mint"] .text-amber-400,
341
- [data-theme="mint"] .text-amber-300 { color: #92400e !important; }
342
-
343
- [data-theme="light"] .text-red-400,
344
- [data-theme="light"] .text-red-300,
345
- [data-theme="mint"] .text-red-400,
346
- [data-theme="mint"] .text-red-300 { color: #b91c1c !important; }
347
-
348
- [data-theme="light"] .text-purple-400,
349
- [data-theme="light"] .text-purple-300,
350
- [data-theme="mint"] .text-purple-400,
351
- [data-theme="mint"] .text-purple-300 { color: #6d28d9 !important; }
352
-
353
- [data-theme="light"] .text-orange-400,
354
- [data-theme="light"] .text-orange-300,
355
- [data-theme="mint"] .text-orange-400,
356
- [data-theme="mint"] .text-orange-300 { color: #c2410c !important; }
357
-
358
- [data-theme="light"] .text-blue-400,
359
- [data-theme="light"] .text-blue-300,
360
- [data-theme="mint"] .text-blue-400,
361
- [data-theme="mint"] .text-blue-300 { color: #1d4ed8 !important; }
362
-
363
- [data-theme="light"] .text-pink-400,
364
- [data-theme="light"] .text-pink-300,
365
- [data-theme="mint"] .text-pink-400,
366
- [data-theme="mint"] .text-pink-300 { color: #be185d !important; }
367
-
368
- [data-theme="light"] .text-violet-400,
369
- [data-theme="light"] .text-violet-300,
370
- [data-theme="mint"] .text-violet-400,
371
- [data-theme="mint"] .text-violet-300 { color: #6d28d9 !important; }
372
-
373
- [data-theme="light"] .text-teal-400,
374
- [data-theme="light"] .text-teal-300,
375
- [data-theme="mint"] .text-teal-400,
376
- [data-theme="mint"] .text-teal-300 { color: #0f766e !important; }
377
-
378
- /* Light theme: text-gray-700 (used in footers / muted body) is too pale
379
- when sitting on slightly-grey page bg. Bump to fg-muted. */
380
- [data-theme="light"] .text-gray-700,
381
- [data-theme="mint"] .text-gray-700 { color: var(--fg-muted) !important; }
382
- [data-theme="light"] .bg-emerald-500\/10,
383
- [data-theme="light"] .bg-emerald-500\/20,
384
- [data-theme="light"] .bg-cyan-500\/10,
385
- [data-theme="light"] .bg-cyan-500\/20 {
386
- background-color: rgba(0, 158, 126, 0.08) !important;
387
- }
388
- [data-theme="light"] .border-emerald-500\/30,
389
- [data-theme="light"] .border-emerald-500\/40,
390
- [data-theme="light"] .border-cyan-500\/30 {
391
- border-color: rgba(0, 158, 126, 0.32) !important;
392
- }
393
-
394
- /* Light theme: card-like containers get a subtle elevation shadow
395
- (cards in dark mode lean on glow; in light mode they need a real shadow
396
- to read as a layer rather than blending into the page background) */
397
- [data-theme="light"] .bg-zinc-900,
398
- [data-theme="light"] .bg-zinc-950,
399
- [data-theme="light"] .bg-\[\#0a0a1a\],
400
- [data-theme="light"] .bg-\[\#11112a\],
401
- [data-theme="light"] .bg-\[\#161640\] {
402
- box-shadow: 0 1px 0 rgba(15, 23, 42, 0.04), 0 6px 18px -8px rgba(15, 23, 42, 0.08);
403
- }
404
- [data-theme="light"] .bg-zinc-800 {
405
- box-shadow: inset 0 0 0 1px var(--border);
406
- }
407
-
408
- /* Light theme: kill any leftover ring / shadow-glow that was tuned for dark bg */
409
- [data-theme="light"] [class*="shadow-emerald"],
410
- [data-theme="light"] [class*="shadow-cyan"],
411
- [data-theme="light"] [class*="shadow-indigo"] {
412
- --tw-shadow-color: rgba(0, 158, 126, 0.18);
413
- }
414
-
415
- /* Solid-color action buttons (bg-blue-600 / bg-cyan-600 / bg-green-600 / …)
416
- stay dark navy in light themes because the gradient-button shim above only
417
- matches `from-…-to-…` gradient buttons. Map every primary solid background
418
- to the active accent so Broadcast / Send Task / Register / Change Password
419
- etc. read as the brand color instead of black-on-white. */
420
- [data-theme="light"] .bg-blue-600,
421
- [data-theme="light"] .bg-blue-500,
422
- [data-theme="light"] .bg-cyan-600,
423
- [data-theme="light"] .bg-cyan-500,
424
- [data-theme="light"] .bg-emerald-600,
425
- [data-theme="light"] .bg-emerald-500,
426
- [data-theme="light"] .bg-green-600,
427
- [data-theme="light"] .bg-green-500,
428
- [data-theme="light"] .bg-indigo-600,
429
- [data-theme="light"] .bg-indigo-500,
430
- [data-theme="light"] .bg-purple-600,
431
- [data-theme="light"] .bg-purple-500,
432
- [data-theme="mint"] .bg-blue-600,
433
- [data-theme="mint"] .bg-blue-500,
434
- [data-theme="mint"] .bg-cyan-600,
435
- [data-theme="mint"] .bg-cyan-500,
436
- [data-theme="mint"] .bg-emerald-600,
437
- [data-theme="mint"] .bg-emerald-500,
438
- [data-theme="mint"] .bg-green-600,
439
- [data-theme="mint"] .bg-green-500,
440
- [data-theme="mint"] .bg-indigo-600,
441
- [data-theme="mint"] .bg-indigo-500,
442
- [data-theme="mint"] .bg-purple-600,
443
- [data-theme="mint"] .bg-purple-500 {
444
- background-color: var(--accent) !important;
445
- color: var(--accent-fg) !important;
446
- }
447
- [data-theme="light"] .hover\:bg-blue-500:hover,
448
- [data-theme="light"] .hover\:bg-cyan-500:hover,
449
- [data-theme="light"] .hover\:bg-emerald-500:hover,
450
- [data-theme="light"] .hover\:bg-green-500:hover,
451
- [data-theme="light"] .hover\:bg-indigo-500:hover,
452
- [data-theme="light"] .hover\:bg-purple-500:hover,
453
- [data-theme="mint"] .hover\:bg-blue-500:hover,
454
- [data-theme="mint"] .hover\:bg-cyan-500:hover,
455
- [data-theme="mint"] .hover\:bg-emerald-500:hover,
456
- [data-theme="mint"] .hover\:bg-green-500:hover,
457
- [data-theme="mint"] .hover\:bg-indigo-500:hover,
458
- [data-theme="mint"] .hover\:bg-purple-500:hover {
459
- background-color: #00b894 !important;
460
- filter: brightness(1.05);
461
- }
462
-
463
- /* Disabled state for the same family — keep contrast against the page bg
464
- so disabled buttons don't read as "dark and active" in light mode */
465
- [data-theme="light"] .disabled\:bg-gray-800:disabled,
466
- [data-theme="light"] .disabled\:bg-zinc-800:disabled,
467
- [data-theme="mint"] .disabled\:bg-gray-800:disabled,
468
- [data-theme="mint"] .disabled\:bg-zinc-800:disabled {
469
- background-color: var(--bg-elevated) !important;
470
- color: var(--fg-muted) !important;
471
- }
472
-
473
- /* ─────────────────────────────────────────────────────────────────────
474
- v0.4.3 light-theme polish — Phase 3 P0 fixes
475
- ─────────────────────────────────────────────────────────────────── */
476
-
477
- /* P0-1: Sidebar gets its own surface in light themes (not page-colored).
478
- In Cyber (dark) the sidebar already feels separate via depth; in
479
- light/mint the page bg == sidebar bg so only the right border separates
480
- them. Switch sidebar to bg-secondary (white) + a hairline shadow. */
481
- [data-theme="light"] aside[data-anet-sidebar="true"],
482
- [data-theme="mint"] aside[data-anet-sidebar="true"] {
483
- background-color: var(--bg-secondary) !important;
484
- /* Right edge: solid hairline border + a soft 16px halo so the sidebar
485
- reads as a card hovering over the page, not "part of the page". */
486
- box-shadow:
487
- 1px 0 0 var(--border),
488
- 8px 0 20px -10px rgba(15, 23, 42, 0.10),
489
- 0 0 0 1px rgba(15, 23, 42, 0.02);
490
- border-right-color: transparent !important;
491
- }
492
- /* Also tint page bg slightly cooler so the white sidebar pops more */
493
- [data-theme="light"] {
494
- --bg: #f3f5f8; /* was #f6f7f9 — bumped 3pt cooler for sidebar contrast */
495
- }
496
-
497
- /* P0-2: Active nav — collapse the 4-emerald stack (bg + border + text + ring)
498
- to a single accent cue: 3px left bar + medium-weight text. Dark themes
499
- keep the existing tinted-pill look. */
500
- [data-theme="light"] .anet-nav-active,
501
- [data-theme="mint"] .anet-nav-active {
502
- /* 通信龙 final spec (Q1 + 3-piece lockdown): active nav = ONE cue.
503
- 4px left bar emerald, text in --fg (NOT emerald), NO bg tint.
504
- Reads as a calm "current page" indicator without competing emerald
505
- surfaces. (Earlier 0.4.3 had 3px + faint tint + emerald text.) */
506
- background-color: transparent !important;
507
- border-color: transparent !important;
508
- border-left: 4px solid var(--accent) !important;
509
- border-radius: 0 8px 8px 0 !important;
510
- padding-left: calc(0.75rem - 4px) !important;
511
- color: var(--fg) !important;
512
- font-weight: 600;
513
- }
514
- [data-theme="light"] .anet-nav-active:hover,
515
- [data-theme="mint"] .anet-nav-active:hover {
516
- background-color: var(--bg-elevated) !important;
517
- }
518
- /* When sidebar is collapsed (w-16, justify-center) the left bar would look
519
- weird against a centered icon — switch to a left-bg accent instead. */
520
- [data-theme="light"] aside.w-16 .anet-nav-active,
521
- [data-theme="mint"] aside.w-16 .anet-nav-active {
65
+ }/* When sidebar is collapsed (w-16 {
522
66
  border-radius: 8px !important;
523
67
  padding-left: 0 !important;
524
68
  border-left: 0 !important;
525
69
  background-color: var(--bg-elevated) !important;
526
70
  color: var(--accent) !important;
527
- }
528
-
529
- /* Q6: native <select> theming for light/mint.
530
- Without this, dropdowns on Nodes / Messages / Logs / Settings render with
531
- the OS default chrome (heavy chevron, off-spec font weight, no border
532
- radius). We strip the native chrome with appearance-none, then paint our
533
- own chevron via a background-image SVG. ~10 LOC. */
534
- [data-theme="light"] select,
535
- [data-theme="mint"] select {
71
+ }/* Q6: native <select> theming for light/mint.
72
+ Without this,
73
+ dropdowns on Nodes / Messages / Logs / Settings render with
74
+ the OS default chrome (heavy chevron,
75
+ off-spec font weight,
76
+ no border
77
+ radius). We strip the native chrome with appearance-none {
536
78
  -webkit-appearance: none !important;
537
79
  -moz-appearance: none !important;
538
80
  appearance: none !important;
@@ -543,159 +85,58 @@ body {
543
85
  padding-right: 2rem !important;
544
86
  background-color: var(--bg-secondary) !important;
545
87
  border-radius: 8px;
546
- }
547
- [data-theme="light"] select:focus,
548
- [data-theme="mint"] select:focus {
549
- outline: 2px solid rgba(0, 158, 126, 0.2);
550
- outline-offset: -1px;
551
- border-color: var(--accent) !important;
552
- }
553
- /* Mint reuses the same chevron — color picker would need its own gray, but
88
+ }/* Mint reuses the same chevron — color picker would need its own gray,
89
+ but
554
90
  accent is similar enough that the default chevron color reads OK. */
555
91
 
556
92
  /* KPI stat cards in light mode: kill the gradient wash (which reads as
557
- pale-mud on white), replace with a 2px top accent strip per color
558
- family + real elevation shadow. Dark themes keep the gradient. */
559
- [data-theme="light"] .anet-stat-card,
560
- [data-theme="mint"] .anet-stat-card {
93
+ pale-mud on white) {
561
94
  border-top-width: 2px;
562
95
  box-shadow: 0 1px 0 rgba(15, 23, 42, 0.04), 0 4px 12px -8px rgba(15, 23, 42, 0.08);
563
- }
564
- [data-theme="light"] .anet-stat-card:hover,
565
- [data-theme="mint"] .anet-stat-card:hover {
566
- box-shadow: 0 1px 0 rgba(15, 23, 42, 0.06), 0 12px 24px -12px rgba(15, 23, 42, 0.16);
567
- }
568
- /* Top-strip colors per stat family */
569
- [data-theme="light"] .anet-stat-card[data-anet-stat-card="green"] { border-top-color: #10b981; }
570
- [data-theme="light"] .anet-stat-card[data-anet-stat-card="cyan"] { border-top-color: var(--accent); }
571
- [data-theme="light"] .anet-stat-card[data-anet-stat-card="gray"] { border-top-color: #94a3b8; }
572
- [data-theme="light"] .anet-stat-card[data-anet-stat-card="white"] { border-top-color: #3b82f6; }
573
- [data-theme="mint"] .anet-stat-card[data-anet-stat-card="green"] { border-top-color: #16a34a; }
574
- [data-theme="mint"] .anet-stat-card[data-anet-stat-card="cyan"] { border-top-color: var(--accent); }
575
- [data-theme="mint"] .anet-stat-card[data-anet-stat-card="gray"] { border-top-color: #4ade80; }
576
- [data-theme="mint"] .anet-stat-card[data-anet-stat-card="white"] { border-top-color: #0891b2; }
577
- /* Drop the gradient wash in light themes — looks like dust on white. */
578
- [data-theme="light"] .anet-stat-card > .pointer-events-none,
579
- [data-theme="mint"] .anet-stat-card > .pointer-events-none {
580
- display: none;
581
- }
582
-
583
- /* Generic card hover elevation — every white card on light bg gets a
584
- subtle lift on hover so clickability is obvious. */
585
- [data-theme="light"] .bg-\[\#111128\]:hover,
586
- [data-theme="mint"] .bg-\[\#111128\]:hover {
587
- box-shadow: 0 6px 18px -10px rgba(15, 23, 42, 0.12);
588
- }
589
-
590
- /* Task row hover bg (round 19) — dark hex would land on a white card and
591
- look like a stripe. Re-map to a faint accent tint per theme. */
592
- [data-theme="light"] .anet-task-row:hover {
593
- background-color: #f5f7fb !important;
594
- }
595
- [data-theme="mint"] .anet-task-row:hover {
596
- background-color: #ecf6f1 !important;
597
- }
598
- [data-theme="sunset"] .anet-task-row:hover {
599
- background-color: #fff4ec !important;
600
- }
601
- /* Open state — slightly stronger fill so users can see "this one is the
602
- open row" while scrolling. */
603
- [data-theme="light"] .anet-task-row[aria-expanded="true"] {
604
- background-color: #fafbfd !important;
605
- box-shadow: 0 4px 14px -10px rgba(15, 23, 42, 0.14) !important;
606
- }
607
- [data-theme="mint"] .anet-task-row[aria-expanded="true"] {
608
- background-color: #f3faf6 !important;
609
- }
610
- [data-theme="sunset"] .anet-task-row[aria-expanded="true"] {
611
- background-color: #fff8f1 !important;
612
- }
613
-
614
- /* ─────────────────────────────────────────────────────────────────────
96
+ }/* ─────────────────────────────────────────────────────────────────────
615
97
  Login surface (round 1 polish)
616
- Restrained, minimal — first impression for new Agent Network users.
98
+ Restrained,
99
+ minimal — first impression for new Agent Network users.
617
100
  ─────────────────────────────────────────────────────────────────── */
618
101
  .anet-login-bg {
619
102
  background:
620
103
  radial-gradient(circle at 50% 30%, rgba(34, 211, 238, 0.05), transparent 55%),
621
104
  radial-gradient(circle at 33% 75%, rgba(59, 130, 246, 0.045), transparent 55%);
622
- }
623
- [data-theme="light"] .anet-login-bg,
624
- [data-theme="mint"] .anet-login-bg {
625
- background-image:
626
- radial-gradient(circle at 50% 35%, rgba(0, 158, 126, 0.06), transparent 60%),
627
- radial-gradient(circle, rgba(15, 23, 42, 0.05) 1px, transparent 1px);
628
- background-size: 100% 100%, 24px 24px;
629
- }
630
- [data-theme="light"] .anet-login-mark,
631
- [data-theme="mint"] .anet-login-mark {
632
- background: var(--bg-secondary) !important;
633
- box-shadow: 0 1px 2px rgba(15, 23, 42, 0.06), 0 0 0 1px var(--border);
634
- }
635
-
636
- /* Health banner — sticky thin strip above content, with theme-aware
637
- green/amber/red tints. Dark themes use the lower-opacity bg+border
638
- that come from the component classes directly. Light/mint need
639
- slightly more saturation so the tint reads on a white surface. */
640
- [data-theme="light"] .anet-health-banner.bg-emerald-500\/6,
641
- [data-theme="mint"] .anet-health-banner.bg-emerald-500\/6 {
105
+ }/* Health banner — sticky thin strip above content {
642
106
  background-color: rgba(16, 185, 129, 0.08) !important;
643
107
  color: #047857 !important;
644
108
  border-color: rgba(16, 185, 129, 0.25) !important;
645
- }
646
- [data-theme="light"] .anet-health-banner.bg-amber-500\/8,
647
- [data-theme="mint"] .anet-health-banner.bg-amber-500\/8 {
648
- background-color: rgba(245, 158, 11, 0.12) !important;
649
- color: #92400e !important;
650
- border-color: rgba(245, 158, 11, 0.30) !important;
651
- }
652
- [data-theme="light"] .anet-health-banner.bg-red-500\/8,
653
- [data-theme="mint"] .anet-health-banner.bg-red-500\/8 {
654
- background-color: rgba(220, 38, 38, 0.10) !important;
655
- color: #b91c1c !important;
656
- border-color: rgba(220, 38, 38, 0.30) !important;
657
- }
658
-
659
- /* Sidebar brand "online" pulse — slow, restrained, NO glow.
660
- 1.6s opacity drift between 1.0 and 0.5; nothing scales, nothing blurs. */
109
+ }/* Sidebar brand "online" pulse — slow,
110
+ restrained,
111
+ NO glow.
112
+ 1.6s opacity drift between 1.0 and 0.5; nothing scales,
113
+ nothing blurs. */
661
114
  @keyframes anet-brand-pulse-kf {
662
115
  0%, 100% { opacity: 1; }
663
116
  50% { opacity: 0.4; }
664
- }
665
- .anet-brand-pulse {
117
+ }.anet-brand-pulse {
666
118
  animation: anet-brand-pulse-kf 1.6s ease-in-out infinite;
667
119
  }
668
120
  @media (prefers-reduced-motion: reduce) {
669
121
  .anet-brand-pulse { animation: none; }
670
- }
671
-
672
- /* Skeleton pulse — same 1.6s rhythm as the brand pulse but applied to a
122
+ }/* Skeleton pulse — same 1.6s rhythm as the brand pulse but applied to a
673
123
  container so all bars inside breathe together. Drifts between full
674
124
  token value and 60% so light themes show a calm grey-to-bg-elevated
675
125
  fade and dark themes show a calm navy-to-elevated fade. */
676
126
  @keyframes anet-skeleton-kf {
677
127
  0%, 100% { opacity: 1; }
678
128
  50% { opacity: 0.55; }
679
- }
680
- .anet-skeleton-pulse {
129
+ }.anet-skeleton-pulse {
681
130
  animation: anet-skeleton-kf 1.6s ease-in-out infinite;
682
131
  }
683
132
  @media (prefers-reduced-motion: reduce) {
684
133
  .anet-skeleton-pulse { animation: none; }
685
- }
686
-
687
- /* Skeleton bar fill — different per theme so it's visible against the
134
+ }/* Skeleton bar fill — different per theme so it's visible against the
688
135
  card bg without being loud. Dark: lighter navy block on dark card.
689
136
  Light: mid-grey on white card (not too light or it disappears). */
690
137
  .anet-skeleton-bar {
691
138
  background-color: #1a1a2a;
692
- }
693
- [data-theme="light"] .anet-skeleton-bar,
694
- [data-theme="mint"] .anet-skeleton-bar {
695
- background-color: #d4d8df;
696
- }
697
-
698
- /* Command palette modal surface — bumped depth so it sits clearly above
139
+ }/* Command palette modal surface — bumped depth so it sits clearly above
699
140
  the page content in both themes. Light/mint: white shell with a real
700
141
  shadow (not the dark navy that the CSS shim would normally translate
701
142
  `bg-[#0d0d1a]` into). */
@@ -706,22 +147,11 @@ body {
706
147
  border: 1px solid currentColor;
707
148
  border-radius: 3px;
708
149
  opacity: 0.6;
709
- }
710
- [data-theme="light"] .anet-cmdk > div:not([aria-hidden]),
711
- [data-theme="mint"] .anet-cmdk > div:not([aria-hidden]) {
712
- background-color: var(--bg-secondary) !important;
713
- box-shadow: 0 10px 30px -8px rgba(15, 23, 42, 0.18),
714
- 0 2px 6px -2px rgba(15, 23, 42, 0.10);
715
- }
716
- [data-theme="light"] .anet-cmdk-row.bg-cyan-500\/10,
717
- [data-theme="mint"] .anet-cmdk-row.bg-cyan-500\/10 {
718
- background-color: rgba(0, 158, 126, 0.08) !important;
719
- }
720
-
721
- /* Round 20 — matched-char highlight inside cmdk titles/hints. Inherits
150
+ }/* Round 20 — matched-char highlight inside cmdk titles/hints. Inherits
722
151
  line color (`color`) instead of forcing one — keeps text readable on
723
152
  both inactive (gray) and active (cyan-300) rows. <mark> default is a
724
- garish yellow block, which we override. */
153
+ garish yellow block,
154
+ which we override. */
725
155
  .anet-cmdk-mark {
726
156
  background: transparent;
727
157
  color: inherit;
@@ -733,46 +163,23 @@ body {
733
163
  text-decoration-thickness: 1px;
734
164
  text-underline-offset: 2px;
735
165
  text-decoration-skip-ink: none;
736
- }
737
- /* Cyber: accent the matched glyph color so it pops on the dark bg. */
166
+ }/* Cyber: accent the matched glyph color so it pops on the dark bg. */
738
167
  [data-theme="cyber"] .anet-cmdk-mark,
739
168
  :root:not([data-theme]) .anet-cmdk-mark {
740
169
  color: #22d3ee;
741
- }
742
- /* Light/mint: use the brand teal undertone matches the active row. */
743
- [data-theme="light"] .anet-cmdk-mark,
744
- [data-theme="mint"] .anet-cmdk-mark {
745
- color: #0d9488;
746
- }
747
- [data-theme="sunset"] .anet-cmdk-mark {
748
- color: #ea580c;
749
- }
750
- /* On the active (cyan-tinted) row, the title is already cyan-300 — use
751
- white-with-underline so the highlight reads as emphasis, not redundancy. */
170
+ }/* On the active (cyan-tinted) row,
171
+ the title is already cyan-300use
172
+ white-with-underline so the highlight reads as emphasis,
173
+ not redundancy. */
752
174
  .anet-cmdk-row.bg-cyan-500\/10 .anet-cmdk-mark {
753
175
  color: #f0fdff;
754
- }
755
- [data-theme="light"] .anet-cmdk-row.bg-cyan-500\/10 .anet-cmdk-mark,
756
- [data-theme="mint"] .anet-cmdk-row.bg-cyan-500\/10 .anet-cmdk-mark {
757
- color: #064e3b;
758
- }
759
-
760
- /* Help overlay — same white-card-with-shadow treatment as cmdk on light */
761
- [data-theme="light"] .anet-help > div:not([aria-hidden]),
762
- [data-theme="mint"] .anet-help > div:not([aria-hidden]) {
763
- background-color: var(--bg-secondary) !important;
764
- box-shadow: 0 10px 30px -8px rgba(15, 23, 42, 0.18),
765
- 0 2px 6px -2px rgba(15, 23, 42, 0.10);
766
- }
767
-
768
- /* Tasks tab strip horizontal scroll fade — gradient overlays at left/right
176
+ }/* Tasks tab strip horizontal scroll fade — gradient overlays at left/right
769
177
  edges hint that there's more content when the row overflows. Only
770
178
  applied on <sm (where the strip actually scrolls). The wrapper is
771
179
  `position: relative` and the fades are absolute siblings. */
772
180
  .anet-tabstrip-wrap {
773
181
  position: relative;
774
- }
775
- .anet-tabstrip-wrap::before,
182
+ }.anet-tabstrip-wrap::before,
776
183
  .anet-tabstrip-wrap::after {
777
184
  content: '';
778
185
  position: absolute;
@@ -781,13 +188,11 @@ body {
781
188
  width: 20px;
782
189
  pointer-events: none;
783
190
  z-index: 1;
784
- }
785
- .anet-tabstrip-wrap::before {
191
+ }.anet-tabstrip-wrap::before {
786
192
  left: 0;
787
193
  background: linear-gradient(to right, #111128, transparent);
788
194
  border-radius: 8px 0 0 8px;
789
- }
790
- .anet-tabstrip-wrap::after {
195
+ }.anet-tabstrip-wrap::after {
791
196
  right: 0;
792
197
  background: linear-gradient(to left, #111128, transparent);
793
198
  border-radius: 0 8px 8px 0;
@@ -796,68 +201,40 @@ body {
796
201
  /* sm: stops scrolling, hide the fades */
797
202
  .anet-tabstrip-wrap::before,
798
203
  .anet-tabstrip-wrap::after { display: none; }
799
- }
800
- [data-theme="light"] .anet-tabstrip-wrap::before,
801
- [data-theme="mint"] .anet-tabstrip-wrap::before {
802
- background: linear-gradient(to right, var(--bg-secondary), transparent);
803
- }
804
- [data-theme="light"] .anet-tabstrip-wrap::after,
805
- [data-theme="mint"] .anet-tabstrip-wrap::after {
806
- background: linear-gradient(to left, var(--bg-secondary), transparent);
807
- }
808
-
809
- /* P0-3 baseline: error / warning chip colors for light themes.
810
- The component-level copy (replacing raw JSON with human text) is fixed
811
- in the Logs / Server-Logs page components separately. */
812
- [data-theme="light"] .anet-error-chip,
813
- [data-theme="mint"] .anet-error-chip {
814
- background-color: rgba(220, 38, 38, 0.06) !important;
815
- color: #b91c1c !important;
816
- border-color: rgba(220, 38, 38, 0.25) !important;
817
- }
818
- [data-theme="light"] .anet-warn-chip,
819
- [data-theme="mint"] .anet-warn-chip {
820
- background-color: rgba(217, 119, 6, 0.08) !important;
821
- color: #92400e !important;
822
- border-color: rgba(217, 119, 6, 0.28) !important;
823
- }
824
-
825
- /* Round 30 — global drawer entrance keyframes so TaskDrawer, TaskChatPanel,
826
- and any future right-side panel share one source. Previously the
204
+ }/* Round 30 — global drawer entrance keyframes so TaskDrawer,
205
+ TaskChatPanel,
206
+ and any future right-side panel share one source. Previously the
827
207
  keyframe lived inside TaskChatPanel's <style jsx global>; if that
828
- component never mounted, the keyframe was missing for TaskDrawer. */
208
+ component never mounted,
209
+ the keyframe was missing for TaskDrawer. */
829
210
  @keyframes anet-slide-in {
830
211
  from { transform: translateX(100%); }
831
212
  to { transform: translateX(0); }
832
- }
833
- .animate-slide-in { animation: anet-slide-in 0.2s ease-out; }
213
+ }.animate-slide-in { animation: anet-slide-in 0.2s ease-out; }
834
214
 
835
215
  @keyframes anet-fade-in {
836
216
  from { opacity: 0; }
837
217
  to { opacity: 1; }
838
- }
839
- .anet-fade-in { animation: anet-fade-in 0.15s ease-out; }
840
-
841
- /* Round 184 — chrome reset button click-spin. The reset button's
842
- onClick triggers R168 smoothView crossfade on the canvas, but the
218
+ }.anet-fade-in { animation: anet-fade-in 0.15s ease-out; }/* Round 184 — chrome reset button click-spin. The reset button's
219
+ onClick triggers R168 smoothView crossfade on the canvas,
220
+ but the
843
221
  BUTTON itself had no visual feedback that the click registered. A
844
222
  single 360° rotation on the refresh-arrow icon (450ms ease-out) is
845
- a quick "yes, I heard you" confirmation. Counter-clockwise (-360°)
223
+ a quick "yes,
224
+ I heard you" confirmation. Counter-clockwise (-360°)
846
225
  reads as "rewind" / "undo" — natural for a reset gesture. Mirror
847
226
  to R52's hub click ripple at the chrome scope. */
848
227
  @keyframes anet-reset-spin {
849
228
  from { transform: rotate(0deg); }
850
229
  to { transform: rotate(-360deg); }
851
- }
852
- .anet-reset-spin {
230
+ }.anet-reset-spin {
853
231
  animation: anet-reset-spin 0.45s cubic-bezier(0.4, 0, 0.2, 1);
854
232
  transform-origin: center;
855
233
  transform-box: fill-box;
856
- }
857
-
858
- /* Round 186 — chrome zoom-in / zoom-out buttons get a brief icon pop
234
+ }/* Round 186 — chrome zoom-in / zoom-out buttons get a brief icon pop
859
235
  on click. Same click-feel idiom R184 added for the reset button —
860
- the canvas already smoothes via R168/R169 smoothView, but the
236
+ the canvas already smoothes via R168/R169 smoothView,
237
+ but the
861
238
  chrome BUTTON itself needs its own confirmation. A quick scale
862
239
  up-then-back (1 → 1.18 → 1 over 220ms) reads as "tapped". Same
863
240
  transform-box: fill-box anchoring as R184 keeps the icon
@@ -866,16 +243,14 @@ body {
866
243
  0% { transform: scale(1); }
867
244
  50% { transform: scale(1.18); }
868
245
  100% { transform: scale(1); }
869
- }
870
- .anet-chrome-pop {
246
+ }.anet-chrome-pop {
871
247
  animation: anet-chrome-pop 0.22s ease-out;
872
248
  transform-origin: center;
873
249
  transform-box: fill-box;
874
- }
875
-
876
- /* Round 498 — recent-signal row hot-count subtle pulse (信息密度 +
250
+ }/* Round 498 — recent-signal row hot-count subtle pulse (信息密度 +
877
251
  呼吸感 themes). When a row's edge count crosses the hot threshold
878
- (≥ 10), the existing R127/R320/R445 amber-fill + fw-700 typography
252
+ (≥ 10),
253
+ the existing R127/R320/R445 amber-fill + fw-700 typography
879
254
  already calls attention; R498 adds a slow 3s opacity breath (0.85 ↔
880
255
  1.0) on the digit so the hot tspans gently pulse — at-a-glance scan
881
256
  of the panel reads "high-traffic lane right here" with motion in
@@ -887,37 +262,31 @@ body {
887
262
  (animation-duration: 0.001ms !important) — no per-class guard
888
263
  needed. The component-side gate (`!reducedMotion && isHot`)
889
264
  ensures the className is only applied when both conditions hold,
890
- so even without the blanket the no-motion preference is respected. */
265
+ so even without the blanket the no-motion preference is respected. */
891
266
  @keyframes anet-recent-hot-pulse-kf {
892
267
  0%, 100% { opacity: 0.85; }
893
268
  50% { opacity: 1; }
894
- }
895
- .anet-recent-hot-pulse {
269
+ }.anet-recent-hot-pulse {
896
270
  animation: anet-recent-hot-pulse-kf 3s ease-in-out infinite;
897
- }
898
-
899
- /* Round 36 — current-step ring pulse on TaskDrawer timeline. Halo gently
271
+ }/* Round 36 — current-step ring pulse on TaskDrawer timeline. Halo gently
900
272
  breathes around the active step's dot so users can spot "task is here". */
901
273
  @keyframes anet-current-step-pulse-kf {
902
274
  0%, 100% { transform: scale(1); opacity: 0.6; }
903
275
  50% { transform: scale(1.25); opacity: 0.0; }
904
- }
905
- .anet-current-step-pulse {
276
+ }.anet-current-step-pulse {
906
277
  animation: anet-current-step-pulse-kf 1.6s ease-in-out infinite;
907
- }
908
-
909
- /* Round 45 — TopoGraph rotating radar sweep wedge. 6s slow rotation
278
+ }/* Round 45 — TopoGraph rotating radar sweep wedge. 6s slow rotation
910
279
  gives the topology canvas a real "radar scan" feel without distracting
911
280
  from the agent nodes.
912
281
  R146: split shorthand into longhand so per-render inline style can
913
- override animation-duration via --sweep-dur, joining the R145
282
+ override animation-duration via --sweep-dur,
283
+ joining the R145
914
284
  --spoke-dur / R132 --march-dur pattern. Default 6s preserves R45's
915
285
  original cadence for any caller that forgets the var. */
916
286
  @keyframes anet-topo-sweep-kf {
917
287
  0% { transform: rotate(0deg); }
918
288
  100% { transform: rotate(360deg); }
919
- }
920
- .anet-topo-sweep {
289
+ }.anet-topo-sweep {
921
290
  animation-name: anet-topo-sweep-kf;
922
291
  animation-duration: var(--sweep-dur, 6s);
923
292
  animation-timing-function: linear;