@flamingo-stack/openframe-frontend-core 0.0.692 → 0.0.693-snapshot.20261002120603

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 (205) hide show
  1. package/dist/chat-protocol/events.d.ts +3 -0
  2. package/dist/chat-protocol/events.d.ts.map +1 -1
  3. package/dist/chat-protocol/frames.d.ts +6 -0
  4. package/dist/chat-protocol/frames.d.ts.map +1 -1
  5. package/dist/chat-protocol/index.cjs +26 -1
  6. package/dist/chat-protocol/index.cjs.map +1 -1
  7. package/dist/chat-protocol/index.d.ts +1 -0
  8. package/dist/chat-protocol/index.d.ts.map +1 -1
  9. package/dist/chat-protocol/index.js +23 -2
  10. package/dist/chat-protocol/index.js.map +1 -1
  11. package/dist/chat-protocol/leading-frames.d.ts.map +1 -1
  12. package/dist/chat-protocol/progress.d.ts +35 -0
  13. package/dist/chat-protocol/progress.d.ts.map +1 -0
  14. package/dist/{chunk-GDZ7IC5B.js → chunk-234IIQIS.js} +2 -2
  15. package/dist/{chunk-KDCIYRZV.cjs → chunk-2EQED5SZ.cjs} +34 -34
  16. package/dist/{chunk-KDCIYRZV.cjs.map → chunk-2EQED5SZ.cjs.map} +1 -1
  17. package/dist/{chunk-JUNOY5HK.js → chunk-2HX6AADM.js} +15 -17
  18. package/dist/chunk-2HX6AADM.js.map +1 -0
  19. package/dist/{chunk-X5XFKI6N.js → chunk-33L2IR62.js} +3 -3
  20. package/dist/{chunk-A5NHAHV6.js → chunk-42LIHMRA.js} +4 -4
  21. package/dist/{chunk-MIZU2OTO.cjs → chunk-63BLVGXZ.cjs} +4 -4
  22. package/dist/{chunk-MIZU2OTO.cjs.map → chunk-63BLVGXZ.cjs.map} +1 -1
  23. package/dist/{chunk-TEIHEFXP.js → chunk-6ZSDKDOV.js} +8 -8
  24. package/dist/{chunk-UVUNBXS6.js → chunk-7IINE3MK.js} +48 -5
  25. package/dist/chunk-7IINE3MK.js.map +1 -0
  26. package/dist/{chunk-N3526CTH.cjs → chunk-7TO3CWPM.cjs} +3 -3
  27. package/dist/{chunk-N3526CTH.cjs.map → chunk-7TO3CWPM.cjs.map} +1 -1
  28. package/dist/{chunk-TXFGG47A.js → chunk-7VO6NC67.js} +4 -4
  29. package/dist/{chunk-SC44YJCF.js → chunk-A7RKT5SO.js} +2 -2
  30. package/dist/{chunk-Y7ZEVTLC.js → chunk-BW6YBATM.js} +141 -71
  31. package/dist/chunk-BW6YBATM.js.map +1 -0
  32. package/dist/{chunk-GZRU2A4L.cjs → chunk-C27F6GBZ.cjs} +790 -720
  33. package/dist/chunk-C27F6GBZ.cjs.map +1 -0
  34. package/dist/{chunk-DVSPRY2V.cjs → chunk-ESMDIJIN.cjs} +3 -3
  35. package/dist/{chunk-DVSPRY2V.cjs.map → chunk-ESMDIJIN.cjs.map} +1 -1
  36. package/dist/{chunk-EXWS2QSD.cjs → chunk-FNGX5WZM.cjs} +497 -474
  37. package/dist/chunk-FNGX5WZM.cjs.map +1 -0
  38. package/dist/{chunk-RK47E3PP.js → chunk-GWQCUC53.js} +4 -4
  39. package/dist/{chunk-AVAZ6BD6.js → chunk-HBMGSGZY.js} +6 -6
  40. package/dist/{chunk-HM7ZGABI.js → chunk-HEBLLLLD.js} +2 -2
  41. package/dist/{chunk-7BNWMOPM.cjs → chunk-HJZ3UTUE.cjs} +83 -83
  42. package/dist/{chunk-7BNWMOPM.cjs.map → chunk-HJZ3UTUE.cjs.map} +1 -1
  43. package/dist/{chunk-ATREVNIN.cjs → chunk-JB25CCOB.cjs} +47 -47
  44. package/dist/{chunk-ATREVNIN.cjs.map → chunk-JB25CCOB.cjs.map} +1 -1
  45. package/dist/{chunk-Q25VYAEL.cjs → chunk-JISKS7RJ.cjs} +26 -26
  46. package/dist/{chunk-Q25VYAEL.cjs.map → chunk-JISKS7RJ.cjs.map} +1 -1
  47. package/dist/{chunk-WTYQCT4A.cjs → chunk-K5GSLGV2.cjs} +18 -18
  48. package/dist/{chunk-WTYQCT4A.cjs.map → chunk-K5GSLGV2.cjs.map} +1 -1
  49. package/dist/{chunk-CG7OWW7X.cjs → chunk-K5K2FRQK.cjs} +19 -19
  50. package/dist/{chunk-CG7OWW7X.cjs.map → chunk-K5K2FRQK.cjs.map} +1 -1
  51. package/dist/{chunk-CKUPANVU.cjs → chunk-KBSL4FCL.cjs} +9 -9
  52. package/dist/{chunk-CKUPANVU.cjs.map → chunk-KBSL4FCL.cjs.map} +1 -1
  53. package/dist/{chunk-SDORFSFK.cjs → chunk-KDUDL4PB.cjs} +37 -37
  54. package/dist/{chunk-SDORFSFK.cjs.map → chunk-KDUDL4PB.cjs.map} +1 -1
  55. package/dist/{chunk-5XPK2QGU.cjs → chunk-KJHIFF6H.cjs} +16 -16
  56. package/dist/{chunk-5XPK2QGU.cjs.map → chunk-KJHIFF6H.cjs.map} +1 -1
  57. package/dist/{chunk-MCNQKS6I.js → chunk-LHYOESIQ.js} +4 -4
  58. package/dist/{chunk-DUURFYGS.cjs → chunk-LPFU6U7O.cjs} +5 -5
  59. package/dist/{chunk-DUURFYGS.cjs.map → chunk-LPFU6U7O.cjs.map} +1 -1
  60. package/dist/{chunk-ZAV2F4VX.js → chunk-N7HFUBOV.js} +3 -3
  61. package/dist/{chunk-53O6PQ3F.cjs → chunk-NDLFK57D.cjs} +7 -7
  62. package/dist/{chunk-53O6PQ3F.cjs.map → chunk-NDLFK57D.cjs.map} +1 -1
  63. package/dist/{chunk-Z7QCNCBN.js → chunk-O4RDXDVS.js} +12 -12
  64. package/dist/{chunk-F6LXGP6S.cjs → chunk-Q2B2MGFU.cjs} +7 -7
  65. package/dist/{chunk-F6LXGP6S.cjs.map → chunk-Q2B2MGFU.cjs.map} +1 -1
  66. package/dist/{chunk-CKO6NKNE.js → chunk-QP54LMXJ.js} +38 -15
  67. package/dist/{chunk-CKO6NKNE.js.map → chunk-QP54LMXJ.js.map} +1 -1
  68. package/dist/{chunk-QRA2JXE4.cjs → chunk-RE6PGOSS.cjs} +6 -8
  69. package/dist/chunk-RE6PGOSS.cjs.map +1 -0
  70. package/dist/{chunk-C2SVJVEB.js → chunk-SH5GPYSV.js} +2 -2
  71. package/dist/{chunk-KQZMM3QJ.cjs → chunk-SJFB4Z4L.cjs} +105 -105
  72. package/dist/{chunk-KQZMM3QJ.cjs.map → chunk-SJFB4Z4L.cjs.map} +1 -1
  73. package/dist/{chunk-7EPGJOKN.js → chunk-TA3JJFEO.js} +4 -4
  74. package/dist/{chunk-LYJJH4D6.js → chunk-TBR3UTFY.js} +6 -6
  75. package/dist/{chunk-USKQURNF.cjs → chunk-TG3VBMDG.cjs} +3 -3
  76. package/dist/{chunk-USKQURNF.cjs.map → chunk-TG3VBMDG.cjs.map} +1 -1
  77. package/dist/{chunk-IQTQIBZ3.js → chunk-TV5SZJ3N.js} +12 -12
  78. package/dist/{chunk-RLNNV46K.js → chunk-TXSQLORA.js} +6 -6
  79. package/dist/{chunk-LYQULSK4.js → chunk-UCXZRJIE.js} +7 -7
  80. package/dist/{chunk-I27PWVWE.cjs → chunk-WT4HURQN.cjs} +46 -3
  81. package/dist/chunk-WT4HURQN.cjs.map +1 -0
  82. package/dist/{chunk-XAOAYDGR.js → chunk-WZJWIZVH.js} +4 -4
  83. package/dist/{chunk-PKZGXRU2.js → chunk-XKNKGBUX.js} +10 -8
  84. package/dist/{chunk-PKZGXRU2.js.map → chunk-XKNKGBUX.js.map} +1 -1
  85. package/dist/{chunk-LNKLB7GM.cjs → chunk-XNTQHC26.cjs} +28 -28
  86. package/dist/{chunk-LNKLB7GM.cjs.map → chunk-XNTQHC26.cjs.map} +1 -1
  87. package/dist/{chunk-2YVTGPM7.js → chunk-XZILGCXJ.js} +2 -2
  88. package/dist/{chunk-DKJDO7YM.cjs → chunk-Y5AFMYYN.cjs} +46 -44
  89. package/dist/chunk-Y5AFMYYN.cjs.map +1 -0
  90. package/dist/{chunk-FTK3S57R.cjs → chunk-ZCPMWXIB.cjs} +25 -25
  91. package/dist/{chunk-FTK3S57R.cjs.map → chunk-ZCPMWXIB.cjs.map} +1 -1
  92. package/dist/{chunk-RTKF5AYA.cjs → chunk-ZUGAHQDB.cjs} +7 -7
  93. package/dist/{chunk-RTKF5AYA.cjs.map → chunk-ZUGAHQDB.cjs.map} +1 -1
  94. package/dist/components/case-studies/index.cjs +21 -21
  95. package/dist/components/case-studies/index.js +8 -8
  96. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  97. package/dist/components/chat/chat-typing-indicator.d.ts.map +1 -1
  98. package/dist/components/chat/cycling-phrase.d.ts.map +1 -1
  99. package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
  100. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
  101. package/dist/components/chat/hooks/use-unified-chat.d.ts.map +1 -1
  102. package/dist/components/chat/index.cjs +5 -5
  103. package/dist/components/chat/index.js +4 -4
  104. package/dist/components/chat/stream/chat-dialog-store.d.ts.map +1 -1
  105. package/dist/components/chat/stream/chat-stream-reducer.d.ts +4 -0
  106. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -1
  107. package/dist/components/chat/types/component.types.d.ts +2 -0
  108. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  109. package/dist/components/chat/types/unified-chat-state.types.d.ts +5 -0
  110. package/dist/components/chat/types/unified-chat-state.types.d.ts.map +1 -1
  111. package/dist/components/contact/index.cjs +9 -9
  112. package/dist/components/contact/index.js +8 -8
  113. package/dist/components/docs/index.cjs +12 -12
  114. package/dist/components/docs/index.js +11 -11
  115. package/dist/components/embeds/index.cjs +9 -9
  116. package/dist/components/embeds/index.js +8 -8
  117. package/dist/components/faq/index.cjs +10 -10
  118. package/dist/components/faq/index.js +9 -9
  119. package/dist/components/features/index.cjs +8 -8
  120. package/dist/components/features/index.js +7 -7
  121. package/dist/components/help-center-pages/index.cjs +107 -107
  122. package/dist/components/help-center-pages/index.js +22 -22
  123. package/dist/components/index.cjs +69 -69
  124. package/dist/components/index.js +22 -22
  125. package/dist/components/meeting-scheduler/index.cjs +59 -59
  126. package/dist/components/meeting-scheduler/index.js +9 -9
  127. package/dist/components/navigation/app-layout-drawer.d.ts.map +1 -1
  128. package/dist/components/navigation/index.cjs +11 -11
  129. package/dist/components/navigation/index.js +10 -10
  130. package/dist/components/onboarding-guides/index.cjs +12 -12
  131. package/dist/components/onboarding-guides/index.js +11 -11
  132. package/dist/components/related-content/index.cjs +6 -6
  133. package/dist/components/related-content/index.js +5 -5
  134. package/dist/components/tickets/index.cjs +13 -13
  135. package/dist/components/tickets/index.js +12 -12
  136. package/dist/components/ui/index.cjs +8 -8
  137. package/dist/components/ui/index.js +7 -7
  138. package/dist/components/ui/markdown/engine.d.ts +0 -21
  139. package/dist/components/ui/markdown/engine.d.ts.map +1 -1
  140. package/dist/hooks/index.cjs +6 -6
  141. package/dist/hooks/index.cjs.map +1 -1
  142. package/dist/hooks/index.js +5 -5
  143. package/dist/hooks/use-authed-asset-src.d.ts.map +1 -1
  144. package/dist/index.cjs +15 -15
  145. package/dist/index.cjs.map +1 -1
  146. package/dist/index.js +12 -12
  147. package/dist/tailwind.config.cjs +14 -1
  148. package/dist/tailwind.config.cjs.map +1 -1
  149. package/dist/tailwind.config.js +14 -1
  150. package/dist/tailwind.config.js.map +1 -1
  151. package/eslint-config/README.md +13 -0
  152. package/eslint-config/base.js +15 -0
  153. package/eslint-config/webview-performance.js +75 -0
  154. package/package.json +1 -1
  155. package/src/chat-protocol/__tests__/progress.test.ts +39 -0
  156. package/src/chat-protocol/events.ts +3 -0
  157. package/src/chat-protocol/frames.ts +7 -0
  158. package/src/chat-protocol/index.ts +2 -0
  159. package/src/chat-protocol/leading-frames.ts +4 -1
  160. package/src/chat-protocol/progress.ts +55 -0
  161. package/src/components/chat/chat-message-enhanced.tsx +1 -1
  162. package/src/components/chat/chat-message-list.tsx +65 -15
  163. package/src/components/chat/chat-typing-indicator.tsx +18 -29
  164. package/src/components/chat/cycling-phrase.tsx +1 -11
  165. package/src/components/chat/embeddable-chat.tsx +14 -6
  166. package/src/components/chat/hooks/use-sse-chat-adapter.ts +2 -0
  167. package/src/components/chat/hooks/use-unified-chat.ts +1 -0
  168. package/src/components/chat/stream/__tests__/chat-stream-reducer-progress.test.ts +40 -0
  169. package/src/components/chat/stream/chat-dialog-store.ts +1 -0
  170. package/src/components/chat/stream/chat-stream-reducer.ts +13 -0
  171. package/src/components/chat/types/component.types.ts +2 -0
  172. package/src/components/chat/types/unified-chat-state.types.ts +6 -0
  173. package/src/components/navigation/app-layout-drawer.tsx +53 -7
  174. package/src/components/ui/__tests__/__snapshots__/markdown-parity.test.tsx.snap +29 -29
  175. package/src/components/ui/markdown/engine.tsx +56 -12
  176. package/src/hooks/use-authed-asset-src.ts +58 -6
  177. package/tailwind.config.ts +13 -0
  178. package/dist/chunk-DKJDO7YM.cjs.map +0 -1
  179. package/dist/chunk-EXWS2QSD.cjs.map +0 -1
  180. package/dist/chunk-GZRU2A4L.cjs.map +0 -1
  181. package/dist/chunk-I27PWVWE.cjs.map +0 -1
  182. package/dist/chunk-JUNOY5HK.js.map +0 -1
  183. package/dist/chunk-QRA2JXE4.cjs.map +0 -1
  184. package/dist/chunk-UVUNBXS6.js.map +0 -1
  185. package/dist/chunk-Y7ZEVTLC.js.map +0 -1
  186. /package/dist/{chunk-GDZ7IC5B.js.map → chunk-234IIQIS.js.map} +0 -0
  187. /package/dist/{chunk-X5XFKI6N.js.map → chunk-33L2IR62.js.map} +0 -0
  188. /package/dist/{chunk-A5NHAHV6.js.map → chunk-42LIHMRA.js.map} +0 -0
  189. /package/dist/{chunk-TEIHEFXP.js.map → chunk-6ZSDKDOV.js.map} +0 -0
  190. /package/dist/{chunk-TXFGG47A.js.map → chunk-7VO6NC67.js.map} +0 -0
  191. /package/dist/{chunk-SC44YJCF.js.map → chunk-A7RKT5SO.js.map} +0 -0
  192. /package/dist/{chunk-RK47E3PP.js.map → chunk-GWQCUC53.js.map} +0 -0
  193. /package/dist/{chunk-AVAZ6BD6.js.map → chunk-HBMGSGZY.js.map} +0 -0
  194. /package/dist/{chunk-HM7ZGABI.js.map → chunk-HEBLLLLD.js.map} +0 -0
  195. /package/dist/{chunk-MCNQKS6I.js.map → chunk-LHYOESIQ.js.map} +0 -0
  196. /package/dist/{chunk-ZAV2F4VX.js.map → chunk-N7HFUBOV.js.map} +0 -0
  197. /package/dist/{chunk-Z7QCNCBN.js.map → chunk-O4RDXDVS.js.map} +0 -0
  198. /package/dist/{chunk-C2SVJVEB.js.map → chunk-SH5GPYSV.js.map} +0 -0
  199. /package/dist/{chunk-7EPGJOKN.js.map → chunk-TA3JJFEO.js.map} +0 -0
  200. /package/dist/{chunk-LYJJH4D6.js.map → chunk-TBR3UTFY.js.map} +0 -0
  201. /package/dist/{chunk-IQTQIBZ3.js.map → chunk-TV5SZJ3N.js.map} +0 -0
  202. /package/dist/{chunk-RLNNV46K.js.map → chunk-TXSQLORA.js.map} +0 -0
  203. /package/dist/{chunk-LYQULSK4.js.map → chunk-UCXZRJIE.js.map} +0 -0
  204. /package/dist/{chunk-XAOAYDGR.js.map → chunk-WZJWIZVH.js.map} +0 -0
  205. /package/dist/{chunk-2YVTGPM7.js.map → chunk-XZILGCXJ.js.map} +0 -0
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  SoftwareInfo,
10
10
  SoftwareSourceBadge,
11
11
  ToolBadge
12
- } from "./chunk-LYJJH4D6.js";
12
+ } from "./chunk-TBR3UTFY.js";
13
13
  import {
14
14
  AppHeader,
15
15
  AppLayout,
@@ -29,14 +29,14 @@ import {
29
29
  SlidingSidebar,
30
30
  TicketAlertsButton,
31
31
  TopNavigation
32
- } from "./chunk-PKZGXRU2.js";
32
+ } from "./chunk-XKNKGBUX.js";
33
33
  import {
34
34
  MobileNavigationDropdown,
35
35
  MultiLevelNavigation,
36
36
  StickySectionNav,
37
37
  useSectionNavigation
38
- } from "./chunk-X5XFKI6N.js";
39
- import "./chunk-MCNQKS6I.js";
38
+ } from "./chunk-33L2IR62.js";
39
+ import "./chunk-LHYOESIQ.js";
40
40
  import {
41
41
  AIEnrichButton,
42
42
  AIEnrichSection,
@@ -633,7 +633,7 @@ import {
633
633
  withFirstTouchAttribution,
634
634
  withWalkthroughOpenParam,
635
635
  writeDismissCookie
636
- } from "./chunk-CKO6NKNE.js";
636
+ } from "./chunk-QP54LMXJ.js";
637
637
  import "./chunk-L2SLFCXP.js";
638
638
  import "./chunk-BJXDHKUX.js";
639
639
  import {
@@ -750,7 +750,7 @@ import {
750
750
  validateSchema,
751
751
  validateVariables,
752
752
  variablesToUrlParams
753
- } from "./chunk-XAOAYDGR.js";
753
+ } from "./chunk-WZJWIZVH.js";
754
754
  import "./chunk-JD5TKRCU.js";
755
755
  import {
756
756
  CONTENT_REF_GROUPS,
@@ -772,7 +772,7 @@ import {
772
772
  serializeSchemaParams,
773
773
  shouldIncludeInUrl,
774
774
  withQuery
775
- } from "./chunk-GDZ7IC5B.js";
775
+ } from "./chunk-234IIQIS.js";
776
776
  import {
777
777
  Checkbox
778
778
  } from "./chunk-HLCJPRXP.js";
@@ -1174,7 +1174,7 @@ import {
1174
1174
  useVideoOriginPreconnect,
1175
1175
  useVideoWarmup,
1176
1176
  usesCanonicalStatusStyle
1177
- } from "./chunk-Y7ZEVTLC.js";
1177
+ } from "./chunk-BW6YBATM.js";
1178
1178
  import {
1179
1179
  HEADING_EMOJI_RE,
1180
1180
  HUB_HEADER_OFFSET_PX,
@@ -1209,7 +1209,6 @@ import {
1209
1209
  useDebounce,
1210
1210
  useHeaderHeight,
1211
1211
  useIsTruncated,
1212
- useIsomorphicLayoutEffect,
1213
1212
  useLgUp,
1214
1213
  useMarqueeEngine,
1215
1214
  useMdUp,
@@ -1218,7 +1217,7 @@ import {
1218
1217
  useResetOnPageHidden,
1219
1218
  useSmUp,
1220
1219
  useSuppressCloneFocus
1221
- } from "./chunk-JUNOY5HK.js";
1220
+ } from "./chunk-2HX6AADM.js";
1222
1221
  import "./chunk-XXMHLZ3Y.js";
1223
1222
  import {
1224
1223
  AboutIcon,
@@ -1557,7 +1556,7 @@ import {
1557
1556
  urlPathLooksLikeSvg,
1558
1557
  useCoverImageFallback,
1559
1558
  webinarTiming
1560
- } from "./chunk-2YVTGPM7.js";
1559
+ } from "./chunk-XZILGCXJ.js";
1561
1560
  import "./chunk-MDKCTSDS.js";
1562
1561
  import {
1563
1562
  EMBED_PROXY_OPTIONAL_HEADERS,
@@ -1603,8 +1602,9 @@ import {
1603
1602
  useAuthedAssetSrc,
1604
1603
  useAuthedImageSrc,
1605
1604
  useImageEdgeColor,
1605
+ useIsomorphicLayoutEffect,
1606
1606
  useOgPlaceholderUrl
1607
- } from "./chunk-UVUNBXS6.js";
1607
+ } from "./chunk-7IINE3MK.js";
1608
1608
  import {
1609
1609
  FigmaIcon,
1610
1610
  ImageIcon,
@@ -475,12 +475,25 @@ var config = {
475
475
  "fade-in": {
476
476
  from: { opacity: "0" },
477
477
  to: { opacity: "1" }
478
+ },
479
+ // Chat streaming affordances. Defined here, not in an inline <style>
480
+ // the component renders: those tags were rewritten on every render,
481
+ // i.e. every streamed chunk, and each rewrite made WebKit restyle and
482
+ // relayout the whole document.
483
+ "cursor-blink": {
484
+ "50%": { opacity: "0" }
485
+ },
486
+ "dot-pulse": {
487
+ "0%, 80%, 100%": { transform: "scale(1)", opacity: "0.7" },
488
+ "40%": { transform: "scale(1.5)", opacity: "1" }
478
489
  }
479
490
  },
480
491
  animation: {
481
492
  "accordion-down": "accordion-down 0.2s ease-out",
482
493
  "accordion-up": "accordion-up 0.2s ease-out",
483
- "fade-in": "fade-in 0.3s ease-out"
494
+ "fade-in": "fade-in 0.3s ease-out",
495
+ "cursor-blink": "cursor-blink 1s steps(1) infinite",
496
+ "dot-pulse": "dot-pulse 1.4s ease-in-out infinite"
484
497
  }
485
498
  }
486
499
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/tailwindcss/lib/util/createPlugin.js","../node_modules/tailwindcss/lib/public/create-plugin.js","../node_modules/tailwindcss/plugin.js","../tailwind.config.ts"],"names":["plugin","config","tailwindcssAnimate","containerQueries"],"mappings":"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","file":"tailwind.config.cjs","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function() {\n return _default;\n }\n});\nfunction createPlugin(plugin, config) {\n return {\n handler: plugin,\n config\n };\n}\ncreatePlugin.withOptions = function(pluginFunction, configFunction = ()=>({})) {\n const optionsFunction = function(options) {\n return {\n __options: options,\n handler: pluginFunction(options),\n config: configFunction(options)\n };\n };\n optionsFunction.__isOptionsFunction = true;\n // Expose plugin dependencies so that `object-hash` returns a different\n // value if anything here changes, to ensure a rebuild is triggered.\n optionsFunction.__pluginFunction = pluginFunction;\n optionsFunction.__configFunction = configFunction;\n return optionsFunction;\n};\nconst _default = createPlugin;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function() {\n return _default;\n }\n});\nconst _createPlugin = /*#__PURE__*/ _interop_require_default(require(\"../util/createPlugin\"));\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nconst _default = _createPlugin.default;\n","let createPlugin = require('./lib/public/create-plugin')\nmodule.exports = (createPlugin.__esModule ? createPlugin : { default: createPlugin }).default\n","import containerQueries from '@tailwindcss/container-queries';\nimport type { Config } from 'tailwindcss';\nimport tailwindcssAnimate from 'tailwindcss-animate';\nimport plugin from 'tailwindcss/plugin';\n\nconst odsTypographyPlugin = plugin(({ addUtilities }) => {\n addUtilities({\n '.text-h1': {\n fontFamily: 'var(--font-h1-family)',\n fontWeight: 'var(--font-h1-weight)',\n fontSize: 'var(--font-size-h1-title)',\n lineHeight: 'var(--font-line-space-h1-main-title)',\n letterSpacing: '-0.02em',\n },\n '.text-h2': {\n fontFamily: 'var(--font-h2-family)',\n fontWeight: 'var(--font-h2-weight)',\n fontSize: 'var(--font-size-h2-sub-title)',\n lineHeight: 'var(--font-line-space-h2-sub-title)',\n letterSpacing: '-0.02em',\n },\n '.text-h3': {\n fontFamily: 'var(--font-h3-family)',\n fontWeight: 'var(--font-h3-weight)',\n fontSize: 'var(--font-size-h3-body)',\n lineHeight: 'var(--font-line-space-h3-body)',\n letterSpacing: '-0.02em',\n },\n '.text-h4': {\n fontFamily: 'var(--font-h4-family)',\n fontWeight: 'var(--font-h4-weight)',\n fontSize: 'var(--font-size-h4-body)',\n lineHeight: 'var(--font-line-space-h4-body)',\n },\n '.text-h5': {\n fontFamily: 'var(--font-h5-family)',\n fontWeight: 'var(--font-h5-weight)',\n fontSize: 'var(--font-size-h5-caption)',\n lineHeight: 'var(--font-line-space-h5-caption)',\n textTransform: 'uppercase',\n letterSpacing: '-0.02em',\n },\n '.text-h6': {\n fontFamily: 'var(--font-h6-family)',\n fontWeight: 'var(--font-h6-weight)',\n fontSize: 'var(--font-size-h6-caption)',\n lineHeight: 'var(--font-line-space-h6-caption)',\n },\n // Monospace body/code text (commands, ids, paths, code blocks): Azeret Mono\n // at the h6 responsive scale, no transform, neutral letter-spacing (unlike\n // text-h5's uppercase -0.02em label styling).\n '.text-code': {\n fontFamily: 'var(--font-family-heading)',\n fontWeight: 'var(--font-weight-medium)',\n fontSize: 'var(--font-size-h6-caption)',\n lineHeight: 'var(--font-line-space-h6-caption)',\n },\n // BRAND WORDMARKS ONLY — the platform name beside a logo in a header or\n // footer. Azeret Mono bold at the h5-caption scale, which is exactly what\n // every hand-written wordmark override spelled before this composite.\n '.text-wordmark': {\n fontFamily: 'var(--font-family-heading)',\n fontWeight: 'var(--font-weight-bold)',\n fontSize: 'var(--font-size-h5-caption)',\n lineHeight: 'var(--font-line-space-h5-caption)',\n textTransform: 'none',\n letterSpacing: '0',\n },\n // Badge / stamp SCALE — size only, deliberately NOT a composite: it\n // carries no family, weight or casing, so it composes with whatever the\n // badge already sets (h5 tokens on StatusBadge, DM Sans on Badge). Use it\n // for badges and chips instead of a raw `text-[10px]`; it is a component\n // token, not a step in the h1-h6 scale.\n '.text-badge': {\n fontSize: 'var(--font-size-badge)',\n lineHeight: 'var(--font-line-space-badge)',\n },\n });\n});\n\n/**\n * Make Tailwind opacity modifiers (`bg-ods-error/10`, `hover:bg-ods-accent/90`, …)\n * actually work on var()-based ODS tokens. Without `<alpha-value>` in the color\n * definition Tailwind v3 silently generates NOTHING for `ods-*\\/N` classes — the\n * element loses that declaration entirely. `color-mix` keeps un-suffixed classes\n * visually identical (a 100% mix is the color itself) while letting the modifier\n * scale the alpha.\n */\nconst withAlphaValue = (color: string) => `color-mix(in srgb, ${color} calc(<alpha-value> * 100%), transparent)`;\n\ntype ColorTree = { [key: string]: string | ColorTree };\nconst withAlphaSupport = (tree: ColorTree): ColorTree =>\n Object.fromEntries(\n Object.entries(tree).map(([key, value]) => [\n key,\n typeof value === 'string' ? withAlphaValue(value) : withAlphaSupport(value),\n ]),\n );\n\nconst config: Config = {\n content: ['./src/**/*.{js,ts,jsx,tsx}'],\n safelist: [\n // Dynamically generated classes for table hide/show functionality\n 'hidden',\n 'md:hidden',\n 'lg:hidden',\n 'md:flex',\n 'lg:flex',\n ],\n theme: {\n container: {\n center: true,\n padding: '2rem',\n screens: {\n '2xl': '1400px',\n },\n },\n extend: {\n colors: {\n // Shadcn/ui base colors (keep for compatibility)\n border: 'hsl(var(--border))',\n input: 'hsl(var(--input))',\n ring: 'hsl(var(--ring))',\n background: 'hsl(var(--background))',\n foreground: 'hsl(var(--foreground))',\n primary: {\n DEFAULT: 'hsl(var(--primary))',\n foreground: 'hsl(var(--primary-foreground))',\n },\n secondary: {\n DEFAULT: 'hsl(var(--secondary))',\n foreground: 'hsl(var(--secondary-foreground))',\n },\n destructive: {\n DEFAULT: 'hsl(var(--destructive))',\n foreground: 'hsl(var(--destructive-foreground))',\n },\n muted: {\n DEFAULT: 'hsl(var(--muted))',\n foreground: 'hsl(var(--muted-foreground))',\n },\n accent: {\n DEFAULT: 'hsl(var(--accent))',\n foreground: 'hsl(var(--accent-foreground))',\n },\n popover: {\n DEFAULT: 'hsl(var(--popover))',\n foreground: 'hsl(var(--popover-foreground))',\n },\n card: {\n DEFAULT: 'hsl(var(--card))',\n foreground: 'hsl(var(--card-foreground))',\n },\n\n // =================================================\n // ODS (Open Design System) COLORS\n // =================================================\n // Single nested structure: generates bg-ods-*, text-ods-*, border-ods-* utilities\n ods: withAlphaSupport({\n // Backgrounds\n bg: 'var(--color-bg)',\n card: 'var(--color-bg-card)',\n overlay: 'var(--color-bg-overlay)',\n skeleton: 'var(--color-bg-skeleton)',\n 'bg-hover': 'var(--color-bg-hover)',\n 'bg-active': 'var(--color-bg-active)',\n 'bg-surface': 'var(--color-bg-surface)',\n 'bg-surface-hover': 'var(--color-bg-surface-hover)',\n 'bg-surface-active': 'var(--color-bg-surface-active)',\n // Light surface on a dark UI — the semantic token existed with no utility.\n 'bg-inverted': 'var(--color-bg-inverted)',\n 'card-hover': 'var(--color-bg-hover)',\n divider: 'var(--color-divider)',\n\n // Borders\n border: {\n DEFAULT: 'var(--color-border-default)',\n hover: 'var(--color-border-hover)',\n active: 'var(--color-border-active)',\n focus: 'var(--color-border-focus)',\n },\n\n // Text\n text: {\n primary: 'var(--color-text-primary)',\n secondary: 'var(--color-text-secondary)',\n tertiary: 'var(--color-text-tertiary)',\n muted: 'var(--color-text-muted)',\n subtle: 'var(--color-text-subtle)',\n disabled: 'var(--color-text-disabled)',\n 'on-accent': 'var(--color-text-on-accent)',\n 'on-dark': 'var(--color-text-on-dark)',\n },\n\n // Accent\n accent: {\n DEFAULT: 'var(--color-accent-primary)',\n hover: 'var(--color-accent-hover)',\n active: 'var(--color-accent-active)',\n secondary: 'var(--color-accent-secondary)',\n 'secondary-hover': 'var(--color-accent-secondary-hover)',\n 'secondary-active': 'var(--color-accent-secondary-active)',\n focus: 'var(--color-accent-focus)',\n disabled: 'var(--color-accent-disabled)',\n },\n\n // Status\n success: {\n DEFAULT: 'var(--color-success)',\n hover: 'var(--color-success-hover)',\n active: 'var(--color-success-active)',\n secondary: 'var(--color-success-secondary)',\n 'secondary-hover': 'var(--color-success-secondary-hover)',\n 'secondary-active': 'var(--color-success-secondary-active)',\n },\n error: {\n DEFAULT: 'var(--color-error)',\n hover: 'var(--color-error-hover)',\n active: 'var(--color-error-active)',\n secondary: 'var(--color-error-secondary)',\n 'secondary-hover': 'var(--color-error-secondary-hover)',\n 'secondary-active': 'var(--color-error-secondary-active)',\n },\n warning: {\n DEFAULT: 'var(--color-warning)',\n hover: 'var(--color-warning-hover)',\n active: 'var(--color-warning-active)',\n secondary: 'var(--color-warning-secondary)',\n 'secondary-hover': 'var(--color-warning-secondary-hover)',\n 'secondary-active': 'var(--color-warning-secondary-active)',\n },\n info: {\n DEFAULT: 'var(--color-info)',\n hover: 'var(--color-info-hover)',\n active: 'var(--color-info-active)',\n },\n\n // Interactive states\n disabled: 'var(--color-disabled)',\n focus: 'var(--color-focus-ring)',\n 'focus-visible': 'var(--color-focus-visible)',\n\n // Links\n link: {\n DEFAULT: 'var(--color-link)',\n hover: 'var(--color-link-hover)',\n visited: 'var(--color-link-visited)',\n },\n\n // Brand colors (theme-independent)\n flamingo: {\n pink: {\n DEFAULT: 'var(--ods-flamingo-pink-base)',\n hover: 'var(--ods-flamingo-pink-hover)',\n secondary: 'var(--ods-flamingo-pink-secondary)',\n 'secondary-hover': 'var(--ods-flamingo-pink-secondary-hover)',\n 'secondary-active': 'var(--ods-flamingo-pink-secondary-action)',\n },\n cyan: {\n DEFAULT: 'var(--ods-flamingo-cyan-base)',\n hover: 'var(--ods-flamingo-cyan-hover)',\n secondary: 'var(--ods-flamingo-cyan-secondary)',\n 'secondary-hover': 'var(--ods-flamingo-cyan-secondary-hover)',\n 'secondary-active': 'var(--ods-flamingo-cyan-secondary-action)',\n },\n },\n 'open-yellow': {\n DEFAULT: 'var(--ods-open-yellow-base)',\n hover: 'var(--ods-open-yellow-hover)',\n action: 'var(--ods-open-yellow-action)',\n secondary: 'var(--ods-open-yellow-secondary)',\n 'secondary-hover': 'var(--ods-open-yellow-secondary-hover)',\n 'secondary-action': 'var(--ods-open-yellow-secondary-action)',\n light: 'var(--ods-open-yellow-light)',\n 'light-hover': 'var(--ods-open-yellow-light-hover)',\n 'light-action': 'var(--ods-open-yellow-light-action)',\n },\n\n // Attention tokens (ods-colors.css). Components reference these BY\n // NAME (error-state.tsx: `border-ods-attention-red-error` etc.) —\n // without these mappings Tailwind silently generates NOTHING for\n // the class and the component renders colorless in every consumer.\n attention: {\n 'red-error': 'var(--ods-attention-red-error)',\n 'red-error-hover': 'var(--ods-attention-red-error-hover)',\n 'red-error-action': 'var(--ods-attention-red-error-action)',\n 'red-error-secondary': 'var(--ods-attention-red-error-secondary)',\n 'red-error-secondary-hover': 'var(--ods-attention-red-error-secondary-hover)',\n 'red-error-secondary-action': 'var(--ods-attention-red-error-secondary-action)',\n 'yellow-warning': 'var(--ods-attention-yellow-warning)',\n 'yellow-warning-hover': 'var(--ods-attention-yellow-warning-hover)',\n 'yellow-warning-action': 'var(--ods-attention-yellow-warning-action)',\n 'yellow-warning-secondary': 'var(--ods-attention-yellow-warning-secondary)',\n 'yellow-warning-secondary-hover': 'var(--ods-attention-yellow-warning-secondary-hover)',\n 'yellow-warning-secondary-action': 'var(--ods-attention-yellow-warning-secondary-action)',\n 'green-success': 'var(--ods-attention-green-success)',\n 'green-success-hover': 'var(--ods-attention-green-success-hover)',\n 'green-success-action': 'var(--ods-attention-green-success-action)',\n 'green-success-secondary': 'var(--ods-attention-green-success-secondary)',\n 'green-success-secondary-hover': 'var(--ods-attention-green-success-secondary-hover)',\n 'green-success-secondary-action': 'var(--ods-attention-green-success-secondary-action)',\n },\n\n // Adaptive platform color\n current: 'var(--ods-current)',\n }),\n },\n // Custom breakpoints (aligned with ODS responsive tokens from Figma)\n screens: {\n md: '800px', // Tablet: 50rem\n lg: '1280px', // Desktop: 80rem\n xl: '1440px', // Large desktop: 90rem\n },\n\n borderRadius: {\n lg: 'var(--radius)', // 8px\n md: 'calc(var(--radius) - 2px)', // 6px\n sm: 'calc(var(--radius) - 4px)', // 4px\n xs: 'calc(var(--radius) - 6px)', // 2px\n },\n\n maxWidth: {\n 'ods-content-narrow': '600px',\n },\n\n fontFamily: {\n sans: ['var(--font-family-body)'],\n mono: ['var(--font-family-heading)'],\n body: ['var(--font-family-body)'],\n heading: ['var(--font-family-heading)'],\n },\n\n // =================================================\n // TYPOGRAPHY\n // =================================================\n fontSize: {\n // Responsive heading sizes (from ods-responsive-tokens.css)\n 'heading-1': ['var(--font-size-h1-title)', { lineHeight: 'var(--font-line-space-h1-main-title)' }],\n 'heading-2': ['var(--font-size-h2-sub-title)', { lineHeight: 'var(--font-line-space-h2-sub-title)' }],\n 'heading-3': ['var(--font-size-h3-body)', { lineHeight: 'var(--font-line-space-h3-body)' }],\n 'heading-4': ['var(--font-size-h4-body)', { lineHeight: 'var(--font-line-space-h4-body)' }],\n 'heading-5': ['var(--font-size-h5-caption)', { lineHeight: 'var(--font-line-space-h5-caption)' }],\n 'heading-6': ['var(--font-size-h6-caption)', { lineHeight: 'var(--font-line-space-h6-caption)' }],\n },\n\n // =================================================\n // SHADOWS\n // =================================================\n boxShadow: {\n card: 'var(--shadow-card)',\n 'card-hover': 'var(--shadow-card-hover)',\n modal: 'var(--shadow-modal)',\n dropdown: 'var(--shadow-dropdown)',\n tooltip: 'var(--shadow-tooltip)',\n focus: 'var(--shadow-focus)',\n accent: 'var(--shadow-accent)',\n 'accent-lg': 'var(--shadow-accent-lg)',\n },\n\n // =================================================\n // TRANSITIONS\n // =================================================\n transitionDuration: {\n fast: 'var(--duration-fast)',\n normal: 'var(--duration-normal)',\n slow: 'var(--duration-slow)',\n slower: 'var(--duration-slower)',\n },\n transitionTimingFunction: {\n bounce: 'var(--ease-bounce)',\n elastic: 'var(--ease-elastic)',\n },\n\n // =================================================\n // Z-INDEX\n // =================================================\n zIndex: {\n dropdown: 'var(--z-dropdown)',\n sticky: 'var(--z-sticky)',\n fixed: 'var(--z-fixed)',\n 'modal-backdrop': 'var(--z-modal-backdrop)',\n modal: 'var(--z-modal)',\n popover: 'var(--z-popover)',\n tooltip: 'var(--z-tooltip)',\n notification: 'var(--z-notification)',\n debug: 'var(--z-debug)',\n },\n\n // =================================================\n // ANIMATIONS\n // =================================================\n keyframes: {\n 'accordion-down': {\n from: { height: '0' },\n to: { height: 'var(--radix-accordion-content-height)' },\n },\n 'accordion-up': {\n from: { height: 'var(--radix-accordion-content-height)' },\n to: { height: '0' },\n },\n 'fade-in': {\n from: { opacity: '0' },\n to: { opacity: '1' },\n },\n },\n animation: {\n 'accordion-down': 'accordion-down 0.2s ease-out',\n 'accordion-up': 'accordion-up 0.2s ease-out',\n 'fade-in': 'fade-in 0.3s ease-out',\n },\n },\n },\n plugins: [tailwindcssAnimate, odsTypographyPlugin, containerQueries],\n};\n\nexport default config;\n"]}
1
+ {"version":3,"sources":["../node_modules/tailwindcss/lib/util/createPlugin.js","../node_modules/tailwindcss/lib/public/create-plugin.js","../node_modules/tailwindcss/plugin.js","../tailwind.config.ts"],"names":["plugin","config","tailwindcssAnimate","containerQueries"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,oBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,mDAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,CAAO,cAAA,CAAe,SAAS,YAAA,EAAc;AAAA,MACzC,KAAA,EAAO;AAAA,KACV,CAAA;AACD,IAAA,MAAA,CAAO,cAAA,CAAe,SAAS,SAAA,EAAW;AAAA,MACtC,UAAA,EAAY,IAAA;AAAA,MACZ,KAAK,WAAW;AACZ,QAAA,OAAO,QAAA;AAAA,MACX;AAAA,KACH,CAAA;AACD,IAAA,SAAS,YAAA,CAAaA,SAAQC,OAAAA,EAAQ;AAClC,MAAA,OAAO;AAAA,QACH,OAAA,EAASD,OAAAA;AAAA,QACT,MAAA,EAAAC;AAAA,OACJ;AAAA,IACJ;AACA,IAAA,YAAA,CAAa,cAAc,SAAS,cAAA,EAAgB,cAAA,GAAiB,OAAK,EAAC,CAAA,EAAI;AAC3E,MAAA,MAAM,eAAA,GAAkB,SAAS,OAAA,EAAS;AACtC,QAAA,OAAO;AAAA,UACH,SAAA,EAAW,OAAA;AAAA,UACX,OAAA,EAAS,eAAe,OAAO,CAAA;AAAA,UAC/B,MAAA,EAAQ,eAAe,OAAO;AAAA,SAClC;AAAA,MACJ,CAAA;AACA,MAAA,eAAA,CAAgB,mBAAA,GAAsB,IAAA;AAGtC,MAAA,eAAA,CAAgB,gBAAA,GAAmB,cAAA;AACnC,MAAA,eAAA,CAAgB,gBAAA,GAAmB,cAAA;AACnC,MAAA,OAAO,eAAA;AAAA,IACX,CAAA;AACA,IAAA,IAAM,QAAA,GAAW,YAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC/BjB,IAAA,qBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,sDAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,CAAO,cAAA,CAAe,SAAS,YAAA,EAAc;AAAA,MACzC,KAAA,EAAO;AAAA,KACV,CAAA;AACD,IAAA,MAAA,CAAO,cAAA,CAAe,SAAS,SAAA,EAAW;AAAA,MACtC,UAAA,EAAY,IAAA;AAAA,MACZ,KAAK,WAAW;AACZ,QAAA,OAAO,QAAA;AAAA,MACX;AAAA,KACH,CAAA;AACD,IAAA,IAAM,aAAA,4CAAuD,oBAAA,EAA+B,CAAA;AAC5F,IAAA,SAAS,yBAAyB,GAAA,EAAK;AACnC,MAAA,OAAO,GAAA,IAAO,GAAA,CAAI,UAAA,GAAa,GAAA,GAAM;AAAA,QACjC,OAAA,EAAS;AAAA,OACb;AAAA,IACJ;AACA,IAAA,IAAM,WAAW,aAAA,CAAc,OAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AChB/B,IAAA,cAAA,GAAA,UAAA,CAAA;AAAA,EAAA,oCAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAAA,IAAA,IAAI,YAAA,GAAe,qBAAA,EAAA;AACnB,IAAA,MAAA,CAAO,WAAW,YAAA,CAAa,UAAA,GAAa,eAAe,EAAE,OAAA,EAAS,cAAa,EAAG,OAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACEtF,IAAA,aAAA,GAAmB,OAAA,CAAA,cAAA,EAAA,CAAA;AAEnB,IAAM,0BAAsB,aAAA,CAAAD,OAAAA,EAAO,CAAC,EAAE,cAAa,KAAM;AACvD,EAAA,YAAA,CAAa;AAAA,IACX,UAAA,EAAY;AAAA,MACV,UAAA,EAAY,uBAAA;AAAA,MACZ,UAAA,EAAY,uBAAA;AAAA,MACZ,QAAA,EAAU,2BAAA;AAAA,MACV,UAAA,EAAY,sCAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,UAAA,EAAY;AAAA,MACV,UAAA,EAAY,uBAAA;AAAA,MACZ,UAAA,EAAY,uBAAA;AAAA,MACZ,QAAA,EAAU,+BAAA;AAAA,MACV,UAAA,EAAY,qCAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,UAAA,EAAY;AAAA,MACV,UAAA,EAAY,uBAAA;AAAA,MACZ,UAAA,EAAY,uBAAA;AAAA,MACZ,QAAA,EAAU,0BAAA;AAAA,MACV,UAAA,EAAY,gCAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,UAAA,EAAY;AAAA,MACV,UAAA,EAAY,uBAAA;AAAA,MACZ,UAAA,EAAY,uBAAA;AAAA,MACZ,QAAA,EAAU,0BAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,UAAA,EAAY;AAAA,MACV,UAAA,EAAY,uBAAA;AAAA,MACZ,UAAA,EAAY,uBAAA;AAAA,MACZ,QAAA,EAAU,6BAAA;AAAA,MACV,UAAA,EAAY,mCAAA;AAAA,MACZ,aAAA,EAAe,WAAA;AAAA,MACf,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,UAAA,EAAY;AAAA,MACV,UAAA,EAAY,uBAAA;AAAA,MACZ,UAAA,EAAY,uBAAA;AAAA,MACZ,QAAA,EAAU,6BAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA;AAAA;AAAA;AAAA,IAIA,YAAA,EAAc;AAAA,MACZ,UAAA,EAAY,4BAAA;AAAA,MACZ,UAAA,EAAY,2BAAA;AAAA,MACZ,QAAA,EAAU,6BAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA;AAAA;AAAA;AAAA,IAIA,gBAAA,EAAkB;AAAA,MAChB,UAAA,EAAY,4BAAA;AAAA,MACZ,UAAA,EAAY,yBAAA;AAAA,MACZ,QAAA,EAAU,6BAAA;AAAA,MACV,UAAA,EAAY,mCAAA;AAAA,MACZ,aAAA,EAAe,MAAA;AAAA,MACf,aAAA,EAAe;AAAA,KACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,aAAA,EAAe;AAAA,MACb,QAAA,EAAU,wBAAA;AAAA,MACV,UAAA,EAAY;AAAA;AACd,GACD,CAAA;AACH,CAAC,CAAA;AAUD,IAAM,cAAA,GAAiB,CAAC,KAAA,KAAkB,CAAA,mBAAA,EAAsB,KAAK,CAAA,yCAAA,CAAA;AAGrE,IAAM,gBAAA,GAAmB,CAAC,IAAA,KACxB,MAAA,CAAO,WAAA;AAAA,EACL,MAAA,CAAO,QAAQ,IAAI,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAAA,IACzC,GAAA;AAAA,IACA,OAAO,KAAA,KAAU,QAAA,GAAW,eAAe,KAAK,CAAA,GAAI,iBAAiB,KAAK;AAAA,GAC3E;AACH,CAAA;AAEF,IAAM,MAAA,GAAiB;AAAA,EACrB,OAAA,EAAS,CAAC,4BAA4B,CAAA;AAAA,EACtC,QAAA,EAAU;AAAA;AAAA,IAER,QAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,SAAA,EAAW;AAAA,MACT,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAS,MAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ;AAAA;AAAA,QAEN,MAAA,EAAQ,oBAAA;AAAA,QACR,KAAA,EAAO,mBAAA;AAAA,QACP,IAAA,EAAM,kBAAA;AAAA,QACN,UAAA,EAAY,wBAAA;AAAA,QACZ,UAAA,EAAY,wBAAA;AAAA,QACZ,OAAA,EAAS;AAAA,UACP,OAAA,EAAS,qBAAA;AAAA,UACT,UAAA,EAAY;AAAA,SACd;AAAA,QACA,SAAA,EAAW;AAAA,UACT,OAAA,EAAS,uBAAA;AAAA,UACT,UAAA,EAAY;AAAA,SACd;AAAA,QACA,WAAA,EAAa;AAAA,UACX,OAAA,EAAS,yBAAA;AAAA,UACT,UAAA,EAAY;AAAA,SACd;AAAA,QACA,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,mBAAA;AAAA,UACT,UAAA,EAAY;AAAA,SACd;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,oBAAA;AAAA,UACT,UAAA,EAAY;AAAA,SACd;AAAA,QACA,OAAA,EAAS;AAAA,UACP,OAAA,EAAS,qBAAA;AAAA,UACT,UAAA,EAAY;AAAA,SACd;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,OAAA,EAAS,kBAAA;AAAA,UACT,UAAA,EAAY;AAAA,SACd;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,KAAK,gBAAA,CAAiB;AAAA;AAAA,UAEpB,EAAA,EAAI,iBAAA;AAAA,UACJ,IAAA,EAAM,sBAAA;AAAA,UACN,OAAA,EAAS,yBAAA;AAAA,UACT,QAAA,EAAU,0BAAA;AAAA,UACV,UAAA,EAAY,uBAAA;AAAA,UACZ,WAAA,EAAa,wBAAA;AAAA,UACb,YAAA,EAAc,yBAAA;AAAA,UACd,kBAAA,EAAoB,+BAAA;AAAA,UACpB,mBAAA,EAAqB,gCAAA;AAAA;AAAA,UAErB,aAAA,EAAe,0BAAA;AAAA,UACf,YAAA,EAAc,uBAAA;AAAA,UACd,OAAA,EAAS,sBAAA;AAAA;AAAA,UAGT,MAAA,EAAQ;AAAA,YACN,OAAA,EAAS,6BAAA;AAAA,YACT,KAAA,EAAO,2BAAA;AAAA,YACP,MAAA,EAAQ,4BAAA;AAAA,YACR,KAAA,EAAO;AAAA,WACT;AAAA;AAAA,UAGA,IAAA,EAAM;AAAA,YACJ,OAAA,EAAS,2BAAA;AAAA,YACT,SAAA,EAAW,6BAAA;AAAA,YACX,QAAA,EAAU,4BAAA;AAAA,YACV,KAAA,EAAO,yBAAA;AAAA,YACP,MAAA,EAAQ,0BAAA;AAAA,YACR,QAAA,EAAU,4BAAA;AAAA,YACV,WAAA,EAAa,6BAAA;AAAA,YACb,SAAA,EAAW;AAAA,WACb;AAAA;AAAA,UAGA,MAAA,EAAQ;AAAA,YACN,OAAA,EAAS,6BAAA;AAAA,YACT,KAAA,EAAO,2BAAA;AAAA,YACP,MAAA,EAAQ,4BAAA;AAAA,YACR,SAAA,EAAW,+BAAA;AAAA,YACX,iBAAA,EAAmB,qCAAA;AAAA,YACnB,kBAAA,EAAoB,sCAAA;AAAA,YACpB,KAAA,EAAO,2BAAA;AAAA,YACP,QAAA,EAAU;AAAA,WACZ;AAAA;AAAA,UAGA,OAAA,EAAS;AAAA,YACP,OAAA,EAAS,sBAAA;AAAA,YACT,KAAA,EAAO,4BAAA;AAAA,YACP,MAAA,EAAQ,6BAAA;AAAA,YACR,SAAA,EAAW,gCAAA;AAAA,YACX,iBAAA,EAAmB,sCAAA;AAAA,YACnB,kBAAA,EAAoB;AAAA,WACtB;AAAA,UACA,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,oBAAA;AAAA,YACT,KAAA,EAAO,0BAAA;AAAA,YACP,MAAA,EAAQ,2BAAA;AAAA,YACR,SAAA,EAAW,8BAAA;AAAA,YACX,iBAAA,EAAmB,oCAAA;AAAA,YACnB,kBAAA,EAAoB;AAAA,WACtB;AAAA,UACA,OAAA,EAAS;AAAA,YACP,OAAA,EAAS,sBAAA;AAAA,YACT,KAAA,EAAO,4BAAA;AAAA,YACP,MAAA,EAAQ,6BAAA;AAAA,YACR,SAAA,EAAW,gCAAA;AAAA,YACX,iBAAA,EAAmB,sCAAA;AAAA,YACnB,kBAAA,EAAoB;AAAA,WACtB;AAAA,UACA,IAAA,EAAM;AAAA,YACJ,OAAA,EAAS,mBAAA;AAAA,YACT,KAAA,EAAO,yBAAA;AAAA,YACP,MAAA,EAAQ;AAAA,WACV;AAAA;AAAA,UAGA,QAAA,EAAU,uBAAA;AAAA,UACV,KAAA,EAAO,yBAAA;AAAA,UACP,eAAA,EAAiB,4BAAA;AAAA;AAAA,UAGjB,IAAA,EAAM;AAAA,YACJ,OAAA,EAAS,mBAAA;AAAA,YACT,KAAA,EAAO,yBAAA;AAAA,YACP,OAAA,EAAS;AAAA,WACX;AAAA;AAAA,UAGA,QAAA,EAAU;AAAA,YACR,IAAA,EAAM;AAAA,cACJ,OAAA,EAAS,+BAAA;AAAA,cACT,KAAA,EAAO,gCAAA;AAAA,cACP,SAAA,EAAW,oCAAA;AAAA,cACX,iBAAA,EAAmB,0CAAA;AAAA,cACnB,kBAAA,EAAoB;AAAA,aACtB;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,OAAA,EAAS,+BAAA;AAAA,cACT,KAAA,EAAO,gCAAA;AAAA,cACP,SAAA,EAAW,oCAAA;AAAA,cACX,iBAAA,EAAmB,0CAAA;AAAA,cACnB,kBAAA,EAAoB;AAAA;AACtB,WACF;AAAA,UACA,aAAA,EAAe;AAAA,YACb,OAAA,EAAS,6BAAA;AAAA,YACT,KAAA,EAAO,8BAAA;AAAA,YACP,MAAA,EAAQ,+BAAA;AAAA,YACR,SAAA,EAAW,kCAAA;AAAA,YACX,iBAAA,EAAmB,wCAAA;AAAA,YACnB,kBAAA,EAAoB,yCAAA;AAAA,YACpB,KAAA,EAAO,8BAAA;AAAA,YACP,aAAA,EAAe,oCAAA;AAAA,YACf,cAAA,EAAgB;AAAA,WAClB;AAAA;AAAA;AAAA;AAAA;AAAA,UAMA,SAAA,EAAW;AAAA,YACT,WAAA,EAAa,gCAAA;AAAA,YACb,iBAAA,EAAmB,sCAAA;AAAA,YACnB,kBAAA,EAAoB,uCAAA;AAAA,YACpB,qBAAA,EAAuB,0CAAA;AAAA,YACvB,2BAAA,EAA6B,gDAAA;AAAA,YAC7B,4BAAA,EAA8B,iDAAA;AAAA,YAC9B,gBAAA,EAAkB,qCAAA;AAAA,YAClB,sBAAA,EAAwB,2CAAA;AAAA,YACxB,uBAAA,EAAyB,4CAAA;AAAA,YACzB,0BAAA,EAA4B,+CAAA;AAAA,YAC5B,gCAAA,EAAkC,qDAAA;AAAA,YAClC,iCAAA,EAAmC,sDAAA;AAAA,YACnC,eAAA,EAAiB,oCAAA;AAAA,YACjB,qBAAA,EAAuB,0CAAA;AAAA,YACvB,sBAAA,EAAwB,2CAAA;AAAA,YACxB,yBAAA,EAA2B,8CAAA;AAAA,YAC3B,+BAAA,EAAiC,oDAAA;AAAA,YACjC,gCAAA,EAAkC;AAAA,WACpC;AAAA;AAAA,UAGA,OAAA,EAAS;AAAA,SACV;AAAA,OACH;AAAA;AAAA,MAEA,OAAA,EAAS;AAAA,QACP,EAAA,EAAI,OAAA;AAAA;AAAA,QACJ,EAAA,EAAI,QAAA;AAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AAAA,OACN;AAAA,MAEA,YAAA,EAAc;AAAA,QACZ,EAAA,EAAI,eAAA;AAAA;AAAA,QACJ,EAAA,EAAI,2BAAA;AAAA;AAAA,QACJ,EAAA,EAAI,2BAAA;AAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AAAA,OACN;AAAA,MAEA,QAAA,EAAU;AAAA,QACR,oBAAA,EAAsB;AAAA,OACxB;AAAA,MAEA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,CAAC,yBAAyB,CAAA;AAAA,QAChC,IAAA,EAAM,CAAC,4BAA4B,CAAA;AAAA,QACnC,IAAA,EAAM,CAAC,yBAAyB,CAAA;AAAA,QAChC,OAAA,EAAS,CAAC,4BAA4B;AAAA,OACxC;AAAA;AAAA;AAAA;AAAA,MAKA,QAAA,EAAU;AAAA;AAAA,QAER,aAAa,CAAC,2BAAA,EAA6B,EAAE,UAAA,EAAY,wCAAwC,CAAA;AAAA,QACjG,aAAa,CAAC,+BAAA,EAAiC,EAAE,UAAA,EAAY,uCAAuC,CAAA;AAAA,QACpG,aAAa,CAAC,0BAAA,EAA4B,EAAE,UAAA,EAAY,kCAAkC,CAAA;AAAA,QAC1F,aAAa,CAAC,0BAAA,EAA4B,EAAE,UAAA,EAAY,kCAAkC,CAAA;AAAA,QAC1F,aAAa,CAAC,6BAAA,EAA+B,EAAE,UAAA,EAAY,qCAAqC,CAAA;AAAA,QAChG,aAAa,CAAC,6BAAA,EAA+B,EAAE,UAAA,EAAY,qCAAqC;AAAA,OAClG;AAAA;AAAA;AAAA;AAAA,MAKA,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,oBAAA;AAAA,QACN,YAAA,EAAc,0BAAA;AAAA,QACd,KAAA,EAAO,qBAAA;AAAA,QACP,QAAA,EAAU,wBAAA;AAAA,QACV,OAAA,EAAS,uBAAA;AAAA,QACT,KAAA,EAAO,qBAAA;AAAA,QACP,MAAA,EAAQ,sBAAA;AAAA,QACR,WAAA,EAAa;AAAA,OACf;AAAA;AAAA;AAAA;AAAA,MAKA,kBAAA,EAAoB;AAAA,QAClB,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,wBAAA,EAA0B;AAAA,QACxB,MAAA,EAAQ,oBAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACX;AAAA;AAAA;AAAA;AAAA,MAKA,MAAA,EAAQ;AAAA,QACN,QAAA,EAAU,mBAAA;AAAA,QACV,MAAA,EAAQ,iBAAA;AAAA,QACR,KAAA,EAAO,gBAAA;AAAA,QACP,gBAAA,EAAkB,yBAAA;AAAA,QAClB,KAAA,EAAO,gBAAA;AAAA,QACP,OAAA,EAAS,kBAAA;AAAA,QACT,OAAA,EAAS,kBAAA;AAAA,QACT,YAAA,EAAc,uBAAA;AAAA,QACd,KAAA,EAAO;AAAA,OACT;AAAA;AAAA;AAAA;AAAA,MAKA,SAAA,EAAW;AAAA,QACT,gBAAA,EAAkB;AAAA,UAChB,IAAA,EAAM,EAAE,MAAA,EAAQ,GAAA,EAAI;AAAA,UACpB,EAAA,EAAI,EAAE,MAAA,EAAQ,uCAAA;AAAwC,SACxD;AAAA,QACA,cAAA,EAAgB;AAAA,UACd,IAAA,EAAM,EAAE,MAAA,EAAQ,uCAAA,EAAwC;AAAA,UACxD,EAAA,EAAI,EAAE,MAAA,EAAQ,GAAA;AAAI,SACpB;AAAA,QACA,SAAA,EAAW;AAAA,UACT,IAAA,EAAM,EAAE,OAAA,EAAS,GAAA,EAAI;AAAA,UACrB,EAAA,EAAI,EAAE,OAAA,EAAS,GAAA;AAAI,SACrB;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,cAAA,EAAgB;AAAA,UACd,KAAA,EAAO,EAAE,OAAA,EAAS,GAAA;AAAI,SACxB;AAAA,QACA,WAAA,EAAa;AAAA,UACX,eAAA,EAAiB,EAAE,SAAA,EAAW,UAAA,EAAY,SAAS,KAAA,EAAM;AAAA,UACzD,KAAA,EAAO,EAAE,SAAA,EAAW,YAAA,EAAc,SAAS,GAAA;AAAI;AACjD,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,gBAAA,EAAkB,8BAAA;AAAA,QAClB,cAAA,EAAgB,4BAAA;AAAA,QAChB,SAAA,EAAW,uBAAA;AAAA,QACX,cAAA,EAAgB,mCAAA;AAAA,QAChB,WAAA,EAAa;AAAA;AACf;AACF,GACF;AAAA,EACA,OAAA,EAAS,CAACE,mCAAA,EAAoB,mBAAA,EAAqBC,iCAAgB;AACrE,CAAA;AAEA,IAAO,uBAAA,GAAQ","file":"tailwind.config.cjs","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function() {\n return _default;\n }\n});\nfunction createPlugin(plugin, config) {\n return {\n handler: plugin,\n config\n };\n}\ncreatePlugin.withOptions = function(pluginFunction, configFunction = ()=>({})) {\n const optionsFunction = function(options) {\n return {\n __options: options,\n handler: pluginFunction(options),\n config: configFunction(options)\n };\n };\n optionsFunction.__isOptionsFunction = true;\n // Expose plugin dependencies so that `object-hash` returns a different\n // value if anything here changes, to ensure a rebuild is triggered.\n optionsFunction.__pluginFunction = pluginFunction;\n optionsFunction.__configFunction = configFunction;\n return optionsFunction;\n};\nconst _default = createPlugin;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function() {\n return _default;\n }\n});\nconst _createPlugin = /*#__PURE__*/ _interop_require_default(require(\"../util/createPlugin\"));\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nconst _default = _createPlugin.default;\n","let createPlugin = require('./lib/public/create-plugin')\nmodule.exports = (createPlugin.__esModule ? createPlugin : { default: createPlugin }).default\n","import containerQueries from '@tailwindcss/container-queries';\nimport type { Config } from 'tailwindcss';\nimport tailwindcssAnimate from 'tailwindcss-animate';\nimport plugin from 'tailwindcss/plugin';\n\nconst odsTypographyPlugin = plugin(({ addUtilities }) => {\n addUtilities({\n '.text-h1': {\n fontFamily: 'var(--font-h1-family)',\n fontWeight: 'var(--font-h1-weight)',\n fontSize: 'var(--font-size-h1-title)',\n lineHeight: 'var(--font-line-space-h1-main-title)',\n letterSpacing: '-0.02em',\n },\n '.text-h2': {\n fontFamily: 'var(--font-h2-family)',\n fontWeight: 'var(--font-h2-weight)',\n fontSize: 'var(--font-size-h2-sub-title)',\n lineHeight: 'var(--font-line-space-h2-sub-title)',\n letterSpacing: '-0.02em',\n },\n '.text-h3': {\n fontFamily: 'var(--font-h3-family)',\n fontWeight: 'var(--font-h3-weight)',\n fontSize: 'var(--font-size-h3-body)',\n lineHeight: 'var(--font-line-space-h3-body)',\n letterSpacing: '-0.02em',\n },\n '.text-h4': {\n fontFamily: 'var(--font-h4-family)',\n fontWeight: 'var(--font-h4-weight)',\n fontSize: 'var(--font-size-h4-body)',\n lineHeight: 'var(--font-line-space-h4-body)',\n },\n '.text-h5': {\n fontFamily: 'var(--font-h5-family)',\n fontWeight: 'var(--font-h5-weight)',\n fontSize: 'var(--font-size-h5-caption)',\n lineHeight: 'var(--font-line-space-h5-caption)',\n textTransform: 'uppercase',\n letterSpacing: '-0.02em',\n },\n '.text-h6': {\n fontFamily: 'var(--font-h6-family)',\n fontWeight: 'var(--font-h6-weight)',\n fontSize: 'var(--font-size-h6-caption)',\n lineHeight: 'var(--font-line-space-h6-caption)',\n },\n // Monospace body/code text (commands, ids, paths, code blocks): Azeret Mono\n // at the h6 responsive scale, no transform, neutral letter-spacing (unlike\n // text-h5's uppercase -0.02em label styling).\n '.text-code': {\n fontFamily: 'var(--font-family-heading)',\n fontWeight: 'var(--font-weight-medium)',\n fontSize: 'var(--font-size-h6-caption)',\n lineHeight: 'var(--font-line-space-h6-caption)',\n },\n // BRAND WORDMARKS ONLY — the platform name beside a logo in a header or\n // footer. Azeret Mono bold at the h5-caption scale, which is exactly what\n // every hand-written wordmark override spelled before this composite.\n '.text-wordmark': {\n fontFamily: 'var(--font-family-heading)',\n fontWeight: 'var(--font-weight-bold)',\n fontSize: 'var(--font-size-h5-caption)',\n lineHeight: 'var(--font-line-space-h5-caption)',\n textTransform: 'none',\n letterSpacing: '0',\n },\n // Badge / stamp SCALE — size only, deliberately NOT a composite: it\n // carries no family, weight or casing, so it composes with whatever the\n // badge already sets (h5 tokens on StatusBadge, DM Sans on Badge). Use it\n // for badges and chips instead of a raw `text-[10px]`; it is a component\n // token, not a step in the h1-h6 scale.\n '.text-badge': {\n fontSize: 'var(--font-size-badge)',\n lineHeight: 'var(--font-line-space-badge)',\n },\n });\n});\n\n/**\n * Make Tailwind opacity modifiers (`bg-ods-error/10`, `hover:bg-ods-accent/90`, …)\n * actually work on var()-based ODS tokens. Without `<alpha-value>` in the color\n * definition Tailwind v3 silently generates NOTHING for `ods-*\\/N` classes — the\n * element loses that declaration entirely. `color-mix` keeps un-suffixed classes\n * visually identical (a 100% mix is the color itself) while letting the modifier\n * scale the alpha.\n */\nconst withAlphaValue = (color: string) => `color-mix(in srgb, ${color} calc(<alpha-value> * 100%), transparent)`;\n\ntype ColorTree = { [key: string]: string | ColorTree };\nconst withAlphaSupport = (tree: ColorTree): ColorTree =>\n Object.fromEntries(\n Object.entries(tree).map(([key, value]) => [\n key,\n typeof value === 'string' ? withAlphaValue(value) : withAlphaSupport(value),\n ]),\n );\n\nconst config: Config = {\n content: ['./src/**/*.{js,ts,jsx,tsx}'],\n safelist: [\n // Dynamically generated classes for table hide/show functionality\n 'hidden',\n 'md:hidden',\n 'lg:hidden',\n 'md:flex',\n 'lg:flex',\n ],\n theme: {\n container: {\n center: true,\n padding: '2rem',\n screens: {\n '2xl': '1400px',\n },\n },\n extend: {\n colors: {\n // Shadcn/ui base colors (keep for compatibility)\n border: 'hsl(var(--border))',\n input: 'hsl(var(--input))',\n ring: 'hsl(var(--ring))',\n background: 'hsl(var(--background))',\n foreground: 'hsl(var(--foreground))',\n primary: {\n DEFAULT: 'hsl(var(--primary))',\n foreground: 'hsl(var(--primary-foreground))',\n },\n secondary: {\n DEFAULT: 'hsl(var(--secondary))',\n foreground: 'hsl(var(--secondary-foreground))',\n },\n destructive: {\n DEFAULT: 'hsl(var(--destructive))',\n foreground: 'hsl(var(--destructive-foreground))',\n },\n muted: {\n DEFAULT: 'hsl(var(--muted))',\n foreground: 'hsl(var(--muted-foreground))',\n },\n accent: {\n DEFAULT: 'hsl(var(--accent))',\n foreground: 'hsl(var(--accent-foreground))',\n },\n popover: {\n DEFAULT: 'hsl(var(--popover))',\n foreground: 'hsl(var(--popover-foreground))',\n },\n card: {\n DEFAULT: 'hsl(var(--card))',\n foreground: 'hsl(var(--card-foreground))',\n },\n\n // =================================================\n // ODS (Open Design System) COLORS\n // =================================================\n // Single nested structure: generates bg-ods-*, text-ods-*, border-ods-* utilities\n ods: withAlphaSupport({\n // Backgrounds\n bg: 'var(--color-bg)',\n card: 'var(--color-bg-card)',\n overlay: 'var(--color-bg-overlay)',\n skeleton: 'var(--color-bg-skeleton)',\n 'bg-hover': 'var(--color-bg-hover)',\n 'bg-active': 'var(--color-bg-active)',\n 'bg-surface': 'var(--color-bg-surface)',\n 'bg-surface-hover': 'var(--color-bg-surface-hover)',\n 'bg-surface-active': 'var(--color-bg-surface-active)',\n // Light surface on a dark UI — the semantic token existed with no utility.\n 'bg-inverted': 'var(--color-bg-inverted)',\n 'card-hover': 'var(--color-bg-hover)',\n divider: 'var(--color-divider)',\n\n // Borders\n border: {\n DEFAULT: 'var(--color-border-default)',\n hover: 'var(--color-border-hover)',\n active: 'var(--color-border-active)',\n focus: 'var(--color-border-focus)',\n },\n\n // Text\n text: {\n primary: 'var(--color-text-primary)',\n secondary: 'var(--color-text-secondary)',\n tertiary: 'var(--color-text-tertiary)',\n muted: 'var(--color-text-muted)',\n subtle: 'var(--color-text-subtle)',\n disabled: 'var(--color-text-disabled)',\n 'on-accent': 'var(--color-text-on-accent)',\n 'on-dark': 'var(--color-text-on-dark)',\n },\n\n // Accent\n accent: {\n DEFAULT: 'var(--color-accent-primary)',\n hover: 'var(--color-accent-hover)',\n active: 'var(--color-accent-active)',\n secondary: 'var(--color-accent-secondary)',\n 'secondary-hover': 'var(--color-accent-secondary-hover)',\n 'secondary-active': 'var(--color-accent-secondary-active)',\n focus: 'var(--color-accent-focus)',\n disabled: 'var(--color-accent-disabled)',\n },\n\n // Status\n success: {\n DEFAULT: 'var(--color-success)',\n hover: 'var(--color-success-hover)',\n active: 'var(--color-success-active)',\n secondary: 'var(--color-success-secondary)',\n 'secondary-hover': 'var(--color-success-secondary-hover)',\n 'secondary-active': 'var(--color-success-secondary-active)',\n },\n error: {\n DEFAULT: 'var(--color-error)',\n hover: 'var(--color-error-hover)',\n active: 'var(--color-error-active)',\n secondary: 'var(--color-error-secondary)',\n 'secondary-hover': 'var(--color-error-secondary-hover)',\n 'secondary-active': 'var(--color-error-secondary-active)',\n },\n warning: {\n DEFAULT: 'var(--color-warning)',\n hover: 'var(--color-warning-hover)',\n active: 'var(--color-warning-active)',\n secondary: 'var(--color-warning-secondary)',\n 'secondary-hover': 'var(--color-warning-secondary-hover)',\n 'secondary-active': 'var(--color-warning-secondary-active)',\n },\n info: {\n DEFAULT: 'var(--color-info)',\n hover: 'var(--color-info-hover)',\n active: 'var(--color-info-active)',\n },\n\n // Interactive states\n disabled: 'var(--color-disabled)',\n focus: 'var(--color-focus-ring)',\n 'focus-visible': 'var(--color-focus-visible)',\n\n // Links\n link: {\n DEFAULT: 'var(--color-link)',\n hover: 'var(--color-link-hover)',\n visited: 'var(--color-link-visited)',\n },\n\n // Brand colors (theme-independent)\n flamingo: {\n pink: {\n DEFAULT: 'var(--ods-flamingo-pink-base)',\n hover: 'var(--ods-flamingo-pink-hover)',\n secondary: 'var(--ods-flamingo-pink-secondary)',\n 'secondary-hover': 'var(--ods-flamingo-pink-secondary-hover)',\n 'secondary-active': 'var(--ods-flamingo-pink-secondary-action)',\n },\n cyan: {\n DEFAULT: 'var(--ods-flamingo-cyan-base)',\n hover: 'var(--ods-flamingo-cyan-hover)',\n secondary: 'var(--ods-flamingo-cyan-secondary)',\n 'secondary-hover': 'var(--ods-flamingo-cyan-secondary-hover)',\n 'secondary-active': 'var(--ods-flamingo-cyan-secondary-action)',\n },\n },\n 'open-yellow': {\n DEFAULT: 'var(--ods-open-yellow-base)',\n hover: 'var(--ods-open-yellow-hover)',\n action: 'var(--ods-open-yellow-action)',\n secondary: 'var(--ods-open-yellow-secondary)',\n 'secondary-hover': 'var(--ods-open-yellow-secondary-hover)',\n 'secondary-action': 'var(--ods-open-yellow-secondary-action)',\n light: 'var(--ods-open-yellow-light)',\n 'light-hover': 'var(--ods-open-yellow-light-hover)',\n 'light-action': 'var(--ods-open-yellow-light-action)',\n },\n\n // Attention tokens (ods-colors.css). Components reference these BY\n // NAME (error-state.tsx: `border-ods-attention-red-error` etc.) —\n // without these mappings Tailwind silently generates NOTHING for\n // the class and the component renders colorless in every consumer.\n attention: {\n 'red-error': 'var(--ods-attention-red-error)',\n 'red-error-hover': 'var(--ods-attention-red-error-hover)',\n 'red-error-action': 'var(--ods-attention-red-error-action)',\n 'red-error-secondary': 'var(--ods-attention-red-error-secondary)',\n 'red-error-secondary-hover': 'var(--ods-attention-red-error-secondary-hover)',\n 'red-error-secondary-action': 'var(--ods-attention-red-error-secondary-action)',\n 'yellow-warning': 'var(--ods-attention-yellow-warning)',\n 'yellow-warning-hover': 'var(--ods-attention-yellow-warning-hover)',\n 'yellow-warning-action': 'var(--ods-attention-yellow-warning-action)',\n 'yellow-warning-secondary': 'var(--ods-attention-yellow-warning-secondary)',\n 'yellow-warning-secondary-hover': 'var(--ods-attention-yellow-warning-secondary-hover)',\n 'yellow-warning-secondary-action': 'var(--ods-attention-yellow-warning-secondary-action)',\n 'green-success': 'var(--ods-attention-green-success)',\n 'green-success-hover': 'var(--ods-attention-green-success-hover)',\n 'green-success-action': 'var(--ods-attention-green-success-action)',\n 'green-success-secondary': 'var(--ods-attention-green-success-secondary)',\n 'green-success-secondary-hover': 'var(--ods-attention-green-success-secondary-hover)',\n 'green-success-secondary-action': 'var(--ods-attention-green-success-secondary-action)',\n },\n\n // Adaptive platform color\n current: 'var(--ods-current)',\n }),\n },\n // Custom breakpoints (aligned with ODS responsive tokens from Figma)\n screens: {\n md: '800px', // Tablet: 50rem\n lg: '1280px', // Desktop: 80rem\n xl: '1440px', // Large desktop: 90rem\n },\n\n borderRadius: {\n lg: 'var(--radius)', // 8px\n md: 'calc(var(--radius) - 2px)', // 6px\n sm: 'calc(var(--radius) - 4px)', // 4px\n xs: 'calc(var(--radius) - 6px)', // 2px\n },\n\n maxWidth: {\n 'ods-content-narrow': '600px',\n },\n\n fontFamily: {\n sans: ['var(--font-family-body)'],\n mono: ['var(--font-family-heading)'],\n body: ['var(--font-family-body)'],\n heading: ['var(--font-family-heading)'],\n },\n\n // =================================================\n // TYPOGRAPHY\n // =================================================\n fontSize: {\n // Responsive heading sizes (from ods-responsive-tokens.css)\n 'heading-1': ['var(--font-size-h1-title)', { lineHeight: 'var(--font-line-space-h1-main-title)' }],\n 'heading-2': ['var(--font-size-h2-sub-title)', { lineHeight: 'var(--font-line-space-h2-sub-title)' }],\n 'heading-3': ['var(--font-size-h3-body)', { lineHeight: 'var(--font-line-space-h3-body)' }],\n 'heading-4': ['var(--font-size-h4-body)', { lineHeight: 'var(--font-line-space-h4-body)' }],\n 'heading-5': ['var(--font-size-h5-caption)', { lineHeight: 'var(--font-line-space-h5-caption)' }],\n 'heading-6': ['var(--font-size-h6-caption)', { lineHeight: 'var(--font-line-space-h6-caption)' }],\n },\n\n // =================================================\n // SHADOWS\n // =================================================\n boxShadow: {\n card: 'var(--shadow-card)',\n 'card-hover': 'var(--shadow-card-hover)',\n modal: 'var(--shadow-modal)',\n dropdown: 'var(--shadow-dropdown)',\n tooltip: 'var(--shadow-tooltip)',\n focus: 'var(--shadow-focus)',\n accent: 'var(--shadow-accent)',\n 'accent-lg': 'var(--shadow-accent-lg)',\n },\n\n // =================================================\n // TRANSITIONS\n // =================================================\n transitionDuration: {\n fast: 'var(--duration-fast)',\n normal: 'var(--duration-normal)',\n slow: 'var(--duration-slow)',\n slower: 'var(--duration-slower)',\n },\n transitionTimingFunction: {\n bounce: 'var(--ease-bounce)',\n elastic: 'var(--ease-elastic)',\n },\n\n // =================================================\n // Z-INDEX\n // =================================================\n zIndex: {\n dropdown: 'var(--z-dropdown)',\n sticky: 'var(--z-sticky)',\n fixed: 'var(--z-fixed)',\n 'modal-backdrop': 'var(--z-modal-backdrop)',\n modal: 'var(--z-modal)',\n popover: 'var(--z-popover)',\n tooltip: 'var(--z-tooltip)',\n notification: 'var(--z-notification)',\n debug: 'var(--z-debug)',\n },\n\n // =================================================\n // ANIMATIONS\n // =================================================\n keyframes: {\n 'accordion-down': {\n from: { height: '0' },\n to: { height: 'var(--radix-accordion-content-height)' },\n },\n 'accordion-up': {\n from: { height: 'var(--radix-accordion-content-height)' },\n to: { height: '0' },\n },\n 'fade-in': {\n from: { opacity: '0' },\n to: { opacity: '1' },\n },\n // Chat streaming affordances. Defined here, not in an inline <style>\n // the component renders: those tags were rewritten on every render,\n // i.e. every streamed chunk, and each rewrite made WebKit restyle and\n // relayout the whole document.\n 'cursor-blink': {\n '50%': { opacity: '0' },\n },\n 'dot-pulse': {\n '0%, 80%, 100%': { transform: 'scale(1)', opacity: '0.7' },\n '40%': { transform: 'scale(1.5)', opacity: '1' },\n },\n },\n animation: {\n 'accordion-down': 'accordion-down 0.2s ease-out',\n 'accordion-up': 'accordion-up 0.2s ease-out',\n 'fade-in': 'fade-in 0.3s ease-out',\n 'cursor-blink': 'cursor-blink 1s steps(1) infinite',\n 'dot-pulse': 'dot-pulse 1.4s ease-in-out infinite',\n },\n },\n },\n plugins: [tailwindcssAnimate, odsTypographyPlugin, containerQueries],\n};\n\nexport default config;\n"]}
@@ -468,12 +468,25 @@ var config = {
468
468
  "fade-in": {
469
469
  from: { opacity: "0" },
470
470
  to: { opacity: "1" }
471
+ },
472
+ // Chat streaming affordances. Defined here, not in an inline <style>
473
+ // the component renders: those tags were rewritten on every render,
474
+ // i.e. every streamed chunk, and each rewrite made WebKit restyle and
475
+ // relayout the whole document.
476
+ "cursor-blink": {
477
+ "50%": { opacity: "0" }
478
+ },
479
+ "dot-pulse": {
480
+ "0%, 80%, 100%": { transform: "scale(1)", opacity: "0.7" },
481
+ "40%": { transform: "scale(1.5)", opacity: "1" }
471
482
  }
472
483
  },
473
484
  animation: {
474
485
  "accordion-down": "accordion-down 0.2s ease-out",
475
486
  "accordion-up": "accordion-up 0.2s ease-out",
476
- "fade-in": "fade-in 0.3s ease-out"
487
+ "fade-in": "fade-in 0.3s ease-out",
488
+ "cursor-blink": "cursor-blink 1s steps(1) infinite",
489
+ "dot-pulse": "dot-pulse 1.4s ease-in-out infinite"
477
490
  }
478
491
  }
479
492
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/tailwindcss/lib/util/createPlugin.js","../node_modules/tailwindcss/lib/public/create-plugin.js","../node_modules/tailwindcss/plugin.js","../tailwind.config.ts"],"names":["plugin","config"],"mappings":"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","file":"tailwind.config.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function() {\n return _default;\n }\n});\nfunction createPlugin(plugin, config) {\n return {\n handler: plugin,\n config\n };\n}\ncreatePlugin.withOptions = function(pluginFunction, configFunction = ()=>({})) {\n const optionsFunction = function(options) {\n return {\n __options: options,\n handler: pluginFunction(options),\n config: configFunction(options)\n };\n };\n optionsFunction.__isOptionsFunction = true;\n // Expose plugin dependencies so that `object-hash` returns a different\n // value if anything here changes, to ensure a rebuild is triggered.\n optionsFunction.__pluginFunction = pluginFunction;\n optionsFunction.__configFunction = configFunction;\n return optionsFunction;\n};\nconst _default = createPlugin;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function() {\n return _default;\n }\n});\nconst _createPlugin = /*#__PURE__*/ _interop_require_default(require(\"../util/createPlugin\"));\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nconst _default = _createPlugin.default;\n","let createPlugin = require('./lib/public/create-plugin')\nmodule.exports = (createPlugin.__esModule ? createPlugin : { default: createPlugin }).default\n","import containerQueries from '@tailwindcss/container-queries';\nimport type { Config } from 'tailwindcss';\nimport tailwindcssAnimate from 'tailwindcss-animate';\nimport plugin from 'tailwindcss/plugin';\n\nconst odsTypographyPlugin = plugin(({ addUtilities }) => {\n addUtilities({\n '.text-h1': {\n fontFamily: 'var(--font-h1-family)',\n fontWeight: 'var(--font-h1-weight)',\n fontSize: 'var(--font-size-h1-title)',\n lineHeight: 'var(--font-line-space-h1-main-title)',\n letterSpacing: '-0.02em',\n },\n '.text-h2': {\n fontFamily: 'var(--font-h2-family)',\n fontWeight: 'var(--font-h2-weight)',\n fontSize: 'var(--font-size-h2-sub-title)',\n lineHeight: 'var(--font-line-space-h2-sub-title)',\n letterSpacing: '-0.02em',\n },\n '.text-h3': {\n fontFamily: 'var(--font-h3-family)',\n fontWeight: 'var(--font-h3-weight)',\n fontSize: 'var(--font-size-h3-body)',\n lineHeight: 'var(--font-line-space-h3-body)',\n letterSpacing: '-0.02em',\n },\n '.text-h4': {\n fontFamily: 'var(--font-h4-family)',\n fontWeight: 'var(--font-h4-weight)',\n fontSize: 'var(--font-size-h4-body)',\n lineHeight: 'var(--font-line-space-h4-body)',\n },\n '.text-h5': {\n fontFamily: 'var(--font-h5-family)',\n fontWeight: 'var(--font-h5-weight)',\n fontSize: 'var(--font-size-h5-caption)',\n lineHeight: 'var(--font-line-space-h5-caption)',\n textTransform: 'uppercase',\n letterSpacing: '-0.02em',\n },\n '.text-h6': {\n fontFamily: 'var(--font-h6-family)',\n fontWeight: 'var(--font-h6-weight)',\n fontSize: 'var(--font-size-h6-caption)',\n lineHeight: 'var(--font-line-space-h6-caption)',\n },\n // Monospace body/code text (commands, ids, paths, code blocks): Azeret Mono\n // at the h6 responsive scale, no transform, neutral letter-spacing (unlike\n // text-h5's uppercase -0.02em label styling).\n '.text-code': {\n fontFamily: 'var(--font-family-heading)',\n fontWeight: 'var(--font-weight-medium)',\n fontSize: 'var(--font-size-h6-caption)',\n lineHeight: 'var(--font-line-space-h6-caption)',\n },\n // BRAND WORDMARKS ONLY — the platform name beside a logo in a header or\n // footer. Azeret Mono bold at the h5-caption scale, which is exactly what\n // every hand-written wordmark override spelled before this composite.\n '.text-wordmark': {\n fontFamily: 'var(--font-family-heading)',\n fontWeight: 'var(--font-weight-bold)',\n fontSize: 'var(--font-size-h5-caption)',\n lineHeight: 'var(--font-line-space-h5-caption)',\n textTransform: 'none',\n letterSpacing: '0',\n },\n // Badge / stamp SCALE — size only, deliberately NOT a composite: it\n // carries no family, weight or casing, so it composes with whatever the\n // badge already sets (h5 tokens on StatusBadge, DM Sans on Badge). Use it\n // for badges and chips instead of a raw `text-[10px]`; it is a component\n // token, not a step in the h1-h6 scale.\n '.text-badge': {\n fontSize: 'var(--font-size-badge)',\n lineHeight: 'var(--font-line-space-badge)',\n },\n });\n});\n\n/**\n * Make Tailwind opacity modifiers (`bg-ods-error/10`, `hover:bg-ods-accent/90`, …)\n * actually work on var()-based ODS tokens. Without `<alpha-value>` in the color\n * definition Tailwind v3 silently generates NOTHING for `ods-*\\/N` classes — the\n * element loses that declaration entirely. `color-mix` keeps un-suffixed classes\n * visually identical (a 100% mix is the color itself) while letting the modifier\n * scale the alpha.\n */\nconst withAlphaValue = (color: string) => `color-mix(in srgb, ${color} calc(<alpha-value> * 100%), transparent)`;\n\ntype ColorTree = { [key: string]: string | ColorTree };\nconst withAlphaSupport = (tree: ColorTree): ColorTree =>\n Object.fromEntries(\n Object.entries(tree).map(([key, value]) => [\n key,\n typeof value === 'string' ? withAlphaValue(value) : withAlphaSupport(value),\n ]),\n );\n\nconst config: Config = {\n content: ['./src/**/*.{js,ts,jsx,tsx}'],\n safelist: [\n // Dynamically generated classes for table hide/show functionality\n 'hidden',\n 'md:hidden',\n 'lg:hidden',\n 'md:flex',\n 'lg:flex',\n ],\n theme: {\n container: {\n center: true,\n padding: '2rem',\n screens: {\n '2xl': '1400px',\n },\n },\n extend: {\n colors: {\n // Shadcn/ui base colors (keep for compatibility)\n border: 'hsl(var(--border))',\n input: 'hsl(var(--input))',\n ring: 'hsl(var(--ring))',\n background: 'hsl(var(--background))',\n foreground: 'hsl(var(--foreground))',\n primary: {\n DEFAULT: 'hsl(var(--primary))',\n foreground: 'hsl(var(--primary-foreground))',\n },\n secondary: {\n DEFAULT: 'hsl(var(--secondary))',\n foreground: 'hsl(var(--secondary-foreground))',\n },\n destructive: {\n DEFAULT: 'hsl(var(--destructive))',\n foreground: 'hsl(var(--destructive-foreground))',\n },\n muted: {\n DEFAULT: 'hsl(var(--muted))',\n foreground: 'hsl(var(--muted-foreground))',\n },\n accent: {\n DEFAULT: 'hsl(var(--accent))',\n foreground: 'hsl(var(--accent-foreground))',\n },\n popover: {\n DEFAULT: 'hsl(var(--popover))',\n foreground: 'hsl(var(--popover-foreground))',\n },\n card: {\n DEFAULT: 'hsl(var(--card))',\n foreground: 'hsl(var(--card-foreground))',\n },\n\n // =================================================\n // ODS (Open Design System) COLORS\n // =================================================\n // Single nested structure: generates bg-ods-*, text-ods-*, border-ods-* utilities\n ods: withAlphaSupport({\n // Backgrounds\n bg: 'var(--color-bg)',\n card: 'var(--color-bg-card)',\n overlay: 'var(--color-bg-overlay)',\n skeleton: 'var(--color-bg-skeleton)',\n 'bg-hover': 'var(--color-bg-hover)',\n 'bg-active': 'var(--color-bg-active)',\n 'bg-surface': 'var(--color-bg-surface)',\n 'bg-surface-hover': 'var(--color-bg-surface-hover)',\n 'bg-surface-active': 'var(--color-bg-surface-active)',\n // Light surface on a dark UI — the semantic token existed with no utility.\n 'bg-inverted': 'var(--color-bg-inverted)',\n 'card-hover': 'var(--color-bg-hover)',\n divider: 'var(--color-divider)',\n\n // Borders\n border: {\n DEFAULT: 'var(--color-border-default)',\n hover: 'var(--color-border-hover)',\n active: 'var(--color-border-active)',\n focus: 'var(--color-border-focus)',\n },\n\n // Text\n text: {\n primary: 'var(--color-text-primary)',\n secondary: 'var(--color-text-secondary)',\n tertiary: 'var(--color-text-tertiary)',\n muted: 'var(--color-text-muted)',\n subtle: 'var(--color-text-subtle)',\n disabled: 'var(--color-text-disabled)',\n 'on-accent': 'var(--color-text-on-accent)',\n 'on-dark': 'var(--color-text-on-dark)',\n },\n\n // Accent\n accent: {\n DEFAULT: 'var(--color-accent-primary)',\n hover: 'var(--color-accent-hover)',\n active: 'var(--color-accent-active)',\n secondary: 'var(--color-accent-secondary)',\n 'secondary-hover': 'var(--color-accent-secondary-hover)',\n 'secondary-active': 'var(--color-accent-secondary-active)',\n focus: 'var(--color-accent-focus)',\n disabled: 'var(--color-accent-disabled)',\n },\n\n // Status\n success: {\n DEFAULT: 'var(--color-success)',\n hover: 'var(--color-success-hover)',\n active: 'var(--color-success-active)',\n secondary: 'var(--color-success-secondary)',\n 'secondary-hover': 'var(--color-success-secondary-hover)',\n 'secondary-active': 'var(--color-success-secondary-active)',\n },\n error: {\n DEFAULT: 'var(--color-error)',\n hover: 'var(--color-error-hover)',\n active: 'var(--color-error-active)',\n secondary: 'var(--color-error-secondary)',\n 'secondary-hover': 'var(--color-error-secondary-hover)',\n 'secondary-active': 'var(--color-error-secondary-active)',\n },\n warning: {\n DEFAULT: 'var(--color-warning)',\n hover: 'var(--color-warning-hover)',\n active: 'var(--color-warning-active)',\n secondary: 'var(--color-warning-secondary)',\n 'secondary-hover': 'var(--color-warning-secondary-hover)',\n 'secondary-active': 'var(--color-warning-secondary-active)',\n },\n info: {\n DEFAULT: 'var(--color-info)',\n hover: 'var(--color-info-hover)',\n active: 'var(--color-info-active)',\n },\n\n // Interactive states\n disabled: 'var(--color-disabled)',\n focus: 'var(--color-focus-ring)',\n 'focus-visible': 'var(--color-focus-visible)',\n\n // Links\n link: {\n DEFAULT: 'var(--color-link)',\n hover: 'var(--color-link-hover)',\n visited: 'var(--color-link-visited)',\n },\n\n // Brand colors (theme-independent)\n flamingo: {\n pink: {\n DEFAULT: 'var(--ods-flamingo-pink-base)',\n hover: 'var(--ods-flamingo-pink-hover)',\n secondary: 'var(--ods-flamingo-pink-secondary)',\n 'secondary-hover': 'var(--ods-flamingo-pink-secondary-hover)',\n 'secondary-active': 'var(--ods-flamingo-pink-secondary-action)',\n },\n cyan: {\n DEFAULT: 'var(--ods-flamingo-cyan-base)',\n hover: 'var(--ods-flamingo-cyan-hover)',\n secondary: 'var(--ods-flamingo-cyan-secondary)',\n 'secondary-hover': 'var(--ods-flamingo-cyan-secondary-hover)',\n 'secondary-active': 'var(--ods-flamingo-cyan-secondary-action)',\n },\n },\n 'open-yellow': {\n DEFAULT: 'var(--ods-open-yellow-base)',\n hover: 'var(--ods-open-yellow-hover)',\n action: 'var(--ods-open-yellow-action)',\n secondary: 'var(--ods-open-yellow-secondary)',\n 'secondary-hover': 'var(--ods-open-yellow-secondary-hover)',\n 'secondary-action': 'var(--ods-open-yellow-secondary-action)',\n light: 'var(--ods-open-yellow-light)',\n 'light-hover': 'var(--ods-open-yellow-light-hover)',\n 'light-action': 'var(--ods-open-yellow-light-action)',\n },\n\n // Attention tokens (ods-colors.css). Components reference these BY\n // NAME (error-state.tsx: `border-ods-attention-red-error` etc.) —\n // without these mappings Tailwind silently generates NOTHING for\n // the class and the component renders colorless in every consumer.\n attention: {\n 'red-error': 'var(--ods-attention-red-error)',\n 'red-error-hover': 'var(--ods-attention-red-error-hover)',\n 'red-error-action': 'var(--ods-attention-red-error-action)',\n 'red-error-secondary': 'var(--ods-attention-red-error-secondary)',\n 'red-error-secondary-hover': 'var(--ods-attention-red-error-secondary-hover)',\n 'red-error-secondary-action': 'var(--ods-attention-red-error-secondary-action)',\n 'yellow-warning': 'var(--ods-attention-yellow-warning)',\n 'yellow-warning-hover': 'var(--ods-attention-yellow-warning-hover)',\n 'yellow-warning-action': 'var(--ods-attention-yellow-warning-action)',\n 'yellow-warning-secondary': 'var(--ods-attention-yellow-warning-secondary)',\n 'yellow-warning-secondary-hover': 'var(--ods-attention-yellow-warning-secondary-hover)',\n 'yellow-warning-secondary-action': 'var(--ods-attention-yellow-warning-secondary-action)',\n 'green-success': 'var(--ods-attention-green-success)',\n 'green-success-hover': 'var(--ods-attention-green-success-hover)',\n 'green-success-action': 'var(--ods-attention-green-success-action)',\n 'green-success-secondary': 'var(--ods-attention-green-success-secondary)',\n 'green-success-secondary-hover': 'var(--ods-attention-green-success-secondary-hover)',\n 'green-success-secondary-action': 'var(--ods-attention-green-success-secondary-action)',\n },\n\n // Adaptive platform color\n current: 'var(--ods-current)',\n }),\n },\n // Custom breakpoints (aligned with ODS responsive tokens from Figma)\n screens: {\n md: '800px', // Tablet: 50rem\n lg: '1280px', // Desktop: 80rem\n xl: '1440px', // Large desktop: 90rem\n },\n\n borderRadius: {\n lg: 'var(--radius)', // 8px\n md: 'calc(var(--radius) - 2px)', // 6px\n sm: 'calc(var(--radius) - 4px)', // 4px\n xs: 'calc(var(--radius) - 6px)', // 2px\n },\n\n maxWidth: {\n 'ods-content-narrow': '600px',\n },\n\n fontFamily: {\n sans: ['var(--font-family-body)'],\n mono: ['var(--font-family-heading)'],\n body: ['var(--font-family-body)'],\n heading: ['var(--font-family-heading)'],\n },\n\n // =================================================\n // TYPOGRAPHY\n // =================================================\n fontSize: {\n // Responsive heading sizes (from ods-responsive-tokens.css)\n 'heading-1': ['var(--font-size-h1-title)', { lineHeight: 'var(--font-line-space-h1-main-title)' }],\n 'heading-2': ['var(--font-size-h2-sub-title)', { lineHeight: 'var(--font-line-space-h2-sub-title)' }],\n 'heading-3': ['var(--font-size-h3-body)', { lineHeight: 'var(--font-line-space-h3-body)' }],\n 'heading-4': ['var(--font-size-h4-body)', { lineHeight: 'var(--font-line-space-h4-body)' }],\n 'heading-5': ['var(--font-size-h5-caption)', { lineHeight: 'var(--font-line-space-h5-caption)' }],\n 'heading-6': ['var(--font-size-h6-caption)', { lineHeight: 'var(--font-line-space-h6-caption)' }],\n },\n\n // =================================================\n // SHADOWS\n // =================================================\n boxShadow: {\n card: 'var(--shadow-card)',\n 'card-hover': 'var(--shadow-card-hover)',\n modal: 'var(--shadow-modal)',\n dropdown: 'var(--shadow-dropdown)',\n tooltip: 'var(--shadow-tooltip)',\n focus: 'var(--shadow-focus)',\n accent: 'var(--shadow-accent)',\n 'accent-lg': 'var(--shadow-accent-lg)',\n },\n\n // =================================================\n // TRANSITIONS\n // =================================================\n transitionDuration: {\n fast: 'var(--duration-fast)',\n normal: 'var(--duration-normal)',\n slow: 'var(--duration-slow)',\n slower: 'var(--duration-slower)',\n },\n transitionTimingFunction: {\n bounce: 'var(--ease-bounce)',\n elastic: 'var(--ease-elastic)',\n },\n\n // =================================================\n // Z-INDEX\n // =================================================\n zIndex: {\n dropdown: 'var(--z-dropdown)',\n sticky: 'var(--z-sticky)',\n fixed: 'var(--z-fixed)',\n 'modal-backdrop': 'var(--z-modal-backdrop)',\n modal: 'var(--z-modal)',\n popover: 'var(--z-popover)',\n tooltip: 'var(--z-tooltip)',\n notification: 'var(--z-notification)',\n debug: 'var(--z-debug)',\n },\n\n // =================================================\n // ANIMATIONS\n // =================================================\n keyframes: {\n 'accordion-down': {\n from: { height: '0' },\n to: { height: 'var(--radix-accordion-content-height)' },\n },\n 'accordion-up': {\n from: { height: 'var(--radix-accordion-content-height)' },\n to: { height: '0' },\n },\n 'fade-in': {\n from: { opacity: '0' },\n to: { opacity: '1' },\n },\n },\n animation: {\n 'accordion-down': 'accordion-down 0.2s ease-out',\n 'accordion-up': 'accordion-up 0.2s ease-out',\n 'fade-in': 'fade-in 0.3s ease-out',\n },\n },\n },\n plugins: [tailwindcssAnimate, odsTypographyPlugin, containerQueries],\n};\n\nexport default config;\n"]}
1
+ {"version":3,"sources":["../node_modules/tailwindcss/lib/util/createPlugin.js","../node_modules/tailwindcss/lib/public/create-plugin.js","../node_modules/tailwindcss/plugin.js","../tailwind.config.ts"],"names":["plugin","config"],"mappings":"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","file":"tailwind.config.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function() {\n return _default;\n }\n});\nfunction createPlugin(plugin, config) {\n return {\n handler: plugin,\n config\n };\n}\ncreatePlugin.withOptions = function(pluginFunction, configFunction = ()=>({})) {\n const optionsFunction = function(options) {\n return {\n __options: options,\n handler: pluginFunction(options),\n config: configFunction(options)\n };\n };\n optionsFunction.__isOptionsFunction = true;\n // Expose plugin dependencies so that `object-hash` returns a different\n // value if anything here changes, to ensure a rebuild is triggered.\n optionsFunction.__pluginFunction = pluginFunction;\n optionsFunction.__configFunction = configFunction;\n return optionsFunction;\n};\nconst _default = createPlugin;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function() {\n return _default;\n }\n});\nconst _createPlugin = /*#__PURE__*/ _interop_require_default(require(\"../util/createPlugin\"));\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nconst _default = _createPlugin.default;\n","let createPlugin = require('./lib/public/create-plugin')\nmodule.exports = (createPlugin.__esModule ? createPlugin : { default: createPlugin }).default\n","import containerQueries from '@tailwindcss/container-queries';\nimport type { Config } from 'tailwindcss';\nimport tailwindcssAnimate from 'tailwindcss-animate';\nimport plugin from 'tailwindcss/plugin';\n\nconst odsTypographyPlugin = plugin(({ addUtilities }) => {\n addUtilities({\n '.text-h1': {\n fontFamily: 'var(--font-h1-family)',\n fontWeight: 'var(--font-h1-weight)',\n fontSize: 'var(--font-size-h1-title)',\n lineHeight: 'var(--font-line-space-h1-main-title)',\n letterSpacing: '-0.02em',\n },\n '.text-h2': {\n fontFamily: 'var(--font-h2-family)',\n fontWeight: 'var(--font-h2-weight)',\n fontSize: 'var(--font-size-h2-sub-title)',\n lineHeight: 'var(--font-line-space-h2-sub-title)',\n letterSpacing: '-0.02em',\n },\n '.text-h3': {\n fontFamily: 'var(--font-h3-family)',\n fontWeight: 'var(--font-h3-weight)',\n fontSize: 'var(--font-size-h3-body)',\n lineHeight: 'var(--font-line-space-h3-body)',\n letterSpacing: '-0.02em',\n },\n '.text-h4': {\n fontFamily: 'var(--font-h4-family)',\n fontWeight: 'var(--font-h4-weight)',\n fontSize: 'var(--font-size-h4-body)',\n lineHeight: 'var(--font-line-space-h4-body)',\n },\n '.text-h5': {\n fontFamily: 'var(--font-h5-family)',\n fontWeight: 'var(--font-h5-weight)',\n fontSize: 'var(--font-size-h5-caption)',\n lineHeight: 'var(--font-line-space-h5-caption)',\n textTransform: 'uppercase',\n letterSpacing: '-0.02em',\n },\n '.text-h6': {\n fontFamily: 'var(--font-h6-family)',\n fontWeight: 'var(--font-h6-weight)',\n fontSize: 'var(--font-size-h6-caption)',\n lineHeight: 'var(--font-line-space-h6-caption)',\n },\n // Monospace body/code text (commands, ids, paths, code blocks): Azeret Mono\n // at the h6 responsive scale, no transform, neutral letter-spacing (unlike\n // text-h5's uppercase -0.02em label styling).\n '.text-code': {\n fontFamily: 'var(--font-family-heading)',\n fontWeight: 'var(--font-weight-medium)',\n fontSize: 'var(--font-size-h6-caption)',\n lineHeight: 'var(--font-line-space-h6-caption)',\n },\n // BRAND WORDMARKS ONLY — the platform name beside a logo in a header or\n // footer. Azeret Mono bold at the h5-caption scale, which is exactly what\n // every hand-written wordmark override spelled before this composite.\n '.text-wordmark': {\n fontFamily: 'var(--font-family-heading)',\n fontWeight: 'var(--font-weight-bold)',\n fontSize: 'var(--font-size-h5-caption)',\n lineHeight: 'var(--font-line-space-h5-caption)',\n textTransform: 'none',\n letterSpacing: '0',\n },\n // Badge / stamp SCALE — size only, deliberately NOT a composite: it\n // carries no family, weight or casing, so it composes with whatever the\n // badge already sets (h5 tokens on StatusBadge, DM Sans on Badge). Use it\n // for badges and chips instead of a raw `text-[10px]`; it is a component\n // token, not a step in the h1-h6 scale.\n '.text-badge': {\n fontSize: 'var(--font-size-badge)',\n lineHeight: 'var(--font-line-space-badge)',\n },\n });\n});\n\n/**\n * Make Tailwind opacity modifiers (`bg-ods-error/10`, `hover:bg-ods-accent/90`, …)\n * actually work on var()-based ODS tokens. Without `<alpha-value>` in the color\n * definition Tailwind v3 silently generates NOTHING for `ods-*\\/N` classes — the\n * element loses that declaration entirely. `color-mix` keeps un-suffixed classes\n * visually identical (a 100% mix is the color itself) while letting the modifier\n * scale the alpha.\n */\nconst withAlphaValue = (color: string) => `color-mix(in srgb, ${color} calc(<alpha-value> * 100%), transparent)`;\n\ntype ColorTree = { [key: string]: string | ColorTree };\nconst withAlphaSupport = (tree: ColorTree): ColorTree =>\n Object.fromEntries(\n Object.entries(tree).map(([key, value]) => [\n key,\n typeof value === 'string' ? withAlphaValue(value) : withAlphaSupport(value),\n ]),\n );\n\nconst config: Config = {\n content: ['./src/**/*.{js,ts,jsx,tsx}'],\n safelist: [\n // Dynamically generated classes for table hide/show functionality\n 'hidden',\n 'md:hidden',\n 'lg:hidden',\n 'md:flex',\n 'lg:flex',\n ],\n theme: {\n container: {\n center: true,\n padding: '2rem',\n screens: {\n '2xl': '1400px',\n },\n },\n extend: {\n colors: {\n // Shadcn/ui base colors (keep for compatibility)\n border: 'hsl(var(--border))',\n input: 'hsl(var(--input))',\n ring: 'hsl(var(--ring))',\n background: 'hsl(var(--background))',\n foreground: 'hsl(var(--foreground))',\n primary: {\n DEFAULT: 'hsl(var(--primary))',\n foreground: 'hsl(var(--primary-foreground))',\n },\n secondary: {\n DEFAULT: 'hsl(var(--secondary))',\n foreground: 'hsl(var(--secondary-foreground))',\n },\n destructive: {\n DEFAULT: 'hsl(var(--destructive))',\n foreground: 'hsl(var(--destructive-foreground))',\n },\n muted: {\n DEFAULT: 'hsl(var(--muted))',\n foreground: 'hsl(var(--muted-foreground))',\n },\n accent: {\n DEFAULT: 'hsl(var(--accent))',\n foreground: 'hsl(var(--accent-foreground))',\n },\n popover: {\n DEFAULT: 'hsl(var(--popover))',\n foreground: 'hsl(var(--popover-foreground))',\n },\n card: {\n DEFAULT: 'hsl(var(--card))',\n foreground: 'hsl(var(--card-foreground))',\n },\n\n // =================================================\n // ODS (Open Design System) COLORS\n // =================================================\n // Single nested structure: generates bg-ods-*, text-ods-*, border-ods-* utilities\n ods: withAlphaSupport({\n // Backgrounds\n bg: 'var(--color-bg)',\n card: 'var(--color-bg-card)',\n overlay: 'var(--color-bg-overlay)',\n skeleton: 'var(--color-bg-skeleton)',\n 'bg-hover': 'var(--color-bg-hover)',\n 'bg-active': 'var(--color-bg-active)',\n 'bg-surface': 'var(--color-bg-surface)',\n 'bg-surface-hover': 'var(--color-bg-surface-hover)',\n 'bg-surface-active': 'var(--color-bg-surface-active)',\n // Light surface on a dark UI — the semantic token existed with no utility.\n 'bg-inverted': 'var(--color-bg-inverted)',\n 'card-hover': 'var(--color-bg-hover)',\n divider: 'var(--color-divider)',\n\n // Borders\n border: {\n DEFAULT: 'var(--color-border-default)',\n hover: 'var(--color-border-hover)',\n active: 'var(--color-border-active)',\n focus: 'var(--color-border-focus)',\n },\n\n // Text\n text: {\n primary: 'var(--color-text-primary)',\n secondary: 'var(--color-text-secondary)',\n tertiary: 'var(--color-text-tertiary)',\n muted: 'var(--color-text-muted)',\n subtle: 'var(--color-text-subtle)',\n disabled: 'var(--color-text-disabled)',\n 'on-accent': 'var(--color-text-on-accent)',\n 'on-dark': 'var(--color-text-on-dark)',\n },\n\n // Accent\n accent: {\n DEFAULT: 'var(--color-accent-primary)',\n hover: 'var(--color-accent-hover)',\n active: 'var(--color-accent-active)',\n secondary: 'var(--color-accent-secondary)',\n 'secondary-hover': 'var(--color-accent-secondary-hover)',\n 'secondary-active': 'var(--color-accent-secondary-active)',\n focus: 'var(--color-accent-focus)',\n disabled: 'var(--color-accent-disabled)',\n },\n\n // Status\n success: {\n DEFAULT: 'var(--color-success)',\n hover: 'var(--color-success-hover)',\n active: 'var(--color-success-active)',\n secondary: 'var(--color-success-secondary)',\n 'secondary-hover': 'var(--color-success-secondary-hover)',\n 'secondary-active': 'var(--color-success-secondary-active)',\n },\n error: {\n DEFAULT: 'var(--color-error)',\n hover: 'var(--color-error-hover)',\n active: 'var(--color-error-active)',\n secondary: 'var(--color-error-secondary)',\n 'secondary-hover': 'var(--color-error-secondary-hover)',\n 'secondary-active': 'var(--color-error-secondary-active)',\n },\n warning: {\n DEFAULT: 'var(--color-warning)',\n hover: 'var(--color-warning-hover)',\n active: 'var(--color-warning-active)',\n secondary: 'var(--color-warning-secondary)',\n 'secondary-hover': 'var(--color-warning-secondary-hover)',\n 'secondary-active': 'var(--color-warning-secondary-active)',\n },\n info: {\n DEFAULT: 'var(--color-info)',\n hover: 'var(--color-info-hover)',\n active: 'var(--color-info-active)',\n },\n\n // Interactive states\n disabled: 'var(--color-disabled)',\n focus: 'var(--color-focus-ring)',\n 'focus-visible': 'var(--color-focus-visible)',\n\n // Links\n link: {\n DEFAULT: 'var(--color-link)',\n hover: 'var(--color-link-hover)',\n visited: 'var(--color-link-visited)',\n },\n\n // Brand colors (theme-independent)\n flamingo: {\n pink: {\n DEFAULT: 'var(--ods-flamingo-pink-base)',\n hover: 'var(--ods-flamingo-pink-hover)',\n secondary: 'var(--ods-flamingo-pink-secondary)',\n 'secondary-hover': 'var(--ods-flamingo-pink-secondary-hover)',\n 'secondary-active': 'var(--ods-flamingo-pink-secondary-action)',\n },\n cyan: {\n DEFAULT: 'var(--ods-flamingo-cyan-base)',\n hover: 'var(--ods-flamingo-cyan-hover)',\n secondary: 'var(--ods-flamingo-cyan-secondary)',\n 'secondary-hover': 'var(--ods-flamingo-cyan-secondary-hover)',\n 'secondary-active': 'var(--ods-flamingo-cyan-secondary-action)',\n },\n },\n 'open-yellow': {\n DEFAULT: 'var(--ods-open-yellow-base)',\n hover: 'var(--ods-open-yellow-hover)',\n action: 'var(--ods-open-yellow-action)',\n secondary: 'var(--ods-open-yellow-secondary)',\n 'secondary-hover': 'var(--ods-open-yellow-secondary-hover)',\n 'secondary-action': 'var(--ods-open-yellow-secondary-action)',\n light: 'var(--ods-open-yellow-light)',\n 'light-hover': 'var(--ods-open-yellow-light-hover)',\n 'light-action': 'var(--ods-open-yellow-light-action)',\n },\n\n // Attention tokens (ods-colors.css). Components reference these BY\n // NAME (error-state.tsx: `border-ods-attention-red-error` etc.) —\n // without these mappings Tailwind silently generates NOTHING for\n // the class and the component renders colorless in every consumer.\n attention: {\n 'red-error': 'var(--ods-attention-red-error)',\n 'red-error-hover': 'var(--ods-attention-red-error-hover)',\n 'red-error-action': 'var(--ods-attention-red-error-action)',\n 'red-error-secondary': 'var(--ods-attention-red-error-secondary)',\n 'red-error-secondary-hover': 'var(--ods-attention-red-error-secondary-hover)',\n 'red-error-secondary-action': 'var(--ods-attention-red-error-secondary-action)',\n 'yellow-warning': 'var(--ods-attention-yellow-warning)',\n 'yellow-warning-hover': 'var(--ods-attention-yellow-warning-hover)',\n 'yellow-warning-action': 'var(--ods-attention-yellow-warning-action)',\n 'yellow-warning-secondary': 'var(--ods-attention-yellow-warning-secondary)',\n 'yellow-warning-secondary-hover': 'var(--ods-attention-yellow-warning-secondary-hover)',\n 'yellow-warning-secondary-action': 'var(--ods-attention-yellow-warning-secondary-action)',\n 'green-success': 'var(--ods-attention-green-success)',\n 'green-success-hover': 'var(--ods-attention-green-success-hover)',\n 'green-success-action': 'var(--ods-attention-green-success-action)',\n 'green-success-secondary': 'var(--ods-attention-green-success-secondary)',\n 'green-success-secondary-hover': 'var(--ods-attention-green-success-secondary-hover)',\n 'green-success-secondary-action': 'var(--ods-attention-green-success-secondary-action)',\n },\n\n // Adaptive platform color\n current: 'var(--ods-current)',\n }),\n },\n // Custom breakpoints (aligned with ODS responsive tokens from Figma)\n screens: {\n md: '800px', // Tablet: 50rem\n lg: '1280px', // Desktop: 80rem\n xl: '1440px', // Large desktop: 90rem\n },\n\n borderRadius: {\n lg: 'var(--radius)', // 8px\n md: 'calc(var(--radius) - 2px)', // 6px\n sm: 'calc(var(--radius) - 4px)', // 4px\n xs: 'calc(var(--radius) - 6px)', // 2px\n },\n\n maxWidth: {\n 'ods-content-narrow': '600px',\n },\n\n fontFamily: {\n sans: ['var(--font-family-body)'],\n mono: ['var(--font-family-heading)'],\n body: ['var(--font-family-body)'],\n heading: ['var(--font-family-heading)'],\n },\n\n // =================================================\n // TYPOGRAPHY\n // =================================================\n fontSize: {\n // Responsive heading sizes (from ods-responsive-tokens.css)\n 'heading-1': ['var(--font-size-h1-title)', { lineHeight: 'var(--font-line-space-h1-main-title)' }],\n 'heading-2': ['var(--font-size-h2-sub-title)', { lineHeight: 'var(--font-line-space-h2-sub-title)' }],\n 'heading-3': ['var(--font-size-h3-body)', { lineHeight: 'var(--font-line-space-h3-body)' }],\n 'heading-4': ['var(--font-size-h4-body)', { lineHeight: 'var(--font-line-space-h4-body)' }],\n 'heading-5': ['var(--font-size-h5-caption)', { lineHeight: 'var(--font-line-space-h5-caption)' }],\n 'heading-6': ['var(--font-size-h6-caption)', { lineHeight: 'var(--font-line-space-h6-caption)' }],\n },\n\n // =================================================\n // SHADOWS\n // =================================================\n boxShadow: {\n card: 'var(--shadow-card)',\n 'card-hover': 'var(--shadow-card-hover)',\n modal: 'var(--shadow-modal)',\n dropdown: 'var(--shadow-dropdown)',\n tooltip: 'var(--shadow-tooltip)',\n focus: 'var(--shadow-focus)',\n accent: 'var(--shadow-accent)',\n 'accent-lg': 'var(--shadow-accent-lg)',\n },\n\n // =================================================\n // TRANSITIONS\n // =================================================\n transitionDuration: {\n fast: 'var(--duration-fast)',\n normal: 'var(--duration-normal)',\n slow: 'var(--duration-slow)',\n slower: 'var(--duration-slower)',\n },\n transitionTimingFunction: {\n bounce: 'var(--ease-bounce)',\n elastic: 'var(--ease-elastic)',\n },\n\n // =================================================\n // Z-INDEX\n // =================================================\n zIndex: {\n dropdown: 'var(--z-dropdown)',\n sticky: 'var(--z-sticky)',\n fixed: 'var(--z-fixed)',\n 'modal-backdrop': 'var(--z-modal-backdrop)',\n modal: 'var(--z-modal)',\n popover: 'var(--z-popover)',\n tooltip: 'var(--z-tooltip)',\n notification: 'var(--z-notification)',\n debug: 'var(--z-debug)',\n },\n\n // =================================================\n // ANIMATIONS\n // =================================================\n keyframes: {\n 'accordion-down': {\n from: { height: '0' },\n to: { height: 'var(--radix-accordion-content-height)' },\n },\n 'accordion-up': {\n from: { height: 'var(--radix-accordion-content-height)' },\n to: { height: '0' },\n },\n 'fade-in': {\n from: { opacity: '0' },\n to: { opacity: '1' },\n },\n // Chat streaming affordances. Defined here, not in an inline <style>\n // the component renders: those tags were rewritten on every render,\n // i.e. every streamed chunk, and each rewrite made WebKit restyle and\n // relayout the whole document.\n 'cursor-blink': {\n '50%': { opacity: '0' },\n },\n 'dot-pulse': {\n '0%, 80%, 100%': { transform: 'scale(1)', opacity: '0.7' },\n '40%': { transform: 'scale(1.5)', opacity: '1' },\n },\n },\n animation: {\n 'accordion-down': 'accordion-down 0.2s ease-out',\n 'accordion-up': 'accordion-up 0.2s ease-out',\n 'fade-in': 'fade-in 0.3s ease-out',\n 'cursor-blink': 'cursor-blink 1s steps(1) infinite',\n 'dot-pulse': 'dot-pulse 1.4s ease-in-out infinite',\n },\n },\n },\n plugins: [tailwindcssAnimate, odsTypographyPlugin, containerQueries],\n};\n\nexport default config;\n"]}
@@ -71,6 +71,19 @@ Two rules are deliberately **absent** from the base and belong in a repo's local
71
71
  - `@typescript-eslint/naming-convention` — Biome's equivalent produced 1 715 findings in
72
72
  multi-platform-hub alone and was never enforced.
73
73
 
74
+ ## WebKit performance rules
75
+
76
+ `base` carries two rules from `./webview-performance.js` for patterns that are cheap in Chrome and
77
+ expensive in WebKit (Safari, and the WKWebView the desktop and iOS shells run in). They are not
78
+ applied to tests or stories.
79
+
80
+ - `flamingo/no-inline-style-element`: no `<style>` element in JSX. React rewrites its text on
81
+ re-render, and each rewrite makes WebKit restyle and relayout the whole document.
82
+ - `flamingo/no-whole-store-subscription`: a `use…Store` hook called with no selector, or with
83
+ `s => s`, re-renders on every write to the store. The rule goes by the name, so a `use…Store`
84
+ hook that is not a zustand subscription (a context getter, say) is a false positive: carry it in
85
+ a named `files:` block.
86
+
74
87
  ## Why not ESLint 10
75
88
 
76
89
  ESLint 10 is out, and `eslint@9` is marked deprecated on npm. It still does not work here:
@@ -6,6 +6,7 @@ import globals from 'globals';
6
6
  import tseslint from 'typescript-eslint';
7
7
 
8
8
  import { ignores } from './ignores.js';
9
+ import { webviewPerformancePlugin } from './webview-performance.js';
9
10
 
10
11
  /**
11
12
  * Promote every `warn` in a third-party config to `error`.
@@ -291,6 +292,20 @@ export const base = [
291
292
  languageOptions: { parserOptions: { jsxPragma: null } },
292
293
  },
293
294
 
295
+ // Patterns measured to be cheap in Chrome and expensive in WebKit (Safari and
296
+ // the desktop/iOS shells' WKWebView) — see ./webview-performance.js. Tests and
297
+ // stories are not render paths users sit on.
298
+ {
299
+ name: 'flamingo/base/webview-performance',
300
+ files: ['**/*.{js,mjs,jsx,ts,mts,tsx}'],
301
+ ignores: ['**/*.{test,spec}.{js,mjs,jsx,ts,mts,tsx}', '**/__tests__/**', '**/*.stories.{js,jsx,ts,tsx,mdx}'],
302
+ plugins: { flamingo: webviewPerformancePlugin },
303
+ rules: {
304
+ 'flamingo/no-inline-style-element': 'error',
305
+ 'flamingo/no-whole-store-subscription': 'error',
306
+ },
307
+ },
308
+
294
309
  // Type declaration files describe other people's shapes; most of the base
295
310
  // rules are noise there.
296
311
  {
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Rules for render-path patterns that cost little in Chrome and a lot in
3
+ * WebKit (Safari, and the WKWebView the desktop and iOS shells run in). Each
4
+ * one was measured on the Mingo chat in 2026-10 (openframe-oss-lib#2513); the
5
+ * numbers are in the rule messages so a finding explains itself.
6
+ */
7
+
8
+ /** A `<style>` element in JSX: its text is replaced whenever React re-renders
9
+ * it, and every replacement makes WebKit restyle and relayout the document. */
10
+ const noInlineStyleElement = {
11
+ meta: {
12
+ type: 'problem',
13
+ docs: { description: 'Disallow <style> elements rendered from components' },
14
+ schema: [],
15
+ messages: {
16
+ inlineStyle:
17
+ 'Do not render a <style> element: React rewrites it on re-render and each rewrite makes WebKit ' +
18
+ 'restyle and relayout the whole document (Mingo streaming: 15ms -> 1ms per chunk once removed). ' +
19
+ 'Put keyframes in the Tailwind preset and other CSS in a stylesheet.',
20
+ },
21
+ },
22
+ create(context) {
23
+ return {
24
+ JSXOpeningElement(node) {
25
+ if (node.name.type === 'JSXIdentifier' && node.name.name === 'style') {
26
+ context.report({ node, messageId: 'inlineStyle' });
27
+ }
28
+ },
29
+ };
30
+ },
31
+ };
32
+
33
+ /** zustand-style store hooks are `use<Name>Store`. */
34
+ const STORE_HOOK = /^use[A-Z]\w*Store$/;
35
+
36
+ /** `useXStore()` / `useXStore(s => s)`: the component re-renders on every
37
+ * write to any field of the store, not just the ones it reads. */
38
+ const noWholeStoreSubscription = {
39
+ meta: {
40
+ type: 'problem',
41
+ docs: { description: 'Require a selector when subscribing to a store hook' },
42
+ schema: [],
43
+ messages: {
44
+ wholeStore:
45
+ '{{name}} without a field selector subscribes to the whole store, so every write to any field re-renders this component ' +
46
+ '(Mingo chat: 4 renders per streamed frame -> 1 with selectors). Select the fields you read: ' +
47
+ '{{name}}(s => s.field), or useShallow(s => ({ ... })) for several.',
48
+ },
49
+ },
50
+ create(context) {
51
+ return {
52
+ CallExpression(node) {
53
+ if (node.callee.type !== 'Identifier' || !STORE_HOOK.test(node.callee.name)) return;
54
+ const [selector] = node.arguments;
55
+ const identity =
56
+ selector?.type === 'ArrowFunctionExpression' &&
57
+ selector.params.length === 1 &&
58
+ selector.params[0].type === 'Identifier' &&
59
+ selector.body.type === 'Identifier' &&
60
+ selector.body.name === selector.params[0].name;
61
+ if (!selector || identity) {
62
+ context.report({ node, messageId: 'wholeStore', data: { name: node.callee.name } });
63
+ }
64
+ },
65
+ };
66
+ },
67
+ };
68
+
69
+ export const webviewPerformancePlugin = {
70
+ meta: { name: 'flamingo-webview-performance' },
71
+ rules: {
72
+ 'no-inline-style-element': noInlineStyleElement,
73
+ 'no-whole-store-subscription': noWholeStoreSubscription,
74
+ },
75
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flamingo-stack/openframe-frontend-core",
3
- "version": "0.0.692",
3
+ "version": "0.0.693-snapshot.20261002120603",
4
4
  "description": "Shared design system and components for all Flamingo platforms",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",