@flamingo-stack/openframe-frontend-core 0.0.439 → 0.0.440

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 (467) hide show
  1. package/dist/{chunk-RVWC4P3H.js → chunk-2BTDPDME.js} +9 -9
  2. package/dist/chunk-2BTDPDME.js.map +1 -0
  3. package/dist/{chunk-G5FALXNO.js → chunk-63TSTDME.js} +21 -21
  4. package/dist/chunk-63TSTDME.js.map +1 -0
  5. package/dist/{chunk-4ACSUJ7Q.js → chunk-6CITW5BD.js} +10 -10
  6. package/dist/chunk-6CITW5BD.js.map +1 -0
  7. package/dist/{chunk-QXYOGJQJ.js → chunk-7KDR5P23.js} +2 -2
  8. package/dist/{chunk-PEIR7D25.js → chunk-7KNOHGMI.js} +2 -2
  9. package/dist/{chunk-ZMUFTGL7.cjs → chunk-7QP65IE4.cjs} +5 -5
  10. package/dist/{chunk-ZMUFTGL7.cjs.map → chunk-7QP65IE4.cjs.map} +1 -1
  11. package/dist/{chunk-WPVBTVI3.js → chunk-AGV26PUR.js} +6 -6
  12. package/dist/{chunk-WPVBTVI3.js.map → chunk-AGV26PUR.js.map} +1 -1
  13. package/dist/{chunk-HTVVXVJL.cjs → chunk-DUQQEQ7G.cjs} +1431 -1594
  14. package/dist/chunk-DUQQEQ7G.cjs.map +1 -0
  15. package/dist/{chunk-COMBYYQY.js → chunk-FPE3SQ5D.js} +13 -13
  16. package/dist/chunk-FPE3SQ5D.js.map +1 -0
  17. package/dist/{chunk-WAGTZVQN.js → chunk-IAZ5AN2E.js} +30 -30
  18. package/dist/chunk-IAZ5AN2E.js.map +1 -0
  19. package/dist/{chunk-RQQZF6G6.cjs → chunk-IPEIOR77.cjs} +130 -130
  20. package/dist/chunk-IPEIOR77.cjs.map +1 -0
  21. package/dist/{chunk-3WJQL4DN.cjs → chunk-IZ6A6K6N.cjs} +25 -25
  22. package/dist/chunk-IZ6A6K6N.cjs.map +1 -0
  23. package/dist/{chunk-EE5NH5SH.cjs → chunk-J5NO7PAG.cjs} +3 -3
  24. package/dist/{chunk-EE5NH5SH.cjs.map → chunk-J5NO7PAG.cjs.map} +1 -1
  25. package/dist/{chunk-IAN7GUIV.cjs → chunk-JNC4LVD6.cjs} +42 -42
  26. package/dist/chunk-JNC4LVD6.cjs.map +1 -0
  27. package/dist/{chunk-VWGF6IFR.cjs → chunk-JOH5D76X.cjs} +108 -108
  28. package/dist/chunk-JOH5D76X.cjs.map +1 -0
  29. package/dist/{chunk-7WM77CSW.js → chunk-JYI4R25Q.js} +5 -5
  30. package/dist/chunk-JYI4R25Q.js.map +1 -0
  31. package/dist/{chunk-M6QGB6DC.cjs → chunk-KUXGQ2FQ.cjs} +36 -36
  32. package/dist/chunk-KUXGQ2FQ.cjs.map +1 -0
  33. package/dist/{chunk-M3LD6DNE.cjs → chunk-LFWPWIAC.cjs} +16 -16
  34. package/dist/{chunk-M3LD6DNE.cjs.map → chunk-LFWPWIAC.cjs.map} +1 -1
  35. package/dist/{chunk-R46QEE3R.cjs → chunk-LUKRPHEW.cjs} +96 -96
  36. package/dist/chunk-LUKRPHEW.cjs.map +1 -0
  37. package/dist/{chunk-IMK6RUEC.cjs → chunk-PYR4LVAF.cjs} +10 -10
  38. package/dist/chunk-PYR4LVAF.cjs.map +1 -0
  39. package/dist/{chunk-2ELBNZJ3.js → chunk-QAG357PE.js} +7 -7
  40. package/dist/chunk-QAG357PE.js.map +1 -0
  41. package/dist/{chunk-N2TJ3HAM.cjs → chunk-QO6MCQYE.cjs} +9 -9
  42. package/dist/chunk-QO6MCQYE.cjs.map +1 -0
  43. package/dist/{chunk-EGRZHR7J.js → chunk-SM26C2L7.js} +9 -9
  44. package/dist/chunk-SM26C2L7.js.map +1 -0
  45. package/dist/{chunk-AUJXLVXA.cjs → chunk-TAQMYVO6.cjs} +42 -42
  46. package/dist/{chunk-AUJXLVXA.cjs.map → chunk-TAQMYVO6.cjs.map} +1 -1
  47. package/dist/{chunk-C3FH53AP.cjs → chunk-UFBUQO7Z.cjs} +19 -19
  48. package/dist/{chunk-C3FH53AP.cjs.map → chunk-UFBUQO7Z.cjs.map} +1 -1
  49. package/dist/{chunk-F7YVI54P.js → chunk-W3JZXLJ2.js} +10 -10
  50. package/dist/chunk-W3JZXLJ2.js.map +1 -0
  51. package/dist/{chunk-WZ6TCAYQ.cjs → chunk-XMCVUYKC.cjs} +14 -14
  52. package/dist/chunk-XMCVUYKC.cjs.map +1 -0
  53. package/dist/{chunk-P7PISHM5.js → chunk-Y3NFB6HR.js} +5 -5
  54. package/dist/chunk-Y3NFB6HR.js.map +1 -0
  55. package/dist/{chunk-PBTY7AH5.js → chunk-YZJUHEPZ.js} +95 -95
  56. package/dist/chunk-YZJUHEPZ.js.map +1 -0
  57. package/dist/{chunk-NQQ4NLUT.js → chunk-ZQYFDYWV.js} +4298 -4461
  58. package/dist/chunk-ZQYFDYWV.js.map +1 -0
  59. package/dist/components/case-studies/index.cjs +15 -15
  60. package/dist/components/case-studies/index.cjs.map +1 -1
  61. package/dist/components/case-studies/index.js +9 -9
  62. package/dist/components/case-studies/index.js.map +1 -1
  63. package/dist/components/chat/approval-request-message.d.ts.map +1 -1
  64. package/dist/components/chat/entity-cards/blog-card.d.ts.map +1 -1
  65. package/dist/components/chat/index.cjs +4 -4
  66. package/dist/components/chat/index.js +3 -3
  67. package/dist/components/chat/tool-call-blocks.d.ts.map +1 -1
  68. package/dist/components/chat/utils/compact-card-classes.d.ts +3 -3
  69. package/dist/components/chat/utils/compact-card-classes.d.ts.map +1 -1
  70. package/dist/components/contact/index.cjs +5 -5
  71. package/dist/components/contact/index.js +4 -4
  72. package/dist/components/docs/index.cjs +7 -7
  73. package/dist/components/docs/index.js +6 -6
  74. package/dist/components/embeds/index.cjs +5 -5
  75. package/dist/components/embeds/index.js +4 -4
  76. package/dist/components/faq/index.cjs +6 -6
  77. package/dist/components/faq/index.js +5 -5
  78. package/dist/components/features/index.cjs +4 -4
  79. package/dist/components/features/index.js +3 -3
  80. package/dist/components/help-center-pages/index.cjs +23 -23
  81. package/dist/components/help-center-pages/index.js +14 -14
  82. package/dist/components/index.cjs +262 -256
  83. package/dist/components/index.cjs.map +1 -1
  84. package/dist/components/index.js +117 -111
  85. package/dist/components/index.js.map +1 -1
  86. package/dist/components/msp-display.d.ts.map +1 -1
  87. package/dist/components/navigation/index.cjs +4 -4
  88. package/dist/components/navigation/index.js +3 -3
  89. package/dist/components/navigation/sticky-section-nav.d.ts.map +1 -1
  90. package/dist/components/onboarding-guides/index.cjs +8 -8
  91. package/dist/components/onboarding-guides/index.js +7 -7
  92. package/dist/components/pricing-display.d.ts +9 -9
  93. package/dist/components/related-content/index.cjs +6 -6
  94. package/dist/components/related-content/index.js +5 -5
  95. package/dist/components/tickets/index.cjs +7 -7
  96. package/dist/components/tickets/index.js +6 -6
  97. package/dist/components/toast/index.cjs +5 -5
  98. package/dist/components/toast/index.cjs.map +1 -1
  99. package/dist/components/toast/index.js +5 -5
  100. package/dist/components/toast/index.js.map +1 -1
  101. package/dist/components/ui/bullet-list.d.ts.map +1 -1
  102. package/dist/components/ui/drawer.d.ts +1 -1
  103. package/dist/components/ui/drawer.d.ts.map +1 -1
  104. package/dist/components/ui/file-manager/index.cjs +73 -73
  105. package/dist/components/ui/file-manager/index.cjs.map +1 -1
  106. package/dist/components/ui/file-manager/index.js +24 -24
  107. package/dist/components/ui/file-manager/index.js.map +1 -1
  108. package/dist/components/ui/index.cjs +4 -4
  109. package/dist/components/ui/index.js +3 -3
  110. package/dist/components/ui/markdown-editor.d.ts.map +1 -1
  111. package/dist/components/ui/square-avatar.d.ts +3 -0
  112. package/dist/components/ui/square-avatar.d.ts.map +1 -1
  113. package/dist/components/user-display.d.ts.map +1 -1
  114. package/dist/components/vendor-tag.d.ts.map +1 -1
  115. package/dist/hooks/index.cjs +2 -2
  116. package/dist/hooks/index.js +1 -1
  117. package/dist/index.cjs +4 -4
  118. package/dist/index.js +3 -3
  119. package/dist/tailwind.config.cjs +38 -5
  120. package/dist/tailwind.config.cjs.map +1 -1
  121. package/dist/tailwind.config.js +38 -5
  122. package/dist/tailwind.config.js.map +1 -1
  123. package/package.json +1 -1
  124. package/src/ODS_TOKEN_RULES.md +5 -0
  125. package/src/components/.footer.md +2 -2
  126. package/src/components/announcement-bar.tsx +1 -1
  127. package/src/components/authors/author-detail-view.tsx +3 -3
  128. package/src/components/calendar.tsx +2 -2
  129. package/src/components/case-studies/share-experience-section.tsx +5 -5
  130. package/src/components/categories-cart.tsx +6 -6
  131. package/src/components/category-card.tsx +5 -5
  132. package/src/components/chart.tsx +3 -3
  133. package/src/components/chat/approval-request-message.tsx +2 -5
  134. package/src/components/chat/chat-attachment-bar.tsx +3 -3
  135. package/src/components/chat/chat-message-enhanced.tsx +1 -1
  136. package/src/components/chat/chat-message-list.tsx +1 -1
  137. package/src/components/chat/chat-message-row.tsx +3 -3
  138. package/src/components/chat/chat-quick-action.tsx +1 -1
  139. package/src/components/chat/chat-sidebar-skeleton.tsx +1 -1
  140. package/src/components/chat/chat-sidebar.tsx +6 -6
  141. package/src/components/chat/chat-typing-indicator.tsx +1 -1
  142. package/src/components/chat/context-compaction-display.tsx +1 -1
  143. package/src/components/chat/embeddable-chat.tsx +3 -3
  144. package/src/components/chat/entity-cards/admin-content-card.tsx +5 -5
  145. package/src/components/chat/entity-cards/blog-card.tsx +5 -8
  146. package/src/components/chat/entity-cards/case-study-card.tsx +5 -5
  147. package/src/components/chat/entity-cards/chat-ticket-item.tsx +1 -1
  148. package/src/components/chat/entity-cards/customer-interview-card.tsx +9 -9
  149. package/src/components/chat/entity-cards/data-room-doc-card.tsx +2 -2
  150. package/src/components/chat/entity-cards/dispatch.tsx +1 -1
  151. package/src/components/chat/entity-cards/entity-author-card.tsx +3 -3
  152. package/src/components/chat/entity-cards/entity-portrait-card.tsx +4 -4
  153. package/src/components/chat/entity-cards/generic-entity-card.tsx +3 -3
  154. package/src/components/chat/entity-cards/github-activity-card.tsx +11 -11
  155. package/src/components/chat/entity-cards/hubspot-ticket-card.tsx +5 -5
  156. package/src/components/chat/entity-cards/investor-update-card.tsx +1 -1
  157. package/src/components/chat/entity-cards/onboarding-guide-card.tsx +12 -12
  158. package/src/components/chat/entity-cards/program-card.tsx +12 -12
  159. package/src/components/chat/entity-cards/roadmap-card.tsx +6 -6
  160. package/src/components/chat/entity-cards/roadmap-vote-button.tsx +1 -1
  161. package/src/components/chat/entity-cards/slack-message-card.tsx +4 -4
  162. package/src/components/chat/error-message-display.tsx +2 -2
  163. package/src/components/chat/mingo-info-card.tsx +2 -2
  164. package/src/components/chat/model-display.tsx +7 -7
  165. package/src/components/chat/quick-action-chip.tsx +1 -1
  166. package/src/components/chat/source-action-button.tsx +2 -2
  167. package/src/components/chat/tool-call-blocks.tsx +3 -5
  168. package/src/components/chat/utils/.chip-action-class.md +1 -1
  169. package/src/components/chat/utils/.chip-styles.md +2 -2
  170. package/src/components/chat/utils/chip-action-class.ts +1 -1
  171. package/src/components/chat/utils/chip-styles.ts +2 -2
  172. package/src/components/chat/utils/compact-card-classes.ts +3 -3
  173. package/src/components/command.tsx +3 -3
  174. package/src/components/comment-card.tsx +1 -1
  175. package/src/components/contact/contact-form.tsx +9 -9
  176. package/src/components/context-menu.tsx +5 -5
  177. package/src/components/date-time-picker.tsx +2 -2
  178. package/src/components/docs/doc-viewer.tsx +4 -4
  179. package/src/components/embeds/figma-embed.tsx +2 -2
  180. package/src/components/embeds/file-download-card.tsx +2 -2
  181. package/src/components/embeds/google-sheets-viewer.tsx +1 -1
  182. package/src/components/embeds/linkedin-embed-client.tsx +3 -3
  183. package/src/components/embeds/og-link-preview.tsx +14 -14
  184. package/src/components/embeds/pdf-viewer.tsx +1 -1
  185. package/src/components/embeds/reddit-embed-client.tsx +9 -9
  186. package/src/components/embeds/twitter-embed-client.tsx +9 -9
  187. package/src/components/empty-state.tsx +5 -5
  188. package/src/components/faq/faq-section.tsx +1 -1
  189. package/src/components/features/ai-enrich/AIEnrichSection.tsx +14 -14
  190. package/src/components/features/ai-enrich/AIRequiredBadge.tsx +5 -5
  191. package/src/components/features/ai-enrich/AIStatusIndicator.tsx +8 -8
  192. package/src/components/features/ai-enrich/AIWarningsSection.tsx +4 -4
  193. package/src/components/features/ai-enrich/ConfidenceBadge.tsx +4 -4
  194. package/src/components/features/array-entry-manager.tsx +7 -7
  195. package/src/components/features/auth-providers-list.tsx +1 -1
  196. package/src/components/features/board/ticket-card.tsx +1 -1
  197. package/src/components/features/changelog-manager.tsx +10 -10
  198. package/src/components/features/command-box.tsx +2 -2
  199. package/src/components/features/entity-summary-editor.tsx +3 -3
  200. package/src/components/features/figma-prototype-viewer.tsx +9 -9
  201. package/src/components/features/filters-dropdown.tsx +2 -2
  202. package/src/components/features/highlight-config-section.tsx +3 -3
  203. package/src/components/features/highlight-video-combined-section.tsx +2 -2
  204. package/src/components/features/highlight-video-preview.tsx +2 -2
  205. package/src/components/features/highlight-video-section.tsx +9 -9
  206. package/src/components/features/media-gallery-manager.tsx +14 -14
  207. package/src/components/features/og-editor-preview.tsx +4 -4
  208. package/src/components/features/os-type-badge-group.tsx +1 -1
  209. package/src/components/features/os-type-badge.tsx +2 -2
  210. package/src/components/features/platform-badge.tsx +4 -4
  211. package/src/components/features/policy-configuration-panel.tsx +6 -6
  212. package/src/components/features/provider-button.tsx +1 -1
  213. package/src/components/features/push-button-selector.tsx +21 -21
  214. package/src/components/features/release-media-manager.tsx +16 -16
  215. package/src/components/features/section-selector.tsx +8 -8
  216. package/src/components/features/select-button.tsx +4 -4
  217. package/src/components/features/seo-editor-preview.tsx +20 -20
  218. package/src/components/features/social-links-manager.tsx +3 -3
  219. package/src/components/features/start-with-openframe-button.tsx +3 -3
  220. package/src/components/features/status-filter-component.tsx +1 -1
  221. package/src/components/features/tags-selector.tsx +6 -6
  222. package/src/components/features/transcript-summary-editor.tsx +9 -9
  223. package/src/components/features/video-bites-strip.tsx +1 -1
  224. package/src/components/features/video-ratio-tabs.tsx +1 -1
  225. package/src/components/features/video-source-selector.tsx +7 -7
  226. package/src/components/features/video.tsx +1 -1
  227. package/src/components/features/waitlist-form.tsx +3 -3
  228. package/src/components/filter-chip.tsx +13 -13
  229. package/src/components/footer.tsx +3 -3
  230. package/src/components/form.tsx +2 -2
  231. package/src/components/hero-image-uploader.tsx +3 -3
  232. package/src/components/image-cropper.tsx +2 -2
  233. package/src/components/layout/page-container.tsx +6 -6
  234. package/src/components/layout/page-heading.tsx +1 -1
  235. package/src/components/loading/card-skeleton.tsx +2 -2
  236. package/src/components/loading/category-card-skeleton.tsx +1 -1
  237. package/src/components/loading/margin-report-skeleton.tsx +22 -22
  238. package/src/components/loading/openmsp-heartbeat.tsx +1 -1
  239. package/src/components/loading/page-layout-skeleton.tsx +83 -83
  240. package/src/components/loading/unified-skeleton.tsx +1 -1
  241. package/src/components/loading/users-grid-skeleton.tsx +2 -2
  242. package/src/components/logs-list.tsx +8 -8
  243. package/src/components/media-carousel.tsx +7 -7
  244. package/src/components/metric-value.tsx +2 -2
  245. package/src/components/msp-display.tsx +8 -2
  246. package/src/components/navigation/app-header.tsx +6 -6
  247. package/src/components/navigation/header-organization-filter.tsx +2 -2
  248. package/src/components/navigation/header.tsx +4 -4
  249. package/src/components/navigation/mobile-burger-menu.tsx +7 -7
  250. package/src/components/navigation/mobile-nav-panel.tsx +1 -1
  251. package/src/components/navigation/multi-level-navigation.tsx +7 -7
  252. package/src/components/navigation/navigation-sidebar.tsx +1 -1
  253. package/src/components/navigation/sticky-section-nav.tsx +2 -2
  254. package/src/components/onboarding-guides/onboarding-guides-catalog-view.tsx +4 -4
  255. package/src/components/pagination.tsx +2 -2
  256. package/src/components/persistent-filter-controls.tsx +1 -1
  257. package/src/components/platform/.ShellTypeBadge.md +1 -1
  258. package/src/components/platform/CveLink.tsx +1 -1
  259. package/src/components/platform/ScriptArguments.tsx +2 -2
  260. package/src/components/platform/ScriptInfoSection.tsx +5 -5
  261. package/src/components/platform/ShellTypeBadge.tsx +6 -6
  262. package/src/components/platform/SoftwareInfo.tsx +2 -2
  263. package/src/components/pricing-display.tsx +9 -9
  264. package/src/components/profile/ProfileLoadingSkeleton.tsx +6 -6
  265. package/src/components/related-content/related-content-section.tsx +3 -3
  266. package/src/components/results-count.tsx +1 -1
  267. package/src/components/shared/delivery/delivery-row.tsx +1 -1
  268. package/src/components/shared/delivery/delivery-table.tsx +1 -1
  269. package/src/components/shared/dev-section/dev-section-view.tsx +1 -1
  270. package/src/components/shared/doc-search/doc-search-result-row.tsx +2 -2
  271. package/src/components/shared/legal-document/legal-document-page.tsx +5 -5
  272. package/src/components/shared/onboarding/onboarding-step-card.tsx +1 -1
  273. package/src/components/shared/product-release/product-release-card-skeleton.tsx +3 -3
  274. package/src/components/shared/product-release/product-release-card.tsx +14 -14
  275. package/src/components/shared/product-release/release-detail-page.tsx +16 -16
  276. package/src/components/shared/roadmap/roadmap-grid.tsx +2 -2
  277. package/src/components/smooth-accordion.tsx +1 -1
  278. package/src/components/social-icon-row.tsx +1 -1
  279. package/src/components/sonner.tsx +5 -5
  280. package/src/components/steps.tsx +3 -3
  281. package/src/components/tickets/help-center-create-form.tsx +1 -1
  282. package/src/components/tickets/help-center-list.tsx +1 -1
  283. package/src/components/tickets/ticket-center.tsx +2 -2
  284. package/src/components/tickets/ticket-detail-drawer.tsx +5 -5
  285. package/src/components/tickets/ticket-open-form.tsx +6 -6
  286. package/src/components/ui/.title-content-block.md +1 -1
  287. package/src/components/ui/accordion.tsx +2 -2
  288. package/src/components/ui/actions-menu.tsx +1 -1
  289. package/src/components/ui/alert-dialog.tsx +3 -3
  290. package/src/components/ui/alert.tsx +2 -2
  291. package/src/components/ui/allowed-domains-input.tsx +3 -3
  292. package/src/components/ui/autocomplete.tsx +3 -3
  293. package/src/components/ui/badge.tsx +2 -2
  294. package/src/components/ui/brand-association-card.tsx +2 -2
  295. package/src/components/ui/breadcrumb.tsx +3 -3
  296. package/src/components/ui/bullet-list.tsx +2 -2
  297. package/src/components/ui/button/button.tsx +1 -1
  298. package/src/components/ui/card.tsx +4 -4
  299. package/src/components/ui/checkbox-with-description.tsx +1 -1
  300. package/src/components/ui/chevron-button.tsx +1 -1
  301. package/src/components/ui/content-loader.tsx +16 -16
  302. package/src/components/ui/cursor-pagination.tsx +1 -1
  303. package/src/components/ui/date-picker.tsx +2 -2
  304. package/src/components/ui/device-card-compact.tsx +2 -2
  305. package/src/components/ui/device-card.tsx +3 -3
  306. package/src/components/ui/dialog.tsx +3 -3
  307. package/src/components/ui/drawer.tsx +4 -4
  308. package/src/components/ui/dropdown-menu.tsx +6 -6
  309. package/src/components/ui/error-state.tsx +9 -9
  310. package/src/components/ui/fade-preview.tsx +1 -1
  311. package/src/components/ui/field-wrapper.tsx +1 -1
  312. package/src/components/ui/file-manager/file-manager-breadcrumb.tsx +2 -2
  313. package/src/components/ui/file-manager/file-manager-empty.tsx +3 -3
  314. package/src/components/ui/file-manager/file-manager-skeleton.tsx +4 -4
  315. package/src/components/ui/file-manager/file-manager-table-row.tsx +7 -7
  316. package/src/components/ui/file-manager/file-manager-table.tsx +8 -8
  317. package/src/components/ui/file-upload.tsx +9 -9
  318. package/src/components/ui/filter-pill-row.tsx +1 -1
  319. package/src/components/ui/floating-tooltip.tsx +1 -1
  320. package/src/components/ui/highlight-card.tsx +1 -1
  321. package/src/components/ui/hover-dropdown.tsx +1 -1
  322. package/src/components/ui/image-gallery-modal.tsx +1 -1
  323. package/src/components/ui/info-row.tsx +1 -1
  324. package/src/components/ui/input.tsx +1 -1
  325. package/src/components/ui/label.tsx +5 -5
  326. package/src/components/ui/markdown-editor.tsx +4 -5
  327. package/src/components/ui/menubar.tsx +7 -7
  328. package/src/components/ui/modal-v2.tsx +1 -1
  329. package/src/components/ui/modal.tsx +1 -1
  330. package/src/components/ui/more-actions-menu.tsx +1 -1
  331. package/src/components/ui/navigation-menu.tsx +1 -1
  332. package/src/components/ui/organization-card.tsx +8 -8
  333. package/src/components/ui/page-loader.tsx +6 -6
  334. package/src/components/ui/phone-input.tsx +1 -1
  335. package/src/components/ui/progress-bar.tsx +5 -5
  336. package/src/components/ui/query-report-table/.query-report-table-header.md +1 -1
  337. package/src/components/ui/query-report-table/query-report-table-header.tsx +1 -1
  338. package/src/components/ui/query-report-table/query-report-table-row.tsx +2 -2
  339. package/src/components/ui/query-report-table/query-report-table.tsx +1 -1
  340. package/src/components/ui/release-changelog-section.tsx +2 -2
  341. package/src/components/ui/rich-markdown-renderer.tsx +6 -6
  342. package/src/components/ui/search-input.tsx +7 -7
  343. package/src/components/ui/select.tsx +1 -1
  344. package/src/components/ui/service-card.tsx +4 -4
  345. package/src/components/ui/sheet.tsx +3 -3
  346. package/src/components/ui/simple-markdown-renderer.tsx +4 -4
  347. package/src/components/ui/square-avatar.tsx +9 -5
  348. package/src/components/ui/status-badge.tsx +11 -11
  349. package/src/components/ui/status-indicator.tsx +6 -6
  350. package/src/components/ui/tab-content.tsx +1 -1
  351. package/src/components/ui/tab-navigation.tsx +2 -2
  352. package/src/components/ui/table/table-column-filter-dropdown.tsx +1 -1
  353. package/src/components/ui/table/table-description-cell.tsx +1 -1
  354. package/src/components/ui/table/table-timestamp-cell.tsx +1 -1
  355. package/src/components/ui/table/table.tsx +2 -2
  356. package/src/components/ui/tabs.tsx +1 -1
  357. package/src/components/ui/tag-search-input.tsx +1 -1
  358. package/src/components/ui/tag.tsx +23 -23
  359. package/src/components/ui/tags-input.tsx +2 -2
  360. package/src/components/ui/ticket-status-tag.tsx +1 -1
  361. package/src/components/ui/toaster.tsx +8 -8
  362. package/src/components/ui/toggle.tsx +1 -1
  363. package/src/components/ui/tooltip.tsx +1 -1
  364. package/src/components/user-display.tsx +12 -6
  365. package/src/components/user-summary-stub.tsx +4 -4
  366. package/src/components/vendor-display-button.tsx +2 -2
  367. package/src/components/vendor-icon.tsx +1 -1
  368. package/src/components/vendor-tag.tsx +9 -10
  369. package/src/components/yes-no-display.tsx +3 -3
  370. package/src/styles/ods-colors.css +2 -0
  371. package/tailwind.config.ts +49 -4
  372. package/dist/chunk-2ELBNZJ3.js.map +0 -1
  373. package/dist/chunk-3WJQL4DN.cjs.map +0 -1
  374. package/dist/chunk-4ACSUJ7Q.js.map +0 -1
  375. package/dist/chunk-7WM77CSW.js.map +0 -1
  376. package/dist/chunk-COMBYYQY.js.map +0 -1
  377. package/dist/chunk-EGRZHR7J.js.map +0 -1
  378. package/dist/chunk-F7YVI54P.js.map +0 -1
  379. package/dist/chunk-G5FALXNO.js.map +0 -1
  380. package/dist/chunk-HTVVXVJL.cjs.map +0 -1
  381. package/dist/chunk-IAN7GUIV.cjs.map +0 -1
  382. package/dist/chunk-IMK6RUEC.cjs.map +0 -1
  383. package/dist/chunk-M6QGB6DC.cjs.map +0 -1
  384. package/dist/chunk-N2TJ3HAM.cjs.map +0 -1
  385. package/dist/chunk-NQQ4NLUT.js.map +0 -1
  386. package/dist/chunk-P7PISHM5.js.map +0 -1
  387. package/dist/chunk-PBTY7AH5.js.map +0 -1
  388. package/dist/chunk-R46QEE3R.cjs.map +0 -1
  389. package/dist/chunk-RQQZF6G6.cjs.map +0 -1
  390. package/dist/chunk-RVWC4P3H.js.map +0 -1
  391. package/dist/chunk-VWGF6IFR.cjs.map +0 -1
  392. package/dist/chunk-WAGTZVQN.js.map +0 -1
  393. package/dist/chunk-WZ6TCAYQ.cjs.map +0 -1
  394. package/dist/components/accordion.d.ts +0 -8
  395. package/dist/components/accordion.d.ts.map +0 -1
  396. package/dist/components/alert-dialog.d.ts +0 -21
  397. package/dist/components/alert-dialog.d.ts.map +0 -1
  398. package/dist/components/alert.d.ts +0 -9
  399. package/dist/components/alert.d.ts.map +0 -1
  400. package/dist/components/badge.d.ts +0 -10
  401. package/dist/components/badge.d.ts.map +0 -1
  402. package/dist/components/breadcrumb.d.ts +0 -20
  403. package/dist/components/breadcrumb.d.ts.map +0 -1
  404. package/dist/components/chevron-button.d.ts +0 -14
  405. package/dist/components/chevron-button.d.ts.map +0 -1
  406. package/dist/components/dialog.d.ts +0 -29
  407. package/dist/components/dialog.d.ts.map +0 -1
  408. package/dist/components/dropdown-menu.d.ts +0 -28
  409. package/dist/components/dropdown-menu.d.ts.map +0 -1
  410. package/dist/components/input.d.ts +0 -8
  411. package/dist/components/input.d.ts.map +0 -1
  412. package/dist/components/label.d.ts +0 -6
  413. package/dist/components/label.d.ts.map +0 -1
  414. package/dist/components/menubar.d.ts +0 -34
  415. package/dist/components/menubar.d.ts.map +0 -1
  416. package/dist/components/navigation-menu.d.ts +0 -13
  417. package/dist/components/navigation-menu.d.ts.map +0 -1
  418. package/dist/components/select.d.ts +0 -14
  419. package/dist/components/select.d.ts.map +0 -1
  420. package/dist/components/sidebar.d.ts +0 -67
  421. package/dist/components/sidebar.d.ts.map +0 -1
  422. package/dist/components/square-avatar.d.ts +0 -21
  423. package/dist/components/square-avatar.d.ts.map +0 -1
  424. package/dist/components/table.d.ts +0 -11
  425. package/dist/components/table.d.ts.map +0 -1
  426. package/dist/components/tabs.d.ts +0 -18
  427. package/dist/components/tabs.d.ts.map +0 -1
  428. package/dist/components/toggle.d.ts +0 -13
  429. package/dist/components/toggle.d.ts.map +0 -1
  430. package/src/components/.accordion.md +0 -42
  431. package/src/components/.alert-dialog.md +0 -58
  432. package/src/components/.alert.md +0 -43
  433. package/src/components/.badge.md +0 -40
  434. package/src/components/.breadcrumb.md +0 -54
  435. package/src/components/.chevron-button.md +0 -46
  436. package/src/components/.dialog.md +0 -60
  437. package/src/components/.dropdown-menu.md +0 -51
  438. package/src/components/.input.md +0 -40
  439. package/src/components/.label.md +0 -41
  440. package/src/components/.menubar.md +0 -49
  441. package/src/components/.navigation-menu.md +0 -44
  442. package/src/components/.select.md +0 -54
  443. package/src/components/.sidebar.md +0 -58
  444. package/src/components/.square-avatar.md +0 -42
  445. package/src/components/.table.md +0 -51
  446. package/src/components/.tabs.md +0 -38
  447. package/src/components/.toggle.md +0 -49
  448. package/src/components/accordion.tsx +0 -56
  449. package/src/components/alert-dialog.tsx +0 -141
  450. package/src/components/alert.tsx +0 -59
  451. package/src/components/badge.tsx +0 -30
  452. package/src/components/breadcrumb.tsx +0 -115
  453. package/src/components/chevron-button.tsx +0 -68
  454. package/src/components/dialog.tsx +0 -150
  455. package/src/components/dropdown-menu.tsx +0 -200
  456. package/src/components/input.tsx +0 -39
  457. package/src/components/label.tsx +0 -19
  458. package/src/components/menubar.tsx +0 -236
  459. package/src/components/navigation-menu.tsx +0 -128
  460. package/src/components/select.tsx +0 -160
  461. package/src/components/sidebar.tsx +0 -764
  462. package/src/components/square-avatar.tsx +0 -61
  463. package/src/components/table.tsx +0 -72
  464. package/src/components/tabs.tsx +0 -65
  465. package/src/components/toggle.tsx +0 -45
  466. /package/dist/{chunk-QXYOGJQJ.js.map → chunk-7KDR5P23.js.map} +0 -0
  467. /package/dist/{chunk-PEIR7D25.js.map → chunk-7KNOHGMI.js.map} +0 -0
@@ -11,7 +11,7 @@ import {
11
11
  DropdownMenuContent,
12
12
  DropdownMenuItem,
13
13
  DropdownMenuTrigger,
14
- } from '../dropdown-menu'
14
+ } from '../ui/dropdown-menu'
15
15
  import {
16
16
  ApprovalLevel,
17
17
  PermissionCategory,
@@ -49,10 +49,10 @@ const PolicyRow: React.FC<{
49
49
 
50
50
  {/* Policy Info */}
51
51
  <div className="flex-1 flex flex-col min-w-0">
52
- <p className="text-[16px] font-medium text-ods-text-primary truncate" title={policy.name}>
52
+ <p className="text-h6 text-ods-text-primary truncate" title={policy.name}>
53
53
  {policy.name}
54
54
  </p>
55
- <p className="text-[12px] text-ods-text-secondary break-all font-mono">
55
+ <p className="text-code text-ods-text-secondary break-all">
56
56
  {policy.commandPattern}
57
57
  </p>
58
58
  </div>
@@ -74,7 +74,7 @@ const PolicyRow: React.FC<{
74
74
  <DropdownMenuItem
75
75
  key={option.value}
76
76
  onClick={() => onPermissionChange(categoryId, policy.id, option.value)}
77
- className="text-[16px]"
77
+ className="text-h6"
78
78
  >
79
79
  {option.label}
80
80
  </DropdownMenuItem>
@@ -83,7 +83,7 @@ const PolicyRow: React.FC<{
83
83
  </DropdownMenu>
84
84
  ) : policy.approvalLevel ? (
85
85
  <div className="px-3 py-2 w-[180px]">
86
- <span className="text-[16px] font-medium text-ods-text-primary">
86
+ <span className="text-h6 text-ods-text-primary">
87
87
  {getApprovalLevelLabel(policy.approvalLevel, editMode)}
88
88
  </span>
89
89
  </div>
@@ -142,7 +142,7 @@ const CategorySection: React.FC<{
142
142
  <p className="md:!text-sm font-medium text-ods-text-primary">
143
143
  {category.name}
144
144
  </p>
145
- <p className="text-[14px] text-ods-text-secondary">
145
+ <p className="text-h6 text-ods-text-secondary">
146
146
  {category.configurationsCount} Configurations
147
147
  </p>
148
148
  </div>
@@ -72,7 +72,7 @@ export function ProviderButton({ provider, onClick, disabled = false, loading =
72
72
  leftIcon={isLoading ? null : <IconComponent className="w-5 h-5" />}
73
73
  className={`
74
74
  w-full md:!w-full h-[56px]
75
- !text-[16px] !font-bold !leading-tight
75
+ !text-h6 !font-bold
76
76
  hover:bg-ods-bg-hover
77
77
  ${isLoading ? 'cursor-wait' : 'cursor-pointer'}
78
78
  `}
@@ -48,20 +48,20 @@ function PushButtonSelectorSkeleton({ count = 3, hasTitle }: { count?: number; h
48
48
  return (
49
49
  <div className="space-y-3">
50
50
  {hasTitle && (
51
- <div className="h-5 w-20 bg-ods-bg-secondary rounded animate-pulse" />
51
+ <div className="h-5 w-20 bg-ods-skeleton rounded animate-pulse" />
52
52
  )}
53
53
  <div className="space-y-3">
54
54
  {[...Array(count)].map((_, i) => (
55
- <div key={i} className="p-4 rounded-lg border border-ods-border bg-ods-bg-secondary animate-pulse">
55
+ <div key={i} className="p-4 rounded-lg border border-ods-border bg-ods-skeleton animate-pulse">
56
56
  <div className="flex items-center justify-between">
57
57
  <div className="flex items-center gap-3">
58
- <div className="w-8 h-8 bg-ods-bg-primary rounded" />
58
+ <div className="w-8 h-8 bg-ods-skeleton rounded" />
59
59
  <div>
60
- <div className="h-4 w-20 bg-ods-bg-primary rounded mb-1" />
61
- <div className="h-3 w-32 bg-ods-bg-primary rounded" />
60
+ <div className="h-4 w-20 bg-ods-skeleton rounded mb-1" />
61
+ <div className="h-3 w-32 bg-ods-skeleton rounded" />
62
62
  </div>
63
63
  </div>
64
- <div className="w-6 h-6 bg-ods-bg-primary rounded border-2 border-ods-border" />
64
+ <div className="w-6 h-6 bg-ods-skeleton rounded border-2 border-ods-border" />
65
65
  </div>
66
66
  </div>
67
67
  ))}
@@ -79,8 +79,8 @@ function PushButtonSelectorError({ message, title }: { message: string; title?:
79
79
  {title}
80
80
  </h3>
81
81
  )}
82
- <div className="p-4 bg-ods-attention-red-error-secondary border border-ods-attention-red-error rounded-lg">
83
- <div className="font-['DM_Sans'] text-[14px] text-ods-attention-red-error">
82
+ <div className="p-4 bg-ods-error-secondary border border-ods-error rounded-lg">
83
+ <div className="text-h6 text-ods-error">
84
84
  ⚠️ {message}
85
85
  </div>
86
86
  </div>
@@ -161,8 +161,8 @@ export function PushButtonSelector({
161
161
  ${option.disabled
162
162
  ? `${isSelected ? 'cursor-pointer' : 'cursor-not-allowed'} opacity-40 bg-ods-card border-ods-border`
163
163
  : isSelected
164
- ? 'cursor-pointer bg-ods-bg-secondary border-ods-accent shadow-sm'
165
- : 'cursor-pointer bg-ods-bg-primary border-ods-border hover:border-ods-border-hover hover:bg-ods-bg-hover'
164
+ ? 'cursor-pointer bg-ods-bg-surface border-ods-accent shadow-sm'
165
+ : 'cursor-pointer bg-ods-bg border-ods-border hover:border-ods-border-hover hover:bg-ods-bg-hover'
166
166
  }
167
167
  `}
168
168
  // Disabled options can't be newly SELECTED, but an already-selected one
@@ -177,11 +177,11 @@ export function PushButtonSelector({
177
177
  </div>
178
178
  )}
179
179
  <div className="flex-1 min-w-0">
180
- <div className="font-['DM_Sans'] text-[16px] font-semibold text-ods-text-primary">
180
+ <div className="text-h6 font-semibold text-ods-text-primary">
181
181
  {option.displayName || option.name}
182
182
  </div>
183
183
  {option.description && (
184
- <div className="font-['DM_Sans'] text-[12px] text-ods-text-secondary line-clamp-2" title={option.description}>
184
+ <div className="text-h6 text-ods-text-secondary line-clamp-2" title={option.description}>
185
185
  {option.description}
186
186
  </div>
187
187
  )}
@@ -258,11 +258,11 @@ export function PushButtonSelector({
258
258
  </div>
259
259
  )}
260
260
  <div>
261
- <div className="font-['DM_Sans'] text-[14px] font-semibold text-ods-text-primary">
261
+ <div className="text-h6 font-semibold text-ods-text-primary">
262
262
  {section.label}
263
263
  </div>
264
264
  {section.description && (
265
- <div className="font-['DM_Sans'] text-[11px] text-ods-text-tertiary">
265
+ <div className="text-h6 text-ods-text-tertiary">
266
266
  {section.description}
267
267
  </div>
268
268
  )}
@@ -299,10 +299,10 @@ export function PushButtonSelector({
299
299
 
300
300
  {/* Selection Summary */}
301
301
  {selectionSummary && validSelectedIds.length > 0 && (
302
- <div className="p-4 bg-ods-attention-green-success-secondary border border-ods-attention-green-success rounded-lg">
302
+ <div className="p-4 bg-ods-success-secondary border border-ods-success rounded-lg">
303
303
  <div className="flex items-center gap-2 mb-2">
304
- <div className="w-2 h-2 bg-ods-attention-green-success rounded-full"></div>
305
- <span className="font-['DM_Sans'] text-[14px] text-ods-attention-green-success font-medium">
304
+ <div className="w-2 h-2 bg-ods-success rounded-full"></div>
305
+ <span className="text-h6 text-ods-success">
306
306
  {validSelectedIds.length} {multiSelect ? 'items' : 'item'} selected
307
307
  </span>
308
308
  </div>
@@ -311,7 +311,7 @@ export function PushButtonSelector({
311
311
  {getSelectedOptions().map(option => (
312
312
  <Badge
313
313
  key={option.id}
314
- className="bg-ods-accent text-ods-text-primary font-['DM_Sans'] text-[12px] font-medium"
314
+ className="bg-ods-accent text-ods-text-primary text-h6"
315
315
  >
316
316
  {option.displayName || option.name}
317
317
  </Badge>
@@ -322,15 +322,15 @@ export function PushButtonSelector({
322
322
 
323
323
  {/* Help Text */}
324
324
  {helpText && (
325
- <div className="text-[12px] text-ods-text-secondary font-['DM_Sans']">
325
+ <div className="text-h6 text-ods-text-secondary">
326
326
  {helpText}
327
327
  </div>
328
328
  )}
329
329
 
330
330
  {/* Empty State Warning */}
331
331
  {validSelectedIds.length === 0 && title && !optional && (
332
- <div className="p-3 bg-ods-attention-red-error-secondary border border-ods-attention-red-error rounded-lg">
333
- <div className="font-['DM_Sans'] text-[12px] text-ods-attention-red-error">
332
+ <div className="p-3 bg-ods-error-secondary border border-ods-error rounded-lg">
333
+ <div className="text-h6 text-ods-error">
334
334
  ⚠️ Please select at least one option
335
335
  </div>
336
336
  </div>
@@ -132,13 +132,13 @@ export function ReleaseMediaManager({
132
132
  )}
133
133
  </div>
134
134
  <div>
135
- <h3 className="font-['DM_Sans'] font-semibold text-ods-text-primary mb-1">
135
+ <h3 className="text-h3 text-ods-text-primary mb-1">
136
136
  {uploadingIndex !== null ? 'Uploading...' : 'Upload Media'}
137
137
  </h3>
138
- <p className="text-sm text-ods-text-secondary">
138
+ <p className="text-h6 text-ods-text-secondary">
139
139
  Drag and drop or click to select images and videos
140
140
  </p>
141
- <p className="text-xs text-ods-text-secondary mt-1">
141
+ <p className="text-h6 text-ods-text-secondary mt-1">
142
142
  Maximum file size: 50MB
143
143
  </p>
144
144
  </div>
@@ -148,7 +148,7 @@ export function ReleaseMediaManager({
148
148
  onClick={() => fileInputRef.current?.click()}
149
149
  disabled={uploadingIndex !== null}
150
150
  leftIcon={<Plus className="h-4 w-4" />}
151
- className="font-['DM_Sans'] text-[16px] font-bold"
151
+ className="text-h6 font-bold"
152
152
  >
153
153
  {uploadingIndex !== null ? 'Uploading...' : 'Select Files'}
154
154
  </Button>
@@ -168,8 +168,8 @@ export function ReleaseMediaManager({
168
168
  {media.length > 0 && (
169
169
  <div>
170
170
  <div className="flex items-center justify-between mb-4">
171
- <Label className="text-[14px] text-ods-text-primary">Media Gallery ({media.length})</Label>
172
- <p className="text-xs text-ods-text-secondary">Drag to reorder</p>
171
+ <Label className="text-h6 text-ods-text-primary">Media Gallery ({media.length})</Label>
172
+ <p className="text-h6 text-ods-text-secondary">Drag to reorder</p>
173
173
  </div>
174
174
 
175
175
  <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
@@ -180,11 +180,11 @@ export function ReleaseMediaManager({
180
180
  onDragStart={handleDragStart(index)}
181
181
  onDragOver={handleDragOver}
182
182
  onDrop={handleDrop(index)}
183
- className="relative group border border-ods-border rounded-lg overflow-hidden hover:border-ods-accent/30 transition-colors bg-ods-bg-secondary"
183
+ className="relative group border border-ods-border rounded-lg overflow-hidden hover:border-ods-accent/30 transition-colors bg-ods-bg-surface"
184
184
  >
185
185
  {/* Drag Handle */}
186
186
  <div className="absolute top-2 left-2 opacity-0 group-hover:opacity-100 transition-opacity cursor-move z-10">
187
- <GripVertical className="h-4 w-4 text-white drop-shadow" />
187
+ <GripVertical className="h-4 w-4 text-ods-text-on-dark drop-shadow" />
188
188
  </div>
189
189
 
190
190
  {/* Delete Button */}
@@ -195,9 +195,9 @@ export function ReleaseMediaManager({
195
195
  size="small-legacy"
196
196
  onClick={() => removeMedia(index)}
197
197
  disabled={item._uploading}
198
- className="h-8 w-8 p-0 bg-red-500 hover:bg-red-600 border-red-500"
198
+ className="h-8 w-8 p-0 bg-ods-error hover:bg-ods-error-hover border-ods-error"
199
199
  >
200
- <Trash2 className="h-4 w-4 text-white" />
200
+ <Trash2 className="h-4 w-4 text-ods-text-on-dark" />
201
201
  </Button>
202
202
  </div>
203
203
 
@@ -227,7 +227,7 @@ export function ReleaseMediaManager({
227
227
  <div className="aspect-video bg-ods-bg flex items-center justify-center">
228
228
  <div className="flex flex-col items-center gap-2">
229
229
  <Loader2 className="h-8 w-8 animate-spin text-ods-accent" />
230
- <span className="text-sm text-ods-text-secondary">Uploading...</span>
230
+ <span className="text-h6 text-ods-text-secondary">Uploading...</span>
231
231
  </div>
232
232
  </div>
233
233
  )}
@@ -241,7 +241,7 @@ export function ReleaseMediaManager({
241
241
  onValueChange={(value: any) => updateMedia(index, 'media_type', value)}
242
242
  disabled={item._uploading}
243
243
  >
244
- <SelectTrigger className="bg-ods-bg h-8 text-xs">
244
+ <SelectTrigger className="bg-ods-bg h-8 text-h6">
245
245
  <SelectValue />
246
246
  </SelectTrigger>
247
247
  <SelectContent className="bg-ods-card">
@@ -258,7 +258,7 @@ export function ReleaseMediaManager({
258
258
  value={item.title}
259
259
  onChange={(e) => updateMedia(index, 'title', e.target.value)}
260
260
  onKeyDown={(e) => e.key === 'Enter' && e.preventDefault()}
261
- className="bg-ods-bg h-8 text-xs"
261
+ className="bg-ods-bg h-8 text-h6"
262
262
  disabled={item._uploading}
263
263
  />
264
264
  </div>
@@ -269,12 +269,12 @@ export function ReleaseMediaManager({
269
269
  )}
270
270
 
271
271
  {media.length === 0 && (
272
- <div className="text-center py-8 px-4 bg-ods-bg-secondary border border-ods-border rounded-lg">
272
+ <div className="text-center py-8 px-4 bg-ods-bg-surface border border-ods-border rounded-lg">
273
273
  <ImageIcon className="h-12 w-12 text-ods-text-secondary mx-auto mb-4" />
274
- <h3 className="font-['DM_Sans'] font-semibold text-ods-text-primary mb-2">
274
+ <h3 className="text-h3 text-ods-text-primary mb-2">
275
275
  No media uploaded yet
276
276
  </h3>
277
- <p className="text-sm text-ods-text-secondary">
277
+ <p className="text-h6 text-ods-text-secondary">
278
278
  Upload your first image or video to get started
279
279
  </p>
280
280
  </div>
@@ -63,9 +63,9 @@ const SectionButton: React.FC<{
63
63
  minHeight = layout === 'vertical' ? '96px' : '76px',
64
64
  showDescription = true
65
65
  }) => {
66
- const titleClasses = "font-['DM_Sans'] text-ods-text-primary"
67
- const subtitleClasses = "font-['DM_Sans'] text-ods-text-secondary"
68
- const numberClasses = "font-['DM_Sans'] font-bold text-ods-accent"
66
+ const titleClasses = "text-ods-text-primary"
67
+ const subtitleClasses = "text-ods-text-secondary"
68
+ const numberClasses = "text-ods-accent"
69
69
 
70
70
  const isDisabled = section.disabled || disabled;
71
71
 
@@ -100,13 +100,13 @@ const SectionButton: React.FC<{
100
100
  </div>
101
101
  )}
102
102
  {section.number && (
103
- <span className={cn(numberClasses, 'text-lg tracking-[-0.36px] leading-[24px] shrink-0')}>
103
+ <span className={cn(numberClasses, 'text-h3 shrink-0')}>
104
104
  {section.number}
105
105
  </span>
106
106
  )}
107
107
  <div className="flex-1 text-left min-w-0">
108
108
  <div className="flex items-center gap-2 flex-wrap">
109
- <p className={cn(titleClasses, 'font-medium text-lg leading-[24px] whitespace-normal break-words')}>
109
+ <p className={cn(titleClasses, 'text-h4 whitespace-normal break-words')}>
110
110
  {section.title}
111
111
  </p>
112
112
  {section.badge && (
@@ -118,7 +118,7 @@ const SectionButton: React.FC<{
118
118
  )}
119
119
  </div>
120
120
  {section.description && showDescription && (
121
- <p className={cn(subtitleClasses, 'text-sm mt-1 whitespace-normal break-words')}>
121
+ <p className={cn(subtitleClasses, 'text-h6 mt-1 whitespace-normal break-words')}>
122
122
  {section.description}
123
123
  </p>
124
124
  )}
@@ -134,7 +134,7 @@ const SectionButton: React.FC<{
134
134
  )}
135
135
  <div className="flex flex-col items-start justify-start flex-1 gap-1">
136
136
  <div className="flex items-start gap-2 flex-wrap w-full">
137
- <span className={cn(titleClasses, 'font-bold text-[18px] leading-[24px] tracking-[-0.36px]')} style={{ textAlign: 'left' }}>
137
+ <span className={cn(titleClasses, 'text-h3')} style={{ textAlign: 'left' }}>
138
138
  {section.title}
139
139
  </span>
140
140
  {section.badge && (
@@ -146,7 +146,7 @@ const SectionButton: React.FC<{
146
146
  )}
147
147
  </div>
148
148
  {section.subtitle && (
149
- <div className={cn(subtitleClasses, 'font-medium text-[14px] leading-[20px] w-full')} style={{ textAlign: 'left' }}>
149
+ <div className={cn(subtitleClasses, 'text-h6 w-full')} style={{ textAlign: 'left' }}>
150
150
  {section.subtitle}
151
151
  </div>
152
152
  )}
@@ -33,11 +33,11 @@ export const SelectButton = React.forwardRef<HTMLButtonElement, SelectButtonProp
33
33
  onClick={onClick}
34
34
  className={cn(
35
35
  "group flex items-center md:gap-2 gap-1 h-11 md:h-16 px-3 md:px-4 py-3 rounded-[6px] border transition-colors duration-200",
36
- "font-['DM_Sans'] text-left w-full",
36
+ "font-body text-left w-full",
37
37
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-focus",
38
38
  "disabled:pointer-events-none disabled:opacity-50",
39
39
  selected
40
- ? "bg-[var(--ods-open-yellow-light)] border-ods-accent hover:bg-[var(--ods-open-yellow-light-hover)] active:bg-[var(--ods-open-yellow-light-action)]"
40
+ ? "bg-ods-open-yellow-light border-ods-accent hover:bg-ods-open-yellow-light-hover active:bg-ods-open-yellow-light-action"
41
41
  : "bg-ods-card border-ods-border hover:bg-ods-bg-hover hover:border-ods-accent active:bg-ods-bg-active active:border-ods-accent",
42
42
  className,
43
43
  )}
@@ -59,13 +59,13 @@ export const SelectButton = React.forwardRef<HTMLButtonElement, SelectButtonProp
59
59
  )}
60
60
 
61
61
  <span className="flex flex-1 flex-col justify-center min-w-0 overflow-hidden">
62
- <span className="md:text-[18px] text-[14px] font-medium text-ods-text-primary truncate" title={title}>
62
+ <span className="text-h4 text-ods-text-primary truncate" title={title}>
63
63
  {title}
64
64
  </span>
65
65
  {description && (
66
66
  <span
67
67
  className={cn(
68
- "text-[14px] font-medium leading-5 truncate hidden md:flex",
68
+ "text-h6 truncate hidden md:flex",
69
69
  selected ? "text-ods-accent" : "text-ods-text-secondary",
70
70
  )} title={description}>
71
71
  {description}
@@ -116,7 +116,7 @@ export function SEOEditorPreview({
116
116
  <div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
117
117
  <div className="space-y-2">
118
118
  <div className="flex items-center gap-2">
119
- <Label className="font-['DM_Sans'] text-[14px] font-medium text-ods-text-primary">
119
+ <Label className="text-h6 text-ods-text-primary">
120
120
  SEO Title
121
121
  </Label>
122
122
  {aiConfidenceSeoTitle !== undefined && (
@@ -141,14 +141,14 @@ export function SEOEditorPreview({
141
141
  className="bg-ods-bg border-ods-border text-ods-text-primary"
142
142
  />
143
143
  <div className="flex items-center justify-between gap-2">
144
- <span className="text-[11px] text-ods-error font-['DM_Sans']">
144
+ <span className="text-h6 text-ods-error">
145
145
  {seoTitleTooLong
146
146
  ? `Too long: search engines may truncate this title (keep it under ${SEO_TITLE_MAX_LENGTH})`
147
147
  : ''}
148
148
  </span>
149
149
  <span
150
150
  className={cn(
151
- "text-[11px] font-['DM_Sans'] tabular-nums shrink-0",
151
+ "text-h6 tabular-nums shrink-0",
152
152
  seoTitleTooLong ? 'text-ods-error font-semibold' : 'text-ods-text-secondary'
153
153
  )}
154
154
  >
@@ -156,7 +156,7 @@ export function SEOEditorPreview({
156
156
  </span>
157
157
  </div>
158
158
  {!seoTitle && title && (
159
- <p className="text-[11px] text-ods-accent font-['DM_Sans']">
159
+ <p className="text-h6 text-ods-accent">
160
160
  Auto-populated from title
161
161
  </p>
162
162
  )}
@@ -164,7 +164,7 @@ export function SEOEditorPreview({
164
164
 
165
165
  <div className="space-y-2">
166
166
  <div className="flex items-center gap-2">
167
- <Label className="font-['DM_Sans'] text-[14px] font-medium text-ods-text-primary">
167
+ <Label className="text-h6 text-ods-text-primary">
168
168
  SEO Keywords
169
169
  </Label>
170
170
  {aiConfidenceSeoKeywords !== undefined && (
@@ -193,7 +193,7 @@ export function SEOEditorPreview({
193
193
  <div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
194
194
  <div className="space-y-2 flex flex-col h-full">
195
195
  <div className="flex items-center gap-2">
196
- <Label className="font-['DM_Sans'] text-[14px] font-medium text-ods-text-primary">
196
+ <Label className="text-h6 text-ods-text-primary">
197
197
  SEO Description
198
198
  </Label>
199
199
  {aiConfidenceSeoDescription !== undefined && (
@@ -219,14 +219,14 @@ export function SEOEditorPreview({
219
219
  rows={6}
220
220
  />
221
221
  <div className="flex items-center justify-between gap-2">
222
- <span className="text-[11px] text-ods-error font-['DM_Sans']">
222
+ <span className="text-h6 text-ods-error">
223
223
  {seoDescriptionTooLong
224
224
  ? `Too long: search engines may truncate this description (keep it under ${SEO_DESCRIPTION_MAX_LENGTH})`
225
225
  : ''}
226
226
  </span>
227
227
  <span
228
228
  className={cn(
229
- "text-[11px] font-['DM_Sans'] tabular-nums shrink-0",
229
+ "text-h6 tabular-nums shrink-0",
230
230
  seoDescriptionTooLong ? 'text-ods-error font-semibold' : 'text-ods-text-secondary'
231
231
  )}
232
232
  >
@@ -234,14 +234,14 @@ export function SEOEditorPreview({
234
234
  </span>
235
235
  </div>
236
236
  {!seoDescription && summary && (
237
- <p className="text-[11px] text-ods-accent font-['DM_Sans']">
237
+ <p className="text-h6 text-ods-accent">
238
238
  Auto-populated from summary
239
239
  </p>
240
240
  )}
241
241
  </div>
242
242
 
243
243
  <div className="space-y-2 flex flex-col h-full">
244
- <Label className="font-['DM_Sans'] text-[14px] font-medium text-ods-text-primary">
244
+ <Label className="text-h6 text-ods-text-primary">
245
245
  OG Image
246
246
  </Label>
247
247
 
@@ -291,7 +291,7 @@ export function SEOEditorPreview({
291
291
  ) : (
292
292
  <>
293
293
  <Upload className="h-8 w-8 text-ods-text-secondary mb-2" />
294
- <span className="text-sm text-ods-text-secondary font-['DM_Sans']">
294
+ <span className="text-h6 text-ods-text-secondary">
295
295
  {onOgImageUpload ? 'Click to upload OG image' : 'No image'}
296
296
  </span>
297
297
  </>
@@ -312,7 +312,7 @@ export function SEOEditorPreview({
312
312
  </div>
313
313
 
314
314
  {!ogImageUrl && featuredImage && (
315
- <p className="text-[11px] text-ods-accent font-['DM_Sans']">
315
+ <p className="text-h6 text-ods-accent">
316
316
  Using featured image
317
317
  </p>
318
318
  )}
@@ -323,7 +323,7 @@ export function SEOEditorPreview({
323
323
  <div className="pt-4 border-t border-ods-border">
324
324
  <div className="flex items-center gap-2 mb-3">
325
325
  <Globe className="w-4 h-4 text-ods-text-secondary" />
326
- <span className="font-['DM_Sans'] text-[12px] font-medium text-ods-text-secondary">
326
+ <span className="text-h6 text-ods-text-secondary">
327
327
  Social Media Preview
328
328
  </span>
329
329
  </div>
@@ -344,7 +344,7 @@ export function SEOEditorPreview({
344
344
  <div className="absolute inset-0 flex items-center justify-center">
345
345
  <div className="text-center">
346
346
  <Globe className="w-12 h-12 text-ods-text-secondary mx-auto mb-2" />
347
- <p className="text-ods-text-secondary text-sm font-['DM_Sans']">No preview image</p>
347
+ <p className="text-ods-text-secondary text-h6">No preview image</p>
348
348
  </div>
349
349
  </div>
350
350
  )}
@@ -355,18 +355,18 @@ export function SEOEditorPreview({
355
355
  {/* Domain */}
356
356
  <div className="flex items-center gap-1">
357
357
  <ExternalLink className="w-3 h-3 text-ods-text-secondary" />
358
- <span className="font-['DM_Sans'] text-[11px] text-ods-text-secondary uppercase tracking-wide">
358
+ <span className="text-h6 text-ods-text-secondary uppercase">
359
359
  {domain}
360
360
  </span>
361
361
  </div>
362
362
 
363
363
  {/* Title */}
364
- <h3 className="font-['DM_Sans'] text-[16px] font-semibold text-ods-text-primary leading-[1.3] line-clamp-2">
364
+ <h3 className="text-h6 font-semibold text-ods-text-primary line-clamp-2">
365
365
  {displayTitle}
366
366
  </h3>
367
367
 
368
368
  {/* Description */}
369
- <p className="font-['DM_Sans'] text-[14px] text-ods-text-secondary leading-[1.4] line-clamp-3">
369
+ <p className="text-h6 text-ods-text-secondary line-clamp-3">
370
370
  {displayDescription}
371
371
  </p>
372
372
  </div>
@@ -375,17 +375,17 @@ export function SEOEditorPreview({
375
375
  {/* Fallback Indicators */}
376
376
  <div className="space-y-1 mt-3">
377
377
  {!seoTitle.trim() && title && (
378
- <p className="font-['DM_Sans'] text-[11px] text-ods-accent">
378
+ <p className="text-h6 text-ods-accent">
379
379
  • Using title as SEO title
380
380
  </p>
381
381
  )}
382
382
  {!seoDescription.trim() && summary && (
383
- <p className="font-['DM_Sans'] text-[11px] text-ods-accent">
383
+ <p className="text-h6 text-ods-accent">
384
384
  • Using summary as SEO description
385
385
  </p>
386
386
  )}
387
387
  {!ogImageUrl.trim() && featuredImage.trim() && (
388
- <p className="font-['DM_Sans'] text-[11px] text-ods-accent">
388
+ <p className="text-h6 text-ods-accent">
389
389
  • Using featured image as OG image
390
390
  </p>
391
391
  )}
@@ -103,7 +103,7 @@ export function SocialLinksManager({
103
103
  const Icon = getIcon(link, platform);
104
104
 
105
105
  return (
106
- <div key={index} className="flex items-center gap-3 p-3 bg-ods-bg-secondary rounded-lg border border-ods-border">
106
+ <div key={index} className="flex items-center gap-3 p-3 bg-ods-bg-surface rounded-lg border border-ods-border">
107
107
  <div className="w-8 h-8 flex items-center justify-center">
108
108
  {Icon}
109
109
  </div>
@@ -156,7 +156,7 @@ export function SocialLinksManager({
156
156
  variant="transparent"
157
157
  size="icon"
158
158
  onClick={() => removeLink(index)}
159
- className="text-red-400 hover:text-red-300 hover:bg-red-400/10"
159
+ className="text-ods-error hover:text-ods-error-hover hover:bg-ods-error-secondary"
160
160
  >
161
161
  <Trash2 className="h-4 w-4" />
162
162
  </Button>
@@ -166,7 +166,7 @@ export function SocialLinksManager({
166
166
 
167
167
  {links.length === 0 && (
168
168
  <div className="text-center py-8 text-ods-text-secondary">
169
- <p className="text-sm">No social links added yet.</p>
169
+ <p className="text-h6">No social links added yet.</p>
170
170
  </div>
171
171
  )}
172
172
 
@@ -42,18 +42,18 @@ export const StartWithOpenFrameButton = React.forwardRef<
42
42
 
43
43
  if (isYellow) {
44
44
  buttonVariant = "accent";
45
- modeClassName = 'bg-[var(--ods-open-yellow-base)] hover:bg-[var(--ods-open-yellow-hover)] text-ods-text-on-accent border-[var(--ods-open-yellow-base)]';
45
+ modeClassName = 'bg-ods-accent hover:bg-ods-accent-hover text-ods-text-on-accent border-ods-accent';
46
46
  iconLowerPath = "var(--ods-system-greys-white)";
47
47
  iconUpperPath = "var(--ods-system-greys-black)";
48
48
  } else if (isPink) {
49
49
  buttonVariant = "accent";
50
- modeClassName = 'bg-[var(--ods-flamingo-pink-base)] hover:bg-[var(--ods-flamingo-pink-hover)] text-[var(--ods-system-greys-black)] border-[var(--ods-flamingo-pink-base)]';
50
+ modeClassName = 'bg-ods-flamingo-pink hover:bg-ods-flamingo-pink-hover text-ods-text-on-accent border-ods-flamingo-pink';
51
51
  iconLowerPath = "var(--ods-system-greys-white)";
52
52
  iconUpperPath = "var(--ods-system-greys-black)";
53
53
  } else if (isCyan) {
54
54
  // Cyan mode: similar to JoinWaitlistButton with custom colors
55
55
  buttonVariant = "accent";
56
- modeClassName = 'bg-[var(--ods-flamingo-cyan-base)] hover:bg-[var(--ods-flamingo-cyan-hover)] text-[var(--ods-system-greys-black)] border-[var(--ods-flamingo-cyan-base)]';
56
+ modeClassName = 'bg-ods-flamingo-cyan hover:bg-ods-flamingo-cyan-hover text-ods-text-on-accent border-ods-flamingo-cyan';
57
57
  // Allow override with custom colors if provided
58
58
  if (buttonBackgroundColor || buttonTextColor) {
59
59
  customStyle = {
@@ -78,7 +78,7 @@ export function StatusFilterComponent({
78
78
 
79
79
  {/* Optional count display */}
80
80
  {showCount && (
81
- <div className="ml-auto text-[12px] font-['DM_Sans'] text-ods-text-secondary shrink-0">
81
+ <div className="ml-auto text-h6 text-ods-text-secondary shrink-0">
82
82
  {count} items
83
83
  </div>
84
84
  )}
@@ -117,7 +117,7 @@ export function TagsSelector({
117
117
  {getSelectedTags().map((tag) => (
118
118
  <span
119
119
  key={tag.id}
120
- className="inline-flex items-center gap-1 pl-2.5 pr-1 py-1 rounded-md bg-ods-accent/15 border border-ods-accent/30 text-ods-text-primary text-[13px] leading-none font-medium font-['DM_Sans']"
120
+ className="inline-flex items-center gap-1 pl-2.5 pr-1 py-1 rounded-md bg-ods-accent/15 border border-ods-accent/30 text-ods-text-primary text-h6"
121
121
  >
122
122
  {tag.name}
123
123
  {!disabled && (
@@ -195,7 +195,7 @@ export function TagsSelector({
195
195
  onClick={handleCreateTag}
196
196
  disabled={isCreating}
197
197
  leftIcon={isCreating ? <Loader2 className="w-3 h-3 animate-spin" /> : <Plus className="w-3 h-3" />}
198
- className="w-full flex flex-row items-center gap-1.5 px-2 py-1 mb-2 h-auto rounded border-dashed border-ods-accent bg-ods-bg hover:bg-ods-card text-ods-accent font-['DM_Sans'] !text-xs !font-medium"
198
+ className="w-full flex flex-row items-center gap-1.5 px-2 py-1 mb-2 h-auto rounded border-dashed border-ods-accent bg-ods-bg hover:bg-ods-card text-ods-accent !text-h6"
199
199
  >
200
200
  Create tag: <strong>"{searchQuery.trim()}"</strong>
201
201
  </Button>
@@ -210,7 +210,7 @@ export function TagsSelector({
210
210
  variant="outline"
211
211
  type="button"
212
212
  onClick={() => handleTagAdd(tag.id)}
213
- className="h-auto px-2 py-0.5 rounded border-ods-border hover:border-ods-accent bg-ods-bg hover:bg-ods-card text-ods-text-primary font-['DM_Sans'] !text-xs !font-medium"
213
+ className="h-auto px-2 py-0.5 rounded border-ods-border hover:border-ods-accent bg-ods-bg hover:bg-ods-card text-ods-text-primary !text-h6"
214
214
  >
215
215
  {tag.name}
216
216
  </Button>
@@ -218,7 +218,7 @@ export function TagsSelector({
218
218
  </div>
219
219
  ) : !canCreateNewTag ? (
220
220
  <div className="py-4 px-4 text-center w-full">
221
- <p className="text-ods-text-secondary text-sm font-['DM_Sans']">
221
+ <p className="text-ods-text-secondary text-h6">
222
222
  {searchQuery.trim() ? `No tags found for "${searchQuery}"` : "No tags available"}
223
223
  </p>
224
224
  </div>
@@ -230,11 +230,11 @@ export function TagsSelector({
230
230
 
231
231
  {/* Tag Counter */}
232
232
  <div className="flex items-center justify-between">
233
- <div className="text-[11px] text-ods-text-secondary font-['DM_Sans']">
233
+ <div className="text-h6 text-ods-text-secondary">
234
234
  {selectedTagIds.length} / {maxTags} tags selected
235
235
  </div>
236
236
  {selectedTagIds.length >= maxTags && (
237
- <span className="text-[11px] text-[--ods-attention-red-error] font-['DM_Sans']">
237
+ <span className="text-h6 text-ods-error">
238
238
  (Maximum reached)
239
239
  </span>
240
240
  )}