agmon 0.2.0 → 0.2.2

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 (294) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/fallback-build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +8 -8
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  10. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  11. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/_not-found.html +1 -1
  13. package/.next/server/app/_not-found.rsc +15 -13
  14. package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -13
  15. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +8 -6
  16. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  17. package/.next/server/app/api/media/route.js.nft.json +1 -1
  18. package/.next/server/app/api/reports/tokens/route.js.nft.json +1 -1
  19. package/.next/server/app/api/sessions/[id]/transcript/route.js +1 -1
  20. package/.next/server/app/api/sessions/[id]/transcript/route.js.nft.json +1 -1
  21. package/.next/server/app/api/traces/stream/route.js +1 -1
  22. package/.next/server/app/api/traces/stream/route.js.nft.json +1 -1
  23. package/.next/server/app/api/version/route.js.nft.json +1 -1
  24. package/.next/server/app/api/workspace/file-content/route.js.nft.json +1 -1
  25. package/.next/server/app/api/workspace/files/route.js.nft.json +1 -1
  26. package/.next/server/app/chat/page.js.nft.json +1 -1
  27. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  28. package/.next/server/app/chat.html +1 -1
  29. package/.next/server/app/chat.rsc +20 -19
  30. package/.next/server/app/chat.segments/_full.segment.rsc +20 -19
  31. package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
  32. package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +22 -20
  33. package/.next/server/app/index.html +1 -1
  34. package/.next/server/app/index.rsc +20 -18
  35. package/.next/server/app/index.segments/__PAGE__.segment.rsc +10 -9
  36. package/.next/server/app/index.segments/_full.segment.rsc +20 -18
  37. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  38. package/.next/server/app/page.js.nft.json +1 -1
  39. package/.next/server/app/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/reports/page.js.nft.json +1 -1
  41. package/.next/server/app/reports/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/reports.html +1 -1
  43. package/.next/server/app/reports.rsc +4 -4
  44. package/.next/server/app/reports.segments/_full.segment.rsc +4 -4
  45. package/.next/server/app/reports.segments/_tree.segment.rsc +2 -2
  46. package/.next/server/app/reports.segments/reports/__PAGE__.segment.rsc +6 -5
  47. package/.next/server/app/store/page.js.nft.json +1 -1
  48. package/.next/server/app/store/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app/store.html +1 -1
  50. package/.next/server/app/store.rsc +5 -5
  51. package/.next/server/app/store.segments/_full.segment.rsc +5 -5
  52. package/.next/server/app/store.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/store.segments/store/__PAGE__.segment.rsc +7 -6
  54. package/.next/server/chunks/[root-of-the-server]__0dw97_pahi8uf._.js +3 -0
  55. package/.next/server/chunks/[root-of-the-server]__0dw97_pahi8uf._.js.map +1 -0
  56. package/.next/server/chunks/_0ao-_t4jkb46h._.js +2 -2
  57. package/.next/server/chunks/_0ao-_t4jkb46h._.js.map +1 -1
  58. package/.next/server/chunks/_1-8ipqazoyrrk._.js +1 -1
  59. package/.next/server/chunks/_1-8ipqazoyrrk._.js.map +1 -1
  60. package/.next/server/chunks/ssr/[root-of-the-server]__0i2rbwbkxbdog._.js +3 -0
  61. package/.next/server/chunks/ssr/[root-of-the-server]__0i2rbwbkxbdog._.js.map +1 -0
  62. package/.next/server/chunks/ssr/[root-of-the-server]__0qzscpxebh28_._.js +3 -0
  63. package/.next/server/chunks/ssr/[root-of-the-server]__0qzscpxebh28_._.js.map +1 -0
  64. package/.next/server/chunks/ssr/[root-of-the-server]__1jwplflwix8wi._.js +427 -0
  65. package/.next/server/chunks/ssr/[root-of-the-server]__1jwplflwix8wi._.js.map +1 -0
  66. package/.next/server/chunks/ssr/[root-of-the-server]__1kt7h7bz59mdn._.js +1 -1
  67. package/.next/server/chunks/ssr/[root-of-the-server]__1kt7h7bz59mdn._.js.map +1 -1
  68. package/.next/server/chunks/ssr/[root-of-the-server]__1otsvjy81s8my._.js +427 -0
  69. package/.next/server/chunks/ssr/[root-of-the-server]__1otsvjy81s8my._.js.map +1 -0
  70. package/.next/server/chunks/ssr/_0e3frtjrk-wi9._.js +3 -0
  71. package/.next/server/chunks/ssr/_0e3frtjrk-wi9._.js.map +1 -0
  72. package/.next/server/chunks/ssr/_0h29jdf4relbq._.js +3 -0
  73. package/.next/server/chunks/ssr/_0h29jdf4relbq._.js.map +1 -0
  74. package/.next/server/chunks/ssr/_0zel-n0h--cnl._.js +3 -0
  75. package/.next/server/chunks/ssr/_0zel-n0h--cnl._.js.map +1 -0
  76. package/.next/server/chunks/ssr/_1487-zi23c5eb._.js +1 -1
  77. package/.next/server/chunks/ssr/_1487-zi23c5eb._.js.map +1 -1
  78. package/.next/server/chunks/ssr/_1vgwoe-shb9z7._.js +3 -0
  79. package/.next/server/chunks/ssr/_1vgwoe-shb9z7._.js.map +1 -0
  80. package/.next/server/chunks/ssr/_1zm4m-s8k7oe3._.js +3 -0
  81. package/.next/server/chunks/ssr/_1zm4m-s8k7oe3._.js.map +1 -0
  82. package/.next/server/chunks/ssr/_202tntue-jj6s._.js +3 -0
  83. package/.next/server/chunks/ssr/_202tntue-jj6s._.js.map +1 -0
  84. package/.next/server/chunks/ssr/{node_modules_1wlwrgnt65zus._.js → node_modules_00ebs67b4u61w._.js} +1 -1
  85. package/.next/server/chunks/ssr/{node_modules_0f773uqgzj7y7._.js → node_modules_01avo0bde3tpo._.js} +1 -1
  86. package/.next/server/chunks/ssr/{node_modules_0z3elum1675ve._.js → node_modules_01l0208e5kqic._.js} +1 -1
  87. package/.next/server/chunks/ssr/{node_modules_1c8i3jrmo4393._.js → node_modules_033x29yqle_sj._.js} +1 -1
  88. package/.next/server/chunks/ssr/{node_modules_1kr1c-ncf8q9t._.js → node_modules_03wbg__aslvui._.js} +1 -1
  89. package/.next/server/chunks/ssr/{node_modules_02jwra-d9iqim._.js → node_modules_06mgkab1v5iox._.js} +2 -2
  90. package/.next/server/chunks/ssr/{node_modules_0z7rdbaf13024._.js → node_modules_08-bqkrz7sh0l._.js} +1 -1
  91. package/.next/server/chunks/ssr/{node_modules_13nsmuhey_ti_._.js → node_modules_089w9jm7s2qa3._.js} +2 -2
  92. package/.next/server/chunks/ssr/{node_modules_0m3ihe65818y_._.js → node_modules_08q6a-f2itxyo._.js} +1 -1
  93. package/.next/server/chunks/ssr/{node_modules_0__m9_odts7_e._.js → node_modules_0cy47-s63xjzh._.js} +2 -2
  94. package/.next/server/chunks/ssr/{node_modules_0b8ndnuql44z1._.js → node_modules_0czh0jcnsm5e6._.js} +2 -2
  95. package/.next/server/chunks/ssr/{node_modules_0fs8mckuwk2tj._.js → node_modules_0e6qoh__e4a69._.js} +1 -1
  96. package/.next/server/chunks/ssr/{node_modules_05w7qhtrzvnk6._.js → node_modules_0fv321j1nslkb._.js} +1 -1
  97. package/.next/server/chunks/ssr/{node_modules_061uaylfjwqk7._.js → node_modules_0g-wb7h-hsdwc._.js} +1 -1
  98. package/.next/server/chunks/ssr/{node_modules_1ll-58c1c-qab._.js → node_modules_0hb0q0epwvp--._.js} +1 -1
  99. package/.next/server/chunks/ssr/{node_modules_0dq0dsblt-q0g._.js → node_modules_0l-y0kqtu_r3o._.js} +1 -1
  100. package/.next/server/chunks/ssr/{node_modules_1zs2nou5uogby._.js → node_modules_0l814qpw677vm._.js} +1 -1
  101. package/.next/server/chunks/ssr/{node_modules_1xyxigbqzb8vs._.js → node_modules_0o63z1gd17rhb._.js} +1 -1
  102. package/.next/server/chunks/ssr/{node_modules_1-sz_-qddwilq._.js → node_modules_0oz_zzlh8exwx._.js} +1 -1
  103. package/.next/server/chunks/ssr/{node_modules_0oukyh0iq21ow._.js → node_modules_0so2agzqd9p8l._.js} +2 -2
  104. package/.next/server/chunks/ssr/{node_modules_12qw2ucebdvol._.js → node_modules_0w2w61b8bh769._.js} +1 -1
  105. package/.next/server/chunks/ssr/{node_modules_1dff7b_kvngr-._.js → node_modules_0wd6szix_zku7._.js} +2 -2
  106. package/.next/server/chunks/ssr/{node_modules_0fd1swhk15cx3._.js → node_modules_0wp7omf0xblv8._.js} +1 -1
  107. package/.next/server/chunks/ssr/{node_modules_0nde84kzuwv2n._.js → node_modules_0yayrqhzfk8wy._.js} +1 -1
  108. package/.next/server/chunks/ssr/{node_modules_0f4xh33v3iltc._.js → node_modules_0zb0i39mnjdf3._.js} +1 -1
  109. package/.next/server/chunks/ssr/{node_modules_1iovyom0-y7o_._.js → node_modules_10c51o2qv6mbi._.js} +1 -1
  110. package/.next/server/chunks/ssr/{node_modules_02nv3yff2pqh8._.js → node_modules_10g1mmrf63d8a._.js} +2 -2
  111. package/.next/server/chunks/ssr/{node_modules_0-6sb1gkbjo93._.js → node_modules_152txg4c7ose3._.js} +2 -2
  112. package/.next/server/chunks/ssr/{node_modules_12qn4bepdou5v._.js → node_modules_185fuy4cv7loa._.js} +2 -2
  113. package/.next/server/chunks/ssr/{node_modules_1-iyhsn_1p9nx._.js → node_modules_19vqq7rvf-_ar._.js} +2 -2
  114. package/.next/server/chunks/ssr/{node_modules_0hqa9oxz17hip._.js → node_modules_1hd7j-tdb8drq._.js} +1 -1
  115. package/.next/server/chunks/ssr/{node_modules_1rlnehdn16ay-._.js → node_modules_1hu83gui7_nj2._.js} +1 -1
  116. package/.next/server/chunks/ssr/{node_modules_07maxxr-t28ql._.js → node_modules_1i3x2csuq_-jt._.js} +1 -1
  117. package/.next/server/chunks/ssr/{node_modules_0kovk4b6czb22._.js → node_modules_1j8hpoiygrs5e._.js} +1 -1
  118. package/.next/server/chunks/ssr/{node_modules_0zc49fdcopqu9._.js → node_modules_1l2g7btuh3e4s._.js} +2 -2
  119. package/.next/server/chunks/ssr/{node_modules_0t4h1rucl35hl._.js → node_modules_1n4kig4mj6n4s._.js} +2 -2
  120. package/.next/server/chunks/ssr/{node_modules_0vn0kjn_84lmn._.js → node_modules_1nz3ckv6tu_66._.js} +1 -1
  121. package/.next/server/chunks/ssr/{node_modules_0-nvg0c4pgfb8._.js → node_modules_1qnypguag6s_l._.js} +1 -1
  122. package/.next/server/chunks/ssr/{node_modules_1v4lexrfhnlhs._.js → node_modules_1r6w-jlme6d10._.js} +1 -1
  123. package/.next/server/chunks/ssr/{node_modules_1f4geuvkvlxj1._.js → node_modules_1s8oxeqa5_i3k._.js} +1 -1
  124. package/.next/server/chunks/ssr/{node_modules_1216007ogd5om._.js → node_modules_1tskcaktx6ods._.js} +1 -1
  125. package/.next/server/chunks/ssr/{node_modules_02vtgweceovke._.js → node_modules_1xz1dstlo5ri-._.js} +1 -1
  126. package/.next/server/chunks/ssr/{node_modules_1kv6lsckqs-m0._.js → node_modules_1zii7uk468cay._.js} +2 -2
  127. package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0bmuudv_6eypr._.js → node_modules_katex_dist_katex_mjs_067omoj5szuys._.js} +1 -1
  128. package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0qyy6pq9uzpk0._.js → node_modules_katex_dist_katex_mjs_1604s1ky8db8u._.js} +1 -1
  129. package/.next/server/chunks/ssr/{node_modules_lucide-react_dist_esm_1d8fezw1qsiob._.js → node_modules_lucide-react_dist_esm_0-5bcc79665lq._.js} +2 -2
  130. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_0-5bcc79665lq._.js.map +1 -0
  131. package/.next/server/chunks/ssr/{node_modules_lucide-react_dist_esm_0pezg1352q13j._.js → node_modules_lucide-react_dist_esm_0axoa1eg51x1-._.js} +2 -2
  132. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_0axoa1eg51x1-._.js.map +1 -0
  133. package/.next/server/chunks/ssr/{node_modules_lucide-react_dist_esm_131i-tjzse3ye._.js → node_modules_lucide-react_dist_esm_18ei1-na3kusb._.js} +2 -2
  134. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_18ei1-na3kusb._.js.map +1 -0
  135. package/.next/server/chunks/ssr/{node_modules_lucide-react_dist_esm_1to-9cv1ysvs6._.js → node_modules_lucide-react_dist_esm_1tx493x2_auzs._.js} +2 -2
  136. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_1tx493x2_auzs._.js.map +1 -0
  137. package/.next/server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_06it7ktosm1dr._.js +3 -0
  138. package/.next/server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_06it7ktosm1dr._.js.map +1 -0
  139. package/.next/server/chunks/ssr/src_app_page_1vqfk0-j72fp6.js +1 -1
  140. package/.next/server/chunks/ssr/src_app_page_1vqfk0-j72fp6.js.map +1 -1
  141. package/.next/server/chunks/ssr/src_components_reports_TokenReportView_jsx_1g3p_enbbsadt._.js +1 -1
  142. package/.next/server/chunks/ssr/src_components_reports_TokenReportView_jsx_1g3p_enbbsadt._.js.map +1 -1
  143. package/.next/server/middleware-build-manifest.js +3 -3
  144. package/.next/server/pages/404.html +1 -1
  145. package/.next/server/pages/500.html +1 -1
  146. package/.next/server/preview-props.json +3 -3
  147. package/.next/server/server-reference-manifest.js +1 -1
  148. package/.next/server/server-reference-manifest.json +1 -1
  149. package/.next/static/chunks/0jo6fy2c_gmqn.js +1 -0
  150. package/.next/static/chunks/0r9apkv3exqv-.js +1 -0
  151. package/.next/static/chunks/1n_lb7wmn81jj.js +1 -0
  152. package/.next/static/chunks/2-w116ewoshm1.js +1 -0
  153. package/.next/static/chunks/23uup1e8841av.js +1 -0
  154. package/.next/static/chunks/2q9cwykv6ox1t.css +1 -0
  155. package/.next/static/chunks/2rx7xvi55ohln.js +1 -0
  156. package/.next/static/chunks/2zf44j8sjo0w0.js +425 -0
  157. package/.next/static/chunks/3rtpnpqd981z9.js +1 -0
  158. package/.next/trace +1 -1
  159. package/.next/trace-build +1 -1
  160. package/bin/cli.js +12 -0
  161. package/package.json +1 -1
  162. package/src/app/api/traces/stream/route.js +41 -5
  163. package/src/app/chat/page.js +14 -14
  164. package/src/app/globals.css +128 -0
  165. package/src/app/layout.js +8 -2
  166. package/src/app/page.js +18 -2
  167. package/src/components/chat/ChatMessageItem.js +12 -12
  168. package/src/components/chat/CodeBlock.js +5 -5
  169. package/src/components/chat/DiffViewer.js +27 -27
  170. package/src/components/chat/MarkdownRenderer.js +19 -19
  171. package/src/components/chat/SessionChatView.js +42 -42
  172. package/src/components/chat/SessionSearch.js +8 -8
  173. package/src/components/chat/ThinkingAccordion.js +3 -3
  174. package/src/components/chat/ToolCallCard.js +6 -6
  175. package/src/components/chat/ToolOutputView.js +19 -19
  176. package/src/components/factory/office-canvas.js +165 -3
  177. package/src/components/factory/scene/characters.js +267 -32
  178. package/src/components/layout/BottomPanel.jsx +6 -6
  179. package/src/components/layout/CommandPalette.jsx +12 -0
  180. package/src/components/layout/EditorTabs.jsx +17 -0
  181. package/src/components/layout/LayoutToggles.jsx +31 -2
  182. package/src/components/layout/LeftSidebar.jsx +88 -6
  183. package/src/components/layout/RightSidebar.jsx +8 -8
  184. package/src/components/layout/StatusBar.jsx +1 -1
  185. package/src/components/layout/TitleBar.jsx +76 -2
  186. package/src/components/layout/VSCodeWorkbench.jsx +99 -14
  187. package/src/components/store/Item3DRenderer.jsx +602 -48
  188. package/src/components/store/LiveFittingRoom.jsx +55 -791
  189. package/src/components/store/LiveReactAgent.jsx +1637 -0
  190. package/src/components/store/SupporterStoreModal.jsx +3 -2
  191. package/src/components/store/SupporterStoreView.jsx +94 -34
  192. package/src/components/theme/ThemeSettingsModal.jsx +40 -40
  193. package/src/components/ui/Button.jsx +4 -4
  194. package/src/components/ui/Input.jsx +1 -1
  195. package/src/components/ui/Modal.jsx +6 -6
  196. package/src/components/ui/Select.jsx +3 -3
  197. package/src/lib/catalog/auras.js +226 -1199
  198. package/src/lib/catalog/index.js +60 -1
  199. package/src/lib/catalog/pets.js +291 -2398
  200. package/src/lib/catalog/props.js +488 -4199
  201. package/src/lib/catalog/skins.js +773 -3249
  202. package/src/lib/catalog/trophies.js +226 -1199
  203. package/src/lib/mockTraces.js +28 -26
  204. package/src/lib/parsers/codexParser.js +373 -0
  205. package/src/lib/parsers/transcriptParser.js +35 -3
  206. package/src/lib/supporterStore.js +1 -1
  207. package/src/lib/traceContract.js +1 -1
  208. package/src/lib/useFactoryTraces.js +70 -5
  209. package/src/lib/watchers/antigravityWatcher.js +15 -1
  210. package/src/lib/watchers/claudeWatcher.js +86 -70
  211. package/src/lib/watchers/codexWatcher.js +482 -0
  212. package/src/lib/watchers/watcherManager.js +46 -30
  213. package/.next/server/chunks/src_lib_watchers_antigravityWatcher_0w1-atg39y__p.js +0 -3
  214. package/.next/server/chunks/src_lib_watchers_antigravityWatcher_0w1-atg39y__p.js.map +0 -1
  215. package/.next/server/chunks/ssr/[root-of-the-server]__19s2v5rryc14o._.js +0 -3
  216. package/.next/server/chunks/ssr/[root-of-the-server]__19s2v5rryc14o._.js.map +0 -1
  217. package/.next/server/chunks/ssr/[root-of-the-server]__1_jerxrctq6ev._.js +0 -427
  218. package/.next/server/chunks/ssr/[root-of-the-server]__1_jerxrctq6ev._.js.map +0 -1
  219. package/.next/server/chunks/ssr/[root-of-the-server]__1pvso-uyf--97._.js +0 -427
  220. package/.next/server/chunks/ssr/[root-of-the-server]__1pvso-uyf--97._.js.map +0 -1
  221. package/.next/server/chunks/ssr/[root-of-the-server]__1y78dc7oiz7ks._.js +0 -3
  222. package/.next/server/chunks/ssr/[root-of-the-server]__1y78dc7oiz7ks._.js.map +0 -1
  223. package/.next/server/chunks/ssr/_0ozao7omdwbvd._.js +0 -3
  224. package/.next/server/chunks/ssr/_0ozao7omdwbvd._.js.map +0 -1
  225. package/.next/server/chunks/ssr/_0rcmpdyxc1qwj._.js +0 -3
  226. package/.next/server/chunks/ssr/_0rcmpdyxc1qwj._.js.map +0 -1
  227. package/.next/server/chunks/ssr/_0wv0xnhun3mk7._.js +0 -3
  228. package/.next/server/chunks/ssr/_0wv0xnhun3mk7._.js.map +0 -1
  229. package/.next/server/chunks/ssr/_17rmaft1zusua._.js +0 -3
  230. package/.next/server/chunks/ssr/_17rmaft1zusua._.js.map +0 -1
  231. package/.next/server/chunks/ssr/_1e-d4pcj59a7a._.js +0 -3
  232. package/.next/server/chunks/ssr/_1e-d4pcj59a7a._.js.map +0 -1
  233. package/.next/server/chunks/ssr/_1qr5gnh64z8pg._.js +0 -3
  234. package/.next/server/chunks/ssr/_1qr5gnh64z8pg._.js.map +0 -1
  235. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_0pezg1352q13j._.js.map +0 -1
  236. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_131i-tjzse3ye._.js.map +0 -1
  237. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_1d8fezw1qsiob._.js.map +0 -1
  238. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_1to-9cv1ysvs6._.js.map +0 -1
  239. package/.next/static/chunks/0_3s_e4gd9xl0.js +0 -1
  240. package/.next/static/chunks/0i4kx4yl-dwfg.js +0 -425
  241. package/.next/static/chunks/0z0jbobmmvqoc.js +0 -1
  242. package/.next/static/chunks/1_a_gmob5qzho.js +0 -1
  243. package/.next/static/chunks/1ifqr4qo4697b.js +0 -1
  244. package/.next/static/chunks/2ccq9i8ev4dsx.js +0 -1
  245. package/.next/static/chunks/2mif7onk_9jy-.css +0 -1
  246. package/.next/static/chunks/40wyf-mv0tiu3.js +0 -1
  247. /package/.next/server/chunks/ssr/{node_modules_1c8i3jrmo4393._.js.map → node_modules_00ebs67b4u61w._.js.map} +0 -0
  248. /package/.next/server/chunks/ssr/{node_modules_0f773uqgzj7y7._.js.map → node_modules_01avo0bde3tpo._.js.map} +0 -0
  249. /package/.next/server/chunks/ssr/{node_modules_0z3elum1675ve._.js.map → node_modules_01l0208e5kqic._.js.map} +0 -0
  250. /package/.next/server/chunks/ssr/{node_modules_1wlwrgnt65zus._.js.map → node_modules_033x29yqle_sj._.js.map} +0 -0
  251. /package/.next/server/chunks/ssr/{node_modules_1kr1c-ncf8q9t._.js.map → node_modules_03wbg__aslvui._.js.map} +0 -0
  252. /package/.next/server/chunks/ssr/{node_modules_02jwra-d9iqim._.js.map → node_modules_06mgkab1v5iox._.js.map} +0 -0
  253. /package/.next/server/chunks/ssr/{node_modules_0fs8mckuwk2tj._.js.map → node_modules_08-bqkrz7sh0l._.js.map} +0 -0
  254. /package/.next/server/chunks/ssr/{node_modules_0-6sb1gkbjo93._.js.map → node_modules_089w9jm7s2qa3._.js.map} +0 -0
  255. /package/.next/server/chunks/ssr/{node_modules_02vtgweceovke._.js.map → node_modules_08q6a-f2itxyo._.js.map} +0 -0
  256. /package/.next/server/chunks/ssr/{node_modules_0__m9_odts7_e._.js.map → node_modules_0cy47-s63xjzh._.js.map} +0 -0
  257. /package/.next/server/chunks/ssr/{node_modules_02nv3yff2pqh8._.js.map → node_modules_0czh0jcnsm5e6._.js.map} +0 -0
  258. /package/.next/server/chunks/ssr/{node_modules_0z7rdbaf13024._.js.map → node_modules_0e6qoh__e4a69._.js.map} +0 -0
  259. /package/.next/server/chunks/ssr/{node_modules_0-nvg0c4pgfb8._.js.map → node_modules_0fv321j1nslkb._.js.map} +0 -0
  260. /package/.next/server/chunks/ssr/{node_modules_061uaylfjwqk7._.js.map → node_modules_0g-wb7h-hsdwc._.js.map} +0 -0
  261. /package/.next/server/chunks/ssr/{node_modules_0t4h1rucl35hl._.js.map → node_modules_0hb0q0epwvp--._.js.map} +0 -0
  262. /package/.next/server/chunks/ssr/{node_modules_0dq0dsblt-q0g._.js.map → node_modules_0l-y0kqtu_r3o._.js.map} +0 -0
  263. /package/.next/server/chunks/ssr/{node_modules_0zc49fdcopqu9._.js.map → node_modules_0l814qpw677vm._.js.map} +0 -0
  264. /package/.next/server/chunks/ssr/{node_modules_1xyxigbqzb8vs._.js.map → node_modules_0o63z1gd17rhb._.js.map} +0 -0
  265. /package/.next/server/chunks/ssr/{node_modules_1-iyhsn_1p9nx._.js.map → node_modules_0oz_zzlh8exwx._.js.map} +0 -0
  266. /package/.next/server/chunks/ssr/{node_modules_0oukyh0iq21ow._.js.map → node_modules_0so2agzqd9p8l._.js.map} +0 -0
  267. /package/.next/server/chunks/ssr/{node_modules_07maxxr-t28ql._.js.map → node_modules_0w2w61b8bh769._.js.map} +0 -0
  268. /package/.next/server/chunks/ssr/{node_modules_1dff7b_kvngr-._.js.map → node_modules_0wd6szix_zku7._.js.map} +0 -0
  269. /package/.next/server/chunks/ssr/{node_modules_0fd1swhk15cx3._.js.map → node_modules_0wp7omf0xblv8._.js.map} +0 -0
  270. /package/.next/server/chunks/ssr/{node_modules_0nde84kzuwv2n._.js.map → node_modules_0yayrqhzfk8wy._.js.map} +0 -0
  271. /package/.next/server/chunks/ssr/{node_modules_0f4xh33v3iltc._.js.map → node_modules_0zb0i39mnjdf3._.js.map} +0 -0
  272. /package/.next/server/chunks/ssr/{node_modules_1-sz_-qddwilq._.js.map → node_modules_10c51o2qv6mbi._.js.map} +0 -0
  273. /package/.next/server/chunks/ssr/{node_modules_0b8ndnuql44z1._.js.map → node_modules_10g1mmrf63d8a._.js.map} +0 -0
  274. /package/.next/server/chunks/ssr/{node_modules_13nsmuhey_ti_._.js.map → node_modules_152txg4c7ose3._.js.map} +0 -0
  275. /package/.next/server/chunks/ssr/{node_modules_12qn4bepdou5v._.js.map → node_modules_185fuy4cv7loa._.js.map} +0 -0
  276. /package/.next/server/chunks/ssr/{node_modules_1iovyom0-y7o_._.js.map → node_modules_19vqq7rvf-_ar._.js.map} +0 -0
  277. /package/.next/server/chunks/ssr/{node_modules_0hqa9oxz17hip._.js.map → node_modules_1hd7j-tdb8drq._.js.map} +0 -0
  278. /package/.next/server/chunks/ssr/{node_modules_1rlnehdn16ay-._.js.map → node_modules_1hu83gui7_nj2._.js.map} +0 -0
  279. /package/.next/server/chunks/ssr/{node_modules_12qw2ucebdvol._.js.map → node_modules_1i3x2csuq_-jt._.js.map} +0 -0
  280. /package/.next/server/chunks/ssr/{node_modules_0kovk4b6czb22._.js.map → node_modules_1j8hpoiygrs5e._.js.map} +0 -0
  281. /package/.next/server/chunks/ssr/{node_modules_1ll-58c1c-qab._.js.map → node_modules_1l2g7btuh3e4s._.js.map} +0 -0
  282. /package/.next/server/chunks/ssr/{node_modules_1zs2nou5uogby._.js.map → node_modules_1n4kig4mj6n4s._.js.map} +0 -0
  283. /package/.next/server/chunks/ssr/{node_modules_0vn0kjn_84lmn._.js.map → node_modules_1nz3ckv6tu_66._.js.map} +0 -0
  284. /package/.next/server/chunks/ssr/{node_modules_05w7qhtrzvnk6._.js.map → node_modules_1qnypguag6s_l._.js.map} +0 -0
  285. /package/.next/server/chunks/ssr/{node_modules_1v4lexrfhnlhs._.js.map → node_modules_1r6w-jlme6d10._.js.map} +0 -0
  286. /package/.next/server/chunks/ssr/{node_modules_1f4geuvkvlxj1._.js.map → node_modules_1s8oxeqa5_i3k._.js.map} +0 -0
  287. /package/.next/server/chunks/ssr/{node_modules_1216007ogd5om._.js.map → node_modules_1tskcaktx6ods._.js.map} +0 -0
  288. /package/.next/server/chunks/ssr/{node_modules_0m3ihe65818y_._.js.map → node_modules_1xz1dstlo5ri-._.js.map} +0 -0
  289. /package/.next/server/chunks/ssr/{node_modules_1kv6lsckqs-m0._.js.map → node_modules_1zii7uk468cay._.js.map} +0 -0
  290. /package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0bmuudv_6eypr._.js.map → node_modules_katex_dist_katex_mjs_067omoj5szuys._.js.map} +0 -0
  291. /package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0qyy6pq9uzpk0._.js.map → node_modules_katex_dist_katex_mjs_1604s1ky8db8u._.js.map} +0 -0
  292. /package/.next/static/{sQnXeiP8rV6y2v0az_xw3 → dGN2VKPk5TJgezxS3JvRc}/_buildManifest.js +0 -0
  293. /package/.next/static/{sQnXeiP8rV6y2v0az_xw3 → dGN2VKPk5TJgezxS3JvRc}/_clientMiddlewareManifest.js +0 -0
  294. /package/.next/static/{sQnXeiP8rV6y2v0az_xw3 → dGN2VKPk5TJgezxS3JvRc}/_ssgManifest.js +0 -0
@@ -4,6 +4,7 @@ import React, { useState, useEffect } from "react";
4
4
  import { Modal, Button } from "@/components/ui";
5
5
  import { ShieldCheck } from "lucide-react";
6
6
  import { getSupporterState, SUPPORTER_CHANGE_EVENT } from "@/lib/supporterStore";
7
+ import { TOTAL_CATALOG_COUNT } from "@/lib/catalog/index.js";
7
8
  import SupporterStoreView from "./SupporterStoreView";
8
9
 
9
10
  export default function SupporterStoreModal({ isOpen, onClose }) {
@@ -21,7 +22,7 @@ export default function SupporterStoreModal({ isOpen, onClose }) {
21
22
  <Modal
22
23
  isOpen={isOpen}
23
24
  onClose={onClose}
24
- title="Supporter Store & Vault (1,000 Tech Items & 3D Effects)"
25
+ title={`Supporter Store & Vault (${TOTAL_CATALOG_COUNT} Tech Items & 3D Effects)`}
25
26
  description="Support the developer to maintain the project and unlock custom AGMon virtual office decorations"
26
27
  size="full"
27
28
  footer={
@@ -30,7 +31,7 @@ export default function SupporterStoreModal({ isOpen, onClose }) {
30
31
  {storeState.isSupporter ? (
31
32
  <span className="flex items-center gap-1.5 text-amber-400 font-semibold">
32
33
  <ShieldCheck className="w-4 h-4 text-amber-400" />
33
- <span>Status: VIP Supporter Activated (All 1,000 items unlocked)</span>
34
+ <span>Status: VIP Supporter Activated (All {TOTAL_CATALOG_COUNT} items unlocked)</span>
34
35
  </span>
35
36
  ) : (
36
37
  <span>100% of AGMon core engineering features remain completely free</span>
@@ -44,7 +44,10 @@ import {
44
44
  SUPPORTER_CHANGE_EVENT,
45
45
  } from "@/lib/supporterStore";
46
46
  import { startAmbient, stopAmbient, setAmbientVolume } from "@/lib/ambientAudio";
47
+ import { TOTAL_CATALOG_COUNT } from "@/lib/catalog/index.js";
47
48
  import { Item3DPreview } from "./Item3DRenderer";
49
+ import LiveFittingRoom from "./LiveFittingRoom";
50
+ import { LiveReactAgent } from "./LiveReactAgent";
48
51
 
49
52
  // VietQR donation recipient info (MB Bank)
50
53
  const VIETQR_CONFIG = {
@@ -77,7 +80,7 @@ const DONATE_TIERS = [
77
80
  amount: 100000,
78
81
  amountUsd: "$5",
79
82
  tag: "VIP Supporter",
80
- description: "Unlock all 1,000 3D isometric items, aura effects, and exclusive badges.",
83
+ description: `Unlock all ${TOTAL_CATALOG_COUNT} 3D isometric items, aura effects, and exclusive badges.`,
81
84
  },
82
85
  ];
83
86
 
@@ -253,9 +256,16 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
253
256
  {
254
257
  id: "all",
255
258
  label: "All Items",
256
- count: 1010,
259
+ count: TOTAL_CATALOG_COUNT,
257
260
  icon: Grid,
258
- desc: "10 Themes · 250 Skins · 350 Props · 200 Pets · 100 Auras · 100 Trophies",
261
+ desc: "10 Themes · 50 Skins · 35 Props · 21 Pets · 16 Auras · 16 Trophies",
262
+ },
263
+ {
264
+ id: "fitting_room",
265
+ label: "Live Fitting Room",
266
+ badge: "LIVE 3D",
267
+ icon: Sparkles,
268
+ desc: "Interactive avatar sandbox, mix props & test actions",
259
269
  },
260
270
  {
261
271
  id: "themes",
@@ -371,7 +381,7 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
371
381
  </div>
372
382
  <div>
373
383
  <h2 className="text-sm font-bold text-white leading-tight">Supporter Store</h2>
374
- <p className="text-[11px] text-amber-400 font-mono">1,000 3D Items & Effects</p>
384
+ <p className="text-[11px] text-amber-400 font-mono">{TOTAL_CATALOG_COUNT} 3D Items & Effects</p>
375
385
  </div>
376
386
  </div>
377
387
  {onClose && (
@@ -391,7 +401,7 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
391
401
  <Search className="w-3.5 h-3.5 text-slate-500 absolute left-2.5 top-1/2 -translate-y-1/2" />
392
402
  <input
393
403
  type="text"
394
- placeholder="Search across 1,000 items..."
404
+ placeholder={`Search across ${TOTAL_CATALOG_COUNT} items...`}
395
405
  value={searchQuery}
396
406
  onChange={(e) => setSearchQuery(e.target.value)}
397
407
  className="w-full pl-8 pr-7 py-1.5 bg-[#202026] border border-[#33333d] rounded-lg text-xs text-white placeholder-slate-500 focus:outline-none focus:border-[#007acc] transition-colors"
@@ -410,7 +420,7 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
410
420
  {/* Aside Category Navigation Menu */}
411
421
  <nav className="flex-1 overflow-y-auto p-2 space-y-1 text-xs">
412
422
  <div className="px-2 py-1 text-[10px] font-bold text-slate-500 uppercase tracking-wider">
413
- Categories (1,000 Items)
423
+ Categories ({TOTAL_CATALOG_COUNT} Items)
414
424
  </div>
415
425
  {asideMenuItems.map((item) => {
416
426
  const isActive = activeTab === item.id;
@@ -494,10 +504,10 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
494
504
  type="button"
495
505
  onClick={handleQuickUnlockAll}
496
506
  className="w-full flex items-center justify-center gap-1.5 px-3 py-1.5 bg-gradient-to-r from-amber-500/20 to-amber-600/20 hover:from-amber-500/30 hover:to-amber-600/30 border border-amber-500/40 text-amber-300 rounded-lg text-xs font-semibold cursor-pointer transition-all shadow-sm"
497
- title="Unlock all 1,000 items instantly to preview"
507
+ title={`Unlock all ${TOTAL_CATALOG_COUNT} items instantly to preview`}
498
508
  >
499
509
  <Zap className="w-3.5 h-3.5 text-amber-400" />
500
- <span>Unlock all 1,000 items (VIP Demo)</span>
510
+ <span>Unlock all {TOTAL_CATALOG_COUNT} items (VIP Demo)</span>
501
511
  </button>
502
512
  </div>
503
513
  )}
@@ -519,10 +529,20 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
519
529
  </div>
520
530
 
521
531
  <div className="flex items-center gap-3 p-2 rounded-xl bg-[#1d1d23] border border-[#2b2b34] shadow-inner">
522
- <div className="w-14 h-14 rounded-lg bg-[#141418] border border-[#33333d] flex items-center justify-center shrink-0 overflow-hidden">
523
- <div className="scale-75">
524
- <Item3DPreview itemId={storeState.equippedSkin} className="w-20 h-20" />
525
- </div>
532
+ <div className="w-14 h-14 rounded-lg bg-[#141418] border border-[#33333d] flex items-center justify-center shrink-0 overflow-hidden relative shadow-inner">
533
+ <LiveReactAgent
534
+ skinId={storeState.equippedSkin || "skin_0"}
535
+ petId={storeState.equippedPet || "pet_0"}
536
+ propsList={storeState.equippedProps || []}
537
+ auraId={storeState.equippedAura || "aura_0"}
538
+ themeId={storeState.equippedOfficeTheme || "theme_default"}
539
+ mode="streaming"
540
+ intensity={0.5}
541
+ showFloor={false}
542
+ showDesk={false}
543
+ interactive={false}
544
+ className="w-full h-full"
545
+ />
526
546
  </div>
527
547
  <div className="space-y-0.5 flex-1 min-w-0">
528
548
  <div className="font-bold text-white text-xs truncate">
@@ -554,6 +574,15 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
554
574
  )}
555
575
  </div>
556
576
  </div>
577
+
578
+ <button
579
+ type="button"
580
+ onClick={() => setActiveTab("fitting_room")}
581
+ className="w-full flex items-center justify-center gap-1.5 py-1.5 px-3 rounded-lg bg-cyan-500/10 hover:bg-cyan-500/20 border border-cyan-500/30 text-cyan-300 text-xs font-semibold cursor-pointer transition-all shadow-sm"
582
+ >
583
+ <Sparkles className="w-3.5 h-3.5 text-cyan-400" />
584
+ <span>Open 3D Fitting Room</span>
585
+ </button>
557
586
  </div>
558
587
  </aside>
559
588
 
@@ -564,10 +593,11 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
564
593
  <div>
565
594
  <div className="flex items-center gap-2">
566
595
  <span className="text-xs font-mono font-bold px-2 py-0.5 rounded bg-[#007acc]/20 text-cyan-300 border border-[#007acc]/40">
567
- CATALOG 1,010
596
+ CATALOG {TOTAL_CATALOG_COUNT}
568
597
  </span>
569
598
  <h1 className="text-base font-bold text-white flex items-center gap-2">
570
599
  {activeTab === "all" && <Grid className="w-4 h-4 text-cyan-400" />}
600
+ {activeTab === "fitting_room" && <Sparkles className="w-4 h-4 text-cyan-400" />}
571
601
  {activeTab === "themes" && <Palette className="w-4 h-4 text-purple-400" />}
572
602
  {activeTab === "skins" && <Bot className="w-4 h-4 text-pink-400" />}
573
603
  {activeTab === "props" && <Laptop className="w-4 h-4 text-emerald-400" />}
@@ -577,20 +607,22 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
577
607
  {activeTab === "ambient" && <Volume2 className="w-4 h-4 text-cyan-400" />}
578
608
  {activeTab === "donate" && <Coffee className="w-4 h-4 text-amber-400" />}
579
609
  <span>
580
- {activeTab === "all" && "All 1,010 Tech Items & 3D Effects"}
610
+ {activeTab === "all" && `All ${TOTAL_CATALOG_COUNT} Tech Items & 3D Effects`}
611
+ {activeTab === "fitting_room" && "Live Avatar Fitting Room & Sandbox"}
581
612
  {activeTab === "themes" && "Office Themes & Wallpapers (10 Floor Styles)"}
582
- {activeTab === "skins" && "Agent 3D Skins (250 Armor & Visor Models)"}
583
- {activeTab === "props" && "Desk Props & Hardware (350 Devices & Rigs)"}
584
- {activeTab === "pets" && "Pets & Cyber Companions (200 Pets & Drones)"}
585
- {activeTab === "auras" && "Auras & Character Effects (100 Energy Spectrums)"}
586
- {activeTab === "trophies" && "Trophies & Silicon Badges (100 3D Medals)"}
613
+ {activeTab === "skins" && "Agent 3D Skins (50 Curated Armor & Visor Models)"}
614
+ {activeTab === "props" && "Desk Props & Hardware (35 Curated Devices & Rigs)"}
615
+ {activeTab === "pets" && "Pets & Cyber Companions (21 Pets & Drones)"}
616
+ {activeTab === "auras" && "Auras & Character Effects (16 Energy Spectrums)"}
617
+ {activeTab === "trophies" && "Trophies & Silicon Badges (16 3D Medals)"}
587
618
  {activeTab === "ambient" && "Lo-Fi Ambient Audio (6 Soundscapes)"}
588
619
  {activeTab === "donate" && "Buy Me a Coffee (VietQR Bank Transfer)"}
589
620
  </span>
590
621
  </h1>
591
622
  </div>
592
623
  <p className="text-xs text-slate-400 mt-1">
593
- {activeTab === "all" && "Collection of 1,010 high-precision 3D isometric items: cast shadows, directional lighting, and microchip details."}
624
+ {activeTab === "all" && `Collection of ${TOTAL_CATALOG_COUNT} high-precision 3D isometric items: cast shadows, directional lighting, and microchip details.`}
625
+ {activeTab === "fitting_room" && "Interactive 3D sandbox to mix skins, desk props, cyber pets, auras, and floor styles with live animated actions."}
594
626
  {activeTab === "themes" && "Custom floor environments, neon gridlines, and ambient lighting for the 2D Virtual Office canvas."}
595
627
  {activeTab === "skins" && "Customize chibi robot avatars for AI programming agents on the visual canvas."}
596
628
  {activeTab === "props" && "Decorate workstations with dual displays, server racks, espresso machines, and cyber bonsai."}
@@ -633,7 +665,9 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
633
665
  </div>
634
666
 
635
667
  <span className="text-xs font-mono text-cyan-300 bg-[#202026] px-3 py-1 rounded-md border border-[#2f2f38]">
636
- {activeTab === "ambient"
668
+ {activeTab === "fitting_room"
669
+ ? "Live 3D Stage"
670
+ : activeTab === "ambient"
637
671
  ? `${(COSMETIC_CATALOG.soundscapes || []).length} Audio Tracks`
638
672
  : activeTab === "donate"
639
673
  ? "3 Tiers"
@@ -655,13 +689,14 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
655
689
  {/* Quick Category Tabs Bar */}
656
690
  <div className="px-6 py-2 bg-[#1b1b20] border-b border-[#26262b] flex items-center gap-1.5 overflow-x-auto text-xs shrink-0">
657
691
  {[
658
- { id: "all", label: "All (1,010)", icon: Grid },
659
- { id: "themes", label: "Themes (10)", icon: Palette },
660
- { id: "skins", label: "Skins (250)", icon: Bot },
661
- { id: "props", label: "Props (350)", icon: Laptop },
662
- { id: "pets", label: "Pets (200)", icon: Gift },
663
- { id: "auras", label: "Auras (100)", icon: Sparkles },
664
- { id: "trophies", label: "Trophies (100)", icon: Trophy },
692
+ { id: "all", label: `All (${TOTAL_CATALOG_COUNT})`, icon: Grid },
693
+ { id: "fitting_room", label: "Fitting Room (3D)", icon: Sparkles },
694
+ { id: "themes", label: `Themes (${(COSMETIC_CATALOG.officeThemes || []).length})`, icon: Palette },
695
+ { id: "skins", label: `Skins (${(COSMETIC_CATALOG.skins || []).length})`, icon: Bot },
696
+ { id: "props", label: `Props (${(COSMETIC_CATALOG.props || []).length})`, icon: Laptop },
697
+ { id: "pets", label: `Pets (${(COSMETIC_CATALOG.pets || []).length})`, icon: Gift },
698
+ { id: "auras", label: `Auras (${(COSMETIC_CATALOG.auras || []).length})`, icon: Sparkles },
699
+ { id: "trophies", label: `Trophies (${(COSMETIC_CATALOG.trophies || []).length})`, icon: Trophy },
665
700
  { id: "ambient", label: "Ambient (6)", icon: Volume2 },
666
701
  { id: "donate", label: "VietQR Vault", icon: Coffee },
667
702
  ].map((cat) => {
@@ -688,6 +723,14 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
688
723
  <div className="flex-1 overflow-y-auto p-4 sm:p-6">
689
724
  <div className="max-w-7xl mx-auto space-y-6">
690
725
 
726
+ {/* TAB: LIVE FITTING ROOM & SANDBOX */}
727
+ {activeTab === "fitting_room" && (
728
+ <LiveFittingRoom
729
+ initialStoreState={storeState}
730
+ onEquipSuccess={(updated) => setStoreState(updated)}
731
+ />
732
+ )}
733
+
691
734
  {/* TAB: AMBIENT SOUNDSCAPES */}
692
735
  {activeTab === "ambient" && (
693
736
  <section className="space-y-4">
@@ -795,7 +838,7 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
795
838
  <h2 className="text-xl font-bold text-white">Supporter Vault - Fuel the Developers</h2>
796
839
  <p className="text-xs text-slate-300 leading-relaxed">
797
840
  AGMon is built independently with high-quality open-source spirit.
798
- Every donation via VietQR helps support server infrastructure, sustain development, and unlocks all 1,000 3D isometric items.
841
+ Every donation via VietQR helps support server infrastructure, sustain development, and unlocks all {TOTAL_CATALOG_COUNT} 3D isometric items.
799
842
  </p>
800
843
  </div>
801
844
  </div>
@@ -934,8 +977,8 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
934
977
  </section>
935
978
  )}
936
979
 
937
- {/* TAB: ITEM GRID (ALL, SKINS, PROPS, PETS, AURAS, TROPHIES) */}
938
- {activeTab !== "ambient" && activeTab !== "donate" && (
980
+ {/* TAB: ITEM GRID (ALL, THEMES, SKINS, PROPS, PETS, AURAS, TROPHIES) */}
981
+ {activeTab !== "ambient" && activeTab !== "donate" && activeTab !== "fitting_room" && (
939
982
  <section className="space-y-4">
940
983
  {/* Items Grid */}
941
984
  <div className={gridClasses}>
@@ -982,9 +1025,26 @@ export default function SupporterStoreView({ hideHeader = false, onClose = null
982
1025
 
983
1026
  {/* Equip Action Bar */}
984
1027
  <div className="mt-3 pt-2.5 border-t border-[#2a2a34] flex items-center justify-between">
985
- <span className="text-[10px] text-slate-500 uppercase font-mono font-bold">
986
- {isEquipped ? "EQUIPPED" : isUnlocked ? "UNLOCKED" : "LOCKED"}
987
- </span>
1028
+ <div className="flex items-center gap-1.5">
1029
+ <span className="text-[10px] text-slate-500 uppercase font-mono font-bold">
1030
+ {isEquipped ? "EQUIPPED" : isUnlocked ? "UNLOCKED" : "LOCKED"}
1031
+ </span>
1032
+ <button
1033
+ type="button"
1034
+ onClick={() => {
1035
+ if (item.category === "skins") equipSkin(item.id);
1036
+ else if (item.category === "pets") equipPet(item.id);
1037
+ else if (item.category === "props") toggleProp(item.id);
1038
+ else if (item.category === "auras") equipAura(item.id);
1039
+ else if (item.category === "themes") equipOfficeTheme(item.id);
1040
+ setActiveTab("fitting_room");
1041
+ }}
1042
+ className="p-1 rounded hover:bg-cyan-500/20 text-slate-400 hover:text-cyan-300 transition-colors cursor-pointer"
1043
+ title="Test in 3D Fitting Room"
1044
+ >
1045
+ <Sparkles className="w-3.5 h-3.5" />
1046
+ </button>
1047
+ </div>
988
1048
 
989
1049
  {isUnlocked ? (
990
1050
  <button
@@ -69,19 +69,19 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
69
69
  aria-modal="true"
70
70
  className="fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/70 backdrop-blur-sm animate-in fade-in"
71
71
  >
72
- <div className="w-full max-w-2xl bg-[#1e1e1e] border border-[#333333] rounded-xl shadow-2xl overflow-hidden flex flex-col text-[#cccccc] font-sans max-h-[85vh]">
72
+ <div className="w-full max-w-2xl bg-[var(--bg-editor)] border border-[var(--border-card)] rounded-xl shadow-2xl overflow-hidden flex flex-col text-[var(--text-main)] font-sans max-h-[85vh]">
73
73
  {/* Header */}
74
- <div className="h-[46px] min-h-[46px] bg-[#252526] border-b border-[#2b2b2b] px-4 flex items-center justify-between shrink-0 select-none">
74
+ <div className="h-[46px] min-h-[46px] bg-[var(--bg-card)] border-b border-[var(--border-subtle)] px-4 flex items-center justify-between shrink-0 select-none">
75
75
  <div className="flex items-center gap-2">
76
- <Palette className="w-4 h-4 text-[#007acc]" />
77
- <h2 className="text-xs font-bold uppercase tracking-wider text-white">
76
+ <Palette className="w-4 h-4 text-[var(--accent-primary)]" />
77
+ <h2 className="text-xs font-bold uppercase tracking-wider text-[var(--text-bright)]">
78
78
  Preferences: Theme & Typography (VS Code Settings)
79
79
  </h2>
80
80
  </div>
81
81
 
82
82
  <button
83
83
  onClick={onClose}
84
- className="p-1 rounded text-slate-400 hover:text-white hover:bg-[#333333] transition-colors cursor-pointer"
84
+ className="p-1 rounded text-[var(--text-muted)] hover:text-[var(--text-bright)] hover:bg-[var(--bg-hover)] transition-colors cursor-pointer"
85
85
  title="Close (Escape)"
86
86
  >
87
87
  <X className="w-4 h-4" />
@@ -89,17 +89,17 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
89
89
  </div>
90
90
 
91
91
  {/* Tab Switcher */}
92
- <div className="flex items-center gap-1 px-4 py-2 border-b border-[#2b2b2b] bg-[#181818] shrink-0 select-none">
92
+ <div className="flex items-center gap-1 px-4 py-2 border-b border-[var(--border-subtle)] bg-[var(--bg-card-inner)] shrink-0 select-none">
93
93
  <button
94
94
  type="button"
95
95
  onClick={() => setActiveTab("themes")}
96
96
  className={`flex items-center gap-1.5 px-3 py-1.5 rounded text-xs font-semibold transition-colors cursor-pointer ${
97
97
  activeTab === "themes"
98
- ? "bg-[#252526] text-white border border-[#3e3e42]"
99
- : "text-slate-400 hover:text-slate-200"
98
+ ? "bg-[var(--bg-card)] text-[var(--text-bright)] border border-[var(--border-card)] shadow-xs"
99
+ : "text-[var(--text-muted)] hover:text-[var(--text-bright)]"
100
100
  }`}
101
101
  >
102
- <Palette className="w-3.5 h-3.5 text-cyan-400" />
102
+ <Palette className="w-3.5 h-3.5 text-[var(--accent-primary)]" />
103
103
  <span>Color Themes ({AVAILABLE_THEMES.length})</span>
104
104
  </button>
105
105
 
@@ -108,11 +108,11 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
108
108
  onClick={() => setActiveTab("fonts")}
109
109
  className={`flex items-center gap-1.5 px-3 py-1.5 rounded text-xs font-semibold transition-colors cursor-pointer ${
110
110
  activeTab === "fonts"
111
- ? "bg-[#252526] text-white border border-[#3e3e42]"
112
- : "text-slate-400 hover:text-slate-200"
111
+ ? "bg-[var(--bg-card)] text-[var(--text-bright)] border border-[var(--border-card)] shadow-xs"
112
+ : "text-[var(--text-muted)] hover:text-[var(--text-bright)]"
113
113
  }`}
114
114
  >
115
- <Type className="w-3.5 h-3.5 text-emerald-400" />
115
+ <Type className="w-3.5 h-3.5 text-[var(--accent-secondary)]" />
116
116
  <span>Typography & Fonts</span>
117
117
  </button>
118
118
  </div>
@@ -122,7 +122,7 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
122
122
  {activeTab === "themes" ? (
123
123
  /* TAB 1: COLOR THEMES */
124
124
  <div className="space-y-3">
125
- <div className="text-xs text-slate-400">
125
+ <div className="text-xs text-[var(--text-muted)]">
126
126
  Choose color theme for workbench, dialogs, sidebar, and toolbars:
127
127
  </div>
128
128
 
@@ -135,29 +135,29 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
135
135
  onClick={() => handleSelectTheme(th.id)}
136
136
  className={`group relative p-3 rounded-lg border transition-all cursor-pointer flex flex-col justify-between space-y-2.5 ${
137
137
  isSelected
138
- ? "bg-[#252526] border-[#007acc] shadow-md shadow-[#007acc]/10"
139
- : "bg-[#181818] border-[#2b2b2b] hover:border-[#3e3e42] hover:bg-[#252526]/50"
138
+ ? "bg-[var(--bg-card)] border-[var(--accent-primary)] shadow-md shadow-[var(--accent-primary)]/10 ring-1 ring-[var(--accent-primary)]/40"
139
+ : "bg-[var(--bg-card-inner)] border-[var(--border-card)] hover:border-[var(--accent-primary)]/50 hover:bg-[var(--bg-card)]"
140
140
  }`}
141
141
  >
142
142
  <div className="flex items-center justify-between">
143
143
  <div className="flex items-center gap-2">
144
- <span className="font-bold text-xs text-white">
144
+ <span className="font-bold text-xs text-[var(--text-bright)]">
145
145
  {th.name}
146
146
  </span>
147
- <span className="text-[9px] px-1.5 py-0.2 rounded border border-[#3e3e42] text-slate-400 uppercase font-mono">
147
+ <span className="text-[9px] px-1.5 py-0.2 rounded border border-[var(--border-card)] text-[var(--text-muted)] uppercase font-mono bg-[var(--bg-card)]">
148
148
  {th.category}
149
149
  </span>
150
150
  </div>
151
151
 
152
152
  {isSelected && (
153
- <div className="w-4 h-4 rounded-full bg-[#007acc] text-white flex items-center justify-center shrink-0">
153
+ <div className="w-4 h-4 rounded-full bg-[var(--accent-primary)] text-[var(--text-on-accent,#ffffff)] flex items-center justify-center shrink-0">
154
154
  <Check className="w-2.5 h-2.5" />
155
155
  </div>
156
156
  )}
157
157
  </div>
158
158
 
159
159
  {/* Swatch color preview bar */}
160
- <div className="flex items-center gap-1 h-3 rounded overflow-hidden p-0.5 bg-black/40 border border-[#2b2b2b]">
160
+ <div className="flex items-center gap-1 h-3 rounded overflow-hidden p-0.5 bg-black/10 dark:bg-black/40 border border-[var(--border-card)]">
161
161
  <span
162
162
  className="h-full flex-1 rounded-xs"
163
163
  style={{ backgroundColor: th.colors.workbench }}
@@ -180,7 +180,7 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
180
180
  />
181
181
  </div>
182
182
 
183
- <p className="text-[11px] text-slate-400 leading-relaxed">
183
+ <p className="text-[11px] text-[var(--text-muted)] leading-relaxed">
184
184
  {th.description}
185
185
  </p>
186
186
  </div>
@@ -192,26 +192,26 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
192
192
  /* TAB 2: TYPOGRAPHY & FONTS */
193
193
  <div className="space-y-4 text-xs">
194
194
  {/* UI Font */}
195
- <div className="p-3 rounded-lg bg-[#181818] border border-[#2b2b2b] space-y-2">
195
+ <div className="p-3 rounded-lg bg-[var(--bg-card-inner)] border border-[var(--border-card)] space-y-2">
196
196
  <div className="flex items-center justify-between">
197
- <span className="font-bold text-slate-200 uppercase tracking-wider text-[11px]">
197
+ <span className="font-bold text-[var(--text-bright)] uppercase tracking-wider text-[11px]">
198
198
  1. UI Font Family
199
199
  </span>
200
- <span className="text-[10px] text-slate-500 font-mono">--font-family-ui</span>
200
+ <span className="text-[10px] text-[var(--text-muted)] font-mono">--font-family-ui</span>
201
201
  </div>
202
202
  <select
203
203
  value={settings.uiFont}
204
204
  onChange={(e) => handleUpdateFont("uiFont", e.target.value)}
205
- className="w-full bg-[#252526] text-slate-200 border border-[#3e3e42] rounded px-3 py-1.5 text-xs outline-none focus:border-[#007acc] cursor-pointer"
205
+ className="w-full bg-[var(--bg-card)] text-[var(--text-main)] border border-[var(--border-card)] rounded px-3 py-1.5 text-xs outline-none focus:border-[var(--accent-primary)] cursor-pointer"
206
206
  >
207
207
  {AVAILABLE_UI_FONTS.map((f) => (
208
- <option key={f.id} value={f.id} className="bg-[#252526] text-slate-200">
208
+ <option key={f.id} value={f.id} className="bg-[var(--bg-card)] text-[var(--text-main)]">
209
209
  {f.name}
210
210
  </option>
211
211
  ))}
212
212
  </select>
213
213
  <div
214
- className="p-2 rounded bg-black/40 border border-[#2b2b2b] text-slate-300 text-xs"
214
+ className="p-2 rounded bg-[var(--bg-card)] border border-[var(--border-card)] text-[var(--text-main)] text-xs"
215
215
  style={{ fontFamily: "var(--font-family-ui)" }}
216
216
  >
217
217
  UI Preview: Agent Factory - Realtime multi-agent activity and telemetry monitor.
@@ -219,26 +219,26 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
219
219
  </div>
220
220
 
221
221
  {/* Code Monospace Font */}
222
- <div className="p-3 rounded-lg bg-[#181818] border border-[#2b2b2b] space-y-2">
222
+ <div className="p-3 rounded-lg bg-[var(--bg-card-inner)] border border-[var(--border-card)] space-y-2">
223
223
  <div className="flex items-center justify-between">
224
- <span className="font-bold text-slate-200 uppercase tracking-wider text-[11px]">
224
+ <span className="font-bold text-[var(--text-bright)] uppercase tracking-wider text-[11px]">
225
225
  2. Monospace Font (Code & Console)
226
226
  </span>
227
- <span className="text-[10px] text-slate-500 font-mono">--font-family-mono</span>
227
+ <span className="text-[10px] text-[var(--text-muted)] font-mono">--font-family-mono</span>
228
228
  </div>
229
229
  <select
230
230
  value={settings.codeFont}
231
231
  onChange={(e) => handleUpdateFont("codeFont", e.target.value)}
232
- className="w-full bg-[#252526] text-slate-200 border border-[#3e3e42] rounded px-3 py-1.5 text-xs outline-none focus:border-[#007acc] cursor-pointer"
232
+ className="w-full bg-[var(--bg-card)] text-[var(--text-main)] border border-[var(--border-card)] rounded px-3 py-1.5 text-xs outline-none focus:border-[var(--accent-primary)] cursor-pointer"
233
233
  >
234
234
  {AVAILABLE_CODE_FONTS.map((f) => (
235
- <option key={f.id} value={f.id} className="bg-[#252526] text-slate-200">
235
+ <option key={f.id} value={f.id} className="bg-[var(--bg-card)] text-[var(--text-main)]">
236
236
  {f.name}
237
237
  </option>
238
238
  ))}
239
239
  </select>
240
240
  <div
241
- className="p-2 rounded bg-black/40 border border-[#2b2b2b] text-emerald-400 font-mono text-[11px] leading-relaxed"
241
+ className="p-2 rounded bg-[var(--bg-chat-code)] border border-[var(--border-card)] text-[var(--text-chat-code)] font-mono text-[11px] leading-relaxed"
242
242
  style={{ fontFamily: "var(--font-family-mono)" }}
243
243
  >
244
244
  const agent = &#123; id: &quot;gemini-3.8-flash&quot;, tokens: 142857, state: &quot;streaming&quot; &#125;;
@@ -246,12 +246,12 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
246
246
  </div>
247
247
 
248
248
  {/* Font Size */}
249
- <div className="p-3 rounded-lg bg-[#181818] border border-[#2b2b2b] space-y-2">
249
+ <div className="p-3 rounded-lg bg-[var(--bg-card-inner)] border border-[var(--border-card)] space-y-2">
250
250
  <div className="flex items-center justify-between">
251
- <span className="font-bold text-slate-200 uppercase tracking-wider text-[11px]">
251
+ <span className="font-bold text-[var(--text-bright)] uppercase tracking-wider text-[11px]">
252
252
  3. Base Font Size
253
253
  </span>
254
- <span className="text-[10px] text-slate-500 font-mono">--font-size-ui</span>
254
+ <span className="text-[10px] text-[var(--text-muted)] font-mono">--font-size-ui</span>
255
255
  </div>
256
256
  <div className="grid grid-cols-2 sm:grid-cols-4 gap-2">
257
257
  {AVAILABLE_FONT_SIZES.map((sz) => (
@@ -261,8 +261,8 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
261
261
  onClick={() => handleUpdateFont("fontSize", sz.id)}
262
262
  className={`p-2 rounded border text-xs font-semibold transition-colors cursor-pointer text-center ${
263
263
  settings.fontSize === sz.id
264
- ? "bg-[#007acc]/20 border-[#007acc] text-cyan-300"
265
- : "bg-[#252526] border-[#3e3e42] text-slate-400 hover:text-white"
264
+ ? "bg-[var(--accent-primary)]/15 border-[var(--accent-primary)] text-[var(--accent-primary)] font-bold shadow-xs"
265
+ : "bg-[var(--bg-card)] border-[var(--border-card)] text-[var(--text-muted)] hover:text-[var(--text-bright)] hover:bg-[var(--bg-hover)]"
266
266
  }`}
267
267
  >
268
268
  {sz.label}
@@ -275,10 +275,10 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
275
275
  </div>
276
276
 
277
277
  {/* Footer */}
278
- <div className="h-[46px] min-h-[46px] bg-[#252526] border-t border-[#2b2b2b] px-4 flex items-center justify-between shrink-0 select-none">
278
+ <div className="h-[46px] min-h-[46px] bg-[var(--bg-card)] border-t border-[var(--border-subtle)] px-4 flex items-center justify-between shrink-0 select-none">
279
279
  <button
280
280
  onClick={handleResetDefaults}
281
- className="flex items-center gap-1.5 px-2.5 py-1 rounded bg-[#1e1e1e] hover:bg-[#2d2d2d] text-slate-400 hover:text-white border border-[#3e3e42] text-xs transition-colors cursor-pointer"
281
+ className="flex items-center gap-1.5 px-2.5 py-1 rounded bg-[var(--bg-card-inner)] hover:bg-[var(--bg-hover)] text-[var(--text-muted)] hover:text-[var(--text-bright)] border border-[var(--border-card)] text-xs transition-colors cursor-pointer"
282
282
  title="Restore default settings"
283
283
  >
284
284
  <RotateCcw className="w-3.5 h-3.5" />
@@ -287,7 +287,7 @@ export default function ThemeSettingsModal({ isOpen = false, onClose, initialTab
287
287
 
288
288
  <button
289
289
  onClick={onClose}
290
- className="px-4 py-1.5 rounded bg-[#007acc] hover:bg-[#0062a3] text-white text-xs font-semibold transition-colors cursor-pointer"
290
+ className="px-4 py-1.5 rounded bg-[var(--accent-primary)] hover:opacity-90 text-[var(--text-on-accent,#ffffff)] text-xs font-semibold transition-colors cursor-pointer"
291
291
  >
292
292
  Done
293
293
  </button>
@@ -9,13 +9,13 @@ export const buttonVariants = cva(
9
9
  variants: {
10
10
  variant: {
11
11
  primary:
12
- "bg-[#007acc] hover:bg-[#0062a3] active:bg-[#005085] text-white shadow-sm",
12
+ "bg-[var(--accent-primary)] hover:opacity-90 active:opacity-80 text-[var(--text-on-accent,#ffffff)] shadow-sm",
13
13
  secondary:
14
- "bg-[#2d2d2d] hover:bg-[#3c3c3c] active:bg-[#252526] text-[#cccccc] border border-[#3e3e42]",
14
+ "bg-[var(--bg-card-inner)] hover:bg-[var(--bg-hover)] active:opacity-80 text-[var(--text-main)] border border-[var(--border-card)]",
15
15
  outline:
16
- "bg-transparent hover:bg-[#3c3c3c] active:bg-[#2a2d2e] text-[#cccccc] border border-[#3e3e42]",
16
+ "bg-transparent hover:bg-[var(--bg-hover)] active:opacity-80 text-[var(--text-main)] border border-[var(--border-card)]",
17
17
  ghost:
18
- "bg-transparent hover:bg-[#3c3c3c] active:bg-[#2a2d2e] text-[#cccccc]",
18
+ "bg-transparent hover:bg-[var(--bg-hover)] active:opacity-80 text-[var(--text-main)]",
19
19
  danger:
20
20
  "bg-[#c72e24] hover:bg-[#a0251d] active:bg-[#8a1f18] text-white shadow-sm",
21
21
  success:
@@ -4,7 +4,7 @@ import { X } from "lucide-react";
4
4
  import { cn } from "@/lib/utils";
5
5
 
6
6
  export const inputVariants = cva(
7
- "w-full bg-[#1e1e1e] text-[#cccccc] placeholder:text-[#6e6e6e] border border-[#3e3e42] rounded-[3px] outline-none transition-colors duration-150 focus:border-[#007acc] focus:ring-1 focus:ring-[#007acc] disabled:bg-[#252526] disabled:text-[#6e6e6e] disabled:cursor-not-allowed",
7
+ "w-full bg-[var(--bg-input,var(--bg-card-inner))] text-[var(--text-main)] placeholder:text-[var(--text-muted)] border border-[var(--border-card)] rounded-[3px] outline-none transition-colors duration-150 focus:border-[var(--accent-primary)] focus:ring-1 focus:ring-[var(--accent-primary)] disabled:opacity-60 disabled:cursor-not-allowed",
8
8
  {
9
9
  variants: {
10
10
  inputSize: {
@@ -45,7 +45,7 @@ export const Modal = ({
45
45
  >
46
46
  <div
47
47
  className={cn(
48
- "relative w-full bg-[#252526] border border-[#3e3e42] rounded-md shadow-2xl flex flex-col max-h-[90vh] overflow-hidden text-[#cccccc]",
48
+ "relative w-full bg-[var(--bg-editor)] border border-[var(--border-card)] rounded-md shadow-2xl flex flex-col max-h-[90vh] overflow-hidden text-[var(--text-main)]",
49
49
  modalSizes[size],
50
50
  className
51
51
  )}
@@ -55,22 +55,22 @@ export const Modal = ({
55
55
  >
56
56
  {/* Header */}
57
57
  {(title || description) && (
58
- <div className="flex items-start justify-between px-4 py-3 border-b border-[#3e3e42] bg-[#1e1e1e]">
58
+ <div className="flex items-start justify-between px-4 py-3 border-b border-[var(--border-subtle)] bg-[var(--bg-card)]">
59
59
  <div className="flex flex-col gap-0.5">
60
60
  {title && (
61
- <h3 className="text-[13px] font-semibold text-white m-0 tracking-normal">
61
+ <h3 className="text-[13px] font-semibold text-[var(--text-bright)] m-0 tracking-normal">
62
62
  {title}
63
63
  </h3>
64
64
  )}
65
65
  {description && (
66
- <p className="text-[11px] text-[#8c8c8c] m-0">{description}</p>
66
+ <p className="text-[11px] text-[var(--text-muted)] m-0">{description}</p>
67
67
  )}
68
68
  </div>
69
69
  <Button
70
70
  variant="ghost"
71
71
  size="icon-sm"
72
72
  onClick={onClose}
73
- className="text-[#8c8c8c] hover:text-white"
73
+ className="text-[var(--text-muted)] hover:text-[var(--text-bright)] hover:bg-[var(--bg-hover)]"
74
74
  title="Close (Esc)"
75
75
  >
76
76
  <X className="w-3.5 h-3.5" />
@@ -83,7 +83,7 @@ export const Modal = ({
83
83
 
84
84
  {/* Footer */}
85
85
  {footer && (
86
- <div className="flex items-center justify-end gap-2 px-4 py-3 border-t border-[#3e3e42] bg-[#1e1e1e]">
86
+ <div className="flex items-center justify-end gap-2 px-4 py-3 border-t border-[var(--border-subtle)] bg-[var(--bg-card)]">
87
87
  {footer}
88
88
  </div>
89
89
  )}
@@ -4,7 +4,7 @@ import { ChevronDown } from "lucide-react";
4
4
  import { cn } from "@/lib/utils";
5
5
 
6
6
  export const selectVariants = cva(
7
- "w-full appearance-none bg-[#1e1e1e] text-[#cccccc] border border-[#3e3e42] rounded-[3px] outline-none transition-colors duration-150 focus:border-[#007acc] focus:ring-1 focus:ring-[#007acc] disabled:bg-[#252526] disabled:text-[#6e6e6e] disabled:cursor-not-allowed cursor-pointer pr-7",
7
+ "w-full appearance-none bg-[var(--bg-input,var(--bg-card-inner))] text-[var(--text-main)] border border-[var(--border-card)] rounded-[3px] outline-none transition-colors duration-150 focus:border-[var(--accent-primary)] focus:ring-1 focus:ring-[var(--accent-primary)] disabled:opacity-60 disabled:cursor-not-allowed cursor-pointer pr-7",
8
8
  {
9
9
  variants: {
10
10
  selectSize: {
@@ -55,14 +55,14 @@ export const Select = React.forwardRef(
55
55
  key={String(opt.value)}
56
56
  value={opt.value}
57
57
  disabled={opt.disabled}
58
- className="bg-[#1e1e1e] text-[#cccccc] py-1"
58
+ className="bg-[var(--bg-card)] text-[var(--text-main)] py-1"
59
59
  >
60
60
  {opt.label}
61
61
  </option>
62
62
  ))
63
63
  : children}
64
64
  </select>
65
- <div className="absolute right-2 flex items-center pointer-events-none text-[#8c8c8c]">
65
+ <div className="absolute right-2 flex items-center pointer-events-none text-[var(--text-muted)]">
66
66
  <ChevronDown className="w-3.5 h-3.5" />
67
67
  </div>
68
68
  </div>