@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
@@ -329,21 +329,21 @@ export function FileUpload({
329
329
  <FileIcon className="size-6 text-ods-text-secondary" />
330
330
  </div>
331
331
  <div className="flex-1 min-w-0">
332
- <p className="text-heading-4 font-medium text-ods-text-primary truncate" title={entry.fileName}>
332
+ <p className="text-h4 text-ods-text-primary truncate" title={entry.fileName}>
333
333
  {entry.fileName}
334
334
  </p>
335
335
  <div className="flex items-center gap-[var(--spacing-system-xsf)]">
336
- <span className="text-heading-5 text-ods-text-secondary">
336
+ <span className="text-h6 text-ods-text-secondary">
337
337
  {formatFileSize(entry.fileSize)}
338
338
  </span>
339
339
  {entry.status === "uploading" && (
340
- <span className="flex items-center gap-[var(--spacing-system-xxs)] text-heading-5 text-ods-text-secondary">
340
+ <span className="flex items-center gap-[var(--spacing-system-xxs)] text-h6 text-ods-text-secondary">
341
341
  <Loader2 className="size-3 animate-spin" />
342
342
  Uploading...
343
343
  </span>
344
344
  )}
345
345
  {entry.status === "error" && (
346
- <span className="text-heading-5 text-ods-error">
346
+ <span className="text-h6 text-ods-error">
347
347
  {entry.error || "Upload failed"}
348
348
  </span>
349
349
  )}
@@ -380,10 +380,10 @@ export function FileUpload({
380
380
  <FileIcon className="size-6 text-ods-text-secondary" />
381
381
  </div>
382
382
  <div className="flex-1 min-w-0">
383
- <p className="text-heading-4 font-medium text-ods-text-primary truncate" title={file.name}>
383
+ <p className="text-h4 text-ods-text-primary truncate" title={file.name}>
384
384
  {file.name}
385
385
  </p>
386
- <p className="text-heading-5 text-ods-text-secondary">
386
+ <p className="text-h6 text-ods-text-secondary">
387
387
  {formatFileSize(file.size)}
388
388
  </p>
389
389
  </div>
@@ -424,9 +424,9 @@ export function FileUpload({
424
424
  <div className="flex items-center p-[var(--spacing-system-sf)] rounded-full bg-ods-card border border-ods-border shrink-0">
425
425
  {icon || <ImagePlusIcon className="size-6 text-ods-text-primary" />}
426
426
  </div>
427
- <div className="flex flex-1 flex-col font-['DM_Sans'] font-medium min-w-0">
428
- <span className="text-heading-4 text-ods-text-primary">{label}</span>
429
- <span className="text-heading-5 text-ods-text-secondary">{description}</span>
427
+ <div className="flex flex-1 flex-col min-w-0">
428
+ <span className="text-h4 text-ods-text-primary">{label}</span>
429
+ <span className="text-h6 text-ods-text-secondary">{description}</span>
430
430
  </div>
431
431
  </button>
432
432
  )}
@@ -63,7 +63,7 @@ export function FilterPillRow({
63
63
  </Button>
64
64
  ))}
65
65
  {countLabel && (
66
- <div className="ml-auto text-[12px] font-['DM_Sans'] text-ods-text-secondary shrink-0">
66
+ <div className="ml-auto text-h6 text-ods-text-secondary shrink-0">
67
67
  {countLabel}
68
68
  </div>
69
69
  )}
@@ -175,7 +175,7 @@ export function FloatingTooltip({
175
175
  >
176
176
  {/* Scroll wrapper — `min-h-0` lets it shrink below content height inside
177
177
  the max-height cap set by the `size` middleware, so tall content scrolls. */}
178
- <div className="min-h-0 overflow-y-auto px-3 py-2.5 text-sm leading-relaxed text-ods-text-primary whitespace-pre-line">
178
+ <div className="min-h-0 overflow-y-auto px-3 py-2.5 text-h6 text-ods-text-primary whitespace-pre-line">
179
179
  {parsedContent}
180
180
  </div>
181
181
  {/* Arrow element */}
@@ -41,7 +41,7 @@ export function HighlightCard({
41
41
  width: `${desktopWidth}px`
42
42
  }}
43
43
  />
44
- <h3 className="font-['Azeret_Mono'] font-semibold text-[24px] md:text-[28px] lg:text-[32px] leading-[1.25] tracking-[-0.64px] text-ods-text-primary relative z-10">
44
+ <h3 className="text-h2 text-ods-text-primary relative z-10">
45
45
  Your{' '}
46
46
  <span style={{ color: item.categoryColor }}>
47
47
  {item.category}
@@ -190,7 +190,7 @@ export function HoverDropdown({
190
190
  // occupies the left expanding region; the optional secondary
191
191
  // action ("Ask") sits at the right as a sibling icon-button so
192
192
  // its click is independent of the primary navigation.
193
- const rowClass = 'group flex w-full items-center gap-1.5 pl-2 pr-1 py-1.5 rounded text-[11px] text-ods-text-secondary hover:bg-ods-accent/10 transition-colors text-left'
193
+ const rowClass = 'group flex w-full items-center gap-1.5 pl-2 pr-1 py-1.5 rounded text-h6 text-ods-text-secondary hover:bg-ods-accent/10 transition-colors text-left'
194
194
  const primaryClass = 'flex flex-1 items-center gap-1.5 min-w-0 hover:text-ods-accent cursor-pointer no-underline'
195
195
 
196
196
  const secondary = item.secondaryAction ? (
@@ -147,7 +147,7 @@ export function ImageGalleryModal({
147
147
 
148
148
  {/* Image Counter */}
149
149
  {images.length > 1 && (
150
- <div className="absolute bottom-4 left-1/2 -translate-x-1/2 z-[10000] px-4 py-2 rounded-full bg-black/50 text-white text-sm">
150
+ <div className="absolute bottom-4 left-1/2 -translate-x-1/2 z-[10000] px-4 py-2 rounded-full bg-black/50 text-white text-h6">
151
151
  {selectedImageIndex + 1} / {images.length}
152
152
  </div>
153
153
  )}
@@ -12,7 +12,7 @@ export function InfoRow({ label, value, icon }: InfoRowProps) {
12
12
  <div className="text-h4 text-ods-text-primary overflow-hidden text-ellipsis whitespace-nowrap">
13
13
  {label}
14
14
  </div>
15
- <div className="flex-1 bg-[#3a3a3a] h-px min-h-px min-w-px" />
15
+ <div className="flex-1 bg-ods-border h-px min-h-px min-w-px" />
16
16
  <div className="text-h4 text-ods-text-primary overflow-hidden text-ellipsis whitespace-nowrap flex items-center gap-1">
17
17
  {value}
18
18
  {icon}
@@ -26,7 +26,7 @@ export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement>
26
26
 
27
27
  const invalidBorderClasses = {
28
28
  error: "border-ods-error hover:border-ods-error has-[:focus]:border-ods-error",
29
- warning: "!border-[var(--ods-attention-yellow-warning)] hover:!border-[var(--ods-attention-yellow-warning)] has-[:focus]:!border-[var(--ods-attention-yellow-warning)]",
29
+ warning: "!border-ods-warning hover:!border-ods-warning has-[:focus]:!border-ods-warning",
30
30
  } as const;
31
31
 
32
32
  const Input = React.forwardRef<HTMLInputElement, InputProps>(
@@ -7,14 +7,14 @@ import { cva, type VariantProps } from "class-variance-authority"
7
7
  import { cn } from "../../utils/cn"
8
8
 
9
9
  const labelVariants = cva(
10
- "block font-body font-medium text-ods-text-primary leading-6",
10
+ "block text-ods-text-primary",
11
11
  {
12
12
  variants: {
13
13
  variant: {
14
- default: "text-[18px]",
15
- small: "text-[14px]",
16
- medium: "text-[16px]",
17
- large: "text-[20px]"
14
+ default: "text-h4",
15
+ small: "text-h6",
16
+ medium: "text-h6",
17
+ large: "text-h4"
18
18
  },
19
19
  spacing: {
20
20
  default: "mb-1",
@@ -12,8 +12,8 @@ const MARKDOWN_EDITOR_STYLE_ID = "ods-markdown-editor-styles"
12
12
  const mdEditorCSS = `
13
13
  :root { --md-editor-text-color: var(--color-text-primary) !important; }
14
14
  body .w-md-editor { background-color: var(--color-bg) !important; border: 1px solid var(--ods-system-greys-soft-grey) !important; border-radius: 6px !important; --md-editor-text-color: var(--color-text-primary) !important; --md-editor-box-shadow-color: transparent !important; box-shadow: none !important; }
15
- body .w-md-editor-area, body .w-md-editor-input, body .w-md-editor-text, body .w-md-editor-text-pre, body .w-md-editor-text-input, body .w-md-editor-text-textarea { background-color: var(--color-bg-card) !important; color: var(--color-text-primary) !important; font-family: "DM Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif !important; font-size: 18px !important; font-weight: 500 !important; line-height: 24px !important; padding: 16px !important; }
16
- body .w-md-editor-text-textarea::placeholder { color: var(--color-text-secondary) !important; font-family: "DM Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif !important; font-size: 18px !important; font-weight: 500 !important; }
15
+ body .w-md-editor-area, body .w-md-editor-input, body .w-md-editor-text, body .w-md-editor-text-pre, body .w-md-editor-text-input, body .w-md-editor-text-textarea { background-color: var(--color-bg-card) !important; color: var(--color-text-primary) !important; font-family: var(--font-family-body) !important; font-size: 18px !important; font-weight: 500 !important; line-height: 24px !important; padding: 16px !important; }
16
+ body .w-md-editor-text-textarea::placeholder { color: var(--color-text-secondary) !important; font-family: var(--font-family-body) !important; font-size: 18px !important; font-weight: 500 !important; }
17
17
  body .w-md-editor-text .token, body .w-md-editor-text-pre .token, body .w-md-editor-text-textarea, body .w-md-editor-text-input { color: var(--color-text-primary) !important; }
18
18
  body .w-md-editor-text-pre *, body .w-md-editor-text-textarea *, body .w-md-editor-text-input *, body .w-md-editor-text * { color: var(--color-text-primary) !important; }
19
19
  body .w-md-editor-text-pre .token.title, body .w-md-editor-text-pre .token.bold, body .w-md-editor-text-pre .token.code, body .w-md-editor-text-pre .token.string, body .w-md-editor-text-pre .token.keyword { color: var(--color-text-primary) !important; }
@@ -331,8 +331,7 @@ export function MarkdownEditor({
331
331
  placeholder,
332
332
  disabled,
333
333
  style: {
334
- fontFamily:
335
- 'DM Sans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
334
+ fontFamily: 'var(--font-family-body)',
336
335
  fontSize: "18px",
337
336
  fontWeight: 500,
338
337
  lineHeight: "24px",
@@ -345,7 +344,7 @@ export function MarkdownEditor({
345
344
  )}
346
345
 
347
346
  {uploadProgress && (
348
- <p className="text-xs text-ods-text-secondary mt-1">{uploadProgress}</p>
347
+ <p className="text-h6 text-ods-text-secondary mt-1">{uploadProgress}</p>
349
348
  )}
350
349
 
351
350
  <MarkdownEditorStyles />
@@ -38,7 +38,7 @@ const MenubarTrigger = React.forwardRef<
38
38
  <MenubarPrimitive.Trigger
39
39
  ref={ref}
40
40
  className={cn(
41
- "flex cursor-default select-none items-center rounded-sm px-3 py-1.5 text-sm font-medium outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
41
+ "flex cursor-default select-none items-center rounded-sm px-3 py-1.5 text-h6 outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
42
42
  className
43
43
  )}
44
44
  {...props}
@@ -55,7 +55,7 @@ const MenubarSubTrigger = React.forwardRef<
55
55
  <MenubarPrimitive.SubTrigger
56
56
  ref={ref}
57
57
  className={cn(
58
- "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
58
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-h6 outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
59
59
  inset && "pl-8",
60
60
  className
61
61
  )}
@@ -116,7 +116,7 @@ const MenubarItem = React.forwardRef<
116
116
  <MenubarPrimitive.Item
117
117
  ref={ref}
118
118
  className={cn(
119
- "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
119
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-h6 outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
120
120
  inset && "pl-8",
121
121
  className
122
122
  )}
@@ -132,7 +132,7 @@ const MenubarCheckboxItem = React.forwardRef<
132
132
  <MenubarPrimitive.CheckboxItem
133
133
  ref={ref}
134
134
  className={cn(
135
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
135
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-h6 outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
136
136
  className
137
137
  )}
138
138
  checked={checked}
@@ -155,7 +155,7 @@ const MenubarRadioItem = React.forwardRef<
155
155
  <MenubarPrimitive.RadioItem
156
156
  ref={ref}
157
157
  className={cn(
158
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
158
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-h6 outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
159
159
  className
160
160
  )}
161
161
  {...props}
@@ -179,7 +179,7 @@ const MenubarLabel = React.forwardRef<
179
179
  <MenubarPrimitive.Label
180
180
  ref={ref}
181
181
  className={cn(
182
- "px-2 py-1.5 text-sm font-semibold",
182
+ "px-2 py-1.5 text-h6 font-semibold",
183
183
  inset && "pl-8",
184
184
  className
185
185
  )}
@@ -207,7 +207,7 @@ const MenubarShortcut = ({
207
207
  return (
208
208
  <span
209
209
  className={cn(
210
- "ml-auto text-xs tracking-widest text-muted-foreground",
210
+ "ml-auto text-h6 text-muted-foreground",
211
211
  className
212
212
  )}
213
213
  {...props}
@@ -80,7 +80,7 @@ const Modal = React.forwardRef<HTMLDivElement, ModalProps>(
80
80
  <div
81
81
  data-state={state}
82
82
  className={cn(
83
- "absolute inset-0 bg-black/50 backdrop-blur-[2px] md:backdrop-blur-none",
83
+ "absolute inset-0 bg-ods-overlay backdrop-blur-[2px] md:backdrop-blur-none",
84
84
  "duration-200 fill-mode-forwards",
85
85
  "data-[state=open]:animate-in data-[state=open]:fade-in-0",
86
86
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0",
@@ -58,7 +58,7 @@ const Modal = React.forwardRef<HTMLDivElement, ModalProps>(
58
58
  return (
59
59
  <div className="fixed inset-0 z-[1300] flex items-center justify-center">
60
60
  <div
61
- className="absolute inset-0 bg-black/50"
61
+ className="absolute inset-0 bg-ods-overlay"
62
62
  onClick={onClose}
63
63
  aria-hidden="true"
64
64
  />
@@ -112,7 +112,7 @@ export function MoreActionsMenu({
112
112
  {item.icon}
113
113
  </div>
114
114
  )}
115
- <span className="font-medium text-[18px] leading-6 text-ods-text-primary">
115
+ <span className="text-h4 text-ods-text-primary">
116
116
  {item.label}
117
117
  </span>
118
118
  </>
@@ -43,7 +43,7 @@ NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName
43
43
  const NavigationMenuItem = NavigationMenuPrimitive.Item
44
44
 
45
45
  const navigationMenuTriggerStyle = cva(
46
- "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50"
46
+ "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-h6 transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50"
47
47
  )
48
48
 
49
49
  const NavigationMenuTrigger = React.forwardRef<
@@ -73,7 +73,7 @@ export function OrganizationCard({
73
73
  {deviceCount !== undefined && (
74
74
  <div className="absolute top-4 right-4 flex items-center gap-2 shrink-0">
75
75
  <Monitor className="w-4 h-4 text-ods-text-secondary" />
76
- <span className="font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary">
76
+ <span className="text-h6 text-ods-text-secondary">
77
77
  {deviceCount.toLocaleString()} devices
78
78
  </span>
79
79
  </div>
@@ -85,8 +85,8 @@ export function OrganizationCard({
85
85
  className={cn(
86
86
  "absolute top-2 right-2 h-8 w-8 rounded flex items-center justify-center z-10 transition-colors",
87
87
  actionButton.variant === 'primary'
88
- ? "bg-ods-accent text-black hover:bg-ods-accent-hover"
89
- : "text-ods-text-secondary hover:text-red-500 hover:bg-red-100/10"
88
+ ? "bg-ods-accent text-ods-text-on-accent hover:bg-ods-accent-hover"
89
+ : "text-ods-text-secondary hover:text-ods-error hover:bg-ods-error-secondary"
90
90
  )}
91
91
  onClick={handleActionClick}
92
92
  disabled={actionButton.disabled}
@@ -104,10 +104,10 @@ export function OrganizationCard({
104
104
  />
105
105
 
106
106
  <div className="flex-1 flex flex-col justify-center py-2 min-w-0">
107
- <h3 className="font-['DM_Sans'] font-bold text-lg leading-[1.33] tracking-[-0.02em] text-ods-text-primary transition-colors truncate" title={organization.name}>
107
+ <h3 className="text-h3 text-ods-text-primary transition-colors truncate" title={organization.name}>
108
108
  {organization.name}
109
109
  </h3>
110
- <p className="font-['DM_Sans'] font-medium text-sm leading-[1.43] text-ods-text-secondary truncate" title={organization.industry || organization.tier || organization.websiteUrl || "Organization"}>
110
+ <p className="text-h6 text-ods-text-secondary truncate" title={organization.industry || organization.tier || organization.websiteUrl || "Organization"}>
111
111
  {organization.industry || organization.tier || organization.websiteUrl || "Organization"}
112
112
  </p>
113
113
  </div>
@@ -116,7 +116,7 @@ export function OrganizationCard({
116
116
  {/* Description */}
117
117
  {organization.description && (
118
118
  <div className="w-full h-12 overflow-hidden">
119
- <p className="font-['DM_Sans'] font-medium text-lg leading-[1.33] text-ods-text-primary line-clamp-2" title={organization.description}>
119
+ <p className="text-h4 text-ods-text-primary line-clamp-2" title={organization.description}>
120
120
  {organization.description}
121
121
  </p>
122
122
  </div>
@@ -131,11 +131,11 @@ export function OrganizationCard({
131
131
  {footerStats.map((stat, index) => (
132
132
  <div key={index} className="flex items-center gap-1 flex-shrink-0">
133
133
  {stat.icon}
134
- <span className="font-['DM_Sans'] font-medium text-base text-ods-text-primary">
134
+ <span className="text-h6 text-ods-text-primary">
135
135
  {typeof stat.value === 'number' ? stat.value.toLocaleString() : stat.value}
136
136
  </span>
137
137
  {stat.label && (
138
- <span className="font-['DM_Sans'] font-medium text-sm text-ods-text-secondary">
138
+ <span className="text-h6 text-ods-text-secondary">
139
139
  {stat.label}
140
140
  </span>
141
141
  )}
@@ -46,15 +46,15 @@ export function PageLoader({
46
46
  <OpenFrameLogo
47
47
  className="w-6 h-6 animate-pulse text-ods-accent"
48
48
  upperPathColor="currentColor"
49
- lowerPathColor="var(--ods-text-tertiary)"
49
+ lowerPathColor="var(--color-text-tertiary)"
50
50
  />
51
51
  </div>
52
52
  )}
53
53
  <div className="flex flex-col items-center text-center">
54
- <p className="text-lg font-medium text-ods-text-tertiary leading-6">
54
+ <p className="text-h4 text-ods-text-tertiary">
55
55
  {title}
56
56
  </p>
57
- <p className="text-sm font-medium text-ods-text-tertiary opacity-70 leading-5 mt-1">
57
+ <p className="text-h6 text-ods-text-tertiary opacity-70 mt-1">
58
58
  {description}
59
59
  </p>
60
60
  </div>
@@ -85,16 +85,16 @@ export function CompactPageLoader({
85
85
  <OpenFrameLogo
86
86
  className="w-6 h-6 animate-pulse text-ods-accent"
87
87
  upperPathColor="currentColor"
88
- lowerPathColor="var(--ods-text-tertiary)"
88
+ lowerPathColor="var(--color-text-tertiary)"
89
89
  />
90
90
  </div>
91
91
  )}
92
92
  <div className="flex flex-col items-center text-center">
93
- <p className="text-base font-medium text-ods-text-tertiary">
93
+ <p className="text-h6 text-ods-text-tertiary">
94
94
  {title}
95
95
  </p>
96
96
  {description && (
97
- <p className="text-sm text-ods-text-tertiary opacity-70 mt-1">
97
+ <p className="text-h6 text-ods-text-tertiary opacity-70 mt-1">
98
98
  {description}
99
99
  </p>
100
100
  )}
@@ -114,7 +114,7 @@ export function PhoneInput({
114
114
  disabled={disabled}
115
115
  placeholder={placeholder}
116
116
  onKeyDown={onKeyDown}
117
- className={`min-w-0 flex-1 ${isInvalid ? '!border-[var(--ods-attention-yellow-warning)]' : ''}`}
117
+ className={`min-w-0 flex-1 ${isInvalid ? '!border-ods-warning' : ''}`}
118
118
  />
119
119
  </div>
120
120
  )
@@ -56,15 +56,15 @@ export const ProgressBar: React.FC<ProgressBarProps> = ({
56
56
  if (inverted) {
57
57
  // Inverted: high values = good (green), low values = bad (red)
58
58
  // For battery health: 100% = green, <30% = red
59
- if (progress >= criticalThreshold) return "var(--ods-attention-green-success)"; // high = green
59
+ if (progress >= criticalThreshold) return "var(--color-success)"; // high = green
60
60
  if (progress >= warningThreshold) return "var(--color-warning)"; // medium = warning
61
- return "var(--ods-attention-red-error)"; // low = red
61
+ return "var(--color-error)"; // low = red
62
62
  } else {
63
63
  // Normal: high values = bad (red), low values = good (green)
64
64
  // For disk usage: 100% = red, <70% = green
65
- if (progress >= criticalThreshold) return "var(--ods-attention-red-error)"; // critical red
65
+ if (progress >= criticalThreshold) return "var(--color-error)"; // critical red
66
66
  if (progress >= warningThreshold) return "var(--color-warning)"; // warning yellow
67
- return "var(--ods-attention-green-success)"; // base green
67
+ return "var(--color-success)"; // base green
68
68
  }
69
69
  };
70
70
 
@@ -84,7 +84,7 @@ export const ProgressBar: React.FC<ProgressBarProps> = ({
84
84
  backgroundColor:
85
85
  i < Math.round((progress / 100) * segmentCount)
86
86
  ? getColor()
87
- : "var(--ods-system-greys-soft-grey-action)", // unfilled segments
87
+ : "var(--color-bg-surface-active)", // unfilled segments
88
88
  }}
89
89
  />
90
90
  ))}
@@ -24,7 +24,7 @@ import { QueryReportTableHeader } from './query-report-table-header'
24
24
  columns={['hostname', 'ip_address', 'os_version', 'last_seen']}
25
25
  columnWidth={160}
26
26
  variant="compact"
27
- className="bg-ods-surface"
27
+ className="bg-ods-bg-surface"
28
28
  />
29
29
  ```
30
30
 
@@ -58,7 +58,7 @@ function TruncatedHeaderCell({ value, width }: { value: string; width: number })
58
58
  >
59
59
  <div
60
60
  ref={textRef}
61
- className="font-mono font-medium text-[14px] leading-[20px] text-ods-text-secondary uppercase tracking-[-0.28px] truncate"
61
+ className="text-h5 text-ods-text-secondary truncate"
62
62
  >
63
63
  {value}
64
64
  </div>
@@ -45,8 +45,8 @@ export function QueryReportTableRow({
45
45
  className={cn(
46
46
  'text-ods-text-primary',
47
47
  isCompact
48
- ? 'font-sans font-normal text-[14px] leading-[20px]'
49
- : 'font-sans font-medium text-[18px] leading-[24px]'
48
+ ? 'text-h6'
49
+ : 'text-h4'
50
50
  )}
51
51
  value={displayValue}
52
52
  />
@@ -62,7 +62,7 @@ export function QueryReportTable({
62
62
  {/* Title bar — hidden in compact mode and when empty */}
63
63
  {!isCompact && (title || headerActions || (showExport && data.length > 0)) && (
64
64
  <div className="flex items-end justify-between pt-6">
65
- <h2 className="font-mono font-semibold text-[32px] leading-[40px] text-ods-text-primary">
65
+ <h2 className="text-h2 text-ods-text-primary">
66
66
  {title}
67
67
  </h2>
68
68
  <div className="flex items-center gap-3">
@@ -72,7 +72,7 @@ export function ReleaseChangelogSection({
72
72
  onClick={() => setCollapsed(!collapsed)}
73
73
  className="flex items-center justify-between w-full cursor-pointer"
74
74
  >
75
- <h2 className={`flex items-center gap-2 text-2xl font-bold ${isBreaking ? 'text-red-500' : 'text-ods-text-primary'}`}>
75
+ <h2 className={`flex items-center gap-2 text-h2 ${isBreaking ? 'text-ods-error' : 'text-ods-text-primary'}`}>
76
76
  {icon}
77
77
  {title}
78
78
  <Badge variant="secondary" className="ml-2">{entries.length}</Badge>
@@ -84,7 +84,7 @@ export function ReleaseChangelogSection({
84
84
  />
85
85
  </button>
86
86
  ) : (
87
- <h2 className={`flex items-center gap-2 text-2xl font-bold ${isBreaking ? 'text-red-500' : 'text-ods-text-primary'}`}>
87
+ <h2 className={`flex items-center gap-2 text-h2 ${isBreaking ? 'text-ods-error' : 'text-ods-text-primary'}`}>
88
88
  {icon}
89
89
  {title}
90
90
  <Badge variant="secondary" className="ml-2">{entries.length}</Badge>
@@ -713,7 +713,7 @@ const RichMarkdownInner: React.FC<InnerProps> = ({
713
713
  <div className={`code-block-container border rounded-lg my-6 overflow-hidden ${
714
714
  isDarkMode
715
715
  ? 'bg-ods-card border-ods-border'
716
- : 'bg-ods-bg-secondary border-ods-border'
716
+ : 'bg-ods-bg-surface border-ods-border'
717
717
  }`}>
718
718
  <div className={`code-header border-b px-4 py-2 ${
719
719
  isDarkMode
@@ -734,7 +734,7 @@ const RichMarkdownInner: React.FC<InnerProps> = ({
734
734
  fontSize: '14px',
735
735
  fontFamily: "'JetBrains Mono', 'SF Mono', Consolas, monospace",
736
736
  background: 'transparent',
737
- color: isDarkMode ? 'var(--ods-text-primary)' : 'var(--ods-text-primary)'
737
+ color: isDarkMode ? 'var(--color-text-primary)' : 'var(--color-text-primary)'
738
738
  }}
739
739
  {...props}
740
740
  >
@@ -751,7 +751,7 @@ const RichMarkdownInner: React.FC<InnerProps> = ({
751
751
  className={`font-mono text-[0.9em] px-1.5 py-0.5 rounded border ${
752
752
  isDarkMode
753
753
  ? 'bg-ods-card text-ods-text-primary border-ods-border'
754
- : 'bg-ods-bg-secondary text-ods-text-primary border-ods-border'
754
+ : 'bg-ods-bg-surface text-ods-text-primary border-ods-border'
755
755
  }`}
756
756
  {...props}
757
757
  >
@@ -821,7 +821,7 @@ const RichMarkdownInner: React.FC<InnerProps> = ({
821
821
 
822
822
  // Style blockquotes
823
823
  blockquote: ({ children }: any) => (
824
- <blockquote className={`border-l-4 border-[#FFC008] ml-0 pl-6 my-8 py-4 rounded-r-lg ${
824
+ <blockquote className={`border-l-4 border-ods-accent ml-0 pl-6 my-8 py-4 rounded-r-lg ${
825
825
  isDarkMode
826
826
  ? 'bg-[#1F1F1F]'
827
827
  : 'bg-[#F8F9FA]'
@@ -1013,7 +1013,7 @@ const RichMarkdownInner: React.FC<InnerProps> = ({
1013
1013
  return (
1014
1014
  <span className="text-ods-accent cursor-not-allowed">
1015
1015
  {children}
1016
- <sup className="ml-1 text-xs font-bold text-red-500">[BROKEN]</sup>
1016
+ <sup className="ml-1 text-xs font-bold text-ods-error">[BROKEN]</sup>
1017
1017
  </span>
1018
1018
  );
1019
1019
  }
@@ -1136,7 +1136,7 @@ const RichMarkdownInner: React.FC<InnerProps> = ({
1136
1136
  </div>
1137
1137
  ),
1138
1138
  thead: ({ children }: any) => (
1139
- <thead className={isDarkMode ? 'bg-ods-bg-secondary' : 'bg-ods-bg-secondary'}>
1139
+ <thead className={isDarkMode ? 'bg-ods-bg-surface' : 'bg-ods-bg-surface'}>
1140
1140
  {children}
1141
1141
  </thead>
1142
1142
  ),
@@ -326,19 +326,19 @@ export function SearchInput({
326
326
  )}
327
327
  <div className="min-w-0 flex-1">
328
328
  <div className={cn(
329
- "text-sm font-medium leading-5 truncate",
329
+ "text-h6 truncate",
330
330
  isHighlighted ? "text-ods-accent" : "text-ods-text-primary"
331
331
  )} title={result.title}>
332
332
  {result.title}
333
333
  </div>
334
334
  {result.description && (
335
- <div className="text-xs leading-4 text-ods-text-secondary truncate mt-0.5" title={result.description}>
335
+ <div className="text-h6 text-ods-text-secondary truncate mt-0.5" title={result.description}>
336
336
  {result.description}
337
337
  </div>
338
338
  )}
339
339
  </div>
340
340
  {result.type && (
341
- <span className="flex-shrink-0 text-[11px] font-medium text-ods-text-muted uppercase tracking-wider">
341
+ <span className="flex-shrink-0 text-h6 text-ods-text-muted uppercase">
342
342
  {result.type}
343
343
  </span>
344
344
  )}
@@ -370,7 +370,7 @@ export function SearchInput({
370
370
  const renderDropdownContent = () => {
371
371
  if (isLoading) {
372
372
  return (
373
- <div className="px-4 py-3 text-ods-text-secondary text-[14px]">
373
+ <div className="px-4 py-3 text-ods-text-secondary text-h6">
374
374
  Loading...
375
375
  </div>
376
376
  )
@@ -378,7 +378,7 @@ export function SearchInput({
378
378
 
379
379
  if (flatResults.length === 0) {
380
380
  return (
381
- <div className="px-4 py-3 text-ods-text-secondary text-[14px]">
381
+ <div className="px-4 py-3 text-ods-text-secondary text-h6">
382
382
  {emptyResultsText}
383
383
  </div>
384
384
  )
@@ -388,7 +388,7 @@ export function SearchInput({
388
388
  let globalIndex = 0
389
389
  return Array.from(groups.entries()).map(([groupLabel, groupResults]) => (
390
390
  <div key={groupLabel}>
391
- <div className="px-4 py-2 text-[12px] font-semibold text-ods-text-secondary uppercase tracking-wide bg-ods-bg">
391
+ <div className="px-4 py-2 text-h6 font-semibold text-ods-text-secondary uppercase bg-ods-bg">
392
392
  {groupLabel}
393
393
  </div>
394
394
  {groupResults.map((result) => {
@@ -451,7 +451,7 @@ export function SearchInput({
451
451
  className={cn(
452
452
  "flex items-center h-8 px-2",
453
453
  "bg-ods-card border border-ods-border rounded-[6px]",
454
- "font-mono text-[14px] font-medium leading-5 text-ods-text-secondary uppercase tracking-[-0.28px]",
454
+ "text-h5 text-ods-text-secondary",
455
455
  "hover:bg-ods-bg-hover transition-colors cursor-pointer",
456
456
  )}
457
457
  aria-label={`${hiddenCount} more selected filters`}
@@ -137,7 +137,7 @@ const SelectLabel = React.forwardRef<
137
137
  >(({ className, ...props }, ref) => (
138
138
  <SelectPrimitive.Label
139
139
  ref={ref}
140
- className={cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className)}
140
+ className={cn("py-1.5 pl-8 pr-2 text-h6 font-semibold", className)}
141
141
  {...props}
142
142
  />
143
143
  ))