@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
@@ -22,10 +22,7 @@ function ApprovalFieldList({ fields }: { fields: ApprovalRequestField[] }) {
22
22
  <dl className="flex flex-col gap-2.5 mt-[var(--spacing-system-xxs)]">
23
23
  {fields.map((f, i) => (
24
24
  <div key={i} className="flex flex-col gap-0.5">
25
- {/* NOTE: 11px DM Sans small-caps label has no ODS composite token
26
- (h5 is Azeret Mono, h6 is 14px) — flagged for a future caption
27
- token; kept as-is rather than forcing a mismatched h-class. */}
28
- <dt className="font-['DM_Sans'] font-semibold text-[11px] uppercase tracking-wide text-ods-text-tertiary leading-4">
25
+ <dt className="text-h6 font-semibold uppercase text-ods-text-tertiary">
29
26
  {f.label}
30
27
  </dt>
31
28
  <dd className="text-h6 text-ods-text-primary whitespace-pre-wrap break-words">
@@ -55,7 +52,7 @@ function ApprovalCardBody({
55
52
  return (
56
53
  <div className="flex flex-col gap-[var(--spacing-system-xxs)]">
57
54
  <div className="bg-ods-bg border border-ods-border rounded-md p-[var(--spacing-system-sf)] flex gap-[var(--spacing-system-xsf)] items-start max-h-32 overflow-y-auto">
58
- <code className="text-h6 text-ods-text-primary flex-1 whitespace-pre-wrap break-words">
55
+ <code className="text-code text-ods-text-primary flex-1 whitespace-pre-wrap break-words">
59
56
  {data.command}
60
57
  </code>
61
58
  {data.icon && (
@@ -288,18 +288,18 @@ function AttachmentChip({ attachment, onRemove, disabled, size = 'default' }: At
288
288
 
289
289
  {/* Filename + status */}
290
290
  <div className="min-w-0 flex-1">
291
- <div className={cn('truncate text-ods-text-primary', compact ? 'text-[11px] leading-tight' : 'text-xs')} title={file.name}>
291
+ <div className="truncate text-ods-text-primary text-h6" title={file.name}>
292
292
  {file.name}
293
293
  </div>
294
294
  {/* Compact mode hides the size/status sub-line for ready files to keep the
295
295
  chip to a single line; uploading/error states still surface. */}
296
296
  {(!compact || status !== 'ready') && (
297
- <div className={cn('text-ods-text-muted', compact ? 'text-[9px] leading-tight' : 'text-[10px]')}>
297
+ <div className="text-ods-text-muted text-h6">
298
298
  {status === 'sniffing' && 'Checking…'}
299
299
  {status === 'uploading' && `${progress}% · ${formatFileSize(file.size)}`}
300
300
  {status === 'ready' && formatFileSize(file.size)}
301
301
  {status === 'error' && (
302
- <span className="text-ods-attention-red-error" title={errorMessage}>
302
+ <span className="text-ods-error" title={errorMessage}>
303
303
  {errorMessage ?? 'Upload failed'}
304
304
  </span>
305
305
  )}
@@ -478,7 +478,7 @@ const ChatMessageEnhanced = forwardRef<HTMLDivElement, ChatMessageEnhancedProps>
478
478
  {name || (isUser ? "User" : assistantType === 'mingo' ? "Mingo" : "Fae")}{!isSystem && ':'}
479
479
  </span>
480
480
  {timestamp && (
481
- <span className="font-sans text-heading-5 font-medium text-ods-text-secondary shrink-0 whitespace-nowrap">
481
+ <span className="text-h6 text-ods-text-secondary shrink-0 whitespace-nowrap">
482
482
  {formatMessageTimestamp(timestamp)}
483
483
  </span>
484
484
  )}
@@ -569,7 +569,7 @@ const ChatMessageList = forwardRef<HTMLDivElement, ChatMessageListProps>(
569
569
  aria-live="polite"
570
570
  >
571
571
  <DotsLoaderIcon className="w-6 h-6" />
572
- <CyclingPhrase words={STREAMING_WORDS} className="text-sm" />
572
+ <CyclingPhrase words={STREAMING_WORDS} className="text-h6" />
573
573
  </div>
574
574
  )}
575
575
 
@@ -75,7 +75,7 @@ export function ChatMessageRow({
75
75
  onError={() => setFailedSrc(resolvedAvatar ?? null)}
76
76
  />
77
77
  ) : (
78
- <div className="w-8 h-8 md:w-10 md:h-10 rounded-lg flex-shrink-0 flex items-center justify-center bg-ods-bg border border-ods-border text-[12px] font-medium text-ods-text-primary font-body">
78
+ <div className="w-8 h-8 md:w-10 md:h-10 rounded-lg flex-shrink-0 flex items-center justify-center bg-ods-bg border border-ods-border text-h6 text-ods-text-primary">
79
79
  {getFirstLastInitials(displayName) || '?'}
80
80
  </div>
81
81
  )}
@@ -88,7 +88,7 @@ export function ChatMessageRow({
88
88
  {displayName}
89
89
  </span>
90
90
  {timeLabel && (
91
- <span className="text-[11px] md:text-[12px] font-medium leading-[1.43] text-ods-text-secondary font-body flex-shrink-0">
91
+ <span className="text-h6 text-ods-text-secondary flex-shrink-0">
92
92
  {timeLabel}
93
93
  </span>
94
94
  )}
@@ -96,7 +96,7 @@ export function ChatMessageRow({
96
96
 
97
97
  {/* Body — verbatim Slack: 12/14px, pre-wrap, break-words. */}
98
98
  {hasBody && (
99
- <div className="text-[12px] md:text-[14px] font-medium leading-[1.43] text-ods-text-primary font-body whitespace-pre-wrap break-words min-w-0 max-w-full">
99
+ <div className="text-h6 text-ods-text-primary whitespace-pre-wrap break-words min-w-0 max-w-full">
100
100
  {body}
101
101
  </div>
102
102
  )}
@@ -47,7 +47,7 @@ const ChatQuickAction = React.forwardRef<HTMLButtonElement, ChatQuickActionProps
47
47
  )}
48
48
  {...props}
49
49
  >
50
- <span className="text-sm font-medium">{text}</span>
50
+ <span className="text-h6">{text}</span>
51
51
  <ChevronRight className="h-4 w-4 text-ods-text-secondary flex-shrink-0" />
52
52
  </button>
53
53
  )
@@ -66,7 +66,7 @@ const ChatSidebarSkeleton = React.forwardRef<HTMLDivElement, ChatSidebarSkeleton
66
66
  variant="transparent"
67
67
  disabled={true}
68
68
  leftIcon={<ChatPlusIcon className="size-6 text-ods-text-secondary" />}
69
- className="flex-1 justify-center text-lg font-bold text-ods-text-secondary cursor-not-allowed hover:bg-transparent"
69
+ className="flex-1 justify-center text-h3 text-ods-text-secondary cursor-not-allowed hover:bg-transparent"
70
70
  >
71
71
  Start New Chat
72
72
  </Button>
@@ -42,7 +42,7 @@ const DialogListItem = forwardRef<HTMLDivElement, DialogListItemProps>(
42
42
  <div className="flex flex-1 flex-col items-start justify-center gap-1 min-w-0">
43
43
  <div className="flex items-center w-full min-w-0">
44
44
  <h3 className={cn(
45
- "text-base font-medium leading-5 min-w-0 flex-1",
45
+ "text-h6 min-w-0 flex-1",
46
46
  isActive ? "text-ods-accent" : "text-ods-text-primary",
47
47
  "truncate"
48
48
  )} title={dialog.title || 'Untitled Chat'}>
@@ -50,7 +50,7 @@ const DialogListItem = forwardRef<HTMLDivElement, DialogListItemProps>(
50
50
  </h3>
51
51
  </div>
52
52
  {dialog.timestamp && (
53
- <p className="text-sm text-ods-text-secondary truncate w-full min-w-0">
53
+ <p className="text-h6 text-ods-text-secondary truncate w-full min-w-0">
54
54
  {formatTimestamp(dialog.timestamp)}
55
55
  </p>
56
56
  )}
@@ -60,7 +60,7 @@ const DialogListItem = forwardRef<HTMLDivElement, DialogListItemProps>(
60
60
  <div className="flex-shrink-0 ml-2">
61
61
  {dialog.unreadMessagesCount && dialog.unreadMessagesCount > 0 ? (
62
62
  <div className="bg-ods-accent flex items-center justify-center p-2 rounded-md size-6">
63
- <span className="text-xs font-medium text-ods-text-on-accent">
63
+ <span className="text-h6 text-ods-text-on-accent">
64
64
  {dialog.unreadMessagesCount > 99 ? '99+' : dialog.unreadMessagesCount}
65
65
  </span>
66
66
  </div>
@@ -131,7 +131,7 @@ const ChatSidebar = forwardRef<HTMLDivElement, ChatSidebarProps>(
131
131
  variant="transparent"
132
132
  disabled={isLoading || isCreatingDialog}
133
133
  leftIcon={<ChatPlusIcon className="size-6 text-ods-text-secondary" />}
134
- className="flex-1 justify-center text-lg font-bold text-ods-text-primary hover:bg-ods-bg-hover focus-visible:ring-0"
134
+ className="flex-1 justify-center text-h3 text-ods-text-primary hover:bg-ods-bg-hover focus-visible:ring-0"
135
135
  >
136
136
  Start New Chat
137
137
  </Button>
@@ -144,10 +144,10 @@ const ChatSidebar = forwardRef<HTMLDivElement, ChatSidebarProps>(
144
144
  <div className="flex-1 flex flex-col items-center justify-center gap-6 p-6">
145
145
  <ChatsIcon className="w-6 h-6 text-ods-text-secondary" />
146
146
  <div className="text-center space-y-2">
147
- <h3 className="text-lg font-medium text-ods-text-secondary">
147
+ <h3 className="text-h4 text-ods-text-secondary">
148
148
  No Current Chats
149
149
  </h3>
150
- <p className="text-sm font-medium text-ods-text-secondary">
150
+ <p className="text-h6 text-ods-text-secondary">
151
151
  Previous Mingo sessions will show here
152
152
  </p>
153
153
  </div>
@@ -37,7 +37,7 @@ const ChatTypingIndicator = React.forwardRef<HTMLDivElement, ChatTypingIndicator
37
37
  >
38
38
  <style dangerouslySetInnerHTML={{ __html: dotAnimation }} />
39
39
  {showText && (
40
- <span className="text-ods-text-secondary text-sm">Assistant is typing</span>
40
+ <span className="text-ods-text-secondary text-h6">Assistant is typing</span>
41
41
  )}
42
42
  <div className={cn(
43
43
  "inline-flex items-center justify-center gap-1",
@@ -23,7 +23,7 @@ const ContextCompactionDisplay = forwardRef<HTMLDivElement, ContextCompactionDis
23
23
  )}
24
24
  {...props}
25
25
  >
26
- <span className="text-sm font-medium text-ods-text-secondary flex-1 min-w-0">
26
+ <span className="text-h6 text-ods-text-secondary flex-1 min-w-0">
27
27
  {label}
28
28
  </span>
29
29
  {isStarted ? (
@@ -778,7 +778,7 @@ function SourceChips({
778
778
  if (fallback.length === 0) return null
779
779
  return (
780
780
  <div className="flex flex-col gap-1.5 mt-2 pt-2 border-t border-ods-border">
781
- <span className="text-[11px] text-ods-text-muted uppercase tracking-wider font-medium">
781
+ <span className="text-h6 text-ods-text-muted uppercase">
782
782
  Top retrieved sources
783
783
  </span>
784
784
  <div className="flex flex-wrap gap-1.5">
@@ -802,7 +802,7 @@ function SourceChips({
802
802
 
803
803
  return (
804
804
  <div className="flex flex-col gap-1.5 mt-2 pt-2 border-t border-ods-border">
805
- <span className="text-[11px] text-ods-text-muted uppercase tracking-wider font-medium">
805
+ <span className="text-h6 text-ods-text-muted uppercase">
806
806
  Sources
807
807
  </span>
808
808
  <div
@@ -832,7 +832,7 @@ function SourceChips({
832
832
  {hasOverflow && (
833
833
  <button
834
834
  onClick={() => setExpanded(!expanded)}
835
- className="inline-flex items-center gap-1 px-2 py-0.5 rounded border text-[11px] cursor-pointer transition-colors bg-ods-card border-ods-accent text-ods-accent hover:bg-ods-accent/10"
835
+ className="inline-flex items-center gap-1 px-2 py-0.5 rounded border text-h6 cursor-pointer transition-colors bg-ods-card border-ods-accent text-ods-accent hover:bg-ods-accent/10"
836
836
  aria-expanded={expanded}
837
837
  aria-label={
838
838
  expanded
@@ -97,27 +97,27 @@ export function AdminContentCard({
97
97
  />
98
98
  </>
99
99
  ) : (
100
- <div className="absolute inset-0 bg-ods-background" />
100
+ <div className="absolute inset-0 bg-ods-bg" />
101
101
  )}
102
102
  </div>
103
103
 
104
104
  {/* Content */}
105
105
  <div className="flex flex-1 flex-col gap-3 p-5">
106
106
  {/* Title */}
107
- <h3 className="font-['DM_Sans'] font-bold text-ods-text-primary text-[18px] leading-snug line-clamp-2 break-words">
107
+ <h3 className="text-h3 text-ods-text-primary line-clamp-2 break-words">
108
108
  {title}
109
109
  </h3>
110
110
 
111
111
  {/* Subtitle (optional) */}
112
112
  {subtitle && (
113
- <p className="font-['DM_Sans'] text-[14px] text-ods-text-secondary truncate">
113
+ <p className="text-h6 text-ods-text-secondary truncate">
114
114
  {subtitle}
115
115
  </p>
116
116
  )}
117
117
 
118
118
  {/* Summary */}
119
119
  {summary && (
120
- <p className="font-['DM_Sans'] text-[14px] leading-relaxed text-ods-text-secondary line-clamp-2">
120
+ <p className="text-h6 text-ods-text-secondary line-clamp-2">
121
121
  {summary}
122
122
  </p>
123
123
  )}
@@ -138,7 +138,7 @@ export function AdminContentCard({
138
138
 
139
139
  {/* Meta row */}
140
140
  {meta && (
141
- <div className="flex items-center gap-3 text-[12px] font-['DM_Sans'] text-ods-text-secondary">
141
+ <div className="flex items-center gap-3 text-h6 text-ods-text-secondary">
142
142
  {meta}
143
143
  </div>
144
144
  )}
@@ -161,7 +161,7 @@ export function BlogCard({
161
161
  </span>
162
162
  <span className={COMPACT_CARD_TEXT_COL}>
163
163
  <span className={cn(COMPACT_CARD_TITLE_ROW, 'gap-1.5')}>
164
- <span className={cn(COMPACT_CARD_TITLE, "font-['DM_Sans']")}>
164
+ <span className={cn(COMPACT_CARD_TITLE, 'font-body')}>
165
165
  {post.title}
166
166
  </span>
167
167
  {hasEmbeddedVideo ? (
@@ -257,9 +257,7 @@ export function BlogCard({
257
257
  <div className="mb-3 flex items-center min-h-[50.4px] md:min-h-[56px] lg:min-h-[61.6px]">
258
258
  <h3
259
259
  className={cn(
260
- "font-['DM_Sans'] font-bold text-ods-text-primary",
261
- 'text-lg md:text-xl lg:text-[22px]',
262
- 'leading-[1.4] tracking-[-0.02em]',
260
+ 'text-h3 text-ods-text-primary',
263
261
  'line-clamp-2',
264
262
  'transition-colors duration-300 ease-out',
265
263
  'group-hover:text-ods-accent',
@@ -272,16 +270,15 @@ export function BlogCard({
272
270
  <div className="mb-3 flex items-center min-h-[42px] md:min-h-[45px] lg:min-h-[48px]">
273
271
  <p
274
272
  className={cn(
275
- "font-['DM_Sans'] font-medium text-ods-text-primary",
276
- 'text-sm md:text-[15px] lg:text-base',
277
- 'leading-[1.5] line-clamp-2',
273
+ 'text-h6 text-ods-text-primary',
274
+ 'line-clamp-2',
278
275
  )}
279
276
  >
280
277
  {post.summary || ''}
281
278
  </p>
282
279
  </div>
283
280
 
284
- <div className="mt-auto flex items-center justify-between gap-2 text-sm text-ods-text-secondary">
281
+ <div className="mt-auto flex items-center justify-between gap-2 text-h6 text-ods-text-secondary">
285
282
  <div className="flex items-center gap-2 min-w-0">
286
283
  {post.author_avatar ? (
287
284
  <Image
@@ -205,14 +205,14 @@ export function CaseStudyCard({
205
205
  <Image
206
206
  src={study.user.avatar_url}
207
207
  alt={study.user?.full_name || 'User'}
208
- className="w-12 h-12 rounded-full object-cover bg-ods-background border border-ods-border"
208
+ className="w-12 h-12 rounded-full object-cover bg-ods-bg border border-ods-border"
209
209
  width={48}
210
210
  height={48}
211
211
  unoptimized
212
212
  />
213
213
  ) : (
214
- <div className="w-12 h-12 rounded-full bg-ods-background border border-ods-border flex items-center justify-center">
215
- <span className="text-ods-text-secondary font-medium text-xl">
214
+ <div className="w-12 h-12 rounded-full bg-ods-bg border border-ods-border flex items-center justify-center">
215
+ <span className="text-ods-text-secondary text-h4">
216
216
  {(study.user?.full_name || 'A').charAt(0).toUpperCase()}
217
217
  </span>
218
218
  </div>
@@ -231,11 +231,11 @@ export function CaseStudyCard({
231
231
  )}
232
232
  </div>
233
233
  <div className="min-w-0 flex-1">
234
- <p className="font-['DM_Sans'] text-[16px] leading-[1.3] text-ods-text-primary truncate">
234
+ <p className="text-h6 text-ods-text-primary truncate">
235
235
  {study.user?.full_name || 'Anonymous'}
236
236
  {study.msp?.name && <span className="text-ods-text-secondary"> • {study.msp.name}</span>}
237
237
  </p>
238
- <p className="font-['DM_Sans'] text-[14px] leading-none text-ods-text-secondary truncate">
238
+ <p className="text-h6 text-ods-text-secondary truncate">
239
239
  {study.user?.job_title || ' '}
240
240
  </p>
241
241
  </div>
@@ -129,7 +129,7 @@ const ChatTicketItem = React.forwardRef<HTMLButtonElement, ChatTicketItemProps>(
129
129
  <Tag
130
130
  label={ticket.linkedTaskLabel}
131
131
  variant="outline"
132
- icon={<WrenchIcon size={14} color="var(--ods-text-secondary)" />}
132
+ icon={<WrenchIcon size={14} color="var(--color-text-secondary)" />}
133
133
  className="shrink-0 hidden sm:inline-flex"
134
134
  />
135
135
  )}
@@ -129,7 +129,7 @@ export function CustomerInterviewCard({
129
129
  ) : null}
130
130
  {interview.main_video_url ? (
131
131
  <span className="absolute inset-0 flex items-center justify-center bg-black/30">
132
- <Video className="h-4 w-4 text-white" />
132
+ <Video className="h-4 w-4 text-ods-text-on-dark" />
133
133
  </span>
134
134
  ) : null}
135
135
  </span>
@@ -193,7 +193,7 @@ export function CustomerInterviewCard({
193
193
  {interview.main_video_url && (
194
194
  <div className="absolute inset-0 bg-black/40 flex items-center justify-center">
195
195
  <div className="w-16 h-16 rounded-full bg-ods-accent/90 flex items-center justify-center">
196
- <Video className="w-8 h-8 text-black" />
196
+ <Video className="w-8 h-8 text-ods-text-on-accent" />
197
197
  </div>
198
198
  </div>
199
199
  )}
@@ -206,14 +206,14 @@ export function CustomerInterviewCard({
206
206
  </div>
207
207
 
208
208
  <div className="shrink-0">
209
- <h3 className="font-['DM_Sans'] font-semibold text-[20px] leading-[28px] text-ods-text-primary line-clamp-2 break-words">
209
+ <h3 className="text-h3 text-ods-text-primary line-clamp-2 break-words">
210
210
  {interview.title}
211
211
  </h3>
212
212
  </div>
213
213
 
214
214
  {interview.video_summary && (
215
215
  <div className="shrink-0">
216
- <p className="font-['DM_Sans'] text-[14px] leading-[20px] text-ods-text-secondary line-clamp-3">
216
+ <p className="text-h6 text-ods-text-secondary line-clamp-3">
217
217
  {interview.video_summary}
218
218
  </p>
219
219
  </div>
@@ -226,11 +226,11 @@ export function CustomerInterviewCard({
226
226
  <img
227
227
  src={interview.user.avatar_url}
228
228
  alt={interview.user?.full_name || 'Customer'}
229
- className="w-12 h-12 rounded-full object-cover bg-ods-background border border-ods-border"
229
+ className="w-12 h-12 rounded-full object-cover bg-ods-bg border border-ods-border"
230
230
  />
231
231
  ) : (
232
- <div className="w-12 h-12 rounded-full bg-ods-background border border-ods-border flex items-center justify-center">
233
- <span className="text-ods-text-secondary font-medium text-xl">
232
+ <div className="w-12 h-12 rounded-full bg-ods-bg border border-ods-border flex items-center justify-center">
233
+ <span className="text-ods-text-secondary text-h4">
234
234
  {(interview.user?.full_name || 'A').charAt(0).toUpperCase()}
235
235
  </span>
236
236
  </div>
@@ -246,11 +246,11 @@ export function CustomerInterviewCard({
246
246
  )}
247
247
  </div>
248
248
  <div className="min-w-0 flex-1">
249
- <p className="font-['DM_Sans'] text-[16px] leading-[1.3] text-ods-text-primary truncate">
249
+ <p className="text-h6 text-ods-text-primary truncate">
250
250
  {interview.user?.full_name || 'Anonymous'}
251
251
  {interview.msp?.name && <span className="text-ods-text-secondary"> • {interview.msp.name}</span>}
252
252
  </p>
253
- <p className="font-['DM_Sans'] text-[14px] leading-none text-ods-text-secondary truncate">
253
+ <p className="text-h6 text-ods-text-secondary truncate">
254
254
  {interview.user?.job_title || ' '}
255
255
  </p>
256
256
  </div>
@@ -64,14 +64,14 @@ export function DataRoomDocCard({ item, className, badgeText, anchorProps }: Dat
64
64
  <StatusBadge text={badgeText} variant="button" colorScheme="cyan" className="shrink-0" />
65
65
  </span>
66
66
  {item.path ? (
67
- <span className="flex min-w-0 items-center gap-1 text-[11px] leading-4 text-ods-text-secondary">
67
+ <span className="flex min-w-0 items-center gap-1 text-h6 text-ods-text-secondary">
68
68
  <span className="shrink-0 text-ods-text-secondary/70">Path:</span>
69
69
  <span className="min-w-0 truncate font-mono">{item.path}</span>
70
70
  </span>
71
71
  ) : null}
72
72
  {item.preview ? (
73
73
  <span className="flex min-w-0">
74
- <span className="line-clamp-2 whitespace-pre-wrap break-words text-[13px] leading-5 text-ods-text-secondary">
74
+ <span className="line-clamp-2 whitespace-pre-wrap break-words text-h6 text-ods-text-secondary">
75
75
  {item.preview}
76
76
  </span>
77
77
  </span>
@@ -523,7 +523,7 @@ function ChatCardWithDiscuss({
523
523
  {!onDiscuss && !useDisplay ? <span /> : null}
524
524
  {idDisplay ? (
525
525
  <span
526
- className="inline-flex items-center gap-1 text-[10px] leading-3 font-mono shrink-0 text-ods-text-secondary opacity-60 hover:opacity-100 hover:text-ods-text-primary transition-opacity"
526
+ className="inline-flex items-center gap-1 text-code shrink-0 text-ods-text-secondary opacity-60 hover:opacity-100 hover:text-ods-text-primary transition-opacity"
527
527
  title={`${sourceLabel} · ${chatRef.id}`}
528
528
  >
529
529
  <SourceIcon className="h-3 w-3 shrink-0" />
@@ -91,7 +91,7 @@ export function EntityMetadataValueCell({
91
91
  <p className="text-h4 text-ods-text-primary">
92
92
  {uppercase ? value.toLocaleUpperCase() : value}
93
93
  </p>
94
- <p className="font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary">
94
+ <p className="text-h6 text-ods-text-secondary">
95
95
  {label}
96
96
  </p>
97
97
  </div>
@@ -131,7 +131,7 @@ export function EntityMetadataAuthorCell({
131
131
  <div className="flex flex-col gap-0 flex-1 min-w-0">
132
132
  {/* title = full-name tooltip on truncation (carried over from the
133
133
  release page's cell when it adopted this shared one). */}
134
- <p className="text-h3 tracking-[-0.36px] text-ods-text-primary truncate" title={fullName}>
134
+ <p className="text-h3 text-ods-text-primary truncate" title={fullName}>
135
135
  {authorHref && trimmedName ? (
136
136
  <Link href={authorHref} className="hover:text-ods-accent transition-colors">
137
137
  {fullName}
@@ -140,7 +140,7 @@ export function EntityMetadataAuthorCell({
140
140
  fullName
141
141
  )}
142
142
  </p>
143
- <p className="font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary">
143
+ <p className="text-h6 text-ods-text-secondary">
144
144
  {author.job_title || roleLabel}
145
145
  </p>
146
146
  </div>
@@ -102,7 +102,7 @@ export function EntityPortraitCard({
102
102
 
103
103
  // Edge-sampled slot fill for non-wide covers — the SAME hook/fallback the
104
104
  // media/news cards use (og-link-preview.tsx).
105
- const edgeColor = useImageEdgeColor(isWide === false ? src : null, 'var(--ods-bg-secondary)')
105
+ const edgeColor = useImageEdgeColor(isWide === false ? src : null, 'var(--color-bg-surface)')
106
106
 
107
107
  return (
108
108
  <a href={href} target={target} rel={rel} className={cn('block h-full', className)} aria-label={`Open ${title}`}>
@@ -168,7 +168,7 @@ export function EntityPortraitCard({
168
168
  />
169
169
  ) : (
170
170
  <div className="w-12 h-12 rounded-full bg-ods-bg border border-ods-border flex items-center justify-center">
171
- <span className="text-ods-text-secondary font-medium text-xl">
171
+ <span className="text-ods-text-secondary text-h4">
172
172
  {person.name.charAt(0).toUpperCase()}
173
173
  </span>
174
174
  </div>
@@ -187,9 +187,9 @@ export function EntityPortraitCard({
187
187
  )}
188
188
  </div>
189
189
  <div className="flex flex-col min-w-0">
190
- <span className="font-['DM_Sans'] font-bold text-ods-text-primary truncate">{person.name}</span>
190
+ <span className="text-h6 font-bold text-ods-text-primary truncate">{person.name}</span>
191
191
  {person.subtitle && (
192
- <span className="font-['DM_Sans'] text-sm text-ods-text-secondary truncate">{person.subtitle}</span>
192
+ <span className="text-h6 text-ods-text-secondary truncate">{person.subtitle}</span>
193
193
  )}
194
194
  </div>
195
195
  </div>
@@ -67,19 +67,19 @@ export function GenericEntityCard({ item, className, anchorProps }: GenericEntit
67
67
  ) : null}
68
68
  </span>
69
69
  {item.subtitle ? (
70
- <span className="flex min-w-0 items-center gap-1 text-[11px] leading-4 text-ods-text-secondary">
70
+ <span className="flex min-w-0 items-center gap-1 text-h6 text-ods-text-secondary">
71
71
  <span className="min-w-0 truncate font-mono">{item.subtitle}</span>
72
72
  </span>
73
73
  ) : null}
74
74
  {item.preview ? (
75
75
  <span className="flex min-w-0">
76
- <span className="line-clamp-2 whitespace-pre-wrap break-words text-[13px] leading-5 text-ods-text-secondary">
76
+ <span className="line-clamp-2 whitespace-pre-wrap break-words text-h6 text-ods-text-secondary">
77
77
  {item.preview}
78
78
  </span>
79
79
  </span>
80
80
  ) : null}
81
81
  {item.facts && item.facts.length > 0 ? (
82
- <span className="flex flex-wrap items-center gap-x-3 gap-y-0.5 min-w-0 text-[11px] leading-4">
82
+ <span className="flex flex-wrap items-center gap-x-3 gap-y-0.5 min-w-0 text-h6">
83
83
  {item.facts.map((f, i) => (
84
84
  <span key={i} className="inline-flex items-center gap-1 min-w-0 truncate">
85
85
  <span className="text-ods-text-secondary/70 shrink-0">{f.label}:</span>
@@ -130,23 +130,23 @@ export function parseGithubTitle(title: string, kind: GitHubActivityKind): { dis
130
130
  const REVIEW_STATE_STYLE: Record<PrReviewState, { label: string; className: string }> = {
131
131
  APPROVED: {
132
132
  label: 'Approved',
133
- className: 'bg-[var(--ods-attention-green-success-secondary)] text-[var(--ods-attention-green-success)]',
133
+ className: 'bg-ods-success-secondary text-ods-success',
134
134
  },
135
135
  CHANGES_REQUESTED: {
136
136
  label: 'Changes',
137
- className: 'bg-[var(--ods-attention-red-error-secondary)] text-[var(--ods-attention-red-error)]',
137
+ className: 'bg-ods-error-secondary text-ods-error',
138
138
  },
139
139
  COMMENTED: {
140
140
  label: 'Comment',
141
- className: 'bg-ods-bg-secondary text-ods-text-primary',
141
+ className: 'bg-ods-bg-surface text-ods-text-primary',
142
142
  },
143
143
  DISMISSED: {
144
144
  label: 'Dismissed',
145
- className: 'bg-ods-bg-secondary text-ods-text-secondary',
145
+ className: 'bg-ods-bg-surface text-ods-text-secondary',
146
146
  },
147
147
  PENDING: {
148
148
  label: 'Pending',
149
- className: 'bg-[var(--ods-attention-yellow-warning-secondary)] text-[var(--ods-attention-yellow-warning)]',
149
+ className: 'bg-ods-warning-secondary text-ods-warning',
150
150
  },
151
151
  }
152
152
 
@@ -160,7 +160,7 @@ function ReviewStateBadge({ state, className = '' }: { state: PrReviewState; cla
160
160
  const { label, className: paint } = REVIEW_STATE_STYLE[state] ?? REVIEW_STATE_STYLE.COMMENTED
161
161
  return (
162
162
  <span
163
- className={`inline-flex items-center rounded px-1.5 py-0.5 font-mono text-[10px] font-medium uppercase tracking-wide shrink-0 ${paint} ${className}`}
163
+ className={`inline-flex items-center rounded px-1.5 py-0.5 text-h5 shrink-0 ${paint} ${className}`}
164
164
  >
165
165
  {label}
166
166
  </span>
@@ -198,17 +198,17 @@ export function GitHubActivityCard({ item, variant = 'compact', className, ancho
198
198
  <div className={`flex items-center gap-3 min-w-0 ${className ?? ''}`}>
199
199
  <span className="flex items-center gap-2 w-28 shrink-0">
200
200
  {kindIcon(kind, 'h-3.5 w-3.5')}
201
- <code className="text-ods-text-secondary font-mono text-xs truncate">{idLabel}</code>
201
+ <code className="text-ods-text-secondary text-code truncate">{idLabel}</code>
202
202
  </span>
203
- <span className="flex items-center gap-2 text-ods-text-primary text-sm flex-1 min-w-0">
203
+ <span className="flex items-center gap-2 text-ods-text-primary text-h6 flex-1 min-w-0">
204
204
  {reviewState ? <ReviewStateBadge state={reviewState} /> : null}
205
205
  <span className="truncate">{primaryText}</span>
206
206
  </span>
207
207
  {repo ? (
208
- <span className="font-mono text-[11px] text-ods-text-secondary truncate max-w-[240px] shrink-0">{repo}</span>
208
+ <span className="text-code text-ods-text-secondary truncate max-w-[240px] shrink-0">{repo}</span>
209
209
  ) : null}
210
210
  {dateText ? (
211
- <span className="text-ods-text-secondary text-xs w-24 shrink-0 text-right">{dateText}</span>
211
+ <span className="text-ods-text-secondary text-h6 w-24 shrink-0 text-right">{dateText}</span>
212
212
  ) : null}
213
213
  </div>
214
214
  )
@@ -216,7 +216,7 @@ export function GitHubActivityCard({ item, variant = 'compact', className, ancho
216
216
 
217
217
  const metaParts: React.ReactNode[] = []
218
218
  metaParts.push(
219
- <span key="kind" className="font-medium uppercase tracking-wide text-[10px]">{kindLabel(kind)}</span>,
219
+ <span key="kind" className="text-h6 uppercase">{kindLabel(kind)}</span>,
220
220
  )
221
221
  if (idLabel) metaParts.push(<code key="id" className="font-mono">{idLabel}</code>)
222
222
  if (repo) metaParts.push(<span key="repo" className="font-mono truncate">{repo}</span>)
@@ -70,15 +70,15 @@ export function HubspotTicketCard({ item, variant = 'compact', className, anchor
70
70
  if (variant === 'row') {
71
71
  return (
72
72
  <div className={`flex items-center gap-3 min-w-0 ${className ?? ''}`}>
73
- <span className="text-ods-text-primary text-sm font-medium truncate max-w-[260px] shrink-0">{item.title}</span>
73
+ <span className="text-ods-text-primary text-h6 truncate max-w-[260px] shrink-0">{item.title}</span>
74
74
  {item.preview ? (
75
- <span className="text-ods-text-secondary text-sm flex-1 min-w-0 truncate">{item.preview}</span>
75
+ <span className="text-ods-text-secondary text-h6 flex-1 min-w-0 truncate">{item.preview}</span>
76
76
  ) : null}
77
77
  {statusText ? (
78
78
  <StatusBadge text={statusText} variant="button" colorScheme={statusScheme(item.status)} />
79
79
  ) : null}
80
80
  {dateText ? (
81
- <span className="text-ods-text-secondary text-xs w-24 shrink-0 text-right">{dateText}</span>
81
+ <span className="text-ods-text-secondary text-h6 w-24 shrink-0 text-right">{dateText}</span>
82
82
  ) : null}
83
83
  </div>
84
84
  )
@@ -116,13 +116,13 @@ export function HubspotTicketCard({ item, variant = 'compact', className, anchor
116
116
  ) : null}
117
117
  </span>
118
118
  {item.customerEmail ? (
119
- <span className="flex min-w-0 items-center gap-1 text-[11px] leading-4 text-ods-text-secondary">
119
+ <span className="flex min-w-0 items-center gap-1 text-h6 text-ods-text-secondary">
120
120
  <span className="shrink-0 text-ods-text-secondary/70">From:</span>
121
121
  <span className="min-w-0 truncate">{item.customerEmail}</span>
122
122
  </span>
123
123
  ) : null}
124
124
  <span className="flex min-w-0">
125
- <span className="line-clamp-4 whitespace-pre-wrap break-words text-[13px] leading-5 text-ods-text-secondary">
125
+ <span className="line-clamp-4 whitespace-pre-wrap break-words text-h6 text-ods-text-secondary">
126
126
  {item.preview || <span className="italic text-ods-text-secondary/60">No description provided.</span>}
127
127
  </span>
128
128
  </span>
@@ -129,7 +129,7 @@ export function InvestorUpdateCard({
129
129
  {update.title || `Update #${update.update_number ?? '?'}`}
130
130
  </span>
131
131
  {update.update_number ? (
132
- <span className="shrink-0 rounded bg-ods-accent/10 px-1.5 py-0.5 text-[10px] font-medium text-ods-accent">
132
+ <span className="shrink-0 rounded bg-ods-accent/10 px-1.5 py-0.5 text-h6 text-ods-accent">
133
133
  #{update.update_number}
134
134
  </span>
135
135
  ) : null}