@nemme/js-sdk 0.6.2 → 0.7.0

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 (50) hide show
  1. package/README.md +46 -13
  2. package/dist/browser.d.ts +1 -1
  3. package/dist/chunks/client-BF32gejA.js +2 -0
  4. package/dist/chunks/client-BF32gejA.js.map +1 -0
  5. package/dist/chunks/client-DhycnG8v.js +408 -0
  6. package/dist/chunks/client-DhycnG8v.js.map +1 -0
  7. package/dist/chunks/form-manager-CdG9IzjD.js +12 -0
  8. package/dist/chunks/form-manager-CdG9IzjD.js.map +1 -0
  9. package/dist/chunks/form-manager-DRUgPPf5.js +6143 -0
  10. package/dist/chunks/form-manager-DRUgPPf5.js.map +1 -0
  11. package/dist/chunks/httpClient-D2IO92uv.js +149 -0
  12. package/dist/chunks/httpClient-D2IO92uv.js.map +1 -0
  13. package/dist/chunks/httpClient-hrn9Ffa2.js +2 -0
  14. package/dist/chunks/httpClient-hrn9Ffa2.js.map +1 -0
  15. package/dist/chunks/jsx-runtime-BubrbI3X.js +2 -0
  16. package/dist/chunks/jsx-runtime-BubrbI3X.js.map +1 -0
  17. package/dist/chunks/jsx-runtime-jIxVPx5o.js +32 -0
  18. package/dist/chunks/jsx-runtime-jIxVPx5o.js.map +1 -0
  19. package/dist/client.d.ts +11 -9
  20. package/dist/deliveries/delivery-manager.d.ts +3 -3
  21. package/dist/forms/form-manager.d.ts +1 -10
  22. package/dist/forms/form-wrapper/form-wrapper.d.ts +1 -0
  23. package/dist/forms/form-wrapper/step.d.ts +1 -0
  24. package/dist/forms-entry.d.ts +3 -0
  25. package/dist/forms.cjs +2 -0
  26. package/dist/forms.cjs.map +1 -0
  27. package/dist/forms.esm.js +6 -0
  28. package/dist/forms.esm.js.map +1 -0
  29. package/dist/index.cjs +1 -11
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.esm.js +6 -6750
  33. package/dist/index.esm.js.map +1 -1
  34. package/dist/js-sdk.css +1 -0
  35. package/dist/nemme-sdk.umd.js +4 -4
  36. package/dist/nemme-sdk.umd.js.map +1 -1
  37. package/dist/react-entry.d.ts +3 -0
  38. package/dist/react.cjs +2 -0
  39. package/dist/react.cjs.map +1 -0
  40. package/dist/react.esm.js +83 -0
  41. package/dist/react.esm.js.map +1 -0
  42. package/dist/style-entry.d.ts +0 -0
  43. package/dist/style.cjs +2 -0
  44. package/dist/style.cjs.map +1 -0
  45. package/dist/style.esm.js +2 -0
  46. package/dist/style.esm.js.map +1 -0
  47. package/dist/tracking/tracking-manager.d.ts +1 -0
  48. package/dist/types/forms.d.ts +63 -0
  49. package/package.json +36 -10
  50. package/dist/assets/js-sdk.css +0 -1
@@ -0,0 +1,3 @@
1
+ export { NemmeProvider } from './react/NemmeProvider';
2
+ export { useNemmeContext } from './react/useNemmeContext';
3
+ export { useNemme } from './react/useNemme';
package/dist/react.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("./chunks/jsx-runtime-BubrbI3X.js"),i=require("react"),z=require("./chunks/client-BF32gejA.js"),a=i.createContext(void 0);function C(e,t){switch(t.type){case"reset":return{client:null,isInitialized:!1,error:null};case"success":return{client:t.client,isInitialized:t.initialized,error:t.error};case"error":return{client:null,isInitialized:!1,error:t.error}}}const N=({clientKey:e,config:t,children:o})=>{const[n,s]=i.useReducer(C,{client:null,isInitialized:!1,error:null}),l=i.useMemo(()=>t,[JSON.stringify(t)]);i.useEffect(()=>{let c=!1,u=null;return s({type:"reset"}),(async()=>{try{const r=new z.NemmeClient(e);if(await r.init(l),c){r.destroy();return}u=r,s({type:"success",client:r,initialized:r.initialized,error:r.lastInitError?r.lastInitError.message:null})}catch(r){c||s({type:"error",error:r instanceof Error?r.message:"Failed to initialize Nemme client"})}})(),()=>{c=!0,u&&u.destroy()}},[e,l]);const d={client:n.client,isInitialized:n.isInitialized,error:n.error};return f.jsxRuntimeExports.jsx(a.Provider,{value:d,children:o})},m=()=>{const e=i.useContext(a);if(e===void 0)throw new Error("useNemmeContext must be used within a NemmeProvider");return e},y=()=>{const{client:e,isInitialized:t,error:o}=m(),n=i.useCallback(async l=>{if(!e||!t){console.warn("Nemme client not initialized");return}return e.track(l)},[e,t]),s=i.useCallback(async()=>{if(!e||!t){console.warn("Nemme client not initialized");return}return e.flush()},[e,t]);return{track:n,flush:s,isInitialized:t,error:o,client:e}};exports.NemmeProvider=N;exports.useNemme=y;exports.useNemmeContext=m;
2
+ //# sourceMappingURL=react.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.cjs","sources":["../src/react/context.ts","../src/react/NemmeProvider.tsx","../src/react/useNemmeContext.ts","../src/react/useNemme.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { NemmeClient } from '../client';\n\nexport interface NemmeContextType {\n client: NemmeClient | null;\n isInitialized: boolean;\n error: string | null;\n}\n\nexport const NemmeContext = createContext<NemmeContextType | undefined>(undefined);\n","import * as React from 'react';\nimport { useEffect, useMemo, useReducer } from 'react';\nimport { ClientConfigType, NemmeClient } from '../client';\nimport { NemmeContext, NemmeContextType } from './context';\n\ninterface NemmeProviderProps {\n clientKey: string;\n config: ClientConfigType;\n children: React.ReactNode;\n}\n\ntype State = {\n client: NemmeClient | null;\n isInitialized: boolean;\n error: string | null;\n};\n\ntype Action =\n | { type: 'reset' }\n | { type: 'success'; client: NemmeClient; initialized: boolean; error: string | null }\n | { type: 'error'; error: string };\n\nfunction reducer(_state: State, action: Action): State {\n switch (action.type) {\n case 'reset':\n return { client: null, isInitialized: false, error: null };\n case 'success':\n return { client: action.client, isInitialized: action.initialized, error: action.error };\n case 'error':\n return { client: null, isInitialized: false, error: action.error };\n }\n}\n\nexport const NemmeProvider: React.FC<NemmeProviderProps> = ({ clientKey, config, children }) => {\n const [state, dispatch] = useReducer(reducer, { client: null, isInitialized: false, error: null });\n\n // Stabilize config: only changes when the serialized value differs\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const stableConfig = useMemo<ClientConfigType>(() => config, [JSON.stringify(config)]);\n\n useEffect(() => {\n let isCancelled = false;\n let currentClient: NemmeClient | null = null;\n\n dispatch({ type: 'reset' });\n\n const initializeClient = async () => {\n try {\n const nemmeClient = new NemmeClient(clientKey);\n await nemmeClient.init(stableConfig);\n\n if (isCancelled) {\n nemmeClient.destroy();\n return;\n }\n\n currentClient = nemmeClient;\n dispatch({\n type: 'success',\n client: nemmeClient,\n initialized: nemmeClient.initialized,\n error: nemmeClient.lastInitError ? nemmeClient.lastInitError.message : null\n });\n } catch (err) {\n if (!isCancelled) {\n dispatch({\n type: 'error',\n error: err instanceof Error ? err.message : 'Failed to initialize Nemme client'\n });\n }\n }\n };\n\n initializeClient();\n\n return () => {\n isCancelled = true;\n if (currentClient) {\n currentClient.destroy();\n }\n };\n }, [clientKey, stableConfig]);\n\n const value: NemmeContextType = {\n client: state.client,\n isInitialized: state.isInitialized,\n error: state.error\n };\n\n return <NemmeContext.Provider value={value}>{children}</NemmeContext.Provider>;\n};\n","import { useContext } from 'react';\nimport { NemmeContext } from './context';\n\nexport const useNemmeContext = () => {\n const context = useContext(NemmeContext);\n if (context === undefined) {\n throw new Error('useNemmeContext must be used within a NemmeProvider');\n }\n return context;\n};\n","import { useCallback } from 'react';\nimport { useNemmeContext } from './useNemmeContext';\nimport { TrackEventOptions } from '../client';\n\nexport const useNemme = () => {\n const { client, isInitialized, error } = useNemmeContext();\n\n const track = useCallback(\n async <T extends TrackEventOptions>(options: T) => {\n if (!client || !isInitialized) {\n console.warn('Nemme client not initialized');\n return;\n }\n return client.track(options);\n },\n [client, isInitialized]\n );\n\n const flush = useCallback(async () => {\n if (!client || !isInitialized) {\n console.warn('Nemme client not initialized');\n return;\n }\n return client.flush();\n }, [client, isInitialized]);\n\n return {\n track,\n flush,\n isInitialized,\n error,\n client\n };\n};\n"],"names":["NemmeContext","createContext","reducer","_state","action","NemmeProvider","clientKey","config","children","state","dispatch","useReducer","stableConfig","useMemo","useEffect","isCancelled","currentClient","nemmeClient","NemmeClient","err","value","jsx","useNemmeContext","context","useContext","useNemme","client","isInitialized","error","track","useCallback","options","flush"],"mappings":"gMASaA,EAAeC,EAAAA,cAA4C,MAAS,ECajF,SAASC,EAAQC,EAAeC,EAAuB,CACrD,OAAQA,EAAO,KAAA,CACb,IAAK,QACH,MAAO,CAAE,OAAQ,KAAM,cAAe,GAAO,MAAO,IAAA,EACtD,IAAK,UACH,MAAO,CAAE,OAAQA,EAAO,OAAQ,cAAeA,EAAO,YAAa,MAAOA,EAAO,KAAA,EACnF,IAAK,QACH,MAAO,CAAE,OAAQ,KAAM,cAAe,GAAO,MAAOA,EAAO,KAAA,CAAM,CAEvE,CAEO,MAAMC,EAA8C,CAAC,CAAE,UAAAC,EAAW,OAAAC,EAAQ,SAAAC,KAAe,CAC9F,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,WAAWT,EAAS,CAAE,OAAQ,KAAM,cAAe,GAAO,MAAO,KAAM,EAI3FU,EAAeC,EAAAA,QAA0B,IAAMN,EAAQ,CAAC,KAAK,UAAUA,CAAM,CAAC,CAAC,EAErFO,EAAAA,UAAU,IAAM,CACd,IAAIC,EAAc,GACdC,EAAoC,KAExC,OAAAN,EAAS,CAAE,KAAM,QAAS,GAED,SAAY,CACnC,GAAI,CACF,MAAMO,EAAc,IAAIC,EAAAA,YAAYZ,CAAS,EAG7C,GAFA,MAAMW,EAAY,KAAKL,CAAY,EAE/BG,EAAa,CACfE,EAAY,QAAA,EACZ,MACF,CAEAD,EAAgBC,EAChBP,EAAS,CACP,KAAM,UACN,OAAQO,EACR,YAAaA,EAAY,YACzB,MAAOA,EAAY,cAAgBA,EAAY,cAAc,QAAU,IAAA,CACxE,CACH,OAASE,EAAK,CACPJ,GACHL,EAAS,CACP,KAAM,QACN,MAAOS,aAAe,MAAQA,EAAI,QAAU,mCAAA,CAC7C,CAEL,CACF,GAEA,EAEO,IAAM,CACXJ,EAAc,GACVC,GACFA,EAAc,QAAA,CAElB,CACF,EAAG,CAACV,EAAWM,CAAY,CAAC,EAE5B,MAAMQ,EAA0B,CAC9B,OAAQX,EAAM,OACd,cAAeA,EAAM,cACrB,MAAOA,EAAM,KAAA,EAGf,OAAOY,EAAAA,kBAAAA,IAACrB,EAAa,SAAb,CAAsB,MAAAoB,EAAe,SAAAZ,CAAA,CAAS,CACxD,ECvFac,EAAkB,IAAM,CACnC,MAAMC,EAAUC,EAAAA,WAAWxB,CAAY,EACvC,GAAIuB,IAAY,OACd,MAAM,IAAI,MAAM,qDAAqD,EAEvE,OAAOA,CACT,ECLaE,EAAW,IAAM,CAC5B,KAAM,CAAE,OAAAC,EAAQ,cAAAC,EAAe,MAAAC,CAAA,EAAUN,EAAA,EAEnCO,EAAQC,EAAAA,YACZ,MAAoCC,GAAe,CACjD,GAAI,CAACL,GAAU,CAACC,EAAe,CAC7B,QAAQ,KAAK,8BAA8B,EAC3C,MACF,CACA,OAAOD,EAAO,MAAMK,CAAO,CAC7B,EACA,CAACL,EAAQC,CAAa,CAAA,EAGlBK,EAAQF,EAAAA,YAAY,SAAY,CACpC,GAAI,CAACJ,GAAU,CAACC,EAAe,CAC7B,QAAQ,KAAK,8BAA8B,EAC3C,MACF,CACA,OAAOD,EAAO,MAAA,CAChB,EAAG,CAACA,EAAQC,CAAa,CAAC,EAE1B,MAAO,CACL,MAAAE,EACA,MAAAG,EACA,cAAAL,EACA,MAAAC,EACA,OAAAF,CAAA,CAEJ"}
@@ -0,0 +1,83 @@
1
+ import { j as d } from "./chunks/jsx-runtime-jIxVPx5o.js";
2
+ import { createContext as f, useReducer as z, useMemo as C, useEffect as N, useContext as p, useCallback as a } from "react";
3
+ import { N as x } from "./chunks/client-DhycnG8v.js";
4
+ const u = f(void 0);
5
+ function y(e, t) {
6
+ switch (t.type) {
7
+ case "reset":
8
+ return { client: null, isInitialized: !1, error: null };
9
+ case "success":
10
+ return { client: t.client, isInitialized: t.initialized, error: t.error };
11
+ case "error":
12
+ return { client: null, isInitialized: !1, error: t.error };
13
+ }
14
+ }
15
+ const b = ({ clientKey: e, config: t, children: l }) => {
16
+ const [i, n] = z(y, { client: null, isInitialized: !1, error: null }), s = C(() => t, [JSON.stringify(t)]);
17
+ N(() => {
18
+ let o = !1, c = null;
19
+ return n({ type: "reset" }), (async () => {
20
+ try {
21
+ const r = new x(e);
22
+ if (await r.init(s), o) {
23
+ r.destroy();
24
+ return;
25
+ }
26
+ c = r, n({
27
+ type: "success",
28
+ client: r,
29
+ initialized: r.initialized,
30
+ error: r.lastInitError ? r.lastInitError.message : null
31
+ });
32
+ } catch (r) {
33
+ o || n({
34
+ type: "error",
35
+ error: r instanceof Error ? r.message : "Failed to initialize Nemme client"
36
+ });
37
+ }
38
+ })(), () => {
39
+ o = !0, c && c.destroy();
40
+ };
41
+ }, [e, s]);
42
+ const m = {
43
+ client: i.client,
44
+ isInitialized: i.isInitialized,
45
+ error: i.error
46
+ };
47
+ return /* @__PURE__ */ d.jsx(u.Provider, { value: m, children: l });
48
+ }, I = () => {
49
+ const e = p(u);
50
+ if (e === void 0)
51
+ throw new Error("useNemmeContext must be used within a NemmeProvider");
52
+ return e;
53
+ }, g = () => {
54
+ const { client: e, isInitialized: t, error: l } = I(), i = a(
55
+ async (s) => {
56
+ if (!e || !t) {
57
+ console.warn("Nemme client not initialized");
58
+ return;
59
+ }
60
+ return e.track(s);
61
+ },
62
+ [e, t]
63
+ ), n = a(async () => {
64
+ if (!e || !t) {
65
+ console.warn("Nemme client not initialized");
66
+ return;
67
+ }
68
+ return e.flush();
69
+ }, [e, t]);
70
+ return {
71
+ track: i,
72
+ flush: n,
73
+ isInitialized: t,
74
+ error: l,
75
+ client: e
76
+ };
77
+ };
78
+ export {
79
+ b as NemmeProvider,
80
+ g as useNemme,
81
+ I as useNemmeContext
82
+ };
83
+ //# sourceMappingURL=react.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.esm.js","sources":["../src/react/context.ts","../src/react/NemmeProvider.tsx","../src/react/useNemmeContext.ts","../src/react/useNemme.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { NemmeClient } from '../client';\n\nexport interface NemmeContextType {\n client: NemmeClient | null;\n isInitialized: boolean;\n error: string | null;\n}\n\nexport const NemmeContext = createContext<NemmeContextType | undefined>(undefined);\n","import * as React from 'react';\nimport { useEffect, useMemo, useReducer } from 'react';\nimport { ClientConfigType, NemmeClient } from '../client';\nimport { NemmeContext, NemmeContextType } from './context';\n\ninterface NemmeProviderProps {\n clientKey: string;\n config: ClientConfigType;\n children: React.ReactNode;\n}\n\ntype State = {\n client: NemmeClient | null;\n isInitialized: boolean;\n error: string | null;\n};\n\ntype Action =\n | { type: 'reset' }\n | { type: 'success'; client: NemmeClient; initialized: boolean; error: string | null }\n | { type: 'error'; error: string };\n\nfunction reducer(_state: State, action: Action): State {\n switch (action.type) {\n case 'reset':\n return { client: null, isInitialized: false, error: null };\n case 'success':\n return { client: action.client, isInitialized: action.initialized, error: action.error };\n case 'error':\n return { client: null, isInitialized: false, error: action.error };\n }\n}\n\nexport const NemmeProvider: React.FC<NemmeProviderProps> = ({ clientKey, config, children }) => {\n const [state, dispatch] = useReducer(reducer, { client: null, isInitialized: false, error: null });\n\n // Stabilize config: only changes when the serialized value differs\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const stableConfig = useMemo<ClientConfigType>(() => config, [JSON.stringify(config)]);\n\n useEffect(() => {\n let isCancelled = false;\n let currentClient: NemmeClient | null = null;\n\n dispatch({ type: 'reset' });\n\n const initializeClient = async () => {\n try {\n const nemmeClient = new NemmeClient(clientKey);\n await nemmeClient.init(stableConfig);\n\n if (isCancelled) {\n nemmeClient.destroy();\n return;\n }\n\n currentClient = nemmeClient;\n dispatch({\n type: 'success',\n client: nemmeClient,\n initialized: nemmeClient.initialized,\n error: nemmeClient.lastInitError ? nemmeClient.lastInitError.message : null\n });\n } catch (err) {\n if (!isCancelled) {\n dispatch({\n type: 'error',\n error: err instanceof Error ? err.message : 'Failed to initialize Nemme client'\n });\n }\n }\n };\n\n initializeClient();\n\n return () => {\n isCancelled = true;\n if (currentClient) {\n currentClient.destroy();\n }\n };\n }, [clientKey, stableConfig]);\n\n const value: NemmeContextType = {\n client: state.client,\n isInitialized: state.isInitialized,\n error: state.error\n };\n\n return <NemmeContext.Provider value={value}>{children}</NemmeContext.Provider>;\n};\n","import { useContext } from 'react';\nimport { NemmeContext } from './context';\n\nexport const useNemmeContext = () => {\n const context = useContext(NemmeContext);\n if (context === undefined) {\n throw new Error('useNemmeContext must be used within a NemmeProvider');\n }\n return context;\n};\n","import { useCallback } from 'react';\nimport { useNemmeContext } from './useNemmeContext';\nimport { TrackEventOptions } from '../client';\n\nexport const useNemme = () => {\n const { client, isInitialized, error } = useNemmeContext();\n\n const track = useCallback(\n async <T extends TrackEventOptions>(options: T) => {\n if (!client || !isInitialized) {\n console.warn('Nemme client not initialized');\n return;\n }\n return client.track(options);\n },\n [client, isInitialized]\n );\n\n const flush = useCallback(async () => {\n if (!client || !isInitialized) {\n console.warn('Nemme client not initialized');\n return;\n }\n return client.flush();\n }, [client, isInitialized]);\n\n return {\n track,\n flush,\n isInitialized,\n error,\n client\n };\n};\n"],"names":["NemmeContext","createContext","reducer","_state","action","NemmeProvider","clientKey","config","children","state","dispatch","useReducer","stableConfig","useMemo","useEffect","isCancelled","currentClient","nemmeClient","NemmeClient","err","value","jsx","useNemmeContext","context","useContext","useNemme","client","isInitialized","error","track","useCallback","options","flush"],"mappings":";;;AASO,MAAMA,IAAeC,EAA4C,MAAS;ACajF,SAASC,EAAQC,GAAeC,GAAuB;AACrD,UAAQA,EAAO,MAAA;AAAA,IACb,KAAK;AACH,aAAO,EAAE,QAAQ,MAAM,eAAe,IAAO,OAAO,KAAA;AAAA,IACtD,KAAK;AACH,aAAO,EAAE,QAAQA,EAAO,QAAQ,eAAeA,EAAO,aAAa,OAAOA,EAAO,MAAA;AAAA,IACnF,KAAK;AACH,aAAO,EAAE,QAAQ,MAAM,eAAe,IAAO,OAAOA,EAAO,MAAA;AAAA,EAAM;AAEvE;AAEO,MAAMC,IAA8C,CAAC,EAAE,WAAAC,GAAW,QAAAC,GAAQ,UAAAC,QAAe;AAC9F,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAWT,GAAS,EAAE,QAAQ,MAAM,eAAe,IAAO,OAAO,MAAM,GAI3FU,IAAeC,EAA0B,MAAMN,GAAQ,CAAC,KAAK,UAAUA,CAAM,CAAC,CAAC;AAErF,EAAAO,EAAU,MAAM;AACd,QAAIC,IAAc,IACdC,IAAoC;AAExC,WAAAN,EAAS,EAAE,MAAM,SAAS,IAED,YAAY;AACnC,UAAI;AACF,cAAMO,IAAc,IAAIC,EAAYZ,CAAS;AAG7C,YAFA,MAAMW,EAAY,KAAKL,CAAY,GAE/BG,GAAa;AACf,UAAAE,EAAY,QAAA;AACZ;AAAA,QACF;AAEA,QAAAD,IAAgBC,GAChBP,EAAS;AAAA,UACP,MAAM;AAAA,UACN,QAAQO;AAAA,UACR,aAAaA,EAAY;AAAA,UACzB,OAAOA,EAAY,gBAAgBA,EAAY,cAAc,UAAU;AAAA,QAAA,CACxE;AAAA,MACH,SAASE,GAAK;AACZ,QAAKJ,KACHL,EAAS;AAAA,UACP,MAAM;AAAA,UACN,OAAOS,aAAe,QAAQA,EAAI,UAAU;AAAA,QAAA,CAC7C;AAAA,MAEL;AAAA,IACF,GAEA,GAEO,MAAM;AACX,MAAAJ,IAAc,IACVC,KACFA,EAAc,QAAA;AAAA,IAElB;AAAA,EACF,GAAG,CAACV,GAAWM,CAAY,CAAC;AAE5B,QAAMQ,IAA0B;AAAA,IAC9B,QAAQX,EAAM;AAAA,IACd,eAAeA,EAAM;AAAA,IACrB,OAAOA,EAAM;AAAA,EAAA;AAGf,SAAOY,gBAAAA,EAAAA,IAACrB,EAAa,UAAb,EAAsB,OAAAoB,GAAe,UAAAZ,EAAA,CAAS;AACxD,GCvFac,IAAkB,MAAM;AACnC,QAAMC,IAAUC,EAAWxB,CAAY;AACvC,MAAIuB,MAAY;AACd,UAAM,IAAI,MAAM,qDAAqD;AAEvE,SAAOA;AACT,GCLaE,IAAW,MAAM;AAC5B,QAAM,EAAE,QAAAC,GAAQ,eAAAC,GAAe,OAAAC,EAAA,IAAUN,EAAA,GAEnCO,IAAQC;AAAA,IACZ,OAAoCC,MAAe;AACjD,UAAI,CAACL,KAAU,CAACC,GAAe;AAC7B,gBAAQ,KAAK,8BAA8B;AAC3C;AAAA,MACF;AACA,aAAOD,EAAO,MAAMK,CAAO;AAAA,IAC7B;AAAA,IACA,CAACL,GAAQC,CAAa;AAAA,EAAA,GAGlBK,IAAQF,EAAY,YAAY;AACpC,QAAI,CAACJ,KAAU,CAACC,GAAe;AAC7B,cAAQ,KAAK,8BAA8B;AAC3C;AAAA,IACF;AACA,WAAOD,EAAO,MAAA;AAAA,EAChB,GAAG,CAACA,GAAQC,CAAa,CAAC;AAE1B,SAAO;AAAA,IACL,OAAAE;AAAA,IACA,OAAAG;AAAA,IACA,eAAAL;AAAA,IACA,OAAAC;AAAA,IACA,QAAAF;AAAA,EAAA;AAEJ;"}
File without changes
package/dist/style.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=style.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=style.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -58,6 +58,7 @@ export declare class TrackingManager {
58
58
  * Clean up event listeners and restore original history methods
59
59
  */
60
60
  destroy(): void;
61
+ private sanitizeEventData;
61
62
  private validateEvent;
62
63
  private handlePopState;
63
64
  private handleVisibilityChange;
@@ -0,0 +1,63 @@
1
+ export type FormErrorType = 'FETCH_ERROR' | 'SUBMISSION_ERROR';
2
+ export declare class FormError extends Error {
3
+ errorType: FormErrorType;
4
+ constructor(errorType: FormErrorType, message?: string);
5
+ }
6
+ export type FormConfig = {
7
+ zIndex?: number;
8
+ theme?: 'light' | 'dark';
9
+ onFormError?: (error: FormError) => void;
10
+ };
11
+ export type ProductType = 'FRM' | 'TRK';
12
+ export type QuestionType = 'choice' | 'score' | 'text' | 'ranking';
13
+ export type StartTransition = {
14
+ title: string;
15
+ description?: string;
16
+ image?: string;
17
+ includeOptOut: boolean;
18
+ customStartButton: boolean;
19
+ startButtonText?: string;
20
+ customOptOutButton: boolean;
21
+ optOutButtonText?: string;
22
+ };
23
+ export type EndTransition = {
24
+ title: string;
25
+ description?: string;
26
+ image?: string;
27
+ customEndButton: boolean;
28
+ endButtonText?: string;
29
+ customEndButtonLink: boolean;
30
+ endButtonLink?: string;
31
+ };
32
+ export type BaseQuestion = {
33
+ id: number;
34
+ questionType: QuestionType;
35
+ title: string;
36
+ description?: string;
37
+ image?: string;
38
+ required: boolean;
39
+ order: number;
40
+ };
41
+ export type TextQuestion = BaseQuestion & {
42
+ limited: boolean;
43
+ maxChars?: number;
44
+ };
45
+ export type ChoiceQuestion = BaseQuestion & {
46
+ maxSelections: number;
47
+ verticalAlignment: boolean;
48
+ alternatives: ChoiceQuestionAlternative[];
49
+ };
50
+ export type ChoiceQuestionAlternative = {
51
+ id: number;
52
+ text: string;
53
+ order: number;
54
+ };
55
+ export type Question = TextQuestion | ChoiceQuestion;
56
+ export type Form = {
57
+ name: string;
58
+ slug: string;
59
+ icon?: string;
60
+ startTransition?: StartTransition;
61
+ endTransition?: EndTransition;
62
+ questions: Question[];
63
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nemme/js-sdk",
3
- "version": "0.6.2",
3
+ "version": "0.7.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.esm.js",
@@ -11,8 +11,7 @@
11
11
  "/dist"
12
12
  ],
13
13
  "sideEffects": [
14
- "**/*.css",
15
- "dist/**"
14
+ "**/*.css"
16
15
  ],
17
16
  "exports": {
18
17
  ".": {
@@ -21,7 +20,20 @@
21
20
  "require": "./dist/index.cjs",
22
21
  "default": "./dist/index.esm.js"
23
22
  },
24
- "./style.css": "./dist/assets/js-sdk.css",
23
+ "./react": {
24
+ "types": "./dist/react-entry.d.ts",
25
+ "import": "./dist/react.esm.js",
26
+ "require": "./dist/react.cjs",
27
+ "default": "./dist/react.esm.js"
28
+ },
29
+ "./forms": {
30
+ "types": "./dist/forms-entry.d.ts",
31
+ "import": "./dist/forms.esm.js",
32
+ "require": "./dist/forms.cjs",
33
+ "default": "./dist/forms.esm.js"
34
+ },
35
+ "./style.css": "./dist/js-sdk.css",
36
+ "./dist/js-sdk.css": "./dist/js-sdk.css",
25
37
  "./dist/assets/js-sdk.css": "./dist/assets/js-sdk.css"
26
38
  },
27
39
  "scripts": {
@@ -30,9 +42,9 @@
30
42
  "debug": "vitest --test-timeout=0 --no-file-parallelism",
31
43
  "cov": "vitest run --coverage",
32
44
  "type-check": "tsc --noEmit",
33
- "build": "tsc && vite build",
34
- "build:dev": "tsc && vite build --mode development",
35
- "build:test": "tsc && vite build --mode test",
45
+ "build": "tsc && vite build && vite build -c vite.umd.config.ts",
46
+ "build:dev": "tsc && vite build --mode development && vite build -c vite.umd.config.ts --mode development",
47
+ "build:test": "tsc && vite build --mode test && vite build -c vite.umd.config.ts --mode test",
36
48
  "dev": "vite",
37
49
  "preview": "vite preview",
38
50
  "sb": "storybook dev -p 6006 --no-open",
@@ -45,15 +57,26 @@
45
57
  "author": "Nemme AS",
46
58
  "license": "MIT",
47
59
  "description": "Nemme JS SDK",
60
+ "peerDependencies": {
61
+ "react": "^19.0.0",
62
+ "react-dom": "^19.0.0"
63
+ },
64
+ "peerDependenciesMeta": {
65
+ "react": {
66
+ "optional": true
67
+ },
68
+ "react-dom": {
69
+ "optional": true
70
+ }
71
+ },
48
72
  "dependencies": {
49
73
  "@phosphor-icons/react": "^2.1.10",
50
74
  "date-fns": "^4.1.0",
51
75
  "i18next-browser-languagedetector": "^8.2.1",
52
- "react": "^18.0.0 || ^19.0.0",
53
- "react-dom": "^18.0.0 || ^19.0.0",
54
76
  "react-i18next": "^16.5.4"
55
77
  },
56
78
  "devDependencies": {
79
+ "@bcoe/v8-coverage": "^1.0.2",
57
80
  "@chromatic-com/storybook": "^5.0.1",
58
81
  "@eslint/compat": "^2.0.2",
59
82
  "@eslint/eslintrc": "^3.2.0",
@@ -74,6 +97,7 @@
74
97
  "@vitejs/plugin-react": "^5.1.4",
75
98
  "@vitest/browser": "^4.0.18",
76
99
  "@vitest/coverage-v8": "^4.0.18",
100
+ "ast-v8-to-istanbul": "^0.3.12",
77
101
  "eslint": "^9.39.0",
78
102
  "eslint-config-prettier": "^10.1.5",
79
103
  "eslint-plugin-prettier": "^5.4.1",
@@ -89,7 +113,9 @@
89
113
  "postcss-import": "^16.1.1",
90
114
  "postcss-prefixwrap": "^1.57.2",
91
115
  "prettier": "^3.5.1",
92
- "storybook": "^10.2.8",
116
+ "react": "^19.2.4",
117
+ "react-dom": "^19.2.4",
118
+ "storybook": "^10.2.10",
93
119
  "tailwindcss": "^4.1.13",
94
120
  "typescript": "^5.8.3",
95
121
  "vite": "^7.1.7",
@@ -1 +0,0 @@
1
- @import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Plus+Jakarta+Sans:wght@400;500;600;700&family=Fira+Code:wght@400;500;600&display=swap";@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){#nm *,#nm :before,#nm :after,#nm ::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}#nm,#nm :host{--font-sans:Inter,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xl:24px;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-background-primary-dark:#101011;--color-background-primary-grouped-dark:#101011;--color-background-primary-grouped-light:#e5e5ea;--color-background-primary-light:#fbfbfd;--color-background-secondary-grouped-dark:#1c1c1e;--color-background-secondary-grouped-light:#fbfbfd;--color-background-tertiary-grouped-dark:#242426;--color-background-tertiary-grouped-light:#f2f2f7;--color-background-universal-overlay-dark:#ffffff0f;--color-background-universal-overlay-light:#00000012;--color-brand-coral-default-dark:#ff6832;--color-brand-coral-default-light:#ff6832;--color-brand-coral-text-big-dark:#ff6832;--color-brand-coral-text-big-light:#e54e1d;--color-brand-mint-text-big-dark:#55d4b9;--color-brand-mint-text-big-light:#04836c;--color-brand-yellow-text-big-dark:#febe00;--color-brand-yellow-text-big-light:#ad6d00;--color-danger-accessible-dark:#fef1f2;--color-danger-accessible-light:#a10010;--color-danger-background-dark:#a10010;--color-danger-background-light:#fef1f2;--color-danger-default-dark:#ff453a;--color-danger-default-light:#ff3b2f;--color-danger-hover-dark:#ff8680;--color-danger-hover-light:#d70015;--color-grey-0:#fff;--color-grey-200:#c7c7cc;--color-label-placeholder-dark:#8e8e93;--color-label-placeholder-light:#8e8e93;--color-label-primary-dark:#fff;--color-label-primary-light:#000;--color-label-quaternary-dark:#000;--color-label-quaternary-light:#fff;--color-label-secondary-dark:#8e8e93;--color-label-secondary-light:#636366;--color-label-tertiary-dark:#636366;--color-label-tertiary-light:#8e8e93;--color-nonadaptable-text-dark:#000;--color-nonadaptable-text-light:#fff;--color-overlay-background-default-dark:#000000a6;--color-overlay-background-default-light:#0000008c;--color-overlay-fill-alternative-dark:#ffffff24;--color-overlay-fill-alternative-light:#00000024;--color-overlay-fill-default-dark:#ffffff0f;--color-overlay-fill-default-light:#00000012;--color-primary-action-button-dark:#325fcb;--color-primary-action-button-hover-dark:#2c4db9;--color-primary-action-button-hover-light:#2c4db9;--color-primary-action-button-light:#3461da;--color-primary-action-disabled-dark:#3a3a3c;--color-primary-action-disabled-light:#d1d1d6;--color-primary-action-graphical-dark:#1c73e8;--color-primary-action-graphical-light:#2c4db9;--color-secondary-action-button-dark:#fff;--color-secondary-action-button-hover-dark:#d1d1d6;--color-secondary-action-button-hover-light:#242426;--color-secondary-action-button-light:#000;--color-secondary-action-disabled-dark:#3a3a3c;--color-secondary-action-disabled-light:#d1d1d6;--color-separator-opaque-alternative-dark:#2c2c2e;--color-separator-opaque-alternative-light:#d1d1d6;--color-separator-opaque-dark:#242426;--color-separator-opaque-light:#e5e5ea;--color-separator-regular-dark:#48484a;--color-separator-regular-light:#aeaeb2;--color-success-default-dark:#31d158;--color-success-default-light:#35c759;--color-tertiary-action-button-dark:#ffffff0f;--color-tertiary-action-button-hover-dark:#ffffff24;--color-tertiary-action-button-hover-light:#00000024;--color-tertiary-action-button-light:#00000012;--color-tertiary-action-disabled-dark:#ffffff0f;--color-tertiary-action-disabled-light:#00000012;--color-warning-default-dark:#fed709;--color-warning-default-light:#ffcc02;--font-mc:Plus Jakarta Sans,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-code:Fira Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}#nm .pointer-events-none{pointer-events:none}#nm .sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}#nm .static{position:static}#nm .top-1{top:calc(var(--spacing)*1)}#nm .top-2{top:calc(var(--spacing)*2)}#nm .right-0{right:calc(var(--spacing)*0)}#nm .right-2{right:calc(var(--spacing)*2)}#nm .right-4{right:calc(var(--spacing)*4)}#nm .left-0{left:calc(var(--spacing)*0)}#nm .z-10{z-index:10}#nm .m-10{margin:calc(var(--spacing)*10)}#nm .ml-4{margin-left:calc(var(--spacing)*4)}#nm .h-96{height:calc(var(--spacing)*96)}#nm .h-\[16px\]{height:16px}#nm .h-\[17\.5px\]{height:17.5px}#nm .h-\[20px\]{height:20px}#nm .h-\[21px\]{height:21px}#nm .h-\[24px\]{height:24px}#nm .h-\[28px\]{height:28px}#nm .h-\[32px\]{height:32px}#nm .h-\[36px\]{height:36px}#nm .h-\[40px\]{height:40px}#nm .h-px{height:1px}#nm .w-4{width:calc(var(--spacing)*4)}#nm .w-\[16px\]{width:16px}#nm .w-\[17\.5px\]{width:17.5px}#nm .w-\[20px\]{width:20px}#nm .w-\[21px\]{width:21px}#nm .w-\[28px\]{width:28px}#nm .w-\[32px\]{width:32px}#nm .w-\[36px\]{width:36px}#nm .w-\[40px\]{width:40px}#nm .w-\[52px\]{width:52px}#nm .w-\[64px\]{width:64px}#nm .w-max{width:max-content}#nm .w-px{width:1px}#nm .max-w-60{max-width:calc(var(--spacing)*60)}#nm .min-w-36{min-width:calc(var(--spacing)*36)}#nm .flex-1{flex:1}#nm .\!grow{flex-grow:1!important}#nm .grow{flex-grow:1}#nm .transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}#nm .animate-pulse{animation:var(--animate-pulse)}#nm .animate-spin{animation:var(--animate-spin)}#nm .cursor-pointer{cursor:pointer}#nm .list-disc{list-style-type:disc}#nm .flex-row{flex-direction:row}#nm .justify-start{justify-content:flex-start}#nm .gap-3{gap:calc(var(--spacing)*3)}#nm .gap-4{gap:calc(var(--spacing)*4)}#nm .overflow-x-auto{overflow-x:auto}#nm .rounded-\[3\.75px\]{border-radius:3.75px}#nm .rounded-\[3px\]{border-radius:3px}#nm .rounded-\[4\.5px\]{border-radius:4.5px}#nm .rounded-\[4px\]{border-radius:4px}#nm .rounded-\[5px\]{border-radius:5px}#nm .rounded-\[6px\]{border-radius:6px}#nm .rounded-\[8px\]{border-radius:8px}#nm .rounded-\[10px\]{border-radius:10px}#nm .rounded-full{border-radius:3.40282e38px}#nm .rounded-md{border-radius:var(--radius-md)}#nm .rounded-sm{border-radius:var(--radius-sm)}#nm .border-solid{--tw-border-style:solid;border-style:solid}#nm .border-\[rgba\(255\,255\,255\,0\.0\)\]{border-color:#fff0}#nm .border-danger-default-light{border-color:var(--color-danger-default-light)}#nm .border-grey-0\/0{border-color:#0000}@supports (color:color-mix(in lab,red,red)){#nm .border-grey-0\/0{border-color:var(--color-grey-0)}@supports (color:color-mix(in lab,red,red)){#nm .border-grey-0\/0{border-color:color-mix(in oklab,var(--color-grey-0)0%,transparent)}}}#nm .border-b-label-primary-light{border-bottom-color:var(--color-label-primary-light)}#nm .bg-background-primary-grouped-light{background-color:var(--color-background-primary-grouped-light)}#nm .bg-background-secondary-grouped-light{background-color:var(--color-background-secondary-grouped-light)}#nm .bg-background-tertiary-grouped-light{background-color:var(--color-background-tertiary-grouped-light)}#nm .bg-background-universal-overlay-light{background-color:var(--color-background-universal-overlay-light)}#nm .bg-danger-background-light{background-color:var(--color-danger-background-light)}#nm .bg-label-placeholder-light{background-color:var(--color-label-placeholder-light)}#nm .bg-nonadaptable-text-light{background-color:var(--color-nonadaptable-text-light)}#nm .bg-overlay-fill-alternative-light{background-color:var(--color-overlay-fill-alternative-light)}#nm .bg-overlay-fill-default-light{background-color:var(--color-overlay-fill-default-light)}#nm .bg-primary-action-button-light{background-color:var(--color-primary-action-button-light)}#nm .bg-separator-opaque-alternative-light{background-color:var(--color-separator-opaque-alternative-light)}#nm .bg-separator-opaque-light{background-color:var(--color-separator-opaque-light)}#nm .bg-separator-regular-light{background-color:var(--color-separator-regular-light)}#nm .bg-success-default-light{background-color:var(--color-success-default-light)}#nm .bg-tertiary-action-button-light{background-color:var(--color-tertiary-action-button-light)}#nm .bg-transparent{background-color:#0000}#nm .bg-warning-default-light{background-color:var(--color-warning-default-light)}#nm .p-1{padding:calc(var(--spacing)*1)}#nm .p-2{padding:calc(var(--spacing)*2)}#nm .p-\[1\.5px\]{padding:1.5px}#nm .p-\[1\.25px\]{padding:1.25px}#nm .p-\[2px\]{padding:2px}#nm .px-1{padding-inline:calc(var(--spacing)*1)}#nm .px-2{padding-inline:calc(var(--spacing)*2)}#nm .px-3{padding-inline:calc(var(--spacing)*3)}#nm .py-0\.5{padding-block:calc(var(--spacing)*.5)}#nm .py-1{padding-block:calc(var(--spacing)*1)}#nm .py-2{padding-block:calc(var(--spacing)*2)}#nm .pb-6{padding-bottom:calc(var(--spacing)*6)}#nm .font-code{font-family:var(--font-code)}#nm .font-mc{font-family:var(--font-mc)}#nm .font-sans{font-family:var(--font-sans)}#nm .text-\[10px\]{font-size:10px}#nm .text-\[12px\]{font-size:12px}#nm .text-\[13px\]{font-size:13px}#nm .text-\[15px\]{font-size:15px}#nm .text-\[20px\]{font-size:20px}#nm .text-\[24px\]{font-size:24px}#nm .text-\[32px\]{font-size:32px}#nm .text-\[40px\]{font-size:40px}#nm .text-\[48px\]{font-size:48px}#nm .text-\[60px\]{font-size:60px}#nm .text-\[72px\]{font-size:72px}#nm .leading-\[14px\]{--tw-leading:14px;line-height:14px}#nm .leading-\[16px\]{--tw-leading:16px;line-height:16px}#nm .leading-\[20px\]{--tw-leading:20px;line-height:20px}#nm .leading-\[24px\]{--tw-leading:24px;line-height:24px}#nm .leading-\[28px\]{--tw-leading:28px;line-height:28px}#nm .leading-\[32px\]{--tw-leading:32px;line-height:32px}#nm .leading-\[40px\]{--tw-leading:40px;line-height:40px}#nm .leading-\[48px\]{--tw-leading:48px;line-height:48px}#nm .leading-\[52px\]{--tw-leading:52px;line-height:52px}#nm .leading-\[60px\]{--tw-leading:60px;line-height:60px}#nm .leading-\[72px\]{--tw-leading:72px;line-height:72px}#nm .leading-\[80px\]{--tw-leading:80px;line-height:80px}#nm .leading-\[90px\]{--tw-leading:90px;line-height:90px}#nm .font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}#nm .font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}#nm .font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}#nm .text-brand-coral-default-light{color:var(--color-brand-coral-default-light)}#nm .text-brand-coral-text-big-light{color:var(--color-brand-coral-text-big-light)}#nm .text-brand-mint-text-big-light{color:var(--color-brand-mint-text-big-light)}#nm .text-brand-yellow-text-big-light{color:var(--color-brand-yellow-text-big-light)}#nm .text-label-placeholder-light{color:var(--color-label-placeholder-light)}#nm .text-label-secondary-light{color:var(--color-label-secondary-light)}#nm .text-label-tertiary-light{color:var(--color-label-tertiary-light)}#nm .text-nonadaptable-text-dark{color:var(--color-nonadaptable-text-dark)}#nm .text-nonadaptable-text-light{color:var(--color-nonadaptable-text-light)}#nm .text-primary-action-button-light{color:var(--color-primary-action-button-light)}#nm .text-primary-action-disabled-light{color:var(--color-primary-action-disabled-light)}#nm .capitalize{text-transform:capitalize}#nm .underline{text-decoration-line:underline}#nm .shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#nm .backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}@media(hover:hover){#nm .group-hover\:visible:is(:where(.group):hover *){visibility:visible}#nm .group-hover\:block:is(:where(.group):hover *){display:block}#nm .group-hover\:text-label-quaternary-light:is(:where(.group):hover *){color:var(--color-label-quaternary-light)}}#nm .placeholder\:text-label-placeholder-light::placeholder{color:var(--color-label-placeholder-light)}@media(hover:hover){#nm .hover\:border-danger-accessible-light:hover{border-color:var(--color-danger-accessible-light)}#nm .hover\:bg-background-universal-overlay-light:hover{background-color:var(--color-background-universal-overlay-light)}#nm .hover\:bg-danger-background-light:hover{background-color:var(--color-danger-background-light)}#nm .hover\:bg-danger-hover-light:hover{background-color:var(--color-danger-hover-light)}#nm .hover\:bg-overlay-fill-default-light:hover{background-color:var(--color-overlay-fill-default-light)}#nm .hover\:bg-primary-action-button-hover-light:hover{background-color:var(--color-primary-action-button-hover-light)}#nm .hover\:bg-secondary-action-button-hover-light:hover{background-color:var(--color-secondary-action-button-hover-light)}#nm .hover\:bg-tertiary-action-button-hover-light:hover{background-color:var(--color-tertiary-action-button-hover-light)}#nm .hover\:text-label-secondary-light:hover{color:var(--color-label-secondary-light)}#nm .hover\:text-primary-action-graphical-light:hover{color:var(--color-primary-action-graphical-light)}}#nm .focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){#nm .focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}#nm .disabled\:pointer-events-none:disabled{pointer-events:none}#nm .disabled\:border:disabled{border-style:var(--tw-border-style);border-width:1px}#nm .disabled\:border-separator-opaque-light:disabled{border-color:var(--color-separator-opaque-light)}#nm .disabled\:bg-primary-action-disabled-light:disabled{background-color:var(--color-primary-action-disabled-light)}#nm .disabled\:bg-secondary-action-disabled-light:disabled{background-color:var(--color-secondary-action-disabled-light)}#nm .disabled\:bg-tertiary-action-disabled-light:disabled{background-color:var(--color-tertiary-action-disabled-light)}#nm .disabled\:text-primary-action-disabled-light:disabled{color:var(--color-primary-action-disabled-light)}@media(prefers-color-scheme:dark){#nm .dark\:border-danger-default-dark{border-color:var(--color-danger-default-dark)}#nm .dark\:border-separator-opaque-dark{border-color:var(--color-separator-opaque-dark)}#nm .dark\:border-separator-regular-dark{border-color:var(--color-separator-regular-dark)}#nm .dark\:border-b-label-primary-dark{border-bottom-color:var(--color-label-primary-dark)}#nm .dark\:bg-background-primary-dark{background-color:var(--color-background-primary-dark)}#nm .dark\:bg-background-primary-grouped-dark{background-color:var(--color-background-primary-grouped-dark)}#nm .dark\:bg-background-secondary-grouped-dark{background-color:var(--color-background-secondary-grouped-dark)}#nm .dark\:bg-background-tertiary-grouped-dark{background-color:var(--color-background-tertiary-grouped-dark)}#nm .dark\:bg-background-universal-overlay-dark{background-color:var(--color-background-universal-overlay-dark)}#nm .dark\:bg-danger-background-dark{background-color:var(--color-danger-background-dark)}#nm .dark\:bg-overlay-background-default-dark{background-color:var(--color-overlay-background-default-dark)}#nm .dark\:bg-overlay-fill-alternative-dark{background-color:var(--color-overlay-fill-alternative-dark)}#nm .dark\:bg-overlay-fill-default-dark{background-color:var(--color-overlay-fill-default-dark)}#nm .dark\:bg-primary-action-button-dark{background-color:var(--color-primary-action-button-dark)}#nm .dark\:bg-secondary-action-button-dark{background-color:var(--color-secondary-action-button-dark)}#nm .dark\:bg-separator-opaque-alternative-dark{background-color:var(--color-separator-opaque-alternative-dark)}#nm .dark\:bg-separator-opaque-dark{background-color:var(--color-separator-opaque-dark)}#nm .dark\:bg-separator-regular-dark{background-color:var(--color-separator-regular-dark)}#nm .dark\:bg-success-default-dark{background-color:var(--color-success-default-dark)}#nm .dark\:bg-tertiary-action-button-dark{background-color:var(--color-tertiary-action-button-dark)}#nm .dark\:bg-warning-default-dark{background-color:var(--color-warning-default-dark)}#nm .dark\:text-brand-coral-default-dark{color:var(--color-brand-coral-default-dark)}#nm .dark\:text-brand-coral-text-big-dark{color:var(--color-brand-coral-text-big-dark)}#nm .dark\:text-brand-mint-text-big-dark{color:var(--color-brand-mint-text-big-dark)}#nm .dark\:text-brand-yellow-text-big-dark{color:var(--color-brand-yellow-text-big-dark)}#nm .dark\:text-label-placeholder-dark{color:var(--color-label-placeholder-dark)}#nm .dark\:text-label-primary-dark{color:var(--color-label-primary-dark)}#nm .dark\:text-label-quaternary-dark{color:var(--color-label-quaternary-dark)}#nm .dark\:text-label-secondary-dark{color:var(--color-label-secondary-dark)}#nm .dark\:text-label-tertiary-dark{color:var(--color-label-tertiary-dark)}#nm .dark\:text-nonadaptable-text-dark{color:var(--color-nonadaptable-text-dark)}#nm .dark\:text-primary-action-button-dark{color:var(--color-primary-action-button-dark)}#nm .dark\:text-primary-action-disabled-dark{color:var(--color-primary-action-disabled-dark)}@media(hover:hover){#nm .dark\:group-hover\:text-label-quaternary-dark:is(:where(.group):hover *){color:var(--color-label-quaternary-dark)}}#nm .dark\:placeholder\:text-label-placeholder-dark::placeholder{color:var(--color-label-placeholder-dark)}@media(hover:hover){#nm .dark\:hover\:border-danger-accessible-dark:hover{border-color:var(--color-danger-accessible-dark)}#nm .dark\:hover\:bg-background-universal-overlay-dark:hover{background-color:var(--color-background-universal-overlay-dark)}#nm .dark\:hover\:bg-danger-background-dark:hover{background-color:var(--color-danger-background-dark)}#nm .dark\:hover\:bg-danger-hover-dark:hover{background-color:var(--color-danger-hover-dark)}#nm .dark\:hover\:bg-overlay-fill-default-dark:hover{background-color:var(--color-overlay-fill-default-dark)}#nm .dark\:hover\:bg-primary-action-button-hover-dark:hover{background-color:var(--color-primary-action-button-hover-dark)}#nm .dark\:hover\:bg-secondary-action-button-hover-dark:hover{background-color:var(--color-secondary-action-button-hover-dark)}#nm .dark\:hover\:bg-tertiary-action-button-hover-dark:hover{background-color:var(--color-tertiary-action-button-hover-dark)}#nm .dark\:hover\:text-primary-action-graphical-dark:hover{color:var(--color-primary-action-graphical-dark)}}#nm .dark\:disabled\:border-separator-opaque-dark:disabled{border-color:var(--color-separator-opaque-dark)}#nm .dark\:disabled\:bg-primary-action-disabled-dark:disabled{background-color:var(--color-primary-action-disabled-dark)}#nm .dark\:disabled\:bg-secondary-action-disabled-dark:disabled{background-color:var(--color-secondary-action-disabled-dark)}#nm .dark\:disabled\:bg-tertiary-action-disabled-dark:disabled{background-color:var(--color-tertiary-action-disabled-dark)}#nm .dark\:disabled\:text-primary-action-disabled-dark:disabled{color:var(--color-primary-action-disabled-dark)}}#nm .\[\&\]\:text-danger-accessible-light{color:var(--color-danger-accessible-light)}#nm .\[\&\]\:text-label-tertiary-light{color:var(--color-label-tertiary-light)}@media(hover:hover){#nm .group-hover\:\[\&\]\:text-label-tertiary-light:is(:where(.group):hover *){color:var(--color-label-tertiary-light)}}@media(prefers-color-scheme:dark){#nm .dark\:\[\&\]\:text-danger-accessible-dark{color:var(--color-danger-accessible-dark)}#nm .dark\:\[\&\]\:text-label-tertiary-dark{color:var(--color-label-tertiary-dark)}@media(hover:hover){#nm .dark\:group-hover\:\[\&\]\:text-label-tertiary-dark:is(:where(.group):hover *){color:var(--color-label-tertiary-dark)}}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){#nm *,#nm :before,#nm :after,#nm ::backdrop{--tw-border-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}#nm,#nm :host{--font-sans:Inter,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--radius-lg:.5rem;--radius-xl:.75rem;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-background-primary-dark:#101011;--color-background-primary-light:#fbfbfd;--color-background-secondary-dark:#1c1c1e;--color-background-secondary-light:#f2f2f7;--color-grey-200:#c7c7cc;--color-label-primary-dark:#fff;--color-label-primary-light:#000;--color-label-quaternary-dark:#000;--color-label-quaternary-light:#fff;--color-material-grey-5:#f6f6f6d6;--color-material-grey-50:#f6f6f699;--color-material-grey-850:#0000004a;--color-material-grey-950:#00000080;--color-overlay-background-default-dark:#000000a6;--color-overlay-background-default-light:#0000008c;--color-secondary-action-button-dark:#fff;--color-secondary-action-button-light:#000;--color-separator-opaque-dark:#242426;--color-separator-opaque-light:#e5e5ea;--color-separator-regular-dark:#48484a;--color-separator-regular-light:#aeaeb2}#nm *,#nm :after,#nm :before,#nm ::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}#nm ::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}#nm,#nm :host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}#nm hr{height:0;color:inherit;border-top-width:1px}#nm abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}#nm h1,#nm h2,#nm h3,#nm h4,#nm h5,#nm h6{font-size:inherit;font-weight:inherit}#nm a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}#nm b,#nm strong{font-weight:bolder}#nm code,#nm kbd,#nm samp,#nm pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}#nm small{font-size:80%}#nm sub,#nm sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}#nm sub{bottom:-.25em}#nm sup{top:-.5em}#nm table{text-indent:0;border-color:inherit;border-collapse:collapse}#nm :-moz-focusring{outline:auto}#nm progress{vertical-align:baseline}#nm summary{display:list-item}#nm ol,#nm ul,#nm menu{list-style:none}#nm img,#nm svg,#nm video,#nm canvas,#nm audio,#nm iframe,#nm embed,#nm object{vertical-align:middle;display:block}#nm img,#nm video{max-width:100%;height:auto}#nm button,#nm input,#nm select,#nm optgroup,#nm textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}#nm ::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}#nm :where(select:is([multiple],[size])) optgroup{font-weight:bolder}#nm :where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}#nm ::file-selector-button{margin-inline-end:4px}#nm ::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){#nm ::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){#nm ::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){#nm ::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}}#nm textarea{resize:vertical}#nm ::-webkit-search-decoration{-webkit-appearance:none}#nm ::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}#nm ::-webkit-datetime-edit{display:inline-flex}#nm ::-webkit-datetime-edit-fields-wrapper{padding:0}#nm ::-webkit-datetime-edit{padding-block:0}#nm ::-webkit-datetime-edit-year-field{padding-block:0}#nm ::-webkit-datetime-edit-month-field{padding-block:0}#nm ::-webkit-datetime-edit-day-field{padding-block:0}#nm ::-webkit-datetime-edit-hour-field{padding-block:0}#nm ::-webkit-datetime-edit-minute-field{padding-block:0}#nm ::-webkit-datetime-edit-second-field{padding-block:0}#nm ::-webkit-datetime-edit-millisecond-field{padding-block:0}#nm ::-webkit-datetime-edit-meridiem-field{padding-block:0}#nm ::-webkit-calendar-picker-indicator{line-height:1}#nm :-moz-ui-invalid{box-shadow:none}#nm button,#nm input:where([type=button],[type=reset],[type=submit]){appearance:button}#nm ::file-selector-button{appearance:button}#nm ::-webkit-inner-spin-button{height:auto}#nm ::-webkit-outer-spin-button{height:auto}#nm [hidden]:where(:not([hidden=until-found])){display:none!important}#nm *,#nm :after,#nm :before,#nm ::backdrop{border-color:var(--color-grey-200,currentcolor)}#nm ::file-selector-button{border-color:var(--color-grey-200,currentcolor)}#nm button:not(:disabled),#nm [role=button]:not(:disabled){cursor:pointer}#nm .invisible{visibility:hidden}#nm .visible{visibility:visible}#nm .absolute{position:absolute}#nm .fixed{position:fixed}#nm .relative{position:relative}#nm .inset-0{inset:calc(var(--spacing)*0)}#nm .-top-2{top:calc(var(--spacing)*-2)}#nm .-right-2{right:calc(var(--spacing)*-2)}#nm .order-1{order:1}#nm .order-2{order:2}#nm .container{width:100%}@media(min-width:40rem){#nm .container{max-width:40rem}}@media(min-width:48rem){#nm .container{max-width:48rem}}@media(min-width:64rem){#nm .container{max-width:64rem}}@media(min-width:80rem){#nm .container{max-width:80rem}}@media(min-width:96rem){#nm .container{max-width:96rem}}#nm .mx-4{margin-inline:calc(var(--spacing)*4)}#nm .my-8{margin-block:calc(var(--spacing)*8)}#nm .mb-1{margin-bottom:calc(var(--spacing)*1)}#nm .mb-6{margin-bottom:calc(var(--spacing)*6)}#nm .block{display:block}#nm .flex{display:flex}#nm .grid{display:grid}#nm .hidden{display:none}#nm .aspect-video{aspect-ratio:var(--aspect-video)}#nm .h-8{height:calc(var(--spacing)*8)}#nm .h-\[1200px\]{height:1200px}#nm .h-full{height:100%}#nm .max-h-\[272px\]{max-height:272px}#nm .min-h-20{min-height:calc(var(--spacing)*20)}#nm .w-8{width:calc(var(--spacing)*8)}#nm .w-full{width:100%}#nm .shrink{flex-shrink:1}#nm .shrink-0{flex-shrink:0}#nm .resize-none{resize:none}#nm .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}#nm .flex-col{flex-direction:column}#nm .flex-wrap{flex-wrap:wrap}#nm .items-center{align-items:center}#nm .items-end{align-items:flex-end}#nm .justify-between{justify-content:space-between}#nm .justify-center{justify-content:center}#nm .justify-end{justify-content:flex-end}#nm .gap-1{gap:calc(var(--spacing)*1)}#nm .gap-2{gap:calc(var(--spacing)*2)}#nm .gap-6{gap:calc(var(--spacing)*6)}#nm .overflow-hidden{overflow:hidden}#nm .overflow-y-auto{overflow-y:auto}#nm .overflow-y-hidden{overflow-y:hidden}#nm .rounded-lg{border-radius:var(--radius-lg)}#nm .rounded-xl{border-radius:var(--radius-xl)}#nm .border{border-style:var(--tw-border-style);border-width:1px}#nm .border-label-quaternary-light{border-color:var(--color-label-quaternary-light)}#nm .border-separator-opaque-light{border-color:var(--color-separator-opaque-light)}#nm .border-separator-regular-light{border-color:var(--color-separator-regular-light)}#nm .material-medium{background-color:var(--color-material-grey-50);--tw-backdrop-blur:blur(30px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}@media(prefers-color-scheme:dark){#nm .material-medium{background-color:var(--color-material-grey-850)}}#nm .material-ultra-thick{background-color:var(--color-material-grey-5);--tw-backdrop-blur:blur(30px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}@media(prefers-color-scheme:dark){#nm .material-ultra-thick{background-color:var(--color-material-grey-950)}}#nm .bg-background-primary-light{background-color:var(--color-background-primary-light)}#nm .bg-background-secondary-light{background-color:var(--color-background-secondary-light)}#nm .bg-overlay-background-default-light{background-color:var(--color-overlay-background-default-light)}#nm .bg-secondary-action-button-light{background-color:var(--color-secondary-action-button-light)}#nm .object-cover{object-fit:cover}#nm .p-3{padding:calc(var(--spacing)*3)}#nm .p-4{padding:calc(var(--spacing)*4)}#nm .p-10{padding:calc(var(--spacing)*10)}#nm .px-4{padding-inline:calc(var(--spacing)*4)}#nm .py-3{padding-block:calc(var(--spacing)*3)}#nm .pt-4{padding-top:calc(var(--spacing)*4)}#nm .pt-10{padding-top:calc(var(--spacing)*10)}#nm .pb-3{padding-bottom:calc(var(--spacing)*3)}#nm .break-words{overflow-wrap:break-word}#nm .whitespace-pre-wrap{white-space:pre-wrap}#nm .text-label-primary-light{color:var(--color-label-primary-light)}#nm .text-label-quaternary-light{color:var(--color-label-quaternary-light)}#nm .outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){#nm .outline-hidden{outline-offset:2px;outline:2px solid #0000}}#nm .transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(min-width:48rem){#nm .md\:-top-4{top:calc(var(--spacing)*-4)}#nm .md\:-right-4{right:calc(var(--spacing)*-4)}#nm .md\:order-1{order:1}#nm .md\:order-2{order:2}#nm .md\:mb-0{margin-bottom:calc(var(--spacing)*0)}#nm .md\:mb-2{margin-bottom:calc(var(--spacing)*2)}#nm .md\:block{display:block}#nm .md\:aspect-square{aspect-ratio:1}#nm .md\:max-h-full{max-height:100%}#nm .md\:max-w-\[960px\]{max-width:960px}#nm .md\:min-w-\[660px\]{min-width:660px}#nm .md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}#nm .md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}#nm .md\:flex-row-reverse{flex-direction:row-reverse}#nm .md\:items-start{align-items:flex-start}#nm .md\:justify-start{justify-content:flex-start}#nm .md\:gap-2{gap:calc(var(--spacing)*2)}#nm .md\:gap-4{gap:calc(var(--spacing)*4)}#nm .md\:gap-8{gap:calc(var(--spacing)*8)}#nm .md\:gap-16{gap:calc(var(--spacing)*16)}#nm .md\:p-8{padding:calc(var(--spacing)*8)}#nm .md\:py-4{padding-block:calc(var(--spacing)*4)}}@media(prefers-color-scheme:dark){#nm .dark\:border-label-quaternary-dark{border-color:var(--color-label-quaternary-dark)}#nm .dark\:border-separator-opaque-dark{border-color:var(--color-separator-opaque-dark)}#nm .dark\:border-separator-regular-dark{border-color:var(--color-separator-regular-dark)}#nm .dark\:bg-background-primary-dark{background-color:var(--color-background-primary-dark)}#nm .dark\:bg-background-secondary-dark{background-color:var(--color-background-secondary-dark)}#nm .dark\:bg-overlay-background-default-dark{background-color:var(--color-overlay-background-default-dark)}#nm .dark\:bg-secondary-action-button-dark{background-color:var(--color-secondary-action-button-dark)}#nm .dark\:text-label-primary-dark{color:var(--color-label-primary-dark)}#nm .dark\:text-label-quaternary-dark{color:var(--color-label-quaternary-dark)}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}