@mova-ui/react 0.4.1 → 0.4.4

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 (478) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +477 -829
  3. package/dist/styles.css +116 -1
  4. package/dist/ui/ai/ai-context-meter.d.ts +2 -1
  5. package/dist/ui/ai/ai-sources.d.ts +2 -1
  6. package/dist/ui/ai/ai-task-list.d.ts +2 -1
  7. package/dist/ui/ai/ai-tool-call.d.ts +2 -1
  8. package/package.json +1 -1
  9. package/registry/1.json +1 -1
  10. package/registry/10.json +1 -1
  11. package/registry/11.json +1 -1
  12. package/registry/12.json +1 -1
  13. package/registry/13.json +1 -1
  14. package/registry/14.json +1 -1
  15. package/registry/15.json +1 -1
  16. package/registry/16.json +1 -1
  17. package/registry/17.json +1 -1
  18. package/registry/18.json +1 -1
  19. package/registry/19.json +1 -1
  20. package/registry/2.json +1 -1
  21. package/registry/20.json +1 -1
  22. package/registry/21.json +1 -1
  23. package/registry/22.json +1 -1
  24. package/registry/23.json +1 -1
  25. package/registry/24.json +1 -1
  26. package/registry/25.json +1 -1
  27. package/registry/26.json +1 -1
  28. package/registry/27.json +1 -1
  29. package/registry/28.json +1 -1
  30. package/registry/29.json +1 -1
  31. package/registry/3.json +1 -1
  32. package/registry/30.json +1 -1
  33. package/registry/31.json +1 -1
  34. package/registry/32.json +1 -1
  35. package/registry/33.json +1 -1
  36. package/registry/34.json +1 -1
  37. package/registry/35.json +1 -1
  38. package/registry/36.json +1 -1
  39. package/registry/37.json +1 -1
  40. package/registry/4.json +1 -1
  41. package/registry/5.json +1 -1
  42. package/registry/6.json +1 -1
  43. package/registry/7.json +1 -1
  44. package/registry/8.json +1 -1
  45. package/registry/9.json +1 -1
  46. package/registry/ab-segmented-tabs.json +1 -1
  47. package/registry/accordion-blind.json +1 -1
  48. package/registry/accordion-loader.json +1 -1
  49. package/registry/ai-approval-card.json +2 -2
  50. package/registry/ai-code-block.json +2 -2
  51. package/registry/ai-context-meter.json +2 -2
  52. package/registry/ai-fine-tune-card.json +2 -2
  53. package/registry/ai-prompt-bar.json +2 -2
  54. package/registry/ai-sidebar-nav.json +2 -2
  55. package/registry/ai-sources.json +2 -2
  56. package/registry/ai-suggestions.json +1 -1
  57. package/registry/ai-task-list.json +2 -2
  58. package/registry/ai-tool-call.json +2 -2
  59. package/registry/analyzing-image.json +1 -1
  60. package/registry/animated-sidebar.json +1 -1
  61. package/registry/animated-tags.json +1 -1
  62. package/registry/app-icon-load.json +1 -1
  63. package/registry/apple-breathe.json +1 -1
  64. package/registry/apple-equalizer.json +1 -1
  65. package/registry/apple-icon-morph.json +1 -1
  66. package/registry/apple-pulse-dots.json +1 -1
  67. package/registry/apple-scale-pulse.json +1 -1
  68. package/registry/apple-sound-wave.json +1 -1
  69. package/registry/apple-text-reveal.json +1 -1
  70. package/registry/apple-unlock.json +1 -1
  71. package/registry/arc-tracer.json +1 -1
  72. package/registry/bar-cascade.json +1 -1
  73. package/registry/bar-sweep.json +1 -1
  74. package/registry/blur-text.json +1 -1
  75. package/registry/blur-up-char.json +1 -1
  76. package/registry/blur-up-word.json +1 -1
  77. package/registry/bobbing-dots.json +1 -1
  78. package/registry/bookmark-corner-peel.json +1 -1
  79. package/registry/bookmark-save-pill.json +1 -1
  80. package/registry/bookmark-toggle.json +1 -1
  81. package/registry/border-trail-loading.json +1 -1
  82. package/registry/bounce-dots.json +1 -1
  83. package/registry/bounce-in-char.json +1 -1
  84. package/registry/bouncing-bars.json +1 -1
  85. package/registry/bouncing-dots.json +1 -1
  86. package/registry/bouncing-lines.json +1 -1
  87. package/registry/bouncing-square.json +1 -1
  88. package/registry/breathe-ring.json +1 -1
  89. package/registry/breathing-glow.json +1 -1
  90. package/registry/breathing-square.json +1 -1
  91. package/registry/btn-1.json +1 -1
  92. package/registry/btn-10.json +1 -1
  93. package/registry/btn-11.json +1 -1
  94. package/registry/btn-12.json +1 -1
  95. package/registry/btn-13.json +1 -1
  96. package/registry/btn-14.json +1 -1
  97. package/registry/btn-15.json +1 -1
  98. package/registry/btn-16.json +1 -1
  99. package/registry/btn-17.json +1 -1
  100. package/registry/btn-18.json +1 -1
  101. package/registry/btn-19.json +1 -1
  102. package/registry/btn-2.json +1 -1
  103. package/registry/btn-20.json +1 -1
  104. package/registry/btn-21.json +1 -1
  105. package/registry/btn-22.json +1 -1
  106. package/registry/btn-23.json +1 -1
  107. package/registry/btn-24.json +1 -1
  108. package/registry/btn-25.json +1 -1
  109. package/registry/btn-26.json +1 -1
  110. package/registry/btn-27.json +1 -1
  111. package/registry/btn-28.json +1 -1
  112. package/registry/btn-29.json +1 -1
  113. package/registry/btn-3.json +1 -1
  114. package/registry/btn-30.json +1 -1
  115. package/registry/btn-31.json +1 -1
  116. package/registry/btn-32.json +1 -1
  117. package/registry/btn-33.json +1 -1
  118. package/registry/btn-34.json +1 -1
  119. package/registry/btn-35.json +1 -1
  120. package/registry/btn-36.json +1 -1
  121. package/registry/btn-37.json +1 -1
  122. package/registry/btn-4.json +1 -1
  123. package/registry/btn-5.json +1 -1
  124. package/registry/btn-6.json +1 -1
  125. package/registry/btn-7.json +1 -1
  126. package/registry/btn-8.json +1 -1
  127. package/registry/btn-9.json +1 -1
  128. package/registry/button-slide-arrow.json +1 -1
  129. package/registry/cacheable-bandwidth-cost.json +1 -1
  130. package/registry/card-arc-5.json +1 -1
  131. package/registry/card-arc-7.json +1 -1
  132. package/registry/card-carousel-mono.json +1 -1
  133. package/registry/card-carousel.json +1 -1
  134. package/registry/card-cascade-stagger.json +1 -1
  135. package/registry/card-corner-fan.json +1 -1
  136. package/registry/card-cover-flow-mono.json +1 -1
  137. package/registry/card-cover-flow.json +1 -1
  138. package/registry/card-deck-cascade.json +1 -1
  139. package/registry/card-glance-preview.json +1 -1
  140. package/registry/card-hover.json +1 -1
  141. package/registry/card-linear-spread.json +1 -1
  142. package/registry/card-long-arc-5.json +1 -1
  143. package/registry/card-scatter-spread.json +1 -1
  144. package/registry/card-stack-peel.json +1 -1
  145. package/registry/card-stamp-arc.json +1 -1
  146. package/registry/card-time-machine-mono.json +1 -1
  147. package/registry/card-time-machine.json +1 -1
  148. package/registry/card-wheel-fan.json +1 -1
  149. package/registry/category-select.json +1 -1
  150. package/registry/character-stagger.json +1 -1
  151. package/registry/checkbox-draw.json +1 -1
  152. package/registry/checkmark-draw.json +1 -1
  153. package/registry/circle-toggle.json +1 -1
  154. package/registry/circuit-trace-draw.json +1 -1
  155. package/registry/circular-bars.json +1 -1
  156. package/registry/circular-create-button.json +1 -1
  157. package/registry/classic-spinner.json +1 -1
  158. package/registry/classic-toggle.json +1 -1
  159. package/registry/clock-spinner.json +1 -1
  160. package/registry/comet-spinner.json +1 -1
  161. package/registry/compass-needle-deflect.json +1 -1
  162. package/registry/concentric-pulse.json +1 -1
  163. package/registry/concentric-ring.json +1 -1
  164. package/registry/concentric-squares.json +1 -1
  165. package/registry/context-menu.json +1 -1
  166. package/registry/conveyor-loop.json +1 -1
  167. package/registry/credit-score-barcode-meter.json +1 -1
  168. package/registry/cross-spinner.json +1 -1
  169. package/registry/cube-flip-spring.json +1 -1
  170. package/registry/cursor-trail.json +1 -1
  171. package/registry/dash-ring.json +1 -1
  172. package/registry/dashed-spiral.json +1 -1
  173. package/registry/date-position-selector.json +1 -1
  174. package/registry/dia-text-reveal.json +1 -1
  175. package/registry/diamond-grid.json +1 -1
  176. package/registry/diamond-rotate-spring.json +1 -1
  177. package/registry/dislike-toggle.json +1 -1
  178. package/registry/dither-book.json +1 -1
  179. package/registry/domino-cascade.json +1 -1
  180. package/registry/dot-spinner.json +1 -1
  181. package/registry/dots-ring.json +1 -1
  182. package/registry/double-bounce-toggle.json +1 -1
  183. package/registry/double-ring.json +1 -1
  184. package/registry/download-icons.json +1 -1
  185. package/registry/drop-dot.json +1 -1
  186. package/registry/drop-in-char.json +1 -1
  187. package/registry/droplet-squish.json +1 -1
  188. package/registry/dual-arc.json +1 -1
  189. package/registry/dual-magnet-dipole.json +1 -1
  190. package/registry/dynamic-island.json +1 -1
  191. package/registry/elastic-bars.json +1 -1
  192. package/registry/elastic-square.json +1 -1
  193. package/registry/elastic-tag-snap.json +1 -1
  194. package/registry/error-shake.json +1 -1
  195. package/registry/expanding-cross.json +1 -1
  196. package/registry/expanding-icon-tabs.json +1 -1
  197. package/registry/face-id-scan.json +1 -1
  198. package/registry/fade-arc.json +1 -1
  199. package/registry/fade-dots.json +1 -1
  200. package/registry/fade-down.json +1 -1
  201. package/registry/fade-in-char.json +1 -1
  202. package/registry/fade-in-text.json +1 -1
  203. package/registry/fade-in-word.json +1 -1
  204. package/registry/fade-in.json +1 -1
  205. package/registry/fade-up.json +1 -1
  206. package/registry/file-upload-dropzone.json +1 -1
  207. package/registry/filter-tag-pill.json +1 -1
  208. package/registry/flip-square.json +1 -1
  209. package/registry/flip-x-char.json +1 -1
  210. package/registry/flip-y-char.json +1 -1
  211. package/registry/float-char.json +1 -1
  212. package/registry/float-word.json +1 -1
  213. package/registry/floating-diamonds.json +1 -1
  214. package/registry/floating-label-input.json +1 -1
  215. package/registry/fluid-bars.json +1 -1
  216. package/registry/fluid-diamond.json +1 -1
  217. package/registry/fluid-dot-orbit.json +1 -1
  218. package/registry/fluid-skeleton.json +1 -1
  219. package/registry/focus-blur.json +1 -1
  220. package/registry/form-submit-button.json +1 -1
  221. package/registry/french-doors-3d.json +1 -1
  222. package/registry/gear-tooth-step.json +1 -1
  223. package/registry/gears.json +1 -1
  224. package/registry/gelatin-wobble.json +1 -1
  225. package/registry/geometric-iris-shutter.json +1 -1
  226. package/registry/glassmorphic-card.json +1 -1
  227. package/registry/glow-button.json +1 -1
  228. package/registry/glow-text.json +1 -1
  229. package/registry/gooey-popover.json +1 -1
  230. package/registry/gradient-arc.json +1 -1
  231. package/registry/gradient-shimmer.json +1 -1
  232. package/registry/grid-dots.json +1 -1
  233. package/registry/haptic-ring.json +1 -1
  234. package/registry/heartbeat.json +1 -1
  235. package/registry/hex-lattice-draw.json +1 -1
  236. package/registry/hexagon-spinner.json +1 -1
  237. package/registry/hourglass.json +1 -1
  238. package/registry/hover-lift-char.json +1 -1
  239. package/registry/hover-lift-word.json +1 -1
  240. package/registry/hover-link-card.json +1 -1
  241. package/registry/hover-scale-char.json +1 -1
  242. package/registry/hover-scale-word.json +1 -1
  243. package/registry/inertia-skid-stop.json +1 -1
  244. package/registry/infinity-path.json +1 -1
  245. package/registry/input-focus-glow.json +1 -1
  246. package/registry/inset-action-button.json +1 -1
  247. package/registry/inset-button.json +1 -1
  248. package/registry/intersecting-rings.json +1 -1
  249. package/registry/ios-spinner.json +1 -1
  250. package/registry/kinetic-metronome-tick.json +1 -1
  251. package/registry/kinetic-tension-capsule.json +1 -1
  252. package/registry/light-dark-morph.json +1 -1
  253. package/registry/like-toggle.json +1 -1
  254. package/registry/line-spinner.json +1 -1
  255. package/registry/liquid-dots.json +1 -1
  256. package/registry/mac-terminal.json +1 -1
  257. package/registry/magnetic-button.json +1 -1
  258. package/registry/magnetic-disks.json +1 -1
  259. package/registry/magnetic-dots.json +1 -1
  260. package/registry/magnetic-slide-btn.json +1 -1
  261. package/registry/manifest.json +656 -650
  262. package/registry/matrix-grid-loader.json +1 -1
  263. package/registry/minimal-triangle.json +1 -1
  264. package/registry/modular-tile-snap.json +1 -1
  265. package/registry/mono-activity-blue.json +1 -1
  266. package/registry/mono-activity-green.json +1 -1
  267. package/registry/mono-activity-purple.json +1 -1
  268. package/registry/mono-heatmap.json +1 -1
  269. package/registry/mono-rounded-area.json +1 -1
  270. package/registry/mono-rounded-bar.json +1 -1
  271. package/registry/mono-rounded-bubble.json +1 -1
  272. package/registry/mono-rounded-bullet.json +1 -1
  273. package/registry/mono-rounded-candlestick.json +1 -1
  274. package/registry/mono-rounded-composed.json +1 -1
  275. package/registry/mono-rounded-donut.json +1 -1
  276. package/registry/mono-rounded-funnel.json +1 -1
  277. package/registry/mono-rounded-gauge-arc.json +1 -1
  278. package/registry/mono-rounded-heatmap.json +1 -1
  279. package/registry/mono-rounded-kpi.json +1 -1
  280. package/registry/mono-rounded-line.json +1 -1
  281. package/registry/mono-rounded-meter.json +1 -1
  282. package/registry/mono-rounded-polar.json +1 -1
  283. package/registry/mono-rounded-pyramid.json +1 -1
  284. package/registry/mono-rounded-radar.json +1 -1
  285. package/registry/mono-rounded-radial-gauge.json +1 -1
  286. package/registry/mono-rounded-radial-group.json +1 -1
  287. package/registry/mono-rounded-range.json +1 -1
  288. package/registry/mono-rounded-sankey.json +1 -1
  289. package/registry/mono-rounded-scatter.json +1 -1
  290. package/registry/mono-rounded-sparkline.json +1 -1
  291. package/registry/mono-rounded-stacked-bar.json +1 -1
  292. package/registry/mono-rounded-step.json +1 -1
  293. package/registry/mono-rounded-stream.json +1 -1
  294. package/registry/mono-rounded-treemap.json +1 -1
  295. package/registry/mono-rounded-waterfall.json +1 -1
  296. package/registry/mono-stock.json +1 -1
  297. package/registry/morph-action-pill.json +1 -1
  298. package/registry/morph-dot-ring.json +1 -1
  299. package/registry/morph-loader.json +1 -1
  300. package/registry/morph-toggle.json +1 -1
  301. package/registry/morphing-bars.json +1 -1
  302. package/registry/morphing-infinity.json +1 -1
  303. package/registry/morphing-ring.json +1 -1
  304. package/registry/morphing-shape.json +1 -1
  305. package/registry/mouse-follow.json +1 -1
  306. package/registry/multi-select-chips.json +1 -1
  307. package/registry/multi-tab-bar.json +1 -1
  308. package/registry/neon-sign-draw.json +1 -1
  309. package/registry/nested-orbital-gimbal.json +1 -1
  310. package/registry/network-telemetry-matrix.json +1 -1
  311. package/registry/newtons-cradle.json +1 -1
  312. package/registry/noise-decibel-level.json +1 -1
  313. package/registry/obsidian-liquid-wave.json +1 -1
  314. package/registry/offset-rings.json +1 -1
  315. package/registry/orbiting-circles.json +1 -1
  316. package/registry/orbiting-dot.json +1 -1
  317. package/registry/origami-envelope-unfold.json +1 -1
  318. package/registry/origami-shape.json +1 -1
  319. package/registry/otp-input.json +1 -1
  320. package/registry/overview-bar-scrubber-card.json +1 -1
  321. package/registry/page-transition.json +1 -1
  322. package/registry/page-turn-curl.json +1 -1
  323. package/registry/password-toggle.json +1 -1
  324. package/registry/pendulum-bubble-level.json +1 -1
  325. package/registry/pendulum.json +1 -1
  326. package/registry/perspective-flip-stage.json +1 -1
  327. package/registry/perspective-flip.json +1 -1
  328. package/registry/perspective-layout-switcher.json +1 -1
  329. package/registry/physics-dock.json +1 -1
  330. package/registry/pill-tabs.json +1 -1
  331. package/registry/plus-minus-toggle.json +1 -1
  332. package/registry/presets.json +1 -1
  333. package/registry/prism-block-stack.json +1 -1
  334. package/registry/progress-indicator-piano.json +1 -1
  335. package/registry/progress-indicator.json +1 -1
  336. package/registry/progress-stepper.json +1 -1
  337. package/registry/pulsating-dots.json +1 -1
  338. package/registry/pulse-char.json +1 -1
  339. package/registry/pulse-dot.json +1 -1
  340. package/registry/pulse-dots.json +1 -1
  341. package/registry/pulse-square.json +1 -1
  342. package/registry/pulse-word.json +1 -1
  343. package/registry/pulse.json +1 -1
  344. package/registry/pumping-heart.json +1 -1
  345. package/registry/pyramid-block-build.json +1 -1
  346. package/registry/radar-sweep.json +1 -1
  347. package/registry/radial-iris-mask.json +1 -1
  348. package/registry/radial-spinner.json +1 -1
  349. package/registry/radio-scale.json +1 -1
  350. package/registry/range-slider.json +1 -1
  351. package/registry/receipt-tape-print.json +1 -1
  352. package/registry/rectangle-toggle.json +1 -1
  353. package/registry/repost-toggle.json +1 -1
  354. package/registry/reveal-text.json +1 -1
  355. package/registry/ribbon-banner-slide.json +1 -1
  356. package/registry/ring-sweep.json +1 -1
  357. package/registry/ripple-effect.json +1 -1
  358. package/registry/rise-up-word.json +1 -1
  359. package/registry/roller-blind-drop.json +1 -1
  360. package/registry/rolling-tumble.json +1 -1
  361. package/registry/rotate-in-char.json +1 -1
  362. package/registry/rotating-cross.json +1 -1
  363. package/registry/rotating-louvers.json +1 -1
  364. package/registry/rotating-triangle.json +1 -1
  365. package/registry/rudder-issue-board.json +2 -2
  366. package/registry/sales-analytics-dual-bars.json +1 -1
  367. package/registry/sales-overview-radial-dashboard.json +1 -1
  368. package/registry/sales-target-segmented-arc.json +1 -1
  369. package/registry/scale-in-char.json +1 -1
  370. package/registry/scale-in-text.json +1 -1
  371. package/registry/scale-in-word.json +1 -1
  372. package/registry/scale-in.json +1 -1
  373. package/registry/scramble-text.json +1 -1
  374. package/registry/scroll-canvas-unroll.json +1 -1
  375. package/registry/scroll-reveal.json +1 -1
  376. package/registry/search-expand.json +1 -1
  377. package/registry/segmented-arc-meter.json +1 -1
  378. package/registry/segmented-link-stretch.json +1 -1
  379. package/registry/segmented-step-bar.json +1 -1
  380. package/registry/segmented-stepper-dots.json +1 -1
  381. package/registry/select-dropdown.json +1 -1
  382. package/registry/server-performance-step-bars.json +1 -1
  383. package/registry/shape-shift-grid.json +1 -1
  384. package/registry/shimmer-line.json +1 -1
  385. package/registry/shimmer-text.json +1 -1
  386. package/registry/shutter-slide.json +1 -1
  387. package/registry/shutter-step-slices.json +1 -1
  388. package/registry/siri-wave.json +1 -1
  389. package/registry/skeleton-loader.json +1 -1
  390. package/registry/skeleton.json +1 -1
  391. package/registry/skew-x-char.json +1 -1
  392. package/registry/slide-down-char.json +1 -1
  393. package/registry/slide-down-word.json +1 -1
  394. package/registry/slide-left-char.json +1 -1
  395. package/registry/slide-left.json +1 -1
  396. package/registry/slide-right-char.json +1 -1
  397. package/registry/slide-right.json +1 -1
  398. package/registry/slide-up-char.json +1 -1
  399. package/registry/slide-up-text.json +1 -1
  400. package/registry/slide-up-word.json +1 -1
  401. package/registry/sliding-bars.json +1 -1
  402. package/registry/slinky-coil.json +1 -1
  403. package/registry/smart-card-dispenser.json +1 -1
  404. package/registry/smooth-dot-shift.json +1 -1
  405. package/registry/smooth-ring.json +1 -1
  406. package/registry/smooth-rounded-square.json +1 -1
  407. package/registry/solid-switch.json +1 -1
  408. package/registry/spatial-door-portal.json +1 -1
  409. package/registry/spinning-squares.json +1 -1
  410. package/registry/spiral-spinner.json +1 -1
  411. package/registry/split-gate-reveal.json +1 -1
  412. package/registry/spotlight.json +1 -1
  413. package/registry/spring-bars.json +1 -1
  414. package/registry/spring-dot-matrix.json +1 -1
  415. package/registry/spring-hexagon.json +1 -1
  416. package/registry/spring-ring-expand.json +1 -1
  417. package/registry/spring-text-pop.json +1 -1
  418. package/registry/spring-text.json +1 -1
  419. package/registry/square-accordion.json +1 -1
  420. package/registry/square-grid.json +1 -1
  421. package/registry/square-snake.json +1 -1
  422. package/registry/square-spinner.json +1 -1
  423. package/registry/squash-sphere.json +1 -1
  424. package/registry/stacked-bar-pulse.json +1 -1
  425. package/registry/stagger-text.json +1 -1
  426. package/registry/staggered-glass-curtain.json +1 -1
  427. package/registry/sticky-note-peel.json +1 -1
  428. package/registry/sticky-reveal.json +1 -1
  429. package/registry/stretch-x-char.json +1 -1
  430. package/registry/stretch-y-char.json +1 -1
  431. package/registry/stroke-waveform.json +1 -1
  432. package/registry/submenu-flyout.json +1 -1
  433. package/registry/success-check.json +1 -1
  434. package/registry/sudden-brake.json +1 -1
  435. package/registry/swapping-dots.json +1 -1
  436. package/registry/swing-word.json +1 -1
  437. package/registry/swirling-spinner.json +1 -1
  438. package/registry/symmetric-wave.json +1 -1
  439. package/registry/terminal-loader.json +1 -1
  440. package/registry/text-blink.json +1 -1
  441. package/registry/text-dots.json +1 -1
  442. package/registry/text-morph.json +1 -1
  443. package/registry/text-reveal.json +1 -1
  444. package/registry/text-shimmer-wave.json +1 -1
  445. package/registry/text-shimmer.json +1 -1
  446. package/registry/textarea-auto-grow.json +1 -1
  447. package/registry/theme-toggle.json +1 -1
  448. package/registry/tilt-card.json +1 -1
  449. package/registry/timer-preparation-segmented.json +1 -1
  450. package/registry/tracking-in-text.json +1 -1
  451. package/registry/tracking-out-text.json +1 -1
  452. package/registry/trailing-dots.json +1 -1
  453. package/registry/triple-dot-spinner.json +1 -1
  454. package/registry/twin-orbit.json +1 -1
  455. package/registry/typewriter-text.json +1 -1
  456. package/registry/typing-indicator.json +1 -1
  457. package/registry/typing.json +1 -1
  458. package/registry/use-mouse-position.json +1 -1
  459. package/registry/use-reduced-motion.json +1 -1
  460. package/registry/use-scroll-progress.json +1 -1
  461. package/registry/use-stagger.json +1 -1
  462. package/registry/use-web-haptics.json +1 -1
  463. package/registry/users-growth-pill-progress.json +1 -1
  464. package/registry/utils.json +1 -1
  465. package/registry/vertical-wheel-counter.json +1 -1
  466. package/registry/views-hourly-wave-chart.json +1 -1
  467. package/registry/wandering-cube.json +1 -1
  468. package/registry/wandering-eyes.json +1 -1
  469. package/registry/watch-spinner.json +1 -1
  470. package/registry/wave-dots.json +1 -1
  471. package/registry/wave-physics-loader.json +1 -1
  472. package/registry/wave-reveal.json +1 -1
  473. package/registry/waveform-loader.json +1 -1
  474. package/registry/word-reveal.json +1 -1
  475. package/registry/zig-zag-pulse.json +1 -1
  476. package/registry/zoom-in-text.json +1 -1
  477. package/registry/zoom-in.json +1 -1
  478. package/registry/zoom-out-text.json +1 -1
package/dist/index.js CHANGED
@@ -410,18 +410,18 @@ function ApprovalCard({
410
410
  };
411
411
  if (questions.length === 0) return /* @__PURE__ */ jsx("div", { role: "status", className: "text-[13px]", children: "No questions to approve." });
412
412
  if (!open) {
413
- return /* @__PURE__ */ jsx("button", { ref: reopenRef, type: "button", onClick: () => setOpen(true), className: "rounded-[8px] bg-[var(--surface)] px-3 py-2 text-[12.5px] font-medium text-[var(--ink)] shadow-[var(--shadow-btn)] transition-colors duration-150 hover:bg-[var(--hover)]", children: "Open approval" });
413
+ return /* @__PURE__ */ jsx("button", { ref: reopenRef, type: "button", onClick: () => setOpen(true), className: "rounded-[8px] bg-[var(--mova-ai-surface,#fff)] px-3 py-2 text-[12.5px] font-medium text-[var(--mova-ai-ink,#202020)] shadow-[var(--mova-ai-shadow-btn,none)] transition-colors duration-150 hover:bg-[var(--mova-ai-hover,#f1f1f1)]", children: "Open approval" });
414
414
  }
415
415
  if (sent) {
416
416
  return /* @__PURE__ */ jsxs("div", { ref: sentStatusRef, tabIndex: -1, role: "status", className: "flex w-full max-w-80 flex-wrap items-center gap-3", style: { animation: "mova-ai-approval-card-pop-in 260ms cubic-bezier(0.23,1,0.32,1) both" }, children: [
417
- /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 rounded-full bg-[var(--green-tint)] py-1 pr-2.5 pl-1 text-[12.5px] font-medium text-[var(--green)]", children: [
418
- /* @__PURE__ */ jsx("span", { className: "flex size-4.5 items-center justify-center rounded-full bg-[var(--green)] text-white", children: /* @__PURE__ */ jsx("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M20 6L9 17l-5-5" }) }) }),
417
+ /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 rounded-full bg-[var(--mova-ai-success-tint,#e8f3ec)] py-1 pr-2.5 pl-1 text-[12.5px] font-medium text-[var(--mova-ai-success,#28734d)]", children: [
418
+ /* @__PURE__ */ jsx("span", { className: "flex size-4.5 items-center justify-center rounded-full bg-[var(--mova-ai-success,#28734d)] text-white", children: /* @__PURE__ */ jsx("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M20 6L9 17l-5-5" }) }) }),
419
419
  t.sentMessage
420
420
  ] }),
421
- resettable && /* @__PURE__ */ jsx("button", { type: "button", onClick: reset, className: "text-[12px] font-medium text-[var(--ink-3)] transition-colors duration-150 hover:text-[var(--ink)]", children: "Start over" })
421
+ resettable && /* @__PURE__ */ jsx("button", { type: "button", onClick: reset, className: "text-[12px] font-medium text-[var(--mova-ai-ink-muted,#858585)] transition-colors duration-150 hover:text-[var(--mova-ai-ink,#202020)]", children: "Start over" })
422
422
  ] });
423
423
  }
424
- return /* @__PURE__ */ jsx("div", { className: "w-full max-w-80", children: /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden rounded-[10px] bg-[var(--surface)] shadow-[var(--shadow-card)]", style: { animation: "mova-ai-approval-card-fade-up 380ms cubic-bezier(0.23,1,0.32,1) both" }, children: [
424
+ return /* @__PURE__ */ jsx("div", { className: "w-full max-w-80", children: /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden rounded-lg border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] text-[color:var(--mova-ai-ink,#202020)] shadow-[var(--mova-ai-shadow-card,none)]", style: { animation: "mova-ai-approval-card-fade-up 380ms cubic-bezier(0.23,1,0.32,1) both" }, children: [
425
425
  /* @__PURE__ */ jsx(
426
426
  "button",
427
427
  {
@@ -431,7 +431,7 @@ function ApprovalCard({
431
431
  if (advanceTimer.current) clearTimeout(advanceTimer.current);
432
432
  setOpen(false);
433
433
  },
434
- className: "primitive-icon-button absolute right-2.5 top-2.5 z-10 text-[var(--ink-3)] transition-colors duration-100 hover:bg-[var(--hover)] hover:text-[var(--ink)]",
434
+ className: "primitive-icon-button absolute right-2.5 top-2.5 z-10 text-[var(--mova-ai-ink-muted,#858585)] transition-colors duration-100 hover:bg-[var(--mova-ai-hover,#f1f1f1)] hover:text-[var(--mova-ai-ink,#202020)]",
435
435
  children: /* @__PURE__ */ jsx(Ico, { size: 14, sw: 2.2, path: /* @__PURE__ */ jsx("path", { d: "M18 6L6 18M6 6l12 12" }) })
436
436
  }
437
437
  ),
@@ -471,8 +471,8 @@ function ApprovalCard({
471
471
  "aria-hidden": active ? void 0 : true,
472
472
  style: questionStyle,
473
473
  children: [
474
- /* @__PURE__ */ jsx("div", { className: "pr-7 text-[14px] font-medium text-[var(--ink)]", children: question.q }),
475
- /* @__PURE__ */ jsxs(GlideMenu, { className: "mt-2.5 flex flex-col gap-1", highlightClassName: "inset-x-0 rounded-[8px] bg-[var(--hover)]", children: [
474
+ /* @__PURE__ */ jsx("div", { className: "pr-7 text-[14px] font-medium text-[var(--mova-ai-ink,#202020)]", children: question.q }),
475
+ /* @__PURE__ */ jsxs(GlideMenu, { className: "mt-2.5 flex flex-col gap-1", highlightClassName: "inset-x-0 rounded-[8px] bg-[var(--mova-ai-hover,#f1f1f1)]", children: [
476
476
  question.options.map((option, i) => {
477
477
  const on = picked.includes(i);
478
478
  return /* @__PURE__ */ jsxs(
@@ -492,11 +492,11 @@ function ApprovalCard({
492
492
  {
493
493
  className: `flex size-4 shrink-0 items-center justify-center transition-colors duration-200
494
494
  ${question.type === "radio" ? "rounded-full" : "rounded-[5px]"}
495
- ${on ? "bg-[var(--ink)] text-[var(--canvas)]" : "shadow-[inset_0_0_0_1.5px_var(--line-strong)] text-transparent"}`,
496
- children: question.type === "radio" ? /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-[var(--canvas)] transition-transform duration-200", style: { transform: on ? "scale(1)" : "scale(0)" } }) : /* @__PURE__ */ jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M20 6L9 17l-5-5" }) })
495
+ ${on ? "bg-[var(--mova-ai-ink,#202020)] text-[var(--mova-ai-canvas,#f4f4f4)]" : "shadow-[inset_0_0_0_1.5px_var(--mova-ai-border-strong,#c8c8c8)] text-transparent"}`,
496
+ children: question.type === "radio" ? /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-[var(--mova-ai-canvas,#f4f4f4)] transition-transform duration-200", style: { transform: on ? "scale(1)" : "scale(0)" } }) : /* @__PURE__ */ jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M20 6L9 17l-5-5" }) })
497
497
  }
498
498
  ),
499
- /* @__PURE__ */ jsx("span", { className: `text-[13px] leading-snug transition-colors duration-200 ${on ? "text-[var(--ink)]" : "text-[var(--ink-2)]"}`, children: option })
499
+ /* @__PURE__ */ jsx("span", { className: `text-[13px] leading-snug transition-colors duration-200 ${on ? "text-[var(--mova-ai-ink,#202020)]" : "text-[var(--mova-ai-ink-secondary,#666)]"}`, children: option })
500
500
  ]
501
501
  },
502
502
  option
@@ -521,7 +521,7 @@ function ApprovalCard({
521
521
  },
522
522
  placeholder: t.customPlaceholder,
523
523
  "aria-label": "Custom answer",
524
- className: "min-w-0 flex-1 bg-transparent pl-1.5 text-[13px] text-[var(--ink)] outline-none placeholder:text-[var(--ink-3)]"
524
+ className: "min-w-0 flex-1 bg-transparent pl-1.5 text-[13px] text-[var(--mova-ai-ink,#202020)] outline-none placeholder:text-[var(--mova-ai-ink-muted,#858585)]"
525
525
  }
526
526
  ) })
527
527
  ] })
@@ -535,7 +535,7 @@ function ApprovalCard({
535
535
  }
536
536
  ) }),
537
537
  /* @__PURE__ */ jsxs("div", { className: "primitive-card-footer flex items-center justify-between gap-3", children: [
538
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 text-[var(--ink-3)]", children: [
538
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 text-[var(--mova-ai-ink-muted,#858585)]", children: [
539
539
  /* @__PURE__ */ jsx(
540
540
  "button",
541
541
  {
@@ -543,11 +543,11 @@ function ApprovalCard({
543
543
  "aria-label": "Previous question",
544
544
  disabled: qi <= 0,
545
545
  onClick: () => goTo(qi - 1),
546
- className: "flex size-[18px] items-center justify-center rounded-[5px] transition-colors duration-100 enabled:hover:text-[var(--ink)] disabled:opacity-30",
546
+ className: "flex size-[18px] items-center justify-center rounded-[5px] transition-colors duration-100 enabled:hover:text-[var(--mova-ai-ink,#202020)] disabled:opacity-30",
547
547
  children: /* @__PURE__ */ jsx(Ico, { size: 14, path: /* @__PURE__ */ jsx("path", { d: "M18 15l-6-6-6 6" }) })
548
548
  }
549
549
  ),
550
- /* @__PURE__ */ jsx("span", { className: "inline-flex items-center text-[12px] font-medium tabular-nums text-[var(--ink-3)]", style: { letterSpacing: "-0.1px", lineHeight: 1 }, children: /* @__PURE__ */ jsx(RollingDigits, { value: `${qi + 1} / ${questions.length}` }) }),
550
+ /* @__PURE__ */ jsx("span", { className: "inline-flex items-center text-[12px] font-medium tabular-nums text-[var(--mova-ai-ink-muted,#858585)]", style: { letterSpacing: "-0.1px", lineHeight: 1 }, children: /* @__PURE__ */ jsx(RollingDigits, { value: `${qi + 1} / ${questions.length}` }) }),
551
551
  /* @__PURE__ */ jsx(
552
552
  "button",
553
553
  {
@@ -555,7 +555,7 @@ function ApprovalCard({
555
555
  "aria-label": "Next question",
556
556
  disabled: last,
557
557
  onClick: () => goTo(qi + 1),
558
- className: "flex size-[18px] items-center justify-center rounded-[5px] transition-colors duration-100 enabled:hover:text-[var(--ink)] disabled:opacity-30",
558
+ className: "flex size-[18px] items-center justify-center rounded-[5px] transition-colors duration-100 enabled:hover:text-[var(--mova-ai-ink,#202020)] disabled:opacity-30",
559
559
  children: /* @__PURE__ */ jsx(Ico, { size: 14, path: /* @__PURE__ */ jsx("path", { d: "M6 9l6 6 6-6" }) })
560
560
  }
561
561
  )
@@ -574,7 +574,7 @@ function ApprovalCard({
574
574
  function GlideMenu({
575
575
  children,
576
576
  className = "",
577
- highlightClassName = "inset-x-0 rounded-[8px] bg-[var(--hover)]",
577
+ highlightClassName = "inset-x-0 rounded-[8px] bg-[var(--mova-ai-hover,#f1f1f1)]",
578
578
  rowSelector = "[data-menu-row]"
579
579
  }) {
580
580
  const ref = useRef(null);
@@ -621,116 +621,29 @@ function GlideMenu({
621
621
  );
622
622
  }
623
623
  function Button({ variant = "secondary", size = "md", className = "", ...props }) {
624
- const variants = { secondary: "bg-[var(--surface)] text-[var(--ink)] shadow-[var(--shadow-btn)] hover:bg-[var(--inset)]", ghost: "bg-[var(--hover-2)] text-[var(--ink)] hover:bg-[var(--line-strong)]", accent: "bg-[var(--accent)] text-white hover:bg-[var(--accent-ink)] shadow-[inset_0_1px_0_rgba(255,255,255,0.14)]" };
625
- return /* @__PURE__ */ jsx("button", { type: "button", className: `inline-flex items-center justify-center font-medium select-none transition-[transform,background-color,opacity] duration-150 ease-out active:scale-[0.96] disabled:opacity-50 disabled:pointer-events-none ${variants[variant]} ${size === "sm" ? "h-[27px] px-3 text-[13px] leading-none rounded-full gap-1.5" : "px-4 py-[9px] text-sm leading-none rounded-full gap-2"} ${className}`, ...props });
626
- }
627
- var scopedStyles = `.mova-ai-approval-card{
628
- --page: oklch(0.985 0.001 286.376);
629
- --canvas: oklch(0.961 0.002 247.84);
630
- --surface: oklch(1 0 0);
631
- --inset: oklch(0.979 0.002 247.839);
632
- --hover: oklch(0.97 0.002 247.839);
633
- --hover-2: oklch(0.933 0.003 247.86);
634
-
635
- --ink: oklch(0.247 0.006 258.361);
636
- --ink-2: oklch(0.506 0.01 264.477);
637
- --ink-3: oklch(0.695 0.009 264.505);
638
-
639
- --line: oklch(0.946 0.003 264.542);
640
- --line-strong: oklch(0.912 0.005 258.326);
641
- --line-soft: oklch(0.966 0.002 264.542);
642
- --grid-line: color-mix(in srgb, var(--line) 78%, transparent);
643
- --field: oklch(0.961 0.001 286.375);
644
- --stripe: oklch(0.405 0 0 / 0.075);
645
- --stripe-bg: oklch(0.97 0 0);
646
-
647
- --accent: oklch(0.626 0.205 254.947);
648
- --accent-ink: oklch(0.556 0.187 255.617);
649
- --accent-tint: oklch(0.96 0.019 252.878);
650
-
651
- --green: oklch(0.603 0.155 150.883);
652
- --green-tint: oklch(0.958 0.017 159.118);
653
- --orange: oklch(0.689 0.179 49.902);
654
- --orange-tint: oklch(0.964 0.021 67.581);
655
- --red: oklch(0.621 0.192 23.042);
656
- --red-tint: oklch(0.956 0.017 17.462);
657
-
658
- --tooltip-bg: oklch(0.272 0.008 264.435);
659
- --tooltip-fg: oklch(0.976 0.002 247.839);
660
- --tooltip-muted: oklch(0.731 0.008 260.731);
661
- --tooltip-border: oklch(0.356 0.007 264.474);
662
-
663
- --shadow-hairline: 0 0 0 1px var(--line);
664
- --shadow-btn: 0 0 0 1px var(--line-strong), var(--shadow-xs);
665
- --shadow-card: 0 0 0 1px var(--line), var(--shadow-sm);
666
- --shadow-raised: 0 0 0 1px var(--line), var(--shadow-md);
667
- --shadow-overlay: 0 0 0 1px var(--line), var(--shadow-lg);
668
- --shadow-inset-field: inset 0 1px 2px oklch(0 0 0 / 0.12);--shadow-xs: 0 0 4px 0 rgba(0, 0, 0, 0.04);--shadow-sm: 0 18px 47px 0 rgba(0, 0, 0, 0.03), 0 7.5px 19px 0 rgba(0, 0, 0, 0.02),
669
- 0 4px 10.5px 0 rgba(0, 0, 0, 0.02), 0 2.3px 5.8px 0 rgba(0, 0, 0, 0.01),
670
- 0 1.2px 3.1px 0 rgba(0, 0, 0, 0.01), 0 0.5px 1.3px 0 rgba(0, 0, 0, 0.01);--shadow-md: 0 17.54px 23.39px 0 rgba(0, 0, 0, 0.04), 0 9.4px 12.5px 0 rgba(0, 0, 0, 0.03),
671
- 0 5.25px 7px 0 rgba(0, 0, 0, 0.02), 0 2.79px 3.72px -2px rgba(0, 0, 0, 0.01),
672
- 0 1.16px 1.5px 0 rgba(0, 0, 0, 0.01);--radius-control:8px;
673
- width:100%;max-width:320px;min-width:0;font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:14px;line-height:1.5;letter-spacing:-.01em;color:var(--ink);}
674
- .mova-ai-approval-card[data-theme="dark"]{
675
- --page: oklch(0.209 0.004 264.477);
676
- --canvas: oklch(0.231 0.004 264.487);
677
- --surface: oklch(0.26 0.006 271.191);
678
- --inset: oklch(0.243 0.004 264.492);
679
- --hover: oklch(0.289 0.006 271.22);
680
- --hover-2: oklch(0.318 0.007 274.747);
681
-
682
- --ink: oklch(0.964 0.002 247.839);
683
- --ink-2: oklch(0.731 0.008 260.731);
684
- --ink-3: oklch(0.541 0.01 264.484);
685
-
686
- --line: oklch(0.308 0.006 258.354);
687
- --line-strong: oklch(0.356 0.007 264.474);
688
- --line-soft: oklch(0.278 0.006 258.354);
689
- --field: oklch(0.293 0.006 271.223);
690
- --stripe: oklch(1 0 0 / 0.055);
691
- --stripe-bg: oklch(0.226 0.004 264.485);
692
-
693
- --accent: oklch(0.68 0.173 253.301);
694
- --accent-ink: oklch(0.788 0.113 248.33);
695
- --accent-tint: oklch(0.68 0.173 253.301 / 0.16);
696
-
697
- --green: oklch(0.705 0.154 153.814);
698
- --green-tint: oklch(0.705 0.154 153.814 / 0.14);
699
- --orange: oklch(0.746 0.156 55.642);
700
- --orange-tint: oklch(0.746 0.156 55.642 / 0.14);
701
- --red: oklch(0.666 0.18 21.433);
702
- --red-tint: oklch(0.666 0.18 21.433 / 0.14);
703
-
704
- --tooltip-bg: oklch(0.182 0.004 264.459);
705
- --tooltip-fg: oklch(0.964 0.002 247.839);
706
- --tooltip-muted: oklch(0.731 0.008 260.731);
707
- --tooltip-border: oklch(0.308 0.006 258.354);
708
-
709
- --shadow-hairline: 0 0 0 1px var(--line);
710
- --shadow-btn: 0 0 0 1px oklch(1 0 0 / 0.1), 0 1px 2px oklch(0 0 0 / 0.3);
711
- --shadow-card:
712
- 0 0 0 1px oklch(1 0 0 / 0.11), 0 1px 2px oklch(0 0 0 / 0.2),
713
- 0 2px 6px oklch(0 0 0 / 0.2);
714
- --shadow-raised:
715
- 0 0 0 1px oklch(1 0 0 / 0.13), 0 2px 10px oklch(0 0 0 / 0.22);
716
- --shadow-overlay:
717
- 0 0 0 1px oklch(1 0 0 / 0.15), 0 8px 28px oklch(0 0 0 / 0.34);
718
- --shadow-inset-field: inset 0 1px 2px oklch(0 0 0 / 0.4);}
624
+ const variants = { secondary: "bg-[var(--mova-ai-surface,#fff)] text-[var(--mova-ai-ink,#202020)] shadow-[var(--mova-ai-shadow-btn,none)] hover:bg-[var(--mova-ai-inset,#f8f8f8)]", ghost: "bg-[var(--mova-ai-hover-strong,#e9e9e9)] text-[var(--mova-ai-ink,#202020)] hover:bg-[var(--mova-ai-border-strong,#c8c8c8)]", accent: "approval-accent shadow-[inset_0_1px_0_rgba(255,255,255,0.14)]" };
625
+ return /* @__PURE__ */ jsx("button", { type: "button", className: `inline-flex items-center justify-center font-medium select-none transition-[transform,background-color,color,opacity,filter] duration-150 ease-out active:scale-[0.96] active:brightness-110 disabled:opacity-50 disabled:pointer-events-none ${variants[variant]} ${size === "sm" ? "h-[27px] px-3 text-[13px] leading-none rounded-full gap-1.5" : "px-4 py-[9px] text-sm leading-none rounded-full gap-2"} ${className}`, ...props });
626
+ }
627
+ var AI_THEME_STYLES = '/* Shared public tokens for the standalone AI component family. */\n.mova-ai-theme {\n color-scheme: light;\n color: var(--mova-ai-ink, #202020);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;\n font-size: 13px;\n line-height: 1.45;\n letter-spacing: -0.01em;\n\n --mova-ai-page: #f7f7f7;\n --mova-ai-canvas: #f4f4f4;\n --mova-ai-surface: #ffffff;\n --mova-ai-inset: #f8f8f8;\n --mova-ai-hover: #f1f1f1;\n --mova-ai-hover-strong: #e9e9e9;\n\n --mova-ai-ink: #202020;\n --mova-ai-ink-secondary: #666666;\n --mova-ai-ink-muted: #858585;\n\n --mova-ai-border: #dedede;\n --mova-ai-border-soft: #ededed;\n --mova-ai-border-strong: #c8c8c8;\n --mova-ai-field: #f6f6f6;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(32 35 38 / 7%);\n --mova-ai-stripe-bg: #242424;\n\n --mova-ai-accent: #454545;\n --mova-ai-accent-ink: #333333;\n --mova-ai-accent-foreground: #ffffff;\n --mova-ai-accent-tint: #eeeeee;\n --mova-ai-success: #28734d;\n --mova-ai-success-tint: #e8f3ec;\n --mova-ai-warning: #986517;\n --mova-ai-warning-tint: #f8f0df;\n --mova-ai-danger: #a33c3c;\n --mova-ai-danger-tint: #f7eaea;\n --mova-ai-info: #496b89;\n --mova-ai-info-tint: #eaf0f5;\n --mova-ai-neutral-status: #69737d;\n --mova-ai-status-on: #ffffff;\n\n --mova-ai-tooltip-bg: #292929;\n --mova-ai-tooltip-fg: #f6f6f6;\n --mova-ai-tooltip-muted: #c3c3c3;\n --mova-ai-tooltip-border: #484848;\n\n --mova-ai-radius-panel: 8px;\n --mova-ai-radius-control: 8px;\n --mova-ai-shadow-xs: 0 1px 2px rgb(22 28 33 / 5%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(22 28 33 / 7%);\n --mova-ai-shadow-md: 0 8px 20px rgb(22 28 33 / 11%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(22 28 33 / 15%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(22 28 33 / 12%);\n}\n\n.mova-ai-theme[data-theme="dark"] {\n color-scheme: dark;\n --mova-ai-page: #181818;\n --mova-ai-canvas: #202020;\n --mova-ai-surface: #272727;\n --mova-ai-inset: #1d1d1d;\n --mova-ai-hover: #2d2d2d;\n --mova-ai-hover-strong: #393939;\n\n --mova-ai-ink: #eeeeee;\n --mova-ai-ink-secondary: #b5b5b5;\n --mova-ai-ink-muted: #929292;\n\n --mova-ai-border: #3b3b3b;\n --mova-ai-border-soft: #303030;\n --mova-ai-border-strong: #505050;\n --mova-ai-field: #2c2c2c;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(255 255 255 / 6%);\n --mova-ai-stripe-bg: #202528;\n\n --mova-ai-accent: #c2c2c2;\n --mova-ai-accent-ink: #d5d5d5;\n --mova-ai-accent-foreground: #202020;\n --mova-ai-accent-tint: #353535;\n --mova-ai-success: #88c7a0;\n --mova-ai-success-tint: #293b30;\n --mova-ai-warning: #d7b66f;\n --mova-ai-warning-tint: #3c3525;\n --mova-ai-danger: #e5928e;\n --mova-ai-danger-tint: #3c2b2b;\n --mova-ai-info: #9bbbd6;\n --mova-ai-info-tint: #293541;\n --mova-ai-neutral-status: #a0a0a0;\n --mova-ai-status-on: #181818;\n\n --mova-ai-tooltip-bg: #121212;\n --mova-ai-tooltip-fg: #eeeeee;\n --mova-ai-tooltip-muted: #b5b5b5;\n --mova-ai-tooltip-border: #3b3b3b;\n\n --mova-ai-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(0 0 0 / 25%);\n --mova-ai-shadow-md: 0 8px 20px rgb(0 0 0 / 30%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(0 0 0 / 38%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(0 0 0 / 42%);\n}\n';
628
+ var scopedStyles = `.mova-ai-approval-card{--approval-action-bg:#454545;--approval-action-fg:#fff;--approval-action-hover:#333;--approval-action-disabled-bg:#e9e9e9;--approval-action-disabled-fg:#858585} .mova-ai-approval-card[data-theme="dark"]{--approval-action-bg:#f5f5f5;--approval-action-fg:#202020;--approval-action-hover:#fff;--approval-action-disabled-bg:#3b3b3b;--approval-action-disabled-fg:#929292} .mova-ai-approval-card .approval-accent{background-color:var(--approval-action-bg);color:var(--approval-action-fg)} .mova-ai-approval-card .approval-accent:not(:disabled):hover{background-color:var(--approval-action-hover)} .mova-ai-approval-card .approval-accent:disabled{background-color:var(--approval-action-disabled-bg);color:var(--approval-action-disabled-fg);opacity:1}
719
629
  .mova-ai-approval-card .primitive-card-pad{padding:12px} .mova-ai-approval-card .primitive-card-bar{padding:10px 12px} .mova-ai-approval-card .primitive-card-footer{padding:10px} .mova-ai-approval-card .primitive-icon-button{display:inline-flex;width:28px;height:28px;align-items:center;justify-content:center;border-radius:8px}
720
- .mova-ai-approval-card :is(button,input,[tabindex]):focus-visible{outline:2px solid var(--accent)!important;outline-offset:2px} .mova-ai-approval-card button:not(:disabled){cursor:pointer} .mova-ai-approval-card code{overflow-wrap:anywhere} .mova-ai-approval-card *, .mova-ai-approval-card *::before,.mova-ai-approval-card *::after{box-sizing:border-box}
630
+ .mova-ai-approval-card :is(button,input,[tabindex]):focus-visible{outline:2px solid var(--mova-ai-accent,#454545)!important;outline-offset:2px} .mova-ai-approval-card button:not(:disabled){cursor:pointer} .mova-ai-approval-card code{overflow-wrap:anywhere} .mova-ai-approval-card *, .mova-ai-approval-card *::before,.mova-ai-approval-card *::after{box-sizing:border-box}
721
631
  @keyframes mova-ai-approval-card-pop-in{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}
722
632
  @keyframes mova-ai-approval-card-fade-up{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
723
633
  @keyframes mova-ai-approval-card-shimmer-text{from{background-position:150% center}to{background-position:-50% center}}
724
634
  @media(prefers-reduced-motion:reduce){.mova-ai-approval-card *, .mova-ai-approval-card *::before, .mova-ai-approval-card *::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}`;
725
635
  function AIApprovalCard({ theme = "light", ...props } = {}) {
726
- return /* @__PURE__ */ jsxs("div", { className: "mova-ai-approval-card", "data-theme": theme, children: [
727
- /* @__PURE__ */ jsx("style", { children: scopedStyles }),
636
+ return /* @__PURE__ */ jsxs("div", { className: "mova-ai-theme mova-ai-approval-card", "data-theme": theme, children: [
637
+ /* @__PURE__ */ jsxs("style", { children: [
638
+ AI_THEME_STYLES,
639
+ scopedStyles
640
+ ] }),
728
641
  /* @__PURE__ */ jsx(ApprovalCard, { ...props })
729
642
  ] });
730
643
  }
731
644
 
732
645
  // .generated/ui/ai/ai-code-block.tsx
733
- import { useCallback as useCallback2, useEffect as useEffect5, useRef as useRef2, useState as useState5 } from "react";
646
+ import { useCallback as useCallback2, useEffect as useEffect5, useLayoutEffect as useLayoutEffect2, useRef as useRef2, useState as useState5 } from "react";
734
647
  import { Fragment as Fragment2, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
735
648
  var FILE = "churn.ts";
736
649
  var CODE_LINES = [
@@ -752,7 +665,7 @@ var DIFF = [
752
665
  { old: 5, cur: 6, type: "ctx", pieces: [{ text: " return base.gallons;" }] },
753
666
  { old: 6, cur: 7, type: "ctx", pieces: [{ text: "}" }] }
754
667
  ];
755
- var HATCH = "repeating-linear-gradient(45deg, var(--red) 0, var(--red) 1.5px, transparent 1.5px, transparent 3px)";
668
+ var HATCH = "repeating-linear-gradient(45deg, var(--mova-ai-danger,#a33c3c) 0, var(--mova-ai-danger,#a33c3c) 1.5px, transparent 1.5px, transparent 3px)";
756
669
  var KEYWORDS = /* @__PURE__ */ new Set(["import", "from", "export", "default", "async", "function", "const", "let", "var", "await", "return", "if", "else", "for", "while", "new", "throw", "try", "catch", "null", "true", "false", "undefined"]);
757
670
  var TOKEN = /("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`[^`]*`|\b\d+(?:\.\d+)?\b|\b(?:import|from|export|default|async|function|const|let|var|await|return|if|else|for|while|new|throw|try|catch|null|true|false|undefined)\b|[A-Za-z_$][\w$]*(?=\s*\())/g;
758
671
  function highlight(text) {
@@ -765,10 +678,10 @@ function highlight(text) {
765
678
  if (idx > last) nodes.push(/* @__PURE__ */ jsx2("span", { children: text.slice(last, idx) }, k++));
766
679
  let color;
767
680
  let weight;
768
- if (/^["'`]/.test(t) || /^\d/.test(t)) color = "var(--orange)";
769
- else if (KEYWORDS.has(t)) color = "var(--accent-ink)";
681
+ if (/^["'`]/.test(t) || /^\d/.test(t)) color = "var(--mova-ai-warning,#986517)";
682
+ else if (KEYWORDS.has(t)) color = "var(--mova-ai-accent-ink,#333)";
770
683
  else {
771
- color = "var(--ink)";
684
+ color = "var(--mova-ai-ink,#202020)";
772
685
  weight = 500;
773
686
  }
774
687
  nodes.push(/* @__PURE__ */ jsx2("span", { style: { color, fontWeight: weight }, children: t }, k++));
@@ -800,8 +713,37 @@ function Pieces({ pieces }) {
800
713
  return /* @__PURE__ */ jsx2("span", { children: highlight(p.text) }, i);
801
714
  }) });
802
715
  }
716
+ function CodeContent({ isDiff, lines, diff }) {
717
+ return isDiff ? /* @__PURE__ */ jsxs2("div", { className: "relative", children: [
718
+ /* @__PURE__ */ jsx2("span", { className: "pointer-events-none absolute inset-y-0 left-5 w-px bg-[var(--mova-ai-border,#dedede)]" }),
719
+ diff.map((r, i) => {
720
+ const add = r.type === "add";
721
+ const del = r.type === "del";
722
+ const num = del ? r.old : r.cur;
723
+ return /* @__PURE__ */ jsxs2(
724
+ "div",
725
+ {
726
+ className: `relative grid grid-cols-[20px_minmax(0,1fr)] items-start
727
+ ${add ? "bg-[var(--mova-ai-success-tint,#e8f3ec)]" : del ? "bg-[var(--mova-ai-danger-tint,#f7eaea)]" : ""}`,
728
+ children: [
729
+ (add || del) && /* @__PURE__ */ jsx2("span", { className: "absolute inset-y-0 left-0 w-[3px]", style: { background: add ? "var(--mova-ai-success,#28734d)" : HATCH } }),
730
+ /* @__PURE__ */ jsx2("span", { className: `select-none text-center text-[11px] ${add ? "text-[var(--mova-ai-success,#28734d)]" : del ? "text-[var(--mova-ai-danger,#a33c3c)]" : "text-[var(--mova-ai-ink-muted,#858585)]"}`, children: num ?? "" }),
731
+ /* @__PURE__ */ jsx2("code", { className: "pr-3 pl-1 break-words whitespace-pre-wrap", children: /* @__PURE__ */ jsx2(Pieces, { pieces: r.pieces }) })
732
+ ]
733
+ },
734
+ i
735
+ );
736
+ })
737
+ ] }) : /* @__PURE__ */ jsxs2("div", { className: "relative", children: [
738
+ /* @__PURE__ */ jsx2("span", { className: "pointer-events-none absolute inset-y-0 left-5 w-px bg-[var(--mova-ai-border,#dedede)]" }),
739
+ lines.map((line, i) => /* @__PURE__ */ jsxs2("div", { className: "grid grid-cols-[20px_minmax(0,1fr)] items-start", children: [
740
+ /* @__PURE__ */ jsx2("span", { className: "select-none text-center text-[11px] text-[var(--mova-ai-ink-muted,#858585)]", children: i + 1 }),
741
+ /* @__PURE__ */ jsx2("code", { className: "pr-3 pl-1 break-words whitespace-pre-wrap", children: highlight(line) })
742
+ ] }, i))
743
+ ] });
744
+ }
803
745
  function FileIcon() {
804
- return /* @__PURE__ */ jsx2("svg", { "aria-hidden": true, width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0 text-[var(--ink-3)]", children: /* @__PURE__ */ jsx2("path", { d: "M17.25 6.75 22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3-4.5 16.5" }) });
746
+ return /* @__PURE__ */ jsx2("svg", { "aria-hidden": true, width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0 text-[var(--mova-ai-ink-muted,#858585)]", children: /* @__PURE__ */ jsx2("path", { d: "M17.25 6.75 22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3-4.5 16.5" }) });
805
747
  }
806
748
  var DEFAULT_LABELS2 = { copy: "Copy", copied: "Copied" };
807
749
  function CodeBlock({
@@ -815,12 +757,41 @@ function CodeBlock({
815
757
  }) {
816
758
  const [copied, setCopied] = useState5(false);
817
759
  const [view, setView] = useState5("Code");
760
+ const [hasSwitchedView, setHasSwitchedView] = useState5(false);
818
761
  const isDiff = (variant ?? view) === "Diff";
819
762
  const [copyError, setCopyError] = useState5(false);
820
763
  const copyTimer = useRef2(null);
821
764
  useEffect5(() => () => {
822
765
  if (copyTimer.current) clearTimeout(copyTimer.current);
823
766
  }, []);
767
+ const contentRef = useRef2(null);
768
+ const codeMeasureRef = useRef2(null);
769
+ const diffMeasureRef = useRef2(null);
770
+ const [reservedHeight, setReservedHeight] = useState5(0);
771
+ useLayoutEffect2(() => {
772
+ const content = contentRef.current;
773
+ if (!content) return;
774
+ let measuredWidth = -1;
775
+ const measure = (force = false) => {
776
+ const width = content.clientWidth;
777
+ if (!force && width === measuredWidth) return;
778
+ measuredWidth = width;
779
+ const codeHeight = codeMeasureRef.current?.scrollHeight ?? 0;
780
+ const diffHeight = diffMeasureRef.current?.scrollHeight ?? 0;
781
+ setReservedHeight(Math.max(codeHeight, diffHeight));
782
+ };
783
+ measure();
784
+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(() => measure(true));
785
+ const handleResize = () => measure(true);
786
+ observer?.observe(content);
787
+ if (codeMeasureRef.current) observer?.observe(codeMeasureRef.current);
788
+ if (diffMeasureRef.current) observer?.observe(diffMeasureRef.current);
789
+ window.addEventListener("resize", handleResize);
790
+ return () => {
791
+ observer?.disconnect();
792
+ window.removeEventListener("resize", handleResize);
793
+ };
794
+ }, [lines, diff]);
824
795
  const text = { ...DEFAULT_LABELS2, ...labels };
825
796
  const raw = code ?? (isDiff ? diff.map((row) => `${row.type === "add" ? "+" : row.type === "del" ? "-" : " "}${row.pieces.map((piece) => piece.text).join("")}`).join("\n") : lines.join("\n"));
826
797
  const copy = useCallback2(() => {
@@ -838,178 +809,93 @@ function CodeBlock({
838
809
  }, [raw, onCopy]);
839
810
  const added = diff.filter((r) => r.type === "add").length;
840
811
  const removed = diff.filter((r) => r.type === "del").length;
841
- return /* @__PURE__ */ jsxs2("div", { className: "w-full max-w-105 overflow-hidden rounded-[10px] bg-[var(--surface)] shadow-[var(--shadow-card)]", children: [
842
- /* @__PURE__ */ jsxs2("div", { className: "flex min-h-11 flex-wrap items-center gap-2 border-b border-[var(--line)] px-4 text-[12.5px]", children: [
843
- /* @__PURE__ */ jsxs2("span", { className: "inline-flex min-w-0 items-center gap-[7px]", children: [
812
+ return /* @__PURE__ */ jsxs2("div", { className: "w-full max-w-105 overflow-hidden rounded-lg border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] text-[color:var(--mova-ai-ink,#202020)] shadow-[var(--mova-ai-shadow-card,none)]", children: [
813
+ /* @__PURE__ */ jsxs2("div", { className: "mova-ai-code-header grid min-h-11 grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-2 border-b border-[var(--mova-ai-border,#dedede)] px-4 text-[12.5px]", children: [
814
+ /* @__PURE__ */ jsxs2("span", { className: "mova-ai-code-filename inline-flex min-w-0 items-center gap-[7px]", children: [
844
815
  /* @__PURE__ */ jsx2(FileIcon, {}),
845
- /* @__PURE__ */ jsx2("span", { className: "truncate font-mono leading-none text-[var(--ink)]", children: filename })
816
+ /* @__PURE__ */ jsx2("span", { className: "min-w-0 truncate font-mono leading-none text-[var(--mova-ai-ink,#202020)]", children: filename })
846
817
  ] }),
847
- variant === void 0 && /* @__PURE__ */ jsx2("div", { role: "group", "aria-label": "Code view", className: "ml-auto flex shrink-0 items-center rounded-[6px] bg-[var(--field)] p-0.5", children: ["Code", "Diff"].map((item) => /* @__PURE__ */ jsx2("button", { type: "button", "aria-pressed": view === item, onClick: () => {
848
- setView(item);
849
- setCopied(false);
850
- setCopyError(false);
851
- }, className: `rounded-[4px] px-1.5 py-1 text-[11px] leading-none ${view === item ? "bg-[var(--surface)] text-[var(--ink)] shadow-[var(--shadow-btn)]" : "text-[var(--ink-3)]"}`, children: item }, item)) }),
852
- isDiff && /* @__PURE__ */ jsxs2("span", { className: "ml-auto inline-flex items-center gap-2 font-mono text-[12px] leading-none tabular-nums", children: [
853
- /* @__PURE__ */ jsxs2("span", { className: "text-[var(--green)]", children: [
854
- "+",
855
- added
856
- ] }),
857
- /* @__PURE__ */ jsxs2("span", { className: "text-[var(--red)]", children: [
858
- "-",
859
- removed
860
- ] })
818
+ variant === void 0 && /* @__PURE__ */ jsxs2("div", { role: "group", "aria-label": "Code view", className: "mova-ai-code-view-controls relative inline-grid shrink-0 grid-cols-2 items-center justify-self-center rounded-[6px] bg-[var(--mova-ai-field,#f6f6f6)] p-0.5", children: [
819
+ /* @__PURE__ */ jsx2(
820
+ "span",
821
+ {
822
+ "aria-hidden": "true",
823
+ className: "pointer-events-none absolute left-0.5 top-0.5 bottom-0.5 rounded-[4px] bg-[var(--mova-ai-surface,#fff)] shadow-[var(--mova-ai-shadow-btn,none)] transition-transform duration-200 ease-out motion-reduce:transition-none",
824
+ style: { width: "calc((100% - 4px) / 2)", transform: view === "Diff" ? "translateX(100%)" : "translateX(0)" }
825
+ }
826
+ ),
827
+ ["Code", "Diff"].map((item) => /* @__PURE__ */ jsx2("button", { type: "button", "aria-pressed": view === item, onClick: () => {
828
+ setView(item);
829
+ setHasSwitchedView(true);
830
+ setCopied(false);
831
+ setCopyError(false);
832
+ }, className: `relative z-10 min-w-[34px] rounded-[4px] px-1.5 py-1 text-[11px] leading-none transition-colors duration-150 ${view === item ? "text-[var(--mova-ai-ink,#202020)]" : "text-[var(--mova-ai-ink-muted,#858585)]"}`, children: item }, item))
861
833
  ] }),
862
- /* @__PURE__ */ jsxs2(
863
- "button",
864
- {
865
- type: "button",
866
- "aria-label": isDiff ? "Copy diff" : "Copy code",
867
- "aria-live": "polite",
868
- onClick: copy,
869
- className: `-mr-1 ml-auto flex h-6 items-center gap-1 rounded-[6px] px-1.5 text-[12px]
870
- font-medium transition-colors duration-100 hover:bg-[var(--hover)]
871
- ${copied ? "text-[var(--green)]" : "text-[var(--ink-3)] hover:text-[var(--ink)]"}`,
872
- children: [
873
- copied ? /* @__PURE__ */ jsx2("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx2("path", { d: "M20 6L9 17l-5-5" }) }) : /* @__PURE__ */ jsxs2("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
874
- /* @__PURE__ */ jsx2("rect", { x: "9", y: "9", width: "12", height: "12", rx: "2.5" }),
875
- /* @__PURE__ */ jsx2("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
876
- ] }),
877
- copied ? text.copied : text.copy
878
- ]
879
- }
880
- )
881
- ] }),
882
- copyError && /* @__PURE__ */ jsx2("div", { role: "alert", className: "px-4 py-1 text-[11px] text-[var(--red)]", children: "Clipboard unavailable. Select the code to copy." }),
883
- /* @__PURE__ */ jsx2("div", { className: "py-3 font-mono text-[12.5px] leading-[1.65] text-[var(--ink-2)]", children: isDiff ? /* @__PURE__ */ jsxs2("div", { className: "relative", children: [
884
- /* @__PURE__ */ jsx2("span", { className: "pointer-events-none absolute inset-y-0 left-5 w-px bg-[var(--line)]" }),
885
- diff.map((r, i) => {
886
- const add = r.type === "add";
887
- const del = r.type === "del";
888
- const num = del ? r.old : r.cur;
889
- return /* @__PURE__ */ jsxs2(
890
- "div",
834
+ /* @__PURE__ */ jsxs2("div", { className: "mova-ai-code-actions col-start-3 flex min-w-0 flex-wrap items-center justify-end gap-2", children: [
835
+ /* @__PURE__ */ jsxs2(
836
+ "span",
891
837
  {
892
- className: `relative grid grid-cols-[20px_minmax(0,1fr)] items-start
893
- ${add ? "bg-[var(--green-tint)]" : del ? "bg-[var(--red-tint)]" : ""}`,
838
+ "aria-hidden": !isDiff,
839
+ className: `inline-flex shrink-0 items-center gap-2 font-mono text-[12px] leading-none tabular-nums ${isDiff ? "visible" : "invisible"}`,
894
840
  children: [
895
- (add || del) && /* @__PURE__ */ jsx2("span", { className: "absolute inset-y-0 left-0 w-[3px]", style: { background: add ? "var(--green)" : HATCH } }),
896
- /* @__PURE__ */ jsx2("span", { className: `select-none text-center text-[11px] ${add ? "text-[var(--green)]" : del ? "text-[var(--red)]" : "text-[var(--ink-3)]"}`, children: num ?? "" }),
897
- /* @__PURE__ */ jsx2("code", { className: "pr-3 pl-1 break-words whitespace-pre-wrap", children: /* @__PURE__ */ jsx2(Pieces, { pieces: r.pieces }) })
841
+ /* @__PURE__ */ jsxs2("span", { className: "text-[var(--mova-ai-success,#28734d)]", children: [
842
+ "+",
843
+ added
844
+ ] }),
845
+ /* @__PURE__ */ jsxs2("span", { className: "text-[var(--mova-ai-danger,#a33c3c)]", children: [
846
+ "-",
847
+ removed
848
+ ] })
898
849
  ]
899
- },
900
- i
901
- );
902
- })
903
- ] }) : /* @__PURE__ */ jsxs2("div", { className: "relative", children: [
904
- /* @__PURE__ */ jsx2("span", { className: "pointer-events-none absolute inset-y-0 left-5 w-px bg-[var(--line)]" }),
905
- lines.map((line, i) => /* @__PURE__ */ jsxs2("div", { className: "grid grid-cols-[20px_minmax(0,1fr)] items-start", children: [
906
- /* @__PURE__ */ jsx2("span", { className: "select-none text-center text-[11px] text-[var(--ink-3)]", children: i + 1 }),
907
- /* @__PURE__ */ jsx2("code", { className: "pr-3 pl-1 break-words whitespace-pre-wrap", children: highlight(line) })
908
- ] }, i))
850
+ }
851
+ ),
852
+ /* @__PURE__ */ jsxs2(
853
+ "button",
854
+ {
855
+ type: "button",
856
+ "aria-label": isDiff ? "Copy diff" : "Copy code",
857
+ "aria-live": "polite",
858
+ onClick: copy,
859
+ className: `mova-ai-code-copy-button flex min-h-6 min-w-0 max-w-full items-center gap-1 rounded-[6px] px-1.5 text-[12px]
860
+ font-medium transition-colors duration-100 hover:bg-[var(--mova-ai-hover,#f1f1f1)]
861
+ ${copied ? "text-[var(--mova-ai-success,#28734d)]" : "text-[var(--mova-ai-ink-muted,#858585)] hover:text-[var(--mova-ai-ink,#202020)]"}`,
862
+ children: [
863
+ copied ? /* @__PURE__ */ jsx2("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx2("path", { d: "M20 6L9 17l-5-5" }) }) : /* @__PURE__ */ jsxs2("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
864
+ /* @__PURE__ */ jsx2("rect", { x: "9", y: "9", width: "12", height: "12", rx: "2.5" }),
865
+ /* @__PURE__ */ jsx2("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
866
+ ] }),
867
+ /* @__PURE__ */ jsx2("span", { className: "min-w-0 break-words", children: copied ? text.copied : text.copy })
868
+ ]
869
+ }
870
+ )
871
+ ] })
872
+ ] }),
873
+ copyError && /* @__PURE__ */ jsx2("div", { role: "alert", className: "px-4 py-1 text-[11px] text-[var(--mova-ai-danger,#a33c3c)]", children: "Clipboard unavailable. Select the code to copy." }),
874
+ /* @__PURE__ */ jsx2("div", { className: "py-3 font-mono text-[12.5px] leading-[1.65] text-[var(--mova-ai-ink-secondary,#666)]", children: /* @__PURE__ */ jsxs2("div", { ref: contentRef, className: "relative", style: { minHeight: reservedHeight || void 0 }, children: [
875
+ /* @__PURE__ */ jsxs2("div", { "aria-hidden": "true", className: "pointer-events-none invisible absolute inset-0 select-none", children: [
876
+ /* @__PURE__ */ jsx2("div", { ref: codeMeasureRef, className: "absolute inset-x-0 top-0", children: /* @__PURE__ */ jsx2(CodeContent, { isDiff: false, lines, diff }) }),
877
+ /* @__PURE__ */ jsx2("div", { ref: diffMeasureRef, className: "absolute inset-x-0 top-0", children: /* @__PURE__ */ jsx2(CodeContent, { isDiff: true, lines, diff }) })
878
+ ] }),
879
+ /* @__PURE__ */ jsx2("div", { className: hasSwitchedView ? "mova-ai-code-view-enter" : void 0, children: /* @__PURE__ */ jsx2(CodeContent, { isDiff, lines, diff }) }, isDiff ? "diff" : "code")
909
880
  ] }) })
910
881
  ] });
911
882
  }
912
- var scopedStyles2 = `.mova-ai-code-block{
913
- --page: oklch(0.985 0.001 286.376);
914
- --canvas: oklch(0.961 0.002 247.84);
915
- --surface: oklch(1 0 0);
916
- --inset: oklch(0.979 0.002 247.839);
917
- --hover: oklch(0.97 0.002 247.839);
918
- --hover-2: oklch(0.933 0.003 247.86);
919
-
920
- --ink: oklch(0.247 0.006 258.361);
921
- --ink-2: oklch(0.506 0.01 264.477);
922
- --ink-3: oklch(0.695 0.009 264.505);
923
-
924
- --line: oklch(0.946 0.003 264.542);
925
- --line-strong: oklch(0.912 0.005 258.326);
926
- --line-soft: oklch(0.966 0.002 264.542);
927
- --grid-line: color-mix(in srgb, var(--line) 78%, transparent);
928
- --field: oklch(0.961 0.001 286.375);
929
- --stripe: oklch(0.405 0 0 / 0.075);
930
- --stripe-bg: oklch(0.97 0 0);
931
-
932
- --accent: oklch(0.626 0.205 254.947);
933
- --accent-ink: oklch(0.556 0.187 255.617);
934
- --accent-tint: oklch(0.96 0.019 252.878);
935
-
936
- --green: oklch(0.603 0.155 150.883);
937
- --green-tint: oklch(0.958 0.017 159.118);
938
- --orange: oklch(0.689 0.179 49.902);
939
- --orange-tint: oklch(0.964 0.021 67.581);
940
- --red: oklch(0.621 0.192 23.042);
941
- --red-tint: oklch(0.956 0.017 17.462);
942
-
943
- --tooltip-bg: oklch(0.272 0.008 264.435);
944
- --tooltip-fg: oklch(0.976 0.002 247.839);
945
- --tooltip-muted: oklch(0.731 0.008 260.731);
946
- --tooltip-border: oklch(0.356 0.007 264.474);
947
-
948
- --shadow-hairline: 0 0 0 1px var(--line);
949
- --shadow-btn: 0 0 0 1px var(--line-strong), var(--shadow-xs);
950
- --shadow-card: 0 0 0 1px var(--line), var(--shadow-sm);
951
- --shadow-raised: 0 0 0 1px var(--line), var(--shadow-md);
952
- --shadow-overlay: 0 0 0 1px var(--line), var(--shadow-lg);
953
- --shadow-inset-field: inset 0 1px 2px oklch(0 0 0 / 0.12);--shadow-xs: 0 0 4px 0 rgba(0, 0, 0, 0.04);--shadow-sm: 0 18px 47px 0 rgba(0, 0, 0, 0.03), 0 7.5px 19px 0 rgba(0, 0, 0, 0.02),
954
- 0 4px 10.5px 0 rgba(0, 0, 0, 0.02), 0 2.3px 5.8px 0 rgba(0, 0, 0, 0.01),
955
- 0 1.2px 3.1px 0 rgba(0, 0, 0, 0.01), 0 0.5px 1.3px 0 rgba(0, 0, 0, 0.01);--shadow-md: 0 17.54px 23.39px 0 rgba(0, 0, 0, 0.04), 0 9.4px 12.5px 0 rgba(0, 0, 0, 0.03),
956
- 0 5.25px 7px 0 rgba(0, 0, 0, 0.02), 0 2.79px 3.72px -2px rgba(0, 0, 0, 0.01),
957
- 0 1.16px 1.5px 0 rgba(0, 0, 0, 0.01);--radius-control:8px;
958
- width:100%;max-width:420px;min-width:0;font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:14px;line-height:1.5;letter-spacing:-.01em;color:var(--ink);}
959
- .mova-ai-code-block[data-theme="dark"]{
960
- --page: oklch(0.209 0.004 264.477);
961
- --canvas: oklch(0.231 0.004 264.487);
962
- --surface: oklch(0.26 0.006 271.191);
963
- --inset: oklch(0.243 0.004 264.492);
964
- --hover: oklch(0.289 0.006 271.22);
965
- --hover-2: oklch(0.318 0.007 274.747);
966
-
967
- --ink: oklch(0.964 0.002 247.839);
968
- --ink-2: oklch(0.731 0.008 260.731);
969
- --ink-3: oklch(0.541 0.01 264.484);
970
-
971
- --line: oklch(0.308 0.006 258.354);
972
- --line-strong: oklch(0.356 0.007 264.474);
973
- --line-soft: oklch(0.278 0.006 258.354);
974
- --field: oklch(0.293 0.006 271.223);
975
- --stripe: oklch(1 0 0 / 0.055);
976
- --stripe-bg: oklch(0.226 0.004 264.485);
977
-
978
- --accent: oklch(0.68 0.173 253.301);
979
- --accent-ink: oklch(0.788 0.113 248.33);
980
- --accent-tint: oklch(0.68 0.173 253.301 / 0.16);
981
-
982
- --green: oklch(0.705 0.154 153.814);
983
- --green-tint: oklch(0.705 0.154 153.814 / 0.14);
984
- --orange: oklch(0.746 0.156 55.642);
985
- --orange-tint: oklch(0.746 0.156 55.642 / 0.14);
986
- --red: oklch(0.666 0.18 21.433);
987
- --red-tint: oklch(0.666 0.18 21.433 / 0.14);
988
-
989
- --tooltip-bg: oklch(0.182 0.004 264.459);
990
- --tooltip-fg: oklch(0.964 0.002 247.839);
991
- --tooltip-muted: oklch(0.731 0.008 260.731);
992
- --tooltip-border: oklch(0.308 0.006 258.354);
993
-
994
- --shadow-hairline: 0 0 0 1px var(--line);
995
- --shadow-btn: 0 0 0 1px oklch(1 0 0 / 0.1), 0 1px 2px oklch(0 0 0 / 0.3);
996
- --shadow-card:
997
- 0 0 0 1px oklch(1 0 0 / 0.11), 0 1px 2px oklch(0 0 0 / 0.2),
998
- 0 2px 6px oklch(0 0 0 / 0.2);
999
- --shadow-raised:
1000
- 0 0 0 1px oklch(1 0 0 / 0.13), 0 2px 10px oklch(0 0 0 / 0.22);
1001
- --shadow-overlay:
1002
- 0 0 0 1px oklch(1 0 0 / 0.15), 0 8px 28px oklch(0 0 0 / 0.34);
1003
- --shadow-inset-field: inset 0 1px 2px oklch(0 0 0 / 0.4);}
1004
- .mova-ai-code-block .primitive-card-pad{padding:12px} .mova-ai-code-block .primitive-card-bar{padding:10px 12px} .mova-ai-code-block .primitive-card-footer{padding:10px} .mova-ai-code-block .primitive-icon-button{display:inline-flex;width:28px;height:28px;align-items:center;justify-content:center;border-radius:8px}
1005
- .mova-ai-code-block :is(button,input,[tabindex]):focus-visible{outline:2px solid var(--accent)!important;outline-offset:2px} .mova-ai-code-block button:not(:disabled){cursor:pointer} .mova-ai-code-block code{overflow-wrap:anywhere} .mova-ai-code-block *, .mova-ai-code-block *::before,.mova-ai-code-block *::after{box-sizing:border-box}
883
+ var AI_THEME_STYLES2 = '/* Shared public tokens for the standalone AI component family. */\n.mova-ai-theme {\n color-scheme: light;\n color: var(--mova-ai-ink, #202020);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;\n font-size: 13px;\n line-height: 1.45;\n letter-spacing: -0.01em;\n\n --mova-ai-page: #f7f7f7;\n --mova-ai-canvas: #f4f4f4;\n --mova-ai-surface: #ffffff;\n --mova-ai-inset: #f8f8f8;\n --mova-ai-hover: #f1f1f1;\n --mova-ai-hover-strong: #e9e9e9;\n\n --mova-ai-ink: #202020;\n --mova-ai-ink-secondary: #666666;\n --mova-ai-ink-muted: #858585;\n\n --mova-ai-border: #dedede;\n --mova-ai-border-soft: #ededed;\n --mova-ai-border-strong: #c8c8c8;\n --mova-ai-field: #f6f6f6;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(32 35 38 / 7%);\n --mova-ai-stripe-bg: #242424;\n\n --mova-ai-accent: #454545;\n --mova-ai-accent-ink: #333333;\n --mova-ai-accent-foreground: #ffffff;\n --mova-ai-accent-tint: #eeeeee;\n --mova-ai-success: #28734d;\n --mova-ai-success-tint: #e8f3ec;\n --mova-ai-warning: #986517;\n --mova-ai-warning-tint: #f8f0df;\n --mova-ai-danger: #a33c3c;\n --mova-ai-danger-tint: #f7eaea;\n --mova-ai-info: #496b89;\n --mova-ai-info-tint: #eaf0f5;\n --mova-ai-neutral-status: #69737d;\n --mova-ai-status-on: #ffffff;\n\n --mova-ai-tooltip-bg: #292929;\n --mova-ai-tooltip-fg: #f6f6f6;\n --mova-ai-tooltip-muted: #c3c3c3;\n --mova-ai-tooltip-border: #484848;\n\n --mova-ai-radius-panel: 8px;\n --mova-ai-radius-control: 8px;\n --mova-ai-shadow-xs: 0 1px 2px rgb(22 28 33 / 5%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(22 28 33 / 7%);\n --mova-ai-shadow-md: 0 8px 20px rgb(22 28 33 / 11%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(22 28 33 / 15%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(22 28 33 / 12%);\n}\n\n.mova-ai-theme[data-theme="dark"] {\n color-scheme: dark;\n --mova-ai-page: #181818;\n --mova-ai-canvas: #202020;\n --mova-ai-surface: #272727;\n --mova-ai-inset: #1d1d1d;\n --mova-ai-hover: #2d2d2d;\n --mova-ai-hover-strong: #393939;\n\n --mova-ai-ink: #eeeeee;\n --mova-ai-ink-secondary: #b5b5b5;\n --mova-ai-ink-muted: #929292;\n\n --mova-ai-border: #3b3b3b;\n --mova-ai-border-soft: #303030;\n --mova-ai-border-strong: #505050;\n --mova-ai-field: #2c2c2c;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(255 255 255 / 6%);\n --mova-ai-stripe-bg: #202528;\n\n --mova-ai-accent: #c2c2c2;\n --mova-ai-accent-ink: #d5d5d5;\n --mova-ai-accent-foreground: #202020;\n --mova-ai-accent-tint: #353535;\n --mova-ai-success: #88c7a0;\n --mova-ai-success-tint: #293b30;\n --mova-ai-warning: #d7b66f;\n --mova-ai-warning-tint: #3c3525;\n --mova-ai-danger: #e5928e;\n --mova-ai-danger-tint: #3c2b2b;\n --mova-ai-info: #9bbbd6;\n --mova-ai-info-tint: #293541;\n --mova-ai-neutral-status: #a0a0a0;\n --mova-ai-status-on: #181818;\n\n --mova-ai-tooltip-bg: #121212;\n --mova-ai-tooltip-fg: #eeeeee;\n --mova-ai-tooltip-muted: #b5b5b5;\n --mova-ai-tooltip-border: #3b3b3b;\n\n --mova-ai-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(0 0 0 / 25%);\n --mova-ai-shadow-md: 0 8px 20px rgb(0 0 0 / 30%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(0 0 0 / 38%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(0 0 0 / 42%);\n}\n';
884
+ var scopedStyles2 = `.mova-ai-code-block{container-type:inline-size} .mova-ai-code-block .primitive-card-pad{padding:12px} .mova-ai-code-block .primitive-card-bar{padding:10px 12px} .mova-ai-code-block .primitive-card-footer{padding:10px} .mova-ai-code-block .primitive-icon-button{display:inline-flex;width:28px;height:28px;align-items:center;justify-content:center;border-radius:8px}
885
+ .mova-ai-code-block :is(button,input,[tabindex]):focus-visible{outline:2px solid var(--mova-ai-accent,#454545)!important;outline-offset:2px} .mova-ai-code-block button:not(:disabled){cursor:pointer} .mova-ai-code-block code{overflow-wrap:anywhere} .mova-ai-code-block *, .mova-ai-code-block *::before,.mova-ai-code-block *::after{box-sizing:border-box}
886
+ .mova-ai-code-block .mova-ai-code-view-enter{animation:mova-ai-code-block-view-enter 180ms cubic-bezier(.2,.7,.2,1) both}
887
+ @keyframes mova-ai-code-block-view-enter{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}
1006
888
  @keyframes mova-ai-code-block-pop-in{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}
1007
889
  @keyframes mova-ai-code-block-fade-up{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
1008
890
  @keyframes mova-ai-code-block-shimmer-text{from{background-position:150% center}to{background-position:-50% center}}
891
+ @container (max-width:360px){.mova-ai-code-block .mova-ai-code-header{grid-template-columns:minmax(0,1fr) minmax(0,1fr);row-gap:8px;padding-top:8px;padding-bottom:8px}.mova-ai-code-block .mova-ai-code-filename{grid-column:1;grid-row:1}.mova-ai-code-block .mova-ai-code-actions{grid-column:2;grid-row:1;max-width:100%}.mova-ai-code-block .mova-ai-code-view-controls{grid-column:1/-1;grid-row:2}}
1009
892
  @media(prefers-reduced-motion:reduce){.mova-ai-code-block *, .mova-ai-code-block *::before, .mova-ai-code-block *::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}`;
1010
893
  function AICodeBlock({ theme = "light", ...props } = {}) {
1011
- return /* @__PURE__ */ jsxs2("div", { className: "mova-ai-code-block", "data-theme": theme, children: [
1012
- /* @__PURE__ */ jsx2("style", { children: scopedStyles2 }),
894
+ return /* @__PURE__ */ jsxs2("div", { className: "mova-ai-theme mova-ai-code-block w-full min-w-0 max-w-105", "data-theme": theme, children: [
895
+ /* @__PURE__ */ jsxs2("style", { children: [
896
+ AI_THEME_STYLES2,
897
+ scopedStyles2
898
+ ] }),
1013
899
  /* @__PURE__ */ jsx2(CodeBlock, { ...props })
1014
900
  ] });
1015
901
  }
@@ -1020,14 +906,15 @@ import { useState as useState6 } from "react";
1020
906
  import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
1021
907
  var SPRING_DEFAULT = { bounce: 0.1, duration: 0.25, type: "spring" };
1022
908
  var EASE_OUT = [0.23, 1, 0.32, 1];
909
+ var AI_THEME_STYLES3 = '/* Shared public tokens for the standalone AI component family. */\n.mova-ai-theme {\n color-scheme: light;\n color: var(--mova-ai-ink, #202020);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;\n font-size: 13px;\n line-height: 1.45;\n letter-spacing: -0.01em;\n\n --mova-ai-page: #f7f7f7;\n --mova-ai-canvas: #f4f4f4;\n --mova-ai-surface: #ffffff;\n --mova-ai-inset: #f8f8f8;\n --mova-ai-hover: #f1f1f1;\n --mova-ai-hover-strong: #e9e9e9;\n\n --mova-ai-ink: #202020;\n --mova-ai-ink-secondary: #666666;\n --mova-ai-ink-muted: #858585;\n\n --mova-ai-border: #dedede;\n --mova-ai-border-soft: #ededed;\n --mova-ai-border-strong: #c8c8c8;\n --mova-ai-field: #f6f6f6;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(32 35 38 / 7%);\n --mova-ai-stripe-bg: #242424;\n\n --mova-ai-accent: #454545;\n --mova-ai-accent-ink: #333333;\n --mova-ai-accent-foreground: #ffffff;\n --mova-ai-accent-tint: #eeeeee;\n --mova-ai-success: #28734d;\n --mova-ai-success-tint: #e8f3ec;\n --mova-ai-warning: #986517;\n --mova-ai-warning-tint: #f8f0df;\n --mova-ai-danger: #a33c3c;\n --mova-ai-danger-tint: #f7eaea;\n --mova-ai-info: #496b89;\n --mova-ai-info-tint: #eaf0f5;\n --mova-ai-neutral-status: #69737d;\n --mova-ai-status-on: #ffffff;\n\n --mova-ai-tooltip-bg: #292929;\n --mova-ai-tooltip-fg: #f6f6f6;\n --mova-ai-tooltip-muted: #c3c3c3;\n --mova-ai-tooltip-border: #484848;\n\n --mova-ai-radius-panel: 8px;\n --mova-ai-radius-control: 8px;\n --mova-ai-shadow-xs: 0 1px 2px rgb(22 28 33 / 5%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(22 28 33 / 7%);\n --mova-ai-shadow-md: 0 8px 20px rgb(22 28 33 / 11%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(22 28 33 / 15%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(22 28 33 / 12%);\n}\n\n.mova-ai-theme[data-theme="dark"] {\n color-scheme: dark;\n --mova-ai-page: #181818;\n --mova-ai-canvas: #202020;\n --mova-ai-surface: #272727;\n --mova-ai-inset: #1d1d1d;\n --mova-ai-hover: #2d2d2d;\n --mova-ai-hover-strong: #393939;\n\n --mova-ai-ink: #eeeeee;\n --mova-ai-ink-secondary: #b5b5b5;\n --mova-ai-ink-muted: #929292;\n\n --mova-ai-border: #3b3b3b;\n --mova-ai-border-soft: #303030;\n --mova-ai-border-strong: #505050;\n --mova-ai-field: #2c2c2c;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(255 255 255 / 6%);\n --mova-ai-stripe-bg: #202528;\n\n --mova-ai-accent: #c2c2c2;\n --mova-ai-accent-ink: #d5d5d5;\n --mova-ai-accent-foreground: #202020;\n --mova-ai-accent-tint: #353535;\n --mova-ai-success: #88c7a0;\n --mova-ai-success-tint: #293b30;\n --mova-ai-warning: #d7b66f;\n --mova-ai-warning-tint: #3c3525;\n --mova-ai-danger: #e5928e;\n --mova-ai-danger-tint: #3c2b2b;\n --mova-ai-info: #9bbbd6;\n --mova-ai-info-tint: #293541;\n --mova-ai-neutral-status: #a0a0a0;\n --mova-ai-status-on: #181818;\n\n --mova-ai-tooltip-bg: #121212;\n --mova-ai-tooltip-fg: #eeeeee;\n --mova-ai-tooltip-muted: #b5b5b5;\n --mova-ai-tooltip-border: #3b3b3b;\n\n --mova-ai-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(0 0 0 / 25%);\n --mova-ai-shadow-md: 0 8px 20px rgb(0 0 0 / 30%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(0 0 0 / 38%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(0 0 0 / 42%);\n}\n';
1023
910
  var VIEWBOX = 32;
1024
911
  var CENTER = VIEWBOX / 2;
1025
912
  var RADIUS = 13;
1026
913
  var STROKE_WIDTH = 3;
1027
914
  var DEFAULT_WARNING_AT = 0.8;
1028
915
  var DEFAULT_DANGER_AT = 0.95;
1029
- var WARNING_COLOR = "oklch(78% 0.16 75)";
1030
- var DANGER_COLOR = "oklch(63% 0.21 25)";
916
+ var WARNING_COLOR = "var(--mova-ai-warning,#986517)";
917
+ var DANGER_COLOR = "var(--mova-ai-danger,#a33c3c)";
1031
918
  var formatTokens = (tokens) => {
1032
919
  if (tokens >= 1e6) return `${(tokens / 1e6).toFixed(1)}M`;
1033
920
  if (tokens >= 1e4) return `${Math.round(tokens / 1e3)}k`;
@@ -1039,6 +926,7 @@ function AIContextMeter({
1039
926
  className = "",
1040
927
  dangerAt = DEFAULT_DANGER_AT,
1041
928
  limit,
929
+ theme = "light",
1042
930
  used,
1043
931
  warningAt = DEFAULT_WARNING_AT
1044
932
  }) {
@@ -1048,13 +936,14 @@ function AIContextMeter({
1048
936
  const percent = Math.round(fraction * 100);
1049
937
  const color = fraction >= dangerAt ? DANGER_COLOR : fraction >= warningAt ? WARNING_COLOR : "currentColor";
1050
938
  const hasBreakdown = Boolean(breakdown?.length);
1051
- return /* @__PURE__ */ jsxs3("div", { className: `relative inline-block ${className}`, children: [
939
+ return /* @__PURE__ */ jsxs3("div", { className: `mova-ai-theme relative inline-block ${className}`, "data-theme": theme, children: [
940
+ /* @__PURE__ */ jsx3("style", { children: AI_THEME_STYLES3 }),
1052
941
  /* @__PURE__ */ jsxs3(
1053
942
  "button",
1054
943
  {
1055
944
  "aria-expanded": hasBreakdown ? isOpen : void 0,
1056
945
  "aria-label": `Context window ${percent}% used, ${formatTokens(used)} of ${formatTokens(limit)} tokens`,
1057
- className: "flex cursor-pointer items-center gap-1.5 rounded-lg px-1 py-0.5 text-muted-foreground text-xs transition-colors hover:text-foreground",
946
+ className: "flex cursor-pointer items-center gap-1.5 rounded-lg px-1 py-0.5 text-[color:var(--mova-ai-ink-secondary,#666)] text-xs transition-colors hover:text-[color:var(--mova-ai-ink,#202020)]",
1058
947
  disabled: !hasBreakdown,
1059
948
  onBlur: () => setIsOpen(false),
1060
949
  onClick: () => setIsOpen((current) => !current),
@@ -1092,14 +981,14 @@ function AIContextMeter({
1092
981
  motion.div,
1093
982
  {
1094
983
  animate: { opacity: 1, scale: 1, y: 0 },
1095
- className: "absolute bottom-full left-0 z-50 mb-1.5 w-56 rounded-xl border border-border bg-background p-2.5 shadow-lg",
984
+ className: "absolute bottom-full left-1/2 z-50 mb-1.5 w-56 -translate-x-1/2 rounded-lg border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] p-2.5 text-[color:var(--mova-ai-ink,#202020)] shadow-lg",
1096
985
  exit: shouldReduceMotion ? { opacity: 0, transition: { duration: 0 } } : { opacity: 0, scale: 0.96, y: 4 },
1097
986
  initial: shouldReduceMotion ? { opacity: 1, scale: 1, y: 0 } : { opacity: 0, scale: 0.96, y: 4 },
1098
- style: { transformOrigin: "bottom left" },
987
+ style: { transformOrigin: "bottom center" },
1099
988
  transition: shouldReduceMotion ? { duration: 0 } : { duration: 0.18, ease: EASE_OUT },
1100
989
  children: /* @__PURE__ */ jsx3("ul", { className: "list-none space-y-1", children: breakdown?.map((item) => /* @__PURE__ */ jsxs3("li", { className: "flex items-baseline justify-between gap-3 text-xs", children: [
1101
- /* @__PURE__ */ jsx3("span", { className: "truncate text-muted-foreground", children: item.label }),
1102
- /* @__PURE__ */ jsx3("span", { className: "shrink-0 text-foreground tabular-nums", children: formatTokens(item.tokens) })
990
+ /* @__PURE__ */ jsx3("span", { className: "truncate text-[color:var(--mova-ai-ink-secondary,#666)]", children: item.label }),
991
+ /* @__PURE__ */ jsx3("span", { className: "shrink-0 text-[color:var(--mova-ai-ink,#202020)] tabular-nums", children: formatTokens(item.tokens) })
1103
992
  ] }, item.label)) })
1104
993
  }
1105
994
  ) : null })
@@ -1139,8 +1028,8 @@ function ScrubField({
1139
1028
  {
1140
1029
  className: "flex h-6.5 min-w-0 items-center gap-1 rounded-[6px] py-1 pr-1 pl-0.5\n transition-[background-color,box-shadow] duration-200",
1141
1030
  style: {
1142
- background: active ? "var(--accent-tint)" : "var(--field)",
1143
- boxShadow: active ? "0 0 0 1px var(--accent)" : "none"
1031
+ background: active ? "var(--mova-ai-accent-tint,#eee)" : "var(--mova-ai-field,#f6f6f6)",
1032
+ boxShadow: active ? "0 0 0 1px var(--mova-ai-accent,#454545)" : "none"
1144
1033
  },
1145
1034
  children: [
1146
1035
  /* @__PURE__ */ jsx4(
@@ -1173,7 +1062,7 @@ function ScrubField({
1173
1062
  onChange(clamp2(value - step * mult));
1174
1063
  }
1175
1064
  },
1176
- className: "flex h-full shrink-0 cursor-ew-resize touch-none items-center rounded-[4px]\n px-0.5 text-[12px] text-[var(--ink-3)] select-none hover:text-[var(--ink-2)] focus-visible:text-[var(--accent-ink)]\n focus-visible:outline-none",
1065
+ className: "flex h-full shrink-0 cursor-ew-resize touch-none items-center rounded-[4px]\n px-0.5 text-[12px] text-[var(--mova-ai-ink-muted,#858585)] select-none hover:text-[var(--mova-ai-ink-secondary,#666)] focus-visible:text-[var(--mova-ai-accent-ink,#333)]\n focus-visible:outline-none",
1177
1066
  children: label
1178
1067
  }
1179
1068
  ),
@@ -1198,10 +1087,10 @@ function ScrubField({
1198
1087
  }
1199
1088
  },
1200
1089
  "aria-label": `${label} value`,
1201
- className: "min-w-0 flex-1 bg-transparent text-[12px] text-[var(--ink)] tabular-nums outline-none"
1090
+ className: "min-w-0 flex-1 bg-transparent text-[12px] text-[var(--mova-ai-ink,#202020)] tabular-nums outline-none"
1202
1091
  }
1203
1092
  ),
1204
- suffix && /* @__PURE__ */ jsx4("span", { className: "shrink-0 pr-0.5 text-[11.5px] text-[var(--ink-3)]", children: suffix })
1093
+ suffix && /* @__PURE__ */ jsx4("span", { className: "shrink-0 pr-0.5 text-[11.5px] text-[var(--mova-ai-ink-muted,#858585)]", children: suffix })
1205
1094
  ]
1206
1095
  }
1207
1096
  );
@@ -1275,13 +1164,13 @@ function FineTuneCard({
1275
1164
  };
1276
1165
  const changed = fields.some((f) => values[f.key] !== f.value);
1277
1166
  const done = seg !== 0 || changed || typeValue !== text.placeholder;
1278
- return /* @__PURE__ */ jsxs4("div", { className: "relative w-full max-w-60 rounded-[10px] bg-[var(--surface)] shadow-[var(--shadow-raised)]", children: [
1279
- /* @__PURE__ */ jsxs4("div", { className: "primitive-card-bar flex items-center justify-between border-b border-[var(--line)]", children: [
1280
- /* @__PURE__ */ jsx4("span", { className: "text-[13px] font-medium text-[var(--ink)]", children: text.title }),
1167
+ return /* @__PURE__ */ jsxs4("div", { className: "relative w-full max-w-60 rounded-lg border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] text-[color:var(--mova-ai-ink,#202020)] shadow-[var(--mova-ai-shadow-raised,none)]", children: [
1168
+ /* @__PURE__ */ jsxs4("div", { className: "primitive-card-bar flex items-center justify-between border-b border-[var(--mova-ai-border,#dedede)]", children: [
1169
+ /* @__PURE__ */ jsx4("span", { className: "text-[13px] font-medium text-[var(--mova-ai-ink,#202020)]", children: text.title }),
1281
1170
  done ? /* @__PURE__ */ jsxs4(
1282
1171
  "span",
1283
1172
  {
1284
- className: "flex items-center gap-1.5 text-[12px] font-medium text-[var(--green)]",
1173
+ className: "flex items-center gap-1.5 text-[12px] font-medium text-[var(--mova-ai-success,#28734d)]",
1285
1174
  style: { animation: "mova-ai-fine-tune-card-pop-in 250ms cubic-bezier(0.23,1,0.32,1) both" },
1286
1175
  children: [
1287
1176
  /* @__PURE__ */ jsx4("svg", { width: "10", height: "10", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx4("path", { d: "M20 6L9 17l-5-5" }) }),
@@ -1289,13 +1178,13 @@ function FineTuneCard({
1289
1178
  ]
1290
1179
  }
1291
1180
  ) : /* @__PURE__ */ jsxs4("span", { className: "flex items-center gap-1.5", children: [
1292
- /* @__PURE__ */ jsx4("span", { className: "flex size-4.5 items-center justify-center rounded-[5px] border border-[var(--accent)]/30 bg-[var(--accent-tint)]", children: /* @__PURE__ */ jsx4("svg", { width: "9", height: "9", viewBox: "0 0 24 24", fill: "var(--accent)", children: /* @__PURE__ */ jsx4("path", { d: "M12 2l2.4 7.2L22 12l-7.6 2.8L12 22l-2.4-7.2L2 12l7.6-2.8z" }) }) }),
1181
+ /* @__PURE__ */ jsx4("span", { className: "flex size-4.5 items-center justify-center rounded-[5px] border border-[var(--mova-ai-accent,#454545)]/30 bg-[var(--mova-ai-accent-tint,#eee)]", children: /* @__PURE__ */ jsx4("svg", { width: "9", height: "9", viewBox: "0 0 24 24", fill: "var(--mova-ai-accent,#454545)", children: /* @__PURE__ */ jsx4("path", { d: "M12 2l2.4 7.2L22 12l-7.6 2.8L12 22l-2.4-7.2L2 12l7.6-2.8z" }) }) }),
1293
1182
  /* @__PURE__ */ jsx4(
1294
1183
  "span",
1295
1184
  {
1296
1185
  className: "bg-clip-text text-[12px] font-medium text-transparent",
1297
1186
  style: {
1298
- backgroundImage: "linear-gradient(90deg, var(--accent) 35%, var(--accent-ink) 50%, var(--accent) 65%)",
1187
+ backgroundImage: "linear-gradient(90deg, var(--mova-ai-accent,#454545) 35%, var(--mova-ai-accent-ink,#333) 50%, var(--mova-ai-accent,#454545) 65%)",
1299
1188
  backgroundSize: "200% 100%",
1300
1189
  animation: "mova-ai-fine-tune-card-shimmer-text 1.4s linear infinite"
1301
1190
  },
@@ -1304,14 +1193,14 @@ function FineTuneCard({
1304
1193
  )
1305
1194
  ] })
1306
1195
  ] }),
1307
- /* @__PURE__ */ jsxs4("div", { className: "primitive-card-pad flex flex-col gap-2 border-b border-[var(--line)]", children: [
1308
- /* @__PURE__ */ jsx4("p", { className: "text-[12.5px] font-medium text-[var(--ink)]", children: text.layout }),
1309
- /* @__PURE__ */ jsxs4("div", { className: "relative grid grid-cols-3 rounded-[8px] bg-[var(--field)] p-0.5", children: [
1196
+ /* @__PURE__ */ jsxs4("div", { className: "primitive-card-pad flex flex-col gap-2 border-b border-[var(--mova-ai-border,#dedede)]", children: [
1197
+ /* @__PURE__ */ jsx4("p", { className: "text-[12.5px] font-medium text-[var(--mova-ai-ink,#202020)]", children: text.layout }),
1198
+ /* @__PURE__ */ jsxs4("div", { className: "relative grid grid-cols-3 rounded-[8px] bg-[var(--mova-ai-field,#f6f6f6)] p-0.5", children: [
1310
1199
  /* @__PURE__ */ jsx4(
1311
1200
  "span",
1312
1201
  {
1313
1202
  "aria-hidden": true,
1314
- className: "absolute inset-y-0.5 rounded-[6px] bg-[var(--surface)] shadow-[var(--shadow-btn)] transition-transform duration-300",
1203
+ className: "absolute inset-y-0.5 rounded-[6px] bg-[var(--mova-ai-surface,#fff)] shadow-[var(--mova-ai-shadow-btn,none)] transition-transform duration-300",
1315
1204
  style: {
1316
1205
  width: "calc((100% - 4px) / 3)",
1317
1206
  left: 2,
@@ -1328,7 +1217,7 @@ function FineTuneCard({
1328
1217
  "aria-pressed": i === seg,
1329
1218
  onClick: () => selectSeg(i),
1330
1219
  className: `relative z-10 flex h-6 items-center justify-center transition-colors duration-200
1331
- ${i === seg ? "text-[var(--accent)]" : "text-[var(--ink-3)]"}`,
1220
+ ${i === seg ? "text-[var(--mova-ai-accent,#454545)]" : "text-[var(--mova-ai-ink-muted,#858585)]"}`,
1332
1221
  children: /* @__PURE__ */ jsx4(SegmentIcon, { kind: s })
1333
1222
  },
1334
1223
  s
@@ -1350,7 +1239,7 @@ function FineTuneCard({
1350
1239
  )) }, ri))
1351
1240
  ] }),
1352
1241
  /* @__PURE__ */ jsxs4("div", { className: "primitive-card-footer flex items-center justify-between", children: [
1353
- /* @__PURE__ */ jsx4("span", { className: "text-[12px] text-[var(--ink-3)]", children: text.type }),
1242
+ /* @__PURE__ */ jsx4("span", { className: "text-[12px] text-[var(--mova-ai-ink-muted,#858585)]", children: text.type }),
1354
1243
  /* @__PURE__ */ jsxs4("div", { ref: menuRef, className: "relative -mr-0.5 w-30", onBlur: (event) => {
1355
1244
  if (!event.currentTarget.contains(event.relatedTarget)) setMenuOpen(false);
1356
1245
  }, onKeyDown: (event) => {
@@ -1374,10 +1263,10 @@ function FineTuneCard({
1374
1263
  "aria-label": text.type,
1375
1264
  "aria-expanded": menuOpen,
1376
1265
  onClick: () => setMenuOpen((current) => !current),
1377
- className: "flex h-6.5 w-full items-center justify-between rounded-[6px] bg-[var(--inset)] py-1 pr-1 pl-2\n shadow-[var(--shadow-hairline)] transition-shadow duration-200 focus-visible:outline-none",
1378
- style: { boxShadow: menuOpen ? "0 0 0 1px var(--accent)" : void 0 },
1266
+ className: "flex h-6.5 w-full items-center justify-between rounded-[6px] bg-[var(--mova-ai-inset,#f8f8f8)] py-1 pr-1 pl-2\n shadow-[var(--mova-ai-shadow-hairline,none)] transition-shadow duration-200 focus-visible:outline-none",
1267
+ style: { boxShadow: menuOpen ? "0 0 0 1px var(--mova-ai-accent,#454545)" : void 0 },
1379
1268
  children: [
1380
- /* @__PURE__ */ jsx4("span", { className: `text-[12px] ${typeValue !== text.placeholder ? "text-[var(--ink)]" : "text-[var(--ink-3)]"}`, children: typeValue }),
1269
+ /* @__PURE__ */ jsx4("span", { className: `text-[12px] ${typeValue !== text.placeholder ? "text-[var(--mova-ai-ink,#202020)]" : "text-[var(--mova-ai-ink-muted,#858585)]"}`, children: typeValue }),
1381
1270
  /* @__PURE__ */ jsx4(
1382
1271
  "svg",
1383
1272
  {
@@ -1385,7 +1274,7 @@ function FineTuneCard({
1385
1274
  height: "11",
1386
1275
  viewBox: "0 0 24 24",
1387
1276
  fill: "none",
1388
- stroke: "var(--ink-3)",
1277
+ stroke: "var(--mova-ai-ink-muted,#858585)",
1389
1278
  strokeWidth: "2.5",
1390
1279
  strokeLinecap: "round",
1391
1280
  strokeLinejoin: "round",
@@ -1402,12 +1291,12 @@ function FineTuneCard({
1402
1291
  {
1403
1292
  role: "menu",
1404
1293
  "aria-label": text.type,
1405
- className: "absolute right-0 bottom-8 z-10 w-30 rounded-[10px] bg-[var(--surface)] p-1 shadow-[var(--shadow-raised)]",
1294
+ className: "absolute right-0 bottom-8 z-10 w-30 rounded-[10px] bg-[var(--mova-ai-surface,#fff)] p-1 shadow-[var(--mova-ai-shadow-raised,none)]",
1406
1295
  style: {
1407
1296
  animation: "mova-ai-fine-tune-card-pop-in 200ms cubic-bezier(0.23,1,0.32,1) both",
1408
1297
  transformOrigin: "bottom right"
1409
1298
  },
1410
- children: /* @__PURE__ */ jsx4(GlideMenu2, { className: "flex flex-col gap-px", highlightClassName: "inset-x-0 rounded-[6px] bg-[var(--field)]", children: options.map((item) => /* @__PURE__ */ jsx4(
1299
+ children: /* @__PURE__ */ jsx4(GlideMenu2, { className: "flex flex-col gap-px", highlightClassName: "inset-x-0 rounded-[6px] bg-[var(--mova-ai-field,#f6f6f6)]", children: options.map((item) => /* @__PURE__ */ jsx4(
1411
1300
  "button",
1412
1301
  {
1413
1302
  "data-menu-row": true,
@@ -1415,7 +1304,7 @@ function FineTuneCard({
1415
1304
  "aria-checked": item === typeValue,
1416
1305
  type: "button",
1417
1306
  onClick: () => selectType(item),
1418
- className: `relative z-10 flex h-6.5 w-full items-center rounded-[6px] px-2 text-left text-[12.5px] text-[var(--ink)] ${item === typeValue ? "bg-[var(--field)] group-hover/glide-menu:bg-transparent" : ""}`,
1307
+ className: `relative z-10 flex h-6.5 w-full items-center rounded-[6px] px-2 text-left text-[12.5px] text-[var(--mova-ai-ink,#202020)] ${item === typeValue ? "bg-[var(--mova-ai-field,#f6f6f6)] group-hover/glide-menu:bg-transparent" : ""}`,
1419
1308
  children: item
1420
1309
  },
1421
1310
  item
@@ -1429,7 +1318,7 @@ function FineTuneCard({
1429
1318
  function GlideMenu2({
1430
1319
  children,
1431
1320
  className = "",
1432
- highlightClassName = "inset-x-0 rounded-[8px] bg-[var(--hover)]",
1321
+ highlightClassName = "inset-x-0 rounded-[8px] bg-[var(--mova-ai-hover,#f1f1f1)]",
1433
1322
  rowSelector = "[data-menu-row]"
1434
1323
  }) {
1435
1324
  const ref = useRef3(null);
@@ -1475,221 +1364,30 @@ function GlideMenu2({
1475
1364
  }
1476
1365
  );
1477
1366
  }
1478
- var scopedStyles3 = `.mova-ai-fine-tune-card{
1479
- --page: oklch(0.985 0.001 286.376);
1480
- --canvas: oklch(0.961 0.002 247.84);
1481
- --surface: oklch(1 0 0);
1482
- --inset: oklch(0.979 0.002 247.839);
1483
- --hover: oklch(0.97 0.002 247.839);
1484
- --hover-2: oklch(0.933 0.003 247.86);
1485
-
1486
- --ink: oklch(0.247 0.006 258.361);
1487
- --ink-2: oklch(0.506 0.01 264.477);
1488
- --ink-3: oklch(0.695 0.009 264.505);
1489
-
1490
- --line: oklch(0.946 0.003 264.542);
1491
- --line-strong: oklch(0.912 0.005 258.326);
1492
- --line-soft: oklch(0.966 0.002 264.542);
1493
- --grid-line: color-mix(in srgb, var(--line) 78%, transparent);
1494
- --field: oklch(0.961 0.001 286.375);
1495
- --stripe: oklch(0.405 0 0 / 0.075);
1496
- --stripe-bg: oklch(0.97 0 0);
1497
-
1498
- --accent: oklch(0.626 0.205 254.947);
1499
- --accent-ink: oklch(0.556 0.187 255.617);
1500
- --accent-tint: oklch(0.96 0.019 252.878);
1501
-
1502
- --green: oklch(0.603 0.155 150.883);
1503
- --green-tint: oklch(0.958 0.017 159.118);
1504
- --orange: oklch(0.689 0.179 49.902);
1505
- --orange-tint: oklch(0.964 0.021 67.581);
1506
- --red: oklch(0.621 0.192 23.042);
1507
- --red-tint: oklch(0.956 0.017 17.462);
1508
-
1509
- --tooltip-bg: oklch(0.272 0.008 264.435);
1510
- --tooltip-fg: oklch(0.976 0.002 247.839);
1511
- --tooltip-muted: oklch(0.731 0.008 260.731);
1512
- --tooltip-border: oklch(0.356 0.007 264.474);
1513
-
1514
- --shadow-hairline: 0 0 0 1px var(--line);
1515
- --shadow-btn: 0 0 0 1px var(--line-strong), var(--shadow-xs);
1516
- --shadow-card: 0 0 0 1px var(--line), var(--shadow-sm);
1517
- --shadow-raised: 0 0 0 1px var(--line), var(--shadow-md);
1518
- --shadow-overlay: 0 0 0 1px var(--line), var(--shadow-lg);
1519
- --shadow-inset-field: inset 0 1px 2px oklch(0 0 0 / 0.12);--shadow-xs: 0 0 4px 0 rgba(0, 0, 0, 0.04);--shadow-sm: 0 18px 47px 0 rgba(0, 0, 0, 0.03), 0 7.5px 19px 0 rgba(0, 0, 0, 0.02),
1520
- 0 4px 10.5px 0 rgba(0, 0, 0, 0.02), 0 2.3px 5.8px 0 rgba(0, 0, 0, 0.01),
1521
- 0 1.2px 3.1px 0 rgba(0, 0, 0, 0.01), 0 0.5px 1.3px 0 rgba(0, 0, 0, 0.01);--shadow-md: 0 17.54px 23.39px 0 rgba(0, 0, 0, 0.04), 0 9.4px 12.5px 0 rgba(0, 0, 0, 0.03),
1522
- 0 5.25px 7px 0 rgba(0, 0, 0, 0.02), 0 2.79px 3.72px -2px rgba(0, 0, 0, 0.01),
1523
- 0 1.16px 1.5px 0 rgba(0, 0, 0, 0.01);--radius-control:8px;
1524
- width:100%;max-width:240px;min-width:0;font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:14px;line-height:1.5;letter-spacing:-.01em;color:var(--ink);}
1525
- .mova-ai-fine-tune-card[data-theme="dark"]{
1526
- --page: oklch(0.209 0.004 264.477);
1527
- --canvas: oklch(0.231 0.004 264.487);
1528
- --surface: oklch(0.26 0.006 271.191);
1529
- --inset: oklch(0.243 0.004 264.492);
1530
- --hover: oklch(0.289 0.006 271.22);
1531
- --hover-2: oklch(0.318 0.007 274.747);
1532
-
1533
- --ink: oklch(0.964 0.002 247.839);
1534
- --ink-2: oklch(0.731 0.008 260.731);
1535
- --ink-3: oklch(0.541 0.01 264.484);
1536
-
1537
- --line: oklch(0.308 0.006 258.354);
1538
- --line-strong: oklch(0.356 0.007 264.474);
1539
- --line-soft: oklch(0.278 0.006 258.354);
1540
- --field: oklch(0.293 0.006 271.223);
1541
- --stripe: oklch(1 0 0 / 0.055);
1542
- --stripe-bg: oklch(0.226 0.004 264.485);
1543
-
1544
- --accent: oklch(0.68 0.173 253.301);
1545
- --accent-ink: oklch(0.788 0.113 248.33);
1546
- --accent-tint: oklch(0.68 0.173 253.301 / 0.16);
1547
-
1548
- --green: oklch(0.705 0.154 153.814);
1549
- --green-tint: oklch(0.705 0.154 153.814 / 0.14);
1550
- --orange: oklch(0.746 0.156 55.642);
1551
- --orange-tint: oklch(0.746 0.156 55.642 / 0.14);
1552
- --red: oklch(0.666 0.18 21.433);
1553
- --red-tint: oklch(0.666 0.18 21.433 / 0.14);
1554
-
1555
- --tooltip-bg: oklch(0.182 0.004 264.459);
1556
- --tooltip-fg: oklch(0.964 0.002 247.839);
1557
- --tooltip-muted: oklch(0.731 0.008 260.731);
1558
- --tooltip-border: oklch(0.308 0.006 258.354);
1559
-
1560
- --shadow-hairline: 0 0 0 1px var(--line);
1561
- --shadow-btn: 0 0 0 1px oklch(1 0 0 / 0.1), 0 1px 2px oklch(0 0 0 / 0.3);
1562
- --shadow-card:
1563
- 0 0 0 1px oklch(1 0 0 / 0.11), 0 1px 2px oklch(0 0 0 / 0.2),
1564
- 0 2px 6px oklch(0 0 0 / 0.2);
1565
- --shadow-raised:
1566
- 0 0 0 1px oklch(1 0 0 / 0.13), 0 2px 10px oklch(0 0 0 / 0.22);
1567
- --shadow-overlay:
1568
- 0 0 0 1px oklch(1 0 0 / 0.15), 0 8px 28px oklch(0 0 0 / 0.34);
1569
- --shadow-inset-field: inset 0 1px 2px oklch(0 0 0 / 0.4);}
1570
- .mova-ai-fine-tune-card .primitive-card-pad{padding:12px} .mova-ai-fine-tune-card .primitive-card-bar{padding:10px 12px} .mova-ai-fine-tune-card .primitive-card-footer{padding:10px} .mova-ai-fine-tune-card .primitive-icon-button{display:inline-flex;width:28px;height:28px;align-items:center;justify-content:center;border-radius:8px}
1571
- .mova-ai-fine-tune-card :is(button,input,[tabindex]):focus-visible{outline:2px solid var(--accent)!important;outline-offset:2px} .mova-ai-fine-tune-card button:not(:disabled){cursor:pointer} .mova-ai-fine-tune-card code{overflow-wrap:anywhere} .mova-ai-fine-tune-card *, .mova-ai-fine-tune-card *::before,.mova-ai-fine-tune-card *::after{box-sizing:border-box}
1367
+ var AI_THEME_STYLES4 = '/* Shared public tokens for the standalone AI component family. */\n.mova-ai-theme {\n color-scheme: light;\n color: var(--mova-ai-ink, #202020);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;\n font-size: 13px;\n line-height: 1.45;\n letter-spacing: -0.01em;\n\n --mova-ai-page: #f7f7f7;\n --mova-ai-canvas: #f4f4f4;\n --mova-ai-surface: #ffffff;\n --mova-ai-inset: #f8f8f8;\n --mova-ai-hover: #f1f1f1;\n --mova-ai-hover-strong: #e9e9e9;\n\n --mova-ai-ink: #202020;\n --mova-ai-ink-secondary: #666666;\n --mova-ai-ink-muted: #858585;\n\n --mova-ai-border: #dedede;\n --mova-ai-border-soft: #ededed;\n --mova-ai-border-strong: #c8c8c8;\n --mova-ai-field: #f6f6f6;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(32 35 38 / 7%);\n --mova-ai-stripe-bg: #242424;\n\n --mova-ai-accent: #454545;\n --mova-ai-accent-ink: #333333;\n --mova-ai-accent-foreground: #ffffff;\n --mova-ai-accent-tint: #eeeeee;\n --mova-ai-success: #28734d;\n --mova-ai-success-tint: #e8f3ec;\n --mova-ai-warning: #986517;\n --mova-ai-warning-tint: #f8f0df;\n --mova-ai-danger: #a33c3c;\n --mova-ai-danger-tint: #f7eaea;\n --mova-ai-info: #496b89;\n --mova-ai-info-tint: #eaf0f5;\n --mova-ai-neutral-status: #69737d;\n --mova-ai-status-on: #ffffff;\n\n --mova-ai-tooltip-bg: #292929;\n --mova-ai-tooltip-fg: #f6f6f6;\n --mova-ai-tooltip-muted: #c3c3c3;\n --mova-ai-tooltip-border: #484848;\n\n --mova-ai-radius-panel: 8px;\n --mova-ai-radius-control: 8px;\n --mova-ai-shadow-xs: 0 1px 2px rgb(22 28 33 / 5%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(22 28 33 / 7%);\n --mova-ai-shadow-md: 0 8px 20px rgb(22 28 33 / 11%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(22 28 33 / 15%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(22 28 33 / 12%);\n}\n\n.mova-ai-theme[data-theme="dark"] {\n color-scheme: dark;\n --mova-ai-page: #181818;\n --mova-ai-canvas: #202020;\n --mova-ai-surface: #272727;\n --mova-ai-inset: #1d1d1d;\n --mova-ai-hover: #2d2d2d;\n --mova-ai-hover-strong: #393939;\n\n --mova-ai-ink: #eeeeee;\n --mova-ai-ink-secondary: #b5b5b5;\n --mova-ai-ink-muted: #929292;\n\n --mova-ai-border: #3b3b3b;\n --mova-ai-border-soft: #303030;\n --mova-ai-border-strong: #505050;\n --mova-ai-field: #2c2c2c;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(255 255 255 / 6%);\n --mova-ai-stripe-bg: #202528;\n\n --mova-ai-accent: #c2c2c2;\n --mova-ai-accent-ink: #d5d5d5;\n --mova-ai-accent-foreground: #202020;\n --mova-ai-accent-tint: #353535;\n --mova-ai-success: #88c7a0;\n --mova-ai-success-tint: #293b30;\n --mova-ai-warning: #d7b66f;\n --mova-ai-warning-tint: #3c3525;\n --mova-ai-danger: #e5928e;\n --mova-ai-danger-tint: #3c2b2b;\n --mova-ai-info: #9bbbd6;\n --mova-ai-info-tint: #293541;\n --mova-ai-neutral-status: #a0a0a0;\n --mova-ai-status-on: #181818;\n\n --mova-ai-tooltip-bg: #121212;\n --mova-ai-tooltip-fg: #eeeeee;\n --mova-ai-tooltip-muted: #b5b5b5;\n --mova-ai-tooltip-border: #3b3b3b;\n\n --mova-ai-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(0 0 0 / 25%);\n --mova-ai-shadow-md: 0 8px 20px rgb(0 0 0 / 30%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(0 0 0 / 38%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(0 0 0 / 42%);\n}\n';
1368
+ var scopedStyles3 = `.mova-ai-fine-tune-card .primitive-card-pad{padding:12px} .mova-ai-fine-tune-card .primitive-card-bar{padding:10px 12px} .mova-ai-fine-tune-card .primitive-card-footer{padding:10px} .mova-ai-fine-tune-card .primitive-icon-button{display:inline-flex;width:28px;height:28px;align-items:center;justify-content:center;border-radius:8px}
1369
+ .mova-ai-fine-tune-card :is(button,input,[tabindex]):focus-visible{outline:2px solid var(--mova-ai-accent,#454545)!important;outline-offset:2px} .mova-ai-fine-tune-card button:not(:disabled){cursor:pointer} .mova-ai-fine-tune-card code{overflow-wrap:anywhere} .mova-ai-fine-tune-card *, .mova-ai-fine-tune-card *::before,.mova-ai-fine-tune-card *::after{box-sizing:border-box}
1572
1370
  @keyframes mova-ai-fine-tune-card-pop-in{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}
1573
1371
  @keyframes mova-ai-fine-tune-card-fade-up{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
1574
1372
  @keyframes mova-ai-fine-tune-card-shimmer-text{from{background-position:150% center}to{background-position:-50% center}}
1575
1373
  @media(prefers-reduced-motion:reduce){.mova-ai-fine-tune-card *, .mova-ai-fine-tune-card *::before, .mova-ai-fine-tune-card *::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}`;
1576
1374
  function AIFineTuneCard({ theme = "light", ...props } = {}) {
1577
- return /* @__PURE__ */ jsxs4("div", { className: "mova-ai-fine-tune-card", "data-theme": theme, children: [
1578
- /* @__PURE__ */ jsx4("style", { children: scopedStyles3 }),
1375
+ return /* @__PURE__ */ jsxs4("div", { className: "mova-ai-theme mova-ai-fine-tune-card", "data-theme": theme, children: [
1376
+ /* @__PURE__ */ jsxs4("style", { children: [
1377
+ AI_THEME_STYLES4,
1378
+ scopedStyles3
1379
+ ] }),
1579
1380
  /* @__PURE__ */ jsx4(FineTuneCard, { ...props })
1580
1381
  ] });
1581
1382
  }
1582
1383
 
1583
1384
  // .generated/ui/ai/ai-prompt-bar.tsx
1584
- import { useEffect as useEffect7, useLayoutEffect as useLayoutEffect2, useRef as useRef4, useState as useState8, useId } from "react";
1385
+ import { useEffect as useEffect7, useLayoutEffect as useLayoutEffect3, useRef as useRef4, useState as useState8, useId } from "react";
1585
1386
  import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
1586
- var COMPONENT_STYLES = `[data-mova-prompt] {--shadow-xs: 0 0 4px 0 rgba(0, 0, 0, 0.04);--shadow-sm: 0 18px 47px 0 rgba(0, 0, 0, 0.03), 0 7.5px 19px 0 rgba(0, 0, 0, 0.02),
1587
- 0 4px 10.5px 0 rgba(0, 0, 0, 0.02), 0 2.3px 5.8px 0 rgba(0, 0, 0, 0.01),
1588
- 0 1.2px 3.1px 0 rgba(0, 0, 0, 0.01), 0 0.5px 1.3px 0 rgba(0, 0, 0, 0.01);--shadow-md: 0 17.54px 23.39px 0 rgba(0, 0, 0, 0.04), 0 9.4px 12.5px 0 rgba(0, 0, 0, 0.03),
1589
- 0 5.25px 7px 0 rgba(0, 0, 0, 0.02), 0 2.79px 3.72px -2px rgba(0, 0, 0, 0.01),
1590
- 0 1.16px 1.5px 0 rgba(0, 0, 0, 0.01);--shadow-lg: 0 25px 50px 0 rgba(0, 0, 0, 0.05), 0 12px 24px 0 rgba(0, 0, 0, 0.04),
1591
- 0 6px 12px 0 rgba(0, 0, 0, 0.03), 0 3px 6px 0 rgba(0, 0, 0, 0.02),
1592
- 0 1.5px 3px 0 rgba(0, 0, 0, 0.02); font-family:Inter,ui-sans-serif,system-ui,sans-serif; font-size:14px;line-height:1.5;letter-spacing:-0.01em;color:var(--ink);
1593
- /* surfaces \u2014 cool, blue-tinted neutrals */
1594
- --page: oklch(0.985 0.001 286.376);
1595
- --canvas: oklch(0.961 0.002 247.84);
1596
- --surface: oklch(1 0 0);
1597
- --inset: oklch(0.979 0.002 247.839);
1598
- --hover: oklch(0.97 0.002 247.839);
1599
- --hover-2: oklch(0.933 0.003 247.86);
1600
-
1601
- /* ink ramp */
1602
- --ink: oklch(0.247 0.006 258.361);
1603
- --ink-2: oklch(0.506 0.01 264.477);
1604
- --ink-3: oklch(0.695 0.009 264.505);
1605
-
1606
- /* borders \u2014 solid and crisp, not alpha */
1607
- --line: oklch(0.946 0.003 264.542);
1608
- --line-strong: oklch(0.912 0.005 258.326);
1609
- --line-soft: oklch(0.966 0.002 264.542);
1610
- --grid-line: color-mix(in srgb, var(--line) 78%, transparent);
1611
- --field: oklch(0.961 0.001 286.375);
1612
- --stripe: oklch(0.405 0 0 / 0.075);
1613
- --stripe-bg: oklch(0.97 0 0);
1614
-
1615
- /* accent */
1616
- --accent: oklch(0.626 0.205 254.947);
1617
- --accent-ink: oklch(0.556 0.187 255.617);
1618
- --accent-tint: oklch(0.96 0.019 252.878);
1619
-
1620
- /* semantic */
1621
- --green: oklch(0.603 0.155 150.883);
1622
- --green-tint: oklch(0.958 0.017 159.118);
1623
- --orange: oklch(0.689 0.179 49.902);
1624
- --orange-tint: oklch(0.964 0.021 67.581);
1625
- --red: oklch(0.621 0.192 23.042);
1626
- --red-tint: oklch(0.956 0.017 17.462);
1627
-
1628
- /* chart overlays \u2014 neutral system colors with enough contrast on either theme */
1629
- --tooltip-bg: oklch(0.272 0.008 264.435);
1630
- --tooltip-fg: oklch(0.976 0.002 247.839);
1631
- --tooltip-muted: oklch(0.731 0.008 260.731);
1632
- --tooltip-border: oklch(0.356 0.007 264.474);
1633
-
1634
- /* shadows \u2014 our solid hairline ring + shadow-plugin's smooth layered stacks
1635
- * (--shadow-xs\u2026lg come from shadow-plugin/unprefixed) so every surface reads
1636
- * consistently across the app. */
1637
- --shadow-hairline: 0 0 0 1px var(--line);
1638
- --shadow-btn: 0 0 0 1px var(--line-strong), var(--shadow-xs);
1639
- --shadow-card: 0 0 0 1px var(--line), var(--shadow-sm);
1640
- --shadow-raised: 0 0 0 1px var(--line), var(--shadow-md);
1641
- --shadow-overlay: 0 0 0 1px var(--line), var(--shadow-lg);
1642
- --shadow-inset-field: inset 0 1px 2px oklch(0 0 0 / 0.12);}
1643
- [data-mova-prompt][data-theme="dark"] {
1644
- --page: oklch(0.209 0.004 264.477);
1645
- --canvas: oklch(0.231 0.004 264.487);
1646
- --surface: oklch(0.26 0.006 271.191);
1647
- --inset: oklch(0.243 0.004 264.492);
1648
- --hover: oklch(0.289 0.006 271.22);
1649
- --hover-2: oklch(0.318 0.007 274.747);
1650
-
1651
- --ink: oklch(0.964 0.002 247.839);
1652
- --ink-2: oklch(0.731 0.008 260.731);
1653
- --ink-3: oklch(0.541 0.01 264.484);
1654
-
1655
- --line: oklch(0.308 0.006 258.354);
1656
- --line-strong: oklch(0.356 0.007 264.474);
1657
- --line-soft: oklch(0.278 0.006 258.354);
1658
- --field: oklch(0.293 0.006 271.223);
1659
- --stripe: oklch(1 0 0 / 0.055);
1660
- --stripe-bg: oklch(0.226 0.004 264.485);
1661
-
1662
- --accent: oklch(0.68 0.173 253.301);
1663
- --accent-ink: oklch(0.788 0.113 248.33);
1664
- --accent-tint: oklch(0.68 0.173 253.301 / 0.16);
1665
-
1666
- --green: oklch(0.705 0.154 153.814);
1667
- --green-tint: oklch(0.705 0.154 153.814 / 0.14);
1668
- --orange: oklch(0.746 0.156 55.642);
1669
- --orange-tint: oklch(0.746 0.156 55.642 / 0.14);
1670
- --red: oklch(0.666 0.18 21.433);
1671
- --red-tint: oklch(0.666 0.18 21.433 / 0.14);
1672
-
1673
- --tooltip-bg: oklch(0.182 0.004 264.459);
1674
- --tooltip-fg: oklch(0.964 0.002 247.839);
1675
- --tooltip-muted: oklch(0.731 0.008 260.731);
1676
- --tooltip-border: oklch(0.308 0.006 258.354);
1677
-
1678
- --shadow-hairline: 0 0 0 1px var(--line);
1679
- /* Elevation rings go to a subtle *light* hairline in dark mode: the ring
1680
- * paints over the surface behind the element, so a low-alpha white edge
1681
- * dissolves into the shadow as one continuous stroke (per smooth-shadow-ring),
1682
- * graduated by how far the surface floats. */
1683
- --shadow-btn: 0 0 0 1px oklch(1 0 0 / 0.1), 0 1px 2px oklch(0 0 0 / 0.3);
1684
- --shadow-card:
1685
- 0 0 0 1px oklch(1 0 0 / 0.11), 0 1px 2px oklch(0 0 0 / 0.2),
1686
- 0 2px 6px oklch(0 0 0 / 0.2);
1687
- --shadow-raised:
1688
- 0 0 0 1px oklch(1 0 0 / 0.13), 0 2px 10px oklch(0 0 0 / 0.22);
1689
- --shadow-overlay:
1690
- 0 0 0 1px oklch(1 0 0 / 0.15), 0 8px 28px oklch(0 0 0 / 0.34);
1691
- --shadow-inset-field: inset 0 1px 2px oklch(0 0 0 / 0.4);}
1692
- [data-mova-prompt] :is(button,input,textarea):focus-visible { outline:2px solid var(--accent);outline-offset:2px; }
1387
+ var AI_THEME_STYLES5 = '/* Shared public tokens for the standalone AI component family. */\n.mova-ai-theme {\n color-scheme: light;\n color: var(--mova-ai-ink, #202020);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;\n font-size: 13px;\n line-height: 1.45;\n letter-spacing: -0.01em;\n\n --mova-ai-page: #f7f7f7;\n --mova-ai-canvas: #f4f4f4;\n --mova-ai-surface: #ffffff;\n --mova-ai-inset: #f8f8f8;\n --mova-ai-hover: #f1f1f1;\n --mova-ai-hover-strong: #e9e9e9;\n\n --mova-ai-ink: #202020;\n --mova-ai-ink-secondary: #666666;\n --mova-ai-ink-muted: #858585;\n\n --mova-ai-border: #dedede;\n --mova-ai-border-soft: #ededed;\n --mova-ai-border-strong: #c8c8c8;\n --mova-ai-field: #f6f6f6;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(32 35 38 / 7%);\n --mova-ai-stripe-bg: #242424;\n\n --mova-ai-accent: #454545;\n --mova-ai-accent-ink: #333333;\n --mova-ai-accent-foreground: #ffffff;\n --mova-ai-accent-tint: #eeeeee;\n --mova-ai-success: #28734d;\n --mova-ai-success-tint: #e8f3ec;\n --mova-ai-warning: #986517;\n --mova-ai-warning-tint: #f8f0df;\n --mova-ai-danger: #a33c3c;\n --mova-ai-danger-tint: #f7eaea;\n --mova-ai-info: #496b89;\n --mova-ai-info-tint: #eaf0f5;\n --mova-ai-neutral-status: #69737d;\n --mova-ai-status-on: #ffffff;\n\n --mova-ai-tooltip-bg: #292929;\n --mova-ai-tooltip-fg: #f6f6f6;\n --mova-ai-tooltip-muted: #c3c3c3;\n --mova-ai-tooltip-border: #484848;\n\n --mova-ai-radius-panel: 8px;\n --mova-ai-radius-control: 8px;\n --mova-ai-shadow-xs: 0 1px 2px rgb(22 28 33 / 5%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(22 28 33 / 7%);\n --mova-ai-shadow-md: 0 8px 20px rgb(22 28 33 / 11%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(22 28 33 / 15%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(22 28 33 / 12%);\n}\n\n.mova-ai-theme[data-theme="dark"] {\n color-scheme: dark;\n --mova-ai-page: #181818;\n --mova-ai-canvas: #202020;\n --mova-ai-surface: #272727;\n --mova-ai-inset: #1d1d1d;\n --mova-ai-hover: #2d2d2d;\n --mova-ai-hover-strong: #393939;\n\n --mova-ai-ink: #eeeeee;\n --mova-ai-ink-secondary: #b5b5b5;\n --mova-ai-ink-muted: #929292;\n\n --mova-ai-border: #3b3b3b;\n --mova-ai-border-soft: #303030;\n --mova-ai-border-strong: #505050;\n --mova-ai-field: #2c2c2c;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(255 255 255 / 6%);\n --mova-ai-stripe-bg: #202528;\n\n --mova-ai-accent: #c2c2c2;\n --mova-ai-accent-ink: #d5d5d5;\n --mova-ai-accent-foreground: #202020;\n --mova-ai-accent-tint: #353535;\n --mova-ai-success: #88c7a0;\n --mova-ai-success-tint: #293b30;\n --mova-ai-warning: #d7b66f;\n --mova-ai-warning-tint: #3c3525;\n --mova-ai-danger: #e5928e;\n --mova-ai-danger-tint: #3c2b2b;\n --mova-ai-info: #9bbbd6;\n --mova-ai-info-tint: #293541;\n --mova-ai-neutral-status: #a0a0a0;\n --mova-ai-status-on: #181818;\n\n --mova-ai-tooltip-bg: #121212;\n --mova-ai-tooltip-fg: #eeeeee;\n --mova-ai-tooltip-muted: #b5b5b5;\n --mova-ai-tooltip-border: #3b3b3b;\n\n --mova-ai-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(0 0 0 / 25%);\n --mova-ai-shadow-md: 0 8px 20px rgb(0 0 0 / 30%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(0 0 0 / 38%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(0 0 0 / 42%);\n}\n';
1388
+ var COMPONENT_STYLES = `[data-mova-prompt] button:focus-visible { outline:2px solid var(--mova-ai-accent,#454545);outline-offset:2px; }
1389
+ [data-mova-prompt] :is(input,textarea):focus-visible { outline:none; }
1390
+ [data-mova-prompt] .prompt-composer:focus-within { outline:2px solid var(--mova-ai-accent,#454545);outline-offset:2px; }
1693
1391
  [data-mova-prompt] button { cursor:pointer; } [data-mova-prompt] button:disabled { cursor:default; }
1694
1392
 
1695
1393
  @keyframes mova-prompt-pop {from {opacity:0;transform:scale(.95)} to {opacity:1;transform:scale(1)}}
@@ -1842,17 +1540,17 @@ function AIPromptBar({
1842
1540
  setActive(0);
1843
1541
  setEngaged(false);
1844
1542
  }, [menu, query]);
1845
- useLayoutEffect2(() => {
1543
+ useLayoutEffect3(() => {
1846
1544
  const target = rowRefs.current[active];
1847
1545
  if (target) setRowBox({ top: target.offsetTop, height: target.offsetHeight });
1848
1546
  }, [menu, query, active, connected, rows.length]);
1849
1547
  const modelIndex = MODELS.findIndex((m) => m.key === model.key);
1850
- useLayoutEffect2(() => {
1548
+ useLayoutEffect3(() => {
1851
1549
  if (!modelOpen) return;
1852
1550
  const target = modelRowRefs.current[modelHovered ?? modelIndex];
1853
1551
  if (target) setModelBox({ top: target.offsetTop, height: target.offsetHeight });
1854
1552
  }, [modelOpen, modelHovered, modelIndex]);
1855
- useLayoutEffect2(() => {
1553
+ useLayoutEffect3(() => {
1856
1554
  if (!modelOpen || !composerAnchorRef.current || !modelRef.current) return;
1857
1555
  const reposition = () => {
1858
1556
  const anchorRect = composerAnchorRef.current?.getBoundingClientRect();
@@ -2021,7 +1719,7 @@ function AIPromptBar({
2021
1719
  setFeedback("Dictation is unavailable right now.");
2022
1720
  }
2023
1721
  };
2024
- useLayoutEffect2(() => {
1722
+ useLayoutEffect3(() => {
2025
1723
  const input = inputRef.current;
2026
1724
  const controls = controlsRef.current;
2027
1725
  const measure = measureRef.current;
@@ -2097,7 +1795,7 @@ function AIPromptBar({
2097
1795
  "data-mova-prompt": true,
2098
1796
  "data-theme": theme,
2099
1797
  "data-promptbar": true,
2100
- className: `${demo ? "flex min-h-[384px] w-full max-w-[420px] flex-col justify-end pb-8" : "w-full"} ${className}`,
1798
+ className: `mova-ai-theme ${demo ? "flex min-h-[384px] w-full max-w-[420px] flex-col justify-end pb-8" : "w-full"} ${className}`,
2101
1799
  onPointerDownCapture: takeOver,
2102
1800
  onKeyDownCapture: (event) => {
2103
1801
  takeOver(event);
@@ -2109,7 +1807,10 @@ function AIPromptBar({
2109
1807
  }
2110
1808
  },
2111
1809
  children: [
2112
- /* @__PURE__ */ jsx5("style", { children: COMPONENT_STYLES }),
1810
+ /* @__PURE__ */ jsxs5("style", { children: [
1811
+ AI_THEME_STYLES5,
1812
+ COMPONENT_STYLES
1813
+ ] }),
2113
1814
  /* @__PURE__ */ jsx5("input", { ref: fileRef, type: "file", multiple: true, className: "hidden", "aria-label": "Attach files", onChange: (event) => {
2114
1815
  const files = Array.from(event.target.files ?? []);
2115
1816
  setAttachments((current) => [...current, ...files]);
@@ -2125,14 +1826,14 @@ function AIPromptBar({
2125
1826
  role: "listbox",
2126
1827
  "aria-label": "Sources and commands",
2127
1828
  onMouseLeave: () => setEngaged(false),
2128
- className: "absolute inset-x-0 bottom-full z-10 mb-2 max-h-[min(320px,60dvh)] overflow-y-auto rounded-[10px] bg-[var(--surface)] p-1 shadow-[var(--shadow-raised)]",
1829
+ className: "absolute inset-x-0 bottom-full z-10 mb-2 max-h-[min(320px,60dvh)] overflow-y-auto rounded-[10px] bg-[var(--mova-ai-surface,#fff)] p-1 shadow-[var(--mova-ai-shadow-raised,none)]",
2129
1830
  style: { animation: "mova-prompt-pop 180ms cubic-bezier(0.23,1,0.32,1) both", transformOrigin: "bottom center" },
2130
1831
  children: [
2131
1832
  /* @__PURE__ */ jsx5(
2132
1833
  "span",
2133
1834
  {
2134
1835
  "aria-hidden": true,
2135
- className: "pointer-events-none absolute inset-x-1 rounded-[6px] bg-[var(--hover)]",
1836
+ className: "pointer-events-none absolute inset-x-1 rounded-[6px] bg-[var(--mova-ai-hover,#f1f1f1)]",
2136
1837
  style: {
2137
1838
  top: rowBox?.top ?? 0,
2138
1839
  height: rowBox?.height ?? 0,
@@ -2165,13 +1866,13 @@ function AIPromptBar({
2165
1866
  onClick: () => pick(row),
2166
1867
  className: "relative z-10 flex h-9 w-full items-center gap-2.5 rounded-[6px] px-2 text-left",
2167
1868
  children: [
2168
- source && /* @__PURE__ */ jsx5("span", { className: "flex size-5.5 shrink-0 items-center justify-center text-[var(--ink-2)]", children: source.brand ? BRANDS[source.brand] : /* @__PURE__ */ jsx5(Icon, { size: 15, children: GLYPHS[source.glyph ?? "clip"] }) }),
2169
- /* @__PURE__ */ jsx5("span", { className: "shrink-0 text-[12.5px] font-medium text-[var(--ink)]", children: row.name }),
2170
- /* @__PURE__ */ jsx5("span", { className: "min-w-0 flex-1 truncate text-[12px] text-[var(--ink-3)]", children: row.desc }),
1869
+ source && /* @__PURE__ */ jsx5("span", { className: "flex size-5.5 shrink-0 items-center justify-center text-[var(--mova-ai-ink-secondary,#666)]", children: source.brand ? BRANDS[source.brand] : /* @__PURE__ */ jsx5(Icon, { size: 15, children: GLYPHS[source.glyph ?? "clip"] }) }),
1870
+ /* @__PURE__ */ jsx5("span", { className: "shrink-0 text-[12.5px] font-medium text-[var(--mova-ai-ink,#202020)]", children: row.name }),
1871
+ /* @__PURE__ */ jsx5("span", { className: "min-w-0 flex-1 truncate text-[12px] text-[var(--mova-ai-ink-muted,#858585)]", children: row.desc }),
2171
1872
  source?.connect && /* @__PURE__ */ jsx5(
2172
1873
  "span",
2173
1874
  {
2174
- className: `shrink-0 text-[12px] font-medium transition-colors duration-100 ${connected ? "text-[var(--green)]" : "text-[var(--accent-ink)] hover:underline"}`,
1875
+ className: `shrink-0 text-[12px] font-medium transition-colors duration-100 ${connected ? "text-[var(--mova-ai-success,#28734d)]" : "text-[var(--mova-ai-accent-ink,#333)] hover:underline"}`,
2175
1876
  children: connected ? "Connected" : "Connect"
2176
1877
  }
2177
1878
  )
@@ -2180,12 +1881,12 @@ function AIPromptBar({
2180
1881
  row.key
2181
1882
  );
2182
1883
  }),
2183
- rows.length === 0 && /* @__PURE__ */ jsxs5("div", { className: "flex h-9 items-center px-2 text-[12px] text-[var(--ink-3)]", children: [
1884
+ rows.length === 0 && /* @__PURE__ */ jsxs5("div", { className: "flex h-9 items-center px-2 text-[12px] text-[var(--mova-ai-ink-muted,#858585)]", children: [
2184
1885
  "No matches for \u201C",
2185
1886
  query,
2186
1887
  "\u201D"
2187
1888
  ] }),
2188
- /* @__PURE__ */ jsx5("div", { className: "mt-1 border-t border-[var(--line)] px-2 pt-1.5 pb-1 text-[11px] text-[var(--ink-3)]", children: menu === "at" ? "Type to search sources & files" : "Type to search commands" })
1889
+ /* @__PURE__ */ jsx5("div", { className: "mt-1 border-t border-[var(--mova-ai-border,#dedede)] px-2 pt-1.5 pb-1 text-[11px] text-[var(--mova-ai-ink-muted,#858585)]", children: menu === "at" ? "Type to search sources & files" : "Type to search commands" })
2189
1890
  ]
2190
1891
  }
2191
1892
  ),
@@ -2204,14 +1905,14 @@ function AIPromptBar({
2204
1905
  }
2205
1906
  },
2206
1907
  onMouseLeave: () => setModelHovered(null),
2207
- className: "absolute z-10 w-52 max-w-full rounded-[10px] bg-[var(--surface)] p-1 shadow-[var(--shadow-raised)]",
1908
+ className: "absolute z-10 w-52 max-w-full rounded-[10px] bg-[var(--mova-ai-surface,#fff)] p-1 shadow-[var(--mova-ai-shadow-raised,none)]",
2208
1909
  style: { left: modelMenuLeft, bottom: modelMenuBottom, animation: "mova-prompt-pop 180ms cubic-bezier(0.23,1,0.32,1) both", transformOrigin: "bottom left" },
2209
1910
  children: [
2210
1911
  /* @__PURE__ */ jsx5(
2211
1912
  "span",
2212
1913
  {
2213
1914
  "aria-hidden": true,
2214
- className: "pointer-events-none absolute inset-x-1 rounded-[6px] bg-[var(--hover)]",
1915
+ className: "pointer-events-none absolute inset-x-1 rounded-[6px] bg-[var(--mova-ai-hover,#f1f1f1)]",
2215
1916
  style: {
2216
1917
  top: modelBox?.top ?? 0,
2217
1918
  height: modelBox?.height ?? 0,
@@ -2236,9 +1937,9 @@ function AIPromptBar({
2236
1937
  },
2237
1938
  className: "relative z-10 flex h-7.5 w-full items-center gap-2 rounded-[6px] px-2 text-left",
2238
1939
  children: [
2239
- /* @__PURE__ */ jsx5("span", { className: "min-w-0 flex-1 truncate text-[12.5px] font-medium text-[var(--ink)]", children: m.name }),
2240
- /* @__PURE__ */ jsx5("span", { className: "shrink-0 text-[11px] text-[var(--ink-3)]", children: m.tag }),
2241
- /* @__PURE__ */ jsx5("span", { className: `shrink-0 text-[var(--ink)] ${m.key === model.key ? "" : "invisible"}`, children: /* @__PURE__ */ jsx5(Icon, { size: 13, strokeWidth: 2.5, children: /* @__PURE__ */ jsx5("path", { d: "M20 6L9 17l-5-5" }) }) })
1940
+ /* @__PURE__ */ jsx5("span", { className: "min-w-0 flex-1 truncate text-[12.5px] font-medium text-[var(--mova-ai-ink,#202020)]", children: m.name }),
1941
+ /* @__PURE__ */ jsx5("span", { className: "shrink-0 text-[11px] text-[var(--mova-ai-ink-muted,#858585)]", children: m.tag }),
1942
+ /* @__PURE__ */ jsx5("span", { className: `shrink-0 text-[var(--mova-ai-ink,#202020)] ${m.key === model.key ? "" : "invisible"}`, children: /* @__PURE__ */ jsx5(Icon, { size: 13, strokeWidth: 2.5, children: /* @__PURE__ */ jsx5("path", { d: "M20 6L9 17l-5-5" }) }) })
2242
1943
  ]
2243
1944
  },
2244
1945
  m.key
@@ -2249,7 +1950,7 @@ function AIPromptBar({
2249
1950
  /* @__PURE__ */ jsxs5(
2250
1951
  "div",
2251
1952
  {
2252
- className: `relative isolate flex flex-col overflow-hidden border border-[var(--line)] bg-[var(--surface)] shadow-[var(--shadow-card)] transition-[border-color,border-radius] duration-150 focus-within:border-[var(--line-strong)] ${tall ? "gap-2.5 p-3.5" : "gap-1.5 p-1.5"} ${pill ? attachments.length > 0 || wide ? "rounded-[24px]" : "rounded-full" : tall ? "rounded-[22px]" : "rounded-[14px]"}`,
1953
+ className: `prompt-composer relative isolate flex flex-col overflow-hidden border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] shadow-[var(--mova-ai-shadow-card,none)] transition-[border-color,border-radius] duration-150 focus-within:border-[var(--mova-ai-border-strong,#c8c8c8)] ${tall ? "gap-2.5 p-3.5" : "gap-1.5 p-1.5"} ${pill ? attachments.length > 0 || wide ? "rounded-[24px]" : "rounded-full" : tall ? "rounded-[22px]" : "rounded-[14px]"}`,
2253
1954
  children: [
2254
1955
  /* @__PURE__ */ jsx5(
2255
1956
  "canvas",
@@ -2272,7 +1973,7 @@ function AIPromptBar({
2272
1973
  attachments.length > 0 && /* @__PURE__ */ jsx5("div", { className: `flex flex-wrap gap-1.5 pt-0.5 ${pill ? "px-1" : "px-0.5"}`, children: attachments.map((file, i) => /* @__PURE__ */ jsxs5(
2273
1974
  "span",
2274
1975
  {
2275
- className: `flex h-6.5 items-center gap-1.5 bg-[var(--field)] py-1 pr-1 pl-1.5 text-[11.5px] text-[var(--ink-2)] shadow-[var(--shadow-hairline)] ${pill ? "rounded-full" : "rounded-[6px]"}`,
1976
+ className: `flex h-6.5 items-center gap-1.5 bg-[var(--mova-ai-field,#f6f6f6)] py-1 pr-1 pl-1.5 text-[11.5px] text-[var(--mova-ai-ink-secondary,#666)] shadow-[var(--mova-ai-shadow-hairline,none)] ${pill ? "rounded-full" : "rounded-[6px]"}`,
2276
1977
  style: { animation: "mova-prompt-pop 200ms cubic-bezier(0.23,1,0.32,1) both" },
2277
1978
  children: [
2278
1979
  /* @__PURE__ */ jsx5(Icon, { size: 12, children: /* @__PURE__ */ jsxs5("g", { children: [
@@ -2286,7 +1987,7 @@ function AIPromptBar({
2286
1987
  type: "button",
2287
1988
  "aria-label": `Remove ${file.name}`,
2288
1989
  onClick: () => setAttachments((current) => current.filter((_, j) => j !== i)),
2289
- className: `-my-1 flex size-6 items-center justify-center text-[var(--ink-3)] transition-colors duration-100 hover:bg-[color-mix(in_srgb,var(--line)_70%,transparent)] hover:text-[var(--ink)] ${pill ? "rounded-full" : "rounded-[5px]"}`,
1990
+ className: `-my-1 flex size-6 items-center justify-center text-[var(--mova-ai-ink-muted,#858585)] transition-colors duration-100 hover:bg-[color-mix(in_srgb,var(--mova-ai-border,#dedede)_70%,transparent)] hover:text-[var(--mova-ai-ink,#202020)] ${pill ? "rounded-full" : "rounded-[5px]"}`,
2290
1991
  children: /* @__PURE__ */ jsx5(Icon, { size: 10, strokeWidth: 2.5, children: /* @__PURE__ */ jsx5("path", { d: "M18 6L6 18M6 6l12 12" }) })
2291
1992
  }
2292
1993
  )
@@ -2311,7 +2012,7 @@ function AIPromptBar({
2311
2012
  setPlusOpen((current) => !current);
2312
2013
  inputRef.current?.focus();
2313
2014
  },
2314
- className: `flex size-7 shrink-0 items-center justify-center justify-self-start text-[var(--ink-3)] transition-[background-color,color,transform] duration-150 hover:bg-[var(--hover)] hover:text-[var(--ink)] active:scale-[0.94] ${pill ? "rounded-full" : "rounded-[8px]"} ${plusOpen ? "bg-[var(--hover)] text-[var(--ink)]" : ""} ${wide ? "col-start-1 row-start-2" : "col-start-1 row-start-1"}`,
2015
+ className: `flex size-7 shrink-0 items-center justify-center justify-self-start text-[var(--mova-ai-ink-muted,#858585)] transition-[background-color,color,transform] duration-150 hover:bg-[var(--mova-ai-hover,#f1f1f1)] hover:text-[var(--mova-ai-ink,#202020)] active:scale-[0.94] ${pill ? "rounded-full" : "rounded-[8px]"} ${plusOpen ? "bg-[var(--mova-ai-hover,#f1f1f1)] text-[var(--mova-ai-ink,#202020)]" : ""} ${wide ? "col-start-1 row-start-2" : "col-start-1 row-start-1"}`,
2315
2016
  children: /* @__PURE__ */ jsx5(Icon, { size: 16, strokeWidth: 2, children: /* @__PURE__ */ jsx5("path", { d: "M12 5v14M5 12h14" }) })
2316
2017
  }
2317
2018
  ),
@@ -2356,7 +2057,7 @@ function AIPromptBar({
2356
2057
  "aria-expanded": !!menu,
2357
2058
  "aria-controls": menu ? sourceMenuId : void 0,
2358
2059
  "aria-activedescendant": menu && rows[active] ? `${sourceMenuId}-${active}` : void 0,
2359
- className: `${tall ? "min-h-[68px] px-2 py-2 text-[14px] leading-5" : "min-h-7 px-1 py-[5px] text-[13px] leading-[18px]"} min-w-0 w-full resize-none bg-transparent text-[var(--ink)] outline-none [overflow-wrap:anywhere] placeholder:text-[var(--ink-3)] ${wide ? "col-span-full col-start-1 row-start-1" : "col-start-2 row-start-1"}`
2060
+ className: `${tall ? "min-h-[68px] px-2 py-2 text-[14px] leading-5" : "min-h-7 px-1 py-[5px] text-[13px] leading-[18px]"} min-w-0 w-full resize-none bg-transparent text-[var(--mova-ai-ink,#202020)] outline-none [overflow-wrap:anywhere] placeholder:text-[var(--mova-ai-ink-muted,#858585)] ${wide ? "col-span-full col-start-1 row-start-1" : "col-start-2 row-start-1"}`
2360
2061
  }
2361
2062
  ),
2362
2063
  /* @__PURE__ */ jsxs5(
@@ -2381,10 +2082,10 @@ function AIPromptBar({
2381
2082
  setDismissed(true);
2382
2083
  setModelOpen((current) => !current);
2383
2084
  },
2384
- className: `flex h-7 shrink-0 items-center gap-1 px-1.5 text-[12px] font-medium text-[var(--ink-2)] transition-colors duration-150 hover:bg-[var(--hover)] hover:text-[var(--ink)] ${pill ? "rounded-full" : "rounded-[8px]"} ${wide ? "col-start-2 row-start-2 justify-self-start" : "col-start-3 row-start-1"}`,
2085
+ className: `flex h-7 shrink-0 items-center gap-1 px-1.5 text-[12px] font-medium text-[var(--mova-ai-ink-secondary,#666)] transition-colors duration-150 hover:bg-[var(--mova-ai-hover,#f1f1f1)] hover:text-[var(--mova-ai-ink,#202020)] ${pill ? "rounded-full" : "rounded-[8px]"} ${wide ? "col-start-2 row-start-2 justify-self-start" : "col-start-3 row-start-1"}`,
2385
2086
  children: [
2386
2087
  model.name,
2387
- /* @__PURE__ */ jsx5("span", { className: "text-[var(--ink-3)]", children: /* @__PURE__ */ jsx5(Icon, { size: 11, strokeWidth: 2.4, children: /* @__PURE__ */ jsx5("path", { d: "M6 9l6 6 6-6" }) }) })
2088
+ /* @__PURE__ */ jsx5("span", { className: "text-[var(--mova-ai-ink-muted,#858585)]", children: /* @__PURE__ */ jsx5(Icon, { size: 11, strokeWidth: 2.4, children: /* @__PURE__ */ jsx5("path", { d: "M6 9l6 6 6-6" }) }) })
2388
2089
  ]
2389
2090
  }
2390
2091
  ),
@@ -2395,7 +2096,7 @@ function AIPromptBar({
2395
2096
  "aria-label": listening ? "Stop dictation" : "Start dictation",
2396
2097
  "aria-pressed": listening,
2397
2098
  onClick: toggleDictation,
2398
- className: `flex size-7 shrink-0 items-center justify-center transition-[background-color,color,transform] duration-150 active:scale-[0.94] ${pill ? "rounded-full" : "rounded-[8px]"} ${listening ? "bg-[var(--accent-tint)] text-[var(--accent-ink)]" : "text-[var(--ink-3)] hover:bg-[var(--hover)] hover:text-[var(--ink)]"} ${wide ? "col-start-4 row-start-2" : "col-start-4 row-start-1"}`,
2099
+ className: `flex size-7 shrink-0 items-center justify-center transition-[background-color,color,transform] duration-150 active:scale-[0.94] ${pill ? "rounded-full" : "rounded-[8px]"} ${listening ? "bg-[var(--mova-ai-accent-tint,#eee)] text-[var(--mova-ai-accent-ink,#333)]" : "text-[var(--mova-ai-ink-muted,#858585)] hover:bg-[var(--mova-ai-hover,#f1f1f1)] hover:text-[var(--mova-ai-ink,#202020)]"} ${wide ? "col-start-4 row-start-2" : "col-start-4 row-start-1"}`,
2399
2100
  children: listening ? /* @__PURE__ */ jsx5("span", { className: "flex h-3.5 items-center gap-[2.5px]", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx5(
2400
2101
  "span",
2401
2102
  {
@@ -2418,8 +2119,8 @@ function AIPromptBar({
2418
2119
  onClick: send,
2419
2120
  className: `flex size-7 shrink-0 items-center justify-center transition-[background-color,color,transform] duration-200 enabled:active:scale-[0.94] ${pill ? "rounded-full" : "rounded-[8px]"} ${wide ? "col-start-5 row-start-2" : "col-start-5 row-start-1"}`,
2420
2121
  style: {
2421
- background: canSend ? "var(--ink)" : "var(--line-strong)",
2422
- color: canSend ? "var(--surface)" : "var(--ink-2)"
2122
+ background: canSend ? "var(--mova-ai-ink,#202020)" : "var(--mova-ai-border-strong,#c8c8c8)",
2123
+ color: canSend ? "var(--mova-ai-surface,#fff)" : "var(--mova-ai-ink-secondary,#666)"
2423
2124
  },
2424
2125
  children: /* @__PURE__ */ jsx5(Icon, { size: 16, strokeWidth: 2.4, children: /* @__PURE__ */ jsx5("path", { d: "M12 19V5M5 12l7-7 7 7" }) })
2425
2126
  }
@@ -2431,124 +2132,22 @@ function AIPromptBar({
2431
2132
  }
2432
2133
  )
2433
2134
  ] }),
2434
- /* @__PURE__ */ jsx5("p", { role: "status", className: "mt-2 min-h-4 break-words text-[11px] text-[var(--ink-3)]", children: feedback })
2135
+ /* @__PURE__ */ jsx5("p", { role: "status", className: "mt-2 min-h-4 break-words text-[11px] text-[var(--mova-ai-ink-muted,#858585)]", children: feedback })
2435
2136
  ]
2436
2137
  }
2437
2138
  );
2438
2139
  }
2439
2140
 
2440
2141
  // .generated/ui/ai/ai-sidebar-nav.tsx
2441
- import { useEffect as useEffect8, useRef as useRef5, useState as useState9 } from "react";
2142
+ import { useEffect as useEffect8, useId as useId2, useRef as useRef5, useState as useState9 } from "react";
2442
2143
  import { createPortal } from "react-dom";
2443
2144
  import { LogOut as IconArrowBoxLeft, Check as IconCheckmark1Small, ChevronDown as IconChevronDownSmall, X as IconCrossSmall, SquarePen as IconEditBig, House as IconHome, Search as IconMagnifyingGlass, Plus as IconPlusMedium, IceCream as IconPopsicle2, Settings as IconSettingsGear1, PanelLeftClose as IconSidebarLeftArrow, UserPlus as IconUserAdd } from "lucide-react";
2444
2145
  import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
2445
- var COMPONENT_STYLES2 = `[data-mova-sidebar] {--shadow-xs: 0 0 4px 0 rgba(0, 0, 0, 0.04);--shadow-sm: 0 18px 47px 0 rgba(0, 0, 0, 0.03), 0 7.5px 19px 0 rgba(0, 0, 0, 0.02),
2446
- 0 4px 10.5px 0 rgba(0, 0, 0, 0.02), 0 2.3px 5.8px 0 rgba(0, 0, 0, 0.01),
2447
- 0 1.2px 3.1px 0 rgba(0, 0, 0, 0.01), 0 0.5px 1.3px 0 rgba(0, 0, 0, 0.01);--shadow-md: 0 17.54px 23.39px 0 rgba(0, 0, 0, 0.04), 0 9.4px 12.5px 0 rgba(0, 0, 0, 0.03),
2448
- 0 5.25px 7px 0 rgba(0, 0, 0, 0.02), 0 2.79px 3.72px -2px rgba(0, 0, 0, 0.01),
2449
- 0 1.16px 1.5px 0 rgba(0, 0, 0, 0.01);--shadow-lg: 0 25px 50px 0 rgba(0, 0, 0, 0.05), 0 12px 24px 0 rgba(0, 0, 0, 0.04),
2450
- 0 6px 12px 0 rgba(0, 0, 0, 0.03), 0 3px 6px 0 rgba(0, 0, 0, 0.02),
2451
- 0 1.5px 3px 0 rgba(0, 0, 0, 0.02); font-family:Inter,ui-sans-serif,system-ui,sans-serif; font-size:14px;line-height:1.5;letter-spacing:-0.01em;color:var(--ink);
2452
- /* surfaces \u2014 cool, blue-tinted neutrals */
2453
- --page: oklch(0.985 0.001 286.376);
2454
- --canvas: oklch(0.961 0.002 247.84);
2455
- --surface: oklch(1 0 0);
2456
- --inset: oklch(0.979 0.002 247.839);
2457
- --hover: oklch(0.97 0.002 247.839);
2458
- --hover-2: oklch(0.933 0.003 247.86);
2459
-
2460
- /* ink ramp */
2461
- --ink: oklch(0.247 0.006 258.361);
2462
- --ink-2: oklch(0.506 0.01 264.477);
2463
- --ink-3: oklch(0.695 0.009 264.505);
2464
-
2465
- /* borders \u2014 solid and crisp, not alpha */
2466
- --line: oklch(0.946 0.003 264.542);
2467
- --line-strong: oklch(0.912 0.005 258.326);
2468
- --line-soft: oklch(0.966 0.002 264.542);
2469
- --grid-line: color-mix(in srgb, var(--line) 78%, transparent);
2470
- --field: oklch(0.961 0.001 286.375);
2471
- --stripe: oklch(0.405 0 0 / 0.075);
2472
- --stripe-bg: oklch(0.97 0 0);
2473
-
2474
- /* accent */
2475
- --accent: oklch(0.626 0.205 254.947);
2476
- --accent-ink: oklch(0.556 0.187 255.617);
2477
- --accent-tint: oklch(0.96 0.019 252.878);
2478
-
2479
- /* semantic */
2480
- --green: oklch(0.603 0.155 150.883);
2481
- --green-tint: oklch(0.958 0.017 159.118);
2482
- --orange: oklch(0.689 0.179 49.902);
2483
- --orange-tint: oklch(0.964 0.021 67.581);
2484
- --red: oklch(0.621 0.192 23.042);
2485
- --red-tint: oklch(0.956 0.017 17.462);
2486
-
2487
- /* chart overlays \u2014 neutral system colors with enough contrast on either theme */
2488
- --tooltip-bg: oklch(0.272 0.008 264.435);
2489
- --tooltip-fg: oklch(0.976 0.002 247.839);
2490
- --tooltip-muted: oklch(0.731 0.008 260.731);
2491
- --tooltip-border: oklch(0.356 0.007 264.474);
2492
-
2493
- /* shadows \u2014 our solid hairline ring + shadow-plugin's smooth layered stacks
2494
- * (--shadow-xs\u2026lg come from shadow-plugin/unprefixed) so every surface reads
2495
- * consistently across the app. */
2496
- --shadow-hairline: 0 0 0 1px var(--line);
2497
- --shadow-btn: 0 0 0 1px var(--line-strong), var(--shadow-xs);
2498
- --shadow-card: 0 0 0 1px var(--line), var(--shadow-sm);
2499
- --shadow-raised: 0 0 0 1px var(--line), var(--shadow-md);
2500
- --shadow-overlay: 0 0 0 1px var(--line), var(--shadow-lg);
2501
- --shadow-inset-field: inset 0 1px 2px oklch(0 0 0 / 0.12);}
2502
- [data-mova-sidebar][data-theme="dark"] {
2503
- --page: oklch(0.209 0.004 264.477);
2504
- --canvas: oklch(0.231 0.004 264.487);
2505
- --surface: oklch(0.26 0.006 271.191);
2506
- --inset: oklch(0.243 0.004 264.492);
2507
- --hover: oklch(0.289 0.006 271.22);
2508
- --hover-2: oklch(0.318 0.007 274.747);
2509
-
2510
- --ink: oklch(0.964 0.002 247.839);
2511
- --ink-2: oklch(0.731 0.008 260.731);
2512
- --ink-3: oklch(0.541 0.01 264.484);
2513
-
2514
- --line: oklch(0.308 0.006 258.354);
2515
- --line-strong: oklch(0.356 0.007 264.474);
2516
- --line-soft: oklch(0.278 0.006 258.354);
2517
- --field: oklch(0.293 0.006 271.223);
2518
- --stripe: oklch(1 0 0 / 0.055);
2519
- --stripe-bg: oklch(0.226 0.004 264.485);
2520
-
2521
- --accent: oklch(0.68 0.173 253.301);
2522
- --accent-ink: oklch(0.788 0.113 248.33);
2523
- --accent-tint: oklch(0.68 0.173 253.301 / 0.16);
2524
-
2525
- --green: oklch(0.705 0.154 153.814);
2526
- --green-tint: oklch(0.705 0.154 153.814 / 0.14);
2527
- --orange: oklch(0.746 0.156 55.642);
2528
- --orange-tint: oklch(0.746 0.156 55.642 / 0.14);
2529
- --red: oklch(0.666 0.18 21.433);
2530
- --red-tint: oklch(0.666 0.18 21.433 / 0.14);
2531
-
2532
- --tooltip-bg: oklch(0.182 0.004 264.459);
2533
- --tooltip-fg: oklch(0.964 0.002 247.839);
2534
- --tooltip-muted: oklch(0.731 0.008 260.731);
2535
- --tooltip-border: oklch(0.308 0.006 258.354);
2536
-
2537
- --shadow-hairline: 0 0 0 1px var(--line);
2538
- /* Elevation rings go to a subtle *light* hairline in dark mode: the ring
2539
- * paints over the surface behind the element, so a low-alpha white edge
2540
- * dissolves into the shadow as one continuous stroke (per smooth-shadow-ring),
2541
- * graduated by how far the surface floats. */
2542
- --shadow-btn: 0 0 0 1px oklch(1 0 0 / 0.1), 0 1px 2px oklch(0 0 0 / 0.3);
2543
- --shadow-card:
2544
- 0 0 0 1px oklch(1 0 0 / 0.11), 0 1px 2px oklch(0 0 0 / 0.2),
2545
- 0 2px 6px oklch(0 0 0 / 0.2);
2546
- --shadow-raised:
2547
- 0 0 0 1px oklch(1 0 0 / 0.13), 0 2px 10px oklch(0 0 0 / 0.22);
2548
- --shadow-overlay:
2549
- 0 0 0 1px oklch(1 0 0 / 0.15), 0 8px 28px oklch(0 0 0 / 0.34);
2550
- --shadow-inset-field: inset 0 1px 2px oklch(0 0 0 / 0.4);}
2551
- [data-mova-sidebar] :is(button,input,textarea):focus-visible { outline:2px solid var(--accent);outline-offset:2px; }
2146
+ var AI_THEME_STYLES6 = '/* Shared public tokens for the standalone AI component family. */\n.mova-ai-theme {\n color-scheme: light;\n color: var(--mova-ai-ink, #202020);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;\n font-size: 13px;\n line-height: 1.45;\n letter-spacing: -0.01em;\n\n --mova-ai-page: #f7f7f7;\n --mova-ai-canvas: #f4f4f4;\n --mova-ai-surface: #ffffff;\n --mova-ai-inset: #f8f8f8;\n --mova-ai-hover: #f1f1f1;\n --mova-ai-hover-strong: #e9e9e9;\n\n --mova-ai-ink: #202020;\n --mova-ai-ink-secondary: #666666;\n --mova-ai-ink-muted: #858585;\n\n --mova-ai-border: #dedede;\n --mova-ai-border-soft: #ededed;\n --mova-ai-border-strong: #c8c8c8;\n --mova-ai-field: #f6f6f6;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(32 35 38 / 7%);\n --mova-ai-stripe-bg: #242424;\n\n --mova-ai-accent: #454545;\n --mova-ai-accent-ink: #333333;\n --mova-ai-accent-foreground: #ffffff;\n --mova-ai-accent-tint: #eeeeee;\n --mova-ai-success: #28734d;\n --mova-ai-success-tint: #e8f3ec;\n --mova-ai-warning: #986517;\n --mova-ai-warning-tint: #f8f0df;\n --mova-ai-danger: #a33c3c;\n --mova-ai-danger-tint: #f7eaea;\n --mova-ai-info: #496b89;\n --mova-ai-info-tint: #eaf0f5;\n --mova-ai-neutral-status: #69737d;\n --mova-ai-status-on: #ffffff;\n\n --mova-ai-tooltip-bg: #292929;\n --mova-ai-tooltip-fg: #f6f6f6;\n --mova-ai-tooltip-muted: #c3c3c3;\n --mova-ai-tooltip-border: #484848;\n\n --mova-ai-radius-panel: 8px;\n --mova-ai-radius-control: 8px;\n --mova-ai-shadow-xs: 0 1px 2px rgb(22 28 33 / 5%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(22 28 33 / 7%);\n --mova-ai-shadow-md: 0 8px 20px rgb(22 28 33 / 11%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(22 28 33 / 15%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(22 28 33 / 12%);\n}\n\n.mova-ai-theme[data-theme="dark"] {\n color-scheme: dark;\n --mova-ai-page: #181818;\n --mova-ai-canvas: #202020;\n --mova-ai-surface: #272727;\n --mova-ai-inset: #1d1d1d;\n --mova-ai-hover: #2d2d2d;\n --mova-ai-hover-strong: #393939;\n\n --mova-ai-ink: #eeeeee;\n --mova-ai-ink-secondary: #b5b5b5;\n --mova-ai-ink-muted: #929292;\n\n --mova-ai-border: #3b3b3b;\n --mova-ai-border-soft: #303030;\n --mova-ai-border-strong: #505050;\n --mova-ai-field: #2c2c2c;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(255 255 255 / 6%);\n --mova-ai-stripe-bg: #202528;\n\n --mova-ai-accent: #c2c2c2;\n --mova-ai-accent-ink: #d5d5d5;\n --mova-ai-accent-foreground: #202020;\n --mova-ai-accent-tint: #353535;\n --mova-ai-success: #88c7a0;\n --mova-ai-success-tint: #293b30;\n --mova-ai-warning: #d7b66f;\n --mova-ai-warning-tint: #3c3525;\n --mova-ai-danger: #e5928e;\n --mova-ai-danger-tint: #3c2b2b;\n --mova-ai-info: #9bbbd6;\n --mova-ai-info-tint: #293541;\n --mova-ai-neutral-status: #a0a0a0;\n --mova-ai-status-on: #181818;\n\n --mova-ai-tooltip-bg: #121212;\n --mova-ai-tooltip-fg: #eeeeee;\n --mova-ai-tooltip-muted: #b5b5b5;\n --mova-ai-tooltip-border: #3b3b3b;\n\n --mova-ai-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(0 0 0 / 25%);\n --mova-ai-shadow-md: 0 8px 20px rgb(0 0 0 / 30%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(0 0 0 / 38%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(0 0 0 / 42%);\n}\n';
2147
+ var COMPONENT_STYLES2 = `[data-mova-sidebar] button:focus-visible { outline:2px solid var(--mova-ai-accent,#454545);outline-offset:2px;border-radius:8px; }
2148
+ [data-mova-sidebar] input:focus-visible { outline:none; }
2149
+ [data-mova-sidebar] .sidebar-search:focus-within { outline:2px solid var(--mova-ai-accent,#454545);outline-offset:2px;border-radius:8px; }
2150
+ [data-mova-sidebar] .sidebar-search button:focus-visible { outline:none; }
2552
2151
  [data-mova-sidebar] button { cursor:pointer; } [data-mova-sidebar] button:disabled { cursor:default; }
2553
2152
  [data-mova-sidebar] .sidebar-row{
2554
2153
  width: 208px;
@@ -2619,7 +2218,7 @@ var COMPONENT_STYLES2 = `[data-mova-sidebar] {--shadow-xs: 0 0 4px 0 rgba(0, 0,
2619
2218
  function GlideMenu3({
2620
2219
  children,
2621
2220
  className = "",
2622
- highlightClassName = "inset-x-0 rounded-[8px] bg-[var(--hover)]",
2221
+ highlightClassName = "inset-x-0 rounded-[8px] bg-[var(--mova-ai-hover,#f1f1f1)]",
2623
2222
  rowSelector = "[data-menu-row]"
2624
2223
  }) {
2625
2224
  const ref = useRef5(null);
@@ -2691,14 +2290,15 @@ var SIDEBAR_MOTION = {
2691
2290
  var CHAT_SEARCH_MOTION = {
2692
2291
  duration: 180,
2693
2292
  closedWidth: 28,
2694
- easing: "cubic-bezier(0.16, 1, 0.3, 1)"
2293
+ easing: "cubic-bezier(0.16, 1, 0.3, 1)",
2294
+ listDuration: 220
2695
2295
  };
2696
2296
  function GlideGroup({ children }) {
2697
2297
  return /* @__PURE__ */ jsx6(
2698
2298
  GlideMenu3,
2699
2299
  {
2700
2300
  rowSelector: "[data-row]",
2701
- highlightClassName: "sidebar-glide-highlight rounded-[7px] bg-[var(--hover-2)]",
2301
+ highlightClassName: "sidebar-glide-highlight rounded-[7px] bg-[var(--mova-ai-hover-strong,#e9e9e9)]",
2702
2302
  className: "group/glide flex flex-col gap-px",
2703
2303
  children
2704
2304
  }
@@ -2721,11 +2321,11 @@ function RailButton({
2721
2321
  onClick,
2722
2322
  className: `sidebar-row relative z-10 mx-2 flex h-8 items-center rounded-[8px] px-2 text-left
2723
2323
  transition-[width,background-color,color,transform] duration-150 active:scale-[0.98]
2724
- ${active ? "bg-[var(--hover-2)] group-hover/glide:bg-transparent" : ""}`,
2324
+ ${active ? "bg-[var(--mova-ai-hover-strong,#e9e9e9)] group-hover/glide:bg-transparent" : ""}`,
2725
2325
  children: [
2726
- /* @__PURE__ */ jsx6("span", { className: `flex size-5 shrink-0 items-center justify-center ${active ? "text-[var(--ink)]" : "text-[var(--ink-2)]"}`, children: icon }),
2727
- /* @__PURE__ */ jsx6("span", { className: `sidebar-copy ml-1.5 min-w-0 flex-1 truncate text-[14px] font-medium ${active ? "text-[var(--ink)]" : "text-[var(--ink-2)]"}`, children: label }),
2728
- count && /* @__PURE__ */ jsx6("span", { className: "sidebar-copy mr-2 shrink-0 text-[12px] font-medium tabular-nums text-[var(--ink-3)]", children: count })
2326
+ /* @__PURE__ */ jsx6("span", { className: `flex size-5 shrink-0 items-center justify-center ${active ? "text-[var(--mova-ai-ink,#202020)]" : "text-[var(--mova-ai-ink-secondary,#666)]"}`, children: icon }),
2327
+ /* @__PURE__ */ jsx6("span", { className: `sidebar-copy ml-1.5 min-w-0 flex-1 truncate text-[14px] font-medium ${active ? "text-[var(--mova-ai-ink,#202020)]" : "text-[var(--mova-ai-ink-secondary,#666)]"}`, children: label }),
2328
+ count && /* @__PURE__ */ jsx6("span", { className: "sidebar-copy mr-2 shrink-0 text-[12px] font-medium tabular-nums text-[var(--mova-ai-ink-muted,#858585)]", children: count })
2729
2329
  ]
2730
2330
  }
2731
2331
  );
@@ -2762,7 +2362,7 @@ function WorkspaceMenu({
2762
2362
  buttons[(index + (event.key === "ArrowDown" ? 1 : buttons.length - 1)) % buttons.length]?.focus();
2763
2363
  }
2764
2364
  },
2765
- className: "fixed z-50 w-64 rounded-[14px] bg-[var(--surface)] p-1.5 shadow-[var(--shadow-overlay)]",
2365
+ className: "mova-ai-theme fixed z-50 w-64 rounded-lg border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] p-1.5 shadow-[var(--mova-ai-shadow-overlay,none)]",
2766
2366
  style: {
2767
2367
  top: position.top,
2768
2368
  left: position.left,
@@ -2773,8 +2373,11 @@ function WorkspaceMenu({
2773
2373
  transformOrigin: "top left"
2774
2374
  },
2775
2375
  children: [
2776
- /* @__PURE__ */ jsx6("style", { children: COMPONENT_STYLES2 }),
2777
- /* @__PURE__ */ jsxs6(GlideMenu3, { className: "flex flex-col gap-px", highlightClassName: "inset-x-0 rounded-[8px] bg-[var(--hover-2)]", children: [
2376
+ /* @__PURE__ */ jsxs6("style", { children: [
2377
+ AI_THEME_STYLES6,
2378
+ COMPONENT_STYLES2
2379
+ ] }),
2380
+ /* @__PURE__ */ jsxs6(GlideMenu3, { className: "flex flex-col gap-px", highlightClassName: "inset-x-0 rounded-[8px] bg-[var(--mova-ai-hover-strong,#e9e9e9)]", children: [
2778
2381
  /* @__PURE__ */ jsxs6(
2779
2382
  "button",
2780
2383
  {
@@ -2783,13 +2386,13 @@ function WorkspaceMenu({
2783
2386
  onClick: onClose,
2784
2387
  className: "relative z-10 flex h-10 w-full items-center gap-1.5 rounded-[8px] px-2 text-left",
2785
2388
  children: [
2786
- /* @__PURE__ */ jsx6("span", { className: "flex size-6 shrink-0 items-center justify-center rounded-[7px] bg-[var(--ink)] text-[11px] font-semibold text-[var(--surface)]", children: WORKSPACE.monogram }),
2787
- /* @__PURE__ */ jsx6("span", { className: "min-w-0 flex-1 truncate text-[13.5px] font-medium text-[var(--ink)]", children: WORKSPACE.name }),
2788
- /* @__PURE__ */ jsx6("span", { className: "shrink-0 text-[var(--ink)]", children: /* @__PURE__ */ jsx6(IconCheckmark1Small, { size: 18 }) })
2389
+ /* @__PURE__ */ jsx6("span", { className: "flex size-6 shrink-0 items-center justify-center rounded-[7px] bg-[var(--mova-ai-ink,#202020)] text-[11px] font-semibold text-[var(--mova-ai-surface,#fff)]", children: WORKSPACE.monogram }),
2390
+ /* @__PURE__ */ jsx6("span", { className: "min-w-0 flex-1 truncate text-[13.5px] font-medium text-[var(--mova-ai-ink,#202020)]", children: WORKSPACE.name }),
2391
+ /* @__PURE__ */ jsx6("span", { className: "shrink-0 text-[var(--mova-ai-ink,#202020)]", children: /* @__PURE__ */ jsx6(IconCheckmark1Small, { size: 18 }) })
2789
2392
  ]
2790
2393
  }
2791
2394
  ),
2792
- /* @__PURE__ */ jsx6("div", { className: "my-1 h-px bg-[var(--line)]" }),
2395
+ /* @__PURE__ */ jsx6("div", { className: "my-1 h-px bg-[var(--mova-ai-border,#dedede)]" }),
2793
2396
  [
2794
2397
  { label: "New workspace", icon: /* @__PURE__ */ jsx6(IconPlusMedium, { size: 16 }) },
2795
2398
  { label: "Workspace settings", icon: /* @__PURE__ */ jsx6(IconSettingsGear1, { size: 16 }) },
@@ -2805,13 +2408,13 @@ function WorkspaceMenu({
2805
2408
  },
2806
2409
  className: "relative z-10 flex h-9 w-full items-center gap-1.5 rounded-[8px] px-2 text-left",
2807
2410
  children: [
2808
- /* @__PURE__ */ jsx6("span", { className: "flex size-5 shrink-0 items-center justify-center text-[var(--ink-2)]", children: item.icon }),
2809
- /* @__PURE__ */ jsx6("span", { className: "min-w-0 flex-1 truncate text-[13.5px] text-[var(--ink)]", children: item.label })
2411
+ /* @__PURE__ */ jsx6("span", { className: "flex size-5 shrink-0 items-center justify-center text-[var(--mova-ai-ink-secondary,#666)]", children: item.icon }),
2412
+ /* @__PURE__ */ jsx6("span", { className: "min-w-0 flex-1 truncate text-[13.5px] text-[var(--mova-ai-ink,#202020)]", children: item.label })
2810
2413
  ]
2811
2414
  },
2812
2415
  item.label
2813
2416
  )),
2814
- /* @__PURE__ */ jsx6("div", { className: "my-1 h-px bg-[var(--line)]" }),
2417
+ /* @__PURE__ */ jsx6("div", { className: "my-1 h-px bg-[var(--mova-ai-border,#dedede)]" }),
2815
2418
  /* @__PURE__ */ jsxs6(
2816
2419
  "button",
2817
2420
  {
@@ -2823,8 +2426,8 @@ function WorkspaceMenu({
2823
2426
  },
2824
2427
  className: "relative z-10 flex h-9 w-full items-center gap-1.5 rounded-[8px] px-2 text-left",
2825
2428
  children: [
2826
- /* @__PURE__ */ jsx6("span", { className: "flex size-5 shrink-0 items-center justify-center text-[var(--ink-2)]", children: /* @__PURE__ */ jsx6(IconArrowBoxLeft, { size: 16 }) }),
2827
- /* @__PURE__ */ jsx6("span", { className: "min-w-0 flex-1 truncate text-[13.5px] text-[var(--ink)]", children: "Sign out" })
2429
+ /* @__PURE__ */ jsx6("span", { className: "flex size-5 shrink-0 items-center justify-center text-[var(--mova-ai-ink-secondary,#666)]", children: /* @__PURE__ */ jsx6(IconArrowBoxLeft, { size: 16 }) }),
2430
+ /* @__PURE__ */ jsx6("span", { className: "min-w-0 flex-1 truncate text-[13.5px] text-[var(--mova-ai-ink,#202020)]", children: "Sign out" })
2828
2431
  ]
2829
2432
  }
2830
2433
  )
@@ -2860,7 +2463,7 @@ function AISidebarNav({
2860
2463
  const currentNav = activeNav ?? internalNav;
2861
2464
  const selectNav = (key) => {
2862
2465
  setInternalNav(key);
2863
- setFeedback(key === "home" ? "Home selected" : key === "invite" ? "Invite users selected" : "Chats selected");
2466
+ if (key === "home" || key === "invite") setFeedback(key === "home" ? "Home selected" : "Invite users selected");
2864
2467
  onNavigate?.(key);
2865
2468
  };
2866
2469
  const [demoActiveTitle, setDemoActiveTitle] = useState9(null);
@@ -2868,6 +2471,9 @@ function AISidebarNav({
2868
2471
  const [workspacePosition, setWorkspacePosition] = useState9({ top: 0, left: 0 });
2869
2472
  const [searchOpen, setSearchOpen] = useState9(false);
2870
2473
  const [query, setQuery] = useState9("");
2474
+ const [chatsExpanded, setChatsExpanded] = useState9(true);
2475
+ const historyId = useId2();
2476
+ const searchId = useId2();
2871
2477
  const workspaceButtonRef = useRef5(null);
2872
2478
  const searchRef = useRef5(null);
2873
2479
  const selectedTitle = activeTitle === void 0 ? demoActiveTitle : activeTitle;
@@ -2904,6 +2510,13 @@ function AISidebarNav({
2904
2510
  setSearchOpen(false);
2905
2511
  setQuery("");
2906
2512
  };
2513
+ const toggleChats = () => {
2514
+ if (chatsExpanded) {
2515
+ setSearchOpen(false);
2516
+ setQuery("");
2517
+ }
2518
+ setChatsExpanded(!chatsExpanded);
2519
+ };
2907
2520
  return /* @__PURE__ */ jsxs6(
2908
2521
  "aside",
2909
2522
  {
@@ -2912,7 +2525,7 @@ function AISidebarNav({
2912
2525
  "data-theme": theme,
2913
2526
  "data-sidebar-collapsed": collapsed,
2914
2527
  "aria-label": "Workspace navigation",
2915
- className: `relative flex shrink-0 overflow-hidden transition-[width] ${fill ? "h-full" : "h-[600px]"} ${className}`,
2528
+ className: `mova-ai-theme relative flex shrink-0 overflow-hidden rounded-lg border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] text-[color:var(--mova-ai-ink,#202020)] transition-[width] ${fill ? "h-full" : "h-[600px]"} ${className}`,
2916
2529
  style: {
2917
2530
  width: collapsed ? SIDEBAR_MOTION.collapsedWidth : SIDEBAR_MOTION.expandedWidth,
2918
2531
  transitionDuration: `${SIDEBAR_MOTION.duration}ms`,
@@ -2922,7 +2535,10 @@ function AISidebarNav({
2922
2535
  "--sidebar-easing": SIDEBAR_MOTION.easing
2923
2536
  },
2924
2537
  children: [
2925
- /* @__PURE__ */ jsx6("style", { children: COMPONENT_STYLES2 }),
2538
+ /* @__PURE__ */ jsxs6("style", { children: [
2539
+ AI_THEME_STYLES6,
2540
+ COMPONENT_STYLES2
2541
+ ] }),
2926
2542
  /* @__PURE__ */ jsxs6("div", { className: "flex min-h-0 w-[224px] shrink-0 flex-col", children: [
2927
2543
  /* @__PURE__ */ jsxs6("div", { className: "relative mb-2.5 h-10 shrink-0", children: [
2928
2544
  /* @__PURE__ */ jsxs6(
@@ -2941,11 +2557,11 @@ function AISidebarNav({
2941
2557
  }
2942
2558
  setWorkspaceOpen((open) => !open);
2943
2559
  },
2944
- className: "sidebar-workspace-control absolute left-2 top-1 flex h-8 w-[164px] items-center rounded-[8px] px-2 text-left transition-[background-color,transform] duration-100 hover:bg-[var(--hover-2)] active:scale-[0.99]",
2560
+ className: "sidebar-workspace-control absolute left-2 top-1 flex h-8 w-[164px] items-center rounded-[8px] px-2 text-left transition-[background-color,transform] duration-100 hover:bg-[var(--mova-ai-hover-strong,#e9e9e9)] active:scale-[0.99]",
2945
2561
  children: [
2946
- /* @__PURE__ */ jsx6("span", { className: "sidebar-logo flex size-5 shrink-0 items-center justify-center text-[var(--ink)]", children: /* @__PURE__ */ jsx6(IconPopsicle2, { size: 18 }) }),
2947
- /* @__PURE__ */ jsx6("span", { className: "sidebar-copy ml-1.5 min-w-0 flex-1 truncate text-[14px] font-medium text-[var(--ink-2)]", children: WORKSPACE.name }),
2948
- /* @__PURE__ */ jsx6("span", { className: "sidebar-copy ml-1 flex shrink-0 text-[var(--ink-3)]", children: /* @__PURE__ */ jsx6(IconChevronDownSmall, { size: 16 }) })
2562
+ /* @__PURE__ */ jsx6("span", { className: "sidebar-logo flex size-5 shrink-0 items-center justify-center text-[var(--mova-ai-ink,#202020)]", children: /* @__PURE__ */ jsx6(IconPopsicle2, { size: 18 }) }),
2563
+ /* @__PURE__ */ jsx6("span", { className: "sidebar-copy ml-1.5 min-w-0 flex-1 truncate text-[14px] font-medium text-[var(--mova-ai-ink-secondary,#666)]", children: WORKSPACE.name }),
2564
+ /* @__PURE__ */ jsx6("span", { className: "sidebar-copy ml-1 flex shrink-0 text-[var(--mova-ai-ink-muted,#858585)]", children: /* @__PURE__ */ jsx6(IconChevronDownSmall, { size: 16 }) })
2949
2565
  ]
2950
2566
  }
2951
2567
  ),
@@ -2965,7 +2581,7 @@ function AISidebarNav({
2965
2581
  "aria-hidden": collapsed,
2966
2582
  tabIndex: collapsed ? -1 : 0,
2967
2583
  onClick: collapse,
2968
- className: "sidebar-collapse-control absolute right-2 top-1 flex size-8 items-center justify-center rounded-[8px] text-[var(--ink-3)] transition-[opacity,background-color,color] duration-150 hover:bg-[var(--hover-2)] hover:text-[var(--ink)]",
2584
+ className: "sidebar-collapse-control absolute right-2 top-1 flex size-8 items-center justify-center rounded-[8px] text-[var(--mova-ai-ink-muted,#858585)] transition-[opacity,background-color,color] duration-150 hover:bg-[var(--mova-ai-hover-strong,#e9e9e9)] hover:text-[var(--mova-ai-ink,#202020)]",
2969
2585
  children: /* @__PURE__ */ jsx6(IconSidebarLeftArrow, { size: 18 })
2970
2586
  }
2971
2587
  ),
@@ -2981,7 +2597,7 @@ function AISidebarNav({
2981
2597
  setCollapsed(false);
2982
2598
  requestAnimationFrame(() => collapseRef.current?.focus());
2983
2599
  },
2984
- className: "sidebar-expand-control absolute left-2 top-0.5 flex size-9 items-center justify-center rounded-[8px] text-[var(--ink-3)] transition-[opacity,background-color,color] duration-150 hover:bg-[var(--hover-2)] hover:text-[var(--ink)]",
2600
+ className: "sidebar-expand-control absolute left-2 top-0.5 flex size-9 items-center justify-center rounded-[8px] text-[var(--mova-ai-ink-muted,#858585)] transition-[opacity,background-color,color] duration-150 hover:bg-[var(--mova-ai-hover-strong,#e9e9e9)] hover:text-[var(--mova-ai-ink,#202020)]",
2985
2601
  children: /* @__PURE__ */ jsx6(IconSidebarLeftArrow, { size: 18, className: "rotate-180" })
2986
2602
  }
2987
2603
  )
@@ -3012,16 +2628,22 @@ function AISidebarNav({
3012
2628
  item.key
3013
2629
  ))
3014
2630
  ] }),
3015
- /* @__PURE__ */ jsxs6("div", { className: "mt-3 min-h-0 flex-1 overflow-y-auto", inert: collapsed, children: [
3016
- /* @__PURE__ */ jsxs6("div", { className: "sidebar-copy relative mx-2 mb-1 h-8", children: [
2631
+ /* @__PURE__ */ jsxs6("div", { className: "mt-3 flex min-h-0 flex-1 flex-col", inert: collapsed, children: [
2632
+ /* @__PURE__ */ jsxs6("div", { className: "sidebar-copy relative mx-2 mb-1 h-8 shrink-0", children: [
3017
2633
  /* @__PURE__ */ jsxs6(
3018
- "div",
2634
+ "button",
3019
2635
  {
2636
+ type: "button",
2637
+ "aria-label": "Chats",
2638
+ "aria-expanded": chatsExpanded,
2639
+ "aria-controls": historyId,
3020
2640
  "aria-hidden": searchOpen,
3021
- className: `absolute inset-0 flex items-center gap-1.5 px-2 text-[12.5px] font-medium text-[var(--ink-3)] transition-[opacity,transform] ${searchOpen ? "pointer-events-none -translate-x-1 opacity-0" : "translate-x-0 opacity-100"}`,
2641
+ tabIndex: searchOpen ? -1 : 0,
2642
+ onClick: toggleChats,
2643
+ className: `absolute inset-0 flex items-center gap-1.5 rounded-[8px] px-2 text-left text-[12.5px] font-medium text-[var(--mova-ai-ink-muted,#858585)] transition-[opacity,transform,color] hover:text-[var(--mova-ai-ink,#202020)] ${searchOpen ? "pointer-events-none -translate-x-1 opacity-0" : "translate-x-0 opacity-100"}`,
3022
2644
  style: { transitionDuration: `${CHAT_SEARCH_MOTION.duration}ms`, transitionTimingFunction: CHAT_SEARCH_MOTION.easing },
3023
2645
  children: [
3024
- /* @__PURE__ */ jsx6(IconChevronDownSmall, { size: 16 }),
2646
+ /* @__PURE__ */ jsx6(IconChevronDownSmall, { size: 16, className: `transition-transform duration-200 ${chatsExpanded ? "rotate-0" : "-rotate-90"}` }),
3025
2647
  /* @__PURE__ */ jsx6("span", { children: "Chats" })
3026
2648
  ]
3027
2649
  }
@@ -3034,8 +2656,13 @@ function AISidebarNav({
3034
2656
  "aria-label": "Search chats",
3035
2657
  tabIndex: searchOpen ? -1 : 0,
3036
2658
  "aria-expanded": searchOpen,
3037
- onClick: () => setSearchOpen(true),
3038
- className: `absolute right-0 top-0 z-10 flex size-8 items-center justify-center rounded-[8px] text-[var(--ink-3)] transition-[opacity,background-color,color,transform] hover:bg-[var(--hover-2)] hover:text-[var(--ink)] active:scale-[0.96] ${searchOpen ? "pointer-events-none opacity-0" : "opacity-100"}`,
2659
+ "aria-controls": searchId,
2660
+ "aria-hidden": searchOpen,
2661
+ onClick: () => {
2662
+ setChatsExpanded(true);
2663
+ setSearchOpen(true);
2664
+ },
2665
+ className: `absolute right-0 top-0 z-10 flex size-8 items-center justify-center rounded-[8px] text-[var(--mova-ai-ink-muted,#858585)] transition-[opacity,background-color,color,transform] hover:bg-[var(--mova-ai-hover-strong,#e9e9e9)] hover:text-[var(--mova-ai-ink,#202020)] active:scale-[0.96] ${searchOpen ? "pointer-events-none opacity-0" : "opacity-100"}`,
3039
2666
  style: { transitionDuration: `${CHAT_SEARCH_MOTION.duration}ms` },
3040
2667
  children: /* @__PURE__ */ jsx6(IconMagnifyingGlass, { size: 16 })
3041
2668
  }
@@ -3043,7 +2670,11 @@ function AISidebarNav({
3043
2670
  /* @__PURE__ */ jsxs6(
3044
2671
  "div",
3045
2672
  {
3046
- className: `absolute right-0 top-0 z-20 flex h-8 items-center overflow-hidden rounded-[8px] bg-[var(--field)] text-[var(--ink-3)] shadow-[var(--shadow-hairline)] transition-[width,opacity] focus-within:text-[var(--ink-2)] ${searchOpen ? "pointer-events-auto opacity-100" : "pointer-events-none opacity-0"}`,
2673
+ id: searchId,
2674
+ role: "search",
2675
+ "aria-hidden": !searchOpen,
2676
+ inert: !searchOpen,
2677
+ className: `sidebar-search absolute right-0 top-0 z-20 flex h-8 items-center overflow-hidden rounded-[8px] bg-[var(--mova-ai-field,#f6f6f6)] text-[var(--mova-ai-ink-muted,#858585)] shadow-[var(--mova-ai-shadow-hairline,none)] transition-[width,opacity] focus-within:text-[var(--mova-ai-ink-secondary,#666)] ${searchOpen ? "pointer-events-auto opacity-100" : "pointer-events-none opacity-0"}`,
3047
2678
  style: {
3048
2679
  width: searchOpen ? "100%" : CHAT_SEARCH_MOTION.closedWidth,
3049
2680
  transitionDuration: `${CHAT_SEARCH_MOTION.duration}ms`,
@@ -3067,7 +2698,7 @@ function AISidebarNav({
3067
2698
  },
3068
2699
  placeholder: "Search chats",
3069
2700
  "aria-label": "Search chat history",
3070
- className: "ml-1.5 min-w-0 flex-1 bg-transparent text-[13px] font-medium text-[var(--ink)] outline-none placeholder:text-[var(--ink-3)]"
2701
+ className: "ml-1.5 min-w-0 flex-1 bg-transparent text-[13px] font-medium text-[var(--mova-ai-ink,#202020)] outline-none placeholder:text-[var(--mova-ai-ink-muted,#858585)]"
3071
2702
  }
3072
2703
  ),
3073
2704
  /* @__PURE__ */ jsx6(
@@ -3081,7 +2712,7 @@ function AISidebarNav({
3081
2712
  setQuery("");
3082
2713
  searchButtonRef.current?.focus();
3083
2714
  },
3084
- className: "flex size-8 shrink-0 items-center justify-center rounded-[8px] text-[var(--ink-3)] transition-[background-color,color,transform] duration-150 hover:bg-[var(--hover-2)] hover:text-[var(--ink)] active:scale-[0.96]",
2715
+ className: "flex size-8 shrink-0 items-center justify-center rounded-[8px] text-[var(--mova-ai-ink-muted,#858585)] transition-[background-color,color,transform] duration-150 hover:bg-[var(--mova-ai-hover-strong,#e9e9e9)] hover:text-[var(--mova-ai-ink,#202020)] active:scale-[0.96]",
3085
2716
  children: /* @__PURE__ */ jsx6(IconCrossSmall, { size: 16 })
3086
2717
  }
3087
2718
  )
@@ -3089,47 +2720,62 @@ function AISidebarNav({
3089
2720
  }
3090
2721
  )
3091
2722
  ] }),
3092
- /* @__PURE__ */ jsxs6(GlideGroup, { children: [
3093
- visibleRecents.map((item) => {
3094
- const active = item.label === selectedTitle;
3095
- return /* @__PURE__ */ jsx6(
3096
- "button",
3097
- {
3098
- "data-row": true,
3099
- type: "button",
3100
- title: item.label,
3101
- "aria-current": active ? "page" : void 0,
3102
- onClick: () => {
3103
- selectNav("chats");
3104
- if (activeTitle === void 0) setDemoActiveTitle(item.label);
3105
- onPick?.(item.id, item.label, item.prompt);
3106
- },
3107
- className: `sidebar-row relative z-10 mx-2 flex h-8 items-center rounded-[8px] px-2 text-left transition-[width,background-color,color,transform] duration-150 active:scale-[0.98] ${active ? "bg-[var(--hover-2)] group-hover/glide:bg-transparent" : ""}`,
3108
- children: /* @__PURE__ */ jsx6("span", { className: `sidebar-copy min-w-0 flex-1 truncate text-[14px] font-medium ${active ? "text-[var(--ink)]" : "text-[var(--ink-2)]"}`, children: item.label })
3109
- },
3110
- item.id
3111
- );
3112
- }),
3113
- query && visibleRecents.length === 0 && /* @__PURE__ */ jsx6("div", { className: "sidebar-copy mx-2 px-2 py-2 text-[12.5px] text-[var(--ink-3)]", children: "No chats found" })
3114
- ] })
2723
+ /* @__PURE__ */ jsx6(
2724
+ "div",
2725
+ {
2726
+ id: historyId,
2727
+ "aria-hidden": !chatsExpanded,
2728
+ inert: !chatsExpanded,
2729
+ className: "grid min-h-0 flex-1 transition-[grid-template-rows,opacity]",
2730
+ style: {
2731
+ gridTemplateRows: chatsExpanded ? "minmax(0, 1fr)" : "minmax(0, 0fr)",
2732
+ opacity: chatsExpanded ? 1 : 0,
2733
+ transitionDuration: `${CHAT_SEARCH_MOTION.listDuration}ms`,
2734
+ transitionTimingFunction: CHAT_SEARCH_MOTION.easing
2735
+ },
2736
+ children: /* @__PURE__ */ jsx6("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ jsx6("div", { className: "h-full overflow-y-auto", children: /* @__PURE__ */ jsxs6(GlideGroup, { children: [
2737
+ visibleRecents.map((item) => {
2738
+ const active = item.label === selectedTitle;
2739
+ return /* @__PURE__ */ jsx6(
2740
+ "button",
2741
+ {
2742
+ "data-row": true,
2743
+ type: "button",
2744
+ title: item.label,
2745
+ "aria-current": active ? "page" : void 0,
2746
+ onClick: () => {
2747
+ setInternalNav("chats");
2748
+ onNavigate?.("chats");
2749
+ if (activeTitle === void 0) setDemoActiveTitle(item.label);
2750
+ onPick?.(item.id, item.label, item.prompt);
2751
+ },
2752
+ className: `sidebar-row relative z-10 mx-2 flex h-8 items-center rounded-[8px] px-2 text-left transition-[width,background-color,color,transform] duration-150 active:scale-[0.98] ${active ? "bg-[var(--mova-ai-hover-strong,#e9e9e9)] group-hover/glide:bg-transparent" : ""}`,
2753
+ children: /* @__PURE__ */ jsx6("span", { className: `sidebar-copy min-w-0 flex-1 truncate text-[14px] font-medium ${active ? "text-[var(--mova-ai-ink,#202020)]" : "text-[var(--mova-ai-ink-secondary,#666)]"}`, children: item.label })
2754
+ },
2755
+ item.id
2756
+ );
2757
+ }),
2758
+ query && visibleRecents.length === 0 && /* @__PURE__ */ jsx6("div", { className: "sidebar-copy mx-2 px-2 py-2 text-[12.5px] text-[var(--mova-ai-ink-muted,#858585)]", children: "No chats found" })
2759
+ ] }) }) })
2760
+ }
2761
+ )
3115
2762
  ] }),
3116
- /* @__PURE__ */ jsxs6("div", { inert: collapsed, className: "sidebar-copy mx-2 mt-3 w-[208px] border-t border-[var(--line)] pt-3", children: [
2763
+ /* @__PURE__ */ jsxs6("div", { inert: collapsed, className: "sidebar-copy mx-2 mt-3 w-[208px] border-t border-[var(--mova-ai-border,#dedede)] pt-3", children: [
3117
2764
  /* @__PURE__ */ jsxs6(
3118
2765
  "button",
3119
2766
  {
3120
2767
  type: "button",
3121
2768
  onClick: () => {
3122
- setFeedback(`${footerLabel} selected`);
3123
2769
  (onFooterClick ?? onNewChat)?.();
3124
2770
  },
3125
- className: "flex h-8 w-full items-center justify-center gap-1.5 rounded-[8px] bg-[var(--hover-2)] text-[12.5px] font-medium text-[var(--ink)] transition-[background-color,transform] duration-150 hover:bg-[var(--line-strong)] active:scale-[0.98]",
2771
+ className: "flex h-8 w-full items-center justify-center gap-1.5 rounded-[8px] bg-[var(--mova-ai-hover-strong,#e9e9e9)] text-[12.5px] font-medium text-[var(--mova-ai-ink,#202020)] transition-[background-color,transform] duration-150 hover:bg-[var(--mova-ai-border-strong,#c8c8c8)] active:scale-[0.98]",
3126
2772
  children: [
3127
2773
  footerIcon,
3128
2774
  footerLabel
3129
2775
  ]
3130
2776
  }
3131
2777
  ),
3132
- /* @__PURE__ */ jsx6("p", { role: "status", className: "mt-2 text-[11px] text-[var(--ink-3)]", children: feedback })
2778
+ /* @__PURE__ */ jsx6("p", { role: "status", className: "sr-only", children: feedback })
3133
2779
  ] })
3134
2780
  ] })
3135
2781
  ]
@@ -3140,7 +2786,7 @@ function AISidebarNav({
3140
2786
  // .generated/ui/ai/ai-sources.tsx
3141
2787
  import { ChevronRight, Globe } from "lucide-react";
3142
2788
  import { AnimatePresence as AnimatePresence2, motion as motion2, useReducedMotion as useReducedMotion3 } from "framer-motion";
3143
- import { useId as useId2, useState as useState10 } from "react";
2789
+ import { useId as useId3, useState as useState10 } from "react";
3144
2790
  import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
3145
2791
  var SPRING_DEFAULT2 = { bounce: 0.1, duration: 0.25, type: "spring" };
3146
2792
  var EASE_OUT2 = [0.23, 1, 0.32, 1];
@@ -3148,6 +2794,7 @@ var STACK_LIMIT = 3;
3148
2794
  var STACK_OVERLAP_PX = 8;
3149
2795
  var FAN_GAP_PX = 3;
3150
2796
  var ROW_STAGGER = 0.035;
2797
+ var AI_THEME_STYLES7 = '/* Shared public tokens for the standalone AI component family. */\n.mova-ai-theme {\n color-scheme: light;\n color: var(--mova-ai-ink, #202020);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;\n font-size: 13px;\n line-height: 1.45;\n letter-spacing: -0.01em;\n\n --mova-ai-page: #f7f7f7;\n --mova-ai-canvas: #f4f4f4;\n --mova-ai-surface: #ffffff;\n --mova-ai-inset: #f8f8f8;\n --mova-ai-hover: #f1f1f1;\n --mova-ai-hover-strong: #e9e9e9;\n\n --mova-ai-ink: #202020;\n --mova-ai-ink-secondary: #666666;\n --mova-ai-ink-muted: #858585;\n\n --mova-ai-border: #dedede;\n --mova-ai-border-soft: #ededed;\n --mova-ai-border-strong: #c8c8c8;\n --mova-ai-field: #f6f6f6;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(32 35 38 / 7%);\n --mova-ai-stripe-bg: #242424;\n\n --mova-ai-accent: #454545;\n --mova-ai-accent-ink: #333333;\n --mova-ai-accent-foreground: #ffffff;\n --mova-ai-accent-tint: #eeeeee;\n --mova-ai-success: #28734d;\n --mova-ai-success-tint: #e8f3ec;\n --mova-ai-warning: #986517;\n --mova-ai-warning-tint: #f8f0df;\n --mova-ai-danger: #a33c3c;\n --mova-ai-danger-tint: #f7eaea;\n --mova-ai-info: #496b89;\n --mova-ai-info-tint: #eaf0f5;\n --mova-ai-neutral-status: #69737d;\n --mova-ai-status-on: #ffffff;\n\n --mova-ai-tooltip-bg: #292929;\n --mova-ai-tooltip-fg: #f6f6f6;\n --mova-ai-tooltip-muted: #c3c3c3;\n --mova-ai-tooltip-border: #484848;\n\n --mova-ai-radius-panel: 8px;\n --mova-ai-radius-control: 8px;\n --mova-ai-shadow-xs: 0 1px 2px rgb(22 28 33 / 5%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(22 28 33 / 7%);\n --mova-ai-shadow-md: 0 8px 20px rgb(22 28 33 / 11%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(22 28 33 / 15%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(22 28 33 / 12%);\n}\n\n.mova-ai-theme[data-theme="dark"] {\n color-scheme: dark;\n --mova-ai-page: #181818;\n --mova-ai-canvas: #202020;\n --mova-ai-surface: #272727;\n --mova-ai-inset: #1d1d1d;\n --mova-ai-hover: #2d2d2d;\n --mova-ai-hover-strong: #393939;\n\n --mova-ai-ink: #eeeeee;\n --mova-ai-ink-secondary: #b5b5b5;\n --mova-ai-ink-muted: #929292;\n\n --mova-ai-border: #3b3b3b;\n --mova-ai-border-soft: #303030;\n --mova-ai-border-strong: #505050;\n --mova-ai-field: #2c2c2c;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(255 255 255 / 6%);\n --mova-ai-stripe-bg: #202528;\n\n --mova-ai-accent: #c2c2c2;\n --mova-ai-accent-ink: #d5d5d5;\n --mova-ai-accent-foreground: #202020;\n --mova-ai-accent-tint: #353535;\n --mova-ai-success: #88c7a0;\n --mova-ai-success-tint: #293b30;\n --mova-ai-warning: #d7b66f;\n --mova-ai-warning-tint: #3c3525;\n --mova-ai-danger: #e5928e;\n --mova-ai-danger-tint: #3c2b2b;\n --mova-ai-info: #9bbbd6;\n --mova-ai-info-tint: #293541;\n --mova-ai-neutral-status: #a0a0a0;\n --mova-ai-status-on: #181818;\n\n --mova-ai-tooltip-bg: #121212;\n --mova-ai-tooltip-fg: #eeeeee;\n --mova-ai-tooltip-muted: #b5b5b5;\n --mova-ai-tooltip-border: #3b3b3b;\n\n --mova-ai-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(0 0 0 / 25%);\n --mova-ai-shadow-md: 0 8px 20px rgb(0 0 0 / 30%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(0 0 0 / 38%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(0 0 0 / 42%);\n}\n';
3151
2798
  var hostOf = (url) => {
3152
2799
  try {
3153
2800
  return new URL(url).hostname.replace(/^www\./, "");
@@ -3155,25 +2802,26 @@ var hostOf = (url) => {
3155
2802
  return url;
3156
2803
  }
3157
2804
  };
3158
- var Favicon = ({ size, source }) => /* @__PURE__ */ jsxs7("span", { className: "relative flex shrink-0 items-center justify-center overflow-hidden rounded-full border border-border bg-background text-muted-foreground", style: { height: size, width: size }, children: [
2805
+ var Favicon = ({ size, source }) => /* @__PURE__ */ jsxs7("span", { className: "relative flex shrink-0 items-center justify-center overflow-hidden rounded-full border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] text-[color:var(--mova-ai-ink-secondary,#666)]", style: { height: size, width: size }, children: [
3159
2806
  /* @__PURE__ */ jsx7(Globe, { "aria-hidden": "true", size: size * 0.6 }),
3160
2807
  source.favicon ? /* @__PURE__ */ jsx7("span", { className: "absolute inset-0 flex size-full items-center justify-center *:size-full *:object-cover", children: source.favicon }) : null
3161
2808
  ] });
3162
- function AISources({ className = "", defaultOpen = false, label = "Sources", sources }) {
2809
+ function AISources({ className = "", defaultOpen = false, label = "Sources", sources, theme = "light" }) {
3163
2810
  const shouldReduceMotion = useReducedMotion3();
3164
2811
  const [isOpen, setIsOpen] = useState10(defaultOpen);
3165
2812
  const [isHovered, setIsHovered] = useState10(false);
3166
- const listId = useId2();
2813
+ const listId = useId3();
3167
2814
  const stacked = sources.slice(0, STACK_LIMIT);
3168
2815
  const overflow = sources.length - stacked.length;
3169
2816
  const fanned = isHovered && !isOpen && !shouldReduceMotion;
3170
- return /* @__PURE__ */ jsxs7("div", { className: `w-full ${className}`, children: [
2817
+ return /* @__PURE__ */ jsxs7("div", { className: `mova-ai-theme w-full ${className}`, "data-theme": theme, children: [
2818
+ /* @__PURE__ */ jsx7("style", { children: AI_THEME_STYLES7 }),
3171
2819
  /* @__PURE__ */ jsxs7(
3172
2820
  "button",
3173
2821
  {
3174
2822
  "aria-expanded": isOpen,
3175
2823
  "aria-controls": listId,
3176
- className: "flex cursor-pointer items-center gap-2 rounded-lg py-1 text-muted-foreground text-sm transition-colors hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2",
2824
+ className: "flex cursor-pointer items-center gap-2 rounded-lg py-1 text-[color:var(--mova-ai-ink-secondary,#666)] text-sm transition-colors hover:text-[color:var(--mova-ai-ink,#202020)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--mova-ai-accent,#454545)]",
3177
2825
  onBlur: () => setIsHovered(false),
3178
2826
  onClick: () => setIsOpen((current) => !current),
3179
2827
  onFocus: () => setIsHovered(true),
@@ -3212,11 +2860,11 @@ function AISources({ className = "", defaultOpen = false, label = "Sources", sou
3212
2860
  exit: shouldReduceMotion ? { opacity: 0, transition: { duration: 0 } } : { height: 0, opacity: 0 },
3213
2861
  initial: shouldReduceMotion ? { height: "auto", opacity: 1 } : { height: 0, opacity: 0 },
3214
2862
  transition: shouldReduceMotion ? { duration: 0 } : { height: SPRING_DEFAULT2, opacity: { duration: 0.18, ease: EASE_OUT2 } },
3215
- children: sources.map((source, index) => /* @__PURE__ */ jsx7(motion2.li, { animate: { opacity: 1, y: 0 }, initial: shouldReduceMotion ? { opacity: 1, y: 0 } : { opacity: 0, y: 4 }, transition: shouldReduceMotion ? { duration: 0 } : { ...SPRING_DEFAULT2, delay: index * ROW_STAGGER }, children: /* @__PURE__ */ jsxs7("a", { className: "flex items-start gap-2.5 rounded-lg px-1 py-1.5 no-underline transition-colors hover:bg-muted", href: source.url, rel: "noopener noreferrer", target: "_blank", children: [
2863
+ children: sources.map((source, index) => /* @__PURE__ */ jsx7(motion2.li, { animate: { opacity: 1, y: 0 }, initial: shouldReduceMotion ? { opacity: 1, y: 0 } : { opacity: 0, y: 4 }, transition: shouldReduceMotion ? { duration: 0 } : { ...SPRING_DEFAULT2, delay: index * ROW_STAGGER }, children: /* @__PURE__ */ jsxs7("a", { className: "flex items-start gap-2.5 rounded-lg px-1 py-1.5 no-underline transition-colors hover:bg-[var(--mova-ai-hover,#f1f1f1)]", href: source.url, rel: "noopener noreferrer", target: "_blank", children: [
3216
2864
  /* @__PURE__ */ jsx7(motion2.span, { className: "mt-0.5 block shrink-0", transition: shouldReduceMotion ? { duration: 0 } : SPRING_DEFAULT2, children: /* @__PURE__ */ jsx7(Favicon, { size: 18, source }) }),
3217
2865
  /* @__PURE__ */ jsxs7("span", { className: "min-w-0", children: [
3218
- /* @__PURE__ */ jsx7("span", { className: "block truncate font-medium text-foreground text-sm", children: source.title }),
3219
- /* @__PURE__ */ jsx7("span", { className: "block truncate text-muted-foreground text-xs", children: source.snippet ?? hostOf(source.url) })
2866
+ /* @__PURE__ */ jsx7("span", { className: "block truncate font-medium text-[color:var(--mova-ai-ink,#202020)] text-sm", children: source.title }),
2867
+ /* @__PURE__ */ jsx7("span", { className: "block truncate text-[color:var(--mova-ai-ink-secondary,#666)] text-xs", children: source.snippet ?? hostOf(source.url) })
3220
2868
  ] })
3221
2869
  ] }) }, source.id))
3222
2870
  }
@@ -3272,11 +2920,12 @@ import { Fragment as Fragment3 } from "react";
3272
2920
  import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
3273
2921
  var SPRING_DEFAULT4 = { bounce: 0.1, duration: 0.25, type: "spring" };
3274
2922
  var EASE_IN_OUT = [0.645, 0.045, 0.355, 1];
2923
+ var AI_THEME_STYLES8 = '/* Shared public tokens for the standalone AI component family. */\n.mova-ai-theme {\n color-scheme: light;\n color: var(--mova-ai-ink, #202020);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;\n font-size: 13px;\n line-height: 1.45;\n letter-spacing: -0.01em;\n\n --mova-ai-page: #f7f7f7;\n --mova-ai-canvas: #f4f4f4;\n --mova-ai-surface: #ffffff;\n --mova-ai-inset: #f8f8f8;\n --mova-ai-hover: #f1f1f1;\n --mova-ai-hover-strong: #e9e9e9;\n\n --mova-ai-ink: #202020;\n --mova-ai-ink-secondary: #666666;\n --mova-ai-ink-muted: #858585;\n\n --mova-ai-border: #dedede;\n --mova-ai-border-soft: #ededed;\n --mova-ai-border-strong: #c8c8c8;\n --mova-ai-field: #f6f6f6;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(32 35 38 / 7%);\n --mova-ai-stripe-bg: #242424;\n\n --mova-ai-accent: #454545;\n --mova-ai-accent-ink: #333333;\n --mova-ai-accent-foreground: #ffffff;\n --mova-ai-accent-tint: #eeeeee;\n --mova-ai-success: #28734d;\n --mova-ai-success-tint: #e8f3ec;\n --mova-ai-warning: #986517;\n --mova-ai-warning-tint: #f8f0df;\n --mova-ai-danger: #a33c3c;\n --mova-ai-danger-tint: #f7eaea;\n --mova-ai-info: #496b89;\n --mova-ai-info-tint: #eaf0f5;\n --mova-ai-neutral-status: #69737d;\n --mova-ai-status-on: #ffffff;\n\n --mova-ai-tooltip-bg: #292929;\n --mova-ai-tooltip-fg: #f6f6f6;\n --mova-ai-tooltip-muted: #c3c3c3;\n --mova-ai-tooltip-border: #484848;\n\n --mova-ai-radius-panel: 8px;\n --mova-ai-radius-control: 8px;\n --mova-ai-shadow-xs: 0 1px 2px rgb(22 28 33 / 5%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(22 28 33 / 7%);\n --mova-ai-shadow-md: 0 8px 20px rgb(22 28 33 / 11%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(22 28 33 / 15%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(22 28 33 / 12%);\n}\n\n.mova-ai-theme[data-theme="dark"] {\n color-scheme: dark;\n --mova-ai-page: #181818;\n --mova-ai-canvas: #202020;\n --mova-ai-surface: #272727;\n --mova-ai-inset: #1d1d1d;\n --mova-ai-hover: #2d2d2d;\n --mova-ai-hover-strong: #393939;\n\n --mova-ai-ink: #eeeeee;\n --mova-ai-ink-secondary: #b5b5b5;\n --mova-ai-ink-muted: #929292;\n\n --mova-ai-border: #3b3b3b;\n --mova-ai-border-soft: #303030;\n --mova-ai-border-strong: #505050;\n --mova-ai-field: #2c2c2c;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(255 255 255 / 6%);\n --mova-ai-stripe-bg: #202528;\n\n --mova-ai-accent: #c2c2c2;\n --mova-ai-accent-ink: #d5d5d5;\n --mova-ai-accent-foreground: #202020;\n --mova-ai-accent-tint: #353535;\n --mova-ai-success: #88c7a0;\n --mova-ai-success-tint: #293b30;\n --mova-ai-warning: #d7b66f;\n --mova-ai-warning-tint: #3c3525;\n --mova-ai-danger: #e5928e;\n --mova-ai-danger-tint: #3c2b2b;\n --mova-ai-info: #9bbbd6;\n --mova-ai-info-tint: #293541;\n --mova-ai-neutral-status: #a0a0a0;\n --mova-ai-status-on: #181818;\n\n --mova-ai-tooltip-bg: #121212;\n --mova-ai-tooltip-fg: #eeeeee;\n --mova-ai-tooltip-muted: #b5b5b5;\n --mova-ai-tooltip-border: #3b3b3b;\n\n --mova-ai-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(0 0 0 / 25%);\n --mova-ai-shadow-md: 0 8px 20px rgb(0 0 0 / 30%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(0 0 0 / 38%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(0 0 0 / 42%);\n}\n';
3275
2924
  var CHECK_PATH = "M 3.5 7.5 L 6 10 L 10.5 4.5";
3276
2925
  var BOX_SIZE = 14;
3277
2926
  var UNDERLINE_SECONDS = 1.4;
3278
- var SUCCESS_COLOR = "oklch(72% 0.17 150)";
3279
- var DANGER_COLOR2 = "oklch(63% 0.21 25)";
2927
+ var SUCCESS_COLOR = "var(--mova-ai-success,#28734d)";
2928
+ var DANGER_COLOR2 = "var(--mova-ai-danger,#a33c3c)";
3280
2929
  var flatten = (tasks) => tasks.flatMap((task) => [task, ...flatten(task.children ?? [])]);
3281
2930
  var boxStroke = (status) => status === "failed" ? DANGER_COLOR2 : status === "done" ? SUCCESS_COLOR : "currentColor";
3282
2931
  function TaskBox({ status, shouldReduceMotion }) {
@@ -3317,8 +2966,8 @@ function TaskRow({ depth, shouldReduceMotion, task }) {
3317
2966
  ": "
3318
2967
  ] }),
3319
2968
  /* @__PURE__ */ jsx9(TaskBox, { shouldReduceMotion, status: task.status }),
3320
- /* @__PURE__ */ jsx9("span", { className: "min-w-0 flex-1 break-words text-foreground text-xs leading-snug", children: task.label }),
3321
- task.note ? /* @__PURE__ */ jsx9("span", { className: "max-w-[35%] truncate text-muted-foreground text-xs tabular-nums", children: task.note }) : null,
2969
+ /* @__PURE__ */ jsx9("span", { className: "min-w-0 flex-1 break-words text-[color:var(--mova-ai-ink,#202020)] text-xs leading-snug", children: task.label }),
2970
+ task.note ? /* @__PURE__ */ jsx9("span", { className: "max-w-[35%] truncate text-[color:var(--mova-ai-ink-secondary,#666)] text-xs tabular-nums", children: task.note }) : null,
3322
2971
  isRunning && !shouldReduceMotion ? /* @__PURE__ */ jsx9(
3323
2972
  motion4.span,
3324
2973
  {
@@ -3332,26 +2981,30 @@ function TaskRow({ depth, shouldReduceMotion, task }) {
3332
2981
  }
3333
2982
  );
3334
2983
  }
3335
- function AITaskList({ className = "", label = "Plan", tasks }) {
2984
+ function AITaskList({ className = "", label = "Plan", tasks, theme = "light" }) {
3336
2985
  const shouldReduceMotion = Boolean(useReducedMotion5());
3337
2986
  const all = flatten(tasks);
3338
2987
  const done = all.filter((task) => task.status === "done").length;
3339
- return /* @__PURE__ */ jsxs9("div", { className: `w-full rounded-lg border border-border bg-background p-3 ${className}`, children: [
2988
+ return /* @__PURE__ */ jsxs9("div", { className: `mova-ai-theme w-full rounded-lg border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] p-3 ${className}`, "data-theme": theme, children: [
2989
+ /* @__PURE__ */ jsx9("style", { children: AI_THEME_STYLES8 }),
3340
2990
  /* @__PURE__ */ jsxs9("div", { className: "mb-1.5 flex items-baseline justify-between", children: [
3341
- /* @__PURE__ */ jsx9("p", { className: "font-medium text-foreground text-sm", children: label }),
3342
- /* @__PURE__ */ jsxs9("p", { className: "text-muted-foreground text-xs tabular-nums", children: [
2991
+ /* @__PURE__ */ jsx9("p", { className: "font-medium text-[color:var(--mova-ai-ink,#202020)] text-sm", children: label }),
2992
+ /* @__PURE__ */ jsxs9("p", { className: "text-[color:var(--mova-ai-ink-secondary,#666)] text-xs tabular-nums", children: [
3343
2993
  done,
3344
2994
  "/",
3345
2995
  all.length
3346
2996
  ] })
3347
2997
  ] }),
3348
- /* @__PURE__ */ jsx9("style", { children: `
2998
+ /* @__PURE__ */ jsxs9("style", { children: [
2999
+ AI_THEME_STYLES8,
3000
+ `
3349
3001
  .ai-task-draw { stroke-dashoffset: 0; }
3350
3002
  @media (prefers-reduced-motion: no-preference) {
3351
3003
  .ai-task-draw { animation: ai-task-draw 200ms cubic-bezier(0.23, 1, 0.32, 1) both; }
3352
3004
  }
3353
3005
  @keyframes ai-task-draw { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } }
3354
- ` }),
3006
+ `
3007
+ ] }),
3355
3008
  /* @__PURE__ */ jsx9("ul", { className: "list-none", children: (() => {
3356
3009
  const renderTasks = (items2, depth) => items2.map((task) => /* @__PURE__ */ jsxs9(Fragment3, { children: [
3357
3010
  /* @__PURE__ */ jsx9(TaskRow, { depth, shouldReduceMotion, task }),
@@ -3377,6 +3030,7 @@ var CHECK_PATH2 = "M 8.5 12.2 L 11 14.8 L 15.8 9.6";
3377
3030
  var CROSS_PATHS = ["M 9 9 L 15 15", "M 15 9 L 9 15"];
3378
3031
  var SPIN_SECONDS = 0.9;
3379
3032
  var PENDING_PULSE_SECONDS = 1.6;
3033
+ var AI_THEME_STYLES9 = '/* Shared public tokens for the standalone AI component family. */\n.mova-ai-theme {\n color-scheme: light;\n color: var(--mova-ai-ink, #202020);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;\n font-size: 13px;\n line-height: 1.45;\n letter-spacing: -0.01em;\n\n --mova-ai-page: #f7f7f7;\n --mova-ai-canvas: #f4f4f4;\n --mova-ai-surface: #ffffff;\n --mova-ai-inset: #f8f8f8;\n --mova-ai-hover: #f1f1f1;\n --mova-ai-hover-strong: #e9e9e9;\n\n --mova-ai-ink: #202020;\n --mova-ai-ink-secondary: #666666;\n --mova-ai-ink-muted: #858585;\n\n --mova-ai-border: #dedede;\n --mova-ai-border-soft: #ededed;\n --mova-ai-border-strong: #c8c8c8;\n --mova-ai-field: #f6f6f6;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(32 35 38 / 7%);\n --mova-ai-stripe-bg: #242424;\n\n --mova-ai-accent: #454545;\n --mova-ai-accent-ink: #333333;\n --mova-ai-accent-foreground: #ffffff;\n --mova-ai-accent-tint: #eeeeee;\n --mova-ai-success: #28734d;\n --mova-ai-success-tint: #e8f3ec;\n --mova-ai-warning: #986517;\n --mova-ai-warning-tint: #f8f0df;\n --mova-ai-danger: #a33c3c;\n --mova-ai-danger-tint: #f7eaea;\n --mova-ai-info: #496b89;\n --mova-ai-info-tint: #eaf0f5;\n --mova-ai-neutral-status: #69737d;\n --mova-ai-status-on: #ffffff;\n\n --mova-ai-tooltip-bg: #292929;\n --mova-ai-tooltip-fg: #f6f6f6;\n --mova-ai-tooltip-muted: #c3c3c3;\n --mova-ai-tooltip-border: #484848;\n\n --mova-ai-radius-panel: 8px;\n --mova-ai-radius-control: 8px;\n --mova-ai-shadow-xs: 0 1px 2px rgb(22 28 33 / 5%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(22 28 33 / 7%);\n --mova-ai-shadow-md: 0 8px 20px rgb(22 28 33 / 11%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(22 28 33 / 15%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(22 28 33 / 12%);\n}\n\n.mova-ai-theme[data-theme="dark"] {\n color-scheme: dark;\n --mova-ai-page: #181818;\n --mova-ai-canvas: #202020;\n --mova-ai-surface: #272727;\n --mova-ai-inset: #1d1d1d;\n --mova-ai-hover: #2d2d2d;\n --mova-ai-hover-strong: #393939;\n\n --mova-ai-ink: #eeeeee;\n --mova-ai-ink-secondary: #b5b5b5;\n --mova-ai-ink-muted: #929292;\n\n --mova-ai-border: #3b3b3b;\n --mova-ai-border-soft: #303030;\n --mova-ai-border-strong: #505050;\n --mova-ai-field: #2c2c2c;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(255 255 255 / 6%);\n --mova-ai-stripe-bg: #202528;\n\n --mova-ai-accent: #c2c2c2;\n --mova-ai-accent-ink: #d5d5d5;\n --mova-ai-accent-foreground: #202020;\n --mova-ai-accent-tint: #353535;\n --mova-ai-success: #88c7a0;\n --mova-ai-success-tint: #293b30;\n --mova-ai-warning: #d7b66f;\n --mova-ai-warning-tint: #3c3525;\n --mova-ai-danger: #e5928e;\n --mova-ai-danger-tint: #3c2b2b;\n --mova-ai-info: #9bbbd6;\n --mova-ai-info-tint: #293541;\n --mova-ai-neutral-status: #a0a0a0;\n --mova-ai-status-on: #181818;\n\n --mova-ai-tooltip-bg: #121212;\n --mova-ai-tooltip-fg: #eeeeee;\n --mova-ai-tooltip-muted: #b5b5b5;\n --mova-ai-tooltip-border: #3b3b3b;\n\n --mova-ai-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(0 0 0 / 25%);\n --mova-ai-shadow-md: 0 8px 20px rgb(0 0 0 / 30%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(0 0 0 / 38%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(0 0 0 / 42%);\n}\n';
3380
3034
  var STATUS_LABEL = {
3381
3035
  error: "Failed",
3382
3036
  pending: "Queued",
@@ -3386,7 +3040,7 @@ var STATUS_LABEL = {
3386
3040
  function AIToolCallBadge({ status, shouldReduceMotion }) {
3387
3041
  const isRunning = status === "running";
3388
3042
  const isPending = status === "pending";
3389
- const ringColor = status === "success" ? "oklch(72% 0.17 150)" : status === "error" ? "oklch(63% 0.21 25)" : "currentColor";
3043
+ const ringColor = status === "success" ? "var(--mova-ai-success,#28734d)" : status === "error" ? "var(--mova-ai-danger,#a33c3c)" : "currentColor";
3390
3044
  return /* @__PURE__ */ jsx10("span", { className: "relative flex size-5 shrink-0 items-center justify-center text-muted-foreground", children: /* @__PURE__ */ jsxs10("svg", { "aria-hidden": "true", className: "size-5 overflow-visible", viewBox: `0 0 ${BADGE_VIEWBOX} ${BADGE_VIEWBOX}`, children: [
3391
3045
  /* @__PURE__ */ jsx10(
3392
3046
  motion5.g,
@@ -3453,25 +3107,26 @@ function AIToolCallBadge({ status, shouldReduceMotion }) {
3453
3107
  ] })
3454
3108
  ] }) });
3455
3109
  }
3456
- function AIToolCall({ args, className = "", defaultOpen = false, name, result, status = "pending", summary }) {
3110
+ function AIToolCall({ args, className = "", defaultOpen = false, name, result, status = "pending", summary, theme = "light" }) {
3457
3111
  const shouldReduceMotion = useReducedMotion6();
3458
3112
  const [isOpen, setIsOpen] = useState11(defaultOpen);
3459
3113
  const hasDetail = Boolean(args || result);
3460
- return /* @__PURE__ */ jsxs10("div", { className: `w-full overflow-hidden rounded-lg border border-border bg-background ${className}`, children: [
3114
+ return /* @__PURE__ */ jsxs10("div", { className: `mova-ai-theme w-full overflow-hidden rounded-lg border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] text-[color:var(--mova-ai-ink,#202020)] ${className}`, "data-theme": theme, children: [
3115
+ /* @__PURE__ */ jsx10("style", { children: AI_THEME_STYLES9 }),
3461
3116
  /* @__PURE__ */ jsxs10(
3462
3117
  "button",
3463
3118
  {
3464
3119
  "aria-expanded": hasDetail ? isOpen : void 0,
3465
- className: "flex w-full cursor-pointer items-center gap-2.5 px-3 py-2 text-left disabled:cursor-default focus-visible:outline-2 focus-visible:outline-offset-[-2px] hover:bg-muted/40",
3120
+ className: "flex w-full cursor-pointer items-center gap-2.5 px-3 py-2 text-left disabled:cursor-default focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--mova-ai-accent,#454545)] hover:bg-[color-mix(in_srgb,var(--mova-ai-hover,#f1f1f1)_70%,transparent)]",
3466
3121
  disabled: !hasDetail,
3467
3122
  onClick: () => setIsOpen((current) => !current),
3468
3123
  type: "button",
3469
3124
  children: [
3470
3125
  /* @__PURE__ */ jsx10(AIToolCallBadge, { shouldReduceMotion: Boolean(shouldReduceMotion), status }),
3471
- /* @__PURE__ */ jsx10("span", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx10("span", { className: "block truncate font-medium font-mono text-foreground text-xs", children: name }) }),
3472
- summary ? /* @__PURE__ */ jsx10("span", { className: "max-w-[40%] truncate text-muted-foreground text-xs", children: summary }) : null,
3126
+ /* @__PURE__ */ jsx10("span", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx10("span", { className: "block truncate font-medium font-mono text-[color:var(--mova-ai-ink,#202020)] text-xs", children: name }) }),
3127
+ summary ? /* @__PURE__ */ jsx10("span", { className: "max-w-[40%] truncate text-[color:var(--mova-ai-ink-secondary,#666)] text-xs", children: summary }) : null,
3473
3128
  /* @__PURE__ */ jsx10("span", { className: "sr-only", children: STATUS_LABEL[status] }),
3474
- hasDetail ? /* @__PURE__ */ jsx10(motion5.span, { animate: { rotate: isOpen ? 90 : 0 }, className: "flex size-4 shrink-0 items-center justify-center text-muted-foreground", transition: shouldReduceMotion ? { duration: 0 } : SPRING_DEFAULT5, children: /* @__PURE__ */ jsx10(ChevronRight2, { "aria-hidden": "true", size: 14 }) }) : null
3129
+ hasDetail ? /* @__PURE__ */ jsx10(motion5.span, { animate: { rotate: isOpen ? 90 : 0 }, className: "flex size-4 shrink-0 items-center justify-center text-[color:var(--mova-ai-ink-secondary,#666666)]", transition: shouldReduceMotion ? { duration: 0 } : SPRING_DEFAULT5, children: /* @__PURE__ */ jsx10(ChevronRight2, { "aria-hidden": "true", size: 14 }) }) : null
3475
3130
  ]
3476
3131
  }
3477
3132
  ),
@@ -3483,14 +3138,14 @@ function AIToolCall({ args, className = "", defaultOpen = false, name, result, s
3483
3138
  exit: shouldReduceMotion ? { opacity: 0, transition: { duration: 0 } } : { height: 0, opacity: 0 },
3484
3139
  initial: shouldReduceMotion ? { height: "auto", opacity: 1 } : { height: 0, opacity: 0 },
3485
3140
  transition: shouldReduceMotion ? { duration: 0 } : { height: SPRING_DEFAULT5, opacity: { duration: 0.18, ease: EASE_OUT3 } },
3486
- children: /* @__PURE__ */ jsxs10("div", { className: "space-y-2 border-border border-t px-3 py-2.5 text-xs", children: [
3141
+ children: /* @__PURE__ */ jsxs10("div", { className: "space-y-2 border-[var(--mova-ai-border,#dedede)] border-t px-3 py-2.5 text-xs", children: [
3487
3142
  args ? /* @__PURE__ */ jsxs10("div", { children: [
3488
- /* @__PURE__ */ jsx10("p", { className: "mb-1 text-[10px] text-muted-foreground uppercase tracking-wide", children: "Arguments" }),
3489
- /* @__PURE__ */ jsx10("div", { className: "overflow-x-auto font-mono text-foreground", children: args })
3143
+ /* @__PURE__ */ jsx10("p", { className: "mb-1 text-[10px] text-[color:var(--mova-ai-ink-secondary,#666666)] uppercase tracking-wide", children: "Arguments" }),
3144
+ /* @__PURE__ */ jsx10("div", { className: "overflow-x-auto font-mono text-[color:var(--mova-ai-ink,#202020)]", children: args })
3490
3145
  ] }) : null,
3491
3146
  result ? /* @__PURE__ */ jsxs10("div", { children: [
3492
- /* @__PURE__ */ jsx10("p", { className: "mb-1 text-[10px] text-muted-foreground uppercase tracking-wide", children: "Result" }),
3493
- /* @__PURE__ */ jsx10("div", { className: "overflow-x-auto text-foreground", children: result })
3147
+ /* @__PURE__ */ jsx10("p", { className: "mb-1 text-[10px] text-[color:var(--mova-ai-ink-secondary,#666666)] uppercase tracking-wide", children: "Result" }),
3148
+ /* @__PURE__ */ jsx10("div", { className: "overflow-x-auto text-[color:var(--mova-ai-ink,#202020)]", children: result })
3494
3149
  ] }) : null
3495
3150
  ] })
3496
3151
  }
@@ -3515,9 +3170,10 @@ import { SortableContext, sortableKeyboardCoordinates, useSortable, verticalList
3515
3170
  import { CSS } from "@dnd-kit/utilities";
3516
3171
  import { CalendarClock, FolderKanban, Plus, Tags, UserCheck, Filter, List, Columns3, SlidersHorizontal, ArrowUpDown, ChevronDown, Check } from "lucide-react";
3517
3172
  import { AnimatePresence as AnimatePresence5, motion as motion6, useReducedMotion as useReducedMotion7 } from "framer-motion";
3518
- import { Fragment as Fragment4, createContext, useContext, useEffect as useEffect9, useLayoutEffect as useLayoutEffect3, useMemo as useMemo3, useRef as useRef6, useState as useState12, useId as useId3 } from "react";
3173
+ import { Fragment as Fragment4, createContext, useContext, useEffect as useEffect9, useLayoutEffect as useLayoutEffect4, useMemo as useMemo3, useRef as useRef6, useState as useState12, useId as useId4 } from "react";
3519
3174
  import { Fragment as Fragment5, jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
3520
3175
  var BOARD_STATUSES = ["backlog", "todo", "in_progress", "in_review", "blocked", "done", "cancelled"];
3176
+ var AI_THEME_STYLES10 = '/* Shared public tokens for the standalone AI component family. */\n.mova-ai-theme {\n color-scheme: light;\n color: var(--mova-ai-ink, #202020);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;\n font-size: 13px;\n line-height: 1.45;\n letter-spacing: -0.01em;\n\n --mova-ai-page: #f7f7f7;\n --mova-ai-canvas: #f4f4f4;\n --mova-ai-surface: #ffffff;\n --mova-ai-inset: #f8f8f8;\n --mova-ai-hover: #f1f1f1;\n --mova-ai-hover-strong: #e9e9e9;\n\n --mova-ai-ink: #202020;\n --mova-ai-ink-secondary: #666666;\n --mova-ai-ink-muted: #858585;\n\n --mova-ai-border: #dedede;\n --mova-ai-border-soft: #ededed;\n --mova-ai-border-strong: #c8c8c8;\n --mova-ai-field: #f6f6f6;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(32 35 38 / 7%);\n --mova-ai-stripe-bg: #242424;\n\n --mova-ai-accent: #454545;\n --mova-ai-accent-ink: #333333;\n --mova-ai-accent-foreground: #ffffff;\n --mova-ai-accent-tint: #eeeeee;\n --mova-ai-success: #28734d;\n --mova-ai-success-tint: #e8f3ec;\n --mova-ai-warning: #986517;\n --mova-ai-warning-tint: #f8f0df;\n --mova-ai-danger: #a33c3c;\n --mova-ai-danger-tint: #f7eaea;\n --mova-ai-info: #496b89;\n --mova-ai-info-tint: #eaf0f5;\n --mova-ai-neutral-status: #69737d;\n --mova-ai-status-on: #ffffff;\n\n --mova-ai-tooltip-bg: #292929;\n --mova-ai-tooltip-fg: #f6f6f6;\n --mova-ai-tooltip-muted: #c3c3c3;\n --mova-ai-tooltip-border: #484848;\n\n --mova-ai-radius-panel: 8px;\n --mova-ai-radius-control: 8px;\n --mova-ai-shadow-xs: 0 1px 2px rgb(22 28 33 / 5%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(22 28 33 / 7%);\n --mova-ai-shadow-md: 0 8px 20px rgb(22 28 33 / 11%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(22 28 33 / 15%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(22 28 33 / 12%);\n}\n\n.mova-ai-theme[data-theme="dark"] {\n color-scheme: dark;\n --mova-ai-page: #181818;\n --mova-ai-canvas: #202020;\n --mova-ai-surface: #272727;\n --mova-ai-inset: #1d1d1d;\n --mova-ai-hover: #2d2d2d;\n --mova-ai-hover-strong: #393939;\n\n --mova-ai-ink: #eeeeee;\n --mova-ai-ink-secondary: #b5b5b5;\n --mova-ai-ink-muted: #929292;\n\n --mova-ai-border: #3b3b3b;\n --mova-ai-border-soft: #303030;\n --mova-ai-border-strong: #505050;\n --mova-ai-field: #2c2c2c;\n --mova-ai-grid: color-mix(in srgb, var(--mova-ai-border) 78%, transparent);\n --mova-ai-stripe: rgb(255 255 255 / 6%);\n --mova-ai-stripe-bg: #202528;\n\n --mova-ai-accent: #c2c2c2;\n --mova-ai-accent-ink: #d5d5d5;\n --mova-ai-accent-foreground: #202020;\n --mova-ai-accent-tint: #353535;\n --mova-ai-success: #88c7a0;\n --mova-ai-success-tint: #293b30;\n --mova-ai-warning: #d7b66f;\n --mova-ai-warning-tint: #3c3525;\n --mova-ai-danger: #e5928e;\n --mova-ai-danger-tint: #3c2b2b;\n --mova-ai-info: #9bbbd6;\n --mova-ai-info-tint: #293541;\n --mova-ai-neutral-status: #a0a0a0;\n --mova-ai-status-on: #181818;\n\n --mova-ai-tooltip-bg: #121212;\n --mova-ai-tooltip-fg: #eeeeee;\n --mova-ai-tooltip-muted: #b5b5b5;\n --mova-ai-tooltip-border: #3b3b3b;\n\n --mova-ai-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);\n --mova-ai-shadow-sm: 0 2px 8px rgb(0 0 0 / 25%);\n --mova-ai-shadow-md: 0 8px 20px rgb(0 0 0 / 30%);\n --mova-ai-shadow-lg: 0 14px 32px rgb(0 0 0 / 38%);\n --mova-ai-shadow-hairline: 0 0 0 1px var(--mova-ai-border);\n --mova-ai-shadow-btn: 0 0 0 1px var(--mova-ai-border-strong), var(--mova-ai-shadow-xs);\n --mova-ai-shadow-card: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-sm);\n --mova-ai-shadow-raised: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-md);\n --mova-ai-shadow-overlay: 0 0 0 1px var(--mova-ai-border), var(--mova-ai-shadow-lg);\n --mova-ai-shadow-inset-field: inset 0 1px 2px rgb(0 0 0 / 42%);\n}\n';
3521
3177
  var createBoardKeyboardCoordinates = (getHorizontalTarget, onHorizontalTarget) => (event, args) => {
3522
3178
  if (event.code !== "ArrowLeft" && event.code !== "ArrowRight") {
3523
3179
  onHorizontalTarget(null);
@@ -3565,13 +3221,13 @@ var createBoardKeyboardCoordinates = (getHorizontalTarget, onHorizontalTarget) =
3565
3221
  };
3566
3222
  };
3567
3223
  var STATUS_META = {
3568
- backlog: { color: "#fb923c", label: "Backlog", lane: "border-white/[0.09] bg-white/[0.025]", laneOver: "border-white/25 bg-white/[0.07]" },
3569
- todo: { color: "#9ca3af", label: "To do", lane: "border-blue-900/55 bg-blue-950/25", laneOver: "border-blue-600/75 bg-blue-900/40" },
3570
- in_progress: { color: "#facc15", label: "In progress", lane: "border-amber-900/55 bg-amber-950/25", laneOver: "border-amber-600/75 bg-amber-900/40" },
3571
- in_review: { color: "#a78bfa", label: "In review", lane: "border-violet-900/55 bg-violet-950/25", laneOver: "border-violet-600/75 bg-violet-900/40" },
3572
- blocked: { color: "#f87171", label: "Blocked", lane: "border-red-900/55 bg-red-950/25", laneOver: "border-red-600/75 bg-red-900/40" },
3573
- done: { color: "#4ade80", label: "Done", lane: "border-emerald-900/55 bg-emerald-950/25", laneOver: "border-emerald-600/75 bg-emerald-900/40" },
3574
- cancelled: { color: "#a3a3a3", label: "Cancelled", lane: "border-neutral-800/70 bg-neutral-900/30", laneOver: "border-neutral-600/80 bg-neutral-800/45" }
3224
+ backlog: { color: "var(--mova-ai-neutral-status)", label: "Backlog", lane: "border-[var(--mova-ai-border,#3b3b3b)] bg-[var(--mova-ai-canvas,#202020)]", laneOver: "border-[var(--mova-ai-border-strong,#505050)] bg-[var(--mova-ai-hover,#2d2d2d)]" },
3225
+ todo: { color: "var(--mova-ai-neutral-status)", label: "To do", lane: "border-[var(--mova-ai-border,#3b3b3b)] bg-[var(--mova-ai-canvas,#202020)]", laneOver: "border-[var(--mova-ai-border-strong,#505050)] bg-[var(--mova-ai-hover,#2d2d2d)]" },
3226
+ in_progress: { color: "var(--mova-ai-info)", label: "In progress", lane: "border-[var(--mova-ai-border,#3b3b3b)] bg-[var(--mova-ai-canvas,#202020)]", laneOver: "border-[var(--mova-ai-border-strong,#505050)] bg-[var(--mova-ai-hover,#2d2d2d)]" },
3227
+ in_review: { color: "var(--mova-ai-warning)", label: "In review", lane: "border-[var(--mova-ai-border,#3b3b3b)] bg-[var(--mova-ai-canvas,#202020)]", laneOver: "border-[var(--mova-ai-border-strong,#505050)] bg-[var(--mova-ai-hover,#2d2d2d)]" },
3228
+ blocked: { color: "var(--mova-ai-danger)", label: "Blocked", lane: "border-[var(--mova-ai-border,#3b3b3b)] bg-[var(--mova-ai-canvas,#202020)]", laneOver: "border-[var(--mova-ai-border-strong,#505050)] bg-[var(--mova-ai-hover,#2d2d2d)]" },
3229
+ done: { color: "var(--mova-ai-success)", label: "Done", lane: "border-[var(--mova-ai-border,#3b3b3b)] bg-[var(--mova-ai-canvas,#202020)]", laneOver: "border-[var(--mova-ai-border-strong,#505050)] bg-[var(--mova-ai-hover,#2d2d2d)]" },
3230
+ cancelled: { color: "var(--mova-ai-neutral-status)", label: "Cancelled", lane: "border-[var(--mova-ai-border,#3b3b3b)] bg-[var(--mova-ai-canvas,#202020)]", laneOver: "border-[var(--mova-ai-border-strong,#505050)] bg-[var(--mova-ai-hover,#2d2d2d)]" }
3575
3231
  };
3576
3232
  var DEFAULT_ISSUES = [
3577
3233
  { id: "R6Z-141", title: "Retire legacy Node backend, CLI, and MCP authorities", status: "backlog", priority: "high", assignee: "Noah", project: "Rudder-dev", labels: ["Feature"], created: "Aug 20" },
@@ -3598,7 +3254,7 @@ function StatusIcon({ status }) {
3598
3254
  ] }) : null,
3599
3255
  status === "done" ? /* @__PURE__ */ jsxs11(Fragment5, { children: [
3600
3256
  /* @__PURE__ */ jsx11("circle", { cx: "8", cy: "8", r: "6.5", fill: "currentColor" }),
3601
- /* @__PURE__ */ jsx11("path", { d: "M4.75 8.25 7 10.5l4.25-5", stroke: "#131313", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })
3257
+ /* @__PURE__ */ jsx11("path", { d: "M4.75 8.25 7 10.5l4.25-5", stroke: "var(--mova-ai-status-on,#fff)", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })
3602
3258
  ] }) : null,
3603
3259
  status === "cancelled" ? /* @__PURE__ */ jsxs11(Fragment5, { children: [
3604
3260
  /* @__PURE__ */ jsx11("circle", { cx: "8", cy: "8", r: "6", fill: "currentColor", opacity: "0.16" }),
@@ -3613,29 +3269,27 @@ function StatusIcon({ status }) {
3613
3269
  }
3614
3270
  function PriorityIcon({ priority }) {
3615
3271
  const active = priority === "critical" ? 4 : priority === "high" ? 3 : priority === "medium" ? 2 : 1;
3616
- const tone = priority === "critical" || priority === "high" ? "text-orange-400" : priority === "medium" ? "text-orange-300/80" : "text-orange-300/55";
3272
+ const tone = priority === "critical" ? "var(--mova-ai-danger)" : priority === "high" ? "var(--mova-ai-warning)" : priority === "medium" ? "var(--mova-ai-info)" : "var(--mova-ai-neutral-status)";
3617
3273
  const heights = [4, 6, 10, 14];
3618
- return /* @__PURE__ */ jsx11("span", { className: `inline-flex h-3.5 w-4 items-end gap-[2px] ${tone}`, "aria-hidden": "true", children: heights.map((height, index) => /* @__PURE__ */ jsx11("span", { className: "w-[3px] rounded-[1px] bg-current", style: { height: `${height}px`, opacity: index < active ? 1 : 0.25 } }, height)) });
3274
+ return /* @__PURE__ */ jsx11("span", { className: "inline-flex h-3.5 w-4 items-end gap-[2px]", style: { color: tone }, "aria-hidden": "true", children: heights.map((height, index) => /* @__PURE__ */ jsx11("span", { className: "w-[3px] rounded-[1px] bg-current", style: { height: `${height}px`, opacity: index < active ? 1 : 0.25 } }, height)) });
3619
3275
  }
3620
3276
  var DISPLAY_FIELDS = ["Identifier", "Priority", "Assignee", "Reviewer", "Labels", "Project", "Updated", "Created"];
3621
3277
  var DisplayContext = createContext(DISPLAY_FIELDS.filter((field) => field !== "Updated"));
3622
3278
  function MemberAvatar({ name }) {
3623
- const palette = ["#79a894", "#a18bbd", "#c09972", "#7b9ebe", "#bd8392"];
3624
- const color = palette[Array.from(name).reduce((sum, letter) => sum + letter.charCodeAt(0), 0) % palette.length];
3625
- return /* @__PURE__ */ jsx11("span", { "aria-hidden": "true", className: "inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[9px] font-semibold text-[#17201e]", style: { backgroundColor: color }, children: name.slice(0, 1) });
3279
+ return /* @__PURE__ */ jsx11("span", { "aria-hidden": "true", className: "inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-[var(--mova-ai-hover-strong,#e9e9e9)] text-[9px] font-semibold text-[color:var(--mova-ai-ink,#202020)]", children: name.slice(0, 1) });
3626
3280
  }
3627
3281
  function IssueListRow({ issue }) {
3628
3282
  const display = useContext(DisplayContext);
3629
- return /* @__PURE__ */ jsxs11("article", { className: "rudder-list-row border-b border-white/[0.07] px-4 py-3", "data-testid": `issue-row-${issue.id}`, children: [
3283
+ return /* @__PURE__ */ jsxs11("article", { className: "rudder-list-row border-b border-[var(--mova-ai-border-soft,#ededed)] px-4 py-3", "data-testid": `issue-row-${issue.id}`, children: [
3630
3284
  /* @__PURE__ */ jsxs11("div", { className: "flex min-w-0 items-start gap-2.5", children: [
3631
3285
  /* @__PURE__ */ jsxs11("span", { className: "mt-0.5", title: STATUS_META[issue.status].label, children: [
3632
3286
  /* @__PURE__ */ jsx11("span", { className: "sr-only", children: STATUS_META[issue.status].label }),
3633
3287
  /* @__PURE__ */ jsx11(StatusIcon, { status: issue.status })
3634
3288
  ] }),
3635
- display.includes("Identifier") ? /* @__PURE__ */ jsx11("span", { className: "shrink-0 pt-0.5 font-mono text-xs text-[#8b8b8b]", children: issue.id }) : null,
3636
- /* @__PURE__ */ jsx11("h3", { className: "min-w-0 flex-1 break-words text-sm font-medium leading-relaxed text-[#ececea]", children: issue.title })
3289
+ display.includes("Identifier") ? /* @__PURE__ */ jsx11("span", { className: "shrink-0 pt-0.5 font-mono text-xs text-[color:var(--mova-ai-ink-muted,#858585)]", children: issue.id }) : null,
3290
+ /* @__PURE__ */ jsx11("h3", { className: "min-w-0 flex-1 break-words text-sm font-medium leading-relaxed text-[color:var(--mova-ai-ink,#202020)]", children: issue.title })
3637
3291
  ] }),
3638
- /* @__PURE__ */ jsxs11("div", { className: "rudder-list-meta flex min-w-0 flex-wrap items-center gap-x-3 gap-y-2 text-xs text-[#a5a59f]", children: [
3292
+ /* @__PURE__ */ jsxs11("div", { className: "rudder-list-meta flex min-w-0 flex-wrap items-center gap-x-3 gap-y-2 text-xs text-[color:var(--mova-ai-ink-secondary,#666)]", children: [
3639
3293
  display.includes("Priority") ? /* @__PURE__ */ jsxs11("span", { title: `${issue.priority} priority`, children: [
3640
3294
  /* @__PURE__ */ jsxs11("span", { className: "sr-only", children: [
3641
3295
  issue.priority,
@@ -3643,8 +3297,8 @@ function IssueListRow({ issue }) {
3643
3297
  ] }),
3644
3298
  /* @__PURE__ */ jsx11(PriorityIcon, { priority: issue.priority })
3645
3299
  ] }) : null,
3646
- display.includes("Labels") ? issue.labels.map((label) => /* @__PURE__ */ jsxs11("span", { className: "inline-flex max-w-full items-center gap-1.5 rounded-full border border-white/10 px-2 py-0.5", children: [
3647
- /* @__PURE__ */ jsx11("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-violet-400" }),
3300
+ display.includes("Labels") ? issue.labels.map((label) => /* @__PURE__ */ jsxs11("span", { className: "inline-flex max-w-full items-center gap-1.5 rounded-full border border-[var(--mova-ai-border,#dedede)] px-2 py-0.5", children: [
3301
+ /* @__PURE__ */ jsx11("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-[var(--mova-ai-neutral-status,#69737d)]" }),
3648
3302
  /* @__PURE__ */ jsx11("span", { className: "break-words", children: label })
3649
3303
  ] }, label)) : null,
3650
3304
  display.includes("Assignee") ? /* @__PURE__ */ jsxs11("span", { className: "inline-flex min-w-0 items-center gap-1.5", children: [
@@ -3668,18 +3322,18 @@ function IssueCardBody({ issue }) {
3668
3322
  const display = useContext(DisplayContext);
3669
3323
  return /* @__PURE__ */ jsxs11("div", { className: "min-w-0", children: [
3670
3324
  /* @__PURE__ */ jsxs11("div", { className: "flex min-w-0 items-start gap-2", children: [
3671
- /* @__PURE__ */ jsx11("span", { className: "min-w-0 flex-1 font-mono text-xs text-[#8b8b8b]", children: display.includes("Identifier") ? issue.id : "" }),
3672
- display.includes("Assignee") ? /* @__PURE__ */ jsxs11("span", { className: "inline-flex min-w-0 max-w-[8.5rem] shrink items-center gap-1 overflow-hidden text-xs text-[#a1a1aa]", children: [
3325
+ /* @__PURE__ */ jsx11("span", { className: "min-w-0 flex-1 font-mono text-xs text-[color:var(--mova-ai-ink-muted,#858585)]", children: display.includes("Identifier") ? issue.id : "" }),
3326
+ display.includes("Assignee") ? /* @__PURE__ */ jsxs11("span", { className: "inline-flex min-w-0 max-w-[8.5rem] shrink items-center gap-1 overflow-hidden text-xs text-[color:var(--mova-ai-ink-secondary,#666)]", children: [
3673
3327
  /* @__PURE__ */ jsx11(MemberAvatar, { name: issue.assignee }),
3674
3328
  /* @__PURE__ */ jsx11("span", { className: "truncate", children: issue.assignee })
3675
3329
  ] }) : null
3676
3330
  ] }),
3677
- /* @__PURE__ */ jsx11("p", { className: "mt-2 break-words text-sm leading-snug text-[#ececea]", children: issue.title }),
3678
- display.includes("Priority") ? /* @__PURE__ */ jsxs11("div", { className: "mt-2 flex min-w-0 items-center gap-1.5 overflow-hidden text-xs text-[#8b8b8b]", children: [
3331
+ /* @__PURE__ */ jsx11("p", { className: "mt-2 break-words text-sm leading-snug text-[color:var(--mova-ai-ink,#202020)]", children: issue.title }),
3332
+ display.includes("Priority") ? /* @__PURE__ */ jsxs11("div", { className: "mt-2 flex min-w-0 items-center gap-1.5 overflow-hidden text-xs text-[color:var(--mova-ai-ink-muted,#858585)]", children: [
3679
3333
  /* @__PURE__ */ jsx11(PriorityIcon, { priority: issue.priority }),
3680
3334
  /* @__PURE__ */ jsx11("span", { className: "capitalize", children: issue.priority })
3681
3335
  ] }) : null,
3682
- /* @__PURE__ */ jsxs11("div", { className: "mt-2 space-y-1.5 border-t border-white/[0.07] pt-2 text-xs text-[#818181]", children: [
3336
+ /* @__PURE__ */ jsxs11("div", { className: "mt-2 space-y-1.5 border-t border-[var(--mova-ai-border-soft,#ededed)] pt-2 text-xs text-[color:var(--mova-ai-ink-muted,#858585)]", children: [
3683
3337
  display.includes("Project") ? /* @__PURE__ */ jsxs11("div", { className: "grid min-w-0 grid-cols-[4.5rem_minmax(0,1fr)] items-center gap-2", children: [
3684
3338
  /* @__PURE__ */ jsxs11("span", { className: "inline-flex items-center gap-1.5", children: [
3685
3339
  /* @__PURE__ */ jsx11(FolderKanban, { className: "h-3 w-3" }),
@@ -3699,8 +3353,8 @@ function IssueCardBody({ issue }) {
3699
3353
  /* @__PURE__ */ jsx11(Tags, { className: "h-3 w-3" }),
3700
3354
  "Labels"
3701
3355
  ] }),
3702
- /* @__PURE__ */ jsx11("span", { className: "truncate text-right", children: /* @__PURE__ */ jsxs11("span", { className: "inline-flex items-center gap-1 rounded-full border border-white/[0.08] px-1.5 py-0.5 text-[10px]", children: [
3703
- /* @__PURE__ */ jsx11("span", { className: "h-1.5 w-1.5 rounded-full bg-violet-500" }),
3356
+ /* @__PURE__ */ jsx11("span", { className: "truncate text-right", children: /* @__PURE__ */ jsxs11("span", { className: "inline-flex items-center gap-1 rounded-full border border-[var(--mova-ai-border,#dedede)] px-1.5 py-0.5 text-[10px]", children: [
3357
+ /* @__PURE__ */ jsx11("span", { className: "h-1.5 w-1.5 rounded-full bg-[var(--mova-ai-neutral-status,#69737d)]" }),
3704
3358
  issue.labels[0] ?? "None"
3705
3359
  ] }) })
3706
3360
  ] }) : null,
@@ -3727,7 +3381,7 @@ function SortableIssueCard({ issue }) {
3727
3381
  style: { transform: CSS.Transform.toString(transform), transition: transition2 },
3728
3382
  ...attributes,
3729
3383
  ...listeners,
3730
- className: `motion-kanban-card cursor-grab touch-pan-x overflow-hidden rounded-[9px] border border-white/[0.09] bg-[#242423] p-2.5 outline-none transition-[box-shadow,opacity,border-color] motion-reduce:transition-none focus-visible:border-white/30 focus-visible:ring-2 focus-visible:ring-white/20 active:cursor-grabbing ${isDragging ? "opacity-25" : "hover:border-white/[0.16] hover:shadow-sm"}`,
3384
+ className: `motion-kanban-card cursor-grab touch-pan-x overflow-hidden rounded-[9px] border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] p-2.5 outline-none transition-[box-shadow,opacity,border-color] motion-reduce:transition-none focus-visible:border-[var(--mova-ai-border-strong,#c8c8c8)] focus-visible:ring-2 focus-visible:ring-[var(--mova-ai-border-strong,#c8c8c8)] active:cursor-grabbing ${isDragging ? "opacity-25" : "hover:border-[var(--mova-ai-border-strong,#c8c8c8)] hover:shadow-sm"}`,
3731
3385
  "data-dragging": isDragging ? "true" : "false",
3732
3386
  "data-issue-id": issue.id,
3733
3387
  "data-testid": `kanban-card-${issue.id}`,
@@ -3741,9 +3395,9 @@ function BoardColumn({ issues, status, onCreate }) {
3741
3395
  return /* @__PURE__ */ jsxs11("div", { className: "flex min-h-0 w-[260px] min-w-[260px] shrink-0 flex-col", children: [
3742
3396
  /* @__PURE__ */ jsxs11("div", { className: "mb-1 flex items-center gap-2 px-2 py-2", children: [
3743
3397
  /* @__PURE__ */ jsx11(StatusIcon, { status }),
3744
- /* @__PURE__ */ jsx11("span", { className: "text-xs font-semibold uppercase tracking-wide text-[#a1a1a1]", children: meta.label }),
3745
- /* @__PURE__ */ jsx11("span", { className: "ml-auto text-xs tabular-nums text-[#686868]", children: issues.length }),
3746
- /* @__PURE__ */ jsx11("button", { type: "button", onClick: (event) => onCreate(status, event.currentTarget), "aria-label": `Create issue in ${meta.label}`, className: "rounded p-1 hover:bg-white/10 focus-visible:ring-2 focus-visible:ring-white/40", children: /* @__PURE__ */ jsx11(Plus, { className: "h-3.5 w-3.5 text-[#8b8b8b]", "aria-hidden": "true" }) })
3398
+ /* @__PURE__ */ jsx11("span", { className: "text-xs font-semibold uppercase tracking-wide text-[color:var(--mova-ai-ink-secondary,#666)]", children: meta.label }),
3399
+ /* @__PURE__ */ jsx11("span", { className: "ml-auto text-xs tabular-nums text-[color:var(--mova-ai-ink-muted,#858585)]", children: issues.length }),
3400
+ /* @__PURE__ */ jsx11("button", { type: "button", onClick: (event) => onCreate(status, event.currentTarget), "aria-label": `Create issue in ${meta.label}`, className: "rounded p-1 hover:bg-[var(--mova-ai-hover-strong,#e9e9e9)] focus-visible:ring-2 focus-visible:ring-[var(--mova-ai-border-strong,#c8c8c8)]", children: /* @__PURE__ */ jsx11(Plus, { className: "h-3.5 w-3.5 text-[color:var(--mova-ai-ink-muted,#858585)]", "aria-hidden": "true" }) })
3747
3401
  ] }),
3748
3402
  /* @__PURE__ */ jsx11(
3749
3403
  "div",
@@ -3762,9 +3416,9 @@ function HiddenStatus({ status, onCreate }) {
3762
3416
  const meta = STATUS_META[status];
3763
3417
  return /* @__PURE__ */ jsxs11("div", { ref: setNodeRef, className: `motion-kanban-lane flex items-center gap-2 rounded-[9px] border px-2 py-2 transition-colors motion-reduce:transition-none ${isOver ? meta.laneOver : meta.lane}`, "data-over": isOver ? "true" : "false", "data-testid": `kanban-hidden-column-${status}`, children: [
3764
3418
  /* @__PURE__ */ jsx11(StatusIcon, { status }),
3765
- /* @__PURE__ */ jsx11("span", { className: "min-w-0 flex-1 text-xs font-semibold uppercase tracking-wide text-[#a1a1a1]", children: meta.label }),
3766
- /* @__PURE__ */ jsx11("span", { className: "text-xs tabular-nums text-[#686868]", children: "0" }),
3767
- /* @__PURE__ */ jsx11("button", { type: "button", onClick: (event) => onCreate(status, event.currentTarget), "aria-label": `Create issue in ${meta.label}`, className: "rounded p-1 hover:bg-white/10 focus-visible:ring-2 focus-visible:ring-white/40", children: /* @__PURE__ */ jsx11(Plus, { className: "h-3.5 w-3.5 text-[#8b8b8b]", "aria-hidden": "true" }) })
3419
+ /* @__PURE__ */ jsx11("span", { className: "min-w-0 flex-1 text-xs font-semibold uppercase tracking-wide text-[color:var(--mova-ai-ink-secondary,#666)]", children: meta.label }),
3420
+ /* @__PURE__ */ jsx11("span", { className: "text-xs tabular-nums text-[color:var(--mova-ai-ink-muted,#858585)]", children: "0" }),
3421
+ /* @__PURE__ */ jsx11("button", { type: "button", onClick: (event) => onCreate(status, event.currentTarget), "aria-label": `Create issue in ${meta.label}`, className: "rounded p-1 hover:bg-[var(--mova-ai-hover-strong,#e9e9e9)] focus-visible:ring-2 focus-visible:ring-[var(--mova-ai-border-strong,#c8c8c8)]", children: /* @__PURE__ */ jsx11(Plus, { className: "h-3.5 w-3.5 text-[color:var(--mova-ai-ink-muted,#858585)]", "aria-hidden": "true" }) })
3768
3422
  ] });
3769
3423
  }
3770
3424
  function ToolbarPopover({ label, icon, children, triggerRef }) {
@@ -3773,8 +3427,8 @@ function ToolbarPopover({ label, icon, children, triggerRef }) {
3773
3427
  const root = useRef6(null);
3774
3428
  const trigger = useRef6(null);
3775
3429
  const panel = useRef6(null);
3776
- const id = useId3();
3777
- useLayoutEffect3(() => {
3430
+ const id = useId4();
3431
+ useLayoutEffect4(() => {
3778
3432
  if (!open) return;
3779
3433
  const container = root.current;
3780
3434
  const popup = panel.current;
@@ -3827,12 +3481,12 @@ function ToolbarPopover({ label, icon, children, triggerRef }) {
3827
3481
  /* @__PURE__ */ jsxs11("button", { ref: (node) => {
3828
3482
  trigger.current = node;
3829
3483
  if (triggerRef) triggerRef.current = node;
3830
- }, type: "button", "aria-label": label === "Sort" ? "Sort issues" : label === "Filter" ? "Filter issues by status" : "Display fields", "aria-expanded": open, "aria-controls": id, onClick: () => setOpen((value) => !value), className: `flex items-center gap-1.5 rounded-md px-2 py-1.5 transition-colors hover:bg-white/5 ${open ? "bg-white/10 text-white" : ""}`, children: [
3484
+ }, type: "button", "aria-label": label === "Sort" ? "Sort issues" : label === "Filter" ? "Filter issues by status" : "Display fields", "aria-expanded": open, "aria-controls": id, onClick: () => setOpen((value) => !value), className: `flex items-center gap-1.5 rounded-md px-2 py-1.5 transition-colors hover:bg-[var(--mova-ai-hover,#f1f1f1)] ${open ? "bg-[var(--mova-ai-hover-strong,#e9e9e9)] text-[color:var(--mova-ai-ink,#202020)]" : ""}`, children: [
3831
3485
  icon,
3832
3486
  label,
3833
3487
  /* @__PURE__ */ jsx11(ChevronDown, { className: "h-3 w-3" })
3834
3488
  ] }),
3835
- /* @__PURE__ */ jsx11(AnimatePresence5, { initial: false, children: open ? /* @__PURE__ */ jsx11(motion6.div, { ref: panel, id, role: "group", "aria-label": `${label} options`, initial: { opacity: 0, y: reducedMotion ? 0 : -4 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: reducedMotion ? 0 : -3 }, transition: { duration: reducedMotion ? 0 : 0.16, ease: [0.22, 1, 0.36, 1] }, className: "absolute right-0 z-30 mt-2 w-48 space-y-1 rounded-lg border border-white/10 bg-[#2c2c29] p-2 text-xs shadow-xl", children }, "panel") : null })
3489
+ /* @__PURE__ */ jsx11(AnimatePresence5, { initial: false, children: open ? /* @__PURE__ */ jsx11(motion6.div, { ref: panel, id, role: "group", "aria-label": `${label} options`, initial: { opacity: 0, y: reducedMotion ? 0 : -4 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: reducedMotion ? 0 : -3 }, transition: { duration: reducedMotion ? 0 : 0.16, ease: [0.22, 1, 0.36, 1] }, className: "absolute right-0 z-30 mt-2 w-48 space-y-1 rounded-lg border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-surface,#fff)] p-2 text-xs shadow-xl", children }, "panel") : null })
3836
3490
  ] });
3837
3491
  }
3838
3492
  function resolveTargetStatus(overId, issues) {
@@ -3841,7 +3495,7 @@ function resolveTargetStatus(overId, issues) {
3841
3495
  }
3842
3496
  function RudderIssueBoard({ theme = "dark", className = "", initialIssues = DEFAULT_ISSUES, onIssuesChange }) {
3843
3497
  const rootRef = useRef6(null);
3844
- const sortGroupId = useId3();
3498
+ const sortGroupId = useId4();
3845
3499
  const keyboardTargetRef = useRef6(null);
3846
3500
  const [issues, setIssues] = useState12(() => [...initialIssues]);
3847
3501
  const [statusFilter, setStatusFilter] = useState12("all");
@@ -3993,9 +3647,11 @@ function RudderIssueBoard({ theme = "dark", className = "", initialIssues = DEFA
3993
3647
  setAnnouncement(`${movingIssue.id} stayed in ${STATUS_META[targetStatus].label}.`);
3994
3648
  }
3995
3649
  };
3996
- return /* @__PURE__ */ jsxs11("section", { ref: rootRef, "data-theme": theme, className: `rudder-board w-full min-w-0 min-h-[620px] bg-[#22221f] text-[#ececea] ${className}`, "aria-label": "Rudder issue board", children: [
3997
- /* @__PURE__ */ jsx11("style", { children: `
3998
- [aria-label="Rudder issue board"] :is(button,input,select,summary):focus-visible { outline: 2px solid #b5d4a7; outline-offset: 2px; }
3650
+ return /* @__PURE__ */ jsxs11("section", { ref: rootRef, "data-theme": theme, className: `mova-ai-theme rudder-board w-full min-w-0 min-h-[620px] bg-[var(--mova-ai-canvas,#202020)] text-[color:var(--mova-ai-ink,#eeeeee)] ${className}`, "aria-label": "Rudder issue board", children: [
3651
+ /* @__PURE__ */ jsxs11("style", { children: [
3652
+ AI_THEME_STYLES10,
3653
+ `
3654
+ .rudder-board :is(button,input,select,summary):focus-visible { outline: 2px solid var(--mova-ai-accent,#c2c2c2); outline-offset: 2px; }
3999
3655
  .rudder-board { container-type: inline-size; }
4000
3656
  .rudder-list-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 40%); align-items: start; gap: 16px; }
4001
3657
  .rudder-list-meta { justify-content: flex-end; padding-top: 2px; }
@@ -4003,15 +3659,6 @@ function RudderIssueBoard({ theme = "dark", className = "", initialIssues = DEFA
4003
3659
  .rudder-list-row { grid-template-columns: minmax(0, 1fr); gap: 8px; }
4004
3660
  .rudder-list-meta { justify-content: flex-start; padding-left: 26px; }
4005
3661
  }
4006
- .rudder-board[data-theme="light"] { background: #f7f7f5; color: #252523; }
4007
- .rudder-board[data-theme="light"] [class*="border-white"] { border-color: #deded9; }
4008
- .rudder-board[data-theme="light"] [class*="text-[#ececea]"],
4009
- .rudder-board[data-theme="light"] [class*="text-white"] { color: #252523; }
4010
- .rudder-board[data-theme="light"] :is([class*="text-[#a"], [class*="text-[#8"]) { color: #64645e; }
4011
- .rudder-board[data-theme="light"] :is([class*="bg-[#242423]"], [class*="bg-[#2c2c29]"], [class*="bg-[#22221f]"]) { background-color: #fff; }
4012
- .rudder-board[data-theme="light"] .motion-kanban-lane { background-color: #efefeb; }
4013
- .rudder-board[data-theme="light"] [data-over="true"] { background-color: #e1e9de; }
4014
- .rudder-board[data-theme="light"] [aria-pressed="true"] { background-color: #e6e6e0; color: #252523; }
4015
3662
  @media (prefers-reduced-motion: reduce) {
4016
3663
  .motion-kanban-card,
4017
3664
  .motion-kanban-lane {
@@ -4019,36 +3666,37 @@ function RudderIssueBoard({ theme = "dark", className = "", initialIssues = DEFA
4019
3666
  transition: none !important;
4020
3667
  }
4021
3668
  }
4022
- ` }),
3669
+ `
3670
+ ] }),
4023
3671
  /* @__PURE__ */ jsx11("p", { className: "sr-only", "aria-live": "assertive", children: announcement }),
4024
- /* @__PURE__ */ jsxs11("div", { className: "flex flex-wrap items-center gap-2 border-b border-white/10 px-4 py-3 text-xs text-[#a5a59f]", children: [
4025
- /* @__PURE__ */ jsx11("h2", { className: "mr-auto text-xs font-medium uppercase tracking-[0.16em] text-[#a5a59f]", children: "Issues" }),
3672
+ /* @__PURE__ */ jsxs11("div", { className: "flex flex-wrap items-center gap-2 border-b border-[var(--mova-ai-border,#dedede)] px-4 py-3 text-xs text-[color:var(--mova-ai-ink-secondary,#666)]", children: [
3673
+ /* @__PURE__ */ jsx11("h2", { className: "mr-auto text-xs font-medium uppercase tracking-[0.16em] text-[color:var(--mova-ai-ink-secondary,#666)]", children: "Issues" }),
4026
3674
  /* @__PURE__ */ jsxs11("div", { className: "flex flex-wrap items-center justify-end gap-1", children: [
4027
- /* @__PURE__ */ jsxs11("button", { type: "button", "aria-label": "Show working issues", "aria-pressed": statusFilter === "in_progress", onClick: () => setStatusFilter((value) => value === "in_progress" ? "all" : "in_progress"), className: `mr-1 rounded-md border border-white/10 px-2.5 py-1.5 tabular-nums transition-colors hover:bg-white/5 ${statusFilter === "in_progress" ? "bg-white/10 text-white" : ""}`, children: [
3675
+ /* @__PURE__ */ jsxs11("button", { type: "button", "aria-label": "Show working issues", "aria-pressed": statusFilter === "in_progress", onClick: () => setStatusFilter((value) => value === "in_progress" ? "all" : "in_progress"), className: `mr-1 rounded-md border border-[var(--mova-ai-border,#dedede)] px-2.5 py-1.5 tabular-nums transition-colors hover:bg-[var(--mova-ai-hover,#f1f1f1)] ${statusFilter === "in_progress" ? "bg-[var(--mova-ai-hover-strong,#e9e9e9)] text-[color:var(--mova-ai-ink,#202020)]" : ""}`, children: [
4028
3676
  issues.filter((issue) => issue.status === "in_progress").length,
4029
3677
  " working"
4030
3678
  ] }),
4031
- /* @__PURE__ */ jsxs11("div", { className: "mr-1 flex rounded-md border border-white/10 p-0.5", children: [
4032
- /* @__PURE__ */ jsx11("button", { type: "button", "aria-label": "List view", "aria-pressed": view === "list", onClick: () => setView("list"), className: `rounded p-1 transition-colors ${view === "list" ? "bg-white/10 text-white" : ""}`, children: /* @__PURE__ */ jsx11(List, { className: "h-3.5 w-3.5" }) }),
4033
- /* @__PURE__ */ jsx11("button", { type: "button", "aria-label": "Board view", "aria-pressed": view === "board", onClick: () => setView("board"), className: `rounded p-1 transition-colors ${view === "board" ? "bg-white/10 text-white" : ""}`, children: /* @__PURE__ */ jsx11(Columns3, { className: "h-3.5 w-3.5" }) })
3679
+ /* @__PURE__ */ jsxs11("div", { className: "mr-1 flex rounded-md border border-[var(--mova-ai-border,#dedede)] p-0.5", children: [
3680
+ /* @__PURE__ */ jsx11("button", { type: "button", "aria-label": "List view", "aria-pressed": view === "list", onClick: () => setView("list"), className: `rounded p-1 transition-colors ${view === "list" ? "bg-[var(--mova-ai-hover-strong,#e9e9e9)] text-[color:var(--mova-ai-ink,#202020)]" : ""}`, children: /* @__PURE__ */ jsx11(List, { className: "h-3.5 w-3.5" }) }),
3681
+ /* @__PURE__ */ jsx11("button", { type: "button", "aria-label": "Board view", "aria-pressed": view === "board", onClick: () => setView("board"), className: `rounded p-1 transition-colors ${view === "board" ? "bg-[var(--mova-ai-hover-strong,#e9e9e9)] text-[color:var(--mova-ai-ink,#202020)]" : ""}`, children: /* @__PURE__ */ jsx11(Columns3, { className: "h-3.5 w-3.5" }) })
4034
3682
  ] }),
4035
- /* @__PURE__ */ jsx11(ToolbarPopover, { label: "Filter", triggerRef: statusFilterRef, icon: /* @__PURE__ */ jsx11(Filter, { className: "h-3 w-3" }), children: /* @__PURE__ */ jsx11("div", { role: "radiogroup", "aria-label": "Issue status", children: ["all", ...BOARD_STATUSES].map((status) => /* @__PURE__ */ jsxs11("label", { className: "flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 hover:bg-white/5", children: [
4036
- /* @__PURE__ */ jsx11("input", { type: "radio", className: "accent-[#28cda0]", name: `${sortGroupId}-status`, checked: statusFilter === status, onChange: () => setStatusFilter(status) }),
3683
+ /* @__PURE__ */ jsx11(ToolbarPopover, { label: "Filter", triggerRef: statusFilterRef, icon: /* @__PURE__ */ jsx11(Filter, { className: "h-3 w-3" }), children: /* @__PURE__ */ jsx11("div", { role: "radiogroup", "aria-label": "Issue status", children: ["all", ...BOARD_STATUSES].map((status) => /* @__PURE__ */ jsxs11("label", { className: "flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 hover:bg-[var(--mova-ai-hover,#f1f1f1)]", children: [
3684
+ /* @__PURE__ */ jsx11("input", { type: "radio", className: "accent-[var(--mova-ai-accent,#454545)]", name: `${sortGroupId}-status`, checked: statusFilter === status, onChange: () => setStatusFilter(status) }),
4037
3685
  status === "all" ? "All statuses" : STATUS_META[status].label
4038
3686
  ] }, status)) }) }),
4039
3687
  /* @__PURE__ */ jsxs11(ToolbarPopover, { label: "Sort", icon: /* @__PURE__ */ jsx11(ArrowUpDown, { className: "h-3 w-3" }), children: [
4040
- /* @__PURE__ */ jsx11("div", { role: "radiogroup", "aria-label": "Sort field", children: ["Manual", "Status", "Priority", "Title", "Created", "Updated"].map((value) => /* @__PURE__ */ jsxs11("label", { className: `flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 hover:bg-white/5 ${sort === value ? "bg-white/5 text-white" : ""}`, children: [
4041
- /* @__PURE__ */ jsx11("input", { className: "accent-[#28cda0]", type: "radio", name: sortGroupId, checked: sort === value, onChange: () => setSort(value) }),
3688
+ /* @__PURE__ */ jsx11("div", { role: "radiogroup", "aria-label": "Sort field", children: ["Manual", "Status", "Priority", "Title", "Created", "Updated"].map((value) => /* @__PURE__ */ jsxs11("label", { className: `flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 hover:bg-[var(--mova-ai-hover,#f1f1f1)] ${sort === value ? "bg-[var(--mova-ai-hover,#f1f1f1)] text-[color:var(--mova-ai-ink,#202020)]" : ""}`, children: [
3689
+ /* @__PURE__ */ jsx11("input", { className: "accent-[var(--mova-ai-accent,#454545)]", type: "radio", name: sortGroupId, checked: sort === value, onChange: () => setSort(value) }),
4042
3690
  value,
4043
3691
  sort === value ? /* @__PURE__ */ jsx11(Check, { className: "ml-auto h-3 w-3" }) : null
4044
3692
  ] }, value)) }),
4045
- /* @__PURE__ */ jsxs11("button", { type: "button", disabled: sort === "Manual", onClick: () => setDescending((value) => !value), "aria-label": "Toggle sort direction", className: "flex w-full items-center gap-2 border-t border-white/10 px-2 py-2 text-left disabled:opacity-40", children: [
3693
+ /* @__PURE__ */ jsxs11("button", { type: "button", disabled: sort === "Manual", onClick: () => setDescending((value) => !value), "aria-label": "Toggle sort direction", className: "flex w-full items-center gap-2 border-t border-[var(--mova-ai-border,#dedede)] px-2 py-2 text-left disabled:opacity-40", children: [
4046
3694
  /* @__PURE__ */ jsx11(ArrowUpDown, { className: "h-3 w-3" }),
4047
3695
  descending ? "Descending" : "Ascending"
4048
3696
  ] })
4049
3697
  ] }),
4050
- /* @__PURE__ */ jsx11(ToolbarPopover, { label: "Display", icon: /* @__PURE__ */ jsx11(SlidersHorizontal, { className: "h-3 w-3" }), children: DISPLAY_FIELDS.map((field) => /* @__PURE__ */ jsxs11("label", { className: "flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 hover:bg-white/5", children: [
4051
- /* @__PURE__ */ jsx11("input", { className: "accent-[#28cda0]", type: "checkbox", checked: display.includes(field), onChange: () => setDisplay((fields) => fields.includes(field) ? fields.filter((value) => value !== field) : [...fields, field]) }),
3698
+ /* @__PURE__ */ jsx11(ToolbarPopover, { label: "Display", icon: /* @__PURE__ */ jsx11(SlidersHorizontal, { className: "h-3 w-3" }), children: DISPLAY_FIELDS.map((field) => /* @__PURE__ */ jsxs11("label", { className: "flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 hover:bg-[var(--mova-ai-hover,#f1f1f1)]", children: [
3699
+ /* @__PURE__ */ jsx11("input", { className: "accent-[var(--mova-ai-accent,#454545)]", type: "checkbox", checked: display.includes(field), onChange: () => setDisplay((fields) => fields.includes(field) ? fields.filter((value) => value !== field) : [...fields, field]) }),
4052
3700
  field
4053
3701
  ] }, field)) })
4054
3702
  ] })
@@ -4058,7 +3706,7 @@ function RudderIssueBoard({ theme = "dark", className = "", initialIssues = DEFA
4058
3706
  event.preventDefault();
4059
3707
  closeCreate();
4060
3708
  }
4061
- }, className: "flex flex-wrap items-center gap-2 border-b border-white/10 bg-white/5 p-3", onSubmit: (event) => {
3709
+ }, className: "flex flex-wrap items-center gap-2 border-b border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-hover,#f1f1f1)] p-3", onSubmit: (event) => {
4062
3710
  event.preventDefault();
4063
3711
  if (!draft.trim()) return;
4064
3712
  let sequence = issues.length + 1;
@@ -4070,15 +3718,15 @@ function RudderIssueBoard({ theme = "dark", className = "", initialIssues = DEFA
4070
3718
  closeCreate();
4071
3719
  setAnnouncement("Issue created.");
4072
3720
  }, children: [
4073
- /* @__PURE__ */ jsx11("input", { ref: createInputRef, required: true, "aria-label": "New issue title", placeholder: "Issue title", value: draft, onChange: (event) => setDraft(event.target.value), className: "min-w-0 flex-1 rounded border border-white/10 bg-black/10 px-2 py-1.5 text-sm" }),
4074
- /* @__PURE__ */ jsx11("select", { "aria-label": "New issue status", value: creating, onChange: (event) => setCreating(event.target.value), className: "rounded bg-[#22221f] p-1 text-xs", children: BOARD_STATUSES.map((status) => /* @__PURE__ */ jsx11("option", { value: status, children: STATUS_META[status].label }, status)) }),
4075
- /* @__PURE__ */ jsx11("button", { type: "submit", className: "rounded bg-[#28cda0] px-3 py-1.5 text-xs text-[#102d23]", children: "Create" }),
3721
+ /* @__PURE__ */ jsx11("input", { ref: createInputRef, required: true, "aria-label": "New issue title", placeholder: "Issue title", value: draft, onChange: (event) => setDraft(event.target.value), className: "min-w-0 flex-1 rounded border border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-field,#f6f6f6)] px-2 py-1.5 text-sm" }),
3722
+ /* @__PURE__ */ jsx11("select", { "aria-label": "New issue status", value: creating, onChange: (event) => setCreating(event.target.value), className: "rounded bg-[var(--mova-ai-canvas,#f4f4f4)] p-1 text-xs", children: BOARD_STATUSES.map((status) => /* @__PURE__ */ jsx11("option", { value: status, children: STATUS_META[status].label }, status)) }),
3723
+ /* @__PURE__ */ jsx11("button", { type: "submit", className: "rounded bg-[var(--mova-ai-accent,#454545)] px-3 py-1.5 text-xs text-[color:var(--mova-ai-accent-foreground,#fff)]", children: "Create" }),
4076
3724
  /* @__PURE__ */ jsx11("button", { type: "button", onClick: closeCreate, className: "px-2 text-xs", children: "Cancel" })
4077
3725
  ] }) : null,
4078
3726
  /* @__PURE__ */ jsx11(DisplayContext.Provider, { value: display, children: /* @__PURE__ */ jsx11(AnimatePresence5, { mode: "wait", initial: false, children: /* @__PURE__ */ jsx11(motion6.div, { initial: { opacity: 0, y: reduceMotion ? 0 : 5 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: reduceMotion ? 0 : -3 }, transition: { duration: reduceMotion ? 0 : 0.15, ease: [0.22, 1, 0.36, 1] }, children: view === "list" ? /* @__PURE__ */ jsxs11("div", { className: "max-h-[580px] overflow-y-auto", children: [
4079
3727
  filtered.map((issue) => /* @__PURE__ */ jsx11(IssueListRow, { issue }, issue.id)),
4080
- filtered.length === 0 ? /* @__PURE__ */ jsx11("p", { className: "py-10 text-center text-sm text-[#a5a59f]", children: "No issues match this filter." }) : null,
4081
- /* @__PURE__ */ jsxs11("button", { ref: listCreateRef, type: "button", onClick: (event) => openCreate(statusFilter === "all" ? "backlog" : statusFilter, event.currentTarget), className: "flex items-center gap-2 px-4 py-3 text-xs text-[#a5a59f] transition-colors hover:text-[#ececea]", children: [
3728
+ filtered.length === 0 ? /* @__PURE__ */ jsx11("p", { className: "py-10 text-center text-sm text-[color:var(--mova-ai-ink-secondary,#666)]", children: "No issues match this filter." }) : null,
3729
+ /* @__PURE__ */ jsxs11("button", { ref: listCreateRef, type: "button", onClick: (event) => openCreate(statusFilter === "all" ? "backlog" : statusFilter, event.currentTarget), className: "flex items-center gap-2 px-4 py-3 text-xs text-[color:var(--mova-ai-ink-secondary,#666)] transition-colors hover:text-[color:var(--mova-ai-ink,#202020)]", children: [
4082
3730
  /* @__PURE__ */ jsx11(Plus, { className: "h-3.5 w-3.5" }),
4083
3731
  "Add issue"
4084
3732
  ] })
@@ -4095,15 +3743,15 @@ function RudderIssueBoard({ theme = "dark", className = "", initialIssues = DEFA
4095
3743
  children: [
4096
3744
  /* @__PURE__ */ jsx11("div", { className: "overflow-x-auto overscroll-x-contain p-3 sm:p-4", children: /* @__PURE__ */ jsxs11("div", { className: "flex min-h-[520px] min-w-max items-stretch gap-3", children: [
4097
3745
  visibleStatuses.map((status) => /* @__PURE__ */ jsx11(Fragment4, { children: /* @__PURE__ */ jsx11(BoardColumn, { issues: grouped[status], status, onCreate: openCreate }) }, status)),
4098
- hiddenStatuses.length > 0 ? /* @__PURE__ */ jsxs11("div", { className: `motion-kanban-lane flex min-h-0 w-[228px] min-w-[228px] shrink-0 flex-col rounded-[10px] border p-2 transition-colors motion-reduce:transition-none ${overStatus && hiddenStatuses.includes(overStatus) ? "border-white/20 bg-white/[0.055]" : "border-white/[0.09] bg-white/[0.025]"}`, "data-testid": "kanban-hidden-columns", children: [
3746
+ hiddenStatuses.length > 0 ? /* @__PURE__ */ jsxs11("div", { className: `motion-kanban-lane flex min-h-0 w-[228px] min-w-[228px] shrink-0 flex-col rounded-[10px] border p-2 transition-colors motion-reduce:transition-none ${overStatus && hiddenStatuses.includes(overStatus) ? "border-[var(--mova-ai-border-strong,#c8c8c8)] bg-[var(--mova-ai-hover,#f1f1f1)]" : "border-[var(--mova-ai-border,#dedede)] bg-[var(--mova-ai-canvas,#f4f4f4)]"}`, "data-testid": "kanban-hidden-columns", children: [
4099
3747
  /* @__PURE__ */ jsxs11("div", { className: "mb-2 flex items-center gap-2 px-1", children: [
4100
- /* @__PURE__ */ jsx11("span", { className: "text-xs font-semibold uppercase tracking-wide text-[#8b8b8b]", children: "Hidden columns" }),
4101
- /* @__PURE__ */ jsx11("span", { className: "ml-auto text-xs tabular-nums text-[#5f5f5f]", children: hiddenStatuses.length })
3748
+ /* @__PURE__ */ jsx11("span", { className: "text-xs font-semibold uppercase tracking-wide text-[color:var(--mova-ai-ink-muted,#858585)]", children: "Hidden columns" }),
3749
+ /* @__PURE__ */ jsx11("span", { className: "ml-auto text-xs tabular-nums text-[color:var(--mova-ai-ink-muted,#858585)]", children: hiddenStatuses.length })
4102
3750
  ] }),
4103
3751
  /* @__PURE__ */ jsx11("div", { className: "space-y-2", children: hiddenStatuses.map((status) => /* @__PURE__ */ jsx11(Fragment4, { children: /* @__PURE__ */ jsx11(HiddenStatus, { status, onCreate: openCreate }) }, status)) })
4104
3752
  ] }) : null
4105
3753
  ] }) }),
4106
- /* @__PURE__ */ jsx11(DragOverlay, { dropAnimation: reduceMotion ? null : { duration: 180, easing: "cubic-bezier(0.22, 1, 0.36, 1)" }, children: activeIssue ? /* @__PURE__ */ jsx11("article", { className: "w-[247px] rotate-[0.4deg] scale-[1.015] overflow-hidden rounded-[9px] border border-white/20 bg-[#242423] p-2.5 shadow-[0_18px_48px_rgba(0,0,0,.48)]", children: /* @__PURE__ */ jsx11(IssueCardBody, { issue: activeIssue }) }) : null })
3754
+ /* @__PURE__ */ jsx11(DragOverlay, { dropAnimation: reduceMotion ? null : { duration: 180, easing: "cubic-bezier(0.22, 1, 0.36, 1)" }, children: activeIssue ? /* @__PURE__ */ jsx11("article", { className: "w-[247px] rotate-[0.4deg] scale-[1.015] overflow-hidden rounded-[9px] border border-[var(--mova-ai-border-strong,#c8c8c8)] bg-[var(--mova-ai-surface,#fff)] p-2.5 shadow-[0_18px_48px_rgba(0,0,0,.48)]", children: /* @__PURE__ */ jsx11(IssueCardBody, { issue: activeIssue }) }) : null })
4107
3755
  ]
4108
3756
  }
4109
3757
  ) }, view) }) })
@@ -4113,7 +3761,7 @@ var rudder_issue_board_default = RudderIssueBoard;
4113
3761
 
4114
3762
  // .generated/ui/animated-sidebar.tsx
4115
3763
  import { Activity, Bookmark, ChevronDown as ChevronDown2, LayoutGrid } from "lucide-react";
4116
- import { useId as useId4, useState as useState13 } from "react";
3764
+ import { useId as useId5, useState as useState13 } from "react";
4117
3765
  import { Fragment as Fragment6, jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
4118
3766
  var SIDEBAR_ITEMS = [
4119
3767
  { id: "send", label: "Work queue", meta: "Current cycle", icon: LayoutGrid },
@@ -4439,7 +4087,7 @@ function AnimatedSidebar({
4439
4087
  } = {}) {
4440
4088
  const [activeItem, setActiveItem] = useState13(initialActiveItem);
4441
4089
  const [isSectionOpen, setIsSectionOpen] = useState13(true);
4442
- const sectionId = `mova-sidebar-section-${useId4().replace(/:/g, "")}`;
4090
+ const sectionId = `mova-sidebar-section-${useId5().replace(/:/g, "")}`;
4443
4091
  const rootClassName = ["mova-sidebar", className].filter(Boolean).join(" ");
4444
4092
  const selectItem = (id) => {
4445
4093
  setActiveItem(id);
@@ -8317,7 +7965,7 @@ function ExpandingIconTabs() {
8317
7965
 
8318
7966
  // .generated/ui/patterns/gooey-popover.tsx
8319
7967
  import gsap from "gsap";
8320
- import { useCallback as useCallback3, useEffect as useEffect13, useId as useId5, useRef as useRef12, useState as useState23 } from "react";
7968
+ import { useCallback as useCallback3, useEffect as useEffect13, useId as useId6, useRef as useRef12, useState as useState23 } from "react";
8321
7969
  import { jsx as jsx167, jsxs as jsxs77 } from "react/jsx-runtime";
8322
7970
  function cn2(...classes) {
8323
7971
  return classes.filter(Boolean).join(" ");
@@ -8358,7 +8006,7 @@ function GooeyPopover({
8358
8006
  contentClassName,
8359
8007
  className
8360
8008
  }) {
8361
- const filterId = useId5();
8009
+ const filterId = useId6();
8362
8010
  const isControlled = controlledIsOpen !== void 0;
8363
8011
  const [internalIsOpen, setInternalIsOpen] = useState23(false);
8364
8012
  const isOpen = isControlled ? controlledIsOpen : internalIsOpen;