@retrivora-ai/rag-engine 2.0.2 → 2.0.4

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 (51) hide show
  1. package/FREE_TIER_ARCHITECTURE.md +232 -0
  2. package/README.md +9 -0
  3. package/dist/{ILLMProvider-DMxLyTdq.d.mts → ILLMProvider-0rRBYbVW.d.mts} +133 -1
  4. package/dist/{ILLMProvider-DMxLyTdq.d.ts → ILLMProvider-0rRBYbVW.d.ts} +133 -1
  5. package/dist/handlers/index.d.mts +2 -2
  6. package/dist/handlers/index.d.ts +2 -2
  7. package/dist/handlers/index.js +681 -17
  8. package/dist/handlers/index.mjs +681 -17
  9. package/dist/index-B1wGUlSL.d.mts +532 -0
  10. package/dist/{index-tzwc7UhY.d.ts → index-BIHHp_f6.d.ts} +1 -1
  11. package/dist/{index-DHsFLJXQ.d.mts → index-BvODr57d.d.mts} +1 -1
  12. package/dist/index-DcklhThn.d.ts +532 -0
  13. package/dist/index.css +51 -3
  14. package/dist/index.d.mts +6 -105
  15. package/dist/index.d.ts +6 -105
  16. package/dist/index.js +1918 -8
  17. package/dist/index.mjs +1913 -8
  18. package/dist/server.d.mts +51 -7
  19. package/dist/server.d.ts +51 -7
  20. package/dist/server.js +723 -17
  21. package/dist/server.mjs +706 -17
  22. package/package.json +9 -7
  23. package/src/app/page.tsx +54 -18
  24. package/src/components/ChatWindow.tsx +2 -2
  25. package/src/components/DocumentUpload.tsx +5 -4
  26. package/src/components/MessageBubble.tsx +2 -4
  27. package/src/core/DatabaseStorage.ts +5 -1
  28. package/src/core/LicenseVerifier.ts +1 -1
  29. package/src/core/Pipeline.ts +23 -5
  30. package/src/handlers/index.ts +48 -1
  31. package/src/index.ts +22 -4
  32. package/src/rendering/IntentClassifier.ts +167 -0
  33. package/src/rendering/RendererRegistry.ts +164 -0
  34. package/src/rendering/RuleEngine.ts +67 -0
  35. package/src/rendering/VisualizationDecisionEngine.ts +164 -0
  36. package/src/rendering/__tests__/VisualizationDecisionEngine.test.ts +237 -0
  37. package/src/rendering/index.ts +12 -0
  38. package/src/rendering/rules/Rule1SpecificInfoRule.ts +28 -0
  39. package/src/rendering/rules/Rule2ComparisonRule.ts +24 -0
  40. package/src/rendering/rules/Rule3ProductDiscoveryRule.ts +28 -0
  41. package/src/rendering/rules/Rule4AnalyticalRule.ts +38 -0
  42. package/src/rendering/rules/Rule5MixedResponseRule.ts +29 -0
  43. package/src/rendering/rules/Rule6SmallResultSetRule.ts +24 -0
  44. package/src/rendering/rules/Rule7LargeTableRule.ts +35 -0
  45. package/src/rendering/types.ts +96 -0
  46. package/src/server.ts +3 -2
  47. package/src/types/index.ts +48 -0
  48. package/src/utils/DocumentParser.ts +64 -28
  49. package/src/utils/UITransformer.ts +15 -4
  50. package/dist/index-CfkqZd2Y.d.ts +0 -197
  51. package/dist/index-xygonxpW.d.mts +0 -197
package/dist/index.js CHANGED
@@ -68,16 +68,21 @@ __export(index_exports, {
68
68
  ConfigurationException: () => ConfigurationException,
69
69
  DocumentUpload: () => DocumentUpload,
70
70
  EmbeddingFailedException: () => EmbeddingFailedException,
71
+ IntentClassifier: () => IntentClassifier,
71
72
  MessageBubble: () => MessageBubble,
72
73
  ObservabilityPanel: () => ObservabilityPanel,
73
74
  ProductCard: () => ProductCard,
74
75
  ProductCarousel: () => ProductCarousel,
75
76
  ProviderNotFoundException: () => ProviderNotFoundException,
76
77
  RateLimitException: () => RateLimitException,
78
+ RendererRegistry: () => RendererRegistry,
77
79
  RetrievalException: () => RetrievalException,
78
80
  RetrivoraError: () => RetrivoraError,
81
+ RuleEngine: () => RuleEngine,
79
82
  SourceCard: () => SourceCard,
83
+ VisualizationDecisionEngine: () => VisualizationDecisionEngine,
80
84
  addSynonyms: () => addSynonyms,
85
+ decideVisualization: () => decideVisualization,
81
86
  useConfig: () => useConfig,
82
87
  useRagChat: () => useRagChat
83
88
  });
@@ -106,7 +111,7 @@ function styleInject(css, { insertAt } = {}) {
106
111
  }
107
112
 
108
113
  // src/index.css
109
- styleInject('/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root,\n :host {\n --font-sans:\n ui-sans-serif,\n system-ui,\n sans-serif,\n "Apple Color Emoji",\n "Segoe UI Emoji",\n "Segoe UI Symbol",\n "Noto Color Emoji";\n --font-mono:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n "Liberation Mono",\n "Courier New",\n monospace;\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-orange-950: oklch(26.6% 0.079 36.259);\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-amber-900: oklch(41.4% 0.112 45.904);\n --color-amber-950: oklch(27.9% 0.077 45.635);\n --color-emerald-50: oklch(97.9% 0.021 166.113);\n --color-emerald-100: oklch(95% 0.052 163.051);\n --color-emerald-200: oklch(90.5% 0.093 164.15);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-600: oklch(59.6% 0.145 163.225);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-emerald-800: oklch(43.2% 0.095 166.913);\n --color-emerald-900: oklch(37.8% 0.077 168.94);\n --color-emerald-950: oklch(26.2% 0.051 172.552);\n --color-cyan-50: oklch(98.4% 0.019 200.873);\n --color-cyan-100: oklch(95.6% 0.045 203.388);\n --color-cyan-200: oklch(91.7% 0.08 205.041);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-cyan-800: oklch(45% 0.085 224.283);\n --color-cyan-900: oklch(39.8% 0.07 227.392);\n --color-cyan-950: oklch(30.2% 0.056 229.695);\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-blue-950: oklch(28.2% 0.091 267.935);\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-indigo-950: oklch(25.7% 0.09 281.288);\n --color-violet-100: oklch(94.3% 0.029 294.588);\n --color-violet-200: oklch(89.4% 0.057 293.283);\n --color-violet-800: oklch(43.2% 0.232 292.759);\n --color-violet-900: oklch(38% 0.189 293.745);\n --color-purple-50: oklch(97.7% 0.014 308.299);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-300: oklch(82.7% 0.119 306.383);\n --color-purple-400: oklch(71.4% 0.203 305.504);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-purple-800: oklch(43.8% 0.218 303.724);\n --color-purple-900: oklch(38.1% 0.176 304.987);\n --color-purple-950: oklch(29.1% 0.149 302.717);\n --color-pink-50: oklch(97.1% 0.014 343.198);\n --color-pink-100: oklch(94.8% 0.028 342.258);\n --color-pink-200: oklch(89.9% 0.061 343.231);\n --color-pink-300: oklch(82.3% 0.12 346.018);\n --color-pink-400: oklch(71.8% 0.202 349.761);\n --color-pink-700: oklch(52.5% 0.223 3.958);\n --color-pink-800: oklch(45.9% 0.187 3.815);\n --color-pink-900: oklch(40.8% 0.153 2.432);\n --color-pink-950: oklch(28.4% 0.109 3.907);\n --color-rose-50: oklch(96.9% 0.015 12.422);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-500: oklch(64.5% 0.246 16.439);\n --color-rose-600: oklch(58.6% 0.253 17.585);\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\n --color-slate-950: oklch(12.9% 0.042 264.695);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-xs: 20rem;\n --container-md: 28rem;\n --container-2xl: 42rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n --leading-tight: 1.25;\n --leading-relaxed: 1.625;\n --radius-sm: 0.25rem;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --animate-bounce: bounce 1s infinite;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-xl: 24px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n }\n}\n@layer base {\n *,\n ::after,\n ::before,\n ::backdrop,\n ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html,\n :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n 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");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b,\n strong {\n font-weight: bolder;\n }\n code,\n kbd,\n samp,\n pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub,\n sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol,\n ul,\n menu {\n list-style: none;\n }\n img,\n svg,\n video,\n canvas,\n audio,\n iframe,\n embed,\n object {\n display: block;\n vertical-align: middle;\n }\n img,\n video {\n max-width: 100%;\n height: auto;\n }\n button,\n input,\n select,\n optgroup,\n textarea,\n ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit,\n ::-webkit-datetime-edit-year-field,\n ::-webkit-datetime-edit-month-field,\n ::-webkit-datetime-edit-day-field,\n ::-webkit-datetime-edit-hour-field,\n ::-webkit-datetime-edit-minute-field,\n ::-webkit-datetime-edit-second-field,\n ::-webkit-datetime-edit-millisecond-field,\n ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button,\n input:where([type=button], [type=reset], [type=submit]),\n ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button,\n ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=until-found])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-auto {\n pointer-events: auto;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .static {\n position: static;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .-top-8 {\n top: calc(var(--spacing) * -8);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-1\\/2 {\n top: calc(1 / 2 * 100%);\n }\n .top-2 {\n top: calc(var(--spacing) * 2);\n }\n .top-4 {\n top: calc(var(--spacing) * 4);\n }\n .-right-4 {\n right: calc(var(--spacing) * -4);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .right-5 {\n right: calc(var(--spacing) * 5);\n }\n .right-6 {\n right: calc(var(--spacing) * 6);\n }\n .-bottom-1\\.5 {\n bottom: calc(var(--spacing) * -1.5);\n }\n .bottom-6 {\n bottom: calc(var(--spacing) * 6);\n }\n .bottom-20 {\n bottom: calc(var(--spacing) * 20);\n }\n .-left-4 {\n left: calc(var(--spacing) * -4);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-1\\/2 {\n left: calc(1 / 2 * 100%);\n }\n .left-2 {\n left: calc(var(--spacing) * 2);\n }\n .left-5 {\n left: calc(var(--spacing) * 5);\n }\n .left-6 {\n left: calc(var(--spacing) * 6);\n }\n .z-0 {\n z-index: 0;\n }\n .z-10 {\n z-index: 10;\n }\n .z-20 {\n z-index: 20;\n }\n .z-50 {\n z-index: 50;\n }\n .z-\\[100\\] {\n z-index: 100;\n }\n .z-\\[9998\\] {\n z-index: 9998;\n }\n .z-\\[9999\\] {\n z-index: 9999;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .mx-1 {\n margin-inline: calc(var(--spacing) * 1);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .my-1\\.5 {\n margin-block: calc(var(--spacing) * 1.5);\n }\n .my-2 {\n margin-block: calc(var(--spacing) * 2);\n }\n .my-3 {\n margin-block: calc(var(--spacing) * 3);\n }\n .my-4 {\n margin-block: calc(var(--spacing) * 4);\n }\n .my-5 {\n margin-block: calc(var(--spacing) * 5);\n }\n .my-6 {\n margin-block: calc(var(--spacing) * 6);\n }\n .mt-0\\.5 {\n margin-top: calc(var(--spacing) * 0.5);\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .mt-1\\.5 {\n margin-top: calc(var(--spacing) * 1.5);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-3 {\n margin-top: calc(var(--spacing) * 3);\n }\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n .mt-8 {\n margin-top: calc(var(--spacing) * 8);\n }\n .mr-2 {\n margin-right: calc(var(--spacing) * 2);\n }\n .mb-0\\.5 {\n margin-bottom: calc(var(--spacing) * 0.5);\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-1\\.5 {\n margin-bottom: calc(var(--spacing) * 1.5);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n .ml-1 {\n margin-left: calc(var(--spacing) * 1);\n }\n .ml-1\\.5 {\n margin-left: calc(var(--spacing) * 1.5);\n }\n .ml-2 {\n margin-left: calc(var(--spacing) * 2);\n }\n .ml-auto {\n margin-left: auto;\n }\n .line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n .line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n .\\!table {\n display: table !important;\n }\n .\\!table-cell {\n display: table-cell !important;\n }\n .\\!table-header-group {\n display: table-header-group !important;\n }\n .\\!table-row {\n display: table-row !important;\n }\n .\\!table-row-group {\n display: table-row-group !important;\n }\n .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\n }\n .aspect-\\[4\\/3\\] {\n aspect-ratio: 4/3;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .h-1 {\n height: calc(var(--spacing) * 1);\n }\n .h-1\\.5 {\n height: calc(var(--spacing) * 1.5);\n }\n .h-2 {\n height: calc(var(--spacing) * 2);\n }\n .h-2\\.5 {\n height: calc(var(--spacing) * 2.5);\n }\n .h-3 {\n height: calc(var(--spacing) * 3);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-7 {\n height: calc(var(--spacing) * 7);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-12 {\n height: calc(var(--spacing) * 12);\n }\n .h-14 {\n height: calc(var(--spacing) * 14);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-28 {\n height: calc(var(--spacing) * 28);\n }\n .h-32 {\n height: calc(var(--spacing) * 32);\n }\n .h-40 {\n height: calc(var(--spacing) * 40);\n }\n .h-\\[400\\%\\] {\n height: 400%;\n }\n .h-full {\n height: 100%;\n }\n .max-h-24 {\n max-height: calc(var(--spacing) * 24);\n }\n .max-h-32 {\n max-height: calc(var(--spacing) * 32);\n }\n .max-h-40 {\n max-height: calc(var(--spacing) * 40);\n }\n .max-h-56 {\n max-height: calc(var(--spacing) * 56);\n }\n .max-h-60 {\n max-height: calc(var(--spacing) * 60);\n }\n .max-h-64 {\n max-height: calc(var(--spacing) * 64);\n }\n .max-h-\\[320px\\] {\n max-height: 320px;\n }\n .max-h-\\[400px\\] {\n max-height: 400px;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-\\[300px\\] {\n min-height: 300px;\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .w-1\\.5 {\n width: calc(var(--spacing) * 1.5);\n }\n .w-2 {\n width: calc(var(--spacing) * 2);\n }\n .w-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n }\n .w-3 {\n width: calc(var(--spacing) * 3);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-6 {\n width: calc(var(--spacing) * 6);\n }\n .w-7 {\n width: calc(var(--spacing) * 7);\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-9 {\n width: calc(var(--spacing) * 9);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n .w-14 {\n width: calc(var(--spacing) * 14);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-28 {\n width: calc(var(--spacing) * 28);\n }\n .w-36 {\n width: calc(var(--spacing) * 36);\n }\n .w-40 {\n width: calc(var(--spacing) * 40);\n }\n .w-44 {\n width: calc(var(--spacing) * 44);\n }\n .w-\\[400\\%\\] {\n width: 400%;\n }\n .w-\\[500px\\] {\n width: 500px;\n }\n .w-\\[min\\(88\\%\\,18rem\\)\\] {\n width: min(88%, 18rem);\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\n }\n .max-w-\\[90\\%\\] {\n max-width: 90%;\n }\n .max-w-\\[92\\%\\] {\n max-width: 92%;\n }\n .max-w-\\[94\\%\\] {\n max-width: 94%;\n }\n .max-w-\\[calc\\(100vw-3rem\\)\\] {\n max-width: calc(100vw - 3rem);\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .max-w-none {\n max-width: none;\n }\n .max-w-xs {\n max-width: var(--container-xs);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-\\[11rem\\] {\n min-width: 11rem;\n }\n .min-w-\\[400px\\] {\n min-width: 400px;\n }\n .flex-1 {\n flex: 1;\n }\n .flex-shrink-0 {\n flex-shrink: 0;\n }\n .flex-grow {\n flex-grow: 1;\n }\n .border-collapse {\n border-collapse: collapse;\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-0 {\n --tw-translate-y: calc(var(--spacing) * 0);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-4 {\n --tw-translate-y: calc(var(--spacing) * 4);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .scale-90 {\n --tw-scale-x: 90%;\n --tw-scale-y: 90%;\n --tw-scale-z: 90%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-95 {\n --tw-scale-x: 95%;\n --tw-scale-y: 95%;\n --tw-scale-z: 95%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-100 {\n --tw-scale-x: 100%;\n --tw-scale-y: 100%;\n --tw-scale-z: 100%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-110 {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .rotate-0 {\n rotate: 0deg;\n }\n .rotate-45 {\n rotate: 45deg;\n }\n .rotate-90 {\n rotate: 90deg;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .animate-\\[pulse_1\\.2s_infinite\\] {\n animation: pulse 1.2s infinite;\n }\n .animate-bounce {\n animation: var(--animate-bounce);\n }\n .animate-ping {\n animation: var(--animate-ping);\n }\n .animate-pulse {\n animation: var(--animate-pulse);\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-not-allowed {\n cursor: not-allowed;\n }\n .cursor-nw-resize {\n cursor: nw-resize;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .resize-none {\n resize: none;\n }\n .snap-x {\n scroll-snap-type: x var(--tw-scroll-snap-strictness);\n }\n .snap-mandatory {\n --tw-scroll-snap-strictness: mandatory;\n }\n .snap-start {\n scroll-snap-align: start;\n }\n .scrollbar-thin {\n scrollbar-width: thin;\n }\n .scrollbar-thumb-slate-200 {\n --tw-scrollbar-thumb: var(--color-slate-200);\n scrollbar-color: var(--tw-scrollbar-thumb) var(--tw-scrollbar-track);\n }\n .scrollbar-track-transparent {\n --tw-scrollbar-track: transparent;\n scrollbar-color: var(--tw-scrollbar-thumb) var(--tw-scrollbar-track);\n }\n .grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-row-reverse {\n flex-direction: row-reverse;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .items-center {\n align-items: center;\n }\n .items-end {\n align-items: flex-end;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .space-y-0\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-1 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-1\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-3 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-4 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .divide-y {\n :where(& > :not(:last-child)) {\n --tw-divide-y-reverse: 0;\n border-bottom-style: var(--tw-border-style);\n border-top-style: var(--tw-border-style);\n border-top-width: calc(1px * var(--tw-divide-y-reverse));\n border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n }\n }\n .divide-slate-100 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-slate-100);\n }\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-auto {\n overflow: auto;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: var(--radius-2xl);\n }\n .rounded-3xl {\n border-radius: var(--radius-3xl);\n }\n .rounded-\\[2px\\] {\n border-radius: 2px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius-lg);\n }\n .rounded-md {\n border-radius: var(--radius-md);\n }\n .rounded-none {\n border-radius: 0;\n }\n .rounded-sm {\n border-radius: var(--radius-sm);\n }\n .rounded-xl {\n border-radius: var(--radius-xl);\n }\n .rounded-t-md {\n border-top-left-radius: var(--radius-md);\n border-top-right-radius: var(--radius-md);\n }\n .rounded-tl-\\[2px\\] {\n border-top-left-radius: 2px;\n }\n .rounded-tl-sm {\n border-top-left-radius: var(--radius-sm);\n }\n .rounded-tr-sm {\n border-top-right-radius: var(--radius-sm);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-t-2 {\n border-top-style: var(--tw-border-style);\n border-top-width: 2px;\n }\n .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-b-2 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 2px;\n }\n .border-l-2 {\n border-left-style: var(--tw-border-style);\n border-left-width: 2px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-amber-100 {\n border-color: var(--color-amber-100);\n }\n .border-amber-200 {\n border-color: var(--color-amber-200);\n }\n .border-emerald-100 {\n border-color: var(--color-emerald-100);\n }\n .border-emerald-200 {\n border-color: var(--color-emerald-200);\n }\n .border-emerald-500 {\n border-color: var(--color-emerald-500);\n }\n .border-emerald-500\\/20 {\n border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-emerald-500) 20%, transparent);\n }\n }\n .border-indigo-200 {\n border-color: var(--color-indigo-200);\n }\n .border-indigo-500 {\n border-color: var(--color-indigo-500);\n }\n .border-red-200 {\n border-color: var(--color-red-200);\n }\n .border-rose-100 {\n border-color: var(--color-rose-100);\n }\n .border-rose-200 {\n border-color: var(--color-rose-200);\n }\n .border-slate-100 {\n border-color: var(--color-slate-100);\n }\n .border-slate-200 {\n border-color: var(--color-slate-200);\n }\n .border-slate-200\\/50 {\n border-color: color-mix(in srgb, oklch(92.9% 0.013 255.508) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-slate-200) 50%, transparent);\n }\n }\n .border-slate-200\\/60 {\n border-color: color-mix(in srgb, oklch(92.9% 0.013 255.508) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-slate-200) 60%, transparent);\n }\n }\n .border-slate-200\\/80 {\n border-color: color-mix(in srgb, oklch(92.9% 0.013 255.508) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-slate-200) 80%, transparent);\n }\n }\n .border-slate-300 {\n border-color: var(--color-slate-300);\n }\n .border-slate-800 {\n border-color: var(--color-slate-800);\n }\n .border-transparent {\n border-color: transparent;\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-white\\/5 {\n border-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n .border-white\\/8 {\n border-color: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 8%, transparent);\n }\n }\n .border-t-transparent {\n border-top-color: transparent;\n }\n .bg-\\[\\#0d0d1a\\] {\n background-color: #0d0d1a;\n }\n .bg-\\[\\#080818\\] {\n background-color: #080818;\n }\n .bg-amber-50 {\n background-color: var(--color-amber-50);\n }\n .bg-amber-100 {\n background-color: var(--color-amber-100);\n }\n .bg-amber-200 {\n background-color: var(--color-amber-200);\n }\n .bg-amber-500 {\n background-color: var(--color-amber-500);\n }\n .bg-amber-500\\/80 {\n background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-500) 80%, transparent);\n }\n }\n .bg-blue-50 {\n background-color: var(--color-blue-50);\n }\n .bg-blue-100 {\n background-color: var(--color-blue-100);\n }\n .bg-blue-200 {\n background-color: var(--color-blue-200);\n }\n .bg-cyan-50 {\n background-color: var(--color-cyan-50);\n }\n .bg-cyan-100 {\n background-color: var(--color-cyan-100);\n }\n .bg-cyan-200 {\n background-color: var(--color-cyan-200);\n }\n .bg-emerald-50 {\n background-color: var(--color-emerald-50);\n }\n .bg-emerald-50\\/50 {\n background-color: color-mix(in srgb, oklch(97.9% 0.021 166.113) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-50) 50%, transparent);\n }\n }\n .bg-emerald-100 {\n background-color: var(--color-emerald-100);\n }\n .bg-emerald-200 {\n background-color: var(--color-emerald-200);\n }\n .bg-emerald-500 {\n background-color: var(--color-emerald-500);\n }\n .bg-emerald-500\\/10 {\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);\n }\n }\n .bg-emerald-500\\/80 {\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-500) 80%, transparent);\n }\n }\n .bg-indigo-50 {\n background-color: var(--color-indigo-50);\n }\n .bg-indigo-100 {\n background-color: var(--color-indigo-100);\n }\n .bg-indigo-500 {\n background-color: var(--color-indigo-500);\n }\n .bg-indigo-600 {\n background-color: var(--color-indigo-600);\n }\n .bg-orange-100 {\n background-color: var(--color-orange-100);\n }\n .bg-pink-50 {\n background-color: var(--color-pink-50);\n }\n .bg-pink-100 {\n background-color: var(--color-pink-100);\n }\n .bg-pink-200 {\n background-color: var(--color-pink-200);\n }\n .bg-purple-50 {\n background-color: var(--color-purple-50);\n }\n .bg-purple-100 {\n background-color: var(--color-purple-100);\n }\n .bg-purple-200 {\n background-color: var(--color-purple-200);\n }\n .bg-red-50 {\n background-color: var(--color-red-50);\n }\n .bg-red-500 {\n background-color: var(--color-red-500);\n }\n .bg-rose-50 {\n background-color: var(--color-rose-50);\n }\n .bg-rose-500 {\n background-color: var(--color-rose-500);\n }\n .bg-rose-500\\/80 {\n background-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-500) 80%, transparent);\n }\n }\n .bg-slate-50 {\n background-color: var(--color-slate-50);\n }\n .bg-slate-50\\/20 {\n background-color: color-mix(in srgb, oklch(98.4% 0.003 247.858) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-50) 20%, transparent);\n }\n }\n .bg-slate-50\\/50 {\n background-color: color-mix(in srgb, oklch(98.4% 0.003 247.858) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-50) 50%, transparent);\n }\n }\n .bg-slate-100 {\n background-color: var(--color-slate-100);\n }\n .bg-slate-100\\/50 {\n background-color: color-mix(in srgb, oklch(96.8% 0.007 247.896) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-100) 50%, transparent);\n }\n }\n .bg-slate-200 {\n background-color: var(--color-slate-200);\n }\n .bg-slate-400 {\n background-color: var(--color-slate-400);\n }\n .bg-slate-800 {\n background-color: var(--color-slate-800);\n }\n .bg-slate-900 {\n background-color: var(--color-slate-900);\n }\n .bg-slate-900\\/50 {\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-900) 50%, transparent);\n }\n }\n .bg-slate-900\\/90 {\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-900) 90%, transparent);\n }\n }\n .bg-slate-950 {\n background-color: var(--color-slate-950);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-violet-100 {\n background-color: var(--color-violet-100);\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .bg-white\\/60 {\n background-color: color-mix(in srgb, #fff 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 60%, transparent);\n }\n }\n .bg-white\\/90 {\n background-color: color-mix(in srgb, #fff 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 90%, transparent);\n }\n }\n .bg-gradient-to-br {\n --tw-gradient-position: to bottom right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .from-slate-100 {\n --tw-gradient-from: var(--color-slate-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-slate-200 {\n --tw-gradient-to: var(--color-slate-200);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0\\.5 {\n padding: calc(var(--spacing) * 0.5);\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-2\\.5 {\n padding: calc(var(--spacing) * 2.5);\n }\n .p-3 {\n padding: calc(var(--spacing) * 3);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .p-8 {\n padding: calc(var(--spacing) * 8);\n }\n .p-10 {\n padding: calc(var(--spacing) * 10);\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-0\\.5 {\n padding-block: calc(var(--spacing) * 0.5);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-2\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-12 {\n padding-block: calc(var(--spacing) * 12);\n }\n .pt-1 {\n padding-top: calc(var(--spacing) * 1);\n }\n .pt-2 {\n padding-top: calc(var(--spacing) * 2);\n }\n .pr-1 {\n padding-right: calc(var(--spacing) * 1);\n }\n .pb-3 {\n padding-bottom: calc(var(--spacing) * 3);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .align-middle {\n vertical-align: middle;\n }\n .font-mono {\n font-family: var(--font-mono);\n }\n .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[9px\\] {\n font-size: 9px;\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .text-\\[11px\\] {\n font-size: 11px;\n }\n .text-\\[12px\\] {\n font-size: 12px;\n }\n .text-\\[13px\\] {\n font-size: 13px;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-wider {\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .break-words {\n overflow-wrap: break-word;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .whitespace-pre {\n white-space: pre;\n }\n .whitespace-pre-line {\n white-space: pre-line;\n }\n .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-amber-400 {\n color: var(--color-amber-400);\n }\n .text-amber-500 {\n color: var(--color-amber-500);\n }\n .text-amber-600 {\n color: var(--color-amber-600);\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-amber-800 {\n color: var(--color-amber-800);\n }\n .text-amber-900 {\n color: var(--color-amber-900);\n }\n .text-amber-950 {\n color: var(--color-amber-950);\n }\n .text-blue-700 {\n color: var(--color-blue-700);\n }\n .text-blue-800 {\n color: var(--color-blue-800);\n }\n .text-blue-950 {\n color: var(--color-blue-950);\n }\n .text-cyan-700 {\n color: var(--color-cyan-700);\n }\n .text-cyan-800 {\n color: var(--color-cyan-800);\n }\n .text-cyan-950 {\n color: var(--color-cyan-950);\n }\n .text-emerald-400 {\n color: var(--color-emerald-400);\n }\n .text-emerald-500 {\n color: var(--color-emerald-500);\n }\n .text-emerald-500\\/70 {\n color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-emerald-500) 70%, transparent);\n }\n }\n .text-emerald-600 {\n color: var(--color-emerald-600);\n }\n .text-emerald-700 {\n color: var(--color-emerald-700);\n }\n .text-emerald-800 {\n color: var(--color-emerald-800);\n }\n .text-emerald-950 {\n color: var(--color-emerald-950);\n }\n .text-gray-500 {\n color: var(--color-gray-500);\n }\n .text-indigo-200\\/85 {\n color: color-mix(in srgb, oklch(87% 0.065 274.039) 85%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-indigo-200) 85%, transparent);\n }\n }\n .text-indigo-400 {\n color: var(--color-indigo-400);\n }\n .text-indigo-500 {\n color: var(--color-indigo-500);\n }\n .text-indigo-600 {\n color: var(--color-indigo-600);\n }\n .text-indigo-900 {\n color: var(--color-indigo-900);\n }\n .text-indigo-950 {\n color: var(--color-indigo-950);\n }\n .text-orange-950 {\n color: var(--color-orange-950);\n }\n .text-pink-700 {\n color: var(--color-pink-700);\n }\n .text-pink-800 {\n color: var(--color-pink-800);\n }\n .text-pink-950 {\n color: var(--color-pink-950);\n }\n .text-purple-700 {\n color: var(--color-purple-700);\n }\n .text-purple-800 {\n color: var(--color-purple-800);\n }\n .text-purple-950 {\n color: var(--color-purple-950);\n }\n .text-red-500 {\n color: var(--color-red-500);\n }\n .text-red-600 {\n color: var(--color-red-600);\n }\n .text-rose-400 {\n color: var(--color-rose-400);\n }\n .text-rose-500 {\n color: var(--color-rose-500);\n }\n .text-rose-600 {\n color: var(--color-rose-600);\n }\n .text-slate-100 {\n color: var(--color-slate-100);\n }\n .text-slate-200 {\n color: var(--color-slate-200);\n }\n .text-slate-300 {\n color: var(--color-slate-300);\n }\n .text-slate-400 {\n color: var(--color-slate-400);\n }\n .text-slate-500 {\n color: var(--color-slate-500);\n }\n .text-slate-600 {\n color: var(--color-slate-600);\n }\n .text-slate-700 {\n color: var(--color-slate-700);\n }\n .text-slate-800 {\n color: var(--color-slate-800);\n }\n .text-slate-900 {\n color: var(--color-slate-900);\n }\n .text-violet-900 {\n color: var(--color-violet-900);\n }\n .text-white {\n color: var(--color-white);\n }\n .text-white\\/25 {\n color: color-mix(in srgb, #fff 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 25%, transparent);\n }\n }\n .text-white\\/35 {\n color: color-mix(in srgb, #fff 35%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 35%, transparent);\n }\n }\n .lowercase {\n text-transform: lowercase;\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n .placeholder-slate-400 {\n &::placeholder {\n color: var(--color-slate-400);\n }\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-20 {\n opacity: 20%;\n }\n .opacity-30 {\n opacity: 30%;\n }\n .opacity-100 {\n opacity: 100%;\n }\n .shadow-2xl {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .shadow-md {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .shadow-xl {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .ring {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .ring-1 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .ring-2 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .shadow-rose-500\\/20 {\n --tw-shadow-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-rose-500) 20%, transparent) var(--tw-shadow-alpha), transparent);\n }\n }\n .ring-slate-200\\/80 {\n --tw-ring-color: color-mix(in srgb, oklch(92.9% 0.013 255.508) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-slate-200) 80%, transparent);\n }\n }\n .ring-offset-1 {\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n .ring-offset-transparent {\n --tw-ring-offset-color: transparent;\n }\n .drop-shadow-2xl {\n --tw-drop-shadow-size: drop-shadow(0 25px 25px var(--tw-drop-shadow-color, rgb(0 0 0 / 0.15)));\n --tw-drop-shadow: drop-shadow(var(--drop-shadow-2xl));\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-md {\n --tw-backdrop-blur: blur(var(--blur-md));\n -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,);\n 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,);\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -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,);\n 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,);\n }\n .backdrop-blur-xl {\n --tw-backdrop-blur: blur(var(--blur-xl));\n -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,);\n 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,);\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property:\n color,\n background-color,\n border-color,\n outline-color,\n text-decoration-color,\n fill,\n stroke,\n --tw-gradient-from,\n --tw-gradient-via,\n --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-transform {\n transition-property:\n transform,\n translate,\n scale,\n rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .duration-500 {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n .duration-700 {\n --tw-duration: 700ms;\n transition-duration: 700ms;\n }\n .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n .select-text {\n -webkit-user-select: text;\n user-select: text;\n }\n .\\[animation-delay\\:0ms\\] {\n animation-delay: 0ms;\n }\n .\\[animation-delay\\:150ms\\] {\n animation-delay: 150ms;\n }\n .\\[animation-delay\\:300ms\\] {\n animation-delay: 300ms;\n }\n .group-hover\\:scale-100 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n --tw-scale-x: 100%;\n --tw-scale-y: 100%;\n --tw-scale-z: 100%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .group-hover\\:scale-105 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .group-hover\\:animate-\\[gradientMove_3\\.5s_ease-in-out_infinite_alternate\\] {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n animation: gradientMove 3.5s ease-in-out infinite alternate;\n }\n }\n }\n .group-hover\\:animate-\\[shapeshift_5s_ease-in-out_infinite_forwards\\] {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n animation: shapeshift 5s ease-in-out infinite forwards;\n }\n }\n }\n .group-hover\\:rounded-none {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-radius: 0;\n }\n }\n }\n .group-hover\\:border-slate-500 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: var(--color-slate-500);\n }\n }\n }\n .group-hover\\:opacity-100 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .focus-within\\:border-slate-300 {\n &:focus-within {\n border-color: var(--color-slate-300);\n }\n }\n .hover\\:scale-105 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-110 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-\\[1\\.01\\] {\n &:hover {\n @media (hover: hover) {\n scale: 1.01;\n }\n }\n }\n .hover\\:scale-\\[1\\.02\\] {\n &:hover {\n @media (hover: hover) {\n scale: 1.02;\n }\n }\n }\n .hover\\:border-emerald-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-emerald-200);\n }\n }\n }\n .hover\\:border-rose-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-rose-200);\n }\n }\n }\n .hover\\:border-slate-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-300);\n }\n }\n }\n .hover\\:border-slate-300\\/60 {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, oklch(86.9% 0.022 252.894) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-slate-300) 60%, transparent);\n }\n }\n }\n }\n .hover\\:border-slate-800 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-800);\n }\n }\n }\n .hover\\:bg-emerald-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-emerald-50);\n }\n }\n }\n .hover\\:bg-rose-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-rose-50);\n }\n }\n }\n .hover\\:bg-rose-600 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-rose-600);\n }\n }\n }\n .hover\\:bg-slate-50\\/60 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.4% 0.003 247.858) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-50) 60%, transparent);\n }\n }\n }\n }\n .hover\\:bg-slate-50\\/70 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.4% 0.003 247.858) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-50) 70%, transparent);\n }\n }\n }\n }\n .hover\\:bg-slate-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-100);\n }\n }\n }\n .hover\\:bg-slate-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-200);\n }\n }\n }\n .hover\\:bg-slate-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-800);\n }\n }\n }\n .hover\\:bg-white {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-white);\n }\n }\n }\n .hover\\:bg-white\\/5 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n }\n .hover\\:text-blue-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-500);\n }\n }\n }\n .hover\\:text-emerald-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-emerald-400);\n }\n }\n }\n .hover\\:text-emerald-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-emerald-500);\n }\n }\n }\n .hover\\:text-indigo-300 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-300);\n }\n }\n }\n .hover\\:text-indigo-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-500);\n }\n }\n }\n .hover\\:text-rose-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-rose-500);\n }\n }\n }\n .hover\\:text-slate-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-600);\n }\n }\n }\n .hover\\:text-slate-900 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-900);\n }\n }\n }\n .hover\\:text-white\\/80 {\n &:hover {\n @media (hover: hover) {\n color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\n }\n }\n }\n .hover\\:opacity-90 {\n &:hover {\n @media (hover: hover) {\n opacity: 90%;\n }\n }\n }\n .hover\\:shadow-lg {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-md {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n }\n }\n .focus\\:border-emerald-500 {\n &:focus {\n border-color: var(--color-emerald-500);\n }\n }\n .active\\:scale-95 {\n &:active {\n --tw-scale-x: 95%;\n --tw-scale-y: 95%;\n --tw-scale-z: 95%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n .active\\:scale-\\[0\\.98\\] {\n &:active {\n scale: 0.98;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-30 {\n &:disabled {\n opacity: 30%;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .disabled\\:hover\\:scale-100 {\n &:disabled {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 100%;\n --tw-scale-y: 100%;\n --tw-scale-z: 100%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n }\n .disabled\\:active\\:scale-100 {\n &:disabled {\n &:active {\n --tw-scale-x: 100%;\n --tw-scale-y: 100%;\n --tw-scale-z: 100%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .sm\\:grid-cols-2 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .md\\:opacity-0 {\n @media (width >= 48rem) {\n opacity: 0%;\n }\n }\n .md\\:group-hover\\/carousel\\:opacity-100 {\n @media (width >= 48rem) {\n &:is(:where(.group\\/carousel):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n }\n .dark\\:scrollbar-thumb-white\\/10 {\n @media (prefers-color-scheme: dark) {\n --tw-scrollbar-thumb: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-scrollbar-thumb: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n scrollbar-color: var(--tw-scrollbar-thumb) var(--tw-scrollbar-track);\n }\n }\n .dark\\:divide-white\\/5 {\n @media (prefers-color-scheme: dark) {\n :where(& > :not(:last-child)) {\n border-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n }\n .dark\\:border-amber-400\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);\n }\n }\n }\n .dark\\:border-amber-500\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-amber-500) 20%, transparent);\n }\n }\n }\n .dark\\:border-emerald-400\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-emerald-400) 20%, transparent);\n }\n }\n }\n .dark\\:border-emerald-500\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-emerald-500) 20%, transparent);\n }\n }\n }\n .dark\\:border-emerald-500\\/25 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-emerald-500) 25%, transparent);\n }\n }\n }\n .dark\\:border-indigo-500\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(58.5% 0.233 277.117) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-indigo-500) 20%, transparent);\n }\n }\n }\n .dark\\:border-red-500\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-red-500) 20%, transparent);\n }\n }\n }\n .dark\\:border-rose-400\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);\n }\n }\n }\n .dark\\:border-rose-500\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-rose-500) 20%, transparent);\n }\n }\n }\n .dark\\:border-rose-500\\/25 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-rose-500) 25%, transparent);\n }\n }\n }\n .dark\\:border-white\\/5 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n .dark\\:border-white\\/8 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 8%, transparent);\n }\n }\n }\n .dark\\:border-white\\/10 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n .dark\\:border-white\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n .dark\\:bg-\\[\\#0f0f1a\\] {\n @media (prefers-color-scheme: dark) {\n background-color: #0f0f1a;\n }\n }\n .dark\\:bg-\\[\\#0f0f1a\\]\\/90 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in oklab, #0f0f1a 90%, transparent);\n }\n }\n .dark\\:bg-\\[\\#080811\\] {\n @media (prefers-color-scheme: dark) {\n background-color: #080811;\n }\n }\n .dark\\:bg-amber-400\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-amber-500\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-500) 10%, transparent);\n }\n }\n }\n .dark\\:bg-amber-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(55.5% 0.163 48.998) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-amber-800\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(47.3% 0.137 46.201) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-800) 30%, transparent);\n }\n }\n }\n .dark\\:bg-amber-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(41.4% 0.112 45.904) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-amber-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(27.9% 0.077 45.635) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-black\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #000 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 30%, transparent);\n }\n }\n }\n .dark\\:bg-black\\/60 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n }\n }\n .dark\\:bg-blue-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(48.8% 0.243 264.376) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-blue-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(37.9% 0.146 265.522) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-blue-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(28.2% 0.091 267.935) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-cyan-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(52% 0.105 223.128) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-cyan-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(39.8% 0.07 227.392) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-cyan-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(30.2% 0.056 229.695) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-400 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-emerald-400);\n }\n }\n .dark\\:bg-emerald-400\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-500\\/5 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-500) 5%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-500\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(50.8% 0.118 165.612) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-800\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(43.2% 0.095 166.913) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-800) 40%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(37.8% 0.077 168.94) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(26.2% 0.051 172.552) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-indigo-400 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-indigo-400);\n }\n }\n .dark\\:bg-indigo-500\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(58.5% 0.233 277.117) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-500) 10%, transparent);\n }\n }\n }\n .dark\\:bg-indigo-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(45.7% 0.24 277.023) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-indigo-800\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(39.8% 0.195 277.366) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-800) 30%, transparent);\n }\n }\n }\n .dark\\:bg-indigo-900\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(35.9% 0.144 278.697) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-900) 30%, transparent);\n }\n }\n }\n .dark\\:bg-orange-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(55.3% 0.195 38.402) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-orange-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-pink-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(52.5% 0.223 3.958) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-pink-800\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(45.9% 0.187 3.815) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-800) 30%, transparent);\n }\n }\n }\n .dark\\:bg-pink-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(40.8% 0.153 2.432) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-pink-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(28.4% 0.109 3.907) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-purple-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(49.6% 0.265 301.924) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-purple-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-purple-800\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(43.8% 0.218 303.724) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-purple-800) 40%, transparent);\n }\n }\n }\n .dark\\:bg-purple-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(38.1% 0.176 304.987) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-purple-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-purple-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(29.1% 0.149 302.717) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-purple-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-red-500\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-red-500) 10%, transparent);\n }\n }\n }\n .dark\\:bg-rose-400\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-rose-500\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-500) 10%, transparent);\n }\n }\n }\n .dark\\:bg-slate-700 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-slate-700);\n }\n }\n .dark\\:bg-slate-800 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-slate-800);\n }\n }\n .dark\\:bg-slate-900 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-slate-900);\n }\n }\n .dark\\:bg-slate-900\\/50 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-900) 50%, transparent);\n }\n }\n }\n .dark\\:bg-slate-900\\/60 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-900) 60%, transparent);\n }\n }\n }\n .dark\\:bg-slate-900\\/80 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-900) 80%, transparent);\n }\n }\n }\n .dark\\:bg-slate-950 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-slate-950);\n }\n }\n .dark\\:bg-transparent {\n @media (prefers-color-scheme: dark) {\n background-color: transparent;\n }\n }\n .dark\\:bg-violet-800\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(43.2% 0.232 292.759) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-800) 30%, transparent);\n }\n }\n }\n .dark\\:bg-white\\/3 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #fff 3%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 3%, transparent);\n }\n }\n }\n .dark\\:bg-white\\/5 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n .dark\\:bg-white\\/8 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 8%, transparent);\n }\n }\n }\n .dark\\:bg-white\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n .dark\\:bg-white\\/60 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #fff 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 60%, transparent);\n }\n }\n }\n .dark\\:from-white\\/10 {\n @media (prefers-color-scheme: dark) {\n --tw-gradient-from: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n }\n .dark\\:to-white\\/5 {\n @media (prefers-color-scheme: dark) {\n --tw-gradient-to: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n }\n .dark\\:text-amber-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-amber-100);\n }\n }\n .dark\\:text-amber-200 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-amber-200);\n }\n }\n .dark\\:text-amber-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-amber-300);\n }\n }\n .dark\\:text-amber-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-amber-400);\n }\n }\n .dark\\:text-blue-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-blue-100);\n }\n }\n .dark\\:text-blue-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-blue-300);\n }\n }\n .dark\\:text-blue-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-blue-400);\n }\n }\n .dark\\:text-cyan-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-cyan-100);\n }\n }\n .dark\\:text-cyan-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-cyan-300);\n }\n }\n .dark\\:text-cyan-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-cyan-400);\n }\n }\n .dark\\:text-emerald-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-emerald-100);\n }\n }\n .dark\\:text-emerald-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-emerald-300);\n }\n }\n .dark\\:text-emerald-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-emerald-400);\n }\n }\n .dark\\:text-emerald-500\\/50 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-emerald-500) 50%, transparent);\n }\n }\n }\n .dark\\:text-indigo-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-indigo-100);\n }\n }\n .dark\\:text-indigo-200 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-indigo-200);\n }\n }\n .dark\\:text-indigo-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-indigo-400);\n }\n }\n .dark\\:text-indigo-400\\/70 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, oklch(67.3% 0.182 276.935) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-indigo-400) 70%, transparent);\n }\n }\n }\n .dark\\:text-orange-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-orange-100);\n }\n }\n .dark\\:text-pink-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-pink-100);\n }\n }\n .dark\\:text-pink-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-pink-300);\n }\n }\n .dark\\:text-pink-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-pink-400);\n }\n }\n .dark\\:text-purple-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-purple-100);\n }\n }\n .dark\\:text-purple-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-purple-300);\n }\n }\n .dark\\:text-purple-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-purple-400);\n }\n }\n .dark\\:text-red-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-red-400);\n }\n }\n .dark\\:text-rose-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-rose-400);\n }\n }\n .dark\\:text-slate-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-slate-300);\n }\n }\n .dark\\:text-slate-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-slate-400);\n }\n }\n .dark\\:text-violet-200 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-violet-200);\n }\n }\n .dark\\:text-white {\n @media (prefers-color-scheme: dark) {\n color: var(--color-white);\n }\n }\n .dark\\:text-white\\/20 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n .dark\\:text-white\\/30 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n }\n .dark\\:text-white\\/40 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 40%, transparent);\n }\n }\n }\n .dark\\:text-white\\/50 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n }\n .dark\\:text-white\\/60 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 60%, transparent);\n }\n }\n }\n .dark\\:text-white\\/70 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n }\n .dark\\:text-white\\/75 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 75%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 75%, transparent);\n }\n }\n }\n .dark\\:text-white\\/80 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\n }\n }\n .dark\\:text-white\\/90 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 90%, transparent);\n }\n }\n }\n .dark\\:placeholder-white\\/30 {\n @media (prefers-color-scheme: dark) {\n &::placeholder {\n color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n }\n }\n .dark\\:ring-white\\/10 {\n @media (prefers-color-scheme: dark) {\n --tw-ring-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n .dark\\:group-hover\\:border-white\\/50 {\n @media (prefers-color-scheme: dark) {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:focus-within\\:border-white\\/20 {\n @media (prefers-color-scheme: dark) {\n &:focus-within {\n border-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n }\n .dark\\:hover\\:border-emerald-500\\/20 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-emerald-500) 20%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:border-rose-500\\/20 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-rose-500) 20%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:border-white\\/15 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, #fff 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 15%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:border-white\\/20 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-emerald-500\\/10 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-rose-500\\/10 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-500) 10%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-white\\/5 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-white\\/10 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-white\\/20 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-blue-400 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-400);\n }\n }\n }\n }\n .dark\\:hover\\:text-emerald-400 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: var(--color-emerald-400);\n }\n }\n }\n }\n .dark\\:hover\\:text-indigo-300 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-300);\n }\n }\n }\n }\n .dark\\:hover\\:text-indigo-400 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-400);\n }\n }\n }\n }\n .dark\\:hover\\:text-rose-400 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: var(--color-rose-400);\n }\n }\n }\n }\n .dark\\:hover\\:text-white\\/60 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: color-mix(in srgb, #fff 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 60%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-white\\/70 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-white\\/80 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-white\\/90 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: color-mix(in srgb, #fff 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 90%, transparent);\n }\n }\n }\n }\n }\n}\n@layer base {\n :root {\n --star: shape(evenodd from 50% 24.787%, curve by 7.143% 18.016% with 0% 0% / 2.9725% 13.814%, curve by 17.882% 7.197% with 4.171% 4.2025% / 17.882% 7.197%, curve by -17.882% 8.6765% with 0% 0% / -13.711% 4.474%, curve by -7.143% 16.5365% with -4.1705% 4.202% / -7.143% 16.5365%, curve by -8.6115% -16.5365% with 0% 0% / -4.441% -12.3345%, curve by -16.4135% -8.6765% with -4.171% -4.2025% / -16.4135% -8.6765%, curve by 16.4135% -7.197% with 0% 0% / 12.2425% -2.9945%, curve by 8.6115% -18.016% with 4.1705% -4.202% / 8.6115% -18.016%, close);\n --flower: shape(evenodd from 17.9665% 82.0335%, curve by -12.349% -32.0335% with -13.239% -5.129% / -18.021% -15.402%, curve by -0.0275% -22.203% with -3.1825% -9.331% / -3.074% -16.6605%, curve by 12.3765% -9.8305% with 2.3835% -4.3365% / 6.565% -7.579%, curve by 32.0335% -12.349% with 5.129% -13.239% / 15.402% -18.021%, curve by 20.4535% -0.8665% with 8.3805% -2.858% / 15.1465% -3.062%, curve by 11.58% 13.2155% with 5.225% 2.161% / 9.0355% 6.6475%, curve by 12.349% 32.0335% with 13.239% 5.129% / 18.021% 15.402%, curve by 0.5715% 21.1275% with 2.9805% 8.7395% / 3.0745% 15.723%, curve by -12.9205% 10.906% with -2.26% 4.88% / -6.638% 8.472%, curve by -32.0335% 12.349% with -5.129% 13.239% / -15.402% 18.021%, curve by -21.1215% 0.5745% with -8.736% 2.9795% / -15.718% 3.0745%, curve by -10.912% -12.9235% with -4.883% -2.2595% / -8.477% -6.6385%, close);\n --hexagon: shape(evenodd from 6.47% 67.001%, curve by 0% -34.002% with -1.1735% -7.7% / -1.1735% -26.302%, curve by 7.0415% -12.1965% with 0.7075% -4.641% / 3.3765% -9.2635%, curve by 29.447% -17.001% with 6.0815% -4.8665% / 22.192% -14.1675%, curve by 14.083% 0% with 4.3725% -1.708% / 9.7105% -1.708%, curve by 29.447% 17.001% with 7.255% 2.8335% / 23.3655% 12.1345%, curve by 7.0415% 12.1965% with 3.665% 2.933% / 6.334% 7.5555%, curve by 0% 34.002% with 1.1735% 7.7% / 1.1735% 26.302%, curve by -7.0415% 12.1965% with -0.7075% 4.641% / -3.3765% 9.2635%, curve by -29.447% 17.001% with -6.0815% 4.8665% / -22.192% 14.1675%, curve by -14.083% 0% with -4.3725% 1.708% / -9.7105% 1.708%, curve by -29.447% -17.001% with -7.255% -2.8335% / -23.3655% -12.1345%, curve by -7.0415% -12.1965% with -3.665% -2.933% / -6.334% -7.5555%, close);\n --cylinder: shape(evenodd from 10.5845% 59.7305%, curve by 0% -19.461% with -0.113% -1.7525% / -0.11% -18.14%, curve by 10.098% -26.213% with 0.837% -10.0375% / 3.821% -19.2625%, curve by 29.3175% -13.0215% with 7.2175% -7.992% / 17.682% -13.0215%, curve by 19.5845% 5.185% with 7.1265% 0% / 13.8135% 1.887%, curve by 9.8595% 7.9775% with 3.7065% 2.1185% / 7.035% 4.8195%, curve by 9.9715% 26.072% with 6.2015% 6.933% / 9.4345% 16.082%, curve by 0% 19.461% with 0.074% 1.384% / 0.0745% 17.7715%, curve by -13.0065% 29.1155% with -0.511% 11.5345% / -5.021% 21.933%, curve by -26.409% 10.119% with -6.991% 6.288% / -16.254% 10.119%, curve by -20.945% -5.9995% with -7.6935% 0% / -14.8755% -2.199%, curve by -8.713% -7.404% with -3.255% -2.0385% / -6.1905% -4.537%, curve by -9.7575% -25.831% with -6.074% -6.9035% / -9.1205% -15.963%, close);\n --circle: shape(evenodd from 13.482% 79.505%, curve by -7.1945% -12.47% with -1.4985% -1.8575% / -6.328% -10.225%, curve by 0.0985% -33.8965% with -4.1645% -10.7945% / -4.1685% -23.0235%, curve by 6.9955% -12.101% with 1.72% -4.3825% / 4.0845% -8.458%, curve by 30.125% -17.119% with 7.339% -9.1825% / 18.4775% -15.5135%, curve by 13.4165% 0.095% with 4.432% -0.6105% / 8.9505% -0.5855%, curve by 29.364% 16.9% with 11.6215% 1.77% / 22.102% 7.9015%, curve by 7.176% 12.4145% with 3.002% 3.7195% / 5.453% 7.968%, curve by -0.0475% 33.8925% with 4.168% 10.756% / 4.2305% 22.942%, curve by -7.1135% 12.2825% with -1.74% 4.4535% / -4.1455% 8.592%, curve by -29.404% 16.9075% with -7.202% 8.954% / -18.019% 15.137%, curve by -14.19% -0.018% with -4.6635% 0.7255% / -9.4575% 0.7205%, curve by -29.226% -16.8875% with -11.573% -1.8065% / -21.9955% -7.9235%, close);\n --heart: shape(evenodd from 51.311% 83.603%, curve by -8.333% -20.508% with -14.104% -4.287% / -16.406% -16.185%, curve by -4.271% -37.41% with -5.419% -9.658% / -6.815% -22.733%, curve by 13.589% -33.586% with 3.982% -7.448% / 8.411% -15.994%, curve by 28.187% -21.985% with 4.029% -4.29% / 4.029% -4.29%, curve by 33.835% 0.721% with 9.618% 4.647% / 22.541% 9.618%, curve by 37.596% 21.304% with 3.306% 13.266% / 7.589% 24.251%, curve by 21.985% 43.613% with -4.208% 3.982% / -15.994% 8.411%, curve by 0.721% 37.596% with -7.448% 4.029% / -15.994% 8.411%, curve by -16.185% 28.187% with -9.658% 5.419% / -22.733% 6.815%, curve by -37.41% 4.271% with -4.29% 4.029% / -4.29% 4.029%, curve by -33.586% -13.589% with -7.448% 3.982% / -15.994% 8.411%, curve by -28.187% -32.094% with -4.029% 4.029% / -4.029% 4.029%, close);\n --spiral: shape(evenodd from 13.347% 30.885%, curve by 5.502% 18.447% with 11.052% 5.562% / 19.995% 9.169%, curve by -20.309% 16.907% with -7.146% -1.332% / -9.016% -2.812%, curve by -25.848% -13.087% with -7.017% -7.46% / -9.941% -15.041%, curve by 10.154% -25.731% with 2.473% -6.063% / 7.163% -10.656%, curve by 31.473% -7.963% with 8.814% 2.403% / 13.84% 8.748%, curve by 16.526% 20.487% with -4.058% 1.502% / -9.51% 3.304%, curve by 5.502% 18.447% with 11.052% 5.562% / 19.995% 9.169%, close);\n --sun: shape(evenodd from 12.758% 22.039%, curve by 2.2585% 27.561% with 4.517% 18.961% / 2.2585% 27.561%, curve by 3.187% -11.541% with 2.2585% -8.483% / 4.7615% -12.541%, curve by 31.034% 31.034% with 31.034% 31.034% / 31.034% 31.034%, curve by 33.825% -14.163% with 8.961% -7.455% / 13.585% -11.059%, curve by 19.814% -34.731% with 4.7615% -12.541% / 2.2585% -27.561%, curve by 33.825% -14.163% with 2.2585% -8.483% / 4.517% -18.961%, curve by 19.814% -34.731% with 0% 0% / -3.187% 11.541%, curve by 33.825% -14.163% with 8.961% -7.455% / 13.585% -11.059%, curve by 31.034% 31.034% with 31.034% 31.034% / 31.034% 31.034%, curve by 19.814% -34.731% with 4.7615% -12.541% / 2.2585% -27.561%, curve by 33.825% -14.163% with 2.2585% -8.483% / 4.517% -18.961%, close);\n --star2: shape(open from 28.947% 47.744%, curve by 24.042% -2.139% with 0% 0% / -24.042% 2.139%, curve by 4.208% -25.165% with 4.208% -25.165% / 4.208% -25.165%, curve by 2.341% -18.447% with 0% 0% / 1.888% -1.438%, curve by 32.355% 1.085% with 0% 0% / 25.984% 1.085%, curve by -4.655% 25.165% with 0% 0% / -4.655% 25.165%, curve by -4.208% -25.165% with -4.208% -25.165% / -4.208% -25.165%, curve by 2.566% -4.208% with 0% 0% / 2.072% -1.639%, curve by 30.069% 1.085% with 0% 0% / 24.156% 1.085%, curve by -2.791% 25.165% with 0% 0% / -2.791% 25.165%, curve by -4.208% -25.165% with -4.208% -25.165% / -4.208% -25.165%, curve by 2.116% -4.208% with 0% 0% / 1.659% -1.557%, close);\n --tri-star: shape(open from 25% 25%, curve by 25% 25% with 0% 0% / 25% 25%, close);\n }\n}\n@property --tw-translate-x { syntax: "*"; inherits: false; initial-value: 0; }\n@property --tw-translate-y { syntax: "*"; inherits: false; initial-value: 0; }\n@property --tw-translate-z { syntax: "*"; inherits: false; initial-value: 0; }\n@property --tw-scale-x { syntax: "*"; inherits: false; initial-value: 1; }\n@property --tw-scale-y { syntax: "*"; inherits: false; initial-value: 1; }\n@property --tw-scale-z { syntax: "*"; inherits: false; initial-value: 1; }\n@property --tw-rotate-x { syntax: "*"; inherits: false; }\n@property --tw-rotate-y { syntax: "*"; inherits: false; }\n@property --tw-rotate-z { syntax: "*"; inherits: false; }\n@property --tw-skew-x { syntax: "*"; inherits: false; }\n@property --tw-skew-y { syntax: "*"; inherits: false; }\n@property --tw-scroll-snap-strictness { syntax: "*"; inherits: false; initial-value: proximity; }\n@property --tw-scrollbar-thumb { syntax: "<color>"; inherits: false; initial-value: #0000; }\n@property --tw-scrollbar-track { syntax: "<color>"; inherits: false; initial-value: #0000; }\n@property --tw-space-y-reverse { syntax: "*"; inherits: false; initial-value: 0; }\n@property --tw-divide-y-reverse { syntax: "*"; inherits: false; initial-value: 0; }\n@property --tw-border-style { syntax: "*"; inherits: false; initial-value: solid; }\n@property --tw-gradient-position { syntax: "*"; inherits: false; }\n@property --tw-gradient-from { syntax: "<color>"; inherits: false; initial-value: #0000; }\n@property --tw-gradient-via { syntax: "<color>"; inherits: false; initial-value: #0000; }\n@property --tw-gradient-to { syntax: "<color>"; inherits: false; initial-value: #0000; }\n@property --tw-gradient-stops { syntax: "*"; inherits: false; }\n@property --tw-gradient-via-stops { syntax: "*"; inherits: false; }\n@property --tw-gradient-from-position { syntax: "<length-percentage>"; inherits: false; initial-value: 0%; }\n@property --tw-gradient-via-position { syntax: "<length-percentage>"; inherits: false; initial-value: 50%; }\n@property --tw-gradient-to-position { syntax: "<length-percentage>"; inherits: false; initial-value: 100%; }\n@property --tw-leading { syntax: "*"; inherits: false; }\n@property --tw-font-weight { syntax: "*"; inherits: false; }\n@property --tw-tracking { syntax: "*"; inherits: false; }\n@property --tw-ordinal { syntax: "*"; inherits: false; }\n@property --tw-slashed-zero { syntax: "*"; inherits: false; }\n@property --tw-numeric-figure { syntax: "*"; inherits: false; }\n@property --tw-numeric-spacing { syntax: "*"; inherits: false; }\n@property --tw-numeric-fraction { syntax: "*"; inherits: false; }\n@property --tw-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }\n@property --tw-shadow-color { syntax: "*"; inherits: false; }\n@property --tw-shadow-alpha { syntax: "<percentage>"; inherits: false; initial-value: 100%; }\n@property --tw-inset-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }\n@property --tw-inset-shadow-color { syntax: "*"; inherits: false; }\n@property --tw-inset-shadow-alpha { syntax: "<percentage>"; inherits: false; initial-value: 100%; }\n@property --tw-ring-color { syntax: "*"; inherits: false; }\n@property --tw-ring-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }\n@property --tw-inset-ring-color { syntax: "*"; inherits: false; }\n@property --tw-inset-ring-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }\n@property --tw-ring-inset { syntax: "*"; inherits: false; }\n@property --tw-ring-offset-width { syntax: "<length>"; inherits: false; initial-value: 0px; }\n@property --tw-ring-offset-color { syntax: "*"; inherits: false; initial-value: #fff; }\n@property --tw-ring-offset-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }\n@property --tw-blur { syntax: "*"; inherits: false; }\n@property --tw-brightness { syntax: "*"; inherits: false; }\n@property --tw-contrast { syntax: "*"; inherits: false; }\n@property --tw-grayscale { syntax: "*"; inherits: false; }\n@property --tw-hue-rotate { syntax: "*"; inherits: false; }\n@property --tw-invert { syntax: "*"; inherits: false; }\n@property --tw-opacity { syntax: "*"; inherits: false; }\n@property --tw-saturate { syntax: "*"; inherits: false; }\n@property --tw-sepia { syntax: "*"; inherits: false; }\n@property --tw-drop-shadow { syntax: "*"; inherits: false; }\n@property --tw-drop-shadow-color { syntax: "*"; inherits: false; }\n@property --tw-drop-shadow-alpha { syntax: "<percentage>"; inherits: false; initial-value: 100%; }\n@property --tw-drop-shadow-size { syntax: "*"; inherits: false; }\n@property --tw-backdrop-blur { syntax: "*"; inherits: false; }\n@property --tw-backdrop-brightness { syntax: "*"; inherits: false; }\n@property --tw-backdrop-contrast { syntax: "*"; inherits: false; }\n@property --tw-backdrop-grayscale { syntax: "*"; inherits: false; }\n@property --tw-backdrop-hue-rotate { syntax: "*"; inherits: false; }\n@property --tw-backdrop-invert { syntax: "*"; inherits: false; }\n@property --tw-backdrop-opacity { syntax: "*"; inherits: false; }\n@property --tw-backdrop-saturate { syntax: "*"; inherits: false; }\n@property --tw-backdrop-sepia { syntax: "*"; inherits: false; }\n@property --tw-duration { syntax: "*"; inherits: false; }\n@property --tw-ease { syntax: "*"; inherits: false; }\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes ping {\n 75%, 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes bounce {\n 0%, 100% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n 50% {\n transform: none;\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n}\n@keyframes shapeshift {\n 0% {\n clip-path: var(--circle);\n rotate: 0turn;\n }\n 25% {\n clip-path: var(--flower);\n }\n 50% {\n clip-path: var(--cylinder);\n }\n 75% {\n clip-path: var(--hexagon);\n }\n 100% {\n clip-path: var(--circle);\n rotate: 1turn;\n }\n 120% {\n clip-path: var(--flower);\n }\n 140% {\n clip-path: var(--cylinder);\n }\n 160% {\n clip-path: var(--hexagon);\n }\n 180% {\n clip-path: var(--circle);\n rotate: 1turn;\n }\n}\n@keyframes gradientMove {\n 0% {\n translate: 0 0;\n }\n 100% {\n translate: -75% -75%;\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *,\n ::before,\n ::after,\n ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-scroll-snap-strictness: proximity;\n --tw-scrollbar-thumb: #0000;\n --tw-scrollbar-track: #0000;\n --tw-space-y-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n }\n }\n}\n');
114
+ styleInject('/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root,\n :host {\n --font-sans:\n ui-sans-serif,\n system-ui,\n sans-serif,\n "Apple Color Emoji",\n "Segoe UI Emoji",\n "Segoe UI Symbol",\n "Noto Color Emoji";\n --font-mono:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n "Liberation Mono",\n "Courier New",\n monospace;\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-orange-950: oklch(26.6% 0.079 36.259);\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-amber-900: oklch(41.4% 0.112 45.904);\n --color-amber-950: oklch(27.9% 0.077 45.635);\n --color-emerald-50: oklch(97.9% 0.021 166.113);\n --color-emerald-100: oklch(95% 0.052 163.051);\n --color-emerald-200: oklch(90.5% 0.093 164.15);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-600: oklch(59.6% 0.145 163.225);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-emerald-800: oklch(43.2% 0.095 166.913);\n --color-emerald-900: oklch(37.8% 0.077 168.94);\n --color-emerald-950: oklch(26.2% 0.051 172.552);\n --color-cyan-50: oklch(98.4% 0.019 200.873);\n --color-cyan-100: oklch(95.6% 0.045 203.388);\n --color-cyan-200: oklch(91.7% 0.08 205.041);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-cyan-800: oklch(45% 0.085 224.283);\n --color-cyan-900: oklch(39.8% 0.07 227.392);\n --color-cyan-950: oklch(30.2% 0.056 229.695);\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-blue-950: oklch(28.2% 0.091 267.935);\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-indigo-950: oklch(25.7% 0.09 281.288);\n --color-violet-100: oklch(94.3% 0.029 294.588);\n --color-violet-200: oklch(89.4% 0.057 293.283);\n --color-violet-800: oklch(43.2% 0.232 292.759);\n --color-violet-900: oklch(38% 0.189 293.745);\n --color-purple-50: oklch(97.7% 0.014 308.299);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-300: oklch(82.7% 0.119 306.383);\n --color-purple-400: oklch(71.4% 0.203 305.504);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-purple-800: oklch(43.8% 0.218 303.724);\n --color-purple-900: oklch(38.1% 0.176 304.987);\n --color-purple-950: oklch(29.1% 0.149 302.717);\n --color-pink-50: oklch(97.1% 0.014 343.198);\n --color-pink-100: oklch(94.8% 0.028 342.258);\n --color-pink-200: oklch(89.9% 0.061 343.231);\n --color-pink-300: oklch(82.3% 0.12 346.018);\n --color-pink-400: oklch(71.8% 0.202 349.761);\n --color-pink-700: oklch(52.5% 0.223 3.958);\n --color-pink-800: oklch(45.9% 0.187 3.815);\n --color-pink-900: oklch(40.8% 0.153 2.432);\n --color-pink-950: oklch(28.4% 0.109 3.907);\n --color-rose-50: oklch(96.9% 0.015 12.422);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-500: oklch(64.5% 0.246 16.439);\n --color-rose-600: oklch(58.6% 0.253 17.585);\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\n --color-slate-950: oklch(12.9% 0.042 264.695);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-xs: 20rem;\n --container-md: 28rem;\n --container-2xl: 42rem;\n --container-4xl: 56rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --tracking-tight: -0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n --leading-tight: 1.25;\n --leading-relaxed: 1.625;\n --radius-sm: 0.25rem;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --animate-bounce: bounce 1s infinite;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-xl: 24px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n }\n}\n@layer base {\n *,\n ::after,\n ::before,\n ::backdrop,\n ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html,\n :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n 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");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b,\n strong {\n font-weight: bolder;\n }\n code,\n kbd,\n samp,\n pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub,\n sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol,\n ul,\n menu {\n list-style: none;\n }\n img,\n svg,\n video,\n canvas,\n audio,\n iframe,\n embed,\n object {\n display: block;\n vertical-align: middle;\n }\n img,\n video {\n max-width: 100%;\n height: auto;\n }\n button,\n input,\n select,\n optgroup,\n textarea,\n ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit,\n ::-webkit-datetime-edit-year-field,\n ::-webkit-datetime-edit-month-field,\n ::-webkit-datetime-edit-day-field,\n ::-webkit-datetime-edit-hour-field,\n ::-webkit-datetime-edit-minute-field,\n ::-webkit-datetime-edit-second-field,\n ::-webkit-datetime-edit-millisecond-field,\n ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button,\n input:where([type=button], [type=reset], [type=submit]),\n ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button,\n ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=until-found])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-auto {\n pointer-events: auto;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .static {\n position: static;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .-top-8 {\n top: calc(var(--spacing) * -8);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-1\\/2 {\n top: calc(1 / 2 * 100%);\n }\n .top-2 {\n top: calc(var(--spacing) * 2);\n }\n .top-4 {\n top: calc(var(--spacing) * 4);\n }\n .-right-4 {\n right: calc(var(--spacing) * -4);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .right-5 {\n right: calc(var(--spacing) * 5);\n }\n .right-6 {\n right: calc(var(--spacing) * 6);\n }\n .-bottom-1\\.5 {\n bottom: calc(var(--spacing) * -1.5);\n }\n .bottom-6 {\n bottom: calc(var(--spacing) * 6);\n }\n .bottom-20 {\n bottom: calc(var(--spacing) * 20);\n }\n .-left-4 {\n left: calc(var(--spacing) * -4);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-1\\/2 {\n left: calc(1 / 2 * 100%);\n }\n .left-2 {\n left: calc(var(--spacing) * 2);\n }\n .left-5 {\n left: calc(var(--spacing) * 5);\n }\n .left-6 {\n left: calc(var(--spacing) * 6);\n }\n .z-0 {\n z-index: 0;\n }\n .z-10 {\n z-index: 10;\n }\n .z-20 {\n z-index: 20;\n }\n .z-50 {\n z-index: 50;\n }\n .z-\\[100\\] {\n z-index: 100;\n }\n .z-\\[9998\\] {\n z-index: 9998;\n }\n .z-\\[9999\\] {\n z-index: 9999;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .mx-1 {\n margin-inline: calc(var(--spacing) * 1);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .my-1\\.5 {\n margin-block: calc(var(--spacing) * 1.5);\n }\n .my-2 {\n margin-block: calc(var(--spacing) * 2);\n }\n .my-3 {\n margin-block: calc(var(--spacing) * 3);\n }\n .my-4 {\n margin-block: calc(var(--spacing) * 4);\n }\n .my-5 {\n margin-block: calc(var(--spacing) * 5);\n }\n .my-6 {\n margin-block: calc(var(--spacing) * 6);\n }\n .mt-0\\.5 {\n margin-top: calc(var(--spacing) * 0.5);\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .mt-1\\.5 {\n margin-top: calc(var(--spacing) * 1.5);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-3 {\n margin-top: calc(var(--spacing) * 3);\n }\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n .mt-8 {\n margin-top: calc(var(--spacing) * 8);\n }\n .mr-2 {\n margin-right: calc(var(--spacing) * 2);\n }\n .mb-0\\.5 {\n margin-bottom: calc(var(--spacing) * 0.5);\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-1\\.5 {\n margin-bottom: calc(var(--spacing) * 1.5);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n .ml-1 {\n margin-left: calc(var(--spacing) * 1);\n }\n .ml-1\\.5 {\n margin-left: calc(var(--spacing) * 1.5);\n }\n .ml-2 {\n margin-left: calc(var(--spacing) * 2);\n }\n .ml-auto {\n margin-left: auto;\n }\n .line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n .line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n .\\!table {\n display: table !important;\n }\n .\\!table-cell {\n display: table-cell !important;\n }\n .\\!table-header-group {\n display: table-header-group !important;\n }\n .\\!table-row {\n display: table-row !important;\n }\n .\\!table-row-group {\n display: table-row-group !important;\n }\n .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\n }\n .aspect-\\[4\\/3\\] {\n aspect-ratio: 4/3;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .h-1 {\n height: calc(var(--spacing) * 1);\n }\n .h-1\\.5 {\n height: calc(var(--spacing) * 1.5);\n }\n .h-2 {\n height: calc(var(--spacing) * 2);\n }\n .h-2\\.5 {\n height: calc(var(--spacing) * 2.5);\n }\n .h-3 {\n height: calc(var(--spacing) * 3);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-7 {\n height: calc(var(--spacing) * 7);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-12 {\n height: calc(var(--spacing) * 12);\n }\n .h-14 {\n height: calc(var(--spacing) * 14);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-28 {\n height: calc(var(--spacing) * 28);\n }\n .h-32 {\n height: calc(var(--spacing) * 32);\n }\n .h-40 {\n height: calc(var(--spacing) * 40);\n }\n .h-\\[400\\%\\] {\n height: 400%;\n }\n .h-\\[600px\\] {\n height: 600px;\n }\n .h-full {\n height: 100%;\n }\n .max-h-24 {\n max-height: calc(var(--spacing) * 24);\n }\n .max-h-32 {\n max-height: calc(var(--spacing) * 32);\n }\n .max-h-40 {\n max-height: calc(var(--spacing) * 40);\n }\n .max-h-56 {\n max-height: calc(var(--spacing) * 56);\n }\n .max-h-60 {\n max-height: calc(var(--spacing) * 60);\n }\n .max-h-64 {\n max-height: calc(var(--spacing) * 64);\n }\n .max-h-\\[320px\\] {\n max-height: 320px;\n }\n .max-h-\\[400px\\] {\n max-height: 400px;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-\\[300px\\] {\n min-height: 300px;\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .w-1\\.5 {\n width: calc(var(--spacing) * 1.5);\n }\n .w-2 {\n width: calc(var(--spacing) * 2);\n }\n .w-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n }\n .w-3 {\n width: calc(var(--spacing) * 3);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-6 {\n width: calc(var(--spacing) * 6);\n }\n .w-7 {\n width: calc(var(--spacing) * 7);\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-9 {\n width: calc(var(--spacing) * 9);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n .w-14 {\n width: calc(var(--spacing) * 14);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-28 {\n width: calc(var(--spacing) * 28);\n }\n .w-36 {\n width: calc(var(--spacing) * 36);\n }\n .w-40 {\n width: calc(var(--spacing) * 40);\n }\n .w-44 {\n width: calc(var(--spacing) * 44);\n }\n .w-\\[400\\%\\] {\n width: 400%;\n }\n .w-\\[500px\\] {\n width: 500px;\n }\n .w-\\[min\\(88\\%\\,18rem\\)\\] {\n width: min(88%, 18rem);\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\n }\n .max-w-4xl {\n max-width: var(--container-4xl);\n }\n .max-w-\\[90\\%\\] {\n max-width: 90%;\n }\n .max-w-\\[92\\%\\] {\n max-width: 92%;\n }\n .max-w-\\[94\\%\\] {\n max-width: 94%;\n }\n .max-w-\\[calc\\(100vw-3rem\\)\\] {\n max-width: calc(100vw - 3rem);\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .max-w-none {\n max-width: none;\n }\n .max-w-xs {\n max-width: var(--container-xs);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-\\[11rem\\] {\n min-width: 11rem;\n }\n .min-w-\\[400px\\] {\n min-width: 400px;\n }\n .flex-1 {\n flex: 1;\n }\n .flex-shrink-0 {\n flex-shrink: 0;\n }\n .flex-grow {\n flex-grow: 1;\n }\n .border-collapse {\n border-collapse: collapse;\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-0 {\n --tw-translate-y: calc(var(--spacing) * 0);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-4 {\n --tw-translate-y: calc(var(--spacing) * 4);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .scale-90 {\n --tw-scale-x: 90%;\n --tw-scale-y: 90%;\n --tw-scale-z: 90%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-95 {\n --tw-scale-x: 95%;\n --tw-scale-y: 95%;\n --tw-scale-z: 95%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-100 {\n --tw-scale-x: 100%;\n --tw-scale-y: 100%;\n --tw-scale-z: 100%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-110 {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .rotate-0 {\n rotate: 0deg;\n }\n .rotate-45 {\n rotate: 45deg;\n }\n .rotate-90 {\n rotate: 90deg;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .animate-\\[pulse_1\\.2s_infinite\\] {\n animation: pulse 1.2s infinite;\n }\n .animate-bounce {\n animation: var(--animate-bounce);\n }\n .animate-ping {\n animation: var(--animate-ping);\n }\n .animate-pulse {\n animation: var(--animate-pulse);\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-not-allowed {\n cursor: not-allowed;\n }\n .cursor-nw-resize {\n cursor: nw-resize;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .resize-none {\n resize: none;\n }\n .snap-x {\n scroll-snap-type: x var(--tw-scroll-snap-strictness);\n }\n .snap-mandatory {\n --tw-scroll-snap-strictness: mandatory;\n }\n .snap-start {\n scroll-snap-align: start;\n }\n .scrollbar-thin {\n scrollbar-width: thin;\n }\n .scrollbar-thumb-slate-200 {\n --tw-scrollbar-thumb: var(--color-slate-200);\n scrollbar-color: var(--tw-scrollbar-thumb) var(--tw-scrollbar-track);\n }\n .scrollbar-track-transparent {\n --tw-scrollbar-track: transparent;\n scrollbar-color: var(--tw-scrollbar-thumb) var(--tw-scrollbar-track);\n }\n .grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-row-reverse {\n flex-direction: row-reverse;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .items-center {\n align-items: center;\n }\n .items-end {\n align-items: flex-end;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .space-y-0\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-1 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-1\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-3 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-4 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-8 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .divide-y {\n :where(& > :not(:last-child)) {\n --tw-divide-y-reverse: 0;\n border-bottom-style: var(--tw-border-style);\n border-top-style: var(--tw-border-style);\n border-top-width: calc(1px * var(--tw-divide-y-reverse));\n border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n }\n }\n .divide-slate-100 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-slate-100);\n }\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-auto {\n overflow: auto;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: var(--radius-2xl);\n }\n .rounded-3xl {\n border-radius: var(--radius-3xl);\n }\n .rounded-\\[2px\\] {\n border-radius: 2px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius-lg);\n }\n .rounded-md {\n border-radius: var(--radius-md);\n }\n .rounded-none {\n border-radius: 0;\n }\n .rounded-sm {\n border-radius: var(--radius-sm);\n }\n .rounded-xl {\n border-radius: var(--radius-xl);\n }\n .rounded-t-md {\n border-top-left-radius: var(--radius-md);\n border-top-right-radius: var(--radius-md);\n }\n .rounded-tl-\\[2px\\] {\n border-top-left-radius: 2px;\n }\n .rounded-tl-sm {\n border-top-left-radius: var(--radius-sm);\n }\n .rounded-tr-sm {\n border-top-right-radius: var(--radius-sm);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-t-2 {\n border-top-style: var(--tw-border-style);\n border-top-width: 2px;\n }\n .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-b-2 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 2px;\n }\n .border-l-2 {\n border-left-style: var(--tw-border-style);\n border-left-width: 2px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-amber-100 {\n border-color: var(--color-amber-100);\n }\n .border-amber-200 {\n border-color: var(--color-amber-200);\n }\n .border-emerald-100 {\n border-color: var(--color-emerald-100);\n }\n .border-emerald-200 {\n border-color: var(--color-emerald-200);\n }\n .border-emerald-500 {\n border-color: var(--color-emerald-500);\n }\n .border-emerald-500\\/20 {\n border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-emerald-500) 20%, transparent);\n }\n }\n .border-indigo-200 {\n border-color: var(--color-indigo-200);\n }\n .border-indigo-500 {\n border-color: var(--color-indigo-500);\n }\n .border-red-200 {\n border-color: var(--color-red-200);\n }\n .border-rose-100 {\n border-color: var(--color-rose-100);\n }\n .border-rose-200 {\n border-color: var(--color-rose-200);\n }\n .border-slate-100 {\n border-color: var(--color-slate-100);\n }\n .border-slate-200 {\n border-color: var(--color-slate-200);\n }\n .border-slate-200\\/50 {\n border-color: color-mix(in srgb, oklch(92.9% 0.013 255.508) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-slate-200) 50%, transparent);\n }\n }\n .border-slate-200\\/60 {\n border-color: color-mix(in srgb, oklch(92.9% 0.013 255.508) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-slate-200) 60%, transparent);\n }\n }\n .border-slate-200\\/80 {\n border-color: color-mix(in srgb, oklch(92.9% 0.013 255.508) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-slate-200) 80%, transparent);\n }\n }\n .border-slate-300 {\n border-color: var(--color-slate-300);\n }\n .border-slate-800 {\n border-color: var(--color-slate-800);\n }\n .border-transparent {\n border-color: transparent;\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-white\\/5 {\n border-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n .border-white\\/8 {\n border-color: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 8%, transparent);\n }\n }\n .border-t-transparent {\n border-top-color: transparent;\n }\n .bg-\\[\\#0d0d1a\\] {\n background-color: #0d0d1a;\n }\n .bg-\\[\\#080818\\] {\n background-color: #080818;\n }\n .bg-amber-50 {\n background-color: var(--color-amber-50);\n }\n .bg-amber-100 {\n background-color: var(--color-amber-100);\n }\n .bg-amber-200 {\n background-color: var(--color-amber-200);\n }\n .bg-amber-500 {\n background-color: var(--color-amber-500);\n }\n .bg-amber-500\\/80 {\n background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-500) 80%, transparent);\n }\n }\n .bg-blue-50 {\n background-color: var(--color-blue-50);\n }\n .bg-blue-100 {\n background-color: var(--color-blue-100);\n }\n .bg-blue-200 {\n background-color: var(--color-blue-200);\n }\n .bg-cyan-50 {\n background-color: var(--color-cyan-50);\n }\n .bg-cyan-100 {\n background-color: var(--color-cyan-100);\n }\n .bg-cyan-200 {\n background-color: var(--color-cyan-200);\n }\n .bg-emerald-50 {\n background-color: var(--color-emerald-50);\n }\n .bg-emerald-50\\/50 {\n background-color: color-mix(in srgb, oklch(97.9% 0.021 166.113) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-50) 50%, transparent);\n }\n }\n .bg-emerald-100 {\n background-color: var(--color-emerald-100);\n }\n .bg-emerald-200 {\n background-color: var(--color-emerald-200);\n }\n .bg-emerald-500 {\n background-color: var(--color-emerald-500);\n }\n .bg-emerald-500\\/10 {\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);\n }\n }\n .bg-emerald-500\\/80 {\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-500) 80%, transparent);\n }\n }\n .bg-indigo-50 {\n background-color: var(--color-indigo-50);\n }\n .bg-indigo-100 {\n background-color: var(--color-indigo-100);\n }\n .bg-indigo-500 {\n background-color: var(--color-indigo-500);\n }\n .bg-indigo-600 {\n background-color: var(--color-indigo-600);\n }\n .bg-orange-100 {\n background-color: var(--color-orange-100);\n }\n .bg-pink-50 {\n background-color: var(--color-pink-50);\n }\n .bg-pink-100 {\n background-color: var(--color-pink-100);\n }\n .bg-pink-200 {\n background-color: var(--color-pink-200);\n }\n .bg-purple-50 {\n background-color: var(--color-purple-50);\n }\n .bg-purple-100 {\n background-color: var(--color-purple-100);\n }\n .bg-purple-200 {\n background-color: var(--color-purple-200);\n }\n .bg-red-50 {\n background-color: var(--color-red-50);\n }\n .bg-red-500 {\n background-color: var(--color-red-500);\n }\n .bg-rose-50 {\n background-color: var(--color-rose-50);\n }\n .bg-rose-500 {\n background-color: var(--color-rose-500);\n }\n .bg-rose-500\\/80 {\n background-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-500) 80%, transparent);\n }\n }\n .bg-slate-50 {\n background-color: var(--color-slate-50);\n }\n .bg-slate-50\\/20 {\n background-color: color-mix(in srgb, oklch(98.4% 0.003 247.858) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-50) 20%, transparent);\n }\n }\n .bg-slate-50\\/50 {\n background-color: color-mix(in srgb, oklch(98.4% 0.003 247.858) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-50) 50%, transparent);\n }\n }\n .bg-slate-100 {\n background-color: var(--color-slate-100);\n }\n .bg-slate-100\\/50 {\n background-color: color-mix(in srgb, oklch(96.8% 0.007 247.896) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-100) 50%, transparent);\n }\n }\n .bg-slate-200 {\n background-color: var(--color-slate-200);\n }\n .bg-slate-400 {\n background-color: var(--color-slate-400);\n }\n .bg-slate-800 {\n background-color: var(--color-slate-800);\n }\n .bg-slate-900 {\n background-color: var(--color-slate-900);\n }\n .bg-slate-900\\/50 {\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-900) 50%, transparent);\n }\n }\n .bg-slate-900\\/90 {\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-900) 90%, transparent);\n }\n }\n .bg-slate-950 {\n background-color: var(--color-slate-950);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-violet-100 {\n background-color: var(--color-violet-100);\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .bg-white\\/60 {\n background-color: color-mix(in srgb, #fff 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 60%, transparent);\n }\n }\n .bg-white\\/90 {\n background-color: color-mix(in srgb, #fff 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 90%, transparent);\n }\n }\n .bg-gradient-to-br {\n --tw-gradient-position: to bottom right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .from-slate-100 {\n --tw-gradient-from: var(--color-slate-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-slate-200 {\n --tw-gradient-to: var(--color-slate-200);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0\\.5 {\n padding: calc(var(--spacing) * 0.5);\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-2\\.5 {\n padding: calc(var(--spacing) * 2.5);\n }\n .p-3 {\n padding: calc(var(--spacing) * 3);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .p-8 {\n padding: calc(var(--spacing) * 8);\n }\n .p-10 {\n padding: calc(var(--spacing) * 10);\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-0\\.5 {\n padding-block: calc(var(--spacing) * 0.5);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-2\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .pt-1 {\n padding-top: calc(var(--spacing) * 1);\n }\n .pt-2 {\n padding-top: calc(var(--spacing) * 2);\n }\n .pr-1 {\n padding-right: calc(var(--spacing) * 1);\n }\n .pb-3 {\n padding-bottom: calc(var(--spacing) * 3);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-6 {\n padding-bottom: calc(var(--spacing) * 6);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .align-middle {\n vertical-align: middle;\n }\n .font-mono {\n font-family: var(--font-mono);\n }\n .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[9px\\] {\n font-size: 9px;\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .text-\\[11px\\] {\n font-size: 11px;\n }\n .text-\\[12px\\] {\n font-size: 12px;\n }\n .text-\\[13px\\] {\n font-size: 13px;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n .tracking-wider {\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .break-words {\n overflow-wrap: break-word;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .whitespace-pre {\n white-space: pre;\n }\n .whitespace-pre-line {\n white-space: pre-line;\n }\n .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-amber-400 {\n color: var(--color-amber-400);\n }\n .text-amber-500 {\n color: var(--color-amber-500);\n }\n .text-amber-600 {\n color: var(--color-amber-600);\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-amber-800 {\n color: var(--color-amber-800);\n }\n .text-amber-900 {\n color: var(--color-amber-900);\n }\n .text-amber-950 {\n color: var(--color-amber-950);\n }\n .text-blue-600 {\n color: var(--color-blue-600);\n }\n .text-blue-700 {\n color: var(--color-blue-700);\n }\n .text-blue-800 {\n color: var(--color-blue-800);\n }\n .text-blue-950 {\n color: var(--color-blue-950);\n }\n .text-cyan-700 {\n color: var(--color-cyan-700);\n }\n .text-cyan-800 {\n color: var(--color-cyan-800);\n }\n .text-cyan-950 {\n color: var(--color-cyan-950);\n }\n .text-emerald-400 {\n color: var(--color-emerald-400);\n }\n .text-emerald-500 {\n color: var(--color-emerald-500);\n }\n .text-emerald-500\\/70 {\n color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-emerald-500) 70%, transparent);\n }\n }\n .text-emerald-600 {\n color: var(--color-emerald-600);\n }\n .text-emerald-700 {\n color: var(--color-emerald-700);\n }\n .text-emerald-800 {\n color: var(--color-emerald-800);\n }\n .text-emerald-950 {\n color: var(--color-emerald-950);\n }\n .text-gray-500 {\n color: var(--color-gray-500);\n }\n .text-indigo-200\\/85 {\n color: color-mix(in srgb, oklch(87% 0.065 274.039) 85%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-indigo-200) 85%, transparent);\n }\n }\n .text-indigo-400 {\n color: var(--color-indigo-400);\n }\n .text-indigo-500 {\n color: var(--color-indigo-500);\n }\n .text-indigo-600 {\n color: var(--color-indigo-600);\n }\n .text-indigo-900 {\n color: var(--color-indigo-900);\n }\n .text-indigo-950 {\n color: var(--color-indigo-950);\n }\n .text-orange-950 {\n color: var(--color-orange-950);\n }\n .text-pink-700 {\n color: var(--color-pink-700);\n }\n .text-pink-800 {\n color: var(--color-pink-800);\n }\n .text-pink-950 {\n color: var(--color-pink-950);\n }\n .text-purple-700 {\n color: var(--color-purple-700);\n }\n .text-purple-800 {\n color: var(--color-purple-800);\n }\n .text-purple-950 {\n color: var(--color-purple-950);\n }\n .text-red-500 {\n color: var(--color-red-500);\n }\n .text-red-600 {\n color: var(--color-red-600);\n }\n .text-rose-400 {\n color: var(--color-rose-400);\n }\n .text-rose-500 {\n color: var(--color-rose-500);\n }\n .text-rose-600 {\n color: var(--color-rose-600);\n }\n .text-slate-100 {\n color: var(--color-slate-100);\n }\n .text-slate-200 {\n color: var(--color-slate-200);\n }\n .text-slate-300 {\n color: var(--color-slate-300);\n }\n .text-slate-400 {\n color: var(--color-slate-400);\n }\n .text-slate-500 {\n color: var(--color-slate-500);\n }\n .text-slate-600 {\n color: var(--color-slate-600);\n }\n .text-slate-700 {\n color: var(--color-slate-700);\n }\n .text-slate-800 {\n color: var(--color-slate-800);\n }\n .text-slate-900 {\n color: var(--color-slate-900);\n }\n .text-violet-900 {\n color: var(--color-violet-900);\n }\n .text-white {\n color: var(--color-white);\n }\n .text-white\\/25 {\n color: color-mix(in srgb, #fff 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 25%, transparent);\n }\n }\n .text-white\\/35 {\n color: color-mix(in srgb, #fff 35%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 35%, transparent);\n }\n }\n .lowercase {\n text-transform: lowercase;\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n .placeholder-slate-400 {\n &::placeholder {\n color: var(--color-slate-400);\n }\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-20 {\n opacity: 20%;\n }\n .opacity-30 {\n opacity: 30%;\n }\n .opacity-100 {\n opacity: 100%;\n }\n .shadow-2xl {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .shadow-md {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .shadow-xl {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .ring {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .ring-1 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .ring-2 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n .shadow-rose-500\\/20 {\n --tw-shadow-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-rose-500) 20%, transparent) var(--tw-shadow-alpha), transparent);\n }\n }\n .ring-slate-200\\/80 {\n --tw-ring-color: color-mix(in srgb, oklch(92.9% 0.013 255.508) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-slate-200) 80%, transparent);\n }\n }\n .ring-offset-1 {\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n .ring-offset-transparent {\n --tw-ring-offset-color: transparent;\n }\n .drop-shadow-2xl {\n --tw-drop-shadow-size: drop-shadow(0 25px 25px var(--tw-drop-shadow-color, rgb(0 0 0 / 0.15)));\n --tw-drop-shadow: drop-shadow(var(--drop-shadow-2xl));\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-md {\n --tw-backdrop-blur: blur(var(--blur-md));\n -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,);\n 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,);\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -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,);\n 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,);\n }\n .backdrop-blur-xl {\n --tw-backdrop-blur: blur(var(--blur-xl));\n -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,);\n 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,);\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property:\n color,\n background-color,\n border-color,\n outline-color,\n text-decoration-color,\n fill,\n stroke,\n --tw-gradient-from,\n --tw-gradient-via,\n --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-transform {\n transition-property:\n transform,\n translate,\n scale,\n rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .duration-500 {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n .duration-700 {\n --tw-duration: 700ms;\n transition-duration: 700ms;\n }\n .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n .select-text {\n -webkit-user-select: text;\n user-select: text;\n }\n .\\[animation-delay\\:0ms\\] {\n animation-delay: 0ms;\n }\n .\\[animation-delay\\:150ms\\] {\n animation-delay: 150ms;\n }\n .\\[animation-delay\\:300ms\\] {\n animation-delay: 300ms;\n }\n .group-hover\\:scale-100 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n --tw-scale-x: 100%;\n --tw-scale-y: 100%;\n --tw-scale-z: 100%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .group-hover\\:scale-105 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .group-hover\\:animate-\\[gradientMove_3\\.5s_ease-in-out_infinite_alternate\\] {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n animation: gradientMove 3.5s ease-in-out infinite alternate;\n }\n }\n }\n .group-hover\\:animate-\\[shapeshift_5s_ease-in-out_infinite_forwards\\] {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n animation: shapeshift 5s ease-in-out infinite forwards;\n }\n }\n }\n .group-hover\\:rounded-none {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-radius: 0;\n }\n }\n }\n .group-hover\\:border-slate-500 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: var(--color-slate-500);\n }\n }\n }\n .group-hover\\:opacity-100 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .focus-within\\:border-slate-300 {\n &:focus-within {\n border-color: var(--color-slate-300);\n }\n }\n .hover\\:scale-105 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-110 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-\\[1\\.01\\] {\n &:hover {\n @media (hover: hover) {\n scale: 1.01;\n }\n }\n }\n .hover\\:scale-\\[1\\.02\\] {\n &:hover {\n @media (hover: hover) {\n scale: 1.02;\n }\n }\n }\n .hover\\:border-emerald-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-emerald-200);\n }\n }\n }\n .hover\\:border-rose-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-rose-200);\n }\n }\n }\n .hover\\:border-slate-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-300);\n }\n }\n }\n .hover\\:border-slate-300\\/60 {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, oklch(86.9% 0.022 252.894) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-slate-300) 60%, transparent);\n }\n }\n }\n }\n .hover\\:border-slate-800 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-800);\n }\n }\n }\n .hover\\:bg-emerald-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-emerald-50);\n }\n }\n }\n .hover\\:bg-rose-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-rose-50);\n }\n }\n }\n .hover\\:bg-rose-600 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-rose-600);\n }\n }\n }\n .hover\\:bg-slate-50\\/60 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.4% 0.003 247.858) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-50) 60%, transparent);\n }\n }\n }\n }\n .hover\\:bg-slate-50\\/70 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.4% 0.003 247.858) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-50) 70%, transparent);\n }\n }\n }\n }\n .hover\\:bg-slate-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-100);\n }\n }\n }\n .hover\\:bg-slate-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-200);\n }\n }\n }\n .hover\\:bg-slate-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-800);\n }\n }\n }\n .hover\\:bg-white {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-white);\n }\n }\n }\n .hover\\:bg-white\\/5 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n }\n .hover\\:text-blue-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-500);\n }\n }\n }\n .hover\\:text-emerald-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-emerald-400);\n }\n }\n }\n .hover\\:text-emerald-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-emerald-500);\n }\n }\n }\n .hover\\:text-indigo-300 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-300);\n }\n }\n }\n .hover\\:text-indigo-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-500);\n }\n }\n }\n .hover\\:text-rose-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-rose-500);\n }\n }\n }\n .hover\\:text-slate-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-600);\n }\n }\n }\n .hover\\:text-slate-900 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-900);\n }\n }\n }\n .hover\\:text-white\\/80 {\n &:hover {\n @media (hover: hover) {\n color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\n }\n }\n }\n .hover\\:opacity-90 {\n &:hover {\n @media (hover: hover) {\n opacity: 90%;\n }\n }\n }\n .hover\\:shadow-lg {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-md {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow),\n var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow),\n var(--tw-ring-shadow),\n var(--tw-shadow);\n }\n }\n }\n .focus\\:border-emerald-500 {\n &:focus {\n border-color: var(--color-emerald-500);\n }\n }\n .focus\\:ring-blue-500 {\n &:focus {\n --tw-ring-color: var(--color-blue-500);\n }\n }\n .active\\:scale-95 {\n &:active {\n --tw-scale-x: 95%;\n --tw-scale-y: 95%;\n --tw-scale-z: 95%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n .active\\:scale-\\[0\\.98\\] {\n &:active {\n scale: 0.98;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-30 {\n &:disabled {\n opacity: 30%;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .disabled\\:hover\\:scale-100 {\n &:disabled {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 100%;\n --tw-scale-y: 100%;\n --tw-scale-z: 100%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n }\n .disabled\\:active\\:scale-100 {\n &:disabled {\n &:active {\n --tw-scale-x: 100%;\n --tw-scale-y: 100%;\n --tw-scale-z: 100%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .sm\\:grid-cols-2 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .md\\:p-12 {\n @media (width >= 48rem) {\n padding: calc(var(--spacing) * 12);\n }\n }\n .md\\:opacity-0 {\n @media (width >= 48rem) {\n opacity: 0%;\n }\n }\n .md\\:group-hover\\/carousel\\:opacity-100 {\n @media (width >= 48rem) {\n &:is(:where(.group\\/carousel):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n }\n .dark\\:scrollbar-thumb-white\\/10 {\n @media (prefers-color-scheme: dark) {\n --tw-scrollbar-thumb: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-scrollbar-thumb: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n scrollbar-color: var(--tw-scrollbar-thumb) var(--tw-scrollbar-track);\n }\n }\n .dark\\:divide-white\\/5 {\n @media (prefers-color-scheme: dark) {\n :where(& > :not(:last-child)) {\n border-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n }\n .dark\\:border-amber-400\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);\n }\n }\n }\n .dark\\:border-amber-500\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-amber-500) 20%, transparent);\n }\n }\n }\n .dark\\:border-emerald-400\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-emerald-400) 20%, transparent);\n }\n }\n }\n .dark\\:border-emerald-500\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-emerald-500) 20%, transparent);\n }\n }\n }\n .dark\\:border-emerald-500\\/25 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-emerald-500) 25%, transparent);\n }\n }\n }\n .dark\\:border-indigo-500\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(58.5% 0.233 277.117) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-indigo-500) 20%, transparent);\n }\n }\n }\n .dark\\:border-red-500\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-red-500) 20%, transparent);\n }\n }\n }\n .dark\\:border-rose-400\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);\n }\n }\n }\n .dark\\:border-rose-500\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-rose-500) 20%, transparent);\n }\n }\n }\n .dark\\:border-rose-500\\/25 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-rose-500) 25%, transparent);\n }\n }\n }\n .dark\\:border-slate-700 {\n @media (prefers-color-scheme: dark) {\n border-color: var(--color-slate-700);\n }\n }\n .dark\\:border-slate-800 {\n @media (prefers-color-scheme: dark) {\n border-color: var(--color-slate-800);\n }\n }\n .dark\\:border-white\\/5 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n .dark\\:border-white\\/8 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 8%, transparent);\n }\n }\n }\n .dark\\:border-white\\/10 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n .dark\\:border-white\\/20 {\n @media (prefers-color-scheme: dark) {\n border-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n .dark\\:bg-\\[\\#0f0f1a\\] {\n @media (prefers-color-scheme: dark) {\n background-color: #0f0f1a;\n }\n }\n .dark\\:bg-\\[\\#0f0f1a\\]\\/90 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in oklab, #0f0f1a 90%, transparent);\n }\n }\n .dark\\:bg-\\[\\#080811\\] {\n @media (prefers-color-scheme: dark) {\n background-color: #080811;\n }\n }\n .dark\\:bg-amber-400\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-amber-500\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-500) 10%, transparent);\n }\n }\n }\n .dark\\:bg-amber-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(55.5% 0.163 48.998) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-amber-800\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(47.3% 0.137 46.201) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-800) 30%, transparent);\n }\n }\n }\n .dark\\:bg-amber-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(41.4% 0.112 45.904) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-amber-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(27.9% 0.077 45.635) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-black\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #000 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 30%, transparent);\n }\n }\n }\n .dark\\:bg-black\\/60 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n }\n }\n .dark\\:bg-blue-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(48.8% 0.243 264.376) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-blue-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(37.9% 0.146 265.522) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-blue-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(28.2% 0.091 267.935) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-cyan-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(52% 0.105 223.128) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-cyan-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(39.8% 0.07 227.392) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-cyan-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(30.2% 0.056 229.695) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-400 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-emerald-400);\n }\n }\n .dark\\:bg-emerald-400\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-500\\/5 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-500) 5%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-500\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(50.8% 0.118 165.612) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-800\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(43.2% 0.095 166.913) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-800) 40%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(37.8% 0.077 168.94) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(26.2% 0.051 172.552) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-indigo-400 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-indigo-400);\n }\n }\n .dark\\:bg-indigo-500\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(58.5% 0.233 277.117) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-500) 10%, transparent);\n }\n }\n }\n .dark\\:bg-indigo-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(45.7% 0.24 277.023) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-indigo-800\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(39.8% 0.195 277.366) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-800) 30%, transparent);\n }\n }\n }\n .dark\\:bg-indigo-900\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(35.9% 0.144 278.697) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-900) 30%, transparent);\n }\n }\n }\n .dark\\:bg-orange-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(55.3% 0.195 38.402) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-orange-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-pink-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(52.5% 0.223 3.958) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-pink-800\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(45.9% 0.187 3.815) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-800) 30%, transparent);\n }\n }\n }\n .dark\\:bg-pink-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(40.8% 0.153 2.432) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-pink-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(28.4% 0.109 3.907) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-purple-700\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(49.6% 0.265 301.924) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-purple-700) 40%, transparent);\n }\n }\n }\n .dark\\:bg-purple-800\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(43.8% 0.218 303.724) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-purple-800) 40%, transparent);\n }\n }\n }\n .dark\\:bg-purple-900\\/20 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(38.1% 0.176 304.987) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-purple-900) 20%, transparent);\n }\n }\n }\n .dark\\:bg-purple-950\\/40 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(29.1% 0.149 302.717) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-purple-950) 40%, transparent);\n }\n }\n }\n .dark\\:bg-red-500\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-red-500) 10%, transparent);\n }\n }\n }\n .dark\\:bg-rose-400\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-rose-500\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-500) 10%, transparent);\n }\n }\n }\n .dark\\:bg-slate-700 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-slate-700);\n }\n }\n .dark\\:bg-slate-800 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-slate-800);\n }\n }\n .dark\\:bg-slate-900 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-slate-900);\n }\n }\n .dark\\:bg-slate-900\\/50 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-900) 50%, transparent);\n }\n }\n }\n .dark\\:bg-slate-900\\/60 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-900) 60%, transparent);\n }\n }\n }\n .dark\\:bg-slate-900\\/80 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-900) 80%, transparent);\n }\n }\n }\n .dark\\:bg-slate-950 {\n @media (prefers-color-scheme: dark) {\n background-color: var(--color-slate-950);\n }\n }\n .dark\\:bg-transparent {\n @media (prefers-color-scheme: dark) {\n background-color: transparent;\n }\n }\n .dark\\:bg-violet-800\\/30 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, oklch(43.2% 0.232 292.759) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-800) 30%, transparent);\n }\n }\n }\n .dark\\:bg-white\\/3 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #fff 3%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 3%, transparent);\n }\n }\n }\n .dark\\:bg-white\\/5 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n .dark\\:bg-white\\/8 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 8%, transparent);\n }\n }\n }\n .dark\\:bg-white\\/10 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n .dark\\:bg-white\\/60 {\n @media (prefers-color-scheme: dark) {\n background-color: color-mix(in srgb, #fff 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 60%, transparent);\n }\n }\n }\n .dark\\:from-white\\/10 {\n @media (prefers-color-scheme: dark) {\n --tw-gradient-from: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n }\n .dark\\:to-white\\/5 {\n @media (prefers-color-scheme: dark) {\n --tw-gradient-to: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n }\n .dark\\:text-amber-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-amber-100);\n }\n }\n .dark\\:text-amber-200 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-amber-200);\n }\n }\n .dark\\:text-amber-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-amber-300);\n }\n }\n .dark\\:text-amber-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-amber-400);\n }\n }\n .dark\\:text-blue-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-blue-100);\n }\n }\n .dark\\:text-blue-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-blue-300);\n }\n }\n .dark\\:text-blue-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-blue-400);\n }\n }\n .dark\\:text-cyan-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-cyan-100);\n }\n }\n .dark\\:text-cyan-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-cyan-300);\n }\n }\n .dark\\:text-cyan-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-cyan-400);\n }\n }\n .dark\\:text-emerald-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-emerald-100);\n }\n }\n .dark\\:text-emerald-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-emerald-300);\n }\n }\n .dark\\:text-emerald-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-emerald-400);\n }\n }\n .dark\\:text-emerald-500\\/50 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-emerald-500) 50%, transparent);\n }\n }\n }\n .dark\\:text-indigo-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-indigo-100);\n }\n }\n .dark\\:text-indigo-200 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-indigo-200);\n }\n }\n .dark\\:text-indigo-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-indigo-400);\n }\n }\n .dark\\:text-indigo-400\\/70 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, oklch(67.3% 0.182 276.935) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-indigo-400) 70%, transparent);\n }\n }\n }\n .dark\\:text-orange-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-orange-100);\n }\n }\n .dark\\:text-pink-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-pink-100);\n }\n }\n .dark\\:text-pink-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-pink-300);\n }\n }\n .dark\\:text-pink-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-pink-400);\n }\n }\n .dark\\:text-purple-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-purple-100);\n }\n }\n .dark\\:text-purple-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-purple-300);\n }\n }\n .dark\\:text-purple-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-purple-400);\n }\n }\n .dark\\:text-red-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-red-400);\n }\n }\n .dark\\:text-rose-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-rose-400);\n }\n }\n .dark\\:text-slate-100 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-slate-100);\n }\n }\n .dark\\:text-slate-300 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-slate-300);\n }\n }\n .dark\\:text-slate-400 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-slate-400);\n }\n }\n .dark\\:text-violet-200 {\n @media (prefers-color-scheme: dark) {\n color: var(--color-violet-200);\n }\n }\n .dark\\:text-white {\n @media (prefers-color-scheme: dark) {\n color: var(--color-white);\n }\n }\n .dark\\:text-white\\/20 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n .dark\\:text-white\\/30 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n }\n .dark\\:text-white\\/40 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 40%, transparent);\n }\n }\n }\n .dark\\:text-white\\/50 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n }\n .dark\\:text-white\\/60 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 60%, transparent);\n }\n }\n }\n .dark\\:text-white\\/70 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n }\n .dark\\:text-white\\/75 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 75%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 75%, transparent);\n }\n }\n }\n .dark\\:text-white\\/80 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\n }\n }\n .dark\\:text-white\\/90 {\n @media (prefers-color-scheme: dark) {\n color: color-mix(in srgb, #fff 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 90%, transparent);\n }\n }\n }\n .dark\\:placeholder-white\\/30 {\n @media (prefers-color-scheme: dark) {\n &::placeholder {\n color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n }\n }\n .dark\\:ring-white\\/10 {\n @media (prefers-color-scheme: dark) {\n --tw-ring-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n .dark\\:group-hover\\:border-white\\/50 {\n @media (prefers-color-scheme: dark) {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:focus-within\\:border-white\\/20 {\n @media (prefers-color-scheme: dark) {\n &:focus-within {\n border-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n }\n .dark\\:hover\\:border-emerald-500\\/20 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-emerald-500) 20%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:border-rose-500\\/20 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-rose-500) 20%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:border-white\\/15 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, #fff 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 15%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:border-white\\/20 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-emerald-500\\/10 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-rose-500\\/10 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-500) 10%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-white\\/5 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-white\\/10 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-white\\/20 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-blue-400 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-400);\n }\n }\n }\n }\n .dark\\:hover\\:text-emerald-400 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: var(--color-emerald-400);\n }\n }\n }\n }\n .dark\\:hover\\:text-indigo-300 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-300);\n }\n }\n }\n }\n .dark\\:hover\\:text-indigo-400 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-400);\n }\n }\n }\n }\n .dark\\:hover\\:text-rose-400 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: var(--color-rose-400);\n }\n }\n }\n }\n .dark\\:hover\\:text-white\\/60 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: color-mix(in srgb, #fff 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 60%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-white\\/70 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-white\\/80 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-white\\/90 {\n @media (prefers-color-scheme: dark) {\n &:hover {\n @media (hover: hover) {\n color: color-mix(in srgb, #fff 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 90%, transparent);\n }\n }\n }\n }\n }\n}\n@layer base {\n :root {\n --star: shape(evenodd from 50% 24.787%, curve by 7.143% 18.016% with 0% 0% / 2.9725% 13.814%, curve by 17.882% 7.197% with 4.171% 4.2025% / 17.882% 7.197%, curve by -17.882% 8.6765% with 0% 0% / -13.711% 4.474%, curve by -7.143% 16.5365% with -4.1705% 4.202% / -7.143% 16.5365%, curve by -8.6115% -16.5365% with 0% 0% / -4.441% -12.3345%, curve by -16.4135% -8.6765% with -4.171% -4.2025% / -16.4135% -8.6765%, curve by 16.4135% -7.197% with 0% 0% / 12.2425% -2.9945%, curve by 8.6115% -18.016% with 4.1705% -4.202% / 8.6115% -18.016%, close);\n --flower: shape(evenodd from 17.9665% 82.0335%, curve by -12.349% -32.0335% with -13.239% -5.129% / -18.021% -15.402%, curve by -0.0275% -22.203% with -3.1825% -9.331% / -3.074% -16.6605%, curve by 12.3765% -9.8305% with 2.3835% -4.3365% / 6.565% -7.579%, curve by 32.0335% -12.349% with 5.129% -13.239% / 15.402% -18.021%, curve by 20.4535% -0.8665% with 8.3805% -2.858% / 15.1465% -3.062%, curve by 11.58% 13.2155% with 5.225% 2.161% / 9.0355% 6.6475%, curve by 12.349% 32.0335% with 13.239% 5.129% / 18.021% 15.402%, curve by 0.5715% 21.1275% with 2.9805% 8.7395% / 3.0745% 15.723%, curve by -12.9205% 10.906% with -2.26% 4.88% / -6.638% 8.472%, curve by -32.0335% 12.349% with -5.129% 13.239% / -15.402% 18.021%, curve by -21.1215% 0.5745% with -8.736% 2.9795% / -15.718% 3.0745%, curve by -10.912% -12.9235% with -4.883% -2.2595% / -8.477% -6.6385%, close);\n --hexagon: shape(evenodd from 6.47% 67.001%, curve by 0% -34.002% with -1.1735% -7.7% / -1.1735% -26.302%, curve by 7.0415% -12.1965% with 0.7075% -4.641% / 3.3765% -9.2635%, curve by 29.447% -17.001% with 6.0815% -4.8665% / 22.192% -14.1675%, curve by 14.083% 0% with 4.3725% -1.708% / 9.7105% -1.708%, curve by 29.447% 17.001% with 7.255% 2.8335% / 23.3655% 12.1345%, curve by 7.0415% 12.1965% with 3.665% 2.933% / 6.334% 7.5555%, curve by 0% 34.002% with 1.1735% 7.7% / 1.1735% 26.302%, curve by -7.0415% 12.1965% with -0.7075% 4.641% / -3.3765% 9.2635%, curve by -29.447% 17.001% with -6.0815% 4.8665% / -22.192% 14.1675%, curve by -14.083% 0% with -4.3725% 1.708% / -9.7105% 1.708%, curve by -29.447% -17.001% with -7.255% -2.8335% / -23.3655% -12.1345%, curve by -7.0415% -12.1965% with -3.665% -2.933% / -6.334% -7.5555%, close);\n --cylinder: shape(evenodd from 10.5845% 59.7305%, curve by 0% -19.461% with -0.113% -1.7525% / -0.11% -18.14%, curve by 10.098% -26.213% with 0.837% -10.0375% / 3.821% -19.2625%, curve by 29.3175% -13.0215% with 7.2175% -7.992% / 17.682% -13.0215%, curve by 19.5845% 5.185% with 7.1265% 0% / 13.8135% 1.887%, curve by 9.8595% 7.9775% with 3.7065% 2.1185% / 7.035% 4.8195%, curve by 9.9715% 26.072% with 6.2015% 6.933% / 9.4345% 16.082%, curve by 0% 19.461% with 0.074% 1.384% / 0.0745% 17.7715%, curve by -13.0065% 29.1155% with -0.511% 11.5345% / -5.021% 21.933%, curve by -26.409% 10.119% with -6.991% 6.288% / -16.254% 10.119%, curve by -20.945% -5.9995% with -7.6935% 0% / -14.8755% -2.199%, curve by -8.713% -7.404% with -3.255% -2.0385% / -6.1905% -4.537%, curve by -9.7575% -25.831% with -6.074% -6.9035% / -9.1205% -15.963%, close);\n --circle: shape(evenodd from 13.482% 79.505%, curve by -7.1945% -12.47% with -1.4985% -1.8575% / -6.328% -10.225%, curve by 0.0985% -33.8965% with -4.1645% -10.7945% / -4.1685% -23.0235%, curve by 6.9955% -12.101% with 1.72% -4.3825% / 4.0845% -8.458%, curve by 30.125% -17.119% with 7.339% -9.1825% / 18.4775% -15.5135%, curve by 13.4165% 0.095% with 4.432% -0.6105% / 8.9505% -0.5855%, curve by 29.364% 16.9% with 11.6215% 1.77% / 22.102% 7.9015%, curve by 7.176% 12.4145% with 3.002% 3.7195% / 5.453% 7.968%, curve by -0.0475% 33.8925% with 4.168% 10.756% / 4.2305% 22.942%, curve by -7.1135% 12.2825% with -1.74% 4.4535% / -4.1455% 8.592%, curve by -29.404% 16.9075% with -7.202% 8.954% / -18.019% 15.137%, curve by -14.19% -0.018% with -4.6635% 0.7255% / -9.4575% 0.7205%, curve by -29.226% -16.8875% with -11.573% -1.8065% / -21.9955% -7.9235%, close);\n --heart: shape(evenodd from 51.311% 83.603%, curve by -8.333% -20.508% with -14.104% -4.287% / -16.406% -16.185%, curve by -4.271% -37.41% with -5.419% -9.658% / -6.815% -22.733%, curve by 13.589% -33.586% with 3.982% -7.448% / 8.411% -15.994%, curve by 28.187% -21.985% with 4.029% -4.29% / 4.029% -4.29%, curve by 33.835% 0.721% with 9.618% 4.647% / 22.541% 9.618%, curve by 37.596% 21.304% with 3.306% 13.266% / 7.589% 24.251%, curve by 21.985% 43.613% with -4.208% 3.982% / -15.994% 8.411%, curve by 0.721% 37.596% with -7.448% 4.029% / -15.994% 8.411%, curve by -16.185% 28.187% with -9.658% 5.419% / -22.733% 6.815%, curve by -37.41% 4.271% with -4.29% 4.029% / -4.29% 4.029%, curve by -33.586% -13.589% with -7.448% 3.982% / -15.994% 8.411%, curve by -28.187% -32.094% with -4.029% 4.029% / -4.029% 4.029%, close);\n --spiral: shape(evenodd from 13.347% 30.885%, curve by 5.502% 18.447% with 11.052% 5.562% / 19.995% 9.169%, curve by -20.309% 16.907% with -7.146% -1.332% / -9.016% -2.812%, curve by -25.848% -13.087% with -7.017% -7.46% / -9.941% -15.041%, curve by 10.154% -25.731% with 2.473% -6.063% / 7.163% -10.656%, curve by 31.473% -7.963% with 8.814% 2.403% / 13.84% 8.748%, curve by 16.526% 20.487% with -4.058% 1.502% / -9.51% 3.304%, curve by 5.502% 18.447% with 11.052% 5.562% / 19.995% 9.169%, close);\n --sun: shape(evenodd from 12.758% 22.039%, curve by 2.2585% 27.561% with 4.517% 18.961% / 2.2585% 27.561%, curve by 3.187% -11.541% with 2.2585% -8.483% / 4.7615% -12.541%, curve by 31.034% 31.034% with 31.034% 31.034% / 31.034% 31.034%, curve by 33.825% -14.163% with 8.961% -7.455% / 13.585% -11.059%, curve by 19.814% -34.731% with 4.7615% -12.541% / 2.2585% -27.561%, curve by 33.825% -14.163% with 2.2585% -8.483% / 4.517% -18.961%, curve by 19.814% -34.731% with 0% 0% / -3.187% 11.541%, curve by 33.825% -14.163% with 8.961% -7.455% / 13.585% -11.059%, curve by 31.034% 31.034% with 31.034% 31.034% / 31.034% 31.034%, curve by 19.814% -34.731% with 4.7615% -12.541% / 2.2585% -27.561%, curve by 33.825% -14.163% with 2.2585% -8.483% / 4.517% -18.961%, close);\n --star2: shape(open from 28.947% 47.744%, curve by 24.042% -2.139% with 0% 0% / -24.042% 2.139%, curve by 4.208% -25.165% with 4.208% -25.165% / 4.208% -25.165%, curve by 2.341% -18.447% with 0% 0% / 1.888% -1.438%, curve by 32.355% 1.085% with 0% 0% / 25.984% 1.085%, curve by -4.655% 25.165% with 0% 0% / -4.655% 25.165%, curve by -4.208% -25.165% with -4.208% -25.165% / -4.208% -25.165%, curve by 2.566% -4.208% with 0% 0% / 2.072% -1.639%, curve by 30.069% 1.085% with 0% 0% / 24.156% 1.085%, curve by -2.791% 25.165% with 0% 0% / -2.791% 25.165%, curve by -4.208% -25.165% with -4.208% -25.165% / -4.208% -25.165%, curve by 2.116% -4.208% with 0% 0% / 1.659% -1.557%, close);\n --tri-star: shape(open from 25% 25%, curve by 25% 25% with 0% 0% / 25% 25%, close);\n }\n}\n@property --tw-translate-x { syntax: "*"; inherits: false; initial-value: 0; }\n@property --tw-translate-y { syntax: "*"; inherits: false; initial-value: 0; }\n@property --tw-translate-z { syntax: "*"; inherits: false; initial-value: 0; }\n@property --tw-scale-x { syntax: "*"; inherits: false; initial-value: 1; }\n@property --tw-scale-y { syntax: "*"; inherits: false; initial-value: 1; }\n@property --tw-scale-z { syntax: "*"; inherits: false; initial-value: 1; }\n@property --tw-rotate-x { syntax: "*"; inherits: false; }\n@property --tw-rotate-y { syntax: "*"; inherits: false; }\n@property --tw-rotate-z { syntax: "*"; inherits: false; }\n@property --tw-skew-x { syntax: "*"; inherits: false; }\n@property --tw-skew-y { syntax: "*"; inherits: false; }\n@property --tw-scroll-snap-strictness { syntax: "*"; inherits: false; initial-value: proximity; }\n@property --tw-scrollbar-thumb { syntax: "<color>"; inherits: false; initial-value: #0000; }\n@property --tw-scrollbar-track { syntax: "<color>"; inherits: false; initial-value: #0000; }\n@property --tw-space-y-reverse { syntax: "*"; inherits: false; initial-value: 0; }\n@property --tw-divide-y-reverse { syntax: "*"; inherits: false; initial-value: 0; }\n@property --tw-border-style { syntax: "*"; inherits: false; initial-value: solid; }\n@property --tw-gradient-position { syntax: "*"; inherits: false; }\n@property --tw-gradient-from { syntax: "<color>"; inherits: false; initial-value: #0000; }\n@property --tw-gradient-via { syntax: "<color>"; inherits: false; initial-value: #0000; }\n@property --tw-gradient-to { syntax: "<color>"; inherits: false; initial-value: #0000; }\n@property --tw-gradient-stops { syntax: "*"; inherits: false; }\n@property --tw-gradient-via-stops { syntax: "*"; inherits: false; }\n@property --tw-gradient-from-position { syntax: "<length-percentage>"; inherits: false; initial-value: 0%; }\n@property --tw-gradient-via-position { syntax: "<length-percentage>"; inherits: false; initial-value: 50%; }\n@property --tw-gradient-to-position { syntax: "<length-percentage>"; inherits: false; initial-value: 100%; }\n@property --tw-leading { syntax: "*"; inherits: false; }\n@property --tw-font-weight { syntax: "*"; inherits: false; }\n@property --tw-tracking { syntax: "*"; inherits: false; }\n@property --tw-ordinal { syntax: "*"; inherits: false; }\n@property --tw-slashed-zero { syntax: "*"; inherits: false; }\n@property --tw-numeric-figure { syntax: "*"; inherits: false; }\n@property --tw-numeric-spacing { syntax: "*"; inherits: false; }\n@property --tw-numeric-fraction { syntax: "*"; inherits: false; }\n@property --tw-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }\n@property --tw-shadow-color { syntax: "*"; inherits: false; }\n@property --tw-shadow-alpha { syntax: "<percentage>"; inherits: false; initial-value: 100%; }\n@property --tw-inset-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }\n@property --tw-inset-shadow-color { syntax: "*"; inherits: false; }\n@property --tw-inset-shadow-alpha { syntax: "<percentage>"; inherits: false; initial-value: 100%; }\n@property --tw-ring-color { syntax: "*"; inherits: false; }\n@property --tw-ring-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }\n@property --tw-inset-ring-color { syntax: "*"; inherits: false; }\n@property --tw-inset-ring-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }\n@property --tw-ring-inset { syntax: "*"; inherits: false; }\n@property --tw-ring-offset-width { syntax: "<length>"; inherits: false; initial-value: 0px; }\n@property --tw-ring-offset-color { syntax: "*"; inherits: false; initial-value: #fff; }\n@property --tw-ring-offset-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }\n@property --tw-blur { syntax: "*"; inherits: false; }\n@property --tw-brightness { syntax: "*"; inherits: false; }\n@property --tw-contrast { syntax: "*"; inherits: false; }\n@property --tw-grayscale { syntax: "*"; inherits: false; }\n@property --tw-hue-rotate { syntax: "*"; inherits: false; }\n@property --tw-invert { syntax: "*"; inherits: false; }\n@property --tw-opacity { syntax: "*"; inherits: false; }\n@property --tw-saturate { syntax: "*"; inherits: false; }\n@property --tw-sepia { syntax: "*"; inherits: false; }\n@property --tw-drop-shadow { syntax: "*"; inherits: false; }\n@property --tw-drop-shadow-color { syntax: "*"; inherits: false; }\n@property --tw-drop-shadow-alpha { syntax: "<percentage>"; inherits: false; initial-value: 100%; }\n@property --tw-drop-shadow-size { syntax: "*"; inherits: false; }\n@property --tw-backdrop-blur { syntax: "*"; inherits: false; }\n@property --tw-backdrop-brightness { syntax: "*"; inherits: false; }\n@property --tw-backdrop-contrast { syntax: "*"; inherits: false; }\n@property --tw-backdrop-grayscale { syntax: "*"; inherits: false; }\n@property --tw-backdrop-hue-rotate { syntax: "*"; inherits: false; }\n@property --tw-backdrop-invert { syntax: "*"; inherits: false; }\n@property --tw-backdrop-opacity { syntax: "*"; inherits: false; }\n@property --tw-backdrop-saturate { syntax: "*"; inherits: false; }\n@property --tw-backdrop-sepia { syntax: "*"; inherits: false; }\n@property --tw-duration { syntax: "*"; inherits: false; }\n@property --tw-ease { syntax: "*"; inherits: false; }\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes ping {\n 75%, 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes bounce {\n 0%, 100% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n 50% {\n transform: none;\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n}\n@keyframes shapeshift {\n 0% {\n clip-path: var(--circle);\n rotate: 0turn;\n }\n 25% {\n clip-path: var(--flower);\n }\n 50% {\n clip-path: var(--cylinder);\n }\n 75% {\n clip-path: var(--hexagon);\n }\n 100% {\n clip-path: var(--circle);\n rotate: 1turn;\n }\n 120% {\n clip-path: var(--flower);\n }\n 140% {\n clip-path: var(--cylinder);\n }\n 160% {\n clip-path: var(--hexagon);\n }\n 180% {\n clip-path: var(--circle);\n rotate: 1turn;\n }\n}\n@keyframes gradientMove {\n 0% {\n translate: 0 0;\n }\n 100% {\n translate: -75% -75%;\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *,\n ::before,\n ::after,\n ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-scroll-snap-strictness: proximity;\n --tw-scrollbar-thumb: #0000;\n --tw-scrollbar-track: #0000;\n --tw-space-y-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n }\n }\n}\n');
110
115
 
111
116
  // src/components/ChatWidget.tsx
112
117
  var import_react13 = require("react");
@@ -194,7 +199,7 @@ function useConfig() {
194
199
  var import_jsx_runtime2 = require("react/jsx-runtime");
195
200
  function DocumentUpload({ namespace, onUploadComplete, className = "" }) {
196
201
  var _a;
197
- const { ui, embedding } = useConfig();
202
+ const { ui, embedding, projectId } = useConfig();
198
203
  const [fileStates, setFileStates] = (0, import_react2.useState)([]);
199
204
  const [isDragging, setIsDragging] = (0, import_react2.useState)(false);
200
205
  const fileInputRef = (0, import_react2.useRef)(null);
@@ -244,7 +249,8 @@ function DocumentUpload({ namespace, onUploadComplete, className = "" }) {
244
249
  setFileStates((prev) => prev.map((s) => s.status === "idle" ? __spreadProps(__spreadValues({}, s), { status: "uploading" }) : s));
245
250
  const formData = new FormData();
246
251
  idleFiles.forEach((s) => formData.append("files", s.file));
247
- if (namespace) formData.append("namespace", namespace);
252
+ const targetNs = namespace || projectId;
253
+ if (targetNs) formData.append("namespace", targetNs);
248
254
  formData.append("dimension", dimension.toString());
249
255
  try {
250
256
  const response = await fetch("/api/upload", {
@@ -280,7 +286,7 @@ function DocumentUpload({ namespace, onUploadComplete, className = "" }) {
280
286
  }
281
287
  ),
282
288
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h3", { className: "text-slate-900 dark:text-white font-semibold mb-1", children: "Upload Documents" }),
283
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "text-slate-500 dark:text-white/40 text-sm mb-6 max-w-xs", children: "Drag and drop PDF, DOCX, TXT, or JSON files to train your AI on your own data." }),
289
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "text-slate-500 dark:text-white/40 text-sm mb-6 max-w-xs", children: "Drag and drop PDF, DOCX, Excel (.xlsx, .xls), CSV, TXT, or JSON files to train your AI on your own data." }),
284
290
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
285
291
  "button",
286
292
  {
@@ -306,7 +312,7 @@ function DocumentUpload({ namespace, onUploadComplete, className = "" }) {
306
312
  multiple: true,
307
313
  onChange: onFileSelect,
308
314
  className: "hidden",
309
- accept: ".pdf,.docx,.txt,.md,.json,.csv"
315
+ accept: ".pdf,.docx,.doc,.xlsx,.xls,.csv,.txt,.md,.json"
310
316
  }
311
317
  ),
312
318
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "mt-6 flex flex-col items-center gap-2 text-sm", children: [
@@ -2520,7 +2526,7 @@ ${match.trim()}
2520
2526
  const ui = message.uiTransformation;
2521
2527
  const textContent = (_b = (_a2 = ui.data) == null ? void 0 : _a2.content) != null ? _b : "";
2522
2528
  const isNegativeOrFallbackText = textContent.toLowerCase().includes("cannot answer") || textContent.toLowerCase().includes("no relevant data") || textContent.toLowerCase().includes("no data available") || typeof ui.title === "string" && ui.title.toLowerCase().includes("no data") || typeof ui.description === "string" && ui.description.toLowerCase().includes("no relevant data");
2523
- const shouldShow = !isNegativeOrFallbackText && (ui.type === "table" || !["text", "table"].includes(ui.type) || ui.type === "text" && !hasRichUI && allProducts.length === 0 && textContent && !processedMarkdown.toLowerCase().includes(textContent.trim().toLowerCase()));
2529
+ const shouldShow = !isNegativeOrFallbackText && ui.type !== "text" && (ui.type === "table" || !["text", "table"].includes(ui.type));
2524
2530
  if (!shouldShow) return null;
2525
2531
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "w-full mt-3", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2526
2532
  VisualizationRenderer,
@@ -3100,7 +3106,7 @@ function ChatWindow({
3100
3106
  "div",
3101
3107
  {
3102
3108
  ref: windowRef,
3103
- className: `relative flex flex-col border border-slate-200 dark:border-white/10 shadow-2xl transition-all duration-300 ${currentRadius} ${isGlass ? "bg-white/90 dark:bg-[#0f0f1a]/90 backdrop-blur-xl" : "bg-white dark:bg-[#0f0f1a]"} ${className}`,
3109
+ className: `relative flex flex-col h-full flex-1 border border-slate-200 dark:border-white/10 shadow-2xl transition-all duration-300 ${currentRadius} ${isGlass ? "bg-white/90 dark:bg-[#0f0f1a]/90 backdrop-blur-xl" : "bg-white dark:bg-[#0f0f1a]"} ${className}`,
3104
3110
  style: __spreadValues({ "--primary": ui.primaryColor, "--accent": ui.accentColor }, style),
3105
3111
  children: [
3106
3112
  onResizeStart && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
@@ -3185,7 +3191,7 @@ function ChatWindow({
3185
3191
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex-1 overflow-y-auto px-4 py-4 space-y-5 scrollbar-thin scrollbar-thumb-slate-200 dark:scrollbar-thumb-white/10 scrollbar-track-transparent min-h-0 bg-slate-50 dark:bg-transparent", children: [
3186
3192
  !mounted || isEmpty ? (
3187
3193
  /* Welcome state */
3188
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "h-full flex flex-col items-center justify-center text-center gap-4 px-6 py-12", children: [
3194
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "h-full flex flex-col items-center justify-center text-center gap-4 px-6 py-4", children: [
3189
3195
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3190
3196
  "div",
3191
3197
  {
@@ -3574,6 +3580,1905 @@ function CodeViewer({ snippet }) {
3574
3580
  ] });
3575
3581
  }
3576
3582
 
3583
+ // src/rendering/IntentClassifier.ts
3584
+ var IntentClassifier = class {
3585
+ /**
3586
+ * Fast, zero-latency classifier that maps a user query and optional data context
3587
+ * into a high-level IntentCategory.
3588
+ */
3589
+ static classify(context) {
3590
+ const q = (context.userQuery || "").toLowerCase().trim();
3591
+ const signals = this.extractDataSignals(context);
3592
+ if (this.isInformationLookup(q)) {
3593
+ return { intent: "information_lookup", signals };
3594
+ }
3595
+ if (this.isComparisonQuery(q)) {
3596
+ return { intent: "comparison", signals };
3597
+ }
3598
+ if (this.isProductQuery(q) || signals.isProductLike && this.isRecommendationQuery(q)) {
3599
+ return { intent: "product_search", signals };
3600
+ }
3601
+ if (this.isTrendQuery(q) || signals.hasDateFields && signals.hasNumericFields && /\b(growth|trend|over time|monthly|yearly|weekly)\b/.test(q)) {
3602
+ return { intent: "trend_analysis", signals };
3603
+ }
3604
+ if (this.isRankingQuery(q)) {
3605
+ return { intent: "ranking", signals };
3606
+ }
3607
+ if (this.isAnalyticsQuery(q) || signals.hasNumericFields && signals.hasCategoricalFields && /\b(sales|revenue|performance|count|total|average|breakdown|share|percentage|correlation)\b/.test(q)) {
3608
+ return { intent: "analytics", signals };
3609
+ }
3610
+ if (this.isRecommendationQuery(q)) {
3611
+ return { intent: "recommendation", signals };
3612
+ }
3613
+ return { intent: "information_lookup", signals };
3614
+ }
3615
+ /**
3616
+ * Extract key data structure signals from retrieved documents.
3617
+ */
3618
+ static extractDataSignals(context) {
3619
+ const docs = context.retrievedDocuments || [];
3620
+ const rowCount = docs.length;
3621
+ let hasNumericFields = false;
3622
+ let hasDateFields = false;
3623
+ let hasCategoricalFields = false;
3624
+ let isProductLike = false;
3625
+ let numericFieldCount = 0;
3626
+ let categoricalFieldCount = 0;
3627
+ if (docs.length > 0) {
3628
+ const keys = /* @__PURE__ */ new Set();
3629
+ let numericKeys = /* @__PURE__ */ new Set();
3630
+ let dateKeys = /* @__PURE__ */ new Set();
3631
+ let catKeys = /* @__PURE__ */ new Set();
3632
+ let productKeyMatches = 0;
3633
+ docs.forEach((doc) => {
3634
+ const meta = doc.metadata || {};
3635
+ Object.entries(meta).forEach(([key, val]) => {
3636
+ keys.add(key);
3637
+ const kLower = key.toLowerCase();
3638
+ if (["price", "image", "brand", "in_stock", "rating", "sku", "product"].some((p) => kLower.includes(p))) {
3639
+ productKeyMatches++;
3640
+ }
3641
+ if (typeof val === "number") {
3642
+ numericKeys.add(key);
3643
+ } else if (typeof val === "string") {
3644
+ if (/^\d{4}-\d{2}-\d{2}/.test(val) || !isNaN(Date.parse(val)) && val.length > 5) {
3645
+ dateKeys.add(key);
3646
+ } else if (val.length < 50 && !val.includes("\n")) {
3647
+ catKeys.add(key);
3648
+ }
3649
+ }
3650
+ });
3651
+ });
3652
+ hasNumericFields = numericKeys.size > 0;
3653
+ hasDateFields = dateKeys.size > 0;
3654
+ hasCategoricalFields = catKeys.size > 0;
3655
+ numericFieldCount = numericKeys.size;
3656
+ categoricalFieldCount = catKeys.size;
3657
+ if (productKeyMatches >= 2 || docs.some((d) => d.content.toLowerCase().includes("price") || d.content.toLowerCase().includes("brand"))) {
3658
+ isProductLike = true;
3659
+ }
3660
+ }
3661
+ return {
3662
+ rowCount,
3663
+ hasNumericFields,
3664
+ hasDateFields,
3665
+ hasCategoricalFields,
3666
+ isProductLike,
3667
+ numericFieldCount,
3668
+ categoricalFieldCount
3669
+ };
3670
+ }
3671
+ // ─── Intent Heuristic Checkers ─────────────────────────────────────────────
3672
+ static isInformationLookup(query) {
3673
+ if (/^(what|who|explain|define|where|when|why|how|how does|can|could|does|do|is|are|has|have|will|should|would|meaning of)\s+/i.test(query)) {
3674
+ if (!/\b(compare|versus|vs\.?|trend|monthly|revenue|top selling|best)\b/i.test(query)) {
3675
+ return true;
3676
+ }
3677
+ }
3678
+ if (/^(what is the )?(price|cost|fee|rate) of\b/i.test(query)) {
3679
+ return true;
3680
+ }
3681
+ return false;
3682
+ }
3683
+ static isComparisonQuery(query) {
3684
+ return /\b(compare|comparison|vs\.?|versus|difference between|differ|contrast|against)\b/i.test(query);
3685
+ }
3686
+ static isProductQuery(query) {
3687
+ return /\b(best|recommend|top|buy|shopping|under \$|cheap|shoes|laptops|chairs|headphones|phone|sneakers|apparel|products)\b/i.test(query) && !/\b(compare|chart|sales|revenue|trend)\b/i.test(query);
3688
+ }
3689
+ static isRecommendationQuery(query) {
3690
+ return /\b(recommend|suggest|what should i (buy|get|choose)|best options|top picks)\b/i.test(query);
3691
+ }
3692
+ static isTrendQuery(query) {
3693
+ return /\b(trend|trends|growth|over time|historical|timeline|monthly|yearly|weekly|daily|revenue growth|sales growth)\b/i.test(query);
3694
+ }
3695
+ static isRankingQuery(query) {
3696
+ return /\b(highest|lowest|top\s*\d+|bottom\s*\d+|rank|ranking|top performing|best performing)\b/i.test(query);
3697
+ }
3698
+ static isAnalyticsQuery(query) {
3699
+ return /\b(sales|revenue|analytics|insights|distribution|percentage|share|breakdown|breakup|scatter|correlation|metrics|performance|by region|by category)\b/i.test(query);
3700
+ }
3701
+ };
3702
+
3703
+ // src/rendering/rules/Rule1SpecificInfoRule.ts
3704
+ var Rule1SpecificInfoRule = class {
3705
+ constructor() {
3706
+ this.name = "Rule1SpecificInfo";
3707
+ this.priority = 100;
3708
+ }
3709
+ evaluate(context, intent) {
3710
+ const q = (context.userQuery || "").toLowerCase().trim();
3711
+ const isFactQuery = intent === "information_lookup" || /^(what|who|explain|define|where|when|why|meaning of)\s+/i.test(q) || /^(what is the price of|price of|cost of)\b/i.test(q);
3712
+ const isNonVisual = !/\b(compare|versus|vs\.?|trend|monthly|revenue|best|top 10|chart|table|list|grid)\b/i.test(q);
3713
+ if (isFactQuery && isNonVisual) {
3714
+ return {
3715
+ renderType: "text",
3716
+ confidence: 0.95,
3717
+ reason: "Rule 1: Specific information request (fact, explanation, or definition) requires plain text rendering."
3718
+ };
3719
+ }
3720
+ return null;
3721
+ }
3722
+ };
3723
+
3724
+ // src/rendering/rules/Rule2ComparisonRule.ts
3725
+ var Rule2ComparisonRule = class {
3726
+ constructor() {
3727
+ this.name = "Rule2Comparison";
3728
+ this.priority = 90;
3729
+ }
3730
+ evaluate(context, intent) {
3731
+ const q = (context.userQuery || "").toLowerCase().trim();
3732
+ const isComparison = intent === "comparison" || /\b(compare|comparison|vs\.?|versus|difference between|differ|contrast|against)\b/i.test(q);
3733
+ if (isComparison) {
3734
+ return {
3735
+ renderType: "table",
3736
+ confidence: 0.9,
3737
+ reason: "Rule 2: Comparison query contrasting multiple entities requires structured table rendering."
3738
+ };
3739
+ }
3740
+ return null;
3741
+ }
3742
+ };
3743
+
3744
+ // src/rendering/rules/Rule3ProductDiscoveryRule.ts
3745
+ var Rule3ProductDiscoveryRule = class {
3746
+ constructor() {
3747
+ this.name = "Rule3ProductDiscovery";
3748
+ this.priority = 85;
3749
+ }
3750
+ evaluate(context, intent) {
3751
+ const q = (context.userQuery || "").toLowerCase().trim();
3752
+ const isDiscovery = intent === "product_search" || intent === "recommendation" || /\b(best|recommend|top|buy|shopping|under \$|cheap|shoes|laptops|chairs|headphones|sneakers|apparel|products|show available)\b/i.test(q);
3753
+ const isNotChart = !/\b(chart|sales|revenue|monthly|growth|trend|over time)\b/i.test(q);
3754
+ const isAnalyticalRanking = /\b(top performing|top selling|best performing|performing|sales|revenue|ranking)\b/i.test(q);
3755
+ if (isDiscovery && isNotChart && !isAnalyticalRanking) {
3756
+ return {
3757
+ renderType: "carousel",
3758
+ confidence: 0.9,
3759
+ reason: "Rule 3: Product discovery/recommendation query requires product carousel rendering."
3760
+ };
3761
+ }
3762
+ return null;
3763
+ }
3764
+ };
3765
+
3766
+ // src/rendering/rules/Rule4AnalyticalRule.ts
3767
+ var Rule4AnalyticalRule = class {
3768
+ constructor() {
3769
+ this.name = "Rule4Analytical";
3770
+ this.priority = 80;
3771
+ }
3772
+ evaluate(context, intent) {
3773
+ const q = (context.userQuery || "").toLowerCase().trim();
3774
+ const isAnalytical = intent === "analytics" || intent === "trend_analysis" || intent === "ranking" || /\b(monthly sales|revenue growth|top performing|population trends|sales by|growth|distribution|share|percentage|breakdown|correlation|scatter|trend)\b/i.test(q);
3775
+ if (!isAnalytical) return null;
3776
+ let chartType = "bar";
3777
+ if (intent === "trend_analysis" || /\b(monthly|yearly|weekly|growth|over time|trend|timeline|historical)\b/i.test(q)) {
3778
+ chartType = "line";
3779
+ } else if (/\b(share|percentage|percent|breakup|breakdown|composition|pie|donut|proportion)\b/i.test(q)) {
3780
+ chartType = "pie";
3781
+ } else if (/\b(correlation|scatter|relationship|relation|impact of|depends on)\b/i.test(q)) {
3782
+ chartType = "scatter";
3783
+ } else {
3784
+ chartType = "bar";
3785
+ }
3786
+ return {
3787
+ renderType: "chart",
3788
+ chartType,
3789
+ confidence: 0.85,
3790
+ reason: `Rule 4: Analytical query with numerical insights selects ${chartType} chart.`
3791
+ };
3792
+ }
3793
+ };
3794
+
3795
+ // src/rendering/rules/Rule5MixedResponseRule.ts
3796
+ var Rule5MixedResponseRule = class {
3797
+ constructor() {
3798
+ this.name = "Rule5MixedResponse";
3799
+ this.priority = 95;
3800
+ }
3801
+ evaluate(context, _intent) {
3802
+ const q = (context.userQuery || "").toLowerCase().trim();
3803
+ const isTopSellingThisMonth = /\btop\s*(selling|performing)?\s*products?\s*(this|last)?\s*(month|year|week)\b/i.test(q);
3804
+ const hasMultipleSectionsRequest = /\b(summary|overview)\b/i.test(q) && /\b(carousel|products?|items?)\b/i.test(q) && /\b(chart|sales|trend|revenue)\b/i.test(q);
3805
+ if (isTopSellingThisMonth || hasMultipleSectionsRequest) {
3806
+ return {
3807
+ renderType: "mixed",
3808
+ confidence: 0.95,
3809
+ reason: "Rule 5: Mixed response query requires multi-section composition (text, carousel, chart).",
3810
+ sections: [
3811
+ { type: "text", title: "Summary" },
3812
+ { type: "carousel", title: "Top Products" },
3813
+ { type: "chart", chartType: "bar", title: "Sales Performance" }
3814
+ ]
3815
+ };
3816
+ }
3817
+ return null;
3818
+ }
3819
+ };
3820
+
3821
+ // src/rendering/rules/Rule6SmallResultSetRule.ts
3822
+ var Rule6SmallResultSetRule = class {
3823
+ constructor() {
3824
+ this.name = "Rule6SmallResultSet";
3825
+ this.priority = 110;
3826
+ }
3827
+ evaluate(context, _intent) {
3828
+ const docs = context.retrievedDocuments || [];
3829
+ if (docs.length > 0 && docs.length < 3) {
3830
+ const q = (context.userQuery || "").toLowerCase().trim();
3831
+ const isExplicitComparison = /\b(compare|versus|vs\.?)\b/i.test(q);
3832
+ return {
3833
+ renderType: isExplicitComparison ? "table" : "text",
3834
+ confidence: 0.98,
3835
+ reason: `Rule 6: Small result set (${docs.length} rows < 3). Charts avoided to prevent sparse or uninformative visualizations.`
3836
+ };
3837
+ }
3838
+ return null;
3839
+ }
3840
+ };
3841
+
3842
+ // src/rendering/rules/Rule7LargeTableRule.ts
3843
+ var Rule7LargeTableRule = class {
3844
+ constructor() {
3845
+ this.name = "Rule7LargeTable";
3846
+ this.priority = 75;
3847
+ }
3848
+ evaluate(context, intent) {
3849
+ const docs = context.retrievedDocuments || [];
3850
+ if (docs.length > 5) {
3851
+ const q = (context.userQuery || "").toLowerCase().trim();
3852
+ const hasNumericAgg = intent === "analytics" || intent === "ranking" || /\b(sales|revenue|growth|count|total|average)\b/i.test(q);
3853
+ if (hasNumericAgg) {
3854
+ return {
3855
+ renderType: "mixed",
3856
+ confidence: 0.88,
3857
+ reason: `Rule 7: Large result set (${docs.length} rows > 5) with numeric aggregation rendered as Table + Chart.`,
3858
+ sections: [
3859
+ { type: "table", title: "Detailed Data Table" },
3860
+ { type: "chart", chartType: "bar", title: "Numerical Breakdown" }
3861
+ ]
3862
+ };
3863
+ }
3864
+ return {
3865
+ renderType: "table",
3866
+ confidence: 0.85,
3867
+ reason: `Rule 7: Large result set (${docs.length} rows > 5) rendered as structured table for readability.`
3868
+ };
3869
+ }
3870
+ return null;
3871
+ }
3872
+ };
3873
+
3874
+ // src/rendering/RuleEngine.ts
3875
+ var RuleEngine = class {
3876
+ constructor() {
3877
+ this.rules = [];
3878
+ this.registerDefaultRules();
3879
+ }
3880
+ /**
3881
+ * Register standard rules in priority order.
3882
+ */
3883
+ registerDefaultRules() {
3884
+ this.registerRule(new Rule6SmallResultSetRule());
3885
+ this.registerRule(new Rule1SpecificInfoRule());
3886
+ this.registerRule(new Rule5MixedResponseRule());
3887
+ this.registerRule(new Rule2ComparisonRule());
3888
+ this.registerRule(new Rule3ProductDiscoveryRule());
3889
+ this.registerRule(new Rule4AnalyticalRule());
3890
+ this.registerRule(new Rule7LargeTableRule());
3891
+ }
3892
+ /**
3893
+ * Add or replace a rule in the engine.
3894
+ * Automatically keeps rules sorted by descending priority.
3895
+ */
3896
+ registerRule(rule) {
3897
+ this.rules = this.rules.filter((r) => r.name !== rule.name);
3898
+ this.rules.push(rule);
3899
+ this.rules.sort((a, b) => b.priority - a.priority);
3900
+ }
3901
+ /**
3902
+ * Evaluate context against rules in descending priority order.
3903
+ * Returns the first non-null RenderDecision.
3904
+ */
3905
+ evaluate(context, intent) {
3906
+ for (const rule of this.rules) {
3907
+ const decision = rule.evaluate(context, intent);
3908
+ if (decision) {
3909
+ return decision;
3910
+ }
3911
+ }
3912
+ return {
3913
+ renderType: "text",
3914
+ confidence: 0.7,
3915
+ reason: "Default fallback: No specific visualization rule matched context."
3916
+ };
3917
+ }
3918
+ /**
3919
+ * List all registered rules.
3920
+ */
3921
+ getRegisteredRules() {
3922
+ return this.rules.map((r) => ({ name: r.name, priority: r.priority }));
3923
+ }
3924
+ };
3925
+
3926
+ // src/rendering/VisualizationDecisionEngine.ts
3927
+ var LRUDecisionCache = class {
3928
+ constructor(maxSize = 200) {
3929
+ this.cache = /* @__PURE__ */ new Map();
3930
+ this.maxSize = maxSize;
3931
+ }
3932
+ generateKey(context) {
3933
+ var _a, _b;
3934
+ const q = (context.userQuery || "").toLowerCase().trim();
3935
+ const docCount = (_b = (_a = context.retrievedDocuments) == null ? void 0 : _a.length) != null ? _b : 0;
3936
+ return `${q}::docs:${docCount}`;
3937
+ }
3938
+ get(context) {
3939
+ const key = this.generateKey(context);
3940
+ const item = this.cache.get(key);
3941
+ if (item) {
3942
+ this.cache.delete(key);
3943
+ this.cache.set(key, item);
3944
+ return item.decision;
3945
+ }
3946
+ return void 0;
3947
+ }
3948
+ set(context, decision) {
3949
+ const key = this.generateKey(context);
3950
+ if (this.cache.has(key)) {
3951
+ this.cache.delete(key);
3952
+ } else if (this.cache.size >= this.maxSize) {
3953
+ const oldest = this.cache.keys().next().value;
3954
+ if (oldest !== void 0) this.cache.delete(oldest);
3955
+ }
3956
+ this.cache.set(key, { decision, timestamp: Date.now() });
3957
+ }
3958
+ clear() {
3959
+ this.cache.clear();
3960
+ }
3961
+ get size() {
3962
+ return this.cache.size;
3963
+ }
3964
+ };
3965
+ var VisualizationDecisionEngine = class {
3966
+ /**
3967
+ * Evaluate user query, documents, and context to produce a RenderDecision.
3968
+ * Execution time is < 1ms for cached or rule-matched queries.
3969
+ */
3970
+ static decideVisualization(userQuery, retrievedDocuments, llmResponse, metadata) {
3971
+ const context = {
3972
+ userQuery,
3973
+ retrievedDocuments,
3974
+ llmResponse,
3975
+ metadata
3976
+ };
3977
+ const cached = this.cache.get(context);
3978
+ if (cached) {
3979
+ return cached;
3980
+ }
3981
+ const { intent } = IntentClassifier.classify(context);
3982
+ const decision = this.ruleEngine.evaluate(context, intent);
3983
+ this.cache.set(context, decision);
3984
+ return decision;
3985
+ }
3986
+ /**
3987
+ * Convenience helper to decide AND render the data into a UITransformationResponse.
3988
+ */
3989
+ static render(userQuery, retrievedDocuments, llmResponse, metadata) {
3990
+ const decision = this.decideVisualization(userQuery, retrievedDocuments, llmResponse, metadata);
3991
+ const strategy = RendererRegistry.getStrategy(decision.renderType);
3992
+ return strategy.render(retrievedDocuments || [], __spreadValues({
3993
+ query: userQuery,
3994
+ chartType: decision.chartType,
3995
+ sections: decision.sections
3996
+ }, metadata));
3997
+ }
3998
+ /**
3999
+ * Register a custom rule in the rule engine.
4000
+ */
4001
+ static registerRule(rule) {
4002
+ this.ruleEngine.registerRule(rule);
4003
+ this.cache.clear();
4004
+ }
4005
+ /**
4006
+ * Register a custom renderer strategy.
4007
+ */
4008
+ static registerRendererStrategy(strategy) {
4009
+ RendererRegistry.registerStrategy(strategy);
4010
+ }
4011
+ /**
4012
+ * Clear the decision cache.
4013
+ */
4014
+ static clearCache() {
4015
+ this.cache.clear();
4016
+ }
4017
+ /**
4018
+ * Get size of current decision cache.
4019
+ */
4020
+ static getCacheSize() {
4021
+ return this.cache.size;
4022
+ }
4023
+ };
4024
+ VisualizationDecisionEngine.ruleEngine = new RuleEngine();
4025
+ VisualizationDecisionEngine.cache = new LRUDecisionCache(200);
4026
+ function decideVisualization(userQuery, retrievedDocuments, llmResponse, metadata) {
4027
+ return VisualizationDecisionEngine.decideVisualization(
4028
+ userQuery,
4029
+ retrievedDocuments,
4030
+ llmResponse,
4031
+ metadata
4032
+ );
4033
+ }
4034
+
4035
+ // src/utils/UITransformer.ts
4036
+ var UITransformer = class _UITransformer {
4037
+ // ─── Public Entry Points ─────────────────────────────────────────────────
4038
+ /**
4039
+ * Heuristic-only transform (no LLM required).
4040
+ * Uses the lightweight heuristic intent detector as a fallback.
4041
+ * Prefer `analyzeAndDecide()` in production.
4042
+ */
4043
+ static transform(userQuery, retrievedData, config, trainedSchema, intent) {
4044
+ var _a, _b, _c;
4045
+ if (!retrievedData || retrievedData.length === 0) {
4046
+ return this.createTextResponse("No data available", "No relevant data found for your query.");
4047
+ }
4048
+ const resolvedIntent = intent != null ? intent : this.detectIntentHeuristic(userQuery);
4049
+ const filteredData = resolvedIntent.filterInStockOnly ? retrievedData.filter((item) => this.determineStockStatus(item)) : retrievedData;
4050
+ const profile = this.profileData(filteredData);
4051
+ const hasProducts = filteredData.some((item) => this.isProductData(item));
4052
+ const wantsPieLikeChart = ["pie_chart", "donut_chart"].includes(resolvedIntent.recommendedChart);
4053
+ if (resolvedIntent.visualizationHint === "trend" && profile.dateFields.length > 0 && profile.numericFields.length > 0) {
4054
+ return this.transformToLineChart(profile);
4055
+ }
4056
+ if (wantsPieLikeChart || ["composition", "category_breakdown"].includes(resolvedIntent.visualizationHint)) {
4057
+ const pieChart = this.transformToPieChart(filteredData, profile, userQuery);
4058
+ if (pieChart) return pieChart;
4059
+ }
4060
+ if (["comparison", "ranking"].includes(resolvedIntent.visualizationHint)) {
4061
+ return this.transformToBarChart(filteredData, profile, userQuery, resolvedIntent.visualizationHint === "ranking");
4062
+ }
4063
+ if (resolvedIntent.visualizationHint === "distribution") {
4064
+ return (_a = this.transformToHistogram(profile, userQuery)) != null ? _a : this.transformToBarChart(filteredData, profile, userQuery);
4065
+ }
4066
+ if (resolvedIntent.visualizationHint === "correlation") {
4067
+ return (_b = this.transformToScatterPlot(profile, userQuery)) != null ? _b : this.transformToBarChart(filteredData, profile, userQuery);
4068
+ }
4069
+ if (resolvedIntent.visualizationHint === "geographic") {
4070
+ return this.transformToBarChart(filteredData, profile, userQuery);
4071
+ }
4072
+ if (this.isStructuredListQuery(userQuery)) {
4073
+ return this.hasMultipleFields(filteredData) ? this.transformToTable(filteredData, userQuery) : this.transformToText(filteredData);
4074
+ }
4075
+ if (resolvedIntent.visualizationHint === "kpi") {
4076
+ return (_c = this.transformToMetricCard(profile, userQuery)) != null ? _c : this.transformToText(filteredData);
4077
+ }
4078
+ if (["tabular", "table"].includes(resolvedIntent.visualizationHint) || resolvedIntent.wantsExplicitTable) {
4079
+ return this.hasMultipleFields(filteredData) ? this.transformToTable(filteredData, userQuery) : this.transformToText(filteredData);
4080
+ }
4081
+ if ((hasProducts || this.isProductQuery(userQuery)) && resolvedIntent.visualizationHint === "product_browse") {
4082
+ if (!this.isProductQuery(userQuery)) {
4083
+ return this.transformToText(filteredData);
4084
+ }
4085
+ return this.transformToProductCarousel(filteredData, config, trainedSchema);
4086
+ }
4087
+ const automatic = this.chooseAutomaticVisualization(filteredData, profile, userQuery);
4088
+ if (automatic) return automatic;
4089
+ return this.transformToText(filteredData);
4090
+ }
4091
+ /**
4092
+ * LLM-driven entry point (recommended for production).
4093
+ *
4094
+ * Step 1 — Detect intent via a dedicated, lightweight LLM call.
4095
+ * Step 2 — Pass the intent + data to the visualization-selection prompt.
4096
+ * Step 3 — Fall back to the heuristic `transform()` if either LLM call fails.
4097
+ */
4098
+ static async analyzeAndDecide(query, sources, llm) {
4099
+ const decision = VisualizationDecisionEngine.decideVisualization(query, sources);
4100
+ if (decision.renderType === "text") {
4101
+ console.debug("[UITransformer] Decision Engine selected plain text rendering \u2014 skipping visual LLM calls.");
4102
+ return this.transformToText(sources);
4103
+ }
4104
+ let intent;
4105
+ try {
4106
+ intent = await this.detectIntent(query, llm, sources);
4107
+ console.debug("[UITransformer] Detected intent:", intent);
4108
+ } catch (err) {
4109
+ console.warn("[UITransformer] Intent detection failed; using heuristic.", err);
4110
+ intent = this.detectIntentHeuristic(query);
4111
+ }
4112
+ if (this.isProductQuery(query) && ["text", "product_browse"].includes(intent.visualizationHint)) {
4113
+ return this.transform(
4114
+ query,
4115
+ sources,
4116
+ void 0,
4117
+ void 0,
4118
+ __spreadProps(__spreadValues({}, intent), { visualizationHint: "product_browse", recommendedChart: "text" })
4119
+ );
4120
+ }
4121
+ try {
4122
+ const context = this.buildContextSummary(sources);
4123
+ const systemPrompt = this.buildVisualizationSystemPrompt();
4124
+ const profile = this.profileData(sources);
4125
+ const schemaContext = `
4126
+ RETRIEVED DATA SCHEMA:
4127
+ - Numeric fields (measures): ${profile.numericFields.map((f) => `${f.key} (unique values: ${f.uniqueCount})`).join(", ") || "None"}
4128
+ - Category fields (dimensions): ${profile.categoricalFields.map((f) => `${f.key} (unique values: ${f.uniqueCount})`).join(", ") || "None"}
4129
+ - Date fields (temporal): ${profile.dateFields.map((f) => `${f.key} (unique values: ${f.uniqueCount})`).join(", ") || "None"}
4130
+ - Boolean fields: ${profile.booleanFields.map((f) => `${f.key} (unique values: ${f.uniqueCount})`).join(", ") || "None"}
4131
+ - Text/Other fields: ${profile.fields.filter((f) => f.kind === "text").map((f) => f.key).join(", ") || "None"}
4132
+ `;
4133
+ const userPrompt = [
4134
+ `USER QUESTION: ${query}`,
4135
+ "",
4136
+ `DETECTED INTENT (JSON): ${JSON.stringify(intent)}`,
4137
+ "",
4138
+ `RETRIEVED DATA SCHEMA:`,
4139
+ schemaContext,
4140
+ "",
4141
+ "RETRIEVED DATA (JSON):",
4142
+ context
4143
+ ].join("\n");
4144
+ const rawResponse = await llm.chat(
4145
+ [{ role: "user", content: userPrompt }],
4146
+ "",
4147
+ { systemPrompt, temperature: 0 }
4148
+ );
4149
+ const parsed = this.parseTransformationResponse(rawResponse);
4150
+ if (parsed) {
4151
+ let isCompatible = true;
4152
+ if (parsed.type === "line_chart" && (profile.dateFields.length === 0 || profile.numericFields.length === 0)) {
4153
+ isCompatible = false;
4154
+ } else if (["bar_chart", "horizontal_bar", "pie_chart", "donut_chart"].includes(parsed.type) && (profile.categoricalFields.length === 0 && profile.numericFields.length === 0)) {
4155
+ isCompatible = false;
4156
+ } else if (parsed.type === "scatter_plot" && profile.numericFields.length < 2) {
4157
+ isCompatible = false;
4158
+ } else if (parsed.type === "metric_card" && profile.numericFields.length === 0) {
4159
+ isCompatible = false;
4160
+ }
4161
+ if (!isCompatible) {
4162
+ console.warn(`[UITransformer] LLM chose incompatible visualization type "${parsed.type}" for retrieved schema. Falling back to heuristic.`);
4163
+ return this.transform(query, sources, void 0, void 0, intent);
4164
+ }
4165
+ const intentAllowsTable = intent.wantsExplicitTable || ["tabular", "table", "geographic"].includes(intent.visualizationHint);
4166
+ const intentWantsPieLikeChart = ["pie_chart", "donut_chart"].includes(intent.recommendedChart) || ["composition", "category_breakdown"].includes(intent.visualizationHint);
4167
+ if (parsed.type === "table" && !intentAllowsTable) {
4168
+ console.debug("[UITransformer] LLM chose table but intent says no. Falling back to text.");
4169
+ return this.transform(query, sources, void 0, void 0, intent);
4170
+ }
4171
+ if (intentWantsPieLikeChart && parsed.type !== "pie_chart" && this.detectCategories(sources).length > 1) {
4172
+ console.debug("[UITransformer] LLM ignored pie/composition intent. Using deterministic pie chart.");
4173
+ return this.transform(query, sources, void 0, void 0, intent);
4174
+ }
4175
+ console.debug("[UITransformer] LLM chose visualization type:", parsed.type);
4176
+ return parsed;
4177
+ }
4178
+ console.warn("[UITransformer] LLM returned unparseable response; falling back to heuristic.");
4179
+ } catch (err) {
4180
+ console.warn("[UITransformer] analyzeAndDecide LLM call failed; falling back to heuristic.", err);
4181
+ }
4182
+ return this.transform(query, sources, void 0, void 0, intent);
4183
+ }
4184
+ // ─── Dynamic Intent Detection ─────────────────────────────────────────────
4185
+ /**
4186
+ * Calls the LLM with a compact, focused prompt to extract a structured
4187
+ * `QueryIntent` from the user's query.
4188
+ *
4189
+ * Keeping this as a *separate* call from visualization selection means:
4190
+ * - The prompt is shorter and more reliable.
4191
+ * - The intent object can be reused across both the heuristic and LLM paths.
4192
+ * - It is easy to unit-test intent detection in isolation.
4193
+ */
4194
+ static async detectIntent(query, llm, sources) {
4195
+ let schemaProfileText = "";
4196
+ if (sources && sources.length > 0) {
4197
+ const profile = this.profileData(sources);
4198
+ const hasProducts = sources.some((item) => this.isProductData(item));
4199
+ schemaProfileText = `
4200
+ RETRIEVED DATA SCHEMA:
4201
+ - Numeric fields (measures): ${profile.numericFields.map((f) => `${f.key} (unique values: ${f.uniqueCount})`).join(", ") || "None"}
4202
+ - Category fields (dimensions): ${profile.categoricalFields.map((f) => `${f.key} (unique values: ${f.uniqueCount})`).join(", ") || "None"}
4203
+ - Date fields (temporal): ${profile.dateFields.map((f) => `${f.key} (unique values: ${f.uniqueCount})`).join(", ") || "None"}
4204
+ - Boolean fields: ${profile.booleanFields.map((f) => `${f.key} (unique values: ${f.uniqueCount})`).join(", ") || "None"}
4205
+ - Text fields: ${profile.fields.filter((f) => f.kind === "text").map((f) => f.key).join(", ") || "None"}
4206
+
4207
+ Please choose visualizationHint and recommendedChart dynamically based on the available schema.
4208
+ - Do NOT recommend "trend" or "line_chart" if there are no Date fields.
4209
+ - Do NOT recommend numeric-dependent visualizations (like bar_chart, line_chart, pie_chart, scatter_plot, histogram, metric_card) if there are no Numeric fields. Fall back to tabular/table or text.
4210
+ - If there are multiple metadata fields but no clear categories or numbers, "tabular"/"table" is a highly accurate default.
4211
+ ${hasProducts ? `- Note: The retrieved data matches product/catalog structure. If the user query is looking for, exploring, searching, browsing, or listing products/items, you MUST recommend visualizationHint: "product_browse" and recommendedChart: "text".` : ""}
4212
+ `;
4213
+ }
4214
+ const systemPrompt = `You are an intent classifier for a product-search RAG system.
4215
+ Given a user query, return ONLY a valid JSON object with this exact shape \u2014 no prose, no markdown:
4216
+
4217
+ {
4218
+ "visualizationHint": "trend" | "comparison" | "distribution" | "composition" | "correlation" | "ranking" | "kpi" | "tabular" | "geographic" | "product_browse" | "table" | "text",
4219
+ "recommendedChart": "line_chart" | "bar_chart" | "histogram" | "pie_chart" | "donut_chart" | "scatter_plot" | "horizontal_bar" | "metric_card" | "table" | "geo_map" | "text",
4220
+ "filterInStockOnly": boolean,
4221
+ "wantsExplicitTable": boolean,
4222
+ "isTemporal": boolean,
4223
+ "isComparison": boolean,
4224
+ "language": "<BCP-47 language tag, e.g. en, de, hi, ja>",
4225
+ "reasoning": "<one short sentence \u2014 why you chose these values>"
4226
+ }
4227
+
4228
+ RULES:
4229
+ - visualizationHint and recommendedChart
4230
+ "trend" \u2192 keywords: trend, growth, over time; recommendedChart "line_chart"
4231
+ "comparison" \u2192 keywords: compare, versus, top; recommendedChart "bar_chart"
4232
+ "distribution" \u2192 keywords: distribution, spread; recommendedChart "histogram"
4233
+ "composition" \u2192 keywords: share, percentage, breakup, breakdown; recommendedChart "pie_chart" or "donut_chart"
4234
+ "correlation" \u2192 keywords: relation, correlation; recommendedChart "scatter_plot"
4235
+ "ranking" \u2192 keywords: highest, lowest, top 10, ranking; recommendedChart "horizontal_bar"
4236
+ "kpi" \u2192 keywords: total, average, count; recommendedChart "metric_card"
4237
+ "tabular" \u2192 keywords: detailed records, table, grid, spreadsheet; recommendedChart "table"
4238
+ "geographic" \u2192 keywords: region, country, map; recommendedChart "geo_map"
4239
+ "product_browse" \u2192 user is browsing, searching, describing, viewing details for, or asking about one or more products without analytical visualization intent
4240
+ "table" \u2192 legacy alias for "tabular"; use only if the query literally says table
4241
+ "text" \u2192 conversational, factual, or other intent
4242
+ - If the user explicitly asks for a chart type, honor that chart type in recommendedChart.
4243
+ - If a query says "distribution ... in a pie chart", use visualizationHint "composition" and recommendedChart "pie_chart".
4244
+ - filterInStockOnly: true only if user mentions stock, availability, in stock, etc.
4245
+ - wantsExplicitTable: true if the user asks for a table, list, grid, spreadsheet, or detailed records.
4246
+ - isTemporal: true if time words appear (trend, historical, over time, last year, monthly, etc.)
4247
+ - isComparison: true if user compares, ranks, or contrasts entities or categories.
4248
+ - language: detect from the query text itself; default "en" if uncertain.`;
4249
+ const userPrompt = `QUERY: ${query}${schemaProfileText ? `
4250
+
4251
+ ${schemaProfileText}` : ""}`;
4252
+ const rawResponse = await llm.chat(
4253
+ [{ role: "user", content: userPrompt }],
4254
+ "",
4255
+ { systemPrompt, temperature: 0 }
4256
+ );
4257
+ const parsed = this.parseIntentResponse(rawResponse);
4258
+ if (!parsed) {
4259
+ throw new Error(`Could not parse intent JSON from LLM response: ${rawResponse}`);
4260
+ }
4261
+ return parsed;
4262
+ }
4263
+ /**
4264
+ * Parse and validate the raw LLM response into a `QueryIntent`.
4265
+ */
4266
+ static parseIntentResponse(raw) {
4267
+ const jsonStr = this.extractJsonCandidate(raw);
4268
+ if (!jsonStr) return null;
4269
+ try {
4270
+ const obj = JSON.parse(jsonStr);
4271
+ const validHints = [
4272
+ "trend",
4273
+ "comparison",
4274
+ "distribution",
4275
+ "composition",
4276
+ "correlation",
4277
+ "ranking",
4278
+ "kpi",
4279
+ "tabular",
4280
+ "geographic",
4281
+ "category_breakdown",
4282
+ "product_browse",
4283
+ "table",
4284
+ "text"
4285
+ ];
4286
+ const validCharts = [
4287
+ "line_chart",
4288
+ "bar_chart",
4289
+ "histogram",
4290
+ "pie_chart",
4291
+ "donut_chart",
4292
+ "scatter_plot",
4293
+ "horizontal_bar",
4294
+ "metric_card",
4295
+ "table",
4296
+ "geo_map",
4297
+ "text"
4298
+ ];
4299
+ const hint = obj.visualizationHint;
4300
+ if (!hint || !validHints.includes(hint)) return null;
4301
+ const normalizedHint = hint === "category_breakdown" ? "composition" : hint;
4302
+ const recommendedChart = typeof obj.recommendedChart === "string" && validCharts.includes(obj.recommendedChart) ? obj.recommendedChart : this.getRecommendedChartForIntent(normalizedHint);
4303
+ return {
4304
+ visualizationHint: normalizedHint,
4305
+ recommendedChart,
4306
+ filterInStockOnly: Boolean(obj.filterInStockOnly),
4307
+ wantsExplicitTable: Boolean(obj.wantsExplicitTable),
4308
+ isTemporal: Boolean(obj.isTemporal),
4309
+ isComparison: Boolean(obj.isComparison),
4310
+ language: typeof obj.language === "string" && obj.language ? obj.language : "en",
4311
+ reasoning: typeof obj.reasoning === "string" ? obj.reasoning : void 0
4312
+ };
4313
+ } catch (e) {
4314
+ return null;
4315
+ }
4316
+ }
4317
+ /**
4318
+ * Heuristic intent detector — used when the LLM is unavailable.
4319
+ * Intentionally minimal: it should only catch the most obvious signals.
4320
+ * The LLM path handles everything subtle.
4321
+ */
4322
+ static detectIntentHeuristic(query) {
4323
+ const q = query.toLowerCase();
4324
+ const isTemporal = /\b(trend|trends|over time|historical|history|growth|decline|monthly|yearly|weekly|daily|last (year|month|week)|timeline|forecast)\b/.test(q);
4325
+ const isRanking = /\b(highest|lowest|top\s*\d+|bottom\s*\d+|rank(?:ing)?|best|worst|leading)\b/.test(q);
4326
+ const isComparison = /\b(compare|comparison|vs\.?|versus|against|differ|difference|contrast|top)\b/.test(q) || isRanking;
4327
+ const isDistribution = /\b(distribution|spread|histogram|frequency|variance|range)\b/.test(q);
4328
+ const wantsPieLikeChart = /\b(pie|donut|doughnut)(?:\s+chart)?\b/.test(q);
4329
+ const isComposition = wantsPieLikeChart || /\b(share|percentage|percent|breakup|breakdown|composition|split|segmentation|by category|by type|proportion)\b/.test(q);
4330
+ const isCorrelation = /\b(relation|relationship|correlation|correlate|scatter|association|impact of|depend(?:s|ence)? on)\b/.test(q);
4331
+ const isKpi = /\b(total|average|avg|count|sum|median|minimum|maximum|metric|kpi|how many|number of)\b/.test(q);
4332
+ const isGeographic = /\b(region|country|countries|state|city|location|map|geo|geographic|territory)\b/.test(q);
4333
+ const filterInStockOnly = /\b(in[- ]?stock|available|availability|inventory|stock status)\b/.test(q);
4334
+ const wantsExplicitTable = /\b(table|spreadsheet|grid|detailed records|record details|list all|compare all)\b/.test(q);
4335
+ let visualizationHint = "text";
4336
+ if (wantsExplicitTable) visualizationHint = "tabular";
4337
+ else if (isTemporal) visualizationHint = "trend";
4338
+ else if (wantsPieLikeChart) visualizationHint = "composition";
4339
+ else if (isRanking) visualizationHint = "ranking";
4340
+ else if (isComparison) visualizationHint = "comparison";
4341
+ else if (isDistribution) visualizationHint = "distribution";
4342
+ else if (isComposition) visualizationHint = "composition";
4343
+ else if (isCorrelation) visualizationHint = "correlation";
4344
+ else if (isGeographic) visualizationHint = "geographic";
4345
+ else if (isKpi) visualizationHint = "kpi";
4346
+ else if (this.isProductQuery(query)) visualizationHint = "product_browse";
4347
+ return {
4348
+ visualizationHint,
4349
+ recommendedChart: this.getRecommendedChartForIntent(visualizationHint),
4350
+ filterInStockOnly,
4351
+ wantsExplicitTable,
4352
+ isTemporal,
4353
+ isComparison,
4354
+ language: "en"
4355
+ // heuristic cannot reliably detect language
4356
+ };
4357
+ }
4358
+ static getRecommendedChartForIntent(intent) {
4359
+ switch (intent) {
4360
+ case "trend":
4361
+ return "line_chart";
4362
+ case "comparison":
4363
+ return "bar_chart";
4364
+ case "distribution":
4365
+ return "histogram";
4366
+ case "composition":
4367
+ case "category_breakdown":
4368
+ return "pie_chart";
4369
+ case "correlation":
4370
+ return "scatter_plot";
4371
+ case "ranking":
4372
+ return "horizontal_bar";
4373
+ case "kpi":
4374
+ return "metric_card";
4375
+ case "tabular":
4376
+ case "table":
4377
+ return "table";
4378
+ case "geographic":
4379
+ return "geo_map";
4380
+ case "product_browse":
4381
+ case "text":
4382
+ default:
4383
+ return "text";
4384
+ }
4385
+ }
4386
+ // ─── Transform Helpers ────────────────────────────────────────────────────
4387
+ static transformToProductCarousel(data, config, trainedSchema) {
4388
+ const products = data.map((item) => this.extractProductInfo(item, config, trainedSchema)).filter((p) => p !== null).slice(0, 15);
4389
+ return {
4390
+ type: "product_carousel",
4391
+ title: "Recommended Products",
4392
+ description: `Found ${products.length} relevant products`,
4393
+ data: products
4394
+ };
4395
+ }
4396
+ static transformToPieChart(data, profile, query = "") {
4397
+ var _a;
4398
+ const dimension = profile ? this.selectDimensionField(profile, query) : void 0;
4399
+ const categories = dimension ? Array.from(new Set(profile.records.map((record) => {
4400
+ var _a2;
4401
+ return String((_a2 = record.fields[dimension.key]) != null ? _a2 : "");
4402
+ }).filter(Boolean))) : this.detectCategories(data);
4403
+ if (categories.length === 0) return null;
4404
+ const categoryData = dimension && profile ? this.aggregateProfileByDimension(profile, dimension.key) : this.aggregateByCategory(data, categories);
4405
+ const pieData = Object.entries(categoryData).map(([label, count]) => {
4406
+ const { inStockCount, outOfStockCount } = this.calculateStockCounts(label, data);
4407
+ return { label, value: count, inStockCount, outOfStockCount };
4408
+ });
4409
+ return {
4410
+ type: "pie_chart",
4411
+ title: `Distribution by ${(_a = dimension == null ? void 0 : dimension.label) != null ? _a : "Category"}`,
4412
+ description: `Showing breakdown across ${pieData.length} categories`,
4413
+ data: pieData
4414
+ };
4415
+ }
4416
+ static transformToLineChart(profile) {
4417
+ const dateField = profile.dateFields[0];
4418
+ const valueField = profile.numericFields[0];
4419
+ const buckets = /* @__PURE__ */ new Map();
4420
+ profile.records.forEach((record) => {
4421
+ var _a, _b, _c;
4422
+ const timestamp = String((_a = record.fields[dateField.key]) != null ? _a : "");
4423
+ const value = (_b = this.toFiniteNumber(record.fields[valueField.key])) != null ? _b : 0;
4424
+ buckets.set(timestamp, ((_c = buckets.get(timestamp)) != null ? _c : 0) + value);
4425
+ });
4426
+ const lineData = Array.from(buckets.entries()).sort(([a], [b]) => Date.parse(a) - Date.parse(b)).slice(0, 24).map(([timestamp, value]) => ({ timestamp, value, label: timestamp }));
4427
+ return {
4428
+ type: "line_chart",
4429
+ title: `${valueField.label} Over Time`,
4430
+ description: `Showing ${lineData.length} data points`,
4431
+ data: lineData
4432
+ };
4433
+ }
4434
+ static transformToBarChart(data, profile, query = "", horizontal = false) {
4435
+ var _a;
4436
+ const dimension = profile ? this.selectDimensionField(profile, query) : void 0;
4437
+ const measure = profile ? this.selectNumericField(profile, query) : void 0;
4438
+ const aggregate = dimension && profile ? this.aggregateProfileByDimension(profile, dimension.key, measure == null ? void 0 : measure.key) : this.aggregateByCategory(data, this.detectCategories(data));
4439
+ const barData = Object.entries(aggregate).map(([category, value]) => ({ category, value: Number(value) })).sort((a, b) => horizontal ? b.value - a.value : 0).slice(0, 12);
4440
+ const fallbackData = barData.length > 0 ? barData : data.slice(0, 12).map((item, index) => {
4441
+ var _a2, _b, _c, _d, _e;
4442
+ const meta = item.metadata || {};
4443
+ const label = String(
4444
+ (_c = (_b = (_a2 = this.getDynamicVal(meta, "name")) != null ? _a2 : meta.label) != null ? _b : meta.title) != null ? _c : `Result ${index + 1}`
4445
+ );
4446
+ const value = (_e = (_d = this.extractNumericValue(meta)) != null ? _d : item.score) != null ? _e : 0;
4447
+ return { category: label, value: Number(value) };
4448
+ });
4449
+ return {
4450
+ type: horizontal ? "horizontal_bar" : "bar_chart",
4451
+ title: dimension ? `${(_a = measure == null ? void 0 : measure.label) != null ? _a : "Count"} by ${dimension.label}` : "Comparison",
4452
+ description: `Showing ${fallbackData.length} comparable values`,
4453
+ data: fallbackData
4454
+ };
4455
+ }
4456
+ static transformToHistogram(profile, query = "") {
4457
+ const field = this.selectNumericField(profile, query);
4458
+ if (!field) return null;
4459
+ const values = profile.records.map((record) => this.toFiniteNumber(record.fields[field.key])).filter((value) => value !== null).sort((a, b) => a - b);
4460
+ if (values.length === 0) return null;
4461
+ const min = values[0];
4462
+ const max = values[values.length - 1];
4463
+ const bucketCount = Math.min(10, Math.max(3, Math.ceil(Math.sqrt(values.length))));
4464
+ const width = max === min ? 1 : (max - min) / bucketCount;
4465
+ const buckets = Array.from({ length: bucketCount }, (_, index) => {
4466
+ const start = min + index * width;
4467
+ const end = index === bucketCount - 1 ? max : start + width;
4468
+ return { category: `${this.formatNumber(start)}-${this.formatNumber(end)}`, value: 0 };
4469
+ });
4470
+ values.forEach((value) => {
4471
+ const bucketIndex = max === min ? 0 : Math.min(bucketCount - 1, Math.floor((value - min) / width));
4472
+ buckets[bucketIndex].value += 1;
4473
+ });
4474
+ return {
4475
+ type: "histogram",
4476
+ title: `${field.label} Distribution`,
4477
+ description: `Showing ${values.length} values across ${bucketCount} buckets`,
4478
+ data: buckets
4479
+ };
4480
+ }
4481
+ static transformToScatterPlot(profile, query = "") {
4482
+ const fields = this.rankFieldsByQuery(profile.numericFields, query).slice(0, 2);
4483
+ if (fields.length < 2) return null;
4484
+ const [xField, yField] = fields;
4485
+ const points = profile.records.map((record) => {
4486
+ var _a;
4487
+ const x = this.toFiniteNumber(record.fields[xField.key]);
4488
+ const y = this.toFiniteNumber(record.fields[yField.key]);
4489
+ if (x === null || y === null) return null;
4490
+ return { x, y, label: String((_a = this.getRecordLabel(record)) != null ? _a : record.id) };
4491
+ }).filter((point) => point !== null).slice(0, 100);
4492
+ if (points.length === 0) return null;
4493
+ return {
4494
+ type: "scatter_plot",
4495
+ title: `${xField.label} vs ${yField.label}`,
4496
+ description: `Showing ${points.length} paired values`,
4497
+ data: points
4498
+ };
4499
+ }
4500
+ static transformToMetricCard(profile, query = "") {
4501
+ const operation = this.detectAggregationOperation(query);
4502
+ const numericField = this.selectNumericField(profile, query);
4503
+ const values = numericField ? profile.records.map((record) => this.toFiniteNumber(record.fields[numericField.key])).filter((value2) => value2 !== null) : [];
4504
+ const value = operation === "count" || values.length === 0 ? profile.records.length : this.calculateAggregate(values, operation);
4505
+ const metric = {
4506
+ label: numericField ? `${operation} ${numericField.label}` : "Count",
4507
+ value,
4508
+ operation
4509
+ };
4510
+ return {
4511
+ type: "metric_card",
4512
+ title: metric.label,
4513
+ description: `Calculated from ${profile.records.length} result${profile.records.length === 1 ? "" : "s"}`,
4514
+ data: metric
4515
+ };
4516
+ }
4517
+ static transformToRadarChart(data) {
4518
+ const attributeMap = {};
4519
+ data.forEach((item) => {
4520
+ var _a, _b, _c;
4521
+ const meta = item.metadata || {};
4522
+ const seriesName = String((_c = (_b = (_a = meta.name) != null ? _a : meta.product) != null ? _b : item.id) != null ? _c : "Item");
4523
+ Object.entries(meta).forEach(([key, val]) => {
4524
+ if (typeof val === "number" && !["price", "id"].includes(key.toLowerCase())) {
4525
+ if (!attributeMap[key]) attributeMap[key] = {};
4526
+ attributeMap[key][seriesName] = val;
4527
+ }
4528
+ });
4529
+ });
4530
+ const radarData = Object.entries(attributeMap).map(([attribute, series]) => __spreadValues({
4531
+ attribute
4532
+ }, series));
4533
+ return {
4534
+ type: "radar_chart",
4535
+ title: "Product Comparison",
4536
+ description: `Comparing ${data.length} items across ${radarData.length} attributes`,
4537
+ data: radarData.length > 0 ? radarData : data.map((d) => ({ attribute: d.content.substring(0, 40) }))
4538
+ };
4539
+ }
4540
+ static transformToTable(data, query = "") {
4541
+ const columns = this.extractTableColumns(data, query);
4542
+ const rows = data.map((item) => this.extractTableRow(item, columns));
4543
+ const tableData = { columns, rows };
4544
+ return {
4545
+ type: "table",
4546
+ title: "Detailed Results",
4547
+ description: `Showing ${data.length} results`,
4548
+ data: tableData
4549
+ };
4550
+ }
4551
+ static transformToText(data) {
4552
+ return this.createTextResponse(
4553
+ "Retrieved Context",
4554
+ data.map((item) => item.content).join("\n\n"),
4555
+ `Found ${data.length} relevant results`
4556
+ );
4557
+ }
4558
+ static createTextResponse(title, content, description) {
4559
+ return { type: "text", title, description, data: { content } };
4560
+ }
4561
+ // ─── LLM Response Parsing ─────────────────────────────────────────────────
4562
+ static parseTransformationResponse(raw) {
4563
+ const payloadText = this.extractJsonCandidate(raw);
4564
+ if (!payloadText) return null;
4565
+ try {
4566
+ const parsed = JSON.parse(payloadText);
4567
+ return this.normalizeTransformation(parsed);
4568
+ } catch (e) {
4569
+ return null;
4570
+ }
4571
+ }
4572
+ static extractJsonCandidate(raw) {
4573
+ if (!raw) return null;
4574
+ const cleaned = raw.replace(/```(?:json|chart|ui)?\s*/gi, "").replace(/```/g, "").trim();
4575
+ const start = cleaned.indexOf("{");
4576
+ if (start === -1) return null;
4577
+ let depth = 0;
4578
+ let inString = false;
4579
+ let escape = false;
4580
+ for (let i = start; i < cleaned.length; i += 1) {
4581
+ const char = cleaned[i];
4582
+ if (escape) {
4583
+ escape = false;
4584
+ continue;
4585
+ }
4586
+ if (char === "\\") {
4587
+ escape = true;
4588
+ continue;
4589
+ }
4590
+ if (char === '"') {
4591
+ inString = !inString;
4592
+ continue;
4593
+ }
4594
+ if (inString) continue;
4595
+ if (char === "{") depth += 1;
4596
+ if (char === "}") {
4597
+ depth -= 1;
4598
+ if (depth === 0) return cleaned.slice(start, i + 1);
4599
+ }
4600
+ }
4601
+ return null;
4602
+ }
4603
+ static normalizeTransformation(payload) {
4604
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
4605
+ if (!payload || typeof payload !== "object") return null;
4606
+ const p = payload;
4607
+ const type = this.normalizeVisualizationType(
4608
+ String((_c = (_b = (_a = p.type) != null ? _a : p.view) != null ? _b : p.chartType) != null ? _c : "")
4609
+ );
4610
+ if (!type) return null;
4611
+ const title = String((_e = (_d = p.title) != null ? _d : p.heading) != null ? _e : "Visualization");
4612
+ const description = p.description ? String(p.description) : void 0;
4613
+ const rawData = (_j = (_i = (_h = (_g = (_f = p.data) != null ? _f : p.table) != null ? _g : p.rows) != null ? _h : p.items) != null ? _i : p.content) != null ? _j : null;
4614
+ const data = type === "text" && typeof rawData === "string" ? { content: rawData } : rawData;
4615
+ const transformation = { type, title, description, data };
4616
+ return this.validateTransformation(transformation) ? transformation : null;
4617
+ }
4618
+ static normalizeVisualizationType(type) {
4619
+ var _a;
4620
+ const mapping = {
4621
+ pie: "pie_chart",
4622
+ pie_chart: "pie_chart",
4623
+ bar: "bar_chart",
4624
+ bar_chart: "bar_chart",
4625
+ histogram: "histogram",
4626
+ horizontal_bar: "horizontal_bar",
4627
+ horizontalbar: "horizontal_bar",
4628
+ line: "line_chart",
4629
+ line_chart: "line_chart",
4630
+ scatter: "scatter_plot",
4631
+ scatter_plot: "scatter_plot",
4632
+ scatterplot: "scatter_plot",
4633
+ radar: "radar_chart",
4634
+ radar_chart: "radar_chart",
4635
+ metric: "metric_card",
4636
+ metric_card: "metric_card",
4637
+ card: "metric_card",
4638
+ kpi: "metric_card",
4639
+ geo: "geo_map",
4640
+ geo_map: "geo_map",
4641
+ map: "geo_map",
4642
+ table: "table",
4643
+ text: "text",
4644
+ product_carousel: "product_carousel",
4645
+ carousel: "carousel"
4646
+ };
4647
+ return (_a = mapping[type.toLowerCase()]) != null ? _a : null;
4648
+ }
4649
+ static validateTransformation(t) {
4650
+ const { type, data } = t;
4651
+ switch (type) {
4652
+ case "pie_chart":
4653
+ case "bar_chart":
4654
+ case "histogram":
4655
+ case "horizontal_bar":
4656
+ return Array.isArray(data) && data.every(
4657
+ (i) => i !== null && typeof i === "object" && (typeof i.value === "number" || !Number.isNaN(Number(i.value)))
4658
+ );
4659
+ case "scatter_plot":
4660
+ return Array.isArray(data) && data.every(
4661
+ (i) => i !== null && typeof i === "object" && (typeof i.x === "number" || !Number.isNaN(Number(i.x))) && (typeof i.y === "number" || !Number.isNaN(Number(i.y)))
4662
+ );
4663
+ case "line_chart":
4664
+ return Array.isArray(data) && data.every(
4665
+ (i) => i !== null && typeof i === "object" && "timestamp" in i && (typeof i.value === "number" || !Number.isNaN(Number(i.value)))
4666
+ );
4667
+ case "metric_card":
4668
+ return typeof data === "object" && data !== null && (typeof data.value === "number" || !Number.isNaN(Number(data.value)));
4669
+ case "geo_map":
4670
+ return Array.isArray(data) || typeof data === "object" && data !== null;
4671
+ case "radar_chart":
4672
+ return Array.isArray(data) && data.every(
4673
+ (i) => i !== null && typeof i === "object" && "attribute" in i
4674
+ );
4675
+ case "table":
4676
+ return typeof data === "object" && data !== null && Array.isArray(data.columns) && Array.isArray(data.rows);
4677
+ case "text":
4678
+ return typeof data === "object" && data !== null && typeof data.content === "string";
4679
+ case "product_carousel":
4680
+ case "carousel":
4681
+ return Array.isArray(data) && data.every(
4682
+ (i) => i !== null && typeof i === "object" && ("id" in i || "name" in i)
4683
+ );
4684
+ default:
4685
+ return false;
4686
+ }
4687
+ }
4688
+ // ─── Data Inspection Helpers ──────────────────────────────────────────────
4689
+ static isStructuredListQuery(query) {
4690
+ const q = query.toLowerCase();
4691
+ const asksForRecords = /\b(list|provide|show|give|get|find|which|whose|records?|details?)\b/.test(q);
4692
+ const hasNumericPredicate = /\b(greater than|more than|above|over|less than|below|under|at least|at most|minimum|maximum|>=|<=|>|<|equals?|equal to)\b\s*\$?\d/i.test(q) || /\b\d+\b\s*(?:or more|or less|and above|and below)\b/i.test(q);
4693
+ const hasEntityTerms = /\b(organization|organisations?|organizations?|company|companies|employee|employees|staff|headcount|workforce)\b/.test(q);
4694
+ return asksForRecords && (hasNumericPredicate || hasEntityTerms);
4695
+ }
4696
+ /** @internal kept private for transform() internal logic */
4697
+ static isProductQuery(query) {
4698
+ return _UITransformer._productQueryTest(query);
4699
+ }
4700
+ /**
4701
+ * Public entry-point for external callers (e.g. Pipeline)
4702
+ * to check whether a query maps to product_browse without triggering an LLM call.
4703
+ */
4704
+ static isProductQueryPublic(query) {
4705
+ return _UITransformer._productQueryTest(query);
4706
+ }
4707
+ static _productQueryTest(query) {
4708
+ const q = query.toLowerCase();
4709
+ const productTerms = /\b(product|products|item|items|sku|catalog|catalogue|price|prices|brand|model|stock|inventory|in stock|out of stock|buy|shop)\b/.test(q);
4710
+ const productAction = /\b(recommend|suggest|describe|description|detail|details|about|show|find|search|browse|list|explore|exploring)\b/.test(q);
4711
+ const nonProductEntityTerms = /\b(organization|organisations?|organizations?|company|companies|employee|employees|staff|headcount|workforce)\b/.test(q);
4712
+ return productTerms && productAction && !nonProductEntityTerms;
4713
+ }
4714
+ static isProductData(item) {
4715
+ const content = (item.content || "").toLowerCase();
4716
+ const productKeywords = [
4717
+ "product",
4718
+ "price",
4719
+ "stock",
4720
+ "sku",
4721
+ "brand",
4722
+ "msrp",
4723
+ "inventory",
4724
+ "buy",
4725
+ "shop",
4726
+ "beauty",
4727
+ "cosmetic",
4728
+ "facial",
4729
+ "cream",
4730
+ "serum",
4731
+ "mask",
4732
+ "makeup",
4733
+ "fragrance"
4734
+ ];
4735
+ const hasKeywords = productKeywords.some((kw) => content.includes(kw));
4736
+ const metadata = item.metadata || {};
4737
+ const hasMetadataKey = Object.keys(metadata).some((k) => {
4738
+ const val = metadata[k];
4739
+ return ["price", "product", "sku", "brand", "cost"].includes(k.toLowerCase()) && val !== null && val !== void 0 && val !== "";
4740
+ });
4741
+ const hasPricePattern = /\$\s*\d+\.\d{2}/.test(content);
4742
+ return hasKeywords || hasMetadataKey || hasPricePattern;
4743
+ }
4744
+ static isTimeSeriesData(item) {
4745
+ const metadata = item.metadata || {};
4746
+ const maybeDateKeys = Object.keys(metadata).filter(
4747
+ (k) => ["date", "timestamp", "time", "period"].includes(k.toLowerCase())
4748
+ );
4749
+ return maybeDateKeys.some((key) => {
4750
+ const value = metadata[key];
4751
+ if (typeof value === "string") return !Number.isNaN(Date.parse(value)) && value.trim().length > 0;
4752
+ return typeof value === "number";
4753
+ });
4754
+ }
4755
+ static hasMultipleFields(data) {
4756
+ const fieldCount = /* @__PURE__ */ new Set();
4757
+ data.forEach((item) => Object.keys(item.metadata || {}).forEach((k) => fieldCount.add(k)));
4758
+ return fieldCount.size > 2;
4759
+ }
4760
+ static profileData(data) {
4761
+ const records = data.map((item) => {
4762
+ const fields2 = {};
4763
+ Object.entries(item.metadata || {}).forEach(([key, value]) => {
4764
+ const primitive = this.toPrimitive(value);
4765
+ if (primitive !== null) fields2[key] = primitive;
4766
+ });
4767
+ if (!fields2.content && item.content) fields2.content = item.content.substring(0, 500);
4768
+ return {
4769
+ id: item.id,
4770
+ content: item.content,
4771
+ score: item.score,
4772
+ fields: fields2,
4773
+ source: item
4774
+ };
4775
+ });
4776
+ const keys = Array.from(new Set(records.flatMap((record) => Object.keys(record.fields))));
4777
+ const fields = keys.map((key) => {
4778
+ const values = records.map((record) => record.fields[key]).filter((value) => value !== void 0 && value !== null && String(value).trim() !== "");
4779
+ const uniqueCount = new Set(values.map((value) => String(value).toLowerCase())).size;
4780
+ return {
4781
+ key,
4782
+ label: this.humanizeFieldName(key),
4783
+ kind: this.inferFieldKind(key, values, records.length, uniqueCount),
4784
+ values,
4785
+ uniqueCount
4786
+ };
4787
+ });
4788
+ return {
4789
+ records,
4790
+ fields,
4791
+ numericFields: fields.filter((field) => field.kind === "number"),
4792
+ dateFields: fields.filter((field) => field.kind === "date"),
4793
+ categoricalFields: fields.filter((field) => field.kind === "category"),
4794
+ booleanFields: fields.filter((field) => field.kind === "boolean")
4795
+ };
4796
+ }
4797
+ static toPrimitive(value) {
4798
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return value;
4799
+ if (value === null || value === void 0) return null;
4800
+ if (value instanceof Date) return value.toISOString();
4801
+ return null;
4802
+ }
4803
+ static inferFieldKind(key, values, rowCount, uniqueCount) {
4804
+ const lowerKey = key.toLowerCase();
4805
+ if (values.length === 0) return "text";
4806
+ if (values.every((value) => typeof value === "boolean" || /^(true|false|yes|no|in_stock|out_of_stock|available|unavailable)$/i.test(String(value)))) {
4807
+ return "boolean";
4808
+ }
4809
+ if (/(date|time|timestamp|created|updated|month|year|period)/i.test(lowerKey) && values.some((value) => this.isDateLike(value))) {
4810
+ return "date";
4811
+ }
4812
+ const numericCount = values.filter((value) => this.toFiniteNumber(value) !== null).length;
4813
+ if (numericCount / values.length >= 0.85 && !/(id|sku|ean|upc|zip|postal|phone|code)/i.test(lowerKey)) {
4814
+ return "number";
4815
+ }
4816
+ if (uniqueCount <= Math.max(20, Math.ceil(rowCount * 0.7)) && !/(id|sku|ean|upc|description|content|url|image|thumbnail)/i.test(lowerKey)) {
4817
+ return "category";
4818
+ }
4819
+ return "text";
4820
+ }
4821
+ static isDateLike(value) {
4822
+ if (typeof value === "number") return value > 1900 && value < 3e3;
4823
+ const text = String(value).trim();
4824
+ return text.length > 3 && !Number.isNaN(Date.parse(text));
4825
+ }
4826
+ static chooseAutomaticVisualization(data, profile, query) {
4827
+ if (profile.records.length === 0) return null;
4828
+ if (profile.dateFields.length > 0 && profile.numericFields.length > 0) {
4829
+ return this.transformToLineChart(profile);
4830
+ }
4831
+ if (profile.categoricalFields.length > 0 && profile.numericFields.length > 0) {
4832
+ return this.transformToBarChart(data, profile, query);
4833
+ }
4834
+ if (profile.categoricalFields.length > 0) {
4835
+ return this.transformToPieChart(data, profile, query);
4836
+ }
4837
+ if (profile.numericFields.length >= 2) {
4838
+ return this.transformToScatterPlot(profile, query);
4839
+ }
4840
+ if (profile.numericFields.length === 1) {
4841
+ return this.transformToMetricCard(profile, query);
4842
+ }
4843
+ return null;
4844
+ }
4845
+ static selectDimensionField(profile, query) {
4846
+ var _a, _b;
4847
+ const productCategory = profile.categoricalFields.find(
4848
+ (field) => /category|department|collection|type|group|segment|region|country|state|city/i.test(field.key)
4849
+ );
4850
+ const ranked = this.rankFieldsByQuery(profile.categoricalFields, query);
4851
+ return (_b = (_a = ranked[0]) != null ? _a : productCategory) != null ? _b : profile.categoricalFields[0];
4852
+ }
4853
+ static selectNumericField(profile, query) {
4854
+ var _a;
4855
+ return (_a = this.rankFieldsByQuery(profile.numericFields, query)[0]) != null ? _a : profile.numericFields[0];
4856
+ }
4857
+ static rankFieldsByQuery(fields, query) {
4858
+ const q = query.toLowerCase();
4859
+ return [...fields].sort((a, b) => this.fieldScore(b, q) - this.fieldScore(a, q));
4860
+ }
4861
+ static fieldScore(field, query) {
4862
+ const key = field.key.toLowerCase();
4863
+ const label = field.label.toLowerCase();
4864
+ let score = 0;
4865
+ if (query.includes(key)) score += 4;
4866
+ if (query.includes(label)) score += 4;
4867
+ key.split(/[_\s-]+/).forEach((part) => {
4868
+ if (part && query.includes(part)) score += 1;
4869
+ });
4870
+ if (/category|department|collection|type|group|segment/.test(key)) score += 2;
4871
+ if (/count|total|quantity|stock|inventory|sales|revenue|amount|price|value|score/.test(key)) score += 2;
4872
+ if (/id|sku|ean|upc|code/.test(key)) score -= 5;
4873
+ return score;
4874
+ }
4875
+ static normalizeComparableField(field) {
4876
+ return field.toLowerCase().replace(/&/g, "and").replace(/[^a-z0-9]+/g, "").trim();
4877
+ }
4878
+ static fieldTokens(field) {
4879
+ return field.toLowerCase().replace(/[_-]+/g, " ").split(/\s+/).map((token) => token.replace(/[^a-z0-9]/g, "")).filter(Boolean);
4880
+ }
4881
+ static aggregateProfileByDimension(profile, dimensionKey, measureKey) {
4882
+ const result = {};
4883
+ profile.records.forEach((record) => {
4884
+ var _a, _b, _c;
4885
+ const category = String((_a = record.fields[dimensionKey]) != null ? _a : "Other").trim() || "Other";
4886
+ const value = measureKey ? (_b = this.toFiniteNumber(record.fields[measureKey])) != null ? _b : 0 : 1;
4887
+ result[category] = ((_c = result[category]) != null ? _c : 0) + value;
4888
+ });
4889
+ return result;
4890
+ }
4891
+ static getRecordLabel(record) {
4892
+ const labelKeys = ["name", "title", "label", "product", "item", "brand"];
4893
+ const key = Object.keys(record.fields).find(
4894
+ (fieldKey) => labelKeys.some((labelKey) => fieldKey.toLowerCase().includes(labelKey))
4895
+ );
4896
+ return key ? record.fields[key] : void 0;
4897
+ }
4898
+ static detectAggregationOperation(query) {
4899
+ const q = query.toLowerCase();
4900
+ if (/\b(avg|average|mean)\b/.test(q)) return "average";
4901
+ if (/\b(count|how many|number of)\b/.test(q)) return "count";
4902
+ if (/\b(min|minimum|lowest)\b/.test(q)) return "min";
4903
+ if (/\b(max|maximum|highest)\b/.test(q)) return "max";
4904
+ if (/\bmedian\b/.test(q)) return "median";
4905
+ return "sum";
4906
+ }
4907
+ static calculateAggregate(values, operation) {
4908
+ if (values.length === 0) return 0;
4909
+ switch (operation) {
4910
+ case "average":
4911
+ return values.reduce((sum, value) => sum + value, 0) / values.length;
4912
+ case "count":
4913
+ return values.length;
4914
+ case "min":
4915
+ return Math.min(...values);
4916
+ case "max":
4917
+ return Math.max(...values);
4918
+ case "median": {
4919
+ const sorted = [...values].sort((a, b) => a - b);
4920
+ const middle = Math.floor(sorted.length / 2);
4921
+ return sorted.length % 2 === 0 ? (sorted[middle - 1] + sorted[middle]) / 2 : sorted[middle];
4922
+ }
4923
+ case "sum":
4924
+ default:
4925
+ return values.reduce((sum, value) => sum + value, 0);
4926
+ }
4927
+ }
4928
+ static humanizeFieldName(key) {
4929
+ return key.replace(/[_-]+/g, " ").replace(/([a-z])([A-Z])/g, "$1 $2").replace(/\s+/g, " ").trim().replace(/\b\w/g, (char) => char.toUpperCase());
4930
+ }
4931
+ static formatNumber(value) {
4932
+ return Number.isInteger(value) ? String(value) : value.toFixed(1);
4933
+ }
4934
+ static detectCategories(data) {
4935
+ const categories = /* @__PURE__ */ new Set();
4936
+ data.forEach((item) => {
4937
+ const category = this.getProductCategory(item);
4938
+ if (category) categories.add(category);
4939
+ });
4940
+ return Array.from(categories);
4941
+ }
4942
+ static getProductCategory(item) {
4943
+ const meta = item.metadata || {};
4944
+ const metadataCategory = resolveMetadataValue(meta, "category");
4945
+ if (this.isUsableCategory(metadataCategory)) return String(metadataCategory).trim();
4946
+ const content = item.content || "";
4947
+ const explicitCategoryMatch = content.match(
4948
+ /(?:^|\n)\s*(?:product\s*)?(?:category|department|collection)\s*[:\-–]\s*([^\n]+)/i
4949
+ );
4950
+ if (explicitCategoryMatch && this.isUsableCategory(explicitCategoryMatch[1])) {
4951
+ return explicitCategoryMatch[1].trim();
4952
+ }
4953
+ return null;
4954
+ }
4955
+ static isUsableCategory(value) {
4956
+ if (value === null || value === void 0) return false;
4957
+ const category = String(value).trim();
4958
+ if (!category) return false;
4959
+ return !/^(category|type|tag|price|cost|stock|availability|description|product|item|name|brand|sku|id|ean|currency|color|size|index|internal id|other|\[?type\]?|\[?products?_?\d*\]?)$/i.test(category);
4960
+ }
4961
+ static aggregateByCategory(data, categories) {
4962
+ const result = Object.fromEntries(categories.map((c) => [c, 0]));
4963
+ data.forEach((item) => {
4964
+ var _a;
4965
+ const cat = (_a = this.getProductCategory(item)) != null ? _a : "Other";
4966
+ if (Object.prototype.hasOwnProperty.call(result, cat)) result[cat]++;
4967
+ else result["Other"] = (result["Other"] || 0) + 1;
4968
+ });
4969
+ return result;
4970
+ }
4971
+ static extractTimeSeriesData(data) {
4972
+ return data.map((item) => {
4973
+ var _a, _b, _c, _d, _e;
4974
+ const meta = item.metadata || {};
4975
+ return {
4976
+ timestamp: (_b = (_a = meta.timestamp) != null ? _a : meta.date) != null ? _b : (/* @__PURE__ */ new Date()).toISOString(),
4977
+ value: (_d = (_c = meta.value) != null ? _c : item.score) != null ? _d : 0,
4978
+ label: (_e = meta.label) != null ? _e : item.content.substring(0, 50)
4979
+ };
4980
+ });
4981
+ }
4982
+ static extractNumericValue(meta) {
4983
+ var _a;
4984
+ const preferredKeys = [
4985
+ "value",
4986
+ "count",
4987
+ "total",
4988
+ "average",
4989
+ "avg",
4990
+ "amount",
4991
+ "sales",
4992
+ "revenue",
4993
+ "score",
4994
+ "quantity",
4995
+ "price"
4996
+ ];
4997
+ for (const key of preferredKeys) {
4998
+ const raw = (_a = resolveMetadataValue(meta, key)) != null ? _a : meta[key];
4999
+ const value = typeof raw === "number" ? raw : Number(String(raw != null ? raw : "").replace(/[$,% ,]/g, ""));
5000
+ if (Number.isFinite(value)) return value;
5001
+ }
5002
+ for (const value of Object.values(meta)) {
5003
+ const numeric = typeof value === "number" ? value : Number(String(value != null ? value : "").replace(/[$,% ,]/g, ""));
5004
+ if (Number.isFinite(numeric)) return numeric;
5005
+ }
5006
+ return null;
5007
+ }
5008
+ static extractTableColumns(data, query = "") {
5009
+ const q = query.toLowerCase();
5010
+ const availableFields = this.extractAvailableTableFields(data);
5011
+ if (/\b(organization|organisations?|organizations?|company|companies)\b/.test(q) && /\b(employee|employees|staff|headcount|workforce)\b/.test(q)) {
5012
+ const nameField = this.pickTableField(availableFields, [
5013
+ "company name",
5014
+ "organization name",
5015
+ "organisation name",
5016
+ "name",
5017
+ "company",
5018
+ "organization",
5019
+ "organisation"
5020
+ ]);
5021
+ const employeeField = this.pickTableField(availableFields, [
5022
+ "number of employees",
5023
+ "employee count",
5024
+ "employees",
5025
+ "employee_count",
5026
+ "number_employees",
5027
+ "num employees",
5028
+ "staff count",
5029
+ "headcount",
5030
+ "workforce"
5031
+ ]);
5032
+ const columns = [nameField, employeeField].filter((field) => Boolean(field));
5033
+ if (columns.length > 0) return columns;
5034
+ }
5035
+ const requestedFields = availableFields.map((field) => ({
5036
+ field,
5037
+ score: this.tableFieldQueryScore(field, q)
5038
+ })).filter((item) => item.score > 0).sort((a, b) => b.score - a.score).map((item) => item.field);
5039
+ if (requestedFields.length > 0) {
5040
+ return requestedFields.slice(0, Math.min(6, requestedFields.length));
5041
+ }
5042
+ const metadataFields = Array.from(new Set(
5043
+ data.flatMap((item) => Object.keys(item.metadata || {}).map((k) => this.humanizeFieldName(k)))
5044
+ ));
5045
+ return metadataFields.length > 0 ? metadataFields : ["Content"];
5046
+ }
5047
+ static extractTableRow(item, columns) {
5048
+ return columns.map((col) => this.resolveTableCellValue(item, col));
5049
+ }
5050
+ static extractAvailableTableFields(data) {
5051
+ const fields = /* @__PURE__ */ new Map();
5052
+ const addField = (field) => {
5053
+ const clean = this.humanizeFieldName(field);
5054
+ if (!clean || /^(content|\[?type\]?)$/i.test(clean)) return;
5055
+ const normalized = this.normalizeComparableField(clean);
5056
+ if (!fields.has(normalized)) fields.set(normalized, clean);
5057
+ };
5058
+ data.forEach((item) => {
5059
+ Object.keys(item.metadata || {}).forEach(addField);
5060
+ for (const match of (item.content || "").matchAll(/(?:^|\n)\s*([A-Za-z][A-Za-z0-9_ /-]{1,50})\s*[:\-–]\s*([^\n]+)/g)) {
5061
+ addField(match[1]);
5062
+ }
5063
+ });
5064
+ return Array.from(fields.values());
5065
+ }
5066
+ static pickTableField(fields, aliases) {
5067
+ const normalizedAliases = aliases.map((alias) => this.normalizeComparableField(alias));
5068
+ for (const alias of normalizedAliases) {
5069
+ const exact = fields.find((field) => this.normalizeComparableField(field) === alias);
5070
+ if (exact) return exact;
5071
+ }
5072
+ for (const alias of normalizedAliases) {
5073
+ const fuzzy = fields.find((field) => {
5074
+ const normalizedField = this.normalizeComparableField(field);
5075
+ if (/(id|code|uuid)$/.test(normalizedField) && !/(id|code|uuid)$/.test(alias)) return false;
5076
+ return normalizedField.includes(alias) || alias.includes(normalizedField);
5077
+ });
5078
+ if (fuzzy) return fuzzy;
5079
+ }
5080
+ return void 0;
5081
+ }
5082
+ static tableFieldQueryScore(field, query) {
5083
+ const normalizedField = this.normalizeComparableField(field);
5084
+ if (!normalizedField) return 0;
5085
+ const fieldTokens = this.fieldTokens(field);
5086
+ return fieldTokens.reduce((score, token) => {
5087
+ if (token.length < 3) return score;
5088
+ return query.includes(token) ? score + 1 : score;
5089
+ }, query.includes(normalizedField) ? 3 : 0);
5090
+ }
5091
+ static resolveTableCellValue(item, column) {
5092
+ if (column === "Content") return item.content.substring(0, 100);
5093
+ const meta = item.metadata || {};
5094
+ const normalizedColumn = this.normalizeComparableField(column);
5095
+ const exactMetadata = Object.entries(meta).find(
5096
+ ([key]) => this.normalizeComparableField(key) === normalizedColumn || this.normalizeComparableField(this.humanizeFieldName(key)) === normalizedColumn
5097
+ );
5098
+ if (exactMetadata && exactMetadata[1] !== void 0 && exactMetadata[1] !== null) {
5099
+ return this.toDisplayValue(exactMetadata[1]);
5100
+ }
5101
+ const aliasValue = this.resolveAliasedTableCell(meta, column);
5102
+ if (aliasValue !== void 0) return this.toDisplayValue(aliasValue);
5103
+ const contentValue = this.extractContentFieldValue(item.content, column);
5104
+ if (contentValue !== null) return contentValue;
5105
+ const aliasContentValue = this.extractAliasedContentFieldValue(item.content, column);
5106
+ return aliasContentValue != null ? aliasContentValue : "";
5107
+ }
5108
+ static resolveAliasedTableCell(meta, column) {
5109
+ const normalizedColumn = this.normalizeComparableField(column);
5110
+ const aliases = normalizedColumn.includes("employee") ? ["number of employees", "employee count", "employees", "headcount", "staff count", "workforce"] : normalizedColumn.includes("name") ? ["company name", "organization name", "organisation name", "name", "company", "organization", "organisation"] : [];
5111
+ for (const alias of aliases) {
5112
+ const normalizedAlias = this.normalizeComparableField(alias);
5113
+ const match = Object.entries(meta).find(([key]) => {
5114
+ const normalizedKey = this.normalizeComparableField(key);
5115
+ return normalizedKey === normalizedAlias || normalizedKey.includes(normalizedAlias) || normalizedAlias.includes(normalizedKey);
5116
+ });
5117
+ if (match && match[1] !== void 0 && match[1] !== null) return match[1];
5118
+ }
5119
+ return void 0;
5120
+ }
5121
+ static extractContentFieldValue(content, column) {
5122
+ const escaped = column.replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/\s+/g, "[\\s_ -]+");
5123
+ const pattern = new RegExp(`(?:^|\\n)\\s*${escaped}\\s*[:\\-\u2013]\\s*([^\\n]+)`, "i");
5124
+ const match = content.match(pattern);
5125
+ return match ? match[1].trim() : null;
5126
+ }
5127
+ static extractAliasedContentFieldValue(content, column) {
5128
+ const normalizedColumn = this.normalizeComparableField(column);
5129
+ const aliases = normalizedColumn.includes("employee") ? ["Number Of Employees", "Number of Employees", "Employee Count", "Employees", "Headcount", "Staff Count", "Workforce"] : normalizedColumn.includes("name") ? ["Company Name", "Organization Name", "Organisation Name", "Name", "Company", "Organization", "Organisation"] : [];
5130
+ for (const alias of aliases) {
5131
+ const value = this.extractContentFieldValue(content, alias);
5132
+ if (value !== null) return value;
5133
+ }
5134
+ return null;
5135
+ }
5136
+ static toDisplayValue(value) {
5137
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return value;
5138
+ return String(value != null ? value : "");
5139
+ }
5140
+ static calculateStockCounts(category, data) {
5141
+ let inStock = 0;
5142
+ let outOfStock = 0;
5143
+ data.forEach((d) => {
5144
+ var _a, _b;
5145
+ const cat = (_a = this.getProductCategory(d)) != null ? _a : "Other";
5146
+ if (cat === category) {
5147
+ const quantity = (_b = this.extractStockQuantity(d)) != null ? _b : 1;
5148
+ if (this.determineStockStatus(d)) inStock += quantity;
5149
+ else outOfStock += quantity;
5150
+ }
5151
+ });
5152
+ return { inStockCount: inStock, outOfStockCount: outOfStock };
5153
+ }
5154
+ static determineStockStatus(item) {
5155
+ const meta = item.metadata || {};
5156
+ const stockValue = resolveMetadataValue(meta, "stock");
5157
+ if (stockValue !== void 0) {
5158
+ const normalized = String(stockValue).toLowerCase();
5159
+ if (/out[_\s-]?of[_\s-]?stock|unavailable|false|no|sold out|0/.test(normalized)) return false;
5160
+ if (/in[_\s-]?stock|available|true|yes/.test(normalized)) return true;
5161
+ const numeric = this.toFiniteNumber(stockValue);
5162
+ if (numeric !== null) return numeric > 0;
5163
+ }
5164
+ if (meta.inStock !== void 0) return Boolean(meta.inStock);
5165
+ if (meta.stock !== void 0) return Boolean(meta.stock);
5166
+ if (meta.available !== void 0) return Boolean(meta.available);
5167
+ const content = (item.content || "").toLowerCase();
5168
+ if (/out[_\s-]?of[_\s-]?stock|unavailable|sold out/.test(content)) return false;
5169
+ if (/in[_\s-]?stock|available/.test(content)) return true;
5170
+ return true;
5171
+ }
5172
+ static extractStockQuantity(item) {
5173
+ const meta = item.metadata || {};
5174
+ const stockValue = resolveMetadataValue(meta, "stock");
5175
+ const numericStock = this.toFiniteNumber(stockValue);
5176
+ if (numericStock !== null) return numericStock;
5177
+ const content = item.content || "";
5178
+ const stockMatch = content.match(/\b(?:stock|inventory|quantity|count)\s*[:\-–]?\s*([\d,]+)/i);
5179
+ if (!stockMatch) return null;
5180
+ return this.toFiniteNumber(stockMatch[1]);
5181
+ }
5182
+ static toFiniteNumber(value) {
5183
+ if (typeof value === "number") return Number.isFinite(value) ? value : null;
5184
+ const numeric = Number(String(value != null ? value : "").replace(/[$,% ,]/g, ""));
5185
+ return Number.isFinite(numeric) ? numeric : null;
5186
+ }
5187
+ // ─── Product Extraction ───────────────────────────────────────────────────
5188
+ static getDynamicVal(meta, uiKey, config, trainedSchema) {
5189
+ var _a;
5190
+ if (!meta) return void 0;
5191
+ const mapping = (_a = config == null ? void 0 : config.rag) == null ? void 0 : _a.uiMapping;
5192
+ if ((mapping == null ? void 0 : mapping[uiKey]) && meta[mapping[uiKey]] !== void 0) return meta[mapping[uiKey]];
5193
+ if (trainedSchema && typeof trainedSchema === "object") {
5194
+ const trainedKey = trainedSchema[uiKey];
5195
+ if (trainedKey && meta[trainedKey] !== void 0) return meta[trainedKey];
5196
+ }
5197
+ return resolveMetadataValue(meta, uiKey);
5198
+ }
5199
+ static extractProductInfo(item, config, trainedSchema) {
5200
+ var _a;
5201
+ const meta = item.metadata || {};
5202
+ const name = this.getDynamicVal(meta, "name", config, trainedSchema);
5203
+ const price = this.getDynamicVal(meta, "price", config, trainedSchema);
5204
+ const brand = this.getDynamicVal(meta, "brand", config, trainedSchema);
5205
+ const description = this.cleanProductDescription(
5206
+ (_a = this.extractProductDescriptionFromContent(item.content)) != null ? _a : this.getProductDescriptionValue(meta, config, trainedSchema)
5207
+ );
5208
+ if (name || this.isProductData(item)) {
5209
+ let finalName = name ? String(name) : void 0;
5210
+ if (!finalName) {
5211
+ const nameMatch = item.content.match(/(?:Product|Item|Name):\s*([^\n]+)/i);
5212
+ finalName = nameMatch ? nameMatch[1].trim() : item.content.split("\n")[0].substring(0, 60);
5213
+ }
5214
+ let finalPrice = typeof price === "number" || typeof price === "string" ? price : void 0;
5215
+ if (!finalPrice) {
5216
+ const priceMatch = item.content.match(/(?:Price|Cost):\s*\$?([\d,.]+)/i) || item.content.match(/\$\s*([\d,.]+)/);
5217
+ if (priceMatch) finalPrice = priceMatch[1].replace(/,/g, "");
5218
+ }
5219
+ const imageValue = this.getDynamicVal(meta, "image", config, trainedSchema);
5220
+ return {
5221
+ id: item.id,
5222
+ name: finalName,
5223
+ price: finalPrice,
5224
+ image: typeof imageValue === "string" ? imageValue : void 0,
5225
+ brand: brand ? String(brand) : void 0,
5226
+ description,
5227
+ inStock: this.determineStockStatus(item)
5228
+ };
5229
+ }
5230
+ return null;
5231
+ }
5232
+ static extractProductDescriptionFromContent(content) {
5233
+ const bodyMatch = content.match(
5234
+ /\bBody\s*\(HTML\)\s*:\s*([\s\S]*?)(?=\s*[,.]?\s+\b(?:Handle|Title|Vendor|Type|Tags|Published|Option\d*\s+Name|Option\d*\s+Value|Option|Variant|Image|SKU|Price|Status|Category)\b\s*:|$)/i
5235
+ );
5236
+ if (bodyMatch == null ? void 0 : bodyMatch[1]) return bodyMatch[1];
5237
+ const descriptionMatch = content.match(
5238
+ /\b(?:Description|Summary|Details|Body|Content)\s*:\s*([\s\S]*?)(?=\s*[,.]?\s+\b(?:Handle|Title|Vendor|Type|Tags|Published|Option\d*\s+Name|Option\d*\s+Value|Option|Variant|Image|SKU|Price|Status|Category)\b\s*:|$)/i
5239
+ );
5240
+ if (descriptionMatch == null ? void 0 : descriptionMatch[1]) return descriptionMatch[1];
5241
+ return null;
5242
+ }
5243
+ static getProductDescriptionValue(meta, config, trainedSchema) {
5244
+ const mapped = this.getDynamicVal(meta, "description", config, trainedSchema);
5245
+ if (mapped !== void 0 && mapped !== meta.content && mapped !== meta.text) return mapped;
5246
+ const preferredKeys = [
5247
+ "body_html",
5248
+ "body html",
5249
+ "bodyHtml",
5250
+ "description",
5251
+ "summary",
5252
+ "details",
5253
+ "body"
5254
+ ];
5255
+ for (const key of preferredKeys) {
5256
+ const match = Object.keys(meta).find(
5257
+ (candidate) => this.normalizeComparableField(candidate) === this.normalizeComparableField(key)
5258
+ );
5259
+ if (match && meta[match] !== void 0 && meta[match] !== null) return meta[match];
5260
+ }
5261
+ return void 0;
5262
+ }
5263
+ static cleanProductDescription(raw) {
5264
+ if (raw === null || raw === void 0) return void 0;
5265
+ const extracted = this.extractProductDescriptionFromContent(String(raw));
5266
+ if (extracted && extracted !== String(raw)) return this.cleanProductDescription(extracted);
5267
+ const text = String(raw).replace(/<[^>]*>/g, " ").replace(/&nbsp;/gi, " ").replace(/&amp;/gi, "&").replace(/&quot;/gi, '"').replace(/&#39;/gi, "'").replace(/\[[^\]]*TYPE[^\]]*\]/gi, " ").replace(/\b(?:Handle|Title|Vendor|Type|Tags|Published|Option\d*\s+Name|Option\d*\s+Value|Option|Variant|Image|SKU|Price|Status|Category)\s*:\s*[^,.\n:]+[,.]?/gi, " ").replace(/\bBody\s*\(HTML\)\s*:\s*/gi, " ").replace(/\b(?:Description|Summary|Details|Body|Content)\s*:\s*/gi, " ").replace(/\s+/g, " ").trim();
5268
+ return text || void 0;
5269
+ }
5270
+ // ─── Visualization Prompt ─────────────────────────────────────────────────
5271
+ static buildVisualizationSystemPrompt() {
5272
+ return `You are a data visualization expert embedded in a RAG chat system.
5273
+ You will receive a user question, a pre-computed INTENT object, and structured data from a vector database.
5274
+ Your ONLY job is to return a single JSON object describing how to visualize the data.
5275
+ The INTENT object is authoritative \u2014 honor it. For example:
5276
+ - If intent.wantsExplicitTable is false, never return type "table".
5277
+ - If intent.isTemporal is true, prefer line_chart.
5278
+ - If intent.visualizationHint is "comparison" or "ranking", prefer bar_chart.
5279
+ - If intent.visualizationHint is "composition", prefer pie_chart.
5280
+ - If intent.recommendedChart is unsupported by the response schema, use the nearest supported type.
5281
+ - Always respond in the language specified by intent.language.
5282
+
5283
+ Return ONLY a valid JSON object \u2014 no markdown fences, no prose.
5284
+
5285
+ {
5286
+ "type": "bar_chart" | "horizontal_bar" | "line_chart" | "pie_chart" | "histogram" | "scatter_plot" | "radar_chart" | "metric_card" | "geo_map" | "table" | "text",
5287
+ "title": "concise descriptive title",
5288
+ "description": "one sentence describing the visualization",
5289
+ "data": <structured data per type below>
5290
+ }
5291
+
5292
+ DATA SHAPES:
5293
+ - bar_chart: [{ "category": string, "value": number }]
5294
+ - horizontal_bar: [{ "category": string, "value": number }]
5295
+ - histogram: [{ "category": string, "value": number }]
5296
+ - line_chart: [{ "timestamp": string, "value": number, "label": string }]
5297
+ - pie_chart: [{ "label": string, "value": number }]
5298
+ - scatter_plot:[{ "x": number, "y": number, "label": string }]
5299
+ - radar_chart: [{ "attribute": string, "<series1>": number, "<series2>": number, ... }]
5300
+ - metric_card: { "label": string, "value": number, "operation": "sum"|"average"|"count"|"min"|"max"|"median" }
5301
+ - geo_map: [{ "category": string, "value": number }]
5302
+ - table: { "columns": string[], "rows": (string|number)[][] }
5303
+ - text: { "content": "A concise plain-language answer." }
5304
+
5305
+ RULES:
5306
+ 1. Aggregate values \u2014 never pass raw nested objects in chart arrays.
5307
+ 2. All "value" fields must be numbers.
5308
+ 3. Cap bar/line/pie at 12 data points.
5309
+ 4. Use dollar signs only for monetary prices, not for stock quantities or years.
5310
+ 5. If no relevant data is found, return text: "I cannot answer this question based on the available information."`;
5311
+ }
5312
+ static buildContextSummary(sources, maxChars = 6e3) {
5313
+ const items = sources.map((s, i) => {
5314
+ var _a, _b, _c, _d;
5315
+ return {
5316
+ index: i + 1,
5317
+ content: (_b = (_a = s.content) == null ? void 0 : _a.substring(0, 400)) != null ? _b : "",
5318
+ metadata: (_c = s.metadata) != null ? _c : {},
5319
+ score: (_d = s.score) != null ? _d : 0
5320
+ };
5321
+ });
5322
+ const full = JSON.stringify(items, null, 2);
5323
+ if (full.length <= maxChars) return full;
5324
+ const partial = [];
5325
+ let chars = 2;
5326
+ for (const item of items) {
5327
+ const chunk = JSON.stringify(item);
5328
+ if (chars + chunk.length + 2 > maxChars) break;
5329
+ partial.push(item);
5330
+ chars += chunk.length + 2;
5331
+ }
5332
+ return JSON.stringify(partial, null, 2) + "\n// ... truncated";
5333
+ }
5334
+ };
5335
+
5336
+ // src/rendering/RendererRegistry.ts
5337
+ var TextRendererStrategy = class {
5338
+ constructor() {
5339
+ this.type = "text";
5340
+ }
5341
+ render(data, options) {
5342
+ const title = (options == null ? void 0 : options.title) || "Information";
5343
+ if (typeof data === "string") {
5344
+ return { type: "text", title, data: { content: data } };
5345
+ }
5346
+ const docs = Array.isArray(data) ? data : [];
5347
+ const text = docs.map((d) => d.content).join("\n\n");
5348
+ return { type: "text", title, data: { content: text || "No detailed content available." } };
5349
+ }
5350
+ };
5351
+ var TableRendererStrategy = class {
5352
+ constructor() {
5353
+ this.type = "table";
5354
+ }
5355
+ render(data, options) {
5356
+ const docs = Array.isArray(data) ? data : [];
5357
+ const query = (options == null ? void 0 : options.query) || "";
5358
+ return UITransformer.transform(query, docs, void 0, void 0, {
5359
+ visualizationHint: "table",
5360
+ recommendedChart: "table",
5361
+ filterInStockOnly: false,
5362
+ wantsExplicitTable: true,
5363
+ isTemporal: false,
5364
+ isComparison: true,
5365
+ language: "en"
5366
+ });
5367
+ }
5368
+ };
5369
+ var CarouselRendererStrategy = class {
5370
+ constructor() {
5371
+ this.type = "carousel";
5372
+ }
5373
+ render(data, options) {
5374
+ const docs = Array.isArray(data) ? data : [];
5375
+ const query = (options == null ? void 0 : options.query) || "";
5376
+ return UITransformer.transform(query, docs, void 0, void 0, {
5377
+ visualizationHint: "product_browse",
5378
+ recommendedChart: "text",
5379
+ filterInStockOnly: false,
5380
+ wantsExplicitTable: false,
5381
+ isTemporal: false,
5382
+ isComparison: false,
5383
+ language: "en"
5384
+ });
5385
+ }
5386
+ };
5387
+ var ChartRendererStrategy = class {
5388
+ constructor() {
5389
+ this.type = "chart";
5390
+ }
5391
+ render(data, options) {
5392
+ const docs = Array.isArray(data) ? data : [];
5393
+ const query = (options == null ? void 0 : options.query) || "";
5394
+ const chartType = (options == null ? void 0 : options.chartType) || "bar";
5395
+ let hint = "comparison";
5396
+ let rec = "bar_chart";
5397
+ if (chartType === "line") {
5398
+ hint = "trend";
5399
+ rec = "line_chart";
5400
+ } else if (chartType === "pie") {
5401
+ hint = "composition";
5402
+ rec = "pie_chart";
5403
+ } else if (chartType === "scatter") {
5404
+ hint = "correlation";
5405
+ rec = "scatter_plot";
5406
+ }
5407
+ return UITransformer.transform(query, docs, void 0, void 0, {
5408
+ visualizationHint: hint,
5409
+ recommendedChart: rec,
5410
+ filterInStockOnly: false,
5411
+ wantsExplicitTable: false,
5412
+ isTemporal: chartType === "line",
5413
+ isComparison: chartType === "bar",
5414
+ language: "en"
5415
+ });
5416
+ }
5417
+ };
5418
+ var MixedRendererStrategy = class {
5419
+ constructor() {
5420
+ this.type = "mixed";
5421
+ }
5422
+ render(data, options) {
5423
+ const docs = Array.isArray(data) ? data : [];
5424
+ const sections = (options == null ? void 0 : options.sections) || [];
5425
+ const sectionPayloads = sections.map((s) => {
5426
+ const strategy = RendererRegistry.getStrategy(s.type);
5427
+ return {
5428
+ type: s.type,
5429
+ title: s.title,
5430
+ payload: strategy.render(data, __spreadProps(__spreadValues({}, options), { chartType: s.chartType, title: s.title }))
5431
+ };
5432
+ });
5433
+ return {
5434
+ type: "table",
5435
+ // Fallback container type for compatibility
5436
+ title: (options == null ? void 0 : options.title) || "Composite Response",
5437
+ description: `Mixed payload containing ${sectionPayloads.length} visual sections`,
5438
+ data: { sections: sectionPayloads }
5439
+ };
5440
+ }
5441
+ };
5442
+ var _RendererRegistry = class _RendererRegistry {
5443
+ /**
5444
+ * Register a new renderer strategy.
5445
+ * Enables seamless addition of custom visualizers (Timeline, Maps, Flow Diagrams, etc.).
5446
+ */
5447
+ static registerStrategy(strategy) {
5448
+ this.strategies.set(String(strategy.type).toLowerCase(), strategy);
5449
+ }
5450
+ /**
5451
+ * Retrieve a registered renderer strategy by type string.
5452
+ */
5453
+ static getStrategy(type) {
5454
+ const key = type.toLowerCase();
5455
+ const strategy = this.strategies.get(key);
5456
+ if (!strategy) {
5457
+ return this.strategies.get("text");
5458
+ }
5459
+ return strategy;
5460
+ }
5461
+ /**
5462
+ * Check if a renderer strategy is registered.
5463
+ */
5464
+ static hasStrategy(type) {
5465
+ return this.strategies.has(type.toLowerCase());
5466
+ }
5467
+ /**
5468
+ * List all registered strategy types.
5469
+ */
5470
+ static getRegisteredTypes() {
5471
+ return Array.from(this.strategies.keys());
5472
+ }
5473
+ };
5474
+ _RendererRegistry.strategies = /* @__PURE__ */ new Map();
5475
+ _RendererRegistry.registerStrategy(new TextRendererStrategy());
5476
+ _RendererRegistry.registerStrategy(new TableRendererStrategy());
5477
+ _RendererRegistry.registerStrategy(new CarouselRendererStrategy());
5478
+ _RendererRegistry.registerStrategy(new ChartRendererStrategy());
5479
+ _RendererRegistry.registerStrategy(new MixedRendererStrategy());
5480
+ var RendererRegistry = _RendererRegistry;
5481
+
3577
5482
  // src/exceptions/index.ts
3578
5483
  var RetrivoraError = class extends Error {
3579
5484
  constructor(message, code, details) {
@@ -3623,16 +5528,21 @@ var AuthenticationException = class extends RetrivoraError {
3623
5528
  ConfigurationException,
3624
5529
  DocumentUpload,
3625
5530
  EmbeddingFailedException,
5531
+ IntentClassifier,
3626
5532
  MessageBubble,
3627
5533
  ObservabilityPanel,
3628
5534
  ProductCard,
3629
5535
  ProductCarousel,
3630
5536
  ProviderNotFoundException,
3631
5537
  RateLimitException,
5538
+ RendererRegistry,
3632
5539
  RetrievalException,
3633
5540
  RetrivoraError,
5541
+ RuleEngine,
3634
5542
  SourceCard,
5543
+ VisualizationDecisionEngine,
3635
5544
  addSynonyms,
5545
+ decideVisualization,
3636
5546
  useConfig,
3637
5547
  useRagChat
3638
5548
  });